← Назад к вопросам

Какие знаешь уровни запуска в Linux?

1.8 Middle🔥 151 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Уровни запуска (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 предоставляет символьные имена для совместимости со старыми уровнями запуска:

Традиционный RunlevelSystemd TargetНазначение
0poweroff.targetОстановка системы.
1, S, singlerescue.targetБазовый однопользовательский режим (минимальные службы).
2, 3, 4multi-user.targetМногопользовательский режим без графики (стандарт для серверов).
5graphical.targetМногопользовательский режим с графическим интерфейсом (стандарт для десктопов).
6reboot.targetПерезагрузка системы.
emergencyemergency.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-инженера

  1. Восстановление системы: Умение загрузиться в rescue.target или emergency.target критически важно для исправления проблем с загрузкой, повреждёнными файловыми системами или сброса пароля root.
  2. Оптимизация сервера: На серверах по умолчанию должна быть установлена цель multi-user.target (аналог runlevel 3) для минимизации потребления ресурсов и уменьшения поверхности атаки (не запускается графический стек).
  3. Автоматизация и оркестрация: В скриптах развёртывания или конфигурации (Ansible, Terraform) часто требуется проверять или устанавливать целевое состояние системы.
  4. Понимание логов: Журналы systemd (journalctl) тесно связаны с целями. Например, можно посмотреть логи загрузки в конкретную цель.
  5. Работа с контейнерами: Внутри контейнеров Linux также может использоваться минимальная инициализация (часто через tini или прямое исполнение процесса), но принципы изоляции служб, унаследованные от systemd, влияют на дизайн контейнеров.

Таким образом, хотя классические runlevels сегодня являются в большей степени историческим понятием, их современная реализация через systemd targets остаётся фундаментальным аспектом управления состоянием Linux-систем. DevOps-инженер должен свободно владеть обеими концепциями для эффективного администрирования, отладки и автоматизации инфраструктуры.

Какие знаешь уровни запуска в Linux? | PrepBro