Bash Eingabe/Ausgabe: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 1: | Zeile 1: | ||
| − | ==Eingabe/Ausgabe== | + | == Eingabe/Ausgabe == |
| − | |||
| − | Standardausgabe (1): Programme schreiben | + | * '''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). | ||
| − | + | [[Bild:std.jpg]] | |
| − | + | == Umleitungen == | |
| + | |||
| + | ;cat | ||
| + | Das Programm '''cat''' liest von '''STDIN''' und gibt auf '''STDOUT''' aus, solange bis das '''EOF'''-Zeichen kommt. | ||
| − | + | * '''cat''' | |
| − | |||
| − | |||
| − | *cat | ||
bla bla | bla bla | ||
bla bla | bla bla | ||
| − | Einlesen der Datei dat | + | Einlesen der Datei '''dat''' |
| − | *cat < dat | + | * '''cat < dat''' |
wichtig | wichtig | ||
| − | Schreiben in die Datei dat | + | Schreiben in die Datei '''dat''' – überschreibt den bisherigen Inhalt der Datei: |
| − | *cat > dat | + | * '''cat > dat''' |
sogar noch wichtiger | sogar noch wichtiger | ||
| − | Ausgeben der Datei | + | Ausgeben der Datei '''dat''' |
| − | *cat dat | + | * '''cat dat''' |
sogar noch wichtiger | sogar noch wichtiger | ||
| − | Lesen aus der Datei dat und | + | Lesen aus der Datei '''dat''' und Schreiben in die Datei '''neuedat''' |
| − | *cat < dat > neuedat | + | * '''cat < dat > neuedat''' |
| − | *cat < neuedat | + | * '''cat < neuedat''' |
sogar noch wichtiger | sogar noch wichtiger | ||
| − | Anhängen der Ausgabe von date an die Datei neuedat | + | Anhängen der Ausgabe von '''date''' an die Datei '''neuedat''' |
| − | *date >> neuedat | + | * '''date >> neuedat''' |
| − | *cat neuedat | + | * '''cat neuedat''' |
sogar noch wichtiger | sogar noch wichtiger | ||
Do 18. Jun 14:08:58 CEST 2009 | Do 18. Jun 14:08:58 CEST 2009 | ||
| − | Umleiten des Standardfehlerkanals nach error | + | Umleiten des Standardfehlerkanals nach '''error''' |
| − | *rm sux 2> error | + | * '''rm sux 2> error''' |
| − | *more error | + | * '''more error''' |
Entfernen von „sux“ nicht möglich: No such file or directory | Entfernen von „sux“ nicht möglich: No such file or directory | ||
| − | Zusammenlegen von Standardausgabe und | + | Zusammenlegen von Standardausgabe und Standardfehlerkanal |
| − | *touch tux | + | * '''touch tux''' |
| − | *rm -v sux tux > aus-err 2>&1 | + | * '''rm -v sux tux > aus-err 2>&1''' |
| − | *cat < aus-err | + | * '''cat < aus-err''' |
rm: Entfernen von „sux“ nicht möglich: No such file or directory | rm: Entfernen von „sux“ nicht möglich: No such file or directory | ||
„tux“ entfernt | „tux“ entfernt | ||
| Zeile 52: | Zeile 53: | ||
{{#drawio:std-err}} | {{#drawio:std-err}} | ||
| − | ==Nacheinander auszuführende Kommandos== | + | == Nacheinander auszuführende Kommandos == |
| − | *pwd; date | + | |
| + | * '''pwd; date''' | ||
/root | /root | ||
Do 18. Jun 14:13:05 CEST 2009 | Do 18. Jun 14:13:05 CEST 2009 | ||
| − | Verknüpfung von cat und wc | + | Verknüpfung von '''cat''' und '''wc''' |
| − | *cat < aus-err | wc -l | + | * '''cat < aus-err | wc -l''' |
2 | 2 | ||
| − | Übergeben der Ausgabe von tail als Eingabe | + | Übergeben der Ausgabe von '''tail''' als Eingabe für '''grep''' mit Hilfe der Pipe „|“ |
| − | *tail /var/log/auth.log | grep xinux | + | * '''tail /var/log/auth.log | grep xinux''' |
Jun 18 13:52:33 zero nss_wins[11433]: pam_unix(login:session): session closed for user xinux | Jun 18 13:52:33 zero nss_wins[11433]: pam_unix(login:session): session closed for user xinux | ||
| − | Übergeben der letzten 100 Zeilen von syslog als Eingabe | + | Übergeben der letzten 100 Zeilen von syslog als Eingabe für '''grep''' |
| − | *tail /var/log/syslog -n 100 | grep error | + | * '''tail /var/log/syslog -n 100 | grep error''' |
Jun 18 09:30:54 zero kernel: [154384.692135] end_request: I/O error, dev fd0, sector 0 | Jun 18 09:30:54 zero kernel: [154384.692135] end_request: I/O error, dev fd0, sector 0 | ||
Jun 18 09:30:54 zero kernel: [154384.712137] end_request: I/O error, dev fd0, sector 0 | Jun 18 09:30:54 zero kernel: [154384.712137] end_request: I/O error, dev fd0, sector 0 | ||
| + | |||
| + | = 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 – Anhängen von Ausgaben == | ||
| + | * 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. | ||
| + | * Prüfen Sie den Unterschied zwischen '''>''' und '''>>'''. | ||
| + | ** Wann ist welche Variante sinnvoll? | ||
| + | |||
| + | == Aufgabe 3 – 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 4 – Pipes verwenden == | ||
| + | * Kombinieren Sie die Befehle '''cat''' und '''wc''', um die Anzahl der Zeilen einer Datei '''/etc/passwd''' zu zählen. | ||
| + | * Verwenden Sie dazu eine Pipe: | ||
| + | ** '''cat /etc/passwd | wc -l''' | ||
| + | * Testen Sie anschließend eine Variante ohne '''cat''': | ||
| + | ** '''wc -l < /etc/passwd''' | ||
| + | ** Welche Variante ist effizienter und warum? | ||
| + | |||
| + | == Zusatzaufgabe – Standardausgabe und Fehler gemeinsam umleiten == | ||
| + | * Erstellen Sie ein Skript, das mehrere Befehle enthält, von denen einige Fehler erzeugen (z. B. '''ls /root''' und '''ls /tmp'''). | ||
| + | * Leiten Sie sowohl Standardausgabe als auch Standardfehler in eine gemeinsame Datei um: | ||
| + | ** '''bash skript > ausgabe.txt 2>&1''' | ||
| + | * Analysieren Sie den Inhalt von '''ausgabe.txt'''. | ||
| + | ** Welche Ausgaben stammen von der Standardausgabe und welche vom Fehlerkanal? | ||
Aktuelle Version vom 12. Oktober 2025, 19:11 Uhr
Eingabe/Ausgabe
- 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).
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
Verknüpfung von cat und wc
- cat < aus-err | wc -l
2
Übergeben der Ausgabe von tail als Eingabe für grep mit Hilfe der Pipe „|“
- tail /var/log/auth.log | grep xinux
Jun 18 13:52:33 zero nss_wins[11433]: pam_unix(login:session): session closed for user xinux
Übergeben der letzten 100 Zeilen von syslog als Eingabe für grep
- tail /var/log/syslog -n 100 | grep error
Jun 18 09:30:54 zero kernel: [154384.692135] end_request: I/O error, dev fd0, sector 0 Jun 18 09:30:54 zero kernel: [154384.712137] end_request: I/O error, dev fd0, sector 0
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 – Anhängen von Ausgaben
- 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.
- Prüfen Sie den Unterschied zwischen > und >>.
- Wann ist welche Variante sinnvoll?
Aufgabe 3 – 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 4 – Pipes verwenden
- Kombinieren Sie die Befehle cat und wc, um die Anzahl der Zeilen einer Datei /etc/passwd zu zählen.
- Verwenden Sie dazu eine Pipe:
** cat /etc/passwd | wc -l
- Testen Sie anschließend eine Variante ohne cat:
** wc -l < /etc/passwd
- Welche Variante ist effizienter und warum?
Zusatzaufgabe – Standardausgabe und Fehler gemeinsam umleiten
- Erstellen Sie ein Skript, das mehrere Befehle enthält, von denen einige Fehler erzeugen (z. B. ls /root und ls /tmp).
- Leiten Sie sowohl Standardausgabe als auch Standardfehler in eine gemeinsame Datei um:
** bash skript > ausgabe.txt 2>&1
- Analysieren Sie den Inhalt von ausgabe.txt.
- Welche Ausgaben stammen von der Standardausgabe und welche vom Fehlerkanal?

