В чем разница между / usr / lib / systemd / system и / etc / systemd / system?

43

До того, как все файлы модулей были в /etc/systemd/system/наличии, но теперь некоторые отображаются в /usr/lib/systemd/system(<- в CentOS или /lib/systemd/system<- в Debian / Ubuntu), в чем разница между этими папками?

Mehul
источник

Ответы:

38

На этот вопрос уже дан ответ, в man 7 file-hierarchyкоторый входит systemd (есть также онлайн-версия ):

        /etc
           System-specific configuration.
 (…)
 VENDOR-SUPPLIED OPERATING SYSTEM RESOURCES
       /usr
            Vendor-supplied operating system resources. 
            Usually read-only, but this is not required. Possibly 
            shared between multiple hosts. This directory should not
            be modified by the administrator, except when installing 
            or removing vendor-supplied packages.

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

Специфичные для системы единицы перекрывают единицы, поставляемые поставщиками. Используя вставки, вы можете переопределить только определенные части файлов модулей, оставляя остальную часть поставщику (вставки доступны с самого начала systemd, но были должным образом задокументированы только в v219; см. man systemd.unit).

Мирек Длугош
источник
20

Задний план

Если вы посмотрите на справочную страницу, у man systemd.unitнее есть таблица, которая объясняет различия. Это из системы CentOS 7.x.

   UNIT LOAD PATH
          Unit files are loaded from a set of paths determined during 
          compilation, described in the two tables below. Unit files found 
          in directories listed earlier override files with the same name 
          in directories lower in the list.

           Table 1.  Load path when running in system mode (--system).
           ┌────────────────────────┬─────────────────────────────┐
           │Path                    │ Description                 │
           ├────────────────────────┼─────────────────────────────┤
           │/etc/systemd/system     │ Local configuration         │
           ├────────────────────────┼─────────────────────────────┤
           │/run/systemd/system     │ Runtime units               │
           ├────────────────────────┼─────────────────────────────┤
           │/usr/lib/systemd/system │ Units of installed packages │
           └────────────────────────┴─────────────────────────────┘

Когда они говорят «установленные пакеты», они имеют в виду все, что было установлено через RPM. То же самое можно предположить и для Debian / Ubuntu, где файл DEB будет «установленным пакетом».

ПРИМЕЧАНИЕ: приведенная выше таблица для системы Debian / Ubuntu немного отличается.

 Table 1.  Load path when running in system mode (--system).
       ┌────────────────────┬─────────────────────────────┐
       │Path                │ Description                 │
       ├────────────────────┼─────────────────────────────┤
       │/etc/systemd/system │ Local configuration         │
       ├────────────────────┼─────────────────────────────┤
       │/run/systemd/system │ Runtime units               │
       ├────────────────────┼─────────────────────────────┤
       │/lib/systemd/system │ Units of installed packages │
       └────────────────────┴─────────────────────────────┘

Анализ /usr/lib/systemd/system

Вы можете сказать, каким пакетам принадлежат какие файлы модулей, /usr/lib/systemd/systemнапример, в системе CentOS / Fedora / RHEL:

$ rpm -qf /usr/lib/systemd/system/* |sort -u | head
abrt-2.1.11-50.el7.centos.x86_64
abrt-addon-ccpp-2.1.11-50.el7.centos.x86_64
abrt-addon-kerneloops-2.1.11-50.el7.centos.x86_64
abrt-addon-pstoreoops-2.1.11-50.el7.centos.x86_64
abrt-addon-vmcore-2.1.11-50.el7.centos.x86_64
abrt-addon-xorg-2.1.11-50.el7.centos.x86_64
accountsservice-0.6.45-7.el7.x86_64
acpid-2.0.19-8.el7.x86_64
alsa-utils-1.1.3-2.el7.x86_64
anaconda-core-21.48.22.134-1.el7.centos.x86_64

Анализ /etc/systemd/system

Если мы сделаем то же самое против /etc/systemd/system, мы ожидаем, что не найдем файлов, принадлежащих RPM (что на самом деле имеет место в моей системе CentOS 7.x.):

$ rpm -qf /etc/systemd/system/* /etc/systemd/system/*/* | grep -v 'not owned'
$

Выпадающие

Имейте в виду, что в некоторых случаях вы можете найти случайные файлы /usr/lib/systemd/system, такие как Virtualbox (vboxadd *):

$ rpm -qf /usr/lib/systemd/system/* |sort -u | grep 'not owned'
file /usr/lib/systemd/system/initrd.target.wants is not owned by any package
file /usr/lib/systemd/system/shutdown.target.wants is not owned by any package
file /usr/lib/systemd/system/vboxadd.service is not owned by any package
file /usr/lib/systemd/system/vboxadd-service.service is not owned by any package
file /usr/lib/systemd/system/vboxadd-x11.service is not owned by any package

Есть и другие.

Выводы

Предполагается, что /usr/lib/systemd/systemэто каталог, который должен содержать только файлы модулей systemd, которые были помещены туда менеджером пакетов (YUM / DNF / RPM / APT / etc).

Файлы в /etc/systemd/systemразмещаются здесь вручную оператором системы для специальных программных установок, которые не имеют форму пакета. Это будет включать установку программного обеспечения типа tarball или сценарии собственного производства.

SLM
источник
3
Я не хотел нажимать на этот результат Google, потому что мне было интересно, /lib/systemd/system против /usr/lib/systemd/system. Я рад, что нашел этот ответ.
Бруно Броноски
1
Размещение определения службы в /etc/systemd/systemгенерирует ошибку, если вы маскируете ее Failed to execute operation: Invalid argument:; systemd пытается заменить файл символической ссылкой на / dev / null. Не сказать, что этот ответ неправильный, просто что-то, чтобы запомнить.
Мртен
@BrunoBronosky Debian фактически использует оба, /lib/systemd/system и /usr/lib/systemd/system поэтому я задал вопрос отдельно unix.stackexchange.com/questions/550001/…
pevik