题 如何提取登录历史记录?


我需要知道特定用户的登录历史记录(即登录和注销时间), 如何在Linux中提取特定日期范围的历史记录?


80
2017-08-28 08:00






答案:


你可以尝试一下 last 命令:

last john 

它打印出用户john的登录/退出历史记录。而奔跑只是

last

打印出所有用户的登录/退出历史记录。


115
2017-08-28 08:11



这仅返回大多数Linux发行版中当前月份的值。 - ewwhite


如果你需要在历史上超过一个月,你可以阅读 /var/log/wtmp.1 用的文件 last 命令。

last -f wtmp.1 john 将显示上个月用户登录的历史记录 john

最后一个日志输出不是太重,而且相对容易解析,所以我可能会将输出管道输出到grep以查找特定的日期模式。

last john | grep -E 'Aug (2[0-9]|30) ' 显示8月20日至30日。或类似的东西:

last -f /var/log/wtmp.1 john | grep -E 'Jul (1[0-9]|2[0-9]|30) ' 为用户获取7月10日至30日 john


39
2017-08-28 08:54





如何在Linux中提取特定日期范围的登录历史记录?

列出从25到28日/ 8月登录的所有用户的示例:

last | while read line
do
    date=`date -d "$(echo $line | awk '{ print $5" "$6" "$7 }')" +%s`
    [[ $date -ge `date -d "Aug 25 00:00" +%s` && $date -le `date -d "Aug 28 00:00" +%s` ]] && echo $line
done
  • awk '{ print $5" "$6" "$7 }' 从中提取相应列的日期时间 last 产量
  • +%s 将datetime转换为Epoch时间
  • -ge 代表大于或等于
  • -le 代表不到或等于

您也可以为特定用户执行此操作 last <username>


17
2017-08-28 08:50



这是一个非常丑陋的表达。从那以后,grep会不会更清洁 last 输出很可读? - ewwhite
你能 grep 从“8月15日09:00”到“8月25日21:00”? - quanta
OP没有要求时间范围。 - ewwhite
@ewwhite这个表达对我来说很漂亮,如果你不喜欢bash语法的外观,这可能不是你的网站。 - ekerner
@ekerner你是对的。我会去别的地方;) - ewwhite