我在我的 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 有多种目录格式,用于小目录的缩写形式本质上具有相同的最小索引节点号+文件名+文件名长度+总长度集。