Linux Boots

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

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

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

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

VFS: Mounted корень (ext2 filesystem) только для чтения.

Вскоре после этого вы увидите сообщение о запуске 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 services в упорядоченном режиме и дать команду ядру остановиться. Еще один уровень запуска предназначен для однопользовательского режима, который обсуждается позже.

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

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

Эта линия означает, что default уровень выполнения на system равно 5. Все строки в inittab file примите эту форму, с четырьмя полями, разделенными двоеточиями, в следующем порядке:
# Уникальный идентификатор (короткие строки, такие как идентификатор в предыдущем примере)
# Соответствующий номер уровня запуска (ы)
# Действие, которое должен выполнить 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) расскажет вам все о них. Те, с которыми вы, скорее всего, столкнетесь, описаны в следующих разделах.

респаун

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

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
S20logoutd S89cron

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

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

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

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

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

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

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

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

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

Команды в каталоге rc * .d на самом деле являются символическими ссылками на files в каталоге 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При создании службы убедитесь, что вы выбрали подходящее место в последовательности загрузки для запуска службы. Если служба запускается слишком рано, она может не работать из-за зависимости от какой-либо другой службы. Для несущественных услуг большинство systemадминистраторы предпочитают номера в 90-х годах, после того как большинство услуг, которые поставлялись с system.

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

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

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

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

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

telinit 3

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

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

telinit д

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

закрытие

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

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

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

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

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

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

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

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

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

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

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

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

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

Увлечен технологиями, мне нравится тестировать и писать руководства по операционным системам. macOS, Linux, Windows, о настройке веб-сервера WordPress, WooCommerce и LEMP (Linux, NGINX, MySQL и PHP). Я пишу на StealthSettings.com с 2006 года, а несколько лет спустя я начал писать на iHowTo.Tips обучающие программы и новости об устройствах в экосистеме. Apple: iPhone, айпад, Apple Часы, HomePod, iMac, MacBook, AirPods и аксессуары.

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