Titel: EasyLinux 08/2005: Systemdiagnose in der Shell
Pfad: http://www.easylinux.de/Artikel/ausgabe/2005/08/080-ps/index.html


Diagnose-Tools

Auf Herz und Nieren

von Elisabeth Bauer


Wer sich dafür interessiert, was sein Rechner gerade treibt, dem bietet die Linux-Kommandozeile eine Reihe mächtiger Diagnosewerkzeuge. Deren Ausgabe ist jedoch nicht immer leicht zu interpretieren. Wir bahnen einen Weg durch den Info-Dschungel.

Computer-Besitzer lassen sich bekanntlich in zwei Gruppen einteilen: Diejenigen, die genau wissen, welche Hardware in ihrem Rechner werkelt, und die, denen die Taktfrequenz ihres Prozessors und der Hersteller der Netzwerkkarte herzlich egal sind, solange der Computer nur funktioniert. Auch wenn Sie zur zweiten Gruppe gehören, kommen Sie irgendwann in eine Situation, in der Sie diese Informationen benötigen -- und sei es nur, um dem Nachbarn, der mit seinem GHz-Boliden protzt, Bescheid zu geben.

Dazu müssen Sie nicht den Rechner aufschrauben und seine Innereien inspizieren: Unter Linux starten Sie für die Systemdiagnose eine Shell. Eine ganze Reihe praktischer Tools verrät Ihnen jedes nur erdenkliche Detail über die Hardware Ihres Rechners. Dabei sei eines vorweg gesagt: Wer über jede Einzelheit der Kommandoausgaben grübelt, wird seines Lebens nicht froh; dazu sind die Programme viel zu geschwätzig. Dieser Artikel versucht, den Blick auf die relevanten Informationen zu lenken und diese zu erklären -- und unterschlägt dabei eine ganze Menge von Details, die in der Regel nur für Programmierer interessant sind.

Beginnen Sie die Untersuchung mit dem Herzstück des Rechners, dem Prozessor. Diese Information versteckt sich im Ordner /proc, einem dynamisch angelegten Verzeichnisbaum, in dem Linux zur Laufzeit Daten über das System ablegt. Mit

cat /proc/cpuinfo

erfragen Sie den Prozessortyp. Abbildung 1 zeigt die Ausgabe für einen AMD Athlon XP 2000+, samt Taktfrequenz (1659.642) und Cache-Größe.

Abb. 1: Der Befehl "cat /proc/cpuinfo" verrät, welcher Prozessor im Computer steckt, hier ein AMD Athlon.

Neben dem Prozessor enthält ein Computer meistens noch eine stattliche Anzahl Komponenten, die über den PCI-Bus angeschlossen sind. Welche das sind, fördert der Befehl

lspci

zu Tage. In Abbildung 2 finden sich u. a. eine Sound- und eine Netzwerkkarte von Silicon Integrated Systems, eine zweite Sound-Karte (Multimedia audio controller) von Ensoniq, eine weitere Netzwerkkarte (Ethernet controller) von Realtek, eine Nvidia-Grafikkarte (VGA compatible controller) und ein PCMCIA-Adapter (CardBus bridge) von Texas Instruments. Diese Angaben sind unter Linux wichtig, wenn das System Ihre Hardware nicht automatisch erkennt und keinen Treiber lädt. Unter Umständen gelingt es dann über die manuelle Auswahl des Gerätetyps, eine Komponente doch zur Mitarbeit zu bewegen.

Abb. 2: Die Ausgabe des Befehls "lspci" listet alle Hardware-Komponenten am PCI-Bus auf.

Alles über Festplatten

Die erste Anlaufstelle, bei Problemen mit eingebauten Festplatten-, CD- und DVD-Laufwerken ist der Befehl hdparm. Diesen müssen Sie als Benutzer root ausführen. Geben Sie dazu in einer KDE-Konsole

su -

