Inhaltsverzeichnis
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 Prozess 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, dass den Prozess ausmacht. - root
Ein symbolischer Link auf das Verzeichnis, das für den Prozess das Wurzelverzeichnis darstellt. - console
Zeigt ein paar Informationen der aktuellen Console an - fb
Framebuffer Device - filesystems
Zeigt die unterstützen Dateisysteme des Kernels an - locks
aktuell geblockt vom Kernel - meminfo
Infomation vom Systemspeicher - modules
Zeigt die aktuell geladene Module an - mounts
Zeigt die gemountete Partionen an - partitions
Liste alle Partitioenen des Systems an. Auch die nicht gemountet sind - swap
Information vom Swap Speicher - uptime
Zeigt wielange das Sytem aktuell gelauft ist. - version
Zeigt Kernel und Systeminformationen
Daneben finden sich weitere Informationen zu den verwendeten Ressourcen (Speicher, Libraries) und ein Unterverzeichnis fd, das die File-Descriptoren aller vom Prozess verwendeten Dateien enthält.
Diese Information wird beispielsweise von den Programmen verwertet, die Prozess-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 Hardware-relevant 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. Das Proc Verzeichnis infomiert über die verbaute Hardware, wie CPU, Grafikkarte, RAM, Mainboard, Soundkarte, ISDN Karte, Netzwerkkarte, USB Anschlüsse und viele mehr. 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 Hardwareparameter 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 so viel 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. Allerdings gehen die Einstellungen nach einem Neustart wieder verloren. Sollten Veränderung dauerthaft gewünscht sein, müssen diese mittel /etc/sysctl.conf gepflegt werden. Z.b.: Eine dauerhafte Portforwarding wird mit dem folgenden Eintrag erstellt:
net.ipv4.ip_forward = 1
Eine Übersicht vom Proc Verzeichnis ( nicht Vollständig! )
Proc Verzeichnis
/proc/cmdline
/proc/modules
/proc/uptime
/proc/partitions
Ausgabe
BOOT_IMAGE=/boot/vmlinuz-5.15.0-56-generic root=UUID=42fed78a-2e86-41ec-9e97-7d34c34b49cc ro quiet splash vt.handoff=7
bnep 28672 2 – Live 0xffffffffc11a3000
bluetooth 704512 7 bnep, Live 0xffffffffc1220000
ecdh_generic 16384 1 bluetooth, Live 0xffffffffc11b2000
ecc 36864 1 ecdh_generic, Live 0xffffffffc1196000
tls 114688 0 – Live 0xffffffffc1171000
xfrm_user 40960 2 – Live 0xffffffffc1166000
xfrm_algo 16384 1 xfrm_user, Live 0xffffffffc0ff5000
twofish_generic 20480 0 – Live 0xffffffffc1012000
twofish_avx_x86_64 53248 0 – Live 0xffffffffc1158000
1917297.84 22746393.20
major minor #blocks name
7 0 68 loop0
7 1 4 loop1
7 2 119492 loop2
7 3 104064 loop3
7 4 56916 loop4
7 5 355428 loop5
7 6 64748 loop6
7 7 244652 loop7
259 0 500107608 nvme0n1
259 1 524288 nvme0n1p1
259 2 499581952 nvme0n1p2