1.utmp 和 wtmp 文件概述
UNIX 系统维护这2个包含与用户登录和登出系统有关的信息的数据文件:
1.utmp 文件维护着当前挡路进系统的用户记录(以及其他一些信息),每个用户登录进系统时会向 utmp 文件
写入一条记录。这条记录中包含一个 ut_user 字段,它记录着用户的登录名。当用户登出的时候该条记录会
被删除。像 who(1) 之类的程序会使用 utmp 文件中的信息来显示当前登录进系统的用户列表。
2.wtmp 文件包含所有用户登录和登出行为的留痕信息以供审计之用。每一个用户登录进系统时,写入 utmp 文件
中的记录同时会被附加到 wtmp 文件中。当用户登出系统的时候还会向这个文件附加一条记录。这条记录包含的信息
与登录记录相同,但 ut_user 会被置0.last(1)命令可以用来显示和过滤 wtmp 文件中的内容。
在Linux上,utmp 文件位于 /var/run/utmp, wtmp 位于 /var/log/wtmp 。
系统在启动的时候,init 进程会为每个命令行和虚拟控制台创建一个子进程,每个子进程会执行 getty 程序。getty 程序会
打开终端,提示用户输入用户名,然后执行 login(1)。当成功验证用户以及执行了其他一些动作之后,login 会创建一个子进程来执行
用户登录 shell.这种登录会话的完整生命周期由写入 wtmp 文件的4个记录来表示,其顺序如下:
1.一个 INIT_PROCESS 记录,由 init 写入
2.一个 LOGIN_PROCES 记录,由 getty 写入
3.一个 USER_PROCESS 记录,由 login 写入
4.一个 DEAD_PROCESS 记录,当 init 进程检测到 login 子进程死亡之后写入。
2.lastlog 文件
lastlog 文件记录着每个用户最近一次登录到系统的时间。它与 wtmp 文件不同, wtmp 文件记录着所有用户的登录登出行为。login 程序
通过 lastlog 文件能够通知用户他们上次登录的时间。在 Linux 上,这个文件位于 /var/log/lastlog
who
w
last
ac
setutxent(); //将 utmp 文件的当前位置设置到文件的起始位置
endutxent(); //关闭 utmp 文件
getutxent(); // 从 utmp 文件中读取一个记录并返回一个指向 utmpx 结构的指针
getutxid();
getutxline();
utmpxname();
getlogin(); // 获取登录名称
pututxline();
updwtmpx();