Weiterlesen mit NEWS. Jetzt testen.
Lesezeit ca. 7 Min.

Unbekanntere Linux-Werkzeuge ausprobieren (Teil 1): Spielzeugkiste


LinuxUser Spezial - epaper ⋅ Ausgabe 1/2020 vom 05.03.2020

Die Kommandozeile bietet zahlreiche clevere Werkzeuge, die kaum jemand kennt. Wir stellen die nützlichsten davon vor.


Artikelbild für den Artikel "Unbekanntere Linux-Werkzeuge ausprobieren (Teil 1): Spielzeugkiste" aus der Ausgabe 1/2020 von LinuxUser Spezial. Dieses epaper sofort kaufen oder online lesen mit der Zeitschriften-Flatrate United Kiosk NEWS.

Bildquelle: LinuxUser Spezial, Ausgabe 1/2020

Charles Taylor, 123RF

Linux ist eine wahre Wundertüte voller Werkzeuge. Neben den üblichen Verdächtigen, die Sie jeden Tag nutzen, wie beispielsweise cd, ls, mkdir, tar, df, cat oder grep, hält es in versteckten Seitentaschen weitere Spezialwerkzeuge bereit. Die tauchen im Inhaltsverzeichnis eines Linux-Buchs, wenn überhaupt, meist nur unter „Sonstiges“ auf.

Wir haben diese versteckten Seitentaschen durchstöbert und stellen Ihnen hier die nützlichsten Helfer vor, die wir darin gefunden ...

Weiterlesen
epaper-Einzelheft 11,99€
NEWS 30 Tage gratis testen
Bereits gekauft?Anmelden & Lesen
Leseprobe: Abdruck mit freundlicher Genehmigung von LinuxUser Spezial. Alle Rechte vorbehalten.
Lesen Sie jetzt diesen Artikel und viele weitere spannende Reportagen, Interviews, Hintergrundberichte, Kommentare und mehr aus über 1000 Magazinen und Zeitungen. Mit der Zeitschriften-Flatrate NEWS von United Kiosk können Sie nicht nur in den aktuellen Ausgaben, sondern auch in Sonderheften und im umfassenden Archiv der Titel stöbern und nach Ihren Themen und Interessensgebieten suchen. Neben der großen Auswahl und dem einfachen Zugriff auf das aktuelle Wissen der Welt profitieren Sie unter anderem von diesen fünf Vorteilen:

  • Schwerpunkt auf deutschsprachige Magazine
  • Papier sparen & Umwelt schonen
  • Nur bei uns: Leselisten (wie Playlists)
  • Zertifizierte Sicherheit
  • Freundlicher Service
Erfahren Sie hier mehr über United Kiosk NEWS.

Mehr aus dieser Ausgabe

Titelbild der Ausgabe 1/2020 von README. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
README
Titelbild der Ausgabe 1/2020 von Minimales Linux-Lehrsystem mit MLL: Schritt für Schritt. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Minimales Linux-Lehrsystem mit MLL: Schritt für Schritt
Titelbild der Ausgabe 1/2020 von In der Shell Informationen von Dateien auswerten: Bestandsaufnahme. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
In der Shell Informationen von Dateien auswerten: Bestandsaufnahme
Titelbild der Ausgabe 1/2020 von Von der Festplatte direkt aufs Papier: Drucken per Skript. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Von der Festplatte direkt aufs Papier: Drucken per Skript
Titelbild der Ausgabe 1/2020 von Mit Diff Unterschiede in Dateien aufspüren: Spurensuche. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Mit Diff Unterschiede in Dateien aufspüren: Spurensuche
Titelbild der Ausgabe 1/2020 von Unbekannte Linux-Tools im Überblick (Teil 2): Unter der Werkbank. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Unbekannte Linux-Tools im Überblick (Teil 2): Unter der Werkbank
Vorheriger Artikel
Mit Diff Unterschiede in Dateien aufspüren: Spurensuche
aus dieser Ausgabe
Nächster Artikel Unbekannte Linux-Tools im Überblick (Teil 2): Unter der Werk…
aus dieser Ausgabe

... haben. Dabei widmen wir jedem Werkzeug einen eigenen Absatz mit Praxisbeispielen. Wir können jedoch nicht alle Schalter der Tools vorstellen; ein zusätzlicher Blick in die jeweilige Manpage lohnt sich daher immer.

