ความแตกต่างระหว่าง / usr / lib / systemd / system และ / etc / systemd / system คืออะไร?


43

ก่อนที่ไฟล์หน่วยทั้งหมดจะอยู่ใน/etc/systemd/system/แต่ตอนนี้บางไฟล์แสดงขึ้นใน/usr/lib/systemd/system(<- บน CentOS หรือ/lib/systemd/system<- บน Debian / Ubuntu) ความแตกต่างระหว่างโฟลเดอร์เหล่านี้คืออะไร

คำตอบ:


38

คำถามนี้ได้รับคำตอบแล้ว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)


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 unit เท่านั้นซึ่งถูกจัดการโดย package manager (YUM / DNF / RPM / APT / etc)

ไฟล์ใน/etc/systemd/systemถูกวางไว้ที่นี่โดยผู้ดำเนินการของระบบสำหรับการติดตั้งซอฟต์แวร์แบบเฉพาะกิจที่ไม่ได้อยู่ในรูปแบบของแพคเกจ ซึ่งจะรวมถึงการติดตั้งซอฟต์แวร์ประเภท tarball หรือสคริปต์ที่ปลูกเอง


3
ผมก็เต็มใจที่จะคลิกผลการค้นหาของ Google นี้เพราะผมอยากรู้เกี่ยวกับ/lib/systemd/system /usr/lib/systemd/systemฉันดีใจที่พบคำตอบนี้
Bruno Bronosky

1
การวางคำจำกัดความบริการในการ/etc/systemd/systemสร้างข้อผิดพลาดหากคุณปิดบัง: Failed to execute operation: Invalid argument; systemd พยายามแทนที่ไฟล์ด้วย symlink เป็น / dev / null การไม่พูดคำตอบนี้ไม่ถูกต้องมีเพียงสิ่งที่ต้องจำ
Mrten

@BrunoBronosky Debian ใช้จริงทั้งสอง/lib/systemd/system และ /usr/lib/systemd/systemดังนั้นฉันถามคำถามแยกunix.stackexchange.com/questions/550001/...
pevik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.