Gerade wenn es um die Zuständigkeiten für IT-Systeme in Betrieben geht, die sich selbst zu den KMU-Firmen rechnen, bekommen die Verantwortlichen schnell die Aufgabe, komplett alle Server-Systeme zu überwachen und zu betreuen. Und so sieht sich dann mancher gestandene Windows-Administrator plötzlich mit der Aufgabe betreut, auch einen Linux-Server unter seine Fittiche zu nehmen.
Das ist in der Regel kein Problem, da diese Server normalerweise sehr stabil und zuverlässig arbeiten. Trotzdem müssen die Systembetreuer sicher von Zeit zu Zeit einige administrative Aufgaben auf diesen Systemen verrichten und dann ist es gut, wenn auch Windows-Administratoren wissen, wie sie mit den Linux-Systemen umgehen können. Wir haben einige grundlegende Fakten und vor allen Dingen einige grundlegende Kommandos für Linux-Systeme herausgesucht und sie in den Kontext zu den entsprechenden Windows-Befehlen und -Gegebenheiten gestellt.
Fakt 1: Distributionen, Unterschiede, Gemeinsamkeiten
Wer ein Windows-System kauft, der bekommt immer das gleiche einheitliche Betriebssystem geliefert, sieht man einmal von so radikalen Änderungen ab, wie sie Microsoft den Anwendern mit Windows 8 zumutete. Ein entscheidender Faktor ist dabei die Tatsache, dass er nur einen Hersteller gibt, der das Windows-Betriebssystem entwickelt und auf den Markt bringt. Eine kurze Suche im Internet mit dem Stichwort "Linux" zeigt aber bereits, dass ein "Produkt Linux" so nicht existiert:
Sowohl bei den Server- als auch bei den Desktop-Versionen der Linux-Systeme bieten Hersteller wie Red Hat oder Suse sowohl freie als auch kommerzielle Ausprägungen ihres eigenen Linux-Systems an. Eine ganze Reihe anderer Organisationen wie Debian oder die darauf aufsetzende Ubuntu-Distribution sind nur zwei Beispiele aus der großen Auswahl von weiteren Ausprägungen des Linux-Systems. Alle nutzen ähnliche oder sogar die gleichen Open-Source-Programme, aber jeder Anbieter versucht seine Distribution mit eigenen Installationsprogrammen, verschiedensten Desktop- und Oberflächenalternativen sowie ergänzten Programmen von Drittherstellern zu ergänzen. So finden sich dann auch bei den Linux-Servern ganz unterschiedliche Ausprägungen, von Systemen mit einer ausgereiften grafischen Oberfläche bis hin zu rein über die Kommandozeile gesteuerten Versionen.
Was aber die meisten Linux-Systeme (und auch viele alte Unix-Systeme) eint, ist die Bedienung über die Kommandozeile mit Hilfe einer Shell. Bei den meisten Linux-Systemen wird es dabei um die "Bash", die "Bourne-again-shell", handeln. Das ist eine freie Software, die als Teil des GNU-Projekts zur Verfügung steht. Windows-Administratoren, die mit dieser Shell und den entsprechenden Linux-Kommandos umgehen können, werden sich auf den meisten Linux-System unabhängig von der installierten Oberfläche gut zurechtfinden. Windows-Profis, die bis jetzt noch keine Gelegenheit oder Lust hatten, sich trotz der voranschreitenden Verbreitung der PowerShell mit der Kommandozeile zu befassen, haben hier nun also die Gelegenheit dazu: Denn trotz (oder gerade wegen) der vielen unterschiedlichen Desktops und Oberfläche, die auf den unterschiedlichsten Linux-Derivaten bereitstehen, bleibt die Kommandozeile das Mittel der Wahl, wenn es um die Verwaltung dieser Systeme geht.
Tipp: Wenn Ihr Linux-System mit einer grafischen Oberfläche startet und kein Icon für Terminal mit der Shell auf dem Desktop zu finden ist, so nutzen Sie die Tastenkombination Alt+F2 und geben dann den Suchbegriff "Terminal" oder auch "xterm" ein.
Fakt 2: Von Nutzern und "Super-Nutzern"
Linux ist schon immer - genau wie seine "Urväter", die verschiedenen Unix-Derivate - ein Multiuser-System gewesen. Weshalb auch das Konzept der Nutzer und Gruppen seit jeher fest im System verankert ist. Unter allen Nutzern sticht aber der Superuser oder "root" besonders hervor: Er besitzt uneingeschränkte Rechte auf dem System und kann es dadurch durch ein unabsichtlich oder nachlässig abgesetztes Kommando schnell beschädigen oder gar unbrauchbar machen. Zu den Privilegien eines Nutzers mit Root-Rechten gehört es, dass:
bestimmte Kommandos wie beispielsweise zum Hinzufügen neuer Nutzer, das Partitionieren von Festplatten oder eine Veränderung der Systemkonfiguration nur mit diesen Rechten ausgeführt werden können.
die normalen Schreib-, Lese- und Ausführungsrechte für Dateien, wie sie im Dateisystem gesetzt sind, für einen Nutzer mit diesen Rechten nicht gelten: Er kann beliebig mit den Dateien verfahren (und damit auch entsprechenden Schaden anrichten).
einige Sicherheitsmechanismen, die in Standardkommandos integriert sind und Nutzer vor Fehlbedienungen und Flüchtigkeitsfehler bewahren, für Nutzer mit diesen Rechten nicht gelten: So kann ein Superuser beispielsweise das Passwort eines Nutzers ändern, ohne dass er dazu das alte Passwort eingeben muss.
Schon diese wenigen Besonderheiten des Root-Nutzers machen deutlich, dass es wenig sinnvoll ist, im täglichen Betrieb mit diesen Rechten zu arbeiten. So sollten auch Administratoren in der Regel mit den normalen Nutzerrechten an einem Linux-System arbeiten und nur dann zu den Root-Rechten wechseln, wenn eine spezifische Aufgabe dies erfordert. Dazu stehen auf den Linux-System zwei Kommandos bereit: "su" (substitude user) und "sudo" (Super User Do).
Das "su"-Kommando war so schon auf den Unix-Systemen implementiert und verlangt nach dem Start vom Nutzer die Eingabe des Root-Passworts. Danach arbeitet er weiter uneingeschränkt mit diesen Rechten, bis er sich wieder beispielsweise mit dem Kommando "exit" von diesem Account abmeldet. Da das leicht vergessen werden und zu genannten Problemen führen kann, ist es eindeutig besser, dass auf den Linux-Systeme vorhandene Kommando "sudo" zu verwenden. Der Nutzer loggt sich dabei mit seinem eigenen Passwort ein und startet dann einen "sudo"-Befehl. Dabei wird er auf einigen Systemen dazu aufgefordert sein Passwort einzugeben, und kann dann so einen Befehl mit Root-Rechten ausführen. Administratoren können im System konfigurieren, welche Befehle mit "sudo" ausgeführt werden dürfen und welche Nutzer den Befehl einsetzen dürfen. Standardmäßig sind dies die Nutzer der Gruppe "wheel".
Die Verwendung des "sudo"-Kommandos ist grundsätzlich der bessere Weg, wenn es darum geht, auf einem Linux-System Kommandos auszuführen, bei denen die Rechte eines Administrators - des Superusers - benötigt werden.
Fakt 3: Dateisystem und Kommandos
Windows-Nutzer fühlen sich in der Regel im Dateisystem eines Linux-Rechners sofort daheim: Es ist ähnlich hierarchisch aufgebaut, wie es auch auf den Windows-Systemen der Fall ist und unterteilt sich grundsätzlich in Dateien und Verzeichnisse. Das Stammverzeichnis eines Rechners, das Root-Directory, wird mit dem Zeichen "/", das auch als Trennzeichen zwischen den Verzeichnissen dient. Damit kann der Pfad zum Standardverzeichnis eines Nutzers dann so aussehen:
/home/Nutzer
Wichtiger Unterschied zu den Windows-Systemen: Das Konzept der Laufwerksbuchstaben gibt es unter Unix/Linux nicht. Wer auf seinem Linux-System eine grafische Oberfläche betreibt, findet dort aber auch zumeist einen Dateimanager, der ihm das Dateisystem in der entsprechenden Form darstellt. Auf der Kommandozeile muss er hingegen die entsprechenden Kommandos einsetzen. Zum Anzeigen der Dateien ist dies der Befehl "ls", der im Prinzip dem bekannten "dir"-Kommando der Windows-Systeme entspricht, aber weitaus vielfältigere Möglichkeiten birgt. Ein einfacher Aufruf von "ls" zeigt nämlich einfach nur die Dateien an, die im aktuellen Verzeichnis zu finden sind - ohne weitere Informationen. Wer wirklich alle Dateien eines Verzeichnisses sehen will, muss den Befehl mit entsprechenden Parametern starten. Ein Beispiel dafür ist der folgende Aufruf:
ls -la
So zeigt der Befehl alle (Parameter "a" für "all") Dateien und Verzeichnis in ihrer ausführlichen Form (Parameter "l" für "long") an. Dieser Befehl zeigt auch gleich die grundsätzlich Form eines Kommandoaufrufs: Alle Linux-Shells und damit auch die "bash" unterscheiden zwischen Groß- und Kleinschreibung und Linux-Kommandos werden immer klein geschrieben. Parameter werden durch ein Leerzeichen vom eigentlichen Kommando abgesetzt und durch einen, manchmal auch zwei Striche eingeleitet. Dabei können mehrere Parameter zusammen geschrieben werden wie im Beispiel, aber auch in der folgenden Form übergeben werden:
ls -l -a
Fakt 4: Hilfe ist fast immer da
Wie bekommt der Administrator heraus, welche Parameter und Optionen ein Befehl kennt? Die Linux-Systeme besitzen ein integriertes Hilfesystem, das direkt von der Kommandozeile aus aufgerufen werden kann. Dazu kommt der Befehl "man" (für "Manual") zum Einsatz. Der Aufruf:
man ls
gibt dann beispielsweise alle Information zum "ls"-Befehl aus. Dabei zeigt "man" immer eine Bildschirmseite an. Mit der Leertaste kann der Nutzer eine Seite und mit der Return-Taste dann eine Zeile weiterblättern. Durch Eingabe von "q" für "Quit" wird die Anzeige abgebrochen. Der "man"-Befehl ist besonders dann nützlich, wenn es der Administrator mit einer Linux-Distribution zu tun hat, die er bisher noch nicht kannte, da er mit seiner Hilfe schnell feststellen kann, ob der jeweilige Befehl die benötigten Parameter auf diesem System zur Verfügung stellt.
Fakt 5:Dateizugriffe und Berechtigungen
Wir haben bereits den "ls"-Befehl vorgestellt. Wer einen Aufruf der Form "ls -la" startet, sieht eine Anzeige, in der jede Menge Buchstaben zu finden sind. Das kann dann so aussehen:
drwx------ 19 nutzer nutzer 4096 16. Okt 10:48 .
drwxr-xr-x 19 root root 4096 16. Okt 10:48 ..
-rw-r--r-- 1 nutzer nutzer 3 21. Okt testo.txt
…
…
Die Buchstaben am Anfang jeder Zeile stehen für die Zugriffsrechte der jeweiligen Datei oder des Verzeichnisses. Steht ein "d" am Anfang, so handelt es sich hier um ein Verzeichnis. Am Ende der Zeile ist der Dateiname zu finden. An dieser Stelle ist gleich wieder eine Analogie zu Windows zu finden: Auch Linux bezeichnet das aktuelle Verzeichnis mit einem Punkt, während das im Verzeichnisbaum darüber liegende mit zwei Punkten gekennzeichnet wird. Die Zugriffsrechte werden jeweils für drei unterschiedliche Gruppen mit jeweils drei Buchstaben angezeigt:
Besitzer Gruppe Andere
rwx r-x r--
Dabei steht "r" für die Leserechte, "w" für die Schreibrechte und "x" für die Rechte zum Ausführen einer Datei. Ein Konzept der Dateiendungen, die den Typ der Datei entscheiden, wie es bei Windows zu finden ist, gibt es hier nicht: Eine Datei kann ausgeführt werden, wenn das "x"-Bit gesetzt ist.
Bei Verzeichnissen steht diese Kennzeichnung für das Recht, in dieses Verzeichnis hinein zu wechseln. Diesen Zugriffsberechtigungen werden vom System Zahlenwerten zugeordnet, so ist r = 4, w = 2 und x = 1. So besitzt eine Datei mit den Zugriffsrechten rw-r--r-- den Wert 644. Dieser Wert kann vom Nutzer unter anderem dazu eingesetzt werden, die Zugriffsberechtigungen auf seine Dateien zu ändern. Dazu steht der Befehl "chmod" bereit. Der Aufruf von:
chmod 444 meintext.txt
ändert die Zugriffsberechtigungen dieser Datei auf nur lesen für alle Anwender, einschließlich des Besitzer der Datei, der sich so beispielsweise auch gut vor dem unbeabsichtigtem Löschen seiner Dateien schützen kann.
Fakt 6: Weitere Kommandos und Ähnlichkeiten
Ähnelt der "ls"-Befehl dem "dir"-Kommando der Windows-Systeme, so gibt es weitere Kommandos mit entsprechenden Analogien, die teilweise sogar direkt den bekannten Windows-Kommandos entsprechen. Möchte ein Nutzer das Verzeichnis wechseln, so kann er auch unter Linux dazu das Kommando "cd" für "change directory" verwenden, muss es allerdings immer klein schreiben. Ein weiterer kleiner Unterschied: Während es auf der Windows-Kommandozeile möglich ist, durch den Aufruf
cd..
in das darüber liegende Verzeichnis zu wechseln, wird ein Linux-System diese Eingabe mit "Befehl nicht gefunden" quittieren. Es ist unbedingt notwendig, ein Leerzeichen zwischen dem Befehl und dem mitgegebenen Verzeichnis zu lassen, dann funktioniert der Befehl auch in einer Linux-Shell:
cd ..
Zum Anlegen eines neuen Verzeichnisses kommt unter Linux der Befehl "mkdir" zum Einsatz, während das Löschen eines Verzeichnisses mit "rmdir" vonstattengeht.
Fakt 7: Kopieren, verschieben und mehr
Wer Dateien auf der Windows-Kommandozeile kopieren will, greift dabei zum "COPY"-Befehl. Das Linux-Äquivalent trägt die Bezeichnung "cp" und arbeitet grundsätzlich in der zu erwartenden Weise:
cp Quelle Ziel
Wie bei Linux-Befehlen üblich, können Nutzer auch das Verhalten dieses Befehls durch entsprechende Schalter und Argumente verändern. So benötigen Linux-Nutzer beispielsweise keinen speziellen "XCOPY"-Befehl, um auch Verzeichnisse zu kopieren. Dies erledigt der "cp"-Befehl, indem er mit dem Schalter "-r" (recursive) aufgerufen wird. Der nachfolgende Aufruf kopiert nicht nur alle Dateien im Quellverzeichnis, sondern durchläuft rekursiv alle Unterverzeichnisse und kopiert sie entsprechend:
cp - r Quelle Ziel
Soll eine Datei nicht kopiert sondern verschoben werden, so kann der Nutzer dazu den "mv"-Befehl verwenden:
mv Quelle Ziel
Handelt es sich beim Ziel nicht um ein Verzeichnis, sondern einfach um einen anderen Dateinamen, so arbeitet der "mv"-Befehl unter Linux, wie es die Nutzer vom Windows-Befehl "ren" kennen: die Datei wird unter dem neuen Namen im gleichen Verzeichnis abgespeichert - also umbenannt.
Fakt 8: Löschen kann schnell gefährlich sein
Das Löschen von Dateien wird auf den Linux-Systemen mit dem "rm"-Befehl durchgeführt. Dieser Befehl ist mit größter Vorsicht zu verwenden, denn wie es bei vielen Linux-Befehlen üblich ist, fragt dieser Befehl nur in den seltensten Fällen nach, ob er wirklich löschen soll und die Dateien verschwinden auch nicht in einem Papierkorb.
Besonders gefährlich sind dabei auf Linux-Systemen Aufrufe wie:
rm *
Ähnlich wie unter Windows steht der Platzhalter "*" hier für alle oder keine Zeichen, so dass wirklich radikal gelöscht wird. Kommt der Befehl in der Variante rm *.* zum Einsatz, so überspringt der Befehl wenigstens die Dateien, deren Namen keinen Punkt beinhaltet. Vorsichtige Nutzer verwenden deshalb hier lieber die Form:
rm -i *
wobei der "rm"-Befehl durch den Schalter "-i" (für interactive) vor jeder Datei nachfragt, ob er sich löschen will. Wer aber unbedingt radikal löschen möchte, kann das in der folgenden Art tun:
rm -f *
denn in dieser Form gibt der Befehl keine Meldungen mehr und ignoriert auch nicht existierende Dateien und Argumente. Will der Nutzer auch die Unterverzeichnisse mit löschen, so kann er dann zum Beispiel den Aufruf:
rm -r *
dazu einsetzen. Die verheerende Wirkung eines Befehls der Form:
rm -rf *
der mit den Rechten eines Administrator im "/"-Verzeichnis abgesetzt wurde, kann sich wohl jeder Nutzer vorstellen: Er kann auf diese Weise im Zweifelsfall ein komplettes Linux-System von der Platte löschen.
Tipp: Die meisten Linux-Befehl, bei denen es darum geht Dateien zu verarbeiten, besitzen die Möglichkeit mit Hilfe des Arguments "-i" interaktiv zu arbeiten oder wenigstens mit Hilfe von "-v" (für verbose) genau anzuzeigen, was sie tun. Das kann gerade beim umfangreichen Verschiebe- und Löschaktionen sehr nützlich sein.
Fakt 9: Was auf dem System läuft
Für Systemverwalter ist es wichtig zu wissen, was auf dem Linux-System läuft. Welche Prozesse sind aktiv, wer hat sie gestartet und welcher Nutzer hat einen Prozess gestartet beziehungsweise ist vielleicht noch mit einem Prozess auf dem System aktiv? Auf all diese Fragen gibt der "ps"-Befehl erschöpfend Auskunft. Allerdings ist dieser Befehl während der Unix-Zeit in unterschiedlichen Ausprägungen implementiert worden, so können fast alle Versionen des "ps"-Kommandos sowohl mit den Standard-Unix-Optionen (mit einem Strich übergeben) und den BSD-Optionen (können auch ohne Strich übergeben werden) als auch den GNU-"long options" (werden mit zwei Strichen "-- " übergeben) umgehen. Deshalb ist es für einen Administrator auf einem unbekannten System zunächst einmal sinnvoll, sich mittels "man ps" über die Implementierung auf diesem Linux-Derivat zu informieren.
Wer von einer aktiven Shell einfach das Kommando "ps" aufruft, wird in der Regel nur zwei Prozesse zu sehen bekommen: Dabei handelt es sich dann um die Shell und das "ps"-Kommando. Standardmäßig zeigt ps alle die Prozesse an, die die gleiche effektive User-ID wie der aktuelle Nutzer der Shell besitzen. Will ein Anwender alle auf dem System aktiven Prozesse sehen, so kann er einen der folgenden Aufrufe dazu einsetzen:
ps -ef
ps aux
Beide Arten des Aufrufs zeigen alle Prozesse an, allerdings ist die Darstellung etwas unterschiedlich und der zweite Aufruf im BSD-Stil zeigt etwas mehr Informationen an. Wer seine Anzeige etwas mehr in der Form eines "Prozess-Baumes" dargestellt haben möchte, bei dem die von einem Prozess wiederum gestarteten Prozesse etwas eingerückt dargestellt werden, sollte den folgende Aufruf versuchen:
ps -ejH
Fakt 10: Prozesse finden und beenden
Einer der Gründe, warum sich ein Administrator eine Übersicht über die auf dem System aktiven Prozesse verschaffen möchte, kann darin liegen, dass es ein Prozess oder ein Systemdienst nicht mehr richtig funktioniert oder sich in einer Endlosschleife befindet und somit den Prozessraum und auch den Hauptspeicher unnötig belastet. Es gilt also den entsprechende Prozess beziehungsweise das Programm zu finden und es aus dem System zu entfernen. Wenn der Administrator weiß, um welches Programm es sich handelt so kann er das Linux-Programm "grep" im Zusammenhang mit dem sogenannten Pipe-Mechanismus der Linux-System einsetzen, bei dem die Ausgabe des einen Programmes direkt zu Eingabe des nächsten wird und dort dann auch verarbeitet wird. So listet die folgende Kombination von Befehlen zunächst alle Prozesse auf dem System auf, zeigt sie aber nicht an, sondern leitet sie an das "grep"-Kommando weiter, das diese Liste nach dem String "http" durchsucht und das Ergebnis ausgibt:
ps -aux | grep http
So bekommt der Administrator dann auch die Prozess-ID (PID) des gesuchten Programms angezeigt. Mit dieser PID kann er nun den Prozess direkt abbrechen, indem er ein Signal an ihn sendet. Dazu steht ihm das Kommando mit dem vielsagenden Name "kill" zur Verfügung. Die einfachste Form des Aufrufs besteht einfach darin, das Kommando mit der Prozess-ID aufzurufen:
kill 502
Da keine weiteren Parameter angegeben wurden, wird das System dem Prozess mit der ID 502 das SIGTERM-Signal schicken. Das veranlasst allerdings nicht alle Prozesse zum Abbruch und erweist sich gerade bei Prozessen, die sich aus irgendeinem Grund aufgehängt haben, häufig als nutzlos. Hier hilft dann nur noch der ultimative "kill"-Befehl mittels des Signals -9 für SIGKILL, der direkt vom Linux-Kernel wahrgenommen wird und nicht vom Prozess abgefangen werden kann.
kill -9 502
Natürlich kann ein Nutzer nur die Prozesse mit dem "kill"-Befehl beenden, die mit seiner UID aktiv sind. Der Superuser steht auch hier wieder über allen Dingen und kann alle Prozesse beenden. Das geht so weit, dass er auf diese Art auch Systemdienste beenden und damit das gesamte Linux-System zum Absturz bringen könnte.