Приемы профессиональной работы в UNIX


ОСВЕДОМЛЕННОСТЬ ПОЛЬЗОВАТЕЛЯ - часть 5


ИМЯ: uchk

uchk Проверка процессов, запущенных другим пользователем

НАЗНАЧЕНИЕ

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

ФОРМАТ ВЫЗОВА

uchk [-a] login_name [...]

ПРИМЕР ВЫЗОВА

uchk -a Вывод всех процессов, запущенных администраторами

ТЕКСТ ПРОГРАММЫ

1 : 2 # @(#) uchk v1.0 Check processes of another user Author: Russ Sage 2а Проверка процессов другого пользователя   4 trap "rm /tmp/ps$$ 2> /dev/null" 0 1 2 3 15   6 if [ $# -eq 0 ] 7 then echo "uchk: argument error" >&2 8 echo "usage: uchk [-a] login_name [ ... ]" >&2 9 exit 1 10 fi   12 if [ "`echo $1 | cut -c1`" = "-" -a "$1" != "-a" ] 13 then echo "uchk: invalid argument $1" >&2 14 echo "usage: uchk [-a] login_name [ ... ]" >&2 15 exit 1 16 fi   18 ADMIN="administrators names go here" 19 if [ "$1" = "-a" ] 20 then shift 21 set $ADMIN $@ 22 fi   24 ps -ef > /tmp/ps$$ 25 for NAME 26 do 27 echo 28 fgrep "$NAME" /tmp/ps$$ 29 done

ПЕРЕМЕННЫЕ СРЕДЫ ВЫПОЛНЕНИЯ

ADMIN Строка с именами пользователей, являющихся администраторами в вашей системе
NAME Содержит каждое имя, считываемое из командной строки

ОПИСАНИЕ

Зачем нам нужен командный файл uchk?

Поскольку UNIX является многопользовательской системой, множество задач выполняются одновременно. Единственный способ следить за такими задачами - с помощью команды ps. Ps - это довольно специфичная команда в том смысле, что она должна обращаться к памяти (/dev/mem) и проходить по связанному списку структур процесса. Это тяжелая вещь, поэтому нелегко сделать свою собственную команду для вывода такого рода информации. Вдобавок память защищена, и доступ к ней имеет только пользователь root.

Так что мы должны или удовлетвориться опциями, которые дает команда ps, или модифицировать вывод этой команды. Uchk скорее относится к последней категории. Мне хотелось получить список состояний процессов по имени пользователя, а не смесь информации, относящейся к разным пользователям. Хотя то, что я хотел, не соответствует ни одной из стандартных опций команды ps, я смог модифицировать ее выход для получения того, что мне надо.

Что делает uchk?

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

Чтобы делать это, uchk должен работать с временными файлами. Система UNIX весьма элегантно управляет временными файлами. Shell позволяет использовать идентификатор процесса для создания уникальных имен файлов для каждого запуска. После того как утилита запущена, временные файлы очищаются путем использования команды trap в shell'е. Команда trap удаляет файл, если что-либо прервало выполнение командного файла или когда программа завершается. Это прекрасная особенность, которая исключает накопление случайных файлов в системе.

Если uchk была вызвана без аргументов или была использована недопустимая опция, то печатается сообщение об ошибке и выполнение завершается.

Uchk имеет переменную ADMIN, которая определяет всех администраторов вашей системы. Отредактируйте символьную строку, присваиваемую переменной ADMIN, указав имена администраторов, которых вы хотите проверить. Имена должны быть разделены пробелами. Это позволит вам проверять процессы ваших администраторов, указывая опцию -a в командной строке. Все остальные имена должны быть указаны в командной строке. Естественно, вы таким же образом могли бы установить другие группы пользователей. Слежение за администраторами поможет вам оценить, как они управляют сохранностью информации, а также распознать административные задачи, которые имеют склонность загружать процессор.

ПРИМЕР




Начало  Назад  Вперед