You were redirected from informatik:linux:lnxkub_konzepte.

Linux Konzepte

Der Systemstart

Jedes Computer- und Betriebssystem durchläuft nach dem Einschalten eine genau festgelegte Prozedur zum Starten des Systems. Nachdem der allgemeine Startvorgang eines PCs, der durch das BIOS festgelegt ist, abgeschlossen ist, wird im MBR-Record eines Datenträgers (Eingestellt durch das BIOS, auf welchem gesucht wird) ein Bootloader gesucht und gestartet. Bei Linux ist dies meist der Linux-Loader LILO. Dieser Bootloader lädt dann den Kernel, wobei ihm dabei Parameter übergeben werden können. Genauso können LILO einige Einstellungen, sei es über die Konfigurationsdatei oder am LILO-Prompt, angegeben werden, z. B. Kernel, Startplatte, Speichergröße u.v.a.

Der gestartete Kernel übernimmt alle weiteren Aktionen, wie sie in der Abbildung Systemstart dargestellt sind. Hierbei regelt der Kernel lediglich den Zugriff auf die Hardware und stellt die Schnittstellen für den weiteren Betrieb zur Hardware bereit.

Systemstart

Der init-Prozeß

Nachdem der Kernel diese Aufgaben erledigt hat, wird der Prozeß /sbin/init gestartet. Dieses Programm mit der Prozeß-ID 1 übernimmt den weiteren Bootvorgang des Linuxsystems und ist der Ursprung aller Prozesse eines Unix- und Linuxsystems. Abgearbeitet wird die Datei /etc/inittab, die den weiteren Ablauf der Systeminitialisierung bestimmt.

/etc/inittab

Die Steuerungsdatei für den init-Prozeß ist die Datei /etc/inittab. Das Schema eines Eintrags hat die Form:

id-code:runlevel:action:command 

wobei der id-code aus zwei Zeichen besteht und eindeutig in der Datei sein muß, um eine Identifizierung des Eintrags zu ermöglichen. Runlevel gibt an, für welchen Runlevel der Eintrag gilt, action ist eine Anweisung für init und command ein Linux-Kommando oder Programm, welches gestartet werden soll.

Die wichtigsten action-Schlüsselwörter sind (eine vollständige Beschreibung erhalten Sie mit man inittab):

ctrlaltdel

gibt an, wie init auf Strg+Alt+Entf reagieren soll

initdefault

definiert den Default-Runlevel

once

init startet das Kommando beim Wechsel in diesen Runlevel

respawn

init startet das Kommando nach seinem Ende wieder neu

sysinit

init startet das Kommando einmal während des Boot-Prozesses

wait

init wartet auf das Ende des nachfolgenden Kommandos

Das nachfolgende Listing gibt eine gekürzte inittab-Datei einer SuSE-Distribution wieder. Der Standardrunlevel ist 2. Daher startet init bei einem normalen Systemstart zuerst das Skript /sbin/init.d/boot und danach /sbin/init.d/rc mit dem Parameter „2“. Desweiteren wird hier festgelegt, wie das System auf die Tastenkombination Strg+Alt+Entf reagieren soll sowie auf welchen Konsolen das Programm mingetty gestartet werden soll, um ein Login zu ermöglichen (hier auf den Konsolen 1 bis 6).

# default runlevel
id:2:initdefault:
 
# check system on startup
# first script to be executed if not booting in emergency (-b) mode
si:I:bootwait:/sbin/init.d/boot
 
# /sbin/init.d/rc takes care of runlevel handling
l0:0:wait:/sbin/init.d/rc 0
l1:1:wait:/sbin/init.d/rc 1
l2:2:wait:/sbin/init.d/rc 2
l3:3:wait:/sbin/init.d/rc 3
#l4:4:wait:/sbin/init.d/rc 4
#l5:5:wait:/sbin/init.d/rc 5
l6:6:wait:/sbin/init.d/rc 6
 
# what to do in single-user mode
ls:S:wait:/sbin/init.d/rc S
:S:respawn:/sbin/sulogin
# what to do when CTRL-ALT-DEL is pressed
ca::ctrlaltdel:/sbin/shutdown -h -t 4 now
 
# getty-programs for the normal runlevels
# <id>:<runlevels>:<action>:<process>
# The "id" field  MUST be the same as the last
# characters of the device (after "tty").
1:123:respawn:/sbin/mingetty -noclear tty1
2:123:respawn:/sbin/mingetty tty2
3:123:respawn:/sbin/mingetty tty3
4:123:respawn:/sbin/mingetty tty4
5:123:respawn:/sbin/mingetty tty5
6:123:respawn:/sbin/mingetty tty6
 
# end of /etc/inittab 

Runlevel

Der init-Prozeß kennt verschiedene Ausführungmodis, die sogenannten Runlevel. Runlevel sind numerische Bezeichnungen für Systemkonfigurationen. Abhängig vom Runlevel werden bestimmte Aktionen gestartet oder gestoppt. Z.B. gibt es Runlevel zum Starten im normalen, Multi-User und Netzwerk-Betrieb genauso wie es einen Runlevel für den Single-User-Modus, den Reboot-Modus oder Halt-Modus gibt. In der Datei /etc/inittab sind hierzu die Sollzustände für die jeweiligen Runlevel hinterlegt. Das erste Skript, welches durch init gestartet wird ist normalerweise das Skript /etc/rc.d/rc.sysinit (bei SuSE /sbin/init.d/boot). In Abbildung “Das Script /etc/rc.d/rc.sysinit“ wird aufgeführt, welche Aufgaben das Script ausführt.

Das Script /etc/rc.d/rc.sysinit

Danach werden alle Skripte im Standardrunlevel gestartet. Leider benutzen nicht alle Distributionen einheitliche Runlevel für gleiche Aufgaben. Die jeweilige Bedeutung der Runlevel ist in /etc/inittab und in Tabelle “Runlevel im Überblick“ dokumentiert.

Im laufenden Betrieb kann der aktive Runlevel jederzeit geändert werden, indem an der Kommandozeile der Befehlt init gefolgt von dem Runlevel, in welchen gewechselt werden soll, eingegeben wird. Z.B. init 0 um das System herunterzufahren. Beim Booten kann man LILO den gewünschten Runlevel übergeben, indem man nach dem Konfigurationsnamen den Runlevel als Parameter übergibt. Z.B. wenn eine Konfiguration linux heißt, kann über die Eingabe am LILO-Prompt von „linux S“ ein SuSE-Linuxsystem in dem Single-User-Modus gestartet werden.

Tabelle: Runlevel im Überblick
Runlevel Bedeutung
0 Halt
1 Single-User
2 Multi-User ohne Netz
3 Multi-User mit Netz (default)
4 frei
5 Multi-User mit Netz und xdm
6 Reboot

Skripte im Runlevel

Die Skripte für die Runlevel befinden sich im Verzeichnis init.d (unterhalb /etc oder /etc/rc.d, bei SuSE /sbin). In diesem Verzeichnis gibt es weitere Unterverzeichnisse für jeden Runlevel mit dem Namensschema rcN.d, wobei N den Runlevel bezeichnet. In diesen Unterverzeichnissen befinden sich Links auf die Skripte im Basisverzeichnis. Dabei sind die Namen nicht willkürlich gewählt, sondern bezeichnen die ausführenden Aktionen. Beginnt ein Link mit einen “S“, so wird dem Skript der Parameter Start übergeben, beginnt er mit einem “K“, so wird der Parameter Stop übergeben. Die nachfolgende Zahl, bestehend aus 2 Ziffern, gibt die Reihenfolge der Ausführung an, wobei zuerst die niedrigste Nummer ausgeführt wird. Hiermit können Abhängigkeiten zwischen verschiedenen Skripten aufgelöst werden. Zum Beispiel muß zuerst das Netzwerk gestartet werden, bevor das Routing gestartet werden kann.

Durch die Lösung der Links wird die Konfiguration und Wartung vereinfacht, da alle Skripte an einer zentralen Stelle gehalten werden und somit die Änderung an einem Skript allen Runleveln zugute kommt.

Natürlich können die Skripte auch von Hand gestartet werden (als root), indem das Skript mit einem Parameter aufgerufen wird. Hierfür gibt es je nach Skript zum Teil mehr Parameter als nur start und stop, z. B. restart, reload

init-Bearbeitungstools

Für die Bearbeitung der Runlevel stehen verschiedene Tools zur Verfügung, z. B. chkconfig, tksysv und ksysv. Bei dem Programm ksysv aus der KDE-Sammlung stehen alle verfügbaren Dienste in dem linken Fenster und können per Drag and Drop in die Runlevelfenster gezogen werden. Durch Doppelklick auf einen Eintrag im Runlevel werden weitere Informationen angezeigt, unter anderem kann hier die Priorität des Eintrags geändert werden.

Das Linuxdateisystem (ext2)

Überblick

Das standardmäßige Dateisystem unter Linux ist das ext2-Dateisystem. Die Partitionstypnummer ist 83. Desweiteren gibt es für die Swap-Partition (die Auslagerungsdatei für MS Windows-Anwender) ein eigenes Dateisystem mit der Typ-Nr. 82 und für Disketten findet man noch häufig das Dateisystem Minix.

Das Dateisystem ext2 weist folgende Merkmale auf

  • flache, baumartige Organisation des Dateisystems;
  • Speichersystem (Festplatten, CD-ROM, Floppy, …) werden für den Anwender transparent ins Dateisystem eingebunden;
  • Einarbeitung eines Rechtekonzeptes, mit den Rechten schreiben, lesen und ausführen; Rechte können für Besitzer, Gruppe und alle anderen vergeben werden;
  • Aufbau nach dem Filesystem Hierachy Standard (FHS)
  • die max. Dateigröße beträgt 16 GByte;
  • es gibt keine Beschränkungen bei der max. Pfadlänge;

Die Dateiname können aus bis zu 255 Zeichen bestehen, wobei folgender Zeichenvorrat bereitsteht:

  • Buchstaben: a … z, A … Z
  • Zahlen: 0 … 9
  • einige Sonderzeichen: u.a. -, _, ., …

Auf das Leerzeichen sollte wenn möglich verzichtet werden, da es als Trennzeichen bei der Eingabe von Kommandos verwendet werden. Deutsche Umlaute sowie das „ß“ sollte gemieden werden. Sonderzeichen sind grundsätzlich möglich, sollten jedoch zur Vermeidung von Komplikationen nicht verwendet werden. Die Dateinamen dürfen mehrere Punkte enthalten.

Bei Linux, wie auch bei Unix, ist der Unterschied Groß- und Kleinschreibung signifikant, das bedeutet, die Datei “Linux.txt“ und “linux.txt“ sind zwei unterschiedliche Dateien.

In jedem Verzeichnis existieren zwei weitere Einträge, Verzeichnisse mit den Namen “.“ und “..“. Dabei symbolisiert das Verzeichnis “.“ immer das Verzeichnis selbst, währen das Verzeichnis “..“ stets das übergeordnete Verzeichnis repräsentiert.

Verzeichnis- und Dateinamen werden, wie unter Unix üblich, durch den einfachen Schrägstrich (“/“) getrennt.

Aufbau des Dateisystembaums

Der Linux-Dateisystembaum beginnt mit dem „root“-Verzeichnis “/“ und enthält sowohl weitere Verzeichnisse als auch Dateien. Dabei können Verzeichnisse wieder beliebig viele Unterverzeichnisse und Dateien enthalten. Im Filesystem Hierachy Standard wird festgelegt, welche Verzeichnisse es standardmäßig gibt und welche Daten in welchen Verzeichnissen gespeichert werden. Hiermit soll eine distributionsübergreifende Ordnung erzielt werden, jedoch weichen einige Distributionen noch vereinzelt davon ab. Diese Ordnung spiegelt sich teilweise auch bei Programmverzeichnissen wieder, da die jeweiligen Unterverzeichnisse häufig nach dem FHS aufgebaut sind. In Tabelle Verzeichnisbaum ist eine grobe Übersicht wiedergegeben, welche Verzeichnisse existieren und was man in ihnen finden kann.

Verzeichnisbaum
/etc Dateien zur Systemkonfiguration und Konfigurationsdateien, die von allen verwendet werden
/bin /usr/bin Systemprogramme und Kommandos, Anwendungsprogramme
/sbin /usr/sbin Programme zur Systemverwaltung
/lib /usr/lib Programmbibliotheken
/var Logbuchdateien, Drucker-Spool, Temp-Verzeichnis
/proc Abbild des Prozeßsystems sowie des Betriebssystemkerns
/usr/share/man Man-Seiten
/usr/share/info Info-Seiten
/usr/share/doc Dokumentationen
/usr/src Quellcode, u.a. Kernel-Quellcode
/usr/X11R6 X-Windows-System
/usr/include Include-Dateien für die Programmierung
/home Heimatverzeichnisse der einzelnen Benutzer
/dev Gerätedateien
/opt Kommerzielle Software
/root Heimatverzeichnis des Administrators root
/ Hauptverzeichnis, sollte nur weitere Verzeichnisse enthalten;
/boot Dateien, die zum Systemstart benötigt werden (z.B. Kernel)

Dateiinformationen

Neben dem Dateinamen besitzt eine Datei noch weitere Informationen und Eigenschaften. Hierzu gehören die Dateigröße, das Erstellungs-, Änderungs- und Zugriffsdatum, der Besitzer, die Gruppe, die Zugriffsrechte, die Lage der Daten auf der Festplatte (Dateinummer, Inode) und die Art der Datei.

Die Zugriffsrechte werden für den Eigentümer, die Gruppe und den Rest der Welt einzeln vergeben. Für jede gibt es drei Rechte: Lesen ®, Schreiben (w) und Ausführen (x).

Beispiel:

total 70
drwx--x--x 19 root     root         1024 Nov 14 13:48 .
drwxr-xr-x 22 root     root         1024 Nov 10 15:45 ..
drwx------  5 root     root         1024 Oct 30 15:28 Desktop
drwx------  2 root     root         1024 Oct 29 17:22 Mail
drwxr-xr-x 22 root     root         1024 Oct 30 02:53 Office51
-rw-r--r--  1 root     root         1944 Oct 29 17:20 ServerLog
-rw-rw-rw-  1 root     root         1047 Oct 29 17:21 StartLog
lrwxrwxrwx  1 root     root            3 Nov 14 13:48 binold -> /bin
-rw-r--r--  1 root     root        12288 Oct 30 15:34 classes.db
-rwxr-xr-x  1 root     root          206 Oct 30 18:24 knetmon_cleanup 

Die erste Spalte gibt die Zugriffsrechte der jeweiligen Datei bzw. Verzeichnis an. Dabei kennzeichnet das erste Zeichen den Typ der Datei (siehe Tabelle Kennzeichnung der Dateitypen), gefolgt von den Zugriffsrechten.

Kennzeichnung der Dateitypen
Zeichen Typ
- normale Datei
d Verzeichnis
c zeichenorientiertes Gerät (z.B. Modem, Maus, Drucker)
b blockorientiertes Gerät (z.B. Festplatte, Diskettenlaufwerk)
l Link (Verweis)
p Pipe

Dateisystembereiche

Im ext2-Dateisystem wird eine Partition in Gruppen von 8192 Blöcken (oder einer variablen Anzahl) eingeteilt. Die Gruppen enthalten eine Kopie des Superblocks sowie einen Gruppenblock. Der Gruppenblock entspricht in seiner Funktion dem Superblock. Dabei werden die Gruppen wie eine gesamte Partition verwaltet, wobei die Unterteilung die Datensicherheit erhöht und die Geschwindigkeit steigert. Mehrere Kopien des Superblocks werden an genau definierten Stellen auf der Partition abgelegt, so daß die Chance besteht, bei einem defekten Superblock über die Kopien des Superblocks diesen zu reparieren. Beim Einbinden der ext2-Partition wird das valid-Flag im Superblock gelöscht und beim Ausbinden wieder gesetzt. Sollte die Partition nicht ordnungsgemäß ausgebunden werden, z. B. durch Absturz, einfach Ausschalten …, so erkennt der Kernel dieses durch das nicht gesetzte valid-Flag und startet ein Festplattenkontroll-Programm (fsck).

ext2 Dateisystembereiche
Bootblock

der erste Block einer Festplatte oder Diskette kann hier ein Programm zum Laden des Betriebssystems, den Boot-Loader, enthalten;

Superblock

ist die Größe der Informationsknoten (I-Knoten)-Bitmaps, der Datenzonen-Bitmaps, der Informationsknoten, der Datenbereiche und der magischen Zahl abgelegt; die magische Zahl beinhaltet den Typ des Dateisystems;

I-Knoten-Bitmaps

hinterlegt, welche I-Knoten belegt und welche frei sind;

D-Zone-Bitmaps

hinterlegt, welche Sektoren im Datenbereich belegt oder frei sind;

I-Knoten

in diesem Bereich sind die I-Knoten hinterlegt;

Daten

in diesem Bereich sind die eigentlichen Daten hinterlegt;

Aufbau von Dateien im Dateisystem

Innerhalb des Linuxdateisystems werden die Informationen in Blöcken gespeichert. Dabei haben alle Blöcke innerhalb eines Dateisystems (Partition) die gleiche Größe. Das ext2-Dateisystem unterstützt Blockgrößen von 1024 Bytes, 2.048 Bytes, 4096 Bytes, 8192 Bytes, 16384 Bytes und 32768 Bytes. Die übliche Standardblockgröße ist 4096 Bytes.

Eine Datei wird demnach in mehreren Blöcken gespeichert. Ist eine Datei nun nicht durch die Blockgröße des Dateisystems dividierbar, entsteht ein Verschnitt. Dies ist darin begründet, daß das ext2-Dateisystem nur in ganzen Blöcken arbeitet. Der leere Teil des letzten benötigten Blocks ist dann der Verschnitt. Der Verschnitt bei einer Blockgröße von 1024 Bytes ist immer am Kleinsten. Eine große Blockgröße hat jedoch den Vorteil, daß das Einlesen und Bearbeiten der Datei performanter ist.

Vor dem Anlegen eines Dateisystems sollte man sich schon überlegen, welche Art von Daten und welche durchschnittliche Datengröße erwartet wird, damit man das beste Verhältnis aus kleinem Verschnitt und möglichst bester Performance wählen kann. Grundsätzlich gilt hierfür:

