Замість того, щоб літати всліпу, використовуйте команди 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, можна побачити в нижньому рядку дисплея.
Зліва направо відображається інформація:
Дані передані наразі.
Час пройшов далеко.
Швидкість передачі даних (пропускна здатність).
Індикатор прогресу та відсоток виконання.
Приблизний час, що залишився до завершення (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.
Фактична назва архіву буде іменем файлу, в який ми передаємо вихідні дані з pv. У цьому випадку це «help-files.tgz».
tar -czf - ./help-files/ | pv > help-files.tgz
Параметри відображення pv
Існує ряд параметрів, які можна використовувати з pv, щоб змінити деталі звіту.
Якщо ви використовуєте будь-який з цих параметрів, усі інші параметри вимкнено. Отже, якщо ви хочете використовувати три параметри відображення, вам потрібно вказати ці три параметри.
Використання pv без будь-яких параметрів те саме, що використання параметрів -pterb.
-p: відобразити відсоток завершення. Це індикатор виконання та відсоток завершення.
-t: відображення часу, що минув.
-e: відображення приблизного прибуття.
-r: відображення швидкості передачі даних.
-b: відобразити кількість байтів (дані, передані на даний момент).
-n: відобразити відсоток у вигляді цілого числа. Це друкує завершений відсоток у вигляді цілого числа, з кожним новим оновленням у новому рядку.
Давайте повторимо останню команду і передамо параметр -p (відсоток завершення) до pv.
tar -czf - ./help-files/ | pv - p > help-files.tgz
Використання 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
Є дві методики, які ми можемо використовувати для моніторингу виконання команд. Перший – використовувати труби.
Команда 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 і прогресу.