Wie finde ich den Verlauf der Shell-Befehle seit der Erstellung der Maschine?

23

Ich habe vor ein paar Wochen eine Ubuntu Virtualbox-Maschine erstellt und arbeite seitdem immer wieder an Projekten.

Jetzt möchte ich die Syntax einiger Befehle finden, die ich vor einer Woche im Terminal eingegeben habe, aber ich habe das Terminalfenster mehrmals geöffnet und geschlossen und den Computer neu gestartet.

Wie kann ich den historyBefehl aufrufen, um zum ersten Befehl zurückzukehren, den ich nach dem Erstellen des Computers eingegeben habe?
Oder gibt es einen anderen Ort, an dem alle Befehle in Ubuntu gespeichert sind?

Edward Tanguay
quelle
2
Soweit ich weiß, kannst du nicht. Sie können nur so weit zurückgehen, wie der Verlaufspuffer gesetzt wurde. Wenn Sie sich fragen, welches Paket Sie installieren könnten, um den Befehlsverlauf in Zukunft auf unbestimmte Zeit zu speichern, sollten Sie Ihre Frage möglicherweise überarbeiten.
RobotHumans

Antworten:

26

Möglicherweise können nicht alle Befehle abgerufen werden. Dies hängt davon ab, wie viele Befehle Sie ausgeführt haben und wie das Protokolllimit festgelegt wurde.

Sie können jedoch sehen, dass die Verlaufsliste hier gespeichert ist

/home/<YOUR_USERNAME>/.bash_history

Verwandte Frage (für den Umgang mit mehreren Shell-Verlauf):

Ist es möglich, direkt an .bash_history zu schreiben?

Wir sind
quelle
3
Es ist nicht wahr, dass der Verlauf nur von einem Terminal / einer Shell gespeichert wird. Wenn Sie ausführen history, wird der Verlauf der aktuellen Shell als der aktuellste und der Verlauf aller anderen Shells (einschließlich der Shells in früheren Sitzungen, einschließlich über mehrere Aus- und Einschaltzyklen hinweg) davor angezeigt. Alle Shell - Instanzen speichern ihre Geschichte zu , .bash_historywenn der Ausgang. Keine Instanz speichert es dort automatisch vor diesem Zeitpunkt.
Eliah Kagan
6

Standardmäßig gibt es keinen Ort, an dem alle Befehle aufgezeichnet und auf unbestimmte Zeit aufbewahrt werden, obwohl sie ~/.bash_historydie letzten paar Befehle enthalten (wenn Sie dies verwenden bash, ist dies die Standard-Shell in Ubuntu).

Wenn Sie möchten, dass jeder Befehl bashfür immer aufgezeichnet wird , müssen Sie ihn selbst einrichten. Sie können beispielsweise Folgendes in Ihre ~/.bashrcDatei einfügen, um alle in einer bashShell eingegebenen Befehle in der Datei zu protokollieren ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

Das Obige setzt einen Trap an DEBUG, der ausgeführt wird, kurz bevor ein gewöhnlicher Befehl ausgeführt wird. Die callereingebaute Funktion wird verwendet, um zu testen, ob der Befehl in einer interaktiven Shell eingegeben oder über so etwas ausgeführt wird ~/.bashrc. Der Wert ${BASH_COMMAND}enthält den Befehl, der gerade ausgeführt wird.

Richard Hansen
quelle
Ich möchte darauf hinweisen, dass diese Technik unter macOS auch update_terminal_cwddie Verlaufsdatei protokolliert. Dies ist ein Befehl, den der Benutzer nicht ausführt, der jedoch automatisch ausgeführt wird.
Ashish Ahuja
5

Was Sie auch interessieren könnte, ist die Suche in Ihrem vorherigen Befehlsverlauf. Sie können Ihren Verlauf in der Befehlszeile umkehren, indem Sie drücken Ctrl+rund dann die Buchstaben eingeben, die Sie abgleichen möchten. Wenn Sie mehr als einen passenden Befehl haben, drücken Sie Ctrl+rerneut. Um die Rückwärtssuche zu beenden, drücken Sie Ctrl+g.

http://www.ice2o.com/bash_quick_ref.html

Sepero
quelle
4

Sie können nur so weit zurückgehen, wie Ihr Verlaufslimit festgelegt ist. Sobald dieser Punkt erreicht ist, wird der Verlauf überschrieben. Es ist jedoch möglich, eine größere Historie für die Zukunft zu haben. Fügen Sie dies in Ihre .bashrc-Datei ein und geben Sie einen Wert an (meine ist auf 1000 eingestellt):

export HISTSIZE=1000

quelle