|
|
| (37 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) |
| Zeile 1: |
Zeile 1: |
| ===Was ist ein Prozess?===
| | *Animation zum Thema: [https://xinux.org/prozesse.html Prozesse] |
| Ein Prozess setzt sich aus zwei Teilen zusammen:
| |
|
| |
|
| 1.Programm, das in den Hauptspeicher geladen wurde
| | *[[Was ist ein Prozess?]] |
| | | *[[Prozesstabelle (Anzeige mit ps)]] |
| 2.Prozessumgebung
| | *[[Prozesse Eltern und Kinder]] |
| | | *[[Rechenzeit und Priorität]] |
| Unter einem Prozess versteht man ein Programm (binär), das in den Hauptspeicher
| | *[[Prozesse Signale]] |
| geladen wurde. Also nicht das Program selbst, das auf der Festplatte liegt ist der
| | *[[Programme im Zusammenhang mit Prozessen]] |
| Prozess, sondern es wird erst durch das Laden in den Hauptspeicher dazu.
| | *[[Jobs]] |
| Normalerweise liegt ein Programm als ausführbare Datei irgendwo auf der
| | *[[Forkbomb]] |
| 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ö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.
| |