Служебные программы, обслуживающие взаимодействие пользователей
Активными мы будем называть пользователей, работающих в системе в некоторый момент времени.
Чтобы узнать, какие пользователи активны и за какими терминалами они работают, можно воспользоваться служебной программой
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. (html, txt)
Обратим внимание на использование во вставке значения аргумента shell-процедуры.
Базовым средством обеспечения почтового взаимодействия между пользователями, согласно стандарту POSIX-2001, является служебная программа mailx. Она позволяет и отправлять, и получать письма.
В первом случае ее следует вызывать командной строкой
mailx [-s тема] адрес ...
во втором -
mailx -e
или
mailx [опция ...]
или
mailx -f [опция ...] [почтовый_ящик]
В процессе отправки текст письма читается со стандартного ввода. При получении всеми указанными выше способами, кроме последнего, проверяется системный почтовый ящик, выделенный текущему пользователю, а при наличии опции -f в качестве почтового ящика используется явно заданный файл. Опция -e предписывает только проверить почтовый ящик и, если он не пуст, вернуть код успеха.
В режиме получения можно отправлять письма и управлять содержимым почтового ящика (для чего утилита mailx предоставляет весьма богатый набор команд), однако поддержку этого режима стандарт POSIX-2001 относит к числу необязательных возможностей.
При отправке писем shell-процедурами часто пользуются вставками (см. пример 3.8):
address=... . . . mailx $address << ! . . . текст письма . . . !
Листинг 3.8. Пример использования вставки для формирования письма. (html, txt)
Разумеется, интерактивные пользователи редко применяют утилиту mailx напрямую; для работы с почтой практически во всех ОС имеются средства с более дружественным интерфейсом.