Linux Basics, Security & Hacking
willi moser (2005-12-12)
Was ist die Shell?
Die Shell ist ein Programm, mit dessen Hilfe das System die Benutzerbefehle
verstehen kann. Aus diesem Grund wird die Shell auch oft als Befehls- oder
Kommandointerpreter bezeichnet.
Sinn und Zweck
In einem klassischen Unix-System (ohne die grafische Oberfläche X) greifen
die Benutzer über Terminals auf das System zu. Auf diesen Terminals können nur
Textzeichen dargestellt werden. Um dem Benutzer die Arbeit mit dem System
effektiv möglich zu machen, gibt es die Shell. Die Shell wird dabei für drei
Hauptaufgaben benutzt:
- Interaktive Anwendung (Dialog)
- Anwendungsspezifische Anpassung des Unix-Systemverhaltens (Belegen von
Umgebungsvariablen)
- Programmierung (Shell-Skripting). Zu diesem Zweck stehen einige
Mechanismen zur Verfügung, die aus Hochsprachen bekannt sind (Variablen,
Datenströme, Funktionen usw.).
Ursprünglich handelte es sich dabei um ein relativ einfaches Programm, der
Bourne Shell (wird oft auch Standard-Shell genannt). Dies ist praktisch die
Mutter aller Shells. Aus dieser entwickelten sich im Laufe der
Zeit mehrere Varianten, die alle ihre eigenen Vor- und Nachteile mit sich
bringen. Da es unter Unix kein Problem darstellt den Kommandointerpreter
auszutauschen, stehen auf den meisten Systemen mehrere dieser Shells zur
Verfügung. Welche Variante ein Benutzer verwenden möchte ist reine
Geschmackssache.
Die Qual der Wahl
Um die Auswahl einer Shell zu erleichtern, werden hier die wichtigsten
Varianten kurz vorgestellt. Sie sind aufgeteilt in Einfach- und Komfort-Shells.
Die Komfort-Shells zeichnen sich durch komfortablere Funktionen zur interaktiven
Bedienung aus, während die Einfach-Versionen üblicherweise für die
Programmierung benutzt werden.
Einfach-Shells:
- Die Bourne- oder Standard-Shell
(sh) ist die kompakteste und
einfachste Form. Sie bietet schon Mechanismen wie die Umlenkung der Ein- oder
Ausgaben, Wildcards zur Abkürzung von Dateinamen, Shell-Variablen und einen
Satz interner Befehle zum Schreiben von Shell-Prozeduren. Neuere Versionen
beherrschen auch das Job-Controlling.
Für die Entwicklung von Shell-Skripten sollte man sich auf diese Shell
beschränken, da sie auf praktisch allen Systemen zur Verfügung steht. So
bleiben die Skripte portabel.
- Die Korn-Shell (ksh),
eine Weiterentwicklung der Bourne-Shell, erlaubt das
Editieren in der Befehlszeile. Außerdem gibt es hier History-Funktionen um auf
zurückliegende Befehle zurückgreifen zu können, eine Ganzzahl-Arithmetik,
verbesserte Möglichkeiten zur Mustererkennung, Aliase und das Job-Controlling.
Ein Alias ist dabei eine Abkürzung für einen Befehl. Beispielsweise kann man
das häufig benutzte ls -la einfach
durch la ersetzen. Unter
Job-Controlling versteht man einen Mechanismus, mit dessen Hilfe der Benutzer
die Ausführung von Prozessen selektiv stoppen oder fortsetzen kann.
- Die C-Shell (csh)
bietet ähnliche Annehmlichkeiten wie die
Korn-Shell, lehnt sich aber
in der Syntax sehr stark an die Programmiersprache C an. Sie sollte nach
Möglichkeit nicht zur Shell-Programmierung benutzt werden, da sie an vielen
Stellen nicht so reagiert, wie man es erwarten sollte.
Komfort-Shells:
- Die Bourne-Again-Shell (bash)
ist voll abwärtskompatibel zur sh,
bietet aber von allen Shells die komfortabelsten Funktionen für das
interaktive Arbeiten. Da die Bash ein GNU-Produkt ist, ist sie die
Standard-Shell auf allen Linux-Systemen. Sie steht aber auch auf den meisten
anderen Unixen zur Verfügung.
- Die T-C-Shell(tcsh)
verhält sich zur C-Shell wie die
Bourne-Again-Shell zur Standard-Shell. Sie ist voll kompatibel,
bietet aber zusätzliche Komfort-Funktionen.
- Die Stand-Alone-Shell (sash)
ist vor allem nützlich für die System-Recovery. Sie kann
gegen statische Bibliotheken gelinkt werden und beinhaltet bereits (teilweise
vereinfachte) Formen von Standard-Systemkommandos. Kann man also, nach einem
System-Crash, eine statisch gelinkte sash erreichen, ist es oft möglich, mit
ihrer Hilfe das System wiederherzustellen. Nähere Informationen finden sich
auf
http://www.canb.auug.org.au/~dbell/ und
http://www.baiti.net/sash/.
Linux Basics, Security & Hacking
willi moser (2005-12-12)