Werden viele kleine Dateien erwartet, ist eine kleine Blockgröße von Vorteil, da ansonsten ein zu großer Verschnitt auftritt. Werden jedoch wenige große Dateien erwartet (z.B. bei Datenbanken), ist eine größere Blockgröße vorteilhafter, da damit die Performance gesteigert werden kann.

Management

Gerätemanagement und -dateien

Unter Linux werden alle Geräte über Devices angesprochen. Devices sind definierte Schnittstellen zu der Hardware, wobei der direkte Zugriff auf die Hardware nur dem Kernel vorbehalten ist. Im Grunde sind Devices Dateien mit einer Inode, jedoch ohne Datenteil und sind im Verzeichnis /dev gespeichert.

Sie werden durch drei Informationen beschrieben: der Major Nummer, der Minor Nummer und dem Zugriffstyp. Die Major Nummer bestimmt den Linuxkerneltreiber, der für dieses Device verantwortlich ist. Hiervon gibt es zur Zeit 25 Treiber. Die Minor Nummer spezifiziert die Geräteart, z. B. 720 kB Floppy oder 1,44 MB Floppy, bei Festplatten gibt sie die Partition an, die verwaltet werden soll. Beim Zugriffstyp gibt es zwei Arten, blockorientiert für gepufferte Geräte wie Festplatten und zeichenorientiert für ungepufferte Geräte wie serielle Schnittstellen.

Zum Teil finden Sie im /dev-Verzeichnis auch Links. Diese werden mit einem beschreibenden Namen für die Vereinfachung auf Standardschnittstellen gelegt, z. B. für das Modem oder die Maus. Eine Übersicht über die häufig benötigten Schnittstellen ist in Tabelle Devicenamen und ihre Bedeutung angegeben.

Tabelle: Devicenamen und ihre Bedeutung (Auswahl)
Devicename Gerät
*bm Bus Mäuse
console aktive Konsole
fd* Diskettenlaufwerk
ftape* Floppystreamer (ohne Rückspulfunktion) (Link)
hd* IDE / ATA Festplatten oder CDROM
lp* Parallele Schnittstellen
mem Arbeitsspeicher
modem Standardschnittstelle für das Modem (Link)
mouse Standardschnittstelle für die Maus (Link)
null unendlich großes Loch („schwarzes Loch“)
psaux PS/2 Maus
nftape* Floppystreamer mit Rückspulen (Link)
nrft* Floppystreamer mit Rückspulen
nst* SCSI Bandlaufwerk ohne Rückspulen
port E/A-Schnittstellen
ptyp* Terminalschnittstellen unter X (Master)
ram RAM Disk
rft* Floppystreamer ohne Rückspulen
rmt Bandlaufwerk (ohne SCSI)
sd* SCSI Laufwerk
scd* SCSI CD-ROM
st* SCSI Bandlaufwerk mit automatischer Rückspulfunktion
tape* Standardstreamer (Link)
tty* Virtuelle Textterminals
ttyp* Terminalslaves unter X
ttyS* Serielle Schnittstellen
zero unendlich große Quelle von 0-Bytes

Die Sternchen in der Tabelle sind Platzhalter für eine nähere Bezeichnung, welches Gerät angesprochen werden soll. Hierfür gibt es zwei Notationen. Bei zeichenorientierten Geräten wird numerisch von „0“ an begonnen, die Geräte durchzuzählen. Z. B. ist die erste serielle Schnittstelle /dev/ttyS0 (unter DOS COM1). Bei blockorientierten Geräten gibt es zwei Methoden. Zum einen wird z. B. beim Diskettenlaufwerk oder SCSI CD-ROM die Spezifizierung wie bei zeichenorientierten Geräten vorgenommen, /dev/fd0 zeigt auf das erste Floppy. Bei Festplatten und CD-ROMs wird die Spezifizierung mittels Buchstaben vorgenommen, /dev/sda zeigt auf das erste SCSI Laufwerk, /dev/hda auf die Master-Festplatte am ersten IDE-Controller. Die einzelnen Partitionen einer Festplatte werden über eine weitere Zahl beschrieben, hier jedoch wird mit der Nummerierung mit “1“ begonnen! Z. B. kennzeichnet /dev/hdc5 die erste logische Partition der Festplatte, die als Master am zweiten IDE-Port hängt (siehe auch Einbinden von Dateisystemen).

Der Systemverwalter kann weitere Devices anlegen, wenn die bereits durch die Installation vorhandenen Devices nicht ausreichen. Hierfür gibt es den Befehl mknod.

Syntax von mknod:

mknod [Optionen] Name Typ [Major Minor]
Typ: b legt blockorientiertes Device an
c, u legt zeichenorientiertes Device an
p legt eine FIFO an

Prozeßmanagement

