让 history 命令记录信息更细致:时间、IP、实时同步全搞定!

在 Linux 运维中,history 命令是排查问题与审计操作的好帮手。但默认的 history 往往信息过少——没有时间、没有来源 IP,还要等用户退出终端才记录。

今天教你一招,通过配置 /etc/profile,让历史命令记录更加完整和实时,包含:

时间戳
登录用户
主机名
SSH 客户端 IP(不带端口)
历史记录容量设置
实时写入
.bash_history 文件


一键配置命令

请以 root 用户或具有 sudo 权限执行以下命令:

sudo tee -a /etc/profile > /dev/null << 'EOF'
export HISTSIZE=10000
export HISTFILESIZE=10000
export HISTTIMEFORMAT="%F %T [$USER@$(hostname):$(echo $SSH_CLIENT | cut -d' ' -f1)] "
export PROMPT_COMMAND="history -a"
EOF

立即生效

执行以下命令,让配置立即生效:

source /etc/profile

参数详解

  • export HISTSIZE=10000
    内存中最多保留 10,000 条历史命令(当前 shell 会话中的历史)。
  • export HISTFILESIZE=10000
    .bash_history 文件中最多保留 10,000 条历史命令(退出 shell 后写入的历史记录)。
  • export HISTTIMEFORMAT="%F %T [$USER@$(hostname):$(echo $SSH_CLIENT | cut -d' ' -f1)] "
    格式化每条历史命令的时间戳,并显示用户、主机名、SSH IP(不带端口)。
  • export PROMPT_COMMAND="history -a"
    每输入一条命令就实时写入.bash_history 文件,不再等到退出终端。

效果预览

执行几条命令后,查看历史记录:

history

你会看到如下格式:

 1001  2025-08-07 14:30:21 [root@server:192.168.1.10] yum update
 1002  2025-08-07 14:30:44 [root@server:192.168.1.10] systemctl restart nginx

是不是清晰很多?


建议扩展

如需让所有用户(包括未来新建的用户)也自动拥有这些设置,可以将相同配置加入:

/etc/bash.bashrc
/etc/skel/.bashrc

总结

通过这一步配置,Linux 的命令审计能力可以大大增强,不仅适合运维日常,也适合企业合规需求。