# 🧭 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)
