Lernu la Linuksan Komandon - wtmp

Nomo

utmp, wtmp - ensalutaj rekordoj

Sinopsis

#include

Priskribo

La dosiero permesas al unu eltrovi informon pri kiu nuntempe uzas la sistemon. Eble pli uzantoj uzas la sistemon, ĉar ne ĉiuj programoj uzas utmp-ensalutadon.

Averto: utmp ne devas esti skribebla, ĉar multaj sistemaj programoj (malsaĝe) dependas de ĝia integreco. Vi riskas sistemajn dosierujojn kaj modifojn de sistemaj dosieroj se vi lasas utmp skribebla por iu ajn uzanto.

La dosiero estas sekvenco de enskriboj kun la sekva strukturo deklarita en la dosiero (notu, ke ĉi tiu estas nur unu el pluraj difinoj ĉirkaŭe; detaloj dependas de la versio de 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 {mallonga int e_termination; / * procezo de finaĵo de procezo. * / mallonga int e_exit; / * procezo elirejo. * /}; struct utmp {mallongaj ut_type; / * tipo de ensaluto * / pid_t ut_pid; / * peti ensalutan procezon * / char ut_line [UT_LINESIZE]; / * nomo de tty - "/ dev /" * / char ut_id [4]; / * init id aŭ abbrev. ttyname * / char ut_user [UT_NAMESIZE]; / * uzulnomo * / char ut_host [UT_HOSTSIZE]; / * gastigna nomo por malproksima ensaluto * / struct exit_status ut_exit; / * La eliro-statuso de procezo markita kiel DEAD_PROCESS. * / longa ut_session; / * sesio ID, uzata por fenestrado * / struct timeval ut_tv; / * tempo de eniro estis farita. * / int32_t ut_addr_v6 [4]; / * IP-adreso de fora gastiganto. * / char pad [20]; / * Rezervita por estonta uzo. * /}; / * Backwards kongruaj hakoj. * / #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]

Ĉi tiu strukturo donas la nomon de la speciala dosiero asociita kun la fina stacio de la uzanto, la ensalutnomo de la uzanto kaj la tempo de ensaluto en la formo de tempo (2). Kampoj de ŝnuroj finiĝas per '\ 0' se ili estas pli mallongaj ol la grandeco de la kampo.

La unuaj enskriboj iam kreitaj rezulto de init (8) prilaborado inittab (5). Antaŭ ol enirita procezo, tamen, init (8) purigas utmp per opcio ut_type al DEAD_PROCESS , demetante ut_user , ut_host , kaj ut_time kun nula bajtoj por ĉiu registro, kiu ut_type ne estas DEAD_PROCESSRUN_LVL kaj kie neniu procezo kun PID ut_pid ekzistas. Se neniu malplena registro kun la necesa ut_id troveblas, init kreas novan. Ĝi difinas ut_id de la inittab, ut_pid kaj ut_time al la aktualaj valoroj, kaj ut_type al INIT_PROCESS .

getty (8) lokas la eniron per la pid, ŝanĝas ut_type al LOGIN_PROCESS , ŝanĝas ut_time , fiksas ut_line , kaj atendas ke la ligo estu establita. ensalutu (8), post kiam uzanto estas aŭtentigita, ŝanĝu ut_type al USER_PROCESS , ŝanĝas ut_time , kaj aroj ut_host kaj ut_addr . Dependante de getty (8) kaj ensaluto (8), registroj povas esti lokitaj per ut_line anstataŭ la plej preferinda ut_pid .

Kiam init (8) trovas, ke procezo eliris, ĝi lokas ĝian senpagan eniron per ut_pid , fiksas ut_type al DEAD_PROCESS kaj klakas ut_user , ut_host kaj ut_time kun nula bajtoj.

xterm (1) kaj aliaj finaĵaj emuladiloj rekte kreas USER_PROCESS- registron kaj generas la ut_id per la du lastaj literoj de / dev / ttyp % c aŭ per p % d por / dev / pts / % d . Se ili trovas DEAD_PROCESS por ĉi tiu id, ili reciklas ĝin, alie ili kreas novan eniron. Se ili povas, ili markos ĝin kiel DEAD_PROCESS al la foriro kaj konsilas, ke ili nula ut_line , ut_time , ut_user , kaj ut_host ankaŭ.

xdm (8) ne devus krei utmpan registron, ĉar ne estas atribuita fina stacio. Lasi ĝin krei rezultos erarojn, kiel 'fingro: ne povas stat /dev/machine.dom'. Ĝi devus krei wtmp-enskribojn, tamen, same kiel ftpd (8) faras.

telnetd (8) starigas LOGIN_PROCESS- eniron kaj lasas la reston por ensaluti (8) kiel kutime. Post kiam finneta kunsido finiĝas, telnetd (8) purigas utmp laŭ la priskribita maniero.

La wtmp- dosiero registras ĉiujn ensalutojn kaj ensalutojn. Ĝia formato estas kiel utmp krom ke nula uzanto-nomo indikas elsaluton en la asociita fina stacio. Krome, la fina stacio "~" kun uzulnomo "haltigo""reboot" indikas sistemon ekskludi aŭ rekomenci kaj la du nomoj de fina stacioj "|" / "}" ensalutas la malnovan / novan sistemon tempon kiam dato (1) ŝanĝas ĝin. wtmp estas subtenata per ensaluto (1), init (1), kaj iuj versioj de getty (1). Nek el ĉi tiuj programoj kreas la dosieron , do se ĝi forigas, konservado estas malŝaltita.