【Linux】如何查看命令运行历史时间以及操作人IP
说明
我们在工作中,往往为了省事,多个人用一个linux账户,这样当我们在系统出问题时,无法知道是谁进行了不好的操作,比如误删除或错误的执行了命令,我们可以通过这个方法来查询定位这个“坏家伙”。
让我们的history展示执行时间及操作人ip(此ip为当前登录ip)
编辑/etc/bashrc
或 /etc/profile
或 ~/.bashrc
或 ~/.bash_profile
(主要看下你的~目录下有哪个就编辑哪个,前面两个是全局,后两个针对当前用户)
vi /etc/profile
在文末加上以下内容
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` # 取得登录客户端的IP
if [ -z $USER_IP ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP:`whoami` "
使配置生效(这里具体看你修改文件)
source /etc/profile
测试
我们还可以查询账户登录的ip和登录的时间段
last
记录日志
感谢庭外看茶的反馈,经验证who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'
获取的是当前登录人的ip,并没有做历史记录,博主查阅了网上相关的资料,重新整理为日志记录的形式。
编辑
vi /etc/profile
文末加入
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` # 取得登录客户端的IP
HISTDIR=/var/log/history
if [ -z $USER_IP ]
then
USER_IP=`hostname`
fi
export HISTSIZE=4096
DT=`date +%Y%m%d_%H%M%S`
export HISTFILE="$HISTDIR/${LOGNAME}_${USER_IP}.$DT"
export HISTTIMEFORMAT="%F %T $USER_IP:`whoami` "
chmod 666 $HISTDIR/* 2>/dev/null
使配置生效(这里具体看你修改文件)
source /etc/profile
注意
:此方法是将日志默认保存~/.bash_history
改到指定的日志路径,通过重命名为用户名加ip和时间的形式来记录操作人ip的,日志在登录时保存在内存中,只有退出时和手动执行history -w (覆盖)
或history -a (追加)
才会被记录。
通过修改DT=`date +%Y%m%d`
可以实现按天记录,当然我们也可以改成按月、按年记录,由于是修改日志保存位置,当时间与我们的日志文件名不一致时,会导致用户查询不到历史记录,例如我们按照上面DT为date +%Y%m%d_%H%M%S
,当用户退出再登录时,我们无法再次匹配到日志文件,这样登录人每次都要自己手输历史命令不方便,我们可以按月或按日记录,或者我们干脆去掉DT,export HISTFILE="$HISTDIR/${LOGNAME}_${USER_IP}"
,这样每个用户和ip的组合命令都单独记录,但是在时间纬度上就不好确定,具体使用需要你自己取舍,我的建议是如果操作用户ip少的情况就用不带DT的方式,如果用户多,可以确定大概命令出错的时间段,建议加DT设置为时分或者小时的形式。
其他说明
日志文件中的#
后面的数字是命令执行的时间戳,我们可以自行转换,确定执行时间。
linux自带的时间戳转化命令
date -d @1657506746 +"%Y-%m-%d %H:%M:%S"
更多推荐
所有评论(0)