(Un)geliebte Shell
Shell-Tipps
Mal eine andere Shell
Anwender können die ihnen beim Systemstart zur Verfügung stehende Login-Shell jederzeit wechseln. So genügt es, eine andere Shell zu starten, um mit dieser arbeiten zu können:
$> echo $BASH_VERSION 2.03.0(1)-release $> zsh $> echo $BASH_VERSION
Hier wird die Shell durch die Variable $BASH_VERSION identifiziert, die - natürlich nur bei einer Bash - den Versions-String der aktuellen Shell enthält. Verlassen wird diese Shell durch den Befehl exit.
Dauerhaft kann der Anwender seine Login-Shell mit dem Befehl chsh (change shell) ändern:
$> chsh
Password:
Changing the login shell for LinuxUser
Enter the new value, or press return for the default
Login Shell [/bin/bash]:Distributions- und systemabhängig wird zunächst nach dem Passwort des Anwenders gefragt, bevor er eine neue Shell (mit dem gesamten Pfad!, also zuvor ausprobieren) angibt. In der Datei /etc/login.defs wird durch das Schlüsselwort "CHFN_AUTH" festgelegt, ob vor dem Wechsel der Login-Shell nach dem Passwort gefragt wird. Anwender haben Zugriff auf alle Shells, die in der Datei /etc/shells aufgeführt sind. Dabei können auch sogenannte eingeschränkte (restricted) Shells in dieser Liste aufgeführt sein. Bei einer "restricted shell" sind einige Möglichkeiten, die normalerweise zur Verfügung stehen, aus Sicherheitsgründen deaktiviert. So ist in der Regel kein Verzeichniswechsel mehr möglich, auch können Programme nicht mehr durch die Eingabe eines absoluten Pfades gestartet werden. Weitere Einschränkungen hängen von der Shell ab. Außerdem können restricted Shells nicht mehr verlassen werden. Die Bash agiert als "restricted Bash", wenn sie mit der Option -r aufgerufen wird.
Blick zurück, nach vorn
Die erste Shell unter Unix wurde nach ihrem Entwickler Bourne benannt. Sie ist heute als Standard-Shell unter dem Namen sh auf nahezu allen Systemen verfügbar oder wird von anderen Shells emuliert. Die ursprüngliche Bourne-Shell war nicht sehr komfortabel und verfügte nur über einen Bruchteil der Features moderner Shells. Von der Bedienung entsprach sie etwa dem COMMAND.COM-Interpreter unter DOS. Kein Wunder also, dass es bald mehrere Projekte gab, die versuchten, "bessere" Shells zu entwickeln. Als sehr anwenderfreundlich hat sich die ksh (Korn Shell) herausgestellt; eine freie Variante dieser Shell ist unter Linux mit dem Namen pdksh (oder ksh) verfügbar. Eine besonders für Programmierer interessante Shell ist die C-Shell; sie verfügt über eine an die Konventionen dieser Programmiersprache angepasste Syntax. Heute wird überwiegend die Weiterentwicklung der klassischen C-Shell eingesetzt, die unter dem Namen tcsh auf vielen Systemen installiert ist. Unter Linux hat sich dagegen eine andere Shell durchgesetzt: die Bourne Again SHell, kurz "Bash", Programmname bash. Sie vereinigt viele Features der Korn- und der C-Shell, steht unter der GPL und ist auf vielen Rechnern (und nicht nur unter Linux) verfügbar. Ihre Entwickler Brian Fox und Chet Ramey pflegen dieses inzwischen sehr umfangreiche Programm seit vielen Jahren, momentan ist die Version 2.0.5 aktuell. Ein anderer Artikel in diesem Heft geht auf diese Shell näher ein.
Viele neue Shells sind in den letzten Jahren entstanden. Sie sind alle mehr oder weniger kompatibel zur ursprünglichen Bourne Shell. Die Bash emuliert beispielsweise eine Bourne Shell, wenn sie unter dem Programmnamen sh gestartet wurde. (Aber Achtung: Nicht alle Erweiterungen der Bash werden in diesem Modus wirklich deaktiviert, so dass das Verhalten dieser Shell von dem einer echten Bourne Shell abweichen kann.) Eine der leistungsfähigsten Shells, die heute in vielen Linux-Distributionen enthalten ist, ist übrigens die Z-Shell (zsh) von Paul Falstad. Inzwischen wurden auch eine Reihe von "interaktiven" Shells entwickelt, die - ähnlich dem unter DOS bekannten "Norten Commander" - für einfache Aufgaben bei der Manipulation von Dateien eingesetzt werden können.
Shells im Überblick
| Shell | Name und Eigenschaften |
|---|---|
| sh | Bourne-Shell: das Original wird unter Linux nur durch einen Link realisiert |
| ash | (Almquist Shell) ist ein einfacher Bourne-Shell Clone, der über keine Editierfunktionen für die Befehlszeile verfügt, wenig zusätzliche Features |
| sash | Diese statisch gelinkte Shell enthält eine Reihe von eingebauten Befehlen: chgrp, chmod, chown, cmp, cp, dd, echo, ed, grep, gunzip, gzip, kill, ln, ls, mkdir, mknod, more, mount, mv, printenv, pwd, rm, rmdir, sync, tar, touch, umount, where |
| rsh | restricted" Bourne-Shell, diese eingeschränkte Shell wird als Link auf die Bash realisiert und bietet dem Anwender nur begrenzte Möglichkeiten |
| csh | C-Shell: die Berkeley-Version der sh. Erweiterte Funktionen, eine Befehlszeilenhistory und gute Programmierumgebung im C-Stil, aber keine Editierfunktionen für die Befehlszeile |
| tcsh | Tenex-C-Shell (erweiterte C-Shell): die heute unter Linux verwendete Variante der Csh, mit Editierfunktionen für die Befehlszeile |
| ksh | Korn-Shell: diese komfortable Shell wird unter Linux als Link auf pdksh realisiert. Kompatibel zur sh, mit guten Editierfunktionen für die Befehlszeile und Jobmanagement |
| rksh | "restricted" Korn-Shell: eingeschränkte Version der K-Shell |
| bash | Bourne-Again Shell: Standard-Shell unter Linux, vereinigt die Funktionen der K-Shell, C-Shell und weitere. |
| zsh | Z-Shell: Eine moderne und komfortable Shell, kompatibel zur sh, mit wesentlich erweiterten Funktionen |
| git | GNU Interactive Tool |
| mc | Midnight Commander |
| fr | File Runner |
| tkdesk | NeXT-ähnlicher Datei-Manager |
| tkworld | Versuch einer "grafischen Shell" |
| uc | Unix Commander, grafische Shell |
Fazit
Wie Sie gesehen haben, stellen Shells eine sehr universelle Möglichkeit zur Arbeit mit dem System dar. Nach einigen Erfahrungen werden Sie schnell merken, dass Sie beim Einsatz einer Shell eine Menge Arbeit sparen können und Ihnen dabei noch wesentlich mehr Möglichkeiten zur Verfügung stehen, als wenn Sie sich nur auf die grafischen Tools beschränken. Nicht "Desktop oder Shell" ist die Devise sondern "Desktop und Shell". Damit Ihnen der Umgang mit der Bash leichter fällt, werden deren Editierfunktionen im folgenden Artikel genauer beschrieben.
Glossar
Environment
Eine Anzahl von (Environment-) Variablen, deren Inhalt dem Prozess Informationen über die Umgebung geben, in der sich die Ausführung abspielt. So ist im Environment der Typ der Shell gespeichert, die den Prozess gestartet hat, das Terminal mit dem er verbunden ist und vieles mehr. Das Environment kann mit dem Befehl printenv angezeigt werden, env modifiziert es. Einzelne Variablen können mit den Shell-Befehlen (declare oder export auf der Bash oder setenv bei der C-Shell) eingestellt werden.
Prozess
Ein gerade laufendes Programm wird unter Linux als "Prozess" bezeichnet. Zu einem Prozess gehören neben der ausführbaren Datei noch weitere Informationen: das Environment, Daten über den Prozess selbst und über den Prozess, von dem er abstammt. Prozesse werden über die ihnen zugeordnete Prozessidentifikationsnummer (PID) identifiziert, nicht etwa über den Programmnamen. Programme sind unter Linux einfach ausführbare Dateien, also binäre (compilierte) Programm oder interpretierte Skripte. Die Ausführbarkeit einer Datei wird anhand des "x"-Bits bei den Dateiattributen festgestellt und festgelegt.
Muster
Ein Muster (oder englisch: Pattern) ist ein Dateiname, der Joker-Zeichen wie z. B. die auch von DOS bekannten Wildcards "*" und "ß" enthält. Unix-Systeme kennen noch zusätzliche Möglichkeiten für die Auswahl mehrerer Dateien, etwa
file[123]fürfile1,file2undfile3.Debug
Unter "Debuggen" versteht man die Suche nach und Behebung von Programmfehlern. Die Wortwahl (Debugging: Entwanzung) kommt aus der Zeit, als die ersten Rechner noch röhrenbasiert waren: Dort gab es dann Angestellte, die die Computer-Anlagen nach Käfern und anderen Kleintieren durchsuchen mussten, welche Kurzschlüsse verursachen konnten.
Skript
Ein (Shell-) Skript ist in etwa mit einer Batch-Datei von DOS vergleichbar: hier stehen in einer lesbaren Datei mehrere Shell-Befehle hintereinander, die in der angegebenen Reihenfolge ausgeführt werden. Mit Tests kann die Ausführung eines solchen Skripts auch verzweigen, so dass sich ähnliche Programmiermöglichkeiten wie bei einer richtigen Programmiersprache ergeben.
Infos
[1] K. Günther: Kompaktreferenz Linux, MITP 2000
[2] Zilm, Th., Grelck, K.: Linux - die Userreferenz, MITP 1999



