Velikost imenikov ni vredna našega truda

To je popolnoma neuporabna, nepotrebna v praktični uporabi, a smešna objava o imenikih v sistemih *nix. Petek je.

Med intervjuji se pogosto pojavljajo dolgočasna vprašanja o inodejih, datotekah vse je, na katera zna le malokdo odgovoriti razumno. A če se malo poglobite, lahko najdete zanimive stvari.

Da bi razumeli objavo, nekaj točk:

  • vse je datoteka. imenik je tudi datoteka
  • inode shrani metapodatke iz datoteke, vendar ime datoteke ni tam shranjeno
  • ime datoteke je shranjeno v podatkovnem imeniku
  • Velikost imenika, enaka kot je prikazana v ls in je privzeto 4Kb, je odvisna od števila datotek v imeniku in dolžine njihovih imen
  • Očitno je, da več kot je datotek, večja je velikost imenika

Tukaj je zanimiv del: ustvarimo imenik z milijoni datotek, preverimo velikost imenika, nato izbrišemo vse datoteke in pogledamo velikost imenika.

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

Kot lahko vidite, se velikost imenika ni spremenila, čeprav se zdi :)

Velikost imenika lahko popravite samo (brez da bi ga izbrisali) z uporabo fsck (in možnosti -D) v odklopljenem stanju.

Ko pa sem šel iskat, zakaj je temu tako, se je izkazalo, da je pred 10 leti takšno obnašanje že bilo razpravljali v lkml. In po mnenju razvijalcev popravek preprosto ni vreden truda.

Vir: www.habr.com

Dodaj komentar