Notice: Undefined index: string in /var/www/stefan/howtux.de/htdocs/article.php on line 49

Notice: Undefined index: settings in /var/www/stefan/howtux.de/htdocs/article.php on line 61
Home / Die Linux Shell / Grundlagen der Shellnutzung

Grundlagen der Shellnutzung

Kategorie: Die Linux ShellErstellt: 02.10.2007 - 23:58 Geändert: 09.10.2007 - 12:49
Autor: Stefan Abu Salah
0In der Informatik bezeichnet man als Shell die Software, die den Benutzer in irgendeiner Form mit dem Computer verbindet. Bei Betriebssystemen gibt es im Regelfall zwei Arten von Shells, die Kommandozeileninterpreter und die grafischen Benutzeroberflächen. Jedoch wird meistens der Kommandozeileninterpreter als Shell bezeichnet. Wenn in den nächsten Kapiteln von einer Shell die Rede ist, ist immer der Kommandozeileninterpreter gemeint. Da es sehr viele unterschiedliche Shells gibt und jede ihre Eigenarten hat, ist es nötig sich auf eine Shell zu beziehen. Wir werden im Folgenden mit der bash-Shell (Bourne Again SHell) arbeiten. Die bash ist die Standard-Shell unter Linux-Systemen. Sie ist POSIX-Standard-konform. Alle Beispiele beziehen sich auf diese bash.

Der Prompt


Eingabeaufforderung (auch Prompt) ist ein Begriff aus dem IT-Bereich und bezeichnet eine Markierung auf der Kommandozeile, welche auf die Stelle verweist, an der man Kommandozeilenbefehle eingeben kann. Dieser Prompt wird typischerweise durch den Kommandozeileninterpreter ausgegeben.

Üblicherweise zeigt der Prompt zusätzlich diverse Informationen an, zum Beispiel den Namen des aktuellen Benutzers oder in welchem Verzeichnis man sich befindet. Ist die Eingabeaufforderung zu sehen, sollte eine Eingabe in den Kommandozeileninterpreter möglich sein. Führt der Rechner einen Befehl bzw. ein Computerprogramm aus, dann erscheint die Eingabeaufforderung des Kommandozeileninterpreters erst wieder, wenn dieses Programm beendet ist (oder das Programm im Hintergrund weiter ausgeführt wird). (wikipedia)
Beispiel: Prompt einer bash-Shell

stefan@troubadix/home/stefan$

Programme starten


Es gibt generell zwei verschiedene Arten von Programmen, welche man auf der Konsole starten kann. Die einen sind rudimentäre Shellprogramme und andere sind Programme, welche nicht direkt zur Shell gehören. Welche Programme in der Shell "eingebaut" sind und welche nicht, ist von der verwendeten Shell abhängig. Mit dem Programm type können Sie abfragen ob ein Befehl in der Shell definiert ist oder ob es sich um ein externes Programm handelt.
Beispiel: type

stefan@troubadix/home/stefan$ type type
type is a shell builtin
stefan@troubadix/home/stefan$ type bash
bash is /bin/bash


Es kann durchaus ein Unterschied in der Bearbeitung eines Problems zwischen Shellinternen und -externen Programmen bestehen. Da dieser Umstand, insbesondere in Skripten, zu Problemen führen kann, sollte man sich im Klaren sein welches Programm genau zum Einsatz kommt. Es gibt Programme, die sowohl innerhalb der Shell definiert sind als auch als externes Programm. Ausgeführt wird beim Absetzen des Befehls auf der Konsole immer das Shellinterne.


Beispiel: Shellintern und -extern

stefan@troubadix/home/stefan$ type kill
kill is a shell builtin
stefan@troubadix/home/stefan$ ls /bin/kill
/bin/kill

Die Variable $PATH


Woher weiss die Shell in welchen Verzeichnissen sie nach Programmen suchen soll? Ein Programm könnte ja irgendwo im Verzeichnisbaum liegen. Damit die Shell nicht erst suchen muss, wo sich ein Programm befindet werden alle möglichen Programmpfade in einer Variablen gespeichert. Diese Variable heißt PATH.
Beispiel: echo $PATH

stefan@troubadix/home/stefan$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

Wie Sie sehen beinhaltet diese Variable durch Doppelpunkte getrennte Pfade. Innerhalb dieser Pfade wird die Shell, in dem Moment in dem Sie ein Kommando auf der Konsole absetzen, nach diesem Kommando suchen (vorausgesetzt es ist nicht Shellintern).


Die Shell durchsucht die in $PATH angegebenen Pfade. Dies geschieht in der Reihenfolge in der die Pfade in der Variablen PATH gespeichert sind. Wird das angegebene Kommando in einem dieser Pfade gefunden wird das Programm von dort gestartet und nicht weitergesucht.


Beispiel:

stefan@troubadix/home/stefan$ ls -l
-rwxrwxrwx 1 stefan stefan 234 2006-11-17 11:26 mein_script

stefan@troubadix/home/stefan$ mein_script
bash: mein_script: command not found
# mein_script wurde nicht in PATH gefunden

stefan@troubadix/home/stefan$ ./mein_script
# Skript wird ausgeführt ...
stefan@troubadix/home/stefan$ /home/stefan/mein_script
# Skript wird ausgeführt ...


Hieraus ergibt sich auch, dass Programme und Skripte immer relativ, oder absolut adressiert werden müssen, wenn sie nicht in einem in der Variablen PATH angegebenen Verzeichnis liegen (siehe Beispiel).


Kommandos aneinander reihen


Die Shell gibt Ihnen die Möglichkeit mehrere Kommados hintereinander zu hängen. Eine Anwendung hierfür könnten Aktionen sein, welche eine lange Bearbeitungszeit beanspruchen. Stellen Sie sich vor Sie müssen viele Aktionen hintereinander ausführen und jedesmal warten, bis eine Aktion beendet wurde. Erst dann könnten Sie eine neue Aktion starten. Hier würden Sie sich schnell eine Möglichkeit wünschen, mehrere Kommandos mit nur einer Eingabe abzusetzen.
Möglichekeiten Kommandos anneinander zu reihen:

; - Führe Kommandos nacheinander aus, unabhängig von deren Rückgabecodes
&& - Führe Kommando nächstes Kommando nur genau dann aus, wenn das
vorherige Kommando ohne Fehler beendet
|| - Führe Kommando nächstes Kommando nur genau dann aus, wenn das
vorherige Kommando mit Fehler beendet

Beispiel: Kommandos aneinander reihen mit ;

stefan@troubadix/home/stefan$ ls; cd ordner
Bilder convert Develope Dokumente ETV FH-Koeln ordner
stefan@troubadix/home/stefan/ordner$

Beispiel: Kommandos aneinander reihen mit &&

stefan@troubadix/home/stefan$ ls /root && cd /root
ls: /root/: Permission denied
stefan@troubadix/home/stefan$

Beispiel: Kommandos aneinander reihen mit ||

stefan@troubadix/home/stefan$ ls /home/stefan || ls /root
Bilder convert Develope Dokumente ETV FH-Koeln ordner
stefan@troubadix/home/stefan$

Mehrzeilige Kommandos


Oft werden Shellkommandos recht lang und unübersichtlich. Um die Übersichtlichkeit zu erhöhen kann man mit dem Backslash () einen Zeilenumbruch in der Shell hervorrufen, ohne dass der Befehl ausgeführt wird. Das Kommando wird erst dann bearbeitet, wenn man wie gewohnt die RETURN-Taste drückt.
Beispiel: Mehrzeilige Kommandos

stefan@troubadix/home/stefan$ ls /home/stefan || \
ls /root && \
cat /root/mein.txt \
...
stefan@troubadix/home/stefan$

Alias


Shell-Aliase bieten die Möglichkeit Kommandos zu vereinfachen. Hierbei ist es egal wieviele Kommandos Sie nach den oben genannten Methoden aneinander hängen.
Beispiel: alias

stefan@troubadix/home/stefan$ ll
bash: ll: command not found
stefan@troubadix/home/stefan$ alias ll='ls -l'
stefan@troubadix/home/stefan$ ll
-rw-r--r-- 1 stefan stefan 0 2006-10-23 12:29 mein_1.txt
-rw-r--r-- 1 stefan stefan 0 2006-10-23 12:29 mein_2.txt
-rw-r--r-- 1 stefan stefan 0 2006-10-23 12:29 mein_3.txt
...
stefan@troubadix/home/stefan/test$ alias myhome='cd ~ && ls -l'
stefan@troubadix/home/stefan/test$ myhome
-rw-r--r-- 1 stefan stefan 55 2006-10-23 12:29 text.txt
-rw-r--r-- 1 stefan stefan 123 2006-10-23 12:29 programm
-rw-r--r-- 1 stefan stefan 12 2006-10-23 12:29 Bild.jpg
stefan@troubadix/home/stefan$

Per alias definierte Aliase sind nur für die Laufzeit einer Sitzung (Shell) definiert. Erzeugt man sich eine neue Shell sind diese Aliase wieder verschwunden.


Aliasen löschen


Mit dem Kommando unalias kann man Aliase wieder löschen.
Beispiel: unalias	

stefan@troubadix/home/stefan$ ll
-rw-r--r-- 1 stefan stefan 0 2006-10-23 12:29 mein_1.txt
-rw-r--r-- 1 stefan stefan 0 2006-10-23 12:29 mein_2.txt
-rw-r--r-- 1 stefan stefan 0 2006-10-23 12:29 mein_3.txt
stefan@troubadix/home/stefan$ unalias ll
stefan@troubadix/home/stefan$ ll
bash: ll: command not found


Notice: Undefined variable: urli in /var/www/stefan/howtux.de/htdocs/classes.php on line 240
Bookmark auf del.icio.usBookmark auf Mister WongBookmark auf BlinklistBookmark auf GoogleBookmark auf LinkarenaBookmark auf YiggBookmark auf FolkdBookmark auf Yahoo
Home / Die Linux Shell / Grundlagen der Shellnutzung
simplum