ls -l
제가 이해한 바에 따르면 보고된 치수는목차이러한 디렉터리의 "메타데이터"가 차지하는 공간을 반영합니다. 또한 이 메타데이터는 사람이 읽을 수 있는 바이너리/비인식 형식으로 존재한다고 가정합니다.
이 메타데이터를 사람이 읽을 수 있는 형식으로 표시할 수 있는 Unix 명령이 있습니까?
편집: 위 질문에 대한 답변이 파일 시스템에 크게 의존하는 경우 특정 파일 시스템에 대한 답변을 검색하려면 어떤 키워드를 사용해야 합니까? (nfs, ext3, ext4, vfat, gpfs, tmpfs 및lustre를 포함한 여러 유형의 파일 시스템에 대한 답변에 관심이 있습니다.) "디렉터리 데이터/정보/내용을 표시하는 방법" 등을 검색하면 디렉터리의 파일을 나열하는 방법에 대한 정보만 찾을 수 있는데 이는 정확히 내가 찾고 있는 정보가 아닙니다.
답변1
ls
이 정보는 데이터가 size
디렉터리의 inode 필드에 저장되어 있기 때문에 표시됩니다. 이는 파일 시스템에 따라 다릅니다. 특정 파일 시스템은 다른 정보를 보유할 수 있습니다. 예를 들어, ZFS는 이 필드의 디렉토리 항목 수를 보고합니다.
이것이 관심 있는 수준이라면 데이터를 읽는 것은 간단합니다. inode 정보를 다양한 방식으로 표시하는 도구입니다 ls
. stat
이를 확인하여 데이터를 추출하고 사람이 읽을 수 있는 형식으로 표시하는 방법을 확인할 수 있습니다. 보세요통계(2)정보 쿼리를 위한 시스템 호출입니다.
번호를 직접 수집하고 싶다면 다음을 고려하세요.stat -c "%s"
% ls -ld /
drwxr-xr-x 44 root root 4096 Jun 10 17:11 /
% stat -c "%s" /
4096
답변2
네, 있습니다. 이름이 ls
…
ls
디렉터리에서 보고하는 크기는 디렉터리 내용의 크기입니다. 이는 디렉터리의 메타데이터가 아니라 디렉터리에 있는 파일의 메타데이터입니다. 대부분은 에 나열되어 있습니다 ls -la
.
일부 Unix 변형에서는 cat
디렉터리에서 호출(또는 등)을 통해 이 데이터의 이진 형식을 표시할 수 있습니다. od
Linux에서는 그렇지 않으며 가능한 시스템에서는 이 데이터의 해석이 파일 시스템 유형에 따라 달라지거나 정규화될 수 있습니다(기록 파일 시스템 유형과 호환되도록). 바라보다언제 디렉토리를 파일로 읽을 수 없게 됩니까?그리고디렉토리의 8진수 덤프
보고서는 다음과 같은 여러 가지 이유로 ls
표시되는 데이터를 저장하는 데 필요한 것보다 큽니다 ls
.
ls
파일 내용의 차단 목록과 같이 표시되지 않는 메타데이터 가 있을 수 있습니다 .- 여기저기에 사용되지 않은 비트, 기계어 경계에 대한 정렬, 고정 크기 필드에 저장된 파일 이름 등과 같은 패딩이 있을 수 있습니다.
- B-트리나 검색 트리 구조 등 파일 이름 목록을 구성하는 메타데이터가 있습니다.
- 일반적으로 파일은 블록으로 구성됩니다. 파일 크기가 블록 크기의 배수가 아닌 한 파일은 모든 블록을 사용하고 마지막 블록은 부분적으로만 채워집니다.
- ext4와 같은 일부 파일 시스템에서 디렉터리는 많이 증가한 후(많은 파일을 포함하기 때문에) 많이 줄어든 후(많은 파일이 삭제되기 때문에) 사용되지 않은 블록을 반환하지 않습니다.
표시되지 않은 내용을 알고 싶다면 ls
디렉터리 내용을 직접 살펴봐야 합니다. od
Unix 버전에서 허용하는 경우 디렉터리에서 유사한 명령을 실행하거나 파티션의 16진수 뷰어 또는 파일 시스템 디버거와 같은 하위 수준 도구를 사용할 수 있습니다.debugfs
ext2/ext3/ext4의 경우. 파일 시스템 형식에 매우 익숙한 아주 소수의 사람들을 제외하고, 이러한 방식으로 보는 정보는 "사람이 읽을 수 있는" 정보로 간주되지 않습니다.