Veličina direktorija nije vrijedna našeg truda

Ovo je potpuno beskoristan, nepotreban u praktičnoj primjeni, ali smiješan mali post o direktorijima u *nix sistemima. Petak je.

Tokom intervjua često se postavljaju dosadna pitanja o inode, sve-je-fajlovi, na koja malo ljudi može razumno odgovoriti. Ali ako kopate malo dublje, možete pronaći zanimljive stvari.

Da biste razumjeli post, nekoliko stvari:

  • sve je fajl. direktorij je također datoteka
  • inode pohranjuje metapodatke iz datoteke, ali naziv datoteke nije tamo pohranjen
  • naziv datoteke je pohranjen u podacima direktorija
  • Veličina direktorija, ista ona koja je prikazana u ls-u i po defaultu je 4Kb, ovisi o broju datoteka u direktoriju i dužini njihovih imena
  • Očigledno, što više datoteka, to je veća veličina direktorija

Evo zanimljivog dijela: kreiramo direktorij s milijun datoteka, provjeravamo veličinu direktorija, a zatim brišemo sve datoteke i gledamo veličinu direktorija.

$ 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 .

Kao što vidite, veličina direktorija se nije promijenila, iako se čini :)

Možete samo popraviti veličinu direktorija (bez brisanja) koristeći fsck (i opciju -D) u nemontiranom stanju.

Ali kada sam krenuo da tražim zašto je to tako, ispostavilo se da je pre 10 godina takvo ponašanje već bilo diskutovano u lkml. A prema programerima, popravak jednostavno nije vrijedan truda.

izvor: www.habr.com

Dodajte komentar