插件窝 干货文章 history命令内容格式优化,显示IP,操作时间

history命令内容格式优化,显示IP,操作时间

记录 命令 bash bashrc 131    来源:    2025-05-11

优化history命令显示格式(包含IP和操作时间)

解决方案

要优化history命令的显示格式,使其包含IP地址和操作时间,可以通过以下几种方法实现:

方法1:修改bash环境变量(临时生效)

export HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` "

方法2:永久配置(添加到bashrc)

  1. 编辑~/.bashrc文件:
nano ~/.bashrc
  1. 添加以下内容:
export HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` "
export HISTFILESIZE=100000
export HISTSIZE=100000
shopt -s histappend
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
  1. 使配置生效:
source ~/.bashrc

方法3:使用rsyslog记录更详细的历史(系统级)

  1. 编辑/etc/bashrc或/etc/profile:
echo 'export PROMPT_COMMAND='\''RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL] $(who -u am i | awk "{print \$NF}" | sed "s/[()]//g")"'\''' | sudo tee -a /etc/bashrc
  1. 配置rsyslog:
echo 'local6.* /var/log/commands.log' | sudo tee -a /etc/rsyslog.conf
  1. 重启rsyslog:
sudo systemctl restart rsyslog

效果说明

执行以上配置后,history命令将显示如下格式:

1  2023-10-25 14:30:45 192.168.1.100 ls -l
2  2023-10-25 14:31:22 192.168.1.100 cd /var/log
3  2023-10-25 14:32:10 192.168.1.100 tail -f commands.log

注意事项

  1. IP地址记录依赖于who -u am i命令,对于本地登录可能无法获取IP
  2. 对于通过SSH连接的会话,IP地址可以正确记录
  3. 方法3会将所有命令记录到系统日志中,适合审计需求
  4. 历史记录大小可根据需要调整HISTFILESIZE和HISTSIZE的值

扩展功能

如果需要更详细的审计功能,可以考虑使用以下工具: - auditd:Linux审计系统 - script命令:记录整个会话 - tlog:终端会话记录工具