ИМЯ: uutrans
uutrans Передача файловых деревьев из одной системы UNIX в другую систему UNIX
Копирует полную иерархию файловой системы с помощью uucp в другую систему UNIX и поддерживает структуру файлового дерева.
uutrans
cd $HOME/backup uutrans remote ~russ
Начиная с подкаталога backup моего регистрационного каталога, запустить uutrans с целью передачи всех моих файлов. Файлы посылаются в систему remote и размещаются там в моем регистрационном каталоге (/usr/russ).
1 : 2 # @(#) uutrans v1.0 Transfer file trees via uucp 3 # Author: Russ Sage 4 if [ $# -gt 0 ] 5 then echo "uutrans: argument count error" >&2 6 echo "usage: uutrans" >&2 7 exit 1 8 fi 10 SELF=`uuname -l` 12 echo "source directory( to exit): \c" 13 read SOURCE 14 if [ "$SOURCE" = "" -o ! -d "$SOURCE" ] 15 then exit 1 16 fi 18 echo "\ndestination system( for $SELF): \c" 19 read SYSTEM 20 echo "\ndestination directory( for ~/$LOGNAME): \c" 21 read DEST 23 : ${SYSTEM:="$SELF"} 24 : ${DEST:="~/$LOGNAME"} 26 echo "\nQUEUEING:" 28 find $SOURCE -type f -print | sort | while read FILE 29 do 30 echo $FILE 31 uucp -c -d -r $FILE $SYSTEM!$DEST/$FILE 32 done
DEST | Место назначения, куда нужно копировать файлы |
FILE | Определенный копируемый файл |
LOGNAME | Содержит регистрационное имя |
SELF | Содержит узловое имя текущей системы |
SOURCE | Источник всех копируемых файлов |
SYSTEM | Имя системы, в которую нужно копировать |
Зачем нам нужен командный файл uutrans?
Копирование файлов из одной системы в другую с помощью uucp довольно простая задача: достаточно указать, какие файлы куда нужно направить. Но как быть в случае, когда вам нужно скопировать иерархию файлов? Как гарантировать, что файлы расположатся в системе-адресате в виде иерархии, а не будут засунуты в один и тот же каталог?
Единственное предложение в документации по uucp (даже не на страницах руководства) говорит о том, как это сделать. Если вы никогда не читали его, то скорее всего ваши пересылки завершатся неудачей. Нам нужно инструментальное средство, которое передает древовидные структуры в другие системы, сохраняя при этом форму этих структур. Мы хотим обеспечить простой способ выполнения этой работы, чтобы не искать каждый раз припрятанную информацию.
Что делает uutrans?
Uutrans предоставляет гибкий интерфейс, гарантирующий правильное копирование файловых иерархий. Этот командный файл знает, какие файлы передавать, в какую систему их направить и где их разместить в этой системе.
Когда вы запускаете uutrans, первым делом он запрашивает исходный каталог для пересылки файлов. Если вы не хотите продолжать, нажмите возврат каретки для выхода. Обратите внимание, что используется команда find, поэтому путь, который вы указываете в ответ на подсказку, является префиксом маршрутного имени для всех передаваемых файлов. Например, если вашим текущим каталогом является $HOME и вы хотите сделать его каталогом-источником, введите ".". Оператор find сгенерирует для файла /src/f.c маршрутное имя src/f.c. Если же вы введете, например, имя /usr/russ, то результирующим маршрутным именем будет /usr/russ/src/f.c. Таким образом, требуется небольшая предусмотрительность, чтобы избежать создания лишних уровней каталога в системе-адресате.
Затем запрашивается имя системы-адресата. Если вы хотите, чтобы это была ваша собственная система, нажмите возврат каретки. Это позволит скопировать файлы в пределах того же жесткого диска или в другие файловые системы.
В запросе каталога-адресата умолчанием является PUBDIR. Если вам это не подходит, укажите точное маршрутное имя каталога, с которого вы хотите начать иерархию в системе-адресате. (Напомним также, что многие системы накладывают ограничения на то, куда вы можете копировать файлы с помощью uucp.) Способ, которым uutrans поддерживает правильное файловое дерево - это указание абсолютного маршрутного имени в системе-адресате, ниже которого будут располагаться все передаваемые файлы. Единственный способ сделать это - занести маршрутное имя в переменную и использовать ее в качестве путей как источника, так и адресата при вызове uucp.
Когда вся входная информация введена, используется команда find, чтобы найти все файлы, относящиеся к данной иерархии. Затем каждое маршрутное имя передается по конвейеру в цикл, который отображает имя и передает файл адресату при помощи uucp.
Для того чтобы ускорить весь процесс и сэкономить свободное пространство, файлы ставятся в очередь в каталоге подкачки (т.е. не делается попытка вызвать удаленную систему), и никакие файлы не копируются в каталог подкачки. Это экономит время, которое ушло бы на копирование больших количеств файлов, и даже может обезопасить вашу машину от аварийных завершений работы, так как копирование большого числа файлов забирает все свободное пространство.
Когда все файлы поставлены в очередь, вам нужно вручную подсоединиться к uucp с помощью команды 'c' или 'r' утилиты uust. Все каталоги в системе-адресате должны создаваться автоматически по мере пересылки файлов.
Несколько неприятный вопрос - права собственности и доступа к файлам на принимающей стороне. Обычная последовательность действий такова:
Если вы придерживаетесь такой технологии постановки в очередь и передачи, то вы полностью контролируете, какие файлы куда направляются. Имеется побочный эффект, заключающийся в том, что права доступа к файлам в каталоге-адресате устанавливаются в соответствии с маской интерпретатора shell (shell umask) того процесса, который производит повторное подключение.
Необходимо отметить, что если у вас нет прав доступа на запись в вашей umask, то создается пересылочный каталог, но в него не могут быть помещены никакие файлы, что подрывает передачу файлов с помощью uucp. Для разрешения этой проблемы измените вашу umask на "000" (по умолчанию она равняется 777 для каталогов и 644 для обычных файлов).
1. cd $P uutrans . remote
Сменить каталог на PUBDIR. Передать все файлы из текущего каталога (.) в удаленную систему, размещая их в подразумеваемом каталоге ~/$LOGNAME, т.е. в моем каталоге PUBDIR.
2. uutrans /etc remote /tmp/etc
Передать все файлы из каталога /etc в систему remote, помещая их в каталог /tmp/etc.
Строки 4-8 проверяют наличие ошибок. Если в командной строке есть аргументы, печатается сообщение об ошибке.
Строка 10 инициализирует переменную SELF именем вашего системного узла, используемого утилитой uucp.
Строки 12-16 запрашивают каталог-источник и читают ответ в переменную SOURCE. Если ничего не введено или указан не каталог, программа завершается. Строки 18-21 запрашивают систему-адресат и каталог-адресат. Умолчаниями являются ваша собственная система и каталог PUBDIR для размещения файлов. Эти умолчания облегчают конфигурирование, связанное с пересылкой информации, чтобы не было необходимости вводить много данных.
В строках 23 и 24 проверяется, инициализированы ли переменные.
Если переменной SYSTEM присвоен возврат каретки, в нее заносится значение SELF. Если переменная DEST пустая, ей присваивается ~/$LOGNAME. Эти операторы устанавливают значения по умолчанию. Строка 26 печатает сообщение о том, что файлы ставятся в очередь. Весь фокус заключается фактически в строках 28-32. Команда find начинает работать с каталога SOURCE и находит все обычные файлы. Этот список передается утилите sort, так что uucp пересылает файлы в отсортированном порядке. Это облегчает отслеживание того, какие файлы были переданы, если возникают какие-то проблемы.
Отсортированный список попадает в цикл while, читающий имена файлов. Каждое имя отображается на экран для справки, и файл ставится в очередь к удаленной системе. В строке 31 указаны такие опции uucp: -r для постановки в очередь, -c для того, чтобы не копировать файлы в каталог подкачки, и -d для создания каталогов, необходимых в удаленной системе.
Для поддержки древовидной структуры мы применяем магический синтаксис $SYSTEM!$DEST/$FILE. Нам нужно не только скопировать файлы в систему и в каталог, но и определить маршрутное имя вплоть до самого файла. Это гарантирует, что файлы будут расфасованы по каталогам. Если бы был использован синтаксис $SYSTEM!$DEST, то все файлы попали бы в один каталог и их иерархическая структура была бы утеряна.
После того как все файлы поставлены в очередь, они находятся в этой очереди до тех пор, пока их не позовет удаленная система. Тогда файлы будут скопированы в эту систему.
Зачастую на практике вокруг нашей системы UNIX накапливается много не особенно совместимой аппаратуры, включая терминалы, микро-ЭВМ и модемы. Как заставить их работать совместно? Теперь когда мы рассмотрели основные особенности аппаратуры и программмного обеспечения для коммуникаций в системе UNIX, мы готовы представить некоторые примеры работы коммуникаций в комплексах с системой UNIX. Мы хотим рассмотреть ряд конфигураций, использующих различные комбинации аппаратуры. Проблемы меняются, но наш общий подход остается.
Первая задача, которую мы рассмотрим, это использование "персональной" системы UNIX, модема и главной машины. У нас есть система UNIX с одним последовательным портом, но мы имеем как модем, так и линию прямого подключения к системе большего размера. Как нам использовать один последовательный порт и для модема, и для главной машины? Решение показано на рис. 8-10.
Рисунок 8-10.
Подключение системы UNIX к модему и
главной машине
Нам нужен блок переключения. Этот блок имеет один вход на одной стороне и два входа на другой. Мы подсоединяем UNIX к главному входу, что позволяет переключаться либо на модем, либо на главную машину. Здесь два различных подсоединения:
UNIX <-- --> модем Вызов из UNIX при помощи cu, uucp и обращение в UNIX с удаленного терминала UNIX --> главная машина UNIX обращается к главной машине, как прямо подключенный терминал
Эта конфигурация аналогична предыдущей, за исключением того, что вся аппаратура локальна. Мы хотим использовать модем как для терминала, так и для UNIX. Конфигурация показана на рис. 8-11. Порт системы UNIX подсоединяется к одной стороне переключателя, а терминал к другой. Отметим, что терминал НЕ будет обращаться в систему UNIX. Все кабели прямолинейные. В таком комплексе возможны следующие конфигурации:
UNIX <-- --> модем Обращение в UNIX с удаленного терминала и вызов из UNIX с помощью cu, uucp терминал --> модем Для вызова из UNIX только в качестве немого терминала
Рисунок 8-11.
Подключение UNIX и терминала к модему
Эта ситуация довольно сложна и требует двух блоков переключения. Соответствующая архитектура показана на рис. 8-12.
Рисунок 8-12.
Подключение системы UNIX к терминалу,
модему и главной машине
Начнем с системы UNIX. В ней имеется линия, идущая в переключатель 1 в качестве главного входа. Переключатель 1 осуществляет переключение между терминалом и блоком переключения 2. Это позволяет системе UNIX либо получать терминал для регистрации в системе (в предположении, что работает getty), либо получать модем для регистрации в системе, либо посылать информацию модему или главной машине (предполагается, что процесса getty нет). Заметим, что между терминалом и UNIX должен быть нулевой модем, но мы не можем сделать нуль-модем сразу после UNIX, потому что нам нужен прямой кабель для подсоединения к модему.
Затем блок переключения 2 выполняет коммутацию между модемом и главной машиной. Линия к модему должна быть прямой, а линия в главную машину должна быть нуль-модемом. Возможны следующие взаимосвязи:
UNIX <-- терминал Обращение в UNIX с терминала по линии getty UNIX <-- --> переключатель <-- --> модем Вызов из UNIX с помощью cu, uucp и обращение в UNIX с удаленного терминала UNIX --> переключатель --> главная машина Обращение из UNIX при помощи cu, uucp
В этой конфигурации также требуется два блока переключения. У нас есть машина с двумя последовательными линиями, на которой работает UNIX, автономная микро-ЭВМ и модем, который они должны совместно использовать. UNIX-машина также воспринимает регистрацию с автономной машины, позволяя ей эмулировать терминал, если у нас есть соответствующее программное обеспечение. Решение показано на рис. 8-13.
Рисунок 8-13.
Система UNIX, микро-ЭВМ и модем
Микро-ЭВМ может работать двумя способами: либо как терминал в системе UNIX, либо как терминал для обращения к модему. Система UNIX имеет один последовательный порт, позволяющий связываться с микро-ЭВМ через переключатель 1. Другая последовательная линия идет в блок переключения 2, подсоединенный к модему. По этой линии можно либо обращаться из системы UNIX во внешний мир, либо принимать внешние вызовы с целью удаленной регистрации в системе через модем. Переключатель 2 коммутирует модем между микро-ЭВМ и системой UNIX. Возможны такие комбинации:
микро-ЭВМ --> переключатель --> модем Обращение вовне с помощью коммуникационных средств микро-ЭВМ --> переключатель --> UNIX Регистрация в системе путем эмуляции терминала UNIX <-- переключатель <-- микро-ЭВМ Регистрация с терминала, подключенного напрямую UNIX <-- --> переключатель <-- --> модем Вызов из UNIX при помощи cu, uucp, удаленная регистрация модем <-- переключатель <-- микро-ЭВМ Вызов модема с микро-ЭВМ модем <-- --> переключатель <-- --> UNIX Вызов из UNIX или обращение в UNIX; требуется изменение getty для последовательной линии и автоответа модема
Возможно еще одно решение предыдущей задачи. Оно использует несколько больше возможностей, чем предыдущее решение. Те же основные проблемы решены, но подход при этом сильно отличается. В конфигурации, показанной на рис. 8-14, блоки переключения подсоединяются иначе, чем в предыдущем комплексе. Доступны те же пути передачи информации, а также некоторые новые.
Рисунок 8-14.
Система UNIX, микро-ЭВМ и модем в
альтернативной конфигурации
Как микро-ЭВМ, так и система UNIX подключены к переключателю 1. Этот переключатель присоединен к блоку переключения 2 главным входом. Линии от микро-ЭВМ, от UNIX, между переключателями и модемная линия должны быть прямыми кабелями. Только входная линия системы UNIX должна быть нуль-модемом.
Переключатель 2 коммутирует один из центральных процессоров между модемом и второй последовательной линией системы UNIX. Модемная линия может идти от модема или к нему, но линия системы UNIX должна быть только входящей, потому что в UNIX работает getty. Возможны такие комбинации:
микро-ЭВМ --> переключатель --> модем Обращение вовне при помощи коммуникационных средств микро-ЭВМ --> переключатель --> UNIX Регистрация в системе путем эмуляции терминала UNIX <-- --> переключатель <-- --> модем Обращение из или в UNIX с помощью cu, uucp UNIX --> переключатель --> UNIX Выход с первой линии идет во вторую линию для регистрации в системе модем <-- --> переключатель <-- --> процессор Выбор центрального процессора зависит от переключателя 1 UNIX <-- переключатель <-- процессор В зависимости от переключателя 1, один из процессоров может зарегистрироваться в системе
Последняя конфигурация, которую мы рассмотрим, это соединение трех систем UNIX. Данное решение было подсказано конфигурацией с прямым подсоединением 16-разрядной машины PC XENIX, 32-разрядной машины PC XENIX и главной машины VAX. Для того чтобы выполнить такое подключение, нам нужно три двунаправленных блока переключения.
Не так важно, какая из микро-ЭВМ 1 и микро-ЭВМ 2 является 32или 16-разрядной машиной. Они могут быть в вашем помещении, а главная машина может стоять где-то в другом месте и соединяться кабелем с вашим помещением. При этом предполагается, что кабель от главной машины уже является нуль-модемом в вашем подключении. Еще один нулевой кабель располагается между двумя системами UNIX на микро-ЭВМ, чтобы можно было зарегистрироваться с одной из этих систем в другой системе в качестве терминала. Остальные кабели прямые (см. рис. 8-15).
Рисунок 8-15.
Три системы UNIX
Каждая микро-ЭВМ подсоединена к блоку переключения через главное соединение. Эти переключатели 1 и 2 коммутируются друг с другом и с блоком переключения 3.
Микро-ЭВМ 1 может переключаться на микро-ЭВМ 2 в качестве интерфейса терминал/uucp и на главную машину в качестве удаленного терминала. В этом случае линия главной машины проходит через селектор порта. Микро-ЭВМ 2 может переключаться между микро-ЭВМ 1 и главной машиной аналогичным образом. Переключатель 3 коммутирует главную машину между микро-ЭВМ 1 и микро-ЭВМ 2. Возможны следующие комбинации:
микро-ЭВМ 1 --> переключатель --> главная машина Зарегистрироваться в качестве удаленного терминала микро-ЭВМ 1 <-- --> переключатель <-- --> микро-ЭВМ 2 Обращение в UNIX или из UNIX в зависимости от getty микро-ЭВМ 2 <-- --> переключатель <-- --> микро-ЭВМ 1 Обращение в UNIX или из UNIX в зависимости от getty микро-ЭВМ 2 --> переключатель --> главная машина Зарегистрироваться в качестве удаленного терминала главная машина <-- переключатель <-- микро-ЭВМ 1 Зарегистрироваться с удаленного терминала главная машина <-- переключатель <-- микро-ЭВМ 2 Зарегистрироваться с удаленного терминала ***
Вероятно, рассмотренные нами конфигурации могут не в точности соответствовать вашим потребностям. Однако мы представили их с той целью, чтобы вы увидели разнообразие типовых решений, которые вы можете адаптировать для себя. В следующей главе мы несколько отойдем от всех этих гаек и болтиков и подробнее рассмотрим вопросы, связанные с администрированием системы, особенно вопросы безопасности.
Назад | Содержание | Вперед