Löschen des Verlaufs von ~ / .bash_history

8

Ich habe ein paar Fragen zum Terminal- oder Befehlszeilenverlauf, der in ~/.bash_history gespeichert ist.

  1. Ich kann die Datei im Terminal mit dem history -Befehl sehen, aber wenn ich versuche, sie mit gedit bash_history zu öffnen, ist die Datei komplett leer. Warum?

  2. Ich habe gefunden, wie man eine bestimmte Anzahl von Zeilen in der Datei vom Terminal mit dieser Codezeile löscht:

    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 besonders schlau, wenn Sie versuchen, Ihre Sachen zu bedecken. Die Frage ist also: Wie kann ich die letzte Codezeile angeben und sicherstellen, dass diese nicht aufgezeichnet wird?

IDK 04.09.2017, 06:57

7 Antworten

18
  1. Sie haben den vorhergehenden Punkt vergessen, der Befehl zum Öffnen Ihrer (bash) Terminal-History-Datei lautet

    gedit ~/.bash_history
    

    Diese Datei wird nur aktualisiert, wenn Sie ein Terminal schließen .

  2. 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:

    sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit
    

    oder

    for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit
    

    oder

    head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit
    

    sed bzw. head löscht die ausgewählten Zeilen von ~/.bash_history , history -c löscht den Verlauf des Terminals und exit schließt ihn.

dessert 04.09.2017, 07:12
4

Die Datei bash_history ist eine versteckte Datei, die mit einem Punkt beginnt. Sie müssen

tun
gedit ~/.bash_history

Dies öffnet die Datei in gedit.

    
user732773 04.09.2017 07:48
1

Wenn Sie nur bestimmte Teile Ihres Befehlsprotokolls löschen möchten , dann sind die obigen Methoden in Ordnung. Wenn Sie die Befehlsprotokollierung für eine bestimmte Bash-Sitzung beenden möchten, geben Sie den Befehl

aus
unset HISTFILE

Um drastischer zu sein, wenn Sie nicht möchten, dass einer Ihrer Befehle protokolliert wird , können Sie dies tun

rm ~/.bash_history
ln -s /dev/null ~/.bash_history

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 stoppt.

    
Mukesh Sai Kumar 04.09.2017 11:43
1

Ich weiß, dass das schon eine akzeptierte Antwort hat, aber so habe ich es seit den 80er Jahren gemacht. Es ist eine großartige Möglichkeit, Ihre Tracks zu verstecken, und es ist ein mehrphasiger Ansatz. Zum größten Teil ist es einer, der nicht bemerkt wird, wenn man nicht wirklich aufpasst. Hier ist, wie es gemacht wird.

Öffnen Sie ein Terminal / Shell / Session und tun Sie:

 chmod 444 ~/.bash_history

Verlasse die Shell Öffne ein Terminal / Shell / Session und mache: Hier sind einige kreative Möglichkeiten, die Geschichte dauerhaft zu löschen:

1:

 vi ~/.bash_history
 9999999 dd
 <esc>wq!

2 (Erstelle eine falsche Geschichte)

 sudo echo "which ls" > ~/.bash_history
 sudo echo "cd ~/;ls" >> ~/.bash_history

dann für gutes Maß:

 chmod 444 ~/.bash_history

Beende die Shell

Öffnen Sie eine neue Shell und geben Sie

ein
 history

Was macht es weniger auffällig ist, wenn man ein ls -ratl, die ~ / .bash_history wird schließlich im Klappern der Verzeichnisliste verschwinden. Es wird nicht als ein Link angezeigt, der unnötige Aufmerksamkeit auf sich ziehen würde. Die meisten Leute machen kein -a auf ihrer Wurzel, was nützlich ist, wenn Emulation gewünscht wird.

Der Nachteil dieses Ansatzes besteht darin, dass Sie Ihre Fähigkeit verlieren, zurückzugehen und Ihre Geschichte abzurufen. Die eigentliche ~ / .bash_history-Datei könnte auch am Anfang einer Verzeichnisliste landen, da sie im Laufe der Zeit möglicherweise zu einem wirklich alten Änderungsdatum führt, was wiederum zur Entdeckung führen könnte, dass etwas nicht stimmt.

    
Div 04.09.2017 19:48
0

1) Ausführen sh ; dies erzeugt eine Unterschale aus Asche, die überhaupt keine Geschichte aufzeichnet. Bearbeiten Sie von dort aus

2) Fügen Sie die Zeile HISTCONTROL=ignoreboth zu .bashrc hinzu und tun Sie exec bash , um die aktuelle Shell dauerhaft durch eine neu initialisierte zu ersetzen. Führen Sie dann alle Befehle aus, die nicht mit einem führenden Leerzeichen protokolliert werden sollen.

    
Joshua 04.09.2017 17:51
0

da ich noch nicht kommentieren kann, werde ich meine Kommentare als Antwort hinzufügen:

man history beantwortet alles.

Antwort auf # 1 ist, dass Geschichte im Speicher ist. history -a zum sofortigen Speichern in Datei. history -w speichert auch, kann aber andere Sitzungen durcheinander bringen.

answer # 2: history -a , gedit, lösche die gewünschten Zeilen, history -r

    
gcb 04.09.2017 19:54
0

Der Verlauf wird erst gespeichert, wenn Sie sich aus der Shell abmelden. Versuchen Sie, sich aus der Shell abzumelden, und schauen Sie sich dann erneut .bash_history an. Die Befehlsgeschichte sollte dort sein.

    
The Lightning Stalker 04.09.2017 16:27