Die Shell
Eine Shell dient als Mittler zwischen Benutzer und Betriebssystem, d.h.
sie nimmt die Eingaben des Benutzers entgegen und leitet sie
(gegebenenfalls) an das
Betriebssystem weiter. Eine Shell ist allerdings nicht notwendigerweise
immer
ein Kommandozeileninterpreter. Der Begriff "Shell" bedeutet in diesem
Zusammenhang lediglich, daß es sich hierbei um ein Programm handelt,
welches den Benutzer vom Betriebssystem abkapselt. Auch ein Texteditor
oder ein Emailclient genügt somit der Definition einer Shell.
Kommandozeileninterpreter
Wie bereits an anderer Stelle erwähnt verfügt Linux über ein
ganzes Sortiment von Kommandozeileninterpretern. Die z.Z. am
weitesten Verbreitesten sind die Bash (Bourne Again SHell)
und die Tcsh (eine Erweiterung der C Shell). Als quasi
Standard hat sich die Bash Shell etabliert, aus diesem Grund
wird sich der Rest dieses Abschnittes auch hauptsächlich auf diese
Shell beziehen.
Die meißten Kommandozeileninterpreter unter UN*X/Linux sind üblicherweise
sehr
mächtige Werkzeuge, deren Funktionsumpfang weit über das einfaches
Verarbeiten von Befehlen hinaus geht:
- Commandcompletion
- Historyfunction
- Scripting Language
- Job Control
- Input/Output Redirection
- Aliasing
Commandcompletion
Unter "Commandcompletion" versteht man i.A., daß nur der Anfang
eines Befehls/Dateinamens getippt werden muß,
und die Shell diesen dann selbstständig (sinvoll) ergänzt.
Damit diese Vervollständigung funktioniert, muß der Dateiname bzw.
Befehl mindestens bis zur Eindeutigkeit eingetippt werden.
Die meißten Shells verwenden die TAB Taste um die
"Commandcompletion" zu aktivieren.
Historyfunction
Die "Historyfunction" erlaubt es dem Benutzer, einen bereits zu einem
früherem Zeitpunkt ausgeführten Befehl zu wiederholen. Mit Hilfe
der CurserUP und CursorDOWN Tasten können die
Befehle im Historypuffer durchgeblättert werden.
Scripting Language
Anstatt immer wieder ein und dieselben Befehle zu tippen, ist es auch
möglich, diese Befehle in einer Datei abzulegen, und diese Datei dann
praktisch wie ein Programm aufzurufen. Bei solchigem Shelscript werden
die einzelnen Zeile der Reihe nach abgearbeitet. Zusätzlich besteht
noch die Möglichkeit, über Variablen, Schleifen sowie Kontrollstrukturen
einen Kontrollfluß im Shellscript zu erzeugen. Kurz ausgedrückt: Mit
einer Shell können regelrechte Programme geschrieben werden.
Job Control
"Job Control" ist die Fähigkeit, laufende Prozesse zu unterbrechen
(unterbrechen bedeutet nicht beenden!) und wieder
laufen zu lassen. Und zwar wahlweise im Vorder- oder im Hintergrund.
Ein Prozess, welcher im Hintergrund läuft, ist von der Konsole
abgekoppelt. Um einen Prozess von Anfang an als Hintergrundprozess
zu starten, muß er mit einem Ampersand (&) als Parameter
gestartet werden. Die Tastenkombination Strg Z wird verwandt,
um bereits laufende Prozesse anzuhalten. Ein angehaltener Prozess kann
durch den Befehl bg in den Hinter- und durch den Befehl
fg wieder in den Vordergrund geholt werden. Der Befehl
jobs Listet alle z.Z. in der Shell laufenden Jobs auf.
In/Output Redirection
UN*X verfolgt die Philosophie der "Werkzeugkiste", d.h. anstatt für jedes
Problem ein neues, dem Problem angepasstes Programm zu schreiben
(also ständig das Rad neu zu erfinden), geht man dazu über, kleine, dafür
aber hoch spezialisierte Tools zu programmieren, die dann das Problem
Hand in Hand in lösen. Damit dies funktioniert, ist es notwendig,
eine Möglichkeit der Kommunikation zwischen den einzelnen Programmen
zu schaffen. Ein Ansatz in diese Richtung ist die Input/Ouput Redirection,
d.h. ein Programm nimmt die Ausgabe seines Vorgängers als seine
Eingabe entgegen.
Aliasing
Aliasse ermöglichen es, sehr einfach Befehle umzubennen, bzw. umfangreiche
(Shell)Funktionen unter einem Namen abzulegen. Ein Alias wird gehandhabt
wie ein ganz normales Kommando. Unter DOS Umsteigern ist es beliebt,
für UN*X Kommandos Aliasse zu verwenden, die den Namen der DOS Befehle
entsprechen, also z.B.
alias rd=rmdir