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

PV и Progress — как видеть прогресс копирования и других операций в Linux

6 min read Linux Обновлено 07 Oct 2025
PV и Progress: прогресс копирования в Linux
PV и Progress: прогресс копирования в Linux

Введение

Представьте, что вы начали копирование очень большого файла с флешки в систему Linux через командную строку. Операция занимает длительное время, вы отвлеклись и через некоторое время возвращаетесь, чтобы увидеть, что команда всё ещё выполняется без явных изменений и без ошибок. Часто варианты действий ограничены: ждать или прервать и запустить заново.

Было бы удобно видеть прогресс, как в графическом интерфейсе. В этой заметке мы подробно разберём две утилиты, которые дают прогресс прямо в терминале: pv и Progress. Обе проверены на практике и подходят для разных сценариев использования.

Важно

Все примеры и команды тестировались в окружении Ubuntu 14.04. Для других дистрибутивов названия пакетов и менеджеры пакетов могут отличаться.

Кому и когда это полезно

  • Сисадминам, которые работают на headless-серверах
  • Разработчикам, копирующим большие архивы или образы
  • Тем, кто хочет ограничить скорость передачи, чтобы не перегружать диск или сеть
  • Любому, кто предпочитает визуальную обратную связь при длительных операциях

Краткая характеристика инструментов

  • pv — вставляется в пайп между процессами, пропускает stdin в stdout и показывает панель прогресса, скорость, переданные данные, оставшееся время
  • Progress — сканирует запущенные процессы и показывает прогресс по командам coreutils, не требуя модификации исходной команды

Утилита pv: установка и примеры использования

pv мониторит поток данных через конвейер. Вы вставляете pv между двумя процессами, и он выводит информацию о прогрессе на stderr: прошедшее время, процент и прогресс-бар, текущая скорость передачи, объём переданных данных и ETA.

Установка на Debian/Ubuntu:

sudo apt-get install pv

Простой пример: копирование каталога изображений с флешки в gzip-архив на рабочий стол

pv /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

В этом примере pv выводит прогресс-бар и другие метрики по умолчанию. Если нужно оставить только прогресс-бар, используйте ключ -p:

pv -p /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

Некоторые полезные опции pv:

  • -p показывать только прогресс-бар
  • -t показывать прошедшее время
  • -e показывать ETA
  • -r показывать скорость передачи
  • -W ждать передачи первого байта перед расчётом статистики
  • -L ограничить скорость передачи, например 5m для 5 мегабайт в секунду

Пример ограничения скорости до 5 МБ/с:

pv -L 5m /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

Примечание о суффиксах: k, m, g, t соответствуют килобайтам, мегабайтам и т. п. согласно поведению man page pv.

Когда pv не подходит

  • Если у вас уже запущена команда без pv и вы не хотите перезапускать процесс, pv бесполезен
  • Для мониторинга произвольных процессов pv нужно явно вставить в поток данных

Утилита Progress: мониторинг уже запущенных процессов

Progress (раньше называлась cv) сканирует процессы и показывает прогресс для команд coreutils и некоторых других: cp, mv, dd, tar, gzip/gunzip, cat и т. д. Утилита может показывать оценочное время и пропускную способность, есть режим мониторинга наподобие top.

Перед установкой убедитесь, что установлена библиотека ncurses, так как Progress зависит от неё. На Debian/Ubuntu:

sudo apt-get install libncurses5-dev

Клонируем репозиторий и устанавливаем:

git clone https://github.com/Xfennec/progress.git
cd progress
make
sudo make install

После установки вы можете запустить progress и увидеть список отслеживаемых операций.

Скриншот работы прогресс-утилиты Progress, показывающей операции копирования

Основные опции progress:

  • -m, –monitor повторять вывод, пока наблюдаемые процессы выполняются
  • -M, –monitor-continuously постоянно показывать мониторинг, даже если процессы заканчиваются
  • -c, –command cmd фильтровать по имени команды, можно указывать несколько раз
  • -p, –pid id фильтровать по pid, можно указывать несколько раз
  • -i, –ignore-file file не показывать процесс по файлу, требуется абсолютный путь

Когда Progress не подходит

  • Ограничен набором поддерживаемых команд, в отличие от pv
  • Для некоторых специфичных инструментов или когда процесс не использует стандартные системные вызовы чтения/записи, распознавание может не работать

Сравнение pv и Progress — когда что использовать

Ментальная модель

  • Если вы планируете конвейер и можете вставить инструмент в поток, используйте pv: прямой контроль, гибкие опции, ограничение скорости
  • Если процесс уже запущен или вы не хотите его менять, используйте Progress: наблюдение за системой извне

