home-harmening:scripts:shell:ausgabe_eingabe:umleitungen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

home-harmening:scripts:shell:ausgabe_eingabe:umleitungen [2025/01/30 13:55] – angelegt charmeninghome-harmening:scripts:shell:ausgabe_eingabe:umleitungen [2025/02/04 13:00] (aktuell) charmening
Zeile 1: Zeile 1:
 ===== Umleitungen | Output mit > >> und | verändern ===== ===== Umleitungen | Output mit > >> und | verändern =====
 +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.
 +====Ein-/Ausgabeumleitungen====
 +Bash verwendet Dateideskriptoren, um die Eingabe und Ausgabe zu steuern:\\
 +\\
 +    Standardausgabe (stdout): Dateideskriptor 1\\
 +    Standardfehler (stderr): Dateideskriptor 2\\
 +    Standardeingabe (stdin): Dateideskriptor 0\\
 +\\
 +===Beispiele Umleitungen===
 +|**Befehl**|**Beschreibung**|
 +|command > file.txt|Leitet die Standardausgabe in eine Datei um (überschreibt die Datei)|
 +|command >> file.txt|Hängt die Standardausgabe an eine Datei an|
 +|command 2> error.log|Leitet die Fehlerausgabe in eine Datei um|
 +|command &> output.log|Leitet Standard- und Fehlerausgabe in eine Datei um|
 +|command < input.txt|Liest die Eingabe aus einer Datei|
 +\\
 +**Beispiel:**
 +<code bash>ls -l > dateiliste.txt</code>
 +<code bash>cat nicht_existente_datei 2> fehler.log</code>
 +<code>grep "Fehler" < fehler.log</code>
 +\\
 +====Pipes (|)====
 +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.
 +<code bash>ls -l | grep ".txt"</code>
 +<code bash>cat datei.txt | wc -l</code>
 +<code bash>ps aux | grep firefox</code>
 +\\
 +===Ü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.
 +<hidden Lösung>
 +<code bash>find /usr/bin -type f -executable | awk -F\/ '{print $NF}' |  wc -l</code>
 +</hidden>
 +\\
 +**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.
 +<hidden Lösung>
 +<code bash>
 +$ 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
 +</code>
 +</hidden>
 +\\
 +**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.
 +<hidden Lösung>
 +<code bash>
 +ps aux | grep "^user" | tee /tmp/ps.list | wc -l
 +</code>
 +</hidden>