说明:蓝色=命令名称
浅绿=命令参数
浅蓝=选项
紫色=目录
系统环境:CentOS 5.8 x86_64
最近公司让搞操作记录,各种百度、google之后找到了一个比较不错的方法:
touch /var/log/command.log
chattr -a /var/log/command.log
在/etc/profile 或 /etc/bashrc 中添加如下代码
#判断是否为 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
}