7.2. 파일 테스트 연산자

다음 조건이 맞다면 참을 리턴

-e

존재하는 파일

-f

보통 파일(디렉토리나 디바이스 파일이 아님)

-s

파일 크기가 0 이 아님

-d

파일이 디렉토리

-b

파일이 블럭 디바이스(플로피나 시디롬 등등)

-c

파일이 문자 디바이스(키보드, 모뎀, 사운드 카드 등등)

-p

파일이 파이프

-h

파일이 심볼릭 링크

-L

파일이 심볼릭 링크

-S

파일이 소켓

-t

파일 디스크립터가 터미널 디바이스와 연관이 있음

스크립트의 표준입력([ -t 0 ])이나 표준출력([ -t 1 ])이 터미널인지 아닌지를 확인하는데 쓸 수 있습니다.

-r

테스트를 돌리는 사용자가 읽기 퍼미션을 갖고 있음

-w

테스트를 돌리는 사용자가 쓰기 퍼미션을 갖고 있음

-x

테스트를 돌리는 사용자가 실행 퍼미션을 갖고 있음

-g

파일이나 디렉토리에 set-group-id(sgid) 플래그가 세트되어 있음

디렉토리에 sgid 플래그가 세트되어 있다면 그 디렉토리에서 만들어지는 파일은 파일 생성자의 그룹이 아니라 그 디렉토리 소유자의 그룹에 속하게 됩니다. 이는 워킹그룹이 공유하는 디렉토리에서 유용하게 쓸 수 있습니다.

-u

파일에 set-user-id(suid) 플래그가 세트되어 있음

root가 소유자인 어떤 실행 파일에 set-user-id 플래그가 세트되어 있다면 일반 사용자가 그 파일을 실행시키더라도 root 권한으로 실행됩니다. [1] suid 는 시스템 하드웨어에 접근할 필요가 있는 실행 파일(pppdcdrecord 같은)에 유용합니다. suid 플래그가 없다면 이런 실행 파일들은 일반 사용자들이 실행 시킬 수 없습니다.
	      -rwsr-xr-t    1 root       178236 Oct  2  2000 /usr/sbin/pppd
	      
suid 플래그가 걸린 파일은 퍼미션에 s라고 나타납니다.

-k

스티키 비트(sticky bit)가 세트

보통은 "스키키 비트"라고 알려져 있는 세이브-텍스트-모드(save-text-mode) 플래그는 특별한 형태의 파일 퍼미션입니다. 어떤 파일에 이 플래그가 세트되어 있다면 그 파일은 더 빠른 접근을 위해 캐쉬 메모리에 계속 남아 있습니다. [2] 만약에 디렉토리에 세트되어 있다면 쓰기 퍼미션을 제한합니다. 스티키 비트가 세트되어 있다면 파일이나 디렉토리 퍼미션에 t 가 붙어서 보입니다.
          drwxrwxrwt    7 root         1024 May 19 21:26 tmp/
          
사용자는 자기가 소유하지는 않고 쓰기 퍼미션과 스티키 비트가 세트되어 있는 디렉토리에 오직 자신이 소유한 파일만 지울 수 있습니다. 이렇다면 /tmp처럼 공동으로 접근 가능한 디렉토리에서 여러 사용자가 실수로 다른 사용자의 파일을 지우거나 덮어 쓰는 것을 막아 줍니다.

-O

자신이 소유자임

-G

그룹 아이디가 자신과 같음

-N

마지막으로 읽힌 후에 변경 됐음

f1 -nt f2

f1 파일이 f2 파일보다 최신임

f1 -ot f2

f1 파일이 f2 파일보다 예전것임

f1 -ef f2

f1 파일과 f2 파일이 같은 파일을 하드 링크하고 있음

!

"not" -- 앞에서 나왔던 테스트의 의미와 반대(조건이 안 맞으면 참).

예 29-1, 예 10-7, 예 10-3, 예 29-3, 예 A-2 를 보면 파일 테스트 연산자의 사용법을 보여줍니다.

주석

[1]

suid가 걸려 있는 파일은 보안 구멍을 가질 수 있기 때문에 주의해야 합니다. 쉘 스크립트에는 suid 플래그가 아무 영향도 미치지 않습니다.

[2]

현대의 유닉스 시스템에서는 스티키 비트가 더 이상 파일에는 쓰이지 않고 오직 디렉토리에만 쓰입니다.