We frequently use the history command in our daily routine jobs to check the history of commands or to get information about commands executed by users.
In this post, we will see how we can use the history command effectively to extract the commands that were executed by users in the Bash shell. This may be useful for audit purposes or to find out which command was executed at a specific date and time.
By default, the date and timestamp won’t be visible when executing the history command. However, the bash shell provides command-line interface (CLI) tools for editing the user’s command history.
Let’s explore some useful tips, tricks, and the power of the history command.
1. List All Last Executed Commands in Linux
To view the complete list of the last executed commands along with their line numbers, use the following command.
history
2. List All Commands with Date and Timestamp
To list all commands with their date and timestamp in Linux, you can use the history command along with the HISTTIMEFORMAT environment variable as shown.
export HISTTIMEFORMAT="%F %T "
Now, you can use the history command to list all the commands with their respective date and timestamps.
history
Here’s a breakdown of the format placeholders used in HISTTIMEFORMAT='%F %T '
:
%F
: This signifies the full date in the format “YYYY-MM-DD“.%T
: This represents the time in the format “HH:MM:SS“.
3. Ignore Commands in History
To ignore a command in the history command, you can use the "HISTIGNORE"
environment variable, which is used to specify which commands should not be recorded in the command history.
You can set it by using the "export"
command followed by the desired command to be ignored.
export HISTIGNORE='ls -l:pwd:date:'
In this example, “ls -l“, “pwd“, and “date” are specified, meaning that any commands containing these strings will not be saved in the history.
4. Ignore Duplicate Commands in History
To ignore duplicate commands in history, you can use the following command which will instruct the system to not save repeated commands in the history, which will helps in keeping the history clean and free of redundant duplicate entries.
export HISTCONTROL=ignoredups
The option ignoredups
tells the system to ignore duplicate commands when recording them in the history. If you execute the same command multiple times consecutively, only the first occurrence will be stored in the history.
5. Save Export Command Permanently
To save the configurations for HISTTIMEFORMAT
, HISTIGNORE
, and HISTCONTROL
permanently in your Linux environment, you can add them to your .bash_profile
file, which is executed every time you start a new shell session.
nano ~/.bash_profile
Add the following lines to the .bash_profile file to set the environment variables:
export HISTTIMEFORMAT="%F %T " export HISTIGNORE="some:commands:to:ignore" export HISTCONTROL=ignoredups
To apply the changes, either restart your terminal or run the following command in the terminal:
source ~/.bash_profile
6. Unset Export Command
To unset the settings for HISTTIMEFORMAT
and HISTCONTROL
environment variables, you can use the unset command to remove their values, which will revert these settings to their default configurations.
unset HISTTIMEFORMAT unset HISTCONTROL
After executing these commands, the timestamp display in the command history will revert to the default setting, and duplicate commands will no longer be filtered out automatically.
7. List Specific User’s Executed Commands
To list specific user’s executed commands, you can use the .bash_history
file of the user, which stores the history of commands executed in the Bash shell.
sudo cat /home/username/.bash_history
If you want to filter the command history based on a specific pattern, use the grep command along with the commands containing the word as shown.
sudo cat /home/username/.bash_history | grep "ls"
8. Disable Storing History of Commands
To disable the storing of command history in Linux, you can unset the HISTFILE
variable, which is responsible for maintaining the history of commands in a file.
unset HISTFILE
By unsetting the HISTFILE
variable, you prevent the system from storing command history, ensuring that commands executed in the terminal are not recorded for future sessions.
It’s important to note that this change will only apply to the current session and will not persist across different terminal sessions. If you want to make this change permanent, you can consider updating your shell’s configuration .bash_profile
file to unset the HISTFILE
variable upon each login.
9. Delete or Clear History of Commands
You can use the up and down arrow keys to see previously used commands, which can be helpful or annoying. To delete or clear all the entries from the bash history list, you can use the '-c'
option.
history -c
To clear the command history for all users, you can delete or truncate the history file located at /home/[username]/.bash_history
for each user.
> /home/[username]/.bash_history OR rm /home/[username]/.bash_history
10. Search Commands in History Using Grep Command
To filter commands in the history command output, you can use the grep command, which will only display the commands from the history that contain the keyword as shown.
history | grep "ls" history | grep "pwd" history | grep "date"
11. Search for Recent Commands in History
To search for recent commands in the history, you can use the grep command along with containing keyword such as “ssh” from the command history.
history | grep "ssh"
You can also search for previously executed commands using the ‘Ctrl+r'
command. Once you’ve found the command you’re looking for, press ‘Enter‘ to execute it, or press ‘esc‘ to cancel.
(reverse-i-search)`source ': source .bash_profile
12. Recall Last Executed Command in History
To recall the last executed command from a specific position in the command history in Linux, you can use the history command along with a specific line number.
To view the command history with line numbers, use the history command:
history
Next, identify the line number associated with the command you want to recall, in this case, command number 8, and then recall the command using !
followed by the line number as shown.
!8
13. Recall Lastly Executed Specific Command
You can recall a previously used command, such as “netstat -np | grep 22“, by using the '!'
symbol followed by some letters from that command.
For example, if you want to recall the “netstat -np | grep 22” command, you can type '!net'
and press Enter in the terminal, which will execute the most recent command that starts with “net” from your command history.
!net
Conclusion
In conclusion, we’ve shown you the usefulness of the history command, but there’s still more to explore. We’d love to hear about your experiences with the history command!
Share them with us in the comment box below.