Home / LinuxUser / 2004 / 06 / Zu Befehl: Kanäle, Pipes und Tee

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Eingedost
(161 Punkte bei 4 Stimmen)
Aufteiler
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

titel_umleitung.png

Umleitung

Zu Befehl: Kanäle, Pipes und Tee

01.06.2004 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
Tip a friend    Druckansicht Bookmark and Share
Kommentare

1934 Hits
Wertung: 89 Punkte (7 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 05/2014

Aktuelle Ausgabe kaufen:

Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Bilder vergleichen mit diffimg
Bilder vergleichen mit diffimg
Tim Schürmann, 01.04.2014 12:40, 1 Kommentare

Das kleine Werkzeug diffimg kann zwei (scheinbar) identische Bilder miteinander vergleichen und die Unterschiede optisch hervorheben. Damit lassen sich nicht nur Rätsel a la „Orignial und Fäls...

Aktuelle Fragen

programm suche
Hans-Joachim Köpke, 13.04.2014 10:43, 8 Antworten
suche noch programme die zu windows gibt, die auch unter linux laufen bzw sich ähneln sozusagen a...
Funknetz (Web-Stick)
Hans-Joachim Köpke, 04.04.2014 07:31, 2 Antworten
Bei Windows7 brauche ich den Stick nur ins USB-Fach schieben dann erkennt Windows7 Automatisch, a...
Ubuntu 13.10 überschreibt immer Windows 8 Bootmanager
Thomas Weiss, 15.03.2014 19:20, 8 Antworten
Hallo Leute, ich hoffe das ich richtig bin. Ich habe einen Dell Insipron 660 Ich möchte gerne Ub...
USB-PTP-Class Kamera wird nicht erkannt (Windows-only)
Wimpy *, 14.03.2014 13:04, 15 Antworten
ich habe meiner Frau eine Digitalkamera, AGFA Optima 103, gekauft und wir sind sehr zufrieden dam...
Treiber
Michael Kristahn, 12.03.2014 08:28, 5 Antworten
Habe mir ein Scanner gebraucht gekauft von Canon CanoScan LiDE 70 kein Treiber wie bekomme ich de...