Один из интереснейших вопросов
Основной управляющий файл для процесса init - это /etc/inittab. Приведем его с незначительными исключениями и модификациями:
# inittab Файл описывает, как перейти
# к конкретному уровню
# Author: Miquel van Smoorenburg,
# <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing
# and Donnie Barnes
# Уровни выполнения для RHS:
# 0 - останов (не устанавливайте
# initdefault в это значение)
# 1 - Single user mode - однопользова-
# тельский режим
# 2 - Multiuser, многопользовательский без
# NFS (Аналог 3, если не используете сеть)
# 3 - Полностью многопользовательский
# режим
# 4 - не используется (точнее, не имеет
# смысла по умолчанию)
# 5 - X11 - графический режим со
# стартом оболочки
# 6 - reboot - перезагрузка (не устанавли-
# вайте initdefault в это значение)
id:3:initdefault:
# Инициализация системы
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
:
l6:6:wait:/etc/rc.d/rc 6
# Что выполняется на каждом уровне
ud::once:/sbin/update
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# ИБП подключен и работает корректно
pf::powerfail:/sbin/shutdown -f -h +2
"Power Failure; System Shutting Down>
# Выполнение gettys на стандартных
# уровнях
1:2345:respawn:/sbin/mingetty tty1
:
6:2345:respawn:/sbin/mingetty tty6
# Выполнение xdm на уровне 5,
# xdm - отдельная служба
x:5:respawn:/etc/X11/prefdm -nodaemon
Формат этого файла практически не отличается от других вариантов Unix. Каждый элемент занимает 4 поля: имя, уровни старта, вариант обработки (ждать окончания - wait, рестартовать после окончания - respawn, установить стандартный уровень для старта - initdefault и т.д.), непосредственно выполняемая на данном уровне команда. Из отличий от других вариантов Unix стоит отметить наличие опции ctrlaltdel.
Что произойдет, если в приведенном файле поменять initdefault значение с 3 на 5? Это будет переход от алфавитно-цифрового входа к графическому входу в систему и наоборот. Именно это значение меняет linuxconf при выборе соответствующей опции.
В тексте явно видно деление по уровням. Фактически они отличаются набором доступных подсистем или служб, возможностью работать в многопользовательском режиме и т.п. В любой момент времени проверить текущий уровень можно командой /sbin/runlevel.
Менее известен другой файл, /etc/initscript. Разработчики отводили ему роль, аналогичную /etc/security/limits.conf, который позволяет задать лимиты для всех, группы или конкретного пользователя. /etc/initscript же выполняется перед стартом каждого из процессов в /etc/inittab. При этом собственно выполняемая команда передается как четвертый параметр. В этом файле можно задать там любые специфические действия, в частности, установку тех же самых лимитов, umask или еще что-нибудь, но уже не для пользователя, а для каждой команды из /etc/inittab файла. Обратите внимание на пример (см. man initscript), дабы не попасть в дурную ситуацию. Другой пример:
ulimit -c 0 ## core-dump прощай
eval exec "$4"
Если вы поменяли этот файл, то эффект проявится только при следующем запуске очередного процесса из-под init (т.е. если войти в систему на еще одной консоли, эффекта не будет, а вот после завершения работы с системой и повторного входа - будет).