Das Proc File System verstehen

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

KernelCorner

AuthorImage:[Here we need a little image from you]

[Sandeep Grover]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Sandeep Grover

en to de J�rgen Pohl

AboutTheAuthor:[A small biography about the author]

Sandeep Grover arbeitet f�r Magma Design Automation, India - die am schnellsten wachsende EDA (Electronic Design Automation)-Firma. In seiner Freizeit besch�ftigt er sich mit den Internas von Linux, in der Hoffnung, eines Tages zum Linuxkernel beitragen zu k�nnen!

Abstract:[Here you write a little summary]

Der Linuxkernel enth�lt einen Mechanismus, um Zugang zu seinen internen Datenstrukturen m�glich zu machen und um Kerneleinstellungen im laufenden Betrieb �ber das /proc-Dateisystem zu �ndern. Wir werden hier das /proc-Dateisystem in Bezug auf die Intel x86-Architektur behandeln - das zugrunde liegende Konzept f�r Linux ist jedoch auf allen Plattformen gleich.

ArticleIllustration:[One image that will end up at the top of the article]

[the proc filesystem]

ArticleBody:[The main part of the article]

/proc - ein virtuelles Dateisystem

Das /proc-Dateisystem ist ein Mechanismus, um Informationen an die Prozesse des Kernels und die der Kernelmodule zu schicken (daher der Name /proc). Dieses Pseudo-Dateisystem erlaubt uns, auf die interne Datenstruktur des Kernels einzuwirken, n�tzliche Informationen �ber die Prozesse herauszufinden und um Einstellungen w�hrend des Betriebs zu �ndern (durch �nderung der Kernelparameter). /proc ist im Hauptspeicher untergebracht, w�hrend die anderen Dateisysteme auf der Festplatte gespeichert sind. Betrachten wir die Datei /proc/mounts (die alle gemounteten Dateisysteme auflistet, wie z.B. den "mount"-Befehl), sollten wir eine Zeile finden, die etwa so aussieht:


grep proc /proc/mounts
/proc /proc proc rw 0 0

/proc wird durch den Kernel gehandhabt und hat keine eigenes Device. Da die Datei haupts�chlich vom Kernel gesteuerte Zustandsinformationen enth�lt, ist es logisch, diese im Hauptspeicher unterzubringen, der vom Kernel gehandhabt wird. Der Befehl 'ls-l' - in Bezug auf /proc - zeigt uns, dass die meisten Dateien eine Gr�sse von 0 Byte haben. Schauen wir uns die Datei jedoch n�her an, finden wir eine ganze Menge Informationen. Wie ist das m�glich? Das geschieht, weil sich das /proc-Dateisystem - wie alle normalen Dateisysteme - in der Virtual File System-Schicht (VFS) registriert. Bei Aufrufen des VFS auf I-nodes f�r Dateien/Verzeichnisse generiert das /proc-Dateisystem diese Dateien/Verzeichnisse dynamisch aus Informationen vom Kernel. Diese Verzeichnisstruktur entsteht also erst wenn man darauf zugreift.

Das proc-Dateisystem mounten

Falls dieses noch nicht in Ihrem System gemountet ist, kann das durch folgenden Befehl geschehen -

mount -t proc proc /proc

Mit diesem Befehl sollten Sie Ihr proc-Dateisystem erfolgreich gemountet haben. N�here Informationen sind in der mount-Manpage zu finden.

Anschauen der /proc-Dateien

Durch die /proc-Dateien erhalten wir Zugang zu Infomationen �ber der Zustand des Kernels, Attribute des Rechners, den Status der laufenden Prozesse, usw. Die meisten Dateien im /proc-Verzeichnis liefern uns einen aktuellen Einblick in die technische Umgebung des Systems. Obwohl die /proc-Dateien virtuell sind, k�nnen sie mittels Dateieditor oder durch Programme - wie 'more', 'less' oder 'cat' - eingesehen werden. F�r jeden Editor, der eine virtuelle Datei �ffnen will, wird diese umgehend aus aktuellen Informationen des Kernels erzeugt. Hier sind ein paar interessante Ergebnisse �ber mein System

