1.101 – Das /proc-Dateisystem

600px-Tragelaphus_scriptus_(male)_cropped

Media Commons – Hans Hillewaert

Aus dem Bereich 1.101 – Hardware und Systemarchitektur der Unterlangen für die Linux Zertifizierung LPIC-1 [101]

Das /proc-Dateisystem

Das /proc-Verzeichnis ist kein wirkliches {de:Dateisystem} , sondern eine {de:Schnittstelle} zum {de:Betriebssystemkern|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 {de:Prozess_%28Informatik%29|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 {de: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.
Weblinks:
Das /proc-Dateisystem
Kapitel 2. Das /proc Dateisystem Red Hat Linux Referenzhandbuch oder
5.2. Top-Level Dateien in /procDateisystem

Alle Artikel zur LPIC unterliegen der GNU Free Documentation License.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert