วิธีการแสดงรายการบริการที่เปิดใช้งานทั้งหมดจาก systemctl?


279

ฉันจะแสดงรายการenabledบริการทั้งหมดจากได้systemctlอย่างไร

ฉันรู้ว่าการทำงานsystemctlคำสั่งด้วยตัวเองแสดงรายการบริการทั้งหมด แต่ฉันต้องการที่จะได้รับเฉพาะenabledคน


คุณเปิดใช้งานหมายความว่าอย่างไร คุณหมายถึงบริการที่กำลังทำงานอยู่ใช่ไหม
Gen

7
@Gen การเปิดใช้บริการค่อนข้างแตกต่างจากการเริ่มต้น man systemctlดู
Jos

มโนหร คำตอบที่ได้คะแนนต่ำสุดคือคำตอบที่ "ถูกที่สุด" แม้ว่าจะไม่ใช่คำตอบที่ชัดเจนที่สุดก็ตาม คำถามที่ยอดเยี่ยมนี้ (และคำตอบ) เป็นตัวอย่างที่น่าสนใจว่า systemd ละเมิดหลักการออกแบบอันยาวนาน (และยอดเยี่ยม) ของ Unix & Co. @FelipeAlvarez บ่นว่าคำตอบที่ได้รับการยอมรับมากที่สุดถือว่า systemd เป็นไปตาม philosopy ของการออกแบบ unix / systemctl สามารถทำสิ่งที่เขาต้องการได้อย่างสมบูรณ์ (ผู้ใช้ที่มีประสบการณ์ส่วนใหญ่จะพิจารณาว่า bloat สมบูรณ์นั้น) ฉันเริ่มเห็นชัดเจนขึ้นว่าเหตุใด Linus Torvalds จึงมีความสำคัญอย่างยิ่งต่อระบบ
BISI

คำตอบ:


411

systemctl list-unit-files | grep enabledจะแสดงรายการทั้งหมดที่เปิดใช้งานคน

หากคุณต้องการคนที่กำลังทำงานsystemctl | grep runningคุณจะต้อง

ใช้สิ่งที่คุณกำลังมองหา เปิดใช้งานไม่ได้หมายความว่ามันกำลังทำงานอยู่ และการทำงานไม่ได้หมายความว่ามันเปิดใช้งาน พวกเขาเป็นสองสิ่งที่แตกต่างกัน

เปิดใช้งานหมายถึงระบบจะเรียกใช้บริการในการบูตครั้งถัดไป ดังนั้นหากคุณเปิดใช้งานบริการคุณจะต้องเริ่มต้นด้วยตนเองหรือเริ่มต้นใหม่และจะเริ่มทำงาน

การใช้งานหมายความว่ามันใช้งานได้จริงในขณะนี้ แต่ถ้าไม่ได้เปิดใช้งานจะไม่เริ่มต้นใหม่เมื่อคุณรีบูต


5
น่ารำคาญที่ต้องใช้เครื่องมือภายนอก (grep) เพื่อแสดงข้อมูลที่สำคัญนี้ แต่ขอขอบคุณสำหรับการแสดงให้เราเห็นทาง :)
เฟลิซ

34
@FelipeAlvarez ถูกต้อง แต่นั่นเป็นวิธีที่ Linux ใช้งานได้ ไบนารีขนาดเล็กจำนวนมากที่ทำงานร่วมกันได้ดี systemctl ทำในสิ่งที่ถูกถามมันแสดงรายการบริการ ไม่มีคำสั่งการกรองอยู่ใน systemctl เพราะ grep มีอยู่แล้วและสามารถทำได้ดีกับเอาต์พุตของโปรแกรมใด ๆ มันเป็นวิธีที่เคยเป็นมาทุกครั้ง :)
Dorian

3
ฉันเห็นด้วยและควรเป็นเช่นนั้น แต่ systemd พยายามทำสิ่งต่าง ๆ มากมายจนฉันสงสัยว่าทำไมมันไม่สามารถแสดงรายการบริการที่เปิดใช้งานได้
เฟลิเป้อัลวาเรซ

5
systemctl | grep runningอย่าทำรายการอะไรกับฉัน! แม้ว่าจะมีบางสิ่งที่ทำงานอยู่แสดงสถานะของเขาเช่นเดียวกับ:enabled, disabled, masked, static
Cirelli94

27
เรียบง่าย:systemctl list-unit-files --state=running
จะ

93

man systemctl สหรัฐฯ:

--state=

อาร์กิวเมนต์ควรเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคของหน่วยLOAD, SUBหรือACTIVEรัฐ เมื่อรายชื่อหน่วยแสดงเฉพาะในรัฐที่ระบุ ใช้--state=failedเพื่อแสดงหน่วยที่ล้มเหลวเท่านั้น

คำอธิบาย:

LOAD: สะท้อนให้เห็นว่าคำจำกัดความของหน่วยโหลดอย่างถูกต้อง
ACTIVE: SUBรัฐระดับสูงหน่วยเปิดใช้งานคือลักษณะทั่วไปของ
SUB: สถานะการเปิดใช้งานหน่วยระดับต่ำค่าขึ้นอยู่กับประเภทของหน่วย

แม้ว่าคุณจะสามารถใช้เพื่อแสดงenabledหน่วยด้วย:

systemctl list-unit-files --state=enabled

หากหน่วยคือenabledหมายความว่าระบบจะเริ่มเมื่อเริ่มต้น แม้ว่าการตั้งค่าอะไรบางอย่างที่enabledไม่จริงยังเพื่อให้คุณจะต้องทำด้วยตนเองหรือรีบูตระบบหลังจากการตั้งค่าให้startenabled


5
ในการเปิดใช้งานและเริ่มต้นในเวลาเดียวกัน:systemctl enable --now ...
Aurélien Ooms

1
--state=enabledไม่มีผลกับ systemd รุ่น 215 (บน Raspbian 8 Jessie) แต่ทำงานบน systemd รุ่น 229 (บน Ubuntu 16.04.03 Xenial)
mpb

@mpb: แต่มันก็ทำงานได้ดีอย่างสมบูรณ์ในเวอร์ชั่น 235 บน Arch Linux

64

เพื่อแสดงรายการsystemdบริการทั้งหมดที่อยู่ในstate=activeและsub=running

systemctl list-units --type=service --state=running

ในการแสดงรายการชุดsystemdserice ทั้งหมดที่อยู่ในstate=activeและย่อยเรียกใช้หรือออก

systemctl list-units --type=service --state=active

12

หากต้องการดูบริการ 'เปิดใช้งาน' รวมถึงบริการที่ยังอยู่ในช่วงเริ่มต้น / เริ่มต้น:

systemctl list-unit-files --type service --state enabled,generated

หากต้องการดูบริการที่รันอยู่ทั้งหมดให้ดำเนินการดังนี้

systemctl list-units --type service --state running

แต่น่าเสียดายที่ชื่อของบริการที่สามารถแตกต่างกันในทั้งสองรายการ - เช่นsshdกับsshและเมื่อเทียบกับsyslog rsyslog
OrangeDog

คำตอบที่ถูกต้อง "ไม่ใช่ grep" เท่านั้น แม้ว่าจะไม่แน่ใจว่าทำไมคนธรรมดาถึงกล่าวถึง ...
rogerdpack

2

ภาพรวมของบริการที่ใช้งานและล้มเหลวทั้งหมด:

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