Bash Eingabe/Ausgabe: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
Zeile 1: Zeile 1:
==Eingabe/Ausgabe==
+
== Eingabe/Ausgabe ==
Standardeingabe (0): Laufende Programme erwarten von hier ihre Eingaben (normalerweise handelt es sich um die Tastatur).
 
  
Standardausgabe (1): Programme schreiben auf diese ihre Ausgaben (Bildschirm).
+
* '''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).
  
Standardfehlerausgabe (2) : Fehlerausgaben landen hier (Bildschirm, aber nur die aktive Konsole).
+
[[Bild:std.jpg]]
  
[[Bild:std.jpg]]
+
== Umleitungen ==
 +
 
 +
;cat 
 +
Das Programm '''cat''' liest von '''STDIN''' und gibt auf '''STDOUT''' aus, solange bis das '''EOF'''-Zeichen kommt.
  
==Umleitungen==
+
* '''cat'''
;cat
 
Das Programm cat liest von STDIN und gibt es STDOUT wieder aus, solange bis das EOF Zeichen kommt.
 
*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, dies überschreibt den bisherigen Inhalt der Datei
+
Schreiben in die Datei '''dat''' – überschreibt den bisherigen Inhalt der Datei:
*cat > dat
+
* '''cat > dat'''
 
  sogar noch wichtiger  
 
  sogar noch wichtiger  
 
   
 
   
Ausgeben der Datei text
+
Ausgeben der Datei '''dat'''
*cat dat
+
* '''cat dat'''
 
  sogar noch wichtiger
 
  sogar noch wichtiger
  
Lesen aus der Datei dat und schreiben in die Datei neuedat
+
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 des Standardfehlerkanals
+
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 von grep mit Hilfe der Pipe "|"
+
Ü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 von grep
+
Ü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).

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

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?