7 Tips that can help you to improve you Bash history file.
You will learn how to add date and time to bash history file, increase history size, ignore specific commands and much more …
Every command that you enter, is stored in the file ~/.bash_history. Run history to see your last commands.
You can improve your Bash history, appending different environment variables to your ~/.bashrc
file.
After modifying ~/.bashrc
file, execute the following command to apply changes:
source ~/.bashrc
1. Add Date and Time to Bash History
Sometimes it would be very nice to know when some command got executed.
Set HISTTIMEFORMAT
to print the time stamps associated with each history entry.
Append the following line to ~/.bashrc
file:
export HISTTIMEFORMAT="%h %d %H:%M:%S "
Now, when you type history, it will show something like:
113 Jun 08 16:31:06 sudo ifconfig 114 Jun 08 16:31:10 top 115 Jun 08 16:31:19 ping 8.8.8.8 116 Jun 08 16:31:22 history
2. Increase Bash History Size
Increase HISTSIZE
– the number of commands to remember in the command history (the default value is 500).
export HISTSIZE=10000
Increase HISTFILESIZE
– the maximum number of lines contained in the history file (the default value is 500).
export HISTFILESIZE=10000
3. Append Bash Commands to History File
Bash overwrites .bash_history
file?
To append commands to the history file, rather than overwrite it, add the following line to ~/.bashrc
:
shopt -s histappend
4. Store Bash History Immediately
By default, Bash only records a session to the .bash_history
file when the session terminates.
This means that if you crash or your session terminates improperly, you lose the history up to that point.
Use $PROMPT_COMMAND
variable to save each command right after it has been executed.
Append the following line to ~/.bashrc
file, if the variable $PROMPT_COMMAND
hasn’t been set yet:
PROMPT_COMMAND='history -a'
Append the following line, if the variable $PROMPT_COMMAND
has already been set:
PROMPT_COMMAND='$PROMPT_COMMAND; history -a'
5. Control Bash History
HISTCONTROL
is a colon-separated list of values controlling how commands are saved in the history file.
Value | Description |
---|---|
ignorespace | don’t save lines which begin with a <space> character |
ignoredups | don’t save lines matching the previous history entry |
ignoreboth | use both ‘ignorespace’ and ‘ignoredups’ |
erasedups | eliminate duplicates across the whole history |
Example:
export HISTCONTROL=ignorespace:erasedups
6. Ignore Specific Commands
HISTIGNORE
is a colon-separated list of patterns used to decide which command lines should be saved in the history file.
Don’t save ls
, ps
and history
commands:
export HISTIGNORE="ls:ps:history"
Don’t save commands with s
in the beginig:
export HISTIGNORE="s*"
7. Use one command per line
Store multi-line commands in one history entry:
shopt -s cmdhist
Change the History File Name
Use HISTFILE
to change the name of the file in which Bash history is saved. The default value is ~/.bash_history
.
export HISTFILE=~/.custom_file
Спасибо за познавательную статейку.
Давно, когда-то, про настройку bash-а читал и применял, но после того раза позабыл про это…. а сейас часто в историю заглядывать приходится и вспомнил про такую возможность.
И настроил по Вашей статье.
Больше спасибо.
P.S.
А про Yii2 не пишите? Желательно для чайников или “для тех, кто в танке”? (:
Рад, что статья была вам полезна. С Yii2 не знаком.
О, ништяк, спасибо!
спасибо!
Good
Really helpful. Just one comment. I’m habituated with using multiple terminal windows. If I immediately update the history file, other terminal “UP arrow key” will not show me the real up in that context but global up (done by some other terminal window). Any suggestion how to fix that ?
try to use “history -n”:
PROMPT_COMMAND=’$PROMPT_COMMAND; history -a; history -n’
It updates the file, but it does not re-read the file. Your individual session’s history will be correct for the life of the session.
does this apply to zsh as well?
Very helpful, thank you.
Pair this with CTRL+r to search through your history!
Pair it with PgUp/PgDown for search in you history;)
No idea why they didn’t enable it by default in Debian-based distros:/
Use double quotes instead of single quotes:
LMFTFY:
“`
PROMPT_COMMAND=”$PROMPT_COMMAND; history -a”
“`
Gr8!
it is cool
HISTCONTROL=erasedups is rather handy too. It ensures only a single copy of each command.
After adding this line:
PROMPT_COMMAND=’$PROMPT_COMMAND; history -a’
and sourcing I had an error:
:~$ source .bashrc
-bash: $PROMPT_COMMAND;: command not found
in this case, you should use double quotes to make variables substitution work:
PROMPT_COMMAND=”$PROMPT_COMMAND; history -a”
Its 4 year old. Please give a solution for ubuntu 18.04.10
Since history in Ubuntu is based off of Debian, it hasn’t really changed much in 20-odd years. So the tips provided still ought to work in modern versions of Ubuntu.