ยูนิต / บริการ systemd ตั้งอยู่ที่ไหนใน Ubuntu?


23

ฉันค้นหาต่อไปในขณะที่ Google กำลังค้นหาอยู่ที่ / usr / lib / systemd / system / และ / etc / systemd / system / อย่างไรก็ตามในอูบุนตูของฉันตัวแรกไม่มีอยู่และอีกอันมีเพียงไม่กี่บริการ

bluetooth.target.wants                      default.target.wants           hybrid-sleep.target.wants    shutdown.target.wants
dbus-org.bluez.service                      display-manager.service        multi-user.target.wants      sockets.target.wants
dbus-org.freedesktop.Avahi.service          display-manager.service.wants  network-online.target.wants  suspend.target.wants
dbus-org.freedesktop.ModemManager1.service  getty.target.wants             paths.target.wants           sysinit.target.wants
dbus-org.freedesktop.nm-dispatcher.service  graphical.target.wants         plexmediaserver.service      syslog.service
dbus-org.freedesktop.thermald.service       hibernate.target.wants         printer.target.wants         timers.target.wants

คนอื่นอยู่ที่ไหน

เมื่อฉันเรียกใช้ systemctl list-units ฉันเห็นบริการมากมาย แต่ไม่รู้ว่าจะหาตำแหน่งเหล่านั้นได้ที่ไหน ตัวอย่างเช่น plexmediaserver.service ของฉันอยู่ที่ไหน ฉันต้องรู้เพราะนั่นคือสิ่งที่ฉันต้องการวางหน่วยอื่น ๆ ของฉัน

คำตอบ:


33

ไฟล์บริการที่ให้ในแพ็คเกจมักจะอยู่ใน/lib/systemd/systemนั้น ยกตัวอย่างเช่นการค้นหา.serviceในดัชนีแพคเกจ

จากman systemd.unit:

/etc/systemd/system/*
/run/systemd/system/*
/lib/systemd/system/*
...

$XDG_CONFIG_HOME/systemd/user/*
$HOME/.config/systemd/user/*
/etc/systemd/user/*
$XDG_RUNTIME_DIR/systemd/user/*
/run/systemd/user/*
$XDG_DATA_HOME/systemd/user/*
$HOME/.local/share/systemd/user/*
/usr/lib/systemd/user/*

อันหลังมีไว้สำหรับเซสชันผู้ใช้ IIRC Ubuntu 16.04 ยังคงใช้พุ่งพรวดสำหรับเซสชันผู้ใช้ดังนั้นไฟล์เหล่านี้จะสามารถใช้ได้หลังจาก 16.04 เท่านั้น

สำหรับบริการเฉพาะเพื่อดูว่า systemd กำลังอ่านอะไรเรียกใช้systemctl status <service>หรือsystemctl show <service>:

$ systemctl show ssh.service | grep Path
FragmentPath=/lib/systemd/system/ssh.service
DropInPaths=/etc/systemd/system/ssh.service.d/override.conf
$ systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/ssh.service.d
           └─override.conf
   Active: active (running) since Thu 2017-01-26 16:06:53 JST; 21h ago
 Main PID: 948 (sshd)
   CGroup: /system.slice/ssh.service
           └─948 /usr/sbin/sshd -D

1
ขอขอบคุณ! นอกจากนี้คนอื่น ๆ อยู่ที่ไหน? ฉันต้องการทราบสถานที่ทั้งหมดที่กระบวนการเริ่มต้น systemd จะมองหา
Guerlando OCs

1
@GuerlandoOCs ดูการอัปเดต
muru

11

มีเครื่องมือที่ดีที่ควรรู้เมื่อใดก็ตามที่คุณต้องการค้นหาบางสิ่ง

ที่แรกก็คือlocateซึ่งจะใช้ในการค้นหาไฟล์ตามชื่อ ใช้ดัชนีที่สร้างไว้ล่วงหน้าดังนั้นจึงรวดเร็วมาก อย่างไรก็ตามบางครั้งอาจพลาดไฟล์ใหม่ที่ไม่ได้จัดทำดัชนีหรืออาจพลาดไฟล์ที่มีสิทธิ์ จำกัด ในกรณีนี้locateคำสั่งด่วนจะค้นหาไฟล์ systemd ทั้งหมดบน Ubuntu:

locate systemd

หากคุณต้องการมุ่งเน้นไปที่ไฟล์ Plex นั้นคุณสามารถใช้ไพพ์เพื่อกรองผลลัพธ์:

locate systemd | grep plex

เครื่องมืออื่น ๆ ที่ควรทราบคือfindการค้นหาสดของไดเรกทอรีเฉพาะเพื่อค้นหาไฟล์ แต่ก็มีจำนวนมากของตัวเลือก ตรวจสอบman findรายละเอียด หากต้องการค้นหาplexmediaserver.serviceทุกที่ในระบบของคุณคุณจะต้องใช้:

find / -name plexmediaserver.service

ในที่สุดในกรณีนี้คุณอาจจะรู้ว่าชุดไฟล์ที่คุณกำลังค้นหาอยู่ หากคุณไม่แน่ใจเกี่ยวกับชื่อแพ็คเกจที่แน่นอนคุณสามารถใช้ไวยากรณ์นี้เพื่อค้นหาแพ็คเกจทั้งหมดที่มี 'plex' ในชื่อ:

dpkg -l '*plex*'

หากคุณพบว่าแพ็คเกจที่คุณสนใจนั้นชื่อว่า 'plexmediaserver' คุณสามารถใช้ไวยากรณ์นี้เพื่อแสดงรายการไฟล์ทั้งหมดในแพ็คเกจดังกล่าว:

dpkg -L plexmediaserver

อีกครั้งคุณสามารถใช้ไพพ์เพื่อกรองผลลัพธ์เป็นไฟล์บริการที่คุณต้องการ:

dpkg -L plexmediaserver | grep plexmediaserver.service

ตอนนี้คุณจะสามารถค้นหาไฟล์สำหรับกรณีทั่วไปจำนวนมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.