Как да наблюдавате напредъка на Linux командите (с pv и напредък)

Вместо да летите на сляпо, използвайте командите Linux pv и progress, за да проследявате напредъка на дадена команда. Тези помощни програми ще ви дадат ленти за напредък за команди, които обикновено нямат такива. Ще видите и прогнозно време до завършване.

Ако сте на полет на дълги разстояния със самолет без видео екрани в облегалките на седалките, не е лесно да разберете колко далеч сте изминали. Знаеш кога си излетял. Знаете колко време се очаква да отнеме полетът. Но как да разберете дали сте на път, навреме или много изоставате от графика? Ако не искате да гледате филма по време на полет, обикновено можете да превключите видео екрана си, за да покажете карта с позицията на вашия самолет върху него. Получавате и някои статистически данни, като очаквано време на пристигане (ETA), което е страхотно.

Стартирането на команда от прозореца на терминала понякога може да изглежда като полет на дълги разстояния без видео екран. Нямате какво да дадете каквато и да е индикация дали всичко е наред или дали процесът е спрял, нито колко близо е до завършване. Мигащият курсор не е много информативен.

Командите pv и progress ви дават малко статистически данни и малко визуална обратна връзка. Можете да видите колко близо е процесът да завърши. Това означава, че получавате ETA за вашите работещи процеси. В сравнение с гледането в курсора, това печели ръце.

Инсталиране на pv

Трябва да инсталирате 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 stdout, и да запише неговия изход в прозореца на терминала. Не виждаме този изход, защото се предава чрез pv.

  Как да използвате BleachBit на 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: показване на ETA.
-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 с wc

Можем да използваме pv, за да изпратим текстов файл (или файлове) в wc. wc след това ще преброи връщанията на каретата, знаците и думите и pv ще ни даде отчет за напредъка.

Тук прехвърляме всички файлове „.page“ в директорията help-files в wc.

Когато wc завърши, можем да видим нашия брой връщания на карета (редове), знаци и думи от всички „.page“ файлове в папката help-files.

Инсталиране на командата за напредък

Командата за прогрес дава същия вид полезна информация като pv, но работи със специфичен набор от команди на Linux.

За да инсталирате прогреса в Ubuntu, използвайте тази команда:

sudo apt-get install progress

За да инсталирате прогреса във Fedora, използвайте тази команда:

sudo dnf install progress

За да инсталирате прогреса в Manjaro, използвайте тази команда:

sudo pacman -Syu progress

Прогресът на командите работи с

Въвеждането на прогрес в прозореца на терминала и натискането на Enter ще ви даде списък с командите, с които работи прогресът.

progress

Използване на Progress With Pipes

Има две техники, които можем да използваме, за да наблюдаваме командите с напредъка. Първият е използването на тръби.

  Как да хоствате личен Pastebin алтернатива на Linux

Командата tar е в списъка с поддържани команди, които прогресът може да наблюдава, така че нека използваме tar.

Опциите, които ще използваме, са стандартните опции -c (създаване на архив), -z (компресиране с gzip) и -f (име на файл). Ще създадем компресиран архив на всичко в папката help-files и архивът ще бъде наречен “help.tgz”.

Ние въвеждаме това в напредъка и използваме опцията -m (монитор), така че напредъкът продължава да отчита процеса, докато не завърши.

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

Прозорецът на терминала ще покаже напредъка на командата tar, докато създава архива.

Тъй като всеки файл се обработва, той се изписва със следната информация:

ID на процеса.
Името на процеса.
Процент завършен.
Обработени данни и общ размер на файла.
Скорост на данни (пропускателна способност).
Очаквано оставащо време (ETA).

Може да се изненадате да видите да се появи втори набор от данни. Този първи набор от данни е за tar. Вторият е за gzip. tar извиква gzip, за да извърши компресирането. Тъй като gzip е в списъка с поддържани команди, докладва за напредъка му.

Използване на прогрес в режим на непрекъснато наблюдение

Можете да използвате напредъка в режим на непрекъснато наблюдение в реално време, като използвате опцията -M (монитор).

Въведете следната команда в прозорец на терминала:

progress -M

прогресът ще докладва, че няма изпълнявани команди, които да наблюдава. Но не се връщате в командния ред. прогресът изчаква, докато стартира команда, която може да наблюдава. След това автоматично ще започне да докладва за него.

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

Ще използваме котка. Командите, които са приключили твърде бързо, няма да се регистрират с напредъка, така че ще изброим съдържанието на много дълъг текстов файл.

cat words.page

В прозореца на терминала с напредъка в него ще видите статистика за командата cat, докато се изпълнява и работи към завършване.

Когато cat приключи изброяването, прогресът на файла се връща към състоянието на изчакване.

Всеки път, когато една от командите, за които може да докладва, изпълнява значителна задача, напредъкът автоматично ще я наблюдава и ще докладва за нея.

Това е доста кокетно.

100% завършен

Отстранете догадките, като се чудите как се справя една продължителна команда и си направете почивка от съзерцаването на курсора си с pv и прогрес .