LPIC101/103.4 Ströme, Pipes und Umleitungen verwenden: Unterschied zwischen den Versionen

Aus Foxwiki
Ramez (Diskussion | Beiträge)
Ramez (Diskussion | Beiträge)
Markierung: Ersetzt
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

Version vom 31. Oktober 2019, 13:38 Uhr

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