Bitte warten...

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 (ca. Ende der 1980er Jahre) 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. 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.

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 wie gesagt 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 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, 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:

Code kopieren
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:

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.

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 (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# █

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

whoami
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.

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
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 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
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 symbol: question (Version 0.6.4, 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