Dies ist etwas, das ich schon sehr lange wissen wollte, aber nie dazu gebracht habe, tatsächlich eine Frage zu stellen.
Ich weiß, dass in dem Terminal, das in Linux-Distributionen bereitgestellt wird, der gesamte Befehlsverlauf mithilfe der Pfeiltasten angezeigt werden kann (wenn es eine andere Methode gibt, ist mir dies nicht bekannt). Wie geschieht dies?
Gibt es einen Ort, an dem das Terminal alle Tastenanschläge protokolliert? Ist es eine Art Puffer? Aber wenn es ein Puffer wäre, würde er nach einer Weile gelöscht werden, nicht wahr?
Wie funktioniert dieses System?
command-line
gnome-terminal
Projjol
quelle
quelle
history
Befehl, sondern wie dieses ganze System zum Speichern alter Befehle funktioniert.Antworten:
Dies ist der Befehlsverlauf und eher eine Funktion der Shell als des Terminals.
Unter Ubuntu (und vielen, wenn nicht den meisten anderen Linux-Distributionen) ist die Standard-Shell für die interaktive Verwendung Bash (
/bin/bash
). Bash speichert Ihren Verlauf, dh eine Liste der letzten Befehle unter~/.bash_history
. Wenn Sie eine Shell öffnen (normalerweise durch Öffnen eines Terminals), wird diese Datei gelesen und in den internen Verlauf dieser Shell geladen. Sobald Sie die Shell schließen, werden die Änderungen in die Datei zurückgeschrieben. Standardmäßig ist dies auf die letzten 500 Befehle beschränkt.Es gibt einige Variablen und Shell-Optionen, die das Verhalten genau ändern können. Schauen Sie sich die Bash-Manpage (
man bash
) an, wenn Sie mehr wissen möchten. Suchen Sie einfach nach HISTORY (geben Sie ein/^HISTORY
und bestätigen Sie mit Enter, springen Sie zum nächsten Fund mit n)Es gibt auch viel mehr Methoden, um die Geschichte zu durchlaufen als nur Upund Down:
Wenn Sie beispielsweise Ctrl+ Rund einen Teil eines vorherigen Befehls drücken , sucht bash im Verlauf rückwärts nach einem passenden Befehl. Wiederholen Sie das Drücken von Ctrl+, Rwenn die erste Übereinstimmung nicht die gewünschte ist. (Siehe 'Befehle zum Bearbeiten des Verlaufs' in der Bash-Manpage.)
Kopieren Sie
/etc/inputrc
an~/.inputrc
und kommentieren Sie die Linien mithistory-search-forward
undhistory-search-backward
in ihnen. Wenn Sie die ersten Buchstaben eines Befehls PgUpeingeben und drücken , zeigt bash nur Befehle aus dem Verlauf an, die mit denselben Buchstaben beginnen. (Arbeiten Sie nur in Schalen, die nach dieser Änderung geöffnet wurden.)Geben Sie
!!
anstelle eines Befehls in die Shell ein, um den letzten Befehl zu wiederholen (weitere Informationen hierzu finden Sie in der Bash-Manpage unter 'HISTORY EXPANSION').quelle
unset HISTFILE
fügen Sie ihn in Ihr ~ / .bashrc ein. Dann wird nur der Verlauf gespeichert und für jeden neuen Shell-Aufruf gelöscht.Der Befehlsverlauf wird in der Regel pro Benutzer in der
.bash_history
Datei in Ihrem Home-Verzeichnis gespeichert . Das heißt, jeder Benutzer hat seine eigenen Befehle, die er ausgeführt hat.Wenn mehrere Terminalsitzungen geöffnet sind, werden beim Drücken der Pfeiltaste möglicherweise unterschiedliche Befehle angezeigt. Wenn Sie jedoch alle Terminalfenster schließen, wird der Verlauf verschiedener Terminalsitzungen in einer gemeinsamen
~/.bash_history
Datei zusammengeführt.quelle