본문 바로가기

CS+/리눅스

리눅스 파일 다루기 - cat, more, less, tail,cp,mv, rm

몇몇 명령어들은 제가 다른 포스팅에서 다룬 적이 있는데요.

리눅스의 명령어들은 옵션에 따라서, 그리고 인자들의 상태에 따라서(존재유무,갯수) 결과가 전혀 다른데 이에 대한 설명이 부실한 면이 있었습니다. 이 때문에 다시 이 포스팅에 조금 더 디테일하게 정리를 했습니다.

 

Cat 

 

- 파일 내용을 출력하는 명령어

- 간단한 내용의 파일을 출력할 때 좋다. 

 

 

리눅스에 원래 있는 파일에 cat 명령을 사용해보겠습니다. 

 

 

/etc/hosts 파일에 간단한 데이터가 저장된 것을 확인할 수 있습니다. -n 옵션의 경우 행 번호가 같이 출력되도록 해줍니다. 

파일에 행 번호는 없습니다. -n 옵션을 통해 저희 눈에 보기 편하게 보여줍니다. 

 

 

More

 

 

-파일 내용을 화면 단위로 출력한다. 

-cat 명령은 연속적으로 출력하기에 간단한 내용 확인하기에는 좋지만, 내용이 많으면 스크롤되는 내용 확인이 어렵다. 이 때는 화면 단위로 파일 내용을 출력하는 more 명령을 사용한다. 

- 출력되지 않은 내용이 있으면 화면 하단에 '--More--(10%)' 와 같이 표기된다. 

 

 

이 때,

 

1) 스페이스바를 누르면 다음 화면이 화면 단위로 출력된다.(=스크롤 내려간다.)

2) '엔터'를 누르면 한 줄씩 스크롤 된다.

3) '/문자열'을 입력하면 해당 문자열로 찾아서 이동한다.

4) q 키를 누르면 종료된다. 

 

 

less

 

- 화면 단위로 출력한다.

- 하지만 more 과는 다르게 지나간 내용을 다시 볼 수 있다. (=파일 앞뒤로 스크롤하며 이동할 수 있다.)

- 마우스 스크롤을 내리면서 이동 가능.

- j : 한 줄씩 다음 행으로 스크롤 

-k: 한 줄씩 이전 행으로 스크롤

- space bar : 다음 화면으로 이동 

 

$ less /etc/services

 

 

tail

 

 

-파일 뒷부분의 일부 행들을 출력한다.(=끝에서 n번째 까지의 행 출력)

- 기본값은 10으로 되어 있다. (=마지막 행을 기준으로 10개의 행을 출력)

 

 

cp

 

- 파일이나 디렉터리를 복사한다. 

- 형식: cp [옵션] 파일1(또는 디렉터리1) 파일2(또는 디렉터리2)

-- 옵션:   -r  : 디렉터리를 복사할 때 지정. 

 

우선 mkdir -p 옵션을 사용해서 중간 디렉터리까지 한 번에 다 생성되로고 경로를 하나 만들어 줍니다. 

 

1) 두 인자 모두 파일일 때

 

cp /etc/hosts/ text1 명령어가 중간 좀 밑에 보이는데요. 

이 때에는 파일을 다른 파일로 복사합니다. 두 번째 인자가 존재하지 않으면 원본 파일을 복사해서 두번째 인자 이름으로 새 파일이 형성되고, 기존에 있다면 그 위에 덮어쓰고 원래 내용은 없어집니다. 즉, 복사해서 '덮어쓰기'되는 것입니다. 

 

2) 첫 번째 인자는 파일, 두 번째 인자는 디렉터리인 경우

 

cp text1 temp 

 

명령어가 그 경우인데요. 이 대는 디렉터리temp 하위에 text1 파일이 생깁니다. 위 캡쳐해서는 확인하는 모습이 안 나옵니다. 따로 확인해주세요 :) 

 

