目錄的大小不值得我們付出努力

這是一篇關於 *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 為單位。 根據開發人員的說法,修復根本不值得付出努力。

來源: www.habr.com

添加評論