$ ls -l /proc/cpuinfo -r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo

$ file /proc/cpuinfo
/proc/cpuinfo: empty

$ cat /proc/cpuinfo

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 6
cpu MHz         : 1000.119
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
sep_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips        : 1998.85

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 6
cpu MHz         : 1000.119
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
sep_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips        : 1992.29

Das ist das Ergebnis f�r eine Zwei-CPU-Maschine. Die meisten der Informationen bed�rfen keiner Erkl�rung, sie liefern n�tzliche Hardwareinformationen �ber dieses System. Einige der Angaben der /proc-Dateien sind kodiert, es bestehen verschiedene Utilities, welche die kodierten Informationen interpretieren und und in lesbarer Form ausgeben. Einige der Utilities sind: top', 'ps', 'apm', usw.

Brauchbare Informationen �ber den Kernel zu erzeugen


Das Proc-File-System kann n�tzliche Angaben �ber das System und den laufenden Kernel sammeln. Einige der wichtigen Dateien finden wir in der folgenden Liste

/proc enth�lt viel mehr Dateien als die vorgehende Liste. Der aufmerksame Leser sollte 'more' f�r jede Datei im /proc-Verzeichnis durchf�hren oder in [1] f�r mehr Informationen zu den Dateien im /proc-Verzeichnis nachlesen. Ich empfehle 'more' anstelle von 'cat' zu benutzen, bis Sie das Dateisystem etwas genauer kennen, denn einige Dateien (z.B. kcore) k�nnnen sehr umfangreich sein.

Informationen �ber laufende Prozesse

Mit dem /proc-Dateisystem kann man Informationen �ber jeden laufenden Prozess aufsp�ren. Es gibt einige nummerierte Unterverzeichnisse im /proc. Jedes nummerierte Unterverzeichnis bezieht sich auf eine Prozess-ID (PID). Das bedeutet, f�r jeden laufenden Prozess gibt es ein Unterverzeichnis innerhalb von /proc, bezeichnet mit der zugeh�rigen PID. Innerhalb dieser Unterverzeichnisse finden wir Dateien mit wichtigen Details �ber den Status und die Umgebung der Prozesse. Probieren wir die Suche nach einem laufenden Prozess.

$ ps -aef | grep mozilla
root 32558 32425 8  22:53 pts/1  00:01:23  /usr/bin/mozilla
Der obige Befehl deutet auf einen laufenden Prozess von Mozilla mit der PID 32558. Infolgedessen sollte in /proc ein Unterverzeichnis mit der Nummer 32558 zu finden sein.

$ ls -l /proc/32558
total 0
-r--r--r--    1 root  root            0 Dec 25 22:59 cmdline
-r--r--r--    1 root  root            0 Dec 25 22:59 cpu
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 cwd -> /proc/
-r--------    1 root  root            0 Dec 25 22:59 environ
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 exe -> /usr/bin/mozilla*
dr-x------    2 root  root            0 Dec 25 22:59 fd/
-r--r--r--    1 root  root            0 Dec 25 22:59 maps
-rw-------    1 root  root            0 Dec 25 22:59 mem
-r--r--r--    1 root  root            0 Dec 25 22:59 mounts
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 root -> //
-r--r--r--    1 root  root            0 Dec 25 22:59 stat
-r--r--r--    1 root  root            0 Dec 25 22:59 statm
-r--r--r--    1 root  root            0 Dec 25 22:59 status
Die Datei "cmdline" enth�lt den Befehl, der aufgerufen wird, um den Prozess zu starten. Die "environ"-Datei enth�lt die Umgebungsvariablen f�r den Prozess. "status" enth�lt die Statusinformationen des Prozesses, einschliesslich Benutzer (UID)- und Gruppen (GID)-Identifikation des Benutzers, der den Prozess ausf�hren l�sst, sowie die Parentprozess-ID (PPID) - welche die PID instanziierte - und den gegenw�rtigen Status des Prozesses, wie "Sleeping" oder "Running" Jedes Prozessverzeichnis hat einige symbolische Links. "cwd" ist ein Link zum aktuellen aktiven Verzeichnis, "exe" zur ausf�hrbaren Datei des aktiven Prozesses, "root" ist ein Link zum Verzeichnis, welches der Prozess als sein root-Verzeichnis erkennt (meistens "/"). Das Verzeichnis "fd" enth�lt Links zu den Dateideskriptoren, die der Prozess benutzt. Der "cpu"-Eintrag erscheint nur bei SMP-Linuxkerneln. Er enth�lt Angaben �ber die Dauer des Prozesses f�r jedes CPU.

