如何顯示導致「ls -l」報告的目錄大小的內容?

如何顯示導致「ls -l」報告的目錄大小的內容?

ls -l據我了解,報告的尺寸目錄反映這些目錄的「元資料」所佔用的空間。另外,我認為該元資料以二進位/非人類可讀的形式存在。

是否有 Unix 指令以人類可讀的形式顯示此元資料?

編輯:如果上述問題的答案高度依賴檔案系統,我應該使用哪些關鍵字來搜尋特定檔案系統的答案? (我對多種類型的檔案系統的答案感興趣,包括 nfs、ext3、ext4、vfat、gpfs、tmpfs 和 lustre)。當我搜尋“如何顯示目錄資料/資訊/內容”等時,我只找到有關如何列出目錄中的文件的信息,這並不是我正在尋找的內容。

答案1

ls顯示該資訊是因為資料儲存在size目錄的 inode 欄位中。這是依賴檔案系統的。給定的檔案系統可以保存其他資訊。例如,ZFS 會報告該欄位中的目錄條目數。

如果這是您感興趣的級別,那麼讀取資料就很簡單。 lsstat是以不同方式顯示 inode 資訊的工具。您可以檢查它們以了解如何提取資料並以人類可讀的形式顯示它。看一眼統計數據(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 上的情況並非如此,而且在可能的系統上,該資料的解釋可能取決於檔案系統類型或可能被標準化(以與歷史檔案系統類型相容)。看目錄何時停止作為檔案讀取?目錄的八進位轉儲

由於以下幾個原因,報告的大小ls超過了儲存您看到的資料所需的大小ls

  • 可能存在ls未顯示的元數據,例如檔案內容的封鎖清單。
  • 可能存在填充,例如各處未使用的位元、與機器字邊界的對齊、儲存在固定大小欄位中的檔案名稱等。
  • 有元資料來組織檔案名稱列表,例如 B 樹或搜尋樹結構。
  • 通常,文件按區塊進行組織,文件使用全部區塊,最後一個區塊僅部分填充,除非檔案大小恰好是區塊大小的倍數。
  • 在某些檔案系統上,例如 ext4,目錄在增長很多(因為它們包含很多檔案)然後收縮很多(因為很多檔案被刪除)後不會返回未使用的區塊。

如果您想了解一些ls不會向您顯示的內容,您需要直接查看目錄內容。如果您的 Unix 變體允許,可以在目錄上運行od或類似操作,或使用低階工具,例如分割區上的十六進位檢視器或檔案系統偵錯器,例如debugfs對於 ext2/ext3/ext4。除了極少數非常熟悉檔案系統格式的人之外,您以這種方式看到的資訊並不符合「人類可讀」的條件。

相關內容