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: ps, pstree, lsof, kill
    Linux als multitasking-fähiges System besitzt eine leistungsfähige Prozessverwaltung – durch geschickte Ressourcenaufteilung scheinen Programme nicht nur gleichzeitig abzulaufen, es ist auch wesentlich leichter, sich von Prozessen zu trennen, die Probleme verursachen. Wir stellen Kommandos vor, mit denen Sie kurzen Prozess machen.
  • 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.
Kommentare

Infos zur Publikation

LU 08/2016: Multimedia

Digitale Ausgabe: Preis € 5,99
(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

Wie kann man das berichtigen
Udo Muelle, 17.07.2016 20:39, 1 Antworten
Fehlschlag beim Holen von http://extra.linuxmint.com/dists/rosa/main/binary-i386/Packages Hash-S...
Installation Genimotion
Horst Müller, 15.07.2016 17:00, 1 Antworten
Hallo, ich kann Genimotion nicht installieren. Folgende Fehlermeldung habe ich beim Aufruf erh...
Probleme beim Hochfahren der Terastaion 5400 mit Unix-Distrib
Sheldon Cooper, 10.07.2016 09:32, 0 Antworten
Hallo ihr lieben, habe seit zwei Tagen das Problem, das das NAS (Raid5) nicht mehr sauber hoch...
Mit Firewire Videos improtieren?
Werner Hahn, 09.06.2016 11:06, 5 Antworten
Ich besitze den Camcorder Panasonic NV-GS330, bei dem die Videos in guter Qualität nur über den 4...
lidl internetstick für linux mint
rolf meyer, 04.06.2016 14:17, 3 Antworten
hallo zusammen ich benötige eure hilfe habe einen lidl-internetstick möchte ihn auf linux mint i...