Katalogo dydis nėra vertas mūsų pastangų

Tai visiškai nenaudingas, praktiškai nereikalingas, bet juokingas įrašas apie katalogus *nix sistemose. Penktadienis.

Interviu metu dažnai iškyla nuobodūs klausimai apie inodus, viskas-yra-failus, į kuriuos mažai kas gali protingai atsakyti. Tačiau pasigilinus galima rasti įdomių dalykų.

Norėdami suprasti įrašą, keli punktai:

  • viskas yra failas. katalogas taip pat yra failas
  • inode saugo metaduomenis iš failo, bet failo pavadinimas ten nesaugomas
  • failo pavadinimas saugomas katalogo duomenyse
  • Katalogo dydis, tas pats, kuris rodomas ls ir pagal numatytuosius nustatymus yra 4Kb, priklauso nuo failų skaičiaus kataloge ir jų pavadinimų ilgio
  • Akivaizdu, kad kuo daugiau failų, tuo didesnis katalogo dydis

Dabar čia yra įdomioji dalis: sukuriame katalogą su milijonu failų, patikriname katalogo dydį, tada ištriname visus failus ir žiūrime į katalogo dydį.

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

Kaip matote, katalogo dydis nepasikeitė, nors atrodytų :)

Katalogo dydį (jo neištrindami) galite nustatyti tik naudodami fsck (ir parinktį -D), kai ji nesujungta.

Bet kai nuėjau ieškoti, kodėl taip yra, paaiškėjo, kad toks elgesys jau buvo prieš 10 metų aptarė lkml. Ir, pasak kūrėjų, taisymas tiesiog nevertas pastangų.

Šaltinis: www.habr.com

Добавить комментарий