Как отслеживать ход выполнения команд Linux (с помощью pv и progress)

Опубликовано: 2022-01-29
Подсказка терминала Linux на ноутбуке
Фатмавати Ахмад Заэнури/Shutterstock.com

Вместо того, чтобы летать вслепую, используйте команды Linux pv и progress для отслеживания хода выполнения команды. Эти утилиты дадут вам индикаторы выполнения для команд, которые обычно не имеют. Вы также увидите расчетное время до завершения.

Если вы совершаете дальнемагистральный перелет на самолете без видеоэкранов в спинках сидений, нелегко узнать, как далеко вы продвинулись в пути. Вы знаете, когда вы взлетели. Вы знаете, сколько времени займет полет. Но как узнать, идете ли вы по графику, вовремя или сильно отстаете от графика? Если вы не хотите смотреть фильм в полете, вы обычно можете переключить свой видеоэкран, чтобы показать карту с положением вашего самолета на ней. Вы также получаете некоторые статистические данные, такие как ожидаемое время прибытия (ETA), и это здорово.

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

Команды pv и progress предоставляют некоторую статистику и небольшую визуальную обратную связь. Вы можете видеть, насколько процесс близок к завершению. Это означает, что вы получаете ETA для запущенных процессов. По сравнению со взглядом на курсор, это бесспорно выигрывает.

Установка пв

Вы должны установить pv .

Чтобы установить pv на Ubuntu, используйте эту команду:

 sudo apt-get установить pv 

Чтобы установить pv в Fedora, используйте эту команду:

 sudo dnf установить pv 

Чтобы установить pv на Manjaro, используйте эту команду:

 Судо Пакман -Сью пв 

Использование пв

pv обозначает средство просмотра канала. Трубопровод должен быть где-то задействован в команде. Вот пример, когда мы передаем ISO-образ через zip , чтобы создать сжатый zip-файл ISO.

Реклама

Чтобы замедлить команды настолько, чтобы можно было сделать снимок экрана, некоторые файлы в примерах, использованных в этой статье, были сохранены на старом медленном внешнем USB-накопителе под названием SILVERXHD.

 pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso | zip > gparted.zip 

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

Слева направо отображается следующая информация:

  • Данные переданы до сих пор.
  • Время прошло далеко.
  • Скорость передачи данных (пропускная способность).
  • Индикатор выполнения и процент выполнения.
  • Расчетное время, оставшееся до завершения (ETA).

Копирование файла с помощью pv

Чтобы скопировать файл с выводом из pv , используйте эту команду:

 pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso > gparted.iso 

Мы получаем отчет о проделанной работе по мере копирования файла.

копирование файла с помощью pv в окне терминала te

Копирование нескольких файлов с помощью pv

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

 tar -c файлы справки/ | пв | tar -x -C Документы/ 

Реклама

Часть команды tar -c help-files/ указывает tar создать ( -c ) архив файлов в папке help-files. Это передается через pv , так что мы получаем отображение прогресса. Затем он передается обратно в tar для последней части команды. Архив извлекается ( -x ), а каталог изменяется ( -C ) на Documents перед извлечением.

Итак, файлы и папки, находящиеся в help-файлах, копируются в папку Documents, с отображением прогресса.

На этот раз результат немного отличается.

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

Использование pv и tar для создания архива

Копирование файлов с помощью pv и tar не оставляет нам архивный файл. tar создает своего рода «виртуальный» архив, который загружается обратно в tar для извлечения файлов. Если нашей целью является копирование файлов, это выполнено. Но что, если мы хотим создать архивный файл?

Мы по-прежнему можем использовать tar для создания файла архива и получения отчета о ходе работы от pv . Параметры, используемые с tar : -c (создать архив), -z (сжать с помощью gzip) и -f (имя файла архива).

Обратите внимание, что мы используем - в качестве имени файла, что заставляет tar использовать стандартный вывод и записывать его вывод в окно терминала. Мы не видим этот вывод, потому что он передается через pv .

Реклама

Фактическое имя архива будет именем файла, в который мы передаем вывод из pv . В данном случае это «help-files.tgz».

 tar -czf - ./help-files/ | pv > help-files.tgz 

Мы получаем те же индикаторы прогресса, что и раньше, и для нас создается файл архива.

СВЯЗАННЫЕ: Как сжимать и извлекать файлы с помощью команды tar в Linux

Параметры отображения pv

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

