/ usr / lib / systemd / system和/ etc / systemd / system之间有什么区别?


43

在所有单位文件都放入之前,/etc/systemd/system/但现在却出现了一些文件/usr/lib/systemd/system(在CentOS上为/lib/systemd/system<-,在Debian / Ubuntu上为<-),这些文件夹之间有什么区别?

Answers:


38

man 7 file-hierarchysystemd随附的问题已经得到解答(也有在线版本):

        /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类型的软件安装或自行编写的脚本。


3
我不愿意点击此Google搜索结果,因为我对/lib/systemd/system vs 感到好奇/usr/lib/systemd/system。我很高兴找到这个答案。
布鲁诺·布鲁诺斯基

1
将服务定义中/etc/systemd/system,如果你掩盖它产生一个错误:Failed to execute operation: Invalid argument; systemd尝试用到/ dev / null的符号链接替换文件。不是说这个答案是错误的,只是要记住一点。
Mrten

@BrunoBronosky Debian的实际使用既/lib/systemd/system /usr/lib/systemd/system,因此我问的问题分开unix.stackexchange.com/questions/550001/...
pevik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.