Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция4.о.с.docx
Скачиваний:
2
Добавлен:
26.11.2019
Размер:
22.08 Кб
Скачать

Выполнение команд в однопользовательском режиме

Как правило, init пропускает этот этап. Чтобы он перед дальнейшей инициализацией предложил администратору выполнить какие-то команды, должно произойти одно из двух событий: либо при запуске ядру был передан загрузчиком соответствующий флаг (-S или single или другой, в зависимости от системы); либо при инициализации обнаружились критические ошибки (как правило, в случае нарушения целостности корневого раздела жесткого диска) и для их устранения системе требуется мудрое руководство.

Раньше Unix при входе в однопользовательский режим не спрашивал пароль администратора. И это было правильно, ибо машина с Unix должна стоять в изолированном от ненадежных людей помещении (иначе ее все равно можно взломать.) Сейчас большинство систем требуют этот пароль.

Если пароль введен правильно, система выдает стандартный интерепретатор команд для пользователя root. При этом доступны практически все возможности, что и в многопользовательском режиме. Исключение составляют прикладные службы (такие как веб-сервер, почта и т.п.), ибо они в этот момент еще не запущены. Если какая-либо служба так уж необходима, можно запустить ее вручную. Кроме того, в этот момент, как правило, не присоединены дисковые разделы (кроме корневого.) Их тоже при необходимости надо подключать вручную.

Я не встречался с другой необходимостью работать в этом режиме, кроме случая проблем с корневым разделом. В этом случае, придется запустить команду fsck (сокращение от file system check, потому произносят фсчек). Крайне желательно предварительно про нее прочитать (man fsck), чтобы отвечать на ее вопросы действительно мудро.

Выполнение сценариев (скриптов) инициализации

Дальнейшая инициализация произодится выполнением большого количества скриптов инициализации (по одному на каждую задачу инициализации). В задачи инициализации входят задание имени компьютера, часового пояса, проверка и присоединение разделов жесткого диска (кроме корневого), конфигурирование сети, а также запуск различных прикладных служб.

Стартовые сценарии, как правило, написаны для интерпретатора /bin/sh (Bourn shell). Поэтому чтобы разобраться в них (в случае необходимости) надо хорошо понимать этот интерпретатор и уметь внести необходимые исправления.

В свое время Unix разделился на два семейства - System V (разработанный AT&T) и BSD (разработанный университетом Berkley). Сейчас такого четкого разделения нет, но разные ОС на этом этапе пользуются стилем одного или другого семейства.

В BSD-системах процесс init запускает один сценарий /etc/rc, тот сначала читает большие конфигурационные сценарии, затем выполняет сценарии, имя которых начинается на /etc/rc.. В общем-то, поскольку /etc/rc это скрипт, то можно его изменить так, чтобы он выполнял сценарии и из другого места, но принято так, и менять это незачем. Чаще всего, если что-то и нужно менять, надо это делать в конфигурационных файлах /etc/rc.conf.local или /etc/rc.conf.

В System V этот этап устроен чуть более сложно. Вводится понятие уровней работы системы (от 0 до 6.) Уровень 0 соответствует останову системы, уровень 6 - перезагрузке, уровни 1-5 различным вариантам работы системы. При этом вариант с бóльшим уровнем выполнения предоставляет пользователям больше возможностей. Уровень 1 всегда соответствует однопользовательскому режиму.

Процесс init читает файл /etc/inittab, в котором описано, что надо сделать на входе на какой уровень выполнения. При этом, некоторые ОС, как и положено, переходят с уровня на уровень последовательно, а некоторые делают только то, что соответствует требуемому уровню. Подробнее см. man inittab.

Все сценарии запуска упоминать в inittab оказалось неудобно, поэтому теперь обычно в inittab написано, что для уровня выполнения [n] следует выполнить один сценарий (например, /etc/rc [n]), а уже он выполняет все необходимые сценарии. Например, в ОС Linux, такой сценарий читает подряд в алфавитно-цифровом порядке все сценарии, лежащие в папке /etc/rc[n].d, начинающиеся либо с буквы S, либо с буквы K. При старте системы (и вообще при переходе на более высокий уровень работы) переход между уровнями осуществляется от меньшего номера к большему и выполняются S-сценарии с параметром start. При останове (и при переходе к более низкому уровню работы) переход осуществляется от большего номера уровня к меньшему и запускаются K-сценарии с параметром stop. Бывает, что папки rc[n].d лежат и не в /etc.

Файлы S* и K*, на самом деле, являются ссылками на файлы сценариев, которые лежат в папке init.d. Это удобно потому, что с большинством запускаемых служб поставляется один файл, который умеет как запускать, так и останавливать службу, а также потому, что один и тот же файл может использоваться на любом уровне выполнения.

Хотелось бы еще добавить, что и здесь, поскольку /etc/rc является скриптом, а вызов его прописан в /inittab, описанную процедуру запуска инициализационных сценариев в принципе можно поменять, только незачем.

И, наконец, чтобы окончательно перейти в многопользовательский режим, запускаются службы, которые слушают терминалы. То есть, ждут, когда к ним (например, по сети) обратится пользовательский процесс, и обеспечивают возможность пользователю работать в системе. Запуск этих служб также обычно прописан в файле inittab.

На этом загрузка ОС заканчивается и система готова к работе пользователей.