Das Proc File System verstehen



Ähnliche Dokumente
Warum ist Linux für EmbeddedSysteme so attraktiv? Carsten Emde. Open Source Automation Development Lab (OSADL) eg

Einführung in die Programmierung mit C++

Dateisysteme Linux-Kurs der Unix-AG

Prozesse, Logs und Systemverwaltung

UNIX/Linux Lösung. Mär 14, 17 20:40 Seite 1/6. Prozeßsynchronisation (was ist das?, wo kommt es vor?, Beispiel?):

Swappen über Netzwerk

Prozesse, Logs und Systemverwaltung

DOSEMU. Vortrag im Hauptseminar Konzepte und Techniken virtueller Maschinen und Emulatoren. Matthias Felix FAU. 13.

1 LINUX-CHEATSHEET (symbolischer Name localhost ) ist der jeweils aktuelle

Einführung in die Kommandozeile

Allgemeines. Shell Programmierung Unix. Kommentar. Vorgangsweise. Mag. Thomas Griesmayer

Grundlagen der Programmierung

UNIX/Linux Lösung. Mär 08, 16 16:11 Seite 1/6

Da einige Befehle gerne in Vergessenheit geraten werden hier einige essentielle und nützliche Befehle aufgelistet.

Bernd Bleßmann, Jörg Bleßmann. Linux. Aufbau und Einsatz eines Betriebssystems. 1. Auflage. HLuHB Darmstadt. Bestellnummer Bildungsverlag EINS

ATB Ausbildung Technische Berufe Ausbildungszentrum Klybeck

GNU/Linux Introduction Linux Introduction: Part 1. Simon M. Haller, Sebastian Stabinger iis.uibk.ac.at

Allgemeines zu Unix (Solaris, Linux, MAC OS X, FreeBSD,Open BSD usw.)

Arbeiten mit der Shell Teil 5

Datenbanken und Netzanbindung

Mifas unter Windows 2000 installieren

Basiskonzepte des Rechnerbetriebs

6.1.5 Verzeichnisdateien

BASIC Tutorial für Anfänger

Computer & GNU/Linux Einführung Teil 1. Simon Haller iis.uibk.ac.at

Linux Paging, Caching und Swapping

Zwei Möglichkeiten die TLB zu aktualisieren

Material zum Grundlagenpraktikum ITS. eine kleine Linux-Befehlsreferenz. Stand: Oktober 2007 zusammengestellt von: Cornelia Menzel Version 1.

Initramfs - The initial RAM filesystem

Zugriffsrechte. anzeigen lassen mit dem Befehl: ls -l

Betriebssysteme 1. Thomas Kolarz. Folie 1

UNIX/Linux Lösung. Mär 18, 18 15:34 Seite 1/6

Dateisystem 2, RegEx, Manpages

pwd mkdir Zeigt das aktuelle Verzeichnis an Beispiel: pwd

Arbeiten in der Unix-Kommandozeile. PeP et al. Toolbox Workshop

Linux in a Nutshell. Exkurs

Linux Tutorium I IT-SICHERHEIT WS1617 BENJAMIN KUHNERT

Linux Grundlagen. Wolfgang Scheicher. 20. Mai 2006

Dateisystem 1, Suchpfad, Befehlstypen

Sicherheitsupdate Meltdown und Spectre

SelfLinux Dateien unter Linux

Praktische Übung. Die Lernplattformen ILIAS ist mit Stud.IP verbunden, sodass Sie Lernmodule dieser Plattform

Linux eine Einführung

Vorlesung Unix-Praktikum

Linux-Befehlsreferenz

OFS: Ein allgemeines Offline-Dateisystem auf Basis von FUSE

Betriebssysteme I: Klassische UNIX Exploits

Sandbox-Verfahren für GNU/Linux. Programme in abgeschotteten Umgebungen ausführen 1 / 38

In diesem Abschnitt wollen wir uns mit der Architektur von Datenbank Managements Systemen beschäftigen.

Systeme I: Betriebssysteme Übungsblatt 3

Arbeiten in der Unix-Kommandozeile

Sep 25, 18 8:36 UNIX/Linux Lösung

1.102 Installation von Linux und Paketmanagement. Auf dem Weg: Certified Linux Professional

SLT Schwabacher Linuxtage 2009 Herzlich willkommen. Peter Botschafter / sudo

