Как найти самые большие файлы и папки в Linux: команды du и sort
Куда делось свободное место на диске?
Команда df -h показывает 100% заполнение корневого раздела (/dev/mapper/ubuntu--vg-ubuntu--lv 100%), сайты выдают ошибку базы данных Disk full, а консоль блокирует сохранение файлов. Чтобы освободить память, необходимо быстро найти конкретную папку или файл-гигант (разросшийся лог, старый дамп базы или забытый архив), который забил файловую систему.
Сравнение утилит анализа диска:
| Утилита | Скорость | Наглядность | Наличие в системе |
|---|---|---|---|
df -h | Мгновенно | Показывает только общие разделы дисков | Встроена везде |
du + sort | Быстро | Выводит точный список самых тяжелых папок | Встроена везде |
ncdu | Очень быстро | Интерактивный псевдографический интерфейс с навигацией | Требует установки через apt |
Готовые команды поиска тяжелых файлов
1. Топ-10 самых тяжелых папок в текущей директории
Выполните классическую связку команд:
sudo du -hs * | sort -rh | head -n 10Разбор параметров:
•du -hs *— считает размер каждого элемента в человекочитаемом виде (Human-readable: M - Мегабайты, G - Гигабайты).
•sort -rh— сортирует список по убыванию (самые тяжелые вверху).
•head -n 10— оставляет на экране ровно первые 10 позиций.2. Поиск файлов размером более 500 Мб по всему серверу
Команда
findмгновенно найдет гигантские файлы в обход мелких файлов:sudo find / -type f -size +500M -exec ls -lh {} + 2>/dev/null | awk '{ print $9 ": " $5 }'3. Использование интерактивной утилиты ncdu (Рекомендуется)
Самый удобный способ для новичков:
# Устанавливаем утилиту: sudo apt install ncdu -y # Запускаем анализ корневой системы: sudo ncdu / --exclude /proc --exclude /sysИспользуйте стрелочки клавиатуры для входа в папки и клавишу d для быстрого удаления ненужного файла прямо из меню.
Частые вопросы (FAQ)
Почему du показывает занятое место, а df -h пишет, что диск все равно полон?
Это происходит, если тяжелый файл (например, лог Nginx) был удален через rm, но процесс веб-сервера все еще держит его открытым в памяти. Выполните sudo lsof | grep deleted, найдите PID процесса и перезапустите службу.
Где чаще всего прячется мусор на серверах Linux?
В 90% случаев это: /var/log/ (неротированные системные логи), /var/lib/docker/ (старые слои образов и контейнеры) и /tmp/ (кэш сессий и временные дампы).
Как очистить файл лога, не удаляя сам файл и не ломая службу?
Используйте обнуление через знак редиректа: sudo truncate -s 0 /var/log/nginx/access.log или : > /var/log/nginx/access.log.
Как безопасно выйти из программы ncdu?
Нажмите латинскую клавишу q на клавиатуре.