Technologieführer

Fortschrittsanzeigen in der Linux-Konsole mit pv und progress

7 min read Linux Aktualisiert 07 Oct 2025
pv & progress: Fortschritt in der Linux-Konsole
pv & progress: Fortschritt in der Linux-Konsole

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

Progress zeigt laufende Kopiervorgänge mit Schätzdauer und Durchsatz.

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?

Kriteriumpvprogress
EinsatzszenarioIn Pipeline einfügbar, universellÜberwacht bereits laufende coreutils-Prozesse
Benötigt Änderung am BefehlJaNein
AnzeigeDetailliert: ETA, Durchsatz, GesamtProzesse-Übersicht, mehrere Jobs simultan
BandbreitenbegrenzungJa (-L)Nein
Einfachheit der InstallationPaket verfügbarMeist 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)

  1. Wenn Sie die Kopie starten können:
    • Nutzen Sie pv in der Pipeline: pv -p -L 5m Quelle | gzip > Ziel
  2. Wenn die Kopie bereits läuft:
    • Führen Sie progress -m aus und filtern per -c oder -p falls nötig
  3. Bei unsteten Anzeigen: prüfen Sie iostat/iotop für systemweiten I/O-Load
  4. 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

Autor
Redaktion

Ähnliche Materialien

Dateien zwischen iPad und Android übertragen
How-to

Dateien zwischen iPad und Android übertragen

Kreise & Wendeltreppen in Conan Exiles bauen
Spielanleitung

Kreise & Wendeltreppen in Conan Exiles bauen

Instagram anonym ansehen – Methoden & Risiken
Social Media

Instagram anonym ansehen – Methoden & Risiken

CSF auf CentOS 7 installieren & konfigurieren
Security

CSF auf CentOS 7 installieren & konfigurieren

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

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

Videoqualität unter Windows verbessern
Windows-Optimierung

Videoqualität unter Windows verbessern