Pipes
Eine Pipe (|) verbindet den stdout eines Befehls direkt mit dem stdin des nächsten – ohne eine temporäre Datei. Die beiden Programme laufen dabei gleichzeitig; der erste produziert Daten, der zweite verarbeitet sie sofort.
befehl1 | befehl2Einfache Beispiele
Abschnitt betitelt „Einfache Beispiele“ls /etc | sort -r # Verzeichnisinhalt umgekehrt sortierencat /etc/passwd | wc -l # Anzahl Zeilen in /etc/passwd zählenecho "hallo welt" | tr 'a-z' 'A-Z' # in Großbuchstaben umwandelnPipelines – mehrere Befehle verketten
Abschnitt betitelt „Pipelines – mehrere Befehle verketten“Mehrere Pipes lassen sich zu einer Pipeline verketten. Die Daten fließen von links nach rechts durch jeden Befehl:
cat /etc/passwd | cut -d: -f1 | sort | head -5# → erste 5 Benutzernamen alphabetisch sortiertSchritt für Schritt:
cat /etc/passwd– gibt die Datei auscut -d: -f1– schneidet das erste:-getrennte Feld heraus (Benutzername)sort– sortiert alphabetischhead -5– zeigt nur die ersten 5 Zeilen
ls -lh /var/log/*.log | sort -k5 -h | tail -5# → die 5 größten Log-Dateien nach Größe sortiertPipes und stderr
Abschnitt betitelt „Pipes und stderr“Die Pipe verbindet nur stdout – stderr fließt weiterhin direkt auf das Terminal:
ls /etc /nichtvorhanden | wc -l# ls: cannot access '/nichtvorhanden': No such file or directory ← stderr aufs Terminal# 212 ← stdout durch Pipe an wcSollen auch Fehlermeldungen durch die Pipe fließen:
ls /etc /nichtvorhanden 2>&1 | grep "No such"# ls: cannot access '/nichtvorhanden': No such file or directoryPipe vs. Umleitung
Abschnitt betitelt „Pipe vs. Umleitung“Umleitung: befehl > datei.txt
┌─────────┐ stdout ┌───────────┐ │ befehl │ ─────────►│ datei.txt │ └─────────┘ └───────────┘
Pipe: befehl1 | befehl2
┌──────────┐ stdout stdin ┌──────────┐ │ befehl1 │ ─────────────────►│ befehl2 │ └──────────┘ └──────────┘