ڈائرکٹری کا سائز ہماری کوشش کے قابل نہیں ہے۔

یہ ایک مکمل طور پر بیکار، عملی اطلاق میں غیر ضروری، لیکن *نکس سسٹمز میں ڈائریکٹریز کے بارے میں مضحکہ خیز چھوٹی سی پوسٹ ہے۔ آج جمعہ ہے.

انٹرویوز کے دوران، انوڈس، ہر چیز کی فائلوں کے بارے میں اکثر بورنگ سوالات اٹھتے ہیں، جن کا جواب بہت کم لوگ ہی دے سکتے ہیں۔ لیکن اگر آپ تھوڑی گہری کھدائی کریں تو آپ کو دلچسپ چیزیں مل سکتی ہیں۔

پوسٹ کو سمجھنے کے لیے چند نکات:

  • سب کچھ ایک فائل ہے. ڈائریکٹری بھی ایک فائل ہے۔
  • انوڈ فائل سے میٹا ڈیٹا اسٹور کرتا ہے، لیکن فائل کا نام وہاں محفوظ نہیں ہوتا ہے۔
  • فائل کا نام ڈائریکٹری ڈیٹا میں محفوظ ہے۔
  • ڈائرکٹری کا سائز، وہی جو ls میں دکھایا گیا ہے اور بطور ڈیفالٹ 4Kb ہے، ڈائرکٹری میں فائلوں کی تعداد اور ان کے ناموں کی لمبائی پر منحصر ہے۔
  • ظاہر ہے، جتنی زیادہ فائلیں ہوں گی، ڈائرکٹری کا سائز اتنا ہی بڑا ہوگا۔

اب یہ دلچسپ حصہ ہے: ہم ایک ملین فائلوں کے ساتھ ایک ڈائرکٹری بناتے ہیں، ڈائرکٹری کا سائز چیک کرتے ہیں، اور پھر تمام فائلوں کو ڈیلیٹ کرتے ہیں اور ڈائرکٹری کا سائز دیکھتے ہیں۔

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

جیسا کہ آپ دیکھ سکتے ہیں، ڈائریکٹری کا سائز تبدیل نہیں ہوا ہے، حالانکہ ایسا لگتا ہے :)

آپ غیر ماونٹڈ حالت میں fsck (اور -D آپشن) کا استعمال کرتے ہوئے صرف ڈائریکٹری کا سائز (اسے حذف کیے بغیر) ٹھیک کر سکتے ہیں۔

لیکن جب میں یہ دیکھنے گیا کہ ایسا کیوں ہے تو پتہ چلا کہ 10 سال پہلے بھی ایسا سلوک ہو چکا تھا۔ بحث کی lkml میں اور ڈویلپرز کے مطابق، فکس صرف کوشش کے قابل نہیں ہے.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں