Problem: Aktive Dienste in Linux anzeigen
Das Verwalten von Diensten auf einem Linux-System ist eine Aufgabe für Administratoren und Benutzer. Systemctl, der Hauptbefehl zur Steuerung von systemd, bietet eine Möglichkeit, diese Dienste zu verwalten und zu überwachen. Ohne die richtigen Befehle und Optionen kann es schwierig sein, einen Überblick über alle laufenden Dienste zu erhalten.
Alle laufenden Dienste mit Systemctl auflisten
Grundbefehl zum Auflisten von Diensten
Um alle von systemd verwalteten Dienste aufzulisten, verwenden Sie diesen Befehl:
systemctl list-units --type=service
Dieser Befehl zeigt eine Tabelle mit Informationen zu jeder Diensteinheit an. Die Ausgabe enthält:
- UNIT: Der Name der Diensteinheit
- LOAD: Ob die Einheitsdefinition geladen wurde
- ACTIVE: Der übergeordnete Aktivierungsstatus der Einheit
- SUB: Der untergeordnete Aktivierungsstatus der Einheit
- DESCRIPTION: Eine kurze Beschreibung des Zwecks der Einheit
Um nur aktive Dienste anzuzeigen, fügen Sie die Option --state=active
hinzu:
systemctl list-units --type=service --state=active
Filtern nach laufenden Diensten
Um nur die Dienste aufzulisten, die gerade laufen, verwenden Sie:
systemctl list-units --type=service --state=running
Dieser Befehl filtert inaktive oder fehlgeschlagene Dienste heraus und zeigt nur die an, die auf Ihrem System laufen.
Für eine kompaktere Ansicht verwenden Sie die Option --no-pager
:
systemctl list-units --type=service --state=running --no-pager
Dies verhindert, dass die Ausgabe seitenweise angezeigt wird, was nützlich ist, wenn Sie die Ergebnisse an andere Befehle oder Dateien weiterleiten möchten.
Für einen schnellen Überblick über laufende Dienste ohne zusätzliche Details verwenden Sie:
systemctl list-units --type=service --state=running --plain --no-legend
Dieser Befehl entfernt die Kopf- und Fußzeileninformationen und liefert eine übersichtliche Liste der laufenden Dienste.
Um die Anzahl der laufenden Dienste zu zählen, leiten Sie die Ausgabe an wc
weiter:
systemctl list-units --type=service --state=running --plain --no-legend | wc -l
Dieser Befehl gibt die Gesamtzahl der laufenden Dienste auf Ihrem System zurück.
Tipp: Laufende Dienste nach Speicherverbrauch sortieren
Um zu verstehen, welche Dienste die meisten Ressourcen verbrauchen, können Sie die laufenden Dienste nach Speicherverbrauch sortieren. Dies kann Systemadministratoren helfen, die Systemleistung zu optimieren.
Hier ist ein Befehl, um laufende Dienste sortiert nach Speicherverbrauch aufzulisten:
systemctl list-units --type=service --state=running --no-pager | awk '{print $1}' | xargs -I {} systemctl status {} | grep Memory | sort -rnk 3 | head -n 10
Dieser Befehl:
- Listet alle laufenden Dienste auf
- Extrahiert die Dienstnamen
- Ruft den Status jedes Dienstes ab
- Filtert nach der Zeile mit dem Speicherverbrauch
- Sortiert die Ergebnisse nach Speicherverbrauch (höchster zu niedrigster)
- Zeigt die 10 speicherintensivsten Dienste an
Die Ausgabe sieht so aus:
Memory: 1.2G
Memory: 800.5M
Memory: 456.3M
Memory: 234.1M
Memory: 189.7M
Memory: 156.2M
Memory: 98.4M
Memory: 76.9M
Memory: 54.3M
Memory: 43.8M
Erweiterte Systemctl-Befehle für die Dienstverwaltung
Anzeigen detaillierter Dienstinformationen
Um mehr Informationen über einen Dienst zu erhalten, verwenden Sie den Befehl systemctl status
gefolgt vom Dienstnamen:
systemctl status dienstname
Dieser Befehl liefert einen Überblick über den Dienst, einschließlich:
- Aktueller Status (aktiv, inaktiv, fehlgeschlagen)
- Haupt-PID (Prozess-ID)
- Speicherverbrauch
- CPU-Auslastung
- Startzeit
- Aktuelle Logeinträge
Beispiel: SSH-Dienstdetails anzeigen
systemctl status sshd
Die Ausgabe enthält den aktuellen Status des Dienstes, den Speicherort der Konfigurationsdatei und aktuelle Logeinträge, die bei der Fehlerbehebung helfen.
Überprüfen des Dienststatus
Um den Status eines Dienstes zu überprüfen, verwenden Sie:
systemctl is-active dienstname
Dieser Befehl gibt "active" zurück, wenn der Dienst läuft, oder "inactive", wenn nicht.
Um zu überprüfen, ob ein Dienst beim Systemstart startet:
systemctl is-enabled dienstname
Dies gibt "enabled" zurück, wenn der Dienst automatisch beim Booten startet, oder "disabled", wenn nicht.
Sie können auch den Befehl systemctl show
verwenden, um bestimmte Eigenschaften eines Dienstes zu erhalten:
systemctl show -p ActiveState dienstname
systemctl show -p UnitFileState dienstname
Diese Befehle zeigen den aktuellen aktiven Status und ob der Dienst aktiviert ist.
Um alle fehlgeschlagenen Dienste aufzulisten:
systemctl --failed --type=service
Dieser Befehl hilft, Dienste zu identifizieren, die Probleme haben und möglicherweise Aufmerksamkeit benötigen.
Alternative Methoden zum Auflisten von Diensten
Verwendung des PS-Befehls
Der ps
-Befehl bietet eine weitere Möglichkeit, laufende Dienste in Linux aufzulisten. Obwohl er nicht so detailliert ist wie systemctl
, kann er einen schnellen Überblick über aktive Prozesse, einschließlich Dienste, geben.
Um alle laufenden Prozesse einschließlich Dienste aufzulisten:
ps aux
Dieser Befehl zeigt alle Prozesse für alle Benutzer in einem detaillierten Format an. Um nach bestimmten Diensten zu filtern, können Sie grep
verwenden:
ps aux | grep dienstname
Für eine fokussierte Ansicht der Dienste können Sie verwenden:
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
Dieser Befehl zeigt die Prozess-ID, die übergeordnete Prozess-ID, den Befehl, den Speicherverbrauch und die CPU-Auslastung an, sortiert nach Speicherverbrauch.
Im Vergleich zu systemctl
bietet ps
:
- Echtzeit-Prozessinformationen
- Detailliertere Ressourcennutzungsdaten
- Die Möglichkeit, nicht von systemd verwaltete Prozesse zu sehen
Allerdings fehlen systemd-spezifische Informationen wie Dienststatus und Abhängigkeiten.
Tipp: Angepasste PS-Ausgabe
Sie können die ps
-Ausgabe anpassen, um nur die Informationen anzuzeigen, die Sie benötigen. Um beispielsweise nur die PID, den Befehlsnamen und den Speicherverbrauch von Prozessen anzuzeigen, verwenden Sie:
ps -eo pid,comm,%mem --sort=-%mem | head
Dieser Befehl sortiert die Prozesse nach Speicherverbrauch und zeigt die 10 speicherintensivsten Prozesse an.
Verwendung des Top-Befehls
Der top
-Befehl gibt eine dynamische Echtzeitansicht der laufenden Prozesse, einschließlich Dienste. Um top
zu verwenden:
top
Dies öffnet eine interaktive Anzeige mit:
- Systemübersicht (Laufzeit, Durchschnittslast, CPU-Auslastung)
- Prozessliste (standardmäßig nach CPU-Auslastung sortiert)
Um sich auf Dienste zu konzentrieren, können Sie verwenden:
top -c -p $(pgrep -d',' -f dienstname)
Dieser Befehl zeigt nur die Prozesse an, die mit dem angegebenen Dienst zusammenhängen.
Vorteile der Verwendung von top
:
- Echtzeit-Updates von System- und Prozessinformationen
- Interaktive Oberfläche zum Sortieren und Filtern
- Möglichkeit, Ressourcennutzungstrends im Laufe der Zeit zu sehen
Zu den Einschränkungen gehören:
- Weniger dienstspezifische Informationen im Vergleich zu
systemctl
- Kann mehr Systemressourcen für kontinuierliche Überwachung erfordern
Sowohl ps
als auch top
ergänzen systemctl
, indem sie verschiedene Ansichten laufender Dienste und Prozesse bieten und so ein besseres Verständnis der Systemaktivität ermöglichen.
Beispiel: Apache-Webserver überwachen
Um den Apache-Webserver mit top
zu überwachen, können Sie folgenden Befehl verwenden:
top -c -p $(pgrep -d',' -f apache2)
Dieser Befehl zeigt Echtzeitinformationen über alle Apache-Prozesse an, einschließlich ihrer CPU- und Speicherauslastung. Dies ist nützlich, um den Ressourcenverbrauch von Apache während Zeiten hohen Datenverkehrs zu verfolgen.