Come monitorare lo stato di avanzamento dei comandi di Linux (con pv e progresso)

Invece di volare alla cieca, usa i comandi Linux pv e progress per monitorare l’avanzamento di un comando. Queste utilità ti forniranno barre di avanzamento per comandi che normalmente non ne hanno. Vedrai anche un tempo stimato fino al completamento.

Se sei su un volo a lungo raggio su un aereo senza schermi video negli schienali, non è facile sapere a che punto sei nel viaggio. Sai quando sei decollato. Sai quanto tempo dovrebbe durare il volo. Ma come fai a sapere se sei sulla buona strada, in tempo o molto in ritardo? Se non vuoi guardare il film in volo, di solito puoi cambiare lo schermo video per mostrare una mappa con la posizione del tuo aereo su di essa. Ottieni anche alcune statistiche, come l’ora prevista di arrivo (ETA), il che è fantastico.

A volte l’avvio di un comando dalla finestra del terminale può sembrare un volo a lungo raggio senza uno schermo video. Non hai nulla da dare alcuna indicazione se tutto va bene o se il processo si è bloccato, né quanto è vicino al completamento. Un cursore lampeggiante non è molto informativo.

I comandi pv e progress ti danno alcune statistiche e un piccolo feedback visivo. Puoi vedere quanto è vicino il completamento del processo. Ciò significa che ottieni un ETA per i tuoi processi in esecuzione. Rispetto a fissare un cursore, questo vince a mani basse.

Installazione di pv

Devi installare pv.

Per installare pv su Ubuntu usa questo comando:

sudo apt-get install pv

Per installare pv su Fedora usa questo comando:

sudo dnf install pv

sudo dnf installa pv in una finestra di terminale

Per installare pv su Manjaro usa questo comando:

sudo pacman -Syu pv

sudo pacman -Syu pv in una finestra di terminale

Utilizzando pv

pv sta per visualizzatore di pipe. Le tubazioni devono essere coinvolte nel comando da qualche parte. Ecco un esempio in cui inviamo un’immagine ISO tramite zip per creare un file zip compresso dell’ISO.

Per rallentare i comandi abbastanza da poter acquisire uno screenshot, alcuni dei file negli esempi utilizzati per questo articolo sono stati memorizzati su una vecchia USB esterna lenta chiamata 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 in una finestra di terminale “width =” 646 ″ height = “77” onload = “pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”  onerror = “this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”> </p>
<p> Le informazioni che pv ci fornisce possono essere visualizzate nella riga inferiore del display. </p>
<p> <img caricamento =

Da sinistra a destra, le informazioni visualizzate sono:

I dati finora trasferiti.
Il tempo è trascorso lontano.
La velocità di trasferimento dati (throughput).
Una barra di avanzamento e una cifra percentuale completata.
Il tempo stimato rimanente prima del completamento (ETA).

Copiare un file con pv

Per copiare un file con output da pv, usa questo comando:

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

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso |  gparted.iso in una finestra di terminale

Riceviamo un rapporto sullo stato di avanzamento mentre il file viene copiato.

copiare un file con pv in una finestra di terminale te

Copia di più file con pv

Per copiare più file e cartelle con pv dobbiamo usare un piccolo trucco. Usiamo tar per spostare i file per noi.

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

tar -c file-guida / |  pv |  tar -x -C Documents / in una finestra di terminale

La porzione tar -c help-files / del comando ordina a tar di creare (-c) un archivio dei file nella cartella help-files. Questo viene trasmesso tramite pv in modo da avere una visualizzazione dei progressi. Viene quindi reindirizzato in tar per l’ultima parte del comando. L’archivio viene estratto (-x) e la directory viene modificata (-C) in Documenti prima dell’estrazione.

Quindi, i file e le cartelle che si trovano nei file di aiuto vengono copiati nella cartella Documenti, con una visualizzazione dello stato di avanzamento.

copiare file con pv e tar in una finestra di terminale

L’output è leggermente diverso questa volta.

Non otteniamo un ETA. La barra di avanzamento ora mostra un indicatore di movimento. Mostra che il processo è attivo, ma non cresce da sinistra a destra come una barra di avanzamento tradizionale. pv si limita a visualizzare le informazioni che può estrarre dal processo che viene convogliato.

Usare pv e tar per creare un archivio

La copia di file con pv e tar non ci lascia con un file di archivio. Una sorta di archivio “virtuale” viene creato da tar, che viene reinserito direttamente in tar per estrarre i file. Se il nostro obiettivo è copiare i file, ciò è possibile. Ma cosa succede se vogliamo creare un file di archivio?

Possiamo ancora usare tar per creare un file di archivio e ottenere un rapporto sullo stato di avanzamento da pv. Le opzioni usate con tar sono -c (crea archivio), -z (comprimi con gzip) e -f (nome file dell’archivio).

Nota che stiamo usando – come nome del file, che fa usare a tar stdoute per scrivere il suo output nella finestra del terminale. Non vediamo quell’output perché è convogliato attraverso pv.

Il nome effettivo dell’archivio sarà il nome del file in cui inviamo l’output da pv. In questo caso, è “help-files.tgz”.

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

tar -czf - ./help-files/ |  pv> help-files.tgz in una finestra di terminale “width =” 646 ″ height = “57” onload = “pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”  onerror = “this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”> </p>
<p> Otteniamo gli stessi indicatori di progresso di prima e il file di archivio viene creato per noi. </p>
<p> < p> <img caricamento =

Le opzioni di visualizzazione pv

Ci sono una serie di opzioni che puoi usare con pv per modificare i dettagli del suo rapporto.

Se utilizzi una di queste opzioni, tutte le altre opzioni vengono disattivate. Quindi, se vuoi avere tre delle opzioni di visualizzazione in uso, devi specificare queste tre opzioni.

