Ressourcen schonen

Mit ps (wie >>process status«) kann man sich eine Liste der gerade laufenden Prozesse anzeigen lassen. Das ist vor allem hilfreich, um herauszufinden, ob man irgendwo peinliche Fehler gemacht hat, die jetzt dazu führen, dass ein Prozess seit Stunden in derselben while-Schleife im Kreis fährt. Hilfreiche Optionen sind -A wie »alles anzeigen, auch die Prozesse anderer User« und -f wie für >>das volle Kommando anzeigen«.

In der von ps ausgegebenen Liste sind vor allem zwei Dinge wichtig: In der mit »START« oder »STIME« überschriebenen Spalte sieht man, seit wann ein Prozess läuft. Steht dort eine verdächtig lange zurückliegende Uhrzeit oder gar ein Datum, dann hängt der Prozess wahrscheinlich, und man kann ihn mit kill (siehe dort) abschießen. Dazu benötigt man seine >>process id<<, die in der Spalte »PID<< zu finden ist.

top

top steht für >>top CPU consumers«« und zeigt ähnliche Informationen an wie ps. Die Anzeige aktualisiert sich alle zwei Sekunden und sieht ungefähr so aus:

top - 15:28:45 up 478 days, 15:59,    1 user, load average: 0.61, 0.16, 0.08

Tasks: 181 total, 2 running, 179 sleeping, 0 stopped, 0 zombie Cpu(s):    O.O%us, 4.7%sy, 50.8%ni, 44.4%id, O.O%wa, O.O%hi, O.O%si, 0.1%st

Mem:    4190040k total, 2980332k used, 1209708k free,    345488k buffers

Swap: 4194296k total, 144912k used, 4049384k free, 2063132k cached

Hier ist vor allem load average von Interesse. Die drei Zahlen geben die durchschnittliche Prozessorauslastung in den letzten 1, 5 und 15 Minuten an. Was hier eine hohe und was eine niedrige Auslastung darstellt, hängt vom jeweiligen System ab, unter anderem von der Zahl der CPU-Kerne. Deshalb ist es sinnvoll, im Alltag hin und wieder top aufzurufen, damit man eine Vorstellung davon bekommt, was auf dem jeweiligen Rechner den Normalzustand darstellt. Ganz grob lässt sich sagen, dass eine Auslastung von 1 oder darunter optimal und alles unterhalb von 3 noch okay ist. Das gilt jedenfalls für Rechner mit einer einzigen CPU. Mit grep -c processor /proc/cpuinfo

findet man heraus, wie viele CPUs der Rechner hat. Sind es zwei, ist eine Auslastung von 2 oder darunter optimal, alles unterhalb von 6 ist akzeptabel, und so weiter.

kill

kill 1234

Damit gibt man die Anweisung, den Prozess mit der Nummer 1234 zu beenden. Manchmal hilft das nicht, dann muss man andere Saiten aufziehen: kill -9 1234

9 bedeutet »Keine Widerrede!« Weil dabei manchmal unordentliche Reste des Prozesses zurückbleiben, sollte man es aber erst einmal auf die höfliche Art versuchen.

du

Auf dem Seiver geht von einem Tag auf den anderen nichts mehr? Vielleicht haben Sie den Ihnen eingeräumten Speicherplatz, die »disk quota«, erschöpft. du ist kurz für >>disk usage« und sagt Ihnen, ob Ihre Daten sich zu breit gemacht haben. du - s h

verwendet die Optionen s für >>Summary<< und h für >>human-readable<<. Wenn Sie es als du -sh I in der obersten Verzeichnisebene starten, gibt das Ergebnis an, wie viel Plattenplatz insgesamt belegt ist, und zwar nicht in Form einer unbequem langen Zahl ohne Maßeinheit, sondern lesbar, also zum Beispiel 9.8G, wobei das G für Gigabyte steht. Jetzt kann man noch herausfinden, in welchem Verzeichnis sich die größten Platzfresser verbergen, zum Beispiel so: du -sm * I | sort -n

