Gidsgrootte is nie ons moeite werd nie

Hierdie is 'n heeltemal nuttelose, onnodige in praktiese toepassing, maar snaakse klein plasing oor dopgehou in *nix-stelsels. Dit is Vrydag.

Tydens onderhoude ontstaan ​​dikwels vervelige vrae oor inodes, alles-is-lΓͺers, wat min mense met verstand kan beantwoord. Maar as jy 'n bietjie dieper delf, kan jy interessante dinge vind.

Om die pos te verstaan, 'n paar punte:

  • alles is 'n lΓͺer. gids is ook 'n lΓͺer
  • die inode stoor metadata van die lΓͺer, maar die lΓͺernaam word nie daar gestoor nie
  • die lΓͺernaam word in die gidsdata gestoor
  • Die grootte van die gids, dieselfde een wat in ls gewys word en by verstek 4Kb is, hang af van die aantal lΓͺers in die gids en die lengte van hul name
  • Natuurlik, hoe meer lΓͺers, hoe groter is die gidsgrootte

Nou hier is die interessante deel: ons skep 'n gids met 'n miljoen lΓͺers, kontroleer die grootte van die gids, en vee dan al die lΓͺers uit en kyk na die grootte van die gids.

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

Soos u kan sien, het die gidsgrootte nie verander nie, alhoewel dit lyk :)

U kan slegs die grootte van 'n gids regmaak (sonder om dit uit te vee) met behulp van fsck (en die -D-opsie) in 'n ongemonteerde toestand.

Maar toe ek gaan soek het hoekom dit so was, het dit geblyk dat 10 jaar gelede al sulke gedrag het bespreek in lkml. En volgens die ontwikkelaars is die oplossing eenvoudig nie die moeite werd nie.

Bron: will.com

Voeg 'n opmerking