이 때, 복사하려는 디렉터리에 쓰기 권한이 있어야 복사가 됩니다. 없을 경우, 허가 거부 라고 나오니깐 주의해주세요. 

 

 

3) 여러 인자를 지정하는 경우

 

첫 번째 인자 자리에 여러 파일을 지정할 수 있습니다. 이 때 ,마지막 인자는 반드시 디렉터리여야 합니다. (위 실습 스샷 참고) 

 

4) 디렉터리 복사하기

 

디렉터리를 복사할 때는 -r 옵션이 들어가야 오류 메시지 없이 복사가 됩니다. 

 

mv

 

- 파일을 다른 디렉터리로 이동하거나 파일 명을 바꿀 때 사용한다.

- 첫 번째 인자는  원본 파일이나 디렉터리를 지정, 두 번째 인자는 목적지 파일이나 디렉터리를 지정한다.

- cp명령처럼 인자들의 구성에 따라 결과는 다양하게 나타난다.

 

1) 파일 -> 파일 

 

파일을 다른 파일로 이동하는 것은 잘 생각해보면, 원본 파일의 이름이 다른 이름으로 바뀌는 것이다. 만약, 두 번째 인자로 정한 목적 파일이 존재하면 원본 파일의 내용(=첫 번째 인자)이 덮어씌워지고 기존 내용이 삭제된다. 그러나 두 번째 인자로 지정한 파일이 존재하지 않는다면 새 파일이 생성된다. 

 

 

위 결과를 보면 text1  파일명이 data1 으로 바뀐 것을 알 수 있다. 

 

2) 파일을 다른 디렉터리로 이동하기 

 

두 번째 인자로 디렉터리가 지정되면 원본 파일이 해당 디렉터리로 이동한다. 

 

 

또한, 두 번째 인자에 디렉터리와 파일을 함께 지정하면, 파일(=첫 번째 인자)은 지정한 디렉터리로 이동하고 파일명도 바뀌게 된다. 위 캡쳐에서 

 

mv text1 temp/data2 

 

부분이 이에 해당된다. 

쓰기 권한이 없는 디렉터리로 파일을 이동하려면 당연히 오류가 발생한다. 

 

3) 여러 파일을 디렉터리로 이동하기 

 

첫 번째 인자에 파일을 여러 개 지정하면 디렉터리로 한 번에 이동할 수 있습니다. 이 때, 두번째 인자(명령어의 마지막 부분)는 반드시 디렉터리여야 합니다. 명령을 실행하면 지정한 디렉터리로 파일이 모두 이동합니다. 

 

 

 

4) 디렉터리 -> 디렉터리

 

mv 명령에서 인자가 모두 디렉터리면 첫 번째 인자의 디렉터리가 두 번째 인자의 디렉터리로 이동합니다. 

이 때, 두 번째 인자가 존재하지 않는 디렉터리면 디렉터리명이 변경됩니다.

두 번째 인자가 존재하는 경우, 원본 디렉터리는 두 번째 인자인 디렉터리 아래로 이동합니다. 

(아래 예에서 이 2가지 경우를 확인할 수 있습니다.) 

 

 

 

r m

 

 

- 파일을 삭제하는 명령입니다. 

- --  -r 옵션을 지정하면 디렉터리를 삭제합니다. 

 

rmdir 을 저번에 다룬적이 있는데 이 명령어의 경우 빈 디렉터리만을 삭제하기 디렉터리에 파일이 하나라도 있다면, 

rm -r 을 통해서 디렉터리를 삭제해야 합니다. 

 

아래 실습 사진을 참고하셔서 이해하시면 됩니다. 

-i 옵션은 앞에서 몇 번 말했지만 정말 지울건지 재차 확인차 묻게 해주는 옵션이며 리눅스에서 커맨드의 옵션들은 같이 붙여서 사용이 됩니다. 아래 커맨드에 나온 -ri 옵션처럼 말이죠.