Die Option m gibt an, dass das Ergebnis in Megabyte angezeigt werden soll - das schönere »human-readable« funktioniert hier leider nicht, weil dann die folgende Sortierung versagt. Das -n sortiert numerisch, damit am Ende nicht »1, 10, 11, 2<< herauskommt, sondern » 1,2, 10, 11«.

Zusammenarbeit

python -m SimpleHTTPServer 8080

Startet einen kleinen Webserver auf Port 80801, der Dateien in dem Verzeichnis ausliefert, in dem Sie sich gerade befinden. Wenn Ihre IP-Adresse 192.168.1.11 i st, können andere auf Ihre Dateien unter http:/1192.168.1.11:8080/ zugreifen. Wenn Sie also schnell mal ein paar Textdateien, Urlaubsfotos oder dergleichen jemandem zugänglich machen wollen, reicht dieses Kommando aus. Mit seiner Hilfe können Sie auch beispielsweise auf einem Server anderen Personen temporären Zugriff auf Logfiles gewähren, ohne extra einen User-Account für sie anzulegen. Ähnlich wie bei »großen« Webservern wie Apache httpd wird, falls vorhanden, eine index.html-Datei als Einstiegsseite ausgegeben. Fehlt sie in dem per Python geteilten Verzeichnis, gibt der Server ein Dateilisting aus.

php -S 127.0.0.1 8080

Ähnlich wie das oben beschriebene Python-Kommando startet es einen Webserver, der Dateien per Web zugänglich macht. Dieser Webserver führt sogar PHP-Skripte aus.

Zeitsteuerung

cron

cron kann man sich vorstellen wie eine Zeitschaltuhr. Statt die Balkonpflanzen zu wässern oder die Heizung einzuschalten, startet es Skripte auf dem Server. Das ist vor allem dann ungemein nützlich, wenn man nicht selbst immer wieder an etwas denken müssen will, zum Beispiel ans Anlegen von Backups oder ans regelmäßige Löschen überflüssiger Dateien, damit der Server nicht überläuft. cron kommt auch zum Einsatz, wenn man bestimmte Vorgänge zeitlich entzerren möchte: Vielleicht braucht Ihr kleines Webtool Daten von anderswo, weil Sie z. B. Ihre letzten Twitter-Mitteilungen in einer Randspalte Ihrer Website anzeigen wollen. Wenn Sie bei jedem Seitenaufruf erst den fremden Server kontaktieren, dauert es erstens vermutlich zu lange für Ihre ungeduldigen Besucher, bis die Daten da sind. Zweitens belastet es den anderen Server stark und verärgert dessen Betreiber - jedenfalls dann, wenn Ihre Seite öfter als nur ein paarmal pro Tag aufgerufen wird. Und drittens ist es schlicht unnötig, denn eigentlich braucht man nur selten sekundenaktuelle Daten. In der Regel genügt es, hin und wieder nachzusehen, was sich geändert hat, und diese Daten dann lokal zu speichern und weiterzuverwenden.

Wie beim Programmieren einer Zeitschaltuhr muss man auch hier mit kleinen verwirrenden Schaltern hantieren, aber es gibt an vielen Stellen im Netz ausführlich erklärte Beispiele. Jeder Auftrag steht in einer Datei namens crontab in einer eigenen Zeile, die etwa so aussieht:

