pv


Предыдущая | Следующая

Нередко при копировании хочется увидеть прогресс. На самом деле есть два способа. Первый метод это копировать отдельный файл с помощью pv

pv file1.txt > file2.txt

а также есть способ через rsync. Очень удобен тем, что можно настроить вывод процентов на многое, например, на создание архивов.

Далее без сортировки просто накидаю, что нашёл.

 

---

Мне нужно скопировать очень большой каталог (говорящий в терабайтах здесь) и хочу следить за прогрессом.

 
 

Я обнаружил, что pv – хорошая утилита, но как я могу использовать ее для рекурсивного копирования каталогов? ( pv src > dst не работает, потому что это каталоги)

PS: Запуск на OS X Mountain Lion, pv был установлен из Mac Ports

 

6 Solutions collect form web for “информация о ходе работы через pv для копирования каталога”

Использовать rsync --progress [SRC] [DST]

Проверьте страницу man rsync потому что у нее много очень полезных опций. -a для архива – хорошее начало, но это зависит от ваших точных требований.

Копирование через трубу излишне замедляет процесс копирования, особенно если это файлы.

Вы можете использовать tar или pax или cpio :

 mkdir -p dst && (cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -) 

Тар.

 tar -cf - /var/log/ | pv | tar -C . -x 

Пример:

 # tar -cf - /var/log/ | pv | tar -C . -x tar: Removing leading `/' from member names 58MB 0:00:05 [ 2.2MB/s] [ <=> 

Вот несколько команд для копирования каталогов с информацией о ходе.


Если есть много небольших файлов:

 cp -av sourcedir targetdir | pv -l -s filecount > logfile 

Это сообщит о прогрессе, основанном на количестве копируемых файлов.

Вы можете перенаправить на /dev/null если вам не нужен logfile .

Используйте следующую команду для получения filecount :

 find sourcedir | wc -l 

Если есть несколько огромных файлов:

 tar c sourcedir | pv -s size | tar x -C targetdir 

Это будет сообщать о прогрессе, основанном на байтах, которые копируются.

targetdir должен существовать.

Используйте следующую команду для получения size :

 du -sh sourcedir 

Если вы хотите использовать rsync:

 rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile 

Получите filecount как показано выше.

Если вы копируете в той же системе, то rsync -a практически совпадает с cp -a . Преимущества rsync – это когда вы копируете по сети, или если вы обновляете (или сравниваете) предыдущую копию.

Подробнее см. Здесь:

  • Оцените время или работу, оставшуюся до конца для rsync?
  • Сравнение каталогов, но не содержимого файлов

Вы можете сделать du -b /directory/ как для источника, так и для назначения, пока выполняется обычная команда копирования, и сравните два. Это так же эффективно и не замедляет процесс копирования, проталкивая его через трубу.

 find source-dir -print0 | xargs -0 -I % pv % > dest-dir/% 

 

---

 

 

Как использовать команду pv в Linux?

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

 

Синтаксис команды pv:

 

pv file
pv options file
pv file > filename.out
pv options | command > filename.out
comand1 | pv | command2 

 

Параметры, используемые с pv, делятся на три категории: переключатели отображения, модификаторы вывода и общие параметры.

Некоторые опции для переключения отображения.

Некоторые параметры в выходных модификаторах.

Использование команды pv с примерами

  1. Если никакая опция не включена, команда pv работают с параметрами —p, -t, -e, -r и -b по умолчанию.

Например, чтобы скопировать файл opensuse.vdi в /tmp/opensuse.vdi, запустите эту команду и посмотрите индикатор выполнения в screencast:

# pv opensuse.vdi> /tmp/opensuse.vdi

 

 

  1. Чтобы сделать zip-файл из файла /var/log/syslog, выполните следующую команду.

 

# pv /var/log/syslog | zip> syslog.zip

 

 

  1. Чтобы подсчитать количество строк, слов и байтов в файле /etc/hosts, показывая только индикатор выполнения, выполните следующую команду.

 

# pv -p /etc/hosts | wc

 

 

  1. Можно следите за ходом создания файла резервной копии с помощью утилиты tar.

 

# tar -czf - ./Downloads/ | (pv -p -timer -rate -bytes> backup.tgz)

 

 

  1. Используя инструмент pv и диалоговый терминал вместе, чтоб открыть индикатор выполнения диалога следующим образом.

 

# tar -czf - ./Documents/ | (pv -n> backup.tgz) 2> & 1 | Диалоговое окно «Прогресс» 10 70

 

 

 

 

---

 

Согласно официальной документации, команда PV контролирует поток данных через pipe. Команда выводит следующую информацию о текущей операции: время , прошедшее, процент завершения (с прогресс бар), текущую скорость, пропускная способность общего объема передаваемых данных, и ETA.

“Для того, чтобы использовать его, вставьте его в pipeline между двумя процессами, с соответствующими опциями,” объясняет man page. “Его стандартный ввод будет передан на свой стандартный вывод и прогресс будет показан на стандартной ошибке.”

