- •И.Н.Акуленок, а.В.Акуленок
- •Часть I. Основы операционной системы unix Утверждено советом университета
- •Введение
- •Глава 1. История создания ос unix
- •Реализации oc unix
- •Unix на платформе Intel
- •Доля компьютеров с ос unix (1993 год)
- •Продажи unix–серверов (III квартал 2007 года)
- •1.1. Первые шаги по созданию unix
- •1.2. Исследовательские версии unix
- •1.3. Основные стандарты
- •1.3.1. Основные задачи стандартизации
- •1.4. Разработчики операционных систем
- •1.4.1. Версии at&t
- •1.4.2. Версии Microsoft/sco
- •1.4.3. Версии университета Беркли
- •1.4.4. Версии компании Sun
- •1.4.5. Версии компании Nowell
- •1.4.6. Популярные версии unix
- •1.4.7. Свободно распространяемые системы unix
- •1.5. Реализация ядра unix
- •1.5.1. Микроядро Mach
- •1.5.2. Микроядро Chorus
- •1.6 Характеристики oc unix
- •1.6.1.Файловая система
- •1.6.2. Многозадачность
- •1.6.3. Многопользовательский режим
- •1.6.4. Мобильность
- •1.6.5. Виртуальная память
- •1.6.6. Связь между задачами
- •1.6.7. Внешние устройства
- •1.6.8. Связь между компьютерами
- •1.6.9. Графический пользовательский интерфейс
- •1.6.10. Безопасность
- •1.6.11. Поддержка баз данных
- •1.6.12. Наличие стандартов
- •1.6.13. Открытость
- •1.6.14. Разработка программного обеспечения
- •1.7. Контрольные вопросы
- •1.8. Тесты
- •Глава 2. Функционирование ос unix
- •2.1. Ядро
- •2.1.1. Функции ядра
- •2.1.2. Структура ядра
- •2.1.3. Файловая подсистема
- •2.1.4. Подсистема управления процессами
- •2.1.5. Подсистема ввода/вывода
- •2.2. Командный процессор Shell
- •2.3. Программы–утилиты
- •2.4. Контрольные вопросы
- •2.5. Тесты
- •Глава 3. Процессы
- •3.1. Контекст процесса
- •3.3. Типы процессов
- •3.3.1. Системные процессы
- •3.3.2. Демоны
- •3.3.3. Прикладные процессы
- •3.4. Атрибуты процесса
- •3.4.1. Идентификатор процесса
- •3.4.2. Идентификатор родительского процесса
- •3.4.3. Приоритет процесса
- •3.4.4. Терминальная линия
- •3.4.5. Реальный и эффективный идентификаторы пользователя
- •3.4.6. Реальный и эффективный идентификаторы группы
- •3.4.7. Идентификатор терминальной группы
- •3.5. Иерархия процессов
- •3.6. Взаимодействие процессов
- •3.6.1. «Отцы», «дети», «сироты», «зомби»
- •3.7. Системные вызовы
- •3.7.1. Механизм создания процесса и запуска программы
- •3.7.2. Графический пример дерева процессов
- •3.8. Связи между процессами
- •3.8.1. Сигналы
- •Сигналы posix 1.1
- •3.8.2. Очереди сообщений
- •3.8.3. Семафоры
- •3.8.4. Совместная память
- •3.8.5. Программные каналы
- •3.8.6. Программные гнезда
- •3.9. Контрольные вопросы
- •3.10. Тесты
- •Глава 4. Файловая система unix
- •4.1. Имена файлов
- •4.2. Структура файловой системы
- •4.2.1. Загрузочный блок
- •4.2.2. Суперблок
- •4.2.3 Дескрипторы файлов
- •4.2.4. Блоки данных и свободные блоки
- •4.3. Типы файлов
- •4.3.1. Обычные файлы
- •4.3.2. Каталоги
- •4.3.4. Символические связи
- •4.3.5. Fifo – Именованные каналы
- •4.3.6. Сокеты
- •4.3.7. Обозначение типов файлов
- •Типы файлов
- •4.4. Дескриптор обычного файла
- •4.5. Дескриптор каталога
- •4.6. Дескриптор специального файла
- •4.7. Системная таблица файлов
- •4.8. Монтирование файловых систем
- •4.9. Демонтирование файловых систем
- •4.10. Проверка и восстановление файловых систем
- •4.11. Журналирование файловых систем
- •4.12. Контрольные вопросы
- •4.13. Тесты
- •Глава 5. Этапы начальной загрузки ос Unix
- •5.1. Загрузка и инициализация ядра
- •5.2. Распознавание и конфигурирование устройств
- •5.3. Создание спонтанных процессов
- •5.4. Выполнение команд оператора
- •5.5. Выполнение командных файлов запуска системы
- •5.6. Переход в многопользовательский режим
- •5.7. Контрольные вопросы
- •5.8. Тесты
- •Глава 6. Обзор командных файлов
- •6.1. Процесс init
- •6.1.1. Формат файла inittab
- •6.1.2. Уровни выполнения
- •Уровни выполнения
- •6.1.3. Дисциплины обработки процесса
- •Дисциплины обработки процесса
- •6.1.4. Запуск и этапы работы процесса init
- •6.2. Процесс rc
- •6.2.1. Сценарии запуска системы Solaris
- •6.3. Процесс cron
- •6.4. Процесс регистрации пользователей
- •6.5. Контрольные вопросы
- •6.6. Тесты
- •Глава 7. Останов системы
- •7.1. Выключение питания
- •7.2. Команда shutdown
- •7.3. Команда halt
- •7.4. Изменение уровня выполнения процесса init
- •Глава 8. Задачи системного администрирования
- •8.1. Инструменты администрирования
- •8.1.1. Администрирование aix
- •8.1.2. Администрирование hp-ux
- •8.1.3. Администрирование Solaris
- •8.1.4. Администрирование Linux
- •8.2. Пользователь root
- •8.2.1. Команда su
- •8.3. Добавление новых пользователей в систему
- •8.3.1. Файл /etc/passwd
- •Идентификаторы пользователей
- •8.3.2. Файл /etc/group
- •8.4. Контрольные вопросы
- •8.5. Тесты
- •Литература
- •Содержание
- •Глава 1. История создания ос unix 6
- •Глава 2. Функционирование ос unix 51
- •Глава 3. Процессы 75
- •Глава 4. Файловая система unix 116
- •Акуленок Ирина Николаевна Акуленок Анатолий Васильевич
- •Часть I. Основы операционной системы unix
6.2. Процесс rc
Одной из наиболее важных в файле /etc/inittab точек входа является файл настройки /etc/rc – системный инициализационный процесс shell для выполнения команд, хранящихся в нем.
Процесс, в рамках которого выполняется программа init, инициализирует интерпретатор команд shell и передает ему на выполнение rc.
Обычно имеется несколько процедур /etc/rc[0–6]. Они маркируются числами от 0 до 6 и соответствуют уровням, на которые переходит операционная система.
/etc/rc0 – выполняет командные процедуры по останову операционной системы и переводу ее на уровень 0.
/etc/rc1 – выполняет командные процедуры по переводу системы на уровень 1 (уровень администратора или однопользовательский режим работы). Процесс init запускает командную shell–процедуру rc1, которая, в свою очередь, читает и последовательно выполняет командные процедуры из каталога rc1.d, где каждый командный файл обозначен с префиксом «S» или «К», что означает для старта (s) или для останова (к) соответствующих процессов они предназначены. Может быть указан также относительный порядковый номер для останавливающего или запускающего процессы задания.
/etc/rc2 – командная процедура действует по сходному с rc1 алгоритму, но предназначена для перевода системы на уровень 2 (т.е. многопользовательский режим работы). Она запускает все основные процессы и демоны, стартовые процедуры, которые расположены в каталоге rc2.d.
/etc/rc3 – командная процедура запускает все сетевые процессы, связанные с обслуживанием удаленных файловых систем nfs (Network File System) и rfs(Remote File System).
6.2.1. Сценарии запуска системы Solaris
D OS Solars скрипты запуска системы, то есть те скрипты, которые запускают и останавливают отдельные приложения, расположены в каталогах /etc/rcN.d. Имена файлов в каталогах имеют вид KnnNAME или SnnNAME, где nn – это целое положительное число, а NAME – имя приложения (обычно – демона).
Файлы, начинающиеся с буквы S (start), – это скрипты для запуска приложения, файлы, начинающиеся с K (kill) – для завершения работы приложения. Номер nn определяет порядок запуска скриптов – вначале запускаются те, что имеют меньший порядковый номер.
При переходе в тот или иной режим работы системы сначала выполняются скрипты останова приложений, а затем – скрипты запуска приложений того режима, в который происходит переход. При старте системы, естественно, выполняются скрипты запуска приложений режима initdefault.
То, какие именно скрипты запускать, описано в файле /etc/rcN (N может принимать значения от 0 до 6 и s), который, собственно, и вызывается процессом init. Файлы /etc/rcN являются символическими ссылками на файлы /sbin/rcN.
Так, если initdefault =3, а каталог /etc/rc3.d содержит нижеуказанные скрипты, то первым выполнится S13kdc.master, затем S14kdc, и так все по порядку (последним будет S90samba):
$ cat /etc/rc3.d
S13kdc.master
S14kdc
S15nfs.server
S16boot.server
S34dhcp
S50apache
S76snmpdx
S77dmi
S80mipagent
S81volmgt
S89sshd
S90samba
6.3. Процесс cron
Одной из команд, выполняемых в составе системного стартового файла /etc/rc, может быть команда /etc/cron, создающая постоянный процесс, пробуждающийся периодически каждую минуту. Этот процесс просматривает записи файла /usr/lib/crontab в поисках заданий, которые должны быть выполнены.
Файл содержит шесть полей:
минуты (0–59);
часы (0–23);
день месяца (1–31);
месяц года (1–12);
день недели (0–6, 0 – воскресенье);
команда, которая должна быть выполнена.
Поля времени разделяются пробелами или знаками табуляции. В каждом из этих полей может быть:
значение;
перечень значений, разделенных запятыми;
границы интервала значений, разделенных дефисом.
Например:
0,15,30,45 2–23 * * * /usr/lib/atrun
где * означает любое возможное значение.
Точность времени запуска зависит от периода пробуждения постоянного процесса, выполняющего команду cron. Все действия процесса, выполняющего cron, фиксируются в учетном файле /usr/lib/cronlоg, если он существует и открыт на запись в момент выполнения этой команды.
Команду at может запустить любой пользователь, чтобы запустить программу в нужное время. Если стандартный вывод не переназначен, то весь вывод запланированных команд пересылается пользователю по почте.
/usr/lib/cron/cron.allow – список пользователей, которым разрешено выполнять команду crontab
/usr/lib/cron/cron.deny – список пользователей, которым запрещено выполнять команду crontab
Содержимое файла /usr/lib/crontab можно модифицировать в процессе работы в программе.
Например: печать даты на консоли системной, которая повторяется с интервалом в 10 мин:
0,10,20,30,40,50 * * * *date>/dev/console
Например: печать даты на консоли системной, которая повторяется по будням с 6 до 10:
0 6–10 * * 1–5 date>/dev/console
Cron дает возможность выполнять программы в наиболее свободные часы в отсутствие пользователей, проводить периодические учетные операции.
