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

Schreibe einen Kommentar