pv — мониторинг прогресса в командной строке
pv (Pipe Viewer) показывает прогресс передачи данных в конвейере: процент, бар, скорость, объём, прошедшее время и ETA. Установите pv через пакетный менеджер, вставляйте его между командами и используйте дополнительные опции для числового вывода, ограничения скорости или интеграции с диалоговыми утилитами.
Что такое pv
pv (Pipe Viewer) — это небольшая утилита для отслеживания прогресса данных, проходящих через конвейер (pipeline). Она читает стандартный ввод, передаёт данные на стандартный вывод и выводит информацию о прогрессе на stderr. Информация обычно включает:
- прошедшее время;
- процент выполнения и визуальный прогресс-бар;
- текущую скорость передачи;
- объём переданных данных;
- ожидаемое оставшееся время (ETA).
Коротко: pv полезен, когда команда «зависла» или длительная операция должна показать прогресс.
Important: в примерах использована версия pv 1.2.0. Поведение опций может немного отличаться в других версиях.
Установка
Для Debian/Ubuntu:
sudo apt-get update
sudo apt-get install pvДля Fedora/CentOS/RHEL (dnf/yum):
# Fedora
sudo dnf install pv
# CentOS/RHEL
sudo yum install pvДля Arch Linux:
sudo pacman -S pvМожно также собрать из исходников с официального сайта проекта при необходимости.
Типичные сценарии использования и примеры
Ниже — практические примеры, которые обычно встречают админы и пользователи.
Копирование файла с флешки на рабочий стол
Обычный cp не показывает прогресс. Замените его командой с pv:
pv /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv
pv покажет размер, процент, прогресс-бар, скорость и оставшееся время.
Только числовой процент (для внешних диалогов)
Опция -n выводит целочисленный процент, по одному числу на строку в stderr. Это удобно, если хотите передать процент в dialog, zenity или скрипт-обработчик.
pv -n /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv
Ограничение скорости передачи
Опция -L позволяет ограничить пропускную способность. Полезно при копировании через сеть или когда нужно не нагружать накопитель.
pv -L 2m /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv
Значения можно задавать в b/k/m/g (байты/килобайты/мегабайты/гигабайты).
Сжатие через gzip с индикатором прогресса
pv удобно вставлять в пайп, чтобы отслеживать прогресс сжатия:
pv /media/himanshu/1AC2-A8E3/fnf.mkv | gzip > ./Desktop/fnf.log.gz
Использование с dd
dd традиционно молчит. Комбинация dd и pv даёт понятный индикатор:
# пример: чтение диска и запись в образ с прогрессом
pv /dev/sdb | dd of=/path/to/image.img bs=4MИли прямо через dd с прогрессом (dd 8.24+ поддерживает status=progress):
dd if=/dev/sdb of=/path/to/image.img bs=4M status=progresspv полезен, если ваша версия dd старее.
Опции и быстрый справочник (cheat sheet)
- -p — показать процент;
- -t — показать прошедшее время;
- -r — показать скорость передачи;
- -e — показать ожидаемое оставшееся время (ETA);
- -b — показать счётчик в байтах;
- -n — вывод целого процента по строкам (для stderr);
- -L
— ограничить скорость (например, 500k, 2m).
Все перечисленные отображения включены по умолчанию. Вы можете комбинировать их по необходимости.
Когда pv не подходит и альтернативы
Counterexample: если команда сама умеет показывать прогресс (rsync, curl, wget, apt), вставлять pv внутри конвейера бессмысленно. Также pv не может знать внутреннюю структуру архива (tar/gzip) и поэтому не покажет прогресс сжатия отдельных файлов внутри многофайловых архивов, если поток не несёт метаданных о размере подэлементов.
Альтернативы и дополнения:
- rsync — подходит для синхронизации и показывает прогресс на уровне файлов;
- dd с status=progress — простой прогресс для dd (последние версии);
- progress — отдельная утилита, которая может показывать прогресс для уже работающих процессов (инспектирует fd);
- pv хорош для потоковой передачи и скриптов.
Практические сценарии и методика интеграции
Мини-методология внедрения pv в сценарии:
- Определите операцию, которая работает «в потоке» (копирование, сжатие, передача).
- Вставьте pv между источником и приёмником данных.
- Запустите в интерактивном режиме, убедитесь, что stderr вывод удобочитаем.
- Для GUI-диалогов используйте -n и парсите вывод в 0–100.
- Для ограничения влияния на систему примените -L.
Рекомендация: при использовании в скриптах логируйте stderr pv в отдельный файл, чтобы не мешать обычному выводу команды.
Руководство для ролей (role-based checklist)
Системный администратор:
- Установить pv через пакетный менеджер на всех целевых хостах.
- Использовать -L при работе с медленными накопителями.
- Добавить pv в скрипты резервного копирования, чтобы видеть прогресс и ETA.
Разработчик/CI-инженер:
- Интегрировать pv в шаги архивации/переноса артефактов для прозрачности билд-пайплайна.
- Для автоматических отчётов парсить -n вывод и передавать в метрики.
SRE/операции:
- Использовать pv в runbook для образов дисков и миграций.
- Логировать скорость и время выполнения как основу для SLO анализа.
Критерии приёмки
- Прогресс отображается при использовании pv в интерактивном вызове.
- Для -n выводятся целые проценты в stderr по одной строке.
- Ограничение скорости -L действительно снижает throughput.
- Интеграция с gzip/rsync/ssh не ломает поток данных.
Возможные ошибки и устранение неисправностей
- Ничего не отображается: проверьте, не перенаправлен ли stderr в /dev/null; pv пишет прогресс в stderr.
- Неверный путь к файлу: убедитесь в наличии прав на чтение/запись и верном указанном пути.
- Неправильная интерпретация размеров: pv использует двоичные суффиксы байт; учитывайте это при скриптах.
Note: pv не вмешивается в содержимое потока. Любая фильтрация или сжатие изменит объём данных и, соответственно, расчёт ETA.
Совместимость и советы по миграции
- pv доступен в большинстве дистрибутивов Linux и в репозиториях BSD-подобных систем.
- Если переходите с утилит, которые уже показывают прогресс (rsync, curl), оцените, нужно ли дополнительное отображение.
Краткое резюме
pv — простая и полезная утилита для наблюдения за прогрессом потоковых операций в командной строке. Она удобна для копирования файлов, сжатия, работы с dd и интеграции в скрипты. Используйте опции -n и -L для интеграции с GUI/диалогами и ограничения скорости соответственно.
Summary
- pv отображает прогресс для потоковых операций в пайплайне;
- опции -n и -L полезны для интеграции и управления скоростью;
- pv легко устанавливается через стандартный пакетный менеджер и вписывается в скрипты резервного копирования и миграций.
Авторская рекомендация: попробуйте pv при следующем крупном копировании или сжатии — это сэкономит время и снимет неопределённость выполнения длинных операций.
1-line glossary
pv — утилита для показа прогресса передачи данных в конвейере (pipeline).
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента