Cum să monitorizați progresul comenzilor Linux (cu pv și progres)

În loc să navighezi în necunoscut, folosește instrumentele Linux pv și progress pentru a monitoriza evoluția comenzilor. Aceste utilitare îți vor oferi bare de progres chiar și pentru comenzile care în mod normal nu afișează așa ceva, permițându-ți să vezi și timpul estimat până la finalizare.

Într-o călătorie lungă cu avionul, fără ecrane video în scaune, este dificil să știi cât mai ai de parcurs. Știi când ai decolat și durata totală a zborului. Însă, cum afli dacă ești pe traiectoria corectă, la timp sau cu întârziere? De obicei, poți schimba ecranul video pentru a afișa o hartă cu poziția aeronavei și statistici precum ora estimată de sosire (ETA), informații extrem de utile.

Lansarea unei comenzi în terminal poate fi uneori ca un zbor lung fără ecrane video. Nu ai niciun indiciu dacă totul decurge normal sau dacă procesul s-a blocat. Nici măcar nu știi cât de aproape ești de finalizare. Un cursor care clipește nu oferă prea multe informații.

Comenzile pv și progress îți oferă statistici și feedback vizual, arătându-ți cât de aproape este procesul de finalizare, oferindu-ți un ETA pentru procesele tale. Acesta este un avantaj semnificativ comparativ cu simpla privire la un cursor.

Instalarea pv

Pentru a începe, trebuie să instalezi pv.

Pentru Ubuntu, folosește această comandă:

sudo apt-get install pv

Pentru Fedora, utilizează:

sudo dnf install pv

Pentru Manjaro, folosește:

sudo pacman -Syu pv

Utilizarea pv

pv înseamnă „pipe viewer” (vizualizator de pipe). Este necesar ca pipe-urile să fie implicate în comandă. Iată un exemplu în care trimitem o imagine ISO prin zip pentru a crea un fișier zip comprimat al ISO.

Pentru a încetini comenzile suficient pentru a realiza o captură de ecran, unele fișiere folosite în exemple au fost stocate pe un USB extern vechi, numit SILVERXHD.

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

Informațiile oferite de pv sunt afișate în linia de jos a ecranului.

De la stânga la dreapta, informațiile afișate sunt:

Datele transferate până acum.
Timpul scurs.
Rata de transfer de date (viteza de transfer).
O bară de progres și procentul de finalizare.
Timpul estimat rămas (ETA).

Copierea unui fișier cu pv

Pentru a copia un fișier folosind pv, folosește această comandă:

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

Vei primi un raport de progres pe măsură ce fișierul este copiat.

Copierea mai multor fișiere cu pv

Pentru a copia mai multe fișiere și directoare cu pv, trebuie să folosim un mic artificiu. Utilizăm tar pentru a muta fișierele pentru noi.

tar -c help-files/ | pv | tar -x -C Documents/

Partea tar -c help-files/ a comenzii indică tar să creeze (-c) o arhivă a fișierelor din directorul help-files. Aceasta este trimisă prin pv pentru a afișa progresul. Apoi, este reintrodusă în tar pentru ultima parte a comenzii. Arhiva este extrasă (-x) și directorul este schimbat (-C) în Documents înainte de extragere.

Astfel, fișierele și folderele din help-files sunt copiate în folderul Documents, cu un indicator de progres.

Afisajul este puțin diferit de data aceasta.

Nu primim un ETA. Bara de progres afișează un indicator de mișcare. Acesta arată că procesul este activ, dar nu crește de la stânga la dreapta ca o bară de progres tradițională. pv se limitează la informațiile pe care le poate extrage din procesul transmis.

Utilizarea pv și tar pentru a crea o arhivă

Copierea fișierelor cu pv și tar nu ne oferă un fișier arhivă. Se creează un fel de arhivă „virtuală” care este alimentată direct înapoi în tar pentru a extrage fișierele. Dacă scopul este să copiem fișiere, acest lucru este îndeplinit. Dar dacă vrem să creăm un fișier arhivă?

Putem folosi în continuare tar pentru a crea un fișier arhivă și a primi un raport de progres de la pv. Opțiunile utilizate cu tar sunt -c (creează arhiva), -z (comprimă cu gzip) și -f (numele fișierului arhivei).

Reține că folosim - ca nume de fișier, ceea ce indică utilizarea de către tar a fluxului standard de ieșire (stdout) și pentru a scrie rezultatul în terminal. Nu vedem această ieșire deoarece este trimisă prin pv.

Numele real al arhivei va fi numele fișierului în care trimitem rezultatul de la pv. În acest caz, este help-files.tgz.

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

Avem aceiași indicatori de progres ca înainte, iar fișierul arhivă este creat.

Opțiunile de afișare pv

