Grundlagen

 
 

Die Shell präsentiert sich in der Defaulteinstellung ziemlich unspektakulär

 ~ $  
Die Shell wartet auf die Eingabe
 
 

Die Hauptaufgabe der Shell ist, andere Programme auszuführen.

 ~ $ ls
bin/ temp/ todo.txt
 ~ $ date
Wed Jul 21 23:59:33 CEST 2004
 ~ $  
ganz einfach: Befehl eintippen, Return drücken
 
 

 ~ $ ls
bin/ temp/ todo.txt
 ~ $ ls -1
bin/ 
temp/ 
todo.txt 
~ $  
Argumente werden durch Leerzeichen getrennt
 
 

Das Verzeichnis, in dem man sich gerade befindet nennt man Arbeitsverzeichnis (working directory). Es ist für relative Pfadangaben wichtig. In ein anderes Verzeichnis wechselt man mit cd <verzeichnis>.

Die Tilde ("~") ist die Abkürzung für das Homeverzeichnis.

 ~ $ cd bin
/home/settel/bin
 ~/bin $ cd /tmp
 /tmp $  
Der Prompt zeigt an, wo man sich befindet
 
 
  • ">"
    Ausgabe in Datei umleiten
 ~ $ ls >liste.txt
 ~ $  
  • ">>"
    Ausgabe an Datei anhängen
 ~ $ date >liste.txt
 ~ $ ls >>liste.txt
 ~ $  
  • "<"
    Datei als Eingabe verwenden
 ~ $ <list.txt sort
bin/
liste.txt
temp/
todo.txt
 ~ $  
 
 

Vordefinierte Filedeskriptoren:

  • 0 = STDIN (Eingabe)
  • 1 = STDOUT (Ausgabe)
  • 2 = STDERR (Fehlermeldungen)
 ~ $ find /etc 2>/dev/null
Fehlermeldungen ignorieren
 ~ $ grep "aliases" .bashrc >/dev/null
Ausgabe ignorieren
 ~ $ find -name '*.png' >liste.txt 2>fehler.txt
Ausgabe und Fehler getrennt loggen
 
 

Sonderformen:

  • &> datei -- STDOUT und STDERR gleichzeitig umleiten
  • >&nr -- auf einen anderen Filedeskriptor umleiten
 ~ $ wget http://kalug.de/   &>wget.log
 ~ $ wget http://kalug.de/   >wget.log   2>&1
Alles in eine Datei loggen
 ~ $ ls *.txt blubber.tmp   >/dev/null  2>&1
 ~ $ ls *.txt blubber.tmp   2>&1        >/dev/null
ls: blubber.tmp: No such file or directory
 ~ $  
Die Reihenfolge ist wichtig

Anmerkung: 2>&1 lässt STDERR dahin zeigen, wo STDIN derzeit hinzeigt. Die Deskriptoren bleiben dennoch unabhängig voneinander.

 
 
  • ";"
    nacheinander ausführen
 ~ $ ls ; date
bin/  temp/  todo.txt
Thu Jul 22 23:33:35 CEST 2004
 ~ $  
			
  • "|" (Pipe)
    Ausgabe weiterreichen
 ~ $ ls | wc -l
3
 ~ $  
			
  • "&&"
    Fortfahren, wenn erster Befehl erfolgreich
 ~ $ mkdir temp && cd temp
/home/settel/temp
 ~/temp $  
			
  • "||"
    Fortfahren, wenn erster Befehl fehlgeschlagen ist
 ~ $ test -d temp || mkdir temp
 ~ $  
			
 
 

Klammern kombinieren mehrere Befehle

  • falsch
 ~ $ date; ls | wc -l | mail karl.ranseier@example.com
Sun Jul 25 22:19:41 CEST 2004
 ~ $  
			
  • richtig
 ~ $ (date; ls | wc -l) | mail karl.ranseier@example.com
 ~ $  
			
 
 
  • "&"
    Befehl im Hintergrund ausführen
    (auch zur Verkünpfung geeignet)
 ~ $ mozilla-firefox &
[1] 11176
 ~ $  
			
  • ^C
    Laufendes Programm abbrechen
 ~ $ sleep 60
^C
 ~ $  
			
  • ^Z
    Laufendes Programm unterbrechen
 ~ $ sleep 60
^Z
[1]+  Stopped(SIGTSTP)  sleep 60
 ~ $ fg
sleep 60
 ~ $  
			
 
 
  • ^Z
    Programm in den Hintergrund schieben
 ~ $ updatedb
^Z
[1]+  Stopped(SIGTSTP)  updatedb
 ~ $ bg
[1]+ updatedb &
 ~ $  
			
  • jobs
    Laufende Programme auflisten
 ~ $ jobs
[1]+  Running  sleep 60 &
 ~ $  
			
  • kill %1
    Job killen
 ~ $ kill %1
[1]+  Terminated   sleep 60
 ~ $  
			
  • disown %1
    Job aus der Jobliste entfernen, Prozess läuft weiter
 ~ $ disown %1
 ~ $ jobs
 ~ $  
			
 
 

Als nächstes: Globbing