ls -la /dev/std*
lrwxrwxrwx 1 root root 15 Okt 25 17:41 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Okt 25 17:41 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Okt 25 17:41 /dev/stdout -> /proc/self/fd/1
17 November 2022
Alles ist eine Datei! (Oder auch Dateideskriptor, oder Bytestrom)
"[…] Ein-/Ausgabe-Ressourcen wie Dateien, Verzeichnisse, Geräte (z. B. Festplatten, Tastaturen, Drucker) und sogar Interprozess- und Netzwerk-Verbindungen […]"
Befehl | Beschreibung |
---|---|
ls |
list directory |
echo |
display a line of text |
cat |
concatenate files and print on the standard output |
grep |
print lines that match patterns |
… |
siehe /bin/* und /usr/bin/ |
stdin(0): Standard-Eingabe
stdout(1): Standard-Ausgabe
stderr(2): Standard-Fehler
(selbstdefiniert)
ls -la /dev/std*
lrwxrwxrwx 1 root root 15 Okt 25 17:41 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Okt 25 17:41 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Okt 25 17:41 /dev/stdout -> /proc/self/fd/1
Beispiel: Vergleich stdout mit stderr
ls datei.txt
ls datei2.txt
Operator | Beschreibung |
---|---|
> |
Umleitung der Standardausgabe in eine Datei |
>> |
Umleitung in eine Datei, hängt Ausgabe an eine bereits bestehende Datei |
| |
Pipe. Ausgabe eines Kommandos als Eingabe zu einem Anderen |
< und << |
Statt von der Standardeingabe (Tastatur) wird aus einer Datei gelesen |
& |
Umleitung in anderen File Discriptor |
# Beispiel 1 "Hello World"
echo "hallo"
echo "hallo" > datei.txt
# Beispiel 2
echo "hallo in der zweiten Zeile" >> datei.txt
# Beispiel 3: zeilenweise(!) filtern
cat [dateiname] |grep [suchmuster]
cat datei.txt |grep "hallo"
# Aufgabe: was passiert (datei4711.txt exisitert nicht)?
cat datei4711.txt |grep 123
# ls schreibt nach stdout UND stderr -> grep liest nur stdin -> Fehlermedlung von ls landet auf Konsole
# Beispiel 4: verketten
echo "Inhalt der zweiten Datei" > datei2.txt
cat datei1.txt datei2.txt
cat datei1.txt datei2.txt > zusammen.txt
# mehre Zeilen auf einmal ein File
cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF
ls datei.txt datei4711.txt
ls datei.txt datei4711.txt 2> /dev/null
# stdout UND stderr -> Datei umleiten
ls datei.txt datei4711.txt &> Datei.txt
# stdout in Datei umleiten UND stderr in separate Datei umleiten
ls > stdout.txt 2> stderr.txt
# stdout -> stderr
programm 1>&2
# stderr -> stdout
programm 2>&1