# Bash Command History

Once upon a time, a user asked Linux where can I find my bash command history. Linux replied `cat .bash_history` in your root directory.

***User:*** On executing, saw so many commands and asked how many will you store.

***Linux:*** It depends on the environment variable `HISTFILESIZE`

***User:*** `echo $HISTFILESIZE`, it gave `2000`. Getting curious and asking how can I run a specific command from my history?

***Linux:*** Executing `history` will get you to command history with line numbers. You can execute a command at a specific line with the syntax `!<line-number>` example: `!4`

```bash
@user:~$ history
 1  apt get update
 2  apt-get update
 3  sudo apt-get update
 4  sudo apt install nmap
 5  ifconfig
 6  sudo apt install net-tools
 7  ifconfig
 8  sudo nmap -sp 172.22.52.*
 9  sudo nmap -sP 172.22.52.*
 10  ls

@user:~$ !10
ls
example.sh generated_files
```

* The amount of commands stored in history is managed by the environment variable `HISTSIZE`
    
* Use `!!` to execute the last command
    
* `!-2` will execute the command which was executed before the last 2 command executions. You can change the number and play with it.
    
* `!<command_name>` will execute the last execution of the command provided eg: `!cat` will execute the last cat command that you ran. If you just want to print the command to the console and not execute it use `!<command_name:p>` eg: `!cat:p` will log to the terminal the complete cat command that you executed last time.
    

***User:*** Is there any way to search for a command in bash history?

***Linux:*** `ctrl+r` brings up the search, start typing a command to search for it, once you get the command you are looking for press enter or `ctrl+p` to execute it. You can also leave the search by using `ctrl+g`

***User:*** Hey I accidentally executed some commands which I shouldn't have, how to delete them from history?

***Linux:*** I know you will do that! use `history -d <line-number>` to delete a specific command with the line number from history eg: `history -d 10` will remove 10th command that you executed in history. You can also delete the entire history by using `history -c`.

***User:*** That's a lot of info, let me practice a few.

***Linux:*** As if you are going to.. with a sarcastic smile!

Linux will return.