Таблица выбора по сценарию

  • Копирование файлов через cat или gzip в пайпе → pv
  • mv или cp, запущенные вручную без pv → Progress
  • Нужно ограничить скорость передачи → pv с -L
  • Нужно мониторить сразу все похожие операции → Progress с –monitor

Альтернативные подходы и команды-замены

  • dd status=progress — показывает прогресс в некоторых современных версиях dd, удобно для образов и блочных операций
dd if=/dev/zero of=bigfile bs=1M count=1024 status=progress
  • rsync -P — показывает прогресс и позволяет продолжать прерванные копирования
rsync -avP /source/ /dest/
  • cp –verbose или cp –progress — в некоторых реализациях есть прогресс, но это зависит от версии coreutils

Практические подсказки и сценарии

  • Если ожидается, что команда будет долго висеть до первого байта, используйте pv –wait или -W, чтобы статистика не давала ложное ETA
  • Для сетевого копирования учитывайте, что ограничение pv -L действует на локальную скорость пайпа, а не на сетевые буферы транспортного слоя
  • При использовании Progress на многопользовательской системе учитывайте права: прогресс можно увидеть только для процессов, которые ваш пользователь может прочитать

Чеклист по ролям

Системный администратор

  • Установить pv и progress через менеджер пакетов или из исходников
  • Проверить доступность ncurses для progress
  • Настроить скрипты резервного копирования с pv для контроля скорости и логирования

Разработчик

  • Использовать pv в пайпах для измерения скорости и ETA
  • При тестировании большого вывода добавлять -W, чтобы избежать неверных оценок ETA

Обычный пользователь

  • Если не хочется устанавливать из исходников, искать пакеты в репозиториях дистрибутива
  • Для единичных операций использовать rsync -P или dd status=progress

Полезные примеры и шпаргалка

Скорость и прогресс в пайпе:

pv -pter -L 5m file.iso | gzip > file.iso.gz

Мониторинг уже запущенных операций:

progress --monitor

Мониторинг только процессов cp и mv:

progress -c cp -c mv --monitor

Ограничение скорости вывода в байтах:

pv -L 500k bigfile > /dev/null

Использование dd с прогрессом:

dd if=big.img of=/dev/sdb bs=4M status=progress

Rsync с показом прогресса и продолжением:

rsync -avP /mnt/usb/ /backup/usb_backup/

Критерии приёмки

  • Видна полоса прогресса или численные метрики для долгих операций
  • При использовании pv не нарушается корректность переданных данных
  • При использовании progress отображается актуальная информация о процессах, для которых есть права доступа

Контроль рисков и ограничения

  • Ни pv, ни Progress не гарантируют точность ETA на 100 процентов для операций с непредсказуемой скоростью ввода/вывода
  • Progress зависит от поддержки команд в репозитории распознавания процессов; в особых случаях распознавание может быть некорректным
  • При ограничении скорости через pv учтите влияние на общую производительность системы

Краткий глоссарий

  • пайп — механизм передачи stdout одной команды в stdin другой
  • ETA — ожидаемое оставшееся время выполнения
  • throughput — пропускная способность, скорость передачи данных

Заключение

pv и Progress решают одну и ту же задачу визуальной обратной связи, но по-разному. pv вставляется в поток и даёт детальную статистику и контроль скорости. Progress наблюдает за уже запущенными процессами и удобен, когда изменение команды невозможно или нежелательно. Выбор между ними зависит от сценария: планируете ли вы пайп заранее или хотите мониторить существующие процессы.

Короткие рекомендации

  • Если вы можете изменить команду и вам нужен контроль — используйте pv
  • Если вы хотите мониторить множество запущенных операций без перезапуска — используйте Progress

Сводка

  • pv подходит для пайпов, ограничения скорости и точных метрик
  • Progress удобен для наблюдения за командами coreutils без модификации команд
  • Альтернативы: dd status=progress, rsync -P

Спасибо за внимание. Надеюсь, это поможет вам получать ясную обратную связь при длинных операциях в терминале.

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

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

Как улучшить качество видео в Windows
Технологии

Как улучшить качество видео в Windows

Восстановление слегка размытых фотографий
Фото

Восстановление слегка размытых фотографий

Исправить потерю пакетов в Fall Guys
Сеть

Исправить потерю пакетов в Fall Guys

Использование Word 2010 как офлайнового редактора блога
Блоги

Использование Word 2010 как офлайнового редактора блога

PV и Progress: прогресс копирования в Linux
Linux

PV и Progress: прогресс копирования в Linux

Два разных фото профиля в Facebook — как сделать
Социальные сети

Два разных фото профиля в Facebook — как сделать