Как отобразить содержимое, которое определяет размеры каталогов, которые выдает `ls -l`?

Как отобразить содержимое, которое определяет размеры каталогов, которые выдает `ls -l`?

Я понимаю, что размеры, 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. Информация, которую вы увидите таким образом, не может считаться «удобочитаемой», за исключением очень немногих людей, которые хорошо знакомы с форматом файловой системы.

Связанный контент