Вместо да летите на сляпо, използвайте командите 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, може да се види в долния ред на дисплея.
Отляво надясно информацията, която се показва е:
Данните, прехвърлени до момента.
Времето изтече далеч.
Скоростта на пренос на данни (пропускателна способност).
Лента за напредък и процент завършена цифра.
Прогнозното оставащо време до завършване (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.
Истинското име на архива ще бъде името на файла, в който предаваме изхода от 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 с 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
Има две техники, които можем да използваме, за да наблюдаваме командите с напредъка. Първият е използването на тръби.
Командата 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 и прогрес .