1

Entwicklung

1

Wissen

2.5 Eingabe- Ausgabeumleitung

Man kann die Ein- und Ausgabeumlenkung verwenden, um Informationen umzuleiten. Quasi vom Bildschirm in eine Datei oder fur einen Befehl aus einer Datei, ohne dass der Befehl evtl. weiss, dass die Informationen sogar aus einer solchen Umleitung stammen konnen!!!

 
Kanal        Funktion
0            Standard-Eingabekanal
1            Standard-Ausgabekanal
2            Standard-Fehlerkanal 

Ein Befehl kann beispielsweise einen Text und einen Fehler ausgeben. Der Text erscheint uber den Kanal 1 und der Fehler uber den Kanal 2. Auf Ihrem Bildschirm bekommen Sie davon eigentlich nichts mit, Sie konnen die Fehler und die Ausgabe aber (wenn Sie mochten) in verschiedene Dateien umleiten.

2.5.1 >

Leitet eine Ausgabe in eine Datei um. Beispiel:
 ls-l     > ̃/test 

Leitet den Inhalt des aktuellen Verzeichnisses in die Datei test im Home- ̈ verzeichnis um. Die Datei konnen Sie sich anschließend beispielsweise mit einem einfachen cat /test ansehen.

2.5.2 <

Liest Daten aus dem Eingabekanal. Beispiel:
 batch <befehlsdatei 
̈

Liest eine Liste von Befehlen aus der befehlsdatei und fuhrt sie aus. Nahere Informationen zu dem batch Kommando finden Sie in diesem Kapitel.

2.5.3 1>

̈

Diese Darstellung ist sinngemaß wie > zu verstehen. Es wird der Stan- dard Ausgabekanal verwendet. Jede normale Ausgabe (keine Fehlermel- dungen!) eines Kommandos werden entsprechend umgeleitet. Tip: Manche Programmierer sind etwas eingenwillig, was Ihre Fehlerbe- handlung angeht. Es kann also sein, dass Fehler und normaler Text uber ̈ den selben Ausgabekanal laufen. Wenn Sie die normale Ausgabe und die ̈ Fehler voneinander trennen mochten, sollten Sie vielleicht einige Fehler- meldungen simulieren um zu sehen, wie das jeweilige Kommando mit den ̈ Fehlern umgeht. Fehler trennt man von der normalen Ausgabe, um spater ̈ ̈ direkt sehen zu konnen, was ßchiefgelaufen ̈st. Scripts konnen die Zeilen ı ̈ der fehlerhaften Ausgabe zahlen, und wenn die Anzahl der Zeilen 0 ist, war alles in Ordnung usw.

2.5.4 2>

̈

Hiermit konnen Sie Fehlermeldungen explizit umleiten, um diese in einer ̈ Datei sichern und analysieren zu konnen.

Beispiel:

ls -l 2> ̃/ls_fehlermeldungen

2.5.5 2>&1

Leitet die A usgabe von Fehlern sowie die Standardausgabe in die gleiche Datei. Beispiel:
 ls -l >file       2>&1 
̈ Samtliche Fehler sowie die Ergebnismenge kommen in die gleiche Datei.

2.5.6 tee

̈ Mit diesem Kommando konnen Sie die Standardausgabe eines Befehls auf dem Bildschirm und gleichzeitig aber auch in eine Datei umleiten. Beispiel:
 ls -l | tee protokoll 

2.6 Datensuche, Datenmanipulation

2.6.1 grep

 grep [-n ] [-v] [-i] [-c] [-q] [-w] [-c] [suchmuster] [datei] 

Grep ist einer der interessantesten Kommandos - wenn auch mit eines der ̈ Undurchsichtigsten. Damit konnen Sie Dateien nach bestimmten Suchmu- stern durchsuchen. Im Zusammenhang mit weiteren Befehlen sind Ihrer Phantasie anschließend keine Grenzen mehr gesetzt. Dieses Kommando ̈ habe ich bewußt sehr ausfuhrlich erklart.

̈
 -n
Gibt eine Zeilennummer plus die gefundene Zeile aus
-v
negiert das Suchmuster
-i
kleine Groß- und Kleinschreibung
-q
Es wird keine Bildschirmausgabe erfolgen. Das Ergebnis steht im Exitcode
(0 = gefunden, 1 = nicht gefunden).

-w
                          ̈
Es werden nur ganze Worter gesucht.
-c
Gibt nur die Anzahl gefundener Zeilen zuruck
                                          ̈
-f
Liest das Suchmuster aus einer Datei, die angegeben werden muß.
Liste der Suchmuster fur grep / egrep:
                        ̈
Xxx
 sucht nach xxx’ irgendwo im Text
ˆxxx
 sucht am Anfang der Zeile nach xxx
ˆxxx$
 in der gesamten Zeile darf nur xxx stehen
ˆ$
 die Zeile muß leer sein
[ˆxyz]
 Es darf kein xyz vorkommen
ˆ[ˆxyz]
 Es darf am Anfang kein xyz stehen
[a-z]
 eines von den Zeichen darf
 zwischen a bis z (einschließlich) liegen
.
 ein beliebiges Zeichen
