bash history 的几个常用选项

删除无意义命令

1
export HISTIGNORE='pwd:exit:fg:bg:top:clear:history:ls:uptime:df'

使用该选项后,在历史记录中就不会记录选项后包含的命令。

忽略敏感命令

1
export HISTCONTROL=ignorespace

例如:你不想在历史记录中出现带有密码的命令,可以在输入密码的命令前添加空格,这样就不会保存在历史记录中。

删除重复命令

1
HISTCONTROL=ignoredups

使用改选项后,历史记录中不会记录连续重复执行的命令,例如:连续输入了 3 次 ls,只会记录一次。

如果你想更为激进,那么可以使用以下选项,删除整个历史记录里面的重复项。

1
HISTCONTROL=erasedups

不丢失重要命令

Bash 的 history 文件默认是覆盖,如果并发打开了多个 Shell 会话,只会记录最后一个退出的 Shell 的命令历史(历史命令保存在内存中,且在退出时写入历史文件)。

使用以下选项,将历史记录修改为追加模式。

1
shopt -s histappend

与此同时,在共享 Shell 的情况下,可能会由于历史文件太小而丢失重要的记录,因此,可以把历史记录的上限调大,避免丢失有用的命令。

1
2
HISTSIZE=10000
HISTFILESIZE=10000

HISTFILESIZE 定义了在 .bash_history 中保存命令的记录总数.
HISTSIZE 定义了 history 命令输出的记录数

记录命令执行时间

1
export HISTTIMEFORMAT="%F %T " 

HISTTIMEFORMAT 的格式是 strftime 函数的格式:%F : Y-M-D ,%T: H-M-S,需要在后面再加个空格,不然时间会和命令连到一起。

修改历史记录文件名称

默认情况下,历史记录都保存在 ~/.bash_history 文件中。

1
export HISTFILE=/var/history/$USER-$UID.log

使用HISTFILE将历史记录保存到指定的文件中。

实时追加历史命令

1
PROMPT_COMMAND="history -a"

PROMPT_COMMAND 添加的是每个命令后执行的命令,添加上 history -a 命令,可以直接将当前缓冲区的命令写入到文件中。

1
2
3
4
5
6
7
8
# history 命令一些常用选项:
-N: 显示历史记录中最近的N个记录;
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中;
-d<offset>:删除历史记录中第offset个命令
-n<filename>:读取指定文件