Linux-Befehle mit Operatoren verknüpfen

Konsolenbefehle kann man in Linux mit Operatoren verknüpfen, um ihre Funktionen miteinander zu kombinieren. Die rudimentärsten Möglichkeiten dürften auch dem durchschnittlichen Windows-Administrator geläufig sein, doch die Linux-Konsole ermöglicht noch vieles mehr.

Diese Seite basiert auf der geläufigsten Konsole BASH; die Operationen sind zwar allgemein gültig, jedoch kann es bei der einen oder anderen Konsole zu Abweichungen kommen.

Das Semikolon (;) – Befehle nacheinander ausführen

Befehle können unabhängig voneinander einer nach dem anderen ausgeführt werden – quasi ein kleines Script. Dazu werden sie einfach mit Semikolon getrennt nacheinander aufgelistet. Es erfolgt keine Informationsübergabe zwischen den einzelnen Anweisungen. Es wird jeder Befehl ausgeführt, unabhängig vom Ergebnis des jeweiligen Vorgängers.

Ein Beispiel ist das Löschen des Bildschirms bevor ein Befehl mit großer Ausgabe ausgeführt wird:

clear; iptables -L

Der Backslash (\) – Zeilenumbrüche für lange Befehle

Wer lange Befehle schreibt, kann schnell den Überblick verlieren. Der Backslash ermöglicht das Einbauen von Zeilenumbrüchen. Am vorherigen Bespiel gezeigt sieht das so aus:

clear; \
iptables -L

Der einfache Ampersant (&) – Befehle im Hintergrund ausführen

Manchen zeitlich sehr aufwändigen Befehl Befehl möchte man im Hintergrund ausführen um währenddessen weiterarbeiten zu können. Indem man einen einfachen Ampersanten hinter den Befehl setzt signalisiert man Linux genau diesen Wunsch. Außerdem kann der Ampersant genutzt werden, um einen Daemon (ständig laufender Dienst) zu starten, der so lange aktiv bleibt wie das System läuft.

Als Beispiel sei das Löschen eines riesigen Verzeichnisses genannt, auf dessen Abschluss man nicht warten möchte:

rm -r /home/heikorichter/big-data-directry &

Alternativ wird z.B. ein Daemon so gestartet:

/usr/local/bin/my-daemon-executable &

Die einfache Pipe (|) – Übergabe der Ausgabe eines Befehls an den nächsten

Durch die einfache Pipe kann die Ausgabe eines Befehls direkt an einen anderen übergeben werden, der sie weiterverarbeitet.

Das ist z.B. sehr nützlich, um mit dem Befehl less durch eine mehrseitige Bildschirmausgabe navigieren zu können – etwa durch die letzten 1000 Zeilen des Systemlogs:

tail -n 1000 /var/log/syslog | less

Außerdem wird die Pipe häufig mehrfach hintereinander eingesetzt. Beispielsweise wird hier im gesamten Systemlog nach Einträgen des Cron-Dienstes gesucht und die werden dann mit less vernünftig dargestellt:

cat /var/log/syslog | gerp cron | less

Der doppelte Ampersant (&&) – UND-Verknüpfung für Befehle

Der Doppelte Ampersant ermöglicht eine UND-Verknüpfung für Befehle. Der linke Befehl wird als erstes ausgeführt; der rechte Befehl folgt im Anschluss – aber nur dann, wenn es bei der Ausführung des linken Befehls nicht zu Fehlern kam.

Beispielsweise kann man bei Debian das Update des Paketarchivs und das Upgrade aller installierten Pakete sinnvoll miteinander verknüpfen. Dieser Befehl entfernt im Anschluss sogar noch die nicht mehr benötigten Abhängigkeiten:

apt-get update && \
apt-get -y dist-upgrade && \
apt-get -y autoremove --purge

Doppelte Pipe (||) – ODER-Verknüpfung für Befehle

Die Verknüpfung zweier Befehle durch eine doppelte Pipe sorgt dafür, dass der rechte Befehl nur dann ausgeführt wird, wenn der linke Befehl fehlschlägt – d.h. wenn sein Rückgabecode nicht 0 ist.

Das kann z.B. genutzt werden, um einem Nutzer spezielle Fehlermeldungen zu präsentieren:

ls /dev || echo "Sie haben keinen Zugriff auf /dev"

Das Größer-Zeichen (>) – Umleitung der Ausgabe in Dateien

Mit dem Größer-Zeichen kann die Gesamte Ausgabe in eine Datei umgeleitet werden. Beispielsweise die Übersicht eines Verzeichnisses:

ls /dev >devices.txt

Zu beachten ist, dass nur die “normale Ausgabe” (stdout) umgeleitet wird; Fehler werden weiterhin auf der Konsole ausgegeben. Hat im obigen Beispiel der Benutzer keinen Zugriff auf das Verzeichnis /dev, bleibt die Ausgabedatei leer und er erhält eine Fehlermeldung auf dem Bildschirm.

Will man auch Fehlermeldungen umleiten geht das so:

ls /dev >devices.txt 2>errors.txt

Natürlich können beide Dateien auch identisch sein. Genauso kann man auch nur die Fehler umleiten, sodass der Benutzer nur die reguläre Ausgabe zu Gesicht bekommt:

ls /dev 2>/dev/null

Das Kleiner-Zeichen (<) – Dateien an Befehle übergeben

Das Kleiner-Zeichen macht genau das Gegenteil. Es übergibt den Inhalt einer Datei so an einen Befehl, als wäre er über die Tastatur eingegeben worden (stdin).

Beispielsweise wird hier ein Backup aus einer Datei zur Wiederherstellung an MySQL übergeben:

mysql < backup.sql

Accent grave (“) – Ausgabe eines Befehls weiterverwenden

Schießt man einen Befehl in den Accent grave ein, kann seine Ausgabe in der Befehlszeile weiterverwendet werden.

Beispielsweise um in einem Script den Hostnamen des Systems in einer Variable zu speichern:

HOST=`hostname`

Genauso kann man natürlich auch die Rückgabe in einen Befehl einbauen; z.B. um ein neues Verzeichnis nach dem aktuellen Datum zu benennen

mkdir `date +%Y%m%d`

 

Leave a Reply

Your email address will not be published. Required fields are marked *