Skip to content

12 Einstieg in die Systemadministration

12 Einstieg in die Systemadministration

Lernziele

  • Einen Überblick über die Rolle des Systemadministrators haben

  • Betriebssystemkern und Prozesse verstehen

  • Konzepte der Software-Paketverwaltung kennen

Vorkenntnisse

  • Einfache Shell-Benutzung (Kapitel 4)

  • Kenntnisse über die Linux-Dateisystemstruktur (Kapitel 10)

12.1 Systemadministration: Grundlagen

Was macht ein Systemadministrator? Er konfiguriert Rechner, installiert und entfernt Software, schließt Geräte an und macht sie benutzbar, legt Sicherheitskopien an und spielt sie bei Bedarf wieder ein, fügt Benutzerkonten hinzu und entfernt sie, hilft Benutzern mit Problemen … Die Liste ist eindrucksvoll lang. In der Zeit der Heimcomputer war der Benutzer eines Rechners gleichzeitig der Administrator. Diese Idee hat sich in Systemen wie Windows noch lange gehalten. Selbst als Windows ein Benutzerkonzept hatte, war es üblich, als „Administrator“ zu arbeiten, da diverse wichtige Programme die entsprechenden Rechte einfach voraussetzten. Unix, das Linux inspiriert hat, war dagegen von Anfang an dafür ausgelegt, mehrere Benutzer zu unterstützen. Die Trennung zwischen einem „Administrator” mit besonderen Privilegien und „gewöhnlichen” Benutzern ist darum viel tiefer im System verankert als bei Betriebssystemen aus der Heimcomputer-Tradition.

Die Linux-Essentials-Prüfung des LPI stellt die Systemadministration nicht in den Vordergrund. Sie sollten jedoch zumindest über ein gewisses Grundlagenwissen verfügen, um besser zu verstehen, was Ihr Systemadministrator für Sie tut, oder um selbst einmal Systemadministrator zu werden. Wissen, das für Systemadministratoren wichtig ist, prüft das LPI in weiterführenden Zertifikaten wie LPIC-1, LPIC-2 und LPIC-3.

In diesem Kapitel erwähnen wir einige Themen, die weniger mit der unmittelbaren Benutzung eines Linux-Rechners zu tun haben. Wir beschäftigen uns beispielsweise damit, wie Sie sich ein Bild davon machen können, was auf dem Rechner läuft (Stichwort: „Warum ist mein Computer so langsam?“) oder wie die Software auf dem Rechner verwaltet wird. Dabei geht es uns eher um den groben Überblick als um Details.

Der Administrator eines Linux-Systems hat ein besonderes Benutzerkonto namens root zur Verfügung. Dieses Konto ist von den sonst üblichen Rechteprüfungen (siehe Kapitel 14) ausgenommen und darf deshalb beispielsweise auf alle Dateien im System zugreifen. Das ist beispielsweise nötig, um neue Software zu installieren. Systemweit installierte Programmdateien dürfen „normale” Benutzer zwar lesen und starten, aber nicht ändern. Somit sind Manipulationen zuungunsten anderer Anwender ausgeschlossen. Auch zur Erstellung von Sicherheitskopien muss der Administrator die Dateien aller Benutzer lesen (und zum Wiedereinspielen sogar schreiben) können.

⚠️ Es ist klar, dass mit der Möglichkeit, alle Dateien im System zu schreiben, auch die Gelegenheit besteht, das System schwer zu beschädigen. Wenn Sie als root angemeldet sind, hindert Sie Linux nicht daran, mit einem Kommando wie

# rm -rf /

Das komplette Dateisystem zu löschen ist eine Möglichkeit – es gibt jedoch jede Menge subtilere Methoden, um Schaden anzurichten. Sie sollten die Root-Privilegien also nur dann in Anspruch nehmen, wenn Sie sie tatsächlich benötigen. Als Root im Web zu surfen oder E-Mails zu lesen, ist absolut tabu.

