Wenn Sie die Bash-Shell unter Linux, macOS oder einem anderen UNIX-ähnlichen System beherrschen möchten, sind Sonderzeichen (wie ~, *, | und >) entscheidend. Wir helfen Ihnen, diese kryptischen Linux-Befehlssequenzen zu entwirren und ein Held der Hieroglyphen zu werden.
Inhaltsverzeichnis
Was sind Sonderzeichen?
Es gibt eine Reihe von Zeichen, die Bash-Shell behandelt auf zwei verschiedene Arten. Wenn Sie sie in der Shell eingeben, fungieren sie als Anweisungen oder Befehle und weisen die Shell an, eine bestimmte Funktion auszuführen. Stellen Sie sie sich als Einzelzeichenbefehle vor.
Manchmal möchten Sie nur ein Zeichen drucken und benötigen es nicht als magisches Symbol. Es gibt eine Möglichkeit, ein Zeichen zu verwenden, um sich selbst und nicht seine spezielle Funktion darzustellen.
Wir zeigen Ihnen, welche Zeichen „Sonder-“ oder „Meta-“ Zeichen sind und wie Sie diese funktional und wörtlich einsetzen können.
~ Home-Verzeichnis
Die Tilde (~) steht für Ihr Home-Verzeichnis. Das bedeutet, dass Sie nicht den vollständigen Pfad zu Ihrem Home-Verzeichnis in Befehlen eingeben müssen. Wo auch immer Sie sich im Dateisystem befinden, können Sie mit diesem Befehl in Ihr Home-Verzeichnis wechseln:
cd ~
Sie können diesen Befehl auch mit relativen Pfaden verwenden. Wenn Sie sich beispielsweise irgendwo im Dateisystem befinden, das sich nicht in Ihrem Home-Ordner befindet, und Sie in das Archivverzeichnis in Ihrem Arbeitsverzeichnis wechseln möchten, verwenden Sie dazu die Tilde:
cd ~/work/archive
. Aktuelles Verzeichnis
Ein Punkt (.) steht für das aktuelle Verzeichnis. Sie sehen es in Verzeichnislisten, wenn Sie die Option -a (all) mit ls verwenden.
ls -a
Sie können den Punkt auch in Befehlen verwenden, um den Pfad zu Ihrem aktuellen Verzeichnis darzustellen. Wenn Sie beispielsweise ein Skript aus dem aktuellen Verzeichnis ausführen möchten, würden Sie es wie folgt aufrufen:
./script.sh
Dies weist Bash an, im aktuellen Verzeichnis nach der Datei script.sh zu suchen. Auf diese Weise werden die Verzeichnisse in Ihrem Pfad nicht nach passenden ausführbaren Dateien oder Skripten durchsucht.
.. Übergeordnetes Verzeichnis
Der doppelte Punkt oder „doppelter Punkt“ (..) stellt das übergeordnete Verzeichnis Ihres aktuellen Verzeichnisses dar. Damit können Sie im Verzeichnisbaum eine Ebene nach oben springen.
cd ..
Sie können diesen Befehl auch mit relativen Pfaden verwenden, beispielsweise wenn Sie im Verzeichnisbaum eine Ebene nach oben gehen und dann auf dieser Ebene ein anderes Verzeichnis eingeben möchten.
Sie können diese Technik auch verwenden, um schnell zu einem Verzeichnis auf derselben Ebene in der Verzeichnisstruktur wie Ihrem aktuellen zu wechseln. Sie hüpfen eine Ebene nach oben und dann eine Ebene zurück in ein anderes Verzeichnis.
cd ../gc_help
/ Pfadverzeichnistrennzeichen
Sie können einen Schrägstrich (/) – oft auch nur Schrägstrich genannt – verwenden, um die Verzeichnisse in einem Pfadnamen zu trennen.
ls ~/work/archive
Ein Schrägstrich repräsentiert den kürzesten möglichen Verzeichnispfad. Da alles im Linux-Verzeichnisbaum im Stammverzeichnis beginnt, können Sie mit diesem Befehl schnell zum Stammverzeichnis wechseln:
cd /
# Kommentar- oder Trim-Strings
Meistens verwenden Sie das Raute- oder Nummernzeichen (#), um der Shell mitzuteilen, dass es sich bei dem folgenden um einen Kommentar handelt und sie nicht darauf reagieren soll. Sie können es in Shell-Skripten und – weniger nützlich – in der Befehlszeile verwenden.
# This will be ignored by the Bash shell
Es wird jedoch nicht wirklich ignoriert, da es Ihrem Befehlsverlauf hinzugefügt wird.
Sie können den Hash auch verwenden, um eine String-Variable zu trimmen und etwas Text am Anfang zu entfernen. Dieser Befehl erstellt eine String-Variable namens this_string.
In diesem Beispiel weisen wir den Text „Dave Geek!“ zu. zur Variablen.
this_string="Dave Geek!"
Dieser Befehl verwendet echo, um die Worte „How-To“ im Terminalfenster auszugeben. Es ruft den in der String-Variablen gespeicherten Wert über a . ab Parametererweiterung. Da wir den Hash und den Text „Dave“ anhängen, wird dieser Teil des Strings abgeschnitten, bevor er an echo übergeben wird.
echo How-To ${this_string#Dave}
Dadurch wird der in der String-Variablen gespeicherte Wert nicht geändert; es wirkt sich nur auf das aus, was an echo gesendet wird. Wir können echo verwenden, um den Wert der String-Variablen noch einmal 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 Dateinamenvorlagen zu ersetzen. Ein Dateiname, der einen Platzhalter enthält, bildet eine Vorlage, die nicht nur einem, sondern einem Bereich von Dateinamen entspricht.
Der Fragezeichen-Platzhalter steht für genau ein Zeichen. Betrachten Sie die folgende Dateinamenvorlage:
ls badge?.txt
Dies bedeutet übersetzt „alle Dateien auflisten, deren Name mit ‚badge‘ beginnt und von einem einzelnen Zeichen vor der Dateinamenerweiterung gefolgt wird“.
Es stimmt mit den folgenden Dateien überein. Beachten Sie, dass einige Zahlen und andere Buchstaben nach dem „Badge“-Teil des Dateinamens haben. Der Platzhalter für das Fragezeichen entspricht sowohl Buchstaben als auch Zahlen.
Diese Dateinamenvorlage stimmt jedoch nicht mit „badge.txt“ überein, da der Dateiname kein einziges Zeichen zwischen „badge“ und der Dateierweiterung enthält. Der Platzhalter für das Fragezeichen muss mit einem entsprechenden Zeichen im Dateinamen übereinstimmen.
Sie können auch das Fragezeichen 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 enthalten:
ls ?????.txt
* Platzhalter für Zeichenfolgen
Sie können das Sternchen verwenden
ls badge*
Platzhalter für eine beliebige Zeichenfolge, auch keine Zeichen. Betrachten Sie die folgende Dateinamenvorlage:
Ein
Es stimmt mit „badge.txt“ überein, da der Platzhalter eine beliebige Zeichenfolge oder keine Zeichen darstellt.
ls source.*
[] Ein
Zeichensatz-Platzhalter
Wie oben beschrieben, verwenden Sie das Fragezeichen, um ein einzelnes Zeichen darzustellen, und das Sternchen, um eine beliebige Folge von Zeichen (einschließlich keiner Zeichen) darzustellen. [] Mit den eckigen Klammern (
) und die darin enthaltenen Zeichen. Das entsprechende Zeichen im Dateinamen muss dann mit mindestens einem der Zeichen im Wildcard-Zeichensatz übereinstimmen.
ls badge_0[246].txt
Ein
ls badge_[01][789].txt
Ein
ls badge_[23][1-5].txt
Ein
; Shell-Befehlstrennzeichen
ls > count.txt; wc -l count.txt; rm count.txt
Ein
count.txt; wc -l count.txt; rm count.txt“ Befehl in einem Terminalfenster‘ width=“646″ height=“122″ onload=“pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);“ onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>
Beachten Sie, dass der zweite Befehl auch dann ausgeführt wird, wenn der erste fehlschlägt, der dritte ausgeführt wird, selbst wenn der zweite fehlschlägt, und so weiter.
cd ./doesntexist && cp ~/Documents/reports/* .
EIN
& Hintergrundprozess
Nachdem Sie einen Befehl in ein Terminalfenster eingegeben und abgeschlossen haben, kehren Sie zur Eingabeaufforderung zurück. Normalerweise dauert dies nur ein oder zwei Augenblicke. Wenn Sie jedoch eine andere Anwendung starten, z. B. gedit, können Sie Ihr Terminalfenster erst verwenden, wenn Sie die Anwendung schließen.
gedit command_address.page &
EIN
Bash zeigt Ihnen die Prozess-ID dessen an, was gestartet wurde, und führt Sie dann zur Befehlszeile zurück. Anschließend können Sie Ihr Terminalfenster weiter verwenden.
sortWhen a command has input redirected into it, it might behave differently than when it reads from a named file.
If we use wc to count the words, lines, and characters in a file, it prints the values, and then the filename. If we redirect the contents of the file to wc, it prints the same numeric values but doesn’t know the name of the file from which the data came. It cannot print a filename.
Here are some examples of how you can use wc:
wc words.txtwc> Output Redirection
You can use the right-angle bracket ( > ) to redirect the output from a command (typically, into a file); here’s an example:
ls > files.txtcat files.txtEin
files.txt"-Befehl in einem Terminalfenster." width="646" height="382" >
wc doesntexist.txt 2> errors.txtcat errors.txtEIN
Fehler.txt" Befehl in einem Terminalfenster." width="646" height="122" >
| Rohr
Eine „Pipe“ verkettet Befehle aneinander. Es nimmt die Ausgabe von einem Befehl und leitet sie als Eingabe an den nächsten weiter. Die Anzahl der weitergeleiteten Befehle (die Länge der Kette) ist willkürlich.
Hier verwenden wir cat, um den Inhalt der Datei words.txt in grep einzugeben, das jede Zeile extrahiert, die entweder ein Klein- oder Großbuchstabe „C“ enthält. grep übergibt diese Zeilen dann an die Sortierung. sort verwendet die Option -r (umgekehrt), sodass die sortierten Ergebnisse in umgekehrter Reihenfolge angezeigt werden.
cat words.txt | grep [cC] | sort -rEIN
! Pipeline logisches NOT und Verlaufsoperator
Das Ausrufezeichen (!) ist ein logischer Operator, der NICHT bedeutet.
[ ! -d ./backup ] && mkdir ./backupEs gibt zwei Befehle in dieser Befehlszeile:
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 logischer Operator. Die eckigen Klammern zeigen an, dass ein Test durchgeführt wird. Die Option -d (Verzeichnis) testet, ob ein Verzeichnis namens backup vorhanden ist. Der zweite Befehl erstellt das Verzeichnis.
Da doppelte kaufmännische Und-Zeichen die beiden Befehle trennen, führt Bash den zweiten nur aus, wenn der erste erfolgreich ist. Das ist jedoch das Gegenteil von dem, was wir brauchen. 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 setzt der logische Operator ! kommt herein. Es fungiert als logisches NICHT. Wenn der Test also erfolgreich ist (dh das Verzeichnis existiert), wird das ! dreht das auf "NICHT Erfolg" um, was Misserfolg ist. Der zweite Befehl ist also nicht aktiviert.
Wenn der Verzeichnistest fehlschlägt (dh das Verzeichnis existiert nicht), wird die ! ändert die Antwort auf „NICHT Versagen“, was Erfolg ist. Der Befehl zum Erstellen des fehlenden Verzeichnisses wird also ausgeführt.
So wenig! packt viel Punch, wenn Sie es brauchen!
ls -l -d backupEIN
!24EIN
!!Folgendes führt den vorherigen Befehl erneut aus:
$ Variable Ausdrücke In der Bash-Shell erstellen Sie Variablen zum Speichern von Werten. Einige wie Umgebungsvariablen,
immer vorhanden, und Sie können jederzeit darauf zugreifen, wenn Sie ein Terminalfenster öffnen. Diese enthalten Werte wie Ihren Benutzernamen, Ihr Home-Verzeichnis und Ihren Pfad.
echo $USERecho $HOMEecho $PATHEin
ThisDistro=UbuntuMyNumber=2001echo $ThisDistroecho $MyNumberEin
Fügen Sie geschweifte Klammern ( {} ) um das Dollarzeichen hinzu und führen Sie eine Parametererweiterung durch, um den Wert der Variablen zu erhalten und weitere Transformationen des Werts zu ermöglichen.
MyString=123456qwertyDadurch wird eine Variable erstellt, die eine Zeichenfolge enthält, wie unten gezeigt:
echo ${MyString}Verwenden Sie den folgenden Befehl, um die Zeichenfolge an das Terminalfenster zu senden:
echo ${myString:6}Um die Teilzeichenfolge ab Position 6 der gesamten Zeichenfolge zurückzugeben, verwenden Sie den folgenden Befehl (es gibt einen Null-Offset, also ist die erste Position Null):
echo ${myString:0:6}Wenn Sie eine Teilzeichenfolge zurückgeben möchten, die bei Position Null beginnt und die nächsten sechs Zeichen enthält, verwenden Sie den folgenden Befehl:
echo ${myString:4:4}EIN
Zitieren von Sonderzeichen
Wenn Sie ein Sonderzeichen als wörtliches (nicht spezielles) Zeichen verwenden möchten, müssen Sie dies der Bash-Shell mitteilen. Dies wird als Zitieren bezeichnet und es gibt drei Möglichkeiten, dies zu tun.
Wenn Sie den Text in Anführungszeichen ("…") einschließen, verhindert dies, dass Bash auf die meisten Sonderzeichen reagiert, und sie werden einfach gedruckt. Eine bemerkenswerte Ausnahme ist jedoch das Dollarzeichen ($). Es fungiert weiterhin als Zeichen für variable Ausdrücke, sodass Sie die Werte von Variablen in Ihre Ausgabe einschließen können.
echo "Today is $(date)"Dieser Befehl gibt beispielsweise Datum und Uhrzeit aus:
echo 'Today is $(date)'Wenn Sie den Text wie unten gezeigt in einfache Anführungszeichen ('…') setzen, wird die Funktion aller Sonderzeichen beendet:
echo "Today is $(date)"Sie können einen umgekehrten Schrägstrich ( ) verwenden, um zu verhindern, dass das folgende Zeichen als Sonderzeichen fungiert. Dies wird als „Entkommen“ des Charakters bezeichnet; siehe das Beispiel unten:
Stellen Sie sich Sonderzeichen nur als sehr kurze Befehle vor. Wenn Sie sich ihre Verwendung merken, kann dies Ihrem Verständnis der Bash-Shell – und der Skripte anderer Leute – enorm förderlich sein.