Das gesammte Management der Prozesse unterliegt dem Kernel. Er verteilt die Rechenzeit, überwacht und ermöglicht die saubere Kommunikation unter den Prozessen und kontrolliert die Rechte. Linux ist ein Multitasking-System, was bedeutet, daß mehrere Prozesse gleichzeitig abgearbeitet werden können. Dies kann aber nur auf Mehrprozessormaschinen wirklich erfolgen, auf Single-Prozessorsystemen wird ein System benötigt, daß dem Anwender scheinbar dir parallele Abarbeitung der Prozesse vorspielt. Hier kommt der Prozeß-Scheduler zum Einsatz. Er verteilt die Rechenzeit und Systemresourcen auf die einzelnen Prozesse für ein bestimmtes Zeitintervall.

Der Mehrprogrammbetrieb steigert den Informationsdurchfluß der Hardware. Stoppt z.B. Programm n, weil es einen E/A-Kanal aufruft, so verarbeitet der Prozessor das bereitstehende Programm m, bis dieses einen Stop erreicht usw. Ein Zuteilungsprogramm legt zuvor die Prioritäten fest. Steht jedem im Hauptspeicher befindlichen Programm eine feste Zeitspanne zu, so spricht man von Zeitscheibenverfahren (engl.: time slicing).“ [Breuer, Seite 197]

Welcher Prozeß als nächster für die Bearbeitung durch die CPU ausgewählt wird, errechnet der Prozeß-Scheduler mit Hilfe von Prioritätsparametern, Prozeßzustand und Wartezeit. Auf die Priorität von Prozessen kann auch direkt Einfluß genommen werden über den Befehl nice. Normale Anwender können Prozesse herunterstufen, allein dem Systemadministrator root ist das Recht vorbehalten, Prozesse heraufzustufen. Der Aufruf erfolgt über:

  nice -<nice-Wert> <Kommandofolge> 

Für den nice-Wert kommt ein Zahlenbereich von -20 bis 19 in Frage, wobei ein niedriger nice-Wert eine höhere Priorität bedeutet. Der in der Syntax angegebene Bindestrich gehört zum Befehl dazu, so daß bei heraufsetzen der Priorität zwei Bindestriche einzugeben sind. Nachträglich, wenn der Prozeß schon gestartet ist, kann die Priorität mit dem Befehl renice geändert werden. Die Syntax hierfür lautet:

  renice -<nice-Wert> <PID> 

Der PID ist eine eindeutige Identifizierung eines Prozesses (Prozeß Identifier). Jedem Prozeß wird eine eindeutige Nummer zugewiesen. Wie schon in Kapitel Der init-Prozeß erwähnt, hat der Vater aller Prozesse, der init-Prozeß, die PID 1.

Ein Prozeß besteht immer aus einem Textsegment (Befehle), einen Datensegment und einem Stack-Bereich. Wird nun ein Befehl oder Kommando zwei oder mehrfach gestartet, so wird das Textsegment nicht noch einmal geladen, sondern im Speicher nur Bereiche für das Datensegment und den Stack-Bereich reserviert. Somit können die Speicherressourcen geschont werden.

Im Verzeichnis /proc befindet sich ein Abbild aller Prozesse sowie alle Informationen des Kernels. Es ist ein spezielles Dateisystem mit keinen echten Dateien und Verzeichnissen, sondern bildet die Schnittstelle zum Kernel. Hier kann der direkte Zugriff auf Informationen des Kernels realisiert werden. Bei Arbeiten in diesem Verzeichnis ist größte Sorgfalt angebracht, da Änderungen an den Dateien direkt den Kernel betreffen und das System in einen instabilen Zustand versetzen können, bis zum Absturz des Systems. Trotz allem ist dieses Verzeichnis eine der wichtigsten Informationsquellen zum System. Im nachfolgenden Listing ist ein Auszug aus dem Verzeichnis /proc wiedergegeben:

dr-xr-xr-x 3 root root         0 Jul 10 08:51 bus
-r--r--r-- 1 root root         0 Jul 10 08:51 cmdline
-r--r--r-- 1 root root         0 Jul 10 08:51 cpuinfo
-r--r--r-- 1 root root         0 Jul 10 08:51 devices
-r--r--r-- 1 root root         0 Jul 10 08:51 dma
-r--r--r-- 1 root root         0 Jul 10 08:51 filesystems
dr-xr-xr-x 2 root root         0 Jul 10 08:51 fs
dr-xr-xr-x 4 root root         0 Jul 10 08:51 ide
-r--r--r-- 1 root root         0 Jul 10 08:51 interrupts
-r--r--r-- 1 root root         0 Jul 10 08:51 ioports
-r-------- 1 root root 134221824 Jul 10 08:51 kcore
-r-------- 1 root root         0 Jul 10 08:40 kmsg
-r--r--r-- 1 root root         0 Jul 10 08:51 ksyms
-r--r--r-- 1 root root         0 Jul 10 08:51 loadavg
-r--r--r-- 1 root root         0 Jul 10 08:51 locks
-r--r--r-- 1 root root         0 Jul 10 08:51 meminfo
-r--r--r-- 1 root root         0 Jul 10 08:51 memstat
-r--r--r-- 1 root root         0 Jul 10 08:51 misc
-r--r--r-- 1 root root         0 Jul 10 08:51 modules
-r--r--r-- 1 root root         0 Jul 10 08:51 mounts
dr-xr-xr-x 3 root root         0 Jul 10 08:40 net
-r--r--r-- 1 root root         0 Jul 10 08:51 partitions
-r--r--r-- 1 root root         0 Jul 10 08:51 pci
dr-xr-xr-x 2 root root         0 Jul 10 08:51 scsi
-r--r--r-- 1 root root         0 Jul 10 08:51 sound
-r--r--r-- 1 root root         0 Jul 10 08:51 stat
-r--r--r-- 1 root root         0 Jul 10 08:51 swaps
dr-xr-xr-x 9 root root         0 Jul 10 08:51 sys
dr-xr-xr-x 4 root root         0 Jul 10 08:51 tty
-r--r--r-- 1 root root         0 Jul 10 08:51 uptime
-r--r--r-- 1 root root         0 Jul 10 08:51 version 

Zum Beispiel enthält die Datei /proc/cpuinfo Informationen über die CPU, die Datei /proc/modules Informationen, welche Module geladen sind und die Datei /proc/meminfo Informationen über Speicherverbrauch und -ressourcen.

Prozesse anzeigen

Alle laufenden Prozesse können über die Befehle ps, top oder pstree angezeigt werden. Dabei gibt der Aufruf von ps viele wichtige Informationen über das System. Das nachfolgende Listing zeigt eine gekürzte Ausgabe des Befehls ps -aux, die Parameter werden in Kapitel Prozeßverwaltung beschrieben.

  USER    PID %CPU %MEM   RSS TTY   STAT START TIME COMMAND
  root      1  0.0  0.1   204 ?     S    12:28 0:04 init [2]
  root      2  0.0  0.0     0 ?     SW   12:28 0:00 [kflushd]
  root      3  0.0  0.0     0 ?     SW   12:28 0:00 [kupdate]
  root      4  0.0  0.0     0 ?     SW   12:28 0:00 [kpiod]
  root      5  0.0  0.0     0 ?     SW   12:28 0:00 [kswapd]
  bin      94  0.0  0.3   400 ?     S    12:29 0:00 /sbin/portmap
  root    101  0.0  0.2   360 ?     S    12:29 0:00 /usr/sbin/scanlogd
  root    107  0.0  0.4   632 ?     S    12:29 0:00 /usr/sbin/syslogd
  root    185  0.0  0.4   560 ?     S    12:29 0:00 /usr/sbin/inetd
  root    200  0.0  0.4   572 ?     S    12:29 0:00 /usr/sbin/lpd
  root    231  0.0  0.4   628 ?     S    12:29 0:00 /usr/sbin/cron
  nobody  235  0.0  0.5   692 ?     S    12:29 0:00 /usr/sbin/in.identd
  root    236  0.0  0.5   692 ?     S    12:29 0:00 /usr/sbin/in.identd
  root    270  0.0  0.7  1016 tty1  S    12:29 0:00 login - root    
  root    271  0.0  0.7  1016 tty2  S    12:29 0:00 login - tobias
  root    272  0.0  0.3   428 tty3  S    12:29 0:00 /sbin/mingetty tty3
  root    273  0.0  0.3   428 tty4  S    12:29 0:00 /sbin/mingetty tty4
  root    274  0.0  0.3   428 tty5  S    12:29 0:00 /sbin/mingetty tty5
  root    275  0.0  0.3   428 tty6  S    12:29 0:00 /sbin/mingetty tty6
  root    301  0.0  1.0  1328 tty1  S    12:30 0:00 -bash
  tobias  345  0.0  1.0  1328 tty2  S    12:30 0:00 -bash
  tobias 2784  0.0  1.5  1545 tty2  R    12:34 0:00 find
  root   2785  0.0  0.7   928 pts/1 R    12:40 0:00 ps -aux 

