So ändern Sie Ihre Standard-Shell unter Linux mit chsh

Die Bash ist nicht die einzige verfügbare Linux-Shell. Es ist unkompliziert, alternative Shells wie die sehr geschätzte Zsh zu testen. Wenn Sie eine bevorzugte Shell gefunden haben, können Sie diese mit dem Befehl `chsh` als Ihre Standard-Shell festlegen. Wir zeigen Ihnen den genauen Ablauf.

Die Bedeutung der Shell

Die Shell agiert als Schnittstelle zwischen Ihnen und dem Betriebssystem. Sie stellt eine Umgebung in einem Terminalfenster bereit, in der Sie Befehle eingeben und Programme ausführen können. Die Shell analysiert Ihre Eingaben und interpretiert Ihre Wünsche. Kann sie Ihre Anweisungen selbst ausführen, tut sie das. Falls externe Hilfe benötigt wird, durchsucht sie den definierten Pfad nach den Programmen, die Ihre Anforderungen erfüllen.

Unter Linux gibt es eine Vielzahl von Shells. Sie alle ermöglichen die Ausführung der gleichen grundlegenden Aufgaben: die Navigation durch das Dateisystem, die Dateibearbeitung, das Starten von Programmen und das Ausführen von Skripten. Jede Shell erledigt diese Aufgaben jedoch auf ihre eigene Art und Weise und mit spezifischen Eigenschaften und Eigenheiten.

Shells entstehen oft durch Entwickler, die bestimmte Verhaltensweisen bevorzugen. Wenn Ihre Denkweise mit der des Entwicklers übereinstimmt, könnte die entsprechende Shell gut zu Ihnen passen. Zudem ist es unter Linux sehr einfach, neue Shells auszuprobieren.

In den meisten Linux-Distributionen, einschließlich Ubuntu, ist Bash die Standard-Shell. Sie leistet hervorragende Arbeit und ist sehr leistungsfähig. Eine andere Shell könnte jedoch eine Zeitersparnis bieten, die Ihren Workflow erheblich beeinflussen könnte. Das erfahren Sie nur durchs Ausprobieren!

Eine Auswahl an Shells

Wir haben verschiedene Linux-Shells bereits behandelt, aber hier eine kurze Einführung in die gängigsten:

Bash: Die Bourne again Shell ist der Standard in vielen Distributionen.
Rbash: Die eingeschränkte Bash-Shell bietet minimalen Funktionsumfang für den Ausführenden oder das Skript.
Ash: Die Almquist-Shell ist eine ressourcenschonendere Version der Bash.
Dash: Die Debian Almquist Shell ist das Standard-Shell-Skript unter Ubuntu. Während Bash die Standard-Login- und interaktive Shell ist, wird Dash wegen ihrer geringeren Ressourcenbelastung für Systemprozesse genutzt.
Zsh: Die Z-Shell ist eine fortschrittliche Variante der Bash-Familie. Sie bietet nützliche Verbesserungen wie Befehls-Rechtschreibprüfung und Korrekturvorschläge.
Fish: Die Friendly Interactive Shell wurde von Grund auf neu geschrieben und ist nicht von anderen Shell-Familien abgeleitet. Ihr Fokus liegt auf Benutzerfreundlichkeit. Unter anderem bietet Fish Befehlsvorschläge basierend auf Ihrem Verlauf und dem aktuellen Verzeichnis, ähnlich wie prädiktiver Text.
Ksh: Die KornShell bietet eine besonders leistungsfähige Skriptsprache.

Liste der installierten Shells

Verwenden Sie den folgenden Befehl, um die auf Ihrem System installierten Shells anzuzeigen. Dieser Befehl listet den Inhalt der Datei `/etc/shells` auf:

cat /etc/shells

Wir haben Bash, Dash und Rbash erwähnt, aber was ist „sh“?

Es ist die Thompson Shell, geschrieben 1971 von Ken Thompson, bekannt von Bell Labs. Sie wird nicht mehr weiterentwickelt und ist längst von moderneren Shells abgelöst worden. Sie ist nur enthalten, um die Kompatibilität mit älteren Skripten zu gewährleisten, die noch folgende Zeile als erste enthalten:

#!/bin/sh

Dies weist das System an, das Skript mit der `sh`-Shell auszuführen. Ist diese alte Shell wirklich auf Ihrem System und wird sie zur Ausführung Ihrer Skripte verwendet? Der Befehl `which` verrät, welches Programm ausgeführt wird, wenn Sie einen Befehl eingeben.

Lassen Sie uns überprüfen, was ausgeführt wird, wenn Sie `sh` eingeben:

which sh

Dies scheint eine Binärdatei zu finden. Wenn wir jedoch genauer hinschauen, stellen wir fest, dass es sich um einen symbolischen Link handelt, der tatsächlich auf `dash` verweist, die ressourcenschonende Shell, die für die Ausführung von Skripten verwendet wird:

ls -l /bin/sh

