`ls -lS` не показывает истинный размер каталога

Вы можете отправить отчет об ошибке для вашей kill справочной страницы и спросить, почему он включает нестандартные параметры, взятые из pkill , и использовать pkill , когда захотите чтобы получить возможности из pkill.

Если вы позвоните:

pkill httpd

, вы избежите описанных вами проблем.

5
16.05.2017, 14:55
2 ответа

lsпоказывает размер обычныхфайлов (или, в случае каталогов, размер его inodes, а не только их содержимое, поскольку у него нет быстрого способа определить это, в то время как для обычных файлов размер известен и поэтому может отображаться точно и быстро).

На самом деле это поле различается в зависимости от того, что представляет собой файл:

  • для обычных файлов: показывает их фактический размер
  • для символических ссылок (символические ссылки, ln -s source dest): длина имени символической ссылки (так как это содержимое файла символической ссылки). (например: символическая ссылка /dev/fd -> /proc/self/fd: путь назначения имеет длину ровно 13 символов ( / proc / self / fd), поэтому ls -lотобразит «13» в 5-м столбце вместо размера указанного файла.)
  • для каталогов: размер индексного дескриптора (если содержимое записей каталога соответствует один) или несколько инодов (если было необходимо несколько инодов для описания списка записей этого каталога). Вот почему вы видите 4096 для большинства из них: обычно внутри них не так много файлов, поэтому все они помещаются в 1 индексный дескриптор, который обычно составляет 4096 байтов по умолчанию. Если вы когда-нибудь поместите МНОЖЕСТВО файлов в какой-либо каталог, он возрастет (и, скорее всего, останется после этого, если вы не создадите заново сам каталог).
  • для каналов и других типов файлов: каждый раз, когда поле, обычно связанное с размером, может быть или не быть размером (например, для блочных устройств (например, /dev/hd* files) оно не показывает никакого размера но вместо этого показывает их большую и второстепеннуюпару информации.См. man mknod. См. man ls, чтобы узнать, как они идентифицируются.)

Чтобы узнать сумму содержимого каталогов + подкаталогов:

  • du /some/path# будет отображаться для каждого каталога : сумма его содержимого (включая подкаталоги) и показывает, что для каждого каталога в и ниже /some/path

  • du -s /some/path# будет показан только 1 уровень, т.е. total for /some/path

  • du -S /some/path# показать содержимое каждого каталога, не включая его подкаталоги. Полезно точно знать, какой из подкаталогов /some/path большой.

Подробнее см. https://linux.die.net/man/1/du.

6
27.01.2020, 20:34

ls -lS действительно показывает истинный размер каталога: сам каталог + ссылки на любой файл, содержащийся в данном каталоге.

Вы можете использовать du вместо ls:

du -h --max-depth=1 | sort -hr

du: рекурсивно оценивает использование файлового пространства для каталогов

h: человекочитаемый

--max-depth=1: так что вы проверяете только каталоги в текущем каталоге

sort -hr: сортирует по убыванию

12
27.01.2020, 20:34

Теги

Похожие вопросы