diff --git a/crumbforest-admin-vektor.md b/crumbforest-admin-vektor.md index 97f4987..852e001 100644 --- a/crumbforest-admin-vektor.md +++ b/crumbforest-admin-vektor.md @@ -36,6 +36,7 @@ Jede **Crumbpage** behandelt ein Kernthema und baut auf dem vorherigen auf. Du l | **10** | Dienste & Ports | `#ftp #http #systemctl #firewall` | 📝 In Arbeit | | **11** | Der erste Zugriff | `#planung #testen #fehler #checkliste` | 📝 In Arbeit | | **12** | **Das Gedächtnis** (Git) | `#init #commit #push #gitea` | 🆕 Neu | +| **13** | **Der Tunnel** (Pipes) | `#grep #awk #sed #pipe` | 🆕 Neu | --- @@ -346,6 +347,26 @@ $ git restore . # Zurück zum funktionierenden Stand! --- +## 📚 Pfad 13: Der Tunnel & die Pipe + +**Was du lernst:** +- Wie verbinde ich Befehle? (`|`) +- Wie finde ich die Nadel im Heuhaufen? (`grep`) +- Wie bearbeite ich Textströme? (`awk`, `sed`) +- Wie leite ich Ausgaben um? (`>`, `>>`) + +**Warum das wichtig ist:** +```bash +# "Ich brauche alle Error-Meldungen von gestern, sortiert!" +$ cat server.log | grep "Error" | grep "2024-12-05" | sort > errors_gestern.txt + +# Das ist die wahre Macht der Shell! ⚡ +``` + +**→ [Zur Crumbpage: Pipes & Filters](crumbpage-13-pipes-filters.md)** + +--- + ## 🎯 Wie du den Vektor durchläufst ### Empfohlene Reihenfolge diff --git a/crumbpage-13-pipes-filters.md b/crumbpage-13-pipes-filters.md new file mode 100644 index 0000000..de6cb36 --- /dev/null +++ b/crumbpage-13-pipes-filters.md @@ -0,0 +1,164 @@ +# 🧭 Crumbpage 13: Der Tunnel & die Pipe + +**Subtitle:** *Bits verknüpfen, filtern und weiterleiten* +**Pfad:** 13 von 13 +**Schwierigkeit:** ⭐⭐⭐⭐ (4/5) +**Zeit:** ~2 Stunden +**Voraussetzungen:** Pfad 3 (Navigation) + +> *"Daten sind wie Wasser. Wenn du Rohre (Pipes) legst, fließen sie genau dorthin, wo du sie brauchst."* 🌲 + +--- + +## 📋 Was du in diesem Pfad lernst + +``` +✓ Standard Input/Output (stdin, stdout, stderr) +✓ Die Pipe (|) - Das Verbindungsstück +✓ Redirection (>, >>, 2>) - Die Umleitung +✓ Die Filter-Werkzeuge: + ├─ grep (Suchen) + ├─ awk (Spalten bearbeiten) + ├─ sed (Suchen & Ersetzen) + └─ cat, head, tail, less +``` + +--- + +## 🎯 Lernziele + +Nach diesem Pfad kannst du: + +- [ ] Aus riesigen Logfiles genau die eine Fehlerzeile finden +- [ ] Befehle verketten, um komplexe Aufgaben zu lösen +- [ ] Ausgaben in Dateien speichern +- [ ] Verstehen, warum `| grep` dein bester Freund ist + +--- + +## 🌱 Grundkonzepte + +### Konzept 1: Der Datenstrom + +Jedes Programm hat 3 Kanäle: +1. **stdin (0):** Eingang (Tastatur oder Daten) +2. **stdout (1):** Ausgang (Bildschirm) +3. **stderr (2):** Fehlerausgang (Bildschirm) + +### Konzept 2: Die Pipe `|` + +Die Pipe nimmt den **Ausgang** von Programm A und steckt ihn in den **Eingang** von Programm B. +`Programm A | Programm B` + +--- + +## 🔧 Die Werkzeuge + +### 1. `cat`, `head`, `tail` (Die Betrachter) + +```bash +$ cat datei.txt # Alles ausgeben +$ head -n 5 datei.txt # Die ersten 5 Zeilen +$ tail -n 5 datei.txt # Die letzten 5 Zeilen +$ tail -f log.txt # Live zuschauen (Follow) +``` + +### 2. `grep` (Der Sucher) + +```bash +$ grep "Error" log.txt # Zeigt Zeilen mit "Error" +$ grep -i "error" log.txt # Case-insensitive (egal ob Groß/Klein) +$ grep -r "config" /etc/ # Rekursiv in Ordnern suchen +``` + +### 3. `|` (Die Pipe) - Die Magie beginnt + +```bash +# Suche "Error" in den letzten 50 Zeilen +$ tail -n 50 syslog | grep "Error" + +# Wie viele Prozesse laufen? +$ ps aux | wc -l # wc = word count (-l = lines) +``` + +### 4. `>` und `>>` (Die Umleitung) + +```bash +# Speichere Output in Datei (Überschreiben) +$ echo "Hallo" > datei.txt + +# Hänge an Datei an (Append) +$ echo "Welt" >> datei.txt + +# Fehler umleiten (stderr) +$ command 2> errors.txt +``` + +### 5. `awk` & `sed` (Die Chirurgen) - Advanced! + +**awk** ist super für Spalten: +```bash +# Zeige nur die PID (Spalte 2) von Prozessen +$ ps aux | awk '{print $2}' +``` + +**sed** ist super zum Ersetzen: +```bash +# Ersetze "foo" durch "bar" im Output +$ echo "foo is cool" | sed 's/foo/bar/' +# Output: bar is cool +``` + +--- + +## 💡 Best Practices + +### DO ✅ + +```bash +# 1. Filtere früh +# Erst grep, dann sortieren. Das spart Rechenzeit. +# Gut: grep "Error" log.txt | sort +# Schlecht: sort log.txt | grep "Error" + +# 2. Nutze `less` zum Lesen +# cat log.txt | less +# Damit kannst du scrollen und suchen (/suchbegriff). +``` + +### DON'T ❌ + +```bash +# 1. `cat` Missbrauch +# Unnötig: cat datei.txt | grep "foo" +# Besser: grep "foo" datei.txt +# (Useless use of cat award!) +``` + +--- + +## 🎓 Hands-On Übungen + +### Übung 1: Der Log-Detektiv + +1. Erstelle eine Datei `test.log` mit vielen Zeilen (einige mit "Error", einige "Info"). +2. Finde alle "Error" Zeilen und speichere sie in `errors_only.txt`. + `grep "Error" test.log > errors_only.txt` + +### Übung 2: Die Pipeline + +1. Liste alle Dateien auf (`ls -l`). +2. Filtere nur die `.txt` Dateien (`grep`). +3. Zähle, wie viele es sind (`wc -l`). + `ls -l | grep ".txt" | wc -l` + +--- + +## 🦉 Crystal Owl's Weisheit + +> *"Ein einzelnes Werkzeug ist stark. Viele Werkzeuge, verbunden durch Pipes, sind unbesiegbar."* + +--- + +**Navigation:** +[← Zurück: Git Basics](crumbpage-12-git-basics.md) | [Zurück zum Start: Admin Vektor](crumbforest-admin-vektor.md)