⚠️ Wenn Sie als Root alle Dateien im System lesen können, könnten Sie der Versuchung erliegen, regelmäßig die E-Mails Ihres Chefs oder Ihres Ehepartners zu lesen. Tun Sie so etwas nicht. Es ist nicht angemessen (zumindest im Falle Ihres Ehepartners) und/oder verboten (im Falle Ihres Chefs) und kann Ihnen eine Menge Schwierigkeiten einbringen, die Ihnen den Spaß an Linux und der Systemadministration, ganz zu schweigen vom Haus- oder Betriebsfrieden, dauerhaft verderben können. Grundsätzlich spricht nichts dagegen, im Einzelfall und in Absprache mit den Betroffenen zur Fehlersuche oder -behebung einen kurzen Blick in ein Postfach zu werfen. Lassen Sie es jedoch nicht zur Gewohnheit werden.

💡 Denken Sie im Zweifel immer an Peter Parker alias Spider-Man: „Mit großer Macht geht große Verantwortung einher.“

Sie sollten es vermeiden, sich direkt (am Ende gar auf der grafischen Oberfläche) als Root anzumelden. Verwenden Sie stattdessen das Programm su, um in einer Terminalsitzung, die Sie als normaler Benutzer gestartet haben, eine Shell zu bekommen, die als root läuft.

$ /bin/su
Passwort: # geheim Kennwort für root
# _

Wenn Sie die Root-Shell mit „exit” oder Strg + d beenden, gelangen Sie wieder in die Shell, in der Sie ursprünglich su aufgerufen haben.

Manche Distributionen verzichten auf ein separates Root-Konto. Ubuntu erlaubt dem bei der Installation angelegten Benutzer beispielsweise, einzelne Kommandos mit Root-Rechten auszuführen, indem man sudo davorstellt.

$ sudo less /var/log/syslog

(Dieses Privileg kann der Benutzer bei Bedarf auch anderen Benutzern einräumen.) Für größere Bauarbeiten ist mit „sudo -i” eine Shell zu bekommen, die mit Administratorrechten ausgestattet ist.

💡 Die meisten Linux-Distributionen signalisieren, dass eine Shell mit den Rechten von root ausgeführt wird, indem sie eine Eingabeaufforderung ausgeben, die mit „#” endet. Steht dort etwas anderes – typischerweise „$” oder „>” –, handelt es sich um eine gewöhnliche Shell.

Übungen

✏️ 12.1 [2] Probieren Sie su aus. Warum rufen wir das Programm im Beispiel über den vollständigen Pfadnamen auf?

✏️ 12.2 [2] Für su müssen Sie das root-Kennwort wissen. sudo fragt Sie normalerweise nach Ihrem eigenen Kennwort. Was ist besser?

12.2 Die Systemkonfiguration

Andere Systeme vergraben die Details ihrer Systemkonfiguration in Datenbanken, die nur über spezielle Software geändert werden können und anfällig für „Bitfäule” sind (Stichwort: Windows-Registry). Bei Linux stehen systemweite Konfigurationsinformationen dagegen in Textdateien im Verzeichnis /etc. Ein paar Beispiele finden sich in Abschnitt 10.3. Dort kann der Systemverwalter sie mit dem Texteditor seiner Wahl ändern und erweitern. So kann beispielsweise ein neuer Benutzer angelegt werden, indem die relevanten Daten wie Benutzername, numerische Benutzerkennung oder Heimatverzeichnis in die Datei /etc/passwd eingetragen werden. Eine neue Festplatte lässt sich konfigurieren, indem eine Zeile mit dem Namen der Gerätedatei und dem Namen des Verzeichnisses, in dem die Platte im System erscheinen soll, an /etc/fstab angehängt wird.

💡 Ein Linux-System ist ein komplexes Gebilde aus Softwarekomponenten unterschiedlicher Herkunft (einige davon sind älter als Linux selbst). Aus dieser historisch gewachsenen Struktur folgt, dass die verschiedenen Konfigurationsdateien im Verzeichnis /etc sehr uneinheitlich aufgebaut sind: Manche sind zeilenweise strukturiert, andere enthalten Abschnitte, die von geschweiften Klammern begrenzt werden, wieder andere sind im XML-Format geschrieben oder sogar ausführbare Shellskripte. Für Administratoren, die mit all diesen Formaten umgehen müssen, ist das zweifellos ein Ärgernis. Es ist jedoch auch nicht einfach zu ändern, da alle möglichen Softwarepakete angepasst werden müssten.

