Fortschrittsanzeigen in der Linux-Konsole mit pv und progress

pv und progress zeigen Fortschritt bei Konsolenoperationen an: pv wird in einer Pipe eingefügt und zeigt Zeit, Prozent, Durchsatz, übertragene Daten und ETA; progress überwacht laufende coreutils-Prozesse (cp, mv, dd etc.) ohne den Befehl zu ändern. Beide Tools ergänzen sich — pv ist universell für Pipelines, progress ist praktisch für bereits laufende Kopiervorgänge.
Einleitung
Stellen Sie sich vor, Sie haben gerade begonnen, eine sehr große Datei von einem USB-Stick per Kommandozeile auf ein Linux-System zu kopieren. Die Kopie dauert; Sie wechseln in andere Aufgaben. Später kehren Sie zurück und sehen: der Kopiervorgang läuft noch, es gibt aber keine Ausgabe, keinen Fehler und keine offensichtliche Veränderung.
Solche Situationen sind ärgerlich, insbesondere auf headless-Servern. Meist bleibt nur warten oder Abbrechen (Ctrl+C) und erneutes Starten. Wäre es nicht besser, eine Fortschrittsanzeige zu haben — so wie in grafischen Dateimanagern? Genau das bieten die Kommandozeilen-Werkzeuge pv und progress. In diesem Artikel erkläre ich, wie die Tools funktionieren, wie Sie sie installieren, typische Beispiele, Troubleshooting, Entscheidungsregeln und Praxis-Checklisten.
Wichtig: Alle Befehle in diesem Beitrag wurden auf Ubuntu 14.04 getestet, funktionieren aber weitgehend auch auf neueren Debian/Ubuntu-Systemen.
Begriffsdefinition in einer Zeile
- Pipe: Weiterleitung von Standardausgabe eines Prozesses in die Standardeingabe eines anderen Prozesses.
- ETA: Geschätzte verbleibende Zeit bis Abschluss.
- Durchsatz (Throughput): Menge an Daten pro Zeit, z. B. MB/s.
pv — Datenfluss in einer Pipeline überwachen
Was pv tut (Kurzform): pv überwacht den Datenfluss durch eine Pipeline. Es zeigt Laufzeit, Prozent, Fortschrittsbalken, aktuellen Durchsatz, insgesamt übertragene Daten und eine ETA. Technisch liest pv von stdin und schreibt unverändert nach stdout; Status wird auf stderr ausgegeben.
Installation (Debian/Ubuntu):
sudo apt-get install pv
Ein einfaches Anwendungsbeispiel: Sie haben einen Ordner voller Bilder auf einem USB-Stick und möchten sie nach gzip gepackt auf den Desktop schreiben. pv wird in die Pipe eingefügt:
pv /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz
Standardmäßig zeigt pv mehrere Informationen; Sie können die Anzeige aber einschränken. Beispiel: nur Fortschrittsbalken anzeigen:
pv -p /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz
- -p schaltet nur den Fortschrittsbalken ein.
Warte-Option: Wenn das Zielprogramm erstmal zusätzliche Daten erwartet (z. B. Header), kann pv mit -W oder –wait so lange warten, bis das erste Byte übertragen ist, bevor eine ETA berechnet wird.
Bandbreitenbegrenzung: pv kann die Übertragungsrate drosseln. Beispiel: auf 5 MB/s begrenzen:
pv -L 5m /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz
- -L 5m begrenzt den Durchsatz auf 5 megabyte pro Sekunde. Man kann Suffixe wie k, m, g, t verwenden (1024er-Basis). In manchen Systemen wird Durchsatz in MB/s angezeigt; achten Sie auf Einheiten.
Tipp: pv eignet sich überall dort, wo Sie eine Pipeline kontrollieren können: dd | pv | gzip, tar cf - . | pv | ssh host “cat > backup.tar”, etc.
Einschränkungen von pv:
- pv muss in die Kommandozeile integriert werden; es überwacht nicht automatisch bereits laufende Prozesse.
- Bei sehr vielen kleinen Dateien kann die Anzeige unruhig sein; pv ist datenflussbasiert, nicht dateibasiert.
progress — laufende coreutils-Prozesse überwachen
progress (früher cv) erkennt und überwacht laufende Operationen, die von Coreutils stammen (cp, mv, dd, tar, gzip/gunzip, cat, …). Es kann geschätzte Zeit, Durchsatz und einen “top-ähnlichen” Monitor-Modus anzeigen.
Abhängigkeit: ncurses ist erforderlich (für Terminal-UI). Auf Debian/Ubuntu:
sudo apt-get install libncurses5-dev
Download und Installation (GitHub-Repo):
git clone https://github.com/Xfennec/progress.git
cd progress
make
sudo make install
Hinweis: Das Repository ist offen; prüfen Sie die README des Projekts für aktuelle Installationshinweise und Patches.
Beispielausgabe (Screenshot):
Wichtige Optionen von progress:
- -m, –monitor: Schleife solange überwachte Prozesse laufen
- -M, –monitor-continuously: wie monitor, aber niemals automatisch stoppen (ähnlich zu watch)
- -c, –command cmd: nur Prozesse mit diesem Kommando-Namen anzeigen (mehrfach nutzbar)
- -p, –pid id: nur eine PID überwachen (mehrfach nutzbar)
- -i, –ignore-file file: Datei ausschließen (vollständiger absoluter Pfad erforderlich)
Vorteile von progress:
- Keine Änderung des gestarteten Kommandos nötig — praktisch für Workflows, die bereits laufen.
- Gut für Admins und für Server ohne grafische Oberfläche.
Einschränkungen von progress:
- Erkennung basiert auf heuristischen Methoden (z. B. Pattern-Matching von Systemdateien); nicht jede Transferart ist sichtbar.
- Derzeit beschränkt auf typische Coreutils; proprietäre Programme werden möglicherweise nicht erkannt.
Vergleich: pv vs. progress — Wann welches Tool?
Kriterium | pv | progress |
---|---|---|
Einsatzszenario | In Pipeline einfügbar, universell | Überwacht bereits laufende coreutils-Prozesse |
Benötigt Änderung am Befehl | Ja | Nein |
Anzeige | Detailliert: ETA, Durchsatz, Gesamt | Prozesse-Übersicht, mehrere Jobs simultan |
Bandbreitenbegrenzung | Ja (-L) | Nein |
Einfachheit der Installation | Paket verfügbar | Meist via git + make |
Kurzentscheidung:
- Sie starten die Kopie selbst und können die Pipeline anpassen → pv.
- Der Kopiervorgang läuft bereits oder wurde von einem anderen Prozess gestartet → progress.
- Sie brauchen Bandbreitenbegrenzung → pv.
Schnellreferenz: Befehle und Beispiele (Cheat Sheet)
- Installieren pv:
sudo apt-get install pv
- Kopieren mit pv und gzip:
pv /pfad/zu/daten/* | gzip > backup.gz
- Begrenzen auf 5 MB/s:
pv -L 5m /pfad/zu/daten/* | gzip > backup.gz
- Installieren progress (Beispiel):
sudo apt-get install libncurses5-dev
git clone https://github.com/Xfennec/progress.git
cd progress
make
sudo make install
- progress im Überwachungsmodus:
progress -m
- progress nur für ein bestimmtes Kommando:
progress -c cp
Entscheidungshilfe in einem Flussdiagramm
flowchart TD
A[Will ich den Befehl ändern?] -->|Ja| B[Kann ich eine Pipe einsetzen?]
B -->|Ja| C[Verwende pv]
B -->|Nein| D[Starte alternativen Workflow / Skript]
A -->|Nein| E[Läuft der Vorgang schon?]
E -->|Ja| F[Verwende progress]
E -->|Nein| G[Starte Vorgang mit pv oder nutze GUI]
Praxis-Checkliste für verschiedene Rollen
Desktop-Benutzer:
- Prüfen: Ist der Kopiervorgang lokal gestartet? → pv einfügen
- Benutzen: pv -p für minimalistischen Fortschritt
- Falls Netzwerk-Limit nötig: pv -L 5m
Systemadministrator / Server:
- Prüfen: Läuft der Prozess bereits? → progress -m
- Verwenden Sie progress -p
für gezielte Überwachung - Auf Headless-Servern: bevorzugt progress, da kein Kommando geändert werden muss
Skript-Autor:
- In Skripten pv verwenden, um Fortschritt und ETA zu loggen
- Log-Ausgaben auf stderr umleiten, wenn nötig
- Bandbreitenbegrenzung nutzen, wenn Kopien Server oder Netzwerk beeinträchtigen
Fehlerbehebung und Grenzen
- Keine Anzeige bei progress: Möglicherweise kein Coreutils-Prozess oder Pfad nicht erkennbar. Prüfen Sie mit ps aux | grep
. - pv zeigt keine ETA am Anfang: Erlauben Sie pv mit -W zu warten, bis erste Bytes fließen.
- Sehr viele kleine Dateien: tar | pv | gzip ist oft effizienter als viele einzelne pv-Aufrufe.
- Rechteprobleme: Stellen Sie sicher, dass der Nutzer Leserechte am Quellpfad und Schreibrechte am Ziel hat.
Wichtig: progress basiert auf heuristischen Prüfungen von /proc und offenen Dateideskriptoren; in manchen Container- oder eingeschränkten Umgebungen funktioniert die Erkennung nicht zuverlässig.
Mini-SOP: So überwachen Sie eine große Kopie (Kurzprozedur)
- Wenn Sie die Kopie starten können:
- Nutzen Sie pv in der Pipeline: pv -p -L 5m Quelle | gzip > Ziel
- Wenn die Kopie bereits läuft:
- Führen Sie progress -m aus und filtern per -c oder -p falls nötig
- Bei unsteten Anzeigen: prüfen Sie iostat/iotop für systemweiten I/O-Load
- Zum Abbrechen: Ctrl+C (bei pv bricht die Pipeline); prüfen Sie Logs und wiederholen gegebenenfalls mit pv
Wann welche Methode versagt — Gegenbeispiele
- pv in Remote-SSH-Pipes: Wenn Sie pv lokal einsetzen und per SSH schreiben, beeinflusst Latenz die ETA; benutzen Sie pv vorzugsweise auf der Seite, die den Datenstrom kontrolliert.
- progress in Container-Umgebungen: Beschränkte /proc-Informationen können Erkennung verhindern.
- Anwendungen mit eigenem Puffer-/Protokoll-Handling (z. B. Datenbanken): Weder pv noch progress zeigen hilfreiche Dateikopf-basierten Fortschritt.
Glossar (eine Zeile pro Begriff)
- pv: Monitor-Tool für Datenstrom in Pipelines.
- progress: Prozess-Monitor, der aktive Coreutils-Transfers erkennt.
- ETA: Geschätzte verbleibende Zeit bis Abschluss.
- ncurses: Bibliothek für Terminal-Benutzeroberflächen.
- Throughput: Datenrate, typisch in MB/s.
Kurze Zusammenfassung
pv und progress lösen das gleiche Problem aus unterschiedlichen Blickwinkeln: pv ist ideal, wenn Sie Ihre Pipeline selbst gestalten können — es ist simpel, portabel und kann Bandbreite regeln. progress eignet sich hervorragend, wenn ein Transfer bereits läuft oder von einem anderen Prozess gestartet wurde; es zeigt mehrere gleichzeitige Jobs übersichtlich an. Welches Tool „besser“ ist, hängt von Ihrem Use Case ab — oft ist die Kombination beider Werkzeuge ideal.
Wichtige Takeaways:
- pv: Verwenden Sie es in Pipelines, wenn Sie ETA, Durchsatz und Limitierung benötigen.
- progress: Verwenden Sie es, um bereits laufende Coreutils-Aufgaben zu beobachten.
- Beide zusammen decken die gängigsten Anforderungen an Fortschrittsanzeigen auf der Konsole ab.
Weiterführende Ressourcen: Man-Pages (man pv, man progress) und die GitHub-Seite von progress für die aktuelle Entwicklung.
Ende
Ähnliche Materialien

Dateien zwischen iPad und Android übertragen

Kreise & Wendeltreppen in Conan Exiles bauen

Instagram anonym ansehen – Methoden & Risiken

CSF auf CentOS 7 installieren & konfigurieren

WhatsApp verbindet sich ständig neu (iPhone) – Lösungen
