Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка ПО ОСРВ заочники.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
8.72 Mб
Скачать

2.4. Вопрос 2: Как работает команда who?

Нами было установлено, что команда who отображает информацию о тех пользователях, которые к текущему моменту вошли в систему. На странице документации для команды who дано описание того, что может делать эта команда и каким образом заставить ее вы­полнить допустимое для нее действие. Как работает команда who? Как она выполняет до­пустимые для нее действия?

Можно предположить, что системные программы, подобные who, используют специаль­ные системные функции. В том числе, возможно, они включают расширенные привилегии администратора. Вам может потребоваться получить доступ к средствам системного разработчика, включая доступ к CD-ROM, толстым книгам и секретным кодам. Все это может потребовать каких-то расходов.

Вся документация о функционировании команды who находится в самой системе. Вам только нужно знать, где следует искать документацию.

Изучение Unix из Unix

Вы можете изучать принципы работы любой команды, используя для этого четыре воз­можности:

• Чтение справочника.

• Поиск в справочнике.

• Чтение файлов с именами, имеющими расширение .h.

• Использование ссылок из секции see also.

Мы будем далее использовать эти возможности для изучения команды who.

Чтение из справочника

Для изучения команды who следует набрать

$ man who

и обратиться к секции DESCRIPTION. В справочнике для SunOS текст этой секции будет иметь такой вид:

DESCRIPTION

The who utility can list the user's name, terminal line,

login time, elapsed time since activity occurred on the

line, and the process-ID of the command interpreter (shell)

for each current UNIX system user. It examines the

/Var/adm/utmp file to obtain its information. If file is

given, that file (which must be in utmp(4) format) is exam-ined.

Usually, file will be /Var/admAvtmp, which contains a

history of all the logins since the file was last created.

Из данного документа мы получаем полную информацию о команде. Команда who про­веряет файл /var/adm/utmp для извлечения для себя из него необходимой информации. Из текста описания следует, что список текущих пользователей хранится в этом файле. Команда читает файл. Что нам следует знать об этом файле? Для этого мы можем обра­титься к справочнику и найти необходимую информацию.

Поиск в справочнике

Команда man допускает возможность обращения к справочнику для организации поиска по ключевым словам. Для организации поиска следует использовать опцию -к. Чтобы получить информацию о 'utmp', следует выполнить:

$ man -k utmp

endutent

getutent (3c)

-access utmp file entry

endutxent

getutxent (3c)

-access utmpx file entry

getutent

getutent (3c)

-access utmp file entry

getutid

getutent (3c)

-access utmp file entry

getutline

getutent (3c)

-access utmp file entry

getutmp

getutxent (3c)

-access utmpx file entry

getutmpx

getutxent (3c)

-access utmpx file entry

getutxent

getutxent (3c)

-access utmpx file entry

getutxid

getutxent (3c)

-access utmpx file^fltfy~~

getutxline

getutxent (3c)

-access utmpx file entry

pututline

getutent (3c)

-access utmp file entry

pututxline

getutxent (3c)

-access utmpx file entry

setutent

getutent (3c)

-access utmp file entry

setutxent

getutxent (3c)

-access utmpx file entry

ttyslot

ttyslot (3c)

. -find the slot in the utmp file of the current user

updwtmp

getutxent (3c)

-access utmpx file entry

updwtmpx

getutxent (3c)

-access utmpx file entry

utmp

utmp (4)

utmp and wtmp entry formats

utmp2wtmp

acct(1m)

overview of accounting and miscellaneous accounting commands

utmpd

utmpd (1m)

-utmp and utmpx monitoring daemon

utmpname

getutent (3c)

-access utmp file entry

utmpx

utmpx (4)

utmpx and wtmpx entry formats

utmpxname

getutxent (3c)

-access utmpx file entry

wtmp

utmp (4)

utmp and wtmp entry formats

wtmpx

utmpx (4)

utmpx and wtmpx entry formats

$

Полученный результат работы команды был получен на SunOS. Такой вывод будет пред-

. ставлен в аналогичном виде и на других инсталляциях. Каждая строка в этом выводе

содержит тему, название страницы справочника и краткое описание. Те строки, которые

помечены метками utmp и wtmp, возможно, представляют то, что нам необходимо. Другие

(записи с похожими метками могут нам понадобиться позже.

Нотация utmp (4) означает, что документация по utmp находится в разделе 4 справочника. Этот номер раздела следует использовать при обращении к команде man:

$ man 4 utmp

utmp(4j utmp(4)

NAME

utmp, wtmp - Login records

SYNOPSIS

#include <utmp.h>

DESCRIPTION

The utmp file records information about who is currently using the

system.

The file is a sequence of utmp entries, as defined in struct utmp in the

utmp.h file.

The utmp structure gives the name of the special file associated with

the user's terminal, the user's login name, and the time of the login

in the form of time(3). The ut_type field is the type of entry, which

can specify several symbolic constant values. The symbolic constants

are defined in the utmp.h file.

The wtmp file records all logins and logouts. A null user name

indicates a logout on the associated terminal. A terminal referenced

with a tilde (-) indicates that the system was rebooted at the

indicated time. The adjacent pair of entries with terminal names

referenced by a vertical bar (|) or a right brace (}) indicate the

system-maintained time just before and just after a dale command has

changed the system's time frame.

The wtmp file is maintained by login( 1) and init(8). Neither of these

pro-grams creates the file, so, if it is removed, record keeping is

turned off. See ac(8) for information on the file. ^—^

FILES

/usr/include/utmp.h

/Var/adm/utmp more

(88%)

Мы достаточно быстро ответили на вопрос, как работает команда who. На первой страни­це документации по команде who сказано, что команда читает файл utmp. Здесь сказано, что файл utmp представляет собой последовательность записей utmp, которые определе­ны в структуре utmp в файле utmp.h. Где же находится этот файл utmp.h?

Нам повезло. В разделе FILES на странице документации есть нужная информация. Там указано маршрутное имя файла /usr/include/utmp.h.

Прежде чем перейти к рассмотрению следующей возможности для работы со справочни­ком (чтение файлов с расширением имен .1)), обратимся еще к некоторой информации на данной странице документации. Речь идет о файле wtmp, куда происходит запись обо всех входах в систему и выходах из системы. Для работы с файлом указаны ссылки на команды login(l), init(8) и ас(8). Их рассмотрение будет интересно при изучении тем, которые будут представлены позже.

Изучение Unix по справочнику аналогично поиску информации о каком-то объекте в Web. По мере чтения различных страниц справочника вы находите дополнительные ссылки, с помощью которых можете обратиться к интересующим вас и полезным для вас темам. Именно так, в соответствии с нашими задачами, мы подошли к изучению файла <utmp.h>.

Чтение файлов .h

В документации по utmp сказано, что структура записей в файле utmp описана в файле /usr/include/utmp.h. В большинстве Unix - машин заголовочные файлы для системной ин­формации хранятся в каталоге, который называется /usr/include. Когда С - компилятор обнаруживает в тексте программы строку вида:

#include <stdio.h>

он предполагает, что этот файл находится в каталоге /usr/include. Используем команду more для прочтения содержимого этого файла:

$ more /usr/include/utmp.h

«define UTMP_FILE "/var/adm/utmp"

#define WTMP_FILE "/var/adm/Wtmp"

#include <sys/types.h> /* for pid t, time t */

*/

* Структуры файлов utmp и wtmp.

*

**

#define ut_name ut_user /* совместимость */

struct utmp {

char ut_user[32]; /* Пользовательское входное имя */

char utjd[14];

/* /etc/inittab id- IDENT_LEN в

char ut_line[32]; /* имя устройства (console, Inxx) */

short ut_type; /* тип записи */

pid_t ut_pid;

struct exit_status { I* идентификатор процесса */ struct exitstatus {

short ejermination; /* статус окончания процесса */

short e_exit; /* статус процесса при выполнении exit */

} ut_exit; /* Статус exit процесса, помеченного как

* DEAD PROCESS.

timej utjime; /* временная отметка о сделанной записи */

char ut_host[64]; /* имя хоста, такое же как

* MAXHOSTNAMELEN */

};

/* Определения для ut.type */

utmp.h (60%)

В начале в данном выводе пропущен ряд сообщений и другой вводный материал. Далее мы обнаруживаем определение структуры. Оказывается, записи о вхождениях в систему состоят из восьми элементов. Поле ut_user предназначено для хранения пользовательско­го имени. В массиве ut_line помещается информация об устройстве, что в данном случае будет означать терминал, через который пользователь соединен с системой. Через не­сколько строк в структуре представлено поле ut_time, где хранится время вхождения в систему, а поле ut_host предназначено для хранения имени удаленного компьютере.

В рассматриваемой структуре есть еще и другие элементы. Они напрямую не используются для отображения информации командой who, но могут быть полезными в других ситуациях.

Структура записи utmp на вашей системе может отличаться от рассмотренной. Но файл ut-mp.h на вашей системе будет описывать формат данных utmp для вашей системы. Имена полей обычно одинаковы для различных версий Unix, но наличие поля, которое имеет комментарий "совместимость", показывает, что они иногда могут и отличаться. Заголо­вочные файлы обычно снабжены хорошими комментариями, которые содержат полезную информацию.