Bitte warten...

Die Benutzerschnittstelle Unix-Shell

(unter Linux Mint 22)

Icon: TerminalDie 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.

Darüber hinaus können in der Shell aber 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, Dateimanager, Spiele, Audioplayer usw. (s. Konsolenanwendung).

Vor der Zeit der grafischen Benutzeroberflächen, die etwa ab Ende der 1980er Jahre zunehmend eingesetzt wurden, war die Shell die typische Kommunikations­schnittstelle 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 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 Tastenkombi­nationen einer grafischen Anwendung sonst dominieren können. In einer virtuellen Konsole muss man sich zunächst mit seinen 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

Das Terminal (gelegentlich auch Konsole genannt) ist eine grafische Anwendung, die wie gesagt die Verwendung der textbasierten Shell ermöglicht.

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:

Code kopieren
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 Kommandozeilen­interpreter heißt Bash (Bourne Again Shell). Es existieren aber auch andere Shells wie dash, ksh, zsh usw., die untereinander nur bedingt kompatibel sind. Im Benutzer­verzeichnis 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:

Code kopieren
benutzer@rechner:~$ echo $0
bash

Durch Klick auf das Terminal-Symbol können die Kommandos auf diesen Seiten einfach in die Zwischenablage kopiert werden. Durch Klick auf die mittlere Maustaste, das Mausrad oder über die Tastenkombination Shift ⇧+Strg+V können sie dann im Terminal wieder eingefügt werden.

Viele der gewohnten Tastaturbefehle funktionieren im Terminal nur bei zusätzlichem Drücken der Shift ⇧-Taste, da diese Tastenkombinationen in der Shell historisch eine andere Funktion haben.

Beispielsweise ist die Tastenkombination für das Kopieren von Text im Terminal Shift ⇧+Strg+C, da Strg+C (oft auch ^C geschrieben) zum Beenden eines laufenden Programms verwendet wird (s. Steuerzeichen).

Pfade und Dateinamen müssen nicht ausgeschrieben werden. Die Bash erkennt vorhandene Namen und ergänzt begonnene Eingaben durch Druck auf die Tab ↹-Taste (Befehlszeilenergänzung). Beginnen mehrere Namen in einem Verzeichnis mit den gleichen Zeichen, müssen so viele Zeichen eingegeben werden, bis eine Unterscheidung eindeutig ist, bevor die Bash den Namen ergänzen kann.

Identische Kommandos müssen nicht immer wieder neu eingegeben werden. Mit den Cursor-Tasten und kann man die Historie der Bash durchstöbern.

Mit der Tastenkombination Strg+L kann das Terminal-Fenster „geleert“ werden. In Wirklichkeit wird so weit gescrollt, bis sich die Eingabeaufforderung in der obersten Zeile des Terminals befindet. Das Kommando clear bewirkt tatsächlich ein komplettes Leeren des Fensters, und reset startet eine neue Bash-Session.

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:

Code kopieren
benutzer@rechner:~$ sudo su
[sudo] Passwort für benutzer:
root@rechner:/home/benutzer# █

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 Icon: Help (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
Cronjobs
Sonstige nützliche Kommandos