/proc/self ist ein interessantes Unterverzeichnis, es erm�glicht einem Programm Informationen �ber seinen eigenen Prozess zu finden. Die Angabe /proc/self ist ein symbolischer Link zum /proc-Verzeichnis - er bezieht sich auf den Prozesses der gerade das /proc-Verzeichnisses liest.

Interaktion mit dem Kernel durch /proc


Die meisten oben genannten Dateien in /proc sind schreibgesch�tzt. Das /proc-Dateisystem erm�glicht jedoch durch Lese-/Schreibdateien - innerhalb von /proc - auf den Kernel einzuwirken. In diese Dateien schreiben kann den Zustand des Kernels �ndern, deshalb sollten �nderungen dieser Dateien mit Vorsicht durchgef�hrt werden. Das /proc/sys-Verzeichnis enth�lt Lese-/Schreib-Dateien, es kann daher benutzt werden, um das Verhalten des Kernel zu �ndern.

/proc/sys/kernel - Diese Verzeichnis enth�lt Informationen zum allgemeinen Kernelverhalten. /proc/sys/kernel/{domainname, hostname} enth�lt den Domainnamen und den Hostnamen der Maschine/ des Netzwerks. Diese Dateien k�nnen f�r die �nderung der Namen benutzt werden.

$ hostname
machinename.domainname.com

$ cat /proc/sys/kernel/domainname
domainname.com

$ cat /proc/sys/kernel/hostname
machinename

$ echo "new-machinename"  > /proc/sys/kernel/hostname

$ hostname
new-machinename.domainname.com

Wie gesagt durch �nderung der Dateien innerhalb des /proc-Dateisystems k�nnen wir den Hostnamen wechseln. Viele andere konfigurierbare Dateien sind im /proc/sys/kernel zu finden. Es ist jedoch nicht m�glich alle diese Dateien hier aufzuf�hren, die Leser k�nnen die Details dieses Verzeichnisses einfach einsehen.
Eine weitere konfigurierbare Datei ist /proc/sys/net.Dateien innerhalb dieses Verzeichnisses k�nnen f�r �nderungen von Netzwerkeigenschaften von Maschine/Netzwerk benutzt werden. Ein Beispiel: einfach durch �nderung einer Datei k�nnen Sie Ihre Maschine im Netzwerk unsichtbar machen.

$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Das versteckt Ihre Maschine im Netzwerk, indem es die Antwort auf icmp_echos verweigert. Der Host wird nicht auf ping-Aufrufe von anderen Hosts antworten.

$ ping machinename.domainname.com
no answer from machinename.domainname.com
Um zur Grundeinstellung zur�ckzugelangen, geben wir ein
$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Es gibt viele andere Unterverzeichnisse im /proc/sys, in denen durch Konfiguration die Eigenschaften des Kernels ge�ndert werden k�nnen. Siehe [1], [2] f�r weitere Angaben.

Zusammenfassung

Das /proc-Dateisystem bietet eine Schnittstelle zum Linuxkernel. Es hilft, den Status und die Konfigurationen vieler Einrichtungen und Prozesse Ihres Systems zu ermitteln. Das Verst�ndnis und das angewandte Wissen dieses Dateisystems ist deshalb der Schl�ssel, um das Beste aus Ihrem Linuxsystem zu machen.

Literaturverzeichnis