學習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)的某些版本維護。 這些程序都不會創建該文件 ,因此如果它被刪除,記錄保存功能將被關閉。