cv — мониторинг прогресса копирования и других команд в Linux
Введение
cv — это небольшая утилита, которая находит в системе запущенные базовые утилиты coreutils (cp, mv, dd, tar, cat и т.д.) и отображает их процент выполнения и дополнительную информацию о копировании/переносе. Инструмент изначально для Linux; доступна также портированная версия для Mac OS X.
Кратко о терминах:
- ETA — оценённое оставшееся время до завершения операции.
- I/O throughput — пропускная способность ввода/вывода (скорость передачи данных).
Скачивание и установка
- Скачайте исходники с репозитория на GitHub (в примере файл назывался cv-master.zip).
unzip cv-master.zip- Перейдите в каталог с исходниками и соберите программу:
cd cv-master
make
sudo make installВажное замечание: cv зависит от библиотеки ncurses. На Debian/Ubuntu-подобных системах установите пакет вида libncurses-dev:
sudo apt-get install libncurses-devПосле установки бинарный файл обычно попадает в /usr/local/bin. Убедитесь, что этот путь есть в переменной окружения PATH, иначе либо запустите cv как /usr/local/bin/cv, либо перейдите в этот каталог и выполните ./cv.
Примечание: точные имена пакетов могут отличаться в зависимости от дистрибутива; при сомнении используйте менеджер пакетов вашего дистрибутива.
Как использовать
cv отслеживает команды, которые уже выполняются в системе. Поэтому запустите длительную операцию (например, копирование большого файла), затем в другой консоли запустите cv.
Примеры из практики:
Простой пример
Запустили копирование большого файла с флешки:
cp /media/usb/large.iso ~/Downloads/В другой вкладке терминала выполнили:
./cvcv выведет список отслеживаемых процессов с PID, командой и прогрессом в процентах и числах. Первая строка с текстом вроде cat inactive/flushing/streaming/... появляется по умолчанию и обычно игнорируется.
Если одновременно работают несколько длительных процессов, cv покажет прогресс по каждому из них.
Оценка пропускной способности и ETA
Чтобы получить оценку пропускной способности I/O и оставшегося времени, используйте опцию -w:
./cv -wПример вывода:
[9287]cp/media/himanshu/F58B-9AA9/casper-rw 10.3%(105.2 MiB /1 GiB)27.9 MiB/s eta 0:00:32Здесь видно, что операция копирования идёт со скоростью ~27.9 MiB/s и завершится примерно через 32 секунды.
Зацикливание (не завершать после одного обновления)
По умолчанию cv делает одно снятие состояния и завершает работу. Чтобы он работал в режиме мониторинга до завершения отслеживаемых процессов, используйте -m:
cv -mЭто полезно, когда вы хотите оставлять вывод обновляющимся в течение всей операции.
Практические советы и отладка
Important: cv читает состояние процессов и файловой системы. Если прогресс не отображается, проверьте:
- Действительно ли целевая команда выполняется в тот же момент (ps aux | grep cp).
- Имеется ли доступ к /proc (в контейнерах или при ограниченных правах может не работать).
- На некоторых файловых системах и драйверах метрики чтения/записи могут быть недоступны или неточны.
Если cv не находит процесс, проверьте текущий пользователь и права доступа — для чтения некоторых полей /proc може понадобиться root.
Альтернативы и когда cv не подходит
- pv — показывает скорость и прогресс для потоков данных; полезен при проксировании данных через stdin/stdout.
- rsync –progress — для удалённой и локальной синхронизации с подробным прогрессом и возобновлением.
- dd status=progress — даёт прогресс при работе с dd (копирование образов).
- progress (инструмент от той же команды) — ещё одна утилита для отслеживания command-line утилит.
Когда cv может не подойти:
- Операции очень короткие (нет времени показать полезную информацию).
- Операции на специальных устройствах, где статистика I/O недоступна.
- Ограниченные среды (некоторые контейнеры, chroot) без /proc.
Мини-методология: как быстро выбрать инструмент
- Копируете локальный файл простым cp — cv удобно для мониторинга.
- Копируете через канал/конвейер (|) — используйте pv.
- Синхронизируете каталоги/сеть — rsync –progress.
- Копируете блочное устройство или образ — dd status=progress или cv как дополнительный монитор.
flowchart TD
A[Что вы делаете?] --> B{Локальное копирование файла}
B -->|Да| C[cv]
B -->|Нет| D{Канал/поток}
D -->|Да| E[pv]
D -->|Нет| F{Сеть / синхронизация}
F -->|Да| G[rsync --progress]
F -->|Нет| H[dd status=progress]Чек-листы по ролям
Администратор:
- Проверить доступ к /proc для всех пользователей, которые будут мониториться.
- Установить cv в /usr/local/bin и добавить путь в PATH.
- Настроить cron/системные скрипты, если нужен автоматический мониторинг длительных операций.
Разработчик/инженер поддержки:
- Использовать cv -m при тестировании длительных операций.
- Сравнивать показания cv и инструмента I/O (iostat, iotop) при подозрениях на узкое место.
Обычный пользователь:
- Запустить длительное копирование и во второй вкладке выполнить cv или ./cv.
- При необходимости добавить -w для ETA.
Шпаргалка команд (cheat sheet)
- Запуск простого мониторинга для текущего пользователя:
cv- С отображением скорости и ETA:
cv -w- Зацикленный режим (не завершается, пока процессы не завершатся):
cv -m- Запуск из /usr/local/bin (если PATH не настроен):
cd /usr/local/bin && ./cvКритерии приёмки
- cv отображает PID и команду для каждой длительной операции в выводе.
- При использовании -w показывается оценочная скорость и ETA.
- В режиме -m cv не завершает работу, пока отслеживаемые процессы не завершатся.
Совместимость и переносимость
- Основная поддержка — Linux; есть порт для Mac OS X, но функциональность может отличаться из‑за особенностей /proc и реализованных вызовов ядра.
- В контейнерах без /proc или с ограниченными правами cv может не работать. Для таких сред рассматривайте инструменты, встроенные в контейнерные платформы.
Безопасность и приватность
cv читает данные из /proc и отображает информацию о запущенных процессах. Не запускайте cv с привилегиями, если вы не доверяете окружению. Информация о файлах и путях может быть видна другим пользователям, если вывод перенаправляется в лог-файлы.
Заключение
cv — простой и полезный инструмент для мониторинга прогресса длительных команд в Linux. Он не заменяет специализированные инструменты для передачи данных или диагностики, но хорошо дополняет их в быстрой проверке «на лету». Благодаря небольшому коду его легко собрать, адаптировать и расширить под свои нужды.
Summary:
- cv показывает процент выполнения для cp, mv, dd, tar и других.
- -w добавляет оценку скорости и ETA; -m запускает режим мониторинга.
- Рассматривайте pv, rsync или dd для задач, где cv не даёт детальной информации.
Была ли у вас практика использования cv или аналогичных утилит? Поделитесь опытом в комментариях.