Как перечислить все включенные сервисы из systemctl?

279

Как я могу перечислить все enabledуслуги от systemctl?

Я знаю, что в запущенной systemctlкоманде перечислены все службы, но я бы хотел получить только те enabledиз них.

oceanBT
источник
что вы подразумеваете под включенным? Вы имеете в виду службы, которые работают?
Генерал
7
@ Генерирование службы сильно отличается от ее запуска. См man systemctl.
Йос
Захватывающий. Ответ с наименьшим рейтингом является наиболее «правильным» ответом, хотя это явно не лучший ответ. Этот превосходный вопрос (и его ответы) является интересным примером того, как systemd нарушает давние (и блестящие) принципы проектирования Unix & Co. @FelipeAlvarez жалуется, что наиболее приемлемый ответ предполагает, что systemd следует философии дизайна unix, но systemd / systemctl может делать именно то, что он хочет (большинство опытных пользователей сочтут это полным раздуванием). Я начинаю более ясно видеть, почему Линус Торвальдс так сильно критикует systemd.
BISI

Ответы:

412

systemctl list-unit-files | grep enabledперечислит все включенные .

Если вы хотите, какие из них в настоящее время работают , вам нужно systemctl | grep running.

Используйте тот, который вы ищете. Включен, не означает, что он работает. И бег не означает, что он включен. Это две разные вещи.

Включено означает, что система будет запускать службу при следующей загрузке. Поэтому, если вы включаете службу, вам все равно нужно вручную запустить ее или перезагрузить, и она запустится.

Запуск означает, что он на самом деле работает прямо сейчас, но если он не включен, он не будет перезагружен при перезагрузке.

Дориан
источник
5
раздражает необходимость использовать внешний инструмент (grep), чтобы показать эту важную информацию. Но спасибо, что показали нам путь :)
Фелипе Альварес
34
@FelipeAlvarez Верно. Но так работает Linux. Много небольших двоичных файлов, которые хорошо работают друг с другом. systemctl делает то, что запрашивается, перечисляет службы. В systemctl нет встроенной команды фильтрации, поскольку grep уже существует и может успешно работать с выходными данными любой программы. Так было всегда :)
Дориан,
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самом деле также не делает startэтого, вам нужно будет сделать это вручную или перезагрузить систему после установки этого значения enabled.

Мартин Торнтон
источник
5
Чтобы включить и запустить одновременно:systemctl enable --now ...
Aurélien
1
--state=enabledне влияет на версию 215 systemd (на Raspbian 8 Jessie), но работает на версию 229 systemd (на 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

Чтобы увидеть «включенные» службы, в том числе те, которые все еще находятся в режиме upstart / init:

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
panticz.de
источник