1.5 Die Shell-Vielfalt
Es wurde bereits erwähnt, dass eine Shell wie jede andere Anwendung durch eine andere Shell ersetzt bzw. ausgetauscht werden kann. Welche Shell der Anwender auch verwendet, jede Shell hat denselben Ursprung, die Mutter (oder auch der Vater) aller Shells ist die Bourne-Shell (sh), welche von S. R. Bourne 1978 entwickelt wurde und sich gleich als Standard-Shell im UNIX-Bereich durchgesetzt hat. Einige Zeit später wurde für das Berkeley-UNIX-System eine weitere Shell namens C-Shell (csh) entwickelt, die erheblich mehr Komfort als die Bourne-Shell bot. Leider war die C-Shell bezüglich der Syntax gänzlich inkompatibel zur Bourne-Shell und glich mehr der Syntax der Programmiersprache C.
An diese beiden Shell-Varianten, der Bourne-Shell und der C-Shell, lehnten sich alle weiteren Shells an. Aus der Sparte der Bourne-Shell gingen als etwas bekanntere Vertreter die Shell-Varianten ksh (Korn-Shell), bash (Bourne-Again-Shell), zsh (Z-Shell), ash (A-Shell) und rbash bzw. rzsh (Restricted Shell) hervor. Aus der C-Shell-Abteilung hingegen trat nur noch tcsh (TC-Shell) als eine Erweiterung von csh in Erscheinung.
Hinweis Die Bourne-Shell (sh) gibt es auf einem Linux-System eigentlich nicht und wird dort meistens vollständig von der bash (Bourne-Again-Shell) ersetzt. Wenn Sie also unter Linux die Bourne-Shell starten, führt dieser Aufruf direkt (als symbolischer Link) zur bash.
|
1.5.1 ksh (Korn-Shell)
Eine Erweiterung der Bourne-Shell ist die Korn-Shell. Hier wurden gegenüber der Bourne-Shell besonders interaktive Merkmale und auch einige Funktionalitäten der C-Shell hinzugefügt. Die Korn-Shell ist seit UNIX.4 Bestandteil eines Standard-UNIX-Systems und gewöhnlich auch die Standard-Shell in der UNIX-Welt. Was schon zur Bourne-Shell in Bezug auf Linux gesagt wurde, gilt auch für die Korn-Shell. Auch hierbei wird unter Linux ein Aufruf der Korn-Shell durch die Bash ersetzt. Für den Fall der Fälle gibt es für Linux allerdings auch eine Version der Korn-Shell, eine Public Domain Korn-Shell (pdksh), welche den meisten Distributionen beiliegt.
1.5.2 Bash (Bourne-Again-Shell)
Die Bash ist praktisch die Standard-Shell in der Linux-Welt und mittlerweile generell die am meisten benutzte Shell. Sie ist im Prinzip eine freie Nach-Implementierung der Bourne- und der Korn-Shell.
1.5.3 zsh (Z-Shell)
Die Z-Shell ist eine Erweiterung der Bourne-Shell, Korn-Shell und der Bash. Eine Shell mit derartiger Funktionalität müsste sich doch zu einer Art Standard-Shell etablieren!? Dass dies nicht so ist und wahrscheinlich auch nie so sein wird, liegt wohl an der mangelnden Übersichtlichkeit ihrer Funktionalität. Es stellt sich die Frage nach dem Sinn einer solchen Shell.
1.5.4 ash (A-Shell)
Bei der A-Shell handelt es sich um eine ähnliche Shell wie die Bourne-Shell, allerdings mit einigen Erweiterungen. Die A-Shell gehört eher zu einer exotischeren Spezies und gilt auch nicht als sonderlich komfortabel. Dass ich sie dennoch erwähne, liegt an der geringen Größe an Speicherplatz (60 KB), die sie benötigt (auch wenn dies heutzutage kein Thema mehr ist). Dank dieser geringen Größe kann die ash überall dort verwendet werden, wo an Speicherplatz gespart werden muss. Dies kann bspw. die Erstellung einer Notfall-Diskette sein, mit der man sein Linux-UNIX-System booten will. Oder man ist auf der Suche nach einer Shell, die man in die Start-RAM-Disk beim initrd-Verfahren laden will. Selbst in einer ziemlich abgeriegelten Umgebung (bspw. mit chroot) kommt man im lokalen Zugriffsmodus mit der ash sehr weit.
1.5.5 rbash, rzsh (Restricted Shell)
Hierbei handelt es sich um »erweiterte« Shell-Varianten der Bash bzw. der zsh. Die Erweiterung bezieht sich allerdings hier nicht auf den Funktionsumfang, sondern eher auf gewisse Einschränkungen des Benutzers in seinen Rechten und Möglichkeiten. Diese Einschränkungen können vom Systemadministrator für jeden Benutzer spezifisch gesetzt werden. Dies ist besonders bei fremden Zugriffen von außen recht sinnvoll.
1.5.6 tcsh (TC-Shell)
Hierbei handelt es sich lediglich um eine verbesserte und ein wenig erweiterte Version der C-Shell (csh) mit voller Kompatibilität zu dieser. Erweitert wurden allerdings nur die automatische Eingabevervollständigung, wie sie beim Betriebssystem »TENEX« (daher auch TC-Shell = TENEX C-Shell) anzutreffen war. TENEX ist allerdings wie die Dinosaurier bereits ausgestorben.
1.5.7 Welche Shell-Variante wird in diesem Buch verwendet?
Sie wissen nun, dass es zwei Linien der Shellprogrammierung gibt – die Bourne-Shell- und die C-Shell-Familie. In der heutigen Shell-Welt wird vorzugsweise die Bourne-Shell-Familie verwendet, genauer: Unter UNIX wird als Standard-Shell die Korn-Shell und unter Linux wird die Bash eingesetzt. Bei FreeBSD hingegen scheiden sich häufig die Geister – hier wird für den User die sh und für den Superuser häufig die csh als Standard gesetzt, dies lässt aber ohne Problem ändern. Die C-Shell-Familie verliert allerdings aufgrund einiger Schwächen (bspw. fehlen einige wichtige Programmier-Konstrukte) immer mehr an Boden gegenüber der Bourne-Familie.
Somit beschreibt dieses Buch die Shell-Varianten Bourne-Shell, Korn-Shell und die Bash. Die Bourne-Shell deshalb, weil immer noch die meisten Boot-Scripts (init-Scripts) mit ihr erstellt werden. Die Korn-Shell, weil diese quasi die Standard-Shell unter UNIX ist und immer noch unzählige Scripts hierfür geschrieben werden. Und die Bash, weil diese zum einen die Standard-Shell unter Linux ist und zum anderen den Großteil der Leser betrifft (da wohl die wenigsten Leser Zugang zu einem kommerziellen UNIX-System haben). Da die Unterschiede dieser drei Shells nicht sehr groß sind, werden alle drei Varianten parallel behandelt – wenn es also einen besonderen Unterschied zwischen dieser oder jener Shell gibt, so wird entsprechend darauf hingewiesen. Als Einsteiger müssen Sie sich jetzt erst mal keine Gedanken darum machen. Lernen Sie einfach Shell-Programmieren!
Hinweis Bitte verzeihen Sie mir, dass ich dauernd die Bourne-Again-Shell mit Bash abkürze und dies bei der Korn- bzw. Bourne-Shell häufig unterlasse, aber Bash ist in diesem Fall einfach geläufiger.
|
1.5.8 rsh und ssh
Obwohl rsh (Remote Shell) und ssh (Secure Shell) keine Shells wie bspw. die Korn-Shell bzw. die Bash sind, sollen diese hier trotzdem kurz erwähnt werden, weil es gern und häufig zu Missverständnissen bei Anfängern führt. Hierbei handelt es sich nicht – wie bei den eben vorgestellten Shells – um eine Benutzerschnittstelle zum System. Beide Kommandos werden dazu verwendet, auf einem anderen System (etwa Ihrem Webhoster) übliche Shell-Kommandos (remote) auszuführen. Die ssh ist der Sicherheit zuliebe der rsh vorzuziehen, da die ssh z. B. ein erweitertes Authentifizierungsverfahren benutzt und die Passwörter vom Login sowie die komplette Datenübertragung verschlüsselt. Dadurch ist ein Abhorchen der Daten derzeit nicht möglich (aber man sollte niemals »nie« sagen).
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|