und in der nächsten Zeile das Administratorpasswort ein

hdparm /dev/hda

verrät, in welchem Modus die erste Festplatte am ersten IDE-Controller läuft. So steht dort zum Beispiel in der mit using_dma beginnenden Zeile, ob der Distributor den DMA-Modus für die Festplatte aktiviert hat. Sind noch weitere Laufwerke eingebaut, sprechen Sie diese mit /dev/hdb usw. an. Das CD-ROM-Laufwerk erreichen Sie bei den meisten Rechnern unter dem Gerätenamen /dev/hdc.

Über Aufrufparameter können Sie mit diesem Befehl IDE-Geräte tunen. Dabei gilt es jedoch, vorsichtig zu sein, um die Hardware nicht zu beschädigen. Fast immer ungefährlich ist das Aktivieren des DMA-Modus für CD- oder DVD-Laufwerke. Dazu bringen Sie zunächst mit hdparm -i /dev/hdc in Erfahrung, welche Modi das Laufwerk unterstützt. hdc ersetzen Sie bei dem Befehl durch die Gerätedatei über die Linux das Laufwerk anspricht -- am schnellsten erfahren Sie das in der Hardware-Übersicht Ihrer Distribution. In der Ausgabe des Befehls sehen Sie die unterstützten DMA-Modi in der mit DMA modes beginnenden Zeile. Mit

hdparm -d1 /dev/hdc

aktivieren Sie den DMA-Modus und erhöhen damit die Lesegeschwindigkeit von diesem Laufwerk beträchtlich. Auch das On-the-fly-Brennen von CDs macht nur mit eingeschaltetem DMA-Modus wirklich Freude. Die Geschwindigkeit des Laufwerks testen Sie danach mit dem Kommando

hdparm -Tt /dev/hdc

Partitionsweise

Eine Festplatte ist üblicherweise in mehrere Partitionen aufgeteilt. Linux legt bei der Installation, wenn Sie nichts anderes angeben haben, zwei Partitionen an: die unter / gemountete Root-Partition, auf der sich Ihr System und Ihre Daten befinden und eine Swap-Partition, auf die das Betriebssystem Daten auslagert, wenn der Arbeitsspeicher nicht reicht. Welche Partitionen es auf dem Gerät /dev/hda gibt, verrät der Befehl

fdisk -l /dev/hda

Dieser zeigt in der ersten Spalte die Gerätedateien der existierenden Partitionen an, unter Start und End stehen die erste und letzte Zylindernummer und unter Blocks die Größe der Partition in Blöcken. In den letzten beiden Spalten steht die Nummer des Partitionstyps (ID) und zugeordnete Betriebssystem. Festplattenbereiche mit den Linux-Dateisystemen ext2, ext3 und reiserfs haben alle die ID 83.

Dass eine Partition existiert, bedeutet unter Linux jedoch noch nicht, dass Sie diese auch im Datei-Manager finden und Daten darauf speichern können: Dazu muss sie gemountet, d. h. unter einem bestimmten Ordner ins Dateisystem eingebunden sein. Zum Einhängen einer Partition dient das Kommando mount. Ohne weitere Angaben aufgerufen, zeigt es Ihnen an, welche Partitionen ins Dateisystem eingebunden sind und über welche Verzeichnisse Sie darauf zugreifen. Auch Wechselmedien wie CDs, DVDs und USB-Sticks erscheinen in dieser Liste. Als Ausgabe erhalten Sie für jedes eingebundene Gerät eine Zeile wie die folgende:

/dev/hda1 on / type ext3 (rw)

Hier ist die Partition /dev/hda1 als so genannte Root-Partition unter / gemountet. Der Dateisystemtyp ist ext3. Suse-Nutzer dürften hier reiserfs sehen, da die Nürnberger Distribution es standardmäßig als Dateisystem verwendet. In Klammern dahinter verrät Linux, dass die Partition rw -- also zum Lesen und Schreiben (read und write) -- eingehängt ist. Stünde hier ro (für readonly), hätten Sie ein Problem, weil Sie dann auf der Partition keine Daten speichern dürften. Die Swap-Partition wird nicht gemountet, sie taucht also in der Ausgabe nicht auf.