Теперь, покажем использование команды PV на примере. Но до этого, убедитесь, что утилита присутствует в вашей системе. Если нет, то вы можете легко загрузить и установить ее на системах Debian (например, Ubuntu) с помощью следующей команды:

sudo apt-get install pv

 

Теперь, перейдем к примеру. На следующем рисунке показана команда PV в действии, когда я копирую, изображений хранится внутри директории на моем флэш-накопителе на рабочем столе моей системы:

Как вы можете видеть, команда PV отображается индикатор выполнения, а также другую полезную информацию. Это поведение по умолчанию команды. Тем не менее, если вы хотите ограничить вывод, вы можете сделать это, используя переключения дисплеев. Например, следующая команда будет отображаться только индикатор прогресса, и ничего больше.

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

 

Это потому, что мы использовали -p переключатель дисплея, который говорит pv только включить индикатор выполнения. Для получения полного списка переключателей дисплея, смотрите команды man page.

Тогда есть некоторые выходные модификаторы. Например, при использовании вариант с командой -W или –wait скажет ему, чтобы ждать, пока первый байт не был передан, прежде чем показывать какую – либо информацию о ходе работы или каких – либо вычисления ЕТА. Это особенно полезно в тех случаях, когда допустим требует дополнительной информации, прежде чем начнет.

И, наконец, команда PV также предлагает некоторые модификаторы передачи данных. Например, если вы хотите, вы можете ограничить передачу определенного количества байтов в секунду. Если взглянуть на скриншот ранее, скорость передачи данных составляет более 18MBps. Теперь предположим, что вы хотите ограничить до 5Mbps, для этого вам необходимо выполнить следующую команду:

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

 

Вариант -L с последующим значением ‘5m’ делает трюк здесь. См, приведенную выше команду в действии на следующем скриншоте:

“Суффикс ‘k’, ‘m’, ‘g’, или ‘t’ могут быть добавлены для обозначения килобайт (* 1024), мегабайтах, и так далее,” объясняет man page. Более подробную информацию о передачи данных, а также модификаторов передачи данных также доступна при помощи команды man page.

Команда Progress в Linux

Progress (ранее известный как CV) это утилита командной строки, которая обеспечивает прогресс для текущих операций, связанных  с основными командами Coreutils, такие как cp, mv, dd, tar, gzip/gunzip, cat, и многое другое.” Он также может показать расчетное время и пропускную способность, а также обеспечивает режим ‘top-like’, как (мониторинг),” говорится в официальной документации.

 

Перед установкой Прогресс, вы должны сначала убедиться, что библиотека ‘Ncurses’ есть в вашей системе, так как команда зависит от этой библиотеки. Если ее нет, то пользователи Debian / Ubuntu можно загрузить и установить пакет Ncurses с помощью следующей команды:

sudo apt-get install libncurses5-dev

 

Затем загрузите командный пакет Progress из репозитория GitHub с помощью следующей команды:

git clone https://github.com/Xfennec/progress.git

 

Войдите в каталог «Progress» и выполните следующие команды:

makesudo make install

 

Вот и все. Команда Progress теперь будет установлена на вашем компьютере Linux. Следующий скриншот (взят из проекта на странице GitHub ) показывает команду в действии:

Как вы можете видеть, команда Progress дает вам информацию обо всех текущих операциях, которые включают команды Coreutils. Как и любой другой инструмент командной строки Linux, Progress также предлагает несколько вариантов командной строки. Ниже приведен список опций, которые могут быть полезными для вас:

 

---

 

PV — это сокращенно pipeviewer (просмотровщик пайпов), показывает cкорость обработки данных.

Установка pv в Ubuntu проста (в Debian аналогично):

#aptitude install pv


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

1. Предположим, что у вас есть файл access.log в несколько гигабайт, который содержит логи сервера. Вы хотите сжать его так:

#gzip -c access.log > access.log.gz

Так как файл большой то нет понимания насколько долгим будет процесс сжатия.

Используя pv можно точно оценить время, которое займет данный процесс.

#pv access.log | gzip > access.log.gz

335MB 0:00:19 [49.3MB/s] [=> ] 18% ETA 0:00:59

2. Копирование большого количества данных через сеть с использованием утилиты nc.

Предположим, у есть два компьютера A и B. Хотим перенести директорию с A на B. Наибыстрейший путь это использовать tar и nc.

# на компе A с IP 192.168.30.10
$ tar -cf — /path/to/dir | pv | nc -l -p 7777 -q 5

# на компе B
$ nc 192.168.1.100 7777 | pv | tar -xf -

 Вот простейшие примеры. Строив сложные команды можно получать дополнительную информацию по процессам.

 

---

 

Один мой друг сказал по поводу pv следующее «Я админю семь лет, мне нужна была эта тулза десятки раз, а я даже не знал что она существует». В размышлениях над тем как заполучить инвайт на Харбе, я набрал в поиске pv. И ничего не нашел.


