How To Use History: A Practical Guide To Mastering Your Command-line History

15 July 2026, 01:20

The `history` command is one of the most powerful yet underutilized tools in the command-line interface. It tracks every command you execute, allowing you to recall, reuse, and refine your work. This guide will show you how to harness `history` effectively, from basic recall to advanced customization.

The `history` command displays a numbered list of previously executed commands. By default, most shells (Bash, Zsh, etc.) store the last 500 to 1000 commands in a file called `.bash_history` or `.zsh_history` in your home directory.

1. View your history Simply type `history` to see the last commands. Each entry is prefixed with a number.

2. Limit the output Use `history 20` to show only the most recent 20 commands. This is useful when you want a quick glance without scrolling.

3. Search with grep Combine `history` with `grep` to find specific commands: `history | grep "git commit"` This will list all commands containing "git commit".

Once you identify a command's number, you can rerun it instantly:

  • `!123` – Executes command number 123
  • `!!` – Repeats the last command (useful after a permission error: `sudo !!`)
  • `!-3` – Runs the command three steps back
  • Tip: Always verify the command before execution. Use `:p` to preview: `!123:p` prints the command without running it.

  • `!git` – Runs the most recent command starting with "git"
  • `!?commit?` – Runs the last command containing "commit" anywhere
  • Caution: This can be dangerous if you haven't reviewed the matched command. Use `!?commit?:p` to preview first.

    Press `Ctrl+R` to enter reverse search mode. Start typing a partial command, and the shell will show the most recent match. Press `Ctrl+R` again to cycle through older matches. Press `Enter` to execute or `Esc` to exit.

    Pro tip: In Zsh, you can use `Ctrl+S` for forward search if you enable it with `stty -ixon`.

    Edit your shell configuration file (`~/.bashrc` or `~/.zshrc`) to set limits:

    ```bash export HISTSIZE=10000 # Commands kept in memory export HISTFILESIZE=20000 # Commands saved to file export HISTFILE=~/.my_history # Custom history file location ```

    Add this to your configuration to ignore commands starting with a space:

    ```bash export HISTCONTROL=ignorespace ```

    Now, any command prefixed with a space (e.g., ` mysecretcommand`) will not be saved.

    To prevent consecutive duplicate entries:

    ```bash export HISTCONTROL=ignoredups ```

    For no duplicates at all (consecutive or not):

    ```bash export HISTCONTROL=erasedups ```

    By default, when you close a shell, it overwrites the history file. To append instead:

    ```bash shopt -s histappend ```

    This ensures you don't lose history from other terminal sessions.

    Add timestamps to see when commands were executed:

    ```bash export HISTTIMEFORMAT="%F %T " ```

    Now `history` will show dates and times.

    You ran a complex command that failed. Instead of retyping:

    1. Press `Ctrl+R` and type part of the command 2. Press `Enter` to rerun, or edit it first 3. Use `!?keyword?` to repeat the exact version

    Need to turn a series of commands into a script?

    1. Run `history | grep "your pattern" > myscript.sh` 2. Edit the file to remove line numbers and add logic 3. Test with `bash myscript.sh`

    Use `history | tail -5` to export recent commands. Remove numbers with `cut -c8-`:

    ```bash history | tail -5 | cut -c8- > shared_commands.txt ```

    Solution: Set `shopt -s histappend` and increase `HISTSIZE`. Also, use `history -a` to append the current session's history immediately.

    Solution: Always use `:p` to preview before executing `!` commands. Alternatively, use `Ctrl+R` which shows the command before execution.

    Solution: Regularly backup your history file. You can also use `history -w` to force a write and `history -r` to reload.

    Solution: Use `history -c` to clear the current session's history, then `history -w` to overwrite the file. For selective removal, edit the history file directly with a text editor.

    Create a cron job or alias to trim old entries:

    ```bash alias history_clean="cat ~/.bash_history | tail -n 5000 > ~/.bash_history" ```

    Maintain a separate file for reusable commands:

    ```bash echo "your_valuable_command" >> ~/.custom_commands ```

    Then source it when needed: `source ~/.custom_commands`

    Add this to your shell configuration for real-time sharing:

    ```bash

    Share history across terminals

    export PROMPT_COMMAND="history -a; $PROMPT_COMMAND" ```

    This writes each command to the history file immediately after execution.

  • Create aliases for frequent history operations:
  • `alias h='history | tail -20'` `alias hg='history | grep'`
  • Use `fc` (fix command) for advanced editing: `fc 123` opens command 123 in your default editor.
  • Leverage history expansion modifiers: `!$` refers to the last argument of the previous command, `!:2` to the second argument.
  • Combine with other commands: `history | awk '{print $2}' | sort | uniq -c | sort -rn | head` shows your most used commands.
  • By mastering `history`, you transform your command line from a simple tool into a powerful productivity engine. Start with the basics, gradually adopt the advanced features, and soon you'll wonder how you ever worked without them.

    Products Show

    Product Catalogs

    WhatsApp