До того, как все файлы модулей были в /etc/systemd/system/
наличии, но теперь некоторые отображаются в /usr/lib/systemd/system
(<- в CentOS или /lib/systemd/system
<- в Debian / Ubuntu), в чем разница между этими папками?
На этот вопрос уже дан ответ, в 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
).
Если вы посмотрите на справочную страницу, у 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 или сценарии собственного производства.
/lib/systemd/system
против/usr/lib/systemd/system
. Я рад, что нашел этот ответ./etc/systemd/system
генерирует ошибку, если вы маскируете ееFailed to execute operation: Invalid argument
:; systemd пытается заменить файл символической ссылкой на / dev / null. Не сказать, что этот ответ неправильный, просто что-то, чтобы запомнить./lib/systemd/system
и/usr/lib/systemd/system
поэтому я задал вопрос отдельно unix.stackexchange.com/questions/550001/…