И так pv — это сокращенно от pipeviewer, то есть ни много не мало как просмотрщик пайпов. Про эффективность использования пайпов расказывать не буду, ни для кого это не секрет. Единственное, «но» в работе с ними — это то, что набрав команду и нажав Enter часто не хватает самой малости — знать сколько времени займет ее выполнение. Именно cкорость обработки данных и будет нам показывать pv.

С лирикой покончено, перейдем к примерам.

Установка pv в Debian довольно тривиальна.
% sudo aptitude install pv

Дальше вводная, допустим вы такой же как и я счасливый обладатель каких-нибудь полезных логов и в какой-то момент у вас дошли руки их заархивировать, например так
% cat rt94-171-06 | gzip > rt94-171-06.gz
Есть мысли, сколько времени займет эта операция?

Тоже самое при помощи pv
%pv rt94-171-06 | gzip > rt94-171-06.gz
128MB 0:00:15 [ 9.1MB/s] [=====>.....................] 18% ETA 0:01:07

Наглядно видно, что через пайп за 15 секунд прошло 128Мб — это 18% от всего объема, операция займет еще минуту и 7 секунд.

Может показаться, что pv это такая замена для cat, но на самом деле ее возможности намного шире. Например, упаковываем весь каталог в сжатый архив
%tar -czf - . | pv > out.tgz
21.9MB 0:00:15 [1.47MB/s] [...<=>.....................]

Уже неплохо, но хочеться большего, чтобы показывалось время окончания работы. Для этого всего лишь надо при помощи ключа -s передать pv размер каталога в байтах
%tar -czf - . | pv -s $(du -sb | grep -o '[0-9]*') > out.tgz
44.3MB 0:00:27 [1.73MB/s] [>..........................] 0% ETA 13:36:22

У меня вся операция займет 13 с половиной часов. Хех, накопил =)

Можно так же составлять команды из несколько копий pv.
%tar -cf - . | pv -cN tar -s $(du -sb | grep -o '[0-9]*') | gzip | pv -cN gzip > out.tgz
tar: 97.1MB 0:00:08 [12.3MB/s] [>......................] 0% ETA 1:50:26
gzip: 13.1MB 0:00:08 [1.6MB/s] [....<=>................]

Ключ -c нужен, чтобы несколько копий pv не выводили информацию друг поверх друга. Ключ -N дает имя шкале.

Ну и под конец забавный пример с одного англоязычного блога о Линуксе
%pv /dev/urandom > /dev/null
18MB 0:00:05 [ 3,6MB/s] [...<=>............................]

 

---

 

 

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

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

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

sh
1 lines
 
 
 
 
 
 
# aptitude install pv
 
 
 
 

или

sh
1 lines
 
 
 
 
 
 
# apt-get install pv
 
 
 
 

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

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

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

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

sh
1 lines
 
 
 
 
 
 
# yum install pv
 
 
 
 

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

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

sh
2 lines
 
 
 
 
 
 
# cd /usr/ports/sysutils/pv/
# make install clean
 
 
 
 

Или:

sh
1 lines
 
 
 
 
 
 
# pkg_add -r pv
 
 
 
 

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

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

sh
1 lines
 
 
 
 
 
 
$ brew·install pv
 
 
 
 

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

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

sh
1 lines
 
 
 
 
 
 
$ pfexec pkg install pv
 
 
 
 

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

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

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

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

pv принимает множество опций и сейчас я предоставлю их.

Коммутаторы (Display Switches)

Если не указаны опции для вывода, pv ведет себя так, как если бы вы задали «-p», «-t», «-e», «-r» и «-b» (т. е. все включено). В противном случае будут показаны только те типы вывода, которые явно включены:

Модификаторы вывода

Модификаторы передачи данных

 

Общие опции

ФОРМАТИРОВАНИЕ

Если задана опция «-F», формат вывода можно определить строкой формата. Внутри этой строки могут использоваться следующие последовательности:

Использование утилиты pv в Unix/Linux

Например, можно использовать утилиту pv вместо cat, следующим образом:

sh
2 lines
 
 
 
 
 
 
# 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
 
 
 
 

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

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

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

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

sh
2 lines
 
 
 
 
 
 
# 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:

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

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

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

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

sh
4 lines
 
 
 
 
 
 
$ tar -czf - backUPs | pv -L 4m > backUPs.tgz
30MiB 0:00:08 [4.17MiB/s] [ <=> ]
 
 
 
 
 
 

Как я уже описывал разные опции, но опишу опции еще раз:

Можно поигратся и выполнить:

sh
2 lines
 
 
 
 
 
 
# pv /dev/urandom > /dev/null
66MB 0:00:44 [ 6.8MB/s] [...<=>............................]
 
 
 
 

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

sh
1 lines
 
 
 
 
 
 
$ pv /dev/zero > /dev/null
 
 
 
 

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

sh
1 lines
 
 
 
 
 
 
# pv < /dev/zero > /dev/sda
 
 
 
 

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

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

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

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

Или:

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

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

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

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

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

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

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

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

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

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

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

Или:

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

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

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

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

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

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

sh
1 lines
 
 
 
 
 
 
# 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» завершена.