Учимся управлять автозагрузкой в linux

Добрый день,

Написанием данной статьи меня побудила банальная задача: отключить графическую оболочку при старте системы. Казалось бы, поменять одну цифру в /etc/inittab. Но как выяснилось, все намного сложнее. Итак, разберем по полочкам, что такое inittab и systemd, для чего они нужны и как управлять автозагрузкой приложений в linux. Как человек, который самостоятельно пытается найти ответы, пришлось прочитать не одну статью, информации на эту тему много, но понимание приходит не сразу. На русскоязычных форумах как правило развернутого ответа нет. Скажу сразу, я не системный администратор и статья больше рассчитана на людей, кто относительно недавно познакомился с linux. Кому интересна данная тема, добро пожаловать.

Это моя первая статья, если есть замечания прошу в комментарии.

Что такое inittab


По сути inittab представляет из себя файл в котором можно посмотреть/поменять уровень загрузки операционной системы в /etc/inittab. Давайте разберем его

# The default runlevel.
id:5:initdefault:
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

В linux существуют 7 уровней загрузки операционной системы. В нашем случае нулевой уровень — это режим восстановления, первый — это запуск в одиночном режиме под root. 2-5 загрузка в мульти пользовательском режиме (т.е. обычный режим). Отличаются они лишь набором стартовых скриптов. 6 уровень это перезагрузка. Скрипты берутся из директорий, которые расписаны в inittab. Наша система по умолчанию загружается на 5 уровне, посмотрим что-же находится в директории /etc/init.d/rc 5:

image

Скрипты в этом каталоге выполняются каждый раз при старте системы. А если быть точнее это лишь символьные ссылки на сами скрипты. Первая буква означает S(start) K(kill или stop) для изменения порядка скриптов меняется цифра, т.е. запуск скриптов выполняется по возрастанию. Руками менять можно, но рекомендуется менять через «update-rc.d»

usage: update-rc.d [-n] [-f] basename remove
       update-rc.d [-n] basename disable|enable [S|2|3|4|5]
                -n: not really
                -f: force

Все просто и прозрачно.

Что такое systemd


Systemd является заменой старой традиционной загрузки inittab. Был разработан чтобы обеспечить лучшую обработку зависимостей. В настоящее время systemd поставляется по умолчанию с популярными дистрибутивами linux таких как Fedora, Mandira, Arch Linux, CentOS 7, Red Hat 7.0 и на удивление для меня в Debian 8.9.

Плюсы и минусы в явном виде для меня не понятны. Интересен в первую очередь функционал. Итак разбираемся дальше. Две вещи, которые нам нужно знать:

Чтобы посмотреть уровень загрузки, введем команду:

root@asterisk:/home/rus# systemctl get-default
graphical.target
root@asterisk:/home/rus# runlevel
N 5

Как правило graphical.target аналог 5 уровня, запуск системы в графическом режиме.
Чтобы посмотреть все доступные нам уровни, введем:

image

проведем аналогию c inittab

Runlevel	Описание Systemd
0	poweroff.target
1	rescue.target
2	multi-user.target
3	multi-user.target
4	multi-user.target
5	graphical.target
6	reboot.target

При старте системы linux смотрит в файл (который является ссылкой)

root@asterisk:/home/rus# ls -la /etc/systemd/system/default.target 
lrwxrwxrwx 1 root root 37 ноя 27 14:45 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

Таким образом чтобы загрузиться в многопользовательском режиме, нам нужно сменить ссылку или использовать systemctl (делает тоже самое)

image

Автозагрузка проложений


Как мы уже поняли в каталогах /etc/rc[0-6].d/* лежат символьные ссылки на скрипты. Где цифры от [0-6] это уровень загрузки у inittab или systemd. Мы можем менять руками порядок запуска, убирать и добавлять. По сути systemd пробежится по всем файлам и попытается их инициализировать при старте системы. Теперь разберем управление через команды:
chkconfig — нужна для просмотра сервисов(программ). Поддерживает режим изменения для любого уровня загрузки.

update-rc.d — служит для запуска/остановки скриптов, при старте/выключении системы. Собственно через нее мы и будем менять автозапуск графической оболочки KDE(kdm). Так уж получилось, что у меня запуск окружения KDE включен для 2-5 уровней по умолчанию.

При старте системы я отключаю 2-4 уровень загрузки и проверяю что у меня стоит 3-й уровень загрузки

image

Перезагружаюсь и вижу приглашение консоли tty. profit

На самом деле, это чуть больше чем консоль. Мы можем переключаться между вкладками.
CTRL+ALT+(F1-F6)

команда startx запустит графику KDE.

Вывод: Тут должен быть вывод, но вместо него я вставлю кота

image

Всем спасибо, кто дочитал.

Список используемой литературы:

ask.xmodulo.com/boot-into-command-line-ubuntu-debian.html
landoflinux.com/linux_runlevels_systemd.html
lpi.bezha.od.ua/change-runlevels
unix.stackexchange.com/questions/210117/how-to-set-up-a-runlevel-3-in-debian-8
Метки:
автозагрузка,linux,inittab,systemd,chkconfig