
Что означает размер каталога в выводе ls -l
команды?
решение1
Это размер пространства на диске, который используется для хранения метаинформации для каталога (т.е. таблицы файлов, принадлежащих этому каталогу). Если это 1024, это означает, что для этой цели используется 1024 байта на диске (всегда выделяются полные блоки).
решение2
Выведенный с помощью параметра «Размер каталога» ls -l
(как и для любого типа файла) представляет собой значение, возвращаемое вызовом stat()
в statbuf.st_size
.
Что это st_size
означает для каталогов, полностью зависит от типа файловой системы. Если вы не знаете тип файловой системы и не понимаете ее концепции, вы не сможете ничего вывести из значения в st_size
.
В исторической файловой системе UNIX, которая в настоящее время обычно называется
v7-fs
, каталоги представляли собой повторяющиеся 16-байтовые записи, содержащие 16-битный номер inode и 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
в , поэтому сообщаемый «размер» не имеет реального значения относительно занятого дискового пространства данными каталога. В каталоге ZFSst_size
нет записей.
и , но если вы вызываете , эти записи подделываются и возвращаются для первых двух операций. ZFS — единственная файловая система в списке, которая не поддерживает жесткие ссылки на каталоги, но сообщаемое количество ссылок для каталогов всегда равно 2. Эти две нерегулярности в ZFS реализованы для уменьшения путаницы в исторических программах, не поддерживающих POSIX...
readdir()
Подобно ZFS, WAFL копирует некоторые, но не все идеи из
WOFS
. NetappWAFL
написалаWOFS
статью через 3 года после ее публикации, WAFL копирует при записи, но WAFL, похоже, сообщает значения «размера», которые могут быть «реальным размером каталога», если предположить, что каталог имеет содержимое.
решение3
Каталог резервирует 4096 байт (минимум) для метаданных о себе и своем содержимом.
Кроме того, 4096 байт — это единица распределения (блок) по умолчанию для файловых систем ext2/ext3/ext4, поэтому каталог не может быть меньше.
В разных файловых системах вы можете обнаружить каталоги с разными размерами по умолчанию, что связано с размером блока файловой системы по умолчанию.
Размеры каталогов также могут динамически увеличиваться по мере их заполнения, но после заполнения пространство, зарезервированное для метаданных, не может быть перераспределено без удаления каталога.
решение4
Каталог — это просто каталог, как телефонный справочник. Это просто файл со списком номеров и именем рядом с ними. Каждый номер ссылается на файл в файловой системе (номер inode), а имя — это имя файла.
Для сохранения этих данных вам понадобится дисковое пространство, а то, как оно будет выделяться, увеличиваться или уменьшаться, зависит от файловой системы.