"ls -l"이 파일의 논리적 크기를 보고하는 동안 디렉터리의 물리적 크기를 보고하는 이유는 무엇입니까?

"ls -l"이 파일의 논리적 크기를 보고하는 동안 디렉터리의 물리적 크기를 보고하는 이유는 무엇입니까?

ls -l파일의 논리적 크기를 보고하는 동안 디렉터리의 물리적 크기를 보고하는 것을 확인했습니다 . 예를 들어 다음은 다음의 샘플 출력입니다 ls -l.

drwxr-xr-x 2 chris chris 36864 2017-04-23 18:14 dir1 
-rw-r--r-- 1 chris chris 6     2017-04-23 18:10 file1.txt

dir1크기는 36864바이트로 4096바이트의 배수입니다(따라서 물리적 크기일 가능성이 높습니다).

크기 file1.txt는 6바이트(논리적 크기)입니다.

답변1

실제로 ls커널이 지시하는 내용은 무엇이든 보고합니다. 즉, 파일이 디렉터리인지 여부에 따라 크기와 관련하여 다른 작업을 수행하지 않습니다. 그리고 Linux는 논리적 크기를 보고합니다. 그러나 디렉토리의 논리적 크기는 그다지 흥미로운 속성이 아닙니다. 이는 파일 시스템 형식에 따라 다릅니다.

대부분의 Linux 배포판에서 기본 파일 시스템 유형은 ext4이며 아마도 이를 사용하고 있을 것입니다. Ext4는 디렉토리에 전체 블록을 할당하고 적합하다고 판단되는 블록 내부 공간을 관리합니다. 디렉토리가 축소되어도 블록을 해제하지 않습니다( dir1그 안의 모든 파일을 제거하더라도 9개의 블록이 계속 유지됩니다). 디렉토리인 파일의 크기를 물으면 ext4는 디렉토리에 할당된 크기를 반환하며 이는 항상 블록의 정수입니다.

파일 시스템 유형에 따라 다르게 동작합니다. 예를 들어 Btrfs를 사용하면 실험적으로 디렉터리 크기는 2의 배수가 될 수 있습니다.

답변2

ext2이는 // ext3파일 시스템 의 기능 ext4이며 전체 블록의 디렉토리 크기를 보고합니다. XFS로 동일한 작업을 시도하면 더 세분화된 크기를 볼 수 있습니다.

정말 중요하지 않습니다. 파일의 경우 "논리적" 크기가 관련됩니다. 응용 프로그램이 최대 1바이트의 파일 크기를 아는 데 의존할 수 있기 때문입니다. 후행 쓰레기가 관련될 수 있거나 일부 데이터 구조가 파일의 끝과 관련된 위치에 배치될 수 있습니다. 파일(예: .zip 아카이브).

디렉터리의 경우 내부 구조가 잘 알려져 있으므로 "논리적" 크기는 중요하지 않으며 Linux에서는 사용자 공간 프로그램이 디렉터리의 내용을 직접 읽을 수도 없습니다. 대신, 읽기는 해당 목적으로 만들어진 시스템 호출을 거쳐야 합니다. 그리고 이러한 시스템 호출은 디렉토리의 내부 구조를 처리합니다.

관련 정보