The history command in Linux, primarily used in the Bash shell, allows users to view, manage, and reuse previously executed commands. Commands are stored in the ~/.bash_history file by default and can be customized through environment variables and shell options. This document provides a comprehensive guide with 10 detailed examples covering setup, formatting, and usage of the command line history, including practical tips and best practices.
Bash history is configured via environment variables and shell options, typically in ~/.bashrc or ~/.bash_profile. These settings control how commands are stored, displayed, and managed. Below are examples to optimize history functionality.
echo 'HISTSIZE=20000' >> ~/.bashrc
echo 'HISTFILESIZE=50000' >> ~/.bashrc
source ~/.bashrc
Purpose: Increases the number of commands stored in memory (HISTSIZE) to 20,000 and in the history file (HISTFILESIZE) to 50,000.
Details: HISTSIZE limits commands held in memory during a session, while HISTFILESIZE limits the ~/.bash_history file size. Large values ensure more commands are retained, useful for frequent terminal users. The source command applies changes immediately.
Sample Output: No output. Verify with echo $HISTSIZE $HISTFILESIZE, which outputs 20000 50000.
echo 'shopt -s histappend' >> ~/.bashrc
echo 'PROMPT_COMMAND="history -a;$PROMPT_COMMAND"' >> ~/.bashrc
source ~/.bashrc
Purpose: Ensures commands from all terminal sessions are appended to ~/.bash_history in real-time, preventing loss from concurrent sessions.
Details: histappend appends rather than overwrites history. PROMPT_COMMAND with history -a writes commands to the file after each command execution. This is critical for users running multiple terminals simultaneously.
Sample Output: No output. Commands from all sessions are now saved to ~/.bash_history immediately.
histappend, closing a terminal may overwrite the history file, losing commands from other sessions.echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' >> ~/.bashrc
source ~/.bashrc
Purpose: Adds a timestamp to each command in the format YYYY-MM-DD HH:MM:SS for tracking when commands were executed.
Details: The HISTTIMEFORMAT variable formats timestamps in ~/.bash_history. The trailing space ensures clean output. This is useful for auditing or debugging workflows.
Sample Output: No output. See Example 6 for how timestamps appear in history output.
echo 'HISTCONTROL=ignoredups:ignorespace' >> ~/.bashrc
echo 'HISTIGNORE="ls:cd:pwd:exit:history"' >> ~/.bashrc
source ~/.bashrc
Purpose: Prevents duplicate commands and specified commands from being saved, reducing history clutter.
Details: ignoredups skips consecutive duplicate commands; ignorespace skips commands starting with a space. HISTIGNORE lists commands (e.g., ls, cd) to exclude entirely. This keeps the history focused on unique, significant commands.
Sample Output: No output. Running ls or duplicate commands won’t appear in history.
ignorespace to hide sensitive commands by prefixing them with a space.The history command displays the command history, which can be formatted or piped to other commands for advanced usage. Below are examples of viewing, searching, and reusing history.
history
Purpose: Shows all commands in the current session’s history with line numbers.
Details: The output is limited by HISTSIZE. Each command is prefixed with a number for easy reference (e.g., for rerunning with !n).
Sample Output:
1 ls -l
2 cd /home/user
3 cat file.txt
4 history
history
Purpose: Shows history with timestamps if HISTTIMEFORMAT is set (as in Example 3).
Details: Timestamps are stored in ~/.bash_history and displayed with each command, helping track execution times. The format depends on HISTTIMEFORMAT.
Sample Output:
1 2025-10-16 09:24:01 ls -l
2 2025-10-16 09:24:05 cd /home/user
3 2025-10-16 09:24:10 cat file.txt
4 2025-10-16 09:24:15 history
history 5
Purpose: Shows the last 5 commands in the history.
Details: The number specifies how many recent commands to display. Useful for quick reference to recent actions.
Sample Output:
996 ls -l
997 cd /home/user
998 cat file.txt
999 pwd
1000 history
history | grep "git commit"
Purpose: Filters history for commands containing "git commit".
Details: Piping history to grep allows searching for specific commands, ideal for recalling complex or frequently used commands.
Sample Output:
123 git commit -m "Initial commit"
456 git commit -m "Update README"
789 git commit --amend
Ctrl+R for interactive history search, which is faster for recalling commands.!123
Purpose: Executes the command with history number 123.
Details: The history number is obtained from history output.