在系统日志中记录所有 bash 历史

对于 Linux 用户来说用 history 翻看自己敲了哪些命令肯定不陌生。但是 history 有几个问题让它特别不适合在生产环境下使用:

  1. 没有时间戳
  2. 没有用户
  3. 默认 1000 条记录,再老的就找不到了

理想的解决方法是把所有用户敲过的所有命令都记录在日志文件中,方案如下:

在文件 /etc/profile 的末尾增加如下内容,重新登陆即可看到日志,debian/ubuntu 的日志在 /var/log/syslog;centos/redhat 的日志在:/var/log/messages

function log2syslog
{
    export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] "
    export PROMPT_COMMAND='\
        if [ -z "$OLD_PWD" ];then
            export OLD_PWD=$(pwd);
        fi;
        if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
            logger  `whoami`_shell_cmd "[$OLD_PWD]$(history 1)";
        fi ;
        export LAST_CMD="$(history 1)";
        export OLD_PWD=$(pwd);'
}   

trap log2syslog DEBUG

Happy bashing !

发表评论

电子邮件地址不会被公开。 必填项已用*标注