OS 1 * * * nice -n 19 php /home/bernd/backup.php >> /home/bernd/cronjob.log 2>&1 Die ersten fünf Positionen, von denen hier drei mit Sternchen belegt sind, geben die Abstände an, in denen etwas passieren soll. Die erste Position bezeichnet die Minuten, die zweite die Stunden, dann folgen Tag, Monat und Wochentag. Die Sternchen bedeuten »immer«. Hier wird also an jedem Tag des Monats um fünf Minuten nach ein Uhr nachts ein PHP-Skript namens backup. php aufgerufen. Das nice -n 19 bedeutet »Liebes Skript, bitte sei so nett und strapazier den Server dabei so wenig wie möglich. Falls er gleichzeitig noch 18 andere Dinge zu tun hat, haben die Vorrang.« Und wenn das Backup-Skript etwas mitzuteilen hat, etwa Erfolgs- oder Fehlermeldungen, dann sollen die ans Ende einer Datei namens cronjob.log angehängt werden. Durch das 2>&1 werden sowohl Fehlermeldungen als auch Ausgaben des Skripts in die Logdatei geschrieben.

So weit, so überschaubar. Das Problem besteht hier vor allem darin, dass man die crontab-Datei nicht einfach lokal im freundlichen Editor seiner Wahl ändern kann, denn sie residiert in den Eingeweiden des Systems. Sie müssen daher cron über Änderungen explizit informieren. Am einfachsten geht das, wenn Sie den Inhalt von crontab zunächst in eine temporäre Datei speichern:

crontab -1 > cronjobs.txt

Diese Datei können sie dann beliebig auf dem Server oder per FTP-Client lokal bearbeiten. Sie informieren cron über die neuen Cronjobs mit crontab cronjobs. txt.

Wenn Sie jetzt crontab -1 eingeben, sollten die neuen Jobs ausgegeben werden.

Editieren auf dem Server

Üblicherweise können Sie unter Unix auf ein bis mehrere Editoren zugreifen. Welche das sind, hängt von der Distribution ab. Wenn Sie gar nicht wissen, was es gibt, probieren Sie which vi oder which nano.

vi

Ein Editor, an den man sich gewöhnen muss. Sie sollten ihn erst benutzen, nachdem Sie wenigstens eine grundlegende Einführung gelesen haben. Für Uneingeweihte ist vi ganz einfach: Er hat nur zwei Modi, im einen piept er und im anderen macht er den Text kaputt. Hat man einmal verstanden, dass man mit <ESC> und : arbeiten muss, kann man tatsächlich produktiv Texte editieren. vim ist eine verbesserte Neufassung. Bei vim-adventures.com kann man in einem Spiel den Umgang mit vim lernen.

nano

Ein einsteigerfreundlicherer Editor, der immerhin die verfügbaren Kommandos unten in zwei Zeilen anzeigt. Das wichtigste Kommando ist Ctrl-G (oder Strg-G), mit dem man die Hilfe aufruft.

Internet

curl

Das Programm curl ist ein kleines Schweizer Taschenmesser für den Zugriff auf Webserver. Man kann damit ganz banal eine Webseite auf die lokale Platte laden, um sie in einem Texteditor zu öffnen. Davon ausgehend, kann man mit ihm auch beispielsweise zeitgesteuert jeden Tag eine Datei mit Börsenkursen herunterladen und dann ihren Inhalt analysieren und in eine Datenbank schreiben.

Interessanter ist curl für Webentwickler, weil man es für gezielte HTTP-Anfragen einsetzen kann. Haben Sie beispielsweise für eine AJAX-Site einen Webservice geschrieben, der seine Daten als JSON übergibt, und wollen diesen Webser’ice testen, dann können Sie curl viel besser als einen normalen Browser einsetzen. Öffnen Sie die URL des Webservice mit einem Browser, dann sagt dieser dem Webservice, dass er HTML, XML und Plaintext als Formate akzeptiert, aber nicht JSON. Ihr Webservice und der Browser finden also kein gemeinsames Format und Sie sehen nur eine traurige Fehlerseite.

curl -H "Accept: application/json" http://example.com/webservice -o webservice. json hingegen ruft die URL auf und verlangt den Inhalt als JSON - also genau das, was Ihr Webservice ausliefert. Die Datei webservice.json (per Default schreibt curl nach stdout, -o gibt eine Datei als Ziel an) können Sie dann beliebig in einem Texteditor öffnen oder per grep durchsuchen.

