392

I want to clear all previous commands from the history of my server. I used history -c and it seems all things are cleared but when I ssh to the server, all the commands are still there.

How can I clear them permanently?

Zanna
  • 72,312
hd.
  • 4,087

9 Answers9

522

The file ~/.bash_history holds the history.

To clear the bash history completely on the server, open terminal and type

cat /dev/null > ~/.bash_history

Other alternate way is to link ~/.bash_history to /dev/null

However,

One annoying side-effect is that the history entries has a copy in the memory and it will flush back to the file when you log out.

To workaround this, use the following command (worked for me):

cat /dev/null > ~/.bash_history && history -c && exit
devav2
  • 37,290
223

What to do:

In every open bash shell (you may have multiple terminals open):

history -c
history -w

Why: As noted above, history -c empties the file ~/.bash_history. It is important to note that bash shell does not immediately flush history to the bash_history file. So, it is important to (1) flush the history to the file, and (2) clear the history, in all terminals. That's what the commands above do.

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

Ajedi32
  • 165
  • 1
  • 10
callpraths
  • 2,339
  • 1
  • 13
  • 2
96

execute the following commands to clear history forever

history -c && history -w

good luck!

Eric Carvalho
  • 55,453
19

There's another much simpler one: running history -c on the terminal prompt and gone are all entries in the bash_history file.

Aditya
  • 13,616
12

Clear the current shell's history:

history -c

When you log out, your current shell's history is appended to ~/.bash_history, which is a cache of previous shells' histories, to a maximum number (see HISTFILESIZE in "man bash").

If you want to remove the history altogether, then you essentially have to empty out ~/.bash_history which many of the above entries have suggested. Such as:

history -c && history -w

This clears the current shell's history and then forces the current shell's history (empty) to overwrite ~/.bash_history....or to be more accurate, it forces it to overwrite HISTFILE (which defaults to ~/.bash_history).

Hope this helps.

Greg Fenton
  • 221
  • 2
  • 3
10

Another way to do this is deleting the ~/.bash_history file by using rm ~/.bash_history command. When you login another time, the .bash_history file will be automatically created.

Anwar
  • 77,855
8
rm ~/.bash_history; history -c; logout

Now log back in and witness that your arrow-up doesn't give you anything.

Radu Rădeanu
  • 174,089
  • 51
  • 332
  • 407
stolsvik
  • 385
0

If you want the history not to be saved in the first place, you should add this to your ~/.profile:

unset HISTFILE

That's it.
All new invocations of bash (if you re-login) will not log anything. After that you can delete the old ~/.bash_history file as well if you want.

0

Try this one

edit your .profile and add the line below at the end of the file

rm -f .bash_history

this way, every time you login, it will delete your .bash_history file automatically for you. Adding the -r recursive remove option seems dangerous and not needed.