学习Linux命令 - wtmp

名称

utmp,wtmp - 登录记录

概要

#include

描述

utmp文件允许您发现谁正在使用系统的信息。 目前使用该系统的用户可能会更多,因为并非所有程序都使用utmp日志记录。

警告: utmp不能是可写的,因为许多系统程序(愚蠢)取决于它的完整性。 如果您将utmp写入任何用户,则可能冒着伪造的系统日志文件和系统文件修改的风险。

该文件是一系列条目,在include文件中声明了以下结构(请注意,这只是几个定义中的一个;细节取决于libc的版本):

#define UT_UNKNOWN 0 #define RUN_LVL 1 #define BOOT_TIME 2 #define NEW_TIME 3 #define OLD_TIME 4 #define INIT_PROCESS 5 #define LOGIN_PROCESS 6 #define USER_PROCESS 7 #define DEAD_PROCESS 8 #define ACCOUNTING 9 #define UT_LINESIZE 12 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 struct exit_status {short int e_termination; / *进程终止状态。 * / short int e_exit; / *进程退出状态。 * /}; struct utmp {short ut_type; / *登录类型* / pid_t ut_pid; / *登录进程的pid * / char ut_line [UT_LINESIZE]; / * tty的设备名称 - “/ dev /”* / char ut_id [4]; / * init id或abbrev。 ttyname * / char ut_user [UT_NAMESIZE]; / *用户名* / char ut_host [UT_HOSTSIZE]; / *主机名用于远程登录* / struct exit_status ut_exit; / *标记为DEAD_PROCESS的进程的退出状态。 * / long ut_session; / *会话ID,用于窗口* / struct timeval ut_tv; / *输入时间。 * / int32_t ut_addr_v6 [4]; / *远程主机的IP地址。 * / char pad [20]; / *保留供将来使用。 * /}; / *向后兼容性黑客。 * / #define ut_name ut_user #ifndef _NO_UT_TIME #define ut_time ut_tv.tv_sec #endif #define ut_xtime ut_tv.tv_sec #define ut_addr ut_addr_v6 [0]

该结构以时间形式(2)给出与用户终端关联的特殊文件的名称,用户的登录名以及登录时间 。 如果字段的长度小于字段的大小,则字符串字段由'\ 0'结尾。

init (8)处理inittab (5)开始创建的第一个条目。 但是,在处理条目之前, init (8)通过将ut_type设置为DEAD_PROCESS来清除utmp ,对于ut_type不是DEAD_PROCESSRUN_LVL的每个记录清空ut_userut_hostut_time ,并且不存在具有PID ut_pid的进程。 如果没有找到需要ut_id的空记录,init会创建一个新记录。 它将inittab中的ut_idut_pidut_time设置为当前值,将ut_type设置INIT_PROCESS

getty (8)通过pid查找条目,将ut_type更改为LOGIN_PROCESS ,更改ut_time ,设置ut_line ,并等待连接建立。 登录 (8),在用户通过身份验证后,将ut_type更改为USER_PROCESS ,更改ut_time并设置ut_hostut_addr 。 取决于getty (8)和login (8),记录可以通过ut_line而不是ut_pid来找到。

init (8)发现进程已经退出时,它通过ut_pid找到它的utmp条目,将ut_type设置为DEAD_PROCESS ,并用空字节清除ut_userut_hostut_time

xterm (1)和其他终端仿真程序直接创建USER_PROCESS记录,并通过使用/ dev / ttyp %c的最后两个字母或通过对/ dev / pts / %d使用p %d来生成ut_id 。 如果他们为这个ID找到一个DEAD_PROCESS ,他们会回收它,否则他们会创建一个新条目。 如果可以,它们将在退出时将其标记为DEAD_PROCESS ,并且建议它们将ut_lineut_timeut_userut_host同时为空。

xdm (8)不应创建utmp记录,因为没有分配的终端。 让它创建一个会导致错误,如'finger:can not stat /dev/machine.dom'。 它应该创建wtmp条目,但是,就像ftpd (8)一样。

telnetd (8)像往常一样设置LOGIN_PROCESS条目并使剩下的登录 (8)。 telnet会话结束后, telnetd (8)以所述方式清除utmp。

wtmp文件记录所有登录和注销。 其格式与utmp完全相同,只是空的用户名表示在关联的终端上注销。 此外,用户名“shutdown”“rebo​​ot”的终端名称“〜”表示系统关机或重新启动,并且终端名称“|” / “}”记录日期 (1)更改时的旧/新系统时间。 wtmplogin (1), init (1)和getty (1)的某些版本维护。 这些程序都不会创建该文件 ,因此如果它被删除,记录保存功能将被关闭。