26.4 Programm- und Prozessverwaltung 

26.4.1 at – Zeitpunkt für ein Kommando festlegen 

Mit dem Befehl at können Sie ein Kommando zum angegebenen Zeitpunkt ausführen lassen, auch wenn der Benutzer zu diesem Zeitpunkt nicht angemeldet ist. Durch
user$ at 2130 -f myscript
können Sie das Skript »myscript« um 21:30 Uhr ausführen lassen. Natürlich lassen sich mehrere solcher zeitgesteuerten Kommandos einrichten. Jeder dieser at-Aufrufe wird an die at-Queue(atq) angehängt. Dies funktioniert auch mit Datum: at 2200 apr 21 -f myscript. So würde das Skript »myscript« am 21. April um 22 Uhr ausgeführt. Wollen Sie sich alle Aufträge der atq auflisten lassen, müssen Sie die Option -l verwenden:
user$ at -l
Wollen Sie den Status des Auftrags mit der Nummer 33 anzeigen lassen, geben Sie Folgendes ein:
user$ at -l 33
Soll dieser Auftrag gelöscht werden, so kann die Option -d verwendet werden:
user$ at -d 33
26.4.2 batch – ein Kommando später ausführen lassen 

Mit batch lesen Sie Kommandos von der Kommandozeile, die zu einem späteren Zeitpunkt ausgeführt werden, sobald das System Zeit hat. Dies wird bei extrem belasteten Rechnern gern verwendet, wenn man das Kommando bzw. Skript zu einer Zeit ausführen lassen will, in der die Systemlast definitiv niedrig ist und dies nicht nur zu vermuten ist. Die angegebenen Kommandos werden auch dann ausgeführt, wenn der Benutzer nicht angemeldet ist. Um batch auszuführen, muss auch hier der at-Daemon laufen, der auch für das Kommando at verantwortlich ist.
user$ batch warning: commands will be executed using /bin/sh at> ls -l at> ./myscript at> sleep 1 at>+
job 1 at 2005-12-21 23:30
Das Ende der Kommandozeileneingabe von batch müssen Sie mit
+
angeben.
26.4.3 bg – einen Prozess im Hintergrund fortsetzen 

Mit dem Kommando bg können Sie einen (z. B. mit
+
) angehaltenen Prozess im Hintergrund fortsetzen.
26.4.4 cron/crontab – Programme zeitgesteuert ausführen 

Mit cron können Sie beliebig viele Kommandos automatisch in bestimmten Zeitintervallen ausführen lassen. Einmal pro Minute sieht dieser Daemon in einen Terminkalender (crontab) nach und führt gegebenenfalls darin enthaltene Kommandos aus.
26.4.5 fg – Prozesse im Vordergrund fortsetzen 

Mit dem Kommando fg können Sie einen (z. B. mit
+
) angehaltenen Prozess im Vordergrund fortsetzen.
26.4.6 jobs – Anzeigen von im Hintergrund laufenden Prozessen 

Mit jobs wird eine Liste mit den aktuellen Jobs zurückgegeben. Neben der Jobnummer stehen bei jedem Job der Kommandoname, der Status und eine Markierung. Die Markierung »+« steht für den aktuellen Job, »-« für den vorhergehenden Job.
26.4.7 kill – Signale an Prozesse mit Nummer senden 

Mit kill senden Sie den Prozessen durch Angabe der Prozessnummer ein Signal. Standardmäßig wird das Signal SIGTERM zum Beenden des Prozesses gesendet. Es lassen sich aber auch beliebige andere Signale senden. Das Signal wird dabei als Nummer oder als Name übermittelt. Einen Überblick über die möglichen Signalnamen erhalten Sie mit der Option -l.
26.4.8 killall – Signale an Prozesse mit Namen senden 

Der Name killall ist etwas irreführend. MIt diesem Kommando lassen sich nicht etwa alle Prozesse »killen«, sondern killall stellt eher eine Erleichterung für kill dar. Anstatt wie mit kill einen Prozess mit der Prozessnummer zu beenden bzw. ein Signal zu senden, kann mit killall der Prozessname verwendet werden. Diese Möglichkeit stellt gerade bei unzählig vielen gleichzeitig laufenden Prozessen eine erhebliche Erleichterung dar, weil man hier nicht mühsam erst nach der Prozessnummer (z. B. mit dem Kommando ps) suchen muss. Im Übrigen lässt sich killall ähnlich wie kill verwenden, nur dass der Signalname ohne das vorangestellte SIG angegeben wird. Eine Liste aller Signale erhalten Sie auch hier mit der Option -l.
user$ sleep 60 & [1] 5286 user$ killall sleep [1]+ Beendet sleep 60
26.4.9 nice – Prozesse mit anderer Priorität ausführen 

