As I spend more and more time in terminal sessions, it feels like I'm continually finding new commands that make my daily tasks more efficient. The GNU history command is one that really changed my work day. The GNU history command keeps a list of all the other commands that have been run from that terminal session, then allows you to replay or reuse those commands instead of retyping them. If you are an old greybeard, you know about the power of history, but for us dabblers or new sysadmin folks, history is an immediate productivity gain.
To see history in action, open a terminal program on your Linux installation and type:
Here's the response I got:
The history command shows a list of the commands entered since you started the session. The joy of history is that now you can replay any of them by using a command such as:
The !3 command at the prompt tells the shell to rerun the command on line 3 of the history list. I could also access that command by entering:
You can also use history to rerun the last command you entered by typing !!. And, by pairing it with grep, you can search for commands that match a text pattern or, by using it with tail, you can find the last few commands you executed. For example:
Another way to get to this search functionality is by typing Ctrl-R to invoke a recursive search of your command history. After typing this, the prompt changes to:
Now you can start typing a command, and matching commands will be displayed for you to execute by pressing Return or Enter.
Changing an executed command
history also allows you to rerun a command with different syntax. For example, if I wanted to change my previous command history | grep dnf to history | grep ssh, I can execute the following at the prompt:
history will rerun the command, but replace dnf with ssh, and execute it.
There may come a time that you want to remove some or all the commands in your history file. If you want to delete a particular command, enter history -d
There are a number of other things that you can do with history:
For more information about the history command and other interesting things you can do with it, take a look at the GNU Bash Manual.