Answers:
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类型的软件安装或自行编写的脚本。
/etc/systemd/system
,如果你掩盖它产生一个错误:Failed to execute operation: Invalid argument
; systemd尝试用到/ dev / null的符号链接替换文件。不是说这个答案是错误的,只是要记住一点。
/lib/systemd/system
和 /usr/lib/systemd/system
,因此我问的问题分开unix.stackexchange.com/questions/550001/...
/lib/systemd/system
vs 感到好奇/usr/lib/systemd/system
。我很高兴找到这个答案。