2002032

Clevere Kommandos für den Linux-Alltag

08.01.2015 | 13:09 Uhr |

Hier geht es um Hilfestellungen in der Shell mit cleveren Befehlen, die alltägliche Aufgaben besser meistern: Atool ist ein intelligenter (Ent-)Packer, und Grep arbeitet genauer mit logischen Operatoren.

Packer und Archivdateien - Alle Archivdateien im Verzeichnis entpacken

Einige Aufgaben für die Kommandozeile, die zunächst trivial erscheinen, sind im Detail dann doch etwas anspruchsvoller. Besonders der Umgang mit Platzhaltern wie dem Asterisk (*) sorgt immer wieder für Probleme, da verschiedene Befehle und Kommandozeilen-Tools unterschiedlich darauf reagieren.

Berüchtigt für ihre abweichende Interpretation vom Platzhalter * sind Packprogramme. Die verbreitetsten Archiv-Formate sind zip, tar.gz und das verwandte tar.bz2. Die dafür zuständigen Entpacker unzip und tar haben ihre eigene Vorstellung davon, wie sie den Asterisk interpretieren sollen. Klassische Unix-Befehle wie tar ignorieren diesen Platzhalter und überlassen es der Shell, unter Linux also dem Bash-Befehlsinterpreter, daraus eine Dateiliste zu machen. Die Liste eignet sich dann aber nicht für alle tar-Befehle. Es lassen sich mit dem naheliegenden, aber unzureichenden Kommando tar -xzvf *.tar.gz beispielsweise nicht einfach alle tar.gz-Dateien im aktuellen Verzeichnis entpacken. Denn tar entpackt aus historischen Gründen immer nur eine Datei auf einmal. Der korrekte Befehl zum Entpacken aller tar.gz-Dateien im Verzeichnis wäre also eine for-Schleife in der Shell, die jede einzelne Datei nacheinander an tar übermittelt:

for f in *.tar.gz; do tar -xzvf $f; done

Für Archive von tar.bz2 sieht die gleiche Aktion so aus:

for f in *.tar.bz2; do tar -xjvf $f; done

Nun sind Loops wie diese bei der Eingabe nicht angenehm, aber man könnte sich daran gewöhnen, wenn die Syntax für alle Packprogramme wenigstens identisch wäre. Dann aber kommt unzip ins Spiel, ein Programm, das neuer ist als tar und über mehr Eigenintelligenz verfügt, um mit Platzhaltern umzugehen. Der Befehl zum Entpacken aller zip-Dateien im Verzeichnis lautet deshalb schlicht

unzip \*.zip

Der Backslash vor dem Asterisk macht der Bash-Shell hier deutlich, dass es dieses Zeichen unverändert an unzip durchreichen soll.

Dieses völlig unterschiedliche Verhalten von Befehlen, die Ähnliches tun, wäre sehr unerfreulich, verwirrend und eher ein Argument gegen die Verwendung der Kommandozeile, wenn nicht längst ein findiger Entwickler eine Lösung für diese Probleme ausgearbeitet hätte. Das Programm mit dem schlichten Namen Atool sorgt für eine identische Syntax für alle gebräuchlichen Entpacker. Es ist in den Standard-Paketquellen aller größeren Linux-Distributionen vorhanden und in Debian/Ubuntu mit dem Befehl

sudo apt-get install atool

sowie in Fedora mit

sudo yum install atool

schnell installiert. Auch Anwender von Open Suse bleiben nicht unversorgt und finden fertige RPM-Pakete im Build-Service unter https://build.opensuse.org/package/show/Archiving/atool . Atool lässt sich durch Parameter steuern, bringt aber zusätzlich für die wichtigsten Aufgaben optionale Unterbefehle wie „aunpack“ mit, die besonders einfach sind. Mit

aunpack -e *.[Archivtyp]

packt Atool alle Archivdateien vom angegebenen Typ aus, egal ob es sich dabei um zip , tar.gz, tar.bz2 oder exotischere Formate wie lzma oder 7z handelt. Dabei überschreibt Atool keine bereits vorhandenen Dateien mit gleichem Namen, da jedes Archiv sein eigenes Unterverzeichnis bekommt.

Zugriffsrechte in Dateilisten - Oktale Berechtigungen anzeigen

In Linux ist es wie in anderen Unix-ähnliches Systemen üblich, dass Zugriffsrechte für Dateien und Verzeichnisse in oktaler Schreibweise notiert werden.

