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

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