Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


admin_grundlagen:pipes_und_umleitungen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
admin_grundlagen:pipes_und_umleitungen [2020/12/04 14:06]
holger_jakobs [Dateiinhalt mit 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 24: Zeile 121:
   mv Eigene\ Dateien doc   mv Eigene\ Dateien doc
  
-Alle Grafikdateien in das Verzeichnis Bilder kopieren:+Alle JPEG-Grafikdateien in das Verzeichnis Bilder kopieren:
   find / -name "​*jpg"​ -exec cp {} Bilder/ \; 2>/​dev/​null   find / -name "​*jpg"​ -exec cp {} Bilder/ \; 2>/​dev/​null
 +Hier führt ''​find''​ für jede gefundene Datei das Kommando ''​cp''​ aus. Bei sehr vielen Dateien kann das sehr langsam werden.
   find / -name "​*jpg"​ -print0 2> /dev/null | xargs -0 cp -t Bilder   find / -name "​*jpg"​ -print0 2> /dev/null | xargs -0 cp -t Bilder
 +Hier schreibt ''​find''​ die gefundenen Namen durch ein Nullbyte ''​\0''​ getrennt in die Pipe, aus der ''​xargs''​ liest. Durch die Option ''​-0''​ erwartet ''​xargs'',​ dass die Dateinamen nicht durch ein Zeilenende (''​\n''​),​ sondern durch ein Nullbyte getrennt sind. ''​xargs''​ baut für ''​cp''​ eine lange Parameterliste aus Dateinamen zusammen und übergibt sie. Falls mehr Namen ankommen als auf eine Kommandozeile passen, wird ''​cp''​ ggf. mehrfach aufgerufen, aber viel seltener als im vorigen Beispiel. ​
 +
 +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:
admin_grundlagen/pipes_und_umleitungen.1607090812.txt.gz · Zuletzt geändert: 2020/12/04 14:06 von holger_jakobs