Toto je naprosto zbytečný, v praxi neužitečný, ale zábavný malý příspěvek o adresářích v *nix systémech. Je přece pátek.
Na pohovorech se často objevují nudné otázky o inodech, všechno-jsou-soubory, na které málo kdo dokáže smysluplně odpovědět. Ale pokud se podíváte trochu hlouběji, můžete najít zajímavé věci.
Pro pochopení příspěvku zde je několik tezí:
- všechno je soubor. adresář je také soubor
- v inodu jsou uloženy metaúdaje souboru, ale název souboru tam není uložen
- název souboru je uložen v datech adresáře
- velikost adresáře, ta, která se zobrazuje v ls a je ve výchozím nastavení 4KB, závisí na počtu souborů v adresáři a délce jejich názvů
- je zřejmé, že čím více souborů, tím větší velikost adresáře
A teď zajímavé: vytvořte adresář s milionem souborů, zkontrolujte velikost adresáře a pak vymažte všechny soubory a podívejte se na velikost adresáře.
$ mkdir niceDir && cd niceDir
# v závislosti na rychlosti média může následující příkaz zabrat 2-10 minut
$ 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 .Jak můžete vidět, velikost adresáře se nezměnila, i když by se to mohlo zdát 🙂
Opravit velikost adresáře (bez smazání) lze pouze pomocí fsck (a volby -D) v odmontovaném stavu.
A když jsem šel hledat, proč to tak je, ukázalo se, že před 10 lety takové chování už existovalo v lkml. A podle názoru vývojářů oprava prostě nestojí za vložené úsilí.
Zdroj: habr.com
