Die Benutzerschnittstelle Unix-Shell
(unter Linux Mint 21)
Die Unix-Shell ist als Teil des Betriebssystems ein Programm, das die traditionelle textbasierte Kommunikationsschnittstelle zwischen Benutzer und Rechner bereitstellt. Während bei modernen Betriebssystemen die Interaktion in der Regel über die grafischen Oberflächen der Desktop-Umgebung (grafische Shell) und der einzelnen Anwendungen erfolgt – wobei hier die Maus ein wichtiges Werkzeug ist – erfolgt die Interaktion in der Unix-Shell vor allem über spezielle Kommandos, die über die Tastatur eingegeben werden (Standard beispielsweise auf Server-Systemen). Ein Shell-Kommando besteht mindestens aus dem Namen des auszuführenden Programms, kann aber über weitere Parameter konkretisiert werden. Die Gesamtheit eines Kommandos und seiner Parameter wird Kommandozeile genannt. Die Shell dient daher hier als ausführender Kommandozeileninterpreter. Sie wird deshalb auch Kommandozeilenschnittstelle (command line interface, CLI) genannt.
Darüber hinaus können in der Shell aber auch kleinere Programme in Form von Shellskripten geschrieben oder aus entsprechenden Skript-Dateien geladen und ausgeführt werden. Schließlich existieren ausgewachsene interaktive Programme mit einer Übergangsform zur grafischen Oberfläche, der zeichenorientierte Benutzerschnittstelle, wie Texteditoren, Dateimanager, Spiele, Audioplayer usw. (s. Konsolenanwendung).
Vor der Zeit der grafischen Benutzeroberflächen war die Shell die typische Kommunikationsschnittstelle zwischen Benutzer und Maschine. Sie wird aber auch heute noch von jenen Benutzern geschätzt, die das volle Potential ihres Rechners ausschöpfen möchten. Für spezielle Aufgaben ist die Shell gelegentlich die einzig verfügbare Option. Die ungewohnte Verwendung der zunächst etwas kryptisch anmutenden Kommandos stellt für viele Anwender oft eine tendenziell abschreckende Hürde dar. Um die Lernkurve für Einsteiger in dieses Thema etwas abzuflachen, wird die Verwendung der Shell daher hier in Grundzügen erklärt.
Den Zugang zur Shell erlangt man üblicherweise über einen Terminal-Emulator, der – wie der Name schon sagt – aus der grafischen Desktop-Umgebung der Linux-Sitzung heraus ein klassisches textbasiertes Terminal nachbildet und daher meist ebenfalls vereinfachend Terminal genannt wird. Das ist unter Linux Mint zunächst das vorinstallierte Gnome Terminal, das über ► Systemverwaltung ► Terminal oder über die Tastenkombination Strg+Alt+T gestartet werden kann. Es lassen sich aber auch andere Terminal-Emulatoren installieren und verwenden.
Außerdem ist es möglich, über die Tastenkombinationen Strg+Alt+F1 bis Strg+Alt+F6 die grafische Desktop-Umgebung ganz zu verlassen und eine virtuelle Konsole zu starten. Mit Alt+→ und Alt+← kann man dann zwischen den verschiedenen Konsolen wechseln (tty1 bis tty6, historisch von TTY-Schnittstelle). Über Strg+Alt+F7 gelangt man schließlich zur Desktop-Umgebung zurück. Um zu einer virtuellen Konsole zu gelangen, sollte man zunächst alle geöffneten Fenster minimieren (+D), da die Tastenkombinationen einer grafischen Anwendung sonst dominieren können. In einer virtuellen Konsole muss man sich zunächst mit seinen Zugangsdaten anmelden.
In dieser Einführung werden folgende Themen behandelt:
• Dateisystem-Operationen
• Unix-Dateirechte
• Bash-Skripte
• Sonstige nützliche Kommandos
Grundsätzliches zum Terminal
Das Terminal (gelegentlich auch Konsole genannt) ist eine grafische Anwendung, die die Verwendung der textbasierten Shell ermöglicht.
Während der gewöhnliche Anwender in der Regel für die Bewältigung von Aufgaben Programme mit grafischer Oberfläche verwendet, können bestimmte Vorgänge unter Umständen schneller oder ausführlicher über das Terminal erledigt werden, da man darüber vollkommenen Zugriff auf das Betriebssystem hat. Programme mit grafischer Oberfläche übersetzen die Klicks und Eingaben des Benutzers eines Programmes ohnehin häufig lediglich in die Kommandos der Shell. Die grafische Oberfläche dient der Benutzerfreundlichkeit, kann aber die Möglichkeiten eines Dienstprogramms einschränken.
Der unter Linux Mint (und anderen Debian-basierten Distributionen) verwendete Kommandozeileninterpreter heißt Bash (›Bourne Again Shell‹). Es existieren aber auch andere Shells wie dash, ksh, zsh usw., die untereinander nur bedingt kompatibel sind. Im Benutzerverzeichnis existiert eine versteckte Konfigurationsdatei für Bash .bashrc, die manuell editiert werden kann, um Bash an die eigenen Vorlieben anzupassen. Mehr dazu siehe UbuntuUsers-Wiki.
Beim Start des Terminals erscheint zunächst die Eingabeaufforderung (command prompt) mit einer Kennzeichnung nach folgendem Schema:
benutzer@rechner:~$ █
Auf den Rechnernamen folgt die Angabe des aktuellen Verzeichnisses, in dem ein Kommando ausgeführt wird. In diesem Fall ist es das Home-Verzeichnis des Benutzers, das durch die Tilde ~ repräsentiert wird. Das $-Zeichen danach zeigt an, dass der Benutzer als normaler Nutzer ohne Root-Rechte angemeldet ist. Dahinter blinkt der Cursor, der uns damit mitteilen will, dass das Terminal auf eine Eingabe wartet. Um den genauen Pfad des aktuellen Arbeitsverzeichnisses anzeigen zu lassen, gibt man das Kommando pwd
(print working directory) ein und bestätigt mit der Eingabe-Taste.
Mit folgendem Kommando kann die verwendete Shell angezeigt werden:
benutzer@rechner:~$ echo $0
bash
Root-Rechte
Grundsätzlich sollte man genau wissen, was man tut, wenn man Programme als Root ausführt, da man im ungünstigsten Fall damit Schäden am Betriebssystem anrichten kann.
In der Regel können bestimmte Kommandos nur auf Dateien oder innerhalb von Verzeichnissen ausgeführt werden, für die man auch Zugriffsrechte besitzt. Sollte man ein Kommando als normaler Benutzer nicht ausführen können, weil einem die entsprechenden Rechte fehlen, so muss man dies mit Root-Rechten vornehmen. Dazu setzt man vor das Kommando sudo. Bei solchen Kommandos wird man vor dem Ausführen nach dem Benutzerpasswort gefragt.
Beispiel:
sudo apt-get clean
Eine Root-Shell, bei der man selbst als Root (d. h. als Administrator oder Super-User) handelt und daher dauerhaft über Root-Rechte verfügt, wird mit dem Kommando sudo su
gestartet, wobei man das Benutzerpasswort eingeben muss. Danach ändert sich die Eingabeaufforderung folgendermaßen:
benutzer@rechner:~$ sudo su
[sudo] Passwort für benutzer:
root@rechner:/home/benutzer# █
In der Root-Shell ist es nun nicht mehr nötig, Kommandos ein sudo
voranzustellen.
Die Root-Shell wird mit exit
wieder beendet.
Hilfe-Informationen
Falls man erfahren möchte, unter welchem Benutzerkonto man gerade arbeitet, kann man sich den Namen mit whoami
(Who am I?) anzeigen lassen. Allerdings steht der Benutzername auch immer ganz am Anfang der Eingabeaufforderung.
Eine wirklich große Hilfe beim Umgang mit dem Terminal sind die so genannten Manpages (manual pages), in denen die Funktion der kryptischen Kommandos zusammen mit den möglichen Optionen beschrieben wird. Eine zentrale Sammlung von Manpages findet man beispielsweise bei manpages.debian.org.
Mit dem Kommando man KOMMANDO
kann man die Manpage zu einem bestimmten Kommando aber auch direkt im Terminal anzeigen lassen. Benötigt man zum Beispiel die Manpage von apt-get, so ruft man man apt-get
auf.
Häufig erhält man weitere hilfreiche Informationen auch über info KOMMANDO
, also beispielsweise info apt-get
. Falls kein spezieller Infotext verfügbar ist, wird automatisch die entsprechende Manpage angezeigt.
Weitere hilfreiche Informationen zu einem Kommando erhält man in der Regel durch KOMMANDO --help
. Für apt-get also apt-get --help
.
Eine schlichte, einzeilige Erklärung eines Kommandos erhält man über whatis KOMMANDO
.
Eine Liste mit den Namen von Kommandos, deren Beschreibung einen bestimmten Suchbegriff enthalten, erhält man mit dem Kommando apropos, beispielsweise apropos editor
.