it-swarm.com.de

Die Hälfte der Bash-Geschichte fehlt

Neulich habe ich AU Q & A gelesen und einen bash Befehl benutzt:

inxi -????

Das Problem ist, dass ich mich heute nicht mehr an Charaktere erinnere, die ???? Ich möchte den Befehl und die Parameter in meine Dokumentationstabelle aufnehmen. Basierend auf dieser Antwort ( Wie man die Geschichte im Teminal abruft ) habe ich diesen Befehl benutzt:

$ cat .bash_history | grep inxi
inxi -b
Sudo apt install inxi
inxi -b

Der gewünschte Befehl ist jedoch nicht vorhanden, obwohl die Geschichte weit zurückreicht. Ich habe die inxi -Befehle im Terminal seit dieser alten Historie viele Male verwendet, aber keines davon wird angezeigt.

Ich habe es auch versucht Ctrl+R+inxi ohne glück. Weil ich immer mehrere Terminalfenster öffne, ist der Verlauf an ein bestimmtes Fenster gebunden?

Gibt es eine andere Möglichkeit, um grep Bash-Verlaufsdateien zu erstellen?

Beachten Sie, dass ich Terminalbefehlen kein Präfix mit einem Space Bar so dass sie aus der Geschichte verdrängt werden.

6

Ich kann nicht wissen, was ohne Zugriff auf Ihren Computer passiert ist, aber hier finden Sie eine kurze Erläuterung der Funktionsweise des Verlaufssystems, anhand derer Sie möglicherweise herausfinden können, was passiert ist.

Jedes offene Terminal verfügt über einen eigenen Historienpuffer. Diese Puffer werden beim Schließen des Terminals an Ihren $HISTFILE angehängt (möglicherweise auch, wenn der Puffer voll ist, aber ich weiß nicht, wie oft dies passiert). Nun können Sie einfach nach einem Befehl in Ihrem Verlauf suchen, indem Sie Folgendes ausführen:

history | grep command

Wenn der Befehl jedoch in einer anderen Shell ausgeführt wurde, wird er im Verlauf Ihrer aktuellen Shell nicht angezeigt. Um dies zu beheben, schließen Sie alle geöffneten Shells, öffnen ein neues Terminalfenster und durchsuchen Ihren Verlauf erneut.

Wenn das immer noch nicht hilft, haben Sie wahrscheinlich den Schwellenwert der Befehle überschritten, die im $HISTFILE gespeichert sind. Das Verhalten von $HISTFILE wird von verschiedenen Umgebungsvariablen gesteuert (die vollständige Liste finden Sie unter man bash). Die relevanten sind jedoch:

   HISTSIZE
          The  number  of commands to remember in the command history (see HISTORY below).  If the value is 0, commands are not saved in the history list.  Numeric values less than
          zero result in every command being saved on the history list (there is no limit).  The Shell sets the default value to 500 after reading any startup files.

   HISTFILESIZE
          The maximum number of lines contained in the history file.  When this variable is assigned a value, the history file is truncated, if necessary, to contain no  more  than
          that number of lines by removing the oldest entries.  The history file is also truncated to this size after writing it when a Shell exits.  If the value is 0, the history
          file is truncated to zero size.  Non-numeric values and numeric values less than zero inhibit truncation.  The Shell sets the default value to the value of HISTSIZE after
          reading any startup files.

Je höher diese Werte sind, desto mehr Befehle werden in Ihrem $HISTFILE gespeichert. Zum Beispiel verwende ich:

HISTSIZE=999999
HISTFILESIZE=999999

Wenn Sie den Verlauf von einer Shell in eine andere importieren möchten, können Sie den Befehl history verwenden:

$ help history | grep -E -- '-a|-r'
      -a    append history lines from this session to the history file
      -r    read the history file and append the contents to the history

Führen Sie also history -a aus, um den Verlauf von einem Terminal zu schreiben, und dann history -w, um ihn vom anderen zu lesen. Wenn Sie jetzt history ausführen, wird der Verlauf beider Shells angezeigt.

Schließlich können Sie dafür sorgen, dass alle Terminals den gleichen Verlauf haben, indem Sie diese Zeilen zu Ihrem ~/.bashrc hinzufügen:

## history -a causes the last command to be written to the
## history file automatically and history -r imports the history
export Prompt_COMMAND='history -a;history -r'

Ich schlage auch vor, dass Sie dies hinzufügen:

## Make Bash append rather than overwrite the history on disk:
shopt -s histappend
6
terdon

Ihr Befehl hat für mich funktioniert ...

$ cat .bash_history | grep inxi
inxi -b
Sudo apt install inxi
inxi -b
inxi -Fxz -c 0 > inxi_list.txt
inxi -Fxz
inxi -Fxz
Sudo inxi -Fxz

Ich kopiere auch regelmäßig Verlauf in eine Datei und speichere es.

history > history_$(date '+%Y-%m-%d_%H:%M:%S')_$(hostname).txt
2
oldfred