titel_umleitung.png

Zu Befehl: Kanäle, Pipes und Tee

Umleitung

Mit wenigen Handgriffen leiten Sie auf der Kommandozeile Ein- und Ausgaben von Befehlen um und kombinieren Kommandos. Wir stellen die benötigten Bash-Operatoren vor und zeigen, wie Sie mit dem Programm tee noch einen Zwischenschritt einlegen.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

"Zu Befehl" stellt seit Jahren regelmäßig Shell-Kommandos vor und verrät Tricks und Kniffe, mit denen Sie Programme geschickt kombinieren. Dabei kommen immer wieder ganz selbstverständlich Umleitungsoperatoren zum Einsatz. Was genau dahinter steckt und was Sie alles umleiten können, erfahren Sie in dieser "Zu Befehl"-Folge.

Drei Kanäle

Für die Ein- und Ausgaben von Programmen gibt es drei "Standardkanäle": Laufende Programme erwarten ihren Input von der Standardeingabe (stdin), z. B. über die Tastatur. Normale Ausgaben schicken Programme auf die Standardausgabe (stdout), das ist in der Regel das Terminal-Fenster, in dem Sie das Programm gestartet haben. Zusätzlich gibt es eine Standardfehlerausgabe (stderr), die meist am gleichen Ort erscheint: Hier finden Sie eventuelle Fehlermeldungen des Befehls mit Hinweisen, die zur Problemlösung führen können. Zur Kennzeichnung der drei Kanäle dienen so genannte File Descriptors, die Standardkanäle werden hier einfach durchgezählt. stdin hat die Nummer 0, stdout die 1 und stderr die 2.

Wie diese drei Kanäle zusammenarbeiten, erkennen Sie schön an einem einfachen Beispiel:

huhn@asteroid:~$ /sbin/fsck /dev/hda7
Do you want to run this program?[N/Yes] : Yes
reiserfsck: Cannot not open filesystem on "/dev/hda7"
Warning… fsck.reiserfs for device /dev/hda7 exited with signal 6.

Im Terminal-Fenster erscheinen die normalen Ausgaben des Programmes, z. B. die Frage, ob das Programm wirklich ausgeführt werden soll. Die Antwort wird aus der Standardeingabe gelesen, das ist hier die Tastatur. Nach dem Bestätigen folgt eine Fehlermeldung, da die nötigen Root-Rechte fehlen. Diese Fehlermeldung gibt reiserfsck über die Standardfehlerausgabe aus.

Ein übersichtlicheres Beispiel ist der folgende grep-Aufruf:

huhn@asteroid:~$ grep bla *
datei1:bla
datei2:bla bla
grep: verz: Is a directory

Das Kommando grep sucht hier in allen Dateien nach dem Wort "bla". In datei1 und datei2 wird es fündig, bei verz beschwert es sich darüber, dass verz ein Verzeichnis und keine Datei ist. (Neuere grep-Versionen ignorieren Verzeichnisse klaglos, aber das im Test benutzte grep 2.4.2 von Debian Linux akzeptiert keine Verzeichnisse.)

In welche Richtung?

Woher ein Befehl seine Eingaben bezieht und wohin er seine Ausgaben schreibt, ist dem Programm egal. Mit speziellen Operatoren geben Sie den Standardkanälen eine neue Ausrichtung. Wollen Sie zum Beispiel die Standardausgabe nicht auf der Konsole sehen, verwenden Sie den Operator >:

huhn@asteroid:~$ grep bla * > grep_ergebnis
grep: verz: Is a directory

Statt des einfachen Operators > könnten Sie hier auch 1> schreiben – die Standardausgabe ist ja mit dem File Descriptor 1 belegt. Wird die 1 weggelassen, ist automatisch stdout gemeint. Während das Ergebnis des grep-Aufrufs in der Datei grep_ergebnis landet, erscheinen Fehlermeldungen weiterhin auf der aktiven Konsole. Wer also lieber die Standardfehlerausgabe umleitet und die Standardausgabe sehen möchte, verwendet statt dessen den Operator 2>:

