Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
|
admin_grundlagen:pipes_und_umleitungen [2020/12/07 07:27] ingo_wichmann [Ausgabe eines Befehls mit zweitem Befehl weiterverarbeiten] |
admin_grundlagen:pipes_und_umleitungen [2022/11/21 14:32] (aktuell) ingo_wichmann [Kanäle] |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Kanäle ====== | ||
| + | Datei ''ausgabe.txt'' mit Standard-Ausgabe des Befehls ''ls -la'' überschreiben: | ||
| + | ls -la > ausgabe.txt | ||
| + | cat ausgabe.txt | ||
| + | -> Länge der Datei ''ausgabe.txt'' beachten! | ||
| + | |||
| + | Standard-Ausgabe des Befehls ''date'' an Datei ''ausgabe.txt'' anhängen: | ||
| + | date >> ausgabe.txt | ||
| + | cat ausgabe.txt | ||
| + | |||
| + | Standard-Eingabe: | ||
| + | wc -l ausgabe.txt | ||
| + | wc -l < ausgabe.txt | ||
| + | wc -l /etc/shadow | ||
| + | wc -l < /etc/shadow | ||
| + | |||
| + | Datei ''fehler.txt'' mit Fehlerausgabe des Befehls ''ls gibtsnicht'' überschreiben: | ||
| + | ls gibtsnicht 2> fehler.txt | ||
| + | |||
| + | Fehlerausgabe des Befehls ''ls gibtsnicht'' an Datei ''fehler.txt'' anhängen: | ||
| + | ls gibtsnicht 2>> fehler.txt | ||
| + | |||
| + | ls . gibtsnicht 2> fehler.txt | ||
| + | ls . gibtsnicht > ausgabe.txt | ||
| + | ls . gibtsnicht >& beides.txt | ||
| + | ls . gibtsnicht > beides.txt 2>&1 | ||
| + | | ||
| + | |||
| + | |||
| + | ====== Pipes ====== | ||
| + | Beispiele: | ||
| + | |||
| + | dpkg -l | wc -l | ||
| + | dpkg -l | tee pakete.txt | less | ||
| + | |||
| + | Doku: | ||
| + | * [[wpde>Pipe (Informatik)]] | ||
| + | * [[https://www.moritz.systems/blog/mastering-unix-pipes-part-1/|detaillierte, technische Beschreibung, wie Pipes implementiert sind]] | ||
| + | ====== Filterbefehle ====== | ||
| + | ===== cat, tac & split ===== | ||
| + | |||
| + | Tabelle 8.2 im Skript | ||
| + | |||
| + | tar cz --directory /usr/share doc/ | split -b 10M - doc.tar. | ||
| + | cat doc.tar.a* | tar tz | tail | ||
| + | |||
| + | Benutzerliste rückwärts und mit Zeilennummern ;-) | ||
| + | tac /etc/passwd | ||
| + | cat -n /etc/passwd | ||
| + | ===== head & tail ===== | ||
| + | head -n 20 /etc/services | ||
| + | tail -n 20 /etc/services | ||
| + | Kapitel 8.3.2 im Skript lesen | ||
| + | |||
| + | Übungen 8.8 - 8.11 im Skript | ||
| + | |||
| + | ===== od ===== | ||
| + | echo 'Müller' | od -a | ||
| + | |||
| + | ===== cut ===== | ||
| + | cut -d: -f 7 /etc/passwd | ||
| + | |||
| + | ===== sort ===== | ||
| + | Tabelle 8.10 im Skript | ||
| + | |||
| + | Übungen 8.22, 8.23, 8.26 im Skript | ||
| + | |||
| + | ===== uniq ===== | ||
| + | |||
| + | find /usr/share/doc -printf '%y\n' | sort | uniq -c | ||
| + | | ||
| + | ===== grep ===== | ||
| + | cat /etc/passwd | grep bash | ||
| + | (( | ||
| + | Moderne Alternativen: | ||
| + | * [[https://packages.debian.org/source/sid/rust-ripgrep|ripgrep]] | ||
| + | * [[https://packages.debian.org/source/bullseye/ugrep|ugrep]] | ||
| + | )) | ||
| + | |||
| + | {{:linux_grundlagen:pasted:20220310-151508.png}} | ||
| + | ===== column ===== | ||
| + | column -t /etc/fstab | ||
| + | ip -o link | column -t | ||
| + | ip -o address | column -t | ||
| + | column -s: -t /etc/passwd | ||
| + | |||
| + | ===== Pipeline ===== | ||
| + | Statistik aller eingegebenen Befehle | ||
| + | history | tr -s "[[:space:]]" | cut -d" " -f 3- | sort | uniq -c| sort -nr | ||
| + | |||
| + | ====== Übung ====== | ||
| + | |||
| + | Wer errät, wofür dieser Befehl gut ist? (( https://massimo-nazaria.github.io/blog/2019/03/02/unix-philosophy-with-an-example.html )) | ||
| + | seq 1 6 | shuf | head -n 1 | ||
| + | |||
| + | |||
| + | |||
| ===== Vorbereitung des Beispiels ===== | ===== Vorbereitung des Beispiels ===== | ||
| Testdaten ins Heimatverzeichnis kopieren: | Testdaten ins Heimatverzeichnis kopieren: | ||
| Zeile 32: | Zeile 129: | ||
| Weil ''cp'' üblicherweise das Ziel als letzten Parameter erwartet, muss hier die Option ''-t'' verwendet werden, um das Zielverzeichnis zu Beginn anzugeben. | Weil ''cp'' üblicherweise das Ziel als letzten Parameter erwartet, muss hier die Option ''-t'' verwendet werden, um das Zielverzeichnis zu Beginn anzugeben. | ||
| | | ||
| - | | + | Eine Variante ohne ''xargs'' und ohne das ''cp''-Kommando für jede gefundene Datei aufzurufen: |
| + | find / -name "*jpg" -exec cp -t Bilder/ {} + 2>/dev/null | ||
| + | Das ''+''-Zeichen braucht nicht geschützt zu werden. Es werden ganz viele Dateinamen am Ende des Kommandos anstelle des ''{}'' eingefügt. | ||
| ===== Fehlerausgabe und Standardausgabe zusammenfassen ===== | ===== Fehlerausgabe und Standardausgabe zusammenfassen ===== | ||
| Lange Version, geht auch mit anderen Shells als bash: | Lange Version, geht auch mit anderen Shells als bash: | ||