배경
Unix에는 기호 링크, 장치 파일, proc 파일( 의)과 같은 다양한 유형의 특수 파일이 있습니다 /proc
. /proc
파일은 일반 파일일 뿐이며 심지어 텍스트 파일이기도 합니다. 그런데 나머지는 사용법만 알 뿐, 내부 구조나 어떤 것들이 있는지(깊이)는 모릅니다. 불행하게도 파일에 액세스하는 모든 방법은 해당 파일이 나타내는 개체만 가져옵니다. 즉, 내부 표현을 얻을 수 있는 방법이 없습니다.
질문
심볼릭 링크의 경우 의심할 여지 없이 대상에 대한 경로를 저장하는 문자열이 있습니다. 그런데 문자열만 있다면 일반 텍스트 파일과 어떻게 구별할 수 있을까요? 파일 시스템 드라이버가 지정한 특별한 헤더가 있다면 그것은 무엇입니까? 합의가 있나요? 누구든지 심볼릭 링크가 가리키는 이진 표현이 무엇인지 말해 줄 수 있습니까 /usr/bin/bash
?
장치 파일(노드)의 경우 바이너리 구조와 표현은 무엇입니까? 동작에 따라 관련 인터페이스 번호 및 드라이버에 대한 정보를 포함해야 합니다. 그러나 이로 인해 크기가 크게 달라집니다. 누구든지 이것을 이진 수준에서 설명할 수 있습니까?
심볼릭 링크와 장치 파일의 호환성을 위해(동일한 장치 파일이 서로 다른 두 환경에서 작동하는 것이 불가능하다는 것을 알고 있지만 상상력을 발휘하여 실험을 할 수 있습니다) 이러한 파일의 바이너리 콘텐츠는 파일에 따라 크게 달라집니다. 시스템 유형 및 운영 체제의 커널은 무엇입니까? 예를 들어, 명령을 통하지 않고 동일한 바이너리 콘텐츠를 다른 파일 시스템(예: ext4에서 xfs로)에 복사하는 경우 cp
파일(symlink 또는 장치 파일)이 여전히 유효합니까? Linux 시스템에서 BSD 시스템으로 복사하는 것은 어떻습니까?
아니면 파일이 아니고 파일 시스템 헤더의 특수 레코드입니까?
답변1
"특수" 파일은 "일반" 파일처럼 파일 시스템에 저장되는 스틸 파일입니다. 디렉토리, 파일, 심볼릭 링크 등은 파일 시스템에 명시적으로 저장되는 유형으로 구별됩니다. 바라보다UNIX 권한 및 파일 유형 이해발생할 수 있는 다양한 파일 형식에 대한 자세한 정보입니다.
파일이 저장되는 방법과 저장할 수 있는 파일은 파일 시스템에 따라 다릅니다. 일부 파일 시스템은 Unix 스타일 파일 형식의 하위 집합을 지원합니다. 예를 들어 FAT는 파일이나 디렉터리(및 볼륨 레이블) 이외의 것을 저장할 수 없습니다. 이는 "특수" 파일의 저장이 파일 시스템에 따라 달라지며 파일을 나타내는 비트를 있는 그대로 한 파일 시스템에서 다른 파일 시스템으로 복사할 수 없음을 의미합니다.
심볼릭 링크는 대상의 텍스트 표현을 저장합니다. 대부분의 현재 Unix 스타일 파일 시스템에는 기호 링크(inode에 있음)에 대한 "핵심" 정보 외에도 짧은 대상을 위한 공간이 있습니다. 더 긴 링크에는 데이터 블록 할당이 필요합니다.
장치 노드는 노드의 기본 및 보조 노드라고 하는 식별자를 저장합니다. 이는 고정된 저장 요구사항을 갖는 두 개의 작은 숫자이며 이를 수용할 수 있는 충분한 공간이 inode에 있습니다. 이 숫자는 운영 체제별로 다르므로 해당 기능을 유지하면서 Linux에서 BSD로 노드를 복사할 수 없습니다.
Ext4가 이 정보를 저장하는 방법에 대한 자세한 내용은 다음에서 확인할 수 있습니다.커널 Ext4 문서. i_mode
파일 형식이 어떻게 저장되는지 구체적으로 살펴보세요 .