Das Dateisystem /proc ist eine Spezialität von Linux. Es ist ein virtuelles Dateisystem und verbraucht als solches keinen Platz auf Ihrer Festplatte. Es stellt einen einfachen Weg dar Systeminformationen abzufragen, zumal die meisten Dateien in diesem System lesbar sind (naja, mit etwas Übung). Viele Programme sammeln Informationen von Dateien aus /proc, formatieren diese Informationen nach ihren Wünschen und bilden sie ab. Dies trifft auf alle Programme zu, die Informationen über Prozesse wiedergeben. Einige von diesen haben Sie bereits kennengelernt (top, ps und andere). /proc stellt auch viele Informationen über Ihre Hardware bereit. Viele Programme die Ihnen Informationen darüber zur Verfügung stellen sind nur textbasierte oder grafische Schnittstellen, die proc-Dateien aufbereiten.
Es gibt ein besonderes Unterverzeichnis: /proc/sys. Dieses ermöglicht die Darstellung und Veränderung von Kern-Parametern im laufenden Betrieb.
Im Verzeichnis /proc finden Sie viele Verzeichnisse, die lediglich mit Nummern bezeichnet sind. Diese Verzeichnisse enthalten sämtliche Informationen über alle gegenwärtig auf dem System laufenden Prozesse:
$ ls -d /proc/[0-9]* /proc/1/ /proc/302/ /proc/451/ /proc/496/ /proc/556/ /proc/633/ /proc/127/ /proc/317/ /proc/452/ /proc/497/ /proc/557/ /proc/718/ /proc/2/ /proc/339/ /proc/453/ /proc/5/ /proc/558/ /proc/755/ /proc/250/ /proc/385/ /proc/454/ /proc/501/ /proc/559/ /proc/760/ /proc/260/ /proc/4/ /proc/455/ /proc/504/ /proc/565/ /proc/761/ /proc/275/ /proc/402/ /proc/463/ /proc/505/ /proc/569/ /proc/769/ /proc/290/ /proc/433/ /proc/487/ /proc/509/ /proc/594/ /proc/774/ /proc/3/ /proc/450/ /proc/491/ /proc/554/ /proc/595/ |
Als Benutzer können Sie (logischerweise) lediglich Auskünfte über Ihre eigenen Prozesse einholen. Melden Sie sich also als root an und schauen Sie beispielsweise, welche Informationen über den Prozess 127 erhältlich sind:
$ su Password: $ cd /proc/127 $ ls -l total 0 -r--r--r-- 1 root root 0 Dez 14 19:53 cmdline lrwx------ 1 root root 0 Dez 14 19:53 cwd -> // -r-------- 1 root root 0 Dez 14 19:53 environ lrwx------ 1 root root 0 Dez 14 19:53 exe -> /usr/sbin/apmd* dr-x------ 2 root root 0 Dez 14 19:53 fd/ pr--r--r-- 1 root root 0 Dez 14 19:53 maps| -rw------- 1 root root 0 Dez 14 19:53 mem lrwx------ 1 root root 0 Dez 14 19:53 root -> // -r--r--r-- 1 root root 0 Dez 14 19:53 stat -r--r--r-- 1 root root 0 Dez 14 19:53 statm -r--r--r-- 1 root root 0 Dez 14 19:53 status $ |
Jedes Verzeichnis enthält die selben Einträge. Es folgt eine kurze Beschreibung einiger:
cmdline: Diese (Pseudo-)Datei enthält die komplette Kommandozeile, mit der der Prozess aufgerufen wurde. Die Ausgabe ist nicht formatiert: zwischen Programm und Argumenten erfolgt keine Trennung, ebenso erfolgt kein Zeilenumbruch am Ende der Zeile.
cwd: Dieser symbolische Verweis zeigt auf das gültige Arbeitsverzeichnis des Prozesses.
environ: Diese Datei enthält alle für den Prozess definierten Umgebungsvariablen in der Form VARIABLE=Wert. Die Ausgabe ist – Ähnlich wie bei cmdline – nicht formatiert: Variablen werden nicht durch Zeilenumbrüche getrennt und es erfolgt auch kein Zeilenumbruch am Ende der Datei.
exe: Dies ist ein symbolischer Verweis, der auf die zum Prozess gehörende ausführbare Datei zeigt.
fd: Dieses Unterverzeichnis enthält die Liste der Dateideskriptoren, die gegenwärtig vom Prozess geöffnet wurden. Siehe unten.
maps: Wenn Sie sich den Inhalt dieser benannten Verkettung anschauen (beispielsweise mit cat), können Sie die Teile eines Prozess-Adressraums sehen, die gerade in eine Datei abgebildet (,,gemappt``) werden. Es gibt folgende Felder (von links nach rechts): der der Abbildung zugewiesene Adressraum, die der Abbildung zugewiesenen Berechtigungen, das Offset des Abbildungsbeginns, das Gerät, auf welchem sich die abgebildete Datei befindet, die Inode-Nummer der Datei und schließlich der Name der Datei selbst (für weitere Informationen siehe mmap).
root: Dies ist ein symbolischer Verweis, welcher auf das Wurzelverzeichnis des Prozesses verweist. Für gewöhnlich ist das /, aber sehen Sie sich bei Interesse die Informationen zu chroot an.
status: Diese Datei enthält verschiedene Informationen über den Prozess: den Namen der ausführbaren Datei, seinen gegenwärtigen Zustand, seine PID und PPID, seine reale und effektive UID und GID, seinen Speicherverbrauch und andere Informationen.
Wenn Sie den Inhalt des Verzeichnisses fd auflisten, erhalten Sie dies:
$ ls -l fd total 0 lrwx------ 1 root root 64 Dez 16 22:04 0 -> /dev/console l-wx------ 1 root root 64 Dez 16 22:04 1 -> pipe:[128] l-wx------ 1 root root 64 Dez 16 22:04 2 -> pipe:[129] l-wx------ 1 root root 64 Dez 16 22:04 21 -> pipe:[130] lrwx------ 1 root root 64 Dez 16 22:04 3 -> /dev/apm_bios lr-x------ 1 root root 64 Dez 16 22:04 7 -> pipe:[130] lrwx------ 1 root root 64 Dez 16 22:04 9 -> /dev/console $ |
Dies ist die Liste der vom Prozess geöffneten Dateideskriptoren. Jeder geöffnete Deskriptor wird durch einen symbolischen Verweis, dessen Name die Deskriptor-Nummer ist, bezeichnet. Die Bezeichnung verweist auf die von diesem Deskriptor geöffnete Datei.[1] Achten Sie auf die Berechtigungen der Symbolischen Verweise: hier ist der einzige Platz, an dem sie wirklich Sinn machen, da sie die Berechtigungen aufzeigen, mit der die dem Deskriptor zugehörige Datei geöffnet wurde.
[1] | Wenn Sie sich an die Sektion Ein- und Ausgabeumleitung erinnern, wissen Sie, für was die Deskriptoren 0, 1 und 2 stehen. |