TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸

Anleitung: Pipes in der Bash zur Verkettung von Befehlen verwenden

December 15, 2015

Der Pipe-Operator (|) ist eines der mächtigsten Konzepte der Unix-Philosophie. Er ermöglicht es, einfache, spezialisierte Kommandozeilen-Werkzeuge zu komplexen Verarbeitungsketten zu verknüpfen, indem er die Standardausgabe (stdout) eines Befehls direkt als Standardeingabe (stdin) für den nächsten Befehl weiterleitet.


1. Grundlegende Funktionsweise

Syntax: befehl1 | befehl2

  1. befehl1 wird ausgeführt.
  2. Alles, was befehl1 auf stdout schreibt, wird nicht im Terminal angezeigt, sondern...
  3. ...direkt an stdin von befehl2 übergeben.
  4. Nur die Ausgabe von befehl2 erscheint im Terminal.

Beispiel: Prozesse filtern

code
# `ps aux` listet alle laufenden Prozesse auf.
# `grep "nginx"` filtert diese Liste und gibt nur Zeilen aus, die "nginx" enthalten.
ps aux | grep "nginx"

Beispiel für eine Pipe


2. Verkettung mehrerer Befehle (Pipelines)

Mehrere Pipes können aneinandergereiht werden, um komplexe Daten-Workflows zu erstellen.

code
# 1. Listet alle Prozesse.
# 2. Filtert nach "nginx".
# 3. `grep -v "grep"` entfernt die Zeile, die den grep-Befehl selbst enthält.
# 4. `awk '{print $2}'` extrahiert die zweite Spalte (die Prozess-ID).
ps aux | grep "nginx" | grep -v "grep" | awk '{print $2}'

Beispiel für mehrere Pipes


3. Kombination mit tee: Ausgabe anzeigen und speichern

Der tee-Befehl liest von stdin und schreibt den Inhalt sowohl nach stdout (zur Anzeige im Terminal) als auch in eine oder mehrere Dateien.

code
# Zeigt die Kernel-Meldungen an UND speichert sie gleichzeitig in 'dmesg.log'
dmesg | tee dmesg.log

4. Wichtige Sicherheitshinweise

curl URL | bash

Seien Sie extrem vorsichtig mit Befehlen, die ein Skript aus dem Internet herunterladen und direkt an eine Shell weiterleiten.

code
# POTENZIELL GEFÄHRLICH!
curl -sSL https://example.com/install.sh | sudo bash

Dies führt den Code ungeprüft mit Root-Rechten aus. Ein Angreifer könnte den Inhalt des Skripts manipulieren.

Sichere Alternative:

code
# 1. Herunterladen
curl -o install.sh https://example.com/install.sh
# 2. Überprüfen
less install.sh
# 3. Ausführen
bash install.sh

Fehler in Pipelines (set -o pipefail)

Standardmäßig gibt eine Pipeline den Exit-Code des letzten Befehls zurück. Wenn ein früherer Befehl fehlschlägt, läuft die Kette trotzdem weiter. Um dies zu verhindern, verwenden Sie set -o pipefail am Anfang Ihres Skripts.

code
set -o pipefail
# Jetzt bricht die gesamte Pipeline ab, wenn ein Befehl darin fehlschlägt.
false | echo "Dieser Teil wird nicht erreicht."

Fazit

Pipes sind das Herzstück der Kommandozeilen-Effizienz in Unix-Systemen. Sie ermöglichen es, einfache Werkzeuge modular zu kombinieren, um komplexe Aufgaben zu lösen, ohne temporäre Dateien erstellen zu müssen.