리눅스 파일 다루기
이전 포스팅에서는 디렉토리와 관련되 명령을 살펴보았다. 이제 파일을 다뤄보자. 파일과 관련된 명령은 파일의 내용을 보는 명령, 파일을 복사하는 명령, 파일을 삭제하고 이동하는 명령, 하드 링크와 심벌릭 링크를 생성하는 명령, 빈 파일을 만드는 명령이 있다. 이 명령들을 각각 살펴보자.
1. 파일 내용 연속 출력하기
파일 내용을 출력하는 명령은 기본적으로 텍스트 파일의 내용을 출력한다. 실행 파일과 같은 바이너리 파일의 경우 일반적인 명령으로 내용을 확인할 수 없다. cat 명령은 텍스트 파일의 내용을 화면에 연속으로 출력한다.
cat |
기능 : 파일의 내용을 출력한다. 형식 : cat [옵션] 파일명... 옵션 : -n : 행 번호를 붙여서 출력한다. 사용 예 : cat file1, cat -n file1 |
2. 화면 단위로 파일 내용 출력하기
more |
기능 : 파일 내용을 화면 단위로 출력한다. 형식 : more [옵션] 파일명... 옵션 : + 행 번호 : 출력을 시작할 행 번호를 지정한다. 사용 예 : more file1 |
more 명령은 화면 단위로 파일 내용을 출력한 뒤, 아직 출력되지 않은 내용이 더 있으면 화면 하단에 '--more--(0%)'와 같이 알려준다. more 명령으로 파일 내용의 첫 화면이 출력된 후 스페이스바를 누르면 다음 화면이 출력되고, 엔터 키를 누르면 한 줄씩 스크롤된다. '/문자열'을 입력하면 해당 문자열을 찾아 이동한다. more 명령을 종료하려면 q 키를 누른다.
3. 개선된 화면 단위 파일 내용 출력하기
more 명령으로 파일 내용을 화면 단위로 출력할 때 한 가지 불편한 점은 이미 스크롤되어 지나간 내용을 다시 볼수 없다는 것이다. 이를 개선한 명령이 less이다. less 명령으로 파일 내용을 앞뒤로 스크롤하며 이동할 수 있다.
less |
기능 : 파일 내용을 화면 단위로 출력한다. 형식 : less 파일명... 사용 예 : less file1 |
키 |
동작 |
j |
한 줄씩 다음 행으로 스크롤한다. |
k |
한 줄씩 다음 행으로 스크롤한다. |
스페이스, 컨트롤 + f |
다음 화면으로 이동한다. |
컨트롤 + b |
이전 화면으로 이동한다. |
화면을 이동할 때 사용하는 키는 이후에 포스팅할 vi편집기에서 사용하는 키이다. 위는 주요 키를 표로 정해 둔 내용이다.
4. 파일 뒷부분 출력하기
tail 명령은 파일의 뒷부분 몇 행을 출력한다. 기본 값은 10으로 파일의 뒷부분 10행이 출력된다.
tail |
기능 : 파일의 뒷부분 몇 행을 출력한다. 형식 : tail [옵션] 파일명... 옵션 : + 행 번호 : 지정한 행부터 끝까지 출력한다. -숫자 : 화면에 출력할 행의 수를 지정한다 (기본값은 10). -f : 파일 출력이 종료되지 않고 주기적으로 계속 출력한다. |
5. 파일 복사하기
파일을 복사할 대는 cp(copy) 명령을 사용한다. cp 명령으로 디렉토리도 복사할 수 있다.
cp |
기능 : 파일이나 디렉토리를 복사한다. 형식 : cp [옵션] 파일명1/디렉토리명1 파일명2/디렉토리명2 옵션 : -i : 대화식 복사 방법으로 파일명2가 이미 존재할 경우 덮어쓸 것인지 물어본다. -r : 디렉토리를 복사할 때 지정한다. 사용 예 : cp file1 file2 cp f1 f2 f3 dir1 cp -r dir1 dir2 |
cp 명령의 첫 번째 인자는 원본 파일이나 디렉토리를 지정하고, 두 번째 인자는 목적지 파일이나 디렉토리를 지정한다. 두 인자를 어떻게 구성하느냐에 따라서 다양한 결과가 나온다.
두 인자가 모두 파일인 경우
두 인자가 모두 파일인 경우는 파일을 다른 파일로 복사하는 것이다. 두 번째 인자로 지정한 파일명이 존재하지 않는 파일의 경우에는 원본 파일을 복사하여 새로 만든다. 만약 이미 존재하는 파일이라면 원본 파일의 내용으로 덮어쓰고 원래 내용은 없어진다. 즉, 복사되는 것이다.
두 번째 인자가 디렉토리인 경우
첫 번째 인자는 파일이고 두 번째 인자는 디렉토리인 경우, 파일을 해당 디렉토리 아래에 복사한다. 당연히 디렉토리는 미리 만들어져 있어야 한다.
인자를 여러 개 지정할 경우
cp 명령에서 첫 번째 인자의 자리에 파일명을 여러 개 지정할 수있다. 이때 두 번째 인자는 반드시 디렉토리여야 한다. 이럴 경우 마지막에 지정한 디렉토리로 앞서 지정한 파일들이 모두 복사된다.
6. 파일 이동하기
파일을 다른 디렉토리로 이동하거나 파일명을 바꿀 때는 mv(move) 명령을 사용한다. 디렉토리를 이동하거나 디렉토리명을 바꿀 때도 mv 명령을 사용한다.
mv |
기능 : 파일을 이동한다. 형식 : mv [옵션] 파일명1/디렉토리명1 파일명2/디렉토리명2 옵션 : -i : 파일명2/디렉토리명2가 존재하면 덮어쓸 것인지 물어본다. 사용 예 : mv file1 file2 |
mv 명령의 첫 번째 인자는 원본 파일명이나 디렉토리명을 지정하며, 두 번째 인자는 목적지 파일명이나 디렉토리명을 지정한다. cp 명령처럼 첫 번째 인자와 두 번째 인자의 구성에 따라 mv 명령 사용의 결과도 다양하다.
파일을 파일로 이동하기
파일을 다른 파일로 이동하는 것은 결국 원본 파일의 파일명을 바꾸는 작업이다. 만약 두 번째 인자로 지정한 파일명이 이미 존재하는 파일이면 원본 파일의 내용으로 덮어쓰고 기존의 내용이 삭제 된다. 두 번째 인자로 지정한 파일명이 존재하지 않는 파일이라면 새 파일이 생긴다.
파일을 다른 디렉토리로 이동하기
두 번째 인자로 디렉토리를 지정할 경우 원본 파일을 지정한 디렉토리로 이동한다. 이때 디렉토리만 지정하는지, 디렉토리와 파일명을 함께 지정하는지에 따라 이동되는 파일의 이름이 달라질 수도 있다.
여러 파일을 디렉토리로 이동하기
mv 명령으로 여러 개 파일을 지정한 디렉토리로 한번에 이동할 수 있다. 첫 번째 인자에 파일명을 여러 개 지정하면 되는데, 이때 두 번째 인자는 반드시 디렉토리여야 한다. 명령을 실행하면 지정한 디렉토리로 파일이 모두 이동한다.
디렉토리를 디렉토리로 이동하기
mv 명령에서 인자를 모두 디렉토리로 지정하면 디렉토리가 이동한다. 만약 두 번째 인자가 기존에 있던 디렉토리가 아닐 경우에는 디렉토리명이 변경된다.
7. 파일 삭제하기
파일을 삭제하는 명령은 rm(remove)이다. -r 옵션을 지정하면 디렉토리도 삭제할 수 있다.
rm |
기능 : 파일을 삭제한다. 형식 : rm [옵션] 파일명/디렉토리명... 옵션 : -i : 지정한 파일을 삭제할 것인지 대화식으로 확인한다. -r : 지정한 디렉토리를 삭제한다. 사용 예 : rm file, rm -r dir |
rm 명령을 사용할 때 삭제할 파일을 인자로 지정하면 해당 파일이 삭제된다. 이때 삭제할 것인지 물어보지도 않고, 윈도우처럼 파일이 휴지통에 담기는 것도 아니다. 그냥 바로 삭제되어 복구할 수 없으므로 파일을 삭제할 때는 신중해야 한다. 특히 일반 사용자가 아니라 시스템 관리자가 시스템의 중요한 파일을 삭제 한다면 전체 시스템에 심각한 영향을 줄 수 있으므로 주의해야 한다.
디렉토리 삭제하기
rm 명령으로 디렉토리도 삭제할 수 있다. 디렉토리도 파일이기 때문이다. 이전 포스팅에서 언급했던 rmdir 명령으로도 디렉토리를 지울 수 있는데, 이 경우에는 지우려는 디렉토리가 비어 있어야 한다. 그러나 rm 명령은 디렉토리가 비어 있지 않아도 삭제할 수 있다. rm 명령으로 디렉토리를 지울 때는 -r 옵션을 지정해야 한다. 삭제된 디렉토리는 복구할 수 없으므로 매우 주의를 기울여야 한다.
8. 파일 링크
파일 링크는 기존에 있는 파일에 새로운 파일명을 붙이는 것이다. 복잡한 디렉토리 계층 구조를 포함하여 파일명이 복잡할 경우, 짧게 줄인 다른 이름을 붙여서 간단하게 사용할 때 유용하다. 파일 링크에는 하드 링크와 심벌릭 링크가 있다.
하드 링크는 기존 파일에 새로운 파일명을 추가로 생성하는 것이고, 심벌릭 링크는 원본 파일을 가리키는 새로운 파일을 만드는 것이다. 심벌릭 링크는 윈도우의 바로가기 기능과 개념이 같다고 생각하면 된다.
하드 링크 만들기 : ln
하드 링크는 ln 명령으로 만든다. 리눅스에서는 파일에 여러 개의 이름을 붙일 수 있는데, 이때 붙이는 파일명을 하드 링크라고 한다.
ln |
기능 : 파일의 링크를 생성한다. 형식 : ln [옵션] 원본 파일명 링크 파일명 옵션 : -s : 심벌릭 링크 파일을 생성한다. 사용 예 : ln test intest, ln -s test intest |
파일 링크를 너무 많이 걸어놓으면 시스템이 꼬일 수 있기 때문에 초보자레벨에서는 가급적 링크는 가급적 사용하지 않는게 좋다.
9. 유용한 파일 관련 명령
파일에 관한 유용한 명령이 아주 많지만 여기서는 흔히 사용하는 touch. grep, find, whereis, which 명령만 간단하게 살펴보자.
빈 파일 만들기, 수정 시간 변경하기 : touch
touch 명령으로는 빈 파일을 새로 생성하거나 파일의 마지막 접근 시간 또는 수정 시간을 변경한다. touch에 인자로 주어진 파일이 존재하지 않으면 내용이 없는 빈 파일을 생성하고, 파일이 존재하면 현재 시간 또는 옵션에 지정한 시간으로 파일의 관련 시간을 변경한다.
touch |
기능 : 빈 파일을 생성한다. 형식 : touch [-acm] [-r ref_file | -t time] 파일 옵션 : -a : 접근 시간만 변경한다. -m:수정 시간만 변경한다. -t [[CC]YY]MMDDhhmm[.ss] : 시간을 직접 입력한다. 사용 예 : touch test |
파일 내용 검색하기 : grep
grep 명령은 파일 내에서 특정 문자열을 검색할 때 사용한다. grep 명령은 정규 표현식을 이용하여 복잡한 검색도 가능하지만 여기서는 간단한 문자열 검색 기능만 살펴본다. 자세한 것은 'man grep'이나 다른 유닉스, 리눅스 관련 자료를 참고하기 바란다.
grep |
기능 : 지정한 패턴을 포함하는 행을 찾는다. 형식 : grep [옵션] 패턴 [파일명] 옵션 : -i : 대, 소문자를 모두 검색한다. -l : 해당 패턴을 포함하는 파일 이름을 출력한다. -n : 행 번호를 출력한다. 사용 예 : grep root /etc/passwd grep -n unix ~/*.txt grep -l hello *.c |
파일 찾기 : fine
find 명령은 리눅스의 디렉토리 계층 구조에서 특정 파일이 어느 디렉토리에 있는지 찾아주는 것이다. grep은 파일 내용을 검색하는 데 반해 find는 파일 생성 일자, 이름, 파일 소유자등 다양한 조건에 맞는 파일을 찾는다.
find |
기능 : 조건에 맞는 파일을 지정한 위치에서 찾는다. 형식 : find 경로 검색 조건 [동작] 옵션 : -name filename : 파일 이름으로 검색한다. -type 파일 종류 : 파일의 종류로 검색한다. -user loginID : 지정한 사용자가 소유한 모든 파일을 검색한다. -perm 접근 권한 : 지정한 사용 권한과 일치하는 파일을 검색한다. 동작 : -exec 명령{} \; : 검색된 파일에 명령을 실행한다. -ok 명령 {}\; : 사용자의 확인을 받아서 명령을 실행한다. -print : 검색된 파일의 절대 경로명을 화면에 출력한다.(기본 동작) -ls : 검색 결과를 긴 목록 형식으로 출력한다. 사용 예 : $find ~ -name hello.c $fine /tmp -user user10 -exec rm {}\; |
명령의 위치 찾기 : whereis, which
whereis나 which 명령은 특정 명령이 어느 위치에 있는지를 찾아서 절대 경로를 출력한다.
whereis 명령은 지정한 명령을 고정된 특정 경로에서 검색하며, 사용 형식은 다음과 같다.
whereis |
기능 : 지정된 경로에서 명령의 바이너리 파일이나 매뉴얼 파일의 위치를 찾는다. 형식 : whereis [옵션] 명령 옵션 : -b : 바이너리 파일만 검색한다. -m : 매뉴얼 파일만 검색한다. -s : 소스 파일만 검색한다. 사용 예 : whereis ls |
which 명령은 에일리어스나 PATH 환경 변수로 지정된 경로에서 파일을 찾는다. 에일리어스와 환경 변수는 차후에 다룰 것이다. PATH 변수는 시스템과 사용자마다 다르게 지정되어 있기 때문에 검색 결과가 다를 수 있다.
which |
기능 : 명령어 파일의 위치를 찾아서 그 경로나 에일리어스를 출력한다. 형식 : which 명령 사용 예 : which ls |
which 명령은 사용자 초기화 파일에 지정된 에일리어스를 먼저 찾아보므로 에일리어스가 지정된 명령의 경우에는 해당 에일리어스가 출력된다. 에일리어스가 없으면 PATH 환경 변수에 지정된 경로를 순서대로 찾아가며 명령어 파일이 있는지 검색한다. which 명령은 최대 하나의 경로만을 출력하며, 이 경로는 우리가 명령을 입력할 때 실행되는 파일이다.
[출처] [리눅스] 파일 다루기|작성자 피카츄