Замість того, щоб запускати команди “наосліп”, скористайтеся утилітами Linux pv та progress для моніторингу їхнього виконання. Ці інструменти нададуть вам візуалізацію прогресу, яка часто відсутня при стандартному запуску команд, та орієнтовний час до завершення процесу.
Уявіть собі тривалий авіапереліт без екранів на спинках сидінь. Ви знаєте час вильоту та тривалість польоту, але як визначити, чи летите ви за графіком? Зазвичай можна перемкнути екран на карту з положенням літака та побачити орієнтовний час прибуття (ETA).
Запуск команди в терміналі іноді схожий на такий політ без карти. Не завжди зрозуміло, чи все йде добре, чи процес “завис”, і як далеко до його завершення. Миготливий курсор не дає достатньо інформації.
Команди pv і progress дають візуальний відгук та статистику, дозволяючи спостерігати за процесом виконання і отримати ETA. Це значно інформативніше, ніж просто дивитися на курсор.
Встановлення pv
Спочатку необхідно встановити pv на ваш комп’ютер.
Для Ubuntu використовуйте таку команду:
sudo apt-get install pv
Для Fedora встановіть pv за допомогою:
sudo dnf install pv
Користувачі Manjaro можуть встановити pv за допомогою цієї команди:
sudo pacman -Syu pv
Використання pv
pv – це “pipe viewer” (переглядач конвеєра). Це означає, що pv повинен бути частиною конвеєрного процесу. Розглянемо приклад, де ISO-образ передається через zip для створення стисненого zip-файлу.
Для демонстрації ми використаємо повільний зовнішній USB-диск SILVERXHD, щоб уповільнити команди та зробити скріншоти.
pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso | zip > gparted.zip
Інформація від pv відображається в нижньому рядку:
Зліва направо відображається:
Обсяг переданих даних. |
Час, що минув. |
Швидкість передачі даних. |
Індикатор прогресу та відсоток завершення. |
Приблизний час до завершення. |
Копіювання файлу за допомогою pv
Щоб скопіювати файл з відображенням прогресу від pv, використовуйте команду:
pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso > gparted.iso
Ви побачите звіт про хід копіювання файлу.
Копіювання кількох файлів за допомогою pv
Для копіювання декількох файлів та папок, ми використаємо tar, як “хитрість”.
tar -c help-files/ | pv | tar -x -C Documents/
Команда `tar -c help-files/` створює архів файлів з папки `help-files`. Результат передається через pv для відображення прогресу, а потім знову в tar для розпакування файлів у папку `Documents`.
В результаті, файли та папки з help-files копіюються в Documents з відображенням прогресу.
Тут результат трохи інший: ми не отримали ETA, а індикатор прогресу показує рухому смужку, яка показує, що процес активний, але не зростає зліва направо, як зазвичай. pv обмежений у відображенні інформації, яку він може отримати з переданого процесу.
Використання pv і tar для створення архіву
Копіювання файлів за допомогою pv і 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 з wc
Ми можемо використовувати pv для передачі текстового файлу (або файлів) у wc. wc порахує кількість рядків, символів і слів, а pv надасть звіт про хід виконання.
Тут ми передаємо всі файли “.page” з папки `help-files` у wc:
Коли wc закінчить роботу, ви побачите підрахунки рядків, символів і слів з усіх файлів “.page” в папці `help-files`.
Встановлення команди progress
Команда progress надає схожу корисну інформацію, як pv, але працює з конкретним набором команд Linux.
Для встановлення progress в Ubuntu використовуйте:
sudo apt-get install progress
Для встановлення progress у Fedora скористайтесь:
sudo dnf install progress
Для встановлення progress в Manjaro використайте:
sudo pacman -Syu progress
Робота з progress
Якщо ввести `progress` в терміналі та натиснути Enter, ви побачите список команд, які progress може відстежувати.
progress
Використання Progress з конвеєрами
Є два способи моніторингу команд. Перший – через конвеєри.
Команда tar є в списку підтримуваних команд, тому використаємо її.
Використаємо стандартні параметри `-c` (створити архів), `-z` (стиснути gzip) та `-f` (ім’я файлу). Створимо стиснений архів папки `help-files`, назвавши його `help.tgz`.
Перенаправимо це в progress, використовуючи параметр `-m` (монітор), щоб progress звітував про процес до його завершення.
tar -czf help.tgz ./help-files/ | progress -m
У терміналі буде відображено хід команди tar під час створення архіву.
Кожен оброблений файл буде відображено в списку з такою інформацією:
Ідентифікатор процесу. |
Назва процесу. |
Відсоток виконання. |
Оброблені дані та загальний розмір файлу. |
Швидкість передачі даних. |
Орієнтовний час до завершення. |
Можливо, ви здивуєтеся, побачивши два набори даних. Перший набір – це звіт tar, а другий – gzip, який викликається tar для стиснення. Оскільки gzip також є в списку підтримуваних команд, progress звітує і про його виконання.
Використання progress у режимі постійного моніторингу
Ви можете використовувати progress в режимі постійного моніторингу в реальному часі за допомогою параметра `-M` (монітор).
Введіть в терміналі:
progress -M
progress повідомить, що немає запущених команд для моніторингу, але не повернеться до командного рядка, а буде чекати, поки не запуститься команда, яку він зможе відстежувати. Потім він автоматично почне звітувати про її виконання.
В іншому терміналі запустіть команду, яку progress може відстежувати.
Використаємо cat, оскільки команди, які швидко виконуються, не встигнуть відобразитись. Перелічимо вміст довгого текстового файлу.
cat words.page
У терміналі з запущеним progress ви побачите статистику виконання команди cat.
Після завершення виконання cat, progress повертається в стан очікування.
Кожного разу, коли виконується одна з команд, яку progress може відстежувати, він буде автоматично збирати дані та звітувати.
Досить зручно.
Виконано на 100%
Позбудьтеся здогадок про хід виконання довготривалих команд і більше не дивіться на миготливий курсор. Використовуйте pv і progress, щоб завжди бути в курсі.