Zurück

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:

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.