Prozesse: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(31 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
−
===Was ist ein Prozess?===
+
*[[Was ist ein Prozess?]]
−
Ein Prozess setzt sich aus zwei Teilen zusammen:
+
*[[Prozesstabelle (Anzeige mit ps)]]
−
 
+
*[[Prozesse Eltern und Kinder]]
−
1.Programm, das in den Hauptspeicher geladen wurde
+
*[[Rechenzeit und Priorität]]
−
 
+
*[[Prozesse Signale]]
−
2.Prozessumgebung
+
*[[Programme im Zusammenhang mit Prozessen]]
−
 
+
*[[Jobs]]
−
Unter einem Prozess versteht man ein Programm (binär), das in den Hauptspeicher
+
*[[Forkbomb]]
−
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.
 
−
 
 
−
*http://cse.iitkgp.ac.in/~agupta/OS/MySlide-Scheduling.pdf
 
−
 
 
−
[[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öst
 
−
hat. D. h. man kann ganz normal weiter arbeiten und der Job verrichtet seinen
 
−
Dienst im Hintergrund. Man kann jederzeit zu diesem Job wieder Kontakt
 
−
aufnehmen.
 
−
 
 
−
Ein Job kann auf 2 Arten gestarten werden:
 
−
 
 
−
# Durch Anhängen des & Zeichens beim Programmstart
 
−
root@zero:~# tail -f /var/log/messages &
 
−
Jun 19 06:59:31 zero -- MARK --
 
−
Jun 19 07:19:31 zero -- MARK --
 
−
Jun 19 07:39:32 zero -- MARK --
 
−
Jun 19 07:44:57 zero syslogd 1.5.0#5ubuntu3: restart.
 
−
Jun 19 07:59:32 zero -- MARK --
 
−
Jun 19 08:19:32 zero -- MARK --
 
−
Jun 19 08:39:32 zero -- MARK --
 
−
Jun 19 08:59:32 zero -- MARK --
 
−
Jun 19 09:19:33 zero -- MARK --
 
−
Jun 19 09:39:33 zero -- MARK --
 
−
[3] 27421
 
−
 
 
−
# Durch Stoppen des Prozesses durch Drücken von Strg-Z und in den Hintergrund schicken mit %n (n ist die Jobnummer)
 
−
root@zero:~# watch cat /proc/cpuinfo
 
−
Strg-Z
 
−
[4]+  Stopped                watch cat /proc/cpuinfo
 
−
root@zero:~# bg %4
 
−
[4]+ watch cat /proc/cpuinfo &
 
−
 
 
−
Anweisungen im Zusammenhang mit Jobs (n ist die Jobnummer)
 
−
* bg %n : Einen Job in den Hintergrund stellen (wie oben)
 
−
* fg %n : Einen Job in den Vordergrund holen
 
−
root@zero:~# fg %4
 
−
watch cat /proc/cpuinfo
 
−
 
 
−
* jobs : Aktive Jobs ausgeben
 
−
 
 
−
root@zero:~# jobs
 
−
[1]  Running                tail -f /var/log/syslog &
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]-  Running                tail -f /var/log/messages &
 
−
[4]+  Stopped                watch cat /proc/cpuinfo
 
−
 
 
−
* Strg-Z : Einen Vordergrund-Job vorübergehend anhalten
 
−
* kill -STOP %n : Unterbricht Job im Hintergrund
 
−
root@zero:~# kill -STOP %1
 
−
root@zero:~# jobs
 
−
[1]+  '''Stopped'''                tail -f /var/log/syslog
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]  Running                tail -f /var/log/messages &
 
−
[4]-  Stopped                watch cat /proc/cpuinfo
 
−
* kill -CONT %n : Setzt den unterbrochenen Job im Hintergrund fort
 
−
root@zero:~# kill -CONT %1
 
−
root@zero:~# jobs
 
−
[1]+  '''Running'''                tail -f /var/log/syslog &
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]  Running                tail -f /var/log/messages &
 
−
[4]-  Stopped                watch cat /proc/cpuinfo
 
−
* kill -KILL %n : Tötet Job im Hintergrund
 
−
root@zero:~# kill -KILL %1
 
−
root@zero:~# jobs
 
−
[1]+  '''Killed'''                  tail -f /var/log/syslog
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]  Running                tail -f /var/log/messages &
 
−
[4]-  Stopped                watch cat /proc/cpuinfo
 
−
root@zero:~# jobs
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]-  Running                tail -f /var/log/messages &
 
−
[4]+  Stopped                watch cat /proc/cpuinfo
 
−
 
 
−
Bedingungen, die zu Jobausführung eingehalten werden sollen:
 
−
* Der Job soll nicht auf den Bildschirm schreiben (Standardausgabe +Standardfehlerkanal).
 
−
* Er soll keine Eingaben vom Benutzer erwarten.
 
−
 
 
−
==Suchen von Dateien==
 
−
===find===
 
−
find ab_wo_wird_gesucht was_wird_gesucht aktion
 
−
find [Pfad] [Bedingung] [Aktion]
 
−
 
 
−
====Nach Namen====
 
−
find [Pfad] '''-name''' [Name]
 
−
 
−
Finde alle Dateien mit Namen test ab dem Verzeichnis /home und gebe diese Zeilenweise aus
 
−
root@zero:~# find /home -name test -print
 
−
/home/xinux/test
 
−
/home/test
 
−
 
 
−
Wie oben, jedoch mit Namensanfang test
 
−
root@zero:/home/xinux# find /home -name 'test*'
 
−
/home/xinux/testdatei
 
−
/home/xinux/test
 
−
/home/test
 
−
 
 
−
====Nach Benutzer(Eigentümer)====
 
−
root@zero:/tmp# find /tmp/ '''-user''' xinux
 
−
/tmp/datei
 
−
 
 
−
====Nach Gruppe====
 
−
root@zero:/tmp# find /tmp/ '''-group''' hacker
 
−
/tmp/datei3
 
−
/tmp/datei2
 
−
 
 
−
 
 
−
 
 
−
====Nach Typ====
 
−
Es wird nach Dateien anhand Ihrer Art gesucht:
 
−
find [Pfad] '''-type''' [Typ]  
 
−
Typ:
 
−
* f: Normale Dateien
 
−
root@zero:~# find /tmp/ -type f
 
−
/tmp/mbr.img
 
−
/tmp/datei
 
−
/tmp/zeugs
 
−
/tmp/.X0-lock
 
−
* d: Verzeichnisse
 
−
root@zero:~# find /var/log -type d
 
−
/var/log
 
−
/var/log/apache2
 
−
/var/log/unattended-upgrades
 
−
/var/log/apparmor
 
−
/var/log/ConsoleKit
 
−
/var/log/dist-upgrade
 
−
/var/log/dist-upgrade/20090526-1052
 
−
/var/log/cups
 
−
/var/log/apt
 
−
/var/log/fsck
 
−
/var/log/samba
 
−
/var/log/samba/cores
 
−
/var/log/samba/cores/smbd
 
−
/var/log/samba/cores/nmbd
 
−
/var/log/samba/cores/winbindd
 
−
/var/log/installer
 
−
/var/log/gdm
 
−
/var/log/news
 
−
* c: Char Devices (Zeichenorientierte Gerätedatei)
 
−
root@zero:~# find / -type c
 
−
/lib/udev/devices/kmem
 
−
/lib/udev/devices/null
 
−
/lib/udev/devices/console
 
−
/lib/udev/devices/ppp
 
−
/lib/udev/devices/net/tun
 
−
* b: Block Devices (Blockorientierte Gerätedatei)
 
−
* p: Benannte Pipe
 
−
* l: Links
 
−
* s: Sockets
 
−
 
 
−
====Nach Permissions====
 
−
root@cardassia:~# find /usr/bin/ -perm +4000 -exec ls -l {} \;
 
−
-rwsr-xr-x 1 root root 115136 2008-09-01 15:17 /usr/bin/sudoedit
 
−
-rwsr-xr-x 1 root root 32988 2008-06-09 20:10 /usr/bin/passwd
 
−
 
 
−
====Nach Modifikation====
 
−
Listet alle Dateien in /etc auf, die innerhalb von zwei Tagen modifiziert wurden
 
−
root@zero:/var/log# find /etc/ -mtime 2 -print
 
−
/etc/apache2
 
−
/etc/apache2/mods-available
 
−
/etc/apache2/conf.d
 
−
/etc/apache2/sites-available
 
−
/etc/bash_completion.d
 
−
/etc/blkid.tab.old
 
−
/etc/firefox-3.0/profile
 
−
/etc/firefox-3.0/profile/chrome
 
−
/etc/firefox-3.0/pref
 
−
/etc/profile.d
 
−
/etc/ufw/applications.d
 
−
/etc/logrotate.d
 
−
/etc/xulrunner-1.9
 
−
/etc/blkid.tab
 
−
/etc/cron.daily
 
−
/etc/alternatives
 
−
/etc/alternatives/x-www-browser
 
−
/etc/alternatives/xulrunner
 
−
/etc/gre.d
 
−
/etc/hal/fdi/policy
 
−
/etc/dbus-1/system.d
 
−
/etc/udev/rules.d
 
−
 
 
−
====Nach Größe====
 
−
Finde Dateien in /tmp, die größer als 100 MByte sind
 
−
root@zero:/tmp# find /tmp/ -size +100M
 
−
/tmp/datei
 
−
 
 
−
Finde Dateien in /tmp, die kleiner als 100 KByte sind
 
−
root@zero:/tmp# find /tmp/ -size -100k
 
−
/tmp/
 
−
/tmp/datei3
 
−
/tmp/backup
 
−
/tmp/datei2
 
−
/tmp/.winbindd
 
−
/tmp/.winbindd/pipe
 
−
/tmp/mbr.img
 
−
/tmp/zeugs
 
−
/tmp/.ICE-unix
 
−
/tmp/.X0-lock
 
−
/tmp/datei1
 
−
/tmp/.X11-unix
 
−
/tmp/.X11-unix/X0
 
−
/tmp/pulse-PKdhtXMmr18n
 
−
 
 
−
====Nach Berechtigungen====
 
−
Finde Dateien in Home mit der Berechtigung 777 (-rwxrwxrwx)
 
−
root@zero:/var# find /home/ -perm 777
 
−
/home/samba
 
−
/home/xinux/Examples
 
−
/home/xinux/.pulse/1f0763ee4cf4c7e1d3c07fd149dda37b:runtime
 
−
/home/test/Examples
 
−
 
 
−
====Nach Zeit====
 
−
Modifiziert in der letzten Minute
 
−
root@zero:~# find /var    -mmin -1
 
−
/var/log/debug
 
−
/var/log/kern.log
 
−
/var/log/syslog
 
−
/var/run/klogd/kmsg
 
−
 
 
−
Modifiziert vor mehr als 9 Tagen
 
−
root@zero:~# find /var    -mtime +9
 
−
 
 
−
Zugriff vor mehr als 9 Minuten
 
−
root@zero:~# find /var    -amin +9
 
−
 
 
−
Kenndaten geändert in den letzen 2 Tagen
 
−
root@zero:~# find /var    -ctime -2
 
−
 
 
−
 
 
−
Ausführen eines Befehls
 
−
root@zero:~# find / -name "xinux?" -exec ls -l {} \;
 
−
 
 
−
Ausführen eines Befehls mit Rückfrage
 
−
root@zero:~# find / -name "xinux?" -ok  rm  {} \;
 
−
< rm ... /tmp/xinux3 > ? y
 
−
< rm ... /tmp/xinux2 > ? n
 
−
< rm ... /tmp/xinux1 > ? y
 
−
 
 
−
===locate===
 
−
Locate arbeitet über einen Index, der erstellt und aktualisiert werden muss. Aus diesem Grund kann locate teilweise nicht
 
−
akutell sein. Es ist immer schneller als find und es durchsucht immer das ganze Dateisystem.
 
−
locate [Dateiname]
 
−
 
−
Lokalisiere die Datei wvdial.conf. Anmerkung: Der Stern wird beim Suchen automatisch hinzugefügt. Entspricht also
 
−
wvidal.conf*
 
−
root@zero:~# locate wvdial.conf
 
−
/etc/wvdial.conf
 
−
/usr/share/man/man5/wvdial.conf.5.gz
 
−
/var/lib/dpkg/info/wvdial.conffiles
 
−
/var/lib/dpkg/info/wvdial.config
 
−
 
 
−
Lokalisiere die Datei wvdial.conf und nur diese
 
−
root@zero:~# locate -b '\wvdial.conf'
 
−
/etc/wvdial.conf
 
−
 
 
−
Aktualisieren des Indexes
 
−
root@zero:~# updatedb
 
−
 
 
−
==Wie wird ein Kommando lokalisiert==
 
−
Wenn die Shell alle Ersetzungen in der Kommandozeile vorgenommen und alle Umleitungen vorbereitet hat, ist der Zeitpunkt
 
−
gekommen, auf den der Anwender die ganze Zeit gewartet hat. Die Shell versucht das Kommando auszuführen. Dazu muss sie
 
−
es aber erst lokalisieren. Das erste passende Kommando wird ausgeführt.
 
−
 
 
−
Als Kommandoname wird immer das erste Wort eines einfachen Kommandos erkannt. Ein Kommandoname kann mit Pfadnamen in
 
−
einem Verzeichnis (absolut oder relativ) angegeben werden. Die Shell erkennt dies an (mindestens) einem Slash `/'
 
−
im Kommandonamen. Wenn kein Verzeichnis angegeben ist, versucht die Shell selbst, das Kommando zu finden. Dazu wird
 
−
der Kommandoname zuerst in der Hashtabelle gesucht, dann wird er mit den Synonymen, mit den Scriptfunktionen und
 
−
schließlich mit den Shellfunktionen verglichen.
 
−
 
 
−
Wird auf diese Weise kein Programm dieses Namens gefunden, werden alle in der PATH-Umgebungsvariablen aufgeführten
 
−
Verzeichnisse nach einer ausführbaren Datei dieses Namens durchsucht. Wird auch hier kein passendes Kommando gefunden,
 
−
gibt die Shell eine Fehlermeldung aus.
 
−
 
 
−
===which und type===
 
−
====which====
 
−
which gibt die vollen Pfadnamen der Dateien aus, die bei Benutzung des angegebenen Befehls ausgeführt werden würden.
 
−
 
 
−
which [-a] Dateiname
 
−
 
 
−
Optionen:
 
−
 
 
−
* -a : Alle Treffer ausgeben, nicht nur den ersten
 
−
* --skip-dot : Verzeichnisse, die mit einem Punkt beginnen, auslassen
 
−
 
 
−
Beispiel
 
−
root@zero:~# which startx
 
−
/usr/bin/startx
 
−
 
 
−
====type====
 
−
Anzeigen der absoluten Pfadnamen von Befehlen, und ob sich diese Befehle in der Hash-Tabelle der aktuellen
 
−
Shell befinden.
 
−
 
 
−
type [Optionen] Befehle
 
−
 
 
−
Beispiel
 
−
root@zero:~# type ls
 
−
ls is aliased to `ls --color=auto'
 
−
 
 
−
Optionen:
 
−
 
 
−
* -a : Alle vorkommenden Befehle werden ausgegeben, nicht nur das, welches aufgerufen werden würde
 
−
root@zero:~# type '''-a''' ls
 
−
ls is aliased to `ls --color=auto'
 
−
ls is /bin/ls
 
−
 
 
−
* -p : Anzeigen des Eintrags von Befehl in der Hash-Tabelle. Dieser Wert kann sich vom ersten Auftreten des Befehls in PATH
 
−
unterscheiden
 
−
root@zero:~# type '''-p''' apache2
 
−
/usr/sbin/apache2
 
−
 
 
−
* -t : Anzeigen, ob Befehl ein Aliasname, ein Schlüsselwort, eine Funktion, ein eingebauter Befehl oder eine Datei ist
 
−
root@zero:~# type '''-t''' apache2
 
−
file
 
−
 
 
−
hat. D. h. man kann ganz normal weiter arbeiten und der Job verrichtet seinen
 
−
Dienst im Hintergrund. Man kann jederzeit zu diesem Job wieder Kontakt
 
−
aufnehmen.
 
−
 
 
−
Ein Job kann auf 2 Arten gestarten werden:
 
−
 
 
−
# Durch Anhängen des & Zeichens beim Programmstart
 
−
root@zero:~# tail -f /var/log/messages &
 
−
Jun 19 06:59:31 zero -- MARK --
 
−
Jun 19 07:19:31 zero -- MARK --
 
−
Jun 19 07:39:32 zero -- MARK --
 
−
Jun 19 07:44:57 zero syslogd 1.5.0#5ubuntu3: restart.
 
−
Jun 19 07:59:32 zero -- MARK --
 
−
Jun 19 08:19:32 zero -- MARK --
 
−
Jun 19 08:39:32 zero -- MARK --
 
−
Jun 19 08:59:32 zero -- MARK --
 
−
Jun 19 09:19:33 zero -- MARK --
 
−
Jun 19 09:39:33 zero -- MARK --
 
−
[3] 27421
 
−
 
 
−
# Durch Stoppen des Prozesses durch Drücken von Strg-Z und in den Hintergrund schicken mit %n (n ist die Jobnummer)
 
−
root@zero:~# watch cat /proc/cpuinfo
 
−
Strg-Z
 
−
[4]+  Stopped                watch cat /proc/cpuinfo
 
−
root@zero:~# bg %4
 
−
[4]+ watch cat /proc/cpuinfo &
 
−
 
 
−
Anweisungen im Zusammenhang mit Jobs (n ist die Jobnummer)
 
−
* bg %n : Einen Job in den Hintergrund stellen (wie oben)
 
−
* fg %n : Einen Job in den Vordergrund holen
 
−
root@zero:~# fg %4
 
−
watch cat /proc/cpuinfo
 
−
 
 
−
* jobs : Aktive Jobs ausgeben
 
−
 
 
−
root@zero:~# jobs
 
−
[1]   Running                tail -f /var/log/syslog &
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]-  Running                tail -f /var/log/messages &
 
−
[4]+  Stopped                watch cat /proc/cpuinfo
 
−
 
 
−
* Strg-Z : Einen Vordergrund-Job vorübergehend anhalten
 
−
* kill -STOP %n : Unterbricht Job im Hintergrund
 
−
root@zero:~# kill -STOP %1
 
−
root@zero:~# jobs
 
−
[1]+  '''Stopped'''                tail -f /var/log/syslog
 
−
[2]   Running                tail -f /var/log/syslog &
 
−
[3]   Running                tail -f /var/log/messages &
 
−
[4]-  Stopped                watch cat /proc/cpuinfo
 
−
* kill -CONT %n : Setzt den unterbrochenen Job im Hintergrund fort
 
−
root@zero:~# kill -CONT %1
 
−
root@zero:~# jobs
 
−
[1]+  '''Running'''                tail -f /var/log/syslog &
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]  Running                tail -f /var/log/messages &
 
−
[4]-  Stopped                watch cat /proc/cpuinfo
 
−
* kill -KILL %n : Tötet Job im Hintergrund
 
−
root@zero:~# kill -KILL %1
 
−
root@zero:~# jobs
 
−
[1]+  '''Killed'''                  tail -f /var/log/syslog
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]  Running                tail -f /var/log/messages &
 
−
[4]-  Stopped                watch cat /proc/cpuinfo
 
−
root@zero:~# jobs
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]-  Running                tail -f /var/log/messages &
 
−
[4]+  Stopped                watch cat /proc/cpuinfo
 
−
 
 
−
Bedingungen, die zu Jobausführung eingehalten werden sollen:
 
−
* Der Job soll nicht auf den Bildschirm schreiben (Standardausgabe +Standardfehlerkanal).
 
−
* Er soll keine Eingaben vom Benutzer erwarten.
 
−
====Laufzeit eines Prozesses herausfinden====
 
−
*zeigt die Laufzeit des gewünschten Prozess an, in diesem Beispiel "Cinnamon"
 
−
root@erdogan:/# ps -o etime,time,bsdstart,comm 2776
 
−
    ELAPSED    TIME  START COMMAND
 
−
  08:36:39 00:30:54  08:01 cinnamon
 
−
====Prozesse nur vom User anzeigen====
 
−
*zeigt die Prozesse, die nur von einem bestimmten User gestartet wurden
 
−
root@erdogan:/# ps -U jan
 
−
  PID TTY          TIME CMD
 
−
2561 ?        00:00:00 systemd
 
−
2570 ?        00:00:00 (sd-pam)
 
−
2575 ?        00:00:00 gnome-keyring-d
 
−
2577 ?        00:00:00 cinnamon-sessio
 
−
2655 ?        00:00:00 ssh-agent
 
−
...
 

Aktuelle Version vom 28. Januar 2026, 05:43 Uhr