feat: add path 13 pipes and filters

This commit is contained in:
2025-12-06 18:53:39 +01:00
parent 7efd86b40a
commit b8380e6467
2 changed files with 185 additions and 0 deletions

View File

@@ -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

View File

@@ -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)