12.1. 기본 명령어

명령어 목록

ls

파일 "목록"을 보여주는 기본 명령어로서, 너무 간단해서 과소평가되기 쉬운 명령어지만 그렇지 않습니다. 예를 들면, 하위 디렉토리까지 표시해주는 -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, tac

catconcatenate (연속으로 잇다)에서 따온 말로써 파일을 표준출력으로 뿌려 줍니다. 보통 재지향(>이나 >>)과 같이 써 여러 파일을 한 파일로 만들어 줍니다.
cat filename cat file.1 file.2 file.3 > file.123
cat-n 옵션을 주면 대상 파일의 모든 줄 앞에 줄번호를 붙여 줍니다. -b 옵션은 빈 줄이 아닌 줄에만 줄번호를 붙여 줍니다. -v 옵션은 출력할 수 없는 문자들을 ^ 표기법으로 보여 줍니다.

예 12-21예 12-17를 참고하세요.

taccat을 거꾸로 쓴 것인데, 파일 끝에서부터 거꾸로 보여줍니다.

rev

파일의 각 줄을 거꾸로 뒤집어 표준출력으로 내보냅니다. 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
	      

cp

파일 복사(copy) 명령어입니다. cp file1 file2file1file2로 복사하는데 file2가 이미 존재한다면 덮어 씁니다(예 12-5 참고).

작은 정보: 특별히 유용한 옵션은 아카이브 옵션, -a(디렉토리 트리 전체를 복사할 때)와 재귀 옵션인 -r-R입니다.

mv

파일 이동(move) 명령어입니다. cprm을 합친 것과 동일합니다. 여러개의 파일을 한 디렉토리로 옮기거나 디렉토리 이름을 바꿀 때 쓰일 수도 있습니다. 스크립트에서 mv가 쓰이는 예제는 예 9-13예 A-3을 참고하세요.

rm

파일을 삭제(remove). -f 옵션은 읽기 전용 파일도 강제로 지워줍니다.

주의

재귀 옵션인 -r과 같이 쓰이면 디렉토리 트리 이하 모든 파일을 지워버립니다.

rmdir

디렉토리를 삭제. 삭제할 디렉토리안에는 안 보이는 "도트 파일" [1] 을 포함해서 아무 파일도 없어야 이 명령어가 제대로 실행됩니다.

mkdir

디렉토리 만들기. 새로운 디렉토리를 생성해 줍니다. mkdir -p project/programs/December 라고 하면 주어진 디렉토리를 만들어 주는데 -p 옵션을 주면 자동으로 필요한 부모 디렉토리가 만들어 집니다.

chmod

파일의 속성을 변경(예 11-8 참고).

chmod +x filename
# 모든 사용자가 "filename" 을 실행시킬수 있게 함.

chmod u+s filename
# "filename" 소유권에 "suid" 비트를 걸어줍니다.
# 이렇게 하면 일반 사용자가 "filename"을 실행시켰을 때 그 파일 사용자의 
# 권한을 갖습니다.
# (이것은 쉘 스크립트에는 해당되지 않습니다.)

chmod 644 filename
# "filename"에 대해 파일 소유자는 읽기/쓰기 가능하고 다른 사람들은 읽기만 하게
# 해 줍니다(8진 모드).

chmod 1777 directory-name
# 모든 사람들이 디렉토리안에서 읽고 쓰고 실행할 수 있게 하고 또한
# "스티키 비트"를 설정합니다.
# 이렇게 하면 오직 그 디렉토리의 소유자나 그 디렉토리에 들어 있는 파일의 
# 소유자나 루트만(당연하죠?) 특정 파일을 지울 수 있습니다.

chattr

파일 속성을 바꿔줍니다. 위에서 설명한 chmod와 똑같은 역할을 하지만 문법이 약간 다르고 오직 ext2 파일 시스템에 대해서만 동작합니다.

ln

이미 존재하는 파일에 대한 링크를 만들어 줍니다. 심볼릭이나 "소프트" 링크 플래그를 나타내는 -s 옵션을 많이 씁니다. 참조되는 원래의 파일이 하나 이상의 이름을 갖도록 해 주기 때문에 별칭보다는 더 좋은 방법입니다(예 5-6 참고).

ln -s oldfile newfile 라고 하면 이미 존재하는 oldfile에 대한 새로운 링크 파일인 newfile을 만들어 줍니다.

주석

[1]

~/.Xdefaults처럼 점으로 시작하는 파일들이 있는데 그런 파일들은 보통의 ls만으로는 나타나지 않고, 실수로 rm -rf *라고 해도 지워지지 않습니다. 도트 파일은 보통 셋업이나 설정을 위해서 사용자의 홈디렉토리에서 놓여집니다.