/usr/lib/systemd/system과 /etc/systemd/system의 차이점은 무엇입니까?

/usr/lib/systemd/system과 /etc/systemd/system의 차이점은 무엇입니까?

이전에는 모든 유닛 파일이 있었지만 /etc/systemd/system/지금은 일부 파일이 있습니다 /usr/lib/systemd/system(CentOS의 경우 <- 또는 /lib/systemd/systemDebian/Ubuntu의 경우 <-). 이 폴더의 차이점은 무엇입니까?

답변1

이 질문은 이미 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).

답변2

배경

매뉴얼 페이지를 보면 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을 통해 설치된 모든 패키지를 의미합니다. DEB 파일이 "설치된 패키지"인 Debian/Ubuntu에서도 동일한 상황이 가정될 수 있습니다.

노트:위 표는 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/systemCentOS/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/systemRPM이 소유한 파일을 찾을 수 없을 것으로 예상됩니다(실제로 내 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디렉터리에는 패키지 관리자(YUM/DNF/RPM/APT/etc)가 배치한 시스템 단위 파일만 포함되어야 합니다.

/etc/systemd/system패키지가 아닌 임시 소프트웨어 설치를 위해 시스템 운영자가 파일을 여기에 수동으로 배치합니다. 여기에는 tarball 유형 소프트웨어 설치 또는 homebrew 스크립트가 포함됩니다.

답변3

런타임 파일은 /run/systemd/system재부팅 시 변경/수정 사항을 유지하지 않고 현재 시작 중에 프로세스(유닛)를 수정하는 기능에서 발생합니다.

~에서시스템 제어.1:

--runtime
           When used with enable, disable, edit, (and related commands),
           make changes only temporarily, so that they are lost on the
           next reboot. This will have the effect that changes are not
           made in subdirectories of /etc/ but in /run/, with identical
           immediate effects, however, since the latter is lost on
           reboot, the changes are lost too.

           Similarly, when used with set-property, make changes only
           temporarily, so that they are lost on the next reboot.

데비안 시스템을 사용하여 dpkg-query -S패키지가 있거나 없는 유닛 파일을 찾을 수 있습니다.

관련 정보