home-harmening:scripts:shell:ausgabe_eingabe:umleitungen

In der Bash können Befehle miteinander verknüpft und ihre Ein- und Ausgaben umgeleitet werden. Dies erleichtert die Verarbeitung von Daten und die Automatisierung von Aufgaben.

Bash verwendet Dateideskriptoren, um die Eingabe und Ausgabe zu steuern:

  Standardausgabe (stdout): Dateideskriptor 1\\
  Standardfehler (stderr): Dateideskriptor 2\\
  Standardeingabe (stdin): Dateideskriptor 0\\


Beispiele Umleitungen

BefehlBeschreibung
command > file.txtLeitet die Standardausgabe in eine Datei um (überschreibt die Datei)
command » file.txtHängt die Standardausgabe an eine Datei an
command 2> error.logLeitet die Fehlerausgabe in eine Datei um
command &> output.logLeitet Standard- und Fehlerausgabe in eine Datei um
command < input.txtLiest die Eingabe aus einer Datei


Beispiel:

ls -l > dateiliste.txt
cat nicht_existente_datei 2> fehler.log
grep "Fehler" < fehler.log


Mit Pipes (|) kann die Ausgabe eines Befehls direkt als Eingabe für einen anderen Befehl verwendet werden.

Beispiel

Hier wird die Ausgabe von ls -l an grep weitergegeben, um nur .txt-Dateien anzuzeigen.

ls -l | grep ".txt"
cat datei.txt | wc -l
ps aux | grep firefox


Übungen

Dateilisten filtern:

      Erstelle eine Liste aller Ausführbaren-Dateien in /usr/bin und speichere sie in einer Datei scripts.txt.
      Zähle die Anzahl der Dateien mit einem einzigen Befehl.

Lösung

Lösung

find /usr/bin -type f -executable | awk -F\/ '{print $NF}' |  wc -l


Fehlermeldungen sammeln:

      Führe einen Befehl aus, der eine Fehlermeldung erzeugt, und leite diese in eine Datei errors.log um.
      Zeige anschließend nur die Zeilen aus errors.log an, die das Wort „Permission“ oder "Berechtigung" enthalten.

Lösung

Lösung

$ echo "LOGFILE" >> errors.log
$ cat test.txt/ 2>> errors.log
$ ls /root/ 2>> errors.log
$ grep "Berechtigung\|gefunden" errors.log 
ls: Öffnen von Verzeichnis '/root/' nicht möglich: Keine Berechtigung
ls: Öffnen von Verzeichnis '/root/' nicht möglich: Keine Berechtigung
cat: test.txt/: Datei oder Verzeichnis nicht gefunden


Prozesse analysieren:

      Finde mit ps aux alle Prozesse, die zu einem bestimmten Benutzer gehören, und leite die Ausgabe in eine Datei.
      Zähle die Anzahl der gefundenen Prozesse mit einem weiteren Befehl.

Lösung

Lösung

ps aux | grep "^user" | tee /tmp/ps.list | wc -l