A könyvtárak mérete nem éri meg az erőfeszítésünket

Ez egy teljesen haszontalan, gyakorlati alkalmazásban szükségtelen, de vicces kis bejegyzés a *nix rendszerek könyvtárairól. Péntek van.

Az interjúk során gyakran merülnek fel unalmas kérdések az inódákkal, a minden-is-fájlokkal kapcsolatban, amire kevesen tudnak épeszű választ adni. De ha egy kicsit mélyebbre ásol, érdekes dolgokat találhatsz.

A poszt megértéséhez néhány pont:

  • minden egy fájl. könyvtár is egy fájl
  • az inode tárolja a fájl metaadatait, de a fájl nevét nem tárolja ott
  • a fájlnév a könyvtáradatokban tárolódik
  • A könyvtár mérete, ugyanaz, amely az ls-ben látható, és alapértelmezés szerint 4 Kb, a könyvtárban lévő fájlok számától és nevük hosszától függ
  • Nyilvánvaló, hogy minél több fájl, annál nagyobb a könyvtár mérete

Most itt van az érdekes rész: létrehozunk egy könyvtárat millió fájllal, ellenőrizzük a könyvtár méretét, majd töröljük az összes fájlt, és megnézzük a könyvtár méretét.

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

Mint látható, a könyvtár mérete nem változott, bár úgy tűnik :)

Egy könyvtár méretét (törlés nélkül) csak az fsck (és a -D kapcsoló) használatával javíthatja, ha nem csatlakoztatva van.

De amikor elmentem megkeresni, hogy miért van ez így, kiderült, hogy 10 évvel ezelőtt már volt ilyen viselkedés megbeszélték lkml-ben. És a fejlesztők szerint a javítás egyszerűen nem éri meg az erőfeszítést.

Forrás: will.com

Hozzászólás