Entfernen Sie eine bestimmte Zeile aus der Bash-Verlaufsdatei

Entfernen Sie eine bestimmte Zeile aus der Bash-Verlaufsdatei

historyWie kann ich eine bestimmte Zeile aus der Datenbank entfernen ?

Antwort1

Sie müssen sich ab- und erneut anmelden oder ausführen, history -adamit der aktuelle Verlauf auf der Festplatte gespeichert wird.

Bearbeiten Sie dann einfach die Datei ~/.bash_history.

Antwort2

Sie können die Entfernung aus der Verlaufsdatei über die Befehlszeile in zwei Schritten erreichen:

  1. Durch die Eingabe history -d <line_number>wird eine angegebene Zeile aus dem Verlauf im Speicher gelöscht.
  2. Durch die Eingabe history -wwird der aktuelle Verlauf im Arbeitsspeicher in die ~/.bash_historyDatei geschrieben.

Die beiden Schritte zusammen entfernen die Zeile dauerhaft aus dem SpeicherGeschichteund von der.bash_historyDatei ebenfalls.

Antwort3

ZuverhindernUm zu verhindern, dass ein Befehl überhaupt zum Verlauf hinzugefügt wird, stellen Sie sicher, dass die Umgebungsvariable HISTCONTROLunter ihren durch Doppelpunkte getrennten Werten den Wert enthält ignorespace, zum Beispiel (add eg to .bashrc):

$ export HISTCONTROL=ignorespace

Dadurch wird verhindert, dass Befehle mit einem führenden Leerzeichen zum Verlauf hinzugefügt werden. Sie können den Verlauf dann vollständig löschen, indem Sie Folgendes ausführen:

$  history -c -w
  ^-- additional space character

Antwort4

Mehrere Techniken:

Verhindern Sie, dass vertrauliche Informationen in der Verlaufsdatei gespeichert werden

Wenn Sie in einer Befehlszeile ein Kennwort eingegeben haben und dann feststellen, dass alle Befehle protokolliert werden, haben Sie folgende Möglichkeiten:

  1. Erzwingen Sie das Beenden der aktuellen Sitzung, ohne den Verlauf zu speichern:

     kill -9 $$
    

    Dadurch wird der gesamte aktuelle Verlauf gelöscht.

    1. Wie richtig bemerkt vonS0AndS0‘Kommentar, eine andere Möglichkeit besteht darin, zu ändernName der Verlaufsdatei:

      HISTFILE=
      
  2. Geben Sie ↑ (up arrow)in der geöffneten Bash-Sitzung ein, bis die vertraulichen Informationen angezeigt werden. Verwenden Sie dann zur Zeilenbearbeitung Tastenkombinationen wie Ctrl+ W, um die vertraulichen Informationen zu löschen.Dann ↓ (down arrow)bis eine neue leere Zeile angezeigt wird,Vortippen Enter.

Löschen vertraulicher Informationen aus der Verlaufsdatei

Wenn Sie feststellen, dass vertrauliche Informationen bereits gespeichert sind und Sie diese, jedoch nicht Ihren gesamten Verlauf, löschen möchten:

Ein einfacher sedBefehl könnte die Aufgabe erledigen:

sed -e '/SeNsItIvE InFo/d' -i .bash_history

aber während Sie dies eingeben, erstellen Sie eine weitere Verlaufszeile, die das Suchmuster (sensible Informationen) enthält, das Sie löschen möchten. Sie könnten also:

sed -e "/$(head -n1)/d" -i .bash_history

Dies wird head -n1mit Eingaben vom Terminal ausgeführt. Es wird so aussehen, als ob Ihr Terminal hängen bleibt (es wird keine Eingabeaufforderung angezeigt); geben Sie einfach die Informationen ein, die Sie aus der Datei löschen möchten. Dies ist ein Trick, mit dem Sie (einen Teil) eines Befehls eingeben können, ohne ihn tatsächlich in die Befehlszeile einzugeben, wodurch er für die Aufnahme in den Verlaufseintrag ungeeignet wird. Anschließend sedwird der von Ihnen eingegebene Text verwendet, um .bash_history alle Zeilen mit vertraulichen Informationen zu suchen und zu löschen. Hinweis: Wenn Ihr Muster für vertrauliche Informationen Schrägstriche enthält, müssen Sie diese mit Backslashes maskieren oder den sedBefehl ändern, um diese Syntax zu verwenden und ein Trennzeichen anzugeben, das nicht im Muster vorkommt:

sed -e "\|$(head -n1)|d" -i .bash_history

Eine andere Möglichkeit wäre, nur die sensiblen Informationen zu löschen, aber die Befehle, die diese Informationen enthalten, beizubehalten. Dazu könnten Sie einfach die sensiblen Informationen durch einen Ersatztext Ihrer Wahl ersetzen:

sed -e "s/$(head -n1)/Santa Claus/g" -i .bash_history.

Löschen vertraulicher Informationen aus einer beliebigen Datei in einem bestimmten Baum

Und um sicherzugehen, dass das nicht so bleibt,ein anderervergessene Datei:

SENSITIVEINFO="$(head -n1)"
find . -type f -print0 | xargs -0 grep -l "$SENSITIVEINFO"

listet alle betroffenen Dateien auf.

find . -type f -print0 |
    xargs -0 grep -lZ "$SENSITIVEINFO" |
    xargs -0 sed -e "s/$SENSITIVEINFO/Santa Claus/g" -i

ersetzt alle Vorkommen vertraulicher Informationen in allen Dateien im Verzeichnisbaum mit der Wurzel .. Hinweis: Auch wenn dieser Befehl verwendet xargs -0, verarbeitet er keine Dateien mit Zeilenumbrüchen im Namen.

verwandte Informationen