编写一个shell脚本并列出五分钟前登录的所有用户

时间:2014-06-21 10:22:47

标签: shell unix

编写一个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 

如何列出所有用户
请帮我。
是否可以制作单个脚本而不是完成所有四个步骤?

2 个答案:

答案 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