在推上看到一篇文章sending bash and zsh commands to syslog,遂动手实践下,发现有点问题,特此记录。
1、在/etc/rsyslog.d 文件夹下,新建 commands.conf,内容如下
local6.* /var/log/commands.log
2、重启 rsyslog,systemctl restart rsyslog
3、创建/var/log/commands.log
touch /var/log/commands.log
4、添加日志发送命令到对应文件
.bashrc 或/etc/bashrc
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
.zshrc 或/etc/bashrc
precmd() { eval 'RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history | tail -n1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"' }
通过 bash 的PROMPT_COMMAND和 zsh 的precmd,在 shell 输入命令时,执行 logger 命令,将信息发送给 local6(用户自定义消息),然后通过 commands.conf 的配置,把消息发送到/var/log/commands.log
这样就可以无感的记录操作历史了