Як контролювати хід виконання команд Linux (з pv і прогресом)

Замість того, щоб літати всліпу, використовуйте команди 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

pv означає переглядач труби. Трубопровідний десь має бути залучений до команди. Ось приклад, коли ми передаємо ISO-образ через zip, щоб створити стиснений zip-файл ISO.

Щоб уповільнити команди настільки, щоб можна було зробити знімок екрана, деякі файли в прикладах, використаних для цієї статті, були збережені на старому, повільному зовнішньому USB під назвою SILVERXHD.

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

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso |  zip > gparted.zip у вікні терміналу” width=”646″ height=”77″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<div style=

Інформацію, яку нам надає 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) архів файлів у папці help-files. Це передається через pv, щоб ми отримали відображення прогресу. Потім він передається назад у tar для останньої частини команди. Архів розпаковується (-x), а каталог змінюється (-C) на Документи перед розпакуванням.

Таким чином, файли та папки, які знаходяться у файлах довідки, копіюються в папку Documents з відображенням прогресу.

Цього разу результат трохи інший.

Ми не отримуємо ETA. Панель перебігу тепер відображає рухомий індикатор. Це показує, що процес активний, але він не росте зліва направо, як традиційна шкала прогресу. pv обмежується відображенням інформації, яку він може витягти з процесу, який передається.

Використання pv і tar для створення архіву

Копіювання файлів з pv і tar не залишає нам архівний файл. За допомогою tar створюється свого роду «віртуальний» архів, який повертається в tar для розпакування файлів. Якщо наша мета — скопіювати файли, це досягнуто. Але що, якщо ми хочемо створити архівний файл?

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

Зауважте, що ми використовуємо – як ім’я файлу, що спричиняє використання tar стандартний вихід, і записати його вихід у вікно терміналу. Ми не бачимо цього результату, оскільки він передається через pv.

  Як оптимізувати SSD на Linux

Фактична назва архіву буде іменем файлу, в який ми передаємо вихідні дані з pv. У цьому випадку це «help-files.tgz».

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

tar -czf - ./help-files/ |  pv > help-files.tgz у вікні терміналу” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Ми отримуємо ті самі індикатори прогресу, що й раніше, і файл архіву створюється для нас.</p>
<p> < p><img loading=

Параметри відображення pv

Існує ряд параметрів, які можна використовувати з pv, щоб змінити деталі звіту.

Якщо ви використовуєте будь-який з цих параметрів, усі інші параметри вимкнено. Отже, якщо ви хочете використовувати три параметри відображення, вам потрібно вказати ці три параметри.

Використання pv без будь-яких параметрів те саме, що використання параметрів -pterb.

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

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

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

tar -czf - ./help-files/ |  pv - p > help-files.tgz у вікні терміналу” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Це вимикає всі інші параметри відображення.  pv надає лише відсоток завершеного елемента.</p>
<p>Оскільки pv не отримує відсоток завершення з tar, індикатор прогресу замінюється рухомим індикатором.  Немає відсотка.</p>
<p><img loading=

Використання pv With wc

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

Тут ми передаємо всі файли «.page» з каталогу help-files у wc.

Коли wc завершиться, ми зможемо побачити нашу кількість повернення каретки (рядків), символів і слів з усіх файлів «.page» у папці файлів довідки.

Встановлення команди progress

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

Щоб встановити прогрес в Ubuntu, скористайтеся цією командою:

sudo apt-get install progress

Щоб встановити прогрес у Fedora, скористайтеся цією командою:

sudo dnf install progress

Щоб встановити прогрес у Manjaro, скористайтеся цією командою:

sudo pacman -Syu progress

Робота з прогресом команд

Якщо ввести прогрес у вікні терміналу та натиснути Enter, ви отримаєте список команд, з якими працює прогрес.

progress

Використання Progress With Pipes

Є дві методики, які ми можемо використовувати для моніторингу виконання команд. Перший – використовувати труби.

  Як розмістити ігровий сервер Linux Xonotic

Команда tar є у списку підтримуваних команд, за якими можна відстежувати прогрес, тому давайте використовувати tar.

Ми будемо використовувати стандартні параметри -c (створювати архів), -z (стиснути за допомогою gzip) і -f (ім’я файлу). Ми збираємося створити стиснений архів всього в папці help-files, і цей архів буде називатися “help.tgz”.

Ми перераховуємо це в прогрес і використовуємо параметр -m (монітор), щоб прогрес продовжував звітувати про процес, поки він не завершиться.

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

У вікні терміналу буде показано хід виконання команди tar під час створення архіву.

У міру обробки кожен файл відображається в списку з такою інформацією:

Ідентифікатор процесу.
Назва процесу.
Відсоток виконано.
Оброблені дані та загальний розмір файлу.
Швидкість передачі даних (пропускна здатність).
Приблизний час, що залишився (ETA).

Ви можете бути здивовані, побачивши другий набір даних. Цей перший набір даних призначений для tar. Другий — для gzip. tar викликає gzip для виконання стиснення. Оскільки gzip є у списку підтримуваних команд, звіти про його виконання.

Використання прогресу в режимі постійного моніторингу

Ви можете використовувати прогрес у режимі безперервного моніторингу в реальному часі, використовуючи параметр -M (монітор).

Введіть таку команду у вікні терміналу:

progress -M

прогрес повідомить, що немає запущених команд для його моніторингу. Але ви не повертаєтеся до командного рядка. прогрес чекає, поки не почнеться команда, яку він може контролювати. Потім він автоматично почне звітувати про нього.

В іншому вікні терміналу введіть команду, яка є у списку команд, які можна відстежувати.

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

cat words.page

У вікні терміналу з прогресом у ньому ви побачите статистику для команди cat, коли вона виконується та працює до завершення.

Коли cat завершує перерахування файлу, прогрес повертається до стану очікування.

Кожного разу, коли одна з команд, про які вона може звітувати, виконує значне завдання, прогрес автоматично відстежуватиме її та звітує про неї.

Це досить акуратно.

Виконано на 100%.

Позбавтеся від здогадок про те, як працює довготривала команда, і відпочиньте від споглядання курсора за допомогою pv і прогресу.