One of the most powerful tool to speed up productivity while working in a terminal setting has been the
command. Some of you may have used
history command to find other commands you would have executed in the past.
For folks who have not used it -
history command basically shows all the executed commands on that machine. My
motivation to write this article comes from my discussions with Engineers who often come back telling me they
could’nt find certain commands they had executed in
history. This article explains a few settings one can configure
to make the
history command work better for you in your local & production setting.
> history history: usage: history [-c] [-d offset] [n] or history -awrn [filename] or history -ps arg [arg...]
- shows the history size setting
> echo $HISTSIZE
- shows the history file size setting
> echo $HISTFILESIZE
- shows the history time format setting
> echo $HISTTIMEFORMAT
- shows the history ignore setting
> echo $HISTIGNORE
- shows the history file location
> echo $HISTFILE
- shows the history ingestion control settings
> echo $HISTCONTROL
show terminal history
> history . . 493 history 494 clear 495 ls 496 whoami 497 ls -alrt 498 ls 499 which brew 500 history
set history size
> export HISTSIZE=1000 # this will store 1000 commands > export HISTFILESIZE=1000
HISTSIZEis the number of lines or commands that are stored in memory in a history list while your bash session is ongoing.
HISTFILESIZEis the number of lines or commands that (a) are allowed in the history file at startup time of a session, and (b) are stored in the history file at the end of your bash session for use in future sessions.
set history format
> export HISTTIMEFORMAT='%F %T ' > history . . 493 2018-06-12 08:57:13history 494 2018-06-12 08:57:28clear 495 2018-06-12 08:57:28ls 496 2018-06-12 08:57:31whoami 497 2018-06-12 08:57:34ls -alrt 498 2018-06-12 08:57:35ls 499 2018-06-12 08:57:40which brew 500 2018-06-12 08:57:42history
%Fis equivalent to
%Y - %m - %d
%Tis equivalent to
( %H : %M : %S )
set history control
> export HISTCONTROL=ignoredups # this will ignore duplicates while displaying results > export HISTCONTROL=excludedups # this will not store duplicate commands
set history ignore
> export HISTIGNORE='ls -l:pwd:date:' # this will not store `ls -l` / `pwd` / `date` in the history file
show history file location
> echo $HISTFILE # this will show the location of the current terminal's history file
> history -c
disable storing anything in history
> export HISTSIZE=0
filter on history output
> history | grep "ls"
Some settings above can be added to your
.bashrc that way you wouldn’t have to set or unset any of those variables.
Also for production boxes I strongly recommend to disable
history for immutable infrastructure. If you are running a
mutable infrastructure - I would recommend you to have good filters on
history to not store
These safety settings can be achieved with a few tweaks to the example section items.