Dizin boyutu çabamıza değmez

Bu, *nix sistemlerindeki dizinler hakkında tamamen işe yaramaz, pratik uygulamada gereksiz ama komik küçük bir yazıdır. Bugün cuma.

Görüşmeler sırasında, çok az kişinin mantıklı bir şekilde cevaplayabileceği inode'lar, yani her şey dosyadır hakkında sıkıcı sorular ortaya çıkar. Ancak biraz daha derine inerseniz ilginç şeyler bulabilirsiniz.

Gönderiyi anlamak için birkaç nokta:

  • her şey bir dosyadır. dizin aynı zamanda bir dosyadır
  • inode dosyadaki meta verileri saklar ancak dosya adı orada saklanmaz
  • dosya adı dizin verilerinde saklanır
  • Dizinin boyutu, ls'de gösterilenle aynıdır ve varsayılan olarak 4Kb'dir, dizindeki dosya sayısına ve adlarının uzunluğuna bağlıdır.
  • Açıkçası, ne kadar çok dosya olursa, dizin boyutu da o kadar büyük olur

Şimdi işin ilginç kısmı şu: Bir milyon dosyadan oluşan bir dizin oluşturuyoruz, dizinin boyutunu kontrol ediyoruz ve ardından tüm dosyaları silip dizinin boyutuna bakıyoruz.

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

Gördüğünüz gibi dizin boyutu değişmemiş gibi görünse de :)

Bir dizinin boyutunu (silmeden) yalnızca fsck'i (ve -D seçeneğini) bağlı olmayan bir durumda kullanarak düzeltebilirsiniz.

Ancak bunun neden böyle olduğunu araştırmaya gittiğimde, bu tür davranışların 10 yıl önce zaten mevcut olduğu ortaya çıktı. Biz tartışılan lkml'de. Ve geliştiricilere göre, düzeltme çabaya değmez.

Kaynak: habr.com

Yorum ekle