그만큼utmp 파일을 사용하면 현재 누가 시스템을 사용하고 있는지에 대한 정보를 찾을 수 있습니다. 모든 프로그램이 utmp 로깅을 사용하지는 않기 때문에 현재 시스템을 사용하는 사용자가 더 많을 수 있습니다.
경고: utmp 쓰기가 불가능해야합니다. 많은 시스템 프로그램 (어리석게도)이 무결성에 의존하기 때문입니다. 탈퇴하면 가짜 시스템 로그 파일 및 시스템 파일 수정의 위험이 있습니다.utmp모든 사용자에게 쓸 수 있습니다.
이 파일은 include 파일에 선언 된 다음 구조를 갖는 일련의 항목입니다 (libc의 버전에 따라 세부 사항이 달라질 수 있습니다).
#define UT_UNKNOWN 0 #define RUN_LVL 1 #define BOOT_TIME 2 #define OLD_TIME 4 # 정의 INIT_PROCESS 5 # 정의 LOGIN_PROCESS 6 #define USER_PROCESS 7 #define DEAD_PROCESS 8 # 정의 회계 정의 9 #define UT_LINESIZE 12 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 구조체 exit_status {short int e_termination; / * 프로세스 종료 상태. * / 짧은 int e_exit; / * 프로세스 종료 상태. * /}; struct utmp {짧은 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). 문자열 필드는에 의해 종료됩니다.' ' 필드의 크기보다 짧은 경우.
처음 생성 된 항목은 초기화 (8) 가공 inittab (5). 그러나 항목이 처리되기 전에, 초기화 (8) 설정에 의해 utmp 정리ut_type 에DEAD_PROCESS, 청소ut_user, ut_host, 및ut_time 각 레코드에 대해 null 바이트가있는ut_type 아니다DEAD_PROCESS 또는RUN_LVL PID가있는 프로세스가없는 경우ut_pid 존재합니다. 필요한 빈 레코드가없는 경우ut_id 이 발견되면, init은 새로운 것을 생성한다. 그것은 설정ut_id inittab에서ut_pid 과ut_time 현재 값으로ut_type 에INIT_PROCESS.
게티 (8)는 pid에 의한 엔트리의 위치를 찾으며,ut_type 에LOGIN_PROCESS, 변경ut_time, 세트들ut_line, 연결이 설정 될 때까지 대기합니다. 로그인 (8), 사용자가 인증 된 후,ut_type 에USER_PROCESS, 변경ut_time, 및 세트ut_host 과ut_addr. 에 따라 게티 (8) 및 로그인 (8)에서, 기록은ut_line 바람직한 대신에ut_pid.
언제 초기화 (8)은 프로세스가 종료되었음을 발견하고 utmp 엔트리를ut_pid, 세트들ut_type 에DEAD_PROCESS, 지우고ut_user, ut_host 과ut_time null 바이트.
xterm (1) 및 다른 터미널 에뮬레이터는 직접USER_PROCESS 기록하고ut_id 의 마지막 두 글자를 사용하여/ dev / ttyp %기음 또는피 %디 …에 대한/ dev / pts / %디 . 그들이DEAD_PROCESS 이 ID에 대해서는 재활용하고, 그렇지 않으면 새 항목을 만듭니다. 그들이 할 수 있다면, 그들은 그것을 다음과 같이 표시 할 것입니다.DEAD_PROCESS 끝내고 그들은 null임을 권고한다. ut_line,ut_time, ut_user, 및ut_host 게다가.
xdm (8)은 할당 된 터미널이 없기 때문에 utmp 레코드를 생성해서는 안됩니다. 그것을 생성 시키면 'finger : can not stat /dev/machine.dom'과 같은 오류가 발생합니다. 그래도 wtmp 항목을 만들어야합니다. ftpd (8) 않습니다.
telnetd (8)은LOGIN_PROCESS 나머지는 남겨둔다. 로그인 (8) 평소대로. 텔넷 세션이 끝난 후, telnetd (8) 설명 된 방법으로 utmp를 정리합니다.
그만큼몹 파일은 모든 로그인과 로그 아웃을 기록합니다. 형식은 정확히 같습니다.utmp null 사용자 이름이 연관된 터 L 널에서의 로그 아웃을 표시한다는 점을 제외하고는 예외입니다. 또한 터미널 이름'~'사용자 이름 포함"일시 휴업" 또는"재부팅" 시스템 종료 또는 재부팅을 나타내며 한 쌍의 터미널 이름'|'/'}' 이전 / 새로운 시스템 시간을 기록합니다. 날짜 (1) 그것을 변경합니다.몹 에 의해 유지된다 로그인 (1), 초기화 (1) 및 일부 버전의 게티 (1). 이 두 프로그램 모두 파일을 작성하지 않으므로 파일이 제거되면 레코드 유지가 해제됩니다.