1. Display timestamp using HISTTIMEFORMAT
Typically when you type history from command line, it displays the
command# and the command. For auditing purpose, it may be beneficial to
display the timepstamp along with the command as shown below.
# export HISTTIMEFORMAT='%F %T '
# history | more
1 2008-08-05 19:02:39 service network restart
2 2008-08-05 19:02:39 exit
3 2008-08-05 19:02:39 id
4 2008-08-05 19:02:39 cat /etc/redhat-release
2. Repeat previous command quickly using 4 different methods
Sometime you may end up repeating the previous commands for various
reasons. Following are the 4 different ways to repeat the last executed
command.
- Use the up arrow to view the previous command and press enter to execute it.
- Type !! and press enter from the command line
- Type !-1 and press enter from the command line.
- Press Control+P will display the previous command, press enter to execute it
3. Control the total number of lines in the history using HISTSIZE
Append the following two lines to the .bash_profile and relogin to
the bash shell again to see the change. In this example, only 450
command will be stored in the bash history.
# vi ~/.bash_profileHISTSIZE=450
HISTFILESIZE=450
4. Change the history file name using HISTFILE
By default, history is stored in ~/.bash_history
file. Add the following line to the .bash_profile and relogin to the
bash shell, to store the history command in .commandline_warrior file
instead of .bash_history file. I’m yet to figure out a practical use
for this. I can see this getting used when you want to track commands
executed from different terminals using different history file name.
# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior
If you have a good reason to change the name of the history file,
please share it with me, as I’m interested in finding out how you are
using this feature.
5. Eliminate the continuous repeated entry from history using HISTCONTROL
In the following example pwd was typed three times, when you do
history, you can see all the 3 continuous occurrences of it. To
eliminate duplicates, set HISTCONTROL to ignoredups as shown below.
# pwd
# pwd
# pwd
# history | tail -4
44 pwd
45 pwd
46 pwd [Note that there are three pwd commands in history, after
executing pwd 3 times as shown above]
47 history | tail -4
# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56 export HISTCONTROL=ignoredups
57 pwd [Note that there is only one pwd command in the history, even after
executing pwd 3 times as shown above]
58 history | tail -4
6. Erase duplicates across the whole history using HISTCONTROL
The ignoredups shown above removes duplicates only if they are
consecutive commands. To eliminate duplicates across the whole history,
set the HISTCONTROL to erasedups as shown below.
# export HISTCONTROL=erasedups
# pwd
# service httpd stop
# history | tail -3
38 pwd
39 service httpd stop
40 history | tail -3
# ls -ltr
# service httpd stop
# history | tail -6
35 export HISTCONTROL=erasedups
36 pwd
37 history | tail -3
38 ls -ltr
39 service httpd stop
[Note that the previous service httpd stop after pwd got erased]
40 history | tail -6
7. Force history not to remember a particular command using HISTCONTROL
When you execute a command, you can instruct history to ignore the
command by setting HISTCONTROL to ignorespace AND typing a space in
front of the command as shown below. I can see lot of junior sysadmins
getting excited about this, as they can hide a command from the
history. It is good to understand how ignorespace works. But, as a best
practice, don’t hide purposefully anything from history.
# export HISTCONTROL=ignorespace
# ls -ltr
# pwd
# service httpd stop [Note that there is a space at the beginning of service,
to ignore this command from history]
# history | tail -3
67 ls -ltr
68 pwd
69 history | tail -3
8. Clear all the previous history using option -c
Sometime you may want to clear all the previous history, but want to keep the history moving forward.
# history -c
9. Subtitute words from history commands
When you are searching through history, you may want to execute a
different command but use the same parameter from the command that
you’ve just searched.
In the example below, the !!:$ next to the vi command gets the argument from the previous command to the current command.
# ls anaconda-ks.cfg
anaconda-ks.cfg
# vi !!:$
vi anaconda-ks.cfg
In the example below, the !^ next to the vi command
gets the first argument from the previous command (i.e cp command) to
the current command (i.e vi command).
# cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
# vi !^
vi anaconda-ks.cfg
10. Substitute a specific argument for a specific command.
In the example below, !cp:2 searches for the
previous command in history that starts with cp and takes the second
argument of cp and substitutes it for the ls -l command as shown below.
# cp ~/longname.txt /really/a/very/long/path/long-filename.txt
# ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt
In the example below, !cp:$ searches for the
previous command in history that starts with cp and takes the last
argument (in this case, which is also the second argument as shown
above) of cp and substitutes it for the ls -l command as shown below.
# ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt
11. Disable the usage of history using HISTSIZE
If you want to disable history all together and don’t want bash
shell to remember the commands you’ve typed, set the HISTSIZE to 0 as
shown below.
# export HISTSIZE=0
# history
# [Note that history did not display anything]
12. Ignore specific commands from the history using HISTIGNORE
Sometimes you may not want to clutter your history with basic
commands such as pwd and ls. Use HISTIGNORE to specify all the commands
that you want to ignore from the history. Please note that adding ls to
the HISTIGNORE ignores only ls and not ls -l. So, you have to provide
the exact command that you would like to ignore from the history.
# export HISTIGNORE="pwd:ls:ls -ltr:"
# pwd
# ls
# ls -ltr
# service httpd stop
# history | tail -3
79 export HISTIGNORE="pwd:ls:ls -ltr:"
80 service httpd stop
81 history
[Note that history did not record pwd, ls and ls -ltr]
No comments:
Post a Comment