24.4 Programm- und Prozessverwaltung
24.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
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 einem 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:
at -l
Wollen Sie den Status des Auftrags mit der Nummer 33 anzeigen lassen, geben Sie at -l 33 ein. Soll dieser Auftrag gelöscht werden, so kann die Option -d verwendet werden:
at -d 33
24.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 oder Skript zu einer Zeit ausführen lassen will, in der die Systemlast definitiv niedrig ist und dies nicht nur zu vermuten ist.
Auch bei abgemeldetem User
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.
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.
24.4.3 bg – einen Prozess im Hintergrund fortsetzen
Mit dem Kommando bg können Sie einen (zum Beispiel mit + ) angehaltenen Prozess im Hintergrund fortsetzen.
24.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 einem Terminkalender(crontab) nach und führt gegebenenfalls darin enthaltene Kommandos aus.
24.4.5 fg – Prozesse im Vordergrund fortsetzen
Mit dem Kommando fg können Sie einen (zum Beispiel mit + ) angehaltenen Prozess im Vordergrund fortsetzen.
24.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.
24.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 geschickt. 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.
24.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 oder 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 (zum Beispiel 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.
sleep 60 &
[1] 5286
killall sleep
[1]+ Beendet sleep 60
24.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:
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 Priorität (10) gestartet. Dies stellt eine gängige Verwendung von nice dar.
24.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.
24.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 im 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:
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]
...
Mittlerweile enthält 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«:
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.
24.4.12 pgrep – Prozesse über ihren Namen finden
Sofern Sie die Prozessnummer eines Prozessnamens benötigen, nutzen Sie pgrep:
pgrep kamix
3171
pgrep liefert zu jedem Prozessnamen die Prozessnummer, sofern ein entsprechender Prozess gerade aktiv ist und in der Prozessliste (ps) auftaucht.
24.4.13 pstree – Prozesshierarchie in Baumform ausgeben
Mit pstree können Sie die aktuelle Prozesshierarchie in Baumform ausgeben lassen. Ohne Angabe von Argumenten zeigt Ihnen 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.
24.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 auf fragt Sie nach der Prozessnummer und dem nice-Wert des Prozesses, dessen Priorität Sie verändern wollen.
24.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 Tage verwenden.
24.4.16 su – Ändern der Benutzerkennung
Das Kommando su bedeutet switch user (»Benutzer wechseln«). 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:
sudo passwd
Password: <Hauptbenutzerpasswort eingeben>
Enter new UNIX password: <Rootpasswort definieren>
Retype new UNIX password: <Rootpasswort bestätigen>
passwd: password updated successfully
whoami
marcus
su
Password:
root# whoami
root
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 einer 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.
24.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 (zum Beispiel 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:
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 imstande 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, so dass 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
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.
24.4.18 time – Zeitmessung für Prozesse
Mit time führen Sie das in der Kommandozeile angegebene Kommando oder 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).
time find . -name *.tex
...
real 0m0.657s
user 0m0.104s
sys 0m0.127s
Tipp 305: Eine einfache Stoppuhr |
Mit dem Befehl time read haben Sie eine schlichte Stoppuhr, die einfach losläuft und mittels (oder ) beendet werden kann. |
24.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.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.