Katalogu lielums nav mūsu pūļu vērts

Š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 apspriests lkml. Un, pēc izstrādātāju domām, labojums vienkārši nav pūļu vērts.

Avots: www.habr.com

Pievieno komentāru