這是一篇關於 *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年前就已經存在了。
來源: www.habr.com