유닉스 파일 형식
Unix file types7가지 표준 유닉스 파일 형식은 POSIX에서 정의한 레귤러, 디렉토리, 심볼릭 링크, FIFO 스페셜, 블록 스페셜, 문자 스페셜, 소켓입니다.[1]다양한 OS별 구현을 통해 POSIX가 필요로 하는 것(예: Solaris 도어)보다 더 많은 유형을 허용합니다.파일의 유형은 파일 시스템 권한 필드의 첫 번째 문자에 유형을 표시하는 명령으로 식별할 수 있습니다.
일반 파일의 경우, 유닉스는 내부 파일 구조를 적용하거나 제공하지 않습니다. 따라서 파일 구조와 해석은 파일 구조를 사용하는 소프트웨어에 전적으로 의존합니다.[2]그러나 일반적으로 명령을 사용하여 데이터 유형을 확인할 수 있습니다.[3]
표현
숫자
stat 구조에서는 파일 형식과 권한(모드)이 함께 a에 저장됩니다.st_mode
최소 12비트(7가지 파일 유형 중 유형을 지정하려면 3비트, 권한은 9비트)의 크기를 갖는 비트 필드.권한에 대한 레이아웃은 POSIX에 의해 최소 9비트로 정의되지만 나머지는 정의되지 않습니다.[1]
관례적으로 모드는 선두 0이 없는 6자리의 8진수로 작성된 16비트 값입니다.포맷 부분은 리드 4비트(2 팔진수), "010"(1000(이진법으로 1000)은 일반 파일을 말합니다.다음 3비트(1자리)는 보통 setuid, setgid 및 sticky에 사용됩니다.마지막 부분은 이미 POSIX에서 권한을 포함하도록 정의되어 있습니다.일반적인 파일의 경우 "100644"를 예로 들 수 있습니다.이 형식은 git, tar, ar 등에서 볼 수 있습니다.[4]
파일의 종류는 다음과 같은 매크로를 사용하여 테스트할 수 있습니다.S_ISDIR
. 이러한 점검은 보통 모드를 다음과 같이 마스킹하여 수행합니다.S_IFMT
(흔히 리드 4비트 컨벤션의 경우 "170000"이라는 8진수) 및 결과가 일치하는지 확인합니다.S_IFDIR
.S_IFMT
핵심 POSIX 개념이 아니라 XSI(X/Open System Interfaces) 확장입니다. POSIX만을 따르는 시스템은 다른 방법을 사용할 수 있습니다.[1]
모드 문자열
예를 들어 에 있는 한 줄을 예로 들겠습니다.ls -l
출력:
drwxr-xr-x2 루트 루트 루트 0 Jan 1 1970 홈
POSIX는 긴 형식의 출력 형식을 지정합니다[5](-l
옵션).특히 첫 번째 필드(첫 번째 공백 앞)는 "파일 모드 문자열"로 명명됩니다. 여기서drwxr-xr-x
. 첫번째 문자는 파일 형식을 설명합니다. 여기에d
(디렉토리).이 문자열의 나머지 부분은 파일 권한을 나타냅니다.
구현 예
GNU coreutils 버전은 다음과 같습니다.ls
호출을 사용합니다.filemode()
, glibc 함수(gnulib 라이브러리의 exposed)를 사용하여 모드 문자열을 가져옵니다.
FreeBSD는 보다 단순한 접근 방식을 사용하지만 더 적은 수의 파일 형식을 허용합니다.[7]
디렉토리
이 섹션은 검증을 위해 추가적인 인용이 필요합니다. 찾기 : – · · · (2023년 10월) (이 를 및 |
가장 일반적인 특수 파일은 디렉토리입니다.디렉토리 파일의 레이아웃은 사용되는 파일 시스템에 의해 정의됩니다.유닉스에서 네이티브와 비네이티브 모두 여러 파일 시스템을 사용할 수 있기 때문에 하나의 디렉터리 파일 레이아웃이 없습니다.
디렉토리는 다음과 같이 표시됩니다.d
출력의 모드 필드의 첫 글자로ls -dl
[5] 아니면stat
,예.
$ ls -dl / drwxr-xr-x 26 루트 루트 4096 Sep 220 09:29 / $ stat / 파일: "/" 크기: 4096 블록: 8 IO 블록: 4096 디렉터리 장치: 802h/2050d Inode: 128 링크: 26 액세스: (0755/drwxr-xr-x) Uid: (0/ 루트) Gid: (0/ 루트) ...
심볼릭 링크
이 섹션은 검증을 위해 추가적인 인용이 필요합니다. 찾기 : – · · · (2023년 10월) (이 를 및 |
심볼릭 링크는 다른 파일에 대한 참조입니다.이 특수 파일은 참조된 파일의 경로를 텍스트로 표현한 것으로 저장됩니다(대상이 상대 경로일 수도 있고 아예 존재하지 않을 수도 있음을 의미함).
기호 링크는 다음과 같이 표시됩니다.l
( 소문자)L
) 모드 문자열의 첫 글자로, 예를 들어 이 축약어로ls -l
출력:[5]
lrwxrwxrwx... termcap -> /usr/share/misc/termcap lrwxrwx...S03xinetd -> ....../init.d/xinetd
FIFO(관명)
이 섹션은 검증을 위해 추가적인 인용이 필요합니다. 찾기 : – · · · (2023년 10월) (이 를 및 |
유닉스의 강점 중 하나는 항상 프로세스 간 통신입니다.OS가 제공하는 설비 중에는 한 공정의 출력과 다른 공정의 입력을 연결하는 배관이 있습니다.두 프로세스가 동일한 사용자에 의해 시작되는 동일한 상위 프로세스 공간에 존재하는 경우에는 문제가 없지만, 통신 프로세스가 FIFO(여기서 명명된 파이프)를 사용해야 하는 경우가 있습니다.프로세스를 서로 다른 사용자 이름과 권한으로 실행해야 하는 경우에 그러한 상황이 발생합니다.
명명된 파이프는 파일 시스템 어디에나 존재할 수 있는 특수 파일입니다.명령을 사용하여 생성할 수 있습니다.mkfifo
와 같이mkfifo mypipe
.
명명된 파이프는 다음과 같이 표시됩니다.p
모드 문자열의 첫 글자로, 예를 들어 이 축약어로ls -l
출력:[5]
prw-rw----------- 내 파이프.
소켓
소켓은 프로세스 간 통신에 사용되는 특수한 파일로, 두 프로세스 간의 통신을 가능하게 합니다.데이터를 보내는 것 외에도 프로세스는 유닉스 도메인 소켓 연결을 통해 파일 디스크립터를 보낼 수 있습니다.sendmsg()
그리고.recvmsg()
시스템 호출.
단방향 데이터 흐름만 허용하는 명명된 파이프와 달리 소켓은 완전 이중화가 가능합니다.
소켓은 다음과 같이 표시됩니다.s
모드 문자열의 첫 번째 문자로, 예를 들어.
srwxrwxrwxrwx /tmp/.X11-유니닉스/X0
장치 파일(블록, 문자)
이 섹션은 검증을 위해 추가적인 인용이 필요합니다. 찾기 : – · · · (2023년 10월) (이 를 및 |
유닉스에서는 거의 모든 것이 파일로 처리되고 파일 시스템에 위치하며 심지어 하드 드라이브와 같은 하드웨어 장치도 있습니다.가장 큰 예외는 파일 시스템에 나타나지 않고 별도로 처리되는 네트워크 장치입니다.
장치 파일은 장치에 액세스 권한을 적용하고 해당 장치 드라이버에 파일에 대한 작업을 지시하는 데 사용됩니다.
유닉스는 캐릭터 디바이스와 블록 디바이스를 구분합니다.그 구별은 대략 다음과 같습니다.
- 캐릭터 디바이스는 입력의 직렬 스트림만을 제공하거나 출력의 직렬 스트림을 허용합니다.
- 블록 장치는 임의로 접근 가능합니다.
예를 들어 디스크 파티션에는 파티션의 블록에 버퍼링되지 않은 랜덤 액세스를 제공하는 문자 장치와 파티션의 블록에 버퍼링된 랜덤 액세스를 제공하는 블록 장치가 모두 있을 수 있습니다.
문자 장치는 다음과 같이 표시됩니다.c
mode string의 첫 글자와 block device는 a로 표시됩니다.b
, 예를 들어 이 축약어로ls -l
출력:[5]
crw-rw-rw- null- ... /dev/rw brw- rw------ ... /dev/sda
참고문헌
- ^ a b c "<sys/stat.h>". The Open Group Base Specifications Issue 6. The Open Group. 21 July 2019.
- ^ Loukides, Mike (October 2002). "When Is a File Not a File?". Unix Power Tools (3 ed.). O'Reilly. p. 80. ISBN 9780596003302.
A file is nothing more than a stream of bytes ...
- ^ "
file
". IEEE Std 1003.1-2017 (POSIX). The Open Group. 2018. - ^ Kitt, Stephen. "What file mode is a symlink?". Unix & Linux Stack Exchange.
- ^ a b c d e "
ls
". IEEE Std 1003.1-2008 (POSIX). The Open Group. 11 March 2017. - ^ "filemode function in GNU coreutils". GNU. 11 March 2017.
- ^ "printtype function from FreeBSD". FreeBSD. 11 March 2017.