Um es Ihnen leichter zu machen, geben wir zu jedem Werkzeug das Softwarepaket für Debian GNU/ Linux, Ubuntu und Derivate an, in dem sich das besprochene Werkzeug findet. Das essenzielle Paket coreutils . zählt dabei zum Standard-Installationsumfang, die entsprechenden Tools liegen also bereits auf Ihrem System. Die anderen Pakete installieren Sie gegebenenfalls per Apt oder Synaptic über die Paketverwaltung nach. Bei anderen Distributionen heißen die diversen Pakete möglicherweise anders, oder das Werkzeug wurde noch gar nicht paketiert.

README

Neben den gängigen Standardwerkzeugen für die Konsole gibt es noch zahlreiche nützliche, aber oft übersehene Exoten unter diesen Programmen. Oder kennen Sie Fmt, Fold, Column, Join, Paste, Rev, Tac, Unsort, Shuf, Expand und Unexpand oder Numfmt?

Fmt

Fmt aus dem Paket coreutils gehört zur Kategorie der Text-Tools. Seine Aufgabe besteht darin, Absätze neu zu formatieren. Es nimmt dazu einen Text über die Standardeingabe entgegen und formatiert ihn mit einer bestimmten Breite im Flattersatz ., also mit der von Ihnen genannten Anzahl Zeichen pro Zeile. Dabei überschreibt Fmt die Originaldatei nicht, sondern liefert das Ergebnis auf der Standardausgabe aus.

Bei der Reformatierung erfolgt kein gleichmäßiger Ausgleich der Wortabstände wie bei LaTeX, Fmt reduziert jedoch alle mehrfachen Leerzeichen zwischen den einzelnen Worten sowie zwischen Sätzen. Damit stimmt die Optik der resultierenden Absätze, die dann auch keine „Löcher“ mehr aufweisen

Die gewünschte Breite des Texts stellen Sie mit dem Schalter ‑w (‑‑width) ein, gefolgt von der Anzahl der Zeichen. Ohne diese Angabe geht Fmt von 75 Zeichen pro Zeile aus. Abbildung 1 zeigt das Vorgehen für einen neu formatierten Absatz mit 50 Zeichen pro Zeile.

Eine Einrückung der ersten Zeile von Absätzen entfernt Fmt üblicherweise, da es die Leerzeichen als überflüssig interpretiert und wegoptimiert. Mit dem Schalter ‑c (‑‑crown‑margin) lässt sich das Werkzeug jedoch vom Gegenteil überzeugen und behält die bereits bestehende Einrückung der ersten beiden Zeilen bei. Abbildung 2 zeigt die Umformatierung des Textes mit Zeileneinzug (Einrückung).

Ohne weitere Angaben im Aufruf bearbeitet Fmt alle Zeilen der Eingabe, es ist aber zu deutlich präziseren Eingriffen in der Lage. So modifiziert es mithilfe des Schalters ‑p (‑‑prefix) nur solche Zeilen des Texts, die mit einer bestimmten Zeichenkette beginnen.

