Speichert das Terminal Daten?


9

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?


Schreibe einen Verlauf, um alle zuvor verwendeten Befehle zu erhalten.
Sukupa91

Das OP fragt nicht nach dem historyBefehl, sondern wie dieses ganze System zum Speichern alter Befehle funktioniert.
Tarun

Entschuldigung, ich habe es falsch verstanden.
Sukupa91

2
Beachten Sie diese Ausnahme: Wenn der Befehl mit einem Leerzeichen beginnt, wird der Befehl nicht im Verlauf gespeichert.
Rinzwind

@Rinzwind, es wird der Geschichte hinzugefügt, wenn es mit einem Leerzeichen begonnen wird.
GC 13.

Antworten:


10

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 /^HISTORYund 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/inputrcan ~/.inputrcund kommentieren Sie die Linien mit history-search-forwardund history-search-backwardin 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').


1
Und wenn Sie nicht möchten, dass es einen Verlauf enthält, unset HISTFILEfügen Sie ihn in Ihr ~ / .bashrc ein. Dann wird nur der Verlauf gespeichert und für jeden neuen Shell-Aufruf gelöscht.
Ein Lebenslauf vom

10

Der Befehlsverlauf wird in der Regel pro Benutzer in der .bash_historyDatei 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_historyDatei zusammengeführt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.