Утилита pv — прогресс bar для консольных утилит в Unix/Linux
pv — это утилита которая имеет сокращение от pipeviewer и позволяет пользователю видеть прогресс выполнение той или иной команды по конвейеру и предоставляя информацию (прошедшее время, процент завершения (с индикатором выполнения), текущую пропускную способность, общий объем данных и ETA) — это просмоторщик пайпов.
Установка pv в Debian/Ubuntu
Установка pv утилиты, очень простая, выполняем:
# aptitude install pv
или
# apt-get install pv
Установка pv в CentOS/Fedora/RedHat
Для начала, подключаем репозиторий 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» завершена.
tar -czf — backUPs | pv -n > backUPs.tgz
Выводит циферки от 0 до 100 потом в обратную до 0 потом до 100
И кому это нужно
Обычная индикация процесса а ни прогресса