RAM und Swap

Ob sie genutzt wird und wie es generell um den Arbeitsspeicher Ihres Systems bestellt ist, notiert Linux im Verzeichnis /proc, das Sie schon vom Prozessor-Check kennen. Analog zu cpuinfo existiert dort die Datei meminfo.

cat /proc/meminfo

zeigt alles zum Thema RAM an: unter MemTotal die gesamte Menge an Arbeitsspeicher, unter MemFree, wie viel davon gerade frei ist. SwapTotal bezeichnet die Größe des Auslagerungsspeichers, SwapFree den davon ungenutzten Platz. Leider liefert der Befehl meminfo diese Angaben ganz altmodisch in KByte. Eine heutigen Arbeitsspeichermaßen angemessenere Ausgabe in MByte zeigt das folgende Kommando an:

free -m

Die nächste spannende Frage, welches System eigentlich auf einem Linux-Rechner läuft, verrät uname -a.

Linux aiolos 2.6.8-24.11-default #1 Fri Jan 14 13:01:26 UTC 2005 i686 athlon i386 GNU/Linux

Dieser Befehl, den es auch auf anderen Unix-Systemen gibt, zeigt Ihnen den Rechnernamen (hier aiolos), die Kernel-Version (2.6.8), das Erscheinungsdatum der Kernel-Version und das Betriebssystem (GNU/Linux) an. Welche Version Ihrer Distribution Sie einsetzen, erfahren Sie in einer Datei im Verzeichnis /etc: Suse Linux, Mandrake Linux und Fedora Core legen dort bei der Installation eine Datei SuSE-release (Suse) bzw. redhat-release (Mandrake Linux und Fedora Core) oder mandrake-release an. Dass Sie unter Mandrake Linux auch eine redhat-release finden, liegt daran, dass die Distribution ursprünglich auf Red Hat basierte. Den Inhalt dieser Textdateien schauen Sie sich mit dem Betrachter less an, wobei der Aufruf less dateiname lautet.

Gleich nach uname ist die Uptime, also die Zeit, wie lange das System bereits läuft, der nächste Wert, der Linux-Fans brennend interessiert:

$uptime
9:48am  an   0:23,  3 Benutzer,  Durchschnittslast: 0,00, 0,07, 0,18

Dieser Rechner wurde um 9:48 Uhr angeschaltet und läuft gerade einmal mickrige 23 Minuten. Zur Zeit werkeln drei Benutzer auf dem System. Die letzten Zahlen zeigen die durchschnittliche Auslastung des Systems an -- gemessen daran, wie viele Prozesse in den letzten 1, 5 und 15 Minuten auf die Zuteilung von Platten- oder Prozessorressourcen gewartet haben.

Wissen, was läuft

Um herauszufinden, welche Prozesse laufen, stellt Linux mehrere Befehle bereit. Der Task-Monitor top zeigt laufende Programme in einer dynamisch aktualisierten Tabelle an, mit q beenden Sie das Programm. pstree, das jedoch nicht auf allen Distributionen standardmäßig installiert ist, präsentiert ein hierarchisches Baumdiagramm (Abbildung 3). Der mächtigste Befehl ist jedoch ps. Sie rufen ihn typischerweise mit

ps -ef

auf. Die beiden Optionen sorgen dafür, dass ps alle laufenden Prozesse in einer Tabelle anzeigt (Abbildung 4). Zu Beginn präsentiert der Befehl eine Legende:

UID PID  PPID C STIME TTY  TIME CMD

