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

Aus Foxwiki
Ramez (Diskussion | Beiträge)
Ramez (Diskussion | Beiträge)
Zeile 14: Zeile 14:
#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. stderrentspricht dem Dateideskriptor 2.
#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. stderrentspricht dem Dateideskriptor 2.
Dadurch, dass der Standardausgabekanal und der Standardfehlerkanal getrennt ver-waltet werden, ist es möglich, Fehlermeldungen von den normalen Ausgaben eines Programms zu trennen. Deshalb können Sie den Fehlerkanal z. B. in eine Fehlerpro-tokolldatei umlenken
Dadurch, dass der Standardausgabekanal und der Standardfehlerkanal getrennt ver-waltet werden, ist es möglich, Fehlermeldungen 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

Version vom 31. Oktober 2019, 14:31 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 Dateidann mit dem zweiten Programmwieder 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 Immer wenn unter Linux ein Programm ausgeführt wird, erhält dieses Informationen über drei Dateideskriptoren. Diese werden als Standard-I/Os bezeichnet:

  1. Standardeingabekanal(stdin) ist normalerweise die Tastatur.Viele Programme erwarten ihre Eingaben von stdin Es gibt aber auch, wie Sie schon oft gesehen haben, Programme, die stattdessen Dateien als Argumente erwarten. Diese Programme verwenden stdin nicht.stdin entspricht dem Dateideskriptor 0.
  2. Standardausgabekanal(stdout) ist normalerweise ein Terminal. Viele Programmemachen ihre Ausgaben direkt nach stdout.stdout entspricht dem Dateideskriptor 1.
  3. 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. stderrentspricht dem Dateideskriptor 2.

Dadurch, dass der Standardausgabekanal und der Standardfehlerkanal getrennt ver-waltet werden, ist es möglich, Fehlermeldungen 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