在centos中可以用history命令查看某个用户过的命令,比如在root用户执行history命令,可以看到下面的结果:
[root@dbserver ~]# history|head -3
1 ip add
2 ping www.sina.com.cn
3 cd /etc/system-config
在默认的情况下,只能看到执行的命令,如果能看到命令执行的时间及IP地址,有时会对我们排查故障、诊断问题、操作审计有很大的帮助。
1 history显示命令执行时间
bash可以通过设置环境变量HISTTIMEFORMAT可以控制history命令的显示方式,要使这个变量对所有的用户生效,可以将变量的设置放在/etc/bashrc文件下。
编辑/etc/bashrc文件,加入下面的内容:
export HISTTIMEFORMAT="%F %T "
%T显示时间,同%F一起使用显示时间的全格式,如果只使用%T则显示的时间不包括日期,运行一下脚本文件使其生效后,在运行history命令,输出有了命令运行的时间:
[root@dbserver ~]# source /etc/bashrc
[root@dbserver ~]# history |head -2
1 2023-03-09 13:47:16 ip add
2 2023-03-09 13:47:16 ping www.sina.com.cn
2 在命令历史文件名中嵌入ip信息
要使history记录命令执行的ip则比想象的要复杂,常见的在HISTTIMEFORMAT搁置中嵌入who命令来获取ip,实际显示的是运行history命令的会话的ip地址,不是历史记录中的命令的实际执行者的ip。要想获得命令的执行者的ip,有一个办法是设置HISTFILE环境变量,将IP作为命令历史文件的一部分。除了用who命令获得ip信息,现在大部分系统都是使用ssh远程连接,环境变量SSH_CLIENT里面含有IP地址信息,把这个里面的ip地址取出来也可以,方法如下:
arr=($SSH_CLIENT)
ssh_ip=${arr[0]}
export ssh_ip
[root@dbserver ~]# echo $ssh_ip
192.168.56.1
SSH_CLIENT是以空格分隔的字符串,将它数组化后,取得数组的第一个元素就是ip地址,有了IP地址,将它作为命令历史文件名称的一部分设置HISTFILE环境变量
export HISTFILE=$ssh_ip$RANDOM".history"
加入$RANDOM变量的目的是防止一个ip多次使用一个用户账号登录,覆盖掉以前的文件。
这时后运行几个命令退出会话再重新登录后就可以看到命令的历史记录文件了
[root@dbserver ~]# ls -l
total 2883740
-rw-------. 1 root root 112 Mar 9 16:45 192.168.56.17946.hisroty
/etc/bashrc中ip地址记录相关的部分如下:
arr=($SSH_CLIENT)
ssh_ip=${arr[0]}
export ssh_ip
export HISTFILE=$ssh_ip$RANDOM".history"
最后修改时间:2023-03-09 17:09:54
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




