这是一篇关于 *nix 系统中目录的完全无用的、在实际应用中不必要的但有趣的小帖子。是星期五。
在面试过程中,经常会出现一些关于索引节点(一切都是文件)的无聊问题,很少有人能理智地回答这些问题。但如果你再深入一点,你就能发现有趣的事情。
为了理解这篇文章,有几点:
- 一切都是文件。目录也是一个文件
- inode 存储文件中的元数据,但文件名不存储在那里
- 文件名存储在目录data中
- 目录的大小与 ls 中显示的相同,默认为 4Kb,取决于目录中文件的数量及其名称的长度
- 显然,文件越多,目录大小就越大
现在有趣的部分是:我们创建一个包含一百万个文件的目录,检查该目录的大小,然后删除所有文件并查看该目录的大小。
$ mkdir niceDir && cd niceDir
# в зависимости от скорости носителя, следующая команда может занять 2-10 минут
$ for ((i=1;i<133700;i++)); do touch long_long_looong_man_sakeru_$i ; done
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug 2 13:37 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug 2 13:37 .
正如您所看到的,目录大小没有改变,尽管看起来:)
您只能在未安装状态下使用 fsck(和 -D 选项)来修复目录的大小(而不删除它)。
但当我去寻找原因时,发现这种行为在10年前就已经存在了。
来源: habr.com