Erzeugung, Überwachung und Beenden von Prozessen

Wichtung: 5

Beschreibung: Die Kandidaten sollen in der Lage sein, Datenströme umzulenken und zu verbinden, um Text effizient zu bearbeiten. Darin eingeschlossen ist das Umlenken von Standard-Input, Standard-Output und Standard-Error, das Pipen der Ausgaben eines Befehls an einen weiteren Befehl, das Verwenden der Ausgabe eines Befehls als Argument für einen anderen und das Umlenken der Ausgabe sowohl in eine Datei als auch an die Standard-Ausgabe.

Wichtigste Wissensgebiete:
Umlenken von Standard-Input, Standard-Output und Standard-Error.
Pipen der Standard-Ausgabe eines Kommandos an ein weiteres Kommando.
Nutzen der Standard-Ausgabe eines Kommandos als Aufrufparameter für andere Programme.
Schreiben der Ausgabe sowohl an die Standard-Ausgabe als auch in eine Datei.

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
tee
xargs
<
<< 
>
>>
|
` ` (back ticks)

Funktionsweise von Kanälen

Unter Linux besitzt jedes Programm drei Standard-Kanäle, die dazu verwendet werden, um Eingaben und Ausgaben des Programms zu verwalten. Beispielsweise kommen von der Tastatur die Befehle in den Eingabekanal, wenn man ein Programm in der Bash startet. Es gibt folgende Kanäle:

Standard-Eingabe (STDIN) = Der Kanal (Kenn-Nummer 0), von dem das Programm seine Eingabe erwartet. In der Regel die Tastatur.
Standard-Ausgabe (STDOUT) = Der Kanal (Kenn-Nummer 1), auf den das Programm seine Ausgaben schreibt. In der Regel der Monitor.
Standard-Fehlerausgabe (STDERR) = Der Kanal (Kenn-Nummer 2), auf den das Programm seine Fehlerausgaben schreibt. In der Regel der Monitor.

Umleitung der Ein- und Ausgabekanäle

cmd > output.log = Die Standard-Ausgabe (STDOUT) wird in die Datei output.log geschrieben.
cmd 1> output.log = Dasselbe, nur mit expliziter Angabe des Kanals.
cmd 2> error.log = Die Standard-Fehlerausgabe (STDERR) wird in die Datei error.log geschrieben.
cmd &> complete.log = Die Standard-Ausgabe (STDOUT) und Standard-Fehlerausgabe (STDERR) werden in die Datei complete.log log geschrieben.
cmd < input.txt = Die Eingabe erfolgt nicht durch die Tastatur, sondern durch die input.txt.
cmd < EOT input.txt = Die Eingabe erfolgt nicht durch die Tastatur, sondern durch die input.txt. Aber nur bis zur frei wählbaren Zeichenfolge EOT.

cmd > Datei = Umleitung der Standard-Ausgabe in Datei. Existiert die Datei schon, so wird sie überschrieben, existiert sie noch nicht, so wird sie neu angelegt.
cmd >> Datei = Umleitung der Standard-Ausgabe in Datei. Existiert die Datei schon, so wird die Ausgabe hinten an die bestehende Datei angehängt, existiert sie noch nicht, so wird sie neu angelegt.
cmd < Datei = Das Programm ließt seine Eingabe aus der Datei statt von der Tastatur.
cmd << EOM ... EOM = Das Programm ließt seine Eingaben statt von der Tastatur aus dem Block zwischen den beiden EOM Marken.

Beispiel: cmd < /tmp/input > /tmp/output.log 2> /tmp/error.log
Das Programm erhält von input die Eingaben und schreibt die Standardausgabe in die Datei output.log und die Fehlerausgabe in die Datei error.log.

Kommando-Verkettung

cmd1 | cmd2 = Eine Pipe: die Standard-Ausgabe von cmd1 wird mit der Standard-Eingabe von cmd2 verknüpft.
cmd1 ; cmd2 = cmd2 wird gestartet, wenn cmd1 fertig ist.
cmd1 && cmd2 = cmd2 wird gestartet, wenn cmd1 erfolgreich beendet wurde.
cmd1 || cmd2 = cmd2 wird gestartet, wenn cmd1 fehlerhaft beendet wurde.
cmd1 & cmd2 = cmd2 wird gleichzeitig mit cmd1 gestartet.

xargs

xargs führt ein beliebiges Kommando aus, und gibt diesem Kommando als Parameter das mit, was xargs von der Standard-Eingabe gelesen hat. In einer Pipe ist es also möglich, daß ein Programm seine Ausgaben an xargs weiterleitet und xargs führt dann ein anderes Programm aus, das mit eben der Ausgabe des ersten Programms als Parameter bestückt wird.