Опубликован: 15.06.2004 | Уровень: специалист | Доступ: платный
Лекция 3:

Утилиты и функции, обслуживающие понятие "пользователь"

< Лекция 2 || Лекция 3: 12 || Лекция 4 >

Служебные программы, обслуживающие взаимодействие пользователей

Активными мы будем называть пользователей, работающих в системе в некоторый момент времени.

Чтобы узнать, какие пользователи активны и за какими терминалами они работают, можно воспользоваться служебной программой

who

(заметим, что стандарт POSIX-2001 трактует ее как необязательную, входящую в расширение "Мобильность пользователей").

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

galat    ttyS4    Aug 22 12:41
kost     ttyS6    Aug 22 10:09

К той же дополнительной категории, что и who, принадлежат утилиты write, talk и mesg (а также описанная выше служебная программа newgrp ).

После установления соединения утилита

write  имя_пользователя [терминал]

позволяет построчно пересылать стандартный ввод отправителя на терминал пользователя-получателя. Аргументы имя_пользователя и терминал задаются в том виде, как их выводит служебная программа who. Необязательный аргумент [терминал] нужен в тех случаях, когда пользователь-получатель вошел в систему с нескольких терминалов.

Утилиту

talk  имя_пользователя [терминал]

можно рассматривать как более современный аналог write, поскольку она имеет экранный интерфейс и поддерживает двустороннее взаимодействие активных пользователей.

С помощью служебной программы

mesg [y|n]

пользователь может разрешить или запретить установление соединений со своим терминалом. При вызове без аргументов mesg выдает текущий статус терминала.

Приведем пример употребления описанных служебных программ. Рассылку сообщения-аргумента всем активным пользователям можно реализовать посредством shell-процедуры (см. листинг 3.7).

who | while read a b c
     do
       write $a $b << !
         $1 !
     done
Листинг 3.7. Пример использования утилит who и write.

Обратим внимание на использование во вставке значения аргумента shell-процедуры.

Базовым средством обеспечения почтового взаимодействия между пользователями, согласно стандарту POSIX-2001, является служебная программа mailx. Она позволяет и отправлять, и получать письма. В первом случае ее следует вызывать командной строкой

mailx  [-s тема] адрес ...

во втором -

mailx -e

или

mailx  [опция ...]

или

mailx  -f [опция ...] [почтовый_ящик]

В процессе отправки текст письма читается со стандартного ввода. При получении всеми указанными выше способами, кроме последнего, проверяется системный почтовый ящик, выделенный текущему пользователю, а при наличии опции -f в качестве почтового ящика используется явно заданный файл. Опция -e предписывает только проверить почтовый ящик и, если он не пуст, вернуть код успеха.

В режиме получения можно отправлять письма и управлять содержимым почтового ящика (для чего утилита mailx предоставляет весьма богатый набор команд), однако поддержку этого режима стандарт POSIX-2001 относит к числу необязательных возможностей.

При отправке писем shell-процедурами часто пользуются вставками (см. листинг 3.8):

address=...
  . . .
mailx $address << !
  . . .
текст письма
  . . .
!
Листинг 3.8. Пример использования вставки для формирования письма.

Разумеется, интерактивные пользователи редко применяют утилиту mailx напрямую; для работы с почтой практически во всех ОС имеются средства с более дружественным интерфейсом.

< Лекция 2 || Лекция 3: 12 || Лекция 4 >
Антон Коновалов
Антон Коновалов

В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13
Планируется ли актуализация материалов данного очень полезного курса?