获取主机上的活跃用户
发布时间:2020-12-15 07:07:42 所属栏目:安全 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #!/bin/bash# 用途:查找活跃用户# last 命令浏览/var/log/wtmp文件获取用户登录信息;# 最后一个字段时用户登录时长,格式为:(天+小时:分钟),
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #!/bin/bash # 用途:查找活跃用户 # last 命令浏览/var/log/wtmp文件获取用户登录信息; # 最后一个字段时用户登录时长,格式为:(天+小时:分钟),如果用户在先,则是still logged in # 因此在获取用户信息剔掉在线用户,获取时间用tr -d去掉() #set -x #调试时去掉注释 LOG_FILE=/var/log/wtmp if [[ -n $1 ]]; then LOG_FILE=$1 fi TMP_ULOG=/tmp/ulog.$$ TMP_USERS=/tmp/users.$$ TMP_USERINFO=/tmp/userinfo.$$ SECONDS_OF_ONE_DAY=86400 #60 * 60 * 24 TMP_0_SECONDS="00:00" #在线时长为0 USER_ONLINE_TIME_TMP_FILE=/tmp/user_online_time.txt #用户在线时间临时纪录文件 printf "%-4s %-10s %-10s %-6s %-8sn" "Rank" "User" "Start" "Logins" "Usage hours"; #获取所有用户登入信息,剔除last命令显示的最后两行无关信息,并剔除掉reboot用户纪录 last -f $LOG_FILE | head -n -2 | grep -v reboot | grep -v 'still logged in' > $TMP_ULOG #获取所有登陆用户,剔重,作为循环条件 cat $TMP_ULOG | cut -d ' ' -f1 | sort | uniq > $TMP_USERS ( while read USER; do grep ^$USER $TMP_ULOG > $TMP_USERINFO #纪录用户所有登录信息的临时文件 SECONDS=0 while read USER_ONLINE_TIME; do if [ "$USER_ONLINE_TIME" != "$TMP_0_SECONDS" ]; then echo $USER_ONLINE_TIME > $USER_ONLINE_TIME_TMP_FILE CHECK_ONLINE_DAY=`grep '+' $USER_ONLINE_TIME_TMP_FILE | wc -l` if [ $CHECK_ONLINE_DAY -gt 0 ]; #获取用户在线天数 then COUNT_ONLINE_DAY=$(echo $USER_ONLINE_TIME | cut -d '+' -f1) ONLINE_DAY_SECONDS=`expr $SECONDS_OF_ONE_DAY * $COUNT_ONLINE_DAY` USER_ONLINE_TIME=$(echo $USER_ONLINE_TIME | cut -d '+' -f1) else ONLINE_DAY_SECONDS=0 fi TMP_SECONDS=$(date -d $USER_ONLINE_TIME +%s 2> /dev/null) SECONDS_0=$(date -d $TMP_0_SECONDS +%s 2> /dev/null) let TMP_SECONDS=TMP_SECONDS-SECONDS_0 #去掉取秒时的基准数 let TMP_SECONDS=TMP_SECONDS+ONLINE_DAY_SECONDS let SECONDS=SECONDS+TMP_SECONDS fi done < <(cat $TMP_USERINFO | awk '{print $NF}' | tr -d ')(') #获取用户最早登陆时间,具体取第几列字段,要看具体环境 FIRST_LOG=$(tail -n 1 $TMP_USERINFO | awk '{print $5,$6}') NLOGINS=$(cat $TMP_USERINFO | wc -l) HOURS=$(echo "$SECONDS / 60.0" | bc) printf "%-10s %-10s %-6s %-8sn" "$USER" "$FIRST_LOG" "$NLOGINS" "$HOURS" done < $TMP_USERS ) | sort -nrk 4 | awk '{printf("%-4s %sn",NR,$0)}' #以总登陆时间做逆序排序,并行首添加序号 rm $TMP_USERS $TMP_USERINFO $TMP_ULOG 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容