In this series, we have looked at so many commands with their different syntaxes and options, and it's very very hard to remember each and every one of them.
So, today we are going to have a look at a command which allows us to have a look at all the commands that we have used previously and use them again.
By the title, you would have already guessed what the command is, right?
It's history
command!!
The first question we have is, what is the use of history
command?
The history
command is used to view all the previously executed commands.
Why do we need history command?
The main use of history is to find an already executed command and use it again.
It can also be used for audit purposes or to find out what command was executed at a specific date and time.
Now, without wasting any more time let's get started
- To get all the commands we have previously executed
To use the history
command we simply type history and press ENTER
As soon as we press ENTER we get the list of all the commands.
By default, the bash used to store around 500 commands in the history but nowaday's the limit has gone up to 1000 commands.
To make the scrolling of commands a little easier we can use the history
command along with the less
command i.e. history | less
.
But, what if we wanted to find only the last 10 commands
- List the last 10 commands that we executed
In the above example, we used the command history
along with the number of commands we wanted to have a look at.
Note: The above syntax i.e. history {number}
will not work with zsh because in zsh, history
is an alias for fc -l 1
, so when you do history 10
it gets replaced by fc -l 1 -10
which just won't work, so instead use fc
directly: fc -l -10
.
Now, what if we want to list them along with the time
In the above example, we first used the command
$ HISTTIMEFORMAT="%d/%m/%y %T "
which is used to set the time format day/month/year timestamp
After the format is set we used the command history
to get the desired results.
Note: For zsh we just need to use history -i
to get the same results.
What if we wanted to find the history of all the times we used a specific command?
In the above example, we used the command history| grep man
to get all the times we have used the man
command
Till now we have seen different way's to get the commands.
But what if we wanted to use these commands.
For starters, what if after looking through history we found out the command we want to use has the x serial number. How will we use it?
So let's see how we can use the commands from our history
- use a command on the serial number 1343
In the above example, we used !1343
to execute the command at the respective serial number.
But this can land us into a lot of trouble if we typed the wrong serial number.
Is there anything we can do to prevent this?
Let's take an example to see how to prevent this
In the above example, we first used the command !1343:p
which returns the command at the number and after verification, we can execute the command.
There is another feature that history provides known as History Expansion
History expansion is a way to recall and edit commands in the history list. The way to recall commands is by the use of event designators.
Command | Description |
---|---|
!! | It refers to the last command |
!-n | It will execute the current number -n command |
!string | It will execute the command referring to the most recent command starting with input string |
!?string | It will execute the most recent command that ends with the input string |
^string1^string2 | Repeat the last command, replacing string1 with string2 |
We can also use !!
to execute the last command but we would rarely use it since we can easily use the up
key instead.
Let's take a few example's to understand better
- find the last
cat
command that was executed and run it
- find the last command performed on "Hello.txt" and perform it again
Similarly, we can use other history expansions as well.
So, this was all about the history keyword and how we can use it.
Hope you understood it and please let me know if there are questions and suggestions down below.
See you in the sunny papers :)
Top comments (2)
!!
is very useful if you forget sudo when running a command, so you can just dosudo !!
Useful article. Thanks.