Kataloogide suurus ei ole meie pingutust väärt

See on täiesti kasutu, praktilises rakenduses mittevajalik, kuid naljakas väike postitus *nix süsteemide kataloogidest. On reede.

Intervjuude käigus tekivad sageli igavad küsimused inoodide, kõik-on-failide kohta, millele vähesed oskavad mõistlikult vastata. Aga kui natukenegi süveneda, võib huvitavaid asju leida.

Postituse mõistmiseks paar punkti:

  • kõik on fail. kataloog on ka fail
  • inode salvestab faili metaandmed, kuid failinime sinna ei salvestata
  • faili nimi salvestatakse kataloogiandmetesse
  • Kataloogi suurus, sama, mis kuvatakse ls-is ja on vaikimisi 4Kb, oleneb failide arvust kataloogis ja nende nimede pikkusest
  • Ilmselgelt, mida rohkem faile, seda suurem on kataloogi suurus

Siin on huvitav osa: loome miljoni failiga kataloogi, kontrollime kataloogi suurust ja seejärel kustutame kõik failid ja vaatame kataloogi suurust.

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

Nagu näete, pole kataloogi suurus muutunud, kuigi tundub :)

Kataloogi suurust (ilma seda kustutamata) saate määrata ainult ühendamata olekus, kasutades fsck-d (ja suvandit -D).

Aga kui läksin otsima, miks see nii on, siis selgus, et 10 aastat tagasi oli selline käitumine juba olemas arutatud lkml-s. Ja arendajate sõnul pole parandus lihtsalt vaeva väärt.

Allikas: www.habr.com

Lisa kommentaar