Notes on bash history Revision as of Monday, 21 December 2015 at 02:30 UTC
There are three totally wonderful things you can do to enhance the
utility of your .bash_history
file. Add this block to your .bashrc
:
# Keep 10,000 commands worth of history
export HISTSIZE=10000
# Make 10,000 lines more awesome by erasing duplicate commands
export HISTCONTROL=erasedups
# Don't lose command history from across many sessions
shopt -s histappend
By itself, the last option appends that particular bash process’ history
to .bash_history
at the end of the session. But combined with the
HISTCONTROL
option, it’s more like an intelligent ‘merge’ than a
senseless append. Neato! Recursive searches with Ctrl + r
will be
much better from now.
Other stuff you could do
To see your history file, you can either vi
it like a caveman, or be a
hip 80s dude by issuing this:
history
Here’s sample (truncated) output:
873 cat smbd.log
874 service smb status
875 netstat -tulpn
884 find /media/pool02/asap -type d | sort | grep '\<[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}\>'
891 eval ssh tigris "df -h" | grep -c / | sed "s/./ &/g"
902 date
Now I can just run that long find
command by merely issuing:
!884
You can actually merge histories across two or more ’live’ sessions by
hand:
history -a; history -n
I’ve read of people having this happen automagically by setting the
PROMPT_COMMAND
variable to the snippet above. Setting this variable
executes its value before each new prompt.
PROMPT_COMMAND="history -a; history -n"
history -a
appends local history changes to.bash_history
history -n
fetches changes from.bash_history
This has not worked for me on CentOS; YMMV.
Clearing History
history -c && rm -f ~/.bash_history
This is because bash
stores history in memory and in a file.
History with Timestamps
export HISTTIMEFORMAT="%F %T "