Jak mogę usunąć określony wiersz z history
bazy danych?
linux
bash
history
command-history
w0rldart
źródło
źródło
vim ~/.bash_history
) ze spacją; polecenia zaczynające się od spacji zwykle nie są rejestrowane (patrz$HISTCONTROL
).Usunięcie z pliku historii można osiągnąć za pomocą wiersza polecenia w dwóch krokach:
history -d <line_number>
usuwa określony wiersz z historii w pamięci.history -w
zapisuje bieżącą historię w pamięci do~/.bash_history
pliku.Te dwa kroki razem trwale usunąć wiersz z pamięci w historii iz .bash_history pliku, jak również.
źródło
history -w
z historii?<line_number>
tylkohistory | grep [unwanted_content]
uzyskać listę ze wszystkimi wierszami zawierającymi[unwanted_content]
(jak hasła).Aby przede wszystkim zapobiec dodawaniu polecenia do historii, upewnij się, że zmienna środowiskowa
HISTCONTROL
zawiera między wartościami oddzielonymi dwukropkami wartośćignorespace
, na przykład (dodaj np. Do.bashrc
):Zapobiegnie to dodaniu do historii poleceń z wiodącym odstępem. Następnie możesz całkowicie wyczyścić historię, uruchamiając
źródło
Przede wszystkim, jeśli polecenie, które zamierzasz wydać, jest wrażliwe, niebezpieczne lub po prostu nie potrzebujesz go zaśmiecać w swojej historii, najlepiej / najszybciej jest po prostu uniemożliwić jego wejście do historii. Upewnij się, że
$HISTCONTROL
zawieraignorespace
:Następnie wykonaj dowolne polecenie, którego nie chcesz w swojej historii, spacją:
Jeśli przypadkowo umieścisz niechciane polecenie w historii, pod warunkiem, że twoja sesja bash jest nadal otwarta, polecenie jeszcze nie dotknęło dysku. Aby usunąć poprzednie polecenie z historii, wydaj:
Zwróć uwagę na wiodące miejsce; to polecenie wymaga
ignorespace
, w przeciwnym razie po prostu się skasuje!Jeśli chcesz usunąć kilka ostatnich poleceń, znajdź ostatni i pierwszy numer historii:
W tym przypadku 602 i 599. Następnie wydaj:
(Bez
ignorespace
byłoby to 603..599.)Jeśli nie chcesz, aby jakaś historia z bieżącej sesji trafiła na dysk, wyjdź, używając:
Dotychczasowe podejście polegało na tym, aby nawet nie zapisywać wrażliwych elementów historii na dysku dla dodatkowego bezpieczeństwa, ponieważ teoretycznie dane usunięte z nieulotnych nośników można nadal odzyskać.
Jeśli jednak polecenia, które chcesz usunąć, pochodzą z poprzedniej sesji, zostaną już dołączone do
$HISTFILE
wyjścia. Manipulowanie historią za pomocą powyższych poleceń nadal dołącza tylko pozostałe nowe elementy do$HISTFILE
, przy wyjściu . Aby nadpisać$HISTFILE
z widokiem na bieżącej sesji użytkownika w całej historii, w tej chwili , issue:Oczywiście w przypadku elementów historii znajdujących się już na dysku alternatywą do edycji historii za pomocą
history -d
poleceń, a następnie wydawaniahistory -w
, jest edycja$HISTFILE
za pomocą edytora tekstu.źródło
$HISTFILE
, na wyjściu ”. Faktycznie, nie jest to do końca prawda. Wydaje się, że dołącza tylko pozostałe nowe elementy, które „wystają” z pierwotnej długości historii. Np. Jeśli usunę 5 oryginalnych elementów i dodam 15 nowych, dołączonych zostanie tylko 10 ostatnich, podczas gdy oczekuję, że wszystkie 15 nowych zostanie dołączonych. Myślę, że to błąd, ponieważ nie widzę, jak to zawsze jest pożądana funkcjonalność.Kilka technik:
Zapobiegaj przechowywaniu poufnych informacji w pliku historii
Jeśli wpiszesz jakieś hasło w wierszu poleceń, to wiedz, że wszystkie polecenia są zarejestrowane, możesz:
Wymuś wyjście z bieżącej sesji bez zapisywania historii:
Spowoduje to usunięcie całej bieżącej historii.
Wpisz ↑ (up arrow)sesję otwartej bash, aż zostaną wyświetlone poufne informacje, a następnie użyj klawiszy edycji linii, takich jak Ctrl+, Waby usunąć wrażliwe informacje, a następnie ↓ (down arrow) do momentu wyświetlenia monitu o nową pustą linię, zanim zaczniesz pisać Enter.
Usuń poufne informacje z pliku historii
Jeśli zdajesz sobie sprawę, że poufne informacje są już przechowywane i chcesz je usunąć, ale nie całą historię:
Proste
sed
polecenie może wykonać zadanie:ale podczas wpisywania tworzona jest kolejna linia historii zawierająca wzorzec wyszukiwania (informacje poufne), który próbujesz usunąć. Więc możesz:
To będzie działać
head -n1
z wejściem z terminala. Wygląda na to, że twój terminal jest zawieszony (nie pojawi się monit); po prostu wpisz informacje, które chcesz usunąć z pliku. Jest to sztuczka pozwalająca na wprowadzenie (części) polecenia bez wpisywania go w wierszu poleceń, przez co nie można go włączyć do rekordu historii. Następniesed
użyje wpisanego tekstu, aby wyszukać.bash_history
i usunąć wszystkie wiersze zawierające poufne informacje. Uwaga: jeśli wzorzec poufnych informacji zawiera ukośniki, musisz je uciec za pomocą ukośników odwrotnych lub zmienićsed
polecenie, aby użyć tej składni, aby określić separator, który nie pojawia się we wzorcu:Innym sposobem może być usunięcie tylko poufnych informacji, ale zachowanie poleceń zawierających te informacje. W tym celu możesz po prostu zastąpić poufne informacje wybranym tekstem zastępczym:
Usuń poufne informacje z dowolnego pliku w określonym drzewie
Na koniec, aby upewnić się, że nie pozostanie w innym zapomnianym pliku:
wyświetli listę wszystkich zainteresowanych plików.
zastąpi wszystkie wystąpienia poufnych informacji we wszystkich plikach w drzewie katalogów zrootowanym
.
. Uwaga: nawet jeśli to polecenie używaxargs -0
, nie obsługuje plików z nowymi liniami w nazwach.źródło
Znajdź wiersz, który chcesz usunąć, naciskając, ↑ (up arrow)aż się pojawi, a następnie naciśnij Ctrl+ U. To powinno usunąć linię.
Jeśli użyjesz
history
polecenia, zobaczysz, że linia została zastąpiona gwiazdką.źródło
*
.Jeśli chcesz usunąć kilka linii jednocześnie, zwykle używam tego:
Jeśli chcesz usunąć ostatnie polecenie, możesz użyć:
źródło
history | grep <string>
nadal pokazuje wszystkie linie Twierdzi, aby usunąć ...history | grep XYZ | grep -v grep | tac | awk '{print "history -d", $1}'
Jeśli musisz usunąć zakres linii z historii, następująca funkcja bash może zaoszczędzić trochę czasu:
Funkcja powinna być zazwyczaj dodawana do
$HOME/.bashrc
. Aby użyć tej funkcji bezpośrednio, musisz ponownie odczytać plik przez działającą powłokę (. $HOME/.bashrc
). Następnie, aby usunąć np. Polecenia 200-210 z historii:(Uwaga: to pytanie jest jednym z najlepszych wyników wyszukiwania, jeśli szukasz usunięcia szeregu poleceń z historii bash. Tak więc, chociaż powyższe jest więcej niż to, o co pyta pytanie, może być przydatne dla niektórych czytelników.)
źródło
for
oświadczenia:for n in $(seq "$2" "$1")
jest przez niektórych preferowany stylistycznie, a jeśliseq
nie działa, spróbujfor ((n="$2"; n>="$1"; n--))
.59 to numer linii. Nie może być nic słodszego niż to :)
źródło
Po prostu spróbuj tych
to wyświetli identyfikator historii i polecenia, np
posługiwać się,
Tutaj 211 jest id historii. Teraz sprawdź to za pomocą
źródło
Wiem, że minęło dużo czasu, odkąd pytanie zostało zadane i udzielono odpowiedzi, ale pokażę ci moją metodę czyszczenia mojego pliku historii i wylogowywania się w tym samym czasie.
Biegnę :
history -w && nano "${HISTFILE}" && history -c && exit
To, co robi, jest proste:
history -w
: zapisuje w pamięci podręczną historię"${HISTFILE}"
nano "${HISTFILE}"
: pozwól mi edytować"${HISTFILE}"
Możesz użyć skryptu sed lub cokolwiek chcesz wyczyścić"${HISTFILE}"
history -c
: wyczyść historię buforowaną, aby to ostatnie polecenie nie było dołączane.exit
: wyloguj mnie dołączając historię z pamięci podręcznej ... ale jest pusta;)Po tym poleceniu nastąpi wylogowanie z czystym plikiem historii. Zaloguj się, aby sprawdzić swoją historię;)
Mam nadzieję, że to komuś pomoże.
źródło
Możesz także edytować plik historii bezpośrednio, np.
nano .bash_history
Jeśli jesteś w powłoce bash?źródło