feat: add path 13 pipes and filters
This commit is contained in:
@@ -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
|
||||
|
||||
164
crumbpage-13-pipes-filters.md
Normal file
164
crumbpage-13-pipes-filters.md
Normal 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)
|
||||
Reference in New Issue
Block a user