💡 Es gibt jedoch einige weithin anerkannte Konventionen: Die meisten Konfigurationsdateien erlauben beispielsweise Kommentare in Zeilen, die mit „#” beginnen.

Die Idee, die Konfiguration in einzelnen Textdateien zu verwalten, mag auf den ersten Blick vorsintflutlich erscheinen, hat aber einige handfeste Vorteile:

  • Normalerweise ist es nicht möglich, durch Fehler in der Konfiguration eines einzelnen Programmpakets oder Diensts den Rest des Systems nachhaltig zu beschädigen. Es gibt natürlich ein paar Konfigurationsdateien, die so zentral für die Funktion des Systems sind, dass Irrtümer dort beispielsweise einen Neustart verhindern können. Aber das ist eindeutig eine kleine Minderheit.)

  • Die meisten Konfigurationsdateien erlauben Kommentare. Dadurch ist es möglich, die Details einzelner Konfigurationseinstellungen direkt vor Ort zu dokumentieren. Das erleichtert die Zusammenarbeit im Team und vermeidet Unfälle aufgrund der eigenen Vergesslichkeit. Es ist auf jeden Fall besser, als sich irgendwie daran erinnern zu müssen, dass im Menü 𝑋 ein Eintrag 𝑌 existiert, über den sich ein Dialog öffnen lässt, in dem im Reiter 𝑍 ein Kästchen abgehakt werden muss, da ansonsten nichts mehr funktioniert. (Zettel, auf denen solche Informationen stehen, haben die unangenehme Tendenz, sich aus dem Staub zu machen, wenn man sie am dringendsten braucht.)

  • Sie können Textdateien in ein Revisionskontrollsystem wie Git oder Mercurial „einchecken” und damit nicht nur große, dateiübergreifende Änderungen dokumentieren, sondern bei Bedarf auch kontrolliert wieder rückgängig machen. Damit kann auch die komplette Konfiguration eines Rechners bequem auf einem zentralen Server gesichert werden. Im Falle einer Neuinstallation des Rechners – etwa nach einem katastrophalen Hardwareschaden – steht sie sofort wieder zur Verfügung. In Rechenzentren ist das ein gravierender Vorteil – vor allem, wenn ein detailliertes „Auditing” aller Konfigurationsänderungen gewünscht wird.

  • Textdateien erlauben außerdem die bequeme Konfiguration ganzer Rechnernetze. Dazu verteilen Sie Konfigurationsdateien von einem zentralen Server auf die zu administrierenden Rechner. Einschlägige Systeme wie „Puppet” oder „Salt” gestatten die Verwendung von „Schablonen” (Templates) für Konfigurationsdateien. Dabei werden bei der Verteilung die für den Zielrechner passenden Details eingesetzt, sodass eine manuelle Konfiguration einzelner Rechner (das „Turnschuhnetz”) völlig überflüssig wird. Das erleichtert nicht nur die Verwaltung großer Systeme, sondern ist auch für kleine Installationen eine Erleichterung. Übungen

✏️ 12.3 [3] Stöbern Sie ein wenig in /etc. Viele der Dateien dort haben Handbucheinträge. Geben Sie beispielsweise „man fstab” ein. Gibt es Dateien in diesem Verzeichnis, die Sie als normaler Benutzer nicht lesen können, und wenn ja, warum?

12.3 Prozesse

Ein Programm, das gerade ausgeführt wird, nennt man „Prozess”. Neben dem eigentlichen Programmcode in der Maschinensprache des jeweiligen Prozessors gehören auch ein Arbeitsspeicher für die Daten sowie Verwaltungsinformationen, beispielsweise zu den aktuell geöffneten Dateien, zu einem Prozess. Des Weiteren verfügt ein Prozess über eine Prozessumgebung für die Umgebungsvariablen, ein aktuelles Verzeichnis und eine Prozessnummer oder „PID“, die den Prozess im System eindeutig identifiziert. Der Betriebssystemkern kümmert sich um das Anlegen von Prozessen, die Zuteilung von Rechenzeit und Arbeitsspeicher sowie das Aufräumen hinter beendeten Prozessen. Prozesse können den Betriebssystemkern aufrufen, um auf Dateien, Geräte oder das Netzwerk zuzugreifen.

