Init: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Метки: с мобильного устройства через мобильное приложение через приложение для Android
 
(не показана 31 промежуточная версия 14 участников)
Строка 1: Строка 1:
{{заголовок со строчной буквы}}
{{заголовок со строчной буквы}}
'''init''' (сокращение от {{lang-en|initialization}} — инициализация) — '''система инициализации''' в [[UNIX]] и [[Unix-подобная операционная система|Unix-подобных]] [[операционная система|системах]], которая запускает все остальные процессы. Работает как [[Демон (программа)|демон]] и обычно имеет [[Идентификатор процесса|PID]] 1. Обычно (согласно [[Filesystem Hierarchy Standard]]) располагается по пути <tt>/sbin/init</tt>.
'''init''' (сокращение от {{lang-en|initialization}} — инициализация) — подсистема инициализации в [[Unix]] и ряде [[Unix-подобная операционная система|Unix-подобных]] систем, которая запускает все остальные процессы. Работает как [[Демон (программа)|демон]] и обычно имеет [[Идентификатор процесса|PID]] 1. Обычно (согласно [[Filesystem Hierarchy Standard]]) располагается по пути <tt>/sbin/init</tt>. Существуют различия в организации работы подсистемы в операционных системах, ведущих родословную от [[System V]] и систем в стиле [[BSD]].


Длительное время была основной подсистемой инициализации в Linux, пока не была в большинстве дистрибутивов заменена [[systemd]]. В [[Solaris 10]] вместо init применяется [[Service Management Facility]]<ref> init в Solaris 10 запускает и, в случае необходимости, перезапускает SMF (init initiates the core components of the service management facility, svc.configd(1M) and svc.startd(1M), and restarts these components if they fail). Таким образом можно сказать, что в Solaris 10 большая часть функций init выполняется с помощью SMF.</ref>. В ряде Unix-систем применяются альтернативы init: [[Upstart]], [[Runit]], [[Daemontools]], [[Launchd]], [[Initng]], [[OpenRC]].
== Уровни инициализации ==


