Saiz direktori tidak berbaloi dengan usaha kami

Ini sama sekali tidak berguna, tidak perlu dalam aplikasi praktikal, tetapi catatan kecil yang lucu tentang direktori dalam sistem *nix. Hari Jumaat.

Semasa temu bual, soalan yang membosankan sering timbul tentang inod, everything-is-files, yang hanya segelintir orang yang boleh menjawab dengan waras. Tetapi jika anda menggali lebih dalam, anda boleh menemui perkara yang menarik.

Untuk memahami siaran, beberapa perkara:

  • semuanya adalah fail. direktori juga merupakan fail
  • inode menyimpan metadata daripada fail, tetapi nama fail tidak disimpan di sana
  • nama fail disimpan dalam data direktori
  • Saiz direktori, sama yang ditunjukkan dalam ls dan 4Kb secara lalai, bergantung pada bilangan fail dalam direktori dan panjang nama mereka
  • Jelas sekali, lebih banyak fail, lebih besar saiz direktori

Sekarang inilah bahagian yang menarik: kami mencipta direktori dengan sejuta fail, semak saiz direktori, dan kemudian padam semua fail dan lihat saiz direktori.

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

Seperti yang anda lihat, saiz direktori tidak berubah, walaupun nampaknya :)

Anda hanya boleh menetapkan saiz direktori (tanpa memadamkannya) menggunakan fsck (dan pilihan -D) dalam keadaan tidak dilekapkan.

Tetapi apabila saya pergi untuk mencari mengapa ini berlaku, ternyata 10 tahun yang lalu kelakuan sedemikian sudah berlaku dibincangkan dalam lkml. Dan menurut pemaju, pembaikan itu tidak berbaloi dengan usaha.

Sumber: www.habr.com

Tambah komen