Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#4| Adjudicator & Tower Knight
Demon's Souls |#3| Cave & Armor Spider
Demon's Souls |#2| First Boss
SCP-077: Rot skull

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Сэйдж Рас Весь текст 822.4 Kb

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

Предыдущая страница Следующая страница
1 ... 41 42 43 44 45 46 47  48 49 50 51 52 53 54 ... 71
цесса watch.  В строке 15 удаляется временный файл watch и в строке 16
происходит  выход  из программы.  Теперь командный файл watch более не
выполняется как фоновый.

     Строка 20 выполняется, если опция -k не была указана или если нет
файла .watch.  (Последнее может произойти,  если пользователь пытается
уничтожить процесс, забыв, что он уже был уничтожен.) Если опция -k не
была указана,  мы можем считать, что watch был вызван, чтобы стать фо-
новым процессом и выполнять свою работу.  Для того чтобы сделать  это,
текущий  процесс отображает свой идентификатор процесса в файл .watch.
Этот файл остается в вашем регистрационном каталоге до тех  пор,  пока
он  не  будет  удален  вручную или же изменен путем повторного запуска
watch.

     В строке 22 инициализируется переменная LIST.  Ее значением явля-
ется  символьная строка с именами,  разделенными пробелами.  Вам нужно
вручную отредактировать переменную LIST перед запуском в вашей  систе-
ме.  Просто уберите ее нынешнее содержимое и вставьте туда имена адми-
нистраторов вашей системы.  Если в командной строке будут указаны  до-
полнительные  имена  пользователей,  они  будут добавлены в переменную
LIST посредством символов расширения параметров $*. Тем самым перемен-
ная LIST станет основным списком всех имен пользователей,  за которыми
будет вестись наблюдение.

     Строки 24-36 выполняют цикл постоянного наблюдения. В начале каж-
дой  итерации  с помощью команды who создается список имен пользовате-
лей, который передается циклу for в строке 26. Цикл for использует ко-
мандную подстановку для получения списка слов, образованного из перво-
го поля команды who.  Каждое зарегистрированное  имя  сравнивается  со
списком  предварительно  определенных имен,  за которыми мы наблюдаем.
Обратите внимание,  что внешний цикл while сам себя помещает на выпол-
нение в фоновом режиме.  Это означает,  что вам нет необходимости вво-
дить это с клавиатуры.

     Строки 29-33 управляют внутренним  циклом,  который  проходит  по
именам, содержащимся в нашем основном списке, и сравнивает их с имена-
ми,  полученными от команды who.  Когда имя, полученное от команды who
(имя  зарегистрированного  пользователя)  совпадает  с  именем в нашем
списке,  на экран выводится сообщение о том, что данное лицо зарегист-
рировалось.

     После того как все имена проверены, командный файл watch приоста-
навливается на 10 секунд (строка 35). Когда он снова пробуждается, вы-
полняется следующая итерация вечного цикла while. Все зарегистрирован-
ные имена вновь сравниваются со списком. Это будет продолжаться до тех
пор,  пока  вы  не прекратите выполнение watch.  Как отмечалось ранее,
watch можно легко уничтожить с помощью опции -k или же  вручную  путем
ввода команды "kill `cat $HOME/.watch`".

     МОДИФИКАЦИИ

     Watch выполняет довольно мало работы и использует какую-то  часть
времени центрального процессора. Вы можете поэкспериментировать с уве-
личением интервала паузы (sleep), чтобы watch запускался не так часто.
Большинство  пользователей находятся в системе по крайней мере минуту,
поэтому вы можете попробовать значение sleep(60). Вы по-прежнему може-
те обнаружить регистрацию всех интересующих вас пользователей?

---------------------------------------------------------------------------

ИМЯ:   whox
---------------------------------------------------------------------------

        whox   Команда who с дополнительными возможностями

     НАЗНАЧЕНИЕ

     Предоставляет много  дополнений  к выходу команды who и позволяет
применять данные who для других приложений.

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

        whox [-f] [-n] [-m] [-p] [-t] [-w] [-x]

где
        -f указывает каждого зарегистрированного пользователя

        -n сортирует выход команды who по именам

        -m передает почту каждому пользователю

        -p выводит информацию о паролях пользователей

        -t сортирует выход команды who по времени (умолчание)

        -w показывает возможность записи на зарегистрированные
           терминальные устройства

        -x дополнительная информация о регистрационном
           каталоге и паролях

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

        whox -w

     Показывает права  доступа  к  файлу (возможность чтения и записи)
для каждого зарегистрированного терминального устройства

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

1   :
2   # @(#) whox v1.0 Who with expanded options  Author: Russ Sage
2а                   Команда who с дополнительными опциями

4   XTRA="no"
5   SORT="sort -b +2"
6   DISPLAY="norm"

8   CUT1="cut -d' ' -f1"
9   CUT5="cut -d: -f5"
10  CUT6="cut -d: -f6"

12  for ARG in $@
13  do
14          case $ARG in
15          -f)     DISPLAY="finger"
16                  COMMAND="finger \$NAME; echo";;
17          -n)     SORT="sort";;
18          -m)     DISPLAY="mail";;
19          -p)     DISPLAY="pass"
20                  COMMAND="grep \"^\$NAME:\" /etc/passwd";;
21          -t)     SORT="sort -b +2";;
22          -w)     DISPLAY="write";;
23          -x)     XTRA="yes";;
24          *)      echo "whox: invalid option $ARG"
25                  echo "usage: whox [-f] [-n] [-m] [-p] [-t] [-w] [-x]"
26                  echo "             -f  finger users"
27                  echo "             -n  sort by name"
28                  echo "             -m  mail to each user"
29                  echo "             -p  password info on users"
30                  echo "             -t  sort by time (default)"
31                  echo "             -w  show writeability of devices"
32                  echo "             -x  extra home dir and gcos info"
33                  exit 1;;
34           esac
35  done

37  if [ "$XTRA" = "yes" ]
38    then EXTRA="| while read LINE; do \
39         NAME=\`echo \$LINE | cut -d' ' -f1\`;\
40         ENTRY=\`grep \"^\$NAME:\" /etc/passwd\`;\
41         echo \"\$LINE\t\`echo \$ENTRY|\$CUT6\`\t\`echo \$ENTRY|\$CUT5\`
\";done"
42    else EXTRA=""
43  fi

45  case $DISPLAY in
46  norm)           eval "who | $SORT $EXTRA";;
47  finger|pass)    for NAME in `who | $SORT | cut -d' ' -f1`
48                  do
49                          eval $COMMAND
50                  done;;
51  mail)           who | cut -d' ' -f1 | while read NAME
52                  do
53                          echo "mail to $NAME (y/n): \c"
54                          KB=`line < /dev/tty`
55                          if [ "$KB" = "y" ]
56                            then mail $NAME < /dev/tty
57                          fi
58                  done;;
59  write)         ls -il `who | sed "s/...........\(.......\).*
/\/dev\/\1/"`;;
60  esac

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

ARG       Аргументы командной строки

COMMAND   Команда, которую следует выполнить при использовании
          команды who со списком имен

CUT1      Содержит синтаксис для выделения первого поля строки

CUT5      Содержит синтаксис для выделения пятого поля строки

CUT6      Содержит синтаксис для выделения шестого поля строки

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

ENTRY     Запись в файле паролей для указанного пользователя

EXTRA     Данная переменная содержит полный цикл shell-команд,
          хранимых в виде одной строки

KB        Входные данные от клавиатуры, полученные в цикле

NAME      Содержит в каждый данный момент времени одно имя из
          списка всех регистрационных имен

SORT      Содержит выполняемый тип сортировки

XTRA      Флаг, определяющий, должны ли быть активизированы
          дополнительные опции

       ОПИСАНИЕ

                 ЗАЧЕМ НАМ НУЖЕН КОМАНДНЫЙ ФАЙЛ whox?

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

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

                           ЧТО ДЕЛАЕТ whox?

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

     По умолчанию действие whox заключается в печати  обычного  выхода
команды  who  в  порядке времени регистрации от более раннего до более
позднего.  Опция -x добавляет к этому списку информацию из регистраци-
онного каталога и поле комментария из файла паролей. Если эта опция -x
кажется вам знакомой,  то так оно и есть,  поскольку это то же  самое,
что и команда info, представленная ранее.

     Whox имеет четыре различных режима отображения. Первый это формат
обычного выхода команды who.  Whox позволяет вам сортировать его двумя
разными способами.  Опция -n сортирует по именам,  а опция -t (которую
не нужно указывать, поскольку она используется по умолчанию) сортирует
по времени регистрации.

     Второй режим  отображения  состоит из режимов указания и паролей,
включаемых опциями -f и -p.  Основное отличие от первого режима заклю-
чается в том,  что выход команды who не печатается, а используется для
генерации списка имен пользователей,  который применяется  для  других
целей. Мы указываем каждого пользователя или печатаем парольную запись
каждого пользователя.  Выполняемая команда хранится в переменной, поэ-
тому  мы можем иметь общий цикл,  использующий особым образом перемен-
ные.  (Команда finger имеется в системе Berkeley UNIX  и  в  некоторых
других,  но не во всех реализациях.  Посмотрите руководство, чтобы вы-
яснить, что выводится на экран по этой команде.)

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

     Последний режим - это режим записи на терминал. Режим записи (оп-
ция -w) показывает информацию о файле терминала для каждого  зарегист-
рированного терминального устройства.  Эта информация полезна, если вы
хотите использовать команду UNIX'а write. Посмотрев на права доступа к
файлу  устройства  пользователя,  вы можете сказать,  имеется ли у вас
возможность записать текст на его экран. Некоторые пользователи, кото-
рые не хотят,  чтобы их прерывали, закрывают право записи на их терми-
нал,  выполняя команду "mesg n". Вопрос о праве записи касается любого
способа посылки текста в другой файл, а не только с использованием ко-
манды write.  Право записи также защищает от таких  вещей,  как  "echo
hello > /dev/tty00".

     Способ обработки   аргументов   в  командной  строке  приводит  к
несколько странному обращению с данной утилитой.  Каждый аргумент про-
веряется по порядку и устанавливает внутренние флаги. Если вы постави-
те в конце списка какую-либо опцию, меняющую флаг, установленный одной
из предыдущих опций, то вы получите действие последней опции. (Другими
Предыдущая страница Следующая страница
1 ... 41 42 43 44 45 46 47  48 49 50 51 52 53 54 ... 71
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (52)

Реклама