
命令輸出中目錄的大小意味著什麼ls -l
?
答案1
這是磁碟上用於儲存目錄元資訊(即屬於該目錄的檔案表)的空間大小。如果它是 1024,這意味著磁碟上的 1024 位元組被用於此目的(它總是分配完整的區塊)。
答案2
列印的「目錄大小」 (與任何檔案類型一樣)是中呼叫ls -l
報告的值。stat()
statbuf.st_size
這st_size
對於目錄意味著什麼,完全取決於檔案系統類型。除非您知道檔案系統類型並理解其概念,否則無法從 中的值推斷出任何內容st_size
。
在目前通常命名的歷史 UNIX 檔案系統中
v7-fs
,目錄重複了 16 位元組條目,其中包含 16 位元 inode 號和 14 位元組檔案名稱。目錄的「大小」對於read(2)
操作來說是有意義的,並且總是增長或保持原樣。.
和條目..
是透過手動將它們硬連結到當前目錄和上一層目錄來建立的。正常的空原始目錄的連結計數是 2。在自 1989 年(SVr4)起的 BSD-4.2 檔案系統中
ufs
,目錄是一系列可變長度記錄,其使用的格式不被認為是穩定的,因此不允許用戶空間命令讀取這種格式。報告的「大小」是v7-fs 中的位元組大小,大小通常會增長或保持不變,但較新版本的檔案系統可能會在某些情況下縮小大小- 但並不總是在您期望的情況下縮小大小。與 一樣,空目錄報告的連結計數為 2v7-fs
。在
WOFS
我在 1988 年夏天到 1991 年 5 月之間設計和實現的檔案系統中,目錄總是報告「大小」0,並且從來沒有可以使用呼叫讀取的內容類型read(2)
。這是因為WOFS
它是第一個寫時複製檔案系統,並且WOFS
在文件中報告它們所在的目錄,而不是在目錄中列出。如果您WOFS
使用 讀取目錄readdir()
,您只能取得預期條目的數據,而不會取得.
和 的數據..
。空目錄的連結計數WOFS
為 1,整個行為完全符合 POSIX 標準。在
ZFS
,這是在閱讀WOFS
論文後實施的。ZFS
是一個寫時複製文件系統,其作者並不否認他們從WOFS
. ZFS 上的目錄報告number of directory entries
inst_size
,因此報告的「大小」對於目錄資料所佔用的磁碟空間沒有實際意義。ZFS 目錄中沒有.
和條目,但如果您調用,這些條目將被偽造並返回給前兩個操作。 ZFS 是清單中唯一不支援硬連結目錄的 FS,但報告的目錄連結計數始終為 2。..
readdir()
與 ZFS 類似,WAFL 複製了
WOFS
. Netapp 是在論文發表WAFL
3 年後編寫的WOFS
,WAFL 是寫時複製的,但 WAFL 似乎報告的「大小」值可能是假設目錄有內容的「真實目錄大小」。
答案3
目錄為有關其自身及其內容的元資料保留 4096 位元組(至少)。
另外,4096 位元組是 ext2/ext3/ext4 檔案系統的預設分配單元(區塊),因此目錄不能再小了。
在不同的檔案系統上,您可能會發現具有不同預設大小的目錄,這是由於檔案系統的預設區塊大小所致。
目錄大小也可以隨著填充而動態增長,但是一旦填充,為元資料保留的空間就無法在不刪除目錄的情況下重新分配。
答案4
目錄只是一個目錄,就像電話目錄一樣。它只是一個包含數字列表和數字旁邊的名稱的檔案。每個數字引用檔案系統中的一個檔案(索引節點號),名稱就是檔案名稱。
您需要磁碟空間來保存該數據,其分配、增長和收縮的方式取決於檔案系統。