Гэта зусім бескарысны, непатрэбны ў практычным ужыванні, але пацешны невялікі пост пра дырэкторыі ў *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 гадоў таму такія паводзіны ўжо
Крыніца: habr.com