Bash Eingabe, Ausgabe und Pipes

Aus Xinux Wiki
Version vom 12. Oktober 2025, 19:15 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ == Grundlagen der Datenströme == * '''Standardeingabe (0):''' Laufende Programme erwarten von hier ihre Eingaben (normalerweise handelt es sich um die Tastat…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Grundlagen der Datenströme

  • Standardeingabe (0): Laufende Programme erwarten von hier ihre Eingaben (normalerweise handelt es sich um die Tastatur).
  • Standardausgabe (1): Programme schreiben hier ihre Ausgaben hin (normalerweise der Bildschirm).
  • Standardfehlerausgabe (2): Fehlerausgaben landen hier (Bildschirm, aber nur auf der aktiven Konsole).

Std.jpg

Umleitungen

cat

Das Programm cat liest von STDIN und gibt auf STDOUT aus, solange bis das EOF-Zeichen kommt.

  • cat
bla bla
bla bla

Einlesen der Datei dat

  • cat < dat
wichtig

Schreiben in die Datei dat – überschreibt den bisherigen Inhalt der Datei:

  • cat > dat
sogar noch wichtiger 

Ausgeben der Datei dat

  • cat dat
sogar noch wichtiger

Lesen aus der Datei dat und Schreiben in die Datei neuedat

  • cat < dat > neuedat
  • cat < neuedat
sogar noch wichtiger

Anhängen der Ausgabe von date an die Datei neuedat

  • date >> neuedat
  • cat neuedat
sogar noch wichtiger
Do 18. Jun 14:08:58 CEST 2009

Umleiten des Standardfehlerkanals nach error

  • rm sux 2> error
  • more error
Entfernen von „sux“ nicht möglich: No such file or directory

Zusammenlegen von Standardausgabe und Standardfehlerkanal

  • touch tux
  • rm -v sux tux > aus-err 2>&1
  • cat < aus-err
rm: Entfernen von „sux“ nicht möglich: No such file or directory
„tux“ entfernt

Nacheinander auszuführende Kommandos

  • pwd; date
/root
Do 18. Jun 14:13:05 CEST 2009

Pipes

  • Die Bash-Pipe, symbolisiert durch das Vertikalstrich-Symbol "|", verbindet mehrere Befehle, indem die Ausgabe des vorherigen Befehls als Eingabe für den nächsten Befehl dient.
  • Dadurch lassen sich komplexe Befehlsketten erstellen, bei denen die Ausgabe eines Befehls direkt an einen anderen weitergeleitet wird.
  • Bei der Pipe wird der Standard Output des Kommandos links zum Standard Input des Kommandos rechts übergeben.
  • cat < /etc/passwd | wc -l
34

Symbolbild

  • Die Pipe übergibt nur den Datenstrom, daher kennt wc beim obigen Befehl nicht den Dateinamen.
  • wc -l /etc/passwd
34 /etc/passwd

Aufgaben

Aufgabe 1 – Umleiten der Ausgabe

  • Erstellen Sie eine Datei info.txt mit beliebigem Inhalt.
  • Leiten Sie die Ausgabe des Befehls cat in eine neue Datei kopie.txt um.
  • Überprüfen Sie anschließend den Inhalt von kopie.txt mit cat.
    • Welche Auswirkung hat der Operator >?

Aufgabe 2 – Fehlerausgabe umleiten

  • Führen Sie den Befehl rm datei_does_not_exist aus und beobachten Sie die Ausgabe.
  • Wiederholen Sie den Befehl mit Umleitung der Fehlerausgabe: rm datei_does_not_exist 2> fehler.txt.
  • Untersuchen Sie den Inhalt der Datei fehler.txt.
    • Wohin wurde die Fehlermeldung beim ersten bzw. beim zweiten Aufruf ausgegeben?

Aufgabe 3 – Ausgabe anhängen

  • Erstellen Sie eine Datei log.txt und schreiben Sie mit echo mehrere Zeilen hinein.
  • Fügen Sie anschließend mit date >> log.txt den aktuellen Zeitstempel an.
    • Wann ist das Überschreiben mit > sinnvoll, wann das Anhängen mit >>?

Aufgabe 4 – Arbeiten mit Pipes

  • Kombinieren Sie Befehle mit einer Pipe:
    • cat /etc/passwd | wc -l
  • Testen Sie anschließend die Variante ohne cat:
    • wc -l < /etc/passwd
    • Welche Variante ist effizienter und warum?

Zusatzaufgabe – Filtern und Anzeigen

  • Verwenden Sie Pipes, um gezielt Informationen zu filtern:
    • Zeigen Sie alle Benutzer an, deren Login nicht deaktiviert ist:
  *** grep -v nologin /etc/passwd | grep -v /bin/false
    • Zeigen Sie nur die IPv4-Adressen an:
  *** ip a | grep "inet " | tr -s " " | cut -f 3 -d " "