
history
Wie kann ich eine bestimmte Zeile aus der Datenbank entfernen ?
Antwort1
Sie müssen sich ab- und erneut anmelden oder ausführen, history -a
damit 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:
- Durch die Eingabe
history -d <line_number>
wird eine angegebene Zeile aus dem Verlauf im Speicher gelöscht. - Durch die Eingabe
history -w
wird der aktuelle Verlauf im Arbeitsspeicher in die~/.bash_history
Datei 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 HISTCONTROL
unter 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:
Erzwingen Sie das Beenden der aktuellen Sitzung, ohne den Verlauf zu speichern:
kill -9 $$
Dadurch wird der gesamte aktuelle Verlauf gelöscht.
Wie richtig bemerkt vonS0AndS0‘Kommentar, eine andere Möglichkeit besteht darin, zu ändernName der Verlaufsdatei:
HISTFILE=
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 sed
Befehl 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 -n1
mit 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 sed
wird 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 sed
Befehl ä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.