.*
 ein beliebiges Zeichen beliebig oft
x*
 Das Zeichen x beliebig oft oder garnicht
x?
 Das Zeichen x darf nicht oder
 nur einmal auftreten
x+
 Das Zeichen x muß beliebig oft, aber
 mindestens einmal auftreten

x{n}
  Das Zeichen x muß n mal auftreten. Der Backslash
  dient der Entwertung.
x{,n}
  Das Zeichen} x darf h ̈chstens n mal auftreten.
                                 o
x{n,}
  Das Zeichen x muß mindestens k mal auftreten.
x{n,m}
  Das Zeichen x muß mindestens n mal und
  maximal m mal auftreten. 
Beispiele:
 ps alx | grep ’csh’
ps -alx | grep ’388’
ls -al | grep ’ˆd’|wc -l’ 
Anmerkung: ps zeigt die laufenden Prozesse des Systems an (Name des Prozesses, Nummer, usw).
 a=‘ls -al | grep ’ˆd’ | wc -l‘ 
Ein echo $a fuhrt den Befehl zwischen “ aus. Sie erinnern sich vielleicht ̈ an den Abschnitt uber die Metazeichen. Dort stand, dass Anweisungen in ̈ ̈ rechtsschragen Hochkommatas als Kommando ausgewertet werden!
 grep -n ’ei’ datei 
Gibt die Zeilennummer und die Zeile an sich aus, in der das Ergebnis ge- funden wurde.
 grep -vn ’ei’ datei 
Gibt nur die Zeilen und Zeilennummern aus, in der der Suchbegriff nicht steht (Suchbegriff ist ei). -v steht fur Umkehrung. ̈
 grep -i ’ei’ datei 
Gross- und Kleinschreibung interessiert uns nicht (Ignore Case).
 grep -c ’ei’ datei 
̈ Zahle passende Zeilen und gib die Zahl als Ergebnis zuruck. ̈
 grep -cv ’ei’ datei 
̈ Zahle Zeilen, die nicht passen!
 grep ’ˆ[ˆ:]{3,4}:’ /etc/passwd|cut -d: f1 

Suche Usernamen, die 3-4 Zeichen lang sind. Hier ist wohl eine etwas um- ̈ fangreichere Erklarung notwendig! Zuerst wird durch ein einfaches ˆ dafur ̈ gesorgt, dass die Suche am Anfang einer Zeile beginnt. Durch ein [ˆ:] bewirken wir, dass am Anfang KEIN : steht (nicht vergessen: Ein ˆ innerhalb einer eckigen Klammer bedeutet, dass das folgende Zeichen (oder die fol- genden Zeichen) nicht vorkommen durfen). Jetzt folgt ein Backslash, weil ̈ die Shell sonst versuchen wurde, die geschweifte Klammer als irgend eine ̈ Anweisung zu interpretieren. Dies wurde naturlich unweigerlich zu einem ̈ ̈ Fehler fuhren. Wir suchen durch das ̈ {3,4}: nach einem : an 3. oder 4. Stelle. Haben wir es gefunden, leiten wir diese Zeile erst einmal an den cut Befehl weiter, der wiederum dann als Trenn- zeichen : verwendet und die Spalte 1 (also hier den Usernamen) ausgibt. ̈ Verwirrend ist hier, dass fur verschiedene Befehle die Zahlung von Spalten ̈ bei 1 oder bei 0 beginnt. Darauf sollten Sie immer Rucksicht nehmen.

̈
 grep ".*[0-9][0-9]*:‘cat passwd|
  grep"ˆ$USER:"|cut -d: -f4‘:" passwd 

Suche die Group-ID des gerade eingeloggten Users und gib sie aus (kein ̈ besonders perfektes Beispiel, dient nur der Verstandnis). Versuchen Sie ̈ mal, folgende Beispiele nachzuvollziehen. Dann konnen Sie sehen, ob Sie ̈ die Erklarung des Kommandos verstanden haben. Evtl. schauen sie sich mal die Dokumentation fur die Befehle ls, cut und tee an, bevor Sie sich die ̈ Beispiele ansehen.

 ls -l|grep’ˆ.{12} 2’
 
̈ ̈ Wir suchen Dateien mit dem Verweiszahler 2. Sie wissen ja, der Verweiszahler steht nicht am Anfang:
 -rw-r--r--       2 root          root               4715 Nov 17 14:23 zshrc 
̈ In diesem Beispiel ist der Verweiszahler die 2.
 ls -l|grep ’ˆ-{1}’ 
Fuhrt beispielsweise zu folgendem Ergebnis:
    ̈
-rw-r--r--       1   root    root          258   Feb  20    1995    ttytype
-rw-r--r--       1   root    root        1942    Jan  25  21:16     vimrc
-rw-rw----       1   root    dialout       209   Jan  25  22:09     wvdial.conf
-rw-r--r--       1   root    root          107   Jan  25  23:12     ytalkrc
-rw-r--r--       1   root    root        4715    Nov  17  14:23     zshrc 

Es werden hier alle Dateien dargestellt, deren erstes Attribut ”-” ist (erstes Zeichen von links, nicht das erste passende Zeichen).

 cat datei|tr ’ ’ ’