Как узнать размер файла в Linux

Обновлено: 25.06.2024

Допустим, вы хотите найти файлы меньше или больше определенного размера в вашей системе Linux. Как бы Вы это сделали? Вручную проверять размер каждого файла? Нет, это трудоемкая задача. Кроме того, хороший системный администратор этого не сделает. Всегда есть самый простой и быстрый способ сделать что-то в Linux. В этом кратком руководстве рассказывается, как найти файлы больше или меньше размера X в операционных системах Linux и Unix.

Поиск файлов больше или меньше размера X

Используя команду find, мы также можем легко найти файлы большего или меньшего размера, чем заданный размер.

Например, чтобы найти в каталоге файлы размером более 4 ГБ, просто введите:

Пример вывода из моей системы:

Как видите, у меня есть файлы размером более 4 ГиБ. Здесь точка (.) указывает на текущий каталог.

Чтобы найти файлы размером более 4 ГиБ во всей файловой системе, выполните:

Чтобы узнать, какие файлы больше X в определенном каталоге, замените точку (.) в приведенной выше команде на путь к каталогу, как показано ниже.

Приведенная выше команда находит файлы размером более 4 ГБ в каталоге «Загрузки».

Аналогично, чтобы найти файлы размером меньше X, например 4 ГиБ, используйте следующую команду:

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

  • 'c' для байтов
  • 'w' для двухбайтовых слов
  • 'k' для килобайт
  • M – мегабайты
  • G – гигабайты

Например, чтобы найти файлы размером более 4 МБ, используйте следующую команду:

Чтобы найти файлы размером менее 4 МБ, используйте следующую команду:

Вы можете задаться вопросом, как найти файлы определенного размера. Например, вы можете найти файлы размером от 30 МБ до 40 МБ с помощью следующей команды:

Чтобы найти файлы точного размера, например 30 МБ, запустите:

Подробнее см. справочные страницы.

Обновление:

Как отметил один из читателей в разделе комментариев ниже, команда find также может отображать длинный список всех файлов, которые она находит, используя переключатель -exec. Приведенная ниже команда найдет все файлы размером от 30 М до 40 М и отобразит длинный список каждого файла.

Знаете ли вы какой-либо другой полезный и простой способ найти файлы меньше или больше определенного размера? Пожалуйста, не стесняйтесь комментировать их в разделе комментариев ниже.

Закрыто. Этот вопрос не соответствует правилам переполнения стека. В настоящее время ответы не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме Stack Overflow.

Закрыт 1 год назад.

Как узнать размер файлов и каталогов в Linux? Если использовать df -m , то он показывает размер всего каталога на верхнем уровне, но как проверить размер каталогов и файлов внутри каталога?

22 ответа 22

Используйте команду ls для файлов и команду du для каталогов.

Проверка размеров файлов

Команда

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

Проверка размеров каталога

Включение параметра -h в любую из приведенных выше команд (например, ls -lh * или du ​​-sh ) даст вам размер в удобочитаемом формате (kb, mb, gb, .)

Для получения дополнительной информации см. man ls и man du


Есть команда du.

Размер каталога и/или файла в удобном для человека виде:

Я запомнил его как несуществующее английское слово dush.

Переключатель командной строки --apparent-size позволяет измерять кажущиеся размеры (то, что показывает ls), а не фактическое использование диска.

@FranciscoCorralesMorales -h флаг должен делать то, что вы просите: размеры печати в удобочитаемом формате (например, 1K 234M 2G)

Я не думаю, что это правильно. Что делает du, так это Обобщает использование диска для набора ФАЙЛОВ , то есть, если файл очень маленький (т.е. 2140 байт), вывод «du» составляет (в моем случае) 4 КБ, потому что это размер кластера

Используйте ls -s, чтобы указать размер файла, или, если вы предпочитаете, ls -sh для удобочитаемых размеров.

Для каталогов используйте du и снова du -h для удобочитаемых размеров.

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

ls -l даст вам размер файла, включая метаданные? так как он кажется немного больше на 4 КБ для одного из файлов, с которым я пробовал

Также есть отличная утилита ncdu - она ​​может показывать размер каталога с подробной информацией о подпапках и файлах.

Установка

Использование

Просто введите ncdu [путь] в командной строке. Через несколько секунд анализа пути вы увидите что-то вроде этого:

Удалить текущий выделенный элемент с помощью d , выйти с помощью CTRL + c


Размер файла в МБ

Размер файла в ГБ


Я рекомендую заменить повторяющиеся пробелы на один с помощью sed перед использованием cut: ls -l имя_файла | sed -E -e 's/ +/ /g' | вырезать -d " " -f5

Перейдите в выбранный каталог и выполните:

Вы увидите следующее:


ls -l --block-size=M даст вам длинный список форматов (необходимый, чтобы фактически увидеть размер файла) и округлит размеры файлов до ближайшего МиБ.

Если вам нужны единицы измерения в МБ (10^6 байт), а не в МиБ (2^20 байт), используйте вместо этого --block-size=MB.

