Ein Linux-System ist wie eine Maschine mit vielen kleinen Schrauben und Rädchen. Wer die Einzelteile genauer unter die Lupe nehmen will, braucht das entsprechende Werkzeug. Untersuchen Sie mit einfachen Befehlen Prozesse und Festplatten ihres Systems!
So ein Linux-Rechner ist schon ein tolles Gefährt, aber was passiert wirklich unter der Haube? Das ist alles gar nicht kompliziert, Sie müssen eben nur wissen, wie Sie die Tools einsetzen und vor allem, wie Sie deren Ausgabe interpretieren. Es geht dabei auch nicht darum, jede mögliche Option zu kennen, sondern nur, sie so einzusetzen, wie man sie für eine konkrete Problemlösung benötigt. Aktuelle Distributionen bringen die meisten besprochenen Programme bereits mit.
Was geht ab?
Wenn Sie mal eben wissen wollen, was auf dem System los ist, verwenden Sie w. Dann erfahren Sie die aktuelle Zeit, wie lange der Rechner schon läuft, welche User eingeloggt sind und welche Programme sie gerade benutzen (Abbildung 1). Das Programm w vereinigt somit die Grundfunktionen von uptime, who und ps. Sollte die Load über 1 liegen, können Sie gleich nachsehen, welcher Prozess so viel rechnet.
Hierfür eignet sich top ganz hervorragend. Es listet alle laufenden Prozesse auf, gewichtet nach Prozessor- oder Speichernutzung (Abbildung 1). Sie sehen auf den ersten Blick, ob ein Programm aus dem Ruder läuft und gerade 99% der CPU-Leistung in Anspruch nimmt. Oft steht top selbst ganz oben in der Liste, denn es belastet durchaus auch selbst den Prozessor, wenn es jede Sekunde seine Statistiken erhebt.
top liefert eine Momentaufnahme der derzeitigen Auslastung des Rechners. Auf den ersten Blick wirkt die Ausgabe etwas verwirrend, aber auf den zweiten findet man einiges wieder, was schon von w bekannt ist. In der obersten Zeile stehen die Uhrzeit, die Zeit seit dem letzten Neustart, die Anzahl der angemeldeten Benutzer und die Durchschnittslast der letzten Minute respektive fünf und 15 Minuten. In der zweiten Zeile zeigt top dann die Anzahl der aktuell laufenden Prozesse, schön säuberlich in aktive, schlafende, gestoppte Prozesse und Zombies aufgeteilt.
Die dritte Zeile zeigt die CPU-Benutzung aufgeteilt nach Benutzer- und System-, untätigen (idle) und Nice-Prozessen, die höhere Priorität besitzen. Da sowohl Benutzer-, als auch Systemprozesse mit besonderer Priorität laufen können, werden sie eventuell doppelt gezählt. Deshalb kann die Summe der CPU-Benutzung größer als 100% sein. Die Größe des gesamten Speichers, seine Belegung durch Prozesse, durch Puffer, und der freie Platz finden sich in der vierten Zeile. Analog zeigt top in der fünften Zeile die Swap-Nutzung.
In dem darunter liegenden Abschnitt listet top die Prozesse, sortiert nach ihrem Verbrauch an Rechenzeit. Unter PID findet sich die Prozess-ID, daneben steht der User, dem der Prozess gehört. NI bezeichnet den Nice-Level, also die Priorität, die dieser Prozess besitzt. SIZE ist der gesamte vom Prozess genutzte Speicherplatz. RSS ist lediglich der im RAM gehaltene, also der nicht auf eine Swap-Partition ausgelagerte Teil des Programms. SHARE zeigt an, wieviel Speicher der Prozess mit anderen gemeinsam nutzen kann. Die Spalte STAT zeigt den aktuellen Status mit den möglichen Zuständen: * D: nicht unterbrechbarer Schlafmodus * R: (running) läuft * S: (sleeping) schläft * T: (traced) gestoppt * Z: Zombie
Bleiben zum Schluss noch %CPU und %MEM, die jeweils die prozentuale Prozessor- und Speichernutzung des Prozesses anzeigen, sowie TIME und COMMAND, für Laufzeit und Namen. Wenn sie [Umschalt-m] drücken, während top läuft, ordnet das Programm die Prozesse nach ihrem Speicherverbrauch. Zurück zum ursprünglichen Ordungsprinzip gelangen Sie wieder mit [Umschalt-p].
Die vielen Aspekte der Rechnerauslastung, die top auf einen Blick darstellt, müssen Sie sich nicht im Detail merken. Wenn Sie beispielsweise merken, dass Ihr System träge reagiert, verschaffen Sie sich damit einen schnellen Überblick. Sehen Sie ganz oben einen Prozess mit 99% Speicher- oder CPU-Verbrauch, können Sie häufig davon ausgehen, dass dieser Prozess Probleme verursacht und beendet werden sollte. Das machen Sie, indem Sie in einem anderen Terminal kill -9
eingeben. Alternativ drücken Sie direkt in top die Taste [k], geben die Prozess-ID ein, wählen als Signalnummer 9 aus und bestätigen mit [Return].
Kurzer Prozess
Suchen Sie einen bestimmten Prozess, ist top nicht die erste Wahl, da es die Liste kontinuierlich anzeigt. Das Kommando ps dagegen liefert nur einmal das gewünschte Ergebnis und lässt sich so mittels einer Pipe mit anderen Befehlen verketten (siehe unten). Die gängigsten Optionen sind waux, damit wählen Sie: * w: (wide) breites Ausgabeformat * a: alle Prozesse * u: (user) benutzerorientiertes Format * x: zeige Prozesse ohne kontrollierendes Terminal
Laufen auf ihrem System viele Prozesse, empfiehlt es sich, die Ausgabe per Pipe an less oder more zu übergeben (Abbildung 3). Mit grep filtern Sie die Ausgabe nach bestimmten Prozessen. So gibt der folgende Befehl nur die httpd-Prozesse aus, also alle Instanzen des Webservers.
ps waux | grep httpd
Noch was frei?
Nachdem Sie nun einen gewissen Überblick über die laufenden Prozesse auf dem System haben, können Sie mal einen Blick auf Festplatten und Partitionen werfen. Hierfür gibt es df (disk free), das den freien Platz der verfügbaren Partitionen ausgibt. Mit der Option -h (human-readable) stellt das Programm die Daten nicht als Bytes dar, sondern in den besser lesbaren Einheiten MBytes und GBytes (Abbildung 4).
Die Gerätedatei /dev/sda6 steht für die sechste Partition der ersten SCSI-Festplatte. Sie ist als /home-Partition mit 94% schon ziemlich voll, von 1,6 GBytes sind bereits 1,4 GBytes belegt. Hier wird es für den Administrator langsam Zeit, sich um mehr freien Platz zu bemühen, beispielsweise durch das Löschen von Dateien.
Oft interessieren nur die lokalen Speicherverhältnisse, also nur die im Computer vorhandenen Festplatten, aber nicht etwa über NFS verbundene Netzlaufwerke. Dass df letztere ignoriert, stellen Sie mit dem Parameter -x und einem nachfolgenden Dateisystemtyp sicher:
df -h -x nfs
Große Brocken finden
df ist zwar schon sehr praktisch, wenn Sie aber genauer wissen wollen, in welchen Verzeichnissen besonders viele Daten liegen, empfiehlt sich du (disk usage), am besten mit der Option -h, die wie bei df funktioniert.
Mit -s (summarize) rechnet du den belegten Platz aller Unterverzeichnisse zusammen und zeigt ihn an. Um die gesamte Belegung jedes einzelnen Unterverzeichnisses zu erfahren (Abbildung 5), kombinieren Sie den Befehl mit der Shell-Wildcard*,