9.3 Virtuelle FS Linux VFS Windows IFS 9.4 Dateizugriff in Linux-Programmen

Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7)

Arbeiten in der Unix-Kommandozeile

Praktikum RO1 Einführung Linux / Ubuntu / Bash

LINUX 4U Das professionelle

SelfLinux Dateien unter Linux

Okt 10, 16 17:29 UNIX/Linux Lösung

Linux-Einführung Übung

Hardware. Heimo Schön 4/2002 Seite 1/22

Dateisystem 1, Suchen & Finden

Klausur Betriebssysteme

Fedora 24 Workstation Installation

Implementierung eines Dateisystems für Java-basierte eingebettete Systeme

Literatur. Einführung in Unix. Login. Passwort. Mag. Thomas Griesmayer. Benutzererkennung und Passwort Case-Sensitiv Prompt

Das ext2-dateisystem

Computer & GNU/Linux Einführung Teil 3

Die UNIX-Kommandozeile

Bunte Shells Benutzung der Shellfarben. Allgemeines. Konfiguration der Shell. LinuxFocus article number 335

Die Architektur von UNIX/Linux- Betriebssystemen. Mag. Lukas Feiler, SSCP

SCI Linux Einführung

Konzepte von Betriebssystemkomponenten. Gerätetreiber. Mario Körner

Benutzer- und Rechte-Verwaltung Teil 1

Unix/Linux Grundlagen für Einsteiger

Unix Grundlagen (Teil 1.b)

UNIX Die wichtigsten Befehle

Das Lern-Management System (LMS) StudIP an der Universität Osnabrück

Übung zur Vorlesung Strukturiertes Programmieren WS 2014/15. Übungsblatt 1: JAVA - Erste Schritte Abgabe: Besprechung:

User Mode Linux as a Honeypot. Seminar User Mode Linux Christian Delis WS 05/06 koblenz.de

Dateisystem: Einführung

Dateisystem: Einführung

Socket-Details für Linux Admins

Unix/Linux Survival Guide

EINFÜHRUNG IN LINUX DR. MATTHIAS M. HÖLZL

Eine kleine Einführung in die BASH (Bourne again Shell) Part 1 Die Grundbefehle einer Shell

Tipps & Tricks: OS Monitoring mit "OSWatcher Black Box" (7.3.0)

Linux Tutorium. Linux Tutorium Systemkonfiguration. Linux Tutorium Systemkonfiguration Seite: 1

Dateisystem 2, Suchen & Finden

UNIX/Linux-Minikurs. Ralf Seidler, Daniel Walther, Torsten Bosse. Institut für Informatik Friedrich-Schiller-Universität Jena

Was machen wir heute? Betriebssysteme Tutorium 11. Mounten: Vorher. Frage 11.1.a

Transkript:

LinuxFocus article number 324 http://linuxfocus.org Das Proc File System verstehen by Sandeep Grover <sandeep<at>magma DA.com> 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: 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. /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 1/6

/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 hlt_bug sep_bug f00f_bug coma_bug fpu fpu_exception cpuid level : 2 2/6

wp 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 hlt_bug sep_bug f00f_bug coma_bug fpu fpu_exception cpuid level : 2 wp 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/cpuinfo Informationen über die CPU (Model, Familie, Cachegrösse, usw.) /proc/meminfo Informationen über vorhandenes RAM, Swap space, usw. /proc/mounts erzeugt eine Liste der gemounteten Dateisysteme /proc/devices erzeugt eine Liste der vorhandenen Geräte /proc/filesystems unterstützte Dateisysteme /proc/modules Liste der geladenen Module /proc/version Kernelversion /proc/cmdline Parameters, die beim Start an den Kernel übergeben werden /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. 3/6

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 4/6

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. 5/6

Literaturverzeichnis [1] Dokumentation über das Linux proc Dateisystem kann hier gefunden werden: /usr/src/linux/documentation/filesystems/proc.txt [2] RedHat Guide: The /proc File System: http://www.redhat.com/docs/manuals/linux/rhl 7.3 Manual/ref guide/ch proc.html Webpages maintained by the LinuxFocus Editor team Sandeep Grover "some rights reserved" see linuxfocus.org/license/ http://www.linuxfocus.org Translation information: en > : Sandeep Grover <sandeep<at>magma DA.com> en > de: Jürgen Pohl <sept.sapins(at)verizon.net> 2005 01 11, generated by lfparser_pdf version 2.51 6/6