.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1993 Michael Haardt (michael@cantor.informatik.rwth-aachen.de), .\" Fri Apr 2 11:32:09 MET DST 1993 .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\" Modified 1993-07-25 by Rik Faith (faith@cs.unc.edu) .\" Modified 1995-02-26 by Michael Haardt .\" Modified 1996-07-20 by Michael Haardt .\" Modified 1997-07-02 by Nicolás Lichtmaier .\" Modified 2004-10-31 by aeb, following Gwenole Beauchesne .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH utmp 5 "2 мая 2024 г." "Linux man\-pages 6.8" .SH ИМЯ utmp, wtmp \- записи о входах в систему .SH СИНТАКСИС .nf \fB#include \fP .fi .SH ОПИСАНИЕ Файл \fIutmp\fP позволяет получать информацию о том, кто в данный момент работает в системе. Пользователей, в данное время использующих систему, может быть большое количество, поскольку не все программы используют протоколирование через utmp. .P \fBПредупреждение:\fP \fIutmp\fP не должен быть доступен на запись классу пользователей "остальные", так как многие системные программы (что очень глупо) зависят от его целостности. Вы рискуете получить фиктивные системные файлы статистики и изменения в системных файлах, если предоставите любому пользователю возможность писать в файл \fIutmp\fP кроме владельца и группы, которой принадлежит файл. .P Файл состоит из списка записей с типом структуры \fIutmp\fP, объявленной в \fI\fP (заметим, что в данном случае указано только один из вариантов; детали зависят от версии libc): .P .in +4n .EX /* Values for ut_type field, below */ \& #define EMPTY 0 /* Record does not contain valid info (formerly known as UT_UNKNOWN on Linux) */ #define RUN_LVL 1 /* Change in system run\-level (see \fBinit\fP(1)) */ #define BOOT_TIME 2 /* Time of system boot (in \fIut_tv\fP) */ #define NEW_TIME 3 /* Time after system clock change (in \fIut_tv\fP) */ #define OLD_TIME 4 /* Time before system clock change (in \fIut_tv\fP) */ #define INIT_PROCESS 5 /* Process spawned by \fBinit\fP(1) */ #define LOGIN_PROCESS 6 /* Session leader process for user login */ #define USER_PROCESS 7 /* Normal process */ #define DEAD_PROCESS 8 /* Terminated process */ #define ACCOUNTING 9 /* Not implemented */ \& #define UT_LINESIZE 32 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 \& struct exit_status { /* Type for ut_exit, below */ short e_termination; /* Process termination status */ short e_exit; /* Process exit status */ }; \& struct utmp { short ut_type; /* Type of record */ pid_t ut_pid; /* PID of login process */ char ut_line[UT_LINESIZE]; /* Device name of tty \- "/dev/" */ char ut_id[4]; /* Terminal name suffix, or inittab(5) ID */ char ut_user[UT_NAMESIZE]; /* Username */ char ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or kernel version for run\-level messages */ struct exit_status ut_exit; /* Exit status of a process marked as DEAD_PROCESS; not used by Linux init(1) */ /* The ut_session and ut_tv fields must be the same size when compiled 32\- and 64\-bit. This allows data files and shared memory to be shared between 32\- and 64\-bit applications. */ #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32 int32_t ut_session; /* Session ID (\fBgetsid\fP(2)), used for windowing */ struct { int32_t tv_sec; /* Seconds */ int32_t tv_usec; /* Microseconds */ } ut_tv; /* Time entry was made */ #else long ut_session; /* Session ID */ struct timeval ut_tv; /* Time entry was made */ #endif \& int32_t ut_addr_v6[4]; /* Internet address of remote host; IPv4 address uses just ut_addr_v6[0] */ char __unused[20]; /* Reserved for future use */ }; \& /* Backward compatibility hacks */ #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] .EE .in .P This structure gives the name of the special file associated with the user's terminal, the user's login name, and the time of login in the form of \fBtime\fP(2). String fields are terminated by a null byte (\[aq]\e0\[aq]) if they are shorter than the size of the field. .P Самые первые записи создаются \fBinit\fP(1) после обработки \fBinittab\fP(5). Хотя перед тем, как элемент обрабатывается, \fBinit\fP(1) очищает utmp, устанавливая \fIut_type\fP равным \fBDEAD_PROCESS\fP, заполняя \fIut_user\fP, \fIut_host\fP и \fIut_time\fP нулевыми байтами в записях, в которых \fIut_type\fP не равен \fBDEAD_PROCESS\fP или \fBRUN_LVL\fP и для которых не существует процессов с PID, равным \fIut_pid\fP. Если не найдено ни одной пустой записи с нужным \fIut_id\fP, то \fBinit\fP(1) создает новую. Он устанавливает значение \fIut_id\fP из inittab, \fIut_pid\fP и \fIut_time\fP из текущих значений и \fIut_type\fP в \fBINIT_PROCESS\fP. .P \fBmingetty\fP(8) (или \fBagetty\fP(8)) находит элементы по их идентификатору PID, меняет \fIut_type\fP на \fBLOGIN_PROCESS\fP, изменяет \fIut_time\fP, устанавливает \fIut_line\fP и ожидает установки соединения.\fBlogin\fP(1), после того как пользователь был идентифицирован, меняет \fIut_type\fP на \fBUSER_PROCESS\fP, изменяет \fIut_time\fP и устанавливает \fIut_host\fP и \fIut_addr\fP. В зависимости от \fBmingetty\fP(8) (или \fBagetty\fP(8)) и \fBlogin\fP(1), записи могут быть расположены в соответствии с \fIut_line\fP, вместо более предпочитаемого \fIut_pid\fP. .P Когда \fBinit\fP(1) обнаруживает, что процесс завершился, он находит его запись в utmp по \fIut_pid\fP, устанавливает \fIut_type\fP в \fBDEAD_PROCESS\fP, и затирает \fIut_user\fP, \fIut_host\fP и \fIut_time\fP нулями. .P \fBxterm\fP(1) and other terminal emulators directly create a \fBUSER_PROCESS\fP record and generate the \fIut_id\fP by using the string that suffix part of the terminal name (the characters following \fI/dev/\fP[pt]\fIty\fP). If they find a \fBDEAD_PROCESS\fP for this ID, they recycle it, otherwise they create a new entry. If they can, they will mark it as \fBDEAD_PROCESS\fP on exiting and it is advised that they null \fIut_line\fP, \fIut_time\fP, \fIut_user\fP, and \fIut_host\fP as well. .P \fBtelnetd\fP(8) устанавливает элемент \fBLOGIN_PROCESS\fP и оставляет остальное, как обычно, аргументу для \fBlogin\fP(1). После завершения сеанса telnet, \fBtelnetd\fP(8) очищает utmp вышеописанным путем. .P The \fIwtmp\fP file records all logins and logouts. Its format is exactly like \fIutmp\fP except that a null username indicates a logout on the associated terminal. Furthermore, the terminal name \fB\[ti]\fP with username \fBshutdown\fP or \fBreboot\fP indicates a system shutdown or reboot and the pair of terminal names \fB|\fP/\fB}\fP logs the old/new system time when \fBdate\fP(1) changes it. \fIwtmp\fP is maintained by \fBlogin\fP(1), \fBinit\fP(1), and some versions of \fBgetty\fP(8) (e.g., \fBmingetty\fP(8) or \fBagetty\fP(8)). None of these programs creates the file, so if it is removed, record\-keeping is turned off. .SH ФАЙЛЫ \fI/var/run/utmp\fP .br \fI/var/log/wtmp\fP .SH ВЕРСИИ POSIX.1 does not specify a \fIutmp\fP structure, but rather one named \fIutmpx\fP (as part of the XSI extension), with specifications for the fields \fIut_type\fP, \fIut_pid\fP, \fIut_line\fP, \fIut_id\fP, \fIut_user\fP, and \fIut_tv\fP. POSIX.1 does not specify the lengths of the \fIut_line\fP and \fIut_user\fP fields. .P В Linux структура \fIutmpx\fP совпадает со структурой \fIutmp\fP. .SH СТАНДАРТЫ Linux. .SH ИСТОРИЯ В Linux записи utmp не следуют форматам ни v7/BSD ни System V; они содержат поля из обоих форматов. .P v7/BSD имеет меньшее количество полей; важнее всего то, что в нём нет \fIut_type\fP, который заставляет v7/BSD\-совместимые программы выводить, к примеру, отработавшие записи или записи о входе систему. Также в этой версии отсутствует файл настройки, который определяет места для сеансов. Всё это делается в BSD из\-за отсутствия поля \fIut_id\fP. .P В Linux (как в System V) поле \fIut_id\fP записи никогда не меняется после того, как один раз установлено, что позволяет резервировать место без необходимости в файле настройки. Очищение \fIut_id\fP может привести к соперничеству, приводящему к повреждению элементов utmp и нарушению безопасности системы. Очистка вышеупомянутых полей нулями не требуется согласно семантике System V, но позволяет запускать многие программы, которые используют семантику BSD и которые не изменяют utmp. Linux использует соглашение BSD при работе с содержимым строк, как описано ранее. .P .\" mtk: What is the referrent of "them" in the following sentence? .\" System V only uses the type field to mark them and logs .\" informative messages such as \fB"new time"\fP in the line field. В System V нет полей \fIut_host\fP и \fIut_addr_v6\fP. .SH ПРИМЕЧАНИЯ В отличии от других систем, где протоколирование сообщений utmp может быть выключено простым удалением файла, в Linux файл utmp всегда должен существовать. Если вы хотите отключить \fBwho\fP(1), то просто сделайте чтение utmp недоступным всем остальным. .P Формат файла зависит от архитектуры, поэтому рекомендуется, чтобы он обрабатывался только на машинах с одинаковой архитектурой. .P Заметим, что на \fIдвуархитектурных\fP платформах, то есть системах, которые позволяют запускать сразу 32\- и 64\-битные приложения (x86\-64, ppc64, s390x и т.д.), поле \fIut_tv\fP имеет одинаковый размер в 32\- и 64\-битном режиме. Это же относится к \fIut_session\fP и \fIut_time\fP, если они есть. Это позволяет использовать файлы данных и память одновременно и в 32\- и в 64\-битных приложениях. Данная возможность достигается сменой типа \fIut_session\fP на \fIint32_t\fP и \fIut_tv\fP на структуру с двумя полями \fIint32_t\fP \(em \fItv_sec\fP и \fItv_usec\fP. Так как \fIut_tv\fP не может быть одинакова с \fIstruct timeval\fP, то вместо вызова: .P .in +4n .EX gettimeofday((struct timeval *) &ut.ut_tv, NULL); .EE .in .P для установки значения этого поля рекомендуется использовать: .P .in +4n .EX struct utmp ut; struct timeval tv; \& gettimeofday(&tv, NULL); ut.ut_tv.tv_sec = tv.tv_sec; ut.ut_tv.tv_usec = tv.tv_usec; .EE .in .\" .P .\" Note that the \fIutmp\fP struct from libc5 has changed in libc6. .\" Because of this, .\" binaries using the old libc5 struct will corrupt .\" .IR /var/run/utmp " and/or " /var/log/wtmp . .\" .SH BUGS .\" This man page is based on the libc5 one, things may work differently now. .SH "СМОТРИТЕ ТАКЖЕ" \fBac\fP(1), \fBdate\fP(1), \fBinit\fP(1), \fBlast\fP(1), \fBlogin\fP(1), \fBlogname\fP(1), \fBlslogins\fP(1), \fBusers\fP(1), \fButmpdump\fP(1), \fBwho\fP(1), \fBgetutent\fP(3), \fBgetutmp\fP(3), \fBlogin\fP(3), \fBlogout\fP(3), \fBlogwtmp\fP(3), \fBupdwtmp\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал Azamat Hackimov , Dmitriy Ovchinnikov , Dmitry Bolkhovskikh , Katrin Kutepova , Yuri Kozlov и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику по его адресу электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .