LPIC101/103.4 Ströme, Pipes und Umleitungen verwenden

Aus Foxwiki

Allgemeines

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 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 Programmeine Datei einlesen müssen, benötigen Sie ebenfalls eine Umleitung. Diesmal muss allerdings die Standardeingabe umgelei-tet (Redirect) werden 103.4 Ströme, Pipes und Umleitungen verwenden tdin, stdout und stderr Immer wenn unter Linux ein Programm ausgef ü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