🐧 Linux Bash & Cloud DevOps

Bash 02: I/O Streams, Pipes & Redirection

Lerne die drei Unix-Standard-Streams kennen, trenne stdout von stderr, lenke Datenflüsse um und baue robuste Pipelines mit tee.

🔀 1. Die drei Unix-Datenströme (File Descriptors)

Jeder Prozess unter Linux startet automatisch mit drei offenen Dateideskriptoren (FDs):

FD 0: stdin  (Standard-Eingabe)  <-- Tastatur oder Pipe
FD 1: stdout (Standard-Ausgabe)  --> Terminal-Display
FD 2: stderr (Standard-Fehler)   --> Terminal-Display (getrennter Kanal!)

# Stream-Umleitungen in der Praxis:
./backup.sh > backup.log           # Leitet nur stdout (FD 1) um
./backup.sh 2> errors.log          # Leitet nur Fehlermeldungen (FD 2) um
./backup.sh > all.log 2>&1         # Leitet stdout und stderr in die gleiche Datei
./backup.sh 2> /dev/null           # Schmeißt alle Fehler ins digitale Nirwana

🌊 2. Unix-Pipelines, tee & Here-Docs

Die Unix-Philosophie lautet: "Schreibe Programme, die genau eine Sache gut machen, und kombiniere sie über Streams."

# 🎯 1. Datenstrom verketten mit Pipe (|):
cat /var/log/nginx/access.log | grep "404" | cut -d' ' -f1 | sort | uniq -c

# 🎯 2. Datenstrom abzweigen mit 'tee':
echo "Deployment gestartet" | tee -a deployment.log

# 🎯 3. Mehrzeilige Konfigurationen mit Here-Docs (< /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m" }
}
EOF
🚰 Didaktische Analogie: Das Wasserleitungssystem

Die Rohre (|): Ein Rohr verbindet den Ausfluss des einen Beckens direkt mit dem Einlauf des nächsten Filters.

Das T-Stück (tee): Wie ein Installateur-T-Stück zweigt tee das fließende Wasser gleichzeitig in eine Vorratsflasche (Datei) ab, während der Hauptstrahl ungebremst weiter durch den Garten (stdout) fließt!

📑 3. Cheat-Sheet: Stream-Operatoren

Operator Beispiel Bedeutung & Verhalten
> datei echo "test" > out.txt Leitet stdout um und überschreibt die Datei
>> datei echo "new line" >> out.txt Leitet stdout um und hängt an
2> datei cmd 2> error.log Leitet nur stderr in die Datei um
2>&1 cmd > out.log 2>&1 Dupliziert stderr auf stdout
| (Pipe) cat log | grep ERR Verbindet stdout von Links mit stdin von Rechts
tee datei cmd | tee -a run.log Schreibt in Datei und leitet weiter auf stdout
<<EOF cat <<EOF ... EOF Here-Document für saubere mehrzeilige Textblöcke

🎯 Aufgaben & Checkliste in aufgabe.sh

💡 DevOps Pro-Tipp: Cronjob-Ausgaben bündeln

In Produktions-Cronjobs solltest du stets 0 2 * * * /opt/backup.sh >> /var/log/backup.log 2>&1 verwenden. So gehen dir weder Statusmeldungen noch kritische Fehlerursachen im Logfile verloren!

💻 In Web-IDE öffnen → ← Zurück zu Bash 01 Weiter zu Bash 03 →