Abbildung 5: Den verbrauchten Speicherplatz erfahren Sie mit du.
Die angefragten Verzeichnisse belegen alle nicht sehr viel Platz, aber was ist eigentlich mit public_html los? Dieses Verzeichnis scheint völlig leer zu sein, denn df zeigt 0 Bytes. Tatsächlich befindet sich darin eine große Menge an Daten, aber der Eintrag ist ein symbolischer Link, der auf ein anderes Verzeichnis zeigt. Um solchen Links nachzugehen, bietet df die Option -L (Abbildung 6).

Abbildung 6: Mit -L geht du symbolischen Links nach.
Dateien finden
Früher oder später merken Sie mit Hilfe der vorgestellten Programme wohl, dass sich ein ziemlicher Wust an Daten angesammelt hat. Gut, dass Linux auch zum Suchen und hoffentlich auch Finden von Dateien Befehle kennt. Das Naheliegende ist in diesem Fall auch das Richtige: Das Programm heißt find. Praktischerweise bringt Linux die GNU-Version der Software mit, die weniger sperrig ist als die anderer Unix-Spielarten. Um mit ihr das aktuelle Directory und seine Unterverzeichnisse nach der Datei index.html zu durchsuchen, genügt der Aufruf
find -name "index.html"
Komplizierter wird es schon, wenn Sie nach allen Dateien mit der Endung .html suchen wollen. Dafür brauchen Sie wiederum eine Shell-Wildcard. Für eine Suche im ganzen Filesystem, statt nur in den aktuellen Unterverzeichnissen, stellen Sie dem Suchmuster noch den Suchpfad voran, hier das Wurzelverzeichnis:
find / -name "*.html"
Praktischerweise gibt es eine Alternative zu find, die mit weniger Optionen auskommt, nämlich locate. Damit gestaltet sich die obige Suche etwas einfacher:
locate .html
So einfach kann Suchen sein. Allerdings muss mittels updatedb die Datenbank immer aktuell gehalten werden, was bei den meisten Distributionen ein Cronjob jede Nacht automatisch übernimmt.
Dateien im Detail
Haben Sie schon einmal vergeblich versucht, eine Datei zu löschen, und stattdessen eine ominöse Meldung erhalten, das File werden gerade eben benutzt? Welcher Prozess dahinter steckt, erfahren Sie mit fuser. Im einfachsten Fall rufen Sie das Programm mit einem einzigen Parameter auf, dem Namen der Datei. Wird diese wirklich von einem Prozess verwendet, gibt fuser die Prozess-ID aus. In Abbildung 7 zeigt es eine ganze Reihe von Prozessen, die /etc/hosts verwenden. Zusätzlich illustriert das Beispiel die Verwendung der Option -u, die den zu der jeweiligen Prozess-ID gehörigen Benutzer ausgibt. Damit der Befehl diese Information auch preisgibt, müssen Sie über die nötigen Rechte verfügen. Im Zweifelsfall führen Sie ihn also als Administrator aus.
Auf den meisten Systemen findet sich fuser zudem im Verzeichnis /sbin, das nicht unbedingt Teil des Ausführungspfades PATH ist. Benutzen Sie also ruhig, wie im Beispiel, den Befehl mit seinem vollständigen Pfad.
Ausbaufähig
Es gibt unzählige Applikationen, die etwas über die Systemauslastung verraten. Es gibt auch etliche Programme, die nicht auf der Konsole laufen, sondern eine grafische Benutzeroberfläche mitbringen. Sind die aber nicht installiert, bleiben immer noch die vorgestellten, einfachen Mittel. Es empfiehlt sich, zu jedem Tool einmal die Manpage zu lesen (man befehlsname), um wenigstens einen Überblick über die Funktionalität zu gewinnen.
Die vorgestellten Werkzeuge wie top lassen sich verwenden, um einen Überblick bekommen. Andere, beispielsweise ps, sind für gezielte Suchen besser geeignet. Sie lassen sich auch gut mit anderen Unix-Kommandos verketten. So ist die Zusammenarbeit mit less und grep unerlässlich, will man nicht den Überblick vor lauter Zahlen verlieren. Damit haben Sie das nötige Handwerkszeug, das einen weiteren, reibungslosen Betrieb ihres Linux-Systems garantiert.
Der Autor
Nico Lumma ist Leiter Technik bei der orangemedia.de GmbH und administriert seit Jahren etliche Linux-basierte Server und Desktops
Glossar
- Load
- Eigentlich Load Average oder auf deutsch Durchschnittslast. Ein Maß für die Auslastung des Betriebssystems. Ein Multitasking-System wie Linux arbeitet Programme in kleinen Stücken nacheinander ab, so dass der Eindruck paralleler Verarbeitung entsteht. Die Prozesse selbst warten in einer Schlange, bis sie drankommen. Die Anzahl der in einem bestimmten Zeitquantum wartenden Prozesse ist die Load oder Last.
- Zombies
- Wie im echten Leben handelt es sich dabei auch in der Linuxwelt um einen Untoten. In diesem Fall allerdings um einen untoten Prozess, der zwar eigentlich nicht mehr läuft, von dem das Betriebssystem aber noch Einträge in der Prozesstabelle hält, weil der Elternprozess (des Zombies) diese Daten noch benötigt.
- Nice
- Der Nice-Level gibt die Priorität eines laufenden Prozesses an, die von -20 (höchste Priorität) bis 19 reicht. Der Befehl nice startet ein Programm mit der gewünschten Priorität, die sich zur Laufzeit mit renice verändern lässt.
- Swap
- Da der Hauptspeicher (RAM) eines Computers relativ klein ist, lagern Betriebssysteme wie Linux nicht gebrauchte Teile von Daten und Programme während des Betriebs auf größere (aber langsamere) Festplatten aus. Will ein Programm ausgelagerte Teile benutzen, muss das Betriebssystem sie erst wieder von Platte ins RAM laden. So tauscht (englisch swap) Linux im Hintergrund ständig Daten zwischen Hauptspeicher und Festplatte aus. Das geschieht ohne Zutun des Users, der Kernel braucht dazu jedoch eine spezielle Partition, die Swap-Partition.
- kontrollierendes Terminal
- Das Terminal, in dem ein Programm interaktiv gestartet wurde, beispielsweise ein Textfenster auf der grafischen Oberfläche. Für solche Prozesse dient es als Standardkanal für Ein- und Ausgabe. Einige Programme (wie Serverprozesse) besitzen kein kontrollierendes Terminal.
- Shell-Wildcard
- Ihre Text-Arbeitsumgebung, die Shell, behandelt bestimmte Zeichen als Stellvertreter für eine oder mehrere normale Buchstaben. So steht ? für einen einzelnen Buchstaben, während * auf beliebige Zeichenketten zutrifft. Mit dem Befehl ls *.jpg zeigt die Shell also alle Dateinamen an, die mit .jpg enden, egal was davor steht.
- Cronjob
- Regelmäßig durch das System, genauer den Cron-Daemon, ausgeführte Aufgaben. Welche das sind und zu welchen Zeiten sie laufen, legt der Administrator beispielsweise in der Datei /etc/crontab, den Verzeichnissen in /etc/cron.d oder mittels des Befehls cron an. Letzterer steht auch normalen Benutzern zur Verfügung, um regelmässig Programme ausführen zu lassen.









