目录的大小不值得我们付出努力

这是一篇关于 *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年前就已经存在了。 我们讨论 在lkml中。根据开发人员的说法,修复根本不值得付出努力。

来源: habr.com

添加评论