Dabei bedeuten die Spalten im einzelnen

  • [USER:] der aufrufende Benutzer des Prozesses;
  • [PID:] eindeutige ID eines Prozesses;
  • [RSS:] (Resident Set Size) Größe des Prozesses im Speicher in Kilobyte;
  • [TTY:] kontrollierender Terminal (ein ? bedeutet, daß diesem Prozeß kein Terminal zugeordnet ist);
  • [Stat:] Laufzeitzustand des Prozesses;
    • [R:] Prozeß läuft im Moment;
    • [S:] Prozeß „schläft“, befindet sich also im Wartezustand;
    • [D:] Prozeß „schläft“ und kann nicht zwingend unterbrochen werden;
    • [T:] Prozeß ist gestoppt;
    • [Z:] Prozeß ist ein Zombie;
  • [Time:] Bisher verbrauchte Prozessor-Zeit des Prozesses;
  • [Command:] Name des Kommandos, mit dem der Prozeß erzeugt wurde;

Der Befehl top gibt dieselben Informationen wie der Befehl ps, jedoch werden einige Zusammenfassungen und Gesamtspeicherinformationen zusätzlich angezeigt. pstree zeigt einen Prozeßbaum an, wobei gleiche Kommandos und Befehle zusammengefaßt werden und die Anzahl dieser als Multiplikator vorangestellt wird. Das nachfolgende Listing gibt eine gekürzte Ausgabe des Befehls pstree wieder:

init-+-atd
     |-cron
     |-httpd--httpd
     |-in.identd--in.identd--5*[in.identd]
     |-inetd
     |-kflushd
     |-klogd
     |-kpiod
     |-kswapd
     |-kupdate
     |-login--bash--pstree
     |-5*[mingetty]
     |-portmap
     |-scanlogd
     `-syslogd 

Prozesse abbrechen

Um laufende Prozesse abzubrechen gibt es zum einen die Möglichkeit, mit der Tastenkombination STRG+Strg einen Prozeß abzubrechen. Leider funktioniert dies nicht immer, besonders, wenn die Prozesse abgestürzt sind oder als Zombies die Systemressourcen verbrauchen. Hier kommen die Kommandos kill und killall zu Hilfe.

Tabelle: Prozeß-Signale
Signal ID Funktion
SIGHUP 1 Hangup, zwingt viele Programme, ihre Konfigurationsdateien neu einzulesen
SIGINT 2 Interrupt, STRG+C
SIGQUIT 3 Abbruch
SIGKILL 9 Zwingender Abbruch, durch das Programm nicht abfangbar
SIGUSR1 10 Benutzerdefiniertes Signal
SIGTERM 15 Prozeß wird zum Beenden aufgefordert
SIGCONT 18 Ein gestoppter Prozeß wird fortgesetzt
SIGSTOP 19 Stoppt den Prozeß
SIGTSTP 20 Prozeß-Stop vom Benutzer gesteuert

Mit kill können Signale an einen Prozeß gesendet werden, nicht nur zum Abbrechen sondern z.B. auch um einen Prozeß anzuhalten und nachher wieder fortzusetzen. Beim normalen Aufruf von kill über kill <PID> wird dem Prozeß das Signal SIGTERM gesendet, welches den Prozeß zum Beenden auffordert. Reagiert der Prozeß auf dieses Signal nicht, kann die brachiale Methode verwendet werden, indem man über kill -9 <PID> oder kill -SIGKILL <PID> den zwingenden Abbruch des Prozesses fordert. Die Syntax des Befehls lautet:

kill -Signal <PID> oder kill -Signal-ID <PID>

Eine Auswahl der Signale ist in Tabelle Prozeß-Signale wiedergegeben.

Beim Befehl killall muß nur als Parameter der Name des Kommandos oder Befehls, welcher abgebrochen werden soll, angegeben werden und alle (!) Prozesse mit diesem Kommando- bzw. Befehlname werden abgebrochen.

Graphische Prozeß-Tools

Natürlich gibt es unter Linux mehrere graphische Tools, um die Arbeit und die Übersicht zu erleichtern. Das Programm ktop ist ein graphisches Front-End zum Befehl top. Mit diesem Programm können die Prozesse ausgewählt werden, welche anzeigt werden sollen (alle, System, Nutzer, eigene), ob als Liste oder als Prozeß-Baum und es können auch Prozesse abgebrochen werden. Zusätzlich kann man sich noch Informationen über die Systemauslastung anzeigen lassen.

top-Ausgabe

Das Programm xosview zeigt zwar nicht einzelne Prozesse an, bietet aber durch die Anzeige der Systemauslastung und der Arbeitsspeicherbelegung eine gute Übersicht über das System.

Programm xosview
informatik/linux/lnxkub/lnxkub_konzepte.txt · Zuletzt geändert: 14.11.2010 10:46 (Externe Bearbeitung)
Recent changes RSS feed Kontakt GPG-Schlüssel Get Firefox Driven by DokuWiki Valid CSS Valid XHTML 1.0