Wenn Sie viel Zeit auf der Befehlszeile verbringen, könnte das Anzeigen des Verlaufs der zuvor ausgeführten Befehle eine nützliche Funktion sein, die Ihre tägliche Arbeit erleichtern und Ihre Produktivität steigern kann.
In diesem Artikel sprechen wir über die history
Befehl, mit dem Sie eine Liste zuvor ausgeführter Befehle anzeigen, die Liste durchsuchen und die Verlaufsdatei bearbeiten können.
Verwendung des history
Befehls- und Verlaufserweiterungen #
history
ist eine eingebaute Shell, und ihr Verhalten kann sich von Shell zu Shell leicht unterscheiden. Wir werden die in Bash integrierte Version von history
behandeln .
In seiner einfachsten Form, wenn es ohne Option oder Argument aufgerufen wird, der history
Befehl zeigt die gesamte Verlaufsliste mit Zeilennummern an.
history
...
467 git push
468 tail -f var/logs/error
469 nano +22,5 functions.sh
470 source project-env/bin/activate
471 history
Geben Sie !n
ein führt den n-ten Befehl aus der Verlaufsliste aus, und !-n
der Befehl n Zeilen zurück. Im folgenden Beispiel führen wir den Befehl in Zeile 467
aus :
!467
Eine andere Möglichkeit, einen Befehl auszuführen, ist die Verwendung von !word
Erweiterung. word
bezieht sich auf den letzten Befehl, der mit „Wort“ beginnt.
Typischerweise history
zeigt viele Ausgabezeilen an, die nicht auf den Bildschirm passen. Um die Ausgabe seitenweise anzuzeigen, leiten Sie sie an ein Pager-Programm wie more
weiter oder less
Befehl:
history | less
Anzeige der letzten n
übergeben Sie die Zahl als Argument an den Befehl. Um beispielsweise nur die letzten fünf Zeilen der Verlaufsliste anzuzeigen, würden Sie Folgendes eingeben:
history -5
Verwenden Sie die up
und down
Pfeiltasten, um durch die Einträge in der Liste zu navigieren. Wenn der gesuchte Befehl angezeigt wird, drücken Sie Enter
um es auszuführen.
Geben Sie !!
ein um den vorherigen Befehl auszuführen:
!!
Dies ist besonders nützlich, wenn Sie vergessen, einen Befehl mit sudo
auszuführen , und anstatt den Befehl erneut einzugeben, können Sie Folgendes eingeben:
sudo !!
!-1
ist dasselbe wie !!
und führt den letzten Befehl aus der Verlaufsliste aus, !-2
vorletzte und so weiter.
^word1^word2^
Mit der Erweiterung können Sie den letzten Befehl erneut ausführen und dabei „Wort1“ durch „Wort2“ ersetzen. Wenn Sie versehentlich sduo command
eingegeben haben statt sudo command
Sie können den Befehl mit dem richtigen Wort wiederholen mit:
^sduo^sudo^
Verwenden Sie das grep
Befehl zum Filtern der Ausgabe. Um beispielsweise alle Befehle einschließlich „nano“ anzuzeigen, würden Sie Folgendes ausführen:
history | grep nano
302 sudo nano /etc/resolv.conf
356 nano setup.py
413 sudo nano /etc/hosts
469 nano +22,5 functions.sh
Wenn Sie nun die nano setup.py
erneut ausführen möchten Geben Sie einfach Folgendes ein:
!356
Eine andere Möglichkeit, den Befehlsverlauf zu durchsuchen, ist das Drücken von Ctrl-R
. Die Eingabeaufforderung ändert sich wie folgt und Sie können mit der Suche nach einem zuvor ausgeführten Befehl beginnen.
(reverse-i-search)`':
Die Shell zeigt eine passende Linie an. Um zum nächsten übereinstimmenden Vorschlag zu wechseln, drücken Sie Ctrl-R
nochmal.
Weitere Informationen zu Verlaufserweiterung, Modifikatoren und Bezeichnern finden Sie im Bash-Handbuch.
Speichern der Verlaufsliste #
Standardmäßig liest Bash beim Starten einer neuen Sitzung die Verlaufsliste aus .bash_history
Datei . Die Liste der in der aktuellen Sitzung ausgeführten Befehle wird im Speicher gehalten und beim Schließen der Sitzung in der Datei gespeichert.
Wenn Sie mehrere Shell-Sitzungen geöffnet haben, wird nur der Verlauf der zuletzt geschlossenen Sitzung gespeichert.
Das -a
Mit der Option können Sie die aktuelle Sitzungsverlaufsliste in .bash_history
speichern Datei:
history -a
Das -w
Option schreibt die komplette Verlaufsliste in die Verlaufsdatei.
history -w
Verlauf löschen #
Der history
Mit dem Befehl können Sie die gesamte Verlaufsliste löschen oder bestimmte Teile entfernen.
Um die Verlaufsliste zu löschen, verwenden Sie -c
Möglichkeit:
history -c
Um eine bestimmte Zeile oder Zeilen zwischen einer Start- und Endposition aus der Verlaufsliste zu löschen, verwenden Sie -d
Option.
Um beispielsweise die Zeilen zwischen 365 und 375 (einschließlich dieser Zeilen) zu entfernen, würden Sie Folgendes eingeben:
history -d 365 375
Wenn Sie nur eine Zahl für das -d
angeben Option entfernt der Befehl die angegebene Zeile.
Wenn eine negative Ganzzahl verwendet wird, werden die Zeilen vom Ende der Verlaufsliste zurückgezählt.
Die obigen Befehle löschen die Verlaufsliste, die im Speicher gehalten wird, entfernen jedoch keine Einträge aus der .bash_history
Datei auf der Festplatte. Um die Datei zu löschen, müssen Sie die Verlaufsliste in die Datei schreiben:
history -c
history -w
Verlaufsverhalten ändern #
Das Verhalten des Bash-Verlaufs kann mit mehreren verschiedenen Umgebungsvariablen definiert werden. Legen Sie beim Ändern des Verlaufsverhaltens die Variablen in ~/.bashrc
fest oder jede andere Konfigurationsdatei, die geladen wird, wenn sich der Benutzer anmeldet.
Standardmäßig behält Bash 500 Zeilen in der Befehlsverlaufsliste. Die HISTSIZE
Mit der Variable können Sie diesen Wert ändern. Um ihn auf 10000 zu setzen, fügen Sie die folgende Zeile zu Ihrer .bashrc
hinzu Datei:
HISTSIZE=10000
Die HISTCONTROL
Die Variable akzeptiert eine durch Doppelpunkte getrennte Liste von Werten, die definieren, wie die Befehle in der Verlaufsliste gespeichert werden:
ignorespace
- Befehle, die mit Leerzeichen beginnen, werden nicht in der Verlaufsliste gespeichert.ignoredups
- Doppelte Befehle werden nicht gespeichert.ignoreboth
- ist eine Abkürzung, die sowohlignorespace
enthält undignoredups
.
HISTCONTROL=ignoreboth
Wenn das HISTTIMEFORMAT
Variable gesetzt ist, stellt Bash in jeder Zeile einen Ausführungszeitstempel für den Befehl voran.
Wenn Sie beispielsweise Folgendes festlegen:
HISTTIMEFORMAT="%F %T: "
Der Verlauf wird im folgenden Format angezeigt:
413 2019-10-27 21:13:07: sudo nano /etc/hosts
Schlussfolgerung #
Der history
Befehl zeigt eine Liste der zuvor ausgeführten Befehle an. Beispielsweise können Sie den Verlauf verwenden, um einen langen Befehl anzuzeigen, den Sie zuvor verwendet haben und an den Sie sich nicht mehr erinnern können.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.