last
命令显示登录尝试的历史记录。如何过滤输出以显示从当前日期之前5天登录的用户?
以下是我迄今为止所做的事情:
last | grep Dec | grep -v reboot | awk '{print$5}'
从最后一个命令的输出中解析日期。
#!/bin/bash
count=`$date "+%d"`
count=$((count-5))
last|grep -v reboot|grep Dec|awk '($5>=$count) {print $0}'
为我工作:)感谢@Olivier Dulac的帮助
答案 0 :(得分:1)
我无法在一行中完成,但这里有一个小的bash脚本可能会完成工作:
#! /bin/bash
# Find the date string we want
x=$(date --date="5 days ago" +"%a %b %e");
# And now chain a heap of commands together to...
# 1. Get the list of user
# 2. Ignore reboot
# 3. Filter the date lines we want
# 4. Print the user name using awk
# 5+6. Sort them and extract the unique values
last | grep -v "reboot" | grep "$x" | awk '{print $1}' | sort | uniq
答案 1 :(得分:0)
(我这里没有“last”所以我不知道格式) 只需添加一个条件,只在看到你想要的东西时打印整行:
例如:如果月份是第3个字段,而日期是第4个字段,
last | grep -v reboot | awk ' ( ($3 == "Dec") && ($4 == "07") ) { print $0 ; }'
(再一次,没有“最后”的实际摘录,我不知道上述是否有效,但我希望你能得到一般的想法)
答案 2 :(得分:0)
我认为chooban
的解决方案是最接近的,但它只列出了匹配的行。我找到了一个更好的解决方案,并且很可能它正确处理了2013-12-31 - 2014-01-01问题(如果用户在一年内登录的话,我没有发现输出格式的痕迹...,或者登录时间是前一年)。它是一个grep - 少一个(长)衬垫:
last | awk -v l="$(last -t $(date -d '-5 day' +%Y%m%d%H%M%S)|head -n 1)" 'BEGIN {l=substr(l,1,55)} /^reboot / {next} substr($0,1,55) == l {exit} 1
我认为没有'重启'这样的用户。它使用last -t YYYYMMDDHHMMSS
在特定日期之前打印行的事实,但不幸的是,如果注销在指定的时间段内(显示“消失 - 没有注销”),它会更改格式,因此必须将其切断。
这不是最好的,因为它最后两次调用,但似乎有效。
输出:
root pts/1 mytst.xyzzy.tv Wed Dec 11 12:45 still logged in
root pts/0 mytst.xyzzy.tv Wed Dec 11 11:25 still logged in
root pts/0 mytst.xyzzy.tv Tue Dec 10 16:02 - 17:14 (01:12)
root pts/0 mytst.xyzzy.tv Tue Dec 10 10:59 - 15:04 (04:05)
root pts/0 mytst.xyzzy.tv Mon Dec 9 13:23 - 17:10 (03:46)
root pts/1 mytst.xyzzy.tv Fri Dec 6 16:01 - 16:07 (00:06)
root pts/0 mytst.xyzzy.tv Fri Dec 6 15:52 - 16:08 (00:15)
我希望这可以提供帮助!