왜. 그리고.. 파일 크기가 각각 4kB와 12kB입니까? [복사]

왜. 그리고.. 파일 크기가 각각 4kB와 12kB입니까? [복사]

그림 ls -al과 같이 예를 들면 다음과 같습니다.

drwxr-xr-x  9 jb jb 4.0K Mar  8 18:05 ./
drwx------ 49 jb jb 12K Mar 17 14:15 ../

나는 이것이 inode 메타데이터(예: 반환된 것)를 저장하는 데 필요한 최소 공간이라고 생각 stat하지만 완전히 확신할 수는 없습니다.

답변1

.( dotfor d, dfor 디렉토리)는 해당 디렉토리에 대한 하드 링크입니다. 당신은 다음을 알게 될 것입니다 :

ls -di . "$PWD"

동일한 inode 번호를 반환합니다. 크기는 내용을 저장하는 데 필요한(또는 필요할 수 있는) 바이트 수입니다. 즉, 참조하는 파일 목록(부수적으로 .및 을 포함하는 링크된 파일 목록 ..) 입니다.

..( d디렉토리의 디렉토리)는 이를 참조하는 유일한 디렉토리인 상위 디렉토리에 대한 하드 링크입니다(및 항목을 고려하지 않는 경우 d디렉토리에는 하나의 링크만 있을 수 있습니다)....

그래서:

ls -di -- .. "$(dirname -- "$(pwd -P)")"

동일한 inode 번호도 반환됩니다.

..따라서 귀하 의 경우 에는 .. 4kB 이상)....

답변2

일반적인 Unix 계열 파일 시스템의 디렉토리는 특별한 속성을 가진 파일일 뿐입니다. 심볼릭 링크도 마찬가지입니다. 일부 Unix 계열 파일 시스템은 심볼 플래시와 같은 작은 파일을 inode 내에 저장할 수 있습니다. 즉, 파일에 블록을 할당할 필요가 없으며 파일 크기 계산에서 inode를 계산하지 않으므로 파일 크기는 0입니다.

데이터가 해당 inode에 맞지 않는 파일은 inode와 별도로 할당된 일종의 최소 저장 단위를 차지해야 합니다. (인덱스 노드의 데이터 공간은 일반적으로 해당 저장 블록에 대한 포인터 배열로 변환됩니다.)

가장 간단한 전략은 모든 것을 모두 동일한 크기의 분할할 수 없는 청크로 분할하고 두 개의 파일이 단일 청크 내에서 저장소를 공유할 수 없다는 것입니다. 그러나 일부 파일 시스템(예: Berkeley FFS)은 낭비를 줄이기 위해 블록을 다른 파일에 할당된 조각으로 나눌 수 있습니다.

블록 크기는 큰 디스크 주소 지정과 작은 파일의 공간 낭비 사이의 절충안으로 파일 시스템이 생성될 때 결정됩니다. 일반적인 블록 크기는 약 512부터 시작하는 2의 거듭제곱입니다(요즘에는 거의 발생하지 않음).

아시다시피, 모든 (루트가 아닌) 디렉토리에는 최소한 두 개의 항목이 포함됩니다. 빈 디렉토리에도 및 .. 링크가 포함되어 있기 때문입니다. 0이 아닌 값이나 심지어 완전히 비어 있는 디렉토리의 크기가 보이면 이는 두 개의 기본 디렉토리 항목이 너무 커서 주어진 파일 시스템에 있는 inode의 작은 데이터 영역에 맞지 않는다는 것을 나타냅니다. 따라서 디렉토리 데이터는 별도로 할당된 블록 또는 블록 조각을 차지합니다.

주어진 파일 시스템에서 블록 크기는 4096이고 더 작은 조각은 없는 것 같습니다. (그렇지 않으면 블록 크기가 더 커지고 조각의 크기는 4096입니다.) 디렉터리는 4096개의 블록/조각을 차지하기 시작하고 해당 셀의 공간을 모두 소모할 만큼 충분한 항목이 디렉터리에 추가되면 디렉터리가 커집니다. 8192 로 증가한 다음 12KB로 증가합니다.

..의 값이 크면 하위 디렉터리의 크기에 관계없이 상위 디렉터리가 상당히 큰 디렉터리임을 나타냅니다.

관련 정보