Я понимаю, что размеры, ls -l
для которых предоставляются отчетыкаталогиотражает пространство, занимаемое "метаданными" для этих каталогов. Кроме того, я предполагаю, что эти метаданные существуют в двоичной/нечеловечески читаемой форме.
Существует ли команда Unix для отображения этих метаданных в удобной для восприятия форме?
EDIT: если ответ на вопрос выше сильно зависит от файловой системы, какие ключевые слова мне следует использовать для поиска ответа для конкретной файловой системы? (Меня интересуют ответы для многих типов файловых систем, включая nfs, ext3, ext4, vfat, gpfs, tmpfs и lustre). Когда я ищу, например, «как отобразить данные/информацию/содержимое каталога» и т. д., я нахожу только информацию о том, как перечислить файлы в каталоге, что не совсем то, что я ищу.
решение1
ls
отображает эту информацию, поскольку данные хранятся в size
поле inode для каталога. Это зависит от файловой системы. Данная файловая система может хранить там и другую информацию. Например, ZFS сообщает количество записей каталога в этом поле.
Если это тот уровень, который вас интересует, то чтение данных простое. ls
и stat
являются инструментами для отображения информации inode разными способами. Вы можете изучить их, чтобы увидеть, как извлечь данные и отобразить их в удобной для восприятия форме. Взгляните настат(2)для системного вызова для запроса информации.
Если вы просто хотите напрямую собрать это число, рассмотритеstat -c "%s"
% ls -ld /
drwxr-xr-x 44 root root 4096 Jun 10 17:11 /
% stat -c "%s" /
4096
решение2
Да, есть: это называется ls
…
Размер, сообщаемый ls
для каталога, является размером содержимого каталога. Это не метаданные каталога, это метаданные файлов в каталоге. Большая часть из этого указана с ls -la
.
В некоторых вариантах Unix вы можете отобразить двоичную форму этих данных, вызвав cat
(или od
и т. д.) для каталога. Это не относится к Linux, и в системах, где это возможно, интерпретация этих данных может зависеть от типа файловой системы или может быть нормализована (для совместимости с историческими типами файловых систем). СмотритеКогда каталоги перестали быть читаемыми как файлы?ивосьмеричный дамп каталога
Размер, указанный в , ls
превышает тот, который необходим для хранения данных, которые вы видите, ls
по нескольким причинам:
- Могут быть метаданные, которые
ls
не отображаются, например, списки блокировки содержимого файла. - Могут быть дополнения, например, неиспользуемые биты здесь и там, выравнивание по границам машинных слов, имена файлов, хранящиеся в полях фиксированного размера и т. д.
- Существуют метаданные для организации списка имен файлов, например, B-дерево или структура дерева поиска.
- Обычно файлы организованы в блоки, и файл использует целое число блоков, при этом последний блок заполняется лишь частично, если только размер файла не является кратным размеру блока.
- В некоторых файловых системах, таких как ext4, каталоги не возвращают неиспользуемые блоки после того, как они сильно выросли (потому что содержали много файлов), а затем сильно уменьшились (потому что много файлов было удалено).
Если вы хотите узнать о вещах, которые ls
вам не покажут, вам нужно пойти и посмотреть непосредственно на содержимое каталога. Либо запустите od
или аналогичное в каталоге, если ваш вариант Unix позволяет это, либо используйте низкоуровневый инструмент, такой как шестнадцатеричный просмотрщик на разделе или отладчик файловой системы, такой какdebugfs
для ext2/ext3/ext4. Информация, которую вы увидите таким образом, не может считаться «удобочитаемой», за исключением очень немногих людей, которые хорошо знакомы с форматом файловой системы.