Wie man den Fortschritt von Linux-Befehlen mit PV- und Progress-Utilities überwacht

Stellen Sie sich ein Szenario vor, in dem Sie gerade begonnen haben, eine sehr große Datei von Ihrem Pen Drive über die Befehlszeile auf Ihr Linux-System zu kopieren. Da die fragliche Akte schwer ist, wissen Sie, dass der Prozess Zeit braucht, und Sie beginnen daher mit einer anderen Arbeit.

Nach einer Weile kommt man zurück, nur um zu sehen, dass der Befehl noch läuft. Sie beschließen, dem laufenden Kopiervorgang etwas mehr Zeit zu geben. Nach einiger Zeit, wenn Sie sich noch einmal umsehen, stellen Sie fest, dass sich nichts geändert hat, d.h. der Kopiervorgang ist weder beendet, noch hat der Befehl einen Fehler geworfen.

Sind Sie schon einmal in eine solche Situation geraten? Wenn ja, was haben Sie getan? Ehrlich gesagt kann man in solchen Fällen nicht viel tun, besonders wenn man an einem kopflosen Linux-System arbeitet – meistens warten wir entweder ab oder brechen den laufenden Vorgang mit Strg+C ab und starten ihn dann erneut.

Wäre es nicht besser, wenn wir in solchen Situationen einen Fortschrittsbalken (oder etwas Ähnliches) sehen könnten, so wie wir es tun, wenn wir versuchen, eine Datei über die GUI zu kopieren? Ein Fortschrittsbalken für die Kommandozeilenoperationen wird sicherlich sehr nützlich sein. Wenn Sie nach einer solchen Lösung gesucht haben, brauchen Sie nicht weiter zu suchen, denn in diesem Artikel werden wir zwei Kommandozeilen-Dienstprogramme, PV und Progress, besprechen, die Ihnen das Leben auf der Kommandozeile erleichtern werden.

Linux-PV-Befehl

Gemäß der offiziellen Dokumentation überwacht der Befehl pv den Datenfluss durch eine Leitung. Der Befehl zeigt die folgenden Informationen über einen laufenden Vorgang an: verstrichene Zeit, abgeschlossener Prozentsatz (mit
Fortschrittsbalken), aktuelle Durchsatzrate, übertragene Gesamtdaten und ETA.

„Um es zu verwenden, fügen Sie es in eine Pipeline zwischen zwei Prozessen ein, mit den entsprechenden Optionen“, erklärt die Man Page. „Seine Standardeingabe wird zu seiner Standardausgabe durchgereicht und der Fortschritt wird bei Standardfehlern angezeigt.

Lassen Sie uns nun die Verwendung des pv-Befehls anhand eines Beispiels verstehen. Vorher sollten Sie jedoch sicherstellen, dass das Dienstprogramm auf Ihrem System vorhanden ist. Falls nicht, können Sie es auf Debian-basierten Systemen (wie Ubuntu) mit dem folgenden Befehl einfach herunterladen und installieren:

sudo apt-get install pv

Nun zum Beispiel. Der folgende Screenshot zeigt den pv-Befehl in Aktion, als ich Bilder, die in einem Verzeichnis in meinem Pen Drive gespeichert sind, auf den Desktop meines Systems kopiert habe:

Linux-PV-Befehl

Wie Sie sehen können, zeigte der Befehl pv einen Fortschrittsbalken sowie andere nützliche Informationen an. Dies ist das Standardverhalten des Befehls. Wenn Sie die Ausgabe jedoch einschränken möchten, können Sie dies mit Hilfe von Anzeigeschaltern tun. Der folgende Befehl zeigt z.B. nur den Fortschrittsbalken an, sonst nichts.

pv -p /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

Das liegt daran, dass wir den Schalter -p display verwendet haben, der pv anweist, nur den Fortschrittsbalken einzuschalten. Die vollständige Liste der Anzeige-Schalter finden Sie in der Man Page des Befehls.

Dann gibt es einige Ausgabemodifikatoren. Wenn Sie z.B. die Option -W oder –wait mit dem Befehl verwenden, wird er angewiesen, zu warten, bis das erste Byte übertragen wurde, bevor Fortschrittsinformationen angezeigt oder ETAs berechnet werden. Dies ist besonders dann nützlich, wenn das Programm, zu dem oder von dem Sie eine Pipeline erstellen, zusätzliche Informationen benötigt, bevor es startet.

Und schließlich bietet der pv-Befehl auch einige Datenübertragungsmodifikatoren. Sie können z.B. die Übertragung auf eine bestimmte Anzahl von Bytes pro Sekunde beschränken. Wenn Sie sich den Screenshot ansehen, der zu Beginn des Tutorials gezeigt wurde, beträgt die Datenübertragungsrate über 18 MB/s. Nehmen wir nun an, Sie wollen es auf 5MBps beschränken, so dass Sie dafür den folgenden Befehl ausführen:

pv -L 5m /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

Die Option -L, gefolgt vom Wert ‚5m‘, erfüllt hier den Zweck. Siehe den obigen Befehl in Aktion im folgenden Screenshot:

Linux-PV-Befehl in Aktion

„Ein Suffix von ‚k‘, ‚m‘, ‚g‘ oder ‚t‘ kann hinzugefügt werden, um Kilobytes (*1024), Megabytes usw. zu bezeichnen“, erklärt die Man Page. Ausführliche Informationen zur Ausgabe sowie zu den Datentransfermodifikatoren sind auch auf der Manpage des Befehls verfügbar.

Linux Progress-Befehl

Progress (früher bekannt als cv) ist ein Befehlszeilen-Dienstprogramm, das Fortschritte für laufende Operationen mit den Basisbefehlen von coreutils, wie cp, mv, dd, tar, gzip/gunzip, cat und anderen, bietet. „Es kann auch die geschätzte Zeit und den Durchsatz anzeigen und bietet einen ‚top-like‘-Modus (Überwachung)“, heißt es in der offiziellen Dokumentation.

Bevor Sie Progress installieren, müssen Sie zunächst sicherstellen, dass die Bibliothek ’ncurses‘ auf Ihrem System vorhanden ist, da der Befehl von dieser Bibliothek abhängt. Falls nicht, können Debian/Ubuntu-Benutzer das ncurses-Paket mit dem folgenden Befehl herunterladen und installieren:

sudo apt-get install libncurses5-dev

Laden Sie dann das Progress-Befehlspaket aus dem GitHub-Repo mit dem folgenden Befehl herunter:

git clone https://github.com/Xfennec/progress.git

Geben Sie danach das Verzeichnis ‚progress‘ ein und führen Sie die folgenden Befehle aus:

make
sudo make install

Das war’s. Der Progress-Befehl wird nun auf Ihrem Linux-System installiert. Der folgende Screenshot (von der GitHub-Seite des Projekts) zeigt den Befehl in Aktion:

Linux Progress-Befehl in Aktion

Wie Sie sehen können, gibt Ihnen der Befehl Progress Informationen über alle laufenden Operationen, die Coreutil-Befehle beinhalten. Wie jedes andere Linux-Kommandozeilen-Tool bietet auch Progress mehrere Kommandozeilen-Optionen. Im Folgenden finden Sie eine Liste von Optionen, die für Sie nützlich sein könnten:

  • -m (–monitor) : Schleife, während die überwachten Prozesse noch laufen
  • -M (-monitor-continuously) : wie Monitor, aber niemals anhaltend (ähnlich wie die Beobachtung des Fortschritts)
  • -c (–Befehl cmd) : nur diesen Befehlsnamen überwachen (z.B.: firefox). Diese Option kann in der Befehlszeile mehrfach verwendet werden.
  • -p (–pid id) : nur diese numerische Prozess-ID überwachen (z.B. `pidof firefox`). Diese Option kann in der Befehlszeile mehrfach verwendet werden.
  • -i (–ignore-file file) : melden Sie keinen Prozess für ‚file‘. Wenn die Datei noch nicht existiert, müssen Sie einen vollständigen und sauberen absoluten Pfad angeben. Diese Option kann auf der Befehlszeile mehrfach verwendet werden.

Schlussfolgerung

Während das Progress-Werkzeug auf Coreutils-Befehle beschränkt ist, kann PV im Allgemeinen zur Überwachung jeder beliebigen Befehlszeilenaktivität verwendet werden. Außerdem lässt sich PV einfach herunterladen und installieren. Aber bevor Sie zu dem Schluss kommen, dass PV besser als Progress ist, bedenken Sie, dass Sie im Gegensatz zu PV bei Progress den zu überwachenden Befehl nicht ändern müssen. Welche der beiden Möglichkeiten besser ist, hängt also im Großen und Ganzen von Ihren Anforderungen ab.

Das könnte Dich auch interessieren …