Dateilisten mit oktalen Rechten: Der Befehl ls -l zeigt die Zugriffsrechte nicht im handlichen Oktal-Format an. Mit dem Kommando stat geht es aber trotzdem.
Vergrößern Dateilisten mit oktalen Rechten: Der Befehl ls -l zeigt die Zugriffsrechte nicht im handlichen Oktal-Format an. Mit dem Kommando stat geht es aber trotzdem.

Ist diese Hürde zum Verständnis von Zugriffsrechten erst mal genommen, dann verraten Werte wie 664 sofort alle Berechtigungen, in diesem Fall also Lese- und Schreibzugriff für Besitzer und Gruppe und für alle anderen nur Leserechte.

Ein anderes Darstellungsformat bevorzugt aber ausgerechnet das Kommando „ls -l“ zum Auflisten von Verzeichnisinhalten. Hier sind die Zugriffsrechte in Kürzeln aufgelistet, etwa „-rw-rw-r“ für die oktalen Rechte 664. Wer die oktale Schreibweise bevorzugt, kann sich diese mit einem selbst gebauten ls-Befehl auch in Dateilisten in der Kommandozeile anzeigen lassen. Der Schlüssel dazu ist das Kommando stat , das alle möglichen Datei und Verzeichniseigenschaften zu berichten weiß. Eine ganz einfache Ausgabe liefert so beispielsweise dieser Befehl:

stat -c '%a %U %G %s %n' *

Der zeigt am Anfang jeder Zeile die oktalen Zugriffsrechte, gefolgt vom Namen des Besitzers, der Gruppe, der Dateigröße und schließlich dem Dateinamen. Ein wenig Experimentieren bringt die Ausgabe von stat noch besser in Form, damit sie dem Befehl ls -l ähnlicher wird:

stat --printf="%a %h %U %G %s\t%.19y %n\n" *

Um versteckte Dateien und Verzeichnisse anzuzeigen, ist es lediglich nötig, den Asterisk gegen „.*“ auszutauschen – also mit führendem Punkt. Natürlich sind diese Kommandos zu kompliziert, um sie bei Bedarf immer wieder einzugeben. Eine Alias-Definition ist hier das bewährte Rezept, um das Kommando auf ein knappes Befehlskürzel wie etwa lso zu legen. Bearbeiten Sie dazu die Datei „.bashrc“ im Home- Verzeichnis mit einem Texteditor, und geben Sie in dieser Datei die zusätzliche Zeile

 alias lso='stat --printf="%a %h %U %G %s\t%.19y %n\n" *' 

ein. Beim nächsten Öffnen einer Shell steht das Alias „lso“ zur Verfügung.

Volltextsuche in Dateien - Grep mit logischen Operatoren

Grep ist schlicht das ultimative Tool, um in Textdateien aller Art, in Konfigurationsdateien oder in Textausgaben von Programmen eine bestimmte Stelle zu finden. Die Suche eines einfachen Grep-Befehls ist aber oft nicht präzise genug. Deshalb gibt es hier logische Operatoren zur Verknüpfung mehrerer Suchbegriffe.

Eine Oder-Verknüpfung mit Grep: Dieser Befehl zeigt alle Zeilen an, die „Tee“ oder „Kaffee“ enthalten. Die Auswertungsreihenfolge der angegebenen Begriffe ist in diesem Fall egal.
Vergrößern Eine Oder-Verknüpfung mit Grep: Dieser Befehl zeigt alle Zeilen an, die „Tee“ oder „Kaffee“ enthalten. Die Auswertungsreihenfolge der angegebenen Begriffe ist in diesem Fall egal.

Ohne Abtauchen in die Untiefen regulärer Ausdrücke fördern schon einfache logische Verknüpfungen wie „oder“, „und“ sowie „und nicht“ deutlich bessere Ergebnisse mit Grep zutage. Wenn alle Zeilen gesucht sind, die entweder das Wort „Tee“ oder das Wort „Kaffee“ enthalten, dann hilft diese einfache Oder-Bedingung:

grep 'Tee\|Kaffee' *.txt

Nicht viel aufwendiger sind Und-Verknüpfungen: Angenommen, Sie suchen in einer Textdatei nur jene Zeilen, die sowohl den Begriff „Tee“ als auch „Kaffee“ enthalten, so können Sie beide Begriffe wie folgt mit einem „und“ verbinden:

grep -E 'Tee.*Kaffee|Kaffee.*Tee'*.txt

