اندازه دایرکتوری ارزش تلاش ما را ندارد

این یک پست کاملاً بی فایده، غیر ضروری در کاربردهای عملی، اما خنده دار در مورد دایرکتوری ها در سیستم های *nix است. امروز جمعه است.

در طول مصاحبه، سوالات خسته کننده اغلب در مورد inodes، همه چیز-فایل ها مطرح می شود، که افراد کمی می توانند به طور منطقی به آنها پاسخ دهند. اما اگر کمی عمیق تر شوید، می توانید چیزهای جالبی پیدا کنید.

برای درک مطلب چند نکته:

  • همه چیز یک فایل است دایرکتوری نیز یک فایل است
  • inode متادیتا را از فایل ذخیره می کند، اما نام فایل در آنجا ذخیره نمی شود
  • نام فایل در اطلاعات دایرکتوری ذخیره می شود
  • اندازه دایرکتوری، همان چیزی که در ls نشان داده می شود و به طور پیش فرض 4 کیلوبایت است، به تعداد فایل های دایرکتوری و طول نام آنها بستگی دارد.
  • بدیهی است که هر چه تعداد فایل ها بیشتر باشد، سایز دایرکتوری بزرگتر می شود

حالا بخش جالب اینجاست: ما یک دایرکتوری با یک میلیون فایل ایجاد می کنیم، اندازه دایرکتوری را بررسی می کنیم و سپس همه فایل ها را حذف می کنیم و به اندازه دایرکتوری نگاه می کنیم.

$ 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) در حالت unmounted اصلاح کنید.

اما وقتی رفتم دنبال این بودم که چرا اینطور است، معلوم شد که 10 سال پیش چنین رفتاری قبلا وجود داشته است مورد بحث قرار گرفت در lkml. و به گفته توسعه دهندگان، تعمیر به سادگی ارزش تلاش را ندارد.

منبع: www.habr.com

اضافه کردن نظر