Какие знаешь уровни запуска в Linux?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Уровни запуска (Runlevels) в Linux
В классических системах Linux, основанных на SysVinit, уровень запуска (runlevel) — это состояние операционной системы, определяющее, какие системные службы (демоны) будут запущены. Это концепция, которая исторически использовалась для управления режимами работы системы. В современных дистрибутивах она часто заменена или дополнена системой systemd, но понимание runlevels важно для администрирования legacy-систем и для общего развития.
Традиционные уровни запуска SysVinit
Обычно существует семь стандартных уровней (от 0 до 6), каждый из которых предназначен для определённого режима работы:
- Runlevel 0: Остановка системы (Halt). Все процессы завершаются, и система безопасно выключается.
- Runlevel 1: Однопользовательский режим (Single-user mode). Также известен как режим восстановления. Загружается минимальный набор служб, доступ только для root. Используется для восстановления системы, сброса пароля, файловой проверки.
- Runlevel 2: Многопользовательский режим без сети (Multi-user, without NFS). Устаревший уровень, редко используемый на практике.
- Runlevel 3: Полнофункциональный многопользовательский режим с сетью (Multi-user with networking). Стандартный режим для серверов. Запускаются все сетевые службы, но без графического интерфейса (GUI).
- Runlevel 4: Зарезервирован. Пользователь может определить его назначение. По умолчанию часто идентичен runlevel 3.
- Runlevel 5: Многопользовательский режим с графическим интерфейсом (Multi-user with GUI). Стандартный режим для рабочих станций и десктопов. Запускается X Window System или другой дисплейный менеджер (например, GDM, LightDM).
- Runlevel 6: Перезагрузка (Reboot). Все процессы завершаются, и система перезагружается.
Для просмотра текущего уровня запуска в SysVinit использовалась команда runlevel:
$ runlevel
N 5
(Вывод показывает предыдущий уровень N (none) и текущий 5)
Для переключения между уровнями использовалась команда init или telinit:
# Переход в однопользовательский режим
sudo init 1
# Перезагрузка
sudo init 6
# Переход в режим с графическим интерфейсом
sudo init 5
Эволюция: цели (targets) в systemd
В современных дистрибутивах (RHEL/CentOS 7+, Ubuntu 16.04+, Debian 8+) традиционная система инициализации SysVinit была заменена на systemd. Systemd использует концепцию целей (targets), которая является аналогом и расширением runlevels. Цели — это группы unit-файлов, которые запускаются вместе для достижения определённого состояния системы.
Systemd предоставляет символьные имена для совместимости со старыми уровнями запуска:
| Традиционный Runlevel | Systemd Target | Назначение |
|---|---|---|
| 0 | poweroff.target | Остановка системы. |
| 1, S, single | rescue.target | Базовый однопользовательский режим (минимальные службы). |
| 2, 3, 4 | multi-user.target | Многопользовательский режим без графики (стандарт для серверов). |
| 5 | graphical.target | Многопользовательский режим с графическим интерфейсом (стандарт для десктопов). |
| 6 | reboot.target | Перезагрузка системы. |
| emergency | emergency.target | Аварийный режим (ещё более минимальный, чем rescue). |
Ключевые команды systemd для работы с целями:
-
Просмотр текущей цели по умолчанию и текущей активной цели:
systemctl get-default systemctl isolate graphical.target -
Установка цели по умолчанию (в которую система загружается после старта):
sudo systemctl set-default multi-user.target -
Переход в другую цель (аналог
init N):sudo systemctl isolate rescue.target -
Получение списка всех unit-файлов, зависимых от цели (что запускается):
systemctl list-dependencies graphical.target
Практическое значение для DevOps-инженера
- Восстановление системы: Умение загрузиться в
rescue.targetилиemergency.targetкритически важно для исправления проблем с загрузкой, повреждёнными файловыми системами или сброса пароля root. - Оптимизация сервера: На серверах по умолчанию должна быть установлена цель
multi-user.target(аналог runlevel 3) для минимизации потребления ресурсов и уменьшения поверхности атаки (не запускается графический стек). - Автоматизация и оркестрация: В скриптах развёртывания или конфигурации (Ansible, Terraform) часто требуется проверять или устанавливать целевое состояние системы.
- Понимание логов: Журналы systemd (
journalctl) тесно связаны с целями. Например, можно посмотреть логи загрузки в конкретную цель. - Работа с контейнерами: Внутри контейнеров Linux также может использоваться минимальная инициализация (часто через
tiniили прямое исполнение процесса), но принципы изоляции служб, унаследованные от systemd, влияют на дизайн контейнеров.
Таким образом, хотя классические runlevels сегодня являются в большей степени историческим понятием, их современная реализация через systemd targets остаётся фундаментальным аспектом управления состоянием Linux-систем. DevOps-инженер должен свободно владеть обеими концепциями для эффективного администрирования, отладки и автоматизации инфраструктуры.