Die Benutzerschnittstelle Unix-Shell
(unter Linux Mint 22)
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 (auch: Befehle oder Anweisungen), 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. Gelegentlich wird auch der Begriff Konsole synonym für die Shell verwendet.
Außer einzelnen Kommandos können in der Shell auch kleinere Programme in Form von Shellskripten (konkret: Bash-Skripte) 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 zeichenorientierten Benutzerschnittstelle, wie Texteditoren, Web-Browser, Dateimanager, Spiele, Audioplayer usw. (s. Konsolenanwendung).
Der Dateimanager Midnight Commander im Terminal
Der Systemmonitor btop++ im Terminal
Vor der Zeit der grafischen Benutzeroberflächen, die etwa ab Ende der 1980er Jahre zunehmend eingesetzt wurden, 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. Neulingen erscheint die ungewohnte Verwendung des Terminals und der kryptisch anmutenden Kommandos häufig etwas sperrig und 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, obwohl damit ursprünglich eigentlich eine Hardware-Komponente gemeint war. 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 voneinander unabhängige textbasierte Shell-Sessions (sog. virtuelle Konsolen) 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. Zum Beginn einer Shell-Session in einer virtuellen Konsole muss man sich dort mit seinen regulären Zugangsdaten anmelden.
Möchte man lediglich einen einzigen Befehl ausführen und benötigt keine Anzeige einer Datenausgabe, kann man eine einfache Eingabeaufforderung über die Tastenkombination Alt+F2 öffnen.
Grundsätzliches zum Terminal
Während heutzutage für die meisten Anwendungsfälle Programme mit grafischer Oberfläche verwendet werden, können bestimmte Aufgaben 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 Programms einschränken, wenn sie nicht sämtliche Optionen des zugrunde liegenden Shell-Programms anbietet.
Beim Start des Terminals erscheint zunächst die Eingabeaufforderung (command prompt) mit einer Kennzeichnung nach folgendem Schema:
benutzer@rechner:~$ █
Die Eingabeaufforderung wird mit dem Namen des aktuellen Benutzers eingeleitet, auf den nach einem @-Zeichen der Hostname des verwendeten Rechners folgt. Nach dem Doppelpunkt : folgt die Angabe des aktuellen Verzeichnisses, in dem ein Kommando ausgeführt wird (das Arbeitsverzeichnis). 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.
Möchte man den Namen des aktuellen Benutzers explizit ausgeben lassen, kann man das Kommando whoami
(Who am I?) oder echo $USER
verwenden. Durch drücken der Eingabe-Taste wird das Kommando ausgeführt.
Der Hostname ist der Name des Rechners in einem eventuell vorhandenen Netzwerk, so wie er bei der Installation des Betriebssystems angegeben wurde. Mit folgendem Kommando kann er explizit abgefragt werden:
hostnamectl hostname
Möchte man den Hostnamen ändern, kann man folgendes Kommando verwenden (der Platzhalter NEUERNAME ist durch den real gewünschten neuen Namen zu ersetzen):
sudo hostnamectl set-hostname NEUERNAME
Nach einer Neuanmeldung (Strg+Alt+ ←) ist der Rechner mit dem neuen Hostnamen im Netzwerk sichtbar.
Um den genauen Pfad des aktuellen Arbeitsverzeichnisses anzeigen zu lassen, verwendet man das Kommando pwd
(print working directory) oder echo $PWD
.
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 (Bash run commands), die manuell editiert werden kann, um Bash an die eigenen Vorlieben anzupassen. Mehr dazu siehe UbuntuUsers-Wiki. 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. In diesem Fall wird man vor dem Ausführen nach dem Benutzerpasswort gefragt.
Beispiel:
sudo apt-get clean
(leert den Cache der Paketverwaltung)
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# █
Das Kommando sudo -i
funktioniert ähnlich wie sudo su
mit dem Unterschied, dass zusätzlich die Umgebungsvariablen von Root geladen werden, falls diese benötigt werden.
Statt des $-Zeichens nach dem Pfad des aktuellen Arbeitsverzeichnisses zeigt nun das #-Zeichen an, dass man sich in einer Root-Shell befindet. In der Root-Shell ist es jetzt nicht mehr nötig, Kommandos ein sudo
voranzustellen. Mit exit
wird die Root-Shell wieder beendet.
Hilfe-Informationen
Um die Arbeit in der Shell zu erleichtern steht eine Reihe von Kommandos zur Verfügung, über die man Hilfe und weitere Informationen erhalten kann (manchmal allerdings nur auf Englisch).
apropos
Eine Liste mit den Namen von Kommandos, deren Beschreibung einen bestimmten Suchbegriff enthält, erhält man mit dem Kommando apropos, beispielsweise apropos editor
.
whatis
Eine schlichte, einzeilige Erklärung eines Kommandos erhält man über whatis KOMMANDO
.
--help (oft auch -h)
Weitere hilfreiche Informationen zu einem Kommando erhält man in der Regel durch KOMMANDO --help
. Für apt-get also apt-get --help
.
man
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 ausführlich 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.
info
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. Die Dokumentation dieses Kommandos erhält man durch einfachen Aufruf von info
ohne Parameter.
tldr (too long, didn’t read)
Eine auf die Beschreibung der wichtigsten Optionen reduzierte Variante vieler Manpages lässt sich mit dem Kommando tldr anzeigen, das allerdings erst installiert werden muss:
sudo apt-get install tldr
Installation per apturl (Version 0.9.2, Website)
Vor dem ersten Aufruf muss die Datenbank der Texte mit tldr --update
aktualisiert werden. Anschließend erfolgt der Aufruf mit tldr KOMMANDO
, zum Beispiel tldr ffmpeg
Weitere Themen:
• Dateisystem-Operationen
• Unix-Dateirechte
• Bash-Skripte
• Sonstige nützliche Kommandos