Linux Сапоги

Как оказалось, в процессе загрузки не так много:

1. Загрузчик находит образ ядра на disk, загружает его в память и запускает.
2. Ядро инициализации устройств и ИППП водителей.
3. Ядро монтирует корневой файлsystem.
4. Ядро начинает INIT Вызывается с графиком.
5. инициализации устанавливает остальные процессы в движении.
6. Последний процессы, которые инициализации начинается как часть последовательности загрузки позволяет войти в систему.

Выявление каждого этапа процесса загрузки неоценимо для устранения проблем с загрузкой и понимания system в целом. Для начала найдите загрузчик, это начальный экран или приглашение, которое вы получаете после того, как компьютер выполнит самотестирование при включении, спрашивая, какой рабочий system бежать. После того, как вы сделаете выбор, загрузчик запускает Linux ядро, передающее управление system к ядру.

Существует Детальное обсуждение ядра в этой книге, из которой эта статья является отрывком. В данной статье рассматриваются стадии инициализации ядра, этап, на котором ядро ​​выводит кучу сообщений об оборудовании, присутствующем на system. Ядро запускает init сразу после того, как отображает сообщение о том, что ядро ​​смонтировало корневой файлsystem:

VFS: Mounted корень (файлы ext2system) только для чтения.

Вскоре после этого вы увидите сообщение о запуске init, за которым следует system сообщения о запуске службы, и, наконец, вы получаете какое-то приглашение для входа в систему.

ЗАМЕТКА : О Red Hat Linux, заметка об инициализации особенно очевидна, потому что она «приветствует» вас в Red Hat Linux. ” Все последующие сообщения показывают успех или неудачу в скобках в правой части экрана.

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

В init нет ничего особенного. Это программа, такая же, как и любая другая на Linux system, и вы найдете его в / sbin вместе с другими system двоичные файлы. Основная цель init - запускать и останавливать другие программы в определенной последовательности. Все, что вам нужно знать, это как работает эта последовательность.

Есть несколько различных вариаций, но большинство Linux дистрибутивы используют System V стиль обсуждается здесь. Некоторые дистрибутивы используют более простую версию, похожую на BSD init, но вы вряд ли столкнетесь с этим.

Уровни

В любой момент времени на Linux system, выполняется определенный базовый набор процессов. Это состояние machine называется его уровнем выполнения и обозначается числом от 0 до 6. system большую часть времени проводит на одном уровне выполнения. Однако, когда вы закрываете macвниз, init переключается на другой уровень запуска, чтобы завершить system сервисы упорядоченным образом и приказать ядру остановиться. Еще один уровень запуска для однопользовательского mode, обсудим позже.

Самый простой способ разобраться с уровнями выполнения — изучить файл конфигурации инициализации /etc/inittab. Найдите строку, подобную следующей:

ID: 5: инициализацияdefault:

Эта линия означает, что default уровень выполнения на system равно 5. Все строки в файле inittab имеют следующую форму: четыре поля, разделенные двоеточием, расположены в следующем порядке:
# Уникальный идентификатор (короткие строки, такие как идентификатор в предыдущем примере)
# Соответствующий номер уровня запуска (ы)
# Действие, которое должен выполнить init (в предыдущем примере действие - установить default уровень выполнения до 5)
# Команда для выполнения (по желанию)

Нет команды для выполнения в предыдущем initdefault пример, потому что команда не имеет смысла в контексте установки default уровень выполнения. Посмотрите немного ниже в inittab, пока не увидите такую ​​строку:

l5: 5: подождите :/ т.д. / rc.d / RC 5

Эта строка запускает большую часть system конфигурацию и службы через каталоги rc * .d и init.d. Вы можете видеть, что init настроен на выполнение команды с именем /etc/rc.d/rc 5 на уровне запуска 5. Действие wait сообщает, когда и как init запускает команду: запустите rc 5 один раз, когда enterУровень запуска 5, а затем дождитесь завершения этой команды, прежде чем делать что-либо еще.

В addИон для инициацииdefault и подождите, особенно это касается управления питанием, а страница руководства inittab (5) расскажет вам все о них. Те, с которыми вы, скорее всего, столкнетесь, описаны в следующих разделах.

респаун

Действие возрождения приводит к тому, что init запускает следующую команду, и, если команда завершает выполнение, запускает ее снова. Вы, вероятно, увидите что-то похожее на эту строку в вашем файле inittab:

1: 2345: респаун :/ sbin / mingetty tty1

