** UNIX/LINUX 에서의 파일 종류
- : 일반 파일
d : 디렉토리
p : 파이프 (네임드 파이프)
b : 블럭장치 ( 하드디스크, 씨디롬)
c : 문자장치 (프린터, 터미널)
s : 소켓
l : 심볼릭링크
# .ls -l /bin/ls -rwxr-xr-x 1 root root 95125 Apr 17 15:53 /bin/ls # ls -l /bin/sh lrwxrwxrwx 1 root root 4 Mar 18 18:29 /bin/sh -> bash # ls -l /dev/sda brw-r----- 1 root disk 8, 0 Mar 23 03:33 /dev/sda # ls -l /dev/tty1 crw--w---- 1 root tty 4, 1 Apr 18 04:33 /dev/tty1 # ls -l /dev/initctl prw------- 1 root root 0 Mar 23 03:33 /dev/initctl # ls -l /dev/ | grep ^s srw-rw-rw- 1 root root 0 Mar 23 03:33 log # ls -ld /etc drwxr-xr-x 84 root root 12288 Apr 30 13:14 /etc
다음 조건이 맞다면 참을 리턴
- -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 는 시스템 하드웨어에 접근할 필요가 있는 실행 파일(pppd나 cdrecord 같은)에 유용합니다. 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" -- 앞에서 나왔던 테스트의 의미와 반대(조건이 안 맞으면 참).
===================================================================== LAB> 파일 테스트 연산자를 이용해서 파일의 종류를 판별해보자. # if [ -e /etc ]; then > echo true > else > echo false > fi true # if [ -e /dkdkdkd ]; then > echo true > else > echo false > fi false # if [ -e /dev/tty1 ]; then > echo true > else > echo false > fi true - 거짓을 ! 에 의해서 참으로 만들어준다. # if [ ! -e /dkdkdkdk ]; then > echo true > else > echo false > fi true # [ -f /etc/passwd ] # echo $? 0 # [ -f /etc/afdjakf ] # echo $? 1 - if 문을 안쓰고 [ 명령어만 가지고 사용할 수 있다. - [ 조건문 ] && 참일 때 실행 || 거짓일 때 실행 # [ -f /etc/passwd ] && echo true || echo false true # [ -f /etc/akdsfjakd ] && echo true || echo false false # if [ -f /etc/passwd ]; then > echo true > else > echo false > fi true # if [ -f /etc/akdsfjakd ]; then > echo true > else > echo false > fi false # su - linux $ ls -l /etc/shadow -r-------- 1 root root 1084 Apr 30 11:59 /etc/shadow $ [ -r /etc/shadow ] && echo true || echo false false $ ls -l /etc/passwd -rw-r--r-- 1 root root 1762 Apr 30 11:59 /etc/passwd $ [ -r /etc/passwd ] && echo true || echo false true $ ls -l /bin/su -rwsr-xr-x 1 root root 24312 Mar 21 2012 /bin/su $ [ -x /bin/su ] && echo true || echo false true $ exit - 일반유저가 /usr/sbin/useradd 파일의 실행권한이 없으므로 false 가 출력된다. # chmod o= /usr/sbin/useradd # ls -l /usr/sbin/useradd -rwxr-x--- 1 root root 74608 Jan 9 2013 /usr/sbin/useradd # su - linux $ [ -x /usr/sbin/useradd ] && echo true || echo false false =====================================================================
'Linux > 쉘스크립트' 카테고리의 다른 글
until과 위치 매개변수 사용 (0) | 2015.05.11 |
---|---|
5. 루프 (0) | 2015.05.06 |
4. 테스트와 분기(Testing and Branching) (0) | 2015.05.04 |
3. 비교 연산자(이진) (0) | 2015.05.04 |
1. 테스트(Test Constructs) (0) | 2015.04.30 |