Diese 6 Linux-Pipelines sind unnötig, komplex und ineffizient; hier ist, wie man sie beheben kann

Optimieren Sie Ihre Linux-Befehle: Erfahren Sie, wie Sie komplexe Pipelines durch integrierte Optionen ersetzen, um die Effizienz zu steigern und die Übersichtlichkeit zu verbessern.
Pipes sind eine sehr leistungsstarke Kernfunktion von Linux. Durch das Verknüpfen von Programmen können Sie komplexe Aufgaben mit einem kleinen Satz von Werkzeugen ausführen. Doch Piping ist nicht immer die beste Lösung; wenn es nicht benötigt wird, kann es die Komplexität erhöhen und zu weniger effizienten Optionen führen.
Viele Linux-Befehle haben Optionen, die es ihnen ermöglichen, die Aufgabe eines anderen Befehls zu übernehmen. Zum Beispiel kann ls seine eigene Ausgabe sortieren, obwohl der Befehl sort existiert. Finden Sie heraus, welche gängigen Pipelines bessere Alternativen haben und wie Sie diese freischalten können.
grep | wc
Die Pipeline ist gebräuchlich, aber grep hat ein eigenes Gegenstück
Dieses Muster ist sehr verbreitet, teilweise weil es eine gute Demonstration von wc bietet. Das „Wortzählwerkzeug“, das auch Zeilen und Zeichen zählen kann, passt gut in viele Pipelines, weil man oft mehr an der Anzahl der Ergebnisse interessiert ist als daran, was sie tatsächlich sind:
grep -E "^.+() {$" funcs.sh | wc -l Während wc hervorragend die Anzahl der Ergebnisse zählt, kann grep dies selbst mit der Option -c oder --count tun.
grep --count -E "^.+() {$" funcs.sh Die -c-Option ist anscheinend von Anfang an ein Feature von grep gewesen, sodass es dafür nie wirklich eine Entschuldigung gegeben hat.
cat file | anything
Eine nutzlose Verwendung von cat, die leicht vermieden werden kann
Eine weitere unglaublich häufige Nutzung einer Pipe, die vermieden werden kann. Der cat-Befehl ist nützlich, weil, obwohl er für „konkatenieren“ steht, er nichts zusammenfügen muss. Standardmäßig schreibt er eine Datei auf die Standardausgabe, selbst wenn es nur eine einzelne Datei ist.
Das bedeutet, dass es oft verlockend ist, zu cat zu greifen, wenn Sie den Inhalt einer Datei als Eingabe an einen anderen Befehl weitergeben wollen:
cat file > wc -l Aber ein Befehl wie wc liest die Eingabe aus jeder Datei, die Sie ihm übergeben, sodass eine Pipe von cat nicht notwendig ist:
wc -l file Aber was, wenn ein Befehl keine Dateiargumente unterstützt? Dann müssen Sie cat verwenden, richtig? Eigentlich nein: Linux hat einen integrierten Dateiumleitungsoperator, der bedeutet, dass cat sogar in diesen Fällen unnötig ist.
tr ' ' '\n' <filename Es braucht etwas Eingewöhnungszeit, insbesondere wenn pipen mit cat in Ihrer muscle memory verankert ist, aber das Lernen der effektiven Umleitung wird Ihnen eine ganze Reihe von Möglichkeiten in der Befehlszeile eröffnen.
ls | sort
Ein eingebautes sort bringt neue Vorteile
Der sort-Befehl ist ein weiterer, der perfekt für Piping ist: er ist ein Filter, der, wie Sie erwarten würden, alle Eingaben, die er erhält, sortiert und an die Standardausgabe sendet:
So kann er bei Befehlen wie ls, die eine fast tabellarische Ausgabe erzeugen, sehr nützlich sein. Tatsächlich macht die -k-Eigenschaft von sort, die angibt, nach welcher Feldnummer sortiert werden soll, ihn für diesen Zweck sehr vielseitig.
Dennoch gibt es keinen wirklichen Grund, ihn zu verwenden, zumindest nicht im Fall von ls, das seine eigene Option zum Sortieren nach Dateigröße unterstützt:
ls -lrS Die -r-Option kehrt die Richtung der Sortierung um, sodass die größten Dateien unten angezeigt werden, was wahrscheinlich das ist, was Sie wollen.
Die Verwendung von sort, das in ls eingebaut ist, hat einen weiteren kleinen, aber wichtigen Vorteil. Wenn Sie die Ausgabe von ls an sort weiterleiten, verlieren Sie jegliche Farbformatierung, aber das in ls integrierte sort behält sie bei.
head | tail
Einen Bereich von Zeilen mit einem einzigen Befehl extrahieren
Die Befehle head und tail sind großartig, um die ersten oder letzten n Zeilen der Eingabe zu extrahieren. In Kombination sind sie ein schöner Trick, um einen bestimmten Bereich von Zeilen aus einer Datei zu extrahieren:
<filename head -105 | tail -4 Es ist clever, aber Sie können dasselbe mit sed, dem Stream-Editor, tun:
sed -n '102,105p' <filename Beachten Sie, dass sowohl dieser Befehl als auch die vorherige Pipeline die Zeilen 102-105 aus der Datei abrufen, aber die sed-Version weniger Mathematik erfordert.
grep | head
Große Ergebnismengen überschaubar halten und grep die zusätzliche Arbeit ersparen
Manchmal hat Ihr grep ein Ergebnis, manchmal hat es Hunderte oder mehr. Wenn Sie eine große Menge an Ergebnissen haben...
Um die Ausgabe von grep zu handhaben, ist es natürlich, erneut den Befehl head zu verwenden, um nach einer bestimmten Anzahl zu stoppen:
grep firefox access_log | head -n 10 Dies ist jedoch nicht notwendig, dank der Option -m (--max-count) von grep, die genau dasselbe tut:
grep --max-count=10 firefox access_log sort | uniq
Eine klassische Pipeline mit einem weniger Befehl
Hier ist eine weitere Pipeline, die man so oft sieht, dass man annehmen würde, sie sei der beste Weg – vielleicht der einzige Weg – um Datenzeilen zu sortieren und zu deduplizieren:
sort <urls | uniq Aber es gibt einen anderen Weg, ohne den komisch benannten uniq überhaupt zu verwenden. Der sort-Befehl hat die Einzigartigkeit als Option integriert, mit -u (--unique):
sort --unique <urlsImmer Alternativen in Betracht ziehen
Linux ist ein flexibles System, mit vielen kleinen Tools, die man kombinieren kann, um verschiedene Aufgaben zu erledigen. Das gibt dir viel Flexibilität, also sei sicher, auch andere Wege auszuprobieren, die Unterschiede zu verstehen und bereit zu sein, neue Ansätze zu lernen.
Bist du neugierig auf weitere Artikel wie Diese 6 Linux-Pipelines sind unnötig, komplex und ineffizient; hier ist, wie man sie beheben kann? Entdecke spannende Inhalte in der Kategorie Linux.

Schreibe einen Kommentar