曲径通幽论坛

标题: utmp 和 wtmp 文件简介 [打印本页]

作者: beyes    时间: 2011-12-30 12:04
标题: utmp 和 wtmp 文件简介
在 UNIX/Linux 系统上持有两个保存了用户登录和注销信息的文件:utmp wtmp

utmp 文件保存了用户的当前登录信息。在每个用户登录系统时,一条相应的信息就会写进 utmp 这个文件里。在这条信息里,ut_user 记录了登录的用户名,当用户登出时该条目就会被擦除。像 who 命令就是读取了 utmp 文件的内容,从而获得了当前登录的用户,如:
linux-xh53:~ # who
beyes    :0           Dec 30 11:08 (console)
beyes    pts/0        Dec 30 11:08
beyes    pts/1        Dec 30 11:09 (192.168.1.100)
root     pts/2        Dec 30 11:20 (192.168.1.100)

wtmp 是一个对用户登录登出的跟踪审查文件。在用户每次登录时,一条和写到 utmp 文件里的同样信息同样会写到 wtmp 文件里。在用户登出系统时,同样也会有相应的信息记录到该文件中。通过 last 命令可以显示 wtmp 文件的内容,比如:
linux-xh53:~ # last
beyes    pts/1        192.168.1.100    Fri Dec 30 11:38 - 11:38  (00:00)
root     pts/2        192.168.1.100    Fri Dec 30 11:20   still logged in
beyes    pts/1        192.168.1.100    Fri Dec 30 11:09 - 11:34  (00:25)
reboot   system boot  3.1.0-1.2-deskto Fri Dec 30 11:08 - 11:39  (00:31)
beyes    pts/0                         Fri Dec 30 11:08 - crash  (00:00)
beyes    console      :0               Fri Dec 30 11:08 - crash  (00:00)
beyes    pts/3        192.168.1.100    Thu Dec 29 17:06 - 01:33  (08:26)
beyes    pts/2        192.168.1.100    Thu Dec 29 09:28 - 01:33  (16:05)
在上面的输出中,still logged in 表示用户仍然登录在系统中,而 crash 表示用户还处于登录状态时,系统发生崩溃或者被重启。

在 Linux 里,utmp 文件的绝对路径是 /var/run/utmp ,该文件通常用 who 命令来读取;wtmp 文件的绝对路径是 /var/log/wtmp ,该文件通常通过 last 命令来读取。这两个文件都不是普通的文本文件,所以不能用 cat ,less,more 等命令来查看。

通常,应用程序也不需要事先就知道这两个文件的路径,因为它们都是被编译到 glibc 里。在 paths.h 这个头文件里我们可以看到有两个宏定义到了这两个文件的路径,如:
#define _PATH_UTMP      "/var/run/utmp"
#define _PATH_WTMP      "/var/log/wtmp"

utmp 的结构定义可参考:http://www.groad.net/bbs/read.php?tid-5805-ds-1.html




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2