Один мой друг сказал по поводу 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] [...<=>............................]
комментарии (88)
/*пошел переписывать скрипты
Вот как Linux помогает развиваться Windows… :)
В любом случае — даже если ответ на все вопросы «да», хотелось бы услышать об этом, вместо молчаливых минусов. Ну так, чтобы знать в будущем, о чем не стоит говорить (даже если думаешь).
Спасибо.
В конце-концов, мы все тут уж точно не с целью испортить друг другу настоение.
Или я ошибаюсь?
В конце концов, плюньте вы на мой комментарий! Просто задумайтесь — минусуете молчаливо (возможно, портите желание вообще в будущем участвовать в жизни Хабра). Ну так возьмите за труд объяснить! Это просто — нужно только нажать 10-20 клавиш :)
О том что думаешь, говорить нужно, невзирая на обстоятельства. И это я не только про хабр.
Если вы хотите сделать измерение правильно, нужно сконструировать что-нибудь вроде «tar -cf — | pv -s $SIZE | gzip > out.tgz». Примечательно, что в следующем примере это и написано.
10GB 0:00:03 [3,11GB/s] [ <=> ]
15GB 0:00:15 [7,69GB/s] [ <=> ]
:)
3GB 0:00:06 [8,74GB/s] [ <=> ]
Альфа 3 убунты 9.10. Скорость работы дисковой подсистемы возросла?
В этом тесте скорость зависит от процессора, частоты шины и частоты работы памяти. Этот показатель показывает с какой скоростью ядро может генерировать нули и уничтожать их в памяти.
У меня был тест на Linux Mint 7.0 (основан на Ubuntu 9.04).
На моем десктопе — Core 2 Duo E8200 (2.66ГГц), разогнанный до 3.4ГГц + DDR2 2048 Mb PC-8500 (1066MHz) Corsair (2x1024). Результат: 7.7GB/s
На моем домашнем сервере Celeron Dual-Core (1.66ГГц) + DDR2 2048 Mb PC-6400 (800Mhz) Samsung. Результат: 5,03GB/s
так что все относительно
Разогнанный C2D E8200 явно мощнее стокового AX2 4000+, да и память… Однако разница всего в 700Мб/сек
Для нового теста я поднял частоту процессора до 3.55ГГц и память — 1066МГц. В результате получилось 10.2Гб/сек.
Еще раз, извиняюсь. Но C2D явно мощнее AX2… Эх, было время я тоже AMD любил…
А насчет ускорения в 9.10 все таки похоже что так и есть.
У меня 8.7GB/s выдает на Core2Duo 4600 разогнаного до 3ГГц + DD2 2048 1066 Mhz.
82.1GB 0:00:09 [9.15GB/s] [ <=> ]
:)
$ pv /dev/zero > /dev/null
42,1GB 0:00:06 [7,05GB/s] [ <=> ]
$ dd if=/dev/zero of=/dev/null bs=1M count=40K
40960+0 записей считано
40960+0 записей написано
скопировано 42949672960 байт (43 GB), 4,22341 c, 10,2 GB/c
$ # Ну или с перенаправлением (какая разница :)
$ dd if=/dev/zero bs=1M count=40K > /dev/null
40960+0 записей считано
40960+0 записей написано
скопировано 42949672960 байт (43 GB), 4,2467 c, 10,1 GB/c
67GB 0:00:19 [14,1GB/s]
pv /dev/urandom > /dev/null
80MB 0:01:10 [5,32MB/s]
Q6600 :)
в целях сравнения, потому-что первый показатель у меня маловат
Corsair XMS2 2x2 GB pc6400 C5, обычная дешевая память
все в дефолте
opensuse 11.1 i386
Может влияет кол-во памяти?
добавил в фавориты
Искать нужно Гуглом, внутренний поиск работает плохо :)
зацените какое у нас классное сообщество, зашел в профиль автору, там написано следующее:
карма +16, голосов 18, стало быть кто-то проголосовал в минус.
Внимание вопрос, уважаемые знатоки, какой мудак это сделал и что им двигало, если у человека один пост(кстати, уникальный на хабре) и всё! ни комментариев, ничего… от от не#уй делать что-ли…
Я когда-то плюсовал когото и увидел что за мой 1 голос добавилось 0.59 кармы
не дрочил на неене переживал, потом три поста с выходом на главную, и она уже не 77, а 50, закрыл нафиг свои посты и остался читателем, вот здесь идет в точности к тому же, хотел обратить внимание. 30 комментов — молодец, спасибо, как не хватало… среднее арифметическое говорит, что кто-то зассал сказать как есть, именно с этой тз хабр де факто учит быть крысой.(давайте орлы, еще мне пару минусов в профиль, я это замечаю, но вы как и прежде — остались теми же жалкими тихими минусятниками)
ps: последнее — не вам, sunburd, вам я сейчас повышу (и так 3.50 на данный момент, посмотрим как поведут себя крысы — я думаю назло мне они вас поднимут :) )
И кто отминусовал выше — мне до задницы ваши мнения, я просто обращаю внимание, что мне есть что написать в постах, которые вы сами же выведете на главную, откомментите «классный метод в верстке», «клева, как я сам не додумался», но карма упадёт(проверено неединоразово), и что это значит? Что поэт сочинил стих, а его послали на йух… вот и вся арифметика, поймите правильно какие в этот момент чувства, ты вынашивал идею скажем месяц, до чего-то додумался, что-то реализовал, поделилися, а тебе за это насрали под дверью — здорово, не правда ли?
хочетьсяхочется большего»Вот крутится в голове такая идейка… а нельзя ли работающему cp/mv залезть в /proc/PID, посмотреть на открытые файловые дескрипторы и на основании положения звёзд и планет угадать, в каком месте сейчас читается какой файл, посмотреть размер файла и выдать эту информацию на экран?
то весь перечень файлов у него расширится шеллом в список аргументов, который видны в /proc
и cp вроде как идет по-порядку. Проблем особых нет, пока не приходится копировать рекурсивно директории.
% cp tetex-texmf-3.0.tar.gz /tmp/tetex-texmf-3.0.tar.gz
load: 0.04 cmd: cp 92881 [getblk] 0.00u 0.06s 0% 736k
tetex-texmf-3.0.tar.gz -> /tmp/tetex-texmf-3.0.tar.gz 17%
load: 0.04 cmd: cp 92881 [getblk] 0.00u 0.15s 0% 760k
tetex-texmf-3.0.tar.gz -> /tmp/tetex-texmf-3.0.tar.gz 41%
^C
Во время копирования файла я два раза нажал Ctrl+T. Видно, что во время первого нажатия скопировалось 17% файла, во время второго — 41%.
Так, на всякий случай, не у всех в репах есть pv.
Есть еще такое приспособление для похожих нужд: www.theiling.de/projects/bar.html
Написано на sh.
(pv /dev/zero -n > /dev/null) 2>&1 | dialog --gauge Progress 7 50
но почему называется pipeviewer (pv), а не какой-нибудь pipeprogress (pp)?
ps Ваш К.О.
или у «cp» и «mv» есть какая нибудь опция своя?
Ну и результат:
Назвать можете как угодно (pvcp, vcp или даже заменить стандартный cp =)
P.S. Возможны проблемы с аргументами, хотя у меня всё отлично работает =)
Он размер файла так не скажет…
$ (pv /path/to/file/name | cat — >/output/path/file) && rm -rf /path/to/file/name
грубо, но…
2GB 0:00:20 [3,25GB/s] [ <=> ]
pv /dev/urandom > /dev/null
1MB 0:00:11 [3,93MB/s] [ <=> ]
У FreeBSD, похоже, генератор случайных чисел бодрее: даже на древних машинах pv /dev/urandom > /dev/null даёт не три, а целых тридцать MB/s!
cp file1 file2?
а то бывает копируешь 20Гб файл… и думаешь… а сколько еще осталось :)
mysql -p database < dump.sql?
pv dump.sql | mysql -proot database
в другом случае pv работает некорректно:
Enter password: 64kB 0:00:01 [ 63kB/s]
64kB 0:00:03 [ 0B/s ] ] 0% ETA 13:01:12
4.5MB 0:00:15 [ 787kB/s] [> ] 0% ETA 0:54:00
Автор, дай бог тебе здоровья, а!