curl kann auch Uploads simulieren, mit dem Flag -X können Sie beispielsweise POST als HTTP-Verb einstellen (der Default ist GET). Wenn Sie das Programm mit dem Flag -i aufrufen, gibt es Ihnen die HTTP-Header aus, die der Webserver sendet. Mit -v können Sie die gesamte Kommunikation zwischen curl und dem Webserver mitlesen, vom Aufbau der TCP-Connection bis hin zum Abbau, nachdem der Server geantwortet hat. Sie werden das nicht häufig brauchen, aber wenn Sie einmal mit einem hartnäckigen Problem in der Kommunikation mit einem Server kämpfen, dann werden Sie die Hilfe von curl schätzen lernen.

Zwar gibt es auch Browsererweiterungen, die es Ihnen erlauben, den Request-Header beliebig zu verändern, aber die curl-Zeile können Sie einfach als Test mit dem Code Ihres Webservice in Ihr Versionskontrollsystem mit einchecken. Sie können curl auch auf einem Server laufen lassen, auf dem Sie kein grafisches Benutzerinterface zur Verfügung haben, und können es aus einem Skript aufrufen. Der letzte Punkt ist für Programmierer besonders interessant, weil man so größere Codemengen möglicherweise durch einen curl-Aufruf ersetzen kann. libcurl ist eine Library, die Funktionen des Programms auch direkt für Programme zur Verfügung stellt, beispielsweise für PHP.

ssh

ssh oder >>Secure Shell« ist eine Sammlung von Tools, um verschlüsselte und daher sichere Verbindungen von einem Rechner zu einem anderen aufzubauen. Hat Ihr Server die Domain example. com, dann können Sie per ssh username@example. com aus dem Terminal Ihres lokalen Rechners eine Verbindung zum Server aufbauen. username ist dabei Ihr Benutzername auf dem Server.

Will man beispielsweise auf einem Linux-Server arbeiten, dann wird man sich nicht-wie unter Windows - per Remote Desktop einloggen, sondern überwiegend auf der Kommandozeile des Servers arbeiten. ssh verschlüsselt die übertragenen Daten zumindest so zuverlässig, dass Sie sich auch aus einem öffentlichen WLAN auf Ihrem Server einloggen können, ohne Sorge haben zu müssen, dass andere Nutzer desselben WLANs Ihr Passwort mitlesen. Sie sollten sich auf keinen Fall per WLAN irgendwo unverschlüsselt einloggen, denn es ist für Dritte leicht möglich, den Funkverkehr mitzuschneiden und nach Passwörtern durchzukämmen.

scP

Wenn Sie bisher mit FTP gearbeitet haben, sollten Sie unbedingt auf scp oder sftp umsteigen, denn FTP ist nicht verschlüsselt: Wenn Sie an einem öffentlichen WLAN sitzen, kann mit wenig Aufwand jeder mitlesen. Dieser Teil des ssh-Pakets erlaubt verschlüsselte Dateiübertragungen von einem Rechner über das Netzwerk auf einen anderen. Sie können damit Dateien auf einen Server hoch- oder von dort herunterladen, ohne dass irgendjemand (mit Ausnahme der Geheimdienste) mitlesen könnte. Hochladen geht so:

scp datei.txt username@192.l68.1.1l:/data/

Die Datei datei. txt im aktuellen Verzeichnis wird auf den Rechner mit der IP-Num-mer 192.168.1.11 hochgeladen, und zwar in das Verzeichnis /data/. Herunterladen geht so:

scp username@192.l68.1.11:/data/datei.txt ./

Muss ich mir das alles merken?

Nein. Eine der schönen und sehr nützlichen Eigenschaften der Unix-Shell ist, dass sie ein Log der Kommandos führt, die Sie eingetippt haben. Dieses Log erspart es Ihnen, immer wieder die gleichen Dinge eintippen zu müssen. Um mit diesem Log zu arbeiten und auf die Einträge zuzugreifen, gibt es verschiedene Wege:

