Hardcore-Linux

Die Bash, das unbekannte Wesen

,
In diesem ersten Teil einer Serie über die Bash verraten wir Ihnen erste Geheimnisse beim Umgang mit dem Befehlszeileninterpreter. Probieren Sie alles aus! Nur so kann man das erlernte Wissen behalten und vertiefen.

Ein Überblick

Der erste Kontakt mit einer Shell ist häufig ernüchternd: Sie haben ein Terminal gestartet und sehen (fast) nichts, nur einen Prompt. Das soll die hoch gelobte Shell sein?

In diesen und den folgenden Beispielen verwenden wir "$>" als Prompt. Bei Ihnen kann das – abhängig von der Konfiguration Ihrer Shell – etwas anders aussehen, z. B. so (oder noch ganz anders):

Wie man den Prompt ändert, verraten wir Ihnen in einem der folgenden Teile. Der Prompt wird im Deutschen als "Eingabeaufforderung" bezeichnet (bleiben wir lieber beim englischen Begriff) und signalisiert dem Anwender, dass er nun seine Befehle eingeben kann.

Eine Befehlszeile ist dabei etwa in der folgenden Weise aufgebaut:

Prompt Befehl Argumente und Optionen

Der genaue Aufbau einer Befehlszeile ergibt sich aus vielen Faktoren, die wir in den nächsten Teilen besprechen werden. Unter anderem spielt der angegebene Befehl eine Hauptrolle. Er bestimmt, welche Argumente und Optionen verwendet werden können. Befehlszeilen beginnen immer mit einem Befehlsnamen (oder einem Shell-abhängigen Spezialzeichen), der normalerweise direkt angegeben wird, oder mit seinem Pfad, falls es sich um einen externen Befehl handelt, der nicht im Suchpfad der Shell liegt.

Hardcore-Linux?

Die Artikel dieser Serie verlangen Ihnen mehr ab als die übrigen LinuxUser-Texte. Auch wenn Sie die Informationen teilweise unverständlich finden, sollten Sie sich davon nicht abschrecken lassen. Anhand der Beispiele können Sie die einzelnen Features der Shell ausprobieren und so einiges über den Umgang mit der Befehlszeile lernen.

Bearbeiten von Befehlszeilen

Befehlszeilen können editiert werden, solange sie nicht mit [Return] an die Shell übergeben wurden. Bis zu diesem Zeitpunkt handelt es sich quasi um eine normale Textzeile, wie sie auch in einen Editor eingegeben werden könnte. Dem Anwender stehen in der Eingabezeile eine Reihe von Editierfunktionen zur Verfügung, die durch verschiedene Tastenkombinationen aufgerufen werden.

Innerhalb einer Befehlszeile kann der Anwender mit den normalen Tasten arbeiten, vorausgesetzt sein Terminal und die Shell sind korrekt konfiguriert. [Pos1] lässt den Cursor an den Anfang der Befehlszeile springen, [Ende] an deren Ende. In der Bash können diese Aktionen auch durch [Strg+A] bzw. [Strg+E] ausgeführt werden. Hier zeigt sich ein grundlegendes Konzept der Bash: Die einzelnen Tastendrücke werden mit speziellen Funktionen verknüpft – "gebunden" heißt das im Fachjargon.

Die Bash verwendet die Funktionen der Readline-Library zur Bearbeitung der Befehlszeile. Die Funktion beginning-of-line ist an [Strg+A] gebunden, end-of-line an [Strg+E]. Diese Bindungen lassen sich auch vom Anwender verändern, siehe unten. Die Cursortasten [<--] und [-->] verschieben die Schreibmarke um jeweils eine Position. Das geht auch, wenn keine Cursortasten zur Verfügung stehen: [Strg+F] (forward-char) und [Strg+B] (backward-char) bewegen den Cursor. Auch wortweise kann der Cursor versetzt werden: [Meta+F] springt mit der Funktion forward-word nach rechts, [Meta+B] (backward-word) nach links. Da die meisten Tastaturen über keine "Meta"-Taste verfügen, emuliert Linux deren Funktion. Zum einen wird die linke Alt-Taste [Alt] als Meta-Taste belegt, zum anderen kann die Escape-Taste vor einer Meta-Tastenkombination betätigt werden. Also: die an [Meta+B] gebundene Funktion kann als [Alt+B] oder durch [Esc] mit anschließendem [B] ausgeführt werden.

Die [Einfg]-Taste sollte eigentlich den Überschreibmodus aktivieren, dies ist aber bei den wenigsten Terminals möglich. Meistens fügt diese Taste die zuletzt ausgeschnittene Textpassage links vom Cursor ein oder hat einfach gar keine Funktion. Dafür wird mit der [Entf]-Taste in den meisten Systemen das Zeichen unter dem Cursor oder links davon gelöscht.

Entsprechendes gilt für die [Backspace]- (Rückschritt-) Taste oben rechts über der Return-Taste. Welche Aktion diese Taste auslöst, kann der Anwender unter X im Terminalemulator meistens einstellen. Beim klassischen xterm entscheidet die Einstellung der Ressource backarrowKeyIsErase über deren Funktion. Einfacher ist die Einstellung bei den KDE-Terminals vom Typ kvt vorzunehmen: Dort kann mit dem Menüpunkt Terminal ein kleines Dialogfenster geöffnet werden, in dem verschiedene Einstellungen möglich sind.

Konfiguration der Backspace-Taste bei kvt

Die Bash stellt Ihnen natürlich noch viel mehr Funktionen zur Verfügung: Sie können beispielsweise mit der an [Meta+Backspace] gebundenen Funktion das Wort links vom Cursor löschen und es später mittels [Strg+Y] (yank) erneut in die Befehlszeile einfügen. Das Löschen von Bereichen ist noch allgemeiner: mit [Strg+Leerzeichen] definieren Sie den Anfang eines Bereichs, setzen den Cursor auf das Ende des Bereichs und löschen den Text dazwischen mittels [Strg+W] (kill-region). Ein Beispiel verdeutlicht dies:

Abbildung 1: Arbeitsweise des kill ring-Speichers
$> dd if=/dev/urandom of=del1 count=3

Am Ende dieser Befehlszeile bemerkt der Anwender, dass er statt Daten aus dem Gerät urandom vielleicht doch lieber welche aus zero verwenden will. Er kann nun mittels backward-word dreimal nach links springen und landet dann auf dem "o" von "of".

Mit der Tastenkombination [Meta+Backspace] entfernt er das falsche Wort urandom und gibt stattdessen zero ein. Dabei ist es ausreichend, wenn er ze gefolgt von der Tabulatortaste eintippt – die Bash komplettiert diese Angabe.

Durch das Return wird die geänderte Zeile ausgeführt. Die dabei ausgeführte Funktion heißt accept-line und ist neben [Return] ebenfalls an [Strg+J] und [Strg+M] gebunden. Auch das Löschen ab der Cursor-Position bis zum Zeilenende ist mit [Strg+K] (kill-line) vorgesehen, umgekehrt: Löschen bis zum Zeilenanfang erfolgt durch [Strg+U] (unix-line-discard).

Auf zwei Besonderheiten beim Editieren der Befehlszeile sollten wir noch hinweisen: Es gibt die Möglichkeit, in einer Befehlszeile mehr als eine Textpassage auszuschneiden. Alle ausgeschnittenen Passagen werden der Reihe nach in einem speziellen Speicher zwischengespeichert, dem kill-ring, siehe Abbildung 1. Jeweils die zuletzt gespeicherte Passage wird durch einen yank-Befehl ([Strg+Y]) vor der Cursor-Position eingefügt. Es besteht mittels [Meta+Y] die Möglichkeit, den kill-ring um eine Position zu rotieren, so dass die zuvor ausgeschnittene Passage eingefügt wird.

$>  mv  /etc/inputrc  /etc/inputrc.system

inputrc.system wird ausgeschnitten (z. B. mit [Meta+Backspace]), anschließend wird inputrc ausgeschnitten …

$>  cp  /etc/inputrc.system

der zuerst ausgeschnittene Text wird mit [Strg+Y] eingefügt …

$>  cp  /etc/inputrc.system  ~/.inputrc

[Meta+y] rotiert den kill-ring, und der zuletzt ausgeschnittene Text wird eingefügt.

So könnten also beispielsweise auch die Angaben einer Eingabedatei mit einer Ausgabedatei vertauscht werden. Der kill-ring-Speicher verfügt normalerweise über 30 Speicherplätze. Werden mehr Textpassagen ausgeschnitten, verschwinden die zuerst in den Speicher aufgenommenen. Zu einer Passage zählen alle nacheinander mittels einer der kill-Funktionen (kill-line, kill-region, kill-whole-line, kill-word, forward-/backward-kill-word, unix-line-discard und unix-word-rubout, nicht aber forward-backward-delete-char) gelöschten Texte, wenn keine anderen Funktionen zwischenzeitig ausgeführt wurden. Das Bewegen des Cursors mit den Cursortasten beispielsweise reicht aus, um eine kill-Aktion zu beenden. Wenn alles schief geht, gibt es eine Undo-Funktion für die Befehlszeile, die es ermöglicht, alle Änderungen schrittweise in umgekehrter Reihenfolge zurückzunehmen. Die Funktion undo ist, wie unten gezeigt wird, normalerweise an die Tastenkombination [Strg+Shift+-] (also: Strg, Shift und -) gebunden.

Alle Änderungen in der Befehlszeile können auch in einem Schritt revidiert werden, dies ist durchrevert-line – gebunden an [Meta+R] oder [Strg+Meta+R] möglich.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • The Answer Girl
    Die Linux-Kommandozeile kann weitaus mehr als die gute alte DOS-command.com. Doch viele ihrer Schätze sind schwer zu finden.
  • Bash-Workshop
    Alle bereits einmal in einer Bash ausgeführten Befehlszeilen werden in einem Speicher – dem History-Buffer – gespeichert. Dieser Teil unserer Serie über die Bash beschäftigt sich mit diesem Speicher und zeigt den Zugriff auf die dort enthaltenen Informationen.
  • Konfiguration der Bash
    Für viele Einsteiger ist die Shell ein Mysterium, das fortgeschrittenen Anwendern und Linux-Gurus vorbehalten bleibt. Dabei verbirgt sich hinter dem Prompt ein flexibles Programm, mit dem Anwender beinahe jede Aufgabe lösen können.
  • Die Bash, das unbekannte Wesen
    Es gibt neben den Pipes noch verschiedene andere Verfahren, um mehrere Shell-Befehle miteinander zu verbinden bzw. sie parallel auszuführen. Die wichtigsten Methoden werden in dieser Folge der Bash-Serie vorgestellt.
  • Im Innern der Muschel
    Mit der Version 4 erhält die Bourne Again Shell (Bash) neue Funktionen, die sie einmal mehr als leistungsfähige Programmierschnittstelle zum System und zu Applikationen qualifiziert.
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Huawei
Pit Hampelmann, 13.12.2017 11:35, 1 Antworten
Welches Smartphone ist für euch momentan das beste? Sehe ja die Huawei gerade ganz weit vorne. Bi...
Fernstudium Informatik
Joe Cole, 12.12.2017 10:36, 2 Antworten
Hallo! habe früher als ich 13 Jahre angefangen mit HTML und später Java zu programmieren. Weit...
Installation Linux mint auf stick
Reiner Schulz, 10.12.2017 17:34, 3 Antworten
Hallo, ich hab ein ISO-image mit Linux Mint auf einem Stick untergebracht Jetzt kann ich auch...
Canon Maxify 2750 oder ähnlicher Drucker
Hannes Richert, 05.12.2017 20:14, 4 Antworten
Hallo, leider hat Canon mich weiterverwiesen, weil sie Linux nicht supporten.. deshalb hier die...
Ubuntu Server
Steffen Seidler, 05.12.2017 12:10, 1 Antworten
Hallo! Hat jemand eine gute Anleitung für mich, wie ich Ubuntu Server einrichte? Habe bisher...