В функции системного администратора системы UNIX входит
повседневное управление системой во всех аспектах ее сущест-
вования, таких как подключение новых пользователей, управле-
ние файловой системой, изменение конфигурации и других. Сле-
дует заметить, что на персональных ЭВМ эти функции могут ис-
полняться прикладным программистом.
Имеется ряд команд, расположенных обычно в каталоге /etc,
рассчитанных на управление системой, таких как fsck, mount,
chown и так далее. Как правило, каталог /etc доступен только
суперпользователю, так что системный администратор должен
обладать правами суперпользователя.
Это пользователи, выполняющие действия над системой, не-
доступные обычным пользователям. Один из них, имеющий неог-
раниченные полномочия, называется суперпользователем и имеет
обычно имя root. Разные системы могут иметь и других спец-
пользователей, например, пользователя с именем bin, обладаю-
щих меньшими полномочиями, чем суперпользователь.
Имеются команды, которые может выполнить только супер-
пользователь, в частности, установка даты командой date,
монтаж файловой системы командой mount, создание специальных
файлов командой mknod и другие.
- 115 -
Стать суперпользователем можно несколькими способами.
Первый - загрузить систему в режиме единственного пользова-
теля. Другой, применяемый на многопользовательской системе -
выполнить команду su (superuser). Администратору системы ре-
комендуется входить в систему как обычному пользователю, и
только в случае необходимости становиться временно супер-
пользователем по команде su.
Загрузка требуется, когда на ЭВМ только что включили пи-
тание. Обычно процесс загрузки в большей или меньшей степени
автоматизирован и заключается в последовательном вызове
программ, каждая из которых загружает и запускает следующую.
Первая программа, самая простая, загружена всегда и запуска-
ется при включении питания ЭВМ автоматически или вручную.
В процессе загрузки может потребоваться ответить на воп-
росы системы, например, касающиеся устройства, на котором
находится загружаемая система. В завершение процесса загруз-
ки система выполняет командный файл /etc/rc, который, вообще
говоря, может содержать любые команды, но обычно содержит
команды для выполнения следующих действий:
- демонтаж старых файловых систем;
- монтаж новых файловых систем;
удаление старых журнальных учетных файлов;
- 116 -
- удаление временных файлов;
- запуск процессов update и cron.
Выключение многопользовательской системы производится вы-
полнением командного файла /etc/shutdown, который в типичном
случае выполняет следующие действия:
- посылает предупреждающие сообщения всем активным поль-
зователям командой wall;
- убивает все процессы, кроме процесса консоли;
- очищает все буферы обменов с файлами командой sync;
- демонтирует файловые системы;
- выполняет, если надо, процедуры копирования данных;
- выключает питание ЭВМ, если позволяет аппаратура; в
противном случае, питание выключается вручную.
Имеется два файла с именами passwd и group в каталоге
/etc, которые содержат информацию о пользователях и группах
пользователей соответственно.
Одна запись в файле passwd соответствует одному пользова-
телю и имеет следующие текстовые поля, разделенные символом
двоеточия:
- имя пользователя;
- пароль пользователя (в закодированном виде);
- целочисленный идентификатор пользователя;
- целочисленный идентификатор группы;
- 117 -
- комментарий, который содержит сведения о месте работы
пользователя и может использоваться командой finger и учет-
ными программами;
- каталог пользователя;
- интерпретатор команд пользователя.
Пример записи файла passwd (с пустым комментарием):
mary:KmHu1hE:201:10::/users/mary:/bin/csh
При наличии комментария его синтаксис определяется учет-
ными программами.
Для некоторых системых программ требуется, чтобы иденти-
фикатор суперпользователя был равен нулю, а имя - root.
Одна запись в файле group соответствует одной группе и
представляет собой строку текста со следующими полями, раз-
деленными двоеточиями:
- имя группы;
- пароль группы (в закодированном виде);
- целочисленный идентификатор группы;
- список имен пользователей группы, разделенных запятыми.
Пример записи файла group (для группы без пароля):
sect2115::10:mary,sas,temp,ges
Добавление нового пользователя в системе требует выполне-
ния следующих трех действий, которые обычно реализуются ко-
мандным файлом с именем newuser или adduser:
- добавить запись в файл passwd с информацией о пользова-
теле;
- создать каталог пользователя, причем пользователь дол-
жен быть владельцем этого каталога;
- 118 -
- добавить или скорректировать запись в файле group в со-
ответствии с членством пользователя в некоторой группе.
Добавление и коррекция записей в файлах passwd и group
может выполняться текстовым редактором (если нет командного
файла newuser).
Каталог пользователя создается суперпользователем (воз-
можно, посредством скрипта newuser) и вначале принадлежит
ему. Чтобы изменить пользовательскую и групповую принадлеж-
ность каталога (и любого файла), используются команды chown
(change own) и chgrp (change group) соответственно. Их может
выполнить только суперпользователь.
Часто новый пользователь забывает свой пароль. Суперполь-
зователь может в этом случае изменить пароль пользователя
командой passwd, затерев забытый и сообщив пользователю но-
вый:
# passwd mary
New passwd : mmm
Retype new passwd : mmm
#
Вводимый пароль (здесь mmm) не виден.
Кроме девяти режимов защиты файла имеется три дополни-
тельных режима, которые имеют смысл только для исполняемых
файлов. Эти режимы может установить только суперпользова-
тель, используя команду chmod (change mode).
- 119 -
Специальные режимы соответствуют восьмеричным значениям
4000, 2000 и 1000 первого параметра этой команды:
- 4000 - бит установки идентификатора пользователя; ука-
зывает, что, когда программа (файл) выполняется, идентифика-
тор пользователя устанавливается равным идентификатору вла-
дельца этого файла, а не пользователя, запустившего этот
файл на исполнение;
- 2000 - бит установки идентификатора группы; указывает,
что на время выполнения программы (файла) идентификатор
группы устанавливается равным идентификатору группы, соот-
ветствующему групповой принадлежности этого файла;
- 1000 - бит разделения; указывает, что выполняемая прог-
рамма (файл) разделяется многими пользователями и свопинго-
вое пространство не сбрасывается, даже если никто программу
не использует в данный момент.
Установка обоих битов идентификаторов пользователя и
группы позволяет пользователю выполнять такие программы, ко-
торые должны иметь полномочия суперпользователя (например,
программа mail создает каталог /usr/spool/mail). В противном
случае возможности системы, доступные пользователю, были бы
значительно ограничены.
Файловая система имеет иерархическую структуру каталогов
и файлов, включая корневой каталог. Файловая система распо-
лагается на устройстве, которое является, обычно, магнитным
диском того или иного типа. Если диск достаточно велик, он
- 120 -
может быть разбит на несколько "логических" дисков; тогда на
каждом логическом диске может быть размещена отдельная фай-
ловая система. Каждая файловая система, прежде чем стать
доступной, должна быть смонтирована.
Количество файлов в файловой системе ограничено (65536
для UNIX, версия 7).
Каждая файловая система имеет четыре основные части:
- загрузочный блок; это самый первый блок диска (блок 0),
зарезервированный для системной загрузочной программы;
- супер-блок - это первый блок собственно файловой систе-
мы (блок 1); он содержит основные данные о файловой системе
и ее размещении на диске, в том числе о списках свободных
i-узлов и блоков;
- i-узлы - это последовательность блоков вслед за суперб-
локом; i-узел содержит ссылки на блоки; имеется ровно один
i-узел для каждого каталога или файла в файловой системе;
- блоки - оставшееся пространство диска занимают блоки,
которые содержат либо действительные данные каталогов и фай-
лов (блоки данных), либо ссылки на блоки (косвенные блоки).
Суперблок содержит следующие данные:
- размер дискового пространства, доступного файловой сис-
теме (в блоках);
- число блоков, зарегистрированных для i-узлов;
- имя файловой системы;
- имя тома;
- время последнего изменения;
- 121 -
- время последнего копирования (back up);
- ссылка на список свободных блоков;
- ссылка на список свободных i-узлов.
Структура файловой системы представлена на рис.13.1.
------------- ------------- ------------- ? ------------- ? ----------- ----------- ------------- ? ? ------------- ? ? ? Загру- ? ? ? ? ? ? ? ? ? ? ? ? зочный ? ?Суперблок? ? i-узлы ? ?-- ? Блоки ? ?-- ? блок ? ? ? ? ?-- ? --- ----------- ----------- ------------- ------------- ? ? ? ? ------------- ------------- ? ? ------------- ? ------------- ? ? ? ------------- ? ? ------------- ? ? ? ? ? Список ? ? ? ? Список ? ? ? ? --->? свободных ? ?-- ? свободных ? ?-- ? ? i-узлов ?-- -->? блоков ?-- ? ------------- ? ------------- -------------------------- Рис.13.1.
Каждый файл (и каталог) в файловой системе представлен
i-узлом, содержащим указатели на блоки, составляющие файл.
- 122 -
В i-узле содержится также информация о правах доступа к
файлу, число ссылок на файл из каталогов и другие данные.
Структура i-узла и блоков файла для UNIX, версия 7 показана
на следующем рисунке. Каждый i-узел содержит 13 указателей.
Первые 10 указателей непосредственно ссылаются на блоки дан-
ных файла. Поскольку блок содержит 512 байтов, то этого дос-
таточно для обработки файлов до 512х10=5120 байтов.
Если длина файла больше, чем 5120 байта, используется
11-й указатель i-узла, который ссылается на косвенный блок
из 128 ссылок на блоки данных. Использование косвенного бло-
ка позволяет увеличить длину файла до величины
512х(10+128)=70656 байтов. Если и этого недостаточно, то ис-
пользуется 12-й указатель i-узла, ссылающийся на дважды кос-
венный блок, содержащий 128 ссылок на косвенные блоки
(рис.13.2). Тогда максимальный размер файла увеличивается до
величины 512х(10+128+128**2)=8459264 байтов. Наконец, ис-
пользование последнего, 13-го указателя на трижды косвенный
блок из 128 ссылок на дважды косвенные блоки, дает предель-
ную длину в файловой системе:
512х(10+128+128**2+128***3)=1082201088 байтов
(см. рис. 13.2).
Другие версии системы UNIX могут отличаться количеством
ссылок в i-узле, косвенных блоках и размером блока данных.
Когда система загружается, имеется только одна из файло-
вых систем, называемая корневой. В ней находятся все важней-
- 123 -
------- ------- i-узел ------------>?-----? --->?-----? ------------- ? ?-----? ?-? ?-----? ? Информация? ? ---------->?-----? -------- ? --->?-----? ? о файле ? ? ? ?-----? -->? 128 ?--+ ? : ? ?-----------? ? ? -------->?-----? ? ? ? ? ?Блоки? ------- ? 1 +-- ? ? ? : ? ? -------- ? --->?-----? --->?-----? ?-----------? ? ? ?Блоки? ? Косвенный ?-? ?-----? ? ?-----? ? 2 +---- ? ?-----? ? блок --->?-----? +-->?-----? ?-----------? ? ------>?-----? ? ------- ? ? : ? ? 3 +------ ? ?-----? ? ? ?-----? ?-----------? ? ---->?-----? ? ------- +-->?-----? ? : ? ? ? ?-----? ? ? 128 ?--? ?-----? ? : ? ? ? -->?-----? ? --->------- --->?-----? ?-----------? ? ? ? ------- ? ?--? ------- --->?-----? ? 8 +-------- ? ? ---------- ? --->? 128 ?--? ?-----? ?-----------? ? ? ? ? ------- +-->?-----? ? 9 +---------- ? ? ? . ? ?-----? ?-----------? ? ? ? . ? ? : ? ? 10 +------------ ? ? . +-->?-----? ?-----------? ? ? . ? ?-----? ? 11 +--------------- -------- ? . --->?-----? ?-----------? ? 128 ?--+ . ?-----? ? 12 +------------------------->? ? ? . --->?-----? ?-----------? -------- ? . ? ?-----? ? 13 +---- Дважды ? . +-->?-----? ------------- ? косвенный ? . ? ?-----? ? блок ? . ? ? : ? ? ------- ? ------- +-->?-----? ? --->?-----? ? ? 128 ?--? ?-----? ? ? ?-----? ? --->------- --->?-----? ? +-->?-----? ---? ?-----? -------------- ------- ? ? : ? --->------? --->?-----? ? ? 128 ?--+ ?-----? ? 128 ?--? ?-----? ? ------>------- +-->?-----? ------- +-->?-----? ? ? . ? ?-----? ? ?-----? ? ------- ? . --->?-----? ? ? : ? ? -->? 128 ?-? . --->?-----? +-->?-----? ? ? ------- ? . ? ?-----? ? ?-----? ? ? . ? ------- +-->?-----? --->?-----? ? ? ------>? 128 ?--+ ?-----? ------- ? ? . ------- ? ? : ? Блоки ? ? +-->?-----? ? ? . ? ?-----? ---+--- ? --->?-----? ? 128 ?--+ . ?-----? ------- ? ?-----? Трижды ? . --->?-----? косвенный? ? ?-----? блок ? . +-->?-----? ? ------- ? ? : ? ? . ? 128 ?--+ ?Блоки? ? ------>------- ? ?-----? ? ------- ? . --->?-----? -->? 128 ?-? . --->?-----? ------- ? . ? ?-----? ? ------- +-->?-----? ------>? 128 ?--+ ?-----? ------- ? ? : ? --->?-----? Рис. 13.2. -------
- 124 -
шие каталоги (/dev,/etc, /bin и т.п.). Все остальные файло-
вые системы должны быть созданы и смонтированы.
Команда mkfs создает новую файловую систему. Она располо-
жена в каталоге /etc и имеет два параметра:
/etc/mkfs <имя> <размер>
Первый параметр является именем специального файла и ука-
зывает устройство, на котором создается файловая система.
Второй параметр - размер пространства файловой системы в
блоках; используется для определения по некоторым правилам
числа блоков после того, как размещены i-узлы.
Пример создания файловой системы на флоппи-диске:
/etc/mkfs /dev/flo 2000
isize = 230
Ответное сообщение указывает число блоков, выделенное для
размещения i-узлов.
Далее, чтобы сделать файловую систему известной операци-
онной системе, надо ее смонтировать командой mount. Эта ко-
манда подключает корневой каталог монтируемой файловой сис-
темы в один из каталогов корневой файловой системы. Команда
расположена в каталоге /etc и имеет два параметра:
/etc/mount <устройство> <каталог>
Первый параметр является именем спецфайла для монтируемо-
го логического устройства, содержащего подключаемую файловую
- 125 -
систему. Второй - имя уже существующего каталога, под кото-
рым монтируется файловая система.
Пример монтажа вновь созданной файловой системы на гибком
диске под каталогом, созданным командой mkdir в корне корне-
вой файловой системы:
cd /
mkdir floppy0
/etc/mount /dev/fl0 /fioppy0
Чтобы выяснить, какие файловые системы смонтированы в
данный момент, надо подать команду mount без параметров:
mount
/dev/fl0 on /floppy0
Ответом является сообщение об этих системах (в данному
случае - одной). Оно формируется на основе данных о монтаже
файловых систем, хранимых в файле /etc/mnttab.
Следует заботиться о том, чтобы права доступа корневого
каталога монтируемой файловой системы и каталога, под кото-
рым производится монтаж, были одинаковыми во избежание оши-
бок операционной системы.
Если файловая система на съемном устройстве больше не ис-
пользуется, ее можно демонтировать командой umount, располо-
женной в каталоге /etc и имеющей один параметр:
umount <устройство>
- 126 -
Например, демонтиж файловой системы на гибком диске из
предыдущего примера выполняется командой:
umount /dev/fl0
Результатом демонтажа является разрыв связи между корне-
вым каталогом демонтируемой файловой системы и каталогом
корневой файловой системы, в котором производился монтаж.
При выполнении команды демонтажа текущий каталог должен быть
вне демонтируемой файловой системы, иначе будет выдано сооб-
щение:
umount : device busy (устройство занято)
и команда не будет выполнена.
При обменах с файлами система поддерживает в оперативной
памяти множество буферов, свободных блоков, i-узлов, а также
супер-блок. Для корректного завершения операций с системой
необходимо перед ее выключением переписать все данные из
этих буферов и блоков в дисковую память. Выполнение этих
действий называется синхронизацией файловой системы и реали-
зуется командой sync:
/etc/sync
Команда не выдает никаких сообщений, а подсказка системы
говорит лишь о запуске синхронизации. Поэтому обычно команду
выполняют повторно после некоторого ожидания.
- 127 -
Каждому устройству соответствует часть системы, называе-
мая драйвером. Связь между устройствами и драйверами отраже-
на в каталоге /dev, вхождения которого принято называть спе-
циальными файлами, или спецфайлами. Это позволяет называть
каждое устройство именем некоторого спецфайла.
Добавление устройства в систему требует и добавления
спецфайла в каталоге /dev. Последнее реализуется командой
mknod (make node - сделать узел). Пример:
ls -l /dev
___________
crw--w--w-1 root 0 0 .....console
brw-rw-rw-1 root 5 0 .....fl0
___________
crw-w--w-1 root 18 0 .....tty0
crw-w--w-1 mary 18 1 .....tty1
/etc/mknod /dev/tty2 c 18 2
Первый аргумент команды mknod задает имя спецфайла для
подключаемого устройства. Второй аргумент указывает, являет-
ся ли устройство знакоориентированным (c) или блочным (b), в
зависимости от единицы передаваемых данных. Оставшиеся два
аргумента называют мажорным и минорным номерами устройства.
Их значения зависят от аппаратной реализации, но, как прави-
ло, первый аргумент указывает тип устройства, а второй - ад-
рес экземпляра устройства данного типа.
- 128 -
Независимо от объема данных, в системе важно иметь регу-
лярную процедуру сохранения (копирования) файлов, чтобы
обеспечить восстановление в случае их аварийной потери.
Возможны различные способы сохранения. Наиболее распрост-
раненным является еженедельное полное копирование и ежеднев-
ное инкременантное копирование (только изменившихся со вре-
мени последнего копирования) файлов. При этом файлы копиру-
ются (сбрасываются) на специальное внешнее устройство памя-
ти, обычно магнитную ленту, однако это может быть и съемный
дисковый том, а для малых систем - гибкий диск. На этом уст-
ройстве файлы хранятся в специальном архивном формате.
Восстановление утраченных файлов производится путем их
поименного копирования из архивной ленты или тома в файловую
систему. Обычно таких файлов немного (например, один или
два).
В различных реализациях системы могут быть разные команды
сброса файлов в архив и восстановления их из архива. Это мо-
жет быть пара команд dump и restor для передачи файлов в ар-
хив и обратно соответственно. Или это может быть одна коман-
да cpio (или tcio для кассетной ленты) с опциями -0 или -i
для сброса в архив и извлечения из архива соответственно.
Наиболее мощным средством сброса в архив в некоторых реа-
лизациях служит команда backup, являющаяся командным файлом,
использующим команды типа cpio/tcio и fsck.
- 129 -
Команда backup позволяет параметрировать процедуру сброса
в архив простым редактированием ее текста, задавая следующие
параметры:
- имя каталога сбрасываемой иерархии файлов;
- имя учетного файла процедуры сброса;
- имя даты последнего сброса;
- имя файла с напоминанием смены архивной ленты (если ар-
хив не умещается на одной ленте);
- спецификация архивного устройства;
- имя учетного файла процедуры проверки файловой системы.
Наконец, для сброса на ленту или гибкий диск и обратного
восстановления применяется команда tar (tape archive). В от-
личие от некоторых перечисленных выше команд, она доступна
не только администратору системы, но и любому пользователю.
Например, чтобы сбросить все файлы текущего каталога на
гибкий диск, создавая архив впервые (опция c - create), надо
выполнить команду:
tar cf /dev/fl0 *
Опция f (file) указывает, что следующий параметр является
именем спецфайла, соответствующего архивному устройству; * -
метасимвол, показывающий, что копируются в архив все файлы.
Для просмотра содержимого архива надо употребить опцию t
(listing):
tar tf /dev/fl0
Чтобы извлечь из архива указанные файлы, надо выполнить
эту же команду с опцией x (extract). Например, для восста-
новления всех файлов, имена которых оканчиваются на people,
надо выполнить команду:
- 130 -
tar xf /dev/fl0 *people
Файлы с этими именами уже должны существовать в текущем
каталоге. В случае, если в текущем каталоге указанных файлов
нет, можно восстановить все файлы из архива в указанном ка-
талоге, например:
tar xf /dev/fl0 mary,
где mary - каталог.
Структура файловой системы, описанная выше в терминах
i-узлов, блоков, косвенных блоков и суперблока, может быть
нарушена и требовать восстановления. Например, при разруше-
нии информации в трижды косвенном блоке могут появиться сле-
дующие проблемы:
- некоторый блок может быть вне системы, т.е. не являться
частью файла и не быть в списке свободных блоков;
- могут появиться дубли i-узлов, т.е. описывать один и
тот же файл дважды;
- некоторый блок может одновременно быть частью файла и
быть в списке свободных блоков;
- некоторый файл может существовать, не будучи включенным
ни в один каталог.
К счастью, структура файловой системы обладает некоторой
избыточностью, позволяющей восстанавливать отдельные полом-
ки. Вот некоторые виды избыточности:
- 131 -
- блок данных, являющийся каталогом, содержит имена фай-
лов и номера i-узлов; где-то есть i-узел, соответствующий
этому каталогу, и этот i-узел должен быть каталогом, а не
обычным файлом;
- блок, включенный в список свободных блоков, теоретичес-
ки не может быть частью какого-либо файла; для проверки это-
го достаточно сканировать все i-узлы для просмотра всех бло-
ков, занятых файлами, и сканировать список свободных блоков;
- аналогично, блок, принадлежащий файлу, должен принадле-
жать только одному файлу; это легко проверить.
Эти и другие виды избыточности использует программа про-
верки файловой системы, запускаемая командой fsck (file
system check). В различных реализациях существуют разные ко-
манды проверки целостности файловой системы: icheck, dcheck,
ncheck. Однако все они в большей или меньшей степени перек-
рываются командой fsck. Типичное выполнение команды fsck
выглядит следующим образом:
/etc/fsck
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Free List
Из примера видно, что fsck выполняется в несколько фаз.
- 132 -
На этих фазах производится следующая работа:
- проверка целостности i-узлов (счетчик связи, тип и фор-
мат i-узла);
- проверка каталогов, указывающих на i-узлы, содержащие
ошибки;
- проверка каталогов, на которые нет ссылок;
- проверка счетчиков связей в каталога и файлах;
- проверка неверных блоков и дублированных блоков в спис-
ке свободных блоков, неиспользуемых блоков, которые должны
быть включены, но не включены в список свободных блоков, и
счетчика общего числа свободных блоков.
Команда по умолчанию всегда проверяет корневую файловую
систему: все другие файловые системы проверяются, если их
имена занесены в файл /etc/checklist.
Следующий пример показывает действия команды fsck и адми-
нистратора в случае обнаружения дубля i-узла для файла
/user/src/sys/ux; администратор принимает решение удалить
этот плохой файл, отвечая в диалоге согласием y (yes) на
вопросы команды.
/etc/fsck
** Phase 1 - Check blocks and sizes
528627 BAD I = 66
** Phase 2 - Check pathnames
DUP/BAD I = 66 OWNER = root MODE = 100755
- 133 -
SIZE = 78409 MTIME = Jul 16 18:45 1987
FILE = /usr/src/sys/ux
REMOVE ? y
** Phase 3 - Check connectivity
** Phase 4 - Check Reference Count
BAD/DUP I = 66 OWNER = root MODE = 100755
SIZE = 78409 MTIME = Jul 16 18:45 1987
FILE = /usr/src/sys/ux
CLEAR ? y
UNREF FILE I = 36 OWNER = root MODE = 100600
SIZE = 0 MTIME = Jul 17 09:40 1987
RECONNECT ? y
** Phase 5 - Check Frec List
157 BLK(S) MISSING
BAD FREE LIST
SALVAGE ? y
** Phase 6 - Salvage Free List
302 files 5833 blocks 371 free
Обратите внимание на появление шестой фазы, которой не
было при нормальном выполнении команды. На этой фазе уточня-
ется и восстанавливается список свободных блоков.
После выполнения fsck, связанного с "починкой" файловой
системы, может появиться сообщение:
***** BOOT UNIX (NO SYNC!) *****,
требующее перезагрузки системы без выполнения команды sync.
- 134 -
Если этого не сделать, работа по восстановлению списка сво-
бодных блоков будет утрачена, так как копии управляющих таб-
лиц и буфера в оперативной памяти остались старыми. Для их
обновления требуется перезагрузка без выгрузки буферов на
диск командой sync.
Необходимым условием правильной работы fsck является так-
же наличие пустого каталога /lost+found в корневом каталоге.
Если при выполнениит fsck будут найдены каталоги, на которые
никто не ссылается в проверяемой файловой системе, они будут
подключены в каталог /lost+found для дальнейшего изучения их
принадлежности.
Регулярное выполнение команды du (disk usage) позволяет
выявить пользователей, захвативших слишком много дисковой
памяти. Команда печатает число блоков, занятых каждым файлом
и каталогом в дереве, указанном именем каталога - параметром
команды. Например:
du /
Будут выведены объемы всех файлов и каталогов.
Использование команды find помогает выявить долго неис-
пользуемые файлы большого объема. Например:
find / -m time+90 -a time+90 -print
Будут показаны все файлы, к которым не обращались ни по за-
писи, ни по чтению последние 90 дней.
С помощью команды find администратор может также найти
файлы, представляющие опасность для операционной системы или
бесполезно занимающие пространство на диске, даже если место
расположения этих файлов в иерархии каталогов неизвестно.
- 135 -
Например:
find / -name danger -print
Поиск производится начиная с корневого каталога /. Ключ
-name указывает последующее имя файла danger, а ключ -print
предписывает вывод полного имени файла danger на экран.
Команда df (disk free) показывает число свободных блоков
всех или указанной параметром файловой системы.
Следует учитывать также, что учетные файлы (типа
/usr/lib/cronlog) могут расти неограниченно и требуют перио-
дической чистки или сброса.
Все терминалы, которые могут быть подключены к системе,
должны быть описаны в специальном файле, который имеет имя
/etc/ttys (версия 7) или /etc/inittab:
Каждому терминалу соответствует одна строка файла. Форма-
ты этих файлов сходны в том, что первый символ является циф-
рой, нулевое значение которой соответствует отключенному
(логически) терминалу, а единичное - подключенному термина-
лу. Кроме того, формат обоих файлов предусматривает наличие
имени спецфайла, соответствующего терминалу (второе поле в
/etc/inittab).
Типичная строка в /etc/inittab имеет вид (пример):
1:t3:c:/etc/getty tty13 H 0
Первое поле имеет подполя, разделенные двоеточием.
При загрузке системы последним шагом загрузки является
запуск начального процесса с номером 1, выполняющего команду
/etc/init.
- 136 -
Команда init перед выполнением системного стартового ко-
мандного файла /etc/rc просматривает файл etc/inittab. Для
каждой строки этого файла, начинающейся с ненулевого симво-
ла, совпадающего с состоянием начального процесса (при за-
пуске равного единице), команда init порождает второй про-
цесс в цепочке (init-getti-login-shell). Порожденный процесс
выполняет команду, указанную в четвертом подполе первого по-
ля файла /etc/inittab (в данном примере /etc/getty).
Команда getty выдает на терминал, указанный именем спец-
файла во втором поле файла /etc/inittab, содержимое файла
/etc/issue, если он существует, и вслед за этим выводит на
терминал текст подсказки из записи файла /etc/gettydefs, со-
держащем характеристики терминала (обычно login:). Затем
getty читает имя пользователя и вызывает команду login, пе-
редавая ей имя пользователя в качестве параметра.
Команда login вводит пароль пользователя и после успешной
проверки пароля выполняет команду из последнего поля записи
данного пользователя в файле /etc/passwd (обычно /bin/sh или
bin/csh), а также устанавливает в качестве текущего началь-
ный каталог пользователя, указанный в предпоследнем поле за-
писи данного пользователя в файле /etc/passwd.
Команда sh или csh командного интерпретатора выполняет
стартовые файлы с предопределенными именами (.profile для
sh; .cshrc и .login для csh), выводит подсказку и ждет ввода
очередной команды пользователя.
По окончании сеанса (подачей команды logout или ^D), а
также в случае неверного пароля управление возвращается в
- 137 -
команду getty, которая перезапускается повторно, если в
третьем подполе первого поля записи файла /etc/inittab для
данного терминала стоит символ с (continually); если же в
этом поле стоит пробел, то команда getty завершается.
Одной из команд, выполняемых в составе системного старто-
вого командного файла /etc/rc начальным процессом, может
быть команда /etc/cron, создающая постоянный процесс, про-
буждающийся периодически каждую минуту. Этот процесс прос-
матривает записи файла /usr/lib/crontab в поисках заданий,
которые должны быть выполнены. Типичный файл crontab может
выглядеть следующим образом (пример):
cat /usr/lib/crontab
0 0 * * * /etc/backup -fsck
0,15,30,45 2-23 * * * /usr/lib/atrun
Первые пять полей записи файла crontab означают минуты
(0-59), часы (0-23), день месяца (1-31), месяц года (1-12) и
день недели (0-6, 0 - воскресенье). В каждом из этих полей
может быть значение, перечень значений, разделенных запяты-
ми, или границы интервала значений, разделенные минусом;
звездочка означает любое возможное значение. В данном приме-
ре первая запись соответствует ежедневному выполнению в пол-
ночь сброса и проверки файловой системы в течение всего го-
да; вторая - выполнению программы запуска заданий, заплани-
рованных командой at, каждые 15 минут с 2 часов ночи до 11
часов вечера ежедневно в течение всего года.
- 138 -
Команда at планирует выполнение командного файла интерп-
ретатора shell (shell-скрипта), указанного ее последним ар-
гументом в момент времени, заданный ее первыми аргументами.
Например:
at 2300 jun 16 scriptfile_1
Указанный файл будет выполнен в 11 часов вечера в указан-
ный день текущего года. Точность времени запуска зависит от
периода пробуждения постоянного процесса, выполняющего ко-
манду cron. Все действия процесса, выполняющего cron, фикси-
руются в учетном файле /usr/lib/cronlag, если он существует
и открыт на запись в момент выполнения команды cron.
Команду at может запустить любой пользователь, чтобы ос-
тавить задание на ночное время.
Тексты руководств для пользователей находятся в различных
подкаталогах man? каталога /usr/man, где вопросительный знак
- метасимвол, принимающий значения от 1 до 8 в соответствии
с нумерацией руководств по системе. Отдельные файлы этих
подкаталогов содержат исходные тексты отдельных руководств.
Например, подкаталог man1, содержащий файлы текстов команд,
может иметь следующий вид (фрагмент):
$ ls /usr/man/man1
_ _ _ _ _ _ _ _ _
cpio.1 grep.1 mknod.1 ren.1 test.1
_ _ _ _ _ _ _ _ _
Исходные тексты руководств хранятся в этих файлах в под-
готовленном виде для команды форматирования - nroff
- 139 -
(newrunoff). На выходе команды форматирования появится текст
в формате, пригодном для выдачи на печать или терминал. Во
многих системах текст руководства в выходном формате созда-
ется и запоминается в файлах каталога /usr/man/cat?/*, где ?
и * - метасимволы в обычном смысле, выполнением команды
catman.
Выдача руководства на терминал или печать выполняется ко-
мандой man, которая в соответствии с указанным аргументом
ищет сперва текст руководства в выходном формате и выдает
его на стандартный вывод; в противном случае, она ищет ис-
ходный текст и вызывает команду nroff, результат работы ко-
торой выдается на стандартный вывод.
Добавление новых руководств требует знания форматов для
команды nroff, работающей с пакетом man макроопределений.
Средства управления операционной системой (ОС) аппарат-
но-зависимы, однако приводимое ниже описание этих средств
является довольно типичным случаем.
Операционная система хранится на дисковом томе в некото-
ром заданном формате. Для задания формата используется ко-
манда (System III - /lbin/init) инициализации тома с одним
обязательным параметром - именем спецфайла для устройства,
на котором находится инициализируемый том. Остальные необя-
зательные параметры могут указать размер логического блока -
единицы передачи данных между томом и оперативной памятью и
размер загрузочной области в байтах (при отсутствии их зна-
- 140 -
чения выбираются по умолчанию).
Каждый том имеет одну загрузочную область, содержащую це-
лое, возможно нулевое, число логических блоков. Загрузочная
область полностью находится вне какой-либо файловой системы.
Изменение ее размера возможно только путем переинициализации
тома.
Каждая загрузочная область может содержать только одну ОС
(или часть одной ОС).
ОС состоит из последовательности кодовых сегментов, рас-
положенных в загрузочной области одного или нескольких то-
мов, причем граница между томами может быть внутри некоторо-
го сегмента. ОС хранится в загрузочном формате.
Помимо загрузочной области, ОС может располагаться также
в ряде обычных файлов, каждый из которых содержит целое чис-
ло кодовых сегментов, заканчивающихся двумя нулевыми байта-
ми. Этот формат не является загрузочным, однако он может
быть преобразован в загрузочный командой (System III -
/lbin/oscp).
Содержимое загрузочной области в действительности состоит
из одного или нескольких ОС-файлов. Каждый ОС-файл начинает-
ся с заголовка, содержащего флаг загружаемости, номер тома,
число томов, занятых операционной системой. Системный заг-
рузчик загружает ОС-файл только в том случае, если флаг ус-
тановлен в состояние загружаемости. Установку состояния фла-
гов ОС-файлов можно выполнить специальной командой (System
- 141 -
III - /lbin/osmark) с параметром, указывающим имя спецфайла
для устройства, на которое поставлен том с загрузочной об-
ластью. Ключ в этой команде устанавливает флаг в соcтояние
загружаемости или незагружаемости.
Упомянутая выше команда /lbin/oscp (System III) позволяет
выполнить следующие работы по копированию сегментов ОС:
- копировать ОС из одной (или более) загрузочных областей
тома (томов) в загрузочную область другого тома;
- копировать ОС из обычных файлов в ОС-файлы для создания
(опция -m, merge) или модификации (опция -a, add) ОС в заг-
рузочной области;
- копировать ОС-файлы в обычные файлы для разделения ОС
на части (опция -s, split) или в один обычный файл (опция
-f).
Для проверки целостности ОС в загрузочной области, а так-
же для контроля добавленных сегментов можно выполнить коман-
ду lbin/osck (System III), например:
osck -v /dev/rhd
Опция -v вызывает печать списка имен всех сегментов ОС.
Команда проверяет корректность:
- 142 -
- заголовков ОС-файлов;
- списка сегментов;
- контрольной суммы каждого сегмента.
Первоначальная установка ОС или части ОС выполняется ко-
мандой optinstall, а модификация версии ОС - командой
optupdate. Эти команды следует выполнять в однопользователь-
ском режиме и завершать перегрузкой системы. Данные для ус-
тановки или модификации версии ОС расположены на дистрибу-
тивном томе (обычно кассетная лента или гибкий диск). Пара-
метром обеих команд является имя (номер) устанавливаемого
или модифицируемого программного продукта.
Наконец, имеется возможность загружать несколько разных
ОС (или версий одной ОС), используя одну загрузочную область
на системном диске (/dev/rhd). Это выполняет команда
/lbin/chsys (change system), являющаяся командным файлом.
Внутри командного файла chsys используются команды oscp для
перестройки загрузочной области для новой ОС чтением ее сег-
ментов из обычных файлов, osck для последующей проверки заг-
рузочной области. Так как chsys не проверяет, все ли пользо-
ватели закончили работу, рекомендуется перед ее выполнением
выполнить команду shutdown.
- 143 -
Параметрируемость операционной системы позволяет опти-
мальным образом настроить ее для работы на заданных аппарат-
ных средствах и с учетом особенностей использования системы
для заданного класса задач.
Совокупность значений технических параметров ОС в загру-
зочной области называют конфигурацией ОС. Для управления
конфигурацией имеется команда: /lbin/uconfig (System III).
Ее необязательный параметр указывает спецфайл устройства, на
котором находится загрузочная область (по умолчанию
/dev/rhd).
Будучи поданной без опций, команда uconfig показывает те-
кущее значение параметров. Опция -f <имя файла> позволяет
установить новые значения нескольких или всех параметров из
указанного файла, а опция -d (default) устанавливает всем
параметрам значения по умолчанию, используя файл
/etc/uconfigtab.
Системными параметрами являются (в скобках - значения по
умолчанию):
- устройство виртуальной памяти (системный диск);
- размер буфера КЭШ-памяти (1024 байта);
- число буферов КЭШ-памяти (0; вычисляется динамически);
- длина цепочки буферов чтения (0; вычисляется динамичес-
ки);
- 144 -
- время активности процесса после интерактивного чтения;
- время резидентности сегмента в памяти перед свопингом
на диск (0; вычисляется динамически);
- размер страницы (1024 байта);
- время резидентности страницы в памяти перед свопингом
на диск;
- максимальный размер страничного пула виртуальной памяти
(0; вычисляется динамически);
- число страниц буфера дисплея, где страница равна 24
строкам дисплея;
- максимальный размер стэковой памяти (0; вычисляется ди-
намически);
- минимальная доля страниц в рабочем множестве страниц;
- максимальное число процессов одного пользователя (500).
При выполнении команды uconfig для изменения системных
параметров надо быть уверенным, что ОС в загрузочной области
совпадает с текущей ОС. В противном случае, результаты вы-
полнения команды будут непредсказуемы.
Прочитав эту главу, Вы можете попробовать стать админист-
ратором системы UNIX. Основные необходимые средства для под-
держания целостности системы Вам теперь известны. Не забы-
вайте регулярно делать копии системы и чистить лишние файлы.
Основной проблемой будут Ваши взаимоотношения с другими
пользователями. Опытный администратор в максимальной степени
уступает требованиям других пользователей, чтобы пользовате-
ли не могли выйти за пределы отведенных им ресурсов. Допол-
нительные сведения Вы можете найти в книге [12].