Umgang mit der Shell: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(34 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]]
−
Standardfehlerausgabe (2) : Fehlerausgaben landen hier (Bildschirm, aber nur die aktive Konsole).
 
−
{{#drawio:std}}
 
−
 
 
−
 
 
−
===Umleitungen===
 
−
===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
 
−
root@zero:~# cat < dat
 
−
wichtig
 
−
 
 
−
Schreiben in die Datei dat, dies überschreibt den bisherigen Inhalt der Datei
 
−
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
 
−
root@zero:~# cat < dat > neuedat
 
−
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
 
−
 
 
−
==Jokerzeichen in der Shell==
 
−
thomas@cardassia:~$ mkdir test
 
−
thomas@cardassia:~$ cd test/
 
−
thomas@cardassia:~/test$
 
−
thomas@cardassia:~/test$ touch a ab abc abcd abcd b cd efg haij
 
−
Ein * steht für jedes Zeichen beliebig oft
 
−
thomas@cardassia:~/test$ ls *
 
−
a  ab  abc  abcd b  cd  efg  haij
 
−
thomas@cardassia:~/test$ ls ab*
 
−
ab  abc  abcd
 
−
Ein ? steht für ein Zeichen
 
−
thomas@cardassia:~/test$ ls ?
 
−
a b
 
−
thomas@cardassia:~/test$ ls ??
 
−
ab cd
 
−
thomas@cardassia:~/test$ ls ???*
 
−
abc  abcd  efg haij
 
−
Eine [] steht genau für ein Zeichen das in der Klammer ist
 
−
thomas@cardassia:~/test$ ls [ab]
 
−
a  b
 
−
thomas@cardassia:~/test$ ls [abc]?
 
−
ab  cd
 
−
Eine [!] steht genau für ein Zeichen das nicht in der Klammer ist
 
−
thomas@cardassia:~/test$ ls [!abc]*
 
−
efg  haij
 
−
Mit der {element1,element2} kann man Dateinamen generieren
 
−
thomas@cardassia:~/test$ mkdir -v  dir{1,2,3,4,5,6}
 
−
mkdir: Verzeichnis „dir1“ angelegt
 
−
mkdir: Verzeichnis „dir2“ angelegt
 
−
mkdir: Verzeichnis „dir3“ angelegt
 
−
mkdir: Verzeichnis „dir4“ angelegt
 
−
mkdir: Verzeichnis „dir5“ angelegt
 
−
mkdir: Verzeichnis „dir6“ angelegt
 
−
Backup mit Dateinamengenerierung
 
−
*cp -v xx{,.save}
 
−
 
 
−
Wenn kein Treffer erfolgt wird das Sonderzeichen eingesetzt
 
−
thomas@cardassia:~/test$ rm -r *
 
−
thomas@cardassia:~/test$ mkdir -v *
 
−
mkdir: Verzeichnis „*“ angelegt
 
−
thomas@cardassia:~/test$ cd *
 
−
thomas@cardassia:~/test/*$
 
−
Entwerten kann man ein Sonderzeichen mit einem \
 
−
thomas@cardassia:~/test$ rm -rvi \*
 
−
rm: Verzeichnis „*“ entfernen? n
 
−
Entwerten kann man mehrereSonderzeichen mit ""
 
−
thomas@cardassia:~/test$ rm -rvi "*"
 
−
rm: Verzeichnis „*“ entfernen? n
 
−
Entwerten kann man mehrereSonderzeichen mit ''
 
−
thomas@cardassia:~/test$ rm -rvi '*'
 
−
rm: Verzeichnis „*“ entfernen? n
 
−
 
 
−
 
 
−
 
 
−
 
 
−
==wc==
 
 
*[[wc]]
 
*[[wc]]
−
 
−
==tr==
 
 
*[[tr]]
 
*[[tr]]
−
==cut==
 
 
*[[cut]]
 
*[[cut]]
 +
*[[sed]]
 +
*[[sort]]
 +
<!--
 +
==Braucht man seltener==
 +
*[[expand]]
 +
*[[fmt]]
 +
*[[join]]
 +
*[[nl]]
 +
*[[od]]
 +
*[[paste]]
 +
*[[pr]]
 +
-->
 +
=Sonderzeichen=
  
−
==expand(lpi)==
+
*[[Einfache Shellsonderzeichen]] <--- Matchen von Dateien
−
Ersetzt Tabulatorzeichen durch Folgen von Leerzeichen und schreibt das Ergebnis auf die Standardausgabe
+
*[[Reguläre Ausdrücke]] <--- Matchen von Strings
−
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
+
=Nacheinander auszuführende Kommandos=
−
root@zero:~# sort -b /etc/passwd
 
  
−
Ausgabe  in die Datei pass
+
*[[Nacheinander auszuführende Kommandos]]
−
root@zero:~# sort  /etc/passwd  -o pass
 
  
−
nimmt : als Trenner -Voreinstellung ist TAB
+
=Jokerzeichen in der Shell=
−
  root@zero:~# sort -t : /etc/passwd
 
  
−
sortiert nach dem  3 Feld,  der Trenner ist : und es wird nummerisch sortiert
+
*[[Jokerzeichen in der Shell]]
−
 
−
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
+
=Übungen=
−
+
*[[umgang mit der Shell Übungen]]
−
root@zero:~# sort -t: -k 3,5 -n /etc/passwd
 

Aktuelle Version vom 18. März 2025, 11:42 Uhr

Eingabe/Ausgabe

Bash Pipe

Datenstrom Programme

Sollte man kennen

Sonderzeichen

Nacheinander auszuführende Kommandos

Jokerzeichen in der Shell

Übungen