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


43

모든 유닛 파일이 들어 /etc/systemd/system/갔지만 이제 일부 파일이 /usr/lib/systemd/system(<OS에서 /lib/systemd/system<- 또는 <-에서 Debian / Ubuntu)에 나타나기 전에이 폴더의 차이점은 무엇입니까?

답변:


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/.

시스템 별 장치는 공급 업체가 제공 한 장치보다 우선합니다. 드롭 인을 사용하면 단위 파일의 특정 부분 만 무시하고 나머지는 공급 업체에 남겨 둘 수 있습니다 (드롭 인은 시스템이 처음 시작된 이후에 사용 가능하지만 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을 통해 설치된 것을 말합니다. DEB 파일이 "설치된 패키지"인 데비안 / 우분투에서도 마찬가지입니다.

참고 : 데비안 / 우분투 시스템의 위 표는 약간 다릅니다.

 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/systemVirtualbox (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 / 등)에 의해 거기에 넣어했다 systemd 유닛 파일을 포함해야 디렉토리입니다.

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


3
/lib/systemd/system vs. 에 대해 궁금해서이 Google 검색 결과를 클릭하는 것을 꺼 렸습니다 /usr/lib/systemd/system. 이 답변을 찾았습니다.
Bruno Bronosky

1
/etc/systemd/system마스크하면 서비스 정의를 배치 하면 오류 가 발생합니다. Failed to execute operation: Invalid argument; systemd는 파일을 / dev / null에 대한 심볼릭 링크로 바꾸려고 시도합니다. 이 답변이 정확하지 않다는 것만 기억하십시오.
Mrten

@BrunoBronosky 데비안은 실제로 모두를 사용 /lib/systemd/system 하고 /usr/lib/systemd/system , 따라서 내가 따로 질문을, unix.stackexchange.com/questions/550001/...
pevik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.