Как отслеживать ход выполнения команд Linux (с помощью pv и progress)
Опубликовано: 2022-01-29 Вместо того, чтобы летать вслепую, используйте команды 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
Чтобы скопировать несколько файлов и папок с помощью 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
Чтобы установить 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 | ||
Файлы | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
Процессы | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · тайм-аут · стена · да · убить · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · дата · bg · fg | |
Сеть | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
СВЯЗАННЫЕ С: Лучшие ноутбуки с Linux для разработчиков и энтузиастов