Die Nadel im Protokoll
Der Webshop ist heute Morgen kurz ausgefallen. Ihr Team will wissen, was passiert ist.
Der Server schreibt jedes Ereignis in eine Textdatei. Sie hat vielleicht 50.000 Zeilen.
Sie lesen sie nicht von oben nach unten. Sie suchen gezielt, mit wenigen Befehlen.
Am Ende dieser Lektion
Notiz
Ich kann Textdateien im Terminal lesen und durchsuchen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Protokolldatei | eine Textdatei, in die ein Programm Ereignisse schreibt; auch Log genannt | |
| Ausgabe | der Text, den ein Befehl zurückgibt | |
| Suchmuster | der Text, nach dem Sie suchen | FEHLER |
| Option | ein Zusatz hinter dem Befehl, der sein Verhalten ändert | -n 2 |
| Pipe | das Zeichen |, das die Ausgabe eines Befehls an den nächsten weitergibt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
cat, head und wc zeigen eine Datei
cat datei gibt die ganze Datei aus. Das ist bei langen Dateien zu viel.
head -n 2 datei zeigt nur die ersten zwei Zeilen. tail -n 2 datei zeigt die letzten zwei.
wc -l datei zählt die Zeilen. Die Option -l steht für „lines“, also Zeilen.
Eine Protokolldatei lesen
# Eine kleine Protokolldatei eines Webshops anlegen.
printf '08:01 INFO Bestellung 2001 angelegt\n' > shop.log
printf '08:03 INFO Zahlung für 2001 erhalten\n' >> shop.log
printf '08:07 FEHLER Zahlung für 2002 abgelehnt\n' >> shop.log
printf '08:09 INFO Bestellung 2003 angelegt\n' >> shop.log
printf '08:15 FEHLER Lager nicht erreichbar\n' >> shop.log
printf '08:20 INFO Bestellung 2004 angelegt\n' >> shop.log
# Alles anzeigen.
cat shop.log
# Nur die ersten zwei Zeilen.
head -n 2 shop.log
# Wie viele Zeilen hat die Datei?
wc -l shop.log
grep sucht Zeilen mit einem Muster
grep FEHLER shop.log gibt jede Zeile aus, in der das Wort FEHLER steht. Alle anderen Zeilen bleiben weg.
Mit -i ignoriert grep die Groß- und Kleinschreibung. Mit -c zählt es nur die Treffer.
Mit -v kehren Sie die Suche um: Sie sehen alle Zeilen ohne das Muster.
Fehler im Protokoll finden
printf '08:01 INFO Bestellung 2001 angelegt\n' > shop.log
printf '08:07 FEHLER Zahlung für 2002 abgelehnt\n' >> shop.log
printf '08:09 INFO Bestellung 2003 angelegt\n' >> shop.log
printf '08:15 FEHLER Lager nicht erreichbar\n' >> shop.log
printf '08:20 info Bestellung 2004 angelegt\n' >> shop.log
# Alle Zeilen mit dem Wort FEHLER.
grep FEHLER shop.log
# Groß- und Kleinschreibung ignorieren.
grep -i info shop.log
# Nur zählen, nicht anzeigen.
grep -c FEHLER shop.log
# Alle Zeilen ohne FEHLER.
grep -v FEHLER shop.log
Beispiel: grep mit der Datei von oben
| Befehl | Ausgabe |
|---|---|
| grep FEHLER shop.log | Die Zeilen von 08:07 und 08:15 |
| grep -c FEHLER shop.log | 2 |
| grep -v FEHLER shop.log | Alle Zeilen mit INFO |
| grep fehler shop.log | Nichts: kleines „fehler“ kommt nicht vor |
| grep -i fehler shop.log | Die Zeilen von 08:07 und 08:15 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele glauben, grep finde ein Wort in jeder Schreibweise. Es unterscheidet aber Groß und Klein. Findet grep nichts, versuchen Sie es mit -i, bevor Sie denken, das Wort stehe nicht in der Datei.
Eine Pipe verbindet zwei Befehle
Das Zeichen | heißt Pipe. Es gibt die Ausgabe des linken Befehls an den rechten weiter.
grep FEHLER shop.log | wc -l sucht zuerst alle Fehlerzeilen. Dann zählt wc -l sie.
So bauen Sie aus kleinen Befehlen eine Antwort auf eine echte Frage.
Zwei Befehle verbinden
printf '08:01 INFO Bestellung 2001 angelegt\n' > shop.log
printf '08:07 FEHLER Zahlung für 2002 abgelehnt\n' >> shop.log
printf '08:09 INFO Bestellung 2003 angelegt\n' >> shop.log
printf '08:15 FEHLER Lager nicht erreichbar\n' >> shop.log
printf '08:21 FEHLER Zahlung für 2005 abgelehnt\n' >> shop.log
# Die Ausgabe des einen Befehls wird die Eingabe des nächsten.
grep FEHLER shop.log | wc -l
# Erst filtern, dann die letzte Zeile nehmen.
grep FEHLER shop.log | tail -n 1
# Ihr Auftrag: Wie viele Zeilen enthalten das Wort Zahlung?
# Bauen Sie dafür eine Pipe mit grep und wc -l.
Was ein Team erwartet
Tipp
Bei einer Störung fragt jemand, wie viele Fehler es heute gab. Wer dafür grep und wc nutzen kann, antwortet in einer Minute und muss keine Datei öffnen.