Getty программы обеспечивают вход подсказки. В предыдущей линии для первой виртуальной консоли (/ Dev / tty1), который вы видите при нажатии ALT или Ctrl-Alt-F1 F1. Респаун действие приносит приглашение для входа обратно после выхода из системы.

ctrlAltdel

Ассоциация ctrlДействие altdel контролирует, что system происходит, когда вы нажимаете CONTROL-ALT-DELETE на виртуальной консоли. На большинстве systems, это своего рода команда перезагрузки с использованием команды выключения.

SYSINIT

Действие sysinit - это самое первое, что должен запустить init при запуске до enterна любых уровнях выполнения.

Как Процессы в уровни начала

Теперь вы готовы узнать, как запустить system services, непосредственно перед тем, как он позволит вам войти в систему. Вспомните эту строку inittab из ранее:

l5: 5: подождите :/ т.д. / rc.d / RC 5

Эта небольшая линия вызывает много других программ. RC означает пробег команды, и вы будете слышать, как люди относятся к командам, как скрипты, программы или услуги. Итак, где находятся эти команды, так или иначе?

Для уровня выполнения 5 в этом примере команды, вероятно, находятся либо в /etc/rc.d/rc5.d, либо в /etc/rc5.d. На уровне выполнения 1 используется rc1.d, на уровне 2 используется rc2.d и так далее. Вы можете найти следующее items в каталоге rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutд S89cron

RC 5 команда запускает программы в этом каталоге уровень запуска, выполнив команды следующие:

S10sysklogd дома
S12kerneld дома
S15netstd_init дома
S18netbase дома
...
S99sshd дома

Обратите внимание на начальный аргумент в каждой команде. S в имени команды означает, что команда должна запускаться в начале mode, а число (от 00 до 99) определяет, где в последовательности rc запускает команду.

* RC. D команды, как правило, запуска программ, скриптов в / sbin или / USR / sbin. Как правило, вы можете выяснить, что одна из команд на самом деле, глядя на сценарий с меньшим или пейджер другую программу.

Вы можете запустить одну из этих служб вручную. Например, если вы хотите запустить программу веб-сервера httpd вручную, запустите S99httpd start. Точно так же, если вам когда-нибудь понадобится убить одну из служб, когда machine включен, вы можете запустить команду в каталоге rc * .d с аргументом stop (например, S99httpd stop).

Некоторые каталоги rc*.d содержат команды, начинающиеся с K (что означает «убить» или остановить mode). В этом случае rc запускает команду с аргументом stop вместо start. Вы, скорее всего, столкнетесь с K-командами на уровнях выполнения, которые закрывают system вниз

Addдобавление и удаление сервисов

Если Вы хотите add, удалять или изменять сервисы в каталогах rc*.d, вам необходимо внимательно изучить файлы внутри. Длинный список показывает такую ​​структуру:

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / Sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / Kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / NetBase
...

Команды в каталоге rc*.d на самом деле являются символическими ссылками на файлы в каталоге init.d, обычно в /etc или /etc/rc.d. Linux дистрибутивы содержат эти ссылки, чтобы они могли использовать одни и те же сценарии запуска для всех уровней выполнения. Это соглашение ни в коем случае не является обязательным требованием, но часто оно немного упрощает организацию.

Чтобы одна из команд в каталоге init.d не запускалась на определенном уровне выполнения, вы можете подумать об удалении символической ссылки в соответствующем каталоге rc * .d. Это действительно работает, но если вы сделаете ошибку и когда-нибудь захотите вернуть ссылку на место, у вас могут возникнуть проблемы с запоминанием точного имени ссылки. Следовательно, вам не следует удалять ссылки в каталогах rc * .d, а, скорее, add подчеркивание (_) в начале имени ссылки, например:

М. В. S99httpd _S99httpd

Во время загрузки rc игнорирует _S99httpd, потому что он не начинается с S или K. Более того, исходное имя по-прежнему очевидно, и у вас есть быстрый доступ к команде, если вы в затруднении и вам нужно запустить ее вручную.

к add службы, вы должны создать сценарий, подобный другим, в каталоге init.d, а затем создать символическую ссылку в правильном каталоге rc * .d. Самый простой способ написать сценарий - изучить сценарии, уже находящиеся в init.d, сделать копию того, который вам понятен, и изменить копию.

После появления addПри создании службы убедитесь, что вы выбрали подходящее место в последовательности загрузки для запуска службы. Если служба запускается слишком рано, она может не работать из-за зависимости от какой-либо другой службы. Для несущественных услуг большинство systems administrators предпочитают номера в 90-х, после того как большинство услуг, которые поставлялись с system.

