Comment lister tous les services activés de systemctl?

279

Comment puis-je lister tous les enabledservices de systemctl?

Je sais que l’exécution d’une systemctlcommande en tant que telle répertorie tous les services, mais j’aimerais seulement obtenir enabledceux - là.

oceanBT
la source
qu'entendez-vous par activé? Vous voulez dire des services qui fonctionnent?
Gen
7
Activer un service avec @Gen est très différent de le démarrer. Voir man systemctl.
Jos
Fascinant. La réponse la plus basse est la réponse la plus "correcte", même si ce n'est clairement pas la meilleure. Cette excellente question (et ses réponses) est un exemple intéressant de la manière dont systemd viole les principes de conception anciens et brillants d'Unix & Co. / systemctl peut faire exactement ce qu’il veut (la plupart des utilisateurs expérimentés considéreront que c’est trop lourd). Je commence à voir plus clairement pourquoi Linus Torvalds est si véhément critique envers systemd.
BISI

Réponses:

412

systemctl list-unit-files | grep enabledlistera tous ceux activés .

Si vous voulez ceux qui sont en cours d' exécution , vous avez besoin systemctl | grep running.

Utilisez celui que vous cherchez. Activé ne signifie pas qu'il est en cours d'exécution. Et courir ne veut pas dire que c'est activé. Ce sont deux choses différentes.

Activé signifie que le système exécutera le service au prochain démarrage. Donc, si vous activez un service, vous devez toujours le démarrer manuellement ou le redémarrer et il va démarrer.

En cours d'exécution signifie qu'il fonctionne actuellement, mais s'il n'est pas activé, il ne redémarrera pas au redémarrage.

Dorian
la source
5
ennuyeux de devoir utiliser un outil externe (grep) pour montrer cette information vitale. Mais merci de nous avoir montré le chemin :)
Felipe Alvarez
34
@ FelipeAlvarez Correct. Mais c'est comme ça que Linux fonctionne. Beaucoup de petits binaires qui fonctionnent bien les uns avec les autres. systemctl fait ce qui est demandé, il liste les services. Il n'y a pas de commande de filtrage intégrée à systemctl car grep existe déjà et peut le faire avec n'importe quelle sortie de programme. C'est comme ça que ça a toujours été :)
Dorian
3
Je suis d'accord et il devrait en être ainsi. Mais systemd essaie déjà de faire Tellement beaucoup que je me demande pourquoi il ne peut pas lister les services activés?
Felipe Alvarez
5
systemctl | grep runningne liste rien pour moi! Même si quelque chose est en cours d’exécution, son statut ne enabled, disabled, masked, static
contient
27
Plus simple:systemctl list-unit-files --state=running
Will
93

man systemctl États:

--state=

L'argument doit être une liste d'unités , ou d' états LOAD, séparés par des virgules . Lors de la liste des unités, affichez uniquement celles qui se trouvent dans les états spécifiés. Utilisez pour afficher uniquement les unités en échec.SUBACTIVE--state=failed

Explication:

LOAD: Indique si la définition de l'unité a été chargée correctement.
ACTIVE: L'état d'activation de l'unité de haut niveau, c'est-à-dire la généralisation de SUB.
SUB: État d'activation d'unité de bas niveau, les valeurs dépendent du type d'unité.

Bien que vous puissiez également l'utiliser pour afficher uniquement les enabledunités avec:

systemctl list-unit-files --state=enabled

S'il s'agit d'une unité, enabledcela signifie que le système la démarrera au démarrage. Bien que définir quelque chose enabledne le fasse pas start, vous devrez le faire manuellement ou redémarrer le système après l'avoir configuré enabled.

Martin Thornton
la source
5
Pour activer et démarrer en même temps:systemctl enable --now ...
Aurélien Ooms le
1
--state=enabledn'a aucun effet sur la version 215 de Systemd (sur Raspbian 8 Jessie), mais fonctionne sur la version de Systemd 229 (sur Ubuntu 16.04.03 Xenial).
MPB
@mpb: Pourtant, cela fonctionne parfaitement sur la version 235 d'Arch Linux.
64

Pour lister tous les systemdservices qui sont dans state=activeetsub=running

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

Pour lister tous les systemdserices qui sont dans state=activeet sous en cours ou sortis

systemctl list-units --type=service --state=active
Ankit Kumar Miel
la source
12

Pour voir les services «activés», y compris ceux qui sont encore en cours d’exécution:

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

Pour voir tous les services en cours d’exécution:

systemctl list-units --type service --state running
puissance nix
la source
Malheureusement , les noms des services peuvent être différents dans les deux listes - par exemple sshdcontre sshet syslogcontre rsyslog.
OrangeDog
La seule bonne réponse "non grep". Bien que
je ne sois
2

Aperçu général de tous les services actifs et en échec:

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