|
|
Zeile 1: |
Zeile 1: |
| == Allgemeines ==
| | Allgemeines |
| | | Manchmal kann es vorkommen, dass Sie |
| Manchmal kann es vorkommen, dass Sie die Ausgabe eines Programms direkt mit einem anderen Programm weiterverarbeiten müssen. In diesem Fall können Sie eine | | die Ausgabe eines Programms direkt mit |
| sogenannte Pipe(senkrechter Strich) verwenden. Mit ihrer Hilfe ist das Zwischen- | | einem anderen Programm weiterverarbeite |
| | n müssen. In diesem Fall können Sie eine |
| | sogenannte |
| | Pipe |
| | (senkrechter Strich) verwenden. Mit ihrer Hilfe ist das Zwischen- |
| speichern der Ausgabe des ersten Programms in einer Datei zum Zweck, diese Datei | | speichern der Ausgabe des ersten Programms in einer Datei zum Zweck, diese Datei |
| dann mit dem zweiten Programm wieder einzulesen, unnötig. | | dann mit dem zweiten Programm |
| | wieder einzulesen, unnötig. |
| In einem anderen Fall erzeug | | In einem anderen Fall erzeug |
| t ein Programm vielleicht eine Ausgabe auf dem Bild- | | t ein Programm vielleicht eine Ausgabe auf dem Bild- |
Zeile 12: |
Zeile 17: |
| Wenn ein Programm ausschließlich von | | Wenn ein Programm ausschließlich von |
| der Standardeingabe (normalerweise die | | der Standardeingabe (normalerweise die |
| Tastatur) liest und Sie mit diesem Programmeine Datei einlesen müssen, benötigen | | Tastatur) liest und Sie mit diesem Programm |
| Sie ebenfalls eine Umleitung. Diesmal muss allerdings die Standardeingabe umgelei-tet (Redirect) werden | | eine Datei einlesen müssen, benötigen |
| 103.4 Ströme, Pipes und Umleitungen verwenden
| | Sie ebenfalls eine Umleitung. Diesmal muss |
| tdin, stdout und stderr
| | allerdings die Standardeingabe umgelei- |
| Immer wenn unter Linux ein Programm ausgef
| | tet (Redirect) werden |
| ührt wird, erhält dieses Informatio-
| |
| nen über drei Dateideskriptoren. Dies
| |
| e werden als Standard-I/Os bezeichnet:
| |
| | |
| Standardeingabekanal
| |
| (
| |
| stdin
| |
| ) ist normalerweise die Tastatur. Viele Programme
| |
| erwarten ihre Eingaben von
| |
| stdin
| |
| . Es gibt aber auch, wi
| |
| e Sie schon oft gesehen
| |
| haben, Programme, die stattdessen Date
| |
| ien als Argumente erwarten. Diese Pro-
| |
| gramme verwenden
| |
| stdin
| |
| nicht.
| |
| stdin
| |
| entspricht dem Dateideskriptor 0.
| |
| �
| |
| Standardausgabekanal
| |
| (
| |
| stdout
| |
| ) ist normalerweise ein Terminal. Viele Programme
| |
| machen ihre Ausgaben direkt nach
| |
| stdout
| |
| .
| |
| stdout
| |
| entspricht dem Dateideskriptor 1.
| |
| �
| |
| Standardfehlerkanal
| |
| (
| |
| stderr
| |
| ) ähnelt vom Verhalten her
| |
| stdout
| |
| , enthält aber nur die
| |
| Fehlermeldungen eines Programms. Die Ausgabe des Fehlerkanals erfolgt norma-
| |
| lerweise auch auf dem Terminal.
| |
| stderr
| |
| entspricht dem Dateideskriptor 2.
| |
| Dadurch, dass der Standardau
| |
| sgabekanal und der Standardfehlerkanal getrennt ver-
| |
| waltet werden, ist es möglich, Fehlerme
| |
| ldungen von den normalen Ausgaben eines
| |
| Programms zu trennen. Deshalb können Sie
| |
| den Fehlerkanal z. B. in eine Fehlerpro-
| |
| tokolldatei umlenken.
| |
| Umleitungen (Redirects)
| |
| Umleitungen werden verwendet, um die Standard-I/Os entweder in eine Datei hi-
| |
| nein oder aus einer Datei heraus umzulenk
| |
| en. Das ist z. B. dann erforderlich, wenn
| |
| man einem Programm keine Dateien als
| |
| Argumente übergeben kann. Wenn Sie alle
| |
| Meldungen des Kernels in ei
| |
| ner separaten Datei speicher
| |
| n möchten, können Sie mit-
| |
| tels
| |
| grep
| |
| im
| |
| Syslog
| |
| nach solchen Meldungen suchen
| |
| und diese dann mit einem Redi-
| |
| rektor in eine andere Datei speichern:
| |
| archangel:/diag # grep kernel /var/log/syslog > kernelmessages
| |
| Mit einem solchen Kommando erfassen
| |
| Sie nur die Stan
| |
| dardausgabe von
| |
| grep
| |
| . Tritt
| |
| ein Fehler auf, werden die entsprechend
| |
| en Meldungen weiterhin auf der Konsole
| |
| ausgegeben. Sie können mit einer Komman
| |
| dozeile wie der folgenden Standardmel-
| |
| dungen und Fehlermeldungen in zwei
| |
| unterschiedlichen Dateien aufzeichnen:
| |
| archangel:/scripts # script-xy 2>fehler.log 1>erfolg.log
| |
| Hierbei lenken das Argument
| |
| 1>erfolg.log
| |
| die normalen Meldungen des Pro-
| |
| gramms und
| |
| 2>fehler.log
| |
| die Fehlermeldungen in je eine Datei um. Wenn nur eine
| |
| einzige Datei für die Aufzeichnung sowohl von
| |
| stdout
| |
| als auch
| |
| stderr
| |
| verwendet wer-
| |
| den soll, können Sie auch ein Komm
| |
| ando wie das folgende verwenden:
| |
| archangel:/scripts # script-xy >protokolldatei 2>&1
| |
| Der erste Teil des Kommandos
| |
| script-xy
| |
| >protokolldatei
| |
| sorgt für die Umleitung
| |
| von
| |
| stdout
| |
| in die Textdatei.
| |
| 2>&1
| |
| leitet
| |
| stderr
| |
| auf
| |
| stdout
| |
| um. Das
| |
| &
| |
| besagt, dass
| |
| 1
| |
| keine
| |
| Datei ist. Das Kommando würde ohne das
| |
| &
| |
| den Standardfehlerkanal in die Datei
| |
| 1
| |
| umleiten.
| |
| Wenn Sie einen Standard-I/O umleiten, wi
| |
| rd die Zieldatei, wenn diese noch nicht
| |
| existiert, automatisch erstellt. Sollten Sie
| |
| dieselbe Umleitung noch einmal durchfüh-
| |
| ren, wird die ursprüng
| |
| liche Datei überschrieben. Um Daten an eine bestehende Datei
| |
| anzuhängen, die für Umleitungen verwende
| |
| t wird, müssen Sie ei
| |
| nfach zwei Redirek-
| |
| torzeichen verwenden (
| |
| >>
| |
| ).
| |
| archangel:/diag # grep kernel /var/log/syslog >> kernelmessages
| |
| Wenn Sie nur einen einzelne
| |
| n Redirektor verwenden, wird gleich zu Beginn der Pro-
| |
| grammausführung die Zieldatei erstellt. Ist diese bereits vorhanden, wird sie gelöscht
| |
| und neu erstellt. Sollten also Zieldatei und
| |
| Eingabedatei identisch sein, ist ein Daten-
| |
| verlust garantiert. Das folgende Komman
| |
| do hat demnach eine leere Kundendaten-
| |
| bank zur Folge:
| |
| archangel:/db # grep "Meier" kunden-db > kunden-db
| |
| 103
| |
| GNU- und Unix-Kommandos
| |
| 132
| |
| Umleitungen (Redirects)
| |
| Umleitungen werden verwendet, um die Standard-I/Os entweder in eine Datei hi-
| |
| nein oder aus einer Datei heraus umzulenk
| |
| en. Das ist z. B. dann erforderlich, wenn
| |
| man einem Programm keine Dateien als
| |
| Argumente übergeben kann. Wenn Sie alle
| |
| Meldungen des Kernels in ei
| |
| ner separaten Datei speicher
| |
| n möchten, können Sie mit-
| |
| tels
| |
| grep
| |
| im
| |
| Syslog
| |
| nach solchen Meldungen suchen
| |
| und diese dann mit einem Redi-
| |
| rektor in eine andere Datei speichern:
| |
| archangel:/diag # grep kernel /var/log/syslog > kernelmessages
| |
| Mit einem solchen Kommando erfassen
| |
| Sie nur die Stan
| |
| dardausgabe von
| |
| grep
| |
| . Tritt
| |
| ein Fehler auf, werden die entsprechend
| |
| en Meldungen weiterhin auf der Konsole
| |
| ausgegeben. Sie können mit einer Komman
| |
| dozeile wie der folgenden Standardmel-
| |
| dungen und Fehlermeldungen in zwei
| |
| unterschiedlichen Dateien aufzeichnen:
| |
| archangel:/scripts # script-xy 2>fehler.log 1>erfolg.log
| |
| Hierbei lenken das Argument
| |
| 1>erfolg.log
| |
| die normalen Meldungen des Pro-
| |
| gramms und
| |
| 2>fehler.log
| |
| die Fehlermeldungen in je eine Datei um. Wenn nur eine
| |
| einzige Datei für die Aufzeichnung sowohl von
| |
| stdout
| |
| als auch
| |
| stderr
| |
| verwendet wer-
| |
| den soll, können Sie auch ein Komm
| |
| ando wie das folgende verwenden:
| |
| archangel:/scripts # script-xy >protokolldatei 2>&1
| |
| Der erste Teil des Kommandos
| |
| script-xy
| |
| >protokolldatei
| |
| sorgt für die Umleitung
| |
| von
| |
| stdout
| |
| in die Textdatei.
| |
| 2>&1
| |
| leitet
| |
| stderr
| |
| auf
| |
| stdout
| |
| um. Das
| |
| &
| |
| besagt, dass
| |
| 1
| |
| keine
| |
| Datei ist. Das Kommando würde ohne das
| |
| &
| |
| den Standardfehlerkanal in die Datei
| |
| 1
| |
| umleiten.
| |
| Wenn Sie einen Standard-I/O umleiten, wi
| |
| rd die Zieldatei, wenn diese noch nicht
| |
| existiert, automatisch erstellt. Sollten Sie
| |
| dieselbe Umleitung noch einmal durchfüh-
| |
| ren, wird die ursprüng
| |
| liche Datei überschrieben. Um Daten an eine bestehende Datei
| |
| anzuhängen, die für Umleitungen verwende
| |
| t wird, müssen Sie ei
| |
| nfach zwei Redirek-
| |
| torzeichen verwenden (
| |
| >>
| |
| ).
| |
| archangel:/diag # grep kernel /var/log/syslog >> kernelmessages
| |
| Wenn Sie nur einen einzelne
| |
| n Redirektor verwenden, wird gleich zu Beginn der Pro-
| |
| grammausführung die Zieldatei erstellt. Ist diese bereits vorhanden, wird sie gelöscht
| |
| und neu erstellt. Sollten also Zieldatei und
| |
| Eingabedatei identisch sein, ist ein Daten-
| |
| verlust garantiert. Das folgende Komman
| |
| do hat demnach eine leere Kundendaten-
| |
| bank zur Folge:
| |
| archangel:/db # grep "Meier" kunden-db > kunden-db
| |
| 103.4
| |
| Ströme, Pipes und Umleitungen verwenden
| |
| 133
| |
| Es besteht aber auch die Möglichkeit, de
| |
| n Standardeingabekanal
| |
| umzuleiten. Beliebt
| |
| hierfür ist das Programm
| |
| mail
| |
| . Das folgende Kommando sendet den kompletten
| |
| Sys-
| |
| log
| |
| per Mail an einen kompetenten Mitarbeite
| |
| r. Der Betreff lautet »Überprüfen!« und
| |
| der Inhalt der Datei erscheint im Textkörper der Mail:
| |
| archangel:/ # mail -s "Überprüfen!" willi < /var/log/syslog
| |
| Zusammenfassung:
| |
| �
| |
| Um die Standardausgabe umzulenk
| |
| en, verwenden Sie diese Syntax:
| |
| Kommando
| |
| >
| |
| Zieldatei
| |
| (überschreibend)
| |
| Kommando
| |
| 1>
| |
| Zieldatei
| |
| (überschreibend)
| |
| Kommando
| |
| >>
| |
| Zieldatei
| |
| (anhängend)
| |
| Kommando
| |
| 1>>
| |
| Zieldatei
| |
| (anhängend)
| |
| �
| |
| Um den Standardfehlerkanal umzulenken, verwenden Sie:
| |
| Kommando
| |
| 2>
| |
| Zieldatei
| |
| (überschreibend)
| |
| Kommando
| |
| 2>>
| |
| Zieldatei
| |
| (anhängend)
| |
| �
| |
| Um beide Ausgabekanäle um
| |
| zulenken, verwenden Sie:
| |
| Kommando
| |
| >
| |
| Zieldatei
| |
| 2>&1
| |
| (gemeinsame Zieldatei)
| |
| Kommando
| |
| 1>
| |
| ZieldateiA
| |
| 2>
| |
| ZieldateiB
| |
| (getrennte Zieldateien)
| |
| �
| |
| Um die Standardeingabe umzulenk
| |
| en, verwenden Sie diese Syntax:
| |
| Kommando
| |
| <
| |
| Quelldate
| |
| 103.4
| |
| Ströme, Pipes und Umleitungen verwenden
| |
| 133
| |
| Es besteht aber auch die Möglichkeit, de
| |
| n Standardeingabekanal
| |
| umzuleiten. Beliebt
| |
| hierfür ist das Programm
| |
| mail
| |
| . Das folgende Kommando sendet den kompletten
| |
| Sys-
| |
| log
| |
| per Mail an einen kompetenten Mitarbeite
| |
| r. Der Betreff lautet »Überprüfen!« und
| |
| der Inhalt der Datei erscheint im Textkörper der Mail:
| |
| archangel:/ # mail -s "Überprüfen!" willi < /var/log/syslog
| |
| Zusammenfassung:
| |
| �
| |
| Um die Standardausgabe umzulenk
| |
| en, verwenden Sie diese Syntax:
| |
| Kommando
| |
| >
| |
| Zieldatei
| |
| (überschreibend)
| |
| Kommando
| |
| 1>
| |
| Zieldatei
| |
| (überschreibend)
| |
| Kommando
| |
| >>
| |
| Zieldatei
| |
| (anhängend)
| |
| Kommando
| |
| 1>>
| |
| Zieldatei
| |
| (anhängend)
| |
| �
| |
| Um den Standardfehlerkanal umzulenken, verwenden Sie:
| |
| Kommando
| |
| 2>
| |
| Zieldatei
| |
| (überschreibend)
| |
| Kommando
| |
| 2>>
| |
| Zieldatei
| |
| (anhängend)
| |
| �
| |
| Um beide Ausgabekanäle um
| |
| zulenken, verwenden Sie:
| |
| Kommando
| |
| >
| |
| Zieldatei
| |
| 2>&1
| |
| (gemeinsame Zieldatei)
| |
| Kommando
| |
| 1>
| |
| ZieldateiA
| |
| 2>
| |
| ZieldateiB
| |
| (getrennte Zieldateien)
| |
| �
| |
| Um die Standardeingabe umzulenk
| |
| en, verwenden Sie diese Syntax:
| |
| Kommando
| |
| <
| |
| Quelldatei
| |
| Pipes
| |
| Im Gegensatz zu Umleitunge
| |
| n lenken Pipes Datenströme
| |
| nicht in Dateien um oder
| |
| aus Dateien heraus. Sie sorgen vielmehr
| |
| dafür, dass die Ausgabe eines Programms
| |
| direkt als Eingabe fü
| |
| r ein anderes Programm verwen
| |
| det werden kann. Die Ausgabe
| |
| des ersten Programms er
| |
| folgt dann nicht nach
| |
| stdout
| |
| . Oft werden Umleitungen und
| |
| Pipes auch miteinander komb
| |
| iniert. Sehr gebräuchlich ist die Umlenkung größerer
| |
| Textmengen nach
| |
| less
| |
| . Das folgende Kommando würd
| |
| e möglicherweise eine solche
| |
| größere Textmenge verursachen:
| |
| archangel:/ # grep "kernel" /var/log/syslog
| |
| Damit Sie die Ausgabe des Kommandos über
| |
| haupt komplett lesen können, wird sie
| |
| einfach mit einer Pipe an
| |
| less
| |
| weitergegeben:
| |
| archangel:/ # grep "kernel" /var/log/syslog | less
| |
| Eine Kombination aus Umleitungen und Pipe
| |
| s verwendet z. B. üblicherweise das Pro-
| |
| gramm
| |
| tr
| |
| . Das liegt daran, dass
| |
| tr
| |
| weder eine Eingabedatei noch eine Ausgabedate
| |
Allgemeines
Manchmal kann es vorkommen, dass Sie
die Ausgabe eines Programms direkt mit
einem anderen Programm weiterverarbeite
n müssen. In diesem Fall können Sie eine
sogenannte
Pipe
(senkrechter Strich) verwenden. Mit ihrer Hilfe ist das Zwischen-
speichern der Ausgabe des ersten Programms in einer Datei zum Zweck, diese Datei
dann mit dem zweiten Programm
wieder einzulesen, unnötig.
In einem anderen Fall erzeug
t ein Programm vielleicht eine Ausgabe auf dem Bild-
schirm, die Sie abspeichern wollen. In dies
em Fall benötigen Sie eine Umleitung der
Standardausgabe (Redirect).
Wenn ein Programm ausschließlich von
der Standardeingabe (normalerweise die
Tastatur) liest und Sie mit diesem Programm
eine Datei einlesen müssen, benötigen
Sie ebenfalls eine Umleitung. Diesmal muss
allerdings die Standardeingabe umgelei-
tet (Redirect) werden