💡 Neue Prozesse entstehen, indem existierende Prozesse sich – ganz wie Bakterien oder andere niedere Lebewesen – in zwei fast identische Kopien aufspalten („fast identisch“, weil einer der Prozesse als „Eltern“ und einer als „Kind“ gilt). Außerdem kann ein Prozess dafür sorgen, dass ein anderes Programm ausgeführt wird. Wenn Sie in der Shell beispielsweise das Kommando ls aufrufen, erzeugt die Shell einen Kindprozess, in dem zunächst auch der Programmcode der Shell ausgeführt wird. Dieser Code kümmert sich (unter anderem) darum, eine etwaige Ein- und/oder Ausgabeumlenkung in Kraft zu setzen. Anschließend wird er durch die Programmdatei /bin/ls ersetzt. Mit dem Ende des ls-Programms endet auch der Kindprozess und die Shell fragt Sie nach dem nächsten Kommando.

💡 Der erste Prozess mit der PID 1 wird beim Systemstart vom Betriebssystemkern angelegt. Nach Konvention ist das ein Programm namens /sbin/init, weshalb man auch vom „Init-Prozess” spricht. Der Init-Prozess ist dafür verantwortlich, das System kontrolliert hochzufahren und beispielsweise weitere Prozesse für Hintergrunddienste zu starten.

Mit dem Kommando „ps” können Sie Informationen über die Prozesse im System erhalten. Im einfachsten Fall zeigt Ihnen ps alle Prozesse, die auf Ihrem aktuellen Terminal (oder, heutzutage, im aktuellen Terminalfenster auf Ihrem Grafikbildschirm) laufen.

$ ps
PID TTY STAT TIME COMMAND
997 pts/8 S 0:00 -bash
1005 pts/8 R 0:00 ps
$ _

Die Spalten „PID” und „COMMAND” sprechen dabei für sich. TTY gibt den Namen des Terminals an („pts/irgendwas” steht meist für ein Terminalfenster), TIME die Rechenzeit, die die Prozesse jeweils schon verbraucht haben, und STAT den „Prozesszustand”.

💡 Ein Prozess ist bei Linux immer in einem von mehreren Zuständen:

  • Lauffähig (runnable, R): Der Prozess kann Rechenzeit zugeteilt bekommen.

  • Schlafend (sleeping, S): Der Prozess wartet auf ein Ereignis, typischerweise Ein- oder Ausgabe – einen Tastendruck oder Daten von der Festplatte.

  • Im Tiefschlaf (uninterruptible sleep, D): Der Prozess wartet auf ein Ereignis und kann dabei nicht unterbrochen werden. Prozesse sollten nicht zu lange in diesem Zustand verbleiben, da sie sich sonst nur durch einen Systemneustart beenden lassen. Wenn das passiert, deutet das auf einen Fehler hin.

  • Gestoppt (stopped, T): Der Prozess wurde von seinem Eigentümer oder einem Administrator zeitweilig angehalten, kann aber später weiterlaufen.

  • Zombie (Z): Der Prozess hat sich eigentlich schon beendet, aber sein Rückgabewert wurde vom Elterprozess noch nicht abgeholt. Dadurch kann der Prozess nicht richtig „sterben”, sondern verbleibt als Untoter im System. Zombies belegen außer einem Platz in der Prozesstabelle keine Ressourcen, daher sind sie im Grunde kein Problem. Sollte Ihr System von einer Horde Zombies befallen sein, deutet das auf einen Fehler in dem Programm hin, das die Prozesse ursprünglich erzeugt hat. Beenden Sie jenes Programm, verschwinden auch die Zombies.

Mithilfe von Parametern können Sie steuern, welche Informationen ps Ihnen liefert.

