命令输出中目录的大小意味着什么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。ZFS 中的这两个不规则之处是为了减少非 POSIX 历史程序中的混乱而实现的。..
readdir()
与 ZFS 类似,WAFL 复制了
WOFS
. Netapp 是在论文发表WAFL
3 年后编写的WOFS
,WAFL 是写时复制的,但 WAFL 似乎报告的“大小”值可能是假设目录有内容的“真实目录大小”。
答案3
目录为有关其自身及其内容的元数据保留 4096 字节(至少)。
此外,4096 字节是 ext2/ext3/ext4 文件系统的默认分配单元(块),因此目录不能再小。
在不同的文件系统上,您可能会发现目录具有不同的默认大小,这是由于文件系统的默认块大小所致。
目录大小也可以随着填充而动态增长,但是一旦填充,为元数据保留的空间就无法在不删除目录的情况下重新分配。
答案4
目录只是一个目录,就像电话目录一样。它只是一个包含数字列表和数字旁边的名称的文件。每个数字引用文件系统中的一个文件(索引节点号),名称就是文件名。
您需要磁盘空间来保存该数据,其分配、增长和收缩的方式取决于文件系统。