Šis ir pilnīgi bezjēdzīgs, praktiski nevajadzīgs, bet smieklīgs mazs ieraksts par direktorijiem *nix sistēmās. Ir piektdiena.
Interviju laikā nereti rodas garlaicīgi jautājumi par inodēm, viss-ir-failiem, uz kuriem tikai retais var saprātīgi atbildēt. Bet, ja jūs iedziļināsities, jūs varat atrast interesantas lietas.
Lai saprastu ziņu, daži punkti:
- viss ir fails. direktorijs ir arī fails
- inode saglabā metadatus no faila, bet faila nosaukums tajā netiek saglabāts
- faila nosaukums tiek saglabāts direktoriju datos
- Direktorija lielums, tas pats, kas tiek rādīts ls un pēc noklusējuma ir 4Kb, ir atkarīgs no failu skaita direktorijā un to nosaukumu garuma
- Acīmredzot, jo vairāk failu, jo lielāks ir direktorija lielums
Tagad šeit ir interesantā daļa: mēs izveidojam direktoriju ar miljoniem failu, pārbaudām direktorija lielumu un pēc tam izdzēšam visus failus un skatāmies direktorija lielumu.
$ 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 .
Kā redzat, direktorija lielums nav mainījies, lai gan šķiet :)
Izmantojot fsck (un opciju -D), varat labot tikai direktorija lielumu (neizdzēšot to) nemontētā stāvoklī.
Bet, kad es devos meklēt, kāpēc tas tā ir, izrādījās, ka pirms 10 gadiem šāda uzvedība jau bija
Avots: www.habr.com