Wie kann ich den Bash-Verlauf von mehr als einer Terminalsitzung in Ubuntu anzeigen? [Duplikat]

11

Mögliches Duplizieren:
Können Verlaufsdateien in Bash vereinheitlicht werden?

Ich verwende Ubuntu Server 9.10 und möchte meinen Bash-Verlauf für mehr als eine Terminalsitzung anzeigen können. Dh meine letzten 200 Befehle oder so, auch wenn ich dazwischen abgemeldet wurde.

Wenn ich das benutze, historysehe ich nur alle Befehle aus meiner eigentlichen Terminalsitzung. Wie kann ich mehr Befehlsverlauf von Bash sehen? Gibt es spezielle Einstellungen für Bash, die ich gegenüber den Standardwerten in Ubuntu ändern sollte?

Ich habe keine ~/.bash_historyDatei. Aber ich habe ein ~/.bashrcmit HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupsundHISTCONTROL=ignoreboth

echo $HISTFILE
/home/sanoj/.bash_history
echo $HISTSIZE
500
echo $HISTFILESIZE
500
echo $HISTCONTROL
ignoreboth

UPDATE: Ich versuche jetzt Ubuntu Server 10.10 in VirtualBox. Wenn ich VirtualBox nur ohne den Befehl shutdown ausschalte, werden beim nächsten Start die Befehle der letzten Sitzung nicht in der Verlaufsdatei gespeichert.

Die Befehle werden nur gespeichert, wenn ich die Maschine mit dem Befehl shutdown herunterfahre. ZB Herunterfahren -P 0.

Dies muss der Grund für mein Problem sein. Also muss ich herausfinden, wie ich den Befehlsverlauf öfter speichern kann. ZB nach jedem Befehl.

Jonas
quelle
Was bekommen Sie, wenn Sie echo $HISTSIZEund echo $HISTFILESIZE? Mein (Ubuntu) ~/.bashrchat die gleichen HISTCONTROLZeilen wie Ihre, was hirntot ist, da die zweite die erste überschreibt und die Werte durch Doppelpunkte und nicht durch Kommas getrennt sein sollen. Wenn Sie dies tun set -o, wird eine Zeile mit der Aufschrift "history on" angezeigt?
Bis auf weiteres angehalten.
Ich komme 500mit echobeiden Variablen undhistory on
Jonas
Die zweite HISTCONTROL- Anweisung ist die, die Sie erhalten, nicht die erste. obwohl ignoreboth eine Bash-Abkürzung für ignoreups + ignorespace ist, so dass dies wahrscheinlich nicht das Problem ist.
Quacksalber Quijote
1
Dies ist ein Duplikat: superuser.com/questions/37576/…
Warren
1
@ Warren: schöner Fund. Ich stimme zu, sieht genau so aus, wie Sanoj es verlangt.
Quacksalber Quijote

Antworten:

6

Sie können verwenden

history -a

um den In-Memory-Verlauf sofort an die Verlaufsdatei anzuhängen. Eine Terminalsitzung kann keine andere sehen, es sei denn, dies wird durchgeführt oder die andere wird beendet.

Sie können verwenden

history 200 | less

um diese Anzahl von Einträgen zu sehen.

Außerdem HISTSIZEsehen Sie den Eintrag in der Bash-Manpage betreffend HISTFILESIZE.

Bis auf weiteres angehalten.
quelle
history -a´ doesn't do anything for me, and not Geschichte 200 | auch weniger, aber ich habe meine Frage mit mehr Informationen aktualisiert. Danke trotzdem.
Jonas
Ich denke, dass ich jetzt einen Grund gefunden habe. Der Verlauf wird nur gespeichert, wenn ich ihn sauber herunterfahre. Siehe meine neue Frage: unix.stackexchange.com/questions/3330/…
Jonas
6

Sobald Sie sich abgemeldet haben, wird der Verlauf an die Datei angehängt ~/.bash_history. Schau mal rein.

Standardmäßig werden Ihre letzten 500 Befehle gespeichert. Wenn Sie mehr speichern möchten, setzen Sie die Variable HISTSIZEin ~/.bashrc.

Ich füge auch ignoredupszu HISTCONTROL(mit HISTCONTROL=$HISTCONTROL:ignoredup). Dadurch werden doppelte aufeinanderfolgende Befehle nur einmal gespeichert.

Schauen Sie sich an, man 1 bashwas Sie sonst noch über die Geschichte tun können.

Benjamin Bannier
quelle
Danke für deine Antwort. Aber ich habe keine ~/bash_historyDatei, und nicht HISTSIZEin , ~/.bashrcaber ich habe HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupsund HISTCONTROL=ignorebothund es ist Ubuntu Server, wenn diese Angelegenheit.
Jonas
1
@Snoj Beachten Sie die .in ~/.bash_history. Und dafür HISTSIZEwird nur der Standardwert von 500 Einträgen verwendet.
Benjamin Bannier
Ja, aber ich habe keine ~/.bash_historyDatei auf meinem System. Ich habe immer ls -anachgesehen.
Jonas
@Sanoj Vielleicht ist es nicht die Standardeinstellung. Der Dateiname wird in der $HISTFILEVariablen gespeichert , sodass echo $HISTFILESie wissen, wo Sie suchen müssen.
Benjamin Bannier
echo $HISTFILEgibt mir /home/sanoj/.bash_history- seltsam. Vielleicht ist es aus Sicherheitsgründen nicht aktiviert?
Jonas
1

Der Bash-Verlauf wird normalerweise geladen, wenn die Shell ausgeführt wird, und wird gespeichert, wenn sie normal beendet wird. Sie können dies verwenden history -aund history -nüberschreiben, jedoch nicht automatisch, es sei denn, Sie missbrauchen $PROMPT_COMMANDoder ähnliches.

Ignacio Vazquez-Abrams
quelle
0

Sanoj, das sollte wirklich "einfach funktionieren"; Ich glaube nicht, dass Sie etwas Besonderes tun müssen, um dies zu ermöglichen. Es hört sich so an, als würde etwas den normalen Ablauf der Ereignisse stören.

Ich würde in / etc / profile, / etc / bashrc (oder vielleicht /etc/bash.bashrc nach einigen Quellen), ~ / .bash_profile, ~ / .bashrc, ~ / .bash_login, ~ / .bash_logout nachsehen wenn es irgendetwas gibt, das den Verlauf beeinflussen könnte (möglicherweise grep -i histin jeder der oben genannten Dateien).

... Insbesondere frage ich mich, ob Sie etwas in ~ / .bash_logout haben, das die Datei entfernt.

Ist es alternativ möglich, dass etwas die $HOMEVariable überschreibt ?

Zac Thompson
quelle