Рейтинговые книги
Читем онлайн Linux: Полное руководство - Денис Колисниченко

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 57 58 59 60 61 62 63 64 65 ... 158

Итак, вы в командной строке. Редактировать вводимые команды можно в стиле bash: поддерживается автодополнение команд и путей к файлам, пролистывание истории команд стрелками «вверх» и «вниз». Список всех доступных команд можно получить по команде help, а получить краткую справку о команде — введя help <имя_команды>.

Установить диспетчер загрузки GRUB (если вы не сделали этого при инсталляции системы) можно командой /sbin/grub-install /dev/hda. Утилита grub-install, как и все остальные компоненты GRUB, содержится в пакете grub, который можно скачать по адресу http://www.sisyphus.ru/srpm/grub.

Как установить графический фон загрузчика GRUB

Много интересных картинок, пригодных для установки в качестве фона загрузчика GRUB, можно найти по адресу http://ruslug.rutgers.edu/~mcgrof/grub-images/images/working-splashimages. Чтобы не загружать все эти картинки, можно просмотреть их уменьшенные изображения по адресу http://ruslug.rutgers.edu/~mcgrof/grub-images/images, а потом уже загрузить понравившуюся картинку.

Выбранную картинку поместите в каталог /boot/grub и укажите ее в директиве splashimage конфигурационного файла:

splashimage=(hd0,0)/boot/grub/image.xpm.gz

Собственную картинку можно использовать как фон для загрузчика, если преобразовать ее в формат, поддерживаемый GRUB. Преобразование выполняется утилитой convert, после чего картинку нужно сжать компрессором gzip:

# convert myimage.png -colors 14 -resize 640x480 myimage.xpm

# gzip myimage.xpm

9.1.2. Продолжение загрузки.

Демон init

С момента загрузки ядра процесс начальной загрузки системы идет под управлением самой системы. Первой получает управление процедура автозапуска ядра. Она определяет объем доступной оперативной памяти, тип и быстродействие процессора, тип видеоадаптера, переинициализирует жесткие диски, не полагаясь на инициализацию, выполненную BIOS.

Это делается для того, чтобы выбрать из возможных вариантов выполнения ядром основных функций оптимизированные именно для данной архитектуры компьютера, повысив тем самым быстродействие всей системы. Здесь же определяется системная консоль, на которую выводятся диагностические сообщения.

Наконец, процедура автозапуска распаковывает загруженный в память образ ядра (на этом этапе вы видите сообщение: «Uncompressing Linux…») и передает ему управление («OK, booting the kernel»). Теперь ядро инициализирует таблицу страниц виртуальной памяти, устанавливает обработчики прерываний, разбирает параметры, переданные ему диспетчером загрузки, и настраивается в соответствии с ними.

Завершив самонастройку, ядро создает несколько системных «процессов», фактически представляющих собой части самого ядра: планировщик процессов, диспетчер виртуальной памяти, различные обработчики сигналов ядра.

В списке текущих процессов, который вы видели по команде ps -e, эти системные процессы взяты в квадратные скобки. Один из них получает идентификатор 1, он-то и станет полноценным пользовательским процессом, в котором будет выполняться код демона init. Этот демон запустит все остальные службы и процессы, управляющие базовыми операциями: например, входом пользователей в систему.

Ядро монтирует корневую файловую систему в режиме «только чтение», находит исполняемый файл демона init (в каталоге /bin, /sbin или там, где вы укажете, передав ядру параметр init=/путь_к_init) и посредством системного вызова exec() загружает его код в процесс номер 1. Все остальные процессы порождает init и его потомки путем деления с помощью системного вызова fork().

Примечание

Ядро покорно запустит в качестве первопроцесса любую программу, которую вы укажете ему как init:

LILO: my_linux init=/bin/sh

Конечно, оболочка sh не запустит других процессов, но она предоставит вам интерфейс командной строки, в которой вы сможете выполнить необходимые ремонтные работы.

Процесс init прочитывает свой конфигурационный файл /etc/inittab и запускает другие процессы согласно указанным в нем инструкциям. В этот момент выводится приглашение нажать определенную клавишу (обычно <I>), чтобы войти в интерактивный режим, позволяющий запускать каждый процесс вручную или отказываться от такого запуска.

