Рассел Сейдж. Приемы профессиональной работы в unix перевод "Tricks of the unix masters" by Russel G
Вид материала | Документы |
СодержаниеПример вызова Переменные среды выполнения Формат вызова Текст программы Переменные среды выполнения |
- Лекция 10. Файловые системы Unix, 116.79kb.
- Unix-подобные операционные системы, характеристики, особенности, разновидности, 40.63kb.
- Методические материалы, 3002.45kb.
- Курс для опытных администраторов unix, 67.69kb.
- Министерство Образования Российской Федерации. Юургу курсовая, 383.18kb.
- Программа курса «unix», 18.71kb.
- Лабораторная работа №1. Командный интерпретатор, 418.36kb.
- The design of the unix operating system by Maurice, 9215.6kb.
- Разработка автоматизированной системы мониторинга аппаратного и программного обеспечения, 20.06kb.
- Лекція 6 "Інформатика та комп'ютерна техніка" Тема Сервісні та прикладні програми Види, 55.04kb.
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 соответствует любым командам, которые не были
распознаны ранее. Такие команды являются ошибочными, и выдается
сообщение об этом. Когда выполнение программы доходит до этого места,
она завершается.
------------------------------------------------------------------------
ИМЯ: 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. Все
каталоги в системе-адресате должны создаваться автоматически по мере
пересылки файлов.
Несколько неприятный вопрос - права собственности и доступа к
файлам на принимающей стороне. Обычная последовательность действий
такова:
1. Поставить файлы в очередь к uucp, используя инструментальное
средство uutrans.
2. Выйти из системы-источника.
3. Войти в систему-адресат.
4. Запустить uust и повторно подключиться к uucp.
Если вы придерживаетесь такой технологии постановки в очередь и
передачи, то вы полностью контролируете, какие файлы куда
направляются. Имеется побочный эффект, заключающийся в том, что права
доступа к файлам в каталоге-адресате устанавливаются в соответствии с
маской интерпретатора shell (shell umask) того процесса, который
производит повторное подключение.
Необходимо отметить, что если у вас нет прав доступа на запись в
вашей umask, то создается пересылочный каталог, но в него не могут
быть помещены никакие файлы, что подрывает передачу файлов с помощью
uucp. Для разрешения этой проблемы измените вашу umask на "000" (по
умолчанию она равняется 777 для каталогов и 644 для обычных файлов).