Dies ist ein effizienter Weg, um ein Sicherheitsnetz für Skripte bereitzustellen, die auf modernen Systemen erwarten, `sh` zu finden.

Installation einer alternativen Shell

Lassen Sie uns die Fish-Shell installieren und sie als Standard für den Benutzer `dave` festlegen. Auf Ubuntu geben wir den folgenden Befehl ein:

sudo apt-get install fish

Unter Manjaro verwenden Sie Pacman:

sudo pacman -Sy fish

Geben Sie unter Fedora Folgendes ein:

sudo dnf install fish

Nachdem die Installation abgeschlossen ist, können Sie die installierten Shells erneut überprüfen:

cat /etc/shells

Unsere neue Shell ist unter `/usr/bin/fish` zu finden. Merken Sie sich diesen Pfad – Sie werden ihn gleich benötigen.

Die Umgebungsvariable $SHELL

Die Umgebungsvariable `$SHELL` enthält den Pfad Ihrer aktuellen Shell. Wir können mit `echo` überprüfen, auf welchen Wert sie gesetzt ist:

echo $SHELL

Starten wir die Fish-Shell:

fish

Überprüfen wir nun erneut, was die Umgebungsvariable `$SHELL` anzeigt:

echo $SHELL

Beim ersten Aufruf von `echo $SHELL` befinden wir uns in der Bash-Shell. Die Umgebungsvariable zeigt den Pfad zur ausführbaren Bash-Datei `/bin/bash`.

Wenn wir die Fish-Shell starten, erhalten wir eine Begrüßungsnachricht und die Eingabeaufforderung ändert sich. Überraschenderweise zeigt die `$SHELL`-Umgebung immer noch den Pfad zur ausführbaren Bash-Datei `/bin/bash`. Das ist normal und erwartet.

Wenn Sie eine neue Shell (oder ein anderes Programm) starten, erbt diese die Umgebung der übergeordneten Shell. Die Fish-Shell erbt also die globalen und exportierten Umgebungsvariablen der Bash-Shell. Da der Wert der Umgebungsvariablen `$SHELL` nicht verändert wurde, hat er in der Fish-Shell den gleichen Wert wie in der Bash-Shell.

Wir betreiben Fish wie jedes andere Programm. Wir können auch `exit` verwenden, um die Fish-Shell zu beenden. Sie schließt sich wie jedes andere Programm und wir kehren zur Bash-Shell zurück.

Das ist ideal, um neue Shells auszuprobieren, ihre Möglichkeiten zu erkunden und zu sehen, ob man damit zurechtkommt. Man kann sie testen, bevor man sich für eine als Standard-Shell entscheidet.

Wenn Sie Fish – oder eine andere Shell – als Standard festlegen möchten, müssen Sie den Befehl `chsh` verwenden.

Der chsh-Befehl

Mit dem Befehl `chsh` können Sie Ihre Standard-Shell ändern. Wichtig ist dabei, dass Sie sowohl die Standard-Login-Shell als auch die interaktive Shell separat ändern können. Sie können eine oder beide ändern.

Beim Anmelden, um eine Eingabeaufforderung zu erhalten, wird die Shell verwendet, die als Ihre Login-Shell konfiguriert ist. Wenn Sie bereits angemeldet sind und ein Terminalfenster öffnen, wird die als interaktive Shell konfigurierte Shell verwendet. Dies können entweder dieselben oder verschiedene Shells sein.

Um Ihre Login-Shell festzulegen, verwenden Sie `chsh` ohne Parameter:

chsh

Sie werden aufgefordert, Ihr Passwort einzugeben. Danach müssen Sie den Pfad zur neuen Shell eingeben und die Eingabetaste drücken.

Wenn wir uns per Remote-Verbindung mit diesem Testcomputer verbinden, befinden wir uns nach dem Einloggen in der Fish-Shell.

Um Ihre interaktive Shell zu ändern, verwenden Sie `chsh` mit der Option `-s` (Shell). Übergeben Sie den Pfad zur neuen Shell in der Befehlszeile:

chsh -s /usr/bin/fish

Sie werden aufgefordert, Ihr Passwort einzugeben und kehren zur Eingabeaufforderung Ihrer aktuellen Shell zurück. Die Änderung wird erst wirksam, nachdem Sie sich ab- und wieder angemeldet haben. Danach sehen Sie die Begrüßung und die Eingabeaufforderung der Fish-Shell.

Die Umgebungsvariable `$SHELL` enthält nun den Pfad zu Ihrer neuen Standard-Shell:

echo $SHELL

Ändern der Shell eines anderen Benutzerkontos

Wenn Sie Root-Rechte haben und `sudo` verwenden können, können Sie die Shells anderer Benutzerkonten ändern. Der Befehl ist der gleiche wie zuvor, jedoch mit dem Benutzernamen dieser Person am Ende der Befehlszeile:

sudo chsh -s /usr/bin/fish mary

Wenn sich `mary` das nächste Mal anmeldet, wird sie die neue Shell sehen, wenn sie ein Terminalfenster öffnet.

Fertig