dlaczego usunięcie historii bash nie wystarczy?

15

Kiedyś myślałem, że usunięcie mojej historii bashów było wystarczające, aby wyczyścić historię bashów, ale wczoraj mój kot bałaganił po prawej stronie klawiatury, a kiedy wróciłem do komputera, zobaczyłem coś, co napisałem miesiąc temu, a potem zacząłem naciśnij wszystkie klawisze jak szalony, szukając tego, co mogło to spowodować. Okazuje się, że klawisz UPARROW pokazuje moją historię bash nawet po usunięciu .bash_history.

Jak mogę naprawdę usunąć historię bash?

bunden
źródło
8
Historia .bash jest nadpisywana za każdym razem, gdy zamykasz powłokę bash. Więc jeśli uruchomisz bash, usuniesz .bash_history i wylogujesz się, nie osiągniesz nic.
Shadur
14
Twój kot zasługuje na ogromną nagrodę. Już przy użyciu bash na jak długo bez odkrywania ma przywołanie wiersza polecenia i edycji? Czy po prostu od nowa wpisujesz każdą linię poleceń za każdym razem? To sprawiłoby, że skorupa byłaby bardzo nieprzyjemna w użyciu.
cas
@cas dziesięć lat. Teraz, kiedy to mówisz, naciskam Uparrow, by powtarzać polecenia, ale zrozumiałem to jako pamięć „krótkoterminową”, nie dłuższą niż kilka wierszy. Nie ostrzegano mnie, że usunięcie .bash_history nie spowoduje usunięcia historii bash.
bunden
Usunięcie ~/.bash_historynaprawdę powoduje usunięcie ~/.bash_history.... ale (chyba że podejmiesz kroki, aby temu zapobiec, takie jak wyczyszczenie historii w pamięci, uruchamiając się history -ctuż przed wylogowaniem, ustawieniem HISTFILE=/dev/nulllub po prostu zapisaniemunset ), bash po prostu zapisze swoją bieżącą historię po wyjściu . BTW, HISTSIZEenv var mówi bashowi, ile linii historii należy zachować w pamięci, i HISTFILESIZEmówi bashowi maksymalną liczbę linii historii do zapisania. oba mogą być ustawione np ~/.bashrc. w twoim . PS: Twój kot zasługuje na drugą nagrodę za udzielenie ci cennej lekcji :)
cas
@cas Myślę, że usunięcie .bash_history powinno usunąć historię bash. Wydaje mi się to intuicyjne. To, co nie wydaje się intrygujące, to historia -c, historia -w, rozbrajające zmienne ... to jest szalone z perspektywy doświadczenia użytkownika.
bunden

Odpowiedzi:

26

W niektórych przypadkach (niektóre wersje bash), wykonując:

$ history -c; history -w

Lub po prostu

$ history -cw

Skasuje historię w pamięci (w górę iw dół strzałki nie będzie miało żadnych poleceń do listy), a następnie napisać , że do $HISTFILEpliku (jeżeli $HISTFILEzostanie obcięty przez uruchomione wystąpienie bash).

Czasami bash decyduje się nie obcinać $HISTFILEpliku, nawet jeśli histappendopcja jest wyłączona i $HISFILEZIZEustawiona na 0.

W takich przypadkach opcja nuke zawsze działa:

history -c; >$HISTFILE

Spowoduje to wyczyszczenie listy historii poleceń zapisanych w pamięci i wszystkich poleceń uprzednio zapisanych do pliku. Zapewni to, że działająca powłoka nie ma zapisanej historii ani w pamięci, ani na dysku, jednak inne działające instancje bash (gdzie historia jest aktywna) mogą mieć pełną kopię poleceń odczytanych od $HISTFILEmomentu uruchomienia bash (lub history -rwykonania) .

Jeśli wymagane jest również , aby do pliku historii nie było zapisywane nic innego (brak nowych poleceń) bieżącej sesji, unset HISTFILEuniemożliwi to takie logowanie.

Izaak
źródło
1
Edycja HISTFILE i wykonywanie history -c && history -rtej czynności zastąpiłoby bieżącą historię ręcznie zmodyfikowaną historią. W niektórych przypadkach może to być lepsze niż wyrzucenie całej historii.
Mikko Rantalainen
9

bashma historię sesji w pamięci, która jest zapisywana do pliku, jeśli zmienna powłoki HISTFILEjest ustawiona na nazwę pliku podczas bashwychodzenia.

Jeśli usuniesz wskazany plik, usuniesz HISTFILEtę zmienną i bashwyjdziesz, sesja powłoki nie pozostawi żadnej trwałej historii.

Nieustawienie HISTFILEzmiennej, ale usunięcie pliku po prostu opróżniłoby trwałą historię, ale historia bieżącej sesji zostałaby zapisana po wyjściu powłoki.

Kusalananda
źródło
3
A history -c; history -wwyczyści zarówno pamięć, jak i historię plików. Wyłączenie HISTFILE jest wymagane tylko wtedy, gdy do historii nie powinny być rejestrowane żadne dalsze polecenia (nie dokładnie to, o co proszono IMhO).
Izaak
-1

„Jak mogę naprawdę usunąć moją historię bashów?”

Wyjdź z bash, uruchom inną powłokę, usuń plik historii bash.

lub

wyloguj się, zaloguj się na inne konto, które ma uprawnienia do zapisu w pliku historii, usuń plik historii.

użytkownik
źródło
-2

Opuszczając muszlę, zrób to wszystko za jednym razem, jak

echo "" > ~/.bash_history && history -c && exit
użytkownik853069
źródło
@roaima, masz całkowitą rację, dziękuję. Poprawione
user853069,