Shell
Die Shell (auch: Befehlsinterpreter, Befehlszeileninterpreter, Kommandointerpreter, Kommandozeileninterpreter; engl. command line interpreter / CLI) ist ein Rechnerprogramm, das eine Zeile Text in der Befehlszeile einliest, diesen Text als Befehl (Shell-Befehl) interpretiert und ausführt - beispielsweise durch Starten weiterer Programme. Sie vermittelt so zwischen dem Anwender und dem Betriebssystem.
Die Funktionsweise beim interaktiven Arbeiten am Bildschirm entspricht damit der auf früheren Grossrechnern, als Befehle per Lochkarte ein- und etwaige Ergebnisse auf einem Drucker zeilenweise ausgegeben wurden. Auch in grafischen Benutzeroberflächen ist die Funktion einer Shell vorhanden, die die Eingaben des Benutzers interpretiert und umsetzt.
Für den erfahrenen Benutzer hat die Shell den Vorteil der schnellen, direkten Kontrolle und Erreichbarkeit aller Funktionen. Voraussetzung ist allerdings die Kenntnis der Shell-Befehle und der Funktionsweise ihrer Parameter. Häufig wiederkehrende Befehlsfolgen lassen sich durch durch sogenannte Makros, Stapeldateien (auch: Batchdateien) oder Shellskripte automatisieren, was bei einer grafischen Benutzeroberfläche prinzipbedingt nur schwer möglich ist.
Beispiele für Shells sind die folgenden.
Jahr | Befehlszeileninterpreter | Betriebssystem |
---|---|---|
1977/1978 | Bourne-Shell / sh | Linux, Unix |
C-Shell / csh | Linux, Unix | |
1982 | Korn-Shell / ksh | Linux, Unix |
Bourne Again Shell / bash | Linux, Unix | |
cmd.exe | Microsoft Windows NT, OS/2 | |
command.com | Microsoft DOS, Microsoft Windows 9x-Linie, Microsoft Windows NT | |
1990 | Z-Shell / zsh | Linux, Unix |
A-Shell / ash | Linux, Unix | |
Windows Power Shell | Microsoft Windows XP, Microsoft Windows Server 2003, Microsoft Windows Vista, Microsoft Exchange Server 2007 | |
Windows Recovery Console | Microsoft Windows 2000, Microsoft Windows XP |
Auch Skriptsprachen, wie etwa BASIC, Perl oder Lisp, bieten eine gewisse Tauglichkeit als Befehlszeileninterpreter. Ebenso existieren für Python und Ruby interaktive Interpreter. Manche Texteditoren (z. B. vi, emacs) erlauben ebenfalls die Ausführung von relativ komplexen Befehlen über eine Befehlszeile.
Shells unter Unix und Linux
Eine kurze Übersicht zeigt einige Fähigkeiten der Shells unter den Betriebssystemen Unix und Linux.
Bourne-Shell (sh) |
C-Shell (csh) |
Korn-Shell (ksh) |
Bourne-Again-Shell (bash) | |
---|---|---|---|---|
History | nein | ja | ja | ja |
Inline Editing | nein | ja | ja | ja |
Integer Arithmetik | nein | nein | ja | ja |
Aliasing | nein | ja | ja | ja |
Funktionen | ja | nein | ja | ja |
Signal Handling | ja | ja | ja | ja |
Kontrollstrukturen | ja | ja | ja | ja |
Menü-Kontrollstruktur | nein | nein | ja | ja |
Job Control | nein | ja | ja | ja |
Restricted Shell | ja | nein | ja | ja |
Pfadnamen expandieren | nein | nein | ja | ja |
Aufruf der Shell
Jede Shell hat eines oder mehrere Startskripte, die aufgerufen werden je nach dem, von welcher Art die aktuelle Shell ist.
- In eine Login Shell gelangt man, wenn man sich über ein Textterminal, über ssh, telnet oder über die Konsole anmeldet. Normalerweise liest eine Login Shell verschiedene Konfigurationsskripte und ist über den Befehl who sichtbar.
- Non-login Shell
xterm kann die Shell sowohl als Login Shell als auch als Non-Login Shell ausführen.
Profile
Nacheinander werden bei der Anmeldung an eine Login Shell folgende Dateien abgearbeitet. In den Profildateien stehen Variablen (z. B. "PATH" oder "ENV"). In den Shell-Startup-Dateien (z. B. ".bashrc") stehen Aliase, Funktionen und stty-Einstellungen (falls nötig).
- Datei "/etc/profile" mit systemweit gültigen Einstellungen.
- Datei "~/.profile" (hier wird auch "export ENV=$HOME/.bashrc" gesetzt).
- Die mit "$ENV" gesetzten Umgebungsvariablen.
- Datei ".bashrc" (unter der Bash)
Die für einen Benutzer gültige Datei ".profile".
PATH=/bin:/usr/bin:~/bin export PATH /usr/games/fortune PS1="Mein Herr und Gebieter, was wünscht Ihr? " # Prompt date # gibt das aktuelle Datum aus umask 002 # Lesen und Schreiben für Benutzer und Gruppe, nur Lesen für andere (d. h. 664) stty erase ^H intr ^C # Definition des Löschzeichen und des Unterbrechungszeichens
Einlesen der Werte in der Datei ".profile" - der Punkt am Anfang ("source") verhindert dabei die Erzeugung einer Subshell, bewirkt also dasselbe, als wären die Zeilen in der Datei ".profile" von Hand auf der Befehlszeile eingegeben worden.
$ . ./.profile
Die Variable PATH
Folgende Verzeichnisse sollten in der Variable "PATH" enthalten sein.
/bin /sbin /usr/bin /usr/local/bin /usr/local/sbin /usr/sbin
Der Benutzer "root" sollte nur "trusted directories" (d. h. Verzeichnisse, in denen ausschliesslich der Benutzer "root" Schreibberechtigung hat) im Pfad haben. Entsprechende Shellskripte setzen den Pfad selber. Das aktuelle Verzeichnis "." sollte aus Sicherheitsgründen niemals in "PATH" enthalten sein. Folgende Pfade bewirken, dass sich das aktuelle Verzeichnis in "PATH" befindet.
:/bin /bin::/sbin /bin: :.:
Weblinks
- (Un)geliebte Shell (Linux-User.de)