Предыдущие подборки утилит командной строки
- Магия консоли. Подбираем полезные утилиты для работы в терминале
- Магия консоли 2. Запасаемся инструментами на все случаи жизни
- Мастерская хакера. Подборка полезных инструментов для Windows и Linux
- Мастерская хакера. 13 утилит для Linux, которые пригодятся админу
- Мастерская хакера. Собираем утилиты, которые облегчат жизнь и работу
- Мастерская хакера. ИИ‑помощники, работа с JSON и приятные мелочи, которые пригодятся в работе
- Мастерская хакера. Стресс‑тестинг сайтов, бенчмарк для команд, работа с текстом и другие полезности
gdu
Gdu (Go DiskUsage) — это мощный инструмент для разгребания завалов в файловой системе. Он быстро сканирует заданную директорию рекурсивно и строит удобный интерактивный TUI-интерфейс, где можно перемещаться по дереву папок и удалять ненужные.
Устанавливается gdu простым скачиванием бинарника с GitHub:
curl -L https://github.com/dundee/gdu/releases/latest/download/gdu_linux_amd64.tgz | tar xz
chmod +x gdu_linux_amd64
sudo mv gdu_linux_amd64 /usr/bin/gdu
Запуск gdu без аргументов заставит программу анализировать текущую директорию.

На сканирование ~200 Гбайт данных требуется чуть меньше четырех секунд — скорость на уровне!
После сканирования открывается интерактивное дерево файловой системы, где можно посмотреть, сколько суммарно что занимает.

Альтернатива — прямой запуск через Docker:
docker run --rm --init --interactive --tty --privileged --volume /:/mnt/root ghcr.io/dundee/gdu /mnt/root
Встроенная справка весьма информативна и в особых комментариях не нуждается, но я все же отмечу несколько важных хоткеев:
-
rпересканирует текущую папку; -
bоткрывает терминал в текущей папке (exitпотом вернет обратно в gdu); -
dудаляет выбранный элемент, а пробелом можно выбрать несколько, чтобы удалить списком.
Gdu поддерживает неинтерактивный режим и умеет выводить результаты в JSON на случай использования в каком‑то внешнем пайплайне (например, выводить самые крупные файлы в уведомлении о переполнении диска). Вот, например, сохранение отчета в сжатый JSON из документации проекта:
gdu -o- / | gzip -c >report.json.gz
Для прочтения отчета:
zcat report.json.gz | gdu -f-snapdiff
Для сравнения текстовых файлов удобно использовать diff. Но что, если нужно сравнить содержимое не двух файлов, а двух бэкапов на десятки тысяч файлов каждый? Оказывается, утилита есть и для этого, и называется она snapdiff.
Основной сценарий использования — сравнивать регулярные снапшоты файловой системы. По умолчанию программа выводит только общую статистику (сколько всего данных, сколько общих, сколько добавлено, удалено или изменено), но есть ключ --report, который покажет все неидентичные файлы.
Snapdiff написан на Rust, и для установки понадобится компилятор версии минимум 1.70.0. Установить его можно с помощью однострочника:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Дальше склонируй репозиторий с кодом и собери бинарник:
git clone https://github.com/jotaen/snapdiff.git
cargo build --release# Бинарник окажется в target/release/snapdiffТеперь можно запускать! Чтобы сравнить / и /, используй snapdiff /.

Ключ --report позволяет получить подробный список неидентичных файлов. Используй его, если делаешь автоматический пайплайн для инкрементальных бэкапов или чего‑то такого.
progress
Когда копируешь большие файлы (например, бэкапы), может показаться, что процесс копирования завис, а 10% прогресса визуально никак не отличаются от 95%. Исправлять это досадно раздражающее недоразумение изменением самих утилит копирования/перемещения было бы неправильно: все же слишком много сторонних скриптов на них завязано и внезапная смена поведения точно не пойдет им на пользу.
Компромиссное решение было найдено уже больше десяти лет назад в утилите cv, теперь более известной под названием progress. Она умеет показывать прогресс выполнения для большого количества команд из пакета coreutils, в который входят не только cp и mv, но и tar, gzip, cat, dd и прочие. Изменять флаги при вызове этих команд не нужно — progress умеет показывать статус в стандартной конфигурации.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

