Как полностью очистить историю Bash?

254

Я хочу удалить все предыдущие команды из истории моего сервера. Я использовал, history -cи кажется, что все очищено, но когда я ssh к серверу, все команды все еще там.

Как я могу очистить их навсегда?

HD.
источник

Ответы:

332

Файл ~/.bash_historyсодержит историю.

Чтобы полностью очистить историю bash на сервере, откройте терминал и введите

cat /dev/null > ~/.bash_history

Другим альтернативным способом является ссылка ~/.bash_historyна/dev/null

Тем не мение,

Одним раздражающим побочным эффектом является то, что записи истории имеют копию в памяти, и она выйдет обратно в файл при выходе из системы .

Чтобы обойти это, используйте следующую команду (работал для меня):

cat /dev/null > ~/.bash_history && history -c && exit
devav2
источник
17
Вы также можете поместить вышеуказанную команду в .bashrc & .bash_logout. что это значит, когда вы входите в систему, у вас будет чистая история, а когда вы выйдете из системы, ваша история будет очищена
Qasim
26
Зачем вам нужен / dev / null там? Не > ~/.bash_hstoryбудет достаточно?
конфигуратор
4
да этого было бы достаточно!
fromnaboo
3
Я попытался сделать это на коробке малины при подключении через SSH. Я добавил вышеупомянутую команду (cat / dev / null> ~ / .bash_history && history -c && exit) к обоим .bashrc & .bash_logout, как предложено @Qasim. Теперь, как только я подключаюсь через SSH, удаленный хост закрывает соединение (после печати motd). Справка: /
Advanced
14
Показывает, что происходит, когда вы слепо делаете вещи, не читая правильно и не понимая обработки и потока данных. Это также показывает ловушки плохого общения. Что devav2 сделал, так это запустил его один раз, и то, что Qasim должен был написать, это удалить команду выхода перед добавлением ее в сценарий входа в систему.
Шри
142

Что делать:

В каждой открытой оболочке bash (у вас может быть открыто несколько терминалов):

history -c
history -w

Почему: как отмечено выше, history -cфайл очищается ~/.bash_history. Важно отметить, что оболочка bash не сразу сбрасывает историю в файл bash_history. Поэтому важно (1) сбросить историю в файл и (2) очистить историю во всех терминалах . Это то, что делают команды выше.

Ссылка: http://www.giannistsakiris.com/index.php/2007/09/13/how-to-clear-bash-history-and-what-to-watch-out-for/

callpraths
источник
3
На самом деле, наоборот, у меня получилось.
Кристианп
24
Во многих случаях вы можете объединить эти две команды вместе:history -cw
Elliot
2
По некоторым причинам это не работает на Ubuntu 14.04, возможно, другие. Это должно, но это не так. Если вы введете команду «history -cw», вы можете подтвердить стрелкой вверх, что истории больше нет, но если вы запустите другое окно терминала (на рабочем столе Unity) с помощью shift +, нажмите на значок терминала (у меня это есть) закреплен в лаунчере) история команд вернулась, неважно сколько раз вы делаете "history -cw". "cat / dev / null> ~ / .bash_history" - единственный способ, который сработал для меня.
Hatoru Hansou
Хотя я не Ubantu, отлично работает для моей оболочки Bash в OSX.
Скотт Биггс
3
Это история -c, а затем история -w, сначала вы очищаете историю, а затем записываете изменения. Это легко подтвердить, закрыв терминал и открыв его снова, с -w сначала команды снова будут там, с -w, последняя история эффективно очищается.
Hatoru Hansou
56

выполните следующие команды, чтобы очистить историю навсегда

history -c && history -w

удачи!

Эдвин Хосе
источник
3
Гораздо лучше, чем принятый ответ. ;)
Chiramisu
Этот ответ был бы еще более полезным, если бы он объяснил, что делают эти флаги (и, следовательно, почему / когда они являются правильными командами для использования).
LarsH
20

Есть еще один, гораздо более простой history -cспособ: все запросы в bash_historyфайле выполняются в терминале и исчезают .

Питер Эйландер
источник
Нет это не так. Выйти, войти, стрелка вверх дает мне все. Тебе тоже нужна история -w.
stolsvik
1
Если вы прочитаете вопрос ОП, вы поймете, что использование history -c- это именно тот метод, который привел к этому вопросу.
J.Money
10

Еще один способ сделать это - удалить ~/.bash_historyфайл с помощью rm ~/.bash_historyкоманды. Когда вы войдете в другой раз, .bash_historyфайл будет создан автоматически.

Анвар
источник
4
По крайней мере, в некоторых ОС ~ / .bash_history записывается на диск при выходе из системы - не уверен насчет * buntus.
d -_- b
7

Очистить текущую историю оболочки:

history -c

Когда вы выходите из системы, история вашей текущей оболочки добавляется к ~ / .bash_history, который является кешем историй предыдущих оболочек, к максимальному числу (см. HISTFILESIZE в "man bash").

Если вы хотите полностью удалить историю, то вам, по сути, нужно очистить ~ / .bash_history, что предложили многие из приведенных выше записей. Такие как:

history -c && history -w

Это очищает историю текущей оболочки, а затем заставляет историю текущей оболочки (пустую) перезаписывать ~ / .bash_history .... или, чтобы быть более точным, оно заставляет ее перезаписывать HISTFILE (по умолчанию ~ / .bash_history).

Надеюсь это поможет.

mobiGeek
источник
4
Вы отвечаете точно, но вопрос был двухлетним, он принял ответы и включал в себя тот же ответ, который вы дали.
Чарльз Грин
6
rm ~/.bash_history; history -c; logout

Теперь войдите в систему и убедитесь, что ваша стрела не дает вам ничего.

stolsvik
источник
1
@KasiyA Речь идет о сервере и ssh-сессии, так что редактировать не нужно ...
Раду Рэдяну
0

Попробуй это

отредактируйте свой .profileи добавьте строку ниже в конце файла

rm -f .bash_history

Таким образом, каждый раз, когда вы входите в систему, он автоматически удаляет ваш файл .bash_history. Добавление опции -r рекурсивного удаления кажется опасным и ненужным.

Смешанная IT Prof
источник