Das /proc-Dateisystem
Das /proc-Verzeichnis ist kein wirkliches Dateisystem, sondern eine
Schnittstelle zum Kernel. Die Dateien, die in diesem Verzeichnis liegen,
benutzen keinen Speicherplatz auf der Platte, sind aber trotzdem les- und in
manchen Fällen auch beschreibbar.
Seinen Namen trägt dieses Verzeichnis daher, daß es für jeden laufenden
Prozess ein Unterverzeichnis bereithält, das Informationen über diesen
Prozess zur Verfügung stellt. Das Unterverzeichnis trägt als Namen die
ProzeßID (PID) des jeweiligen Prozesses. Es enthält unter anderem folgende
Dateien:
- cmdline
Die Kommandozeile, mit der der Prozeß gestartet wurde, mit allen verwendeten
Parametern.
- cwd
(current working directory) Ein symbolischer Link auf das Verzeichnis, das
beim Aufruf des Prozesses das aktuelle Arbeitsverzeichnis war.
- environ
Die komplette Umgebung des Prozesses (Variablen, Funktionen usw) sofern er
eine Umgebung hat.
- exe
Ein symbolischer Link auf das aufgerufene Programm, daß den Prozeß ausmacht.
- root
Ein symbolischer Link auf das Verzeichnis, das für den Prozeß das
Wurzelverzeichnis darstellt.
Daneben finden sich weitere Informationen zu den verwendeten Ressourcen
(Speicher, Libraries) und ein Unterverzeichnis fd, das die
File-Descriptoren aller vom Prozeß verwendeten Dateien enthält.
Diese Information wird beispielsweise von den Programmen verwertet, die
Prozeß-Informationen ausgeben.
Was aber für uns im Zusammenhang mit Hardware wesentlich wichtiger ist, ist
die Möglichkeit, im /proc-Verzeichnis auf bestimmte Informationen
zuzugreifen, die hardwarerelevant sind.
Die Hardwareparameter im /proc-Verzeichnis
Wie schon aus der Seite Hardwareparameter
hervorgegangen ist, benötigen wir, um bestimmte Hardware anzusprechen,
Einstellungen, die sowohl auf der Hardwareseite vorgenommen sein müssen, als
auch dem Betriebssystem bekannt sein müssen. Um festzustellen, welche dieser
Parameter Linux welcher Hardware zuweist bietet uns das
/proc-Verzeichnis mehrere Dateien, die diese Information
beinhalten. Nochmal zur Erinnerung: Es handelt sich hierbei nicht um reale
Dateien, sondern um Schnittstellen zum Kernel. Es sind also keine statischen
Informationen sondern die gegenwärtigen Informationen des Kernels, welche
Parameter von welcher Hardware benutzt werden. Diese Dateien sind
hervorragende Diagnosewerkzeuge, die bei der Fehlersuche meist gute Dienste
leisten. Ihr Inhalt ist mit Programmen wie cat oder less einsehbar.
Für die Hardware-Parameter spielen folgende Dateien im
/proc-Verzeichnis eine Rolle:
- /proc/interrupts
- Zeigt eine Liste der im Augenblick benötigten IRQ-Kanäle an, zusammen
mit der Information, wer diese IRQs benutzt (wem sie zugewiesen sind) und
wie oft die jeweiligen IRQs schon ausgelöst wurden.
- /proc/ioports
- Zeigt eine Liste der IO-Adressen an, die gegenwärtig in Benutzung sind
und die Information, wem sie zugeordnet sind. Die Adressen werden als
Adressbereich angegeben, der zeigt, wie breit der Zugriff auf eine solche
Adresse ist. Die Angabe
0170-0177 : ide1
zeigt etwa, daß auf die zweite IDE-Schnittstelle mit 8 Bit Breite
(170-177=8 Bit) zugegriffen wird. (Es handelt sich hier um die
Zugriffsbreite auf den Controller, nicht auf die Daten!).
- /proc/dma
- Hier finden wir die Angabe der benutzten DMA-Kanäle zusammen mit der
Information, wer sie benutzt.
- /proc/iomem
- Hier werden uns die Speicherbereiche der verschiedenen Speicherarten
angezeigt. Dazu zählen neben dem normalen Arbeitsspeicher (System RAM) auch
die Bereiche Bildschirmspeicher der Graphikkarte (Video RAM) und die
jeweiligen ROMs der Hauptplatine (System ROM) und der Erweiterungskarten
(z.B. Video ROM), sowie der Speicher des PCI-Systems, in dem die
Bus-Informationen abgelegt sind. Diese Angaben sind als Adressbereiche
(Startadresse - Endadresse) angegeben.
Andere Hardwareinformationen im /proc-Verzeichnis
Neben den verwendeten Hardwareparametern finden sich im /proc
Verzeichnis noch einige andere interessante Informationen über die
verwendete Hardware, die für Diagnosezwecke sehr brauchbar sind. Dazu zählen
die Dateien:
- /proc/cpuinfo
- Alle Informationen, die der Kernel über den/die verwendeten
Prozessor(en) hat, sind hier nachzulesen. Dazu zählen Prozessortyp und
-modell, Taktrate, Cache-Größe und viele Angaben über mögliche
Prozessorbugs.
- /proc/devices
- Eine Liste der block- und zeichenorientierten Geräte, die der Kernel
aktuell unterstützt. Neben der jeweiligen Angabe des Gerätenamens finden wir
hier auch die verwendete Major-Number.
- /proc/partitions
- Eine Liste aller dem System bekannten Plattenpartitionen, mitsamt Major-
und Minornummern. Je nachdem, ob der Kernel das devfs Dateisystem
unterstützt oder nicht, werden die Angaben in der Form
major minor #blocks name
3 0 16617888 hda
3 1 1028128 hda1
(alte Darstellung) oder
major minor #blocks name
3 0 19925880 ide/host0/bus0/target0/lun0/disc
3 1 4200966 ide/host0/bus0/target0/lun0/part1
(neue Darstellung bei Verwendung von devfs) angezeigt.
- /proc/pci
- Informationen, die der Scan des PCI-Busses ergeben haben. Hier finden
sich Informationen über alle am System angeschlossenen PCI-Geräte. Auch der
AGP-Bus (der in Wahrheit nur ein extra PCI-Bus mit nur einem Steckplatz ist)
ist hier angegeben zusammen mit allen gefundenen Karten.
Kernel- und Softwareinformationen im /proc-Verzeichnis
Neben der Hardware-Information hält das /proc-Verzeichnis auch noch
einige Details über den Kernel selbst und seine Fähigkeiten zur Verfügung,
sowie Informationen über aktuelle Systemzustände. Dazu zählen:
- /proc/cmdline
- Die Kommandozeile, mit der der Kernel selbst gestartet wurde. Hier sind
auch die entsprechenden Kernelparameter nachzulesen, die beim Booten
mitgegeben wurden. Außerdem ist der Dateiname des aktuellen Kernels genannt.
- /proc/filesystems
- Eine Liste aller Dateisystemtypen, die der Kernel im Augenblick kennt.
- /proc/meminfo
- Informationen über die gegenwärtige Auslastung des Arbeitsspeichers.
- /proc/modules
- Eine Liste der aktuell geladenen Kernel-Module.
- /proc/mounts
- Eine Liste aller gemounteter Dateisysteme. Hier finden sich auch die
Dateisysteme, die mit der Option -n gemountet wurden und so weder in
der Datei /etc/mtab stehen, noch durch den Befehl df anzeigbar sind.
- /proc/version
- Die aktuelle Kernelversion.
Weitere wichtige Unterverzeichnisse in /proc
Neben den besprochenen Dateien finden sich auch noch eine Menge
Unterverzeichnisse im /proc-Verzeichnis, die weitere Informationen
über angeschlossene Geräte und Kernelfeatures enthalten. Dazu zählen
insbesondere:
- /proc/bus
- Informationen über die gefundenen Bussysteme (PCI, USB, ...)
- /proc/ide
- Informationen über IDE-Geräte und -Schnittstellen.
- /proc/scsi
- Informationen über SCSI-Geräte und Schnittstellen.
- /proc/net
- Informationen über netzwerk-relevante Einstellungen. Hier finden wir
beispielsweise die Routing-Tabellen und die ARP-Informationen, die der
Kernel im Augenblick besitzt.
Aktive Veränderungsmöglichkeiten unter /proc/sys
Bisher haben wir das /proc Verzeichnis nur benutzt, um uns
Informationen über bestimmte Kerneleigenschaften geben zu lassen. Im
Verzeichnis /proc/sys können wir aber auch die Einstellungen
bestimmter Kernelfähigkeiten verändern. Das geschieht dadurch, daß wir die
gewünschten Werte in die Dateien schreiben, statt sie nur zu lesen. In der
Regel handelt es sich hierbei aber nur um Dateien, die einzelne Werte
enthalten, meist eine 1 oder 0, die ein "wahr" oder "falsch" repräsentieren.
Ein einfaches Beispiel für diese Fähigkeit ist die Einstellung, ob unser
Kernel in der Lage ist, als Router zu arbeiten oder nicht. Ein Router ist
ein Rechner, der einzelne Netzwerkpakete von einer Netzschnittstelle zu
einer anderen weitergibt. Ob diese Fähigkeit aktiviert ist oder nicht,
erfahren wir, wenn wir uns den Inhalt der Datei
/proc/sys/net/ipv4/ip_forward
ansehen. Wir schreiben also
cat /proc/sys/net/ipv4/ip_forward
Als Ausgabe bekommen wir eine 0, was soviel bedeutet, wie "Nein". Jetzt
wollen wir unseren Kernel routing-fähig machen. Dazu schreiben wir eine 1 in
diese Datei hinein. Dazu bedienen wir uns nicht eines Editors, sondern
einfach des Befehls echo Dieser Befehl gibt etwas auf die
Standard-Ausgabe aus, was wir aber dann in die gewünschte Datei umleiten:
echo 1 > /proc/sys/net/ipv4/ip_forward
Und schon ist der Kernel in der Lage zu routen.
An diesem Beispiel wird klar, daß das /proc-Verzeichnis auch zur
Veränderung der Kerneleigenschaften geeignet ist. Im Großen und Ganzen sind
alle Einstellungen unter /proc/sys auf diese Weise variierbar.