默认情况下,所有在Bash命令行中执行的命令都会被存储在历史缓冲区或记录在名为~/.bash_history的文件中,这意味着系统管理员可以查看用户在系统中执行过的命令列表,用户也可以通过history命令查看自己的操作历史:
history
从上面的history命令输出可见,默认情况下并不会显示命令执行的具体日期和时间,它几乎是所有Linux发行版的默认设置。
下面将介绍如何配置Bash历史记录,使其能够显示每条命令执行时的时间戳信息。
实现原理是通过设置HISTTIMEFORMAT环境变量,将每条历史记录关联的日期时间写入历史文件(系统会自动添加历史注释标记)。
具体配置有以下两种方式:临时生效方式和永久生效方式。
1.临时生效方式
直接在命令行中导出变量(仅对当前用户会话有效):
export HISTTIMEFORMAT='%F %T'
参数说明:
[root@yyzcdb81 ~]# export HISTIMEFORMAT='%F %T'
[root@yyzcdb81 ~]#
配置后即可查看带时间戳的历史记录:
[root@yyzcdb81 ~]# history
1 2026-01-07 13:36:44timedatectl set-timezone Asia/Shanghai
2 2026-01-07 13:36:44yum install ntp
3 2026-01-07 13:36:44 timedatectl set-ntp yes
4 2026-01-07 13:36:44timedatectl status
5 2026-01-07 13:36:44hwclock -w
6 2026-01-07 13:36:44 timedatectl set-local-rtc 1
7 2026-01-07 13:36:44timedatectl set-time "2025-01-13 23:39:00"
8 2026-01-07 13:36:44timedatectl set-ntp no
9 2026-01-07 13:36:44timedatectl set-time "2025-01-13 23:39:00"
10 2026-01-07 13:36:44df -TH
11 2026-01-07 13:36:44hostnamectl set-hostname yyzcdb91
……
2.永久生效配置
使用文本编辑器打开当前用户配置文件:
vim ~/.bashrc
在文件末尾添加配置:
export HISTTIMEFORMAT='%F %T'
保存文件后使配置立即生效:
[root@yyzcdb81 ~]# source ~/.bashrc
[root@yyzcdb81 ~]#
3.进阶配置:为所有用户配置历史记录时间戳
前面的配置仅适用于当前用户,如果要求所有登录用户的操作都要有时间戳,就需要采用系统全局级配置方案,有两种方法。
3.1 使用/etc/profile.d目录
这是最标准、最推荐的系统级配置方式,适用于所有支持profile.d机制的系统:
先创建全局配置文件:
[root@yyzcdb81 ~]# vim /etc/profile.d/history-timestamp.sh
添加以下内容:
#!/bin/bash
# 设置历史记录时间戳格式
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
# 设置内存中保存的历史记录条数
export HISTSIZE=10000
# 设置历史文件保存的记录条数
export HISTFILESIZE=20000
# 忽略重复命令和空格开头的命令
export HISTCONTROL=ignoreboth
# 忽略某些敏感命令(可选)
export HISTIGNORE="pwd:ls:ls -l:history"
保存文件并设置权限:
[root@yyzcdb81 ~]# chmod +x /etc/profile.d/history-timestamp.sh
[root@yyzcdb81 ~]#
3.2修改/etc/bash.bashrc(针对bash用户)
编辑全局bashrc文件/etc/bash.bashrc,在文末添加以下内容:
# 设置历史记录时间戳
if [ -z "$HISTTIMEFORMAT" ]; then
export HISTTIMEFORMAT="[%F %T] "
fi
# 增强历史记录设置
export HISTSIZE=5000
export HISTFILESIZE=10000
export HISTCONTROL=ignorespace:ignoredups
export HISTIGNORE="cd:cd *:pwd:exit:date:* --help"
# 实时同步历史记录(避免多终端冲突)
shopt -s histappend
export PROMPT_COMMAND="history -a; history -n"
# 记录更详细的历史信息
export HISTCMDVERBOSE=1
执行source命令使生效,或者重新登录:
[root@yyzcdb81 ~]# source /etc/bash.bashrc
4.配置结果测试
新增加一个test用户,切换test用户,随机执行几个命令,然后查看:
[root@yyzcdb81 ~]# source /etc/profile
[root@yyzcdb81 ~]# useradd test
[root@yyzcdb81 ~]# passwd test
更改用户 test 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@yyzcdb81 ~]# su - test
……
[test@yyzcdb81 ~]$ history
1 2026-01-07 14:30:58 top
2 2026-01-07 14:31:02 vmstat
3 2026-01-07 14:31:04 uptime
4 2026-01-07 14:31:07 history
[test@yyzcdb81 ~]$
[test@yyzcdb81 ~]$ echo$HISTTIMEFORMAT
%Y-%m-%d %H:%M:%S
5.注意事项
- 时间戳数据实际存储在
~/.bash_history文件中,每行时间戳会以注释形式显示为#开头的行 - 配置永久生效后,仅对新执行的命令有效,原有历史记录不会自动添加时间戳
- 在多终端并发操作时,建议配合
PROMPT_COMMAND配置避免历史记录丢失