Bei dieser Methode ist es übrigens egal, ob zuerst „Kaffee“ oder „Tee“ in einer Zeile vorkommt. Nicht ganz so elegant sind dagegen Negationen. Zwar kann der Parameter „-v“ jedes Suchmuster von Grep in sein Gegenteil umkehren, aber für verknüpfte Negativ-Operatoren gibt es keine handliche Syntax. Am einfachsten ist es deshalb, zwei Grep-Befehle in der Shell hintereinander zu aufzureihen. Der Befehl

grep 'Tee' *.txt | grep -v Kaffee

findet alle Zeilen, die das Wort „Tee“ enthalten, jedoch nicht auch noch „Kaffee“.

Verbindungstests - MTR kombiniert Traceroute und Ping

Wenn die Verbindung zu einem Server im Internet hakt, ist Traceroute die erste Wahl, um die Verbindung zwischen dem eigenen Rechner und dem Zielserver zu verfolgen. Der Befehl traceroute [Servername] listet alle Zwischenstationen (Hops) mit jeweiligen Antwortzeiten auf. Der Nachteil von Traceroute ist, dass es sich immer nur um eine Momentaufnahme handelt.

Ablaufverfolgung von Paketen: Das Tool MTR ist ein verbessertes Traceroute, das beständig die Antwortzeiten der Zwischenstationen aufzeichnet und damit hilft, Netzwerkprobleme über einen längeren Zeitraum zu analysieren.
Vergrößern Ablaufverfolgung von Paketen: Das Tool MTR ist ein verbessertes Traceroute, das beständig die Antwortzeiten der Zwischenstationen aufzeichnet und damit hilft, Netzwerkprobleme über einen längeren Zeitraum zu analysieren.

Das Kommandozeilen-Tool MTR, kurz für „My Traceroute“, ist ein mächtiger Ersatz zur Ablaufverfolgung der Netzwerkpakete zum Zielserver. Es steht in den Paketquellen von Debian, Ubuntu, Fedora, Open Suse und anderen Distributionen zur Installation bereit und ist beispielsweise in Ubuntu mit sudo apt-get install mtr schnell installiert. Der Aufruf erfolgt mit

mtr [Servername]

und das Tool arbeitet dann bis zum Druck der Q-Taste, um die Antwortzeiten der Hops (Zwischenstationen) stetig zu aktualisieren.

Paketmanager von Debian/Ubuntu/Mint - APT mit Fortschrittsanzeige

Der Paketmanager APT (Advanced Packaging Tool) für das DEB-Format ist eine der großen Errungenschaften von Debian. Als eine der ersten Distributionen bekam Debian damit ein solides Werkzeug für die Suche und Installation von Paketen aus Online-Repositories, mit einer kompletten Auflösung der Paket-Abhängigkeiten.

Wie lange dauert das noch? Der Paketmanager APT ließ bisher im Dunklen, wie lange die Installation dauert. Neue APT-Versionen zeigen auf Wunsch eine Fortschrittsanzeige.
Vergrößern Wie lange dauert das noch? Der Paketmanager APT ließ bisher im Dunklen, wie lange die Installation dauert. Neue APT-Versionen zeigen auf Wunsch eine Fortschrittsanzeige.

Mittlerweile ist APT nach 15 Jahren Entwicklungszeit so weit gediehen, dass es sogar nach den strikten Maßstäben der Debian-Entwickler als stabil gilt und sich mit der Versionsnummer 1.0 schmücken darf. Diese bringt unter anderem eine nützliche Fortschrittsanzeige für apt-get im Terminal-Fenster mit.

apt-get in der Kommandozeile ist den grafischen Front-Ends wie Synaptic und dem schwerfälligen Ubuntu Software Center durch seine Geschwindigkeit und Transparenz überlegen, da es alle Schritte vom Download eines Pakets bis zur Installation im Klartext anzeigt. Etwas mehr Komfort bekommt apt-get jetzt auch noch in Form einer neuen Statusleiste im Terminal, die bei Updates den Gesamtfortschritt anzeigt. Diese nette Ergänzung wird von den APT-Versionen in Ubuntu 14.04 LTS und Linux Mint 17 unterstützt, allerdings noch nicht in Debian 7. Im neuen Ubuntu und Mint schaltet der folgende Befehl die Fortschrittsanzeige ein:

echo 'Dpkg::Progress-Fancy ″1″;' | sudo tee -a /etc/apt/apt.conf.d/99progressbar

Das Kommando ergänzt die Konfiguration von APT mit der Datei „/etc/apt/apt.conf.d/99progressbar“, die den Parameter 'Dpkg::Progress-Fancy ″1″;' enthält. Die Einstellung gilt ab dem nächsten Aufruf von apt-get.

0 Kommentare zu diesem Artikel
2002032