Что такое уровни выполнения run levels в Linuxdevops-27

Историческая справка

Уровни выполнения (runlevels) — это концепция, унаследованная из System V Init (SysV), которая определяет различные состояния операционной системы. Хотя современные дистрибутивы перешли на systemd, понимание runlevels важно для работы с legacy-системами.

Основные уровни выполнения

Традиционно в Linux существуют 7 основных уровней выполнения (0-6):

УровеньНазначение
0Остановка системы (halt)
1Однопользовательский режим (single-user)
2Многопользовательский без сети
3Многопользовательский с сетью (стандартный для серверов)
4Не используется (пользовательский)
5Многопользовательский с графическим интерфейсом
6Перезагрузка

Как работают runlevels

В SysV init

Каждому уровню соответствуют скрипты в директориях:

/etc/rc0.d/ - для runlevel 0
/etc/rc1.d/ - для runlevel 1
...
/etc/rc6.d/ - для runlevel 6

Скрипты начинающиеся с 'S' (Start) запускаются, с 'K' (Kill) — останавливаются.

Проверка текущего уровня

# В системах с SysV init
who -r

или

runlevel

Смена уровня выполнения

init 3  # Переход в многопользовательский режим без GUI
telinit 5  # Альтернативная команда для перехода в уровень 5

Runlevels в systemd

В systemd runlevels эмулируются через "targets":

УровеньСоответствующий target
0poweroff.target
1rescue.target
2multi-user.target
3multi-user.target
4multi-user.target
5graphical.target
6reboot.target

Команды для работы в systemd

# Просмотр текущего target
systemctl get-default

# Установка default target (аналог runlevel 3)
systemctl set-default multi-user.target

# Временный переход в другой target
systemctl isolate graphical.target

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

Аварийный режим

init 1
# Или в systemd
systemctl rescue

Просмотр служб для уровня

# Для SysV init
ls /etc/rc3.d/

# Для systemd
systemctl list-dependencies multi-user.target

Резюмируем

  1. Традиционные runlevels (0-6) — это состояния системы в SysV init
  2. В systemd они заменены на targets, но сохраняется обратная совместимость
  3. Основные уровни:
    • 0 - остановка
    • 1 - аварийный режим
    • 3 - серверный режим
    • 5 - графический режим
    • 6 - перезагрузка

Современные рекомендации:

  • В systemd используйте systemctl isolate вместо init
  • Для настройки автозагрузки предпочтительнее systemctl enable/disable
  • В скриптах учитывайте, что в разных дистрибутивах могут быть разные реализации