Titel: EasyLinux 02/2004: Pipes
Pfad: http://www.easylinux.de/Artikel/ausgabe/2004/02/080-pipes/index_html


Pipes und Umlenkung in der Shell

Röhrenbauer

von Elisabeth Bauer


Mit Pipes und Umlenkungen steuern Sie den Datenfluss in der Shell. Sie bestimmen, wo die Ausgabe hin soll: in eine Textdatei oder doch lieber zu einem anderen Kommando, das sie weiterverarbeitet?

Fragt man Linux-Gurus nach ihrem Lieblings-Feature in der Shell, wird man 100 verschiedene Antworten erhalten. Auf zwei jedoch kann so gut wie niemand verzichten: Umlenkungen und Pipes. Diese beiden machen die Shell zum Baukasten. So lassen sich fast beliebig Kommandos hintereinander schalten, das zweite übernimmt die Ausgaben des ersten und verarbeitet sie weiter.

Ausgabe umlenken

Haben Sie schon einmal Ausgaben in der Shell markiert und in ein Textdokument kopiert, um sie abzuspeichern? Mit der Ausgabeumleitung erledigen Sie das bequemer. Das Größerzeichen (>) weist die Shell an, die Ausgabe statt in Ihr Terminal-Fenster in eine Datei zu schreiben. Wer sich beispielsweise eine Liste aller installierten Software-Pakete anlegen will, erledigt das elegant mit dem Befehl

rpm -qa > pakete

rpm ist das Paketverwaltungskommando, mit dem Sie unter anderem Pakete auf der Shell einspielen können. Hier weisen Sie es mit den Parametern q (für "query", Suche) und a (für "all") an, alle Pakete in seiner Datenbank zu suchen. Mit > pakete legen Sie die Liste an.

Wer das Ganze mit dem Suchbefehl find ausprobiert, etwa find / -name "kde*" > liste, um alle Verzeichnisse und Dateien auf der Festplatte aufzulisten, die mit kde beginnen, wird sich wundern, dass die Shell trotzdem etwas ausgibt: Fehlermeldungen, dass sie auf manche Verzeichnisse nicht zugreifen konnte. Diese Meldungen landen nicht in der Liste. Das liegt daran, dass die Shell neben der so genannten Standardausgabe noch einen zweiten, für Fehlermeldungen reservierten Ausgabekanal besitzt. Auch diesen Kanal können Sie natürlich in eine Datei umlenken. Dazu stellen Sie eine 2 vor das Umlenkungszeichen. find / -name "kde*" > liste 2> fehler schreibt die Fehlermeldungen in die Datei fehler und die Treffer in liste.

Wenn Sie schon im Voraus wissen, dass ein Kommando Fehlermeldungen ausgibt und diese gar nicht sehr sehen wollen, schicken Sie die Daten ins Nirvana der Shell, nach /dev/null: find / -name "kde*" > liste 2> /dev/null. Um Fehler und normale Ausgaben komplett in eine Datei zu lenken, verwendet man die Zeichen >&: find / -name "kde*" >& komplett.

Eingabe umlenken

Genauso wie sich die Ausgabe der Shell beliebig in eine Datei umlenken lässt, übergeben Sie ihr Dateiinhalte als Eingabe mit dem Kleinerzeichen (<). Früher war diese Funktion wichtig, um ein Kommando mit Daten zu füttern, doch heute verstehen die meisten Kommandos Dateinamen als Argumente, so dass die Eingabeumlenkung fast nicht mehr gebraucht wird und wir sie nur der Vollständigkeit halber hier erwähnen. Ausprobieren lässt sie sich zum Beispiel mit dem Textsuchbefehl grep:

grep suchbegriff < datei

macht das gleiche wie

grep suchbegriff datei

Es gibt alle Zeilen der Datei, in denen der Suchbegriff vorkommt, aus -- mit der Ausgabeumlenkung lässt sich das natürlich gleich wieder eine neue Datei leiten: grep suchbegriff < datei > ergebnis.

Rohrbauer

Wesentlich öfter als die Eingabeumlenkung nutzen Shell-Gurus einen dritten Operator der Shell, die so genannte Pipe, zu deutsch Röhre. Das Zeichen für die Pipe, einen senkrechten Strich (|), erreichen Sie über die Tastenkombination [AltGr-<]. Pipes leiten die Ausgabe der Shell nicht in eine Datei um, sondern reichen sie an ein anderes Kommando weiter. Damit lassen sich dann regelrechte Ketten von Kommandos aufbauen. Häufig benutzt werden Pipes, wenn die Ausgabe der Shell zu lang für eine Bildschirmseite ist. Statt nun mühselig hochzuscrollen, "pipen" Sie die Ausgabe in den Pager less:

rpm -qa | less

Damit lässt sich nun gemütlich in der Liste mit der Leer- und den Pfeiltasten blättern oder scrollen, mit /suchbegriff starten Sie eine Suche. n springt zum nächsten Vorkommen. Mit q beenden Sie less.

Tee kochen

Bleibt ein letzter Fall zu klären: Wie lenken Sie Ausgaben in eine Datei um und geben sie gleichzeitig in der Shell aus? Für eine solche magische Ausgabenverdopplung besitzt Linux das Kommando tee.

ls -l | tee liste

Die Ausgabe von ls -l mit dem Inhalt der aktuellen Verzeichnisses wird hier mit der Pipe (|) an tee weitergereicht. tee gibt es in die Shell aus und schreibt es zusätzlich in die Datei liste. (eba)

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.


Feedback zu dieser Seite | Datenschutz | © 2017 COMPUTEC MEDIA GmbH | Last modified: 2007-01-25 16:53