为什么“点”文件的大小为“。” 超过4096?


10

今天,我发现了一个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
...

Answers:


14

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

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

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

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


2
谢谢,这似乎可以解释这种现象。出于好奇,有两个问题:目录文件何时会再次收缩?有没有办法显示该文件的内容?
Martin Hennings 2012年

3
(1)另请参见unix.stackexchange.com/questions/38639/…-简短答案,删除目录并重新创建。
布里斯托

2
(2)可悲的是,不再。过去在旧的UNIX版本上是可能的。
布里斯托

您也可以e2fsck -D在文件系统上运行,但这需要将其卸载。
psusi 2012年

@布里斯托尔debugfs可能很有见识
Volker Siegel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.