说明蓝色=命令名称

      浅绿=命令参数

      浅蓝=选项

      紫色=目录

      系统环境:CentOS  5.8  x86_64

最近公司让搞操作记录,各种百度、google之后找到了一个比较不错的方法:

touch /var/log/command.log

chattr -a /var/log/command.log

/etc/profile/etc/bashrc  中添加如下代码

 
  

 

  1. #判断是否为 ssh 127.0.0.1 "ls" 类似的命令 if ! test -z "$BASH_EXECUTION_STRING" ; then
    echo "===== $(date "+%F %T") $USER nologin cmd: $BASH_EXECUTION_STRING" >>/var/log/command.log
    #判断是否为su 用户 elif shopt -q login_shell ; then
    printf "====== $(date "+%F %T") new login the last cmd: ">>/var/log/command.log
    else
    printf "====== $(date "+%F %T") su the last cmd: ">>/var/log/command.log
    fi
    #定义历史记录格式
    export HISTTIMEFORMAT="%F %T $USER ${SSH_TTY:5} ${SSH_CLIENT%% *} " #定义输出格式,并输出到/var/log/command.log中
    export PROMPT_COMMAND="history 1|tail -1|sed 's/^[ ]\+[0-9]\+ //'>> /var/log/command.log"

效果如图所示:

补充:

USER  环境变量,登录的用户名

SSH_TTY  环境变量,记录登录中端

SSH_CLIENT  环境变量,记录登录ip

HISTTIMEFORMAT  bash的环境变量用来定义历史记录history 的格式

PROMPT_COMMAND 环境变量,这个变量会优先于 PS1 变量执行,屏幕上显示完PROMPT_COMMAND定义的内容后,才会显示 PS1 提示符的内容;也就是说,按回车后,先输出 PROMPT_COMMAND 的内容到屏幕上,然后才输出。

BASH_EXECUTION_STRING 环境变量,存放远程ssh执行的命令。

添加日志切割:

mkdir -p /var/log/history

将下面脚本保存到/etc/logrotate.d/history 中
/var/log/command.log{
    prerotate
    /usr/bin/chattr -a /var/log/command.log
    endscript
    compress
    delaycompress
    notifempty
    olddir /var/log/history
    rotate 1000
    size 10M
    postrotate
    chmod 666 /var/log/command.log && /usr/bin/chattr +a /var/log/command.log && chmod 600 /var/log/history/*
    endscript
}