↓ Zum Hauptinhalt springen
  1. Lernen/
  2. Linux/

Linux Pipes und Umleitungen: Befehle clever verknüpfen

Patrick Adams
Autor
Patrick Adams
Linux-Administrator und IT-Specialist. Ich schreibe über Server, Self-Hosting und Open-Source-Software, praxisnah und selbst getestet. Mehr über mich →
Inhaltsverzeichnis
Einzelne Linux-Befehle können für sich genommen nicht besonders viel. Richtig stark werden sie erst, wenn man sie miteinander verknüpft. Genau dafür gibt es Pipes und Umleitungen.

Was ist eine Pipe?
#

Mit dem senkrechten Strich | gibst du die Ausgabe eines Befehls direkt an den nächsten weiter. Das funktioniert wie ein Fließband: Jeder Befehl erledigt einen Arbeitsschritt.

ps aux | grep nginx

ps aux listet alle Prozesse auf, und grep filtert daraus nur die Zeilen mit „nginx“. Du kannst beliebig viele Befehle hintereinanderhängen:

ps aux | grep nginx | wc -l

Hier zählt wc -l am Ende noch, wie viele Zeilen übrig geblieben sind.

Ausgaben umleiten
#

ZeichenBedeutung
>Schreibt die Ausgabe in eine Datei und überschreibt sie dabei.
>>Hängt die Ausgabe ans Ende einer Datei an.
2>Leitet nur die Fehlermeldungen um.
2>&1Leitet Fehlermeldungen dorthin, wohin auch die normale Ausgabe geht.
&>Normale Ausgabe und Fehler zusammen in eine Datei.
<Liest die Eingabe aus einer Datei.
ls -la > dateiliste.txt
echo "Backup fertig" >> backup.log
find / -name "*.conf" 2> /dev/null
./backup.sh > backup.log 2>&1

/dev/null ist eine Art Mülleimer. Alles, was du dorthin schickst, verschwindet.

Vorsicht mit >: Die Datei wird ohne Nachfrage überschrieben. Wenn du etwas anhängen willst, nimm >>.

Die wichtigsten Helfer für Pipes
#

BefehlWas er machtBeispiel
grepFiltert Zeilen nach einem Begriff. Mit -i ohne Groß- und Kleinschreibung, mit -v umgekehrt.grep -i error
sortSortiert Zeilen. Mit -n nach Zahlen, -r absteigend, -h nach Größen wie 4K oder 2G.sort -rn
uniqEntfernt doppelte Zeilen. Mit -c zählt es sie.uniq -c
wcZählt Zeilen, Wörter oder Zeichen.wc -l
headZeigt nur die ersten Zeilen.head -n 10
tailZeigt nur die letzten Zeilen.tail -n 10
cutSchneidet Spalten aus, getrennt durch ein Zeichen.cut -d: -f1
awkGibt bestimmte Spalten aus, getrennt durch Leerzeichen.awk '{print $1}'
teeZeigt die Ausgabe an und schreibt sie gleichzeitig in eine Datei.tee ausgabe.txt
xargsMacht aus der Ausgabe Argumente für einen anderen Befehl.xargs rm
lessZeigt lange Ausgaben seitenweise an. Beenden mit q.less

uniq erkennt nur doppelte Zeilen, die direkt untereinander stehen. Deshalb steht davor fast immer ein sort.

Beispiele aus der Praxis
#

Die größten Ordner finden
#

du -sh /var/* 2> /dev/null | sort -rh | head -n 10

Zeigt die zehn größten Ordner in /var. Ideal, wenn die Festplatte plötzlich voll ist.

Die häufigsten Besucher im Webserver-Log
#

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -n 10

awk holt die IP-Adressen heraus, sort und uniq -c zählen sie, und am Ende stehen die zehn häufigsten oben.

Fehlgeschlagene SSH-Anmeldungen auswerten
#

journalctl -u ssh -g "Failed password" --no-pager | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head

So siehst du, von welchen IP-Adressen am häufigsten versucht wird, sich bei dir anzumelden.

Ausgabe anzeigen und gleichzeitig speichern
#

apt list --upgradable 2> /dev/null | tee updates.txt

Alte Logdateien sicher löschen
#

find /var/log/meinprogramm -name "*.log" -mtime +30 -print0 | xargs -0 rm

Löscht alle Logdateien, die älter als 30 Tage sind. Mit -print0 und -0 funktioniert das auch bei Dateinamen mit Leerzeichen.

Mehr zum Auslesen von Logs findest du in meinem Beitrag zu journalctl und Linux-Logs.

Verwandte Artikel