![如何顯示導致「ls -l」報告的目錄大小的內容?](https://rvso.com/image/89154/%E5%A6%82%E4%BD%95%E9%A1%AF%E7%A4%BA%E5%B0%8E%E8%87%B4%E3%80%8Cls%20-l%E3%80%8D%E5%A0%B1%E5%91%8A%E7%9A%84%E7%9B%AE%E9%8C%84%E5%A4%A7%E5%B0%8F%E7%9A%84%E5%85%A7%E5%AE%B9%EF%BC%9F.png)
ls -l
據我了解,報告的尺寸目錄反映這些目錄的「元資料」所佔用的空間。另外,我認為該元資料以二進位/非人類可讀的形式存在。
是否有 Unix 指令以人類可讀的形式顯示此元資料?
編輯:如果上述問題的答案高度依賴檔案系統,我應該使用哪些關鍵字來搜尋特定檔案系統的答案? (我對多種類型的檔案系統的答案感興趣,包括 nfs、ext3、ext4、vfat、gpfs、tmpfs 和 lustre)。當我搜尋“如何顯示目錄資料/資訊/內容”等時,我只找到有關如何列出目錄中的文件的信息,這並不是我正在尋找的內容。
答案1
ls
顯示該資訊是因為資料儲存在size
目錄的 inode 欄位中。這是依賴檔案系統的。給定的檔案系統可以保存其他資訊。例如,ZFS 會報告該欄位中的目錄條目數。
如果這是您感興趣的級別,那麼讀取資料就很簡單。 ls
和stat
是以不同方式顯示 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
(或等)來顯示該資料的二進位形式。 od
Linux 上的情況並非如此,而且在可能的系統上,該資料的解釋可能取決於檔案系統類型或可能被標準化(以與歷史檔案系統類型相容)。看目錄何時停止作為檔案讀取?和目錄的八進位轉儲
由於以下幾個原因,報告的大小ls
超過了儲存您看到的資料所需的大小ls
:
- 可能存在
ls
未顯示的元數據,例如檔案內容的封鎖清單。 - 可能存在填充,例如各處未使用的位元、與機器字邊界的對齊、儲存在固定大小欄位中的檔案名稱等。
- 有元資料來組織檔案名稱列表,例如 B 樹或搜尋樹結構。
- 通常,文件按區塊進行組織,文件使用全部區塊,最後一個區塊僅部分填充,除非檔案大小恰好是區塊大小的倍數。
- 在某些檔案系統上,例如 ext4,目錄在增長很多(因為它們包含很多檔案)然後收縮很多(因為很多檔案被刪除)後不會返回未使用的區塊。
如果您想了解一些ls
不會向您顯示的內容,您需要直接查看目錄內容。如果您的 Unix 變體允許,可以在目錄上運行od
或類似操作,或使用低階工具,例如分割區上的十六進位檢視器或檔案系統偵錯器,例如debugfs
對於 ext2/ext3/ext4。除了極少數非常熟悉檔案系統格式的人之外,您以這種方式看到的資訊並不符合「人類可讀」的條件。