나는 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 사용자 공간 프로그램에서는 디렉터리의 내용을 직접 읽을 수도 없기 때문에 "논리적" 크기는 중요하지 않습니다. 대신 읽기는 이러한 목적을 위해 만들어진 시스템 호출을 거쳐야 합니다. 그리고 이러한 시스템 호출은 디렉토리의 내부 구조를 처리합니다.