Если вы не хотите, чтобы к размеру файла добавлялся суффикс M, вы можете использовать что-то вроде --block-size=1M. Благодарим Стефана Шазела за предложение.

Это описано на справочной странице для ls; man ls и найдите SIZE. Он также позволяет использовать единицы, отличные от МБ / МиБ, и, судя по всему (я не пробовал), произвольные размеры блоков (чтобы вы могли видеть размер файла как количество 412-байтовых блоков, если вы хотите) к).

Обратите внимание, что параметр --block-size является расширением GNU поверх ls Open Group, поэтому он может не работать, если у вас нет пользовательского пространства GNU (что есть в большинстве установок Linux). ls из GNU coreutils 8.5 поддерживает --block-size, как описано выше.


Дэйв Маккей


Дэйв Маккей
Писатель

Окно терминала Linux на ноутбуке в стиле Ubuntu.

Фатмавати Ахмад Заэнури/Shutterstock

При использовании команды du в Linux вы получаете как фактическое использование диска, так и истинный размер файла или каталога. Мы объясним, почему эти значения не совпадают.

Фактическое использование диска и истинный размер

Размер файла и место, которое он занимает на жестком диске, редко совпадают. Дисковое пространство распределяется блоками. Если файл меньше блока, ему все равно выделяется целый блок, потому что файловая система не может использовать меньшую единицу недвижимости.

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

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

Пример

Давайте рассмотрим простой пример. Мы перенаправим один символ в файл, чтобы создать небольшой файл:


Теперь мы воспользуемся листингом длинного формата, ls , чтобы посмотреть длину файла:


Длина — это числовое значение, которое следует за записями dave dave, которое составляет два байта. Почему это два байта, когда мы отправили в файл только один символ? Давайте посмотрим, что происходит внутри файла.

Мы будем использовать команду hexdump, которая даст нам точное количество байтов и позволит нам «увидеть» непечатаемые символы как шестнадцатеричные значения. Мы также будем использовать параметр -C (канонический), чтобы принудительно отображать в выводе шестнадцатеричные значения, а также их буквенно-цифровые эквиваленты:


Вывод показывает нам, что начиная со смещения 00000000 в файле есть байт, содержащий шестнадцатеричное значение 31, и байт, содержащий шестнадцатеричное значение 0A. В правой части выходных данных эти значения отображаются в виде буквенно-цифровых символов, где это возможно.

Шестнадцатеричное значение 31 используется для представления цифры один. Шестнадцатеричное значение 0A используется для представления символа перевода строки, который не может отображаться как буквенно-цифровой символ, поэтому вместо этого он отображается в виде точки (.). Символ перевода строки добавляется с помощью echo . По умолчанию echo начинает новую строку после отображения текста, который необходимо записать в окно терминала.

Это совпадает с выводом команды ls и соответствует длине файла в два байта.

Теперь воспользуемся командой du, чтобы узнать размер файла:


Там написано, что размер равен четырем, но четырем из чего?

Есть блоки, а есть блоки

Когда du сообщает размеры файлов в блоках, используемый размер зависит от нескольких факторов. Вы можете указать, какой размер блока он должен использовать в командной строке. Если вы не принуждаете du использовать определенный размер блока, он следует набору правил, чтобы решить, какой из них использовать.

Сначала он проверяет следующие переменные среды:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • РАЗМЕР

Если какой-либо из них существует, размер блока устанавливается, и du прекращает проверку. Если ничего не установлено, размер блока du по умолчанию составляет 1024 байта. Если, конечно, не установлена ​​переменная среды с именем POSIXLY_CORRECT. В этом случае размер блока du по умолчанию составляет 512 байт.

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

Чтобы определить размер блока, который использует файловая система, мы воспользуемся программой tune2fs. Затем мы воспользуемся параметром -l (список суперблоков), направим вывод через grep , а затем выведем строки, содержащие слово «Блок».

В этом примере мы рассмотрим файловую систему в первом разделе первого жесткого диска, sda1, и нам нужно будет использовать sudo :


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

Во-первых, мы знаем, что наименьший объем файловой системы, который можно выделить для хранения файла, составляет 4096 байт. Это означает, что даже наш крошечный двухбайтовый файл занимает 4 КБ на жестком диске.

Второе, о чем следует помнить, это то, что приложения, предназначенные для создания отчетов о жестком диске и статистике файловой системы, такие как du , ls и tune2fs , могут иметь разные понятия о том, что означает «блокировка». Приложение tune2fs сообщает истинные размеры блоков файловой системы, в то время как ls и du можно настроить или заставить использовать другие размеры блоков. Эти размеры блоков не предназначены для связи с размером блока файловой системы; это просто «фрагменты», которые эти команды используют в своем выводе.

Наконец, за исключением использования разных размеров блоков, ответы от du и tune2fs имеют один и тот же смысл. Результат tune2fs – один блок размером 4 096 байт, а результат du – четыре блока по 1 024 байта.

Использование du

