为什么“ls -l”报告目录的物理大小,而报告文件的逻辑大小?

为什么“ls -l”报告目录的物理大小,而报告文件的逻辑大小?

我注意到它ls -l报告目录的物理大小,同时报告文件的逻辑大小。例如,这是以下示例的输出ls -l

drwxr-xr-x 2 chris chris 36864 2017-04-23 18:14 dir1 
-rw-r--r-- 1 chris chris 6     2017-04-23 18:10 file1.txt

dir1size 是 36864 字节,它是 4096 字节的倍数(因此它可能是物理大小)。

file1.txt大小为 6 字节(这是逻辑大小)。

答案1

实际上,ls报告内核告诉它的任何内容:它在大小方面没有做任何不同的事情,具体取决于文件是否是目录)。 Linux 报告逻辑大小。但是目录的逻辑大小并不是一个非常有趣的属性:它取决于文件系统格式。

大多数 Linux 发行版上的默认文件系统类型是 ext4,您可能正在使用该类型。 Ext4 为目录分配整个块,并根据需要管理这些块内的空间。如果目录收缩,它甚至不会释放块(dir1即使您删除了其中的所有文件,也会保留 9 个块)。当询问恰好是目录的文件的大小时,ext4 返回为目录分配的大小,并且这始终是整数块。

不同的文件系统类型的行为不同。例如,对于 Btrfs,根据实验,目录的大小可以是 2 的任意倍数。

答案2

这是ext2//ext3文件系统的一个功能ext4,它们以完整块的形式报告目录的大小。如果您对 XFS 进行同样的尝试,您将看到更细粒度的大小。

真的没关系。对于文件,“逻辑”大小是相关的,因为应用程序可能依赖于了解文件的大小(最多一个字节):尾随垃圾可能是相关的,或者某些数据结构可能放置在相对于文件末尾的位置。文件(例如 .zip 档案)。

对于目录来说,“逻辑”大小并不重要,因为内部结构是众所周知的,并且在 Linux 上,用户空间程序甚至无法直接读取目录的内容。相反,读取必须经过为此目的而进行的系统调用。而那些系统调用将处理目录的内部结构。

相关内容