Поиск по сайту:

Как отслеживать ход выполнения команд Linux с помощью утилит PV и Progress


На этой странице

  1. Команда Linux PV
  2. Команда прогресса Linux
  3. Заключение

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

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

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

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

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

Команда Linux PV

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

«Чтобы использовать его, вставьте его в конвейер между двумя процессами с соответствующими параметрами», — поясняется на странице руководства. \Его стандартный ввод будет передан на стандартный вывод, и прогресс будет показан при стандартной ошибке\.

Теперь давайте разберемся с использованием команды 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 включать только индикатор выполнения. Для получения полного списка переключателей дисплея перейдите на справочную страницу команд.

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

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

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

Параметр -L, за которым следует значение 5m, делает свое дело. Посмотрите, приведенная выше команда в действии на следующем снимке экрана:

\Суффикс k, m, g или t может быть добавлен для обозначения килобайтов (*1024), мегабайтов и т. д., – поясняется справочная страница. Подробная информация о модификаторах вывода и передачи данных также доступна на справочной странице команд.

Команда прогресса Linux

Progress (ранее известная как cv) – это утилита командной строки, которая показывает ход выполнения текущих операций с использованием основных команд coreutils, таких как cp, mv, dd, tar, gzip/gunzip, cat и т. д. \Он также может показывать расчетное время и пропускную способность, а также обеспечивает топовый режим (мониторинг)\, – говорится в официальной документации.

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

sudo apt-get install libncurses5-dev

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

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

После этого войдите в каталог прогресса и выполните следующие команды:

make
sudo make install

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

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

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

Заключение

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