последней регистрации в системе. Программа lastlog описана в главе 5.
Строки 54-58 инициализируют переменные, генерирующие цвета на
цветном мониторе. Управляющие значения являются стандартными значения-
ми кодов ANSI. Это работает в системе XENIX и может работать в вашей
системе. Растровая графика не доступна, но имеется символьная графика
и различные основные (foreground) и фоновые (background) цвета. Основ-
ные цвета кодируются числами, начиная с 30, а фоновые цвета - числами
с 40.
Строки 60-66 - просто для забавы. Они представляют собой хитрый
способ устанавливать каждый день на экране различные цвета. Строка 60
начинается с запуска команды date и передачи ее выхода по конвейеру
команде cut. Вырезается первое поле, которое является днем недели. За-
тем мы создаем структуру переключателя по строке дня, выполняя различ-
ные действия для каждого дня. Благодаря эхо-отображению управляющих
последовательностей, монитор реагирует немедленно.
ТЕОРИЯ ОТНОСИТЕЛЬНОСТИ ВНУТРИ СИСТЕМЫ UNIX
Теперь, когда мы ознакомились с "домашней" средой, следующий шаг
- обратиться к средам, находящимся вне регистрационного каталога
($HOME). Например, что представляют собой другие каталоги на том же
уровне, что ваш $HOME ? Кто еще работает в системе? Как попроще полу-
чить доступ к их каталогам? Можете ли вы запускать программы в чужих
каталогах? Такого рода вопросы и действия относятся к другим людям в
вашей системе.
Единственный способ ответить на эти вопросы - посмотреть вокруг
себя. Никто не собирается рассказывать вам, что такое система. Вы
должны сами исследовать ее и выяснить, куда вы можете ходить, а куда
нет. Система конечна, так что вы можете себе помочь, делая распечатки
всех каталогов и файлов.
Вы можете маневрировать в системе UNIX, используя относительную
нотацию. Поскольку системное дерево образовано из каталогов, обозначе-
ния . и .. позволяют нам двигаться вверх и вниз по дереву. В любой
точке .. означает родительский каталог текущего каталога, в котором мы
находимся.
Ниже показаны некоторые примеры относительных команд.
ls -l $HOME/.. перечисляет файлы в моем родительском
каталоге.
cd ../../.. в предположении, что текущим каталогом
является /usr/russ/src/c, делает моим
текущим каталогом /usr.
ls . перечисляет файлы в текущем каталоге.
ls .. перечисляет файлы в моем родительском
каталоге.
$HOME/../../bin/ls запускает ls в каталоге
/usr/russ/../../bin, т.е. в /bin/ls.
../fred/bin/ls запускает команду ls в каталоге
двоичных модулей Фреда, который имеет
тот же родительский каталог, что и я,
т.е. /usr/fred/bin/ls.
ОБЩАЯ СИСТЕМНАЯ СРЕДА
Системная среда не просто НАХОДИТСЯ в системе UNIX, а ЯВЛЯЕТСЯ
системой UNIX. Как мы увидим в этой книге, вся система - UNIX, Си, ко-
манды, файлы и т.д. - это просто логический подход к функционированию
компьютера. Программное обеспечение - это то, что определяет система
для конечного пользователя. Мы можем представлять все машины, работаю-
щие в системе UNIX, как одинаковые и трактовать каждый UNIX как один и
тот же. Мы предполагаем, что реакция машины будет каждый раз одинако-
вой.
Мы можем смотреть на UNIX таким же образом, как на физические за-
коны. Мы ограничены ими, но мы также вольны применять эти законы в си-
туациях и областях, с которыми мы до этого никогда не встречались. Мы
можем доверять этим законам и допускать, что они применимы везде, куда
бы мы ни направились. Такова система UNIX, по крайней мере в идеале.
Система имеет много сред. Важно понимать, что они собой представ-
ляют, как взаимодействуют и для чего могут быть использованы. Так же,
как
программы = структуры данных + алгоритмы
так и
UNIX = файловое дерево + утилиты
Среда UNIX - это сочетание двух важнейших вещей: файлового дерева
и интерфейса системных вызовов. Это дерево допускает бесконечное
расширение возможностей, позволяя монтировать внешние дисковые области
в любой точке файловой системы. Дерево помогает также в сборе логи-
чески связанных файлов, что делает систему более организованной.
Интерфейс системных вызовов обеспечивает набор инструментов, из
которых можно построить большинство других функций. Определение интер-
фейса System V имеется в виде типографской книги и может быть найдено
в книжных магазинах. Строгое следование этому стандарту гарантирует
совместимость с постоянно развивающейся AT&T System V.
ОБЩЕЕ ФАЙЛОВОЕ ДЕРЕВО
Для того чтобы лучше понять мир UNIX, посмотрите пример распечат-
ки структуры UNIX на рис.1-3 . Это наглядное представление полного де-
рева корневой файловой системы. Любые другие расширения файловой
системы монтируются на эту файловую систему.
Точкой временного монтирования является /mnt. Более постоянные точки
монтирования должны быть созданы администратором, например /0, /1 и
т.д. или /usr1, /usr2 и т.д.
ПЕРВЫЙ СЛОЙ
Самым левым каталогом является /bin, который содержит все главные
двоичные утилиты. Это наибольший из двух основных каталогов двоичных
модулей.
Следующий каталог - /dev, в котором размещены все файлы уст-
ройств. Файлы устройств являются точками доступа к периферии, подсое-
диненной к системе. Этот файл привязан к периферии с помощью ядра и
драйвера устройства.
Административные утилиты и конфигурационные файлы хранятся в
/etc. Примерами являются getty и gettydef, init и inittab, а также
файл паролей (/etc/passwd).
Следующий каталог - /lib, где размещены библиотеки компилятора.
Здесь могут храниться и другие типы библиотек.
Каталог /lost+found используется утилитой fsck (главное средство
поддержания файловой системы) для хранения логически удаленных файлов.
Если на самом деле вы хотите сохранить эти файлы, они могут быть изв-
лечены из этой удерживающей области после завершения уборки файловой
системы.
Следующий каталог - /mnt. Это временная точка монтирования для
файловых систем. Мы часто монтируем и демонтируем файловые системы
просто для того, чтобы запустить быструю проверку чего-либо. Здесь под-
ходящее место для этого.
Главным временным рабочим каталогом системы является /tmp. Многие
утилиты, такие как vi, fsck, интерпретаторы shell и программы резерв-
ного копирования, используют /tmp для хранения рабочих файлов.
Следующий каталог - /usr, который применяется как точка монтиро-
вания. Файловая система, смонтированная здесь, содержит дополнительную
системную информацию и каталоги пользователей. Это разделение между
загружаемой файловой системой и пользовательской файловой системой бы-
ло сделано, чтобы сбалансировать загрузку диска. Если бы все важные
файлы были в одном разделе, он был бы слишком большим. Производитель-
ность может быть ухудшена, если все действия направлены в одну логи-
ческую область диска. Благодаря разбивке всей системы на две, каждая
файловая система поддерживает разумное количество свободного прост-
ранства. Чуть ниже мы рассмотрим каталог /usr более подробно.
Последний файл - это само ядро, /unix. Весь /unix фактически су-
ществует и представляет собой большой a.out (скомпилированный объект-
ный файл). Ядро изготавливается путем запуска ld на группе библиотек,
которые загружаются по очереди в огромный исполняемый модуль, называе-
мый /unix. Машина запускается с первых 512 байтов корневой файловой
системы. Программа начальной загрузки, которая находится здесь, загру-
жает программу загрузки большего размера, иногда называемую /boot.
/boot загружает и запускает /unix.
ВТОРОЙ СЛОЙ
Второй слой каталогов размещается под /usr. Как упоминалось ра-
нее, /usr используется как точка монтирования для другой файловой
системы. Это значит, что все файлы, которые имеются в /usr, находятся
в другом разделе загружаемого диска или вообще на другом диске.
Первым каталогом является adm, для администрирования. Он
содержит учетные файлы и регистрационный файл для su (супер-
пользователя), а также другие административные файлы.
В каталоге bin имеются исполняемые модули, которые используются
менее часто, чем модули в двоичном каталоге корневого уровня (/bin).
Почти все исполняемые модули распределены между этими двумя каталога-
ми. Другие исполняемые модули рассеяны по всей системе, например
/usr/lib/uucp/uucico и /usr/lib/ ex3.7preserve.
Далее games. UNIX приходит с ассортиментом интересных игр. Боль-
шинство из них текстовые, но предоставляется несколько программ графи-
ческого типа, например worm, worms и rain.
Каталог include содержит все файлы-заголовки. Файлы-заголовки
используются в программах на языке Си для определения структур и
системных присваиваний, полезных для программирования. Здесь имеется
подкаталог sys, который содержит все файлы= заголовки, относящиеся к
системе. Читая эти файлы-заголовки, можно многое узнать о системе
UNIX.
Следующий каталог - lib, который содержит библиотечные файлы для
всех видов "имущества": файлы печатающих устройств, файлы поддержки
утилиты vi, другие языки и uucp. Каталог /usr/ lib представляется
складом всяких библиотек, которые имеются в системе, отличных от биб-
лиотек компилятора.
Каталог lost+found находится здесь для той же цели, что и однои-
менный каталог корневого уровня. Каждая файловая система должна иметь
такой файл. Без него fsck не имеет временного места для размещения по-
луудаленных файлов и поэтому удаляет их навсегда.
В каталоге mail находится ваш системный почтовый ящик. Когда вы
запускаете команду mail, здесь накапливается очередь сообщений. В ка-
талоге usr/mail каждый файл носит имя пользователя. В этом файле хра-
нится почта пользователя, пока он не прочитает ее.
Каталог man предназначен для активных страниц руководств по
системе UNIX. Наличие постоянного доступа к страницам руководств явля-
ется хорошим средством. Однако, эти страницы занимают много места, и
доступ к ним может потребовать довольно много времени при сильно заг-
руженной системе.
В каталоге news хранятся все файлы новостей. Эти файлы именованы
в соответствии с порядком, в котором они были введены в каталог. Ко-
манда news(1) смотрит на дату файла $HOME/ .news_time, чтобы сообщить,
какие новости вы еще не читали.
Каталог preserve предназначен для файлов, связанных с утилитой
vi. Они помещаются сюда, когда вы работаете с vi или с редактором ex и
пропадает питание машины либо ваш сеанс работы прерывается в виде "за-
висания". Когда в системе восстанавливается питание, /tmp содержит
файлы редактора ex. Из каталога /etc/rc запускается утилита
/usr/lib/ex3.7preserve, которая просматривает /tmp, преобразует его в
сохраненный файл и помещает его в /usr/preserve. Когда вы входите в
систему, вы получаете почту о том, что у вас имеется сохраненный файл
редактора, который вы можете восстановить и поместить его на исходное
место.
Каталог pub не содержит ничего особенного, обычно в нем просто
некоторые информационные файлы вроде таблицы ASCII или греческих сим-
волов.
Каталог spool - это главная точка входа для всех буферизованных
файлов в системе. В этом каталоге имеется много подкаталогов, содержа-
щих специфические типы буферизованных файлов. Некоторыми типичными
подкаталогами являются lp, uucp и uucppublic.
В каталоге src хранится исходный код системы UNIX, если он име-
ется в системе. От этого каталога ответвляется много уровней: команды,