We’ve discussed command line history before, with a post that shows how to ensure that multiple simultaneous shell sessions use the same
history file, and how to keep commands out of the history. In this post, we look at how to search the history file.
Saving For The Future
The first thing is to ensure that sufficient commands are retained by the shell. There are two environment variables that control this,
HISTSIZE, and they are a source of some confusion.
HISTSIZEdetermines the maximum number of commands that are held in memory for the current shell.
HISTFILESIZEdetermines the maximum number commands that are stored in the history file on disk, and are thus persistent between shell sessions.
The history file is truncated, if necessary, to
HISTFILESIZE number of commands both at shell invocation and when the history file is written to disk. If
HISTFILESIZE is not set, the shell sets it to the value of
The simple answer is to set
HISTSIZE only. Setting it to zero will cause no history to be saved, while setting it to a negative value will cause all history to be saved. A positive number, of course, will cause that number of commands to be saved.
Searching The Past
One way of searching history is by typing
^R to the shell prompt. Whatever is typed next will be interactively searched for in the history, and the most recent matching command will be shown. Hitting return will (re-)execute that command. If the command that is auto-completed from history is the wrong one, another
^R will search back for the next match.
Another history search can be bound to (for example) the
Page Up and
Page Down keys, and requires the following to be in
# map "page up" and "page down" to search the history "\e[5~": history-search-backward "\e[6~": history-search-forward
If you now type the start of a previous command and press
Page Up, the shell will auto-complete with the last command that started with the string typed. Pressing
Page Up again will search back for the next match.
Don’t overlook the other way of searching history:
grep. Can’t remember how to tag a
git commit, but know you’ve done it before?
$ grep ^git ~/.bash_history | grep tag git tag 2017120500 git push origin --tags
Was This TechTip Useful?
Let us know in the comments below.