Где расположены модули/ службы systemd в Ubuntu?

Я продолжаю искать в Google, что они находятся в / usr / lib /systemd / system / и / etc /systemd / system /. Однако в моей ubuntu первый даже не существует, а у другого есть только несколько сервисов

bluetooth.target.wants                      default.target.wants           hybrid-sleep.target.wants    shutdown.target.wantsdbus-org.bluez.service                      display-manager.service        multi-user.target.wants      sockets.target.wantsdbus-org.freedesktop.Avahi.service          display-manager.service.wants  network-online.target.wants  suspend.target.wantsdbus-org.freedesktop.ModemManager1.service  getty.target.wants             paths.target.wants           sysinit.target.wantsdbus-org.freedesktop.nm-dispatcher.service  graphical.target.wants         plexmediaserver.service      syslog.servicedbus-org.freedesktop.thermald.service       hibernate.target.wants         printer.target.wants         timers.target.wants

Где остальные?

Когда я запускаю systemctl list-units, я вижу так много служб, но я не знаю, где их найти. Например, где находится мой plexmediaserver.service? Мне нужно знать, потому что именно там я хочу разместить свои другие подразделения.

Все служебные файлы, предоставляемые пакетом, обычно находятся в /lib/systemd/system. Например, искать .service в индексе пакета.

От man systemd.unit:

/etc/systemd/system/*/run/systemd/system/*/lib/systemd/system/*...$XDG_CONFIG_HOME/systemd/user/*$HOME/.config/systemd/user/*/etc/systemd/user/*$XDG_RUNTIME_DIR/systemd/user/*/run/systemd/user/*$XDG_DATA_HOME/systemd/user/*$HOME/.local/share/systemd/user/*/usr/lib/systemd/user/*

Последние предназначены для пользовательских сеансов. IIRC Ubuntu 16.04 по-прежнему использует upstart для пользовательских сеансов, поэтому эти файлы применимы только после 16.04.

Для конкретной службы, чтобы увидеть, что читает systemd, запустите systemctl status <service> или systemctl show <service>:

$ systemctl show ssh.service | grep PathFragmentPath=/lib/systemd/system/ssh.serviceDropInPaths=/etc/systemd/system/ssh.service.d/override.conf$ systemctl status ssh.service● ssh.service - OpenBSD Secure Shell server   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)  Drop-In: /etc/systemd/system/ssh.service.d           └─override.conf   Active: active (running) since Thu 2017-01-26 16:06:53 JST; 21h ago Main PID: 948 (sshd)   CGroup: /system.slice/ssh.service           └─948 /usr/sbin/sshd -D

Есть хорошие инструменты, о которых нужно знать всякий раз, когда вам нужно что-то найти.

Первый - это locate, который используется для поиска файлов по имени. Он использует предварительно созданный индекс, поэтому работает очень быстро. Однако иногда он пропускает новые файлы, которые не были проиндексированы, или может также пропускать файлы с ограничительными разрешениями. В этом случае быстрый locate команда найдет все файлы systemd в Ubuntu:

locate systemd

Если вы хотите сосредоточиться на этом файле Plex, вы можете использовать канал для фильтрации результатов:

locate systemd | grep plex

Другой инструмент, о котором нужно знать, - это find, который выполняет поиск в реальном времени по определенному каталогу для поиска файлов. В нем есть много вариантов. Проверять man find для получения более подробной информации. Чтобы искать plexmediaserver.service в любом месте вашей системы вы бы использовали:

find / -name plexmediaserver.service

Наконец, в этом случае вы, вероятно, знаете, какой пакет что файл, который вы ищете, принадлежит. Если вы не уверены в точном имени пакета, вы можете использовать этот синтаксис, чтобы найти все пакеты, которые содержат 'plex' в своем названии:

dpkg -l '*plex*'

Если вы обнаружите, что интересующий вас пакет называется "plexmediaserver", то вы можете использовать этот синтаксис для перечисления всех файлов в этом пакете:

dpkg -L plexmediaserver

Опять же, вы можете использовать канал для фильтрации результатов только для того служебного файла, который вы ищете:

dpkg -L plexmediaserver | grep plexmediaserver.service

Теперь вы сможете найти файлы для многих распространенных случаев.

С помощью systemd-analyze команда:

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

systemd-analyze --user unit-paths

Я предпочитаю systemd-analyze --global unit-paths

Все папки, которые могут содержать система услуги:

systemd-analyze --system unit-paths

Видеть: manpage

Три команды для трех каталогов, найденных в man systemd :

$ pkg-config systemd --variable=systemdsystemunitdir/lib/systemd/system$ pkg-config systemd --variable=systemdsystemconfdir/etc/systemd/system$ pkg-config systemd --variable=systemduserconfdir/etc/systemd/user

Я использую Ubuntu 20.04

Бонусное примечание: systemctl status <service> производит более удобочитаемый вывод, тогда как systemctl show <service> выдает более низкоуровневый вывод, читаемый программой