Einleitung
Wir beginnen unsere Befehlszeilenreise oft mit dem unverzichtbaren Paket coreutils, das grundlegende Werkzeuge für Datei-, Text- und Shell-Operationen bereitstellt. Diese Dienstprogramme sind das Rückgrat eines jeden Unix-ähnlichen Systems und erledigen alles, vom Kopieren von Dateien bis zum Bearbeiten von Text mit cp cat. Wenn jedoch die Komplexität zunimmt und wir zu Power-Usern übergehen, stellen wir oft fest, dass Coreutils allein nicht ausreichen, um anspruchsvollere Aufgaben zu bewältigen. In diesem Blog werden wir 8 erweiterte Linux-Befehlszeilentools von moreutils untersuchen, die uns helfen können, die Befehlszeile effizienter zu verwenden.
Moreutils Übersicht
Moreutils ist ein Paket von zusätzlichen Befehlszeilenwerkzeugen , die entwickelt wurden, um die Lücken zu füllen, die coreutils hinterlassen hat. Erstellt von Joey Hess und weiter ausgebaut von der GNU Linux-Community im Jahr 2007, bietet moreutils spezialisierte Dienstprogramme, die Ihre Produktivität steigern und Ihren Arbeitsablauf rationalisieren können.
Während Tools wie grep sed awk
, und oft für fortgeschrittenere Textverarbeitung verwendet werden, bietet moreutils eine Reihe einzigartiger Befehle, die die Befehlszeilenfähigkeiten noch weiter erweitern.
Hier ist eine Liste aller Befehle im Paket, einige davon werden wir uns in diesem Blog im Detail ansehen:
chronic
: Führt einen Befehl im Hintergrund aus und gibt ihn nur aus, wenn der Befehl fehlschlägt. Dies ist besonders nützlich für Cronjobs, bei denen Sie nur benachrichtigt werden möchten, wenn etwas schief geht.combine
: Führt Zeilen aus zwei Dateien mit booleschen Operationen wie AND, OR und XOR zusammen und bietet so mehr Kontrolle über Dateizusammenführungsaufgaben.errno
: Ermöglicht das Nachschlagen von Fehlernamen und -beschreibungen, was Ihnen hilft, Fehlercodes schnell zu verstehen, ohne die Dokumentation konsultieren zu müssen.ifdata
: Ruft Informationen zur Netzwerkschnittstelle ab, ohne dass Sie die Ausgabe vonifconfig
analysieren müssen, was die Netzwerkverwaltung vereinfacht.ifne
: Führt ein Programm nur aus, wenn die Standardeingabe nicht leer ist. Dies ist nützlich für die bedingte Ausführung basierend auf Eingaben.isutf8
: Überprüft, ob eine Datei oder Standardeingabe im UTF-8-Format vorliegt, um die Konsistenz der Datencodierung in Ihren Projekten sicherzustellen.lckdo
: Führt ein Programm aus, während eine Sperre gedrückt wird, wodurch verhindert wird, dass andere Prozesse denselben Befehl gleichzeitig ausführen, was in Umgebungen mit mehreren Prozessen von entscheidender Bedeutung ist.mispipe
: Leitet zwei Befehle zusammen und gibt den exit zurückparallel
: Führt mehrere Befehle gleichzeitig aus und nutzt dabei die Vorteile von Multi-Core-Prozessoren, um Vorgänge wie Batch-Verarbeitung oder Tests zu beschleunigen.pee
: Ähnlich wie tee, aber anstatt in mehrere Dateien zu schreiben, sendet es die Standardeingabe an mehrere Befehle gleichzeitig, sodass Sie Eingaben über mehrere Befehle gleichzeitig verarbeiten können.sponge
: Absorbiert die Standardeingabe, bevor sie in eine Datei geschrieben wird, und verhindert so Probleme beim Überschreiben von Dateien, die noch gelesen werden, ein häufiges Problem beim Verketten von Befehlen.ts
: Fügt jeder Eingabezeile einen Zeitstempel hinzu, der besonders nützlich ist, um das Timing von Ereignissen in Echtzeit zu protokollieren oder zu überwachen.vidir
: Öffnet ein Verzeichnis in Ihrem Texteditor, in dem Sie Dateien so umbenennen können, als wären sie Zeilen in einer Textdatei, was viel schneller ist als das Umbenennen von Dateien einzeln.vipe
: Fügt einen Texteditor in eine Pipeline ein, sodass Sie den Inhalt der Ausgabe eines Befehls manuell bearbeiten können, bevor Sie ihn an den nächsten Befehl übergeben.zrun
: Dekomprimiert automatisch die Argumente eines Befehls und vereinfacht so die Arbeit mit komprimierten Dateien.
Grundlagen von Command Operations
Bevor Sie sich mit den spezifischen Tools befassen, ist es hilfreich, einige Grundlagen der Befehlszeile zu überprüfen. Das Verständnis von Operatoren wie Pipes (|
), Befehlsersetzung ($()) und logischen Operatoren (&&, ||) ist unerlässlich, um sowohl coreutils als auch moreutils effektiv zu verwenden.
- Pipes (|): Ermöglicht die Ausgabe eines Befehls als Eingabe für einen anderen. Beispiel:
ls -l | grep ".txt"
- Befehlsersetzung ($()): Verwendet die Ausgabe eines Befehls als Argument für einen anderen. Beispiel:
echo "Today is $(date)"
- Logische Operatoren:
- && (UND): Der zweite Befehl wird nur ausgeführt, wenn der erste erfolgreich ist.
- || (ODER): Der zweite Befehl wird nur ausgeführt, wenn der erste fehlschlägt.
Beispiel:
mkdir new_directory && cd new_directory
grep "pattern" file.txt || echo "Pattern not found"
Nachdem dies aus dem Weg geräumt ist, lassen Sie uns die nützlichsten Befehlszeilenprogramme im Paket untersuchen.
combine
: Zusammenführen von Dateien mit boolescher Logik
Mit dem Befehl combine von moreutils können Sie Zeilen aus zwei Dateien mithilfe boolescher Operationen zusammenführen. Dies ist besonders nützlich, wenn Sie Daten aus verschiedenen Quellen vergleichen oder kombinieren müssen.
Hier ist ein kurzes Beispiel mit zwei einfachen Protokolldateien:
Inhalt von :syslog_day1.txt
Error: Disk quota exceeded
Warning: CPU temperature high
Info: System rebooted
Inhalt von :syslog_day2.txt
Error: Disk quota exceeded
Warning: CPU temperature high
Info: New user added
combine
verwenden
- UND-Operation: Findet gemeinsame Zeilen in beiden Dateien.
combine ./syslog_day1.txt and ./syslog_day2.txt
Ausgabe:
Error: Disk quota exceeded
Warning: CPU temperature high
- ODER-Operation: Alle Zeilen aus beiden Dateien werden zusammengeführt.
combine ./syslog_day1.txt or ./syslog_day2.txt
Output:
Error: Disk quota exceeded
Warning: CPU temperature high
Info: System rebooted
Info: New user added
- XOR-Operation: Sucht nach Zeilen, die für jede Datei eindeutig sind.
combine ./syslog_day1.txt xor ./syslog_day2.txt
Ausgabe:
Info: System rebooted
Info: New user added
- NOT-Operation: Sucht Zeilen in der ersten Datei, die sich nicht in der zweiten befinden.
combine ./syslog_day1.txt not ./syslog_day2.txt
Ergebnis:
Info: System rebooted
ifne
: Befehl ausführen, wenn die Ausgabe nicht leer ist
Der Befehl ifne ist ein einfaches, aber mächtiges Tool, das einen Befehl nur dann ausführt, wenn die Standardausgabe (stdout) nicht leer ist. Dies ist besonders nützlich in Skripts, in denen Sie Folgeaktionen ausführen möchten, die darauf basieren, ob ein vorheriger Befehl eine Ausgabe erzeugt hat.
Nehmen wir an, wir haben eine Protokolldatei und möchten sie nur komprimieren, wenn sie bestimmte Einträge enthält, wobei die Beispieldateien aus dem vorherigen Kapitel verwendet werden.
Benutzend ifne
Sie können grep mit ifne kombinieren mit, um dies zu erreichen:
grep "Error" syslog.txt | ifne gzip syslog.txt
Erklärung:
grep "Error" syslog.txt
: Sucht in der Protokolldatei nach dem Begriff „Fehler“.| ifne gzip syslog.txt
: Wenn „Fehler“ gefunden wird (d.h. wenn die Ausgabe nicht leer ist), komprimiert die Datei.gzip
syslog.txt
Wenn der Befehl grep ifne
„Error“ im Protokoll findet, wird sichergestellt, dass die Protokolldatei komprimiert wird. Wenn keine „Error“-Einträge vorhanden sind, bleibt die Datei unverändert und es wird keine Komprimierung durchgeführt.
parallel
: Mehrere Jobs gleichzeitig ausführen
Der Befehl ermöglicht es uns, mehrere Jobs gleichzeitig auszuführen und dabei die volle Leistung aller CPU-Kerne zu nutzen. Dadurch können Aufgaben, die sonst sequenziell ausgeführt würden, erheblich beschleunigt werden.
Beispiel: Ausführen von Auslastungstests mit curl
Stellen Sie sich vor, Sie möchten mehrere Anfragen an eine Website simulieren, um deren Lastbehandlung zu testen. Anstatt diese Anfragen nacheinander auszuführen, können wir sie gleichzeitig ausführen.
So können wir es tun:
seq 1 100 | parallel -j10 curl -s -o /dev/null http://example.com
seq 1 100
: Generiert eine Zahlenfolge von 1 bis 100, die 100 Anforderungen darstellt.| parallel curl -j10
: Führt den folgenden Befehl (in diesem Fall) parallel aus, wobei 10 Jobs gleichzeitig ausgeführt werden.curl curl -s -o /dev/null http://example.com
: Sendet eine Anforderung an die Ausgabe und verwirft sie (für den unbeaufsichtigten Modus, um die Ausgabe zu verwerfen).
Mit diesem Setup werden 10 Anfragen gleichzeitig an den Server gesendet, wodurch es viel schneller ist, die insgesamt 100 Anfragen zu simulieren. Dies ist besonders nützlich für Auslastungstests oder Szenarien, in denen Sie viele ähnliche Vorgänge parallel ausführen müssen.
pee
: Gleichzeitiges Senden von Eingaben an mehrere Befehle

