Definition

Shell-Programm

Was ist ein Shell-Programm?

Ein Shell-Programm ist eine Software, die Benutzern eine Schnittstelle für den Zugriff auf Dienste im Kernel bietet. Der Kernel verwaltet die Kerndienste des Betriebssystems (OS). Es handelt sich um einen stark geschützten und kontrollierten Bereich, der den Zugriff auf die Systemressourcen begrenzt. Eine Shell stellt einen Verbindungspunkt zwischen dem Benutzer und dem Kernel dar. Sie läuft im Benutzerbereich des Systems und führt die Befehle aus, die der Benutzer über eine Tastatur, eine Maus, ein Trackpad oder ein anderes Gerät erteilt.

Auf einigen Plattformen wird die Shell auch als Befehlsinterpreter bezeichnet, weil sie die vom Benutzer eingegebenen Befehle interpretiert. Die Shell übersetzt diese Befehle dann in Systemaufrufe im Kernel. Jeder Systemaufruf sendet eine Anforderung an den Kernel, eine bestimmte Aufgabe auszuführen. So kann die Shell den Kernel beispielsweise auffordern, eine Datei zu löschen, ein Verzeichnis zu erstellen, eine Betriebssystemkonfiguration zu ändern, eine Verbindung zu einem Netzwerk herzustellen, ein Shell-Skript auszuführen oder eine Vielzahl anderer Operationen durchzuführen.

Wie funktioniert ein Shell-Programm?

Ein Shell-Programm ist entweder eine Befehlszeilenschnittstelle (CLI) oder eine grafische Benutzeroberfläche (GUI), kann aber kein Terminal sein. In einigen Quellen werden nur CLI-Programme als Shells betrachtet, oder es werden Befehlsterminals mit den Shells selbst in einen Topf geworfen. Ein Terminal bietet lediglich eine Eingabeaufforderung für die Arbeit mit einer Shell. Das Standard-Terminal in macOS heißt Terminal und das Standard-Terminal in Windows heißt ebenfalls Terminal. Beide werden nicht als Shell betrachtet.

Die meisten Betriebssysteme bieten eine Standard-CLI-Shell, obwohl sie normalerweise auch andere Shells unterstützen. Bei der Arbeit in einem Terminal kann ein Benutzer Befehle direkt in eine Shell eingeben, indem er die Befehle an der Eingabeaufforderung eingibt. Abbildung 1 zeigt zum Beispiel ein Terminal-Fenster in macOS. In diesem Fall ist die Z-Shell (zhs) die aktive Shell, die jetzt die Standard-Shell in macOS ist. Davor war die Bash (Bourne Again Shell) die Standard-Shell.

Anweisung von vier Kerneln
Abbildung 1: Die vier Befehle weisen jeweils einen Kernel an, eine Aufgabe auszuführen.

Abbildung 1 zeigt vier Befehle, jeder auf einer separaten Befehlszeile, zusammen mit den von diesen Befehlen zurückgegebenen Ergebnissen, sofern zutreffend. Die Terminal-Anwendung wird im Heimatverzeichnis des Benutzers geöffnet, das durch die Tilde (~) in der Eingabeaufforderung dargestellt wird. In diesem Fall ist die Eingabeaufforderung so angepasst, dass sie das aktuelle Verzeichnis anzeigt, gefolgt von einem Doppelpunkt und einem Prozentzeichen (%). Die vier Befehle in der Abbildung weisen den Kernel an, die folgenden Aufgaben auszuführen:

  • cd documents/testdata ändert das Arbeitsverzeichnis vom Standard- oder Heimatverzeichnis in das Unterverzeichnis TestData innerhalb des Verzeichnisses Documents. Wenn der aktuelle Benutzer nicht über die erforderlichen Berechtigungen verfügt, um den Inhalt dieses Verzeichnisses einzusehen, verweigert der Kernel den Zugriff. Nachdem der Benutzer den Befehl ausgeführt hat, zeigt die Eingabeaufforderung den Namen des Unterverzeichnisses an, das nun das aktuelle Verzeichnis ist.
  • ls -l listet alle nicht versteckten Inhalte im aktuellen Verzeichnis auf. Der Befehl enthält die Option -l, mit der der Kernel angewiesen wird, die Informationen im Langformat auszugeben. Ohne diese Option hätte der Befehl nur die Dateinamen zurückgegeben. Wie viele andere zsh-Befehle unterstützt auch der Befehl ls zahlreiche Optionen, einschließlich der Verwendung von Platzhaltern, um den Vorgang besser steuern zu können.
  • cd ~ wechselt das Arbeitsverzeichnis zurück in das Heimatverzeichnis des Benutzers.
  • cal zeigt einen Kalender des aktuellen Monats an, wobei das aktuelle Datum hervorgehoben ist.

Eine Shell wie zsh unterstützt eine breite Palette von Befehlen, wesentlich mehr als die hier gezeigten. Viele dieser Befehle unterstützen mehrere Optionen, um besser kontrollieren zu können, wie der Kernel eine Aufgabe ausführt. Einige Befehle funktionieren auch in verschiedenen Shells auf die gleiche Weise, was den Wechsel von einer Shell zur nächsten erleichtert.

Je nach Betriebssystem steht den Benutzern eine große Auswahl an CLI-Shells zur Verfügung. Neben zsh und Bash gibt es weitere gängige CLI-Shells wie die Bourne-Shell, die C-Shell, die Korn-Shell und die friendly interactive Shell.

Einige CLI-Shells sind für mehrere Plattformen verfügbar. So ist beispielsweise die Bash-Shell für die Plattformen Unix, Linux und macOS verfügbar. Sie kann auch unter Windows ausgeführt werden, wenn das Microsoft Windows Subsystem für Linux verwendet wird. Da die Bash-Shell auf mehreren Plattformen unterstützt wird, sind Bash-Skripte oft über diese Plattformen hinweg portabel, insbesondere wenn es sich um Unix-ähnliche Systeme handelt.

Es gibt auch viele GUI-Shell-Programme, die allerdings nicht so flexibel sind wie CLI-Shells. Grafische Shells werden für bestimmte Betriebssysteme entwickelt und können unterschiedliche Formen annehmen. Abbildung 2 zeigt zum Beispiel einen Screenshot des Ubuntu-Desktops mit mehreren geöffneten Anwendungen. Ubuntu verwendet GNOME-Shell, um eine Benutzeroberfläche für die zugrunde liegende GNOME-Desktop-Umgebung bereitzustellen.

mehrere Anwendungen auf dem Ubuntu-Desktop
Abbildung 2: Auf dem Ubuntu-Desktop sind mehrere Anwendungen geöffnet.

Aber GNOME Shell ist nicht die einzige verfügbare Linux-Desktop-Shell. KDE Plasma ist ebenfalls eine gängige Linux-Shell, ebenso wie Unity, das wie GNOME Shell auf der GNOME-Desktop-Umgebung basiert. Es gibt auch Desktop-Shells für andere Umgebungen, wie zum Beispiel die Windows-Shell, die eine grafische Desktop-Oberfläche für das Windows-Betriebssystem bietet. Eine grafische Shell ist jedoch nicht auf einen ganzen Desktop beschränkt. Der Finder in macOS wird beispielsweise als grafische Shell betrachtet, da er Benutzern den Zugriff auf Kernel-Dienste ermöglicht.

Diese Definition wurde zuletzt im Mai 2024 aktualisiert

Erfahren Sie mehr über Data-Center-Betrieb