Sie können beispielsweise eine Prozessnummer angeben, um sich über einen bestimmten Prozess zu informieren.

$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 init [2]

Wenn Sie die Option „l” wählen, erhalten Sie ausführlichere Informationen zu einem Prozess.

$ ps l $$
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 1000 3542 3491 20 0 21152 2288 Ss pts/8 0:00 /bin/bash

(„$$“ steht hier für den „aktuellen Prozess“, also die Shell).

💡 UID steht für die numerische Benutzerkennung des Eigentümers des Prozesses (siehe Kapitel 13) und PPID für die Prozessnummer des „Elterns” des Prozesses. PRI steht für die Priorität des Prozesses (je größer die Zahl, desto niedriger die Priorität), VSZ für die Größe des Prozesses im Arbeitsspeicher (in KiB) und RSS für die aktuelle Größe des Prozesses im RAM (ebenfalls in KiB).

💡 VSZ und RSS sind nicht dasselbe, da Teile des Prozesses auf der Festplatte ausgelagert worden sein könnten. Der auf einem Linux-System verfügbare Arbeitsspeicher lässt sich vergrößern, indem Auslagerungsspeicher (Swap-Space) auf einer Plattenpartition oder Datei vorgesehen wird.

Das Kommando ps unterstützt eine Vielzahl von Optionen, die die Auswahl von Prozessen sowie Art und Umfang der ausgegebenen Informationen steuern. Lesen Sie ps(1).

💡 ps und ähnliche Programme beziehen ihre Informationen aus dem proc-Dateisystem, das normalerweise unter /proc zur Verfügung steht und vom Betriebssystemkern bereitgestellt wird. In den darin enthaltenen „Dateien” stehen aktuelle Daten über Prozesse und andere Systemeigenschaften. (Siehe hierzu auch Abschnitt 10.3.)

Mit dem Kommando „free” erhalten Sie Auskunft über den Speicher im System.

$ free
total used free shared buffers cached
Mem: 3921956 1932696 1989260 0 84964 694640
-/+ buffers/cache: 1153092 2768864
Swap: 8388604 0 8388604

Bild 12.1: Das Programm „top”

Die „Mem:“ -Zeile verrät Ihnen, dass dieser Rechner über ca. 4 GiB RAM verfügt (unter „Total“; für den Betriebssystemkern wird etwas Speicher verwendet, der hier nicht aufgeführt wird), von denen knapp die Hälfte belegt ist (betrachten Sie „Used“ und „Free“). Gut 700 MiB verwendet das Betriebssystem zum Speichern von Festplatten-Daten (die Spalten „buffers” und „cached”), und in der zweiten Zeile sehen Sie, wie sich das auf den freien und belegten Speicher auswirkt. Die dritte Zeile („Swap:”) beschreibt die Auslastung des Auslagerungsspeichers (auf diesem Rechner 8 GiB).

💡 Die „shared“-Spalte ist auf modernen Linux-Systemen immer 0 und kann ignoriert werden.

💡 Auch free unterstützt eine Reihe von Optionen, etwa um das Ausgabeformat freundlicher zu gestalten.

$ free --human # »-h« wäre dasselbe
                    total   used    free    shared  buffers     cached 
Mem:                3,7G    1,9G    1,8G    0B      84M         678M
-/+ buffers/cache:          1,2G    2,5G
Swap:               8,0G    0B      8,0G

Mit „M” und „G” sind übrigens computerfreundliche Mebi- und Gibibyte gemeint. Die Option „--si” schaltet auf Zehnerpotenzen (Mega- und Gigabyte) um.

Das Kommando „top” schließlich ist eine Kombination aus „ps” und „free” mit fortlaufender Aktualisierung. Es zeigt eine bildschirmfüllende Darstellung von System- und Prozesskenndaten an. Bild 12.1 zeigt ein Beispiel:

