
我在我的 CentOS 7.3 實例上運行了這個。
[user01@ ~]$ rm -rf my-very-own-directory/
[user01@ ~]$ mkdir my-very-own-directory/
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 6 Blocks: 0 IO Block: 4096 directory
[user01@ ~]$ mkdir my-very-own-directory/00
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 16 Blocks: 0 IO Block: 4096 directory
[user01@ ~]$ date > my-very-own-directory/date.txt
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 32 Blocks: 0 IO Block: 4096 directory
[user01@ ~]$ echo "content" > my-very-own-directory/content
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 47 Blocks: 0 IO Block: 4096 directory
- 初始創建 => 大小 = 6
- 新增名稱長度為 2 個位元組的條目 => 大小為 16 (6 + 8 + 2)
- 新增另一個名稱長度為 4 個位元組的條目 => 大小為 32 (16 + 8 + 8)
- 新增另一個名稱長度為 7 位元組的條目 => 大小為 47 (32 + 8 + 7)
2個問題:
- 建立的目錄大小為6,為什麼?
- 目錄的每個新條目,無論是子目錄的文件,都會增加「我自己的目錄」的大小。問題是,大小增加了8+(檔案名稱/目錄名稱的長度)。為什麼是8?
答案1
目錄格式完全取決於檔案系統。
至少,目錄條目必須包含檔案名稱和索引節點號。
要使用Linuxext4
檔案系統(和舊版本)作為範例,原始目錄條目具有索引節點號(4 位元組)、檔案名稱長度(2 位元組)和總條目長度(2 位元組),加上檔案名稱本身。 (IIRC 明確指定總長度以允許填充等。)
當前版本(來自ext3
)還支援樹型存儲,它允許更快地查找包含大量文件的目錄,但格式當然更複雜。
儘管在 上ext4
,目錄的大小僅顯示為區塊大小的倍數,即空目錄具有大小4096
,並且在創建足夠的檔案需要為其分配新資料區塊之前它不會增加。
RHEL 7 使用 XFS 作為預設檔案系統,因此您可能正在執行該系統。XFS 有多種目錄格式,用於小目錄的縮寫形式本質上具有相同的最小索引節點號+檔案名稱+檔案名稱長度+總長度集。