ls -l
据我了解,报告的尺寸目录反映这些目录的“元数据”所占用的空间。另外,我认为该元数据以二进制/非人类可读的形式存在。
是否有 Unix 命令可以以人类可读的形式显示此元数据?
编辑:如果上述问题的答案高度依赖于文件系统,我应该使用哪些关键字来搜索特定文件系统的答案? (我对多种类型的文件系统的答案感兴趣,包括 nfs、ext3、ext4、vfat、gpfs、tmpfs 和 lustre)。当我搜索“如何显示目录数据/信息/内容”等时,我只找到有关如何列出目录中的文件的信息,这并不是我正在寻找的内容。
答案1
ls
显示该信息是因为数据存储在size
目录的 inode 字段中。这是依赖于文件系统的。给定的文件系统可以保存其他信息。例如,ZFS 报告该字段中的目录条目数。
如果这是您感兴趣的级别,那么读取数据就很简单。 ls
和stat
是以不同方式显示 inode 信息的工具。您可以检查它们以了解如何提取数据并以人类可读的形式显示它。看一眼统计数据(2)用于查询信息的系统调用。
如果您只想直接收集该数字,请考虑stat -c "%s"
% ls -ld /
drwxr-xr-x 44 root root 4096 Jun 10 17:11 /
% stat -c "%s" /
4096
答案2
是的,有:它叫做ls
……
ls
目录报告的大小是目录内容的大小。它不是目录的元数据,而是目录中文件的元数据。其中大部分都以 列出ls -la
。
在某些 Unix 变体上,您可以通过在目录上调用cat
(或等)来显示该数据的二进制形式。 od
Linux 上的情况并非如此,并且在可能的系统上,该数据的解释可能取决于文件系统类型或可能被标准化(以与历史文件系统类型兼容)。看目录什么时候不再能作为文件被读取?和目录的八进制转储
由于以下几个原因,报告的大小ls
超过了存储您看到的数据所需的大小ls
:
- 可能存在
ls
未显示的元数据,例如文件内容的阻止列表。 - 可能存在填充,例如各处未使用的位、与机器字边界的对齐、存储在固定大小字段中的文件名等。
- 有元数据来组织文件名列表,例如 B 树或搜索树结构。
- 通常,文件按块进行组织,文件使用全部块,最后一个块仅部分填充,除非文件大小恰好是块大小的倍数。
- 在某些文件系统上,例如 ext4,目录在增长很多(因为它们包含很多文件)然后收缩很多(因为很多文件被删除)后不会返回未使用的块。
如果你想知道那些ls
不会显示的内容,你需要直接查看目录内容。od
如果你的 Unix 版本允许,可以在目录上运行或类似命令,或者使用分区上的十六进制查看器等低级工具或文件系统调试器,例如debugfs
对于 ext2/ext3/ext4。除了极少数非常熟悉文件系统格式的人之外,您以这种方式看到的信息不符合“人类可读”的条件。