Im oberen Teil der Ausgabe sehen Sie in der ersten Zeile neben der aktuellen Uhrzeit die Uptime, also die seit dem Systemstart vergangene Zeit (hier nicht ganz drei Stunden), und die Anzahl der angemeldeten Benutzer. Die Neun ist hier nicht wörtlich zu nehmen, da jede Sitzung in einem Terminalfenster als „Benutzer” gilt. Rechts auf der ersten Zeile stehen drei Zahlen, die sogenannten Load Averages, die die Systemlast charakterisieren.

💡 Die load averages geben die Anzahl der lauffähigen Prozesse (Zustand R) an, respektive gemittelt über die letzte Minute, die letzten fünf Minuten und die letzten fünfzehn Minuten. Sie sollten diese Werte nicht überbewerten (!), denn eigentlich kann man an ihnen nicht viel erkennen. Ist der Wert für die letzte Minute hoch und für die letzten 15 Minuten niedrig, dann hat Ihr System plötzlich mehr zu tun bekommen. Ist der Wert für die letzte Minute niedrig und für die letzten 15 Minuten hoch, dann hatte Ihr System eben noch viel zu tun, aber das ist vorbei.

💡 Sind die load averages dauerhaft niedriger als die Anzahl der Prozessorkerne in Ihrem System, haben Sie unnötig viel Geld für einen teuren Prozessor ausgegeben. Auf einem Acht-Kern-System sind zum Beispiel Werte um acht unbedenklich. Werte, die über lange Zeiträume viel kleiner sind, sind hingegen traurig.

  • Die zweite Zeile gibt die Anzahl der Prozesse und deren Verteilung auf die Prozesszustände an.

  • Die dritte Zeile beschreibt in Prozent, womit sich die CPUs beschäftigen:

  • »us« steht für die Ausführung von Code außerhalb und

  • »sy« für die von Code innerhalb des Betriebssystemkerns.
  • „ni” steht für Code außerhalb des Betriebssystemkerns, dessen Priorität vom Benutzer absichtlich gesenkt wurde.
  • „id” steht für Untätigkeit.
  • „wa” steht für Warten auf Ein-/Ausgabe und die anderen drei Spalten sind nicht so interessant.

  • Die beiden folgenden Zeilen entsprechen im Wesentlichen der Ausgabe von „free”.

  • Der untere Teil des Bildschirms ist eine Prozessliste, die der von „ps l” ähnelt. Sie wird (wie der obere Teil) in Abständen von einigen Sekunden aktualisiert und ist standardmäßig nach dem Anteil an CPU-Zeit sortiert, den die Prozesse in der Liste jeweils verbrauchen (der Prozess, mit dem das System die meiste Zeit verbringt, steht an erster Stelle der Liste).

💡 Wenn Sie die Taste m drücken, wird die Liste nach dem Speicherverbrauch sortiert und der Prozess mit dem höchsten Speicherverbrauch steht vorne. Mit der Taste p gelangen Sie zur Liste der CPU-Zeit.

Mit h können Sie eine Hilfeseite in top aufrufen. Die Handbuchseite top(1) erklärt die Ausgabe und die möglichen Tastenkombinationen im Detail und zeigt auch, wie Sie den Inhalt der Prozessliste an Ihre Anforderungen anpassen können.

Übungen

✏️ 12.4 [1] Mit der ps-Option „ax” können Sie sich alle Prozesse im System anzeigen lassen. Betrachten Sie die Liste. Welche Prozesse können Sie einordnen?

✏️ 12.5 [2] Starten Sie in einer Shell-Sitzung einen länger laufenden Prozess (etwas wie „sleep 120” sollte ausreichen). Rufen Sie anschließend in einer anderen Sitzung den Befehl „ps ax” auf und suchen Sie den Prozess in der Ausgabe. (Tipp: grep ist Ihr Freund.)

✏️ 12.6 [!2] Benutzen Sie das Tool „top“, um nachzuschauen, welche Prozesse gerade die meiste Rechenzeit verbrauchen. Welche Prozesse verbrauchen den meisten Speicher?

12.4 Paketverwaltung