Mit nice können Sie veranlassen, dass ein Kommando mit einer niedrigeren Priorität ausgeführt wird. Die Syntax lautet:
nice [-n] kommando [argumente]
Für n können Sie dabei mit einer Ziffer angeben, um wie viel die Priorität verändert werden soll. Der Standardwert, falls keine Angabe erfolgt, lautet 10 (-20 ist die höchste und 19 die niedrigste Priorität). Prioritäten höher als 0 darf ohnehin nur der Root starten. Häufig wird man das Kommando mit nice im Hintergrund starten wollen:
user$ nice find / -name document -print > /home/tmp/find.txt &
Hier wird mit find nach einer Datei document gesucht und die Ausgabe in die Datei find.txt geschrieben. Der Hintergrundprozess find wird dabei von nice mit einer niedrigen (10) Priorität gestartet. Dies stellt eine gängige Verwendung von nice dar.
26.4.10 nohup – Prozesse nach dem Abmelden fortsetzen 

Mit nohup schützen Sie Prozesse vor dem HANGUP-Signal. Dadurch ist es möglich, dass ein Prozess im Hintergrund weiterlaufen kann, auch wenn sich ein Benutzer abmeldet. Ohne nohup würden sonst alle Prozesse einer Login-Shell des Anwenders durch das Signal SIGHUP beendet.
26.4.11 ps – Prozessinformationen anzeigen 

ps ist wohl das wichtigste Kommando für Systemadministratoren, um an Informationen über aktive Prozesse zu gelangen (neben top). Rufen Sie ps ohne irgendwelche Argumente auf, werden Ihnen die zum jeweiligen Terminal gestarteten Prozesse aufgelistet. Zu jedem Prozess erhalten Sie die Prozessnummer (PID), den Terminal-Namen (TTY), die verbrauchte Rechenzeit (TIME) und den Kommandonamen (COMMAND). Außer diesen Informationen lassen sich über Optionen noch viele weitere Informationen entlocken. Häufig wird dabei der Schalter -e verwendet, mit dem Informationen zu allen Prozessen zu gewinnen sind (also nicht nur zum jeweiligen Terminal), und ebenso der Schalter -f, der Ihnen noch vollständigere Informationen verschafft:
user$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:41 ? 00:00:00 init [2] root 2 1 0 10:41 ? 00:00:00 [migration/0] root 3 1 0 10:41 ? 00:00:00 [ksoftirqd/0] root 4 1 0 10:41 ? 00:00:00 [events/0] ... marcus 19380 13264 0 15:15 pts/1 00:00:00 ps -ef
Mittlerweile beinhaltet das Kommando ps eine Vielzahl von Optionen. Näheres liefert die man-Seite von ps. Häufig sucht man in der Liste von Prozessen nach einem ganz bestimmten Prozess. Diesen können Sie folgendermaßen »herauspicken«:
user$ ps -ax | grep apache 12444 ? SNs 0:00 /usr/sbin/apache2 -k start -DSSL ...
Durch die Verwendung der obigen Parameter wird zugleich auch die Prozessnummer geliefert. Dieselbe Funktion hat das im Folgenden beschriebene Kommando pgrep.
26.4.12 pgrep – Prozesse über ihren Namen finden 

Sofern Sie die Prozessnummer eines Prozessnamens benötigen, ist pgrep das Kommando der Wahl.
user$ pgrep kamix 3171
pgrep liefert zu jedem Prozessnamen die Prozessnummer, sofern ein entsprechender Prozess gerade aktiv ist und in der Prozessliste (ps) auftaucht.
26.4.13 pstree – Prozesshierarchie in Baumform ausgeben 

Mit pstree können Sie die aktuelle Prozesshierarchie in Baumform ausgeben lassen. OhneAngabe von Argumenten zeigt pstree alle Prozesse an, angefangen vom ersten Prozess init (PID = 1). Geben Sie hingegen eine PID oder einen Login-Namen an, so werden nur die Prozesse des Benutzers oder der Prozessnummer hierarchisch angezeigt.
26.4.14 renice – Priorität laufender Prozesse verändern 

Mit dem Kommando renice können Sie im Gegensatz zu nice die Priorität von bereits laufenden Prozessen verändern. Ansonsten gilt auch hier alles, was bereits zum Kommando nice gesagt wurde. Komfortabler können Sie die Priorität laufender Prozesse übrigens mit dem Kommando top verändern. Ein Tastendruck
fragt Sie nach der Prozessnummer und dem nice-Wert des Prozesses, dessen Priorität Sie verändern wollen.
26.4.15 sleep – Prozesse schlafen legen 

