Гид по технологиям

pv — мониторинг прогресса в командной строке

• 5 min read • Linux • Обновлено 27 Nov 2025
pv — мониторинг прогресса в командной строке
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

Индикатор копирования файла с флешки, показывающий прогресс, скорость и ETA

pv покажет размер, процент, прогресс-бар, скорость и оставшееся время.

Только числовой процент (для внешних диалогов)

Опция -n выводит целочисленный процент, по одному числу на строку в stderr. Это удобно, если хотите передать процент в dialog, zenity или скрипт-обработчик.

pv -n /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv

Вывод целого процента на stderr, пригоден для интеграции с диалогами

Ограничение скорости передачи

Опция -L позволяет ограничить пропускную способность. Полезно при копировании через сеть или когда нужно не нагружать накопитель.

pv -L 2m /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv

Ограничение скорости передачи до 2 МБ/с, показанное pv

Значения можно задавать в b/k/m/g (байты/килобайты/мегабайты/гигабайты).

Сжатие через gzip с индикатором прогресса

pv удобно вставлять в пайп, чтобы отслеживать прогресс сжатия:

pv /media/himanshu/1AC2-A8E3/fnf.mkv | gzip > ./Desktop/fnf.log.gz

Прогресс сжатия файла через gzip с индикатором pv

Использование с 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=progress

pv полезен, если ваша версия 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 в сценарии:

  1. Определите операцию, которая работает «в потоке» (копирование, сжатие, передача).
  2. Вставьте pv между источником и приёмником данных.
  3. Запустите в интерактивном режиме, убедитесь, что stderr вывод удобочитаем.
  4. Для GUI-диалогов используйте -n и парсите вывод в 0–100.
  5. Для ограничения влияния на систему примените -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).

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро