Website-Suche

9 wesentliche Kommando-Pipelines, die den Alltag mit Linux vereinfachen


Die Pipeline-Funktion ist eine der treibenden Kräfte hinter der Linux-Philosophie, ein einzelnes Zeichen, das alles daran ändert, wie man arbeitet. Indem man die Ausgabe eines Befehls mit der Eingabe eines anderen verbindet, kann man kleine Programme miteinander verketten und ein Werkzeug schaffen, das weit mehr ist als die Summe seiner Teile.

Wenn es Ihnen schwerfällt, den Wert von Pipes zu erkennen, oder Sie einfach ihren praktischen Nutzen ein wenig besser verstehen möchten, gibt es keinen besseren Ausgangspunkt als diese gängigen, effektiven Beispiele.

grep | less

Daten filtern und die Ergebnisse seitlich anzeigen

Ein typischer grep-Befehl kann viele Ergebnisse zurückgeben, besonders wenn Sie Versuch und Irrtum verwenden, um einen regulären Ausdruck zu verfeinern. Ein Befehl wie grep '[Qq]' /usr/share/dict/words wird mehr als eine Bildschirmseite an Ausgabe erzeugen:

Um mehr als nur die letzte Seite der Ergebnisse zu sehen, müssen Sie einen Pager verwenden. Der grep-Befehl unterstützt einen solchen nicht direkt, aber Sie können jede Ausgabe an einen Pager weiterleiten und sie seitenweise anzeigen:

grep '[Qq]' /usr/share/dict/words | less

tail | grep

Relevante Live-Daten aus einer Protokolldatei extrahieren

Der Befehl tail ist nützlich, wann immer Sie die letzten Zeilen einer Datei durchsuchen möchten, am häufigsten einer Protokolldatei. Seine -f-Option bietet eine Live-Ansicht einer Datei (oder des Standardeingabegeräts) und gibt weiterhin Zeilen aus, die der Datei hinzugefügt werden. Er ist perfekt zum Überwachen von Protokolldateien, wie dem Apache-Zugriffsprotokoll:

Du wirst wahrscheinlich solche Logzeilen filtern wollen, um nach bestimmten Daten zu suchen, die URLs, bestimmte Nachrichten, Antwortcodes und so weiter entsprechen. Das grep-Tool ist dafür hervorragend geeignet und passt perfekt zu tail in einer Pipeline wie tail -f file | grep pattern.

Sie könnten die Reihenfolge dieser Befehle vergessen und erwarten, dass sie in umgekehrter Reihenfolge funktionieren. Das Piping von grep zu tail -f wird jedoch dazu führen, dass die Pipeline sofort endet, weil tail -f ignoriert, wenn die Eingabe eine Pipe ist.

history | grep

Schneller Zugriff auf Befehle, die Sie zuvor ausgeführt haben

Der Befehl history ist unglaublich nützlich, da er Ihnen Zugriff auf zuvor ausgeführte Befehle gibt. Aber Ihr Verlauf enthält viele Details; standardmäßig sind es in bash die letzten 500 Befehle. Und es können noch mehr sein, insbesondere wenn Sie eine unbegrenzte Verlaufshistorie eingerichtet haben.

Dies ist eine weitere perfekte Gelegenheit für grep, nur die Zeilen herauszufiltern, an denen Sie wirklich interessiert sind:

history | grep ls

sortieren | einzigartig

Einfache Zusammenfassungsinformationen aus strukturierten Daten

Die Befehle sort und uniq sind so nützlich, wenn sie mit anderen Befehlen kombiniert werden, dass man sie immer wieder in Pipelines verwendet sieht. uniq ist die Abkürzung für "unique" und beide Befehle machen im Wesentlichen genau das, was man basierend auf ihren Namen erwarten würde.

Hier ist ein Beispiel für eine Pipeline, die zeigt, welche IP-Adressen eine Website besucht haben und wie oft jede eine Anfrage gesendet hat:

</var/log/apache2/access_log cut -f1 -d' ' | sort | uniq -c

Diese Pipeline beinhaltet drei Befehle, von denen der erste—cut—das IP-Adressfeld aus einem Standard-Apache-Access-Log extrahiert. sort sortiert alle Zeilen der Eingabe, die zu ihm geleitet werden, während uniq Duplikate entfernt und mit der -c-Option die Gesamtzahl zählt. Am Ende erhält man eine schöne Zusammenfassung:

df | tee

Anzeige von Festplattenplatzberichten auf dem Bildschirm und in einer Datei

Der tee-Befehl wurde für die Pipeline entwickelt; seine Kernoperation besteht darin, seine Standardeingabe auf die Standardausgabe zu kopieren. Das mag nutzlos erscheinen, abgesehen von der einen zusätzlichen Funktion, die er bietet: dieselbe Eingabe in eine oder mehrere Dateien zu speichern.

Normalerweise können Sie zur Speicherung der Ausgabe eines Befehls eine Umleitung verwenden:

echo "Hello world" > myfile.txt

Das Umleiten dieser Ausgabe verhindert jedoch, dass Sie sie auf dem Bildschirm sehen oder an eine andere Stelle weiterleiten können:

Mit dem Befehl tee können Sie die Ausgabe in einer Datei speichern, aber sie trotzdem in der Pipeline behalten, um sie weiterzuverarbeiten oder auf dem Bildschirm auszugeben:

echo "Hello world" | tee myfile.txt

Sie können tee sogar mehrere Argumente übergeben, falls Sie die Ausgabe gleichzeitig in mehr als eine Datei speichern möchten.

tee ist eine großartige Wahl, wenn Sie jemals die Ausgabe eines Befehls überprüfen, aber gleichzeitig eine Aufzeichnung davon behalten möchten. Zum Beispiel können Sie den Befehl df verwenden, um die Festplattennutzung zu melden:

df -h | tee diskusage.txt

Die Ausgabe an tee weiterzuleiten bedeutet, dass sie trotzdem auf dem Bildschirm angezeigt wird, aber Sie erhalten auch eine dauerhafte Aufzeichnung in einer Datei.






echo | xargs

Eine Datei in mehrere Verzeichnisse kopieren

Der Befehl xargs ist ein bisschen wie tee; er ist ein „Meta-Befehl“, der die Funktionsweise der Befehlszeile selbst verändert. xargs ermöglicht es Ihnen, seine Eingabe in Argumente eines anderen Befehls einzufügen, daher wird er oft als Teil komplizierterer Pipelines verwendet.

Standardmäßig wandelt xargs jeden durch Leerzeichen getrennten Wert in ein Argument um und fügt ihn zu einem Befehl hinzu, den Sie ihm übergeben. Sie können auch die Option -n verwenden, um den Befehl mehrmals aufzurufen, wobei jedes Mal ein Ausschnitt von Argumenten übergeben wird, wie in diesem Beispiel:

echo "dir1 dir2" | xargs -n 1 cp -v myfile.md

Der Befehl cp wird eine Datei nicht in mehrere Verzeichnisse kopieren, daher weist diese Pipe xargs an, jeweils ein Argument bereitzustellen, das sich erweitert zu:

cp -v myfile.md dir1
cp -v myfile.md dir2

curl | jq

Daten verarbeiten, die von einer Web-API abgerufen wurden

Wenn Sie jemals curl verwendet haben, um von der Kommandozeile aus auf eine Web-API zuzugreifen, sind Sie wahrscheinlich mit einer langen Antwort konfrontiert worden, die JSON enthält und die Sie weiter verarbeiten müssen:

Der curl-Befehl ist großartig im Umgang mit allen Arten von Webanfragen, aber für die weitere Verarbeitung sind andere Befehle erforderlich, wie in diesem Fall jq, der JSON-Processor für die Kommandozeile. Mit jq können Sie Filter schreiben, um JSON-Daten in lesbarere oder passendere Formen zu transformieren. Zum Beispiel ist das Einfachste, was Sie tun können, den Identitätsoperator (.) zu verwenden, um die Eingabe zu kopieren, sie aber auch zu validieren und zu formatieren:

curl -s https://catfact.ninja/fact | jq '.'

Sie können alle möglichen Filter schreiben, um die Daten nach Belieben zu zerschneiden und zu würfeln. Das obige Beispiel gibt ein einzelnes Objekt mit den Eigenschaften 'fact' und 'length' zurück, die Sie mit einem einfachen Filter extrahieren können:

curl -s https://catfact.ninja/fact | jq -r '.fact'

du -sh * | sort -h

Finde deine größten Dateien und Verzeichnisse

Das du-Programm meldet die Gesamtgröße der Dateien und Verzeichnisse, die Sie ihm übergeben:

Das ist großartig, aber Sie suchen wahrscheinlich nach den Dateien, die den meisten Speicherplatz belegen. Leider bietet du keine eingebaute Möglichkeit, seine Ausgabe zu sortieren. Zum Glück gibt es den guten alten sort-Befehl.

sort ist ein Filterbefehl, der seine Eingabe sortiert und als Ausgabe druckt. Sie können ihn verwenden, um die Standardausgabe von du zu sortieren:

du -s * | sort

Das ist in Ordnung, aber die Ausgabe erfolgt in Blöcken, was nicht am übersichtlichsten ist. Um dasselbe zu tun, aber mit besser lesbaren Größen, verwenden Sie die -h-Option für beide Befehle:

du -sh * | sort -h

Auch wenn die Ausgabe nicht natürlich sortiert ist, ist sort intelligent genug, das Format zu erkennen und Kilobytes vor Megabytes usw. zu sortieren.

date | md5sum

Der schnellste Weg, ein gutes Passwort zu erstellen

Ich greife die ganze Zeit auf dieses hier zurück, wenn ich Passwörter generiere; es ist schnell, effektiv und leicht zu merken. Der md5sum wird seine Eingabe mit dem MD5-Algorithmus hashen und das Ergebnis ausgeben:

Wenn ich eine zufällige Menge von hexadezimalen Zeichen benötige, ist dies mein Favorit. Man könnte es für verschiedene Zwecke verwenden, einschließlich der Generierung zufälliger CSS-Farben, aber es ist auch ziemlich praktisch zur Passworterstellung.

Dies ist möglicherweise nicht die sicherste Art, ein Passwort auszuwählen. Bitte konsultieren Sie Sicherheitsratschläge, bevor Sie ein Passwort wählen, insbesondere für risikoreiche Anwendungen!


Mit Übung werden gängige Pipelines zur zweiten Natur.

Wenn es eine Pipeline gibt, die Sie noch nicht verwendet haben, kann es einige Zeit dauern, sich damit vertraut zu machen. Üben Sie alle, die nützlich erscheinen, und nach kurzer Zeit werden Sie so oft zu grep oder sort pipen, dass Sie sich fragen werden, wie Sie je ohne sie überlebt haben.

Verwandte Artikel