Shell

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

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

Vorlage:dewi Vorlage:dewi