Что означает размер каталога при выводе команды 'ls -l'?


Ответы:


45

Это размер пространства на диске, который используется для хранения метаинформации для каталога (т. Е. Таблицы файлов, принадлежащих этому каталогу). Если это т.е. 1024, это означает, что для этой цели используются 1024 байта на диске (это всегда выделяет полные блоки).


3
и когда каталог содержит тысячи файлов, размер самого каталога может легко составить> 10 КБ
Гленн Джекман

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

6
@ ЯрославРахматуллин Запись в каталоге состоит из номера индекса и имени файла.
200_success

2
Таким образом, «размер» каталога связан только с количеством файлов внутри, а не с размером файлов?
Ли

1
@ Ли: Да, это верно.
кот

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(), вы получите данные только для предполагаемых записей, но никогда не для .и ... Число ссылок на пустой каталог WOFSравно 1, и все поведение полностью соответствует POSIX.

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

  • Подобно ZFS, WAFL копирует некоторые, но не все идеи WOFS. Netapp WAFLбыл написан через 3 года после WOFSпубликации статьи, WAFL копируется при записи, но WAFL, похоже, сообщает о значениях «размера», которые могут быть «реальным размером каталога» при условии, что каталог содержит контент.


13

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

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

В разных файловых системах вы можете найти каталоги с разными размерами по умолчанию, что связано с размером блока файловой системы по умолчанию.

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


1
Какие метаданные вы имеете в виду?
Стефан Шазелас

1
детали зависят от файловой системы, но обычно включают метаданные, такие как имя файла, номер индекса, тип файла (файл, dir, fifo, сокет, узел устройства, символическая ссылка и т. д.), владелец, группа, разрешения, атрибуты, ACL, цели символической ссылки.
Cas

6
@CraigSanders, каталог содержит имя объекта и соответствующий номер индексного дескриптора только . Индод содержит тип объекта, владельца / группу, разрешения, ссылку на то, где хранятся ACL и расширенные атрибуты ... Все остальное вызовет серьезный разрыв семантики файловой системы POSIX.
vonbrand

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

4

Каталог - это просто каталог, похожий на телефонный справочник. Это просто файл со списком чисел и именем рядом с ними. Каждый номер ссылается на файл в файловой системе (номер индекса), а имя - это имя файла.

Вам необходимо место на диске для сохранения этих данных, то, как они распределяются, растут и сокращаются, зависит от файловой системы.


Вы могли бы включить фактические детали того, какие метаданные хранятся, и соображения распределения блоков относительно увеличения размера. это дало бы более точный ответ в сочетании с уже данной хорошей аллегорией. :)
n611x007

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