编写一个shell脚本并列出五分钟前登录的所有用户
假设没有时间是凌晨3:12,我想列出所有在3:07Am或3:07 AM之后登录的用户
我尝试了以下步骤
有file w.sh
包含这个脚本
Step 1: `who >>/home/user/log.txt`
Step 2: now run the script `w.sh ` using `crontab`
Step 3: `* * * * * /home/user/w.sh`
这将每个月每小时每小时运行一分钟
Step 4: i want to check for last 5 minutes
`cat log.txt |grep " "` NOW I 'm STUCK
如何列出所有用户
请帮我。
是否可以制作单个脚本而不是完成所有四个步骤?
答案 0 :(得分:4)
以下脚本可以满足您的需求:
#! /bin/bash
input=$(who)
perl -alne '
$date = "$F[2] $F[3]";
$epoch = `date -d "$date" +%s`;
$_5ago = `date -d "5 minutes ago" +%s`;
$now = `date -d "now" +%s`;
if ( $epoch >= $_5ago && $epoch <= $now ){
print "$F[0]" ;
}
' <<< "$input"
说明:
who
的输出在字段3和4上有日期信息:
tiago tty1 2014-06-07 22:04
使用perl脚本将这些字段转换为纪元,并检查是否适合现在和5分钟之前的范围,也包括在纪元中,如果是,则打印字段1是用户。
答案 1 :(得分:0)
这bash
:
#!/bin/bash
now=$(date +"%s")
who|while read user term dt; do
logon=$(date -j -f "%b %d %H:%M" "$dt" "+%s")
if (( now - logon < 300 ));then
echo $user
fi
done
适用于此who
类型输出:
$ who
klashxx console Jun 21 16:21
klashxx ttys000 Jun 21 16:21
klashxx ttys001 Jun 21 21:33