Linux дистрибутивы обычно поставляются с командой для включения и отключения служб в каталогах rc * .d. Например, в Debian команда update-rc.d и в Red Hat Linux, команда chkconfig. Также доступны графические пользовательские интерфейсы. Использование этих программ помогает поддерживать согласованность каталогов автозагрузки и помогает при обновлениях.

СОВЕТ: Один из самых распространенных Linux installНеправильно настроенный сервер XFree86 то включается, то выключается, что делает system непригодна для использования на консолях. Чтобы остановить это поведение, загрузитесь в однопользовательском режиме. mode и измените свой уровень запуска или службы уровня запуска. Найдите что-нибудь, содержащее xdm, gdm или kdm, в каталогах rc*.d или в файле /etc/inittab.

Управление инициализации

Иногда вам нужно немного подтолкнуть init, чтобы он переключил уровни выполнения, перечитал файл inittab или просто shut down домен system. Поскольку init всегда является первым процессом в system, его идентификатор процесса всегда равен 1.

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

telinit 3

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

Когда вам нужно add или удалить повторно появляющиеся задания или внести любое другое изменение в файл inittab, вы должны сообщить init об изменении и заставить его повторно прочитать файл. Некоторые люди используют команду kill -HUP 1, чтобы указать init сделать это. Этот традиционный метод работает в большинстве версий Unix, если вы вводите его правильно. Однако вы также можете запустить эту команду telinit:

telinit д

Вы также можете использовать telinit для переключения в однопользовательский режим. mode.

закрытие

init также контролирует, как system выключается и перезагружается. Правильный способ shut down a Linux machine - использовать команду выключения.

Есть два основных способа использования выключения. Если вы остановите system, он закрывает machine вниз и держит его вниз. Чтобы сделать macнемедленно остановитесь, используйте эту команду:

выключения-ч теперь

На большинстве modern macсопоставляется с достаточно свежими версиями Linux, остановка отключает питание macХайн. Вы также можете перезагрузить macХайн. Для перезагрузки используйте -r вместо -h.

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

В предыдущем примере сейчас самое время shut down. Этот аргумент является обязательным, но есть много способов указать его. Если вы хотите macЧтобы выйти из строя когда-нибудь в будущем, один из способов — использовать + n, где n — количество минут, в течение которых отключение должно ждать, прежде чем выполнить свою работу. Для других options, посмотрите на странице руководства выключения (8).

Для того, чтобы system перезагрузитесь через 10 минут, выполните эту команду:

выключения-R + 10

On Linux, shutdown уведомляет всех, кто вошел в систему, о том, что macХайн падает, но реальной работы от него мало. Если вы укажете время, отличное от текущего, завершение работы создает файл с именем /etc/nologin. Когда этот файл присутствует, system запрещает вход в систему кем-либо, кроме суперпользователя.

После появления system наконец наступает время выключения, выключение говорит init переключиться на уровень выполнения 0 для остановки и уровень выполнения 6 для перезагрузки. Когда init enterПри уровне выполнения 0 или 6 выполняется все следующее, что можно проверить, посмотрев сценарии внутри rc0.d и rc6.d:

1. инициализации убивает каждого процесса, что он может (как это было при переключении на любой другой уровень запуска).

# Запускаются начальные команды rc0.d / rc6.d, блокировка system файлы на место и другие приготовления к выключению.
# Следующие команды rc0.d/rc6.d размонтируют все файлыsystems кроме корня.
# Дальнейшие команды rc0.d/rc6.d перемонтируют корневой файлsystem только для чтения.
# Еще несколько команд rc0.d/rc6.d записывают все буферизованные данные в файлsystem с программой синхронизации.
# Окончательного rc0.d / rc6.d команд сообщить ядру, перезагрузить или остановить с перезагрузкой, остановка или отключение питания программа.

Программы перезагрузки и остановки ведут себя по-разному для каждого уровня выполнения, что может вызвать путаницу. по default, эти программы вызывают завершение работы с ключом -r или -h options, но если system уже находится на уровне запуска остановки или перезагрузки, программы говорят ядру немедленно выключиться. Если ты действительно хочешь заткнуть macв спешке (не обращая внимания на любой возможный ущерб от неупорядоченного завершения работы), используйте опцию -f.

Поклонник технологий, с 2006 года с удовольствием пишу на StealthSettings.com. Обширный опыт работы с операционными системами: macOS, Windows и Linux, а также с языками программирования и платформами для блогов (WordPress) и онлайн-магазинов (WooCommerce, Magento, PrestaShop).

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