Jest to całkowicie bezużyteczny, niepotrzebny w praktycznym zastosowaniu, ale zabawny post o katalogach w systemach *nix. Jest piątek.
Podczas rozmów kwalifikacyjnych często pojawiają się nudne pytania dotyczące i-węzłów, „wszystko jest plikami”, na które niewiele osób jest w stanie odpowiedzieć przy zdrowych zmysłach. Ale jeśli kopiesz trochę głębiej, możesz znaleźć interesujące rzeczy.
Aby zrozumieć post, kilka punktów:
- wszystko jest plikiem. katalog jest także plikiem
- i-węzeł przechowuje metadane z pliku, ale nazwa pliku nie jest tam przechowywana
- nazwa pliku jest przechowywana w danych katalogu
- Rozmiar katalogu, ten sam, który jest pokazywany w ls i domyślnie wynosi 4Kb, zależy od liczby plików w katalogu i długości ich nazw
- Oczywiście im więcej plików, tym większy rozmiar katalogu
A teraz interesująca część: tworzymy katalog zawierający milion plików, sprawdzamy rozmiar katalogu, a następnie usuwamy wszystkie pliki i sprawdzamy rozmiar katalogu.
$ 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 .
Jak widać rozmiar katalogu się nie zmienił, choć mogłoby się wydawać :)
Rozmiar katalogu (bez jego usuwania) można naprawić jedynie za pomocą polecenia fsck (i opcji -D) w stanie niezamontowanym.
Kiedy jednak poszedłem szukać przyczyny takiego stanu rzeczy, okazało się, że 10 lat temu już takie zachowanie miało miejsce
Źródło: www.habr.com