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

Aus Foxwiki
Ramez (Diskussion | Beiträge)
 
(91 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Allgemeines ==
=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 erzeugt ein Programm vielleicht eine Ausgabe auf dem Bild-schirm, die Sie abspeichern wollen.
* In diesem Fall benötigen Sie eine Umleitung der Standardausgabe (Redirect).
* Wenn ein Programm ausschließlich von der Standardeingabe (normalerweise dieTastatur) liest und Sie mit diesem Programm eine Datei einlesen müssen, benötigen Sie ebenfalls eine Umleitung.
* Diesmal mussallerdings die Standardeingabe umgeleitet (Redirect) werden


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
==stdin, stdout und stderr==
sogenannte Pipe(senkrechter  Strich)  verwenden.  Mit  ihrer  Hilfe  ist  das  Zwischen-
[[Datei:stdin-stdout-stderr.png|250px|thumb|right|stdin, stdout und stderr]]
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'''
(
 
stdin
Über die Standardeingabe können Daten in ein Programmelesen werden.
)  ist  normalerweise  die Tastatur. Viele  Programme
  $ less < eingaben.txt
erwarten  ihre  Eingaben  von  
 
stdin
'''stdout'''
.  Es  gibt  aber  auch,  wi
 
e  Sie  schon  oft  gesehen
Über die Standardausgabe kann ein Programm Daten ausgeben Beispiel:
haben,  Programme,  die stattdessen  Date
  $ find . -name '*.html' > ausgaben.txt
ien als  Argumente  erwarten. Diese  Pro-
gleichbedeutend:
gramme verwenden
  $ find . -name '*.html' 1> ausgaben.txt
stdin
 
  nicht.
'''stderr'''
stdin
 
entspricht dem Dateideskriptor 0.
Die Standardfehlerausgabe ist ein zweiter Ausgabedatenstrom, der dazu gedacht ist, Fehler- und Statusmeldungen auszugeben.
 
Standardausgabekanal
Normalerweise ist er ebenfalls mit dem Monitor verbunden; allerdings kann er getrennt von der Standardausgabe umgeleitet werden, so dass Fehlermeldungen nicht mit den ausgegebenen Nutzdaten vermischt werden.
(
 
stdout
'''Beispiel'''
) ist normalerweise ein Terminal. Viele Programme
 
machen ihre Ausgaben direkt nach
Hier werden die Fehlermeldungen des Programms find in die Datei fehlermeldungen.txt umgeleitet, während die Standardausgabe über eine Pipe an das Programm less weitergeleitet wird.
stdout
$ find . -name '*.html' 2> fehlermeldungen.txt | less
.
 
stdout
==Umleitungen (Redirects)==
entspricht dem Dateideskriptor 1.
Umleitungen werden verwendet, um die Standard-I/Os entweder in eine Datei hinein oder aus einer Datei heraus um zu lenken.
Wenn Sie alle Meldungen des Kernels in einer separaten Datei speichern möchten, können Sie mittels grep im Syslognach solchen Meldungen suchen und diese dann mit einem Redirektor in eine andere Datei speichern:
Standardfehlerkanal
 
(
  $/diag # grep kernel /var/log/syslog > kernelmessages
stderr
 
) ähnelt vom Verhalten her
Mit einem solchen Kommando erfassen Sie nur die Standardausgabe von <code>grep</code> .
stdout
Tritt ein Fehler auf, werden die entsprechenden Meldungen weiterhin auf der Konsole ausgegeben.
, enthält aber nur die
Sie können mit einer Kommandozeile wie der folgenden Standard meldungen und Fehlermeldungen in zwei unterschiedlichen Dateien aufzeichnen:
Fehlermeldungen eines Programms. Die Ausgabe des Fehlerkanals erfolgt norma-
 
lerweise auch auf dem Terminal.
$/scripts # script-xy 2>fehler.log 1>erfolg.log
stderr
 
entspricht dem Dateideskriptor 2.
Hierbei lenken das Argument, <code>1>erfolg.log</code> die normalen Meldungen des Programms und <code>1>erfolg.log</code> die Fehlermeldungen in je eine Datei um Wenn nur eine einzige Datei für die Aufzeichnung sowohl von stdout als auch stderr verwendet werden soll, können Sie auch ein Kommando wie das folgende verwenden:
Dadurch, dass der Standardau
 
sgabekanal und der Standardfehlerkanal getrennt ver-
$/scripts # script-xy >protokolldatei 2>&1
waltet werden, ist es möglich, Fehlerme
 
ldungen von den normalen Ausgaben eines
Der erste Teil des Kommandos i <code>1>script-xy>protokolldate</code> sorgt für die Umleitung von stdout in die Textdatei.
Programms zu trennen. Deshalb können Sie  
<code>1>2>&1leitet</code> stderr auf stdoutum.
den Fehlerkanal z. B. in eine Fehlerpro-
Das <code>&</code> besagt, dass <code>1</code> keine Datei ist.
tokolldatei umlenken.
Das Kommando würde ohne das <code>&</code> Standardfehlerkanal in die Datei <code>1</code> umleiten.
Umleitungen (Redirects)
Wenn Sie einen Standard-I/O umleiten, wird die Zieldatei, wenn diese noch nicht existiert, automatisch erstellt. *Sollten Sie dieselbe Umleitung noch einmal durchführen, wird die ursprüngliche Datei überschrieben.
Umleitungen werden  verwendet,  um  die  Standard-I/Os  entweder  in  eine  Datei  hi-
Um Daten an eine bestehende Dateianzuhängen, die für Umleitungen verwendet wird, müssen Sie einfach zwei Redirektor zeichen verwenden (<code>>></code>).
nein  oder  aus  einer  Datei  heraus  umzulenk
 
en.  Das  ist  z. B.  dann  erforderlich, wenn
  $/diag # grep kernel /var/log/syslog >> kernelmessages
man einem Programm keine Dateien als
 
Argumente übergeben kann. Wenn Sie alle
Wenn Sie nur einen einzelnen Redirektor verwenden, wird gleich zu Beginn der Programm ausführung die Zieldatei erstellt.
Meldungen des Kernels in ei
Ist diese bereits vorhanden, wird sie gelöscht und neu erstellt.
ner separaten Datei speicher
Sollten also Zieldatei und Eingabedatei identisch sein, ist ein Daten verlust garantiert. Das folgende Kommando hat demnach eine leere Kundendatenbank zur Folge:
n möchten, können Sie mit-
 
tels
  $/db # grep "Meier" kunden-db > kunden-db
grep
 
im
Es besteht aber auch die Möglichkeit, den Standardeingabekanal umzuleiten.
Syslog
Beliebt hierfür ist das Programm mail.
nach solchen Meldungen suchen
Das folgende Kommando sendet den kompletten Sys-log per Mail an einen kompetenten Mitarbeiter.
und diese dann mit einem Redi-
Der Betreff lautet »Überprüfen!« und der Inhalt der Datei erscheint im Textkörper der Mail:
rektor in eine andere Datei speichern:
 
archangel:/diag # grep kernel /var/log/syslog > kernelmessages
  $/ # mail -s "Überprüfen!" willi < /var/log/syslog
Mit einem solchen Kommando erfassen
 
Sie nur die Stan
== Pipes ==
dardausgabe von
 
grep
[[Datei:pipe.gif|350px|thumb|PIPE]]
. Tritt
 
ein  Fehler  auf,  werden  die entsprechend
Im Gegensatz zu Umleitungen lenken Pipes Datenströme nicht in Dateien um oderaus Dateien heraus.
en  Meldungen  weiterhin  auf  der  Konsole
Sie sorgen vielmehr dafür, dass die Ausgabe eines Programms direkt als Eingabe für ein anderes Programm verwendet werden kann.<br>
ausgegeben. Sie können mit einer Komman
 
dozeile wie der folgenden Standardmel-
Die Ausgabe des ersten Programms erfolgt dann nicht nach stdout.Oft werden Umleitungen und Pipes auch miteinander kombiniert. Sehr gebräuchlich ist die Umlenkung grösserer Textmengen nach less. Das folgende Kommando würde möglicherweise eine solche größere Textmenge verursachen:
dungen und Fehlermeldungen in zwei
$/ # grep "kernel" /var/log/syslog
unterschiedlichen Dateien aufzeichnen:
Damit Sie die Ausgabe des Kommandos überhaupt komplett lesen können, wird sie einfach mit einer Pipe an less weitergegeben:
archangel:/scripts # script-xy 2>fehler.log 1>erfolg.log
$/ # grep "kernel" /var/log/syslog | less
Hierbei  lenken  das  Argument 
Eine Kombination aus Umleitungen und Pipes verwendet z.&nbsp;B.&nbsp;üblicherweise das Programm tr. Das liegt daran,dass tr weder eine Eingabedatei noch eine Ausgabedatei103GNU- und Unix-Kommandos134
1>erfolg.log
als Argument übergeben werden kann. Deshalb erfolgt die Eingabe oft mittels einer Pipe aus dem Programm cat heraus und die Ausgabe mit einer Umlenkung in die
  die  normalen  Meldungen  des  Pro-
entsprechende Zieldatei:
gramms und
  $/textfiles # cat textfile1 | tr \n \r > textfile2
2>fehler.log
 
die Fehlermeldungen in je eine Datei um. Wenn nur eine
== tee und xargs ==
einzige Datei für die Aufzeichnung sowohl von
 
stdout
Mit tee kann der Datenstrom eines Programms gleichzeitig auf der Konsole und in einer Textdatei ausgegeben werden. Beispiel:
als auch
$/ # grep pppd /var/log/syslog | tee pppdmessages
stderr
Mit xargs können Sie die Ergebnisse eines Programms, das eine mehrzeilige Ausgabeliefert, an ein Programm übergeben, das immer nur ein Argument gleichzeitig verarbeiten kann. Beispiel:
verwendet wer-
  $/ # cut -d " " -f1 /var/log/apache2/access.log |\
den soll, können Sie auch ein Komm
  sort | uniq | xargs -n1 host
ando wie das folgende verwenden:
Das Kommando wurde der Übersichtlichkeit halber mit dem Backslash auf zwei Zeilen aufgeteilt.
archangel:/scripts # script-xy >protokolldatei 2>&1
Zur Erklärung: Mit diesem Kommando soll überprüft werden, von welchen Domänen aus auf einen Webserver zugegriffen wurde.
Der  erste  Teil  des  Kommandos 
  *Zunächst wird mit dem cut-Befehl die erste Spalte des access.log von Apache isoliert.
script-xy
Diese Spalte enthält die IP-Adressen der Besucher.<br>
>protokolldatei
 
  sorgt  für  die Umleitung
Das Kommando sort sortiert die Liste der IP-Adressen. Mit uniq wird dafür gesorgt, dass jede IP-Adresse nur einmal in der Liste auftaucht.
von
Diese Liste kann nicht direkt an das Kommando host zur Namensauflösung übergeben werden, weil host nur ein einzelnes Argument erwartet.
stdout
Deshalb übergibt xargs die IP-Adressen einzeln. Das Kommando host wird also durch xargsfür jede IP-Adresse einmal aufgerufen.
in die Textdatei.
 
2>&1
= Kontrollfragen=
leitet
<div class="toccolours mw-collapsible mw-collapsed">
stderr
'''Was machen pips?'''
  auf
<div class="mw-collapsible-content">die Ausgabe eines Programms direkt als Eingabe für ein anderes Programm verwen
stdout
det werden kann</div>
um. Das
</div>
&
<div class="toccolours mw-collapsible mw-collapsed">
besagt, dass
'''Was ist der unterschid zwischen stdin, stdout und stderr?'''
1
<div class="mw-collapsible-content">'''stidin ist Eingabe,stdout und stderr Ausgabe '''</div>
keine
</div>
Datei  ist. Das Kommando würde  ohne  das 
<div class="toccolours mw-collapsible mw-collapsed">
&
''Testfrage 3''
  den  Standardfehlerkanal  in  die  Datei  
<div class="mw-collapsible-content">'''keine'''</div>
1
</div>
umleiten.
<div class="toccolours mw-collapsible mw-collapsed">
Wenn  Sie  einen  Standard-I/O  umleiten,  wi
''Testfrage 4''
rd die  Zieldatei,  wenn  diese  noch  nicht
<div class="mw-collapsible-content">'''keine'''</div>
existiert, automatisch erstellt. Sollten Sie
</div>
dieselbe Umleitung noch einmal durchfüh-
 
ren, wird die ursprüng
<div class="toccolours mw-collapsible mw-collapsed">
liche Datei überschrieben. Um Daten an eine bestehende Datei
'''Was konnen wir machen mit tee und xargs?'''
anzuhängen, die für Umleitungen verwende
<div class="mw-collapsible-content">Mit tee kann der Datenstrom eines Programms gleichzeitig auf der Konsole und in einer Textdatei ausgegeben werden.
t wird, müssen Sie ei
</div>
nfach zwei Redirek-
</div>
torzeichen verwenden (
 
>>
[[Kategorie:Linux/LPIC/101]]
).
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

Aktuelle Version vom 23. Juni 2023, 19:25 Uhr

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 erzeugt ein Programm vielleicht eine Ausgabe auf dem Bild-schirm, die Sie abspeichern wollen.
  • In diesem Fall benötigen Sie eine Umleitung der Standardausgabe (Redirect).
  • Wenn ein Programm ausschließlich von der Standardeingabe (normalerweise dieTastatur) liest und Sie mit diesem Programm eine Datei einlesen müssen, benötigen Sie ebenfalls eine Umleitung.
  • Diesmal mussallerdings die Standardeingabe umgeleitet (Redirect) werden

stdin, stdout und stderr

stdin, stdout und stderr

stdin

Über die Standardeingabe können Daten in ein Programmelesen werden.

$ less < eingaben.txt

stdout

Über die Standardausgabe kann ein Programm Daten ausgeben Beispiel:

$ find . -name '*.html' > ausgaben.txt

gleichbedeutend:

$ find . -name '*.html' 1> ausgaben.txt

stderr

Die Standardfehlerausgabe ist ein zweiter Ausgabedatenstrom, der dazu gedacht ist, Fehler- und Statusmeldungen auszugeben.

Normalerweise ist er ebenfalls mit dem Monitor verbunden; allerdings kann er getrennt von der Standardausgabe umgeleitet werden, so dass Fehlermeldungen nicht mit den ausgegebenen Nutzdaten vermischt werden.

Beispiel

Hier werden die Fehlermeldungen des Programms find in die Datei fehlermeldungen.txt umgeleitet, während die Standardausgabe über eine Pipe an das Programm less weitergeleitet wird.

$ find . -name '*.html' 2> fehlermeldungen.txt | less

Umleitungen (Redirects)

Umleitungen werden verwendet, um die Standard-I/Os entweder in eine Datei hinein oder aus einer Datei heraus um zu lenken. Wenn Sie alle Meldungen des Kernels in einer separaten Datei speichern möchten, können Sie mittels grep im Syslognach solchen Meldungen suchen und diese dann mit einem Redirektor in eine andere Datei speichern:

$/diag # grep kernel /var/log/syslog > kernelmessages

Mit einem solchen Kommando erfassen Sie nur die Standardausgabe von grep . Tritt ein Fehler auf, werden die entsprechenden Meldungen weiterhin auf der Konsole ausgegeben. Sie können mit einer Kommandozeile wie der folgenden Standard meldungen und Fehlermeldungen in zwei unterschiedlichen Dateien aufzeichnen:

$/scripts # script-xy 2>fehler.log 1>erfolg.log

Hierbei lenken das Argument, 1>erfolg.log die normalen Meldungen des Programms und 1>erfolg.log die Fehlermeldungen in je eine Datei um Wenn nur eine einzige Datei für die Aufzeichnung sowohl von stdout als auch stderr verwendet werden soll, können Sie auch ein Kommando wie das folgende verwenden:

$/scripts # script-xy >protokolldatei 2>&1

Der erste Teil des Kommandos i 1>script-xy>protokolldate sorgt für die Umleitung von stdout in die Textdatei. 1>2>&1leitet stderr auf stdoutum. Das & besagt, dass 1 keine Datei ist. Das Kommando würde ohne das & Standardfehlerkanal in die Datei 1 umleiten. Wenn Sie einen Standard-I/O umleiten, wird die Zieldatei, wenn diese noch nicht existiert, automatisch erstellt. *Sollten Sie dieselbe Umleitung noch einmal durchführen, wird die ursprüngliche Datei überschrieben. Um Daten an eine bestehende Dateianzuhängen, die für Umleitungen verwendet wird, müssen Sie einfach zwei Redirektor zeichen verwenden (>>).

$/diag # grep kernel /var/log/syslog >> kernelmessages

Wenn Sie nur einen einzelnen Redirektor verwenden, wird gleich zu Beginn der Programm ausfü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 Kommando hat demnach eine leere Kundendatenbank zur Folge:

$/db # grep "Meier" kunden-db > kunden-db

Es besteht aber auch die Möglichkeit, den Standardeingabekanal umzuleiten. Beliebt hierfür ist das Programm mail. Das folgende Kommando sendet den kompletten Sys-log per Mail an einen kompetenten Mitarbeiter. Der Betreff lautet »Überprüfen!« und der Inhalt der Datei erscheint im Textkörper der Mail:

$/ # mail -s "Überprüfen!" willi < /var/log/syslog

Pipes

PIPE

Im Gegensatz zu Umleitungen lenken Pipes Datenströme nicht in Dateien um oderaus Dateien heraus. Sie sorgen vielmehr dafür, dass die Ausgabe eines Programms direkt als Eingabe für ein anderes Programm verwendet werden kann.

Die Ausgabe des ersten Programms erfolgt dann nicht nach stdout.Oft werden Umleitungen und Pipes auch miteinander kombiniert. Sehr gebräuchlich ist die Umlenkung grösserer Textmengen nach less. Das folgende Kommando würde möglicherweise eine solche größere Textmenge verursachen:

$/ # grep "kernel" /var/log/syslog

Damit Sie die Ausgabe des Kommandos überhaupt komplett lesen können, wird sie einfach mit einer Pipe an less weitergegeben:

$/ # grep "kernel" /var/log/syslog | less

Eine Kombination aus Umleitungen und Pipes verwendet z. B. üblicherweise das Programm tr. Das liegt daran,dass tr weder eine Eingabedatei noch eine Ausgabedatei103GNU- und Unix-Kommandos134 als Argument übergeben werden kann. Deshalb erfolgt die Eingabe oft mittels einer Pipe aus dem Programm cat heraus und die Ausgabe mit einer Umlenkung in die entsprechende Zieldatei:

$/textfiles # cat textfile1 | tr \n \r > textfile2

tee und xargs

Mit tee kann der Datenstrom eines Programms gleichzeitig auf der Konsole und in einer Textdatei ausgegeben werden. Beispiel:

$/ # grep pppd /var/log/syslog | tee pppdmessages

Mit xargs können Sie die Ergebnisse eines Programms, das eine mehrzeilige Ausgabeliefert, an ein Programm übergeben, das immer nur ein Argument gleichzeitig verarbeiten kann. Beispiel:

$/ # cut -d " " -f1 /var/log/apache2/access.log |\
sort | uniq | xargs -n1 host

Das Kommando wurde der Übersichtlichkeit halber mit dem Backslash auf zwei Zeilen aufgeteilt. Zur Erklärung: Mit diesem Kommando soll überprüft werden, von welchen Domänen aus auf einen Webserver zugegriffen wurde.

*Zunächst wird mit dem cut-Befehl die erste Spalte des access.log von Apache isoliert.

Diese Spalte enthält die IP-Adressen der Besucher.

Das Kommando sort sortiert die Liste der IP-Adressen. Mit uniq wird dafür gesorgt, dass jede IP-Adresse nur einmal in der Liste auftaucht. Diese Liste kann nicht direkt an das Kommando host zur Namensauflösung übergeben werden, weil host nur ein einzelnes Argument erwartet. Deshalb übergibt xargs die IP-Adressen einzeln. Das Kommando host wird also durch xargsfür jede IP-Adresse einmal aufgerufen.

Kontrollfragen

Was machen pips?

die Ausgabe eines Programms direkt als Eingabe für ein anderes Programm verwen det werden kann

Was ist der unterschid zwischen stdin, stdout und stderr?

stidin ist Eingabe,stdout und stderr Ausgabe

Testfrage 3

keine

Testfrage 4

keine

Was konnen wir machen mit tee und xargs?

Mit tee kann der Datenstrom eines Programms gleichzeitig auf der Konsole und in einer Textdatei ausgegeben werden.