Usare pv senza alcuna opzione equivale a usare le opzioni -pterb.

-p: visualizza la percentuale di completamento. Questa è la barra di avanzamento e la cifra percentuale completata.
-t: visualizza il tempo trascorso.
-e: visualizza l’ETA.
-r: visualizza la velocità di trasferimento dei dati.
-b: mostra il conteggio dei byte (dati trasferiti finora).
-n: visualizza la percentuale come numero intero. Questo stampa la percentuale completata come cifra intera, con ogni nuovo aggiornamento su una nuova riga.

Ripetiamo l’ultimo comando e passiamo l’opzione -p (percentuale completata) a pv.

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

tar -czf - ./help-files/ |  pv - p> help-files.tgz in una finestra di terminale “width =” 646 ″ height = “57” onload = “pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”  onerror = “this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”> </p>
<p> Questo disattiva tutte le altre opzioni di visualizzazione.  pv fornisce solo l’elemento percentuale di completamento. </p>
<p> Poiché pv non ottiene una cifra di percentuale completata da tar, la barra di avanzamento viene sostituita da un indicatore in movimento.  Non esiste una cifra percentuale. </p>
<p> <img loading =

Utilizzo di pv con wc

Possiamo usare pv per reindirizzare un file di testo (o file) in wc. wc conterà quindi i ritorni a capo, i caratteri e le parole e pv ci fornirà un rapporto sullo stato di avanzamento.

Qui stiamo trasferendo tutti i file “.page” nella directory dei file di aiuto in wc.

pv ./help-files/*.page |  wc in una finestra di terminale

Al termine di wc possiamo vedere il nostro conteggio dei ritorni a capo (linee), caratteri e parole da tutti i file “.page” nella cartella dei file di aiuto.

output da pv e wc in una finestra di terminale

Installazione del comando di avanzamento

Il comando progress fornisce lo stesso tipo di file informazioni utili come pv, ma funziona con un insieme specifico di comandi Linux.

Per installare il progresso in Ubuntu, usa questo comando:

sudo apt-get install progress

sudo apt-get progresso dell'installazione in una finestra di terminale

Per installare i progressi in Fedora, usa questo comando:

sudo dnf install progress

sudo dnf installa progressi in una vedova terminale

Per installare i progressi in Manjaro, usa questo comando:

sudo pacman -Syu progress

sudo pacman -Syu avanza in una finestra di terminale

L’avanzamento dei comandi funziona con

Digitando progress in una finestra del terminale e premendo Invio verrà visualizzato un elenco dei comandi con cui funziona il progresso.

progress

output del comando progress in una finestra di terminale

Utilizzo di Progress With Pipes

Ci sono due tecniche che possiamo usare per monitorare i comandi con l’avanzamento. Il primo è usare i tubi.

Il comando tar è nell’elenco dei comandi supportati che possono essere monitorati dal progresso, quindi usiamo tar.

Le opzioni che useremo sono le opzioni standard -c (crea archivio), -z (comprimi con gzip) e -f (nome file). Creeremo un archivio compresso di tutto ciò che si trova nella cartella dei file di aiuto e l’archivio si chiamerà “help.tgz”.

Lo stiamo portando avanti e utilizzando l’opzione -m (monitor) in modo che i progressi continuino a segnalare il processo fino al completamento.

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

tar -czf help.tgz ./help-files/ |  progress -m in una finestra di terminale

La finestra del terminale mostrerà lo stato di avanzamento del comando tar durante la creazione dell’archivio.

comando progress monitoraggio tar in una finestra di terminale

Man mano che ogni file viene elaborato, viene elencato con le seguenti informazioni:

L’ID del processo.
Il nome del processo.
Percentuale completata.
Dati elaborati e dimensione totale del file.
Velocità dati (velocità effettiva).
Tempo rimanente stimato (ETA).

Potresti essere sorpreso di vedere apparire un secondo set di dati. Questo primo set di dati è per tar. Il secondo è per gzip. tar chiama gzip per eseguire la compressione. Poiché gzip è nell’elenco dei comandi supportati, lo stato di avanzamento viene riportato.

Utilizzo di Progress in modalità di monitoraggio continuo

È possibile utilizzare lo stato di avanzamento in una modalità di monitoraggio continuo in tempo reale utilizzando l’opzione -M (monitor).

Digita il seguente comando in una finestra di terminale:

progress -M

progresso -M in una finestra di terminale

il progresso segnalerà che non ci sono comandi in esecuzione da monitorare. Ma non si torna alla riga di comando. lo stato di avanzamento attende l’avvio di un comando che può monitorare. Quindi inizierà automaticamente a segnalarlo.

avanzamento in attesa dell'avvio di un comando in una finestra di terminale

In un’altra finestra del terminale, digita un comando che si trova nell’elenco dei comandi che possono essere monitorati dall’avanzamento.

Useremo cat. I comandi che sono finiti troppo velocemente non verranno registrati con l’avanzamento, quindi elencheremo il contenuto di un file di testo molto lungo.

cat words.page

cat words.page in una finestra di terminale

Nella finestra del terminale con l’avanzamento, vedrai le statistiche per il comando cat mentre viene eseguito e funziona fino al completamento.

report sui progressi del gatto in una finestra di terminale

Quando cat finisce di elencare, l’avanzamento del file torna allo stato di attesa.

Ogni volta che uno dei comandi su cui può generare un report esegue un’attività considerevole, i progressi lo monitoreranno automaticamente e ne faranno rapporto.

È abbastanza carino.

Completato al 100%

Elimina le congetture dal chiederti come sta andando un comando di lunga durata e prenditi una pausa dal contemplare il tuo cursore con pv e progresso.