Guida alle tecnologie

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

8 min read Linux Aggiornato 07 Oct 2025
PV vs Progress: mostrare il progresso delle copie in Linux
PV vs Progress: mostrare il progresso delle copie in Linux

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):

Output del comando Progress che mostra i processi di copia in corso

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

  1. Identifica se puoi modificare il comando originale.
  2. Se puoi modificarlo e lavori con pipeline, preferisci pv.
  3. Se non vuoi toccare il comando e si tratta di coreutils, usa progress.
  4. Se hai bisogno di limitare banda, scegli pv con -L.
  5. 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.

Autore
Redazione

Materiali simili

WhatsApp iPhone: risolvi problemi di riconnessione
Guide iPhone

WhatsApp iPhone: risolvi problemi di riconnessione

Migliorare la qualità video su Windows
Windows

Migliorare la qualità video su Windows

Riparare foto sfocate: metodo Lab e maschere
Fotografia

Riparare foto sfocate: metodo Lab e maschere

Risolvi perdita di pacchetti in Fall Guys
Gaming

Risolvi perdita di pacchetti in Fall Guys

Word 2010 come editor di blog offline
Blogging

Word 2010 come editor di blog offline

PV vs Progress: mostrare il progresso delle copie in Linux
Linux

PV vs Progress: mostrare il progresso delle copie in Linux