UID bezeichnet die Benutzerkennung, unter der der Prozess läuft: Typischerweise sehen Sie hier root und Ihren Benutzernamen. Sind noch andere Benutzer -- etwa per ssh -- angemeldet, tauchen dort auch deren Benutzernamen auf. Die PID (Process ID) ist die Nummer des Prozesses -- eine wichtige Information, wenn Sie ein Programm, das sich aufgehängt hat, gewaltsam beenden wollen. Die PPID ist die Kennung des Elternprozesses (Parent Process ID), also des Programms, das den jeweiligen Prozess gestartet hat. Unter STIME erfahren Sie, wann das Programm gestartet wurde. TTY ist ein Relikt aus Zeiten von Terminal-Programmen: Jede Shell ist traditionell an ein Terminal-Gerät gebunden (/dev/tty1 usw.). Starten Sie ein Programm über die Shell, taucht dort dieses Gerät auf. Bei übers K-Menü aufgerufenen Programmen präsentiert Linux hier nur ein Fragezeichen. TIME verrät, wie viel Prozessorzeit das Programm bis jetzt verbraucht hat, und in der letzten Spalte steht die wichtigste Angabe von allen: der Programmname mit allen Aufrufparametern und dem vollen Pfad.

Abb. 3: Der Befehl "pstree" präsentiert die laufenden Prozesse in einer Baumstruktur.

Abb. 4: "ps -ef" zeigt die gerade aktiven Prozesse tabellarisch an.

Zu wissen, welche Programme so alle auf dem Rechner ihre Arbeit verichten, ist zwar informativ, doch darüber hinaus bietet Ihnen die Informationen von ps zusätzlich einen handfesten Nutzen: Gelegentlich kommt es vor, dass ein Programm gar nicht mehr reagiert. In der Shell machen Sie ihm mit ps und kill den Garaus. Rufen Sie dazu ps -ef auf und suchen Sie die Zeile mit dem gewünschten Programmnamen. Als Zweites benötigen Sie die Zahl in der Spalte PID -- die Prozess-ID. Mit kill PID beenden Sie das Programm aus der Shell heraus. Für PID geben Sie die zuvor herausgefundene Prozess-ID ein. Reagiert die Anwendung auf diese Aufforderung nicht, hilft

kill -9 PID

weiter. Dieser Befehl beendet das Programm gewaltsam. Es hat dabei keine Möglichkeit mehr, eventuell geöffnete Dateien zu speichern. Sie sollten diesen Befehl daher nur anwenden, wenn eine Anwendung gar nicht mehr reagiert.

Ein weiterer mächtiger Verbündeter im Zusammenspiel mit kill ist lsof. Dieses Tool listet auf, welche Prozesse auf eine bestimmte Datei oder ein Gerät zugreifen. So kann es Ihnen passieren, dass Linux sich weigert, die CD-Schublade zu öffnen, da noch ein Prozess auf das Medium zugreift. Werden Sie dann mit dem Kommando su - zum Administrator und geben Sie lsof /dev/hdc ein. hdc ersetzen Sie wieder durch die Gerätedatei, über die Linux das Laufwerk anspricht. Die Ausgabe des Befehls ähnelt der von ps: Auch hier finden Sie die Spalte PID, die Aufschluss darüber gibt, welche ID der Prozess hat, der auf das CD-Laufwerk zugreift. Handelt es sich nur um ein vergessenes Konqueror-Fenster auf einem anderen Desktop, reicht es aus, dieses zu schließen, damit Linux die CD freigibt. Der Griff zu kill ist nur dann nötig, wenn das Programm, das das Laufwerk blockiert, abgestürzt ist. Mit einem beherzten kill -9 PID machen Sie dem Spuk ein Ende und sogen dafür, dass Linux den Datenträger herausrückt. (amü)

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.


Feedback zu dieser Seite | Datenschutz | © 2017 COMPUTEC MEDIA GmbH | Last modified: 2007-04-05 11:10