Der Befehl in moreutils ähnelt dem von tee, aber anstatt Eingaben in mehrere Dateien zu schreiben, sendet er die Standardeingabe an mehrere Befehle gleichzeitig. Dies ist besonders nützlich, wenn wir dieselbe Eingabe auf unterschiedliche Weise gleichzeitig verarbeiten möchten.
In den Protokolldateien, die wir zuvor gesehen haben, möchten wir gleichzeitig nach verschiedenen Arten von Einträgen suchen, z. B. „Fehler“, „Warnung“ und „Info“. Wir können pee und grep
verwenden, um mehrere Befehle parallel auf derselben Eingabe auszuführen.
cat syslog.txt | pee 'grep Error' 'grep Warning' 'grep Info'
cat syslog.txt
: Gibt den Inhalt von aus.syslog.txt
| pee 'grep Error' 'grep Warning' 'grep Info'
: Sendet die Ausgabe an drei Befehle gleichzeitig, wobei jeder nach „Fehler“, „Warnung“ oder „Info“-Einträgen filtert.grep
Dieses Setup ermöglicht es uns, verschiedene Arten von Protokolleinträgen gleichzeitig zu extrahieren, anstatt mehrere Befehle nacheinander auszuführen. Jeder Befehl verarbeitet denselben Eingabedatenstrom, jedoch mit einem anderen grep Filter.
sponge
: Dateiinhalt an Ort und Stelle ersetzen
Der Befehl sponge liest die gesamte Eingabe, bevor er sie in eine Datei schreibt. Dadurch wird das häufige Problem vermieden, dass eine Datei überschrieben wird, während sie noch gelesen wird, was passieren kann, wenn Sie versuchen, die Ausgabe direkt in dieselbe Datei umzuleiten, aus der Sie lesen.
Nehmen wir an, wir haben eine Datei mit unsortierten Daten, und Sie möchten den Inhalt sortieren und das Ergebnis wieder in derselben Datei speichern. Normalerweise kann der Versuch, dies direkt zu tun, zu Problemen führen, da die Datei möglicherweise überschrieben wird, bevor die Sortierung abgeschlossen ist.
So können Sie dieses Problem vermeiden:
sort unsorted.txt | sponge unsorted.txt
sort unsorted.txt
: Sortiert den Inhalt von .unsorted.txt
| sponge unsorted.txt
: Liest die sortierte Ausgabe vollständig, bevor sie zurück geschrieben wird, um sicherzustellen, dass der Vorgang sicher ist und die Datei nicht beschädigt wird.
ts
: Hinzufügen von Zeitstempeln zu jeder Eingabezeile
Der Befehl ts stellt jeder Eingabezeile einen Zeitstempel voran. Dies ist besonders nützlich für die Protokollierung, Überwachung oder das Debuggen, bei denen es wichtig ist, den genauen Zeitpunkt jedes Ereignisses zu kennen.
Wenn wir eine Protokolldatei haben und Sie jedem Eintrag Zeitstempel hinzufügen möchten, während er geschrieben wird, können Sie ts verwenden:
tail -f /var/log/syslog | ts
Erklärung:
tail -f /var/log/syslog
: Gibt kontinuierlich neue Zeilen aus, die der Syslog-Datei hinzugefügt wurden.| ts
: Stellt jeder neuen Zeile einen Zeitstempel voran, der genau anzeigt, wann jeder Protokolleintrag aufgezeichnet wurde.
Auf diese Weise ist leicht zu erkennen, wann jedes Ereignis im Protokoll aufgetreten ist, was für das Debuggen und die Systemüberwachung entscheidend sein kann.
vidir
: Editieren von Verzeichnisse und Dateien in Vim Buffer
Der Befehl vidir ermöglicht es uns, Dateinamen innerhalb eines Verzeichnisses so zu bearbeiten, als wären sie Zeilen in einer Textdatei. Dies macht das Batch-Umbenennen von Dateien viel einfacher und schneller als die wiederholte Verwendung von mv.
In Neovim bieten Plugins wie ‚oil.nvim‘ oder ‚mini.files‘ eine viel erweiterte Funktionalität.
Beispiel: Batch-Umbenennen von Dateien
Angenommen, wir haben ein Verzeichnis voller Dateien und Sie möchten sie alle auf einmal umbenennen:
vidir .
vidir .
: Öffnet die Dateinamen im aktuellen Verzeichnis in Ihrem Standard-Texteditor.- Sie können die Dateinamen direkt im Texteditor bearbeiten. Nachdem Sie den vidir Editor gespeichert und geschlossen haben, werden die Änderungen übernommen und die Dateien entsprechend umbenannt.
Dies ist eine schnelle und effiziente Möglichkeit, Dateien stapelweise umzubenennen, ohne ein Skript schreiben oder jede Datei manuell verschieben zu müssen.
vipe
: Bearbeiten von Pipeline-Inhalten mit dem Texteditor
Der Befehl vipe fügt einen Texteditor in eine Pipeline ein, sodass wir den Inhalt, der durch die Pipeline geleitet wird, manuell bearbeiten können, bevor wir ihn an den nächsten Befehl senden.
Stellen Sie sich vor, wir filtern einige Protokolle nach bestimmten Einträgen und möchten einige manuelle Änderungen vornehmen, bevor wir die Ergebnisse speichern:
grep "Error" syslog.txt | vipe | tee errors.txt
grep "Error" syslog.txt
: Sucht alle Zeilen, die „Error“ in enthalten.syslog.txt
| vipe
: Öffnet die grep-Ausgabe in Ihrem Texteditor, in dem Sie manuell Änderungen vornehmen können.| tee errors.txt
: Speichert die endgültige, bearbeitete Ausgabe und zeigt sie gleichzeitig an.
Dies ist besonders nützlich, wenn Sie die Ausgabe eines Befehls überprüfen oder ändern müssen, bevor er an den nächsten Schritt in einer Pipeline übergeben wird, und bietet eine flexible und interaktive Möglichkeit, Daten zu verarbeiten.
Fazit
Wir haben einige der herausragenden Tools in moreutils untersucht, die jeweils eine einzigartige Möglichkeit bieten, unseren Befehlszeilen-Workflow zu verbessern.
Der Schlüssel hier ist, sich nicht zu überfordern, indem man versucht, jedes Werkzeug auf einmal zu verwenden. Konzentrieren Sie sich stattdessen darauf, ein oder zwei zu integrieren, die wirklich zu Ihrem Workflow passen. Ganz gleich, ob es sich um die Bequemlichkeit für sichere Dateibearbeitungen oder die Vielseitigkeit für die interaktive Pipeline-Bearbeitung handelt, beginnen Sie mit dem, was sich für Sie am nützlichsten anfühlt.sponge
vipe
Wenn Sie sich mit diesen Tools vertraut machen, werden Sie wahrscheinlich feststellen, dass sie zu einem unverzichtbaren Bestandteil Ihrer täglichen Routine werden. Wie bei jedem großartigen Toolset geht es darum, herauszufinden, was für Sie am besten funktioniert, und es zu einer natürlichen Erweiterung Ihrer Arbeitsweise zu machen. Es wird nicht lange dauern, bis Sie sich fragen, wie Sie jemals ohne sie ausgekommen sind.
Weiter zu einem weiteren Beitrag: 10 Python-Funktionen, die verwirrend erscheinen