To całkowicie bezużyteczny, nieprzydatny w praktycznym zastosowaniu, ale zabawny post o katalogach w systemach *nix. W końcu piątek.
Na rozmowach kwalifikacyjnych często pojawiają się nudne pytania o inody, wszystko-jest-plikami, na które niewiele osób potrafi sensownie odpowiedzieć. Ale jeśli trochę zgłębić temat, można znaleźć ciekawe rzeczy.
Aby zrozumieć post, kilka tez:
- wszystko jest plikiem. katalog to też plik
- w inodzie przechowywane są metadane pliku, ale nazwa pliku nie jest tam przechowywana
- nazwa pliku jest przechowywana w danych katalogu
- rozmiar katalogu, ten, który pokazuje ls i domyślnie wynosi 4KB, zależy od liczby plików w katalogu i długości ich nazw
- oczywiście, że im więcej plików, tym większy rozmiar katalogu
A teraz coś interesującego: tworzymy katalog z milionem plików, sprawdzamy rozmiar katalogu, a potem usuwamy wszystkie pliki i patrzymy na rozmiar katalogu.
$ mkdir niceDir && cd niceDir
# w zależności od prędkości nośnika, następna komenda może zająć 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 można zauważyć, rozmiar katalogu się nie zmienił, chociaż wydawałoby się 🙂
Naprawić rozmiar katalogu (bez usuwania) można tylko za pomocą fsck (i opcji -D) w stanie odmontowanym.
A kiedy zacząłem szukać, dlaczego tak się dzieje, okazało się, że 10 lat temu takie zachowanie już było w lkml. A zdaniem deweloperów naprawa nie jest warta poświęcenia wysiłku.
Źródło: habr.com
