Størrelsen på katalogene er ikke verdt innsatsen

Dette er et helt ubrukelig, unødvendig i praktisk applikasjon, men morsomt lite innlegg om kataloger i *nix-systemer. Det er fredag.

Under intervjuer dukker det ofte opp kjedelige spørsmål om inoder, alt-er-filer, som få mennesker kan svare fornuftig på. Men graver du litt dypere, kan du finne interessante ting.

For å forstå innlegget, noen punkter:

  • alt er en fil. katalogen er også en fil
  • inoden lagrer metadata fra filen, men filnavnet lagres ikke der
  • filnavnet er lagret i katalogdataene
  • Størrelsen på katalogen, den samme som vises i ls og er 4Kb som standard, avhenger av antall filer i katalogen og lengden på navnene deres
  • Jo flere filer, jo større er katalogstørrelsen

Her er den interessante delen: vi lager en katalog med en million filer, kontrollerer størrelsen på katalogen, og sletter deretter alle filene og ser på størrelsen på katalogen.

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

Som du kan se, har ikke katalogstørrelsen endret seg, selv om det ser ut til å være :)

Du kan bare fikse størrelsen på en katalog (uten å slette den) ved å bruke fsck (og -D-alternativet) i en umontert tilstand.

Men da jeg gikk for å se etter hvorfor det var slik, viste det seg at det allerede var slik oppførsel for 10 år siden diskutert i lkml. Og ifølge utviklerne er løsningen rett og slett ikke verdt innsatsen.

Kilde: www.habr.com

Legg til en kommentar