Heutige Linux-Distributionen bestehen in der Regel aus Tausenden von „Paketen”, die jeweils alles enthalten, was für eine bestimmte Funktionalität nötig ist: ausführbare Programme, Bibliotheken, Dokumentation usw. Bei der Inbetriebnahme eines Linux-Rechners können Sie als Administrator festlegen, welche Pakete auf dem Rechner installiert sein sollen. Natürlich können Sie auch später beliebige Pakete aus Ihrer Distribution nachinstallieren oder nicht benötigte entfernen.

💡 Wie die Paketaufteilung genau aussieht, hängt von der jeweiligen Distribution ab. Bei Bibliotheken ist es beispielsweise üblich, zwischen einem „Laufzeitpaket” und einem „Entwicklungspaket” zu differenzieren. Das Laufzeitpaket enthält diejenigen Dateien, die installiert sein müssen, damit andere Programme die Bibliothek benutzen können (etwa die tatsächliche, dynamisch ladbare Bibliothek in einer SO-Datei, die im Verzeichnis /usr/lib installiert wird). Das Entwicklungspaket müssen Sie nur installieren, wenn Sie vorhaben, neue oder existierende Programme zu übersetzen, die die Bibliothek benutzen. Darin finden Sie beispielsweise die Informationen, die der C-Compiler über die Bibliothek benötigt („Includfiles“), eine statisch nutzbare Bibliothek oder die Dokumentation des Bibliotheksinhalts. Die Dokumentation kann, wenn sie umfangreich ist, in ein weiteres Paket ausgelagert werden.

💡 Hier ist die Paketaufteilung für die rsvg-Bibliothek (sie kümmert sich um Grafiken im SVG-Format) à la Debian GNU/Linux 6.0 („Squeeze”):

librsvg2-2 Die eigentliche Bibliothek
librsvg2-dev Entwicklungspaket
librsvg2-bin Kommandozeilenprogramme
librsvg2-dbg Debugging-Informationen
librsvg2-doc Dokumentation
librsvg2-common Mehr Kommandozeilenprogramme
python-rsvg Anbindung an die Sprache Python
libimage-librsvg-perl Anbindung an die Sprache Perl

Auf jedem Linux-Rechner1 gibt es eine „Paketdatenbank“, die angibt, welche Pakete der Rechner kennt und welche davon aktuell installiert sind. Sie können die Paketdatenbank in periodischen Abständen mit den Repositories, also den Paket-Servern, Ihrer Distribution abgleichen. So erfahren Sie, welche der auf dem Rechner installierten Pakete möglicherweise veraltet sind, weil die Distribution neuere Versionen davon anbietet. In der Regel erlaubt Ihnen das Paketverwaltungssystem dann eine selektive Aktualisierung der betroffenen Pakete.

💡 Wie gut das im Detail klappt, hängt auch (wieder einmal) von Ihrer Distribution ab. Die Sache kann nämlich komplizierter sein, als es auf den ersten Blick scheint: Die neue Version eines Pakets könnte beispielsweise verlangen, dass auch eine Bibliothek in einer neueren Version installiert ist. Das kann zu Problemen führen, wenn ein anderes installiertes Programm zwingend die alte Version der Bibliothek benötigt. Manchmal kann es also sein, dass ein Paket gar nicht aktualisiert werden kann, ohne dass sich anderswo im System etwas Gravierendes ändern müsste. Gute Paketverwaltungssysteme erkennen solche Situationen und warnen Sie als Administrator bzw. geben Ihnen Eingriffsmöglichkeiten.

Wie in Abschnitt 2.4.7 angedeutet, gibt es bei den wesentlichen Linux-Distributionen zwei verbreitete Paketverwaltungssysteme, die jeweils mit eigenen Werkzeugen und einem eigenen Format für die Paketdateien daherkommen: die Paketverwaltung von Debian GNU/Linux und seinen Ablegern sowie die RPM-Paketverwaltung von Red Hat, SUSE & Co. Beide lösen im Grunde dieselbe Art von Problemen, unterscheiden sich aber im Detail, etwa bei den zur Paketverwaltung benötigten Kommandos. Wenn Sie ein System wie RHEL, Fedora oder openSUSE haben, können Sie eine Liste aller installierten Pakete machen. Sie können zum Beispiel das Kommando rpm --query --all benutzen. Wenn Sie ein System wie Debian haben, können Sie das Kommando dpkg --list benutzen.

