Wie liste ich alle aktivierten Dienste von systemctl auf?

279

Wie kann ich alle enabledDienste von systemctlauflisten?

Ich weiß, dass running systemctlcommand für sich alle Dienste auflistet, aber ich möchte nur die bekommen enabled.

oceanBT
quelle
Was meinst du mit aktiviert? Sie meinen Dienste, die ausgeführt werden?
Gen
7
Die Aktivierung eines Dienstes durch @Gen unterscheidet sich erheblich vom Starten. Sehen man systemctl.
Jos
Faszinierend. Die Antwort mit der niedrigsten Bewertung ist die "richtigste" Antwort, auch wenn dies eindeutig nicht die beste Antwort ist. Diese ausgezeichnete Frage (und ihre Antworten) ist ein interessantes Beispiel dafür, wie systemd die langjährigen (und brillanten) Designprinzipien von Unix & Co. verletzt / systemctl kann genau das tun, was er will (die meisten erfahrenen Benutzer werden es nur als vollwertig betrachten). Ich beginne klarer zu sehen, warum Linus Torvalds systemd so vehement kritisch gegenübersteht.
BISI

Antworten:

411

systemctl list-unit-files | grep enabledlistet alle aktivierten auf.

Wenn Sie möchten, welche gerade ausgeführt werden , müssen Sie systemctl | grep running.

Verwenden Sie das, was Sie suchen. Aktiviert bedeutet nicht, dass es ausgeführt wird. Und Laufen heißt nicht, dass es aktiviert ist. Das sind zwei verschiedene Dinge.

Aktiviert bedeutet, dass das System den Dienst beim nächsten Start ausführt. Wenn Sie einen Dienst aktivieren, müssen Sie ihn dennoch manuell starten oder neu starten, und er wird gestartet.

Laufen bedeutet, dass es gerade läuft, aber wenn es nicht aktiviert ist, wird es beim Neustart nicht neu gestartet.

Dorian
quelle
5
ärgerlich, ein externes Tool (grep) verwenden zu müssen, um diese wichtigen Informationen anzuzeigen. Aber danke, dass du uns den Weg gezeigt hast :)
Felipe Alvarez
34
@FelipeAlvarez Richtig. Aber so funktioniert Linux. Viele kleine Binaries, die gut miteinander funktionieren. systemctl macht was gefragt wird, es listet Dienste auf. In systemctl ist kein Filterbefehl integriert, da grep bereits vorhanden ist und dies mit der Ausgabe eines beliebigen Programms gut tun kann. So war es schon immer :)
Dorian
3
Ich stimme zu und so sollte es sein. Aber systemd versucht bereits so viel zu tun, dass ich mich frage, warum aktivierte Dienste nicht aufgelistet werden können.
Felipe Alvarez
5
systemctl | grep runningliste mir nichts auf! Auch wenn etwas läuft, wird nur aufgeführt, wie für seinen Status:enabled, disabled, masked, static
Cirelli94
27
Einfacher:systemctl list-unit-files --state=running
Will
93

man systemctl Zustände:

--state=

Das Argument sollte eine durch Kommata getrennte Liste von Einheit sein LOAD, SUBoder ACTIVEStaaten. Zeigen Sie beim Auflisten von Einheiten nur die in den angegebenen Status an. Verwenden Sie --state=faileddiese Option , um nur fehlerhafte Einheiten anzuzeigen.

Erläuterung:

LOAD: Gibt an, ob die Einheitendefinition ordnungsgemäß geladen wurde.
ACTIVE: Der Aktivierungsstatus der übergeordneten Einheit, dh die Verallgemeinerung von SUB.
SUB: Der Aktivierungsstatus der Einheit auf niedriger Ebene. Die Werte hängen vom Einheitentyp ab.

Sie können dies jedoch auch verwenden, um nur enabledEinheiten anzuzeigen mit:

systemctl list-unit-files --state=enabled

Wenn es sich um eine Einheit handelt enabled, bedeutet dies, dass das System sie beim Start startet. Wenn Sie etwas auf " enabledNicht" startsetzen, müssen Sie dies manuell tun oder das System neu starten, nachdem Sie es auf " Nicht" gesetzt haben enabled.

Martin Thornton
quelle
5
So aktivieren und starten Sie gleichzeitig:systemctl enable --now ...
Aurélien Ooms
1
--state=enabledhat keine Auswirkung auf Systemd Version 215 (auf Raspbian 8 Jessie), funktioniert aber auf Systemd Version 229 (auf Ubuntu 16.04.03 Xenial).
mpb
@mpb: Aber dennoch funktioniert es einwandfrei mit Version 235 unter Arch Linux.
64

Um alle systemdDienste aufzulisten, die in state=activeund sindsub=running

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

Um alle systemdDienste aufzulisten, die in state=activeund unter ausgeführt oder beendet werden

systemctl list-units --type=service --state=active
Ankit Kumar Honig
quelle
12

So zeigen Sie "aktivierte" Dienste an, einschließlich derjenigen, die sich noch unter "upstart / init run" befinden:

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

So zeigen Sie alle derzeit ausgeführten Dienste an:

systemctl list-units --type service --state running
nix-power
quelle
Leider können die Namen der Dienste in den beiden Listen unterschiedlich sein - zB sshdgegenüber sshund sysloggegenüber rsyslog.
OrangeDog
Die einzige "non grep" richtige Antwort. Obwohl nicht sicher, warum Emporkömmling erwähnt wird ...
Rogerdpack
2

Übersicht aller aktiven und ausgefallenen Dienste:

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