Mit sleep legen Sie einen Prozess für n Sekunden schlafen. Voreingestellt sind zwar Sekunden, aber über Optionen können Sie hierbei auch Minuten, Stunden oder gar Tage verwenden.
26.4.16 su – Ändern der Benutzerkennung 

Das Kommando su bedeutet SwitchUser. Durch die Angabe ohne Argumente wird hierbei gewöhnlich nach dem Passwort des Superusers gefragt. Unter Ubuntu erfordert das Nutzen des su-Befehls die Einrichtung und Freischaltung des Root-Accounts:
user$ sudo passwd Password: <Hauptbenutzerpasswort eingeben> Enter new UNIX password: <Rootpasswort definieren> Retype new UNIX password: <Rootpasswort bestätigen> passwd: password updated successfully user$ whoami marcus user$ su Password: root# whoami root root# exit user$ whoami marcus
Wie bereits mehrfach erwähnt wurde, sollte der Root-Account nach Möglichkeit deaktiviert bleiben. Sie können den Root-Account nach Freischaltung über sudo passwd -l root wieder zurücksetzen.
su startet immer eine neue Shell mit der neuen Benutzerkennung (UID) und Gruppenkennung (GID). Wie bei einem neuen Login wird nach einem Passwort gefragt. Geben Sie keinen Benutzernamen an, versucht su zu UID 0 zu wechseln – also zum Superuser. Sofern Sie »Superuser« sind, können Sie auch die Identität eines jeden Benutzers annehmen, ohne dessen Passwort zu kennen.
26.4.17 sudo – Programme als anderer Benutzer ausführen 

Mit sudo kann ein bestimmter Benutzer ein Kommando ausführen, zu dem er normalerweise nicht berechtigt ist (z. B. für administrative Aufgaben). Dazu legt Root gewöhnlich in der Datei /etc/sudoers folgenden Eintrag ab:
# Auszug aus /etc/sudoers john ALL=/usr/bin/kommando
Jetzt kann der User »john« das Kommando mit folgendem Aufruf starten:
user$ sudo /usr/bin/kommando Passwort: *********
Nachdem »john« sein Passwort eingegeben hat, wird das entsprechende Kommando ausgeführt, wozu er normalerweise ohne den Eintrag in /etc/sudoers nicht im Stande wäre. Der Eintrag wird gewöhnlich mit dem Editor vi über den Aufruf visudo vorgenommen.
Unter Ubuntu wurde der während der Installation angelegte Standardbenutzer automatisch der Gruppe admin zugeordnet, sodass er sämtliche administrativen Aufgaben »aus dem Stand« erledigen kann:
# Auszug aus /etc/sudoers / Ubuntu # User privilege specification root ALL=(ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL
Soll ein weiterer Benutzer auf Ihrem System über Root-Rechte und somit die Fähigkeit verfügen, via sudo Root-Kommandos auszuführen, so ordnen Sie diesen Benutzer am besten über addgroup der Gruppe admin zu.
26.4.18 time – Zeitmessung für Prozesse 

Mit time führen Sie das in der Kommandozeile angegebene Kommando bzw. Skript aus und bekommen die Zeit, die dafür benötigt wurde, zurückgeliefert. Diese Zeit wird aufgeteilt in die tatsächlich benötigte Zeit (real), die Rechenzeit im Usermodus (user) und diejenige im Kernel-Modus (sys).
user$ time find . -name *.tex ... real 0m0.657s user 0m0.104s sys 0m0.127s
| Eine einfache Stoppuhr |
|
Mit dem Befehl time read hat man eine einfache Stoppuhr, die einfach los läuft und mittels Enter (oder Return) beendet werden kann. |
26.4.19 top – Prozesse nach CPU-Auslastung anzeigen 

Mit top erhalten Sie eine Liste der gerade aktiven Prozesse angezeigt. Die Liste wird nach CPU-Belastung sortiert. Standardmäßig wird top alle fünf Sekunden aktualisiert; beendet wird top mit q. top kann aber noch mehr, als die Auslastung der einzelnen Prozesse anzuzeigen. Beispielsweise können Sie mit dem Tastendruck
(kill) einem bestimmten Prozess ein Signal senden oder mit
(renice) die Priorität eines laufenden Prozesses verändern. Ein Blick auf die man-Seite von top offenbart eine Vielzahl weiterer Möglichkeiten dieses auf den ersten Blick einfachen Kommandos.




Jetzt bestellen







