ЗАЧЕМ НАМ НУЖНА ПРОГРАММА lrgf? Как обсуждалось ранее, нам необходимо знать, что происходит, ког- да UNIX достигает каких-то пределов. Не только пределов размера файла, а любых пределов. Примерами предельных значений являются количество процессов, которые вы можете запустить, общее количество процессов в системе, количество файлов, которые вам разрешено открыть, количество свободных блоков, количество индексных дескрипторов, глубина вложен- ности каталогов, при которой еще возможна работа, и т.д. Нам нужна программа, создающая файл максимального размера. Затем мы можем использовать этот файл для проверки различных пределов, имею- щих отношение к файлам. ЧТО ДЕЛАЕТ lrgf? Lrgf - это программа, которая создает файл максимально возможного размера. Выполняется это путем записи в файл до тех пор, пока команда записи не окончится неудачей. Это означает, что в данный файл больше нельзя записать данные, и он достиг границы. При вызове программа lrgf выводит сообщение, содержащее общее ко- личество байтов, которое вы можете записать в файл. Это значение вы- числяется по значению ulimit, поэтому оно разное для разных пользова- телей и зависит от shell, с которым пользователь сейчас работает. Затем у вас запрашивается имя файла. Вы можете указывать любое имя, для которого вы имеете права записи. Одним из способов проверки жесткого диска является запись одного из таких больших файлов в каждый раздел диска и затем проверка отдельных файловых систем. После запуска программы вы увидите строку с сообщением, которое постоянно обновля- ется. Оно содержит общее число записанных блоков и количество байтов, которое записывалось при каждой попытке записи. Программа lrgf записы- вает в файл каждый раз по 1024 байта. В зависимости от вашего значения ulimit количество байтов, дописываемых в конец файла, может не быть равным в точности 1 Кб. Выходное сообщение постоянно печатается в од- ной и той же строке, заменяя на экране старое значение. Это достига- ется путем вывода только символа возврата каретки, а не перевода стро- ки. Когда программа не может больше записывать данные в файл, итого- вое количество блоков выводится на экран. Это общее число блоков, за- писанных в файл. ПРИМЕРЫ 1. $ lrgf /dev/rfd0 Ввод имени устройства в ответ на запрос имени файла, в который будет производиться запись. При этом программа lrgf выполняет последо- вательную запись на гибкий диск неструктурированных данных. Тем самым проверяется, распознает ли драйвер устройства переполнение гибкого диска. Это важно знать при работе с командой cpio, которая предполага- ет, что драйвер устройства сообщит об остановке и запросе следующей дискеты. 2. $ lrgf /usr/tmp/lrg Создание файла в файловой системе /usr. Большинство систем XENIX используют каталог /usr как отдельную файловую систему, отличную от корневой. Созданием файла в каталоге /usr /tmp мы можем проверить по- ложение дел в этой часто используемой файловой системе. 3. $ lrgf /tmp/lrg В данном случае создаваемый файл займет место в корневой файловой системе (если вы не имеете каталога /tmp в вашей собственной файловой системе). Потребуется не слишком много таких файлов для заполнения всех свободных блоков в корневой файловой системе. 4. $ lrgf /mnt/lrg Создание файла на гибком диске в предположении, что на гибком диске имеется файловая система и она смонтирована в каталог /mnt. 5. $ F=0 $ while : > do > echo -r "--> Making file $F <--" > ./lrgf <<-! > $F > ! > echo > F=`expr $F + 1` > done Данный цикл запускает программу lrgf бесконечное число раз. Счет- чиком является переменная F. Она должна быть предварительно установле- на в нуль, чтобы shell рассматривал ее как число, а не как символьную строку. Сначала выводится сообщение, содержащее имя создаваемого фай- ла. Первым именем файла является 0. Программа lrgf запускается, используя в качестве входных данных "данный документ" (т.е. сам ко- мандный файл). В качестве ответа на вопрос об имени файла используется значение $F. Значение переменной F увеличивается, и программа lrgf вы- зывается снова. Именами файлов являются 0, 1, 2 и т.д. Это продолжа- ется до тех пор, пока не останется больше свободного места. Вряд ли вы будете пользоваться этим часто, но для тестирования это прекрасное средство заполнить все свободное пространство. Если вы хотите увидеть, что делает ваша система, когда исчерпаны свободные блоки, примените данный командный файл. ПОЯСНЕНИЯ Строки 3-6 включают все необходимые файлы заголовков. Эти файлы содержат определения и метки, необходимые данной программе. Строки 8 и 9 определяют размеры буфера для имен файлов и буфера для записи на диск. Значение BSIZ можно поднастроить, если программа работает слишком медленно. У вас может возникнуть желание увеличить BSIZ до 4096, чтобы производилось не так много операций записи. Строка 11 определяет возвращаемое значение системного вызова ulimit как длинное целое. Строка 12 резервирует буфер, который должен быть записан. Этот буфер находится вне основной части программы из-за ограничений на размер внутри функций. В основном блоке программы наи- большая область автоматической памяти, которую вы можете иметь, равна размеру вашего стека. Вы можете сделать по-другому, объявив данный бу- фер как статическую переменную в функции main. Мы решили вынести его за пределы функции main и не объявлять как статическую переменную. Строка 16 объявляет некоторые рабочие переменные. Заметим, что они помещаются в регистры. Это сделано для ускорения работы программы и получения более компактного объектного кода. Строка 17 резервирует буфер, в который вы вводите имя файла. Строки 19 и 20 заполняют записываемый буфер символами "x", поэто- му после создания файла мы можем их там увидеть. Строка 22 выводит значение ulimit для вашего процесса. Обратите внимание, что вызов ulimit возвращает количество блоков, поэтому мы должны умножить это число на 512. В результате мы получим общее коли- чество байтов, которое может содержать файл. Строки 24-26 запрашивают имя файла, читают его и подготавливают экран для следующего сообщения. Строки 28-32 открывают файл с указан- ным именем для получения дескриптора файла. Файл открывается для за- писи и чтения, создается при необходимости и обрезается, если он уже существует. Если операция открытия файла заканчивается неудачей, выво- дится сообщение об ошибке, и программа завершается. Строки 34-42 выполняют запись. Цикл for бесконечен, поскольку в середине оператора нет проверки значения счетчика. Переменная bcnt постоянно увеличивается, пока выполняется запись. Строка 36 выполняет запись в файл. Если запись неудачна, выво- дится сообщение об ошибке и по оператору break осуществляется выход из цикла. Строка 41 выводит количество выполненных операций записи и ко- личество записанных байтов. Обратите внимание, что данный оператор print содержит возврат каретки (\r), а не перевод строки. Это позволя- ет курсору оставаться в одной итемах. экране поверх старых значений. Экран не скроллируется, что удобно для наблюдения. Выполнение цикла продолжается до тех пор, пока системный вызов write не закончится неудачей и оператор break не прекратит цикл. Когда это происходит, выполнение продолжается со строки 43, которая печатает "end of program". Выполнение команды "ls -l" для записанного файла показывает, сколько байтов имеет файл максимального размера. Это количество должно совпадать с числом, которое сообщила вам программа lrgf. В данной главе представлена лишь небольшая часть возможных ислле- дований внутренней работы файловых систем и устройств в UNIX. Некото- рые из представленных программ могут быть неприменимы в вашей версии системы UNIX или в вашей конфигурации аппаратных средств или могут выглядеть в вашей системе иначе. Однако общие принципы сохраняются, и вы можете использовать рассмотренные средства в качестве основы для ваших собственных исследований.  * ГЛАВА 8. Коммуникации в системе UNIX *  ВВЕДЕНИЕ ФИЗИЧЕСКОЕ ПОДКЛЮЧЕНИЕ ПОДКЛЮЧЕНИЕ БЕЗ КОММУНИКАЦИОННЫХ УСТРОЙСТВ ДОСТУП МИКРО-ЭВМ ИЛИ ТЕРМИНАЛА К СИСТЕМЕ UNIX ПРЯМОЕ ПОДКЛЮЧЕНИЕ ДИСТАНЦИОННОЕ ПОДКЛЮЧЕНИЕ ДОСТУП ИЗ СИСТЕМЫ UNIX К МИКРО-ЭВМ ОБНАРУЖЕНИЕ МОДЕМОВ В СИСТЕМЕ ИСПОЛЬЗОВАНИЕ И КОНФИГУРИРОВАНИЕ ЛИНИИ ИЗМЕНЕНИЕ СКОРОСТЕЙ ОБМЕНА ЗАХВАТ ДАННЫХ ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА ДЛЯ КОММУНИКАЦИОННЫХ ЛИНИЙ cuchk - Cu check - проверка свободной линии для cu talk - Обращение к последовательному порту ДОСТУП ИЗ UNIX В UNIX СВЯЗЫВАНИЕ UNIX-МАШИН ОБЛАСТИ ДЛЯ ПЕРЕДАВАЕМЫХ ФАЙЛОВ СЕТЕВАЯ БЕЗОПАСНОСТЬ ОГРАНИЧИТЕЛЬНЫЕ ФАЙЛЫ ОТЛАДКА КОММУНИКАЦИЙ uust Состояние uucp и служебные действия uutrans Передача файловых деревьев из одной системы UNIX в другую систему UNIX КОНФИГУРАЦИОННЫЕ РЕШЕНИЯ ПОДКЛЮЧЕНИЕ UNIX К МОДЕМУ И ГЛАВНОЙ МАШИНЕ ПОДКЛЮЧЕНИЕ UNIX И ТЕРМИНАЛА К МОДЕМУ ПОДКЛЮЧЕНИЕ UNIX К ТЕРМИНАЛУ, МОДЕМУ И ГЛАВНОЙ МАШИНЕ СИСТЕМА UNIX, МИКРО-ЭВМ И МОДЕМ АЛЬТЕРНАТИВНОЕ РЕШЕНИ ТРИ СИСТЕМЫ UNIX ВВЕДЕНИЕ В данной главе мы рассматриваем средства коммуникации в системе UNIX. В то время как в мире MS-DOS коммуникации ограничены обычно "черным ящиком" (программными пакетами и довольно стандартными модемами), коммуникации в системе UNIX более сложны. UNIX предлагает несколько уровней коммуникаций, включая передачу файлов, удаленную регистрацию в системе, дистанционную почту и развитые системы обмена сообщениями, которые могут связывать между собой сотни систем UNIX. Однако, в большинстве систем UNIX нет удобно оформленных, управляемых с помощью меню средств коммуникации. Вместо этого имеются сложные системные команды и необходимость поддерживать много файлов. Обычно требуется также владеть многими подробностями конфигурации и использования модемов. Мы предлагаем теоретическое обоснование и практические рекомендации, а также инструментальные средства, которые помогут вам освоить данный аспект системы UNIX и обеспечить работоспособность коммуникаций в вашей системе. Мы рассмотрим не только прямую связь между машинами, но и связь с удаленными терминалами и модемами. Сначала мы займемся физическими соединениями, что является первым этапом установки линии связи. Мы рассмотрим модель интерфейса RS232-C и выясним, как подключить прямую межмашинную связь. Затем мы обсудим обращение к системе UNIX с микро-ЭВМ. Поговорим о том, какие существуют виды протоколов и какие из них лучше использовать. Далее мы рассмотрим, как пользоваться модемом, чтобы вызвать из UNIX другие системы, например доски объявлений и системы, отличные от UNIX. Вы можете изучить, как найти все модемные соединения в системе, подключиться к последовательному порту и управлять модемом. При обращении к другой системе вы можете перехватить все данные, поступающие на ваш терминал, и сохранить их в файле для последующего использования. Командные файлы (cuchk и talk), представленные в данном разделе, следят за доступностью линии связи и устанавливают связь с модемом. В завершение мы рассмотрим связь между системами UNIX с помощью утилиты uucp. Мы увидим, как и куда передавать файлы между системами, как файлы защиты данных управляют средой uucp и изучим способы отладки механизма передачи файлов с помощью uucp. Здесь представлены командные файлы uust для выполнения рутинной работы по обслуживанию uucp и uutrans для копирования древовидной структуры каталогов из одной системы в другую. ФИЗИЧЕСКОЕ ПОДКЛЮЧЕНИЕ Большинство машин, на которых работает UNIX, имеют один или несколько последовательных портов. Эти порты - глаза и уши машин, позволяющие системе связываться с внешним миром. Их можно использовать для подключения любого устройства с интерфейсом RS-232-C и для связи или управления. В данном разделе мы рассмотрим, как подключить интерфейс RS -232-C для обеспечения связи типа UNIX-UNIX, терминал-UNIX и модем-UNIX. Начнем с рассмотрения базовой модели RS-232-C, показанной на рис. 8-1. Эта модель иллюстрирует, как могут общаться друг с другом две машины и/или терминалы либо через модемы по телефонным линиям, либо по прямой (проводной) связи. Хотя последующее обсуждение мы ведем преимущественно в терминах телефонных соединений, те же базовые принципы относятся и к прямой связи, за исключением того, что коммуникационные устройства (DCE, data communication equipment) в этом случае не нужны. Рис. 8-1. Стандартная модель интерфейса RS-232-C ------------------------------------------------------------------- _||_ +-------+ 2 ***** _||_ ***** 2 +-------+ | |------>* *----\ || /----* *<------| | | DTE-1 | * DCE * \ || / * DCE * | DTE-2 | | |<------* * / || \ * *------>| | +-------+ 3 * *<---/ || \--->* * 3 +-------+ ***** || ***** ------------------------------------------------------------------- На каждом конце находятся терминальные устройства, называемые DTE (data terminating equipment). В роли DTE может выступать терминал, например, VT-100, или центральный процессор микро-, мини- или большой ЭВМ. Каждое терминальное устройство DTE должно использовать коммуникационное устройство DCE, называемое обычно модемом, для модуляции и демодуляции сигналов, проходящих по телефонным линиям. Каждое DTE использует вывод номер 2 для передачи данных и вывод номер 3 для получения данных. Поскольку то, что передано с вывода 2 на каждой машине, принимается на выводе 3 другой машины, возникает перекрещивание телефонных линий между устройствами DCE. Подсоединение и обработка сигнала между DTE и DCE полностью соответствуют стандарту RS-232-C. Аппаратный протокол позволяет DTE использовать DCE для посылки и приема данных от другого DTE. Кабель, связывающий физически DTE и DCE, называется "прямолинейным" кабелем. Он позволяет устройству DTE посылать команды (или сигналы с выводов) на DCE, а устройству DCE отправлять команды обратно на DTE. Подключение DCE одной машины к DCE другой машины производится через обычные телефонные линии. Устройства DCE необходимы по той причине, что устройства DTE являются цифровыми, а телефонные линии - аналоговыми. Единственный способ передать цифровую информацию по аналоговым линиям - закодировать цифровую информацию в аналоговый сигнал, послать этот сигнал по телефонным линиям, а затем декодировать аналоговый сигнал обратно в цифровую информацию. ПОДКЛЮЧЕНИЕ БЕЗ КОММУНИКАЦИОННЫХ УСТРОЙСТВ Если ваши машины расположены довольно близко (в пределах 50 футов / 15 метров. Один фут составляет около 30.5 см. - Примеч. перев./), вам не нужен модем, вы можете использовать кабель "нулевого модема" вместо DCE. Кабель нулевого модема имитирует такой же протокол, что и DCE, но не требует наличия модема для коммуникаций. Основная задача подключения нулевого модема - обеспечить перекрещивание между передающими и принимающими сигналами. На рис. 8- 2 показана общая схема подключения без устройств DCE. Рис. 8-2. Конфигурация с нулевым модемом ------------------------------------------------------------------- +-------+ 2 2 +-------+ | |------>... ...<------| | | DTE | 3 \./ 3 | DTE | | |<------.../ \...------>| | +-------+ +-------+ ------------------------------------------------------------------- Для того чтобы выполнить подключение, имитирующее DCE, требуются некоторые манипуляции с сигналами. Эти манипуляции также стандартизованы в кабеле нулевого модема. По схеме этого кабеля, показанной на рис. 8-3, рассмотрим, как он имитирует сигналы DCE. Рис. 8-3. Кабель нулевого модема RS-232-C ------------------------------------------------------------------- DTE-1 DTE-2 || || ЗАЩИТНАЯ ЗЕМЛЯ 1 ||-------------------------|| 1 (PROTECTIVE GROUND) || || || || СИГНАЛЬНАЯ ЗЕМЛЯ 7 ||-------------------------|| 7 (SIGNAL GROUND) || || || || ПЕРЕДАЧА ДАННЫХ 2 ||----------\ /----------|| 2 (TRANSMIT DATA) || . || ПРИЕМ ДАННЫХ 3 ||<---------/ \--------->|| 3 (RECEIVE DATA) || || || || ЗАПРОС ПЕРЕДАЧИ 4 ||----- -----|| 4 (REQUEST TO SEND) || | | || || | | || ГАШЕНИЕ ПЕРЕДАЧИ 5 ||<----\ /---->|| 5 (CLEAR TO SEND) || \---\ /---/ || || . || ИДЕТ ПЕРЕДАЧА ДАННЫХ 8 ||<---------/ \--------->|| 8 (DATA CARRIER DETECT) || || || || ГОТОВНОСТЬ НАБОРА ДАННЫХ 6 ||<---------\ /--------->|| 6 (DATA SET READY) || . || ГОТОВНОСТЬ ТЕРМИНАЛА 20 ||----------/ \----------|| 20 (DATA TERMINAL READY) || || || || ------------------------------------------------------------------- Линии 1 и 7 используются для шасси и сигнальной земли соответственно. Линии 2 и 3 пересекаются таким образом, чтобы когда одна сторона говорит, другая слушала. Обе стороны могут говорить одновременно (это называется полнодуплексным режимом), если мы используем различные наборы проводов. Для имитации управляющих сигналов линии 4, 5 и 8 подсоединяются так, как показано на рис. 8-3. Каждый раз, когда устройство DTE-1 активизирует линию "Request to Send" ("Запрос передачи"), т.е. передает по ней сигнал, оно получает назад сигнал "Clear to Send" ("Гашение передачи"), указывающий, что другая сторона готова принять данные. Затем, посылая сигнал по линии "Dаta Carrier Detect" ("Идет передача данных"), устройство DTE-1 сообщает другой стороне, что поступают данные. Такое методичное "аппаратное рукопожатие" гарантирует, что никакие данные не будут отправлены, пока другая сторона не будет готова их принять. Линии 6 и 20 подсоединяются так, чтобы обеспечить последние управляющие сигналы нулевого модема. Пока DTE активно ("Data Terminal Ready" - "Готовность терминала", линия 20), другая сторона считает, что имеет дело с активным модемом ("Data Set Ready" - "Готовность набора данных", линия 6). При таком способе соединения линий 6 и 20 всякий раз, когда вы выдергиваете ваш кабель из машины или переключаете его на другой канал соединительной коробки, другая сторона теряет ваш сигнал активности и отключается (или генерирует сигнал HUP - hangs up, повесить трубку телефона). Чтобы сделать такой кабель, который не вызывает отключения при вынимании штепселя (т.е. NOHUP), присоедините выход "Data Terminal Ready" ко входу "Data Set Ready" на том же устройстве DTE. Это заставляет систему сообщать самой себе, что модем всегда готов. Заметим, что рассмотренная схема подключения нулевого модема является рекомендуемой, но существуют и другие способы, поэтому не думайте, что все нулевые модемы одинаковы. В каждом конкретном случае для нулевых модемов учитывается определенное окружение или функция, например наличие безобрывного (nohup) варианта подключения. Теперь, когда мы знаем два различных способа соединения машин, мы можем рассмотреть способы коммуникаций и типы подключения, которые могут нам пригодиться. ДОСТУП МИКРО-ЭВМ ИЛИ ТЕРМИНАЛА К СИСТЕМЕ UNIX В этом разделе мы рассмотрим различные способы общения микро-ЭВМ и автономных терминалов с системой UNIX. Мы предполагаем, что одно устройство DTE работает не под управлением UNIX и обращается к другому устройству, управляемому системой UNIX. ПРЯМОЕ ПОДКЛЮЧЕНИЕ В простейшем случае имеется терминал или микро-ЭВМ, подсоединенные непосредственно к системе UNIX. Это очень часто встречается в системах разработки, когда UNIX используется в качестве кросс-компилятора, а результирующий код загружается в микро-ЭВМ. Другая ситуация - когда терминалы находятся на рабочих столах сотрудников и применяются для выполнения бумажной работы, отправки почты, печати документов и т.д. Типичные конфигурации с прямым подсоединением показаны на рис. 8-4. Обычный сценарий подключения терминала выглядит примерно таким образом. Пользователь с помощью терминала, например DEC VT-100, регистрируется в системе UNIX по прямой связи. Терминальное устройство DTE должно быть установлено в соответствии с правильной внутренней конфигурацией, включая скорость в бодах, стартовые и стоповые биты, число битов данных и четность. Это обычные установки терминала, которые можно задать либо тумблерными переключателями, либо при помощи терминальной микропрограммы "SETUP". Микро-ЭВМ, в отличие от терминала, должна запустить некоторое коммуникационное программное обеспечение для корректного управления аппаратурой. Эти программы обычно снабжены меню или каким-то другим способом указания параметров - таких же, как у терминалов. Действительно, имеются программные пакеты, обеспечивающие полную или почти полную эмуляцию популярных терминалов, таких как VT-100. Коммуникацинное программное обеспечение, используемое вами, устанавливается не специально для UNIX, а для обработки сигналов RS-232-C, которые обычно не зависят от того, прямое ли подсоединение или через модем. Рис. 8-4. Прямое подключение терминалов и микро-ЭВМ к UNIX --------------------------------------------------------------------- DTE-1 DTE-2 ДЕЙСТВИЕ ДЕЙСТВИЕ +----------+ +--------+ Микропрограмма | | Нулевой модем| | getty 9600 tty00 SETUP | терминал |--------------| tty00 | login имя_польз | | | | sh +----------+ | | | UNIX | +----------+ | | Коммуникационное | | Нулевой модем| | программное | микро-ЭВМ|--------------| tty01 | обеспечение | | | | +----------+ +--------+ --------------------------------------------------------------------- В качестве кабеля, соединяющего терминал (или микро-ЭВМ) с системой UNIX, нужно использовать нулевой модем. Когда коммуникационное устройство DCE отсутствует, применяется кабель нулевого модема. В системе UNIX на терминальном устройстве DTE должна быть утилита getty (что первоначально означало "get teletype" - доступ к телетайпу), которая работает с определенным портом и обнаруживает момент, когда кто-то пытается зарегистрироваться в системе. Программа getty (описанная в init(M) и getty(M)) выводит подсказку "login:" и читает символы, поступающие по линии. При прямом подключении процесс getty может работать со скоростью 9600 бод, поэтому пользователи могут получить выигрыш от применения этой скорости. Это значительно быстрее, чем 1200 или иногда 2400 бод - скоростей, которые используются чаще всего при работе с обычными телефонными линиями. В зависимости от того, как установлен файл gettydefs, вы можете обычно изменить скорость работы getty, нажимая клавишу break. Клавиша break генерирует не символ, а сигнал в линию, который длится определенный интервал времени. Драйверы устройств в системе UNIX распознают этот сигнал и действуют соответствующим образом. Рассмотрение самого метода, с помощью которого getty работает на различных скоростях, выходит за пределы данной книги. Важно знать, что если getty работает на скорости 9600 бод, а вы используете терминал, установленный на 1200 бод, то вам нужно прокрутить переключение скоростей getty с 9600 бод через все промежуточные скорости до достижения значения 1200 бод. Держите клавишу break нажатой до тех пор, пока getty не установится на нужную вам скорость. Следующий пример взят из файла gettydefs в OC XENIX System V и показывает, как связаны между собой скорости обмена. -------------------------- | 5# B9600 PARENB CS7 OPOST ONLCR # B9600 SANE IXANY #Login: #1 | 4# B4800 PARENB CS7 OPOST ONLCR # B4800 SANE IXANY #Login: #5 | 3# B2400 PARENB CS7 OPOST ONLCR # B2400 SANE IXANY #Login: #4 | 2# B1200 CS8 OPOST ONLCR # B1200 SANE IXANY #Login: #3 | 1# B300 CS7 OPOST ONLCR # B300 SANE IXANY #Login: #2 | Здесь указание #5 в файле inittab (или в файле ttys для пользователей XENIX и System III) порождает процесс getty, работающий на скорости 9600 бод. Если вы нажимаете клавишу break, следующим по порядку является номер 1 (как указано в конце строки номер 5). Если вы нажимаете break еще раз, то следующей является строка номер 2, и т.д. Если вы нажмете break достаточное количество раз, скорость getty вернется по циклу к значению 9600 бод. Вся последовательность действий, связанных с регистрацией в системе, выглядит примерно так. Сначала init порождает процесс getty (инициируемый из файла /etc/inittab) на определенном номере терминала и с определенной скоростью. При этом устанавливаются характеристики линии и выдается регистрационная подсказка. Когда пользователь вводит регистрационное имя, getty проверяет его на правильность, а затем выполняет программу login. Login запрашивает пароль, зашифровывает его и сверяет с зашифрованным паролем в файле /etc/passwd. Если пароли совпадают, login запускает процесс shell, который печатает shell-подсказку и читает ваши команды, поступающие с терминала. Какой именно shell будет запущен - определяется записью в файле паролей, соответствующей данному регистрационному имени. Моему регистрационному имени соответствует такая запись: russ:j9egLecqEpXLg:201:51:Russ Sage:/usr/russ:/bin/shV В этом случае запускается System V shell, один из новых shell-интерпретаторов фирмы AT&T. ДИСТАНЦИОННОЕ ПОДКЛЮЧЕНИЕ Альтернативой прямому подключению является дистанционное подключение через модемную линию, показанное на рис. 8-5. Установка терминала или конфигурирование микро-ЭВМ выглядят примерно так же, как и в предыдущем случае, за исключением скорости обмена, на которой работает терминал. Для большинства модемов она должна равняться 1200 бодам. Рис. 8-5. Дистанционное подключение терминалов и микро-ЭВМ к UNIX --------------------------------------------------------------------- ДЕЙСТВИЕ Команды модема DTE-1 DTE-2 +----------+ ***** +--------+ | | прямой * * | | | терминал |-------* модем *\ | | | | кабель * * \ ***** | UNIX | +----------+ ***** \ _||_ * * прямой | | \ _||_ ---* модем *-------| tty00 | / || * * кабель | | +----------+ ***** / || ***** | | | | прямой * * / +--------+ | микро-ЭВМ|-------* модем */ getty 1200 tty00 | | кабель * * login имя_польз +----------+ ***** sh Коммуникационное обеспечение, команда набора телефонного номера --------------------------------------------------------------------- Терминал (когда он установлен на 1200 бод) общается непосредственно с модемом. При этом задействованы модемные команды "набрать телефонный номер" (dial), "повесить трубку" (hang up) и т.д. Микро-ЭВМ, запускающая коммуникационное программное обеспечение, обычно имеет команду набора номера, которая генерирует команду для модема. Соединение между терминалом/микро-ЭВМ и модемом должно быть выполнено в виде прямолинейного кабеля. Модем имеет также телефонный кабель, идущий в телефонную систему. Поскольку мы имеем дело с UNIX, последовательность действий при регистрации в системе такая же, как и рассмотренная ранее, за исключением того, что getty инициируется обычно со скоростью 1200 бод, чтобы соответствовать скорости модема. Если getty имеет другую скорость, переключите ее с помощью клавиши break на значение 1200 бод. Как только все действия по конфигурированию завершены, терминал или микро-ЭВМ может связаться с системой UNIX. Как это сделать? При регистрации пользователя в системе структура данных termcap используется для поддержки управления экраном. Если у вас еще нет записи в файле termcap, обратитесь к предыдущей главе, где описано, как подготовить такую запись. Терминалы (поскольку обычно они являются просто аппаратурой) не слишком гибки и дружественны по отношению к пользователю. Они не обладают широким спектром возможностей помимо регистрации в системе и запуска некоторых программ. Микро-ЭВМ, с другой стороны, имеют большую гибкость и могут многое добавить к пользовательскому интерфейсу с системой UNIX. Коммуникационные программы имеют обычно буфер памяти с прямой адресацией (RAM), который вы можете использовать для того, чтобы захватить данные и поместить их на диск. Благодаря применению этого буфера, вы можете избавиться от необходимости использовать специальные команды UNIX для передачи файлов. Вы можете дать команду включения захвата данных, затем отобразить файл на экран (используя, например, команду cat или просматривая файл редактором), если только этот файл не слишком большой для буфера. Следует иметь в виду, однако, что программные файлы или другие файлы, требующие стопроцентной точности при передаче, нужно передавать с явным использованием протокола проверки ошибок, поскольку телефонные линии или даже прямое подключение могут вносить "шумы" и один неверный символ может сделать программу бесполезной. Некоторые протоколы, поддерживаемые в мире микро-ЭВМ, приспособлены к машинам с системой UNIX, например программы xmodem и kermit. Из этих двух протоколов xmodem более широко распространен в мире микро-ЭВМ и поддерживается почти всеми системами типа досок объявлений. Kermit очень популярен в мире UNIX, имеет растущую популярность в мире микро-ЭВМ и доступен почти для каждой модели микро-ЭВМ за цену, немногим большую стоимости диска. Используя эти протоколы, микро-ЭВМ может посылать и принимать файлы из системы UNIX, и вам не нужно заботиться о контроле ошибок при передаче данных. Чтобы подробнее узнать об этих протоколах, проконсультируйтесь у администраторов вашей системы UNIX и у пользователей микро-ЭВМ, имеющих те же проблемы. ДОСТУП ИЗ СИСТЕМЫ UNIX К МИКРО-ЭВМ Обратная ситуация, в отличие от только что рассмотренной, состоит в обращении из системы UNIX к системе, отличной от UNIX, функционирующей на микро-ЭВМ или на большой машине. Для того чтобы это сделать, необходимо знать, как получить доступ к последовательному порту, какую команду модема использовать для набора телефонного номера, как зарегистрироваться в той системе, в которую мы обращаемся. Модель этой ситуации показана на рис. 8-6. Терминальное устройство DTE-1, т.е. система UNIX, использует прямой кабель для подключения модема. Для последовательной линии, которой в нашем примере является tty00, не нужно запускать процесс getty. Программа getty нужна только для регистрации в системе, а не для обращения к другой системе. Последовательным портом UNIX-машины управляет программа cu. Система, отличная от UNIX, имеет регистрационную последовательность некоторого вида. Если вы обращаетесь к микро-ЭВМ, на которой функционирует программное обеспечение типа доски объявлений, то система, отличная от UNIX, обычно запрашивает ваше имя, город и т.д., а также пароль. (Обычно вы можете зарегистрироваться как новый пользователь и завести пароль, но это зависит от конкретной доски объявлений.) Если другой системой является большая машина, то ее регистрационную последовательность нужно знать заранее. Как уже отмечалось, основной программой, которую предоставляет UNIX для обращения к другой системе, является cu(1), что означает "call unix" ("вызвать UNIX"). На практике, как и в нашем примере, другая система не обязана быть системой UNIX, поэтому эту программу было бы более правильно характеризовать как "подключение к UNIX-порту". Рис. 8-6. Обращение UNIX к системе, отличной от UNIX ------------------------------------------------------------------- DTE-1 DTE-2 +--------+ +------+ | | ***** _||_ ***** | | | UNIX | прямой * * _||_ * * прямой | Не | | |-------* модем *-- || --* модем *-------| UNIX | | tty00 | кабель * * || * * кабель | | | | ***** || ***** | | +--------+ +------+ ДЕЙСТВИЕ ДЕЙСТВИЕ Вместо команды getty tty00 Специфическая команда cu -ltty00 dir регистрационная последовательность ------------------------------------------------------------------- Программа cu открывает последовательный порт и помещает "файл занятости" ("lock file") в каталог /usr/spool/uucp. Присутствие этого файла занятости просто означает, что порт задействован, и препятствует доступу к нему других пользователей. Вы имеете право исключительного доступа до тех пор, пока не выйдете из программы cu и не отдадите этот порт кому-нибудь другому. При вызове утилиты cu начинают работать два процесса: читатель (который читает из последовательного порта) и писатель (который пишет в последовательный порт). Когда вы вводите символы для программы cu, она проверяет наличие среди них специальных символов, на которые она должна реагировать. Обычно cu сразу реагирует на специально предназначенные ей командные символы. Остальные символы передаются через последовательный порт другой стороне. Помимо передачи символов вперед и назад, программа cu предоставляет многие функции, аналогичные функциям коммуникационного пакета микро-ЭВМ. ОБНАРУЖЕНИЕ МОДЕМОВ В СИСТЕМЕ Если вы работаете на большой машине, вам нужно выяснить, какие порты в вашей системе подсоединены к модему и внешней линии. Если вы администратор, то вы должны знать, как сконфигурировать эти линии. Начинать нужно с файла /usr/lib/uucp/L-devices. Это основной файл, определяющий, какие порты используются и каким образом они используются. Вот пример распечатки с информацией о портах: --------------------- | | ACU cul0 cua0 1200 | DIR tty00 0 300 | DIR tty00 0 1200 | DIR tty00 0 2400 | DIR tty00 0 4800 | DIR tty00 0 9600 | В файле L-devices каждый порт определяется либо как прямое подключение (DIR - direct connection), либо как специальное устройство, называемое устройством автоматического вызова (ACU - automatic call unit). Об устройствах вызова мы поговорим позже. Сейчас нам нужно рассмотреть только записи типа DIR. Программа cu использует записи типа прямого подключения, а uucp - типа ACU. Теперь очень просто идентифицировать каждый последовательный порт: как к нему обращаться, на какой скорости он работает и можем ли мы осуществить вызов через этот порт. Данные файла L-devices показывают, например, что последовательный порт tty00 используется как линия прямого вызова. Вам разрешается использовать для вызова через этот порт скорости от 300 до 9600 бод. Это полный диапазон используемых обычно скоростей обмена, причем более высокие скорости применяются для прямого подключения к другим машинам, а не к модему. А как насчет модемных линий, которые ВХОДЯТ в машину? Для того чтобы их найти, нужно посмотреть каталог /etc. Там два файла dialin и dialup определяют, на каких линиях tty применяется вторичная регистрационная парольная последовательность для удаленных пользователей. Эти линии tty предназначены только для обращения извне в данную систему и обычно не могут быть использованы для доступа из этой системы во внешний мир. ИСПОЛЬЗОВАНИЕ И КОНФИГУРИРОВАНИЕ ЛИНИИ Теперь, когда мы знаем, по какой линии осуществить вызов, нам необходима команда вызова. В последних версиях System V утилита cu более развита, чем в предыдущих версиях. Нам, как правило, не нужны особо мощные возможности, поэтому наши командные строки довольно просты и смогут работать практически с любым вариантом программы cu. К основным возможностям, которые мы имеем, относятся: выбор номера линии (т.е. устройства tty), скорости функционирования и подключаться ли к устройству напрямую для ручного набора номера либо же набирать номер автоматически. Самый простой способ - чтобы номер набирала программа cu, но если это невозможно, то вы должны подключиться непосредственно к модему. Следующий пример показывает, как непосредственно подключиться к устройству и вручную управлять модемом с целью набора номера. В данном случае используется довольно широко распространенный модем Hayes 1200 Smartmodem. Если у вас модем, который не является "Hayes-совместимым", то вы должны найти эквивалентные управляющие последовательности в вашей документации. $ cu -ltty00 dir # Получить прямой доступ к терминальной # линии со скоростью 1200 бод Connected # Отзыв программы cu ATdt555-1212 # Внимание модему, установка связи путем # набора следующего номера CONNECT # Модем подтверждает факт подключения # Отправка возврата каретки в систему-адресат Welcome to Micro BBS # Получение приветствия от микро-ЭВМ . . выполнение сеанса работы с удаленной системой . . exit # Выйти из микро-системы ИЛИ, +++ # если вы этого не хотите, временно # выйти из модемного подключения # (по команде escape, а не exit) OK # Ответ модема на временный выход ATh0 # Попросить модем занять телефон OK # Ответ модема ~. # Завершить работу с cu Для того чтобы указать программе cu автоматический набор номера, используйте другой синтаксис в командной строке. Мы применяем устройство автоматического вызова ACU для того, чтобы сделать вызов. Фактическая команда набора номера генерируется программой /usr/lib/uucp/dial. Пример вызова выглядит так: $ cu -acua0 555-1212 ИЗМЕНЕНИЕ СКОРОСТЕЙ ОБМЕНА Модемы типа Smartmodem могут работать со скоростями 300 и 1200 бод. По умолчанию, программа cu подключается к последовательному порту на скорости 1200 бод. Если вы подключаетесь с использованием умолчаний, проверьте скорость, временно выйд