Størrelsen af direktørernes indhold retfærdiggør ikke vores anstrengelser

Dette er et helt unyttigt, praktisk uanvendeligt, men sjovt lille indlæg om kataloger i *nix-systemer. Det er trods alt fredag.

Til jobsamtaler dukker der ofte kedelige spørgsmål op om inode'er, alt-er-filer, som de færreste kan svare fornuftigt på. Men hvis man graver lidt dybere, kan man finde interessante ting.

For at forstå indlægget, nogle punkter:

  • alt er en fil. En katalog er også en fil.
  • inode'en gemmer metadata for filen, men filnavnet gemmes der ikke.
  • filnavnet gemmes i katalogdataene.
  • størrelsen på kataloget, den størrelse der vises i ls og som som standard er 4Kb, afhænger af antallet af filer i kataloget og længden af deres navne.
  • det er åbenlyst, at jo flere filer, desto større bliver kataloget.

Og nu det interessante: opretter en katalog med en million filer, tjekker størrelsen på kataloget, og så sletter vi alle filer og ser på størrelsen af kataloget.

$ mkdir niceDir && cd niceDir
# afhængigt af hastigheden på lagermediet, kan den følgende kommando tage 2-10 minutter
$ 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 man kan se, er størrelsen på kataloget ikke ændret, selvom det ville synes 🙂.

For at reparere størrelsen af kataloget (uden at slette) kan man kun gøre det med fsck (og -D optionen) i ikke-monteret tilstand.

Da jeg begyndte at lede efter, hvorfor det var sådan, viste det sig, at dette adfærd allerede for 10 år siden blev diskuteret i lkml. Og ifølge udviklerne er det simpelthen ikke værd at investere kræfter i at rette op på det.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster