Linux 下用 history 查看历史命令时,默认只显示序号和命令本身,看不到这条命令是什么时候执行的,排查问题时很不方便。其实只要设置 HISTTIMEFORMAT 环境变量,就能让 history 显示每条命令的执行时间。
临时生效
只对当前会话生效,直接执行:
export HISTTIMEFORMAT="%F %T "
之后再使用 history 命令,每条命令前面就会带上”年-月-日 时:分:秒”:
$ history 500 | grep get_charge_by_month
1002 2014-09-02 10:17:34 history -500|grep get_charge_by_month
1005 2014-09-02 10:26:41 history 500|grep get_charge_by_month
HISTTIMEFORMAT 的格式与 strftime 一致:
%F:完整日期,等价于%Y-%m-%d;%T:完整时间,等价于%H:%M:%S。
永久生效
想让每次登录都自动生效,把上面这条 export 写入 ~/.bashrc 即可:
echo 'export HISTTIMEFORMAT="%F %T "' >> ~/.bashrc
source ~/.bashrc
注意 echo 后面用的是单引号,这样 %F %T 会原样写入文件,不会被当前 Shell 提前展开。
两点说明
- 设置之后,
history对当前会话之后执行的命令会记录准确时间;更早的历史命令没有时间戳,显示的时间是 bash 写入历史时的时间(往往是设置变量那一刻),看起来会”全部相同”,属于正常现象。 - 时间戳记录在历史文件
~/.bash_history中(以注释形式#<时间戳>存储),换机器拷贝历史文件时格式仍然兼容。