Unter Linux gibt es verschiedene Systeme für die Dokumentation und Hilfe. Einige davon sind schon vor der Installation unter DOS/Windows verfügbar, wie z.B. einige HOWTOs.
Die wichtigste wird wohl das man-System sein. man-Seiten sind vor allem für Kommandos und Konfigurationsdateien verfügbar. Diese befinden sich in Verzeichnissen /usr/man, /usr/X11R6/man und anderen. Schaut man sich mal das Verzeichnis /usr/man an, sieht man weitere Unterverzeichnisse, die unter anderem durchnumeriert sind. Diese Unterverzeichnisse spiegeln die Bereiche wieder, in welche die man-Seiten eingeordnet werden. Zur Zeit gibt es die folgenden 10 Bereiche:
| 1 | Benutzerkommandos |
|---|---|
| 2 | Systemaufrufe |
| 3 | Funktionen der Programmiersprache C |
| 4 | Dateiformate, Device-Dateien |
| 5 | Konfigurationsdateien |
| 6 | Spiele |
| 7 | Diverses |
| 8 | Kommandos zur Systemadministration |
| 9 | Kernel-Funktionen |
| n | neue Kommandos |
Die Aufrufsyntax von man lautet:
man [optionen] [bereich] thema
Dabei sucht man die als Thema angegebene Manual-Datei in allen dem System bekannten man-Verzeichnissen (abgespeichert in der Variable $MANPATH in der Datei /etc/profile). Wird statt dem Thema eine Datei angegeben, wird diese angezeigt. Die optionale Angabe des Bereiches schränkt die Suche nach man-Texten auf einen Themenbereich ein.
Häufiger gibt es mehrere man-Texte zu einem Thema und im Normalfall wird nur die erste gefundene man-Seite angezeigt. Durch die Option -a werden alle gefundenen man-Seiten nacheinander angezeigt.
Das Programm info ist wesentlich leistungstärker als der man-Befehl. Er erlaubt Querverweise, was vor allem für umfangreichere Hilfetexte sehr hilfreich ist. Aufgerufen wird info über:
info [optionen] [thema]
Zum Teil liegen die info-Dateien auch als HTML-Datei vor, so zum Beispiel bei SuSE, was das Lesen mit einem Browser ermöglicht. Ein man-Text zu info beschreibt die Grundzüge der Bedienung des Programms, worauf ich hier verweisen möchte.
Desweiteren gibt es im Verzeichnis /usr/doc weitere Hilfetexte und Dokumentationen. Unter anderem die Frequently Asked Questions (FAQ) im Unterverzeichnis ./FAQ oder ./faq und die HOWTOs in Unterverzeichnis ./howto. Bei der SuSE-Distribution gibt es zusätzlich das SuSE-Hilfesystem und die Support-Datenbank. Diese liegen zumeist in den Formaten ASCII, HTML, PostScript oder DVI vor. DVI-Dateien können per dvips zu PostScript umgewandelt und ausgedruckt werden oder weiter per ps2pdf in das PDF-Format konvertiert werden, wo sie mit dem Acrobat Reader gelesen und ausgedruckt werden können1).
Bevor Sie mit der Installation eines Linux-Systems beginnen, sollten Sie so viele Informationen über die Rechnerhardware sammeln wie nur irgendwie möglich. Dazu gehört vor allem der Typ der Graphikkarte, damit bei der Installation der richtige X-Server ausgewählt werden kann. Genauso wichtig sind Informationen über die Festplatte, welche Partitionen sind vorhanden, wie groß ist die Festplatte und hab ich noch Plattenplatz frei, um neue Linux-Partitionen anlegen zu können. Sollte der gesammte Festplattenplatz durch Partitionen belegt sein, muß das System umpartioniert werden. Entweder durch Löschen einiger Paritionen oder über das Tool fips (meinst auf der CD-Rom im Verzeichnis dosutils\fips). Dieses Tool verkleinert bestehende Partitionen ohne Datenverlust. Bevor das Programm gestartet wird, muß die Partition defragmentiert werden, damit alle Dateien am Anfang der Platte stehen. Hierfür gibt es aber weitere Dokumentationen im Programmverzeichnis von fips oder in der beiligenden Linux-Dokumentation. Vor der Installation sollte man sich auch überlegen, welche Partitionen für Linux eingerichtet werden sollen und wie groß sie sind.
Das Starten der Installation kann über mehrere Wege erfolgen. Wenn das CD-ROM bootfähig ist, kann direkt über die CD-ROM gebootet werden, ansonsten kann eine Boot-Diskette erzeugt werden. Einige Distributionen bieten auch ein Setup-Programm an, welches von DOS, teilweise auch von Windows aus gestartet werden kann. Die SuSE-Distribution bietet zum Beispiel ein solches Setup-Tool für DOS.
Das Erstellen einer Startdiskette erfolgt mit einem Programm, welches den Inhalt einer Image-Datei (bei SuSE im Verzeichnis images der CD-ROM) Sektor für Sektor vornimmt. Hierfür können Programme wie RAWRITE.EXE (im Verzeichnis dosutils der CD-ROM) oder das Programm NCDD.EXE aus den Norton Utilities verwendet werden. Das SuSE Setup-Programm kann auch eine solche Boot-Diskette erstellen.
Falls man schon ein lauffähiges Linux-System sein eigen nennen kann, kann die Boot-Diskette auch hierüber mit dem Befehl dd erstellt werden. Die Syntax für die Erstellung lautet:
dd if=/cdrom/images/boot.img of=/dev/fd0 bs=8192
Dabei ist der Pfad nach if= die Pfad- und Dateiangabe des Image und /dev/fd0 das erste Floppy.
Das Linux-Partitionierungsprogramm wird über den Befehl fdisk aufgerufen. Hier können dann primäre und erweiterte Partitionen sowie logische Laufwerke erstellt werden. Desweiteren gibt es die Möglichkeit, den Typ des Dateisystems festzulegen und die aktive Partition zu markieren.
Tabelle: Von fdisk unterstützte Dateisysteme (Auswahl) |
|||
| ID | Bezeichnung | ID | Bezeichnung |
|---|---|---|---|
| 0 | Empty | 65 | Novell Netware |
| 1 | FAT12 | 80 | Old Minix |
| 4 | FAT16 <32M | 81 | Minix / old Linux |
| 5 | Extended | 82 | Linux swap |
| 6 | FAT15 | 83 | Linux |
| 7 | HPFS/NTFS | 85 | Linux extended |
| a | OS/2 Boot Manager | 86 | NTFS volume set |
| b | Win95 FAT32 | 87 | NTFS volume set |
| c | Win95 FAT32 (LBA) | a6 | Open BSD |
| e | Win95 FAT16 (LBA) | c1 | DRDOS/sec (FAT12) |
| f | Win95 Extended (LBA) | c4 | DRDOS/sec (FAT16 < 32M) |
| 12 | Compaq diagnostic | c6 | DRDOS/sec (FAT16) |
| 24 | NEC DOS | eb | BeOS fs |
| 3c | Partition Magic | f2 | DOS secondary |
| 55 | EZ-Drive | fd | Linux raid auto |
| 64 | Novell Netware | fe | LANstep |
Die Swap-Partition oder Swap-Datei ist ein zusätzlicher Arbeitsspeicher auf der Festplatte (die Auslagerungsdatei unter Windows). Hier wird der Arbeitsspeicher ausgelagert, wenn er zu klein ist. Normalerweise wird die Swap-Partition bei der Installation eingerichtet, ohne daß man sich mit den nachfolgenden Befehlen beschäftigen muß. Manchmal ist es jedoch nötig, selbst Hand anzulegen. Dies kann dann der Fall sein, wenn man nachträglich merkt, daß der Swap-Bereich zu klein ist oder für die Installation zu wenig RAM zur Verfügung steht (bei SuSE 6.3 benötigt die Installation schon eine RAM-Disk von etwa 14 MB!). Dabei sollte der Swap-Partition den Vorzug gegeben werden.
Wenn eine neue Swap-Partition verwendet werden soll, muß diese zuvor mit fdisk und dem Dateisystemtyp 82 (Linux-Swap) angelegt werden. Der Befehl:
mkswap -c <device>
„formatiert“ die Swap-Partition und der Befehl:
swapon <device>
aktiviert die Swap-Partition. Soll diese Swap-Partition bei jedem Systemstart aktiviert werden, sollte sie in die Datei /etc/fstab eingetragen werden.
Für die Anlegung einer Swap-Datei muß folgende Befehlsfolge angegeben werden:
root@server: # dd if=/dev/zero of=<datei> bs=1024 count=<blocks> root@server: # sync root@server: # mkswap -c <datei> root@server: # sync root@server: # swapon <datei>
Dabei wird zuerst eine Datei, gefüllt mit Null-Bytes, der Blockgröße 1024 und der Anzahl der Blocks, angelegt. Anschließend wird sie wieder „formatiert“ und aktiviert.
Zum Starten eines Linux-System stehen zwei Möglichkeiten zur Verfügung, Loadlin oder ein Boot-Manager. Als Boot-Manager kommt normalerweise LILO zum Einsatz, der Linux Loader.
Loadlin ist ein Programm, welches unter DOS läuft und den Linux-Kernel laden kann, so das hiermit ein Linux-System gestartet werden kann. Beim Starten von LOADLIN.EXE muß der zu ladene Kernel, die Linux Root-Partition und bei Bedarf weitere Kernelparameter angegeben werden. Die Verwendung von Loadlin hat einige Vorteile gegenüber einem Boot-Manager: es werden keine Änderungen am MBR vorgenommen und es kann gut in ein DOS / Windows 9x Startmenü mit eingebunden werden. Der Nachteil ist natürlich, daß eine Partition mit DOS / Windows vorhanden sein muß, so das es häufiger für ein System mit mehreren Betriebssystemen eingesetzt wird. Sollte unter Linux ein neuer Kernel kopiliert werden, muß dieser in eine Partition verschoben werden, die von DOS lesbar ist. Im Setup-Programm von SuSE kann man Loadlin auf die Festplatte kopieren.
Der am häufigsten benutzte Boot-Manager ist der Linux Loader LILO. Viele Administrationstools, wie zum Beispiel YaST unter SuSE, erleichtern die Konfiguration mit einer graphischen Oberfläche. Zentrale Konfigurationsdatei für LILO ist die Datei /etc/lilo.conf. Hier werden alle Einträge für LILO vorgenommen. Das nachfolgende Listing zeigt eine einfache LILO-Konfigurationsdatei für ein Computersystem, auf dem nur Linux installiert ist:
append="mem=0x8000000" boot=/dev/hda vga=normal message=/boot/lilo.msg read-only prompt timeout=50 # die eigentlichen Kernel-Eintragungen image = /boot/vmlinuz.2.2.13 root = /dev/hda3 label = 1
Die erste Zeile übergibt dem Kernel weitere Parameter, hier die Größe des Arbeitsspeichers in hexadezimaler Form (bei manchen Computersystemen ist diese Angabe notwendig, da sonst eine falsche Größe für den Arbeitsspeicher erkannt wird), die zweite Zeile gibt den Installationsort von LILO an, z.B. wie hier den MBR der ersten Festplatte. Die Option vga gibt den Videomodus an, in dem gestartet werden soll, dabei kann unterschieden werden zwischen 80×25 oder 80×50, normal bezeichntet den ersten Modus. Um nicht nur beim Starten von LILO den LILO-Prompt zu erhalten, kann mit der Option message eine Textdatei angegeben werden, die beim Starten angezeigt wird. Read-Only sorgt dafür, daß die Root-Partition zuerst im Read-Only-Modus gemountet wird, damit die Dateisystemprüfung vorgenommen werden kann, prompt gibt den LILO-Prompt aus. Die Einstellung timeout gibt die Wartezeit in zehntel-Sekunden an, bis der erste Kerneleintrag als Default-Kernel geladen wird wenn keine anderen Eingaben am LILO-Prompt vorgenommen werden. Danach folgt ein Kernel-Eintrag zum booten. Zu einem Kernel-Eintrag gehören 3 Werte: image, der die Kernel-Datei benennt, root gibt die Root-Partition an und label den Eintrag, der am LILO-Prompt einzugeben ist, damit dieser Kernel geladen wird.
Sollte keine LILO-Meldung eingestellt sein, die die label-Namen für die Kernel-Eintragungen angibt, kann mit der Tab-Taste am LILO-Prompt eine Liste mit Kernel-Eintragungen angezeigt werden.
Zu beachten sind noch zwei Dinge. Bei jeder Änderung an der Kerneldatei, z.B. verschieben, neuen Kernel mit gleichen Namen in das Verzeichnis /boot hineinkopieren, Änderung der Konfigurationsdatei usw., muß LILO neu installiert werden. Hierfür muß nur das Kommando lilo ausgeführt werden. Sollten sich Fehler eingeschlichen haben, werden diese angezeigt. Zum anderen muß LILO sowie die Partition für das Verzeichnis /boot in den ersten 1024-Zylindern liegen, damit LILO die benötigten Dateien lesen kann. Für weitere Konfigurationseinstellungen und besonders Systeme, mit anderen Boot-Managern (z.B. Windows NT Boot-Manager) möchte ich auf das Linux-Handbuch, das mit der Distribution mitgeliefert wird und auf die LILO-Dokumentation (z.B. man lilo oder man lilo.conf) verweisen.
Zwar können immer mehr Arbeiten an einem Linux System mit Tools, die unter dem X-Windows System arbeiten, erledigt werden und die Bedienung lehnt sich mehr und mehr an den Klick-Mechanismus an, den wir von Windows, dank KDE, Gnome und Co, gewöhnt sind. Trotzdem ist es nicht nur den Unix-Cracks vorbehalten, auf der Kommandozeile zu arbeiten. In diesem Abschnitt erfolgt eine kurze Einführung zur BASH-Shell, die Standard-Kommandozeile unter Linux.
In der unten abgebildeten Abbildung sehen Sie eine Telnet-Einwahl auf einem Linux-Rechner. Bei jedem Linux-System erfolgt zuerst die Anmeldung mit Name und Paßwort. Linux gibt weitere Informationen, z.B. welcher Kernel auf dem System läuft (hier i386-Kernel mit Version 2.2.13), auf welchem Terminal man sich gerade befindet (hier pts/7) und wann der letzte Login war. Sollten seit der letzten Anmeldung fehlgeschlagene Logins erfolgt sein, wird dies mit ausgegeben. Nach der Anmeldung werden die benutzerspezifischen Einstellungen gelesen und der Prompt ausgegeben (hier ~ #). Dabei steht die Tilde (~) für das Heimatverzeichnis des Benutzers.
Nun steht die Shell für Ihre Eingaben bereit. Wenn Sie nun den Inhalt des aktuellen Verzeichnisses angeben lassen wollen, geben sie den Befehl ls ein und es erfolgt folgende Ausgabe:
~ # ls Desktop Office51 StarOffice bin Mail ServerLog StartLog fte-new.cnf
Der Befehl ls -la gibt die Ausgabe im Langformat sowie alle versteckten Dateien (das sind Dateien, die mit einem Punkt beginnen) aus:
~ # ls -la insgesamt 289 drwx-x-x 23 root root 1024 Jul 17 16:47 . drwxr-xr-x 24 root root 1024 Jul 1 22:28 .. -rw-r--r-- 1 root root 2908 Jul 18 13:35 .X.err -rw------- 1 root root 5890 Jul 18 10:30 .bash_history -rw-r--r-- 1 root root 106692 Jul 1 21:01 .fterc drwxr-xr-x 2 root root 1024 Jul 8 16:30 .icewm drwxr-xr-x 3 root root 1024 Jul 1 21:37 .kde -rw-r--r-- 1 root root 486 Jul 17 11:32 .kderc -rw-r--r-- 1 root root 11666 Jul 8 12:45 .pinerc drwxr-xr-x 2 root root 1024 Jul 1 21:37 .skel drwx------ 5 root root 1024 Jul 1 21:37 Desktop drwx------ 2 root root 1024 Jul 14 13:51 Mail drwxr-xr-x 22 root root 1024 Jul 2 09:21 Office51 -rw-r--r-- 1 root root 1993 Jul 13 20:35 ServerLog -rwxr-xr-x 1 root root 573 Jul 2 09:21 StarOffice -rw-rw-rw- 1 root root 1189 Jul 13 20:36 StartLog drwxr-xr-x 2 root root 1024 Jul 1 22:29 bin -rw-r--r-- 1 root root 106692 Jul 1 21:00 fte-new.cnf
Dabei gibt die erste Spalte die Zugriffsrechte an, die zweite die Anzahl der Verweise, danach folgen Besitzer, Gruppe, Größe, letztes Änderungsdatum und der Name. Die ersten beiden Einträge sind spezielle Verzeichnisse. Das Verzeichnis . kennzeichnet das aktuelle Verzeichnis und .. das übergeordnete Verzeichnis.
Das Verzeichnisse wechseln können Sie über cd <Verzeichnis>. Wird cd ohne Verzeichnis aufgerufen, wird ins Home-Verzeichnis des Benutzers gewechselt, das selbe erfüllt cd ~. Dateien können mit cat <Dateiname> angezeigt werden und seitenweise über cat <Dateiname> | more bzw. cat <Dateiname> | less.
Navigieren innerhalb des Kommandozeile können Sie mit den Pfeiltasten, links und rechts navigieren innerhalb des Textes um z.B. Änderungen vorzunehmen und die Hoch- und Runter-Taste in der History-Liste, um einen alten Befehl nocheinmal aufzurufen (diese Funktion bieten nicht alle Shells, aber z.B. die bash). Ein weiteres Feature ist die TAB-Taste. Hiermit können Kommando- und Dateinamen expandiert werden. Hierfür wird in allen Verzeichnissen, die in der Variablen Pfad gespeichert sind, nach einem entsprechenden Namen gesucht bzw. bei der Angabe eines Pfades in dem jeweiligen Verzeichnis. Sollten mehrere Namen expandiert werden können, ertönt ein Signalton und durch dochmaliges Drücken der TAB-Taste wird eine Liste von möglichen Namen angezeigt.
Es können mehrere Konsolen gestartet werden und zum Login bereitstehen. Standardmäßig befinden Sie sich in der Konsole 1. Über die ALT-Taste in Verbindung mit den Funktionstasten können Sie in andere Konsolen wechseln, sich anmelden und Kommandos ausführen. Sollten Sie keine Änderungen an /etc/inittab diesbezüglich vorgenommen haben, stehen mit ALT+F1 bis ALT+F6 die sechs Konsolen zur Verfügung, mit ALT+F10 wechseln Sie in die System-Konsole, wo der Kernel Meldungen ausgibt und diese in der Datei /var/log/messages abspeichert. Sollten Sie sich im X-Windows System befinden, gelangen Sie in die Konsolen über die Tastenkombination STRG+ALT+Fn. Möchten Sie wieder zurück ins X-Windows System, wechseln Sie auf Konsole 7 (ALT+F7).
Zu jeder Datei und jedem Verzeichnis werden Besitzer, Gruppe und Zugriffsrechte gespeichert. Die Zugriffsrechte sind in drei Gruppen eingeteilt: Besitzer (u), Gruppe (g) und alle anderen (o). Hierfür stehen dann jeweils 3 Zugriffsrechte bereit: read (r), write (w) und execute (x). Mit den drei Befehlen chown, chgrp und chmod können diese Informationen verändert werden.
Links sind Verweise auf Dateien um z.B. eine Datei über mehrere Verzeichnisse verfügbar zu machen. Dies geschieht völlig transparent, so daß der Benutzer gar nicht merkt, daß er auf einen Link zugreift. Hierbei muß zwischen zwei verschiedenen Link-Arten unterschieden werden: feste und symbolische.
Feste Links sind ein neuer Verweis auf den Speicherbereich einer Datei. Daher besitzen sie auch dieselbe I-Node wie die Ursprungsdatei. Bei jedem Anlegen eines neuen festen Links wird ein Zähler um eins erhöht um beim Löschen um eins dekrementiert. Wenn der Zähler auf Null steht, gilt die Datei als gelöscht und der Speicherbereich wird freigegeben. Da der I-Node gespeichert wird, sind nur feste Links auf der selben Partition möglich (jede Partition besitzt ihre eigene I-Node-Tabelle). Einen festen Link können Sie durch den Befehl:
ln <Quelle> <Ziel>
anlegen. Dagegen wird bei symbolischen Links der Pfad und Dateiname gespeichert. Hierdurch verändert sich beim Löschen der Ursprungsdatei der Link zwar nicht, jedoch zeigt er dann ins Leere. Wird der Link gelöscht, hat dies keinen Einfluß auf die Ursprungsdatei. Symbolische Links können Partitionsübergreifend eingesetzt werden und auch auf Verzeichnisse Links gesetzt werden. Bei symbolischen Links sollten relative Pfadangaben benutzt werden, da dies Probleme z.B. beim Verschieben von ganzen Verzeichnisbäumen verhindern kann. Symbolische Links werden durch Angabe der Option -s des ln-Befehls angelegt:
ln -s <Quelle> <Ziel>
Das nachfolgende Listing zeigt ein Verzeichnis mit festen und symbolischen Links. Dabei ist ks.eps ein fester Link auf ksysv.eps und ksysv2.eps ein symbolischer. Sie sehen, bei den festen Links ist die in der ersten Spalte angegebene I-Node-Nummer gleich (durch die Option -i bei ls) und beim symbolischen Link wird der Pfad angegeben.
~ /bilder # ls -li insgesamt 5223 6165 -rw-r--r-- 2 root root 1496097 Jul 16 10:48 ks.eps 6165 -rw-r--r-- 2 root root 1496097 Jul 16 10:48 ksysv.eps 6162 lrwxrwxrwx 1 root root 9 Jul 18 14:28 ksysv2.eps -> ksysv.eps
Unter Linux werden die einzelnen Partitionen, logische Laufwerke und externe Geräte (CD-ROM, Diskettenlaufwerk) nicht jeweils über eigene Laufwerksbuchstaben, sondern in einen gesamten Verzeichnisbaum eingebunden. Das Laufwerk, welches alle anderen Dateisysteme aufnimmt und an oberster Stelle steht, wird Root-Verzeichnis (Wurzel) genannt (nicht zu verwechseln mit dem Home-Verzeichnis des Benutzers root).
Bevor Sie ein Dateisystem benutzen können, müssen Sie dieses formatieren (mit dem Befehl mkfs) und danach in den Verzeichnisbaum einbinden. Dabei spielt es keine Rolle, ob es sich um eine lokale Festplattenpartition, einen externen Datenspeicher (z. B. CD-ROM) oder um ein Netzwerkdateisystem, womöglich von einem Rechner Tausende Kilometer entfernt, handelt. Der Befehl hierfür ist mount mit folgendem Syntax:
mount -t [dateisystemtyp] [Gerätedatei] [Mount-Punkt]
Beispiel:
mount -t msdos /dev/hda1 /mnt
Anstatt der Gerätedatei muß bei Netzwerkdateisystemen der Rechner- und Freigabename angegeben werden2).
Die Gerätedateien symbolisieren das Gerät, auf das sich bezogen wird. Die einzelnen IDE-Controller-Ports haben die Bezeichnung “hd + Buchstabe“, wobei von a an durchbuchstabiert wird, für den SCSI-Controller die Bezeichnung “sd + Buchstabe“ und für SCSI-CD-ROMs “scd + Nummer“.
| Tabelle: einige Gerätedateien und Beschreibung | |
| Device | Beschreibung |
|---|---|
| hda | Primärer IDE-Controller, Master |
| hdb | Primärer IDE-Controller, Slave |
| hdc | Sekundärer IDE-Controller, Master |
| hdd | Sekundärer IDE-Controller, Slave |
| sda | erstes SCSI-Gerät |
| sdb | zweites SCSI-Gerät |
| scd1 | erstes SCSI CD-Rom |
| scd2 | zweites SCSI CD-Rom |
| fd0 | erstes Floppy-Laufwerk |
| fd1 | zweites Floppy-Laufwerk |
Die einzelnen Partitionen auf dem Gerät werden mit Nummern symbolisiert, d. h. die primären und erweiterten Partitionen auf dem Gerät werden von 1 - 4 nummeriert, die logischen Laufwerke bekommen Nummern ab 5.
Anstatt ständig selber die gesamten Dateisysteme per Hand zu mounten (so nennt man das Einbinden), kann dieses das System selbstständig erledigen. Zumal nur der Administrator (root) dieses darf. Das kann über die Datei /etc/fstab erreicht werden. In dieser Datei werden die Gerätedateien, das dazugehörige Dateisystem und der Mount-Point eingetragen, so daß das Betriebssystem alle Informationen besitzt, um diese Aufgabe selbstständig zu erledigen.
Nun ist es unpraktisch, ein CD-ROM Laufwerk oder eine Floppy beim Boot-Vorgang ins Dateisystem einzubinden, da diese im Betrieb häufiger gewechselt werden müssen. Vor allem, weil man eine eingebundene CD nicht aus dem CD-ROM Laufwerk hinausbekommt, da Linux den Öffnen-Knopf sperrt. Andererseit wäre es auch nicht praktisch, jedesmal den vollen Mountbefehl mit allen Parametern anzugeben, da dies auch nur root darf. Auch hierfür gibt es eine Lösung. In der /etc/fstab-Datei kann jede Gerätedatei über die Option noauto so eingetragen werden, daß sie nicht beim booten automatisch eingebunden wird, sondern daß man für den Mount-Befehl eine verkürzte Schreibweise anwenden kann. Z.B. wenn man mount /dev/hdc eingibt, wird in der Datei /etc/fstab nachgeschaut, ob es einen Eintrag mit der betreffenden Gerätedatei gibt und wenn ja, dann werden die restlichen Parameter hinzugefügt. Genauso kann man in /etc/fstab auch die Option user eintragen, so daß jeder Benutzer den Mount-Befehl auf diese Gerätedatei anwenden darf.
Dieses Vorgehen hat noch einen großen Vorteil. Dateisysteme, die selten benötigt werden können später einfach eingebunden werden und ein nicht eingebundenes Dateisystem kann im Grunde nicht zerstört werden, z.B. durch löschen oder Formatierung.
Um ein Dateisystem auszubinden gibt es den Befehl umount [Gerät]. Dabei wird überprüft, ob noch Schreiboptionen auf das Dateisystem ausgeführt werden müssen, die Daten synchronisiert und ob noch jemand auf Daten von diesem Dateisystem zugreift. Linux ist ja ein Multi-User Betriebssystem, woauf mehrere Benutzer gleichzeitig arbeiten können und da wäre es ziemlich gefährlich, wenn jemand ein Dateisystem ausbindet, wenn jemand anderes noch darauf zugreift.
Daemonen sind spezielle Hintergrundprozesse zur Systemverwaltung, die normalerweise über init beim booten gestartet werden. Wenn Sie mit ps -aux sich alle Prozesse anzeigen lassen, werden Sie feststellen, daß bei einigen Einträgen in der Terminal-Spalte ein Fragezeichen steht. Dies sind Daemonen, da sie keinem Terminal zugeordnet werden. Meistens enden die Namen eines Daemons mit einem d. Wichtige Daemonen sind:
Batchdaemon, der routinemäßige Aufgaben erledigen kann; die Steuerung erfolgt über /etc/crontab und /var/spool/cron/crontabs;
Startet weitere Netzwerk-Daemonen; Steuerung über /etc/inetd.conf;
Protokoliert Kernel-Meldungen in /var/adm/* bzw. /var/log/*;
Protokoliert Systemmeldungen in /var/adm/* bzw. /var/log/*; gesteuert über /etc/syslog.conf;
Druckerspooler;
der Samba-Daemon (zusätzlich muß noch der nmbd-Daemon gestartet werden), um Verzeichnisse und Drucker für Windows-Rechner verfügbar zu machen; die Konfigurationsdatei lautet /etc/smb.conf oder /etc/samba/smb.conf.
Kernel-Daemon zum automatischen Laden von Modulen; Modulkonfiguration über /etc/modules.conf
Nameserver-Daemon des BIND-Paketes3);
Daemon des DHCP-Servers (DHCP = Dynamic Host Configuration Protocol), Konfiguration über /etc/dhcpd.conf;
Server-Programm für den eMail-Verkehr, der auch als Daemon gestartet werden kann; sendmail ist der am weitesten verbreitete Mail-Server und auf vielen UNIX- und Linux-Rechnern implementiert;
Daemon des Web-Servers, am weitesten verbreitet ist der Apache Web-Server, den es für (fast) alle Rechner-Plattformen konstenlos erhältlich ist;
Im Laufe der Linux-Systemadministration werden Sie irgendwann vor dem Problem stehen, Pakete, die Sie aus dem Internet heruntergeladen haben oder auf irgendeiner CD-ROM finden, zu installieren. Dabei kann es sich um Dateien mit dem Dateisuffix .rpm, .deb oder .tar.gz bzw. .tgz handeln. Das Paketformat rpm wurde von RedHat entwickelt und wird unter anderem von den Distributionen RedHat, Caldera, DLD und SuSE verwendet, die Distribution Debian benutzt das Paketformat deb. Beide Paketformat haben einige Vorteile gegenüber .tar.gz bzw .tgz. Unter anderem lösen sie Paketabhängigkeiten auf, z.B. wird für Paket x auch noch das Paket y zur Ausführung benötigt. Dateien können bei diesen Formaten Paketen zugeordnet werden und Updates sind unproblematischer, da Informationen über den Zweck der Dateien im Paket gespeichert werden und Konfigurationsdateien nicht ohne weitere überschrieben werden. Vorteile werden wie immer mit Nachteilen erkauft. So sind diese Paketformate nicht so portabel wie tar.gz bzw. .tgz, zum anderen wird der rpm Paket-Standard ständig weiterentwickelt und die einzelnen Versionen sind teilweise inkompatibel, so daß Sie möglicherweise zuerst die richtige rpm-Version herunterladen müssen.
Eigentlich jede Distribution hat ein entsprechendes Tool, um rpm- bzw. deb-Pakete zu installieren. Bei RedHat und Caldera ist es das graphische Programm glint, unter DLD viper, bei SuSE YaST, bei Debian dselect und dpkg und bei Gentoo emerge. Dazu gibt es noch die distributionsunabhängigen Tools wie xrpm, kpackage, kPackViewer…
Bei der Installation von externen rpm-Paketen, also solche, die nicht von der laufenden Distribution stammen, sollte man vorsichtig vorgehen. Wird zum Beispiel ein aktuelleres SysV-Paket einer RedHat-Distribution über eine SuSE-Distribution installiert, ist das System nicht mehr lauffähig. Aus diesem Grund sollten nur rpm-Pakete nachträglich installiert werden, die zur Distribution gehören.
Der Name eines rpm-Paketes gibt schon viele Informationen über das Paket an sich aus. Sie sind nach dem Schema
<name>-<versions-nr.>-<rpm-release-nr>-<rechner-architektur>.rpm
bezeichnet. Dabei gibt eine rpm-Release-Nummer größer 1 eine Änderung der Zusammenstellung an. Für <rechner-architektur> werden ihnen am häufigsten die Bezeichnungen i386 und src begegnen. i386 bezeichnet ein Paket mit Binärdateien für die Intel-Architektur und src Quellcodepakete. Über alle installierten Binärpakete wird eine Datenbank verwaltet, sie befindet sich im Verzeichnis /var/lib/rpm, vor allem, um Paketabhängigkeiten zu überprüfen und aufzulösen.
Installiert wird ein Paket über die Befehlsfolge:
rpm -i [optionen] dateiname
Die Parameter -test und -root verzeichnis können mit angegeben werden, um eine Dummyausführung (Testausführung ohne Änderungen) bzw. den Installationsort zu verändern. Soll der Installationsort eines Quellcodepaketes verändert werden, muß die Datei /etc/rpmrc modifiziert werden.
Eine Aktualisierung eines installierten Paketes erreicht man durch
rpm -u [optionen] dateiname
und die Entfernung über
rpm -e [optionen] paketname
Manchmal ist es auch nötig festzustellen, zu welchem Paket eine Datei gehört. Hierfür kann die Befehlsfolge
rpm -qf Dateipfad und -name
verwendet werden. Als Dateiname kann bei der Installation und Aktualisierung auch der komplette Pfad zu einem FTP-Server angegeben werden. Für weitere Möglichkeiten mit dem rpm-Paket möchte ich auf die Online-Dokumentation verweisen. Die oben genannten Tools können häufig diese Aufgabe erledigen und erleichtern die Installation und Wartung von rpm-Paketen.
Sollten Sie Software aus dem Internet herunterladen, wird Ihnen am häufigsten dieses Paketformat begegnen. Hierbei handelt es sich um tar-Achive (steht für Tape Archive) die mit gzip komprimiert wurden. Dies ist deswegen nötig, da tar nicht selber komprimieren kann. Weitere Komprimierungsverfahren, die zusammen mit tar benutzt werden, sind compress (Endung .Z) und bzip2 (Endung .bz2).
Den Inhalt eines gezipten Tar-Archives kann mit
tar -tzf <archivname>
angezeigt werden. Relativ zum aktuellen Verzeichnis wird mittels
tar -xzf <archivname>
entpackt und über
tar -xzf <archivname> -C <verzeichnis>
in das angegebene Verzeichnis. Soll nur ein Teil der Dateien, z.B. alle .tex-Dateien, extrahiert werden, kann dies nach dem Paketnamen angegeben werden.
tar -xzf <archivname> "*.tex"
Sollte es sich um ein mit compress gepacktes Archiv handeln, muß der Options-Parameter z durch Z und bei einer bzip2-Komprimierung z durch j ersetzt werden. Natürlich ist es auch möglich, die beiden Schritte (Dekomprimierung und Archivextrahierung) nacheinander durchzuführen. Eine solche Befehlsfolge lautet dann für ein gzip-komprimiertes Archiv:
gzip -d <archivname>.tar.gz tar -xvf <archivname>.tar
Die Option v gibt jede extrahierte Datei mit Pfadnamen zusätzlich aus.
Natürlich gibt es auch graphische Paketmanager, zwei Vertreter sind z.B. ARK und FileRoller, die nachfolgend abgebildet sind.
Was aber nun tun, wenn sich in einem Archiv nur der Quellcode des Programmes befindet? Der erste Anlaufpunkt sind die (hoffentlich vorhandenen) Hilfedateien, meist readme und install - hier finden Sie Hinweise, die zum erfolgreichen kompilieren nötig sind und mögliche Fehlerquellen aufzeigen. Im klassischen Fall müßte nun das Makefile an das eigene System angepaßt werden, die Pfade zu den Bibliotheken und Include-Dateien… Jedoch werden immer mehr Quellcode-Pakete mit einem Shell-Script mitgeliefert, das die Anpassungen für Sie vornimmt. Diese von autoconf erzeugten Skripte werden im allgemeinen mit
./configure
aufgerufen. Die Angabe von ./ ist wichtig, damit auch wirklich das Shellskript im aktuellen Verzeichnis aufgerufen wird. Geprüft werden die Voraussetzungen für die erfolgreiche Kompilierung des Paketes und die Pfade angepaßt. Sollten Komponenten fehlen, z.B. eine Include-Datei, wird das in einer Fehlermeldung ausgegeben. Dazu später mehr.
Wird das Konfigurations-Skript erfolgreich durchlaufen, kann durch die Angabe des Befehls make in dem Verzeichnis, wo sich die Datei Makefile befindet, die Kompilierung begonnen werden. Danach kann häufig mit make install oder einem speziellen Installations-Skript die Installation abgeschlossen werden, indem die Dateien in die richtigen Verzeichnisse verschoben werden. Ansonsten bleibt Ihnen nichts weiter übrig, als die Dateien per Hand in die richtigen Verzeichnisse zu kopieren und gegebenenfalls die Dateiberechtigungen zu verändern.
Doch alle Theorie kann in der Praxis versagen. Häufige Fehlermeldungen sind fehlende Bibliotheken oder falsche Versionen derselben. Beliebte Probleme gibt es neben den KDE-Bibliotheken mit den libc-Versionen. Sollte Ihr System mit dem egcs-Compiler arbeiten (Standard bei alten SuSE-Distributionen), kommt es zur Meldung configure: error: installation or configuration problem: C++ compiler cannot create executables, wenn das Paket gpp nicht installiert ist. Meldet configure, das eine benötigte Bibliothek fehlt und mit einer Fehlermeldung abbricht, hilft nur die Installation der fehlenden Bestandteile bzw., falls die Bibliothek vorhanden ist, diese explizit mit anzugeben oder die Pfade richtig zu setzen. Sollte es mit der libc6 bzw. dem Äquivalent glibc2 Probleme geben, ist die Glibc2-HOWTO zu empfehlen.
Nach der Installation der fehlenden Bestandteile, dem ./configure-Aufruf und dem anschließenden make wollen Sie nun das soeben erzeugte Programm starten. Nichts war mit der Freude, wenn sie die folgende beispielhafte Fehlermeldung beim Starten des Programmes xfoo erhalten
xfoo: can't load library /lib/libdl.so.1
Bei der Kontrolle des Verzeichnisses /lib fällt Ihnen auf, daß sie die Bibliothek libdl.so.1.9 besitzten, jedoch nicht libdl.so.1. Nun müssen Sie sich aber nicht diese Bibliothek besorgen, sondern können mit ln -s libdl.so.1 libdl.so.1.9 einen symbolischen Link auf die Version 1.9 setzen, da diese abwärtskompatibel zur Version 1.0 sein sollte. Ein praktisches Beispiel bietet die SuSE 6.3-Distribution. Hier funktioniert das Acrobat-PlugIn in Netscape nicht, da die Bibliothek libc.so.5 fehlt. Ein symbolischer Link auf die Version 6 bringt hier Abhilfe.
Linux währe nicht das, was es ist, wenn es nicht den Quellcode der Kernels mitliefern würde. Im Grunde gibt es zwei Gründe, den Kernel neu zu kompilieren:
Die Linux-Kernelquellen werden im Verzeichnis /usr/src installiert. Hier finden Sie normalerweise ein Verzeichnis linux und z.B. linux-2.6.14. Dabei ist das Verzeichnis linux ein Link auf linux-2.6.14. Bei SuSE ist zu beachten, daß die Kernel-Quellen standardmäßig nicht mit installiert werden, sondern explizit ausgewählt werden müssen (ansonsten werden nur die Include-Dateien installiert, die für die Kompilierung anderer Programmpakete benötigt werden).
Das Ziel einer Neukompilierung ist die Erstellung eines möglichst kompakten Kernels, der exakt auf Ihre Hardware zugeschnitten ist. Was möchten Sie beispielsweise mit einer SCSI-Unterstützung im Kernel, wenn Sie kein SCSI-System besitzten? Hierfür brauchen Sie aber keine Programmierkenntnisse, sondern müssen nur Fragen zu Ihrer Hardware beantworten und die benötigten Software-Schnittstellen kennen. Ein Risiko in der Systemsicherheit stellt die Neukompilierung des Kernels auch nicht dar. Durch einen kompakteren Kernel, der auf das jeweilige System zugeschnitten ist, steigt die Systemperformace und die Systemresourcen werden geschont. Informationen und die Kernel-Dokumentation finden Sie in /usr/src/linux/README und im Verzeichnis /usr/src/linux/Documentation.
Während der Konfiguration des Kernels stehen Sie häufiger vor der Frage, den betreffenden Baustein direkt in den Kernel einzufügen oder als Modul verfügbar zu halten. Module sind sozusagen Kernel-Treiber, die dynamisch zur Laufzeit hinzugeladen oder entladen werden können. Dadurch können nicht so häufig gebrauchte Hard- und Software-Schnittstellen dann geladen werden, wenn sie gebraucht werden und belasten ansonsten nicht die Systemresourcen. Hardware-Hersteller können dann auch Module zur Unterstützung Ihrer Hardware zur Verfügung stellen, ohne den Quellcode freigeben zu müssen.
Diese Kernel-Module werden normalerweise vollautomatisch bei Bedarf durch den Kernel-Daemon kerneld hinzugeladen und Abhängigkeiten zwischen den Modulen aufgelöst (Modul x benötigt Modul y, was dann automatisch hinzugeladen wird). kerneld liest hierfür die Modulabhängigkeitsdatei (siehe unten) und die optionale Steuerungsdatei /etc/modules.conf. /etc/modules.conf kann unter anderem dafür verwendet werden, Optionen an das Modul anzugeben. Z.B. wenn zwei Drucker-Ports vorhanden sind, muß dieses in dieser Datei bekannt gegeben werden, in dem die zweite E/A-Adresse angegeben wird. Natürlich besteht auch die Möglichkeit, manuell in die Modulverwaltung einzugreifen.
Der Befehl
insmod modulname [option=wert ]
integriert das angegebene Modul in den Kernel. Dabei wird der Modulname ohne Pfadangabe und ohne Suffix angegeben. insmod sucht nach dem Modul im Verzeichnis /lib/modules/<kernel-version>/ und kann dem Modul diverse Optionen übergeben. Der Aufruf von
modprobe modulname [option=wert ]
funktioniert ähnlich wie insmod, jedoch werden die Abhängigkeiten des Moduls getestet. Voraussetzung hierfür ist, daß vorher mittels
depmod -a
die Abhängigkeitsdatei /lib/modules/<kernel-version>/modules.dep erstellt wurde. Sollte diese Abhängigkeitsdatei beim Starten des Linux-System fehlen, wird sie automatisch angelegt. Kernel-Module werden wieder entladen mit
rmmod modulname
und eine Liste aller geladenen Module mit den Abhängigkeiten kann mit
lsmod
angezeigt werden.
Der Kernel wird über die Datei .config im Kernel-Basisverzeichnis konfiguriert. Jedoch wird diese Datei nicht manuell konfiguriert, sondern mit einem Konfigurationstool. Hierfür stehen drei verschiedene zur Verfügung, die folgendermaßen aufgerufen werden:
root@master # cd /usr/src/linux root@master # make config oder root@master # make menuconfig oder root@master # make xconfig
Das Tool make config weist am wenigsten Komfort auf, hier muß eine endlose Liste von Fragen der Reihe nach beantwortet werden. Wesentlich komfortabler ist make menuconfig, ein im Text-Modus grafisches Konfigurationstool (die ncurses-Bibliothek muß installiert sein). Ein unter dem X-Server laufendes Konfigurationsprogramm ist make xconfig (bei älteren Kernel muß Tcl/Tk, bei neueren QT installiert sein). In den beiden nachfolgenden Abbildungen sind die beiden grafischen Konfigurationstools dargestellt. Sie bieten zusätzlich eine Hilfe zu den einzelnen Punkten an. Weitere Informationen zu den einzelnen Optionen liefert das Distributions-Handbuch.
Nachdem die Konfiguration abgeschlossen ist, kann nun der Kernel kompiliert werden. Sollten Sie das erste mal einen Kernel auf Ihrem System kompilieren, müssen bei älteren Kerneln zuerst die Abhängigkeiten überprüft werden, bei neueren Kernel geschieht dies automatisch. Dies geschieht über (im Kernelquellcode-Basisverzeichnis):
root@master # make dep
Anschließend können die alten Objekt-Dateien gelöscht werden (nicht immer notwendig), der Kernel kompiliert, die Module kompiliert und installiert werden. Dies wird erreicht über:
root@master # make clean # alte Objekt-Dateien löschen root@master # make bzImage # Kernel kompilieren root@master # make modules # Module kompilieren root@master # make modules_install # Module installieren
Sie können auch alle Schritte in eine Befehlszeile schreiben:
root@make # make dep clean bzImage modules modules_install
Vor allem bei der ersten Kompilierung, nach einem make clean und je nach Umfang der Konfiguration ist Ihr Rechner einige Zeit beschäftigt. Sie können in der Zwischenzeit, da Linux ja ein Multitasking-System ist, auf einer anderen Konsole weiterarbeiten.
Den neuen Kernel bzImage finden Sie im Verzeichnis /usr/src/linux/arch/i386/boot/, der nun noch installiert werden muß. Zur Sicherheit sollte zuvor der alte Kernel und die Datei System.map gesichert werden. Z.B. mit
root@master # mv /boot/vmlinuz /boot/vmlinuz.bak root@master # mv /boot/System.map /boot/System.map.bak
Anschließend kann der Kernel und die Datei System.map ins Verzeichnis /boot kopiert werden:
root@master # cp ./System.map /boot root@master # cp ./arch/i386/boot/bzImage /boot/vmlinuz
Anstatt dies zu Fuß zu machen, kann dies auch automatisch erfolgen. Im Kernel-Quellverzeichnis wird
root@master # make bzlilo
aufgerufen und kopiert den Kernel und die System.map Datei nach /boot und sichert vorher den aktuellen Kernel und System.map unter /boot/vmlinuz.old und /boot/System.old. Anschließend wird lilo aufgerufen, um den Kernel für den nächsten Systemstart zur Verfügung zu stellen.
Werden die Schritte nicht über make durchgeführt, so muß noch lilo neu installiert werden durch den Aufruf
root@master # lilo
Generell sollte man lilo so konfigurieren, daß beide Kernel gestartet werden können für den Fall, daß der neu kompilierte Kernel nicht lauffähig ist. Sollten Sie loadlin verwenden, muß der Kernel in ein von DOS lesbare Partition oder Diskette kopiert werden und die loadlin-Konfigurationsdateien entsprechend modifiziert werden.
xdvi und kdvi, die DVI-Dateien anzeigen können sowie Programme wie ghostview, gs, kghostview … um PostScript-Dateien anzuzeigen.rechnername:/verzeichnis