💡 Die Paketdatenbanken selbst befinden sich normalerweise unter /var/lib/. Auf Debian-artigen Systemen ist dies /var/lib/dpkg und in /var/cache/apt werden die Inhaltsverzeichnisse der Repositories sowie heruntergeladene Pakete zwischengelagert. Auf RPM-Systemen befindet sich die Paketdatenbank unter /var/lib/rpm.

Programme wie dpkg und rpm bilden heute in der Regel das „Fundament” der Paketverwaltung. Als Administrator verwenden Sie jedoch komfortablere Werkzeuge, die auf den Basisprogrammen aufbauen. Diese erlauben beispielsweise den bequemen Zugriff auf die Paket-Repositories und lösen Abhängigkeiten zwischen Paketen automatisch auf. In der Debian-Welt sind zum Beispiel „Aptitude” und „Synaptic” verbreitet, während Red Hat auf ein Programm namens YUM und SUSE auf eines namens „Zypper” setzt (wobei die SUSE-Paketverwaltung auch in das allgemeine Administrationswerkzeug YaST integriert ist).

💡 Einige dieser Werkzeuge sind sogar unabhängig vom unterliegenden Paketverwaltungssystem. „PackageKit” kann beispielsweise nicht nur die Debian- oder RPM-Paketverwaltung verwenden, sondern unter kontrollierten Umständen sogar gewöhnlichen Benutzern ohne Administratorprivilegien die Installation oder Aktualisierung von Paketen erlauben.

Übungen

✏️ 12.7 [2] Wie viele Pakete sind auf Ihrem System installiert? Führen Sie den im Text gezeigten rpm- bzw. dpkg-Aufruf aus und zählen Sie die Zeilen der Ausgabe. (Vorsicht: „dpkg --list” zeigt Ihnen auch Pakete, die einmal installiert waren, aber inzwischen entfernt oder von neueren Versionen überlagert wurden. Zählen Sie also nur die Zeilen in der Ausgabe, die mit „ii” beginnen.)

12.5 Kommandos in diesem Kapitel

Kommando Beschreibung manpage
dpkg Verwaltungswerkzeug für Debian-GNU/Linux-Pakete dpkg(8)
free Zeigt die Speicherauslastung und die Auslastung des Swap-Bereichs an free(1)
ps Gibt Prozess-Statusinformationen aus ps(1)
rpm Dient zur Paketverwaltung in vielen Linux-Systemen (Red Hat, SUSE, …) rpm(8)
su Startet eine Shell unter der Identität eines anderen Benutzers su(1)
sudo Erlaubt normalen Benutzern das Aufrufen bestimmter Kommandos mit Administratorprivilegien sudo(8)
top Bildschirmorientiertes Programm zur Beobachtung und Verwaltung von Prozessen top(1)

12.6 Zusammenfassung

  • Linux unterscheidet zwischen „normalen” Benutzern und dem Systemadministrator root, der nicht den gewöhnlichen Rechteprüfungen unterliegt.

  • Als normaler Benutzer können Sie sich über die Befehle „su” oder „sudo” zeitweilig Administratorprivilegien besorgen.

  • Die Systemkonfiguration eines Linux-Rechners steht in Textdateien im Verzeichnis /etc.

  • Prozesse sind Programme, die gerade ausgeführt werden.

  • Kommandos wie ps und top geben Einblick in den aktuellen Systemzustand.

  • Die wichtigen Linux-Distributionen verwenden entweder das Paketverwaltungssystem von Debian GNU/Linux oder das ursprünglich von Red Hat entwickelte RPM-System.

  • Aufbauend auf Basiswerkzeugen bieten die meisten Distributionen komfortable Software zur Verwaltung, Installation und Entfernung von Softwarepaketen unter Berücksichtigung von Abhängigkeiten.


  1. Jedenfalls jedem, der eine der wesentlichen Distributionen verwendet – es gibt ein paar Distributionen, die meinen, ohne ein Paketverwaltungssystem auszukommen, aber die sind mehr was für Fans.