Утилита pv
Коммутаторы (Display Switches)
Если не указаны опции для вывода, pv ведет себя так, как если бы вы задали «-p», «-t», «-e», «-r» и «-b» (т. е. все включено). В противном случае будут показаны только те типы вывода, которые явно включены:
- -p, —progress — Включает индикатор выполнения. Если стандартный ввод не является файлом и не задан размер (с модификатором «-s»), индикатор выполнения не может отобразить корректно данные, насколько близок к завершению передачи, поэтому он просто перемещается влево и вправо, чтобы показать что данные перемещаются.
- -t, —timer — Включить таймер. Это покажет общее время, в течение которого pv работает.
- -e, —eta — Включить таймер ETA. Утилита попытается угадать, как долго до завершения, исходя из предыдущих скоростей передачи и общего размера данных. Этот параметр не будет иметь эффекта, если общий размер данных не может быть определен.
- -r, —rate — Включите счетчик скорости. Это покажет текущую скорость передачи данных.
- -b, —bytes — Включите счетчик для общего отображения байт. На нем отобразится общий объем переданных данных.
- -n, —numeric — Цифровой выход. Вместо того, чтобы визуально показывать прогресс, pv даст целочисленный процент, по одной на строку, по стандартной ошибке, подходящий для пайпа (через свернутое перенаправление) в диалоговом окне (dialog). Обратите внимание, что опция «-f» не требуется, если используется «-n» опция.
- -q, —quiet — Запретить вывод. Полезно, если опция «-L» используется сама по себе, чтобы просто ограничить скорость передачи в пайпе.
Модификаторы вывода
- -W, —wait — Ждать, пока первый байт не будет перенесен, прежде чем показывать какую-либо информацию о ходе или вычислять любые ETA. Полезно, если программа к которой вы подключаетесь, требует дополнительной информации до ее запуска, например, для передачи данных в gpg или mcrypt, которые требуют кодовой фразы, прежде чем данные могут быть обработаны.
- -s SIZE, —size SIZE — Предположим, что общий объем передаваемых данных — это SIZE байт при вычислении процентов и ETA. Те же суффиксы «k», «m» и т. Д. Могут использоваться с «-L».
- -l, —line-mode — Вместо подсчета байтов, подсчитываеться строки (символы новой строки). Полоса выполнения будет двигаться только при обнаружении новой строки, а значение, переданное в параметр «-s», будет интерпретироваться для счета строки.
- -i SEC, —interval SEC — Ждать SEC секунд между обновлениями. Значение по умолчанию — обновлять каждую секунду. Обратите внимание, что это может быть десятичное число, такое как 0,1.
- -w WIDTH, —width WIDTH — Предположим, что терминал имеет ширину WIDTH, вместо того, чтобы пытаться его угадать (или назначить 80, если это невозможно предугадать).
- -H HEIGHT, —height HEIGHT — Предположим, что терминал имеет HEIGHT высоту, вместо того, чтобы пытаться его угадать (или назначить 25, если это невозможно предугадать).
- -N NAME, —name NAME — Префикс выводимой информации с помощью NAME. Полезно в сочетании с «-c», если у вас сложный пайп и вы хотите, чтобы он мог разделить вывод на разные части.
- -f, —force — Пренудительный вывод. Обычно pv не выводит никакого визуального вывода, если стандартная ошибка не является терминалом. Этот параметр заставляет это показать.
- -c, —cursor — Используйте escape последовательности позиционирования курсора вместо использования возврата каретки. Это полезно в сочетании с «-N (name)», если вы используете несколько pv запросов и соединяете его в один длинный конвейер.
Модификаторы передачи данных
- -L RATE, —rate-limit RATE — Ограничьте передачу до максимального RATE байта в секунду. Суффикс «k», «m», «g», или «t» могут быть добавлены для обозначения килобайт (*1024), мегабайт и т. д.
- -B BYTES, —buffer-size BYTES — Использовать размер буфера передачи BYTES байтов. Суффикс «k», «m», «g», или «t»могут быть добавлены для обозначения килобайт (*1024), мегабайт и т. д. Размер буфера по умолчанию — это размер блока файловой системы входного файла, умноженный на 32 (максимальный 512kb) или 400 кбайт, если размер блока не может быть определен.
- -R PID, —remote PID — Если PID является экземпляром pv, который уже запущен, -R PID заставит этот экземпляр действовать так, как если бы ему была назначена командная строка этого экземпляра. Например, если запустить «pv -L 123k» и он имеет 9876 ID процесс, тогда запуск «pv -R 9876 -L 321k» заставит его начать использовать ограничение скорости 321k вместо 123k. Обратите внимание, что во время работы некоторые параметры не могут быть изменены, например «-c», «-l» и «-f».
Общие опции
- -h, —help — Выводит показать справку об использовании данной утилиты и завершает работу.
- -V, —version — Выводит версию ПО и завершает работу.
ФОРМАТИРОВАНИЕ
Если задана опция «-F», формат вывода можно определить строкой формата. Внутри этой строки могут использоваться следующие последовательности:
- %p — Индикатор выполнения. Развертывается, чтобы заполнить оставшееся пространство. Следует указывать только один раз. Эквивалентно «-р» опции.
- %t — Пройденное время. Эквивалентно «-t» опции.
- %e — Оставшееся время (ETA). Эквивалентно «-e»опции.
- %I — Время завершения (ETA). Эквивалентно «-I»опции.
- %r — Текущая скорость передачи данных. Эквивалентно «-r» опции.
- %a — Средняя скорость передачи данных. Эквивалентно «-a» опции.
- %b — Байты, передаваемые до сих пор (или строки, если указано «-l» опция). Эквивалентно «-b» опции.
- %T — Процент используемого буфера передачи. Эквивалентно «-T» опции. Показывает «{—-}» если передача выполняется с помощью splice, поскольку сплайсинг в/из пайп(а) не использует буфер.
- %nA — Показать последние n записанных байтов, (например, %16A — последние 16 байт). Показывает только точки, если передача выполняется с помощью splice, поскольку сплайсинг в/из пайп(а) не использует буфер.
- %N — Префикс имени, присвоенный «-N» опцией.
- %% — Один %. Стандартная строка, эквивалентная включению всех переключателей вывода (display switches), `%N %b %T %t %r %a %p %e’.
Использование утилиты pv в Unix/Linux
Например, можно использовать утилиту pv вместо cat, следующим образом:
# pv linux-notes.org.zone.txt | gzip > linux-notes.org.tar.gz
963 MB 0:00:50 [2.04MiB/s] [======================>.................] 10% ETA 0:04:50
Давайте упакуем некоторую папку в архив:
455MiB 0:00:13 [35.7MiB/s] [ <=> ]
# tar -czf - backUPs | pv -s $(du -sb backUPs| grep -o '[0-9]*') > backUPs.tgz
100MB 0:00:50 [3.88MB/s] [>..........................] 20% ETA 0:04:50
# tar -cf - backUPs | pv -cN tar -s $(du -sb ./backUPs | grep -o '[0-9]*') | gzip | pv -cN gzip > backUPs.tgz
tar: 97.1MB 0:00:08 [12.3MB/s] [>......................] 0% ETA 1:50:26
gzip: 13.1MB 0:00:08 [1.6MB/s] [....<=>................]
Можно выводить прогресс-бар в виде цифр (в столбик), например:
2
4
6
8
10
12
......
100
$ tar -czf - backUPs | pv -L 4m > backUPs.tgz
30MiB 0:00:08 [4.17MiB/s] [ <=> ]
- -c — Данная опция не выводит информацию друг поверх друга.
- -N — Называем шкалу определенным именем.
Можно поиграться и выполнить:
# pv /dev/urandom > /dev/null
66MB 0:00:44 [ 6.8MB/s] [...<=>............................]
$ pv /dev/zero > /dev/null
Обнуление диска, можно выполнить следующим образом:
$ echo "You could simulate some text here" | pv -qL 10
$ yes | pv | ssh $your_host_here "cat > /dev/null"
$ pv /dev/zero|ssh $your_host_here 'cat > /dev/null'
И так, команда что выше, подключается к хосту через ssh и отображает скорость передачи в реальном времени, направляя все переданные данные в /dev/null.
Пример использования pv и dd утилиты:
# tar -czf - ./home/captain/backups/ | (pv -n > backup.tgz) 2>&1 | dialog --gauge "Progress" 10 70
Создать mysqldump можно так:
$ mysqldump -uroot -p my_DB | pv | gzip -9 >m y_DB.sql.gz
$ zcat my_DB.sql.gz | pv -cN zcat | mysql -uroot -p my_DB
Более нагляднее, будет:
Чтобы сделать его еще приятнее, вы можете добавить progres NAME, например: