Visualizzare il progresso delle copie e dei trasferimenti in Linux: PV e Progress

Introduzione
Capita spesso di avviare la copia di un file molto grande da una chiavetta USB verso un sistema Linux tramite terminale. Dopo qualche minuto torni e sembri non vedere cambiamenti: il comando è ancora in esecuzione, senza errori visibili né conferme di avanzamento. In ambienti senza interfaccia grafica (headless) le opzioni sono poche: aspettare, annullare con Ctrl+C e riprovare. Questo articolo mostra due utilità da riga di comando che risolvono il problema mostrando l’avanzamento: pv e progress.
Nota: i comandi mostrati sono stati testati su Ubuntu 14.04, ma funzionano su molte distribuzioni Debian/Ubuntu e altre con i pacchetti corrispondenti.
Perché avere una barra di progresso da terminale
- Ti dà feedback immediato: percentuale, ETA, throughput, totale trasferito.
- Aiuta a capire se un’operazione è bloccata o procede lentamente.
- Permette di limitare la velocità per evitare di saturare una connessione o un dispositivo.
Important: visualizzare il progresso non accelera l’operazione; ti aiuta a valutarla.
PV: monitorare il flusso in una pipeline
pv monitora il flusso di dati che passa attraverso una pipe. Mostra: tempo trascorso, percentuale con barra di progresso, velocità corrente, totale trasferito e ETA. Per usarlo, inseriscilo in una pipeline tra due processi. L’input standard viene passato all’output standard e il progresso viene mostrato su stderr.
Installazione su Debian/Ubuntu:
sudo apt-get install pv
Esempio pratico: copiare immagini presenti su una pen drive e creare un archivio compresso sul Desktop.
Note: nello scenario reale potresti vedere schermate di esempio. Qui spieghiamo i comandi usati.
Comando che mostra solo la barra di progresso:
pv -p /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz
- -p attiva solo la progress bar.
Altre opzioni utili:
- -W o –wait: aspetta il primo byte prima di mostrare informazioni o calcolare ETA. Utile quando il processo a cui pipi chiede dati iniziali prima di partire.
- -L rate: limita la velocità di trasferimento (esempio: 5m = 5 megabyte al secondo usando suffissi k/m/g/t, calcolati come multipli di 1024).
Esempio per limitare la banda a 5 MB/s:
pv -L 5m /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz
Consigli pratici per pv:
- Inseriscilo sempre prima del processo che scrive su disco quando vuoi monitorare la quantità effettivamente trasferita.
- Usa -W se il comando a valle impiega tempo a inizializzare.
- Puoi combinare con dd per mostrare una barra durante scritture raw.
Esempi addizionali con pv
Mostrare solo throughput e totale trasferito:
pv -f file.iso > /dev/null
Monitorare una copia via netcat (sovrapposizione di rete):
# lato ricevente
nc -l 12345 | pv -s 4G > file.tar
# lato mittente
pv file.tar | nc host 12345
In -s puoi fornire la dimensione totale prevista per ottenere percentuale e ETA più accurate.
Progress: monitorare comandi coreutils senza modifiche
Progress (ex cv) monitora operazioni in corso che coinvolgono comandi coreutils come cp, mv, dd, tar, gzip/gunzip, cat e altri. Mostra tempo stimato, throughput e offre una modalità “tipo top” per monitorare continuamente i processi.
Prerequisito: la libreria ncurses (dev) perché progress usa interfaccia testuale avanzata.
Installazione su Debian/Ubuntu:
sudo apt-get install libncurses5-dev
Scarica il repository GitHub:
git clone https://github.com/Xfennec/progress.git
Compila e installa:
cd progress
make
sudo make install
Uso base: esegui progress per vedere una lista di operazioni in corso. Esempio di output (immagine di riferimento):
Opzioni utili:
- -m (–monitor): esegue un ciclo finché i processi monitorati non terminano.
- -M (–monitor-continuously): monitora in modo permanente (simile a watch).
- -c (–command cmd): monitora solo processi con quel nome di comando. Può essere ripetuto.
- -p (–pid id): monitora solo l’ID di processo numerico. Può essere ripetuto.
- -i (–ignore-file file): non segnalare processi per quel file (richiede percorso assoluto pulito se il file non esiste ancora).
Vantaggi di progress:
- Non richiede di cambiare il comando esistente (es. cp file1 file2 continua a funzionare come prima).
- Mostra tutte le operazioni compatibili in un’unica schermata.
Limitazioni:
- Supporta principalmente comandi coreutils; non monitora generici flussi di dati fuori da questi casi.
- Richiede permessi per leggere informazioni sui processi (in alcuni sistemi potresti aver bisogno di privilegi elevati per vedere processi di altri utenti).
Quando usare pv e quando usare progress
Scegli pv se:
- Stai costruendo pipeline (es. cat | pv | gzip) e vuoi la barra incorporata.
- Vuoi limitare la velocità di trasferimento (-L).
- Hai la dimensione totale e vuoi percentuale/ETA accurata passando -s.
Scegli progress se:
- Hai già comandi come cp o mv in esecuzione e non vuoi riavviarli.
- Preferisci vedere tutte le operazioni compatibili in un’unica vista.
Decisione guidata (diagramma):
flowchart TD
A[Devo modificare il comando?] -->|Sì| B[Usa pv]
A -->|No| C[Il comando è coreutils?]
C -->|Sì| D[Usa progress]
C -->|No| B
B --> E[Hai bisogno di limitare la banda?]
E -->|Sì| F[pv con -L]
E -->|No| G[pv semplice]
D --> H[Usa -m o -M per monitorare]
Cheat sheet: comandi rapidi e snippet
- Installazione pv:
sudo apt-get install pv
- Installazione progress (sintesi):
sudo apt-get install libncurses5-dev
git clone https://github.com/Xfennec/progress.git
cd progress
make
sudo make install
- Copiare file con barra di progresso e compressione:
pv file.iso | gzip > file.iso.gz
- Usare pv con dd per vedere avanzamento e stimare tempo:
dd if=/dev/sdb | pv -s 16G | dd of=/dev/loop0
- Limitare velocità a 5 MB/s:
pv -L 5m source > destination
- Monitorare in continuo solo i processi cp:
progress -c cp -M
- Monitorare un PID specifico:
progress -p 12345 -m
Checklist per ruolo: chi fa cosa
Amministratore di sistema
- Installa pv e progress sui nodi critici.
- Documenta i comandi standard interni per backup e migrazione.
- Configura alias utili (es. alias cp=’pv -pebC | dd of=…’) solo dove appropriato.
Sviluppatore / Power user
- Usa pv nelle pipeline di test e nelle esportazioni di dati.
- Limita la banda con pv durante operazioni su macchine remote.
Operatore di backup
- Usa progress per verificare backup in corso senza interrompere i job.
- Controlla i permessi di processo per garantire visibilità.
Troubleshooting: quando non vedo progresso
- Nessun output di pv: assicurati che pv sia inserito nella pipeline e che l’input scorra. Se il processo downstream blocca la scrittura, pv non mostrerà avanzamento.
- progress non mostra il tuo processo: il comando potrebbe non essere supportato oppure manchi di permessi per leggere procfs degli altri utenti. Prova a eseguire progress come lo stesso utente che esegue il comando.
- ETA imprecisa: senza la dimensione totale (-s) pv stima l’ETA a partire dallo throughput attuale; per trasferimenti con velocità variabile l’ETA può oscillare.
- Latenza dovuta a buffering: alcune pipeline bufferizzano e mostrano scorrimenti apparentemente irregolari. Forza il flush se possibile oppure monitora il dispositivo di destinazione direttamente.
Casi d’uso ed esempi pratici
- Copia locale di grandi dataset: pv inserito in pipeline con gzip permette di comprimere e prevedere la fine dell’operazione.
- Trasferimenti di immagini disco: combinare pv con dd o netcat per stimare tempo e velocità sui canali raw.
- Monitoraggio di backup programmati: progress consente di monitorare job tar/gzip avviati da cron senza interromperli.
Quando questi strumenti non bastano
- Trasferimenti tra sistemi con crittografia a livello di blocco dove il throughput è variabile a livello hardware potrebbero non fornire un’ETA utile.
- File system remoti con caching aggressivo: il trasferimento può sembrare completato localmente mentre i dati non sono ancora scritti effettivamente sul dispositivo remoto.
Mini-metodologia per scegliere lo strumento giusto
- Identifica se puoi modificare il comando originale.
- Se puoi modificarlo e lavori con pipeline, preferisci pv.
- Se non vuoi toccare il comando e si tratta di coreutils, usa progress.
- Se hai bisogno di limitare banda, scegli pv con -L.
- Se vuoi monitoraggio continuo, usa progress con -M.
Test di accettazione (sintesi)
- Avvia una copia di file grandi con pv e verifica che mostri percentuale, ETA e throughput.
- Avvia una copia con cp e verifica che progress la rilevi e mostri ETA e throughput.
- Prova pv -L per assicurarti che la velocità venga limitata al valore impostato.
Glossario in una riga
- pv: utility che misura il flusso di dati attraverso una pipe e mostra progresso e throughput.
- progress: strumento che scopre e monitora processi di copia/supportati da coreutils senza modificare i comandi.
- ncurses: libreria per interfacce testuali avanzate in terminale.
- pipe: meccanismo Unix per collegare l’output di un comando all’input di un altro.
Note sulla sicurezza e permessi
- progress legge informazioni sui processi dal sistema (p.es. /proc). Per vedere processi di altri utenti potresti aver bisogno di privilegi elevati.
- pv non altera i file o i flussi; tuttavia, limitando la banda potresti influenzare SLA di trasferimento se usato in ambienti di produzione.
Conclusione
pv e progress risolvono il problema dell’assenza di feedback durante grandi trasferimenti da terminale. pv è flessibile e si integra nelle pipeline; progress è comodo per monitorare operazioni coreutils già in esecuzione senza modificarle. La scelta dipende dallo scenario: voglia di modificare il comando, bisogno di limitare banda o esigenza di monitorare processi esistenti.
Riepilogo veloce:
- pv = ottimo per pipeline, limitazione di banda e percentuali precise con -s.
- progress = ottimo per monitoraggio post-hoc di cp/mv/dd/tar/gzip.
Notes: prova entrambi su un ambiente di test per acquisire familiarità e integrare gli alias o gli script di automazione appropriati.
Materiali simili

WhatsApp iPhone: risolvi problemi di riconnessione

Migliorare la qualità video su Windows

Riparare foto sfocate: metodo Lab e maschere

Risolvi perdita di pacchetti in Fall Guys

Word 2010 come editor di blog offline