В процессе загрузки, после инициализации [[Ядро операционной системы|ядра]], ядро запускает <tt>/sbin/init</tt> как первый процесс [[Пространство пользователя|пользовательского режима]]. init отвечает за дальнейшую загрузку системы. Для этого он запускает так называемые стартовые скрипты, которые выполняют проверку и монтирование файловых систем, запуск необходимых демонов, настройку ядра (в том числе загрузку модулей ядра согласно установленному оборудованию, настройку IP-адресов, таблиц маршрутизации и др.), запуск графической оболочки и другие действия.
В процессе загрузки после инициализации [[Ядро операционной системы|ядра]], как правило, запускается <tt>/sbin/init</tt> как первый процесс [[Пространство пользователя|пользовательского режима]], и init отвечает за дальнейшую загрузку системы. Для этого запускаются стартовые сценарии, которые выполняют проверку и монтирование файловых систем, запуск необходимых демонов, настройку ядра (в том числе загрузку модулей ядра согласно установленному оборудованию, настройку IP-адресов, таблиц маршрутизации и другие задачи), запуск графической оболочки. Основная информация для загрузки, как правило, размещается в <tt>/etc/inittab</tt>{{переход|#inittab}}.


В реализации init в стиле System V используется понятие [[уровень выполнения|уровня выполнения]] — степени загрузки операционной системы; в этом случае стартовые сценарии для каждого уровня разложены по каталогам от <tt>/etc/rc0.d</tt> до <tt>/etc/rc6.d</tt>, где цифра после <tt>rc</tt> соответствует номеру уровня инициализации.
В операционных системах Unix/Linux с помощью init можно изменить '''уровень инициализации'''. Уровень инициализации — степень загрузки операционной системы. Вот как происходит инициализация системы: процесс init запускается и анализирует файл <tt>/etc/inittab</tt>. Следует отметить, что приведенная здесь система инициализации работает на системах [[Linux]] и [[Unix System V]] и она несколько отличается от стиля инициализации системы в [[BSD]]-подобных системах.


== inittab ==
По умолчанию, в системе использовано 7 уровней инициализации:
Пример файла <tt>/etc/inittab</tt>:
* 0 — остановка системы
* 1 — загрузка в однопользовательском режиме
* 2 — загрузка в многопользовательском режиме без поддержки сети
* 3 — загрузка в многопользовательском режиме с поддержкой сети
* 4 — не используется
* 5 — загрузка в многопользовательском режиме с поддержкой сети и графического входа в систему
* 6 — перезагрузка

В большинстве Unix/Linux систем, узнать текущий уровень инициализации можно командами:
: <code>$ runlevel</code>
: <code>$ who -r</code>

Набрав init ''n'' в терминале (с правами [[Суперпользователь|суперпользователя]]), где ''n'' — номер уровня инициализации, можно переключиться в любой из вышеперечисленных уровней.

Стартовые скрипты для каждого уровня находятся в каталогах с <tt>/etc/rc0.d</tt> до <tt>/etc/rc6.d</tt>, где цифра после <tt>rc</tt> соответствует номеру уровня инициализации.

== Файл /etc/inittab ==

Как уже было упомянуто выше, работа процесса init управляется с помощью файла /etc/inittab. Вот пример этого файла (без комментариев):
<source lang=gettext>
<source lang=gettext>
id:5:initdefault:
id:5:initdefault:
Строка 47: Строка 29:
</source>
</source>
В первой строке описан терминал и его конфигурация по умолчанию.
В первой строке описан терминал и его конфигурация по умолчанию.
Сначала в этом файле описываются уровни инициализации. Затем инициируются виртуальные консоли. Запись инициализации консолей состоит из полей, разделенных двоеточием и выглядит следующим образом:
Сначала в этом файле описываются уровни инициализации. Затем инициируются виртуальные консоли. Запись инициализации консолей состоит из полей, разделённых двоеточием и выглядит следующим образом:

* <tt>1</tt> — порядковый номер консоли
* <tt>2345</tt> — номера уровней инициализации, для которых консоль инициализируется
* <tt>respawn</tt> — этот параметр означает, что init должен перезапустить обслуживающий консоль процесс после выхода из сеанса или в случае краха.
* <tt>/sbin/mingetty tty6</tt> — программа (с указанием параметров), которая будет обслуживать консоль.

Таким образом, вы легко можете создать свой уровень инициализации (под номером 6 или 7, 8…), просто исправив файл <tt>/etc/inittab</tt> и создав необходимые ссылки в каталоге <tt>/etc/rc.d/rc*.d</tt>.

== SysVinit ==
[[Файл:Sysv-rc-conf.png|thumb|{{Mono|Sysv-rc-conf}}, в [[эмулятор терминала|терминале]] запущена утилита, которая выбирает, какие сценарии инициализации System V будут запускаться на каждом уровне выполнения]]

По сравнению со своими предшественниками, [[System III|AT&T UNIX System III]] представил новый стиль конфигурации запуска системы<ref>{{cite web|url=http://minnie.tuhs.org/cgi-bin/utree.pl?file=SysIII/usr/src/man/man8/init.8|title=init(8)|work=minnie.tuhs.org|access-date=2022-05-11|archive-date=2021-07-27|archive-url=https://web.archive.org/web/20210727193510/https://minnie.tuhs.org/cgi-bin/utree.pl?file=SysIII%2Fusr%2Fsrc%2Fman%2Fman8%2Finit.8|deadlink=no}}</ref>, который сохранился (с изменениями) в [[System V|UNIX System V]] и поэтому называется «SysVinit».


В любой момент работающая [[System V|AT&T UNIX System V]] находится в одном из заранее определённых состояний, называемых [[runlevel]]. По крайней мере один уровень выполнения является нормальным рабочим состоянием системы; как правило, другие уровни выполнения представляют однопользовательский режим (используется для восстановления неисправной системы), выключение системы и различные другие состояния. Переключение с одного уровня выполнения на другой вызывает запуск набора сценариев для каждого уровня запуска, которые обычно монтируют файловые системы, запускают или останавливают [[Демон (программа)|daemons]], запускают или останавливают [[X Window System]], выключают машину и т. д.
* 1 — порядковый номер консоли
* 2345 — номера уровней инициализации, для которых консоль инициализируется
* respawn — этот параметр означает, что init должен перезапустить обслуживающий консоль процесс после выхода из сеанса или в случае краха.
* /sbin/mingetty tty6 — программа (с указанием параметров), которая будет обслуживать консоль.


=== Runlevels (уровни выполнения) ===
Таким образом, вы легко можете создать свой уровень инициализации (под номером 4 или 7, 8…), просто исправив файл /etc/inittab и создав необходимые ссылки в каталоге /etc/rc.d/rc*.d
{{Details|Runlevel}}


[[runlevel]] в [[System V|AT&T UNIX System V]] описывают определённые состояния машины, характеризуемые процессами и демонами, работающими в каждом из них. В общем, существует семь уровней выполнения, из которых три уровня выполнения считаются «стандартными», поскольку они необходимы для работы системы:
== init в других ОС ==
: 0. Halt
: 1. [[Безопасный режим#Unix|Single user mode]]
: 6. [[Перезагрузка]]


Помимо этих стандартных, [[Unix]] и Unix-подобные системы трактуют уровни выполнения несколько по-разному.<code>/etc/inittab</code> файл, определяет, что каждый настроенный уровень выполнения делает в данной системе.
В [[Windows NT]] роль init играет [[smss.exe]]. В [[Solaris 10]] вместо init применяется [[Service Management Facility]].
/* init в Solaris 10 запускает и, в случае необходимости, перезапускает SMF (init initiates the core components of the service management facility, svc.configd(1M)and
svc.startd(1M), and restarts these components if they fail). Т.е. можно сказать, что в Solaris 10 большая часть функций init выполняется с помощью SMF. */


== Примечания ==
== Альтернативы init ==
{{примечания}}


== Литература ==
Сейчас существует множество систем, призванных заменить собой классический init: [[Upstart]], [[Runit]], [[Daemontools]], [[Launchd]], [[Initng]], [[OpenRC]], [[systemd]]. Все они разрабатывались изначально для определенных дистрибутивов [[Linux]] или вообще для других систем.
* {{книга | автор = Б. Уорд | заглавие = Внутреннее устройство Linux | место = СПб | издательство = Питер | год = 2016 | страниц = 384 | часть = Глава 6. Как запускается пространство пользователя | страницы = 136—173}}


== Ссылки ==
== Ссылки ==
* [http://users.rsise.anu.edu.au/~okeefe/p2b/power2bash/power2bash.html From Power Up To Bash Prompt]{{ref-en}}
* [http://users.rsise.anu.edu.au/~okeefe/p2b/power2bash/power2bash.html From Power Up To Bash Prompt]{{ref-en}}


__NOTOC__
[[Категория:Системные и сервисные менеджеры]]
[[Категория:Системные и сервисные менеджеры]]
[[Категория:Система инициализации системы]]

Текущая версия от 20:45, 27 июня 2024

init (сокращение от англ. initialization — инициализация) — подсистема инициализации в Unix и ряде Unix-подобных систем, которая запускает все остальные процессы. Работает как демон и обычно имеет PID 1. Обычно (согласно Filesystem Hierarchy Standard) располагается по пути /sbin/init. Существуют различия в организации работы подсистемы в операционных системах, ведущих родословную от System V и систем в стиле BSD.

Длительное время была основной подсистемой инициализации в Linux, пока не была в большинстве дистрибутивов заменена systemd. В Solaris 10 вместо init применяется Service Management Facility[1]. В ряде Unix-систем применяются альтернативы init: Upstart, Runit, Daemontools, Launchd, Initng, OpenRC.

В процессе загрузки после инициализации ядра, как правило, запускается /sbin/init как первый процесс пользовательского режима, и init отвечает за дальнейшую загрузку системы. Для этого запускаются стартовые сценарии, которые выполняют проверку и монтирование файловых систем, запуск необходимых демонов, настройку ядра (в том числе загрузку модулей ядра согласно установленному оборудованию, настройку IP-адресов, таблиц маршрутизации и другие задачи), запуск графической оболочки. Основная информация для загрузки, как правило, размещается в /etc/inittab.

В реализации init в стиле System V используется понятие уровня выполнения — степени загрузки операционной системы; в этом случае стартовые сценарии для каждого уровня разложены по каталогам от /etc/rc0.d до /etc/rc6.d, где цифра после rc соответствует номеру уровня инициализации.

Пример файла /etc/inittab:

id:5:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
x:5:respawn:/etc/X11/prefdm -nodaemon

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

  • 1 — порядковый номер консоли
  • 2345 — номера уровней инициализации, для которых консоль инициализируется
  • respawn — этот параметр означает, что init должен перезапустить обслуживающий консоль процесс после выхода из сеанса или в случае краха.
  • /sbin/mingetty tty6 — программа (с указанием параметров), которая будет обслуживать консоль.

Таким образом, вы легко можете создать свой уровень инициализации (под номером 6 или 7, 8…), просто исправив файл /etc/inittab и создав необходимые ссылки в каталоге /etc/rc.d/rc*.d.

Sysv-rc-conf, в терминале запущена утилита, которая выбирает, какие сценарии инициализации System V будут запускаться на каждом уровне выполнения

По сравнению со своими предшественниками, AT&T UNIX System III представил новый стиль конфигурации запуска системы[2], который сохранился (с изменениями) в UNIX System V и поэтому называется «SysVinit».

В любой момент работающая AT&T UNIX System V находится в одном из заранее определённых состояний, называемых runlevel. По крайней мере один уровень выполнения является нормальным рабочим состоянием системы; как правило, другие уровни выполнения представляют однопользовательский режим (используется для восстановления неисправной системы), выключение системы и различные другие состояния. Переключение с одного уровня выполнения на другой вызывает запуск набора сценариев для каждого уровня запуска, которые обычно монтируют файловые системы, запускают или останавливают daemons, запускают или останавливают X Window System, выключают машину и т. д.

Runlevels (уровни выполнения)

[править | править код]

runlevel в AT&T UNIX System V описывают определённые состояния машины, характеризуемые процессами и демонами, работающими в каждом из них. В общем, существует семь уровней выполнения, из которых три уровня выполнения считаются «стандартными», поскольку они необходимы для работы системы:

0. Halt
1. Single user mode
6. Перезагрузка

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

Примечания

[править | править код]
  1. init в Solaris 10 запускает и, в случае необходимости, перезапускает SMF (init initiates the core components of the service management facility, svc.configd(1M) and svc.startd(1M), and restarts these components if they fail). Таким образом можно сказать, что в Solaris 10 большая часть функций init выполняется с помощью SMF.
  2. init(8). minnie.tuhs.org. Дата обращения: 11 мая 2022. Архивировано 27 июля 2021 года.

Литература

[править | править код]
  • Б. Уорд. Глава 6. Как запускается пространство пользователя // Внутреннее устройство Linux. — СПб.: Питер, 2016. — С. 136—173. — 384 с.