Памер дырэкторый не варты нашых намаганняў

Гэта зусім бескарысны, непатрэбны ў практычным ужыванні, але пацешны невялікі пост пра дырэкторыі ў *nix сістэмах. Пятніца ж.

На сумоўях часта праскокваюць сумныя пытанні пра айноды, усё-ёсць-файлы, на якія мала хто можа разумна адказаць. Але калі капнуць крыху глыбей, можна знайсці цікаўныя рэчы.

Для разумення посту крыху тэзісаў:

  • усё ёсць файл. дырэкторыя - гэта таксама файл
  • у айнодзе захоўваюцца мета-дадзеныя ад файла, але імя файла тамака не захоўваецца
  • імя файла захоўваецца ў дадзеных дырэкторыі
  • памер дырэкторыі, той самы які паказваецца ў 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) у адмантаваным стане.

А вось калі я пайшоў шукаць, чаму гэта так, то аказалася, што 10 гадоў таму такія паводзіны ўжо абмяркоўвалі у lkml. І на думку распрацоўшчыкаў выпраўленне проста не варта ўкладзеных намаганняў.

Крыніца: habr.com

Дадаць каментар