|
|
| (41 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) |
| Zeile 1: |
Zeile 1: |
| | =Eingabe/Ausgabe= |
|
| |
|
| ==Einfache Shellsonderzeichen==
| | *[[Shell Einausgabe/Ausgabe]] |
|
| |
|
| {| class="wikitable" border="1" cellpadding="2"
| | =Bash Pipe= |
| |-
| |
| |;
| |
| |Trenne Kommandos
| |
| |-
| |
| |#
| |
| |Kommentar
| |
| |-
| |
| |&
| |
| |Programm im Hintergrund starten
| |
| |-
| |
| |<nowiki>|</nowiki>
| |
| |STOUT von links wird zu STDIN von rechts
| |
| |-
| |
| |*
| |
| |steht für beliebig viel Zeichen auch 0
| |
| |-
| |
| |?
| |
| |steht für genau ein Zeichen
| |
| |-
| |
| |[abc]
| |
| |steht für eins der Zeichen in [ ] hier a b oder c
| |
| |-
| |
| |~
| |
| |das Homeverzeichnis
| |
| |-
| |
| |> und >>
| |
| |leite in Datei um > überschreibe >> hänge an
| |
| |-
| |
| |<
| |
| |lesen aus Datei
| |
| |-
| |
| |2>&1
| |
| |leite STDERR auf STDOUT
| |
| |-
| |
| |<< ende
| |
| |Lesen aus Datei (Heredokument)
| |
| |-
| |
| |{ , , , }
| |
| |Zeichenketten zusammensetzen
| |
| |-
| |
| |"..."
| |
| |Entwertung der Sonderzeichen ausser $ ' \
| |
| |-
| |
| |'...'
| |
| |Entwertung sämtlicher Sonderzeichen ausser ' selbst
| |
| |-
| |
| |\
| |
| |Entwertung des folgenden Sonderzeichens
| |
| |-
| |
| |}
| |
|
| |
|
| | *[[Bash Pipe]] |
|
| |
|
| ==Eingabe/Ausgabe== | | =Datenstrom Programme= |
| Standardeingabe (0): Laufende Programme erwarten von hier ihre Eingaben (normalerweise handelt es sich um die Tastatur).
| |
|
| |
|
| Standardausgabe (1): Programme schreiben auf diese ihre Ausgaben (Bildschirm).
| | ==Sollte man kennen== |
| | *[[Reguläre Ausdrücke#grep|grep]] |
| | *[[wc]] |
| | *[[tr]] |
| | *[[cut]] |
| | *[[sed]] |
| | *[[sort]] |
| | <!-- |
| | ==Braucht man seltener== |
| | *[[expand]] |
| | *[[fmt]] |
| | *[[join]] |
| | *[[nl]] |
| | *[[od]] |
| | *[[paste]] |
| | *[[pr]] |
| | --> |
| | =Sonderzeichen= |
|
| |
|
| Standardfehlerausgabe (2) : Fehlerausgaben landen hier (Bildschirm, aber nur die aktive Konsole).
| | *[[Einfache Shellsonderzeichen]] <--- Matchen von Dateien |
| | *[[Reguläre Ausdrücke]] <--- Matchen von Strings |
|
| |
|
| [[Bild:std.jpg]]
| | =Nacheinander auszuführende Kommandos= |
|
| |
|
| ===Umleitungen===
| | *[[Nacheinander auszuführende Kommandos]] |
| ===cat===
| |
| Das Programm cat liest von STDIN und gibt es STDOUT wieder aus, solange bis das EOF Zeichen kommt.
| |
| root@zero:~# cat
| |
| bla bla
| |
| bla bla
| |
|
| |
|
| Einlesen der Datei dat
| | =Jokerzeichen in der Shell= |
| root@zero:~# cat < dat
| |
| wichtig
| |
|
| |
|
| Schreiben in die Datei dat, dies überschreibt den bisherigen Inhalt der Datei
| | *[[Jokerzeichen in der Shell]] |
| root@zero:~# cat > dat
| |
| sogar noch wichtiger
| |
|
| |
| Ausgeben der Datei text
| |
| root@zero:~# cat dat
| |
| sogar noch wichtiger
| |
|
| |
|
| Lesen aus der Datei dat und schreiben in die Datei neuedat
| | =Übungen= |
| root@zero:~# cat < dat > neuedat
| | *[[umgang mit der Shell Übungen]] |
| root@zero:~# cat < neuedat
| |
| sogar noch wichtiger
| |
| | |
| Anhängen der Ausgabe von date an die Datei neuedat
| |
| root@zero:~# date >> neuedat
| |
| root@zero:~# cat neuedat
| |
| sogar noch wichtiger
| |
| Do 18. Jun 14:08:58 CEST 2009
| |
| | |
| Umleiten des Standardfehlerkanals nach error
| |
| root@zero:~# rm sux 2> error
| |
| root@zero:~# more error
| |
| rm: Entfernen von „sux“ nicht möglich: No such file or directory
| |
| | |
| Zusammenlegen von Standardausgabe und des Standardfehlerkanals
| |
| root@zero:~# touch tux
| |
| root@zero:~# rm -v sux tux > aus-err 2>&1
| |
| root@zero:~# cat < aus-err
| |
| rm: Entfernen von „sux“ nicht möglich: No such file or directory
| |
| „tux“ entfernt
| |
| | |
| ===Nacheinander auszuführende Kommandos===
| |
| root@zero:~# pwd; date
| |
| /root
| |
| Do 18. Jun 14:13:05 CEST 2009
| |
|
| |
| Verknüpfung von cat und wc
| |
| root@zero:~# thomas@lydia:~$ cat < aus-err | wc -l
| |
| 2
| |
| | |
| Übergeben der Ausgabe von tail als Eingabe von grep mit Hilfe der Pipe "|"
| |
| root@zero:~# tail /var/log/auth.log | grep xinux
| |
| Jun 18 13:52:33 zero nss_wins[11433]: pam_unix(login:session): session closed for user xinux
| |
| | |
| Übergeben der letzten 100 Zeilen von syslog als Eingabe von grep
| |
| root@zero:~# tail /var/log/syslog -n 100 | grep error
| |
| Jun 18 09:30:54 zero kernel: [154384.692135] end_request: I/O error, dev fd0, sector 0
| |
| Jun 18 09:30:54 zero kernel: [154384.712137] end_request: I/O error, dev fd0, sector 0
| |
| | |
| ==wc==
| |
| Zählt die Anzahl von Zeichen, Wörter oder Zeilen
| |
| | |
| Optionen
| |
| * -m : Zählt die Anzahl der Zeichen | |
| root@zero:~# more name
| |
| 1. karl
| |
| 2. heinz
| |
| 3. hans
| |
| 4. otto
| |
| root@zero:~# wc '''-m''' tel
| |
| 33 tel
| |
| | |
| * -w : Zählt die Anzahl der Wörter (einschließlich Zahlen und andere Zeichen)
| |
| root@zero:~# wc '''-w''' name
| |
| 8 name
| |
| | |
| * -l : Zählt die Anzahl der Zeilen
| |
| root@zero:~# wc '''-l''' name
| |
| 4 name
| |
| | |
| | |
| ==tr==
| |
| tr ist ein Programm um Zeichen zu übersetzen. Dies betrifft nur die Ausgabe, die Datei selbst bleibt unverändert.
| |
| | |
| Ersetzt Kleinbuchstaben durch Großbuchstaben aus der Datei text
| |
| root@zero:~# tr "a-z" "A-Z" < text
| |
| SOGAR NOCH WICHTIGER
| |
| 123
| |
| 34
| |
| 4711
| |
| TEST
| |
| | |
| Ersetzt alle Zahlen durch X
| |
| root@zero:~# tr "0-9" "X" < text
| |
| sogar noch wichtiger
| |
| XXX
| |
| XX
| |
| XXXX
| |
| test
| |
| | |
| | |
| root@zero:~# cat > test
| |
| +++++
| |
| ###
| |
| 1111
| |
| | |
| -s löscht mehrfach kommende Zeichen
| |
| root@zero:~# tr '''-s''' "+" < test
| |
| +
| |
| ###
| |
| 1111
| |
| | |
| -d löscht vorkommende Zeichen
| |
| root@zero:~# tr '''-d''' "#" < test
| |
| +++++
| |
|
| |
| 1111
| |
| | |
| ==cut==
| |
| Spalten aus einer Datei schneiden. Dies betrifft nur die Ausgabe, die Datei selbst bleibt unverändert.
| |
|
| |
| Schneidet die erste Spalte aus, der Delimiter ist :
| |
| root@zero:~# cut -f 1 -d : < /etc/passwd
| |
| root
| |
| daemon
| |
| bin
| |
| ...
| |
| xinux
| |
| | |
| root@zero:~# more test
| |
| 1234#5678#9999
| |
|
| |
| Schneidet die zweite Spalte aus, der Delimiter ist #
| |
| root@zero:~# cut -f 2 -d "#" < test
| |
| 5678
| |
| | |
| Schneidet bis zum 3 Zeichen ab
| |
| root@zero:~$ echo S01policykit | cut -c 4-
| |
| policykit
| |
| | |
| ==expand(lpi)==
| |
| Ersetzt Tabulatorzeichen durch Folgen von Leerzeichen und schreibt das Ergebnis auf die Standardausgabe
| |
| root@zero:~# expand /etc/samba/smb.conf
| |
| ...
| |
| | |
| ==fmt(lpi)==
| |
| #Setzt den Text der Dateien im Blocksatz der angegebenen Breite durch Auffüllen von Zeilen und Entfernen von Zeilenwechseln.
| |
| Standardgemäß werden Leerzeilen, die Position von Leerzeichen und der Einzug am Zeilenanfang erhalten. fmt versucht,
| |
| Zeilenumbrüche an Satzenden durchzuführen sowie sie nach dem ersten oder vor dem letzten Wort eines Satzes zu vermeiden.
| |
|
| |
| fmt [Optionen] [Dateien]
| |
| | |
| Optionen
| |
| | |
| * -p ''Präfix'': Formatiert nur Zeilen, die mit ''Präfix'' anfangen
| |
| root@zero:/tmp# fmt -p '#' text
| |
| #Setzt den Text der Dateien im Blocksatz der angegebenen Breite durch
| |
| #Auffüllen von Zeilen und Entfernen von Zeilenwechseln. Standardgemäß
| |
| #werden Leerzeilen, die Position von Leerzeichen und der Einzug am
| |
| #Zeilenanfang erhalten. fmt versucht,
| |
| Zeilenumbrüche an Satzenden durchzuführen sowie sie nach dem ersten oder vor dem letzten Wort eines Satzes zu vermeiden.
| |
| | |
| * -u : Erzwingt genau ein Leerzeichen zwischen Wörtern und zwei Leerzeichen zwischen Sätzen
| |
| | |
| * -w ''Breite'': Setzt die Ausgabebreite auf ''Breite''
| |
| root@zero:/tmp# fmt -w 30 text
| |
| #Setzt den Text der Dateien
| |
| im Blocksatz der angegebenen
| |
| Breite durch Auffüllen
| |
| von Zeilen und Entfernen
| |
| von Zeilenwechseln.
| |
| #Standardgemäß werden
| |
| Leerzeilen, die Position von
| |
| Leerzeichen und der Einzug am
| |
| Zeilenanfang erhalten. fmt
| |
| versucht, Zeilenumbrüche
| |
| an Satzenden durchzuführen
| |
| sowie sie nach dem ersten
| |
| oder vor dem letzten Wort
| |
| eines Satzes zu vermeiden.
| |
| | |
| ==join(lpi)==
| |
| Führt die Zeilen zweier sortierter Dateien anhand von '''Übereinstimmungen''' in einem gemeinsamen Feld zusammen.
| |
| | |
| root@zero:~# more name
| |
| 1. karl
| |
| 2. heinz
| |
| 3. hans
| |
| 4. otto
| |
| root@zero:~# more tel
| |
| 1. 1234
| |
| 2. 4321
| |
| 3. 222
| |
| 4. 121212
| |
| root@zero:~# join name tel > telefonbuch
| |
| root@zero:~# more telefonbuch
| |
| 1. karl 1234
| |
| 2. heinz 4321
| |
| 3. hans 222
| |
| 4. otto 121212
| |
| | |
| root@zero:~# join -t : /etc/passwd /etc/shadow
| |
| ....
| |
| daemon:x:1:1:daemon:/usr/sbin:/bin/sh:*:14181:0:99999:7:::
| |
| bin:x:2:2:bin:/bin:/bin/sh:*:14181:0:99999:7:::
| |
| sys:x:3:3:sys:/dev:/bin/sh:*:14181:0:99999:7:::
| |
| sync:x:4:65534:sync:/bin:/bin/sync:*:14181:0:99999:7:::
| |
| ...
| |
| | |
| join in dat1 nach Feld 3 und in dat2 nach Feld 2
| |
| thomas@lydia:~$ cat dat1
| |
| hugo:ps:1111
| |
| erwin:zw:2222
| |
| karl:sb:3333
| |
| rudi:kl:4444
| |
| thomas@lydia:~$ cat dat2
| |
| blau:1111:svn
| |
| grün:2222:fcs
| |
| gelb:3333:fch
| |
| rot:4444:fck
| |
| thomas@lydia:~$ join -t : -1 3 -2 2 dat1 dat2
| |
| 1111:hugo:ps:blau:svn
| |
| 2222:erwin:zw:grün:fcs
| |
| 3333:karl:sb:gelb:fch
| |
| 4444:rudi:kl:rot:fck
| |
| | |
| ==nl(lpi)==
| |
| Nummeriert die Zeilen in einer Datei.
| |
| | |
| root@zero:~# nl /etc/passwd
| |
| 1 root:x:0:0:root:/root:/bin/bash
| |
| 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
| |
| 3 bin:x:2:2:bin:/bin:/bin/sh
| |
| 4 sys:x:3:3:sys:/dev:/bin/sh
| |
| 5 sync:x:4:65534:sync:/bin:/bin/sync
| |
| ...
| |
| Nummereriet mit führenden Nullen der Separatir ist ein :
| |
| root@zero:~# nl -s : -n rz dat1
| |
| | |
| ==od==
| |
| Gibt Dateien im Oktal und anderen Formaten aus.
| |
| | |
| od [Optionen] Datei
| |
| | |
| * -j ''Bytes'': Überspringt die Anzahl ''Bytes'' einer Datei
| |
| * -N ''Bytes'': Gibt nur die Anzahl ''Bytes'' aus
| |
| * -c : Gebe ASCII Zeichen aus
| |
| * -f : Gebe Fließkommazahlen aus
| |
| * -i : Gebe Dezimal Integer aus
| |
| * -l : Gebe Dezimal Long aus
| |
| * -o : Gebe Oktal 2 Byte Einheiten aus
| |
| * -s : Gebe Dezimal 2 Byte Einheiten aus
| |
| * -x : Gebe Hexadezimale 2 Byte einheiten aus
| |
| | |
| Beispiele
| |
| | |
| Gebe Master Boot Record (die ersten 512 Byte der Festplatte /dev/sda) als Hexadezimal aus
| |
| root@zero:~# od '''-x -N''' 512 /dev/sda
| |
| 0000000 48eb 1090 d08e 00bc b8b0 0000 d88e c08e
| |
| 0000020 befb 7c00 00bf b906 0200 a4f3 21ea 0006
| |
| 0000040 be00 07be 0438 0b75 c683 8110 fefe 7507
| |
| 0000060 ebf3 b416 b002 bb01 7c00 80b2 748a 0203
| |
| 0000100 00ff 2000 0001 0000 0200 90fa f690 80c2
| |
| ...
| |
| | |
| Schreibe "suxer" in die Datei test
| |
| root@zero:~# echo "suxer" > test
| |
| Ausgabe Hexadezimal
| |
| root@zero:~# od -x test
| |
| 0000000 7573 6578 0a72
| |
| 0000006
| |
| | |
| Ausgabe ASCII Zeichen
| |
| root@zero:~# od -c test
| |
| 0000000 s u x e r \n
| |
| 0000006
| |
| | |
| ==paste(lpi)==
| |
| Fügt die Zeilen von zwei oder mehr Dateien horizontal zusammen
| |
| root@zero:~# paste name tel
| |
| 1. karl 1. 1234
| |
| 2. heinz 2. 4321
| |
| 3. hans 3. 222
| |
| 4. otto 4. 121212
| |
| | |
| ==pr(lpi)==
| |
| Bereitet Textdateien zum Drucken vor.
| |
| | |
| root@zero:~# echo "Plan für heute" > dokument
| |
| root@zero:~# more dokument
| |
| Plan für heute
| |
| root@zero:~# pr dokument
| |
|
| |
|
| |
| 2009-06-19 12:44 dokument Seite 1
| |
|
| |
| | |
| | |
| Plan für heute
| |
| | |
| Anmerkung Ausmaße der Bildschirmausgabe wie eine Druckseite.
| |
| | |
| ==sed==
| |
| streaming editor. Mit sed ist es möglich, den Inhalt einer Datei automatisch (nicht interaktiv) zu
| |
| bearbeiten. Wie unter Linux üblich, wird auch hier der Text nicht wirklich verändert sondern die
| |
| Änderung erfolgt über die Standardausgabe, die wieder umgeleitet werden kann. Die Syntax ist ähnlich
| |
| des ex modus von vi. Reguläre Ausdrücke können nach Belieben benutzt werden.
| |
| | |
| Optionen:
| |
| -e Zeichenkette wendet die Editorbefehle aus Zeichenkette auf den Text an.
| |
| -n gibt nur die Zeilen aus, die explizit (durch "p" ausgedruckt werden sollen
| |
| | |
| Gibt die dritte Zeile der Datei text aus
| |
| root@zero:~# sed -n "3p" text
| |
| 34
| |
| | |
| Gibt die erste bis dritte Zeile von text aus
| |
| root@zero:~# sed -n "1,3p" text
| |
| sogar noch wichtiger
| |
| 123
| |
| 34
| |
| | |
| Löschen der Zeile mit "sogar"
| |
| root@zero:~# sed -e '/sogar/d' < text
| |
| 123
| |
| 34
| |
| 4711
| |
| test
| |
| | |
| und schreiben in text2
| |
| root@zero:~# sed -e '/sogar/d' < text > text2
| |
| root@zero:~# more text2
| |
| 123
| |
| 34
| |
| 4711
| |
| test
| |
| | |
| Alle 3en durch DREI ersetzen
| |
| root@zero:~# sed -e 's/3/DREI/g' < text
| |
| sogar noch wichtiger
| |
| 12DREI
| |
| DREI4
| |
| 4711
| |
| test
| |
| | |
| | |
| ==sort==
| |
| | |
| Zum sortieren von Dateien nach Feldern benutzt man sort. sort liest von STDIN, man kann die Datei aber auch als Argument übergeben.
| |
| | |
| Sortiert nach dem ersten Feld
| |
| root@zero:~# sort /etc/passwd
| |
| | |
| Es wird geprüft ob die Datei schon sortiert ist
| |
| root@zero:~# sort -c /etc/passwd
| |
| | |
| Sortiert nach dem ersten Feld (Richtungsumkehr)
| |
| root@zero:~# sort -r /etc/passwd
| |
| | |
| Führende Leersortzeichen werden ignoriert
| |
| root@zero:~# sort -b /etc/passwd
| |
| | |
| Ausgabe in die Datei pass
| |
| root@zero:~# sort /etc/passwd -o pass
| |
| | |
| nimmt : als Trenner -Voreinstellung ist TAB
| |
| root@zero:~# sort -t : /etc/passwd
| |
| | |
| sortiert nach dem 3 Feld, der Trenner ist : und es wird nummerisch sortiert
| |
|
| |
| root@zero:~# sort -t: -k 3 -n /etc/passwd
| |
| | |
| Sortiert nach dem 3 bis zum 5 Feld, der Trenner ist : und es wird nummerisch sortiert
| |
|
| |
| root@zero:~# sort -t: -k 3,5 -n /etc/passwd
| |