original in en Sandeep Grover
en to de J�rgen Pohl
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!
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.
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.
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.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 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
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/mozillaDer 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 statusDie 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.
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.comWie 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.
$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_allDas 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.comUm zur Grundeinstellung zur�ckzugelangen, geben wir ein
$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_allEs 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.
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.