파일 "목록"을 보여주는 기본 명령어로서, 너무 간단해서 과소평가되기 쉬운 명령어지만 그렇지 않습니다. 예를 들면, 하위 디렉토리까지 표시해주는 -R 옵션을 쓰면 디렉토리 구조를 트리같은 형태로 보여줍니다. 흥미로운 다른 옵션들로는, 파일 크기대로 정렬해주는 -S, 변경 시간으로 정렬해주는 -t, 파일의 inode를 보여주는 -i 가 있습니다(예 12-3 참고).
예 12-1. CDR 디스크를 구울 때 ls로 목차 만들기
#!/bin/bash SPEED=2 # 여러분의 CDR 속도에 맞게 수정하세요. IMAGEFILE=cdimage.iso CONTENTSFILE=contents DEFAULTDIR=/opt # CDR 을 자동으로 구워주는 스크립트. # Joerg Schilling 의 "cdrecord" 패키지 사용. # (http://www.fokus.gmd.de/nthp/employees/schilling/cdrecord.html) # 일반 사용자가 이 스크립트를 실행시키려면 cdrecord 에 # suid 가 걸려 있어야 합니다(루트로 chmod u+s /usr/bin/cdrecord). if [ -z "$1" ] then IMAGE_DIRECTORY=$DEFAULTDIR # 명령어줄에서 지정 안 했을 경우의 기본 디렉토리. else IMAGE_DIRECTORY=$1 fi ls -lRF $IMAGE_DIRECTORY > $IMAGE_DIRECTORY/$CONTENTSFILE # "l" 옵션은 "자세한"(long) 파일 목록을 보여줍니다. # "R" 옵션은 하위 디렉토리까지 보여줍니다. # "F" 옵션은 파일 타입을 표시해 줍니다(예를 들면, 디렉토리인 경우에는 이름 끝에 / 를 붙임. echo "목차를 만드는 중." mkisofs -r -o $IMAGFILE $IMAGE_DIRECTORY echo "ISO9660 파일 시스템 이미지($IMAGEFILE) 만드는 중." cdrecord -v -isosize speed=$SPEED dev=0,0 $IMAGEFILE echo "디스크를 굽고 있습니다." echo "시간이 오래 걸리니까 기다리기 바랍니다." exit 0 |
cat은 concatenate (연속으로 잇다)에서 따온 말로써 파일을 표준출력으로 뿌려 줍니다. 보통 재지향(>이나 >>)과 같이 써 여러 파일을 한 파일로 만들어 줍니다.
cat filename cat file.1 file.2 file.3 > file.123 |
tac은 cat을 거꾸로 쓴 것인데, 파일 끝에서부터 거꾸로 보여줍니다.
파일의 각 줄을 거꾸로 뒤집어 표준출력으로 내보냅니다. tac과 다른 점은 줄의 순서는 그대로 살리고 각 줄을 줄 끝에서 줄 처음으로 뒤집는다는 것입니다.
bash$ cat file1.txt This is line 1. This is line 2. bash$ tac file1.txt This is line 2. This is line 1. bash$ rev file1.txt .1 enil si sihT .2 enil si sihT |
파일 복사(copy) 명령어입니다. cp file1 file2은 file1을 file2로 복사하는데 file2가 이미 존재한다면 덮어 씁니다(예 12-5 참고).
작은 정보: 특별히 유용한 옵션은 아카이브 옵션, -a(디렉토리 트리 전체를 복사할 때)와 재귀 옵션인 -r과 -R입니다.
파일 이동(move) 명령어입니다. cp와 rm을 합친 것과 동일합니다. 여러개의 파일을 한 디렉토리로 옮기거나 디렉토리 이름을 바꿀 때 쓰일 수도 있습니다. 스크립트에서 mv가 쓰이는 예제는 예 9-13와 예 A-3을 참고하세요.
파일을 삭제(remove). -f 옵션은 읽기 전용 파일도 강제로 지워줍니다.
주의 |
재귀 옵션인 -r과 같이 쓰이면 디렉토리 트리 이하 모든 파일을 지워버립니다. |
디렉토리를 삭제. 삭제할 디렉토리안에는 안 보이는 "도트 파일" [1] 을 포함해서 아무 파일도 없어야 이 명령어가 제대로 실행됩니다.
디렉토리 만들기. 새로운 디렉토리를 생성해 줍니다. mkdir -p project/programs/December 라고 하면 주어진 디렉토리를 만들어 주는데 -p 옵션을 주면 자동으로 필요한 부모 디렉토리가 만들어 집니다.
파일의 속성을 변경(예 11-8 참고).
chmod +x filename # 모든 사용자가 "filename" 을 실행시킬수 있게 함. chmod u+s filename # "filename" 소유권에 "suid" 비트를 걸어줍니다. # 이렇게 하면 일반 사용자가 "filename"을 실행시켰을 때 그 파일 사용자의 # 권한을 갖습니다. # (이것은 쉘 스크립트에는 해당되지 않습니다.) |
chmod 644 filename # "filename"에 대해 파일 소유자는 읽기/쓰기 가능하고 다른 사람들은 읽기만 하게 # 해 줍니다(8진 모드). |
chmod 1777 directory-name # 모든 사람들이 디렉토리안에서 읽고 쓰고 실행할 수 있게 하고 또한 # "스티키 비트"를 설정합니다. # 이렇게 하면 오직 그 디렉토리의 소유자나 그 디렉토리에 들어 있는 파일의 # 소유자나 루트만(당연하죠?) 특정 파일을 지울 수 있습니다. |
파일 속성을 바꿔줍니다. 위에서 설명한 chmod와 똑같은 역할을 하지만 문법이 약간 다르고 오직 ext2 파일 시스템에 대해서만 동작합니다.
이미 존재하는 파일에 대한 링크를 만들어 줍니다. 심볼릭이나 "소프트" 링크 플래그를 나타내는 -s 옵션을 많이 씁니다. 참조되는 원래의 파일이 하나 이상의 이름을 갖도록 해 주기 때문에 별칭보다는 더 좋은 방법입니다(예 5-6 참고).
ln -s oldfile newfile 라고 하면 이미 존재하는 oldfile에 대한 새로운 링크 파일인 newfile을 만들어 줍니다.
[1] | ~/.Xdefaults처럼 점으로 시작하는 파일들이 있는데 그런 파일들은 보통의 ls만으로는 나타나지 않고, 실수로 rm -rf *라고 해도 지워지지 않습니다. 도트 파일은 보통 셋업이나 설정을 위해서 사용자의 홈디렉토리에서 놓여집니다. |