Există diverse opțiuni pe care le poți utiliza cu pv pentru a modifica detaliile raportului său.

Dacă utilizezi oricare dintre aceste opțiuni, toate celelalte opțiuni sunt dezactivate. Astfel, dacă vrei să utilizezi trei dintre opțiunile de afișare, trebuie să specifici acele trei opțiuni.

Utilizarea pv fără opțiuni este identică cu utilizarea opțiunilor -pterb.

  • -p: afișează procentajul de finalizare (bara de progres și procentul).
  • -t: afișează timpul scurs.
  • -e: afișează ETA.
  • -r: afișează rata de transfer de date.
  • -b: afișează numărul de octeți transferați (datele transferate până acum).
  • -n: afișează procentul ca număr întreg, cu fiecare actualizare pe o linie nouă.

Să repetăm ultima comandă și să transmitem opțiunea -p (procent finalizat) către pv.

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

Aceasta dezactivează toate celelalte opțiuni de afișare. pv furnizează doar elementul procentual de finalizare.

Deoarece pv nu primește o cifră procentuală de finalizare de la tar, bara de progres este înlocuită cu un indicator de mișcare. Nu există un procent specific.

Utilizarea pv cu wc

Putem folosi pv pentru a trimite un fișier text (sau fișiere) în wc. wc va număra apoi rândurile, caracterele și cuvintele, iar pv ne va oferi un raport de progres.

Aici trimitem toate fișierele .page din directorul help-files către wc.

find help-files/ -name "*.page" | pv | xargs wc

Când se termină wc, vom vedea numărul de rânduri, caractere și cuvinte din toate fișierele .page din directorul help-files.

Instalarea comenzii progress

Comanda progress oferă același tip de informații utile ca și pv, dar funcționează cu un set specific de comenzi Linux.

Pentru a instala progress în Ubuntu, folosește:

sudo apt-get install progress

Pentru a instala progress în Fedora, folosește:

sudo dnf install progress

Pentru a instala progress în Manjaro, folosește:

sudo pacman -Syu progress

Comenzi compatibile cu progress

Dacă scrii progress în terminal și apeși Enter, vei vedea o listă a comenzilor cu care progress funcționează.

progress

Utilizarea Progress cu Pipe-uri

Există două metode de monitorizare a comenzilor cu progress. Prima este utilizarea pipe-urilor.

Comanda tar se află în lista comenzilor acceptate de progress, așa că vom folosi tar.

Opțiunile folosite sunt cele standard: -c (creează arhivă), -z (comprimă cu gzip) și -f (nume fișier). Vom crea o arhivă comprimată cu tot ce se află în directorul help-files, iar arhiva se va numi help.tgz.

Trimiterea output-ului spre progress se face cu opțiunea -m (monitorizare), astfel încât progress va raporta continuu despre proces până la finalizare.

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

Terminalul va afișa progresul comenzii tar pe măsură ce creează arhiva.

Pe măsură ce fiecare fișier este procesat, acesta este listat, cu următoarele informații:

  • ID-ul procesului.
  • Numele procesului.
  • Procent finalizat.
  • Datele prelucrate și dimensiunea totală a fișierului.
  • Rata de transfer de date.
  • Timpul rămas estimat (ETA).

S-ar putea să fii surprins să vezi un al doilea set de date. Primul set este pentru tar, iar al doilea pentru gzip. tar apelează gzip pentru a efectua compresia. Deoarece gzip se află în lista comenzilor acceptate, progress raportează despre el.

Utilizarea Progresului în Modul Monitor Continuu

Poți utiliza progress într-un mod de monitorizare continuă în timp real utilizând opțiunea -M (monitor).

Scrie următoarea comandă în terminal:

progress -M

progress va raporta că nu există comenzi în execuție pentru a fi monitorizate, dar nu te va returna la linia de comandă. progress așteaptă până când începe o comandă pe care o poate monitoriza. Apoi va începe să raporteze automat despre ea.

Într-o altă fereastră de terminal, scrie o comandă care se află în lista comenzilor pe care progress le poate monitoriza.

Vom folosi cat. Comenzile care se termină prea repede nu vor fi înregistrate de progress, așa că vom afișa conținutul unui fișier text foarte lung.

cat words.page

În fereastra terminalului cu progress, vei vedea statistici pentru comanda cat în timp ce aceasta se execută și se apropie de finalizare.

Când cat termină de afișat, progress revine la starea de așteptare.

De fiecare dată când una dintre comenzile pe care le poate raporta îndeplinește o sarcină importantă, progress o va monitoriza automat și va raporta despre aceasta.

Este destul de util.

100% Finalizat

Înlătură incertitudinea cu privire la modul în care decurge o comandă de lungă durată și ia o pauză de la contemplarea cursorului cu pv și progress.