Linux / Befehl / history / Befehl, um eine Liste zuvor ausgeführter Befehle anzuzeigen
In Linux zeigt der history-Befehl in Bash den von der aktuellen Shell verwalteten Befehlsverlauf zusammen mit Zahlen an. Sie können den Verlauf überprüfen, um frühere Befehle zu finden oder erneut auszuführen, und der Umfang und das Speichern des Verlaufs hängen von den Shell-Einstellungen ab.
Befehlshistorie überprüfen
Geben Sie den folgenden Befehl in einem interaktiven Bash-Terminal ein. history ist ein integrierter Bash-Befehl, der die Verlaufsliste der aktuellen Shell ausgibt.
history
Die Ausgabe zeigt die Nummer und den Befehl jedes Eintrags. Zum Beispiel bedeutet eine Zeile, die 42 pwd anzeigt, dass der Eintrag Nummer 42 in der Shell-Historie pwd ist. Die Zahlen und Inhalte variieren je nach Konto, Sitzung und Verlaufseinstellungen, daher sollten die Beispielzahlen nicht direkt verwendet werden. Der von Ihnen eingegebene Befehl wird aufgezeichnet, nicht das Ergebnis der Ausführung.
Um nur die letzten Einträge anzuzeigen, geben Sie eine Zahl an. Der folgende Befehl zeigt die letzten 10 Einträge in der Historie an.
history 10
Dieser history 10 Befehl selbst kann in die Liste aufgenommen werden. Falls der gewünschte Befehl nicht erscheint, prüfen Sie die Verlaufsfunktion, die Speicherkapazität und die Ausschlüsseinstellungen.
Befehle suchen und erneut ausführen
Im standardmäßigen interaktiven Eingabemodus von Bash können Sie durch Drücken der Pfeiltaste nach oben frühere Einträge aufrufen und bearbeiten. Drücken Sie Ctrl+R und geben Sie einen Suchbegriff ein, um den Verlauf rückwärts zu durchsuchen. Sie können den gefundenen Befehl überprüfen und ihn dann ausführen oder ändern.
In interaktivem Bash mit aktivierter Historienerweiterung wird !! auf den vorherigen Historieneintrag erweitert. !n bezieht sich auf das Element mit der Nummer n in der Liste. Zum Beispiel führt der folgende Befehl das Element aus, wenn die Nummer 42 in der aktuellen Liste vorhanden ist.
!42
Stellen Sie zuerst sicher, dass die Nummer mit der tatsächlichen Historie übereinstimmt. Die Historienerweiterung wird normalerweise sofort nach der Eingabe ausgeführt, seien Sie also besonders vorsichtig bei Befehlen wie Dateilöschung oder Konfigurationsänderungen. In nicht-interaktiven Shells ist die Historienerweiterung normalerweise standardmäßig deaktiviert, und das Verhalten kann in anderen Shells unterschiedlich sein.
Um nur das Erweiterungsergebnis des vorherigen Eintrags ohne dessen Ausführung zu sehen, setzen Sie es in einfache Anführungszeichen und geben Sie es wie folgt ein. Der auf dem Bildschirm angezeigte Befehl wird nicht ausgeführt.
history -p '!!'
Wenn Sie shopt -s histverify festlegen, wird der erweiterte Befehl in der Bearbeitungszeile in einem interaktiven Bash mit Readline angezeigt, sodass Sie ihn vor der Ausführung überprüfen können. Um die Einstellungen in der aktuellen Shell zurückzusetzen, verwenden Sie shopt -u histverify. Weitere Details finden Sie in der Bash-Historienerweiterungsdokumentation.
Wo und wann die Historie gespeichert wird
Bash verwaltet die Historie als Liste im Speicher und liest die Historie beim Start aus der Datei, die durch HISTFILE angegeben ist. Die typische Standarddatei ist ~/.bash_history, kann jedoch je nach Umgebung oder POSIX-Modus variieren. Sie können die aktuellen Einstellungen mit folgendem Befehl überprüfen.
printf '%s\n' "$HISTFILE"
Wenn eine Shell mit aktivem Verlauf beendet wird, wird dieser in einer Datei gespeichert, aber wenn die Datei nicht beschreibbar ist, HISTFILE nicht gesetzt ist oder leer ist, wird sie nicht gespeichert. Mehrere Terminals haben jeweils separate Speicherverläufe, sodass in einem ausgeführte Befehle möglicherweise nicht sofort in einem anderen erscheinen. Je nach der histappend-Option wird der Verlauf beim Beenden an die Datei angehängt oder die Datei überschrieben, und das Ergebnis variiert je nach Einstellungen und gleichzeitigen Sitzungen.
history -a hängt neue Einträge, die in der aktuellen Sitzung noch nicht hinzugefügt wurden, an die Verlaufsdatei an. Andererseits überschreibt history -w die Verlaufsdatei mit der aktuellen Liste, was zum Verlust von Verlaufseinträgen aus anderen Sitzungen führen kann. Wenn Sie mehrere Terminals verwenden, überprüfen Sie diesen Unterschied vor der Verwendung. Das Speicherverhalten ist in der Bash-Historie Funktionsdokumentation zu finden.
Überprüfen Sie die Verlaufslänge und Ausschlusseinstellungen
HISTSIZE steuert die Anzahl der Verlaufs-Einträge im Speicher, während HISTFILESIZE die maximale Anzahl der Zeilen in der Verlaufsdatei steuert. Mehrzeilige Einträge sind Ausnahmen von der Zeilenanzahl in der Datei. Die aktuellen Werte können wie folgt überprüft werden.
printf 'HISTSIZE=%s\nHISTFILESIZE=%s\nHISTCONTROL=%s\nHISTIGNORE=%s\n' "$HISTSIZE" "$HISTFILESIZE" "$HISTCONTROL" "$HISTIGNORE"
HISTCONTROL und HISTIGNORE können bestimmen, welche Eingaben aus der Historie ausgeschlossen werden sollen. Zum Beispiel, wenn HISTCONTROL ignorespace enthält, können Eingaben, die mit einem Leerzeichen beginnen, aus der Historienliste ausgeschlossen werden. Dies ist nur eine Einstellung im Zusammenhang mit der Shell-Historie und löscht nicht die Historie, die in anderen Protokollen oder Programmen gespeichert ist.
Löschen von Historie und sensiblen Informationen
history -d n löscht das Element Nummer n aus der Historienliste der aktuellen Shell. Überprüfen Sie zunächst die tatsächliche Nummer mit history. history -c löscht die gesamte aktuelle Liste, daher sollte dies mit Vorsicht verwendet werden. Diese beiden Befehle löschen nicht automatisch die bereits gespeicherte Verlaufsdatei oder die Listen anderer Shells.
Vermeiden Sie es, Passwörter oder Tokens direkt in der Befehlszeile einzugeben, da sie möglicherweise in der Historie oder anderswo gespeichert bleiben. Wenn geheime Informationen bereits offengelegt wurden, gehen Sie nicht davon aus, dass das einfache Löschen der Historie das Problem löst; ersetzen Sie stattdessen die Zugangsdaten und überprüfen Sie den Umfang der betreffenden Offenlegung.




