Linux Grundlagen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 386: Zeile 386:
 
=INodes=
 
=INodes=
 
*[[INodes]]
 
*[[INodes]]
 +
 +
==Prozesse==
 +
===Was ist ein Prozess?===
 +
Ein Prozess setzt sich aus zwei Teilen zusammen:
 +
 +
1.Programm, das in den Hauptspeicher geladen wurde
 +
 +
2.Prozessumgebung
 +
 +
Unter einem Prozess versteht man ein Programm (binär), das in den Hauptspeicher
 +
geladen wurde. Also nicht das Program selbst, das auf der Festplatte liegt ist der
 +
Prozess, sondern es wird erst durch das Laden in den Hauptspeicher dazu.
 +
Normalerweise liegt ein Programm als ausführbare Datei irgendwo auf der
 +
Festplatte oder auf Diskette. Ob es sich bei dem Programm um eine binäre Datei
 +
handelt, kann man mit dem Befehl '' file '' feststellen.
 +
 +
root@zero:~# file /bin/mkdir
 +
/bin/mkdir: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
 +
 +
 +
Die Datei liegt im Maschinencode vor und kann in den Hauptspeicher geladen
 +
werden. Sobald dies geschehen ist, kann der Rechner diesen Maschinencode
 +
abarbeiten (ausführen).
 +
 +
Da aber ein Programm nicht direkt auf die Hardware zugreifen soll, muss es vom
 +
Betriebsystem kontrolliert werden. Das Betriebssystem liegt logisch gesehen
 +
zwischen Hardware und Anwendung. Das Betriebssystem ordnet jedem Prozess
 +
verschiedene Kenndaten zu, um die Prozesse verwalten zu können. Alle
 +
Kenndaten, die einem Prozess zugeordnet sind, nennt man die
 +
Prozessumgebung.Wenn man in der Shell ein Kommando eingibt, wird ein Prozess
 +
kreiert. Natürlich ist die Shell selbst auch ein Prozess. Ein Prozess kann aber
 +
genauso gut ein Serverprozess (Dienst) sein, z.B. Apache.
 +
Ein wesentliches Merkmal eines Prozesses ist die Prozesskommunikation. Über im
 +
Betriebssystem implementierte Methoden ist es möglich, dass verschiedene
 +
Prozesse Signale und Daten untereinander austauschen können.
 +
Dadurch wird auch dem Benutzer ermöglicht, einem Prozeß bestimmte Signale zu
 +
senden bzw. auf den Status eines Prozesses Einfluss zu nehmen.
 +
 +
===Prozesstabelle (Anzeige mit ps)===
 +
Da zu jedem Prozess Kenndaten geführt werden, müssen diese auch irgendwo
 +
festgehalten werden. Das geschieht in der sogenannten Prozesstabelle.
 +
 +
Kenndaten der Prozesse (Auswahl):
 +
* F Flags (z.B. ausgelagert; Systemprozess; Trace,...)
 +
* UID Nutzer, mit dessen Rechten der Prozess ausgeführt wird
 +
* PID Prozess - ID. Diese Nummer gibt eine eindeutige Prozess - Nummer
 +
an. Sie wird vom System automatisch beim Starten des Prozesses
 +
vergeben und ist für die Laufzeit eindeutig.
 +
* PPID Prozessnumer der Eltern-Prozesses
 +
* PRI Priorität eines Prozesses; je niedriger der Wert ist, desto besser
 +
* NI ist der Nicewert des Prozesses; Nice erniedrigt den Grundwert
 +
der Priorität des Prozesses und gibt damit Prozessorzeit für andere
 +
Prozesse frei.
 +
* SIZE Speichergröße des Prozesses inklusive Stack (eine Art Zwischenspeicher)
 +
* RSS Verbrauch an physischen Speicher
 +
* WCHAN ist der Name der Kernerlfunktion, in der der Prozess schläft
 +
* STAT Status des Prozesses
 +
R läuft      S schlafend    D nicht störbarer Schlaf
 +
T angehalten  Z Zombie        W der Prozess belegt keine Seiten
 +
* TIME Bisland benötigte Prozessorzeit
 +
* SIZE ist die Größe von Text, Daten und Stack
 +
* TTY die Nummer des kontrollierenden Teminal; wenn hier ein ? steht,
 +
handelt es sich um einen Dämon oder Serverprozess.
 +
* COMMAND Angabe des Prozesses selbst. Dies ist meist der Programmname.
 +
 +
Weiteres
 +
* GID Gruppe, unter der der Prozess läuft
 +
* Verweis auf das aktuellen Arbeitsverzeichnis
 +
* Um mit relativen Pfadangaben arbeiten zu können braucht man diesen Eintrag
 +
* Tabelle mit Verweisen auf aktuell geöffnete Dateien
 +
* 3 sind automatisch geöffnet Standardeingabe, Standardausgabe und
 +
Standardfehlerkanal
 +
 +
Beispiel
 +
root@zero:~# ps -l
 +
F S  UID  PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
 +
4 R    0 18639 18631  0  80  0 -  1080 -      pts/0    00:00:00 bash
 +
0 R    0 25904 18639  0  80  0 -  635 -      pts/0    00:00:00 ps
 +
 +
===Eltern und Kinder===
 +
Jeder Prozess kann weitere Prozesse erzeugen. Die erzeugten Prozesse bezeichnet
 +
man als Kindprozesse. Jeder Kindprozess weiß anhand der PID, woher er stammt.
 +
 +
Alle Prozesse sind von einem anderen Prozess gestartet worden, mit Ausnahme
 +
des Pseudoprozesses (noch im Kernel beim Starten erzeugter Prozess). Dieser hat
 +
die Prozessnummer 0. Er hat die Aufgabe, den Init Prozess ( /sbin/init die Nummer
 +
1) zu starten, der in System V alle anderen Prozesse direkt oder über seine Kind-
 +
prozesse startet. (init wird konfiguriert durch die /etc/inittab)
 +
 +
Es gibt zwei Arten wie ein Prozess gestartet werden kann:
 +
 +
# Fork und Exec: Prozessumgebung wird dupliziert, der neue Prozess bekommt eine eigene neue PID
 +
# Exec: Alter Prozess wird durch neuen Prozess überladen (geht mit dem shell-buildin exec)
 +
 +
'''Rechte auf Objekte UID GID'''
 +
Ob ein Prozess auf eine Datei zugreifen kann, entscheidet der Kernel anhand der
 +
Zugriffssrechte, die auf der Datei gesetzt sind. Er checkt anhand der UID und GID
 +
des Prozesses, ob es erlaubt ist. Mit dieser Technik wird letztendlich geprüft, was
 +
ein User darf, und was nicht.
 +
 +
===Rechenzeit und Priorität===
 +
Da auch bei Prozessen eine Gerechtigkeit herschen muss, muss eine Instanz
 +
darüber entscheiden wie lange ein Prozess Rechenzeit verbrauchen darf.
 +
Folgende Kenndaten werden dazu benötigt
 +
* clocktick = Zeiteinheit
 +
* n = Faktor über den Kernel einstellbar
 +
* slice = n <nowiki>*</nowiki> clocktick
 +
* agingtime = weitere Zeiteinheit über den Kernel einstellbar
 +
 +
Es wird davon ausgegangen das der Prozess mit der niedrigsten Priorität gerade
 +
rechnet. Pro clocktick erhöht sich die Priorität dieses Prozesses um eins.
 +
 +
Jetzt können 3 Situationen eintreten die alle dazu führen das der Scheduler
 +
aufgerufen wird.
 +
 +
# Prozess blockiert wegen einer Ausgabe oder Eingabe.
 +
# Gibt Rechenzeit freiwillig ab.
 +
# Der Slice endet.
 +
 +
Der Aufruf des Schedulers bewirkt das der Prozess mit der niedrigsten Priorität
 +
gescheduled wird, er also nun rechnen darf. Nach Ablauf der agingtime werden
 +
nun die Prozesse "gealtert". Das geschieht nach folgender Formel
 +
 +
Neue Priorität = Alte Priorität / 2 + Nicewert
 +
 +
Der User hat die Möglichkeit, über den sogenannten Nicewert den Grundwert für
 +
einen Prozess zu senken. Der Prozess braucht dann länger für seine Abarbeitung.
 +
Er verhält sich somit netter zu den anderen Prozessen. Normale User können nur
 +
netter werden, der Systemverwalter kann auch nicht netter (gemeiner) werden. Der
 +
Bereich liegt zwischen 19 (sehr nett) bis 0 (weniger nett) für die User, und 19 bis
 +
-20 für root.
 +
 +
[[Image:pri.png]]
 +
 +
'''Signale'''
 +
 +
Mit den Kommando kill und killall kann man Prozessen Signale schicken
 +
 +
kill -Signalnummer PID
 +
 +
Signalnummer
 +
{| border=1 cellpadding=2
 +
!Signalname
 +
!Wert
 +
!Aktion
 +
|-
 +
|SIGHUP
 +
|1
 +
|Neuinitialisierung eines Prozesses
 +
|-
 +
|SIGINT
 +
|2
 +
|Interrupt-Signal von der Tastatur (STRG+c)
 +
|-
 +
|SIGQUIT
 +
|3
 +
|Interrupt-Signal von der Tastatur (STRG+c) mit Dump
 +
|-
 +
|SIGKILL
 +
|9
 +
|unwiderrufliches Beendigungssignal (Töten)
 +
|-
 +
|SIGSEGV
 +
|11
 +
|Ungültige Speicherreferenz (bedeutet oft auf defekten Speicher)
 +
|-
 +
|SIGTERM
 +
|15
 +
|Beendigungssignal (geöffnete Dateien werden geschlossen)
 +
|-
 +
|SIGCONT
 +
|18
 +
|Weiterfahren, wenn gestoppt
 +
|-
 +
|SIGSTOP
 +
|19
 +
|Prozessstop
 +
|}
 +
 +
Beispiel
 +
root@zero:~# kill -1 7562
 +
 +
===Programme im Zusammenhang mit Prozessen===
 +
====ps: Zeigt die Prozesse mit ihrem Status an====
 +
 +
Option Beschreibung (BSD)
 +
*l langes Format
 +
*U user zeige Prozesse des Users an!
 +
*u zeige für jeden Prozess Besitzer und Startzeit an
 +
*j Jobs-Format: Zeige PGID und SID an
 +
*s Informationen über Signale ausgeben
 +
*m Speicher-Informationen anzeigen
 +
*f Baumstruktur der Prozesse anzeigen (ähnlich pstree)
 +
*a alle Prozesse (jedes Benutzers) anzeigen
 +
*x kontrollierendes Terminal nicht anzeigen
 +
*e Für den Prozess gültige Umgebungsvariablen mit anzeigen (sinnvollerweise mit mehreren Optionen »w« anwenden, um die Ausgabe nicht am Zeilenende abzuschneiden)
 +
*w längere Ausgabe. »w« kann mehrfach verwendet werden, um die maximale Länge um je eine Zeile zu vergrößern
 +
*h Header mit Feldbezeichnern unterdrücken
 +
*r nur laufende Prozesse ausgeben
 +
*n User-ID statt User-Name ausgeben
 +
*txx nur Prozesse ausgeben, die vom angegebenen Terminal kontrolliert werden. xx kann entweder einer der Terminal-Gerätenamen unter /dev (z.B. tty1) oder die entsprechende Kurzbezeichnung ohne »tty« (z.B. 1) sein.
 +
 +
thomas@cardassia:~# ps
 +
  PID TTY          TIME CMD
 +
14134 pts/0    00:00:00 bash
 +
14149 pts/0    00:00:00 ps
 +
 +
root@zero:~# ps alx | grep apache
 +
5    33  1427  6710  20  0  13816  3064 skb_re S    ?          0:00 /usr/sbin/apache2 -k start
 +
5    33  1428  6710  20  0 235672  3316 pipe_w Sl  ?          0:00 /usr/sbin/apache2 -k start
 +
5    33  1429  6710  20  0 235672  3320 pipe_w Sl  ?          0:00 /usr/sbin/apache2 -k start
 +
5    0  6710    1  20  0  14192  4460 select Ss  ?          0:01 /usr/sbin/apache2 -k start
 +
0    0 13376 13244  20  0  3248  824 pipe_w S+  pts/13    0:00 grep apache
 +
 +
zeige Prozesse des Users an!
 +
thomas@cardassia:~$ ps u zeige für jeden Prozess Besitzer und Startzeit an
 +
USER      PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 +
thomas    8758  0.0  0.0  7744  3068 pts/0    Ss  16:37  0:00 bash
 +
thomas  10137  0.0  0.0  7728  2988 pts/1    Ss  16:45  0:00 bash
 +
 +
zeige Prozesse des Users und zeige für jeden Prozess Besitzer und Startzeit an
 +
thomas@cardassia:~$ ps uU root
 +
USER      PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 +
root        1  0.0  0.0  3188  2060 ?        Ss  16:24  0:01 /sbin/init
 +
root        2  0.0  0.0      0    0 ?        S<  16:24  0:00 [kthreadd]
 +
root        3  0.0  0.0      0    0 ?        S<  16:24  0:00 [migration/0]
 +
 +
====pgrep: Zeigt die PID zu einem Prozess an====
 +
*zeigt alle Prozesse an die auf die das Muster
 +
root@zero:~# pgrep mc
 +
13552
 +
13734
 +
*zeigt nur die an die einem User gehören
 +
root@zero:~# pgrep -u thomas mc
 +
13552
 +
zeigt denn vollständigen Prozessnamen an
 +
root@zero:~# pgrep -l apa
 +
1427 apache2
 +
1428 apache2
 +
1429 apache2
 +
6710 apache2
 +
zeigt den zuletzt gestarteten Prozess
 +
root@zero:~# pgrep -n apa
 +
1429
 +
zeigt nur Prpzesse an die genau auf den Namen passen
 +
root@zero:~# pgrep -x apache2
 +
1427
 +
1428
 +
1429
 +
6710
 +
 +
====pkill: schickt einem Prozess anhand des Namens ein Signal====
 +
beendet den Prozess
 +
root@zero:~# pkill -x apache2
 +
beendet den Prozess der als erstes gestartet wurde
 +
root@zero:~# pkill -xo mc
 +
 +
====nice: Lässt ein Programm mit verändertem Grundwert der Priorität laufen====
 +
root@zero:~# nice
 +
0
 +
root@zero:~# nice -n 9 bash
 +
root@zero:~# nice
 +
9
 +
root@zero:~#
 +
 +
====renice: Ändert den Grundwert der Priorität eines laufenden Prozesses====
 +
root@zero:~# renice 10 5742
 +
5742: Alte Priorität: 0, neue Priorität: 10
 +
 +
====top: Zeigt die Prozesse mit ihrem Status an (Abbrechen mit q)====
 +
root@zero:~# top
 +
top - 08:51:08 up 20 min,  1 user,  load average: 0.00, 0.02, 0.06
 +
Tasks:  93 total,  1 running,  92 sleeping,  0 stopped,  0 zombie
 +
Cpu(s):  1.6%us,  3.1%sy,  0.1%ni, 84.9%id, 10.2%wa,  0.0%hi,  0.2%si,  0.0%st
 +
Mem:    509504k total,  273948k used,  235556k free,    11312k buffers
 +
Swap:  321260k total,        0k used,  321260k free,  118380k cached
 +
 +
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                     
 +
2208 mysql    20  0  125m  21m 5552 S  1.7  4.2  0:02.29 mysqld                                                                       
 +
3201 root      20  0  2444 1064  828 R  1.7  0.2  0:00.04 top                                                                         
 +
    1 root      20  0  1908  780  564 S  0.0  0.2  0:02.19 init                                                                         
 +
    2 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kthreadd                                                                     
 +
    3 root      RT  -5    0    0    0 S  0.0  0.0  0:00.00 migration/0                                                                 
 +
    4 root      15  -5    0    0    0 S  0.0  0.0  0:00.03 ksoftirqd/0                                                                 
 +
    5 root      RT  -5    0    0    0 S  0.0  0.0  0:00.00 watchdog/0                                                                   
 +
    6 root      15  -5    0    0    0 S  0.0  0.0  0:00.04 events/0                                                                     
 +
    7 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 khelper                                                                     
 +
    8 root      RT  -5    0    0    0 S  0.0  0.0  0:00.00 kstop/0                                                                     
 +
    9 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kintegrityd/0                                                               
 +
  10 root      15  -5    0    0    0 S  0.0  0.0  0:00.03 kblockd/0                                                                   
 +
  11 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kacpid                                                                       
 +
  12 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kacpi_notify                                                                 
 +
  13 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 cqueue                                                                       
 +
  14 root      15  -5    0    0    0 S  0.0  0.0  0:00.53 ata/0                                                                       
 +
  15 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 ata_aux
 +
 +
Kommandos
 +
 +
*h - Hilfe
 +
*u - User
 +
*k - Kill
 +
*r - Renice
 +
*d - Delay (Default 3s)
 +
*n - Tasks (Default unbegrenzt)
 +
*W - Schreibe aktuelle Konfiguration in Datei
 +
*q - Quit
 +
 +
====pstree: Zeigt die Prozesse als Baumstruktur====
 +
Mit -p werden auch die PID's ausgegeben
 +
root@zero:~# pstree
 +
init─┬─NetworkManager
 +
      ├─acpid
 +
      ├─apache2───5*[apache2]
 +
      ├─atd
 +
      ├─bluetoothd
 +
      ├─console-kit-dae───63*[{console-kit-dae}]
 +
      ├─cron
 +
      ├─cupsd
 +
      ├─dbus-daemon
 +
      ├─dd
 +
      ├─gdm───gdm─┬─Xorg
 +
      │          └─gdmgreeter
 +
      ├─6*[getty]
 +
      ├─hald───hald-runner─┬─hald-addon-acpi
 +
      │                    ├─hald-addon-inpu
 +
      │                    └─2*[hald-addon-stor]
 +
      ├─klogd
 +
      ├─nm-system-setti
 +
      ├─nmbd
 +
      ├─nscd───11*[{nscd}]
 +
      ├─portmap
 +
      ├─rpc.statd
 +
      ├─slapd───2*[{slapd}]
 +
      ├─smbd───smbd
 +
      ├─sshd───sshd───bash───bash───pstree
 +
      ├─syslogd
 +
      ├─system-tools-ba
 +
      ├─udevd
 +
      ├─winbindd─┬─winbindd───winbindd
 +
      │          └─3*[winbindd]
 +
      └─wpa_supplicant
 +
 +
===Jobs===
 +
Unter einem Job versteht man ein Programm, welches man von der Shell gelöstInode (oder I-Node) wird im Deutschen am besten als Informationsknoten oder Indexeintrag bezeichnet. Er fasst alle Attribute einer Datei zusammen außer dem Inhalt und dem Namen der Datei.
 +
[[Bild:Datsys2.png]]
 +
===Daten===
 +
{| border=1 cellpadding=2
 +
|type
 +
|Der Typ der Datei wird als einzelner Buchstabe angezeigt. Der Typ einer Datei wird beim Anlegen der Datei festgelegt
 +
|-
 +
|Permissions
 +
|Die Zugriffsrechte der Datei werden in den 12 Bit sstrwxrwxrwx abgespeichert.Die Zugriffsrechte können mit dem Kommando chmod verändert werden.
 +
|-
 +
|link count
 +
|In UNIX kann eine Datei mehr als einen Namen haben. Der Link Count gibt die Anzahl der Namen einer Datei an. Er kann
 +
mit dem Kommando ln erhöht und dem Kommando rm erniedrigt werden.
 +
|-
 +
|owner
 +
|Für den Dateieigentümer gelten die in der ersten rwx-Gruppe festgelegten Zugriffsrechte. Standardmäßig ist der
 +
Eigentümer einer Datei derjenige Benutzer, der die Datei angelegt hat.
 +
|-
 +
|group
 +
|Für Benutzer, die in der gleichen Gruppe sind, der die Datei angehört, gelten die in der zweiten rwx-Gruppe festgelegten
 +
Zugriffsrechte. In System V gehört eine Datei standardmäßig der Gruppe an, in der der anlegende Benutzer gerade ist.
 +
|-
 +
|size
 +
|Bei normalen Dateien und Verzeichnissen gibt diese Information die Länge der Datei in Byte an.
 +
|-
 +
|access time
 +
|Die Zugriffszeit gibt den Zeitpunkt des letzten Lesezugriffes auf eine Datei an. Aus Effizienzgründen wird die
 +
Zugriffszeit an Verzeichnissen nicht gesetzt, wenn ein Verzeichnis durchsucht wird, obwohl man dies erwarten könnte. ''(ls -l --time=atime)'' '''stat''' zeigt alle Zeiten an.
 +
|-
 +
|modification time
 +
|Die Modifikationszeit gibt die Zeit des letzten Schreibzugriffes auf die Daten der Datei an. Intern speichert UNIX
 +
die Zeit als Sekunden seit Beginn des Jahres 1970 und in GMT ab. Für die Ausgabe wird dies in ein besser lesbares
 +
Format in der lokalen Zeitzone umgewandelt. ''(ls -l)''
 +
|-
 +
|change time
 +
|Die Veränderungszeit gibt das Datum der letzten Statusänderung der Datei an. Sie wird immer dann gesetzt, wenn die
 +
Informationen über die Datei sich ändern (Datum der Erzeugung wird nicht gespeichert) ''(ls -lc)''
 +
|}
 +
 +
===Dateiarten===
 +
{| border=1 cellpadding=2
 +
!Zeichen
 +
!Typ
 +
!Zweck
 +
|-
 +
|<nowiki>-</nowiki>
 +
|file
 +
|normale Datei
 +
|-
 +
|d
 +
|directory
 +
|Verzeichnis
 +
|-
 +
|b
 +
|block device
 +
|Gerätedatei
 +
|-
 +
|c
 +
|character device
 +
|Gerätedatei
 +
|-
 +
|p
 +
|named pipe
 +
|Benannte Pipeline
 +
|-
 +
|s
 +
|socket
 +
|Netzwerkverbindung
 +
|-
 +
|l
 +
|link
 +
|Querverweis
 +
|}
 +
 +
====Normale Dateien====
 +
Unter einer normalen Datei versteht man die Ansammlung von Daten. Dies kann ein Text, Programm, Bild oder sonstiges sein.
 +
Beispiel
 +
root@zero:~# ls -l text | cut -c 1
 +
-
 +
 +
====Verzeichnisse====
 +
Dateien werden in Verzeichnissen gespeichert, nur so ist eine Ordnung möglich.
 +
root@zero:~# mkdir -v Ordner
 +
mkdir: Verzeichnis „Ordner“ angelegt
 +
 +
root@zero:~# ls -ld Ordner | cut -c 1
 +
d
 +
 +
====Gerätedateien (Block und Char)====
 +
Gerätedateien ermöglichen Anwendungsprogrammen unter Benutzung des  Kernels den Zugriff auf die Hardwarekomponenten des Systems. Ansprechbar über Major und Minor Nummern
 +
 +
Beispiele
 +
 +
Sicherung des Master Boot Records der ersten Festplatte
 +
root@zero:~# dd if=/dev/sda of=/tmp/mbr.img bs=512 count=1
 +
 +
Block Device
 +
root@zero:~# ls -l /dev/sda | cut -c 1
 +
b
 +
 +
Character Device
 +
root@zero:~# ls -l /dev/ttyS0  | cut -c 1
 +
c
 +
 +
Erstellen einer Gerätedatei
 +
root@zero:/dev# mknod sata1 b 8 0
 +
root@zero:/dev# fdisk -l /dev/sata1
 +
 +
Platte /dev/sata1: 6442 MByte, 6442450944 Byte
 +
255 Köpfe, 63 Sektoren/Spuren, 783 Zylinder
 +
Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
 +
Disk identifier: 0x0005efab
 +
 +
      Gerät  boot.    Anfang        Ende    Blöcke  Id  System
 +
/dev/sata1p1  *          1        743    5968116  83  Linux
 +
/dev/sata1p2            744        783      321300    5  Erweiterte
 +
/dev/sata1p5            744        783      321268+  82  Linux Swap / Solaris
 +
 +
====Named Pipes====
 +
Benannte Pipes (Named Pipes) können dagegen auch zur Kommunikation zwischen Prozessen eingesetzt werden, die nicht miteinander
 +
verwandt sind und sich darüber hinaus auf unterschiedlichen Rechnern innerhalb eines Netzwerkes befinden dürfen. Sie sind
 +
flexibler als anonyme Pipes und eignen sich für sogenannte Client-Server-Anwendungen (es lassen sich auch RPCs realisieren).
 +
Benannte Pipes ermöglichen die gleichzeitige Kommunikation in beide Richtungen, das heißt, Daten können im Vollduplexbetrieb
 +
zwischen den Prozessen ausgetauscht werden.
 +
 +
Erstelle Named Pipe mit Namen /tmp/roehre. Schreibe "hallo welt" in die Pipe und bleibe
 +
xinux@zero:~$ mkfifo /tmp/roehre
 +
xinux@zero:~$ echo hallo welt > /tmp/roehre
 +
 +
Gebe Inhalt der Pipe mit cat aus
 +
root@zero:~# cat < /tmp/roehre
 +
hallo welt
 +
root@zero:~# ls -l /tmp/roehre | cut -c 1
 +
p
 +
 +
====Sockets====
 +
Schnittstelle um es lokalen Anwendungen zu ermöglichen, miteinander Netwerkmässig zu kommunizieren.
 +
 +
root@lydia:~# netstat  -lnxp | tail -1
 +
  unix  2 [ ACC ] STREAM HÖRT 21951 6646/nm-applet /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede
 +
 +
root@lydia:~# ls -l /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede  | cut -c 1
 +
s
 +
 +
====Links====
 +
Bei Links handelt es sich um symbolische Verweise auf andere Dateien
 +
 +
'''Softlink'''
 +
Ein Softlink ist eine Datei die nur auf den Namen einer anderen Datei verweist. Wenn die Originaldatei gelöscht wird, zeigt
 +
der Link ins Leere.
 +
 +
ln -s datei softlink
 +
 +
{| border=1 cellpadding=2
 +
| Vorteile
 +
| Symbolische Links können auch auf Verzeichnisse angelegt werden<br>Sie sind partitionsübergreifend<br>Man kann sie auf Dateien anlegen, die noch nicht existieren
 +
|-
 +
| Nachteile
 +
| Wenn das Original gelöscht ist, ist kein Zugriff mehr möglich
 +
|}
 +
 +
Beispiel
 +
Normal
 +
root@zero:~# ln -s text verweis
 +
Verbose
 +
root@zero:~# ln -sv text verweis
 +
„verweis“ -> „text“
 +
Erzwungenes Überschreiben
 +
root@zero:~# ln -sf dat verweis
 +
Auswirkungen
 +
root@zero:~# ls -l dat verweis
 +
-rw-r--r-- 1 root root 4 2009-07-29 13:56 dat
 +
lrwxrwxrwx 1 root root 3 2009-07-29 13:57 verweis -> dat
 +
Kopieren(Original wird kopiert)
 +
root@lydia:~# cp -v verweis /tmp/
 +
„verweis“ -> „/tmp/verweis“
 +
  root@lydia:~# ls -l /tmp/verweis
 +
-rw-r--r-- 1 root root 4 2009-07-29 13:59 /tmp/verweis
 +
Kopieren(Link wird kopiert)
 +
root@lydia:~# cp -vd verweis /tmp/
 +
„verweis“ -> „/tmp/verweis“
 +
root@lydia:~# ls -l /tmp/verweis
 +
lrwxrwxrwx 1 root root 3 2009-07-29 14:00 /tmp/verweis -> dat
 +
 +
 +
'''Hardlinks'''
 +
ln datei hardlink
 +
Eigentlich ist jede Datei ein Hardlink. Ein Hardlink ist ein Verzeichniseintrag,
 +
der auf eine Inode verweist. Beim Erzeugen einer Datei verweist ein Eintrag auf
 +
eine Inode. Man kann dann weitere Verweise erzeugen. Der Linkcounter wird
 +
jeweils um 1 erhöht. Beim Löschen einer Datei wird er jeweils um 1 reduziert.
 +
Wird der Wert 0 erreicht, ist die Datei gelöscht.
 +
{| border=1 cellpadding=2
 +
| Vorteile
 +
|Zugriff auf die Daten, selbst wenn das Orginal gelöscht ist.
 +
|-
 +
|Nachteile
 +
|Man kann keine Hardlinks auf Verzeichnisse anlegen.
 +
Ist nur innerhalb einer Partion möglich.
 +
|}
 +
 +
Beispiel
 +
root@zero:~# touch 1
 +
root@zero:~# echo "text" > 1
 +
root@zero:~# ln 1 2
 +
root@zero:~# more 2
 +
text
 +
root@zero:~# echo "doch kein text" > 1
 +
root@zero:~# more 1
 +
doch kein text
 +
root@zero:~# more 2
 +
doch kein text
 +
 +
Weitere Optionen:
 +
-b sichert Dateien, statt sie zu überschreiben
 +
-f Überschreibt bestehende, gleichnamige Dateien
 +
-i fragt vor dem Überschreiben nach Bestätigung
 +
-v ausführliche Meldungen
 +
Softlink mit dem Namen passwd im Homeverzeichnis angelegt
 +
xinux@zero:~$ ln -vs /etc/passwd .
 +
„./passwd“ -> „/etc/passwd“
 +
Softlink mit dem Namen passwd im Homeverzeichnis angelegt(Original exestiert nicht)
 +
xinux@zero:~$ ln -vs /etc/hund .
 +
„./hund“ -> „/etc/hund“
 +
Hardlink mit dem Namen hosts im Homeverzeichnis angelegt
 +
  xinux@zero:~$ ln -v /etc/hosts .
 +
„./hosts“ => „/etc/hosts“
 +
Auf eine nicht existierende Datei kann kein Hardlink angelegt werden!
 +
xinux@zero:~$ ln -v /etc/katze .
 +
ln: Zugriff auf „/etc/katze“: No such file or directory
 +
 +
==Prozesse==
 +
*[[Prozesse]]

Version vom 4. August 2016, 09:42 Uhr

Einführung

Geschichte Unix

Distributionen

Bücher

Betriebssystem

Die Installation im Überblick

Erste Schritte

Anmelden

Sie können sich nun mit dem Usernamen und dem Passwort, das sie bei der Installation angelegt haben anmelden! Benutzer.jpg

Passwd.jpg

Terminal öffnen

Ein Terminal öffnen Sie über das Startmenü:

Terminalde.jpg

Das geöffnete Terminal sieht dann folgendermaßen aus:

Terminalde2.jpg

Sudo

Rootrechte erlangen sie über den "Sudo"-Befehl

Den nächsten Befehl als root ausführen

xinux@zero:~$ sudo cat /etc/shadow
[sudo] password for xinux:

Eine komplette Sitzung als root starten

xinux@zero:~$ sudo -i
[sudo] password for xinux:
root@zero:~#

Virtuelle Konsolen

In die Virtuelle Konsole gelangen sie über "STRG+ALT+(F1-F6)". Sie funktioniert wie ein ganz normales Terminal, und mit "ALT+F7" gelangen sie wieder zurück auf die grafische Benutzeroberfläche

Abmelden

Abmelden können Sie sich wieder über das Startmenu unter:

Logout.jpg

Fals sie nur einzelne Sitzungen in einem der Terminals oder den Virtuellen Konsolen Abmelden wollen benutzen sie dazu den Befehl: "exit"

Herunterfahren

Das Herunterfahren funktioniert auf dem selben Weg.

Entweder sie Benutzen wieder das Startmenü und benutzen diesmal den "Ausschalten ..." Knopf,

Oder sie geben den äquivalenten "shutdown"-Befehl in einem Terminal bzw. der virtuellen Konsole ein.

Allerdings müssen sie dazu als Administrator angemeldet sein s. "Sudo"

Wenn Sie den "shutdown"-Befehl benutzen wollen muss hinter den Befehl

eine Zeitangabe in Minuten oder das wort "now" für sofortiges Ausschalten hinzugefügt werden:

xinux@zero:~$ sudo -i
root@zero:~# shutdown 60

Broadcast message from xinux@zero 
        (/dev/pts/3) at 14:29 ...

The system is going down for maintenance in 60 minutes!

Sollten sie den Befehl widerrufen wollen dann drücken sie "STRG+C",

in dem Terminal in dem der shutdown Befehl gestartet wurde,

oder geben sie den "shutdown"-Befehl zusammen mit der Abbruchoption "-c" in einem anderen Terminal ein:

root@zero:~# shutdown -c
shutdown: Shutdown cancelled
root@zero:~# 

Wenn Sie den Rechner Neustarten möchten gibt es dazu die Option "-r" für den "shutdown"-Befehl

oder den "reboot"-Befehl die beide auch als root ausgeführt werden müssen:

xinux@zero:~$ sudo -i
[sudo] password for xinux: 
root@zero:~# shutdown -r now
root@zero:~# reboot

Mögliche Reboots

root@zero:~# reboot
root@zero:~# init 6 
root@zero:~# shutdown -r now

Mögliche Halts

root@zero:~# halt
root@zero:~# init 0 
root@zero:~# shutdown -h now

"passwd"

passwd wechselt Passwörter für User- und Gruppenaccounts. Ein Normaluser darf nur sein Passwort ändern, der Superuser darf die Passwörter aller Accounts ändern. Der Administrator einer Gruppe darf das Passwort dieser Gruppe ändern. passwd kann auch die Account-Informationen wie Kommentar, Loginshell oder Passwort-Auslaufzeiten und -intervalle ändern.

Der User muss vor der Änderung sein altes Passwort angeben

thomas@zero:~$ passwd 
Ändern des Passworts für thomas.
(aktuelles) UNIX Passwort: 
Geben Sie ein neues UNIX Passwort ein: 
Geben Sie das neue UNIX Passwort erneut ein: 
passwd: Passwort erfolgreich geändert

Root kann das Passwort ohne das alte zu kennen ändern

root@zero:~# passwd thomas
Geben Sie ein neues UNIX Passwort ein: 
Geben Sie das neue UNIX Passwort erneut ein: 
passwd: Passwort erfolgreich geändert

Root kann auch das eigene Passwort ändern

root@zero:~# passwd 
Geben Sie ein neues UNIX Passwort ein: 
Geben Sie das neue UNIX Passwort erneut ein: 
passwd: Passwort erfolgreich geänder


"man"

Programm zum Einsehen der Online-Manuals

Die Manuals sind in folgende Sektionen unterteilt:

  1. Ausführbare Programme oder Shellbefehle
  2. Systemaufrufe (Kernelfunktionen)
  3. Bibliotheksaufrufe (Funktionen in System-Bibliotheken)
  4. Spezielle Dateien (gewöhnlich in /dev)
  5. Dateiformate und Konventionen, z. B. /etc/passwd
  6. Spiele
  7. Makropakete und Konventionen, z. B. man(7), groff(7)
  8. Systemadministrationsbefehle (in der Regel nur für root)
  9. Kernelroutinen [Nicht Standard]

Aufruf eines Manuals erfolgt durch man kommando Beendet wird durch Drücken des Buchstabens q Gesucht wird vorwärts durch Eingabe eines /suchausdruck Gesucht wird rückwärts durch Eingabe eines ?suchausdruck

Beispiele:

     man passwd        Anschauen der Manualseite zum Programm passwd
     man 5 passwd      Anschauen der Manualseite zur Datei /etc/passwd
     man -a passwd     Anschauen aller Manualseiten zu passwd
     man -k passwd     Durchsucht die Kurzbeschreibungen der Manualseite
                       nach passwd und gibt alle Treffer aus
     man -f passwd      Gibt alle gefunden Kurzbescheibungen zu passwd aus
     man -L en passwd Gibt englische Manualseiten aus

Wie ist ein Befehl aufgebaut

foo -c -a bar  tux  
  • foo Kommando
  • -c Option(Schalter)
  • -a Option(Regler)
  • bar Optionsargument
  • tux Kommandoargument

Was geht vor auf meinem System? (date,who,id)

Das Kommando date dient zur Abfrage von Datum und Uhrzeit.

xinux@zero:~ > date
Fre Mär 16 16:35:03 CET 2001

oder auch Anzeige der Grennwich Zeit:

xinux@zero:~ > date -u
Fre Mär 16 15:35:34 UTC 2001

who zeigt alle angemeldeten Benutzer an

thomas@zero:~$ who
thomas   tty7         2009-07-22 08:33 (:0)
thomas   pts/0        2009-07-22 10:37 (:0.0)

Wer bin ich?

thomas@zero:~$ whoami
thomas

Anzeigen der Userid

thomas@zero:~$ id -u

Anzeigen der Gruppenid

thomas@zero:~$ id -g

Linux-Dateisystem

Einfache Linux Komandos

Der Standard Editor vi

Reguläre Ausdrücke

c Ein einzelner Buchstabe passt auf sich selbst
. Ein Punkt passt auf jedes Zeichen außer auf das Zeilenende
* Das dem Operator * vorangehende Muster kann 0 oder öfter vorkommen
^ (Caret) passt auf den Zeilenanfang
$ Passt auf das Zeilenende
\ Das folgende Sonderzeichen wird entwertet
[...] Passt auf "genau" eins in [...] angebenen Zeichen
[^...] Passt auf "genau" ein Zeichen welches nicht in [...] angebenen ist
\< Passt auf den Wortanfang
\> Passt auf das Wortende
\+ Das dem Operator \+ vorangehende Muster kann 1 oder öfter vorkommen
& Setzt das gefunden Suchmuster ein
\(...\) Speichert den Text auf den das Suchmuster passt zur späteren Verwendung
\n Setzt das vorangehende, mit \(...\) Gefundene wieder ein
(...) Gruppiert Auswahlmöglichkeiten
| Trennt Auswahlmöglichkeiten
\b Passt auf den Anfang oder das Ende eines Wortes
\B Symbolisiert den Raum innerhalb eines Wortes
\w Passt auf alle alphanumerischen Zeichen [A-Za-z0-9]
\W Passt auf alle nichtalphanumerischen Zeichen [^A-Za-z0-9]

Die Rangfolge der Operatoren(von der höchsten zur niedrigsten)

(, ), ?, *, + | .

Die anderen Operatoren sind mit den anderen Buchstaben gleichrangig.

Beispiel zum Suchen

Suchmuster               Passt auf
^Tuxer                   Tuxer am Zeilenanfang
[tT]uxer                 Tuxer oder tuxer
80[23]?86                8086, 80286 oder 80386

grep

Mit grep ist es möglich, in Dateien nach regulären Ausdrücken zu suchen. Wenn eine Übereinstimmung gefunden wird, wird die komplette Zeile auf die Standardausgabe geschrieben. grep kann auch von STDIN lesen.Es ist empfehlenswert, sich anzugwöhnen ,das Suchmuster in Anführungszeichen zu schreiben. Es gibt 3 Arten fgrep = fastgrep , grep und egrep egrep

Beispiel:

root@zero:~# cat text
quatsch
quatsch
quatsch
wichtig
quatsch
root@zero:~# grep wichtig text
wichtig
root@zero:~# 
-c                   meldet nur die Gesamtzahl der Fundstellen
-v                   zeigt nur Zeilen, die »Ausdruck« nicht enthalten
-i                   ignoriert Groß- und Kleinschreibung
-l                    meldet nur Dateinamen mit Fundstellen
-n                   listet Zeilennummern zu jeder Fundstelle
-f                   Dateiname »Dateiname« enthält die Such-Ausdrücke
-E                   ist ein erweiterter regulärer Ausdruck (egrep)
-F                   (Muster, Ausdruck) ist ein Muster (String) (fgrep)
-b                   listet auch die Position der Fundstellen
-C    Anzahl         Anzahl von Zeilen werden nach der Fundstelle ausgegeben
-B    Anzahl         Anzahl von Zeilen werden vor der Fundstelle ausgegeben
-r                   Durchsucht Verzeichnisse rekursiv

Useridendifikation

/etc/passwd

Beschreibung

passwd ist eine ASCII-Datei, die eine Liste der Benutzer des Systems und deren Passwörter enthält. Die Passwortdatei sollte für alle Benutzer lesbar sein, was für die Verschlüsselung notwendig ist; aber nur vom Superuser beschreibbar. Wenn Sie eine neue Kennung einrichten, lassen Sie das Passwort-Feld in der Datei frei und benutzen Sie passwd(1), um dem System ein Passwort für die neue Kennung mitzuteilen.

Die Datei /etc/passwd enthält einen Eintrag pro Zeile mit dem Format: login_name:passwd:UID:GID:user_name:directory:shell

Die Bedeutung der Felder:

  1. login_name Kennung des Benutzers auf dem System.
  2. password Hier steht bei Shadowsystemen ein x. Die Passwörter sind in der Datei /etc/shadow
  3. UID Die numerische Benutzernummer.
  4. GID Die numerische Gruppennummer des Benutzers.
  5. user_name Ein optionales Kommentarfeld, oft benutzt für den vollen Namen des Benutzers und weitere Informationen (Telefon, Raum-Nummer etc.).
  6. directory Das Heimatverzeichnis $HOME des Benutzers.
  7. shell Das Programm, das beim Einloggen gestartet werden soll (falls nicht nötig, benutzen Sie /bin/bash).

/etc/group

Beschreibung

etc/group ist eine ASCII Datei, die Gruppen definiert, zu denen Benutzer gehören. Es gibt nur einen Eintrag pro Zeile; jede Zeile hat folgendes Format:

        GruppenName:Passwort:GruppenKennung:BenutzerListe

Beschreibung der Felder:

  1. GruppenName Die Bezeichnung der Gruppe.
  2. Passwort Das (verschlüsselte) Gruppen-Passwort. Wenn dieses Feld leer ist, wird kein Passwort benötigt.
  3. GruppenKennung Die numerische Identifikation der Gruppe.
  4. BenutzerListe Alle Namen der Mitglieder, getrennt durch Kommas.

/etc/shadow

Beschreibung

shadow beinhaltet Informationen zu den verschlüsselten Passwörten, zu den Benutzerzugängen und weitere Informationen zur Laufzeit der Passwörter.

Name:Passwort:Letzte Änderung:Mintage:Maxtage:Warntage:Inaktiv:Ablauf
  1. Der Loginname
  2. verschlüsseltes Passwort
    1. * bedeutet Benutzer kann sich nicht einlogen
    2. ! bedeutet Benutzer hat kein Passwort gesetzt
  3. Tage seit dem 1 Januar 1970 an dem das Passwort letztmals geändert wurde
  4. Tage, die das Passwort behalten werden muss, bevor es wieder geändert werden kann
  5. Die Anzahl der Tage, nach denen der Benutzer das Passwort wieder ändern muss
  6. Anzahl der Tage bevor das Passwort abläuft und der Benutzer gewarnt wird
  7. Wenn der Zugang diese Anzahl von Tagen nicht benutzt wird, wird der Zugang gesperrt
  8. Tag seit dem 1 Januar 1970, an dem der Zugang gesperrt wird
  9. Reserviertes Feld

Die Datei sollte aus Sicherheitgründen nicht für einen normalen Benutzer lesbar sein.

Programme zur Userverwaltung

Berechtigungen

Gruppenzugehörigkeit

Umgang mit der Shell

INodes

Prozesse

Was ist ein Prozess?

Ein Prozess setzt sich aus zwei Teilen zusammen:

1.Programm, das in den Hauptspeicher geladen wurde

2.Prozessumgebung

Unter einem Prozess versteht man ein Programm (binär), das in den Hauptspeicher geladen wurde. Also nicht das Program selbst, das auf der Festplatte liegt ist der Prozess, sondern es wird erst durch das Laden in den Hauptspeicher dazu. Normalerweise liegt ein Programm als ausführbare Datei irgendwo auf der Festplatte oder auf Diskette. Ob es sich bei dem Programm um eine binäre Datei handelt, kann man mit dem Befehl file feststellen.

root@zero:~# file /bin/mkdir
/bin/mkdir: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped


Die Datei liegt im Maschinencode vor und kann in den Hauptspeicher geladen werden. Sobald dies geschehen ist, kann der Rechner diesen Maschinencode abarbeiten (ausführen).

Da aber ein Programm nicht direkt auf die Hardware zugreifen soll, muss es vom Betriebsystem kontrolliert werden. Das Betriebssystem liegt logisch gesehen zwischen Hardware und Anwendung. Das Betriebssystem ordnet jedem Prozess verschiedene Kenndaten zu, um die Prozesse verwalten zu können. Alle Kenndaten, die einem Prozess zugeordnet sind, nennt man die Prozessumgebung.Wenn man in der Shell ein Kommando eingibt, wird ein Prozess kreiert. Natürlich ist die Shell selbst auch ein Prozess. Ein Prozess kann aber genauso gut ein Serverprozess (Dienst) sein, z.B. Apache. Ein wesentliches Merkmal eines Prozesses ist die Prozesskommunikation. Über im Betriebssystem implementierte Methoden ist es möglich, dass verschiedene Prozesse Signale und Daten untereinander austauschen können. Dadurch wird auch dem Benutzer ermöglicht, einem Prozeß bestimmte Signale zu senden bzw. auf den Status eines Prozesses Einfluss zu nehmen.

Prozesstabelle (Anzeige mit ps)

Da zu jedem Prozess Kenndaten geführt werden, müssen diese auch irgendwo festgehalten werden. Das geschieht in der sogenannten Prozesstabelle.

Kenndaten der Prozesse (Auswahl):

  • F Flags (z.B. ausgelagert; Systemprozess; Trace,...)
  • UID Nutzer, mit dessen Rechten der Prozess ausgeführt wird
  • PID Prozess - ID. Diese Nummer gibt eine eindeutige Prozess - Nummer

an. Sie wird vom System automatisch beim Starten des Prozesses vergeben und ist für die Laufzeit eindeutig.

  • PPID Prozessnumer der Eltern-Prozesses
  • PRI Priorität eines Prozesses; je niedriger der Wert ist, desto besser
  • NI ist der Nicewert des Prozesses; Nice erniedrigt den Grundwert

der Priorität des Prozesses und gibt damit Prozessorzeit für andere Prozesse frei.

  • SIZE Speichergröße des Prozesses inklusive Stack (eine Art Zwischenspeicher)
  • RSS Verbrauch an physischen Speicher
  • WCHAN ist der Name der Kernerlfunktion, in der der Prozess schläft
  • STAT Status des Prozesses

R läuft S schlafend D nicht störbarer Schlaf T angehalten Z Zombie W der Prozess belegt keine Seiten

  • TIME Bisland benötigte Prozessorzeit
  • SIZE ist die Größe von Text, Daten und Stack
  • TTY die Nummer des kontrollierenden Teminal; wenn hier ein ? steht,

handelt es sich um einen Dämon oder Serverprozess.

  • COMMAND Angabe des Prozesses selbst. Dies ist meist der Programmname.

Weiteres

  • GID Gruppe, unter der der Prozess läuft
  • Verweis auf das aktuellen Arbeitsverzeichnis
  • Um mit relativen Pfadangaben arbeiten zu können braucht man diesen Eintrag
  • Tabelle mit Verweisen auf aktuell geöffnete Dateien
  • 3 sind automatisch geöffnet Standardeingabe, Standardausgabe und

Standardfehlerkanal

Beispiel

root@zero:~# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 R     0 18639 18631  0  80   0 -  1080 -      pts/0    00:00:00 bash
0 R     0 25904 18639  0  80   0 -   635 -      pts/0    00:00:00 ps

Eltern und Kinder

Jeder Prozess kann weitere Prozesse erzeugen. Die erzeugten Prozesse bezeichnet man als Kindprozesse. Jeder Kindprozess weiß anhand der PID, woher er stammt.

Alle Prozesse sind von einem anderen Prozess gestartet worden, mit Ausnahme des Pseudoprozesses (noch im Kernel beim Starten erzeugter Prozess). Dieser hat die Prozessnummer 0. Er hat die Aufgabe, den Init Prozess ( /sbin/init die Nummer 1) zu starten, der in System V alle anderen Prozesse direkt oder über seine Kind- prozesse startet. (init wird konfiguriert durch die /etc/inittab)

Es gibt zwei Arten wie ein Prozess gestartet werden kann:

  1. Fork und Exec: Prozessumgebung wird dupliziert, der neue Prozess bekommt eine eigene neue PID
  2. Exec: Alter Prozess wird durch neuen Prozess überladen (geht mit dem shell-buildin exec)

Rechte auf Objekte UID GID Ob ein Prozess auf eine Datei zugreifen kann, entscheidet der Kernel anhand der Zugriffssrechte, die auf der Datei gesetzt sind. Er checkt anhand der UID und GID des Prozesses, ob es erlaubt ist. Mit dieser Technik wird letztendlich geprüft, was ein User darf, und was nicht.

Rechenzeit und Priorität

Da auch bei Prozessen eine Gerechtigkeit herschen muss, muss eine Instanz darüber entscheiden wie lange ein Prozess Rechenzeit verbrauchen darf. Folgende Kenndaten werden dazu benötigt

  • clocktick = Zeiteinheit
  • n = Faktor über den Kernel einstellbar
  • slice = n * clocktick
  • agingtime = weitere Zeiteinheit über den Kernel einstellbar

Es wird davon ausgegangen das der Prozess mit der niedrigsten Priorität gerade rechnet. Pro clocktick erhöht sich die Priorität dieses Prozesses um eins.

Jetzt können 3 Situationen eintreten die alle dazu führen das der Scheduler aufgerufen wird.

  1. Prozess blockiert wegen einer Ausgabe oder Eingabe.
  2. Gibt Rechenzeit freiwillig ab.
  3. Der Slice endet.

Der Aufruf des Schedulers bewirkt das der Prozess mit der niedrigsten Priorität gescheduled wird, er also nun rechnen darf. Nach Ablauf der agingtime werden nun die Prozesse "gealtert". Das geschieht nach folgender Formel

Neue Priorität = Alte Priorität / 2 + Nicewert

Der User hat die Möglichkeit, über den sogenannten Nicewert den Grundwert für einen Prozess zu senken. Der Prozess braucht dann länger für seine Abarbeitung. Er verhält sich somit netter zu den anderen Prozessen. Normale User können nur netter werden, der Systemverwalter kann auch nicht netter (gemeiner) werden. Der Bereich liegt zwischen 19 (sehr nett) bis 0 (weniger nett) für die User, und 19 bis -20 für root.

Datei:Pri.png

Signale

Mit den Kommando kill und killall kann man Prozessen Signale schicken

kill -Signalnummer PID 

Signalnummer

Signalname Wert Aktion
SIGHUP 1 Neuinitialisierung eines Prozesses
SIGINT 2 Interrupt-Signal von der Tastatur (STRG+c)
SIGQUIT 3 Interrupt-Signal von der Tastatur (STRG+c) mit Dump
SIGKILL 9 unwiderrufliches Beendigungssignal (Töten)
SIGSEGV 11 Ungültige Speicherreferenz (bedeutet oft auf defekten Speicher)
SIGTERM 15 Beendigungssignal (geöffnete Dateien werden geschlossen)
SIGCONT 18 Weiterfahren, wenn gestoppt
SIGSTOP 19 Prozessstop

Beispiel

root@zero:~# kill -1 7562

Programme im Zusammenhang mit Prozessen

ps: Zeigt die Prozesse mit ihrem Status an

Option Beschreibung (BSD)

  • l langes Format
  • U user zeige Prozesse des Users an!
  • u zeige für jeden Prozess Besitzer und Startzeit an
  • j Jobs-Format: Zeige PGID und SID an
  • s Informationen über Signale ausgeben
  • m Speicher-Informationen anzeigen
  • f Baumstruktur der Prozesse anzeigen (ähnlich pstree)
  • a alle Prozesse (jedes Benutzers) anzeigen
  • x kontrollierendes Terminal nicht anzeigen
  • e Für den Prozess gültige Umgebungsvariablen mit anzeigen (sinnvollerweise mit mehreren Optionen »w« anwenden, um die Ausgabe nicht am Zeilenende abzuschneiden)
  • w längere Ausgabe. »w« kann mehrfach verwendet werden, um die maximale Länge um je eine Zeile zu vergrößern
  • h Header mit Feldbezeichnern unterdrücken
  • r nur laufende Prozesse ausgeben
  • n User-ID statt User-Name ausgeben
  • txx nur Prozesse ausgeben, die vom angegebenen Terminal kontrolliert werden. xx kann entweder einer der Terminal-Gerätenamen unter /dev (z.B. tty1) oder die entsprechende Kurzbezeichnung ohne »tty« (z.B. 1) sein.
thomas@cardassia:~# ps
 PID TTY          TIME CMD
14134 pts/0    00:00:00 bash
14149 pts/0    00:00:00 ps

root@zero:~# ps alx | grep apache
5    33  1427  6710  20   0  13816  3064 skb_re S    ?          0:00 /usr/sbin/apache2 -k start
5    33  1428  6710  20   0 235672  3316 pipe_w Sl   ?          0:00 /usr/sbin/apache2 -k start
5    33  1429  6710  20   0 235672  3320 pipe_w Sl   ?          0:00 /usr/sbin/apache2 -k start
5     0  6710     1  20   0  14192  4460 select Ss   ?          0:01 /usr/sbin/apache2 -k start
0     0 13376 13244  20   0   3248   824 pipe_w S+   pts/13     0:00 grep apache

zeige Prozesse des Users an!

thomas@cardassia:~$ ps u zeige für jeden Prozess Besitzer und Startzeit an
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
thomas    8758  0.0  0.0   7744  3068 pts/0    Ss   16:37   0:00 bash
thomas   10137  0.0  0.0   7728  2988 pts/1    Ss   16:45   0:00 bash

zeige Prozesse des Users und zeige für jeden Prozess Besitzer und Startzeit an

thomas@cardassia:~$ ps uU root
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   3188  2060 ?        Ss   16:24   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S<   16:24   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S<   16:24   0:00 [migration/0]

pgrep: Zeigt die PID zu einem Prozess an

  • zeigt alle Prozesse an die auf die das Muster
root@zero:~# pgrep mc
13552
13734
  • zeigt nur die an die einem User gehören
root@zero:~# pgrep -u thomas mc
13552

zeigt denn vollständigen Prozessnamen an

root@zero:~# pgrep -l apa
1427 apache2
1428 apache2
1429 apache2
6710 apache2

zeigt den zuletzt gestarteten Prozess

root@zero:~# pgrep -n apa
1429

zeigt nur Prpzesse an die genau auf den Namen passen

root@zero:~# pgrep -x apache2
1427
1428
1429
6710

pkill: schickt einem Prozess anhand des Namens ein Signal

beendet den Prozess

root@zero:~# pkill -x apache2

beendet den Prozess der als erstes gestartet wurde

root@zero:~# pkill -xo mc

nice: Lässt ein Programm mit verändertem Grundwert der Priorität laufen

root@zero:~# nice
0
root@zero:~# nice -n 9 bash
root@zero:~# nice
9
root@zero:~#

renice: Ändert den Grundwert der Priorität eines laufenden Prozesses

root@zero:~# renice 10 5742
5742: Alte Priorität: 0, neue Priorität: 10

top: Zeigt die Prozesse mit ihrem Status an (Abbrechen mit q)

root@zero:~# top
top - 08:51:08 up 20 min,  1 user,  load average: 0.00, 0.02, 0.06
Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.6%us,  3.1%sy,  0.1%ni, 84.9%id, 10.2%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:    509504k total,   273948k used,   235556k free,    11312k buffers
Swap:   321260k total,        0k used,   321260k free,   118380k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                       
2208 mysql     20   0  125m  21m 5552 S  1.7  4.2   0:02.29 mysqld                                                                        
3201 root      20   0  2444 1064  828 R  1.7  0.2   0:00.04 top                                                                           
   1 root      20   0  1908  780  564 S  0.0  0.2   0:02.19 init                                                                          
   2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                      
   3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0                                                                   
   4 root      15  -5     0    0    0 S  0.0  0.0   0:00.03 ksoftirqd/0                                                                   
   5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                                                    
   6 root      15  -5     0    0    0 S  0.0  0.0   0:00.04 events/0                                                                      
   7 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 khelper                                                                       
   8 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 kstop/0                                                                       
   9 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/0                                                                 
  10 root      15  -5     0    0    0 S  0.0  0.0   0:00.03 kblockd/0                                                                     
  11 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kacpid                                                                        
  12 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kacpi_notify                                                                  
  13 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 cqueue                                                                        
  14 root      15  -5     0    0    0 S  0.0  0.0   0:00.53 ata/0                                                                         
  15 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ata_aux

Kommandos

  • h - Hilfe
  • u - User
  • k - Kill
  • r - Renice
  • d - Delay (Default 3s)
  • n - Tasks (Default unbegrenzt)
  • W - Schreibe aktuelle Konfiguration in Datei
  • q - Quit

pstree: Zeigt die Prozesse als Baumstruktur

Mit -p werden auch die PID's ausgegeben

root@zero:~# pstree
init─┬─NetworkManager
     ├─acpid
     ├─apache2───5*[apache2]
     ├─atd
     ├─bluetoothd
     ├─console-kit-dae───63*[{console-kit-dae}]
     ├─cron
     ├─cupsd
     ├─dbus-daemon
     ├─dd
     ├─gdm───gdm─┬─Xorg
     │           └─gdmgreeter
     ├─6*[getty]
     ├─hald───hald-runner─┬─hald-addon-acpi
     │                    ├─hald-addon-inpu
     │                    └─2*[hald-addon-stor]
     ├─klogd
     ├─nm-system-setti
     ├─nmbd
     ├─nscd───11*[{nscd}]
     ├─portmap
     ├─rpc.statd
     ├─slapd───2*[{slapd}]
     ├─smbd───smbd
     ├─sshd───sshd───bash───bash───pstree
     ├─syslogd
     ├─system-tools-ba
     ├─udevd
     ├─winbindd─┬─winbindd───winbindd
     │          └─3*[winbindd]
     └─wpa_supplicant

Jobs

Unter einem Job versteht man ein Programm, welches man von der Shell gelöstInode (oder I-Node) wird im Deutschen am besten als Informationsknoten oder Indexeintrag bezeichnet. Er fasst alle Attribute einer Datei zusammen außer dem Inhalt und dem Namen der Datei.

Datsys2.png

Daten

type Der Typ der Datei wird als einzelner Buchstabe angezeigt. Der Typ einer Datei wird beim Anlegen der Datei festgelegt
Permissions Die Zugriffsrechte der Datei werden in den 12 Bit sstrwxrwxrwx abgespeichert.Die Zugriffsrechte können mit dem Kommando chmod verändert werden.
link count In UNIX kann eine Datei mehr als einen Namen haben. Der Link Count gibt die Anzahl der Namen einer Datei an. Er kann

mit dem Kommando ln erhöht und dem Kommando rm erniedrigt werden.

owner Für den Dateieigentümer gelten die in der ersten rwx-Gruppe festgelegten Zugriffsrechte. Standardmäßig ist der

Eigentümer einer Datei derjenige Benutzer, der die Datei angelegt hat.

group Für Benutzer, die in der gleichen Gruppe sind, der die Datei angehört, gelten die in der zweiten rwx-Gruppe festgelegten

Zugriffsrechte. In System V gehört eine Datei standardmäßig der Gruppe an, in der der anlegende Benutzer gerade ist.

size Bei normalen Dateien und Verzeichnissen gibt diese Information die Länge der Datei in Byte an.
access time Die Zugriffszeit gibt den Zeitpunkt des letzten Lesezugriffes auf eine Datei an. Aus Effizienzgründen wird die

Zugriffszeit an Verzeichnissen nicht gesetzt, wenn ein Verzeichnis durchsucht wird, obwohl man dies erwarten könnte. (ls -l --time=atime) stat zeigt alle Zeiten an.

modification time Die Modifikationszeit gibt die Zeit des letzten Schreibzugriffes auf die Daten der Datei an. Intern speichert UNIX

die Zeit als Sekunden seit Beginn des Jahres 1970 und in GMT ab. Für die Ausgabe wird dies in ein besser lesbares Format in der lokalen Zeitzone umgewandelt. (ls -l)

change time Die Veränderungszeit gibt das Datum der letzten Statusänderung der Datei an. Sie wird immer dann gesetzt, wenn die

Informationen über die Datei sich ändern (Datum der Erzeugung wird nicht gespeichert) (ls -lc)

Dateiarten

Zeichen Typ Zweck
- file normale Datei
d directory Verzeichnis
b block device Gerätedatei
c character device Gerätedatei
p named pipe Benannte Pipeline
s socket Netzwerkverbindung
l link Querverweis

Normale Dateien

Unter einer normalen Datei versteht man die Ansammlung von Daten. Dies kann ein Text, Programm, Bild oder sonstiges sein. Beispiel

root@zero:~# ls -l text | cut -c 1
-

Verzeichnisse

Dateien werden in Verzeichnissen gespeichert, nur so ist eine Ordnung möglich.

root@zero:~# mkdir -v Ordner
mkdir: Verzeichnis „Ordner“ angelegt

root@zero:~# ls -ld Ordner | cut -c 1
d

Gerätedateien (Block und Char)

Gerätedateien ermöglichen Anwendungsprogrammen unter Benutzung des Kernels den Zugriff auf die Hardwarekomponenten des Systems. Ansprechbar über Major und Minor Nummern

Beispiele

Sicherung des Master Boot Records der ersten Festplatte

root@zero:~# dd if=/dev/sda of=/tmp/mbr.img bs=512 count=1

Block Device

root@zero:~# ls -l /dev/sda | cut -c 1 
b

Character Device

root@zero:~# ls -l /dev/ttyS0  | cut -c 1 
c

Erstellen einer Gerätedatei

root@zero:/dev# mknod sata1 b 8 0 
root@zero:/dev# fdisk -l /dev/sata1 

Platte /dev/sata1: 6442 MByte, 6442450944 Byte
255 Köpfe, 63 Sektoren/Spuren, 783 Zylinder
Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
Disk identifier: 0x0005efab

      Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sata1p1   *           1         743     5968116   83  Linux
/dev/sata1p2             744         783      321300    5  Erweiterte
/dev/sata1p5             744         783      321268+  82  Linux Swap / Solaris

Named Pipes

Benannte Pipes (Named Pipes) können dagegen auch zur Kommunikation zwischen Prozessen eingesetzt werden, die nicht miteinander verwandt sind und sich darüber hinaus auf unterschiedlichen Rechnern innerhalb eines Netzwerkes befinden dürfen. Sie sind flexibler als anonyme Pipes und eignen sich für sogenannte Client-Server-Anwendungen (es lassen sich auch RPCs realisieren). Benannte Pipes ermöglichen die gleichzeitige Kommunikation in beide Richtungen, das heißt, Daten können im Vollduplexbetrieb zwischen den Prozessen ausgetauscht werden.

Erstelle Named Pipe mit Namen /tmp/roehre. Schreibe "hallo welt" in die Pipe und bleibe

xinux@zero:~$ mkfifo /tmp/roehre
xinux@zero:~$ echo hallo welt > /tmp/roehre 

Gebe Inhalt der Pipe mit cat aus

root@zero:~# cat < /tmp/roehre 
hallo welt
root@zero:~# ls -l /tmp/roehre | cut -c 1
p

Sockets

Schnittstelle um es lokalen Anwendungen zu ermöglichen, miteinander Netwerkmässig zu kommunizieren.

root@lydia:~# netstat  -lnxp | tail -1
 unix  2 [ ACC ] STREAM HÖRT 21951 6646/nm-applet /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede
root@lydia:~# ls -l /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede  | cut -c 1 
s

Links

Bei Links handelt es sich um symbolische Verweise auf andere Dateien

Softlink Ein Softlink ist eine Datei die nur auf den Namen einer anderen Datei verweist. Wenn die Originaldatei gelöscht wird, zeigt der Link ins Leere.

ln -s datei softlink
Vorteile Symbolische Links können auch auf Verzeichnisse angelegt werden
Sie sind partitionsübergreifend
Man kann sie auf Dateien anlegen, die noch nicht existieren
Nachteile Wenn das Original gelöscht ist, ist kein Zugriff mehr möglich

Beispiel Normal

root@zero:~# ln -s text verweis

Verbose

root@zero:~# ln -sv text verweis
„verweis“ -> „text“

Erzwungenes Überschreiben

root@zero:~# ln -sf dat verweis

Auswirkungen

root@zero:~# ls -l dat verweis 
-rw-r--r-- 1 root root 4 2009-07-29 13:56 dat
lrwxrwxrwx 1 root root 3 2009-07-29 13:57 verweis -> dat

Kopieren(Original wird kopiert)

root@lydia:~# cp -v verweis /tmp/
„verweis“ -> „/tmp/verweis“
 root@lydia:~# ls -l /tmp/verweis 
-rw-r--r-- 1 root root 4 2009-07-29 13:59 /tmp/verweis

Kopieren(Link wird kopiert)

root@lydia:~# cp -vd verweis /tmp/
„verweis“ -> „/tmp/verweis“
root@lydia:~# ls -l /tmp/verweis 
lrwxrwxrwx 1 root root 3 2009-07-29 14:00 /tmp/verweis -> dat


Hardlinks

ln datei hardlink

Eigentlich ist jede Datei ein Hardlink. Ein Hardlink ist ein Verzeichniseintrag, der auf eine Inode verweist. Beim Erzeugen einer Datei verweist ein Eintrag auf eine Inode. Man kann dann weitere Verweise erzeugen. Der Linkcounter wird jeweils um 1 erhöht. Beim Löschen einer Datei wird er jeweils um 1 reduziert. Wird der Wert 0 erreicht, ist die Datei gelöscht.

Vorteile Zugriff auf die Daten, selbst wenn das Orginal gelöscht ist.
Nachteile Man kann keine Hardlinks auf Verzeichnisse anlegen.

Ist nur innerhalb einer Partion möglich.

Beispiel

root@zero:~# touch 1
root@zero:~# echo "text" > 1
root@zero:~# ln 1 2
root@zero:~# more 2
text
root@zero:~# echo "doch kein text" > 1
root@zero:~# more 1
doch kein text
root@zero:~# more 2
doch kein text

Weitere Optionen:

-b sichert Dateien, statt sie zu überschreiben 
-f Überschreibt bestehende, gleichnamige Dateien
-i fragt vor dem Überschreiben nach Bestätigung
-v ausführliche Meldungen

Softlink mit dem Namen passwd im Homeverzeichnis angelegt

xinux@zero:~$ ln -vs /etc/passwd .
„./passwd“ -> „/etc/passwd“

Softlink mit dem Namen passwd im Homeverzeichnis angelegt(Original exestiert nicht)

xinux@zero:~$ ln -vs /etc/hund .
„./hund“ -> „/etc/hund“

Hardlink mit dem Namen hosts im Homeverzeichnis angelegt

 xinux@zero:~$ ln -v /etc/hosts .
„./hosts“ => „/etc/hosts“

Auf eine nicht existierende Datei kann kein Hardlink angelegt werden!

xinux@zero:~$ ln -v /etc/katze .
ln: Zugriff auf „/etc/katze“: No such file or directory

Prozesse