Madhësia e drejtorive nuk ia vlen përpjekja jonë

Ky është një postim krejtësisht i padobishëm, i panevojshëm në aplikim praktik, por i vogël qesharak rreth drejtorive në sistemet *nix. Eshte e premte.

Gjatë intervistave, shpesh lindin pyetje të mërzitshme për inodes, skedarët gjithçka është, të cilave pak njerëz mund t'u përgjigjen me arsyeshmëri. Por nëse gërmoni pak më thellë, mund të gjeni gjëra interesante.

Për të kuptuar postimin, disa pika:

  • gjithçka është një skedar. drejtoria është gjithashtu një skedar
  • inode ruan meta të dhënat nga skedari, por emri i skedarit nuk ruhet atje
  • emri i skedarit ruhet në të dhënat e drejtorisë
  • Madhësia e drejtorisë, e njëjta që tregohet në ls dhe është 4 Kb si parazgjedhje, varet nga numri i skedarëve në drejtori dhe gjatësia e emrave të tyre.
  • Natyrisht, sa më shumë skedarë, aq më e madhe është madhësia e drejtorisë

Tani këtu është pjesa interesante: ne krijojmë një drejtori me një milion skedarë, kontrollojmë madhësinë e drejtorisë dhe më pas fshijmë të gjithë skedarët dhe shikojmë madhësinë e drejtorisë.

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

Siç mund ta shihni, madhësia e drejtorisë nuk ka ndryshuar, megjithëse duket :)

Ju mund të rregulloni vetëm madhësinë e një drejtorie (pa e fshirë atë) duke përdorur fsck (dhe opsionin -D) në një gjendje të pamontuar.

Por kur shkova të kërkoja pse ishte kështu, doli që 10 vjet më parë një sjellje e tillë kishte tashmë diskutuar në lkml. Dhe sipas zhvilluesve, rregullimi thjesht nuk ia vlen përpjekja.

Burimi: www.habr.com

Shto një koment