'ls -l'이 디렉토리에 대해 보고하는 크기를 발생시키는 내용을 표시하는 방법은 무엇입니까?

'ls -l'이 디렉토리에 대해 보고하는 크기를 발생시키는 내용을 표시하는 방법은 무엇입니까?

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(또는 등) 을 호출하여 해당 데이터의 이진 형식을 표시할 수 있습니다 . odLinux에서는 그렇지 않으며 가능한 시스템에서는 해당 데이터의 해석이 파일 시스템 유형에 따라 달라지거나 정규화될 수 있습니다(기록 파일 시스템 유형과 호환되도록). 보다디렉토리를 파일로 읽을 수 없게 된 것은 언제입니까?그리고디렉토리의 8진수 덤프

에서 보고하는 크기는 다음과 같은 여러 가지 이유로 ls표시되는 데이터를 저장하는 데 필요한 크기보다 큽니다 .ls

  • ls파일 콘텐츠에 대한 차단 목록과 같이 표시되지 않는 메타데이터가 있을 수 있습니다 .
  • 여기저기에 사용되지 않은 비트, 기계어 경계에 대한 정렬, 고정 크기 필드에 저장된 파일 이름 등과 같은 패딩이 있을 수 있습니다.
  • B-트리 또는 검색 트리 구조와 같이 파일 이름 목록을 구성하는 메타데이터가 있습니다.
  • 일반적으로 파일은 블록으로 구성되며 파일은 전체 블록 수를 사용합니다. 파일 크기가 정확히 블록 크기의 배수가 아닌 한 마지막 블록은 부분적으로만 채워집니다.
  • ext4와 같은 일부 파일 시스템에서는 디렉토리가 많이 커진 후(많은 파일이 포함되어 있기 때문에) 많이 줄어든 후(많은 파일이 삭제되었기 때문에) 사용되지 않은 블록을 돌려주지 않습니다.

보여주지 않는 것에 대해 알고 싶다면 ls디렉토리 내용을 직접 살펴봐야 합니다. odUnix 변형이 허용하는 경우 디렉터리에서 실행하거나 이와 유사하거나 파티션의 16진수 뷰어 또는 다음과 같은 파일 시스템 디버거와 같은 하위 수준 도구를 사용하십시오.debugfsext2/ext3/ext4의 경우. 이런 방식으로 보게 될 정보는 파일 시스템 형식에 대해 잘 아는 소수의 사람들을 제외하고는 "사람이 읽을 수 있는" 정보로 간주되지 않습니다.

관련 정보