Pfeiltasten oben/unten

Mit der Pfeiltaste nach oben wird das letzte Kommando wieder in der Shell eingeblendet. Wenn Sie dann die Return-Taste drücken, wird es wieder ausgeführt. Drücken Sie wiederholt die Pfeiltaste nach oben, kommt das vorletzte, das vorvorletzte und so weiter. Um wieder zurück zu den neueren Kommandos zu kommen, können Sie die Pfeiltaste nach unten drücken. Drücken Sie sie häufig genug, dann ist die Eingabezeile wieder leer.

STRG-R

Um gezielt nach einem Kommando zu suchen, drücken sie die CTRL/STRG-Taste und die Taste R. Dann können Sie einen Teil des Kommandos eingeben, nach dem gesucht werden soll, und die Shell blendet das erste gefundene Kommando ein. Hatten Sie sich beispielsweise mit

ssh -1 johannes bayeux.datensalat.net

auf einem Server eingeloggt, dann können sie diese Zeile durch STRG + R und das Eintippen von »bayeux« wieder hervorzaubern. Vorsicht: Wenn Sie die Eingabetaste drücken, wird das gefundene Kommando sofort ausgeführt.

history

history ist ein Kommando, das Ihnen das History-Log ausgibt. Sie sehen dann die letzten paar 100 Kommandos, die Sie eingegeben haben. Vor dem Kommando steht jeweils seine laufende Nummer im History-Log, also beispielsweise so etwas:

14    cd /usr/local/tomcat/logs/

15    tail -n 100 -f catalina.out

16    tail -f tomcat.log

Wenn Sie ein Kommando wiederholen möchten, können Sie ein Ausrufezeichen gefolgt von der Nummer eingeben, also beispielsweise ! 15 für das erste tail-Kom-mando. ! ! ist das letzte Kommando und entspricht daher Pfeiltaste nach oben. Im Gegensatz zu STRG + R und den Pfeiltasten setzt ! zahl das gefundene Kommando nicht in der Eingabezeile ein. Wenn Sie die Return-Taste drücken, wird es dennoch ausgeführt.

Not the whole Shebang!

Wir sind hier nicht auf die Feinheiten der bash-Programmierung eingegangen, sondern haben nur ein paar Tipps gegeben, die das Überleben auf der Kommandozeile ermöglichet und den Programmiereralltag generell vereinfachen helfen. Vermutlich handelt es sich um das im Internet am allerbesten dokumentierte und erklärte Themenfeld überhaupt, schließlich sind diese Tools die Ursuppe, aus der das Internet selbst herausgekrochen kam. Sie werden also keine Probleme haben, Hilfe in Foren zu finden oder die Parameter der einzelnen Werkzeuge im Netz nachzuschlagen.

Falls Sie sich aus beruflichen Gründen eingehender mit der Kommandozeile beschäftigen müssen oder das Kapitel Ihre Neugier geweckt hat, könnten Sie sich auf www.command-Hnefu.com umsehen. Die Site bietet viele kleine Beispiele für nützliche Anwendungen von Kommandozeilenbefehlen, die Sie durchsuchen oder nach Kriterien wie »als besonders nützlich bewertet« durchstöbern können. Netterweise steht immer eine kurze Erläuterung bei diesen Snippets. »Unix Power Tools«2 ist trotz des nach einer Profizielgruppe klingenden Titels ein sehr einsteigerfreundliches Buch mit ausführlichen Erklärungen aller Kommandos.

4

1

Normalerweise laufen Webserver auf Port 80, aber für schnelles Sharing von Dateien weicht man üblicherweise auf 8080 aus, weil nur Prozesse mit Administrator-Rechten auf die Portnummern kleiner 1000 zugreifen dürfen.

2

»Unix Power Tools« erschien ursprünglich 1997 bei O'Reilly und ist seitdem mehrmals überarbeitet worden; achten Sie darauf. die aktuellste Ausgabe zu bekommen.