Sự khác biệt giữa / usr / lib / systemd / system và / etc / systemd / system là gì?


43

Trước đây tất cả các tệp đơn vị đã có /etc/systemd/system/nhưng bây giờ một số tệp đang hiển thị trong /usr/lib/systemd/system(<- trên CentOS hoặc /lib/systemd/system<- trên Debian / Ubuntu), sự khác biệt giữa các thư mục này là gì?

Câu trả lời:


38

Câu hỏi này đã được trả lời trong man 7 file-hierarchyđó đi kèm với systemd (cũng có phiên bản trực tuyến ):

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

Về cơ bản, các tệp gửi trong các gói được tải xuống từ kho phân phối đi vào /usr/lib/systemd/. Sửa đổi được thực hiện bởi quản trị viên hệ thống (người dùng) đi vào /etc/systemd/system/.

Các đơn vị cụ thể hệ thống ghi đè các đơn vị được cung cấp bởi các nhà cung cấp. Sử dụng các phần bổ trợ, bạn chỉ có thể ghi đè các phần cụ thể của các tệp đơn vị, phần còn lại cho nhà cung cấp (phần bổ sung có sẵn kể từ khi bắt đầu systemd, nhưng chỉ được ghi lại đúng cách trong v219; xem man systemd.unit).


20

Lý lịch

Nếu bạn nhìn vào trang người đàn ông, man systemd.unitnó có một bảng giải thích sự khác biệt. Đây là từ hệ thống 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 │
           └────────────────────────┴─────────────────────────────┘

Khi họ nói "các gói đã cài đặt", họ đang đề cập đến bất cứ thứ gì được cài đặt thông qua RPM. Điều tương tự cũng có thể được giả sử đối với Debian / Ubuntu, trong đó tệp DEB sẽ là "gói đã cài đặt".

LƯU Ý: bảng trên từ hệ thống Debian / Ubuntu hơi khác nhau.

 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 │
       └────────────────────┴─────────────────────────────┘

Phân tích /usr/lib/systemd/system

Bạn có thể cho biết các gói sở hữu tập tin đơn vị /usr/lib/systemd/systemnào như thế này trên hệ thống 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

Phân tích /etc/systemd/system

Nếu chúng tôi làm điều tương tự /etc/systemd/system, chúng tôi hy vọng sẽ không tìm thấy tệp nào thuộc sở hữu của RPM (thực tế là trường hợp trên hệ thống CentOS 7.x của tôi.):

$ rpm -qf /etc/systemd/system/* /etc/systemd/system/*/* | grep -v 'not owned'
$

Ngoại lệ

Hãy nhớ rằng bạn có thể tìm thấy các tệp đi lạc thường xuyên bên dưới /usr/lib/systemd/system, chẳng hạn như với 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

Co nhung nguoi khac.

Kết luận

Kỳ vọng là /usr/lib/systemd/systemmột thư mục chỉ chứa các tệp đơn vị systemd được đặt bởi trình quản lý gói (YUM / DNF / RPM / APT / etc).

Các tập tin /etc/systemd/systemđược đặt thủ công ở đây bởi nhà điều hành hệ thống để cài đặt phần mềm đặc biệt không ở dạng gói. Điều này sẽ bao gồm cài đặt phần mềm loại tarball hoặc tập lệnh phát triển tại nhà.


3
Tôi đã miễn cưỡng để nhấp vào kết quả google này bởi vì tôi đã tò mò về /lib/systemd/system vs /usr/lib/systemd/system. Tôi rất vui vì tôi đã tìm thấy câu trả lời này.
Bruno Bronosky

1
Đặt một định nghĩa dịch vụ /etc/systemd/systemsẽ tạo ra lỗi nếu bạn che giấu nó : Failed to execute operation: Invalid argument; systemd cố gắng thay thế tệp bằng symlink thành / dev / null. Không nói câu trả lời này là không chính xác, chỉ cần một cái gì đó để nhớ.
Mrten

@BrunoBronosky Debian thực sự sử dụng cả hai /lib/systemd/system /usr/lib/systemd/system do đó tôi đã đặt câu hỏi riêng biệt unix.stackexchange.com/questions/550001/ Lỗi
pevik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.