Hakemistojen koko ei ole vaivan arvoista

Tämä on täysin hyödytön, tarpeeton käytännön sovelluksessa, mutta hauska pieni postaus *nix-järjestelmien hakemistoista. On perjantai.

Haastatteluissa herää usein tylsiä kysymyksiä inodeista, kaikki-on-tiedostoista, joihin harva osaa järkevästi vastata. Mutta jos kaivaa hieman syvemmälle, voit löytää mielenkiintoisia asioita.

Viestin ymmärtämiseksi muutama seikka:

  • kaikki on tiedostoa. hakemisto on myös tiedosto
  • inode tallentaa tiedoston metatiedot, mutta tiedoston nimeä ei tallenneta sinne
  • tiedoston nimi tallennetaan hakemistotietoihin
  • Hakemiston koko, sama, joka näkyy ls:ssä ja on oletuksena 4 kt, riippuu hakemistossa olevien tiedostojen määrästä ja niiden nimien pituudesta
  • On selvää, että mitä enemmän tiedostoja, sitä suurempi on hakemiston koko

Nyt tässä on mielenkiintoinen osa: luomme hakemiston, jossa on miljoona tiedostoa, tarkistamme hakemiston koon ja poistamme sitten kaikki tiedostot ja katsomme hakemiston kokoa.

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

Kuten näette, hakemiston koko ei ole muuttunut, vaikka siltä näyttää :)

Voit korjata vain hakemiston koon (poistamatta sitä) käyttämällä fsck:tä (ja -D-vaihtoehtoa) liittämättömässä tilassa.

Mutta kun menin etsimään, miksi tämä oli niin, kävi ilmi, että sellainen käytös oli jo 10 vuotta sitten keskusteltu lkml:nä. Ja kehittäjien mukaan korjaus ei yksinkertaisesti ole vaivan arvoista.

Lähde: will.com

Lisää kommentti