Без параметров или опций командной строки du показывает общее дисковое пространство, используемое текущим каталогом и всеми подкаталогами.

Давайте рассмотрим пример:


Размер указывается в размере блока по умолчанию, равном 1024 байта на блок. Просматривается все дерево подкаталогов.

Использование du в другом каталоге

Если вы хотите, чтобы du сообщал о другом каталоге, отличном от текущего, вы можете указать путь к каталогу в командной строке:


Использование du для определенного файла

Если вы хотите, чтобы du сообщал об определенном файле, укажите путь к этому файлу в командной строке. Вы также можете передать шаблон оболочки в выбранную группу файлов, например *.txt :


Отчеты о файлах в каталогах

Чтобы получить отчет о файлах в текущем каталоге и подкаталогах, используйте параметр -a (все файлы):


Для каждого каталога сообщается размер каждого файла, а также общая сумма для каждого каталога.

Ограничение глубины дерева каталогов

Вы можете указать du вывести дерево каталогов на определенную глубину. Для этого используйте параметр -d (максимальная глубина) и укажите значение глубины в качестве параметра. Обратите внимание, что все подкаталоги сканируются и используются для расчета сообщаемых итогов, но не все они перечислены. Чтобы установить максимальную глубину каталога в один уровень, используйте следующую команду:


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

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


Установка размера блока

Вы можете использовать параметр блока, чтобы установить размер блока для du для текущей операции. Чтобы использовать размер блока в один байт, используйте следующую команду, чтобы получить точные размеры каталогов и файлов:


Если вы хотите использовать блок размером один мегабайт, вы можете использовать опцию -m (мегабайт), которая аналогична --block=1M :


Если вы хотите, чтобы размеры сообщались в наиболее подходящем размере блока в соответствии с дисковым пространством, используемым каталогами и файлами, используйте параметр -h (человекочитаемый):


Чтобы увидеть видимый размер файла, а не место на жестком диске, используемое для хранения файла, используйте параметр --apparent-size:


Вы можете комбинировать это с параметром -a (все), чтобы увидеть видимый размер каждого файла:


Каждый файл указан вместе с его видимым размером.


Отображение только итогов

Если вы хотите, чтобы du сообщал только общие данные по каталогу, используйте параметр -s (суммировать). Вы также можете комбинировать это с другими параметрами, такими как параметр -h (удобочитаемый):


Здесь мы будем использовать его с параметром --apparent-size:


Отображение времени модификации

Чтобы увидеть время и дату создания или последнего изменения, используйте параметр --time:


Странные результаты?

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

Если вам нужно сопоставить вывод других команд, поэкспериментируйте с параметром --block в du .

< /tbody>
Команды Linux
Файлы tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm
Процессы alias · screen · top · nice · renice · прогресс · strace · systemd · tmux · chsh · история · at · пакетное · бесплатное · которое · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · стена · yes · kill · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · date · bg · fg
Сеть netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · копать · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw
  • › Как установить Google Play Маркет в Windows 11
  • › Что означает XD и как вы его используете?
  • ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)
  • › Худшее, что есть в телефонах Samsung, — это программное обеспечение Samsung.
  • › Почему прозрачные чехлы для телефонов желтеют?
  • › Как восстановить метки панели задач в Windows 11

Вероятно, вы уже знаете, что вы можете использовать команду ls с параметром длинного списка -l, чтобы показать размер файла в Linux.

Но, к сожалению, в длинном списке указан размер файла в блоках, и нам, людям, это не очень полезно.


Хорошо то, что вы можете комбинировать опцию -l с -h, чтобы отображать размер файла в удобочитаемом формате.

Как видите, лучше отображать размер файла в удобочитаемом формате.

< бр />

Как видите, размеры файлов теперь отображаются в K (для КБ), M для (МБ). Если размер файла указан в байтах, он не отображается ни с каким суффиксом. В приведенном выше примере файл char.sh имеет размер 140 байт.

Вы обратили внимание на размер каталога new_dir? Это 4 КБ. Если вы используете команду ls -lh для каталогов, она всегда показывает размер каталога как 4,0 КБ.

Команда du в Linux используется для проверки размера каталога. Вот несколько способов узнать размер каталога в Linux с помощью команды du.

Справочник по Linux Абхишек Пракаш


По умолчанию размер блока в большинстве систем Linux составляет 4096 байт или 4 КБ. Каталог в Linux — это просто файл с информацией о расположении в памяти всех файлов в нем.

Вы можете заставить команду ls отображать размер файла в МБ с помощью флага --block-size.

Проблема с этим подходом заключается в том, что все файлы размером менее 1 МБ также будут отображаться с размером файла 1 МБ.


Команда ls также имеет параметр -s для отображения размера. Вы должны комбинировать с -h, чтобы показать размер файла в удобочитаемой форме.

Вот результат:

Краткое руководство, показывающее, как найти самые большие файлы на вашем компьютере с Linux с помощью нескольких команд, с которыми вы, возможно, уже знакомы: du, sort и head.

Читайте также: