Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net


     ИМЯ:  talk

talk Обращение к последовательному порту

НАЗНАЧЕНИЕ

Выполняет командную строку, подготавливающую последовательный порт для общения с другой системой.

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

      talk [-bBAUD] [-l] [-tTTY] [-u]

Опции:

-b установить новую скорость обмена

-l протоколировать все поступающие данные

-t использовать другой порт tty

-u использовать принятую в UNIX скорость обмена 9600

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

      talk -b300 -t01 -l

Обратиться к последовательному порту tty01 на скорости 300 бод и протоколировать выводные данные в текстовый файл.

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

       1   :
       2   # @(#) talk v1.0  Talk to the serial port  Author: Russ Sage
        Обращение к последовательному порту
       
       4   BAUD="1200"
       5   TTY="tty11"
       6   PIPE=""
       
       8   for ARG in $@
       9   do
       10          case $ARG in
       11          -b*) BAUD="`echo $ARG|cut -c3-`";;
       12          -l)  echo "logging in /tmp/talk.$$"
       13               PIPE="| tee /tmp/talk.$$";;
       14          -t*) TTY="tty`echo $ARG|cut -c3-`";;
       15          -u)  BAUD="9600";;
       16          *)   echo "talk: invalid argument $ARG"            >&2
       17               echo "usage: talk [-bBAUD] [-l] [-tTTY] [-u]" >&2
       18               echo "         -b   baud rate"                >&2
       19               echo "         -l   log the output"           >&2
       20               echo "         -t   use another tty"          >&2
       21               echo "         -u   9600 baud to UNIX"        >&2
       22               exit 1;;
       23          esac
       24  done
       
       26  eval cu -s$BAUD -l$TTY dir $PIPE

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

ARG Аргумент из командной строки
BAUD Скорость обмена, которую нужно указать программе cu
PIPE Содержит строку, создающую конвейер для захвата данных
TTY Номер используемого порта tty

ОПИСАНИЕ

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

Регистрация в удаленной системе расширяет горизонты ваших вычислительных возможностей. Учитывая, что UNIX становится все более распространенной системой среди микро-ЭВМ, системы UNIX, пригодные для связи, скоро будут везде. Кроме того, вы можете вызвать из вашей системы UNIX много систем типа досок объявлений, функционирующих на микро-ЭВМ.

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

Что делает talk?

Программа talk генерирует командную строку, основанную на подразумеваемой конфигурации. Эта конфигурация такова: 1200 бод, подключение к терминальной линии /dev/tty11 (последовательный порт 1 в системе SCO XENIX), захват данных не производить. Все подразумеваемые параметры можно изменить в тексте исходного файла, а терминальная линия должна быть установлена с учетом специфики вашей системы.

Если вы хотите изменить скорость обмена, укажите с помощью опции -b нужную вам скорость (подразумевается, что это одна из стандартных скоростей, поддерживаемых программой cu). Например,"talk -b2400" устанавливает скорость 2400 бод. Указанная скорость передается команде cu, которая непосредственно изменяет характеристики вашего подключения.

Важно иметь в виду, что эта скорость должна быть определена в файле L-devices.

Если вы хотите захватить все данные, выводимые на ваш экран, включите опцию протоколирования, указав -l. Файл с захваченными данными будет называться /tmp/talk.$$, где $$ - уникальный идентификатора процесса вашего текущего интерпретатора shell. Это имя выдается на экран при вызове данной опции, так что вы увидите его на вашем экране. Уникальность имен файлов обеспечивается для того, чтобы вы не потеряли по недосмотру регистрационные файлы от предыдущих сеансов работы (или чтобы, по крайней мере, было очень мало шансов, что это произойдет).

Если у вас факультативный последовательный порт с модемом или если вы хотите подключаться к любой из возможных линий, примените опцию -t. Вместе с этой опцией укажите номер tty, который будет затем передан в команду cu. Это очень полезная опция, если у вас много различных линий для использования cu.

Если вы не используете ваш последовательный порт для подключения модема, а имеете прямое подсоединение к другой системе UNIX, опция -u тотчас же установит скорость обмена 9600 бод. Заметим, что того же эффекта можно было бы достичь, указав -b9600, но опцию -u проще вводить и запоминать.

ПРИМЕРЫ

      1.  $ talk -l -t12

Подключиться к дополнительному последовательному порту и захватывать данные, которые проходят на экране.

      2.  $ talk -u

Подключиться к основному последовательномупортус использованием скорости 9600 бод. Не включать захват данных.

      3.  $ talk -b2400 -t04 -u

Внимание! Сначала опция -b устанавливает скорость 2400, но далее следует опция -u, которая переустанавливает значение скорости на 9600.

      4.  $ talk -u -l -b4800

Снова будьте внимательны! Сначала линия подключается напрямую со скоростью 9600 бод. Затем включается протоколирование. Наконец, значение скорости меняется с 9600 на 4800. Если на самом деле линия, к которой вы обращаетесь, работает на скорости 9600 бод, вы должны, если это возможно, понизить скорость, нажимая ~%b для генерации сигнала break.

ПОЯСНЕНИЯ

В строках 4-6 устанавливаются действия, выполняемые программой talk по умолчанию. Эти действия можно полностью изменить путем редактирования исходного файла. Главное достоинство этих умолчаний в том, что если такую конфигурацию вы используете чаще всего, то вам достаточно просто ввести "talk", без всяких опций.

Строка 4 инициализирует переменную BAUD значением 1200, это значение по умолчание для скорости модема. Строка 5 присваивает переменной TTY значение tty11, что соответствует первому последовательному порту аппаратуры. Обычно нужно tty00, но SCO XENIX имеет виртуальную консоль, причем tty02-tty10 являются отдельными экранами, доступ к которым осуществляется с одного консольного устройства. Если это не так в вашей системе, укажите здесь правильное значение TTY. В строке 6 переменная PIPE инициализируется пустой строкой, так как конвейер применяется для протоколирования данных, а по умолчанию захват данных не выполняется.

Строки 8-24 представляют собой цикл, который перебирает все аргументы командной строки. В строках 10-23 используется оператор выбора среди опций для выполнения требуемых функций. Строка 11 проверяет, начинается ли данная опция с символов -b, после которых следует что-то еще. Если да, то символы, следующие после -b, вырезаются и заносятся в переменную BAUD. Обратите внимание, что именно поэтому вы должны набирать "-b2400", а не "-b 2400".

В строке 12 проверяется, хотите ли вы включить протоколирование. Если да, то на экран выводится имя протокольного файла, а переменная PIPE устанавливается так, чтобы направить стандартный вывод по конвейеру программе tee системы UNIX. Программа tee - это универсальная конвейерная программа расщепления, которую можно использовать для посылки копии потока данных в определенный пункт назначения, не воздействуя на основной конвейер. В данном случае мы применяем программу tee для посылки данных, проходящих через последовательный порт, на экран и в наш регистрационный файл /tmp/talk/.$$. (Если вы представите себе водяную трубу с T-образным стыком, то поймете, что происходит.)

Строка 14 проверяет, начинается ли опция с -t. Если это так, то вырезается номер терминала. Здесь можно передать любое значение tty, но не забывайте, что этот номер tty должен также присутствовать в файле /usr/lib/uucp/L-devices. Благодаря этому файлу, программа cu знает, что терминальное устройство подключено к разрешенному порту. В строке 15 проверяется, собираетесь ли вы подключаться к системе UNIX напрямую. Если да, скорость обмена автоматически устанавливается на 9600 бод в целях повышения пропускной способности терминала.

Строки 16-22 выполняют проверку ошибок. Если какая-либо опция, переданная в командной строке, не соответствует никакому из предыдущих образцов оператора case, этот факт фиксируется здесь, выдаются сообщения об ошибках и командный файл завершается. Строка 26 - это волшебная строка. Поскольку все shell-переменные получили свои значения, мы можем использовать их в командной строке, чтобы подставить в нее необходимые значения. Сначала применяется команда eval. Она раскрывает все имена переменных, заменяя их на соответствующие значения.

В данном случае мы формируем полную командную строку утилиты cu: скорость берется из переменной BAUD, линия из TTY, а подсоединение прямое. Если мы не ведем протоколирование данных, значение PIPE нулевое и оно будет отброшено при синтаксическом разборе. Если же переменная PIPE содержит команду для отправки данных в протокольный файл, команда eval обеспечивает это, организовывая такой конвейер, как мы указали.

ДОСТУП ИЗ UNIX В UNIX

Теперь давайте рассмотрим полновесное общение двух систем UNIX. Имеется область, в которой UNIX опередила свое время. Система uucp позволяет связать несколько машин воедино и создать то, что в некоторых отношениях является виртуальным окружением, позволяющим вам работать на любой машине. Функционирование такой сети основано на удаленной регистрации в системе (cu(1)), дистанционном выполнении команд (uux(1)), электронной почте (mail(1)), передаче файлов (uucp(1), uucico(1)) и опознавании узла системы (uname(1) и uuname(1)).

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

СВЯЗЫВАНИЕ UNIX-МАШИН

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

Ваши потребности влияют на то, как вы соедините различные UNIX-машины. Если имеется блок определения приоритетного запроса к порту (port contender), вам приходится иметь с ним дело. Одни линии могут быть подсоединены напрямую, другие напрямую через блок определения приоритетного запроса к порту, третьи через модемные коммутаторы. Для того чтобы научиться иметь дело со всеми этими возможностями, попробуем представить эти конфигурации в графическом виде.

Первый тип подключения - прямое подключение (см. рис. 8-7). Слева показана вызывающая система, справа вызываемая. Вызывающая система использует последовательный порт для вывода, поэтому на этом порту не должно быть процесса getty. Инициирующая команда "cu -ltty00 -s9600 dir" обеспечивает подключение к последовательному порту tty00 на очень высокой скорости обмена. Прямые подсоединения могут поддерживать такую скорость. Сам кабель должен быть выполнен в виде нулевого модема (рассмотренного ранее в данной главе). В вызываемой системе задействованы процессы getty, работающие со скоростью 9600 бод на входящей терминальной линии. Когда пользователь вводит регистрационное имя, getty выполняет процесс login, запрашивающий пароль, и если этот пароль верный, запускается shell.

Рисунок 8-7.
Прямое подключение одной системы UNIX к другой

При использовании uucp происходят аналогичные вещи. Команда uucp генерирует процесс uucico, инициирующий вызов системы, показанной справа. Регистрационная последовательность та же самая, за исключением того, что вместо запуска интерпретатора shell в конце этой последовательности действий запускается еще один процесс uucico, который общается с вызывающим процессом.

Следующая конфигурация - прямое подключение через селектор порта - показана на рис. 8-8. Здесь тоже кабель, идущий от DTE-1 к селектору порта, должен быть нулевым модемом.

Рисунок 8-8.
Прямое подключение через селектор порта

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

Последняя конфигурация (на рис. 8-9) представляет собой дистанционное подключение двух систем UNIX. Каждое терминальное устройство DTE соединяется со своим модемом прямым кабелем. DTE-1 вызывает DTE-2 либо вручную с помощью cu, либо с помощью утилиты uucp, использующей uucico и программу набора телефонного номера. Самое большое отличие в том, что это подсоединение работает на скорости 1200 бод. Это значит, что либо DTE-2 запускает 1200-бодовый процесс getty, либо если getty имеет скорость 9600, то вам нужно сбросить ее. Для того чтобы понизить скорость, в программе cu требуется ввести ~%b в качестве сигнала break. Или, если вы работаете с помощью uucp, можно поместить строку BREAK в файле L.sys, чтобы отправить ее в вызванную систему.

Рисунок 8-9.
Дистанционное соединение двух систем UNIX

ОБЛАСТИ ДЛЯ ПЕРЕДАВАЕМЫХ ФАЙЛОВ

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

Наиболее важен каталог /usr/spool/uucp. Он содержит LOGFILE, что дает возможность с помощью команды "tail -f LOGFILE" заглянуть в операции передачи во время их выполнения. Транзакции uucp и mail попадают в этот каталог. Обычно транзакция состоит из управляющего файла (C.*) и файла данных (D.*). Когда одна машина используется в качестве центрального узла, ее каталог uucp может заполниться очень большим количеством файлов. Необходимо обычное сопровождение и постоянное слежение за файлами занятости (LCK* и STST*), чтобы быть уверенным, что все работает правильно.

Следующий интересный каталог /usr/spool/uucppublic, чаще всего известный под названием PUBDIR (это shell-переменная). Он содержит каталоги, названные по имени каждого пользователя, чтобы хранить файлы, проходящие транзитом с одной машины на другую. Большинство каталогов имеют все права доступа, что обеспечивает другим пользователям возможность копировать файлы. Я посчитал полезным создать переменную среды интерпретатора shell, которая содержит маршрутный префикс моего каталога в /usr/spool/uucppublic, т.е. P=/usr/spool/uucppublic/russ. Теперь я могу обращаться к файлам, вводя $P/*. Это значительно сокращает ввод и упрощает пересылку файлов в этот каталог и из него.

Переменная PUBDIR поддерживается синтаксисом uucp. В данном примере используется синтаксис uucp:

       $ uucp * remote!~/user

Эта команда копирует каждый файл текущего каталога в систему "remote", затем обозначение ~/ превращается в префикс /usr/spool/uucppublic. Если в этой команде user не является каталогом, копируемые файлы получают имя user, а не копируются в каталог с именем user. Вы должны сами создать каталог, после чего применить к нему команду chmod 777, чтобы в него можно было копировать. Для справки отметим, что указание ^user превращается программой uucp в $HOME/user, а ^/user превращается uucp в $PUBDIR/user.

Еще один способ ввода команды с помощью shell-переменных выглядит так:

       $ uucp * remote!$P

Такая команда копирует все файлы в мой каталог PUBDIR. Если я зарегистрировался в этой системе, я могу ввести:

       $ ls -al $P
    или
       $ cd $P
       $ ls -al

для того, чтобы увидеть все скопированные файлы.

Один из моментов, за которым вы должны следить,- разрушительные командные файлы типа "uuclean". Эти программы обычно запускаются процессом cron или некоторыми другими фоновыми программами. Они проходят по всем областям системы, связанным с uucp, находят файлы, к которым не было обращений определенный период времени, и удаляют их. Это может быть катастрофическим, если вы используете PUBDIR в качестве временной области хранения. Вот как может выглядеть одна из таких "очищающих" операций:

       PATH=/usr/bin:/bin
       export PATH
       cd /usr/spool/uucp
       find C. D. TM. X. XTMP -type f -mtime +7 -exec rm {} \;
       cd /usr/spool/uucppublic
       find . -type f -mtime +7 -exec rm {} \;

Если в вашей системе работают такие очищающие командные файлы, имеется несколько способов сохранения файлов от неумышленного уничтожения. Первый способ - постоянно обрабатывать все файлы утилитой touch, чтобы они не распознавались оператором find, который ищет старые файлы. Это можно сделать так:

       $ find $P -exec touch {} \;

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

Другая стратегия - проанализировать очищающую программу (или командный файл). Она запускается суперпользователем (root)? Если нет, то команда "chmod 000 $P" может помешать ей вести поиск имен внутри моего каталога. Если же программа очисткизапущена суперпользователем, то, конечно, никакие ограничения прав доступа ее не остановят. В какое время она запускается? Могу ли я приказать ей пройти мимо меня, не заглядывая в мои файлы? Что является стартовым каталогом для очищающего командного файла? Углубляясь в эти вопросы, мы можем собрать много информации о том, что делает этот командный файл и какие действия мы можем предпринять, чтобы он нам не навредил. Может показаться, что самый легкий способ - просто удалить программу очистки (в предположении, что вы имеете на это право). Это, однако, не способствует поддержке свободного пространства и чистых каталогов. К тому же если вы хотите запретить очистку каталогов, которые очень важны для вас, то вы должны нести ответственность за их сопровождение.

СЕТЕВАЯ БЕЗОПАСНОСТЬ

Каталог uucppublic, как мы уже видели, содержит файлы, передаваемые транзитом между системами. Обычно все подкаталоги в uucppublic имеют режим доступа rwxrwxrwx. Это сразу же порождает проблему защиты, ведь кто угодно может создать, разрушить или изменить файлы в этих каталогах.

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

Широко открытый доступ на запись позволяет доставлять файлы прямо к вашему порогу, но вы не знаете, кому вы открываете двери. Если вы заботитесь о безопасности, вам не пон ПРИЕМЫ П. может записать все, что угодно, в ваше рабочее пространство. Одно из решений - разблокировать ваш регистрационный каталог, но заблокировать все ваши подкаталоги, кроме тех, которые нужны для uucp. Основная проблема при этом - так установить все права доступа, чтобы каждый файл обрабатывался надлежащим образом.

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

ОГРАНИЧИТЕЛЬНЫЕ ФАЙЛЫ

Когда удаленная система регистрируется в центральной системе с помощью uucp, несколько файлов в центральной системе определяют, какие возможности имеет удаленная система. Эти конфигурационные файлы размещаются в каталоге /usr/lib/uucp.

Первый из таких файлов называется L.cmds. Он содержит имена всех команд центральной системы, которые можно выполнить из удаленной системы. Если удаленная система посылает команду посредством uux, то команда выполняется только при условии, что имя этой команды присутствует в файле L.cmds.

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

       uucp, /

что позволяет пользователю uucp (подразумеваемому пользовательскому имени процесса uucico) читать и писать файлы в любом месте дерева, начиная от корня и двигаясь вниз, т.е. фактически во всей системе.

Это открывает лазейки в системе защиты, например:

       uucp central!/etc/passwd /tmp

Здесь извлекается парольный файл из другой системы. С помощью этого файла можно найти имена пользователей без паролей, и другие люди могут прорваться в вашу систему. Более строгий файл USERFILE выглядит так:

       uucp /usr/spool/uucppublic /tmp

что ограничивает файловые пересылки только указанными каталогами. Это препятствует предыдущей попытке пересылки парольного файла. Последний файл L.sys, вероятно, наиболее важен для uucp с точки зрения системы защиты. Он содержит имена узлов, телефонные номера, регистрационные имена и пароли для всех удаленных систем, известных центральной системе. Если бы какая-то часть этой информации была доступна широкой публике, кто-нибудь смог бы выполнить пересылку с помощью uucp из удаленной системы и претендовать на роль центральной системы. Новая система HoneyDanber uucp в System V кое-что делает для того, чтобы не давать удаленным системам перехватывать почту и пересылки данных путем маскировки под другие удаленные системы. В главе 9 более подробно рассматриваются вопросы безопасности программы uucp и коммуникаций вообще.

В следующем примере показан файл L.sys, в котором определены два разных вида систем: системы типа прямого подключения и удаленные системы с номеронабирателем (dial-up systems).

       remote Any ACU 1200 5551212 ogin:--ogin: uucp word: uucp
       selector Any ACU 1200 5551213 \d--CLASS--CLASS A ogin:--ogin: uucp word:
       uucp
       direct Any tty00 9600 tty00 ogin:-@-ogin: uucp word: uucp

Запись для системы "remote" отражает, что это линия с набором номера, может быть вызвана произвольное число раз ("any time"), доступна через ACU (automatic call unit - автоматическое устройство вызова) со скоростью 1200 бод и по номеру 5551212. Регистрационная последовательность определена в виде регистрационного имени uucp и пароля uucp. Слово "ogin" - не опечатка. Uucp использует подсказку "ogin:" для того, чтобы отличить ее от обычной подсказки login системы UNIX. Распознавание шаблона "ogin:" более надежно, чем использование "Login:" или "login:".

Указание "Any" можно заменить на определенные интервалы времени, если 24-часовый доступ не разрешен. Заметим, что обозначение "ACU" соответствует записи ACU в файле L-devices (как рассмотрено ранее). В следующей записи файла L-devices имена cua0 и cul0 связаны с устройством, присоединенным к модему, в данном случае /dev/tty00:

       ACU cul0 cua0 1200

Эту связь можно проверить с помощью команды "ls -li /dev/tty* /dev/cul* /dev/cua*".

Система "selector" в нашем файле L.sys также имеет набор номера, только подключается через коммутатор порта. Для общения с коммутатором порта необходима дополнительная информация, которая начинается с символов "\d". Поля в файле L.sys следуют в таком порядке: "ожидание посылка ожидание посылка ...". Когда мы в первый раз подключаемся к селектору порта, в нашу линию ничего не выводится. Просто он так работает. Селектору нужен символ , чтобы стать активным, а первое поле uucp означает ожидание. Как нам ничего не дождаться и послать возврат каретки? Путем указания uucp ожидать невозможный символ, например control-D (\d). Uucp никогда не получит его, поэтому по тайм-ауту эта программа выдаст возврат каретки (-). Если слово CLASS приходит назад, когда мы посылаем CR, то мы отправляем символ "A", который означает класс системной идентификации, указанный в данной записи. Когда связь устанавливается, мы ищем "ogin:" в качестве регистрационной подсказки. Если мы не находим ее, то посылаем символы возврата каретки. Это может потребоваться по той причине, что инициирующий процесс getty в системе A может быть настроен на 9600 бод. Тогда мы должны будем послать либо символы возврата каретки, либо символы break, чтобы сбросить скорость обмена до 1200 бод.

Последняя системная запись "direct" не использует ACU и телефонный номер. Она собирается обращаться к терминальной линии tty00 на скорости 9600 бод, чтобы получить регистрационную последовательность. Здесь нет селектора порта, через который нужно пройти, а есть просто прямая линия. В файле L-devices эта линия описана так:

       DIR tty00 0 9600

ОТЛАДКА КОММУНИКАЦИЙ

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

Если после проверки и перепроверки всех конфигурационных файлов имеют место отказы при передаче файлов, запустите вручную программу /usr/lib/uucico с некоторыми активными отладочными флагами. Они помогут увидеть, как происходит рукопожатие. Вот командная строка для отладочного режима:

       /usr/lib/uucp/uucico -r1 -x9 -ssystem_name

где r1 указывает программе uucico стартовать в ведущем (master) режиме, вызывая system_name, а x9 указывает уровень отладочных сообщений. Если вы хотите получать от uucico поменьше подробностей, можете понизить уровень отладки до x4 или другого значения. Отладочный вывод варьируется в диапазоне от x1 до x9. Типичная последовательность для этой команды выглядит так. Во -первых, поставить некоторые файлы в очередь для того, чтобы направить их в другую систему. Благодаря постановке файлов в очередь, вы избегаете автоматического запуска процесса uucico. После того как файлы поставлены в очередь и готовы к передаче, запустите отладочный режим и следите за происходящим. Это выглядит примерно так:

    |
    |   $ uucp -r *.c remote!~/src
    |   $ /usr/lib/uucp/uucico -r1 -x4 -sremote
    |

Если вам нужно только активизировать передачу с помощью uucp в обычном режиме, то проще всего применить команду mail. Направьте почтой некоторый текст пользователю другой системы - и механизм uucp сразу же начнет работу. Следующая команда приводит к тому, что этот механизм вызывает систему "remote" и запускает утилиту rmai(1) в другой системе, чтобы передать по почте файл "dummy" пользователю "user":

       $ mail remote!user < dummy

Есть команда, которая явно вызывает /usr/lib/uucp/uucico - это команда uusub(1M), размещенная в каталоге /usr/lib/uucp. Она вызывается с указанием имени системы, с которой вы хотите связаться. Большинство систем имеют такую команду. Если у вас ее нет, пользуйтесь uucico. Если такая команда есть, вы имеете еще один способ запуска uucico. Синтаксис выглядит так:

       $ /usr/lib/uucp/uusub -c system

Теперь когда мы знаем, как использовать все эти команды вручную, мы можем рассмотреть некоторые инструментальные средства, автоматизирующие большую часть вашей работы с uucp.


     ИМЯ: uust

uust Состояние uucp и служебные действия

НАЗНАЧЕНИЕ

Предоставляет управляемый с помощью меню доступ ко многим служебным функциям, связанным с утилитой uucp и передачей файлов.

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

      uust

Опции меню:

c - подключиться к другой системе в отладочном режиме

d - показать файлы в вашем каталоге PUBDIR

f - длинноформатный список файлов в каталоге подкачки (spool directory)

l - динамически отображать регистрационный файл

r - повторное подключение к другой системе

s - дать пользователю сводку о транзакциях

u - разблокировать все терминальные линии (ОСТОРОЖНО: это может нарушить сеанс работы)

w - отобразить регистрационный файл за последнюю неделю

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

uust Динамически отображать регистрационный файл, чтобы следить за транзакциями uucp

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

       1   :
       2   # @(#) uust v1.0   Uucp status utility   Author: Russ Sage
       
       4   if [ $# -gt 0 ]
       5     then  echo "uust: argument error" >&2
       6           echo "usage: uust"          >&2
       7           exit 1
       8   fi
       
       10  UUNODE=`uuname -l`
       11  echo "
       12                   UUST MENU                system node: $UUNODE
       13                   ---------
       14      c - connect with another system in debug mode
       15      d - show files in your directory under PUBDIR
       16      f - long list files in the spool directory
       17      l - display the logfile dynamically
       18      r - reconnect with another system
       19      s - give user summary of transactions
       20      u - unlock the tty line
       21      w - display logfile for the last week
       22      - exit program
       
       24  Press c,d,f,l,r,s,u,w,or : \c"
       25  read CMD
       
       27  case $CMD in
       28  "")     exit 0;;
       29  c)      echo "\nSystem name ( to exit): \c"
       30          read SYSTEM
       31          if [ "$SYSTEM" = "" ]
       32            then exit 0
       33          fi
       34          echo "\nrm /usr/spool/uucp/STST.$SYSTEM : \c"
       35          rm /usr/spool/uucp/STST.$SYSTEM 2>/dev/null \
       36                    && echo "" || echo "no STST files"
       37          echo "\n/usr/lib/uucp/uucico -r1 -x4 -s$SYSTEM:"
       38          /usr/lib/uucp/uucico -r1 -x4 -s$SYSTEM;;
       39  d)      echo "\n/usr/spool/uucppublic/$LOGNAME:"
       40          ls -l /usr/spool/uucppublic/$LOGNAME;;
       41  f)      echo "\n/usr/spool/uucp:"
       42          ls -l /usr/spool/uucp | more;;
       43  l)      echo "\n/usr/spool/uucp/LOGFILE:"
       44          tail -20f /usr/spool/uucp/LOGFILE;;
       45  r)      echo "\nSystem name ( to exit): \c"
       46          read SYSTEM
       47            if [ "$SYSTEM" = "" ]
       48            then exit 0
       49          fi
       50          echo "\nrm /usr/spool/uucp/STST.$SYSTEM : \c"
       51          rm /usr/spool/uucp/STST.$SYSTEM 2>/dev/null \
       52                    && echo "" || echo "no STST files"
       53          echo "uusub -c$SYSTEM:"
       54          if [ -f /xenix ]
       55            then /usr/bin/uusub -c$SYSTEM
       56            else /usr/lib/uucp/uusub -c$SYSTEM
       57          fi
       58          tail -20f /usr/spool/uucp/LOGFILE;;
       59  s)      echo "\nuulog -u$LOGNAME:"
       60          uulog -un$LOGNAME | more;;
       61  u)      echo \\nrm /usr/spool/uucp/LCK* :
       62          rm /usr/spool/uucp/LCK* 2>/dev/null || echo "no lock files";;
       63  w)      echo "\n/usr/spool/uucp/Log-WEEK:"
       64          more /usr/spool/uucp/Log-WEEK;;
       65  *)      echo "uust: invalid argument '$CMD'" >&2;;
       66  esac

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

CMD Содержит символ входной команды, поступивший из стандартного ввода
LOGNAME Содержит ваше регистрационное имя
SYSTEM Узловое имя uucp той системы, в которую вы обращаетесь
UUNODE Узловое имя uucp локальной системы

ОПИСАНИЕ

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

Многие области системы UNIX являются фактически самостоятельными подсистемами. Uucp одна из них. Она использует конфигурационные файлы, файлы подкачки (spool files), файлы блокировки (lock files) и имеет много исполняемых модулей, образующих целую систему. Если вы интенсивно используете uucp, вы часто занимаетесь просмотром регистрационных файлов, очисткой каталогов после аварийных завершений работы uucp и наблюдением за системой в целом. Если делать все это вручную, требуется запоминать каталоги, файлы, команды, опции. Трудно запомнить так много символов для ввода команд. Uust значительно сокращает издержки и облегчает использование утилиты uucp.

Что делает uust?

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

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

    |
    |                   UUST MENU                system node: russ
    |                     ---------
    |      c - connect with another system in debug mode
    |      d - show files in your directory under PUBDIR
    |      f - long list files in the spool directory
    |      l - display the logfile dynamically
    |      r - reconnect with another system
    |      s - give user summary of transactions
    |      u - unlock the tty line
    |      w - display logfile for the last week
    |      - exit program
    |
    |  Press c,d,f,l,r,s,u,w,or :

Первая опция 'c' предназначена для подключения линии uucp в отладочном режиме. Эта опция генерирует такую же командную строку, как при ручном способе запуска процесса uucico (см. предыдущий раздел). Uust запрашивает у вас имя системы, к которой вы хотите подключиться.

Следующая опция 'd' дает длинноформатный листинг файлов вашего каталога, определяемого вашей переменной $PUBDIR, т.е. /usr/spool/uucppublic/$LOGNAME. Если вы часто делаете пересылки с помощью uucp, здесь может собраться много файлов. Данная опция предоставляет вам простой способ их просмотра.

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

Опция 'l', видимо, наиболее часто используемая во всей утилите.

Она позволяет увидеть в динамике функционирование uucp, наблюдая за регистрационным файлом. При первом вызове она печатает последние 20 строк этого файла, а затем ведет наблюдение, пока не будет остановлена ее работа. Общее количество нажатий на клавиши для вызова этой команды с помощью uust равно 5: 4 для вызова uust и 1 для указания опции меню. Для того чтобы набрать ту же команду вручную, требуется 31 символ. Вот где экономия времени и избавление от лишних проблем!

Очень интересна опция 'r'. Укажите ей имя системы - и она установит связь с этой системой при помощи uucp. Используемый при этом метод отличается от метода, применяемого в опции 'c', но работает в System V. Отметим, однако, что в большинстве систем команда uusub, задействованная здесь, требует возможностей суперпользователя. Uusub возвращает управление обратно вашему интерпретатору shell, но затем запускает uucp в фоновом режиме. Когда это произойдет, uust продвигается вперед и показывает динамический хвост регистрационного файла, как описано выше. После этого вы можете наблюдать все действия uucp по вызову, передаче файлов и завершению работы.

Опция 's' показывает все ваши транзакции к утилите uucp, выбирая из регистрационного файла только то, что относится к вашему имени. Обычно имеется много записей, поэтому вывод передается по конвейеру команде more в целях удобства чтения.

Следующую опцию 'u' нужно использовать с большой осторожностью.

Она удаляет файлы блокировки, устанавливаемые системой uucp для самой себя. Если в это время uucp работает, другой пользователь может обратиться при помощи cu к линии и все разрушить. Эти файлы блокировки существуют также, когда кто-то применяет cu на последователной линии. Данная опция предусмотрена по той причине, что иногда uucp или cu завершается аварийно. Когда такое происходит, нужно удалить файлы блокировки, чтобы начать все сначала. Эту опцию следует использовать только для этой цели либо для запланированного эксперимента, чтобы посмотреть, что при этом может произойти. Последняя опция 'w' предназначена для отображения из регистрационного файла тех транзакций uucp, которые относятся к последней неделе. Это нетрудно сделать, но если бы вы искали определенную транзакцию, вы могли бы применить для этого средства поиска символьных строк команды more.

ПРИМЕР

      $ uust
      r

Это попытка повторного подключения к линии uucp. Ее можно использовать для опроса другой системы или для отправки или приема данных, стоящих в очереди. Первым делом запрашивается имя системы, к которой нужно обратиться. Затем эта команда пытается удалить все файлы, оставшиеся после предыдущих аварийных завершений, и произвести вызов.

ПОЯСНЕНИЯ

Uust является однопроходной утилитой, т.е. не имеет внутренних циклов. Вы выбираете опцию, и после завершения ее выполнения завершается весь командный файл. Таким способом это сделано главным образом по той причине, что вы должны обрывать вывод команды tail, коорая используется некоторыми опциями меню. Однако, клавиша break прекращает все, даже выполнение uust. Не имеет смысла делать внутренний цикл, так как этот цикл редко смог бы повториться. В строках 4-8 выполняется проверка командной строки на наличие ошибок. Если переданы какие-то аргументы, выдается сообщение об ошибке и командный файл завершается.

Строка 10 инициализирует переменную UUNODE текущим именем uucp той системы, в которой вы работаете. Это обеспечивается вызовом утилиты uuname.

Строки 11-24 отображают главное меню одним большим оператором echo. Имя системы, поступившее в переменную UUNODE, выдается для справки в правой верхней части экрана.

В строке 25 читается ответ пользователя, а строки 27-66 проверяют команду и выполняют ее. Если вы ввели только возврат каретки, это соответствует строке 28, и программа завершается. Строки 29-38 обрабатывают команду 'c' - подключение в отладочном режиме. Запрашивается имя системы и проверяется, не пустое ли оно. Если оно пустое, командный файл завершается. В противном случае строка 34 сообщает, что uust пытается удалить все файлы STST, которые создавались при неудачных вызовах. Перед тем как обратиться к системе, вы должны удалить все файлы STST. Если таких файлов нет, команда rm не срабатывает и выдается сообщение "no STST files".

Строки 39-40 выполняют опцию 'd'. Сначала отображается для справки название каталога, который мы просматриваем. Затем распечатывается каталог PUBDIR в длинном формате. Заметим, что LOGNAME соответствует любому пользователю, запустившему данную программу, поэтому нет необходиvости вписывать в текст программы какое-то значение.

В строках 41-42 аналогичным образом обрабатывается опция 'f'. Мы распечатываем здесь каталог подкачки.

Команда 'l' в строках 43-44 сообщает, что отображается регистрационный файл. Затем используется команда "tail -f". Опция -f означает, что нужно производить отображение того, что находится в файле следующим образом: как только транзакции печатаются в файл, они отображаются на ваш экран. Пользователь должен нажать клавишу break для выхода из программы.

Строки 45-58 выполняют команду 'r', которая пытается произвести повторное подключение. Сначала запрашивается имя системы и сравнивается с пустой строкой. Если имя введено, мы пытаемся удалить файлы STST и выдаем сообщение о том, было ли это удаление успешным. Затем печатается сообщение о том, что запускается процесс uusub. В строке 54 проверяется, является ли корневым файлом XENIX. Если это так, то утилита uusub вызывается с учетом ее нового местонахождения в системе XENIX. В противном случае она вызывается с указанием ее обычного местонахождения - /usr/lib/uucp. После выполнения uusub отображается динамический хвост регистрационного файла, пока пользователь не нажмет клавишу break, после чего командный файл завершается.

В строках 59-60 выполняется проверка сводки о транзакциях. Используется команда uulog, ей передается LOGNAME текущего пользователя. Подробности о команде uulog можно найти в документации. Опция 'u' рассматривается в строках 61-62. Сначала отображается команда rm, которая будет выполнена, чтобы уведомить об этом пользователя. Затем эта команда выполняется, чтобы попытаться удалить файлы блокировки. Если команда удаления завершается неудачей, выдается сообщение об ошибке, указывающее на отсутствие файлов блокировки.

Строки 63-64 запускают опцию 'w', чтобы посмотреть деятельность uucp за последнюю неделю. С помощью команды more печатается файл LogWEEK. Этот файл создается утилитой uucp, чтобы обеспечить сжатую сводку о работе в течение недели.

Строка 65 соответствует любым командам, которые не были распознаны ранее. Такие команды являются ошибочными, и выдается сообщение об этом. Когда выполнение программы доходит до этого места, она завершается.


Comments: info@citmgu.ru
Copyright © CIT