15 Sonderzeichen, die Sie für Bash kennen müssen

Um die Bash-Shell unter Linux, macOS oder einem anderen UNIX-ähnlichen Betriebssystem wirklich zu meistern, ist das Wissen um spezielle Zeichen (wie ~, *, | und >) unerlässlich. Wir helfen Ihnen, die Geheimnisse dieser kryptischen Linux-Befehlssequenzen zu entschlüsseln und sich in einen wahren Experten zu verwandeln.

Was verbirgt sich hinter Sonderzeichen?

Es gibt eine Reihe von Zeichen, die die Bash-Shell auf zweierlei Weise interpretiert. Wenn Sie diese Zeichen in die Shell eingeben, fungieren sie als Anweisungen oder Befehle und fordern die Shell auf, eine bestimmte Operation auszuführen. Stellen Sie sie sich als Befehle in Form von Einzelzeichen vor.

Manchmal möchten Sie ein Zeichen jedoch nur ausgeben, ohne dass es seine spezielle Funktion ausführt. Dafür gibt es eine Möglichkeit, wie ein Zeichen verwendet werden kann, um sich selbst darzustellen und nicht seine besondere Funktion.

Wir zeigen Ihnen, welche Zeichen als „Sonder-“ oder „Meta-“ Zeichen gelten und wie Sie diese sowohl funktional als auch wörtlich einsetzen können.

~ Das Home-Verzeichnis

Die Tilde (~) steht für Ihr persönliches Home-Verzeichnis. Das bedeutet, dass Sie in Ihren Befehlen nicht den vollständigen Pfad zu Ihrem Home-Verzeichnis angeben müssen. Egal wo Sie sich im Dateisystem befinden, mit diesem Befehl gelangen Sie immer zurück zu Ihrem Home-Verzeichnis:

cd ~

Sie können dieses Symbol auch in Verbindung mit relativen Pfaden verwenden. Wenn Sie sich beispielsweise in einem Verzeichnis außerhalb Ihres Home-Ordners befinden und zum Ordner „Archiv“ in Ihrem Arbeitsverzeichnis wechseln möchten, nutzen Sie die Tilde wie folgt:

cd ~/work/archive

. Das aktuelle Verzeichnis

Ein einzelner Punkt (.) symbolisiert das aktuelle Verzeichnis, in dem Sie sich befinden. Sie werden ihn in den Verzeichnislisten sehen, wenn Sie den Befehl „ls“ mit der Option -a (all) verwenden.

ls -a

Sie können den Punkt auch in Befehlen verwenden, um den Pfad zum aktuellen Verzeichnis anzugeben. Wenn Sie beispielsweise ein Skript aus dem aktuellen Verzeichnis ausführen möchten, würden Sie es wie folgt aufrufen:

./script.sh

Dies signalisiert der Bash, dass sie im aktuellen Verzeichnis nach der Datei „script.sh“ suchen soll. Dadurch werden die Verzeichnisse in Ihrem Pfad nicht nach passenden ausführbaren Dateien oder Skripten durchsucht.

.. Das übergeordnete Verzeichnis

Der doppelte Punkt oder „Doppelpunkt“ (..) steht für das übergeordnete Verzeichnis Ihres aktuellen Verzeichnisses. Dies ermöglicht Ihnen, im Verzeichnisbaum eine Ebene nach oben zu wechseln.

cd ..

Sie können diesen Befehl auch in Verbindung mit relativen Pfaden verwenden, beispielsweise wenn Sie im Verzeichnisbaum eine Ebene nach oben gehen und dann in ein anderes Verzeichnis auf dieser Ebene wechseln möchten.

Diese Methode ermöglicht Ihnen auch, schnell zu einem Verzeichnis zu wechseln, das sich auf derselben Ebene wie das aktuelle Verzeichnis befindet. Sie springen eine Ebene nach oben und dann in ein anderes Verzeichnis.

cd ../gc_help

/ Pfadtrennzeichen

Der Schrägstrich (/), oft einfach als Slash bezeichnet, wird verwendet, um die Verzeichnisse in einem Pfadnamen zu trennen.

ls ~/work/archive

Ein Schrägstrich repräsentiert den kürzestmöglichen Verzeichnispfad. Da alles im Linux-Verzeichnisbaum vom Wurzelverzeichnis ausgeht, können Sie mit diesem Befehl schnell zum Wurzelverzeichnis wechseln:

cd /

# Kommentar oder Textverkürzung

Das Rautenzeichen (#) oder Nummernzeichen wird in der Regel verwendet, um der Shell mitzuteilen, dass es sich bei dem folgenden Text um einen Kommentar handelt und sie diesen ignorieren soll. Es wird häufig in Shell-Skripten verwendet und – weniger häufig – in der Befehlszeile.

# Dies wird von der Bash-Shell ignoriert.

Es wird allerdings nicht vollständig ignoriert, da es Ihrem Befehlsverlauf hinzugefügt wird.

Sie können das Rautenzeichen auch verwenden, um eine String-Variable zu kürzen und Text am Anfang zu entfernen. Der folgende Befehl erstellt eine String-Variable namens „this_string“.

In diesem Beispiel weisen wir der Variablen den Text „Dave Geek!“ zu.

this_string="Dave Geek!"

Dieser Befehl verwendet „echo“, um die Worte „How-To“ im Terminalfenster auszugeben. Er ruft den in der String-Variable gespeicherten Wert mithilfe einer Parametererweiterung ab. Da wir das Rautenzeichen und den Text „Dave“ hinzufügen, wird dieser Teil des Strings vor der Übergabe an „echo“ entfernt.

echo How-To ${this_string#Dave}

Dadurch wird der in der String-Variable gespeicherte Wert nicht verändert, sondern nur das, was an „echo“ gesendet wird. Wir können „echo“ verwenden, um den Wert der String-Variable erneut auszugeben und dies zu überprüfen:

echo $this_string

? Einzelzeichen-Platzhalter

Die Bash-Shell unterstützt drei Platzhalter, von denen einer das Fragezeichen (?) ist. Sie verwenden Platzhalter, um Zeichen in Dateinamenmustern zu ersetzen. Ein Dateiname mit einem Platzhalter bildet ein Muster, das nicht nur zu einem, sondern zu einer Vielzahl von Dateinamen passen kann.

Das Fragezeichen dient als Platzhalter für genau ein einzelnes Zeichen. Betrachten Sie das folgende Dateinamenmuster:

ls badge?.txt

Dies bedeutet übersetzt „alle Dateien anzeigen, deren Name mit ‚badge‘ beginnt, gefolgt von einem einzelnen Zeichen vor der Dateiendung“.

Es passt zu den folgenden Dateien, wobei einige Zahlen und andere Buchstaben nach dem „badge“-Teil des Dateinamens stehen. Der Platzhalter für das Fragezeichen entspricht sowohl Buchstaben als auch Zahlen.

Dieses Dateinamenmuster passt jedoch nicht zu „badge.txt“, da der Dateiname kein einzelnes Zeichen zwischen „badge“ und der Dateiendung enthält. Der Platzhalter für das Fragezeichen muss genau mit einem Zeichen im Dateinamen übereinstimmen.

Sie können das Fragezeichen auch verwenden, um alle Dateien mit einer bestimmten Anzahl von Zeichen im Dateinamen zu finden. Hier werden alle Textdateien aufgelistet, die genau fünf Zeichen im Dateinamen haben:

ls ?????.txt

* Platzhalter für Zeichenketten

Das Sternchen kann als Platzhalter für eine beliebige Zeichenkette verwendet werden, einschließlich einer leeren Zeichenkette. Betrachten Sie das folgende Dateinamenmuster:

ls badge*

Es passt zu „badge.txt“, da der Platzhalter eine beliebige Zeichenfolge oder auch keine Zeichen darstellt.

ls source.*

[] Platzhalter für Zeichengruppen

Wie bereits erwähnt, wird das Fragezeichen für ein einzelnes Zeichen und das Sternchen für eine beliebige Anzahl von Zeichen verwendet (einschließlich keiner). Mit den eckigen Klammern ([]) können Sie eine eigene Gruppe von Zeichen oder Zeichenbereichen definieren. Das entsprechende Zeichen im Dateinamen muss dann mindestens einem der Zeichen in der Gruppe entsprechen.

ls badge_0[246].txt

Es passt zu Dateien, deren Name mit „badge_0“ beginnt, gefolgt von entweder 2, 4 oder 6, und die die Dateiendung „.txt“ haben.

ls badge_[01][789].txt

Dieses Muster passt zu Dateinamen, die mit „badge_“ beginnen, gefolgt von einer 0 oder 1, dann einer 7, 8 oder 9 und enden mit der Dateiendung „.txt“.

ls badge_[23][1-5].txt

Sie können auch Bereiche in der Zeichensatzdefinition verwenden. Der folgende Befehl selektiert Dateien mit den Nummern 21 bis 25 und 31 bis 35 im Dateinamen.

; Befehls-Trennzeichen

ls > count.txt; wc -l count.txt; rm count.txt

Sie können beliebig viele Befehle in die Befehlszeile schreiben, solange Sie sie durch ein Semikolon (;) trennen. Beachten Sie, dass der zweite Befehl auch dann ausgeführt wird, wenn der erste fehlschlägt, und so weiter.

cd ./doesntexist && cp ~/Documents/reports/* .

Wenn Sie verhindern möchten, dass weitere Befehle ausgeführt werden, falls ein Befehl fehlschlägt, verwenden Sie stattdessen ein doppeltes kaufmännisches Und (&&).

& Hintergrundprozess

Wenn Sie einen Befehl in einem Terminalfenster eingeben und er abgeschlossen ist, kehren Sie zur Eingabeaufforderung zurück. Normalerweise dauert dies nur einen Moment. Wenn Sie jedoch eine Anwendung wie beispielsweise „gedit“ starten, ist das Terminalfenster so lange gesperrt, bis Sie die Anwendung schließen.

gedit command_address.page &

Sie können eine Anwendung aber auch im Hintergrund starten und das Terminalfenster weiterhin verwenden. Fügen Sie dazu einfach ein kaufmännisches Und (&) am Ende der Befehlszeile an.

< Eingabeumleitung

Die Bash wird die Prozess-ID des gestarteten Programms anzeigen und dann zur Befehlszeile zurückkehren, sodass Sie das Terminal weiter verwenden können.

sort < words.txt

Viele Linux-Befehle akzeptieren eine Datei als Parameter und beziehen ihre Daten aus dieser Datei. Die meisten dieser Befehle können auch Eingaben aus einem Datenstrom entgegennehmen. Um einen Datenstrom zu erzeugen, verwenden Sie die spitze linke Klammer (<).

Wenn die Eingabe für einen Befehl umgeleitet wird, kann sich dieser anders verhalten, als wenn er aus einer Datei liest.

Wenn wir beispielsweise „wc“ verwenden, um die Wörter, Zeilen und Zeichen in einer Datei zu zählen, werden die Werte und der Dateiname ausgegeben. Wenn wir jedoch den Inhalt der Datei an „wc“ umleiten, gibt „wc“ dieselben numerischen Werte aus, kennt aber den Namen der Datei nicht, aus der die Daten stammen. Es kann den Dateinamen nicht ausgeben.

Hier sind einige Beispiele dafür, wie Sie „wc“ verwenden können:

wc words.txt
wc < words.txt

> Ausgabeumleitung

Sie können die spitze rechte Klammer (>) verwenden, um die Ausgabe eines Befehls umzuleiten, in der Regel in eine Datei. Hier ist ein Beispiel:

ls > files.txt
cat files.txt

Die Ausgabe des Befehls „ls“ wird in die Datei „files.txt“ geschrieben.

wc doesntexist.txt 2> errors.txt
cat errors.txt

Die Ausgabeumleitung kann auch Fehler umleiten, indem Sie eine Zahl (in unserem Beispiel 2) in Verbindung mit > verwenden.

| Pipe

Eine „Pipe“ verknüpft Befehle miteinander. Die Ausgabe eines Befehls wird als Eingabe an den nächsten Befehl weitergeleitet. Die Anzahl der miteinander verknüpften Befehle ist beliebig.

Hier verwenden wir „cat“, um den Inhalt der Datei „words.txt“ an „grep“ weiterzuleiten. „grep“ extrahiert alle Zeilen, die entweder ein kleines oder großes „C“ enthalten. „grep“ übergibt diese Zeilen dann an „sort“. „sort“ verwendet die Option „-r“ (reverse), sodass die sortierten Ergebnisse in umgekehrter Reihenfolge angezeigt werden.

cat words.txt | grep [cC] | sort -r

! Logisches NICHT und Verlauf-Operator

Das Ausrufezeichen (!) ist ein logischer Operator, der „NICHT“ bedeutet.

[ ! -d ./backup ] && mkdir ./backup

In dieser Befehlszeile befinden sich zwei Befehle:

Der erste Befehl ist der Text innerhalb der eckigen Klammern.

Der zweite Befehl ist der Text, der auf das doppelte kaufmännische Und-Zeichen && folgt.

Der erste Befehl verwendet ! als logischen Operator. Die eckigen Klammern deuten darauf hin, dass ein Test durchgeführt wird. Die Option -d (directory) testet, ob ein Verzeichnis namens „backup“ vorhanden ist. Der zweite Befehl erstellt das Verzeichnis.

Da das doppelte kaufmännische Und-Zeichen die beiden Befehle trennt, führt die Bash den zweiten Befehl nur dann aus, wenn der erste erfolgreich ist. Das ist aber das Gegenteil von dem, was wir benötigen. Wenn der Test für das Verzeichnis „backup“ erfolgreich ist, müssen wir es nicht erstellen. Und wenn der Test für das Verzeichnis „backup“ fehlschlägt, wird der zweite Befehl nicht ausgeführt und das fehlende Verzeichnis wird nicht erstellt.

Hier kommt der logische Operator ! ins Spiel. Er fungiert als logisches NICHT. Wenn der Test also erfolgreich ist (d. h. das Verzeichnis existiert), kehrt ! das in „NICHT Erfolg“ um, also in einen Fehler. Der zweite Befehl wird also nicht ausgeführt.

Wenn der Verzeichnistest fehlschlägt (d. h. das Verzeichnis existiert nicht), kehrt ! die Antwort in „NICHT Fehler“ um, was Erfolg bedeutet. Somit wird der Befehl zum Erstellen des fehlenden Verzeichnisses ausgeführt.

So kann das kleine ! eine große Wirkung haben, wenn Sie es benötigen!

ls -l -d backup

Um den Status des Backup-Ordners zu prüfen, verwenden Sie den Befehl „ls“ mit den Optionen -l (lange Liste) und -d (Verzeichnis).

!24

Sie können auch Befehle aus Ihrem Befehlsverlauf mit dem Ausrufezeichen wiederholen. Der Befehl „history“ listet Ihren Befehlsverlauf auf, und dann geben Sie mit ! die Nummer des Befehls an, den Sie wiederholen möchten.

!!

Dies führt den vorherigen Befehl erneut aus.

$ Variable Ausdrücke In der Bash-Shell können Variablen verwendet werden, um Werte zu speichern. Einige, wie zum Beispiel Umgebungsvariablen,

sind immer vorhanden und können verwendet werden, sobald Sie ein Terminalfenster öffnen. Diese beinhalten Werte wie Ihren Benutzernamen, Ihr Home-Verzeichnis und Ihren Pfad.

echo $USER
echo $HOME
echo $PATH

Sie können „echo“ verwenden, um den Wert einer Variablen anzuzeigen. Schreiben Sie einfach ein Dollarzeichen ($) vor den Namen der Variablen.

ThisDistro=Ubuntu
MyNumber=2001
echo $ThisDistro
echo $MyNumber

Um eine Variable zu erstellen, müssen Sie ihr einen Namen und einen Wert geben, den sie speichern soll. Sie müssen das Dollarzeichen nicht verwenden, um eine Variable zu erstellen. Sie fügen es nur hinzu, wenn Sie auf eine Variable verweisen, wie im folgenden Beispiel.

Fügen Sie geschweifte Klammern ({}) um das Dollarzeichen, um eine Parametererweiterung durchzuführen, mit der Sie den Wert der Variablen abrufen und weitere Umwandlungen des Werts durchführen können.

MyString=123456qwerty

Dadurch wird eine Variable mit einer Zeichenfolge erstellt.

echo ${MyString}

Verwenden Sie den folgenden Befehl, um die Zeichenfolge in das Terminalfenster zu senden:

echo ${myString: