一直以来,我对 history 的认识只限于:
但除此之外,其实还有其他一些变量能够影响 history 的行为,其中一个很有用的就是 HISTTIMEFORMAT 。
默认情况下 HISTTIMEFORMAT 为空,这时候 history 仅仅只会记录运行的命令本身,而不会记录运行命令的时间。
但若你设置了 HISTTIMEFORMAT 则 history 还会在 $HISTFILE 中以注释的形式将运行命令的时间也记录下来,记录的时间格式由 HISTTIMEFORMAT 决定:
echo export HISTTIMEFORMAT=\"%m/%d/%y %T \" >> ~/.bash_profile
则执行 history 后会看到在执行的命令前有列出执行命令时的时间
history |tail
结果为:
[lujun9972@T520 ~]$ history |tail
511 03/01/18 22:15:23 sudo vi /etc/proxychains.conf
512 03/01/18 22:15:33 proxychains yaourt -S snapd
513 03/01/18 22:15:48 ssh 192.168.1.19
514 03/01/18 22:15:56 ssh 192.168.1.9
515 03/01/18 22:16:20 ls
516 03/01/18 22:19:37 cat .bash_profile
517 03/01/18 22:19:45 export HISTTIMEFORMAT="%m/%d/%y %T "
518 03/01/18 22:19:46 ls
519 03/01/18 22:19:48 history
520 03/01/18 22:20:24 history |tail
查看 $HISTFILE 中的内容可以看到,在每条命令的前面都有一个注释起来的时间戳
tail $HISTFILE
结果为:
#1519913458
exit
#1519913460
ls
#1519913465
source .bash_profile
#1519913477
cat .bash_history
#1519913492
exit
除此之外,通过设置 HISTCONTROL 变量可以设置哪些命令需要记录,那些命令不需要记录,该变量可以有三种值:
除了 HISTCONTROL 之外,还有 HISTIGNORE 也可以设置来筛选哪些命令不被记录下来。
HISTIGNORE 由多个通配符模式列表组成,默认列表由冒号分隔。 每个模式都从行首开始匹配,必须要匹配整行。这里的通配符模式除了能使用shell中平常的通配符好,还能用 & 来表示上一个历史行。当然若你就是想表示 & 的时候,则需要用反斜线将之转义起来。
但要注意:多行组合命令的第二行以及后续行不受 HISTIGNORE 的影响,都将加入到历史中。

