Veličina imenika nije vrijedna našeg truda

Ovo je potpuno beskoristan, nepotreban u praktičnoj primjeni, ali smiješan mali post o imenicima u *nix sustavima. Danas je petak.

Tijekom intervjua često se pojavljuju dosadna pitanja o inodima, sve-je-datotekama, na koja malo ljudi može razumno odgovoriti. Ali ako malo dublje kopate, možete pronaći zanimljive stvari.

Da biste razumjeli post, nekoliko stvari:

  • sve je datoteka. imenik je također datoteka
  • inode pohranjuje metapodatke iz datoteke, ali naziv datoteke nije tamo pohranjen
  • naziv datoteke pohranjuje se u podatke direktorija
  • Veličina direktorija, ista ona koja je prikazana u ls i iznosi 4 Kb prema zadanim postavkama, ovisi o broju datoteka u direktoriju i duljini njihovih imena
  • Očito, što je više datoteka, veća je veličina direktorija

Sada slijedi zanimljivi dio: stvaramo 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 :)

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

Ali kad sam krenuo tražiti zašto je to tako, pokazalo se da je prije 10 godina takvo ponašanje već bilo raspravljali u lkml. A prema programerima, popravak jednostavno nije vrijedan truda.

Izvor: www.habr.com

Dodajte komentar