- st_mode : stat 구조체에서 파일 타입과 모드, 허가를 담당하는 부분
- C 언어에서 <sys/stat.h>의 stat() 함수를 통해 가져온 stat 구조체 중에 st_mode에서 확인할 수 있다.
- 세가지 부분으로 나누어짐 (total 16 bits)
- file type (4 bits) : 파일의 종류를 나타냄
- special bit (3 bits) : 특이 기능들을 나타냄
- file permission bit (9 bits) : 접근 유저에 따라 읽기/쓰기/실행 권한을 나타냄
◎ File Type
-
Regular File
- 일반적인 파일, 가장 흔한 종류
- 파일이 이진수이던 text이던 상관없이 UNIX kernel을 구분하지 않는다.
-
Directory
- 내부의 파일 이름 & 파일의 pointer로 구성
- 다른 말로 하자면, 파일명과 파일의 I-node 번호를 매핑하는 리스트로만 구성
-
Block special File
- 하드디스크, CD/DVD 등의 저장 장치 파일들
- 시스템의 I/O 버퍼를 사용, 바이트 크기의 블록 단위로 입출력을 수행
- 불변적인 사이즈의 바이트 크기의 블록 단위로 입출력을 수행
-
Character special file
- 터미널, 프린터, 키보드 등의 문자 기반 장치 파일
- 시스템의 I/O 버퍼를 사용하지 않으며 바이트 단위 입출력을 사용
- 가변적인 사이즈의 바이트 단위 입출력을 사용
-
FIFO (also called pipe)
- 프로세스간의 communication을 위해 사용함
- 특정 프로그램의 출력을 중간 파일을 거치지 않고 다른 파일의 입력으로 바로 보내는 파일
-
Socket
- 프로세스 사이의 네트워크 communication에 사용
- 네트워크 입출력을 담당하는 API로서 특정 컴퓨터 사이의 정보를 전달하는 통로 역할을 수행
-
Symbolic Link
- window에서 바로가기 기능과 같음
- 다른 파일로 가기위한 Point
◎ Special bits
set-user-ID, set-group-ID
sticky bit
-
예전의 사용 방법
- 메모리의 Swap area에 계속 있으라는 뜻으로 사용됨 (빠르게 사용하기 위해)
- 최근 기술이 발달하면서 굳이 쓸모가 없어짐
-
최근
- 다른 사람의 파일을 변경할 수 없다.
- 폴더에 sticky bit를 설정하면 기본적으로 파일의 소유자가 아니면 해당 디렉토리 내의 파일을 지우거나 수정하지 못하도록 기본적인 umask를 설정한다. (참고 자료)
◎ File Access permission
종류 / 기능
- user, group, others에 대해 R/W/X의 권한 설정 가능
- Read
- file : file data를 읽을 수 있는가? (copy 기능)
- directory : file list를 읽을 수 있는가? (ls가 가능한가?)
- Write
- file : file data를 수정할 수 있는가?
- directory : file을 생성, 삭제할 수 있는가?
- Execute
- file : file을 실행할 수 있는가?
- directory : 이동할 수 있는가? (cd가 가능한가?)
◎ File Access permission 표기 방법
10자리 문자 표기법
- 1-3-3-3으로 끊어서 읽음
- 파일 종류 : (맨 앞) 문자열 한개로 표기
- : 일반 파일을 의미함
- "d" : directory를 의미함
- "b" : block special File, "c" : charater special file, "l" : symbolic link, ...
- user/group/other의 접근 권한 : 각각 3글자로 표기
- 각각 순서대로 3글자씩 할당되어 있음
- 각각의 자리는 r/w/x가 읽기/쓰기/실행 권한을 나타낸다.
- 명령어 "ls -l"을 통하여 접근 권한을 10자리 문자 표기법으로 확인할 수 있다.
8진수 표기법
- 3자리의 숫자로 표기
- 각각의 숫자는 순서대로 user/group/other의 접근 권한을 의미함
- read : 4, write : 2, execute : 1 이며, 각각의 접근 권한이 있을 때마다 더하여 나타냄
- ex) 5 : read, execute 권한 있음
- 명령어 chmod를 통해 간편하게 접근 권한을 부여할 수 있다.
Special bit 표기
-
10자리 문자 표기법
- set-user-id : user의 접근 권한 표기 방법 중에 x 대신 s를 써서 표현
- 소문자 s : set-user-id 권한과 user의 실행 권한이 있음
- 대문자 S : set-user-id 권한은 있지만, user의 실행 권한이 없음
- set-group-id : group의 접근 권한 표기 방법 중에 x 대신 s를 써서 표현
- 소문자 s : group-user-id 권한과 group의 실행 권한이 있음
- 대문자 S : group-user-id 권한은 있지만, group의 실행 권한이 없음
- sticky bit : other의 접근 권한 중에 표기 방법 중에 x 대신 t를 써서 표현
- 소문자 t : sticky bit와 group의 실행 권한이 있음
- 대문자 T : sticky bit는 있지만, group의 실행 권한이 없음
-
10자리 표기법 예시
- -r-s--s-rwx : 일반 파일, 접근 권한 517, set-user-id, set-group-id 설정되어 있음
- -r-S--S-rwx : 일반 파일, 접근 권한 407, set-user-id, set-group-id 설정되어 있음
-
8진수 표기법
- 일반적으로 3자리의 8진수로 표기하는데, 맨 앞의 숫자를 추가하여 표기
- set-user-id : 4, set-group-id : 2, sticky bit : 1이고 각각을 더하여 표현
-
8진수 표기법 예시
- 7755 : set-user-id, set-group-id, sticky bit가 전부 할당되어 있음
- 0755 : 하나도 할당되어 있지 않음 (접근 권한은 755임)
◎ 참고 자료
stat()
#include <sys/stat.h>
int stat(const char *pathname, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const chat *pathname, struct stat *buf);
Status Structure
16 bits 표기
- 아래 자료는 8진수로 표기되어 있음 (3자리-1자리-3자리로 구분)
- 앞의 3자리는 파일 타입을 의미
- 중간 1자리는 special bits를 의미
- 뒤의 3자리는 접근 권한을 의미
외부 참고 자료