Алексей Федорчук
Эта серия шпаргалок сочинялась года полтора назад по вполне конкретному поводу — в связи с борьбой за русификацию консоли в тогдашней версии openSUSE (и была размещена на соответствующем сайте). Здесь размещается вторая версия, подвергнутая минимальной правке — просто дабы не бегать по сайтам и не вспоминать, когда что-то понадобится. Не смотря на возраст, большая часть этих шпаргалок, насколько я понимаю, на рецептурном уровне сохраняет актуальность.
- Вступление
- Управление системными службами
- Цели вместо runlevels
- Цель по умолчанию
- Сервисы — определение статуса
- Сервисы — маскировка и демаскировка
- Запуск сетевых служб
Содержание
Вступление
Как известно, товарищ Ульянов в скобках Ленин применительно к НЭПу сказал, что это всерьёз и надолго. Правда, обычно забывают, что это он просто процитировал слова товарища Осинского, с которым у них возникли разногласия по поводу количественного определения понятия надолго, но это другая история.
История же наша заключается в том, что systemd
, подобно НЭПу, пришёл в большинство широко распространённых дистрибутивов Linux всерьёз и надолго (правда, в оценке величины надолго мнения тут расходятся ещё сильней, чем у Ленина с Осинским). И применителям их с этим придётся считаться — по крайней мере, на шпаргалочном уровне. Именно такой набор шпаргалок, правда, весьма ограниченный, и собран на этой странице. В своё время он позволил мне пересидеть угар НЭПа — и кто знает, не окажется ли востребованным вновь?
Все примеры команд, приводимые далее, требуют прав администратора, что символизируется соответствующим видом приглашения командной строки #
.
Управление системными службами
Управление системными службами (они же сервисы или демоны) включает их запуск, остановку, перезапуск и тому подобные манипуляции. В рамках systemd все они выполняются с помощью команды systemctl
. Она требует указания субкоманды и её аргумента — имени управляемой службы.
Запуск службы осуществляется с помощью субкоманды start
. Например, для запуска службы консольной мыши нужно выполнить это:
# systemctl start gpm.service
А прекратить её выполнение — субкомандой stop
:
# systemctl stop gpm.service
Для перезапуска службы используется субкоманда restart
:
# systemctl restart gpm.service
В то же время для некоторых служб иногда достаточно перечитать их конфигурационный файл, без перезапуска процесса; в этом случае применяется субкоманда reload
. Например, при изменении консольной раскладки клавиатуры или шрифта вывода в консоли можно ограничиться командой
# systemctl reload kbd.service
Действие субкоманд start
и stop
ограничивается текущим сеансом. Если требуется запуск или остановка некоей службы после рестарта системы, следует использовать субкоманды enable
и disable
, соответственно. Например, команда
# systemctl enable gpm.service
сделает доступной службу консольной мыши после перезагрузки системы, а
# systemctl disable gpm.service
напротив, отключит её в следующем сеансе.
Таким образом, управление службами через systemd осуществляется почти также, как и при «старом режиме», когда использовалась команда service
. Разница только в синтаксисе (субкоманда нынче указывается не в конце конструкции, а перед аргументом, что отражает прогрессивность НЭПа) и в том, что имя службы теперь сопровождается суффиксом *.service
— для тренировки пальцев. Хотя, справедливости ради, надо отметить, что в Zsh (и, вероятно, в Bash) для аргументов команды systemctl
работает автодополнение.
И в заключение добавлю, что пока использование команды service
для управления службами также не запрещается.
Цели вместо runlevels
В менеджере инициализации systemd вместо уровней запуска (runlevels), которые Linux унаследовал от SysV первозданного UNIX’а, используются так называемые цели (targets). Подобно уровням запуска, они объединяют в себе наборы стартовых служб некоторого назначения. Однако, в отличие от runlevels, которых, как известно, существует всего семь, целей в systemd определено великое множество — полный их список можно просмотреть командой
$ ls /lib/systemd/system/*.target
Из всего этого богачества по умолчанию (по крайней мере, в openSUSE времён сочинения первой версии этих шпаргалок) задействованы следующие цели:
poweroff.target
— выключение системы (аналог runlevel 0);reboot.target
— перезагрузка системы (аналог runlevel 6);rescue.target
— спасательный режим (аналог single user mode, runlevel 1);multi-user.target
— консольный многопользовательский режим с поддержкой сети (аналог runlevel 3);graphical.target
— запуск в графическом режиме (аналог runlevel 5).
Переключаться между целями (то есть соответствующими режимами) можно с помощью всё той же команды systemctl
с указанием субкоманды isolate
и аргумента — имени цели. Например, команда
# systemctl isolate rescue.target
переведёт систему в однопользовательский режим с автоматическим закрытием Иксового сеанас и всех запущенных в нём приложений. Вернуться к нормальной работе можно, как легко догадаться, командой
# systemctl isolate graphical.target
Впрочем, пока не возбраняется и использование команды telinit
с указанием уровня запуска как аргумента. Например, того же результата — перехода в однопользовательский режим — можно добиться и так:
# telinit 1
А для возврата взад можно использовать и
# telinit 5
Здесь нужно только помнить, что по умолчанию аналог runlevel 2 (многопользовательский режим без поддержки сети) в openSUSE не задействован. Это можно изменить, переопределив символическую ссылку /lib/systemd/system/runlevel2.target
— как именно, оставляю для изучения заинтересованным лицам.
Цель по умолчанию
Для определения цели при старте системы в systemd служит специальная символическая ссылка — /lib/systemd/system/default.target
. По умолчанию она указывает на /lib/systemd/system/graphical.target
, благодаря чему openSUSE, например, запускается в графическом режиме (аналог runlevel 5). Если это почему-либо не устраивает, стартовую цель легко изменить, переопределив указанную ссылку. Например, после команды
# ln -sf /lib/systemd/system/multi-user.target /lib/systemd/system/default.target
система будет стартовать в консольном многопользовательском режиме (аналог runlevel 3). Обращаю внимание на опцию -f
, обеспечивающую принудительное переопределение символической ссылки — без неё последует сообщение об ошибке.
В ряде дистрибутивов (а возможно, и во всех) сохраняется файл /etc/inittab
, описывающий уровни запуска в терминах SysV. Однако его редактирование ныне не даёт никакого эффекта: изменить режим запуска по умолчанию можно только указанным выше способом.
Сервисы — определение статуса
Прежде чем управлять чем-либо, неплохо бы выяснить, чем можно управлять. И сделать это можно командой
$ ls /lib/systemd/system/*.service
в openSUSE 12.2, или
$ ls /usr/lib/systemd/system/*.service
в релизе 12.3, в котором, в соответствие с катехизисом systemd, из корня файловой иерархии в каталог /usr
было перенесено из всё, что можно.
А вот теперь можно и получить информацию о состоянии сервиса — с помощью команды
$ systemctl status имя_сервиса
Например, для активированной службы консольной мыши это будет выглядеть примерно так:
$ systemctl status gpm.service gpm.service - LSB: Console mouse support Loaded: loaded (/etc/init.d/gpm) Active: active (running) since Sat, 23 Feb 2013 06:24:31 +0400; 19h ago Process: 949 ExecStart=/etc/init.d/gpm start (code=exited, status=0/SUCCESS) CGroup: name=systemd:/system/gpm.service └ 958 /usr/sbin/gpm -m /dev/input/mice -t ps2
Однако некоторые службы могут быть маскированы, и настроить их обычными методами результата не дадут.
Сервисы — маскировка и демаскировка
Только что я говорил об отключении традиционной службы настройки консольного шрифта и раскладки — kbd.service
. В частности, на момент сочинения первой версии это относилось к службе kbd.service
, почему в то время и не получалось просто настроить консольный шрифт и раскладку клавиатуры. Позднее эта проблема была решена «костыльным» методом, а сейчас, возможно и всамделишним, но к тому времени период НЭПа для меня уже закончился. Так что просто вкратце скажу о командах маскирования и демаскирования — вдруг это когда-нибудь потребуется.
Демаскирование отключённой службы выполняется так:
# systemctl unmask kbd.service rm '/etc/systemd/system/kbd.service'
Как можно видеть из её вывода, при этом произойдёт удаление символической ссылки kbd.service
на устройство /dev/null
, и оно будет перманентным. До тех пор, пока соответствующую службу не потребуется замаскировать снова:
# systemctl mask kbd.service ln -s '/dev/null' '/etc/systemd/system/kbd.service'
Чем будет совершена обратная операция — создание симлинка kbd.service
на /dev/null
.
Маскирование — «сильный» способ отключения сервиса, так как оно запрещает все виды его активации, в том числе и вручную. Кроме, разумеется, только что описанного демаскирования.
Запуск сетевых служб
Некогда, занимаясь установкой openSUSE 12.3 с LiveCD, я после первого рестарта обнаружил отсутствие сети, хотя при установке той же версии с так называемого Rescue CD никаких проблем с сетью не наблюдалось. Пришлось проявлять солдатскую смекалку, что и вызвало к жизни эту шпаргалку.
В сущности, сетевая служба, сиречь Network Manager, запускается, как и любая другая. То есть командой:
# systemctl start NetworkManaget.service
После чего сеть появляется, и значок в панели оживает. А чтобы он не умер после перезагрузки системы, это дело надо увековечить:
# systemctl enable NetworkManaget.service
Всё, конечно, просто. Вот только как мы раньше без этого обходились? И зачем надо было это придумывать?