Какие уровни запуска (runlevels) или цели (targets) вы знаете в Linux?

«Какие уровни запуска (runlevels) или цели (targets) вы знаете в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В современных дистрибутивах Linux, использующих systemd (например, Ubuntu 16.04+, RHEL/CentOS 7+), традиционные уровни запуска (runlevels) заменены на цели (targets). Однако знание обеих систем важно для администрирования.

1. Традиционные уровни запуска SysVinit (Runlevels): Это числовые обозначения состояния системы. Основные из них:

  • 0 - Остановка системы (halt).
  • 1 или S - Однопользовательский режим (режим восстановления, без сети, с root-доступом).
  • 3 - Многопользовательский режим с сетью (стандартный режим для серверов, без графического интерфейса).
  • 5 - Многопользовательский режим с графическим интерфейсом (стандарт для рабочих станций).
  • 6 - Перезагрузка системы (reboot).

2. Цели (Targets) в systemd: Systemd использует именованные цели, которые могут зависеть друг от друга. Ключевые цели:

  • poweroff.target / runlevel0.target - Аналог runlevel 0 (выключение).
  • rescue.target / runlevel1.target - Аналог runlevel 1 (аварийная оболочка).
  • multi-user.target / runlevel3.target - Аналог runlevel 3 (многопользовательский, текстовый).
  • graphical.target / runlevel5.target - Аналог runlevel 5 (графический интерфейс).
  • reboot.target / runlevel6.target - Аналог runlevel 6 (перезагрузка).
  • default.target - Символическая ссылка на цель по умолчанию (например, на multi-user.target).

Практическое использование в DevOps:

# Просмотр текущей цели по умолчанию (какой runlevel загружается)
systemctl get-default

# Установка цели по умолчанию (например, для сервера без GUI)
sudo systemctl set-default multi-user.target

# Временное переключение в режим восстановления (например, для сброса пароля root)
sudo systemctl isolate rescue.target

# Для совместимости: просмотр и переключение через эмуляцию runlevel
runlevel          # Покажет предыдущий и текущий 'уровень'
sudo telinit 3    # Переключит на multi-user.target

Понимание этих целей критично для настройки серверов, которые должны загружаться в минимально необходимом состоянии (обычно multi-user.target), и для операций восстановления.