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

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


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

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

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

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

Установка пв

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

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

sudo apt-get install pv

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

sudo dnf install pv

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

sudo pacman -Syu pv

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

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

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

tar -c help-files/ | pv | tar -x -C Documents/

Часть команды tar -c help-files/ указывает tar создать (-c) архив файлов в файле справки. папка с файлами. Это передается через 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

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

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

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

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

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

  • -p: показать процент выполнения. Это индикатор выполнения и показатель процента выполнения.
  • -t: показать прошедшее время.
  • -e: показать ETA.
  • -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» в папке с файлами справки.

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

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

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

sudo apt-get install progress

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

sudo dnf install progress

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

sudo pacman -Syu progress

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

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

progress

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

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

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

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

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

tar -czf help.tgz ./help-files/ | progress -m

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

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

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

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

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

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

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

progress -M

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

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

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

cat words.page

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

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

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

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

100% завершено

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

RELATED: Best Linux Laptops for Developers and Enthusiasts