Làm thế nào để liệt kê tất cả các dịch vụ được kích hoạt từ systemctl?


279

Làm thế nào tôi có thể liệt kê tất cả các enableddịch vụ từ systemctl?

Tôi biết việc chạy systemctllệnh tự liệt kê tất cả các dịch vụ, nhưng tôi chỉ muốn nhận các dịch vụ enabled.


bạn có ý nghĩa gì khi kích hoạt? Bạn có nghĩa là dịch vụ đang chạy?
Gen

7
@Gen cho phép một dịch vụ khá khác so với bắt đầu nó. Xem man systemctl.
Jos

Lôi cuốn, hấp dẫn, quyến rũ. Câu trả lời được đánh giá thấp nhất là câu trả lời "đúng" nhất, mặc dù rõ ràng đây không phải là câu trả lời hay nhất. Câu hỏi xuất sắc này (và câu trả lời của nó) là một ví dụ thú vị về cách systemd vi phạm các nguyên tắc thiết kế lâu đời (và xuất sắc) của Unix & Co. @FelipeAlvarez phàn nàn rằng câu trả lời được chấp nhận nhiều nhất giả định systemd tuân theo triết lý thiết kế unix, nhưng systemd / systemctl có thể làm chính xác những gì anh ta muốn (hầu hết người dùng có kinh nghiệm sẽ chỉ xem xét sự phình to đó). Tôi bắt đầu thấy rõ hơn tại sao Linus Torvalds lại chỉ trích kịch liệt hệ thống.
BISI

Câu trả lời:


411

systemctl list-unit-files | grep enabledsẽ liệt kê tất cả những cái được kích hoạt .

Nếu bạn muốn cái nào đang chạy , bạn cần systemctl | grep running.

Sử dụng một trong những bạn đang tìm kiếm. Đã bật, không có nghĩa là nó đang chạy. Và chạy không có nghĩa là nó được kích hoạt. Họ là hai việc khác nhau.

Đã bật nghĩa là hệ thống sẽ chạy dịch vụ trong lần khởi động tiếp theo. Vì vậy, nếu bạn kích hoạt một dịch vụ, bạn vẫn cần khởi động thủ công hoặc khởi động lại và nó sẽ bắt đầu.

Chạy có nghĩa là nó thực sự đang chạy ngay bây giờ, nhưng nếu nó không được bật, nó sẽ không khởi động lại khi bạn khởi động lại.


5
phiền toái khi phải sử dụng một công cụ bên ngoài (grep) để hiển thị thông tin quan trọng này. Nhưng cảm ơn bạn đã chỉ đường cho chúng tôi :)
Felipe Alvarez

34
@FelipeAlvarez Đúng. Nhưng đó là cách Linux hoạt động. Nhiều nhị phân nhỏ hoạt động tốt với nhau. systemctl làm những gì được yêu cầu, nó liệt kê các dịch vụ. Không có lệnh lọc tích hợp sẵn cho systemctl vì grep đã tồn tại và có thể làm tốt điều đó với bất kỳ đầu ra nào của chương trình. Đó là cách nó luôn luôn như vậy :)
Dorian

3
Tôi đồng ý và vì vậy nó nên được. Nhưng, systemd đã cố gắng làm SO nhiều đến nỗi tôi tự hỏi tại sao nó không thể liệt kê các dịch vụ được kích hoạt?
Felipe Alvarez

5
systemctl | grep runningđừng liệt kê bất cứ điều gì với tôi Ngay cả khi một cái gì đó đang chạy chỉ được liệt kê như trạng thái của anh ấy như:enabled, disabled, masked, static
Cirelli94

27
Đơn giản hơn:systemctl list-unit-files --state=running
Sẽ

93

man systemctl Những trạng thái:

--state=

Đối số phải là một danh sách bằng dấu phẩy của đơn vị LOAD, SUBhoặc ACTIVEtiểu bang. Khi liệt kê các đơn vị, chỉ hiển thị những đơn vị ở các trạng thái được chỉ định. Sử dụng --state=failedđể chỉ hiển thị các đơn vị thất bại.

Giải trình:

LOAD: Phản ánh xem định nghĩa đơn vị đã được tải đúng cách.
ACTIVE: Trạng thái kích hoạt đơn vị cấp cao, nghĩa là tổng quát hóa SUB.
SUB: Trạng thái kích hoạt đơn vị cấp thấp, các giá trị phụ thuộc vào loại đơn vị.

Mặc dù bạn cũng có thể sử dụng điều này để chỉ hiển thị enabledcác đơn vị với:

systemctl list-unit-files --state=enabled

Nếu một đơn vị enabledđó có nghĩa là hệ thống sẽ khởi động nó khi khởi động. Mặc dù thiết lập một cái gì đó enabledkhông thực sự cũng startvậy, vì vậy bạn sẽ cần phải làm điều đó bằng tay hoặc khởi động lại hệ thống sau khi cài đặt nó enabled.


5
Để kích hoạt và bắt đầu cùng một lúc:systemctl enable --now ...
Aurélien Ooms

1
--state=enabledkhông có tác dụng đối với phiên bản systemd 215 (trên Raspbian 8 Jessie), nhưng nó hoạt động trên phiên bản systemd 229 (trên Ubuntu 16.04.03 Xenial).
mpb

@mpb: Nhưng nó vẫn hoạt động hoàn toàn tốt trên phiên bản 235 trên Arch Linux.

64

Để liệt kê tất cả các systemddịch vụ trong state=activesub=running

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

Để liệt kê tất cả các systemdserice trong state=activevà phụ đang chạy hoặc thoát

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

12

Để xem các dịch vụ 'được kích hoạt', bao gồm cả các dịch vụ vẫn đang được khởi động / init chạy:

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

Để xem tất cả các dịch vụ hiện đang chạy:

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

Thật không may, tên của các dịch vụ có thể khác nhau trong hai danh sách - ví dụ sshdso với sshsyslogso với rsyslog.
OrangeDog

Câu trả lời đúng "không grep". Mặc dù không chắc chắn tại sao upstart được đề cập ...
rogerdpack

2

Ngoài ra tổng quan về tất cả các dịch vụ đang hoạt động và thất bại:

systemctl list-units --type service --state running,failed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.