Ich habe ein paar Fragen zum Terminal- oder Befehlszeilenverlauf, der in gespeichert ist ~/.bash_history
.
Ich kann die Datei im Terminal mit dem
history
Befehl sehen, aber wenn ich versuche, sie mitgedit bash_history
der Datei zu öffnen, ist sie vollständig leer. Warum?Ich habe herausgefunden, wie eine bestimmte Anzahl von Zeilen in der Datei mit dieser Codezeile vom Terminal gelöscht werden kann:
for i in {1..N}; do history -d N; done
Dabei ist N die Anzahl der Zeilen (oder Befehle), die Sie löschen möchten, aber jetzt zeigt die Verlaufsdatei diesen letzten Befehl an, und das ist nicht sehr klug, wenn Sie versuchen, Ihre Inhalte zu behandeln. Die Frage ist also: Wie kann ich die letzte Codezeile angeben und sicherstellen, dass diese nicht aufgezeichnet wird?
Antworten:
Sie haben gerade den vorhergehenden Punkt vergessen. Der Befehl zum Öffnen Ihrer (Bash-) Terminal-Verlaufsdatei lautet
Diese Datei wird nur dann aktualisiert , wenn Sie in der Nähe einen Terminal.
Um die letzten 10 Zeilen aus dieser Datei zu entfernen und diesen Befehl nicht selbst aufzuzeichnen, öffnen Sie ein neues Terminal und führen Sie die folgende Befehlskette aus:
oder
oder
sed
oderhead
löscht jeweils die ausgewählten Zeilen aus~/.bash_history
,history -c
löscht den Verlauf des Terminals undexit
schließt ihn.quelle
for
+sed
:head -n -N
wobei GroßbuchstabenN
die Anzahl der zu entfernenden Zeilen sind. stackoverflow.com/a/13380679/711006head -n -N testfile > testfile
löscht nur die Datei! Ich habe eine Problemumgehung hinzugefügt, die jedoch sicherlich nicht kürzer ist.head
das nicht an Ort und Stelle funktionieren kannsed
. Ich habe hauptsächlich nach einem einzigensed
Befehl gesucht, der Ihrefor
Schleife ersetzt. Es gibt einige Optionen auf der Seite, die ich verlinkt habe, aber sie sehen nicht so verständlich aus wie Ihr Code.Die Datei bash_history ist eine versteckte Datei, die mit einem Punkt beginnt. Du musst tun
Dadurch wird die Datei in gedit geöffnet.
quelle
Wenn Sie nur bestimmte Teile Ihres Befehlsprotokolls löschen möchten, sind die oben genannten Methoden in Ordnung. Wenn Sie die Befehlsprotokollierung für eine bestimmte Bash-Sitzung beenden möchten, geben Sie den Befehl aus
Um drastischer zu sein, wenn Sie nicht möchten, dass einer Ihrer Befehle protokolliert wird , können Sie dies tun
Beachten Sie, dass die erste Methode nur für eine einzelne Sitzung wirksam ist, während die zweite Methode die Befehlsprotokollierung für alle zukünftigen Sitzungen beendet.
quelle
Mir ist klar, dass dies bereits eine akzeptierte Antwort hat, aber so mache ich es seit den 80ern. Es ist eine großartige Möglichkeit, Ihre Spuren zu verbergen, und es ist ein mehrphasiger Ansatz. Zum größten Teil ist es eines, das nicht bemerkt wird, wenn man nicht wirklich aufpasst. Hier ist, wie es gemacht wird.
Öffnen Sie ein Terminal / eine Shell / eine Sitzung und führen Sie folgende Schritte aus:
Verlassen Sie die Shell. Öffnen Sie ein Terminal / eine Shell / eine Sitzung und gehen Sie wie folgt vor: Hier sind einige kreative Möglichkeiten, um den Verlauf dauerhaft zu löschen
1:
2 (Erstelle eine gefälschte Geschichte)
dann für ein gutes Maß:
Verlasse die Shell
Öffnen Sie eine neue Shell und geben Sie ein
Was es weniger auffällig macht, ist, wenn man ein ls -ratl macht, wird die ~ / .bash_history irgendwann im Rasseln der Verzeichnisliste verschwinden. Es wird nicht als Link angezeigt, der unnötige Aufmerksamkeit erregen würde. Die meisten Leute machen kein -a an ihrer Wurzel, was nützlich ist, wenn eine Emulation gewünscht wird.
Der Nachteil dieses Ansatzes ist, dass Sie nicht mehr in der Lage sind, Ihren Verlauf abzurufen. Die eigentliche ~ / .bash_history-Datei könnte auch am Anfang einer Verzeichnisliste stehen, da sie im Laufe der Zeit möglicherweise ein wirklich altes Änderungsdatum aufweist, was an sich zu der Entdeckung führen kann, dass etwas nicht stimmt.
quelle
9999999 dd
alle Zeilen in der Datei zu löschen , dann:%d
,:1,$d
oderdG
Arbeit viel besser1) Ausführen
sh
; Dies erzeugt eine Unterschale aus Asche, die überhaupt keine Geschichte aufzeichnet. Von dort aus bearbeiten2) Fügen Sie die Zeile
HISTCONTROL=ignoreboth
zu hinzu.bashrc
undexec bash
ersetzen Sie die aktuelle Shell dauerhaft durch eine neu initialisierte Shell. Führen Sie dann alle Befehle aus, die nicht mit einem führenden Leerzeichen protokolliert werden sollen.quelle
da ich noch keinen Kommentar abgeben kann, werde ich meine Kommentare als Antwort hinzufügen:
man history
werde alles beantworten.Antwort auf # 1 ist, dass die Geschichte gespeichert ist.
history -a
sofort in Datei speichern.history -w
speichert auch, kann aber andere Sitzungen durcheinander bringen.Antwort 2 :
history -a
, gedit, löschen Sie die gewünschten Zeilen,history -r
quelle
Der Verlauf wird erst gespeichert, wenn Sie sich von der Shell abmelden. Versuchen Sie, sich von der Shell abzumelden, und sehen Sie sich dann erneut .bash_history an. Der Befehlsverlauf sollte dort sein.
quelle