Jak całkowicie wyczyścić historię bash?


254

Chcę usunąć wszystkie poprzednie polecenia z historii mojego serwera. Użyłem history -ci wydaje się, że wszystko zostało wyczyszczone, ale kiedy ssh do serwera, wszystkie polecenia są nadal dostępne.

Jak mogę je trwale usunąć?

Odpowiedzi:


332

Plik ~/.bash_historyzawiera historię.

Aby całkowicie wyczyścić historię bash na serwerze, otwórz terminal i wpisz

cat /dev/null > ~/.bash_history

Innym alternatywnym sposobem jest link ~/.bash_historydo/dev/null

Jednak,

Jednym irytującym efektem ubocznym jest to, że wpisy historii mają kopię w pamięci i po wylogowaniu opróżniają się z powrotem do pliku .

Aby obejść ten problem, użyj następującego polecenia (działało dla mnie):

cat /dev/null > ~/.bash_history && history -c && exit

17
powyższą komendę możesz również umieścić w .bashrc i .bash_logout. co to znaczy, kiedy się zalogujesz, będziesz miał czystą historię, a kiedy się wylogujesz, twoja historia zostanie wyczyszczona
Qasim

26
Dlaczego potrzebujesz / dev / null? Nie > ~/.bash_hstorywystarczyłoby?
konfigurator

4
tak, wystarczyłoby!
fromnaboo

3
Próbowałem to zrobić na pudełku malinowym podczas połączenia przez SSH. Dodałem powyższe polecenie (cat / dev / null> ~ / .bash_history && history -c && exit) do obu .bashrc i .bash_logout, zgodnie z sugestią @Qasim. Teraz, jak tylko połączę się przez SSH, zdalny host zamyka połączenie (po wydrukowaniu motd). Pomoc: /
Zaawansowane

14
Pokazuje, co dzieje się, gdy ślepo robisz rzeczy bez prawidłowego czytania i bez zrozumienia przetwarzania i przepływu danych. Pokazuje także pułapki złej komunikacji. To, co zrobiło devav2, uruchomiło go raz, a Qasim powinien był napisać, aby usunąć polecenie wyjścia przed dodaniem go do skryptu logowania.
Sri

141

Co robić:

W każdej otwartej powłoce bash (możesz mieć wiele otwartych terminali):

history -c
history -w

Dlaczego: Jak wspomniano powyżej, history -copróżnia plik ~/.bash_history. Należy zauważyć, że powłoka bash nie od razu opróżnia historię do pliku bash_history. Dlatego ważne jest (1) opróżnienie historii do pliku i (2) wyczyszczenie historii we wszystkich terminalach . To właśnie robią powyższe polecenia.

Odniesienie: http://www.giannistsakiris.com/index.php/2007/09/13/how-to-clear-bash-history-and-what-to-watch-out-for/


3
W rzeczywistości działało dla mnie na odwrót.
kristianp

24
W wielu przypadkach można połączyć te dwa polecenia razem:history -cw
Elliot

2
Z jakiegoś powodu nie działa to na Ubuntu 14.04, prawdopodobnie na innych. Powinno, ale tak nie jest. Jeśli wydasz polecenie „history -cw”, możesz potwierdzić strzałką w górę, że historii już tam nie ma, ale jeśli uruchomisz inne okno terminala (w Unity desktop), naciśnij Shift + kliknij ikonę terminala (mam ją przypięte w programie uruchamiającym) historia poleceń powróciła, bez względu na to, ile razy wykonujesz „history -cw”. „cat / dev / null> ~ / .bash_history” to jedyny sposób, który działał dla mnie.
Hatoru Hansou,

Chociaż nie jestem Ubantu, działa dobrze dla mojej powłoki bash w OSX.
Scott Biggs,

3
Jest to historia -c, a następnie historia -w, najpierw wyczyścisz historię, a następnie zapiszesz zmiany. Można to łatwo potwierdzić, zamykając terminal i otwierając go ponownie, z -w najpierw komendy są tam ponownie, z -w ostatnia historia jest skutecznie czyszczona.
Hatoru Hansou

56

wykonaj następujące polecenia, aby na zawsze wyczyścić historię

history -c && history -w

powodzenia!


3
Znacznie lepiej niż zaakceptowana odpowiedź. ;)
Chiramisu

Ta odpowiedź byłaby jeszcze bardziej pomocna, gdyby wyjaśniła, co robią te flagi (a zatem dlaczego / kiedy są to właściwe polecenia do użycia).
LarsH

20

Jest jeszcze jeden o wiele prostszy: history -cw wierszu polecenia znikają wszystkie wpisy w bash_historypliku.


Nie, nie jest. Wyloguj się, zaloguj, strzałka daje mi wszystko. Potrzebujesz także „historii -w”.
Stolsvik,

1
Jeśli przeczytasz pytanie PO, będziesz wiedział, że użycie history -cjest dokładną metodą, która doprowadziła do tego pytania.
J.Money

10

Innym sposobem na to jest usunięcie ~/.bash_historypliku za pomocą rm ~/.bash_historypolecenia. Przy kolejnym logowaniu .bash_historyplik zostanie utworzony automatycznie.


4
Przynajmniej w niektórych systemach operacyjnych ~ / .bash_history jest zapisywana na dysk po wylogowaniu - Nie jestem pewien * buntus.
d -_- b

7

Wyczyść historię bieżącej powłoki:

history -c

Po wylogowaniu historia bieżącej powłoki jest dołączana do ~ / .bash_history, która jest pamięcią podręczną historii poprzednich powłok, do maksymalnej liczby (patrz HISTFILESIZE w „man bash”).

Jeśli chcesz całkowicie usunąć historię, zasadniczo musisz opróżnić ~ / .bash_history, co sugeruje wiele powyższych wpisów. Jak na przykład:

history -c && history -w

Spowoduje to wyczyszczenie historii bieżącej powłoki, a następnie zmusi historię bieżącej powłoki (pustą) do zastąpienia ~ / .bash_history .... lub, aby być bardziej dokładnym, zmusi ją do zastąpienia HISTFILE (domyślnie ~ / .bash_history).

Mam nadzieję że to pomoże.


4
Twoja odpowiedź jest dokładna, ale pytanie miało dwa lata, zaakceptowało odpowiedzi i zawierało tę samą odpowiedź, którą udzieliłeś.
Charles Green,

6
rm ~/.bash_history; history -c; logout

Zaloguj się ponownie i bądź świadkiem, że twoja strzała nic ci nie daje.


1
@KasiyA Chodzi o serwer i sesję ssh, więc nie trzeba edytować ...
Radu Rădeanu,

0

Spróbuj tego

edytuj swój .profilei dodaj poniższy wiersz na końcu pliku

rm -f .bash_history

w ten sposób za każdym razem, gdy się zalogujesz, automatycznie usunie Twój plik .bash_history. Dodanie opcji -r rekurencyjnego usuwania wydaje się niebezpieczne i nie jest potrzebne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.