ก่อนที่ไฟล์หน่วยทั้งหมดจะอยู่ใน/etc/systemd/system/
แต่ตอนนี้บางไฟล์แสดงขึ้นใน/usr/lib/systemd/system
(<- บน CentOS หรือ/lib/systemd/system
<- บน Debian / Ubuntu) ความแตกต่างระหว่างโฟลเดอร์เหล่านี้คืออะไร
ก่อนที่ไฟล์หน่วยทั้งหมดจะอยู่ใน/etc/systemd/system/
แต่ตอนนี้บางไฟล์แสดงขึ้นใน/usr/lib/systemd/system
(<- บน CentOS หรือ/lib/systemd/system
<- บน Debian / Ubuntu) ความแตกต่างระหว่างโฟลเดอร์เหล่านี้คืออะไร
คำตอบ:
คำถามนี้ได้รับคำตอบแล้ว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
)
หากคุณดูหน้าคน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 หรือสคริปต์ที่ปลูกเอง
/etc/systemd/system
สร้างข้อผิดพลาดหากคุณปิดบัง: Failed to execute operation: Invalid argument
; systemd พยายามแทนที่ไฟล์ด้วย symlink เป็น / dev / null การไม่พูดคำตอบนี้ไม่ถูกต้องมีเพียงสิ่งที่ต้องจำ
/lib/systemd/system
และ /usr/lib/systemd/system
ดังนั้นฉันถามคำถามแยกunix.stackexchange.com/questions/550001/...
/lib/systemd/system
/usr/lib/systemd/system
ฉันดีใจที่พบคำตอบนี้