ТЕОРИЯ ОТНОСИТЕЛЬНОСТИ ВНУТРИ СИСТЕМЫ 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,
если он имеется в системе. От этого каталога ответвляется много
уровней: команды, библиотеки, код ядра, код машинного языка и
автономные утилиты. Часто в /usr/src хранится также исходный код
для локальной машины.
Каталог sys традиционно хранит файлы, необходимые
для генерации нового ядра. Это файлы-заголовки, конфигурационный
файл, библиотеки и командный файл для создания нового ядра из
всех этих файлов.
Последний каталог - tmp. Это вторичная временная
область хранения, которая используется не так часто, как /tmp.
Ее, однако, использует утилита sort.
ЖИЗНЬ СИСТЕМЫ UNIX: НЕКОТОРЫЕ МЕТАФОРЫ
UNIX - это особый мир, живущий своей жизнью.
Его социальная структура имитирует реальную жизнь, с правительством,
содержащим правителя (корень root), штатом поддержки (bin, cron,
lp, sys) и массами (/usr/*). Массы не имеют доступа к мощи правителя,
если не используют предварительно установленных средств (/bin/su)
или не занимаются криминальными действиями и нарушением мер безопасности.
Как и в любом обществе, большая многопользовательская система
UNIX устанавливает права и обязанности своих пользователей.
При входе в систему пользователь получает свое
"место под солнцем" (регистрационный каталог - $HOME
). Это место зависит от того, что было раньше (от родительского
каталога ..), а будущие места зависят от того, что происходит
позже (каталоги, подчиненные $HOME). Работа распределяется по
организациям и иерархиям в зависимости от их функций в обществе
(все пользователи в /usr, все транзитные файлы в /usr/spool,
все функции безопасности в /etc). Посмотрите вокруг себя в вашей
системе, чтобы ознакомиться с вашим миром. Вы можете после
этого выбрать, участвовать ли в некоторой части этого мира или
игнорировать ее.
Движение людей в системе UNIX происходит параллельно.
Некоторые области (/tmp) доступны всем, а некоторые области сильно
охраняются от большинства людей (/etc/passwd). Транспортная
служба может перевезти наши вещи (передача файлов по сетям uucp).
Мы даже можем воспользоваться общественным транспортом, чтобы
добраться в разные части города (вход в другие системы (rlogin),
эта особенность имеется только в BSD).
В мире UNIX нам доступны различные пути. Эти пути
помогают нам сформировать свою судьбу (дисковые разделы,
монтированные в любое место файлового дерева). Когда дисковый
пакет монтируется, он становится доступным нам. Когда он демонтируется,
мы теряем доступ к нему. Когда запускаются процессы, они проходят
через различные этапы своей жизни. Они рождаются (ответвляются),
растут (становятся планируемыми и помещаются в таблицу процессов)
и, наконец, становятся производительными рабочими в обществе
(переходят в состояние запуска и выполняются).
Все процессы имеют фамильное дерево. Порожденный
процесс всегда имеет родителя, а родительские процессы могут порождать
много "детей". В зависимости от приложения, они могут
быть "дедами" и "внуками". Процессы "умирают"
так же легко, как создаются. Одной из необычных вещей в мире
UNIX является то, что "дети" почти всегда "умирают"
раньше своих "родителей".
Правительство (ядро) проводит в жизнь параметры
среды, которые выглядели бы в довольно тоталитарном духе, если
бы это было в реальном мире. Только определенное число рабочих
допускается к рабочему месту одновременно (это максимальное количество
ячеек в таблице процессов). Рабочие ограничены в числе "детей",
которых они могут иметь (максимальное количество процессов на
пользователя). Поскольку рабочие накапливают материальные ценности,
они ограничены в количестве товаров, которые они могут поместить
в комнаты своих домов (максимальный размер файла, или ulimit).
Хотя не установлен лимит на число различных файлов (комнат) максимального
размера, которые могут существовать, вся система имеет предел
(df показывает свободное пространство), и одна ненасытная персона
может нанести удар по окружающим. Здесь возникает своего рода
экология.
Так же, как компьютерный век проходит под присмотром
электронной автоматики, так и UNIX ведет таблицы о деятельности
всех пользователей. Механизмы учета организованы правительством
(внутри ядра) и всегда записывают действия каждого пользователя.
Тем не менее, это свободное общество в той мере, что вы можете
получить распечатку о вашем кредитном состоянии (используя
acctcom для печати учетных записей). Хотя система UNIX имеет негативные
аспекты (как и человеческое общество), в ней есть также
некоторые очень позитивные особенности. Гибкость системы и богатство
инструментов дает нам очень продуктивную и детально разработанную
рабочую среду. Наша производительность в этом смысле ограничена
в основном нашим собственным воображением. Когда работа становится
слишком утомительной и скучной, мы всегда можем создать средства,
делающие за нас эту работу. Это обстановка свободной инициативы,
в которой хорошие идеи могут дать значительное увеличение производительности.
Назад | Содержание | Вперед