Научете командата Linux - wtmp

име

utmp, wtmp - записи за вход

резюме

#include

описание

Файлът utmp позволява да се открие информация за това кой понастоящем използва системата. В момента може да има повече потребители, които използват системата, защото не всички програми използват utmp регистриране.

Предупреждение: utmp не трябва да бъде записваем, защото много системни програми (глупаво) зависят от неговата цялост. Вие рискувате фалшиви системни регистрационни файлове и модификации на системни файлове, ако оставите utmp достъпен за всеки потребител.

Файлът е последователност от записи със следната структура, декларирана в включения файл (имайте предвид, че това е само една от няколкоте дефиниции около детайлите зависят от версията на libc):

#define UT_UNKNOWN 0 # дефиниране на RUN_LVL 1 #define BOOT_TIME 2 # дефиниране NEW_TIME 3 # дефиниране на OLD_TIME 4 # дефиниране на INIT_PROCESS 5 # дефиниране на LOGIN_PROCESS 6 # дефиниране на USER_PROCESS 7 #define DEAD_PROCESS 8 # дефиниране на ACCOUNTING 9 #define UT_LINESIZE 12 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 структура exit_status {short int e_termination; / * състояние на прекратяване на процеса. * / кратко 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. * / дълъг ut_session; / * ID сесия, използвана за прозорци * / struct timeval ut_tv; / * въведено време. * / int32_t ut_addr_v6 [4]; / * IP адрес на отдалечен хост. * / табла за въвеждане [20]; / * Запазено за бъдещо ползване. * /}; / * Обратни хакове за съвместимост. * / #define ut_name ut_user #ifndef _NO_UT_TIME # дефинира 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) изчиства utmp като задава ut_type на DEAD_PROCESS , изчиства ut_user , ut_host и ut_time с нулеви байтове за всеки запис, който ut_type не е DEAD_PROCESS или RUN_LVL и където няма процес с PID ut_pid . Ако не може да бъде намерен празен запис с необходимата ut_id , init създава нов. То определя ut_id от inittab, ut_pid и ut_time до текущите стойности и ut_type до INIT_PROCESS .

getty (8) локализира влизането чрез pid, променя ut_type на LOGIN_PROCESS , променя ut_time , настройва ut_line и чака да се установи връзка. вход (8), след като потребителят е бил удостоверен, променя ut_type до USER_PROCESS , променя ut_time и настройва ut_host и ut_addr . В зависимост от getty (8) и login (8), записите могат да бъдат разположени на ut_line вместо предпочитания ut_pid .

Когато init (8) установи, че даден процес е изтекъл, той открива своя utmp запис от ut_pid , определя ut_type на DEAD_PROCESS и изчиства ut_user , ut_host и ut_time с нулеви байтове.

xterm (1) и други терминални емулатори директно създават запис USER_PROCESS и генерират ut_id, като използват последните две букви на / dev / ttyp % c или като използват p % d за / dev / pts / % d . Ако открият DEAD_PROCESS за този идентификатор, те го рециклират, в противен случай те създават нов запис. Ако могат, ще го маркират като DEAD_PROCESS при напускане и се препоръчва да се нулират ut_line , ut_time , ut_user и ut_host .

xdm (8) не трябва да създава utmp запис, защото няма присвоен терминал. Оставянето му да се създаде ще доведе до грешки, като "пръст: не може да стане /dev/machine.dom". Той трябва да създава wtmp записи, все пак, точно като ftpd (8).

telnetd (8) създава LOGIN_PROCESS запис и остава останалите да влезе (8), както обикновено. След приключването на телнет сесията telnetd (8) почиства utmp по описания начин.

Файлът wtmp записва всички влизания и излизания. Форматът му е точно като utmp, с изключение на това, че нулевото потребителско име показва изход за съответния терминал. Освен това името на терминала "~" с потребителско име "изключване" или "рестартиране" показва спиране или рестартиране на системата и двойката имена на терминала "|" / "}" регистрира старото / новото системно време, когато дата (1) го промени. wtmp се поддържа от login (1), init (1) и някои версии на getty (1). Нито една от тези програми не създава файла , така че ако бъде премахнат, записването е изключено.