Утилита pv — прогресс bar для консольных утилит в Unix/Linux

Утилита pv — прогресс bar для консольных утилит в Unix/Linux

pv — это утилита которая имеет сокращение от pipeviewer и позволяет пользователю видеть прогресс выполнение той или иной команды по конвейеру и предоставляя информацию (прошедшее время, процент завершения (с индикатором выполнения), текущую пропускную способность, общий объем данных и ETA) — это просмоторщик пайпов.

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

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

# aptitude install pv

или

# apt-get install pv

Установка pv в CentOS/Fedora/RedHat

Для начала, подключаем репозиторий EPEL:

Включить EPEL репозиторий

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

# yum install pv

Установка pv в FreeBSD

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

# cd /usr/ports/sysutils/pv/
# make install clean

Или:

# pkg_add -r pv

Установка pv в Mac OS X

Устанавливаем homebrew: Установка homebrew на Mac OS X после чего, выполняем:

$ brew install pv

Установка pv в OpenSolaris

Если Вы пользователь OpenSolaris:

$ pfexec pkg install pv

Установка pv для других Unix/Linux

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

$ tar -zxf pv-version.tar.gz
$ cd pv-version
$ ./configure && sudo make install

Опции для утилиты pv

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

Собственно, все наглядно выглядит. Не правда ли?

Давайте упакуем некоторую папку в архив:

# tar -czf - backUPs | pv > backUPs.tgz
 455MiB 0:00:13 [35.7MiB/s] [            <=>                                   ]

Наглядно, но не знаешь когда операция завершиться, по этому, давайте добавим ключ «-s» чтобы вывести ETA, например:

# 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

Так же, можно составлять команды из несколько копий pv:

# 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] [....<=>................]

Можно выводить прогресс-бар в виде цифр (в столбик), например:

$ tar -czf - backUPs | pv -n > backUPs.tgz
2
4
6
8
10
12
......
100

Такс, например, вам нужно ограничить скорость изменять скорость передачи данных через pv утилиту. Например, я использовал -L для ограничения скорости передачи данных до  4МБ/с:

$ 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] [...<=>............................]

Чтобы узнать как быстро компьютер читает с /dev/zero, выполните:

$ pv /dev/zero > /dev/null

Обнуление диска, можно выполнить следющим образом:

# pv < /dev/zero > /dev/sda

Симуляция ввода:

$ echo "You could simulate some text here" | pv -qL 10

Чтобы проверить тест пропускной способности сети ssh, выполните:

$ yes | pv | ssh $your_host_here "cat > /dev/null"

Или:

$ pv /dev/zero|ssh $your_host_here 'cat > /dev/null'

И так, команда что выше, подключается к хосту через ssh и отображает скорость передачи в реальном времени, направляя все переданные данные в /dev/null.

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

# dd if=/dev/sdc bs=4096 | pv -s 2G | sudo dd bs=4096 of=~/USB_BLACK_BACKUP.IMG

Чтобы поиграться, выполните:

$ curl -s http://artscene.textfiles.com/vt100/movglobe.vt | pv -q -L 9600

Используя инструмент pv и dialog, вы можете создать панель выполнения следующим образом:

# tar -czf - ./home/captain/backups/ | (pv -n > backup.tgz) 2>&1 | dialog --gauge "Progress" 10 70

Работа pv + mysql в Unix/Linux

Создать mysqldump можно так:

$ pv my_DB.sql.gz | gunzip | mysql -uroot -p my_DB

Или:

$ mysqldump -uroot -p my_DB | pv | gzip -9 >m y_DB.sql.gz

Влить созданный mysqldump можно так:

$ zcat my_DB.sql.gz | pv -cN zcat | mysql -uroot -p my_DB

Более нагляднее, будет:

$ zcat my_DB.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uroot -p my_DB

Чтобы сделать его еще приятнее, вы можете добавить progres NAME, например:

# zcat my_DB.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name ' Importing.. ' | mysql -uroot -p my_DB

Вот  и все, статья «Утилита pv — прогресс bar для консольных утилит в Unix/Linux» завершена.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.