huhn@asteroid:~$ grep bla * 2> grep_fehler
datei1:bla
datei2:bla bla

Interessiert die Fehlerausgabe eines Programmes nicht, können Sie diese statt in eine Datei auch nach /dev/null umleiten – diese "Pseudo-Datei" besitzt keinen Inhalt; alle Daten, die Sie auf dieses Gerät schreiben, werden ignoriert. Unerwünschte Fehlermeldungen lassen sich so geschickt aus der Welt schaffen:

grep bla * 2> /dev/null

Der >-Operator leitet nicht nur einfach um – er legt die danach genannte Datei an oder überschreibt sie, falls sie schon existiert. Sie können daher als Alternative das doppelte Größerzeichen >> verwenden: Gibt es die Zieldatei noch nicht, wird sie angelegt; besteht sie hingegen schon, werden die Ausgaben einfach angehängt.

Wer Standardausgabe und Standardfehlerausgabe gemeinsam in eine einzige Datei umleiten möchte, benutzt den Operator >&:

grep bla * >& grep_ergebnis

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Zu Befehl: Suchen mit grep, egrep, fgrep, (b)zgrep
    Für die Suche nach Wörtern und Ausdrücken in Textdateien bieten sich die Kommandos der grep-Familie an. Als Ergebnis zeigen sie wahlweise die gefundenen Zeilen, die Namen der Dateien, in denen das Suchmuster vorkommt, oder die Anzahl der Treffer an.
  • Zu Befehl: date & cal
    Die Kommandozeilen-Tools cal und date erzeugen Kalender und bearbeiten Datum und Uhrzeit. Wenn man sie geschickt einsetzt, kann man daraus zum Beispiel eine kleine Geburtstagsverwaltung machen.
  • Zu Befehl
    MP3s hören, in wav-Dateien umwandeln, Playlists abspielen, mit Shell-Skripten zusammenarbeiten – das alles und noch viel mehr kann das Programm mpg123. Bringen Sie Ihre Kommandozeile zum Singen!
  • sed
    Der Stream-Editor sed hilft beim automatischen Verändern einer oder mehrerer Dateien, vereinfacht sich wiederholende Änderungen oder erstellt gleich ganze Konvertierungsprogramme. Monotone Aufgaben der Textverarbeitung lassen sich so im Handumdrehen lösen.
  • Sortiert und zugenäht
    Mit dem Kommando sort sortieren Sie Zeilen in Dateien oder aus der Standardeingabe. Als reines Sortierprogramm konzipiert, arbeitet das Tool oft mit anderen Programmen auf der Kommandozeile zusammen.
Kommentare

Infos zur Publikation

LU 05/2017: Linux unterwegs

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Knoppix-Live-CD (8.0 LU-Edition) im Uefiboot?
Thomas Weiss, 26.04.2017 20:38, 0 Antworten
Hallo, Da mein Rechner unter Windows 8.1/64Bit ein Soundproblem hat und ich abklären wollte, o...
Grub2 reparieren
Brain Stuff, 26.04.2017 02:04, 5 Antworten
Ein Windows Update hat mir Grub zerschossen ... der Computer startet nicht mehr mit Grub, sondern...
Linux open suse 2,8
Wolfgang Gerhard Zeidler, 18.04.2017 09:17, 2 Antworten
Hallo.bitte um Hilfe bei. Code fuer den Rescue-login open suse2.8 Mfg Yvo
grep und sed , gleicher Regulärer Ausdruck , sed mit falschem Ergebnis.
Josef Federl, 15.04.2017 00:23, 1 Antworten
Daten: dlfkjgkldgjldfgl55.55klsdjfl jfjfjfj8.22fdgddfg {"id":"1","name":"Phase L1","unit":"A",...
IP Cams aufzeichnen?
Bibliothek der Technischen Hochschule Mittelhessen / Giessen, 07.04.2017 09:25, 7 Antworten
Hallo, da nun des öfteren bei uns in der Nachbarschaft eingebrochen wird, würde ich gern mein...