Що означає розмір каталогу у виведенні команди 'ls -l'?


Відповіді:


45

Це розмір місця на диску, який використовується для зберігання метаінформації для каталогу (тобто таблиці файлів, що належать до цього каталогу). Якщо це 1024, це означає, що для цього використовується 1024 байти на диску (він завжди виділяє повні блоки).


3
а коли каталог містить тисячі файлів, розмір самого каталогу легко може бути> 10 КБ
glenn jackman

1
@txwikinger Я думаю, що каталоги містять списки входів, а не фактичні назви файлів.
Ярослав Рахматуллін

6
@ ЯрославРахматуллін Запис у каталозі складається з номера inode та імені файлу.
200_успіх

2
Тож "розмір" режиму пов'язаний лише з кількістю файлів всередині, а не з розміром файлів?
Лі

1
@Lee: Так, саме так.
кіт

14

"Розмір каталогів", надрукований разом із ls -l(як і для будь-якого типу файлу), є значенням, про яке повідомляється при stat()виклику statbuf.st_size.

Що це st_sizeозначає для каталогів, повністю залежить від типу файлової системи. Якщо ви не знаєте тип файлової системи та не розумієте її поняття, ви не можете вивести нічого із значення в st_size.

  • У історичній файловій системі UNIX, яку зараз зазвичай називають v7-fs, каталоги повторювали 16 байтових записів, які містили 16-бітове число вводу та 14 байт імені файлу. "Розмір" каталогу був значущим щодо read(2)операції і завжди збільшувався або залишався таким, як є. .І ..записи створюються вручну жорстко пов'язуючи їх з поточним і каталог рівня вище. Кількість посилань для здорового порожнього дівочого каталогу - 2.

  • У файловій системі BSD-4.2, яка з 1989 року називається (SVr4) ufs, каталоги - це ряд записів змінної довжини, які використовують формат, який не надається як стабільний, тому командам простору користувача не дозволяється читати цей формат. Повідомлений "розмір" - це розмір у байтах, як у v7-fs, розмір зазвичай збільшується або залишається таким, який є, але нові версії файлової системи можуть зменшити розмір за певних умов - але не завжди, коли ви цього можете очікувати. Кількість посилань, повідомлених для порожнього каталогу, становить 2, як і для v7-fs.

  • У WOFSфайловій системі, яку я розробив та впровадив у період з літа 1988 р. По травень 1991 р., Каталоги завжди повідомляють про "розмір" 0 і ніколи не мають типу контенту, який можна прочитати за допомогою read(2)виклику. Це тому, що WOFSце перша файлова система Copy-on-Write і тому, що у WOFSфайлах повідомляється про каталог, у якому вони перебувають, а не вказуються в каталозі. Якщо ви читаєте WOFSкаталог за допомогою readdir(), ви отримуєте дані лише для передбачуваних записів, але ніколи для .і ... Кількість посилань порожнього каталогу на WOFS1 дорівнює, а вся поведінка повністю сумісна з POSIX.

  • У тому ZFS, що було реалізовано після прочитання WOFSробіт. ZFSє файловою системою копіювання під час запису, і її автори не заперечують, що вони копіювали поняття WOFS. Довідники по ZFS повідомити number of directory entriesпо прибуттю st_size, так повідомили «розмір» не має ніякого реального значення по відношенню до займаному дискового простору , за даними каталогу. У каталозі ZFS немає .і ..записів, але якщо ви телефонуєте readdir(), ці записи підробляються та повертаються протягом перших двох операцій. ZFS - єдиний FS у списку, який не підтримує жорсткі посилання каталогів, але кількість повідомлених посилань для каталогів завжди 2. Ці два порушення в ZFS реалізовані для зменшення плутанини в історичних програмах, які не є POSIX.

  • Подібно до ZFS, WAFL копіює деякі, але не всі ідеї WOFS. Нетапп WAFLбув написаний через 3 роки після WOFSпублікації газети, WAFL - це копіювання під час запису, але, схоже, WAFL повідомляє про значення "size", які можуть бути "реальним розміром каталогів" за умови, що у каталозі є вміст.


13

Каталог резервує 4096 байт (як мінімум) для метаданих про себе та його вміст.

Крім того, 4096 байт є блоком розподілу за замовчуванням (блоком) для файлової системи ext2 / ext3 / ext4 і для цього каталог не може бути меншим.

У різних файлових системах ви можете знайти каталоги з різними розмірами за замовчуванням, що обумовлено типовим розміром блоку файлової системи.

Розміри каталогів також можуть динамічно зростати по мірі їх заповнення, але після заповнення місця, відведеного для метаданих, не можна перерозподілити без видалення каталогу.


1
На які метадані ви посилаєтесь?
Стефан Шазелас

1
деталі залежать від файлової системи, але, як правило, включає метадані, такі як ім'я файлу, номер inode, тип файлу (файл, dir, fifo, socket, вузол пристрою, симпосилання тощо), власник, група, дозволи, атрибути, ACL, цілі симпосилання.
cas

6
@CraigSanders, каталог містить ім'я об'єкта та відповідний лише номер inode . Inode містить тип об'єкта, власника / групу, дозволи, посилання на те, де зберігаються ACL та розширені атрибути, ... Все інше спричинить серйозний злом семантики файлової системи POSIX.
фонбранд

Мій UFS резервує всього 512 байт для власних метаданих у каталозі.
FUZxxl

4

Каталог - це просто каталог, як-от телефонний каталог. Це просто файл із переліком номерів та назвою поруч. Кожне число посилається на файл у файловій системі (номер inode), а ім'я - ім'я файлу.

Вам потрібен простір на диску, щоб зберегти ці дані, те, як вони розподіляються та зростаються та зменшуються, залежить від файлової системи.


Ви можете включити фактичні деталі збереження метаданих та міркування щодо розподілу блоку щодо збільшення розміру. це дало б більш точну відповідь, доповнену вже приємною алегорією. :)
n611x007

3
@naxa, це залежить від файлової системи, і навіть у файловій системі (наприклад, ext4), це залежить від того, які опції ви включаєте, тому я б краще залишити це як "це залежно від файлової системи", а не намагатися бути вичерпним, що було б не дуже актуальне для цього питання.
Стефан Шазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.