Bagaimana cara mendaftar semua layanan yang diaktifkan dari systemctl?

279

Bagaimana saya bisa mendaftar semua enabledlayanan dari systemctl?

Saya tahu menjalankan systemctlperintah dengan sendirinya mencantumkan semua layanan, tetapi saya hanya ingin mendapatkannya enabled.

oceanBT
sumber
apa yang kamu maksud dengan diaktifkan? Maksud Anda layanan yang sedang berjalan?
Kejadian
7
@ Jen mengaktifkan layanan sangat berbeda dari memulainya. Lihat man systemctl.
Jos
Menarik. Jawaban dengan peringkat terendah adalah jawaban yang paling "benar", meskipun jelas bukan jawaban terbaik. Pertanyaan yang sangat bagus ini (dan jawabannya) adalah contoh yang menarik tentang bagaimana systemd melanggar prinsip-prinsip desain Unix & Co. @FelipeAlvarez yang sudah lama ada dan mengeluh bahwa jawaban yang paling diterima mengasumsikan systemd mengikuti filosofi desain unix, tetapi systemd / systemctl dapat melakukan apa yang dia inginkan (sebagian besar pengguna yang berpengalaman hanya akan menganggap bahwa mengasapi sepenuhnya). Saya mulai melihat dengan lebih jelas mengapa Linus Torvalds begitu kritis terhadap systemd.
BISI

Jawaban:

412

systemctl list-unit-files | grep enabledakan mendaftar semua yang diaktifkan .

Jika Anda ingin yang sedang berjalan , Anda perlu systemctl | grep running.

Gunakan yang Anda cari. Diaktifkan, bukan berarti sedang berjalan. Dan berlari bukan berarti itu diaktifkan. Mereka adalah dua hal yang berbeda.

Diaktifkan berarti sistem akan menjalankan layanan pada boot berikutnya. Jadi, jika Anda mengaktifkan layanan, Anda masih perlu memulainya secara manual, atau reboot dan itu akan mulai.

Menjalankan berarti itu benar-benar berjalan sekarang, tetapi jika tidak diaktifkan, itu tidak akan mulai lagi ketika Anda reboot.

Dorian
sumber
5
menjengkelkan harus menggunakan alat eksternal (grep) untuk menunjukkan informasi penting ini. Tapi terima kasih telah menunjukkan jalannya kepada kami :)
Felipe Alvarez
34
@FelipeAlvarez Benar. Tapi begitulah cara kerja Linux. Banyak binari kecil yang bekerja dengan baik satu sama lain. systemctl melakukan apa yang diminta, daftar layanan. Tidak ada perintah penyaringan bawaan untuk systemctl karena grep sudah ada dan dapat melakukannya dengan baik dengan output program apa pun.
Dorian
3
Saya setuju dan memang seharusnya begitu. Tetapi, systemd sudah mencoba melakukan banyak hal sehingga saya bertanya-tanya mengapa ia tidak dapat mendaftar layanan yang diaktifkan?
Felipe Alvarez
5
systemctl | grep runningjangan daftar apa pun untuk saya! Bahkan jika sesuatu berjalan hanya terdaftar sebagai statusnya seperti:enabled, disabled, masked, static
Cirelli94
27
Simpler:systemctl list-unit-files --state=running
Will
93

man systemctl menyatakan:

--state=

Argumen harus daftar dipisahkan koma unit LOAD, SUBatau ACTIVEnegara. Saat mendaftarkan unit, hanya tampilkan yang ada di negara bagian yang ditentukan. Gunakan --state=faileduntuk menampilkan hanya unit yang gagal.

Penjelasan:

LOAD: Mencerminkan apakah definisi unit dimuat dengan benar.
ACTIVE: Status aktivasi unit tingkat tinggi, yaitu generalisasi SUB.
SUB: Status aktivasi unit tingkat rendah, nilainya tergantung pada tipe unit.

Meskipun Anda juga dapat menggunakan ini untuk hanya menampilkan enabledunit dengan:

systemctl list-unit-files --state=enabled

Jika sebuah unit enabledberarti bahwa sistem akan memulainya saat startup. Meskipun mengatur sesuatu untuk enabledtidak benar-benar juga startjadi Anda harus melakukannya secara manual, atau reboot sistem setelah mengaturnya enabled.

Martin Thornton
sumber
5
Untuk mengaktifkan dan memulai pada saat yang sama:systemctl enable --now ...
Aurélien Ooms
1
--state=enabledtidak berpengaruh pada systemd versi 215 (pada Raspbian 8 Jessie), tetapi ia bekerja pada systemd versi 229 (pada Ubuntu 16.04.03 Xenial).
mpb
@ MB: Tapi belum berfungsi dengan baik pada versi 235 di Arch Linux.
64

Untuk membuat daftar semua systemdlayanan yang ada di state=activedansub=running

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

Untuk membuat daftar semua layanan systemdyang ada di dalam state=activedan sub berjalan atau keluar

systemctl list-units --type=service --state=active
Ankit Kumar Honey
sumber
12

Untuk melihat layanan 'diaktifkan' termasuk yang masih berjalan di bawah pemula / init:

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

Untuk melihat semua layanan yang sedang berjalan, jalankan:

systemctl list-units --type service --state running
nix-power
sumber
Sayangnya nama-nama layanan dapat berbeda dalam dua daftar - misalnya sshdvs sshdan syslogvs rsyslog.
OrangeDog
Satu-satunya jawaban benar "non grep". Meskipun tidak yakin mengapa pemula disebutkan ...
rogerdpack
2

Juga ikhtisar semua layanan yang aktif dan gagal:

systemctl list-units --type service --state running,failed
panticz.de
sumber