🔀 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
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
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!