Storleken på katalogerna är inte värt vår ansträngning

Detta är ett helt värdelöst, onödigt i praktisk tillämpning, men roligt litet inlägg om kataloger i *nix-system. Det är fredag.

Under intervjuer dyker det ofta upp tråkiga frågor om inoder, allt-är-filer, som få människor kan svara förnuftigt på. Men om du gräver lite djupare kan du hitta intressanta saker.

För att förstå inlägget, några punkter:

  • allt är en fil. katalogen är också en fil
  • inoden lagrar metadata från filen, men filnamnet lagras inte där
  • filnamnet lagras i katalogdata
  • Storleken på katalogen, samma som visas i ls och är 4Kb som standard, beror på antalet filer i katalogen och längden på deras namn
  • Uppenbarligen, ju fler filer, desto större katalogstorlek

Nu är här den intressanta delen: vi skapar en katalog med en miljon filer, kontrollerar storleken på katalogen och tar sedan bort alla filer och tittar på storleken 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 katalogstorleken inte ändrats, även om det verkar :)

Du kan bara fixa storleken på en katalog (utan att ta bort den) med fsck (och alternativet -D) i ett omonterat tillstånd.

Men när jag gick för att leta efter varför det var så, visade det sig att det redan hade ett sådant beteende för 10 år sedan diskuteras i lkml. Och enligt utvecklarna är korrigeringen helt enkelt inte värt ansträngningen.

Källa: will.com

Lägg en kommentar