为什么会出现“点”文件的大小“.” 超过4096?

Mar*_*ngs 10 ls filesystems size directory ext4

今天我发现了一个大小为 4MB 的“空”目录。

它没有可见的内容,所以我尝试了ls -lah. 这向我展示了一些隐藏文件(不是很大)。搜索目录如此大的原因,我发现点文件 ( .) 的大小为 3.9MB。

该文件中存储了什么?这不就是一种指向同一目录的链接吗?

这是外壳输出(匿名):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 (mockbuild@builder6.centos.org) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Mon Oct 22 08:32:04 EDT 2007
-bash# pwd
/data/foo/bar/tmp
-bash# ls -lah
total 4.1M
drwxrwxrwx  3 nobody nobody 3.9M Nov 21 10:02 .
drwxrwxrwx 16 nobody nobody 4.0K Aug 27 17:26 ..
-rw-------  1 root   root    20K Oct 25 14:06 .bash_history
...
Run Code Online (Sandbox Code Playgroud)

小智 14

点文件与每个目录一样,包含此目录中文件的名称列表及其 inode 编号。因此,如果您曾经在该目录中有很多文件(对于“tmp”目录来说不太可能),这会使目录条目增长到这个大小。

文件消失后,文件系统不会再次自动收缩目录文件。

您可以自己尝试创建一个新的空目录,ls -la在其中查看初始大小(在我的机器上为 4096),然后touch输入大量文件,这将使目录大小增加。

(是的,我知道我在这里掩盖了很多细节/不准确。但 OP 没有要求对 EXT* 文件系统的工作方式进行完整解释。)

  • (1) 另见 http://unix.stackexchange.com/questions/38639/how-to-compact-a-directory - 简短回答,删除目录并重新创建它。 (3认同)
  • 谢谢,这似乎可以解释这种现象。两个问题只是出于好奇:目录文件什么时候会再次缩小?有没有办法显示该文件的内容? (2认同)
  • (2) 可悲的是,不再。这曾经在旧的 UNIX 版本上是可能的。 (2认同)