To je povsem nepomemben, v praksi nepotreben, a zabaven kratek prispevek o direktorijih v *nix sistemih. Petek je vendarle.
Na razgovorih za delo pogosto naletimo na dolgočasna vprašanja o inode-ih, vse-je-dosje, na katera redko kdo lahko razumno odgovori. Toda, če malo poglobimo, lahko najdemo zanimive stvari.
Za razumevanje prispevka nekaj tez:
- vse je datoteka. direktorij je prav tako datoteka
- v inode-u so shranjeni meta-podatki o datoteki, vendar ime datoteke tam ni shranjeno
- ime datoteke je shranjeno v podatkih direktorija
- velikost direktorija, tista, ki jo vidimo pri ls in je privzeto 4KB, je odvisna od števila datotek v direktoriju in dolžine njihovih imen
- očividno je, da več kot je datotek, večja je velikost direktorija
Zdaj zanimivo: ustvarimo direktorij z milijonom datotek, preverimo velikost direktorija, potem pa izbrišemo vse datoteke in pogledamo velikost direktorija.
$ mkdir niceDir && cd niceDir
# odvisno od hitrosti nosilca, naslednji ukaz lahko traja 2-10 minut
$ 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 2. avg 13:37 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M 2. avg 13:37 .Kot lahko opazite, velikost direktorija se ni spremenila, čeprav se zdi 🙂
Velikost direktorija (brez brisanja) lahko popravite le s pomočjo fsck (in opcije -D) v odmontiranem stanju.
Ko sem šel iskati, zakaj je to tako, sem ugotovil, da je pred 10 leti to obnašanje že bilo v lkml. Po mnenju razvijalcev popravilo preprosto ni vredno vloženih prizadevanj.
Izvor: habr.com