Das erweist sich beispielsweise für Kommentare im Quellcode als nützlich, die dann sauber umbrechen. Ein entsprechendes Beispiel finden Sie in Listing 1. Als Präfix kommt hier ein einzelnes Hashtag („#“) zum Einsatz. Im Aufruf auf der Kommandozeile steht es in Anführungszeichen, damit es die Shell nicht als Beginn eines Kommentars interpretiert.

Fold

Das Tool Fold aus dem Paket coreutils formatiert Text ganz ähnlich wie Fmt, verwendet als Standardbreite jedoch 80 Zeichen pro Zeile. Zudem bricht es exakt nach der genannten Spalte um, unabhängig davon, ob an dieser Position im Text tatsächlich ein Wortende erreicht ist (Listing 2, erster Aufruf). Damit Fold nur an Wortenden umbricht, rufen Sie das Programm stattdessen mit dem Schalter ‑s (‑‑spaces) auf. Der zweite Aufruf in Listing 2 zeigt den kleinen, aber feinen Unterschied.

1 Umformatierung eines Absatzes mit dem Kommandozeilen-Tool fmt.

2 Umformatierung eines Absatzes mit Einrückung.

Column

Das Kommando Column aus dem Paket bsdmainutils gibt die Eingabedaten spaltenweise aus. Dazu passt es seine Ausgabe an die Breite des Terminalfensters an und teilt die Werte entsprechend auf. Die Software ordnet dabei die Inhalte von links nach rechts an: Es füllt also zuerst die linke Spalte auf und erst danach die weiteren Spalten rechts daneben. Eine Sortierung der Eingabedaten nimmt es aber nicht vor, deren Reihenfolge bleibt also in der Ausgabe erhalten.

Zur Anordnung der Spalten verwendet Column Tabulatoren. Der erste Aufruf in Listing 3 zeigt das für eine Liste, die Column alphabetisch nach dem Ortsnamen sortiert. Mit dem Schalter ‑x geht das Werkzeug stattdessen zeilenweise vor (zweiter Aufruf). Hier landet Besancon nicht unter Ansbach, sondern in der Spalte rechts daneben.

Enthält die Eingabedatei Leerzeilen, beispielsweise als optische Trennung, ignoriert Column diese normalerweise. Mithilfe des Schalters ‑e bleiben solche Leerzeilen erhalten (Listing 4). Es gibt aber noch eine weitere Funktionsweise: Mit dem Schalter ‑t behält Column Zeilenumbrüche in den Daten bei. Es formatiert die vorhandenen Zeilen dann tabellenartig, indem es die Anzahl der Leerzeichen zwischen den Wörtern so anpasst, dass diese gleichmäßig untereinanderstehen. Die Breite des Terminals ignoriert Column in diesem Fall.

Dies erweist sich insbesondere dann als hilfreich, wenn Sie die Ausgaben von spaltenorientierten Dateiformaten übersichtlicher gestalten möchten. Als typische Kandidaten kommen etwa die Datei /etc/fstab, Crontab-Dateien oder der oft sehr schlecht lesbare Inhalt von /proc/mounts infrage (Listing 5).

Join

Das Werkzeug Join aus dem Paket coreutils kombiniert Zeilen mehrerer Dateien miteinander, die jeweils über ein identisches Feld am Anfang der Zeile (Präfix) verfügen. Das Präfix muss in beiden Dateien in derselben Reihenfolge auftauchen, Join kann also nur mit bereits sortierten Dateien umgehen.

In Listing 6 handelt es sich beim Präfix um eine Mitgliedsnummer. Hier führt Join also zwei Datensätze zusammen, die den Namen beziehungsweise das Geburtsdatum einer Person enthalten. Bei den Datensätzen kann es sich beispielsweise um Tabellen aus einer Datenbank handeln.

Haben die Überschriften der ersten Spalte eine abweichende Schreibweise, hilft der Schalter ‑i (kurz für ‑‑ignore‑case) weiter. Damit vergleicht Join die Felder unabhängig von der Großund Kleinschreibung miteinander. Join übernimmt in die Ausgabe die Schreibweise ähnlicher Felder, die es in der ersten Spalte findet. Weichen die Überschriften der ersten Zeile komplett voneinander ab, geben Sie stattdessen den Schalter ‑‑header an. Join betrachtet in diesem Fall die erste Zeile als Kopfzeile und verändert sie nicht.

Verarbeiten Sie Dateien mit Trennzeichen, wie etwa eine CSV-Datei, geben Sie den Schalter ‑t gefolgt vom entsprechenden Delimiter an. Join zerlegt die Zeilen dann anhand dieser Angabe korrekt in einzelne Felder (Listing 7).

Paste

Paste aus dem Paket coreutils ähnelt weitgehend Join: Es klebt ebenfalls Dateien zeilenweise zusammen. In Listing 8 fügen wir einer bestehenden CSV-Datei mit Nummer und Name eine weitere Spalte namens Geburtsdatum hinzu. Das angegebene Trennzeichen ‑d (‑‑delimiter) sorgt dafür, dass dabei jeweils ein Komma als Spaltentrenner zum Einsatz kommt.

Paste ist sogar in der Lage, mit mehreren Trennzeichen im Aufruf umzugehen. Es fügt in diesem Fall das erste angege- bene Trennzeichen zwischen der ersten und zweiten Spalte der Ausgabe ein, das zweite Trennzeichen zwischen der zweiten und dritten Spalte und so weiter. In Listing 9 fungieren beispielsweise ein Pipe-Symbol als erstes und ein Komma als zweites Trennzeichen. Im Aufruf schließen Sie die Trennzeichen am besten in einfache oder doppelte Anführungsstriche ein, damit sie die ausführende Shell nicht auswertet.

Rev

Das Werkzeug Rev aus dem Paket util-linux liest von der Standardeingabe oder aus einer Datei und gibt den Inhalt jeder Zeile zeichenweise in umgekehrter Reihenfolge wieder aus. Listing 10 zeigt den Einsatz des Tools anhand der Datei mit den Geburtstagen aus Listing 6.

Tac

Tac aus dem Paket coreutils ähnelt in der Wirkungsweise Rev, fungiert jedoch als Gegenstück zum bekannteren Werkzeug Cat: Es gibt den Inhalt einer Datei in umgekehrter Reihenfolge aus, also die letzte Zeile zuerst, dann die vorletzte und so weiter. Listing 11 stellt die Ausgaben von Cat und Tac gegenüber.

Shuf und Unsort

Die beiden Tools Shuf (aus dem Paket coreutils) und Unsort (aus dem gleichnamigen Paket) erzeugen eine zufällige Folge („shuffle“) von Zahlen oder Zeilen. Der erste Aufruf in Listing 12 demonstriert das mithilfe des Schalters ‑i (‑‑input‑range) für die Zahlen von 1 bis 5.

Shuf kann aber noch mehr: Mit dem Schalter ‑n (‑‑head‑lines) begrenzen Sie die Ausgabe auf die angegebene Anzahl. Damit gelingt dann so etwas wie „5 aus 25“ (zweiter Aufruf).

Wie eingangs erwähnt, klappt das nicht nur mit Zahlen, sondern auch mit Zeilen aus einer Datei oder als Ergebnis eines Kommandos, etwa von Audiodateien. Listing 13 zeigt Unsort in Kombination mit Find, Xargs und Cvlc (der Kommandozeilenschnittstelle des Mediaplayers VLC). Find durchstöbert Ihre Audiodateien, Unsort würfelt deren Reihenfolge durcheinander, und Xargs . ruft den Player Cvlc mit jeder einzelnen gefundenen Datei auf. Somit erreichen Sie ohne viel Aufwand einen perfekten Mix.

Der Hauptunterschied zwischen Shuf und Unsort liegt darin, dass nur Shuf Zahlenreihen generieren kann. Unsort vermag dafür aber auf mehr als einer Datei zu operieren und erlaubt es zudem, den verwendeten Zufallsmodus genauer einzustellen.

Expand / Unexpand

Das Kommando Expand liest Textdateien und expandiert jedes vorkommende Tabulatorzeichen. Dafür nutzt es eine entsprechende Anzahl von Leerzeichen. Unexpand bewirkt das Gegenteil: Es ersetzt eine angegebene Anzahl von Leerzeichen jeweils durch einen Tabulator.

Die beiden Kommandos aus dem Paket coreutils kommen ins Spiel, wenn Sie Daten austauschen und auf verschiedenen Systemen verarbeiten möchten, da die Anzahl der Leerzeichen pro Tabulator nicht überall gleich ist und viele Programme das eigenständig handhaben.

Expand und Unexpand nutzen in der Standardeinstellung 8 Zeichen pro Tabulator. Listing 14 zeigt zuerst die Originaldatei und darunter den Aufruf von Expand. Die Angabe ‑t 10 sorgt für eine Tabulatorbreite von 10 Zeichen.

Numfmt

Immer wieder tauchen im Alltag Zahlenwerte auf, die man in unterschiedliche Darstellungen umwandeln muss - im einfachen Fall in eine für den Menschen gut lesbare Form („human readable“).

Das Werkzeug Numfmt aus dem Paket coreutils leistet das und kann insbesondere zwischen der SI- und der IEC-Darstellung umrechnen, also zwischen der Basis 1000 und der Basis 1024. Einige Beispiele dazu zeigt die Tabelle Numfmt: Umwandlungen. Die Konvertierung umfasst gegebenenfalls auch die landesbeziehungsweise sprachspezifischen Trennzeichen für die Tausender: Numfmt setzt hier je nach der locale-Einstellung des Systems Punkte oder Kommas.

Zu den nützlichen Schaltern zählen etwa ‑‑header für eine Kopfzeile, die Numfmt dann nicht verändert, und ‑‑field=Zahl, was die Umwandlung auf die angegebene Spalte begrenzt. Listing 15 demonstriert das für einen zweizeiligen Tabellenkopf und eine Konversion nur in der zweiten Spalte.

Fazit

Die hier vorgestellten Werkzeuge schließen Lücken, die die bekannteren Werkzeuge lassen, und ergänzen die klassischen Tools auf nützliche Weise. Damit erleichtern sie die Alltagsarbeit auf der Kommandozeile und beim Skripting in vielen Fällen ganz erheblich. (jlu)

Weitere Infos und interessante Links

www. linux‑user. de/ sh/ 44198

Die Autoren

Der digitale Nomade Frank Hofmann agiert bevorzugt von Berlin, Genf und Kapstadt aus als Entwickler, LPI-zertifizierter Trainer und Autor. Der Linux-Sysadmin und Spezialist für Netzwerksicherheit Axel Beckert arbeitet bei den Informatikdiensten der ETH und engagiert sich ehrenamtlich bei Debian sowie in diversen Open-Source-Projekten. Beide haben zusammen das Debian-Paketmanagement-Buch (http:// www. dpmb. org) verfasst.