linux系统环境下,不管是root用户还是其他的用户只有登录系统后的操作都可以通过命令history查看历史记录。

假如一台服务器有多人登录,一天因为某人误删了重要的数据

这时通过history是没有什么意义的,那有没有办法实现通过记录登录后的ip地址和登录的用户名分类记录操作的历史记录呢?

#vim /etc/profile    配置文件里添加如下代码

#PS1="`whoami`@`hostname`:"'[$PWD]'

history

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

if [ "$USER_IP" = "" ]

then

USER_IP=`hostname`

fi

if [ ! -d /tmp/history ]

then

mkdir /tmp/history

chmod 777 /tmp/history

fi

if [ ! -d /tmp/history/${LOGNAME} ]

then

mkdir /tmp/history/${LOGNAME}

chmod 300 /tmp/history/${LOGNAME}

fi

export HISTSIZE=4096

DT=`date +"%Y%m%d_%H%M%S"`

export HISTFILE="/tmp/history/${LOGNAME}/history@${USER_IP}.$DT"

chmod 600 /tmp/history/${LOGNAME}/*history* 2>/dev/null

保存并退出当前shell。


问题:添加代码后虽然不会报错,在/tmp/也能够创建/tmp/dbasky/root,但是不能在/root目录下创建相应的${USER_IP}.dbasky.$DT文件,记录该用户的操作内容。


原因:因为之前在 ~/.bash_profile文件中指定history记录文件

     #vim ~/.bash_profile

        HISTFILE=/root/.history_history

    所以一直不能自动生成/tmp/history/${LOGNAME}/history.${USER_IP}.$DT}文件,把~/.bash_profile中的指定存储文件删除,重新进入bash后,之后的操作就会保存在指定文件中。重启系统后才能看到文件内容,具体操作。

    

配置重启生效后:

[root@localcentos7_2 ~]# ll /tmp/history/root/

总用量 28

-rw-------. 1 root root 347 9月  28 17:22 10.10.87.43 history.20150928_171814

-rw-------. 1 root root 294 9月  28 17:31 10.10.87.43 history.20150928_172409

-rw-------. 1 root root 120 9月  28 17:32 history.10.10.87.43.20150928_173114

-rw-------. 1 root root  97 9月  28 17:36 history.10.10.87.43.20150928_173542

-rw-------. 1 root root 322 9月  28 17:40 history@10.10.87.43.20150928_173824

-rw-------. 1 root root 500 9月  28 17:45 history@10.10.87.43.20150928_174222

-rw-------. 1 root root 100 9月  28 17:46 history@10.10.87.43.20150928_174537