Уровни выполнения

Уровень выполнения (runlevel) — это такой режим работы системы, в котором разрешается существование только определенной группы процессов. В каждый момент времени система находится на одном из уровней выполнения (на каком именно, можно узнать по команде who -r. Она покажет также значение предыдущего уровня).

Разрешенные на каждом уровне процессы указаны в файле /etc/inittab. Демон init заведует переключением уровней, остановкой запрещенных на новом уровне процессов и запуском предписанных. В ОС Linux определено:

♦ семь уровней выполнения, обозначаемых номерами с 0 до 6;

♦ особый уровень S или s — однопользовательский;

♦ уровни по требованию (ondemand) А, В и С — фиктивные: при переходе на эти уровни запускаются приписанные к ним процессы, но текущий уровень выполнения не меняется.

Термин «уровень выполнения» унаследован от тех времен, когда система была обязана проходить уровни последовательно, от низшего к высшему при загрузке и обратно при выключении. Сейчас их можно переключать в любом порядке. Для переключения на уровень n нужно от имени суперпользователя ввести команду

# telinit n

Эта команда посылает соответствующий сигнал процессу init (tell init). Ее исполняемый файл представляет собой символическую ссылку на /sbin/init, так что вместо нее можно отдавать просто команду init. При этом не будет запущена копия процесса init: стартующий процесс первым делом проверяет свой PID и, если тот не равен 1, просто передает сообщение настоящему процессу init.

Запустив все процессы, приписанные к текущему уровню выполнения, init засыпает до получения сигнала о завершении дочернего процесса, отключении питания или требовании переключить уровень. Тогда он просыпается, перечитывает свой конфигурационный файл и, если нужно, выполняет записанные в нем инструкции. Чтобы заставить его перечитать измененный вами /etc/inittab, не дожидаясь трех вышеуказанных событий, введите команду

# telinit q

Важно понять, что уровень выполнения — это программная абстракция, аппаратура ни о каких уровнях не знает. Поэтому в разных реализациях Linux (разных дистрибутивах) одному уровню могут соответствовать разные конфигурации системы. Следующие уровни используются в дистрибутивах, основанных на Red Hat:

♦ 0: Останов системы.

♦ 1: Однопользовательский режим. То же, что уровень S.

♦ 2: Многопользовательский режим без поддержки сети.

♦ 3: Полный многопользовательский режим.

♦ 4: Не используется.

♦ 5: Графический режим с X11.

♦ 6: Перезагрузка.

В однопользовательском режиме никакие службы не стартуют: только грузится ядро, монтируется корневая файловая система и запускается командный интерпретатор. На этом уровне не нужен даже файл /etc/inittab, повреждение которого означает невозможность загрузиться на любом другом рабочем уровне. Этот уровень обычно использует администратор для аварийно-восстановительных работ.

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

Конфигурационный файл /etc/inittab

Первая незакомментированная строка этого файла определяет уровень выполнения по умолчанию, то есть тот, в котором стартует система, если в процессе загрузки ядру не указано иначе. Эта строка выглядит как

id:3:initdefault

Обычно в качестве уровня по умолчанию выбирают 3 (полнофункциональный многопользовательский текстовый режим) или графический 5 (запускается X Window и выдается графическое приглашение для входа в систему). Если оставить поле уровня пустым, то init переспросит значение в процессе загрузки. Если указать в поле уровня несколько значений, то сработает наибольшее. Уровни 0 (останов) и 6 (перезагрузка) указывать нельзя.

Следующие строки имеют формат:

идентификатор:уровни_выполнения:действие:запускаемый_процесс

♦ Идентификатор — это уникальная последовательность из четырех символов (в старых дистрибутивах — двух).

♦ Уровни_выполнения: перечень уровней выполнения (номера без каких-либо разделителей), для которых будет выполнено указанное действие. Например, значение 2345 требует выполнить действие на уровнях 2, 3, 4 и 5. Здесь можно указывать также уровни по требованию (ondemand) А, В и С.

1 ... 57 58 59 60 61 62 63 64 65 ... 158
На этой странице вы можете бесплатно читать книгу Linux: Полное руководство - Денис Колисниченко бесплатно.
Похожие на Linux: Полное руководство - Денис Колисниченко книги

Оставить комментарий