Linux:如何从我的系统中获取所有登录日志


12

我想知道自去年以来用户登录到系统的所有时间吗?
我使用了last命令,但是它没有用。


1
欢迎参加Stack Exchange!请记住,我们都是这里的志愿者。因此,我们希望您已经进行了一些基础研究。似乎您已经有了一个开端-因为您提到要尝试使用该last命令-但您应该进行更多的研究,无论如何,您实际上并未指定该命令为何last无用的原因。另外,定义“已登录”。您要跟踪控制台登录吗?SSH登录?Emacs禁止telnet登录吗?或只是通过PAM进行身份验证的任何内容?是具体的
2014年

Answers:


10

在redhat风格的linux上的登录日志称为wtmpman wtmp),/var/log/默认情况下存储在其中,您可以使用utmpdump(在RHEL6上)进行检索。

[root@server ~]# utmpdump /var/log/wtmp* | awk '$4~"root" {print}'
Utmp dump of /var/log/wtmp
[7] [01320] [ts/0] [root    ] [pts/0       ] [192.168.1.101       ] [192.168.1.101  ] [Tue Sep 24 00:31:47 2013 UTC]
[7] [01817] [ts/3] [root    ] [pts/3       ] [192.168.1.101       ] [192.168.1.101  ] [Tue Sep 24 00:38:22 2013 UTC]
[7] [01690] [ts/0] [root    ] [pts/0       ] [192.168.1.101       ] [192.168.1.101  ] [Tue Sep 24 00:59:04 2013 UTC]
[7] [23641] [ts/0] [root    ] [pts/0       ] [192.168.1.101       ] [192.168.1.101  ] [Wed Sep 25 19:12:44 2013 UTC]
[7] [03020] [ts/0] [root    ] [pts/0       ] [192.168.1.100       ] [192.168.1.100  ] [Fri Sep 27 21:33:40 2013 UTC]
...

1

似乎last可以用来实现您想要的工作。您需要在最后一个命令后附加日期以提取信息。

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

但是,如果您想查找有关特定用户的信息,则可以将last命令修改为as last username,然后将while循环传递给它。它会为您提供过去一年中特定用户的登录信息的信息。

我测试了上面的命令,它在我的系统中运行良好。我从这里接受了上述命令。

您可以在命令中更改日期以适合您的要求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.