Prozesse: Unterschied zwischen den Versionen

Aus xinux.net
Zur Navigation springen Zur Suche springen
Zeile 726: Zeile 726:
 
     ELAPSED    TIME  START COMMAND
 
     ELAPSED    TIME  START COMMAND
 
   08:36:39 00:30:54  08:01 cinnamon
 
   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
 +
...

Version vom 2. März 2017, 15:56 Uhr

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ö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:

  1. 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
  1. 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:

  1. 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
  1. 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
...