Pipe Viewer: prograssbar для консольных утилит в Linux

Рассмотрим сценарий, когда вы только начали копировать очень большой файл с флэш-накопителя на вашей системе Linux с помощью командной строки. Учитывая, что данный файл является тяжелым, вы знаете, процесс займет некоторое время, и поэтому вы начинаете делать другую работу.

Через некоторое время вы вернулись, только чтобы увидеть, что команда все еще работает. Вы сами решаете, дать продолжатся операции копирования еще некоторое время. Через некоторое время, когда вы посмотрите еще раз, вы наблюдаете, что ничего не изменилось, то есть процесс копирования не закончился, и команда не показало ошибку.

Вы когда-нибудь сталкивался с такой ситуацией? Если да, то что вы делали? Откровенно говоря, нет ничего особенного, что вы можете сделать в таких случаях, особенно если вы работаете на системе Linux – самый раз, мы либо ждать, или просто отменим текущую операцию, используя Ctrl + C, а затем запустить его снова.

Было бы лучше, если бы мы могли видеть прогресс бар (или нечто подобное) в подобных ситуациях, так же, как мы делаем, когда мы пытаемся скопировать файл через GUI? Определенно, индикатор выполнения для операций командной строки будет очень полезен. Если вы искали такое решение, не смотрите дальше, в этой статье мы рассмотрим две утилиты командной строки, PV и Progress, которые сделают жизнь проще для вас в командной строке.

Обратите внимание, что все команды и инструкции, которые мы уже упоминали в данном руководстве, были протестированы на Ubuntu 14.04.

Команда PV в Linux

Согласно официальной документации, команда 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» и выполните следующие команды:

make
sudo make install

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

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

  • -m (–monitor) : цикл, пока наблюдаемые процессы по-прежнему работает
  • -М (–monitor-continuously) : мониторинг, никогда не останавливается (аналог прогресса )
  • -с (–command cmd) : мониторинг только этой команды название (например, Firefox). Эта опция может быть использована несколько раз в командной строке.
  • -p (–pid id) : мониторинг только этот числового идентификатора процесса (например: `pidof Firefox`). Эта опция может быть использована несколько раз в командной строке.
  • -i (–ignore-file file) : не сообщает процесс “file”. Если файл не существует, вы должны дать полный и чистый абсолютный путь. Эта опция может быть использована несколько раз в командной строке.

Вывод

В то время как инструмент Progress ограничивается командами Coreutils, PV может быть использован и в целом контролировать любую команду строки активности. Кроме того, PV легко загрузить и установить. Но прежде чем идти вперед и заключить, что PV лучше, чем Progress, имейте в виду, что в отличие от PV, с прогрессом вы не должны изменить команду, которую вы хотите контролировать. Итак, какой из этих двух лучше в целом зависит от ваших требований.