dua — анализатор занятого места, который сканирует каталоги параллельно и показывает результат в интерактивном терминальном интерфейсе. Его часто ставят на замену ncdu: тот удобен, но обходит дерево в один поток и на миллионах файлов заметно уступает. В 2026 году dua умеет не только строить дерево, но и находить мусорные каталоги, сравнивать снимки и удалять помеченное. Ниже — установка, разбор результатов и безопасная очистка.
Установка и проверка
В Debian, Ubuntu и Linux Mint пакет называется dua-cli. В Fedora, Arch и Void пакет называется так же. Если версия в репозитории старая, свежую можно собрать через Cargo.
sudo apt install dua-cli
dua --version
dua --help
cargo install dua-cli
Сборка из исходников требует Rust и занимает несколько минут. Пакетная версия обычно собрана с TUI; если интерфейс не запускается, проверьте, что это не урезанная сборка. Запускать dua лучше в настоящем терминале: при перенаправлении вывода интерактивные клавиши не работают.
Быстрый старт без интерфейса
Без аргументов dua сканирует текущий каталог и открывает интерактивный режим. Для отчёта в скрипте или в переписке используйте подкоманду aggregate: она печатает таблицу и завершается, ничего не удаляя.
dua aggregate
dua aggregate ~/Downloads /var/log
dua aggregate --depth 2 -f binary ~
В 3.x параметр --depth 2 показывает дерево на два уровня вместо плоского списка, -f binary переключает единицы на ГиБ.
Как читать цифры
dua по умолчанию считает занятое место на диске, а не логический размер файла. Это важно для разреженных файлов, образов виртуальных машин и сжатых ФС: du и dua могут показать меньше, чем ls -l. Флаг -A включает apparent size, то есть сумму длин файлов.
-A— логический размер вместо занятых блоков.-l— считать каждую жёсткую ссылку отдельно; по умолчанию дубликаты учитываются один раз.-x— не переходить на другие файловые системы и точки монтирования.-i— исключить каталог по абсолютному пути, например-i /home/user/.cache.-t 4— ограничить число потоков, если диск и без того перегружен.
На Linux dua по умолчанию пропускает /proc, /dev, /sys и /run. Это защита от бессмысленного обхода псевдофайловых систем, но при анализе корня её нужно учитывать.
Интерактивный режим
Запуск dua i открывает дерево, где можно ходить по каталогам и помечать элементы. В версии 3.x раскладка такая: ? — помощь, j/k — движение, l или Enter — войти в каталог, h — вернуться, s — сортировка по размеру, c — по количеству файлов, n — по имени.
dua i ~/Downloads
dua i --apparent-size ~/Downloads
dua interactive --export scan-before.dua ~/
dua i --export scan-after.dua ~/
dua diff scan-before.dua scan-after.dua --depth 2
Пробел помечает элемент, d помечает и переходит к следующему. Ctrl+R удаляет помеченное безвозвратно, Ctrl+T отправляет в корзину. В старых версиях 2.x раскладка отличается, поэтому первым делом откройте ? и прочитайте подсказку именно для своей сборки. Экспорт снимка и dua diff доступны в 3.x и помогают понять, что выросло за неделю.
Безопасное удаление
Главное правило: сначала смотрите, потом удаляете. Начните с домашнего каталога, а не с корня. Если элемент помечен, проверьте, что это кэш, а не данные приложения.
dua aggregate -A ~/.cache
dua clean --depth 0 ~/dev
dua clean ~/dev ~/projects
dua aggregate -A ~/.local/share/Trash
В 3.x dua clean ищет каталоги, которые обычно можно пересоздать: node_modules, target, виртуальные окружения Python, кэши Cargo и Zig. Это не автоматическое удаление: сначала показывается список, затем вы отмечаете кандидатов. В git-репозиториях кандидат должен быть проигнорирован и не содержать отслеживаемых файлов, но привычку проверять git status это не отменяет.
Корзина — не бесконечное хранилище. Если файлы уже отправлены туда, dua покажет её размер; очищать корзину лучше через файловый менеджер, а не удалять содержимое вручную.
Что ещё занимает место
Кэш пакетов, журналы systemd и неиспользуемые Flatpak-рантаймы часто больше, чем кажется. Перед очисткой посмотрите размеры, затем применяйте штатные команды, а не удаление файлов наугад.
dua aggregate /var/cache/apt/archives
sudo apt clean
journalctl --disk-usage
sudo journalctl --vacuum-size=300M
flatpak uninstall --unused
apt clean удаляет только скачанные deb-пакеты, установленные программы остаются. journalctl --vacuum-size сокращает журнал до указанного размера, но не трогает логи приложений в /var/log. Для Docker сначала смотрите docker system df, и только потом решайте, что удалять: docker system prune может снести нужные образы и остановленные контейнеры.
Если df и dua расходятся
Файл может быть удалён, но оставаться открытым процессом — тогда место не освобождается, а dua его уже не видит. Проверить такие файлы можно через lsof; после перезапуска процесса место вернётся.
df -h /
sudo lsof +L1 | head -n 20
sudo lsof +L1 | awk '{sum += $7} END {print sum/1024/1024 " MB"}'
mount | grep ' / '
Вторая причина — разные файловые системы: dua без -x может пройти в смонтированный раздел, а df для корня его не учитывает. Третья — зарезервированные блоки ext4, обычно 5 процентов: для пользователя они недоступны, хотя формально заняты. Учитывайте это, прежде чем искать «пропавшие» гигабайты.
Ограничения
dua не следует по символическим ссылкам: сами ссылки видны, но их содержимое не обходится. Интерактивный режим рассчитан на тёмный терминал, а на миллион записей требует около 60 МБ памяти. Для сетевых ФС и медленных USB-дисков параллельный обход иногда медленнее последовательного: помогает -t 1 или --no-entry-check в dua clean.
Чек-лист
- Начинайте с домашнего каталога.
- Сравните
dua aggregateиdf -hдо удаления. - Убедитесь, что каталог можно пересоздать.
- Используйте корзину, а не
Ctrl+R, пока не уверены. - Для регулярного контроля сохраняйте снимки и смотрите
dua diff.
Итог
dua закрывает ту же задачу, что ncdu, но быстрее и с более удобным разбором больших деревьев. Начните с dua aggregate --depth 2, затем откройте dua i для точечной проверки, а удаление делайте через корзину. В связке с df, lsof и штатными командами очистки кэшей инструмент помогает найти место там, где графический анализатор показывает только общую диаграмму.