Если вы используете любой из этих параметров, все остальные параметры отключаются. Поэтому, если вы хотите использовать три параметра отображения, вам нужно указать эти три параметра.

Использование pv без каких-либо параметров аналогично использованию параметров -pterb .

  • -p : отображать процент выполнения. Это индикатор выполнения и процент выполнения.
  • -t : отображать прошедшее время .
  • -e : показать ожидаемое время прибытия.
  • -r : показать скорость передачи данных.
  • -b : отображать количество байтов (данные уже переданы).
  • -n : отображать процент в виде целого числа . Это печатает процент выполнения в виде целочисленного числа с каждым новым обновлением в новой строке.

Давайте повторим последнюю команду и передадим параметр -p (процент выполнения) в pv .

 tar -czf - ./help-files/ | pv - p > help-files.tgz 

Реклама

Это отключает все остальные параметры отображения. pv предоставляет только процент завершения элемента.

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

Использование pv с туалетом

Мы можем использовать pv для передачи текстового файла (или файлов) в wc . Затем wc подсчитает возвраты каретки, символы и слова, а pv предоставит нам отчет о проделанной работе.

Здесь мы передаем все файлы «.page» из каталога help-files в wc .

Когда wc завершится, мы сможем увидеть количество возвратов каретки (строк), символов и слов из всех файлов «.page» в папке help-files.

Установка команды прогресса

Команда progress дает ту же полезную информацию, что и pv , но работает с определенным набором команд Linux.

Чтобы установить progress в Ubuntu, используйте эту команду:

 sudo apt-получить ход установки 

Чтобы установить progress в Fedora, используйте эту команду:

 ход установки sudo dnf 

sudo dnf установить прогресс в окне терминала

Чтобы установить progress в Manjaro, используйте эту команду:

 sudo pacman -Сю прогресс 

Ход выполнения команд работает с

Набрав progress в окне терминала и нажав Enter, вы получите список команд, с которыми работает progress .

 прогресс 

Использование прогресса с пайпами

Есть два метода, которые мы можем использовать для отслеживания progress . Первый заключается в использовании труб.

Команда tar находится в списке поддерживаемых команд, которые может отслеживать progress , поэтому давайте воспользуемся tar .

Мы будем использовать стандартные параметры -c (создать архив), -z (сжать с помощью gzip) и -f (имя файла). Мы собираемся создать сжатый архив всего, что находится в папке help-files, и этот архив будет называться «help.tgz».

Мы передаем это в progress и используем параметр -m (монитор), поэтому progress продолжает сообщать о процессе, пока он не завершится.

 tar -czf help.tgz ./файлы справки/ | прогресс -м 

Окно терминала покажет ход выполнения команды tar по мере создания архива.

Реклама

По мере обработки каждый файл отображается в списке со следующей информацией:

  • Идентификатор процесса.
  • Имя процесса.
  • Процент выполнен.
  • Обработанные данные и общий размер файла.
  • Скорость передачи данных (пропускная способность).
  • Расчетное оставшееся время (ETA).

Вы можете быть удивлены, увидев появление второго набора данных. Этот первый набор данных предназначен для tar . Второй — для gzip . tar вызывает gzip для сжатия. Поскольку gzip находится в списке поддерживаемых команд, о progress сообщается о нем.

Использование прогресса в режиме непрерывного мониторинга

Вы можете использовать progress в режиме постоянного мониторинга в реальном времени, используя опцию -M (монитор).

Введите следующую команду в окне терминала:

 прогресс -М 

progress сообщит, что нет запущенных команд для мониторинга. Но вы не возвращаетесь в командную строку. progress ждет, пока не запустится команда, которую он может отслеживать. Затем он автоматически начнет сообщать об этом.

В другом окне терминала введите команду из списка команд, за которыми можно следить.

Мы собираемся использовать cat . Команды, которые выполняются слишком быстро, не будут регистрироваться в progress , поэтому мы перечислим содержимое очень длинного текстового файла.

 кошка слова.страница 

Реклама

В окне терминала с progress в нем вы увидите статистику для команды cat по мере ее выполнения и работы над завершением.

Когда cat завершает вывод списка, процесс выполнения progress возвращается в состояние ожидания.

Каждый раз, когда одна из команд, о которых он может сообщать, выполняет значительную задачу, progress будет автоматически отслеживать ее и сообщать о ней.

Это довольно аккуратно.

100% завершено

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

СВЯЗАННЫЕ С: Лучшие ноутбуки с Linux для разработчиков и энтузиастов