Дав­нень­ко я не писал под­борок ути­лит! В этом выпус­ке «мас­тер­ской» — инс­тру­мен­ты для раз­гре­бания фай­лох­ранилищ, отладки нераз­говор­чивых прог­рамм и работы с логами. Готовь тер­минал и при­сажи­вай­ся поудоб­нее!
 

gdu

Gdu (Go DiskUsage) — это мощ­ный инс­тру­мент для раз­гре­бания завалов в фай­ловой сис­теме. Он быс­тро ска­ниру­ет задан­ную дирек­торию рекур­сивно и стро­ит удоб­ный инте­рак­тивный TUI-интерфейс, где мож­но переме­щать­ся по дереву папок и уда­лять ненуж­ные.

WinDirStat

Бли­жай­ший ана­лог gdu для Windows — прог­рамма WinDirStat.

Ус­танав­лива­ется 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

Те­перь мож­но запус­кать! Что­бы срав­нить /mnt/backup/snap1 и /mnt/backup/snap2, исполь­зуй snapdiff /mnt/backup/snap1 /mnt/backup/snap2.

Snapdiff
Snapdiff

Ключ --report report.txt поз­воля­ет получить под­робный спи­сок неиден­тичных фай­лов. Исполь­зуй его, если дела­ешь авто­мати­чес­кий пай­плайн для инкре­мен­таль­ных бэкапов или чего‑то такого.

 

progress

Ког­да копиру­ешь боль­шие фай­лы (нап­ример, бэкапы), может показать­ся, что про­цесс копиро­вания завис, а 10% прог­ресса визу­аль­но никак не отли­чают­ся от 95%. Исправ­лять это досад­но раз­дра­жающее недора­зуме­ние изме­нени­ем самих ути­лит копиро­вания/переме­щения было бы неп­равиль­но: все же слиш­ком мно­го сто­рон­них скрип­тов на них завяза­но и вне­зап­ная сме­на поведе­ния точ­но не пой­дет им на поль­зу.

Ком­про­мис­сное решение было най­дено уже боль­ше десяти лет назад в ути­лите cv, теперь более извес­тной под наз­вани­ем progress. Она уме­ет показы­вать прог­ресс выпол­нения для боль­шого количес­тва команд из пакета coreutils, в который вхо­дят не толь­ко cp и mv, но и tar, gzip, cat, dd и про­чие. Изме­нять фла­ги при вызове этих команд не нуж­но — progress уме­ет показы­вать ста­тус в стан­дар­тной кон­фигура­ции.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии