Bash hat eine reiche Geschichte. Das heißt, es ist eine alte Shell mit einem noch älteren Vorfahren (der Bourne-Shell), aber sie hat auch eine großartige history
Befehl, der alle anderen Shell-History-Schnittstellen aufgrund seiner Anzahl von Funktionen übertrifft. Die Bash-Version von history
ermöglicht umgekehrte Suchen, schnelles Abrufen, Umschreiben des Verlaufs und mehr.
Der history
Befehl ist nicht wie viele andere Befehle. Möglicherweise sind Sie daran gewöhnt, dass Befehle ausführbare Dateien sind, die an gemeinsamen Speicherorten auf Systemebene wie /usr/bin
abgelegt werden , /usr/local/bin
, oder ~/bin
. Der eingebaute history
Befehl befindet sich nicht in Ihrem PATH
und hat keinen physischen Standort:
$ which history
which: no history in [PATH]
Stattdessen history
ist eine eingebaute Funktion der Shell selbst:
$ type history
history is a shell builtin
$ help history
history: history [-c] [-d offset] [n] or
history -anrw [filename] or
history -ps arg [arg...]
Display or manipulate the history list.
[...]
Aus diesem Grund ist die Verlaufsfunktion in jeder Shell einzigartig, sodass das, was Sie in Bash verwenden, möglicherweise nicht in Tcsh, Fish oder Dash funktioniert, und was Sie in diesen verwenden, funktioniert möglicherweise nicht in Bash. In einigen Fällen kann das Wissen, was Bash kann, Benutzer anderer Shells dazu inspirieren, interessante Hacks zu erstellen, um das Bash-Verhalten zu klonen, und es kann Bash-Funktionen freischalten, von denen Sie nie wussten, dass sie existieren.
Sehen Sie sich Ihren Bash-Verlauf an
Die grundlegendste und häufigste Verwendung des history
Befehl ist, einen Verlauf Ihrer Shell-Sitzung anzuzeigen:
$ echo "hello"
hello
$ echo "world"
world
$ history
1 echo "hello"
2 echo "world"
3 history
Ereignisbezeichner
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
Ereignisbezeichner durchsuchen Ihren Verlauf nach Ereignis. Ein Ereignis in diesem Zusammenhang handelt es sich um einen in Ihrem Verlauf protokollierten Befehl, der durch ein Zeilenumbruchzeichen gekennzeichnet ist. Mit anderen Worten, es ist eine Zeile, die durch eine Indexnummer als Referenz gekennzeichnet ist.
Ereignisbezeichner beginnen meistens mit einem Ausrufezeichen, manchmal auch als Knall bezeichnet (!
).
Um einen Befehl aus Ihrem Verlauf erneut auszuführen, verwenden Sie das Ausrufezeichen, unmittelbar gefolgt (ohne Leerzeichen) von der Indexnummer des gewünschten Befehls. Angenommen, Zeile 1 enthält den Befehl echo "hello"
, und Sie möchten es erneut ausführen:
$ !1
echo "hello"
hello
Sie können die relative Positionierung verwenden, indem Sie eine negative Anzahl von Zeilen zurück von Ihrer aktuellen Position im Verlauf angeben. Zum Beispiel, um drei Einträge im Verlauf zurückzugehen:
$ echo "foo"
foo
$ echo "bar"
bar
$ echo "baz"
baz
$ !-3
echo "foo"
foo
Wenn Sie nur eine Zeile zurück gehen, können Sie die Abkürzung !!
verwenden statt !-1
. Das ist eine Einsparung von einem ganzen Tastendruck!
$ echo "foo"
$ !!
echo "foo"
foo
Zeichenkettensuche
Sie können auch nach einer bestimmten Zeichenfolge durch die Einträge suchen, umgekehrt, um einen Befehl auszuführen. So suchen Sie nach einem Befehl beginnend Verwenden Sie bei einer bestimmten Zeichenfolge ein Ausrufezeichen, unmittelbar gefolgt (ohne Leerzeichen) von der Zeichenfolge, nach der Sie suchen möchten:
$ echo "foo"
$ true
$ false
$ !echo
echo "foo"
foo
Sie können auch nach einem Befehl suchen, der an beliebiger Stelle (nicht nur am Anfang) eine Zeichenkette enthält. Verwenden Sie dazu !
plus die Zeichenfolge, nach der Sie suchen, wie üblich, aber umgeben Sie die Zeichenfolge mit Fragezeichen an beiden Enden. Sie können das abschließende Fragezeichen weglassen, wenn Sie wissen, dass auf die Zeichenfolge unmittelbar ein Zeilenumbruchzeichen folgt (was bedeutet, dass Sie das letzte Zeichen eingegeben haben, bevor Sie Return gedrückt haben ):
$ echo "foo"
$ true
$ false
$ !?foo?
echo "foo"
foo
String-Ersetzung
Ähnlich wie bei der Suche nach Zeichenfolgen am Anfang einer Zeile können Sie nach einer Zeichenfolge suchen und diese durch eine neue Zeichenfolge ersetzen, indem Sie den Befehl ändern:
$ echo "hello"
hello
$ echo "world"
world
$ ^hello^foo
echo "foo"
foo
Verlauf nützlich machen
In Bash kann der History-Befehl viel mehr als das, was hier behandelt wurde, aber dies ist ein guter Anfang, um sich an die Verwendung zu gewöhnen Ihre Geschichte, anstatt sie nur als Referenz zu behandeln. Verwenden Sie den history
Befehle oft und sehen Sie, wie viel Sie tun können, ohne Befehle eingeben zu müssen. Lassen Sie sich überraschen!