Как проверить, заблокирована ли системная служба в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, заблокирована ли системная служба в Linux с использованием systemd. Блокировка (маскировка) службы препятствует ее запуску, что является ключевым понятием для управления системой и устранения неполадок. Вы будете использовать команду systemctl is-masked для проверки статуса блокировки (маскировки) конкретных служб и команду systemctl list-unit-files для получения более широкого обзора файлов юнитов systemd. В конце вы изучите каталоги конфигурации systemd, чтобы понять, где хранятся эти настройки.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") subgraph Lab Skills linux/ls -.-> lab-558770{{"Как проверить, заблокирована ли системная служба в Linux"}} linux/less -.-> lab-558770{{"Как проверить, заблокирована ли системная служба в Linux"}} linux/cd -.-> lab-558770{{"Как проверить, заблокирована ли системная служба в Linux"}} linux/service -.-> lab-558770{{"Как проверить, заблокирована ли системная служба в Linux"}} end

Проверка статуса блокировки (маскировки) службы с помощью команды systemctl is-masked

На этом этапе мы начнем изучать systemd — систему и менеджер служб в современных дистрибутивах Linux, таких как Ubuntu. systemd отвечает за запуск, остановку и управление службами (например, веб-серверами, базами данных и т.д.) и другими системными ресурсами.

Одним из важных понятий в systemd является "блокировка" (маскировка) службы. Блокировка (маскировка) службы препятствует ее запуску, даже вручную или другими службами. Это способ полностью отключить службу.

Мы можем проверить, заблокирована ли служба, используя команду systemctl is-masked. Давайте проверим статус распространенной службы apache2. Apache — это популярный веб-сервер.

Откройте терминал, если он еще не открыт. Помните, что вы можете найти значок Xfce Terminal слева на рабочем столе.

Введите следующую команду и нажмите Enter:

systemctl is-masked apache2

Вы должны увидеть вывод, похожий на следующий:

inactive

Этот вывод показывает, что служба apache2 не заблокирована (не маскирована). Если бы она была заблокирована, вывод был бы masked.

Давайте попробуем проверить службу, которая обычно по умолчанию заблокирована в этой среде, например systemd-udevd-kernel.socket. Это низкоуровневая системная служба.

Введите следующую команду и нажмите Enter:

systemctl is-masked systemd-udevd-kernel.socket

Вывод должен быть следующим:

masked

Это подтверждает, что служба systemd-udevd-kernel.socket действительно заблокирована (маскирована).

Понимание того, заблокирована ли служба, является важным аспектом при устранении неполадок и управлении системой. Если служба не запускается, проверка ее статуса блокировки (маскировки) часто является одним из первых шагов.

Нажмите Продолжить, чтобы перейти к следующему этапу.

Вывод списка файлов юнитов с помощью команды systemctl list-unit-files

На предыдущем этапе мы использовали команду systemctl is-masked для проверки статуса отдельных служб. Теперь давайте посмотрим более широко на все файлы юнитов, о которых знает systemd.

systemd управляет различными типами "юнитов" (units), которые представляют собой конфигурационные файлы, определяющие службы, точки монтирования, устройства, сокеты и многое другое. Наиболее распространенным типом является юнит с расширением .service, который определяет, как запускать фоновый процесс (службу).

Команда systemctl list-unit-files отображает список всех установленных файлов юнитов и их состояние "включенности" (enable state). Состояние включенности показывает, настроен ли юнит на автоматический запуск при загрузке системы.

Введите следующую команду в терминале и нажмите Enter:

systemctl list-unit-files

Эта команда выведет длинный список файлов юнитов. Вывод будет выглядеть приблизительно так (показан только небольшой фрагмент):

UNIT FILE                                  STATE
proc-sys-fs-binfmt_misc.automount          static
dev-hugepages.mount                        static
dev-mqueue.mount                           static
proc-sys-fs-binfmt_misc.mount              static
sys-fs-fuse-connections.mount              static
sys-kernel-config.mount                    static
sys-kernel-debug.mount                     static
sys-kernel-tracing.mount                   static
...
apache2.service                            disabled
...

Вывод состоит из двух столбцов:

  • UNIT FILE: Имя файла юнита (например, apache2.service).
  • STATE: Состояние включенности юнита (например, static, enabled, disabled, masked).

Вот краткое объяснение некоторых общих состояний:

  • enabled: Юнит настроен на автоматический запуск при загрузке системы.
  • disabled: Юнит не настроен на автоматический запуск при загрузке системы.
  • static: Юнит не может быть включен или выключен; его запуск контролируется другим юнитом.
  • masked: Юнит полностью отключен и не может быть запущен.

Вы можете прокручивать вывод с помощью полосы прокрутки терминала или перенаправить вывод в постраничный просмотрщик, такой как less. Например:

systemctl list-unit-files | less

Внутри less вы можете использовать стрелки для прокрутки, нажать пробел, чтобы перейти на следующую страницу, и нажать q, чтобы выйти.

Эта команда очень полезна для того, чтобы увидеть, какие службы установлены на вашей системе и как они настроены на запуск.

Нажмите Продолжить, чтобы перейти дальше.

Просмотр конфигурации systemd в каталоге /etc/systemd

На предыдущих этапах мы использовали команду systemctl для взаимодействия с systemd. Теперь давайте посмотрим, где systemd хранит свои конфигурационные файлы.

Основной каталог для конфигурационных файлов systemd - это /etc/systemd. В этом каталоге есть подкаталоги для различных типов файлов юнитов и параметров конфигурации.

Давайте выведем список содержимого каталога /etc/systemd с помощью команды ls. Помните, что /etc - это стандартный каталог в Linux для хранения конфигурационных файлов.

Введите следующую команду в терминале и нажмите Enter:

ls /etc/systemd/

Вы увидите список каталогов и файлов, похожий на следующий:

journald.conf  logind.conf  networkd.conf  resolved.conf  system  system.conf  timesyncd.conf  user  user.conf

Самым важным подкаталогом здесь является /etc/systemd/system. Именно здесь часто размещаются или создаются ссылки на системные файлы юнитов. Давайте посмотрим, что находится внутри этого каталога.

Перейдите в текущий каталог /etc/systemd/system с помощью команды cd.

cd /etc/systemd/system

Теперь выведите список содержимого этого каталога:

ls

Вы увидите список файлов и каталогов, многие из которых являются символическими ссылками (->), указывающими на реальные файлы юнитов, расположенные в другом месте (чаще всего в /lib/systemd/system). Именно таким образом службы включаются или отключаются - путем создания или удаления этих символических ссылок.

Например, вы можете увидеть что-то вроде этого:

multi-user.target.wants -> /lib/systemd/system/multi-user.target.wants
sockets.target.wants -> /lib/systemd/system/sockets.target.wants
...

Каталоги с суффиксом .wants содержат символические ссылки на службы, которые должны быть запущены при достижении соответствующего целевого состояния (target). Например, multi-user.target.wants содержит ссылки на службы, которые должны запускаться, когда система находится в многопользовательском режиме (например, после загрузки).

Давайте посмотрим, что находится внутри каталога multi-user.target.wants.

ls multi-user.target.wants/

Вы увидите список служб, которые настроены на запуск в многопользовательском режиме.

anacron.service -> ../anacron.service
apache2.service -> ../../apache2.service
...

Это показывает, что apache2.service имеет ссылку здесь, что означает, что она настроена на запуск в многопользовательском режиме.

Изучение каталога /etc/systemd/system помогает понять, как systemd организовывает и управляет службами на вашей системе.

Нажмите Продолжить, чтобы завершить этот практический урок.

Резюме

В этом практическом уроке мы начали изучать systemd в Linux, сосредоточившись на том, как определить, является ли системная служба "заблокированной" (masked). Блокировка службы - это метод полного отключения ее работы, предотвращающий ее запуск в любых обстоятельствах. Мы научились использовать команду systemctl is-masked для проверки статуса блокировки конкретных служб и обнаружили, что служба apache2 не была заблокирована, в то время как systemd-udevd-kernel.socket была заблокирована. Понимание статуса блокировки служб является фундаментальным этапом при устранении проблем с запуском служб.

Затем мы перешли к использованию команды systemctl list-unit-files для получения более широкого представления о всех файлах юнитов, управляемых systemd. Файлы юнитов - это конфигурационные файлы, представляющие различные системные ресурсы и службы. Эта команда предоставляет полный список юнитов и их состояний, давая более широкую картину конфигурации системы, чем проверка отдельных служб.