Полезное: узнать размер каталога, папки в Linux/FreeBSD. DU
Описание
Команда du позволяет отображать размер дискового пространства, занятого файлами или каталогами в операционных системах Linux и FreeBSD
Синтаксис
du [-Aclnx] [-H | -L | -P] [-g | -h | -k | -m] [-a | -s | -d depth] [-B blocksize] [-I mask] [-t threshold] [file …]
du [опции] [каталоги или файлы]
Основные опции
–b выводит информацию в байтах(а не в килобайтах).
–c выводит итоговую информацию об использовании дисковой памяти.
–k выводит информацию в килобайтах(по умолчанию).
–s выводит итоговую информацию об использовании дискового пространства без информации о каталогах.
-h вывести информацию в человекочитаемом виде.
Полезные примеры использования
Стоит отметить, что синтаксис утилиты du в Linux и FreeBSD может незначительно отличаться набором дополнительных аргументов, но базовые опции полностью идентичны
Узнать размер папки opt/files/
# du -sh /opt/files/
9.9G /opt/files/
Узнать размер папки /opt/files/ и размеры подкаталогов:
# du -h /opt/files/
1.8G /opt/files/video
2.0G /opt/files/music
3.8G /opt/files/
Продвинутые примеры использования du во FreeBSD и Linux
Часто возникает необходимость не просто узнать размер одной папки, а найти самые «прожорливые» директории на диске. Для этого можно комбинировать du с другими системными утилитами
- Сортировка папок по размеру:
Вывести список подкаталогов в текущей директории и отсортировать их от меньшего к большему:du -h -d 1 | sort -h - Поиск ТОП-10 самых больших папок:
Если на сервере под управлением Linux или FreeBSD заканчивается свободное место, используйте следующую команду для поиска десяти крупнейших объектов:du -a /var | sort -n -r | head -n 10 - Исключение определенных файлов из подсчета:
Если вам нужно посчитать размер директории, пропустив, например, логи или кэш-файлы:du --exclude="*.log" -sh /path/to/directory
Использование этих комбинаций позволяет быстро проводить аудит дисковой подсистемы и предотвращать критическое переполнение разделов
Особенности подсчета размера папок: du vs df
Начинающие системные администраторы часто сталкиваются с ситуацией, когда утилита du и системная команда df показывают совершенно разные данные о свободном и занятом месте в FreeBSD или Linux.
Разница в показаниях объясняется фундаментальными различиями в алгоритмах их работы:
Команда du (Disk Usage) — сканирует файловую систему шаг за шагом. Она заходит в каждый каталог, считает размер каждого отдельного файла и суммирует их. Если у пользователя нет прав на чтение определенной папки, утилита пропустит ее, и итоговый размер окажется меньше реального
Команда df (Disk Free) — не читает файлы. Она обращается напрямую к суперблоку файловой системы и мгновенно узнает общее состояние пространства
Главная причина расхождения — удаленные файлы, которые все еще открыты запущенными процессами (например, активным веб-сервером или демоном логирования). Физически файл уже удален с диска, и du его не видит. Однако процесс продолжает удерживать дескриптор файла, место на накопителе не освобождается, и df продолжает учитывать его как занятое
Чтобы решить эту проблему в Linux или FreeBSD, необходимо найти и перезапустить заблокировавший файл процесс. Сделать это можно с помощью утилиты lsof | grep deleted или команды fstat, после чего показатели обеих утилит придут в норму