08.01.2013 Aufrufe

Linux - Handbuch und Projektdokumentation -

Linux - Handbuch und Projektdokumentation -

Linux - Handbuch und Projektdokumentation -

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Linux</strong><br />

- <strong>Handbuch</strong> <strong>und</strong> <strong>Projektdokumentation</strong> -<br />

Tobias Mucke Michael Petter<br />

Ausgabe 0.5 vom 2. März 2003<br />

Projekthosting durch Sourceforge


Die Informationen in diesem Buch werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht.<br />

Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Fast alle Hardware- <strong>und</strong> Softwarebezeichnungen,<br />

die in diesem Buch erwähnt werden, sind gleichzeitig eingetragene Warenzeichen oder<br />

sollten als solche betrachtet werden.<br />

Bei der Zusammenstellung der Texte <strong>und</strong> Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem<br />

können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber <strong>und</strong> Autoren können für fehlerhafte<br />

Angaben <strong>und</strong> deren Folgen weder juristische Verantwortung noch irgendeine Haftung übernehmen.<br />

Für Verbesserungsvorschläge <strong>und</strong> Hinweise auf Fehler sind Ihnen der Verlag, der Herausgeber <strong>und</strong> die<br />

Autoren sehr dankbar.<br />

Autoren:<br />

Mucke, Tobias tobias.mucke@mytux.de<br />

Petter, Michael michael.petter@web.de<br />

Schneider, Andreas emailadresse<br />

Korrekturleser:<br />

Fehse, Mandy<br />

Dieses Buch unterliegt den Gr<strong>und</strong>gedanken der GPL <strong>und</strong> wird ausschließlich mit Hilfe des Satzsystems<br />

Latex unter <strong>Linux</strong> geschrieben. Die Veröffentlichung erfolgt als plattformunabhängiges PDF.


Dieses Buch ist allen gewidmet, die <strong>Linux</strong> unterstützen, einsetzen <strong>und</strong> weiter<br />

entwickeln.


Inhaltsverzeichnis<br />

1. Einleitung 19<br />

1.1. Anmerkungen der Autoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

1.2. Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

1.3. Lizenzmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

1.4. Kontakt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

1.5. Arbeitsgliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

I. <strong>Linux</strong> für Anwender<br />

- Einsatz auf dem Desktop - 25<br />

2. Gr<strong>und</strong>wissen 27<br />

2.1. Personal Computer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

2.1.1. Schichtenmodell eines Computersystems . . . . . . . . . . . . . . . . . . . . . . . 27<br />

2.2. Betriebssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

2.2.1. Betriebssysteme im Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

2.2.2. Betriebssystem - Geschichte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

2.2.3. Aufgaben des Betriebssystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

2.2.4. Einsatzgebiete <strong>und</strong> Zukunft von <strong>Linux</strong> . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

2.3. <strong>Linux</strong> - Merkmale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

2.3.1. OpenSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

2.3.2. Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

2.3.3. Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

2.3.4. Plattformvielfalt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

2.3.5. Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

3. Installation 33<br />

3.1. Systemanforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

3.2. Boot- <strong>und</strong> Installationsmedien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

3.3. Vorbereitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

3.4. Installationsschritte <strong>und</strong> Einstellmöglichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

3.4.1. Systemboot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

3.4.2. Kernel <strong>und</strong> Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

3.4.3. YaST2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

3.4.4. Installationsvorgang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

4. Erste Schritte 41<br />

4.1. <strong>Linux</strong> starten <strong>und</strong> beenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

4.1.1. Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

5


Inhaltsverzeichnis<br />

4.1.2. Shutdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

4.2. Tastatur <strong>und</strong> Maus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

4.3. X Window System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

4.4. Konsole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

4.5. Systemeinstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

5. Dokumentation 45<br />

5.1. Manual-Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />

5.2. Info-Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

5.3. FAQs - Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

5.4. HOWTOs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

5.5. LDP - <strong>Linux</strong> Documentation Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

5.6. Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

5.7. KDE-Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

5.8. Quellen im Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

5.9. Software-Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

6. X-Window-System 49<br />

6.1. Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

6.1.1. X-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

6.1.2. X-Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

6.1.3. X-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

6.1.4. Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

6.2. Grafischer Login - Anmeldung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

6.2.1. Xdm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

6.2.2. Kdm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

6.2.3. Gdm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

6.3. Windowmanager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

6.3.1. KDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

6.3.2. Gnome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

6.3.3. Enlightenment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

6.4. X im Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

6.4.1. X-Forwarding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

6.4.2. VNC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

6.5. Wichtige Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

6.6. Truetype Schriftarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

6.6.1. Truetype <strong>und</strong> X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

6.6.2. Antialiasing überprüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />

6.6.3. Open Office <strong>und</strong> Truetype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />

6.6.4. Truetypeschriften in Mozilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />

7. Kommandozeile 57<br />

7.1. Editoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />

7.1.1. vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />

7.1.2. emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />

7.2. Dateimanager - Midnight Commander . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

7.2.1. Bedienung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

7.2.2. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />

6


Inhaltsverzeichnis<br />

7.2.3. Ausführung typischer Arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />

7.3. Bash - Bourne Again Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />

7.3.1. Shell - Benutzerschnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />

7.3.2. Umgebungsvariablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />

7.3.3. Basiskonfiguration - Tastenbelegung <strong>und</strong> Prompt . . . . . . . . . . . . . . . . . . . 64<br />

7.3.4. Kommandoeingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

7.3.5. Wichtige Tasten <strong>und</strong> Tastenkombinationen . . . . . . . . . . . . . . . . . . . . . . 64<br />

7.3.6. Alias-Abkürzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

7.3.7. Ein- <strong>und</strong> Ausgabeumleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

7.3.8. Kommandoausführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66<br />

7.3.9. Substitutionsmechanismen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

7.4. Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

7.4.1. Syntax von Regulären Ausdrücken . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

7.4.2. grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

7.4.3. Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

8. Standards 71<br />

8.1. LSB - <strong>Linux</strong> Standard Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

8.2. TDS - TEX Directory Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

8.3. FHS - Filesystem Hierarchy Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

9. Dateisystem 75<br />

9.1. Gr<strong>und</strong>lagen der Dateiverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

9.1.1. Dateitypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

9.1.2. Pfadangaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

9.1.3. Dateien <strong>und</strong> Verzeichnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />

9.1.4. Gerätedateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />

9.1.5. Jokerzeichen <strong>und</strong> Platzhalter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

9.1.6. Versteckte Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

9.1.7. Verzeichnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

9.2. Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />

9.2.1. Besitzverhältnisse <strong>und</strong> Zugriffsrechte . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />

9.2.2. Zugriffsrechte setzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />

9.2.3. Zuweisung eines Besitzers oder einer Gruppe . . . . . . . . . . . . . . . . . . . . . 81<br />

9.2.4. Verwaltung von Gruppen <strong>und</strong> Benutzern . . . . . . . . . . . . . . . . . . . . . . . . 81<br />

9.2.5. Feste <strong>und</strong> symbolische Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />

9.2.6. Links auf Programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />

9.3. Partitionen <strong>und</strong> Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

9.3.1. Zugriff auf mehrere Festplatten <strong>und</strong> Partitionen . . . . . . . . . . . . . . . . . . . . 83<br />

9.3.2. Zugriff auf CD-ROM Laufwerke . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84<br />

9.3.3. Zugriff auf Diskettenlaufwerke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84<br />

9.4. Dateisystemtypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84<br />

9.4.1. Ein- <strong>und</strong> Aushängen von Dateisystemen . . . . . . . . . . . . . . . . . . . . . . . . 85<br />

9.4.2. Datei /etc/fstab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />

9.4.3. Datei /etc/mtab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

9.5. Interna des Dateisystems ext2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

9.5.1. Aufbau des ext2-Dateisystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

9.5.2. Dateien <strong>und</strong> Verzeichnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

7


Inhaltsverzeichnis<br />

9.5.3. I-Nodes (Informationsknoten) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89<br />

9.6. Interna anderer Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89<br />

10. Softwareinstallation 91<br />

10.1. RPMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91<br />

10.2. TAR.GZs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91<br />

10.2.1. Kompilierte Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91<br />

10.2.2. Quellcode Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92<br />

II. <strong>Linux</strong> für Administratoren<br />

- Einsatz auf dem Server - 95<br />

11. Bootkonzept <strong>und</strong> -manager 97<br />

11.1. Bootvorgang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97<br />

11.1.1. BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97<br />

11.1.2. CMOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />

11.1.3. MBR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />

11.1.4. LILO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />

11.1.5. Grub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />

11.1.6. Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />

11.1.7. Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />

11.2. Systemstart-V-Init-Prozess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />

11.2.1. Programm init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101<br />

11.2.2. Runlevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101<br />

11.2.3. init-Skripten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102<br />

11.3. Bootkonzepte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102<br />

11.4. LILO - <strong>Linux</strong>-Bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103<br />

11.4.1. Andere Betriebssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104<br />

11.4.2. LILO deinstallieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104<br />

11.5. Grafischer Boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104<br />

12. RPM - RedHat Paket Manager 107<br />

12.1. Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107<br />

12.1.1. Namenskonvention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108<br />

12.2. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108<br />

12.3. Abfragen der Paketdatenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108<br />

12.4. Abhängigkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110<br />

12.5. Erstellung eigener Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110<br />

13. Kernel <strong>und</strong> Kernelmodule 111<br />

13.1. Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111<br />

13.1.1. Aufgabenteilung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111<br />

13.1.2. Gerätedateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112<br />

13.1.3. Konzeption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112<br />

13.1.4. Versionsnummern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112<br />

13.2. Kompilierung <strong>und</strong> Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113<br />

13.2.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113<br />

8


Inhaltsverzeichnis<br />

13.2.2. Installation der Kernel-Quellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113<br />

13.2.3. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113<br />

13.2.4. Kompilierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114<br />

13.2.5. Installation des Kernels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115<br />

13.2.6. Initial Ramdisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115<br />

13.2.7. Systemtest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116<br />

13.3. Verwaltung der Kernelmodule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116<br />

13.3.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116<br />

13.3.2. Modulklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116<br />

13.3.3. Automatismen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117<br />

13.3.4. Selbstverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117<br />

13.3.5. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118<br />

13.3.6. Kernelmodule von Drittanbietern . . . . . . . . . . . . . . . . . . . . . . . . . . . 118<br />

14. Hardware 121<br />

14.1. Arbeitsspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121<br />

14.2. Festplatten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121<br />

14.3. Hotplug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122<br />

14.3.1. Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122<br />

14.3.2. Shellskripte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122<br />

14.3.3. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />

14.3.4. Logdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />

14.3.5. USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />

14.3.6. PCI <strong>und</strong> PCMCIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124<br />

14.3.7. Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124<br />

14.3.8. Firewire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124<br />

14.4. PCMCIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124<br />

14.4.1. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124<br />

14.4.2. Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125<br />

14.4.3. Kommandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125<br />

14.4.4. Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125<br />

14.4.5. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125<br />

14.5. Hardware Erkennung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125<br />

14.5.1. hwinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125<br />

14.5.2. lspci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />

14.6. Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />

14.6.1. SCPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />

14.6.2. Schemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />

14.7. PCMCIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />

14.7.1. Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />

14.7.2. “Kernel” PCMCIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />

14.7.3. “External” PCMCIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />

14.7.4. Kartenkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />

14.7.5. Beispieleinrichtung: PCMCIA-Netzwerkkarten . . . . . . . . . . . . . . . . . . . . 128<br />

14.7.6. Compact Flash Adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />

14.8. APM - Advanced Power Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />

14.8.1. Suspend Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />

14.8.2. Standby Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />

9


Inhaltsverzeichnis<br />

14.8.3. Batterie-Füllstand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />

14.9. IDE- <strong>und</strong> ATAPI Geräte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />

14.9.1. Informationen bezüglich IDE Geräte . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />

14.9.2. Geschwindigkeitstests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />

14.9.3. PIO-Mode <strong>und</strong> (U)DMA-Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />

14.10.Netzwerkkarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />

14.10.1.manuelle Einrichtung von Netzwerkkarten . . . . . . . . . . . . . . . . . . . . . . 130<br />

14.10.2.Einrichtung der Netzwerkkarte über die Konfigurationsdateien . . . . . . . . . . . . 131<br />

14.10.3.WLAN Karten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131<br />

14.11.ALSA - Advanced <strong>Linux</strong> So<strong>und</strong> Architecture . . . . . . . . . . . . . . . . . . . . . . . . . 132<br />

14.12.Grafikkarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132<br />

15. LVM - Logical Volume Manager 135<br />

15.1. Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135<br />

15.1.1. Funktion <strong>und</strong> Begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135<br />

15.1.2. Einsatzgebiete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136<br />

15.1.3. Verwaltung <strong>und</strong> Beschränkungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 136<br />

15.1.4. Abgrenzung von RAID Systemen . . . . . . . . . . . . . . . . . . . . . . . . . . . 137<br />

15.2. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137<br />

15.2.1. Vorgehensweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137<br />

15.2.2. Physical Volumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137<br />

15.2.3. Volume Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138<br />

15.2.4. Logical Volume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138<br />

15.2.5. Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138<br />

15.3. Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138<br />

16. Administration 141<br />

16.1. Systemverwalter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141<br />

16.2. Login- <strong>und</strong> Systemsicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141<br />

16.2.1. Name Service Cache Daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141<br />

16.3. Wichtige Systemdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142<br />

16.4. Konfigurationstools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142<br />

16.4.1. YaST2 Kontrollzentrum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142<br />

16.4.2. Sax2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142<br />

16.4.3. KDE Kontrollzentrum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143<br />

16.4.4. Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143<br />

16.5. Benutzerverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144<br />

16.5.1. Befehle zur Benutzerverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145<br />

16.5.2. Gruppenverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147<br />

16.5.3. Befehle zur Gruppenverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147<br />

16.5.4. Passwortverwaltung <strong>und</strong> -alterung . . . . . . . . . . . . . . . . . . . . . . . . . . . 148<br />

16.6. Drucker - Installation <strong>und</strong> Verwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149<br />

16.6.1. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149<br />

16.6.2. Warteschlangen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150<br />

16.6.3. Überwachung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151<br />

16.6.4. Ausgabesteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153<br />

16.7. Umgang mit Dateisystemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154<br />

16.7.1. Partitionierung einer Festplatte mit fdisk . . . . . . . . . . . . . . . . . . . . . . . . 154<br />

10


Inhaltsverzeichnis<br />

16.7.2. Überprüfen des Dateisystems mit fsck . . . . . . . . . . . . . . . . . . . . . . . . . 154<br />

16.7.3. Wechsel von ext2 von ext3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156<br />

16.8. Syslog-Daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156<br />

16.9. Cron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156<br />

16.10.Logdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157<br />

17. Prozesskonzept 159<br />

17.1. Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159<br />

17.1.1. Definition des Begriffs “Prozess“ . . . . . . . . . . . . . . . . . . . . . . . . . . . 159<br />

17.1.2. Prozesszustände . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160<br />

17.1.3. Prozesskontrollblock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160<br />

17.1.4. Entstehung einer Prozesshierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . 161<br />

17.1.5. Prozessoperationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161<br />

17.2. Prozesse unter <strong>Linux</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />

17.2.1. Prozesshierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />

17.2.2. Prozesskenndaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />

17.2.3. Prozesskommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164<br />

17.3. Kommandos zur Prozessverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165<br />

17.3.1. Befehle zur Prozessansicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165<br />

17.3.2. Prozessterminierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167<br />

17.3.3. Vorder- <strong>und</strong> Hintergr<strong>und</strong>prozesse . . . . . . . . . . . . . . . . . . . . . . . . . . . 167<br />

17.4. Zeitgesteuerte Prozessausführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168<br />

17.4.1. atd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168<br />

17.4.2. batch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169<br />

18. Netzwerk 171<br />

18.1. Gr<strong>und</strong>begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172<br />

18.2. Gr<strong>und</strong>konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172<br />

18.2.1. YaST2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172<br />

18.2.2. Konfigurationsdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174<br />

18.2.3. Startup - Skripten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175<br />

18.3. Häufige Netzwerkbefehle <strong>und</strong> Fehlersuche . . . . . . . . . . . . . . . . . . . . . . . . . . . 175<br />

18.3.1. route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175<br />

18.3.2. nslookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176<br />

18.3.3. ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177<br />

18.3.4. traceroute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177<br />

18.3.5. rusers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177<br />

18.3.6. rup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177<br />

18.3.7. rlogin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179<br />

18.3.8. rlogin/rsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179<br />

18.3.9. rcp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179<br />

18.3.10.slogin/ssh/scp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179<br />

18.4. TCP / IP Protokolle <strong>und</strong> darauf aufsetzende Dienste . . . . . . . . . . . . . . . . . . . . . . 181<br />

18.4.1. Dienst telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181<br />

18.4.2. Dienst ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181<br />

18.4.3. Ausführen von X-Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182<br />

19. Shellprogrammierung 185<br />

11


Inhaltsverzeichnis<br />

19.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185<br />

19.2. Shell - Allgemeinwissen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185<br />

19.3. Shellskripte - Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185<br />

19.4. Skriptsprache - Bestandteile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186<br />

19.4.1. Festlegung des Shell-Interpreters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />

19.4.2. Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />

19.4.3. einfache Kommandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />

19.4.4. Übergabeparameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />

19.4.5. Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />

19.4.6. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188<br />

19.5. Zeichenkettenzerlegung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189<br />

19.6. Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189<br />

19.7. Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190<br />

20. VFS - Virtual File System <strong>und</strong> andere Dateisysteme 193<br />

20.1. Procfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193<br />

20.1.1. Prozessinformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194<br />

20.2. Oberpunkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195<br />

20.2.1. Unterpunkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195<br />

20.2.2. Unterpunkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195<br />

20.3. Oberpunkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195<br />

20.4. Kerneldaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196<br />

20.5. IDE Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197<br />

20.6. SCSI Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198<br />

20.7. Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199<br />

20.8. Parallelport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199<br />

20.9. Serielle Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199<br />

20.10.Devfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200<br />

20.10.1.Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200<br />

20.11.Reiserfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201<br />

20.12.Codafs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201<br />

20.12.1.Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201<br />

20.12.2.Einbindung in den Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202<br />

21. Cluster 203<br />

21.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203<br />

21.2. Gr<strong>und</strong>begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203<br />

21.2.1. Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203<br />

21.2.2. Weitere Gr<strong>und</strong>begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />

21.3. Hochverfügbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />

21.3.1. Verfügbarkeit <strong>und</strong> Ausfallszenarien . . . . . . . . . . . . . . . . . . . . . . . . . . 205<br />

21.3.2. Kosten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205<br />

21.3.3. Single Point of Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205<br />

21.3.4. Fehlertolerante Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206<br />

21.3.5. Aufwandsabschätzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206<br />

21.3.6. Datenbestände <strong>und</strong> Filesysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206<br />

21.3.7. Failover Strategien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206<br />

21.3.8. Hardware Fehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207<br />

12


Inhaltsverzeichnis<br />

21.4. Heartbeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207<br />

21.4.1. Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207<br />

21.4.2. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />

21.4.3. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />

21.4.4. Failover-Szenarien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />

21.4.5. Monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />

21.4.6. Warnungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />

21.5. Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210<br />

III. <strong>Linux</strong> für Netzwerker<br />

- Einsatz in heterogenen Netzwerken - 211<br />

22. Netzwerk - Gr<strong>und</strong>lagen 213<br />

23. SNMP - Simple Network Management Protocol 215<br />

24. NTP - Network Time Protocol 217<br />

24.1. Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217<br />

24.1.1. Öffentliche Zeitserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217<br />

24.2. Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218<br />

24.3. Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218<br />

24.3.1. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218<br />

24.4. Zeitanpassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219<br />

25. DNS - Domain Name System 221<br />

26. DHCP - Dynamic Host Configuration Protocol 223<br />

26.1. Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223<br />

26.2. DHCP-Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224<br />

26.2.1. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224<br />

26.3. DHCP-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225<br />

26.3.1. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225<br />

26.3.2. Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225<br />

26.3.3. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226<br />

26.3.4. Protokolldatei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228<br />

26.3.5. Integration System V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229<br />

27. NFS - Network File System 231<br />

27.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231<br />

27.2. Installation der Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231<br />

27.3. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231<br />

27.4. Starten der Dämonen <strong>und</strong> Statusabfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232<br />

27.5. Konfiguration der Datei /etc/exports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232<br />

27.6. Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233<br />

27.7. Kommandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233<br />

27.8. Stolpersteine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233<br />

27.9. Fehlerbehebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233<br />

13


Inhaltsverzeichnis<br />

28. NIS - Network Information Services 237<br />

28.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237<br />

28.2. Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237<br />

28.3. Funktion der Einzelkomponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />

28.3.1. Master-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />

28.3.2. Slave-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />

28.3.3. Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />

28.4. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />

28.5. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239<br />

28.5.1. Master-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239<br />

28.5.2. Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240<br />

28.5.3. Erstellen der Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240<br />

28.5.4. Slave-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241<br />

28.5.5. Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241<br />

29. SMB - Samba File Server <strong>und</strong> Primary Domain Controller 243<br />

29.1. Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243<br />

29.2. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243<br />

29.3. Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244<br />

29.3.1. Samba Web Administration Tool (SWAT) . . . . . . . . . . . . . . . . . . . . . . . 244<br />

29.3.2. Globale Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245<br />

29.3.3. Verzeichnis-Freigaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245<br />

29.3.4. Drucker-Freigaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248<br />

29.3.5. Aufsetzen eines Primary Domain Controllers . . . . . . . . . . . . . . . . . . . . . 248<br />

29.3.6. Benutzerverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248<br />

29.3.7. Passwort-Problematik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249<br />

29.4. Samba-Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250<br />

29.5. Dokumentation <strong>und</strong> Quellcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250<br />

30. CVS - Concurrent Version System 251<br />

30.1. Installation der Softwarepakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251<br />

30.2. Vorbereitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251<br />

30.2.1. Gruppenverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251<br />

30.2.2. Einrichtung des Repositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252<br />

30.2.3. Passwortverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252<br />

30.3. Portkonfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252<br />

30.4. Konfiguration des Inetd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252<br />

30.5. Funktionstest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253<br />

31. VNC - Virtual Network Computing 255<br />

31.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255<br />

31.2. Softwareinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256<br />

31.3. Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256<br />

31.4. VNC-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256<br />

31.5. VNC-Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256<br />

31.5.1. Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256<br />

31.5.2. Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257<br />

31.6. Beispielanwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257<br />

14


Inhaltsverzeichnis<br />

31.7. Überbleibsel aus der alten Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257<br />

31.8. VNC - Virtual Network Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257<br />

31.8.1. VNC-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257<br />

31.8.2. VNC Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258<br />

32. LDAP - Lightweight Directory Access Protocol 259<br />

33. Apache 261<br />

33.1. Softwareinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261<br />

33.2. Beispielumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261<br />

34. FTP - File Transfer Protocol 263<br />

34.1. Softwareinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263<br />

34.2. Beispielumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263<br />

35. Printserver 265<br />

36. Internetdienste 267<br />

IV. <strong>Linux</strong> für Sicherheitsfanatiker<br />

- Einsatz in unsicherer Umgebung - 269<br />

V. <strong>Linux</strong> für Entwickler<br />

- Einsatz als Entwicklungsumgebung - 271<br />

37. Programmierung 273<br />

37.1. CVS - Concurrent Versions System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273<br />

37.1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273<br />

37.1.2. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274<br />

37.1.3. CVS über das Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274<br />

37.1.4. Verwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275<br />

37.2. Makefiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277<br />

37.2.1. Erste Schritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277<br />

37.2.2. Aufbau des Makefiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277<br />

37.2.3. Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277<br />

37.2.4. Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277<br />

37.2.5. Zielbereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278<br />

37.2.6. Direktiven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278<br />

37.2.7. Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278<br />

37.3. Shellskripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278<br />

37.4. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278<br />

37.4.1. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279<br />

37.4.2. Verwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279<br />

38. Entwicklungsumgebungen 281<br />

38.1. Entwicklungsumgebungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281<br />

38.1.1. Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281<br />

15


Inhaltsverzeichnis<br />

38.1.2. Java Netbeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283<br />

39. Sprache C 285<br />

39.1. Gr<strong>und</strong>elemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285<br />

39.1.1. Datentypen, Operatoren <strong>und</strong> Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . 286<br />

39.1.2. Kontrollstrukuren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288<br />

40. Sprache Smalltalk 291<br />

41. Skriptsprache PHP 293<br />

41.1. Entwicklungsumgebungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293<br />

41.1.1. Maguma Enterprise Environment <strong>und</strong> Maguma Studio Desktop . . . . . . . . . . . 293<br />

41.1.2. Datenübergabe in Formularen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293<br />

42. LaTeX 295<br />

42.1. Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295<br />

42.2. Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295<br />

42.3. Formatierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296<br />

42.4. Spezielle Abschnitte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296<br />

42.4.1. Stichpunktlisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296<br />

42.4.2. Quellcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296<br />

42.5. Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296<br />

42.5.1. Hyperref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296<br />

42.6. Querverweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297<br />

42.7. Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297<br />

VI. Anhang 299<br />

A. Glossar 301<br />

B. Kommandoreferenz 305<br />

B.1. Kommandos zur Dateiverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305<br />

B.1.1. Befehle zur Dateisuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307<br />

B.2. Bearbeitung von Texten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308<br />

B.3. Komprimierung <strong>und</strong> Archivierung von Dateien . . . . . . . . . . . . . . . . . . . . . . . . 308<br />

B.4. Prozessverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309<br />

B.5. Verwaltung von Benutzern <strong>und</strong> Gruppen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311<br />

B.6. Administration des Dateisystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311<br />

B.7. Bildschirm <strong>und</strong> Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313<br />

B.8. Online-Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313<br />

B.9. Sonstiges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313<br />

B.9.1. pwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314<br />

C. Netzwerkplan 315<br />

C.1. Namenskonvention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315<br />

D. Serverhardware 317<br />

D.1. Vorüberlegungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317<br />

16


Inhaltsverzeichnis<br />

D.2. Bauteilgruppen <strong>und</strong> Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317<br />

D.2.1. Gehäuse <strong>und</strong> Netzteil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317<br />

D.2.2. Mainboard Prozessor Kühlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318<br />

D.2.3. Arbeitsspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318<br />

D.2.4. Weitere Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318<br />

D.2.5. Plattenbus Controller Laufwerke . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318<br />

D.2.6. Peripherie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318<br />

D.2.7. USV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318<br />

E. Template für L AT E XDateien 319<br />

E.1. Dateikopf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319<br />

E.2. Kapitelüberschrift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319<br />

E.3. Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320<br />

E.4. Lernziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320<br />

E.5. Gliederungspunkte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320<br />

E.6. Stichworteinträge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321<br />

E.7. Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322<br />

E.8. Abbildungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322<br />

E.9. Referenzen <strong>und</strong> Textmarken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322<br />

E.10. Verlinkungen ins Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323<br />

E.11. Aufzählungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323<br />

E.12. Beschreibungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323<br />

E.13. Textformatierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324<br />

E.13.1. Consolfont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324<br />

E.13.2. Kursivschrift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324<br />

E.13.3. Gliederungsformate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324<br />

E.14. Fussnoten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325<br />

E.15. Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325<br />

E.16. Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325<br />

F. Sourceforge 329<br />

F.1. Umgebungsvariablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329<br />

F.2. Checkout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329<br />

F.3. Übernahme von Änderungen auf dem CVS-Server . . . . . . . . . . . . . . . . . . . . . . 329<br />

F.4. Änderungen einstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329<br />

F.5. Hinzufügen von weiteren Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329<br />

F.6. Upload einer neuer Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329<br />

G. Literaturverzeichnis 331<br />

17


Inhaltsverzeichnis<br />

18


1. Einleitung<br />

Bevor Sie sich in die zahlreichen Themen dieses Buches einlesen, möchten wir, die Autoren, Ihnen noch<br />

ein paar Worte mit auf den Weg geben, die Sie in Ihrem Vorhaben, <strong>Linux</strong> kennen- <strong>und</strong> verstehen zu lernen,<br />

ermutigen sollen. Lesen Sie dazu die Anmerkungen der Autoren gleich zu Beginn dieser kurzen Einleitung.<br />

Außerdem erscheint es aufgr<strong>und</strong> des Umfangs des Werkes, das in mehrere Bücher unterteilt ist, sinnvoll,<br />

Ihnen einen kurzen Überblick über die Inhalte <strong>und</strong> deren thematische Aufteilung zu geben. Dazu gehört<br />

auch eine Aufstellung der verwendeten Textformatierungen in diesem Buch.<br />

Letztendlich bleibt noch anzumerken, dass zwar bereits viele Themenbereiche abgehandelt, einige aber<br />

nur stiefmütterlich bearbeitet <strong>und</strong> wieder andere noch gar nicht aufgenommen wurden. Vor uns Autoren<br />

liegt also bis zur konsequenten Umsetzung der Arbeitsgliederung noch ein harter, steiniger Weg.<br />

Genug der Vorrede, viel Spaß mit <strong>Linux</strong> <strong>und</strong> beim Lesen dieses <strong>Handbuch</strong>s oder wie Linus Torvalds sagen<br />

würde “Have a lot of fun.“.<br />

1.1. Anmerkungen der Autoren<br />

Tobias Mucke<br />

Als ich begann, den vorliegenden Text zu schreiben, stand ich noch mitten in der Ausbildung zum Fachinformatiker<br />

in der Fachrichtung Systemintegration <strong>und</strong> beschäftigte mich nur am Rande mit <strong>Linux</strong>. Damals<br />

sollte es mir dieses Dokument ermöglichen, schnell auf Gr<strong>und</strong>lagenwissen zurückzugreifen, ohne ständig<br />

ein dickes Buch mitnehmen zu müssen. Später, als ich täglich im Umfeld von <strong>Linux</strong> arbeitete, kamen zusätzlich<br />

verschiedene <strong>Projektdokumentation</strong>en <strong>und</strong> Erfahrungsberichte dazu. Dabei arbeitete ich nicht ständig<br />

an der Unterlage, sondern ergänzte <strong>und</strong> überarbeitete gelegentlich einzelne Kapitel. Schließlich wurde diese<br />

so umfangreich, dass man sie als umfassende Einführung in das Betriebssystem <strong>Linux</strong> betrachten konnte.<br />

Ganz nebenbei wird auch tiefes Gr<strong>und</strong>lagenwissen vermittelt. In diesem Sinne kann sie sowohl als Schulungsunterlage,<br />

“Gute Nacht“ Lektüre oder zum Nachschlagen verwendet werden.<br />

Sicherlich sind einige Passagen noch verbesserungswürdig oder müssen an neue Entwicklungen angepasst<br />

werden. Dies lässt sich bei der rasanten Entwicklung von <strong>Linux</strong> nicht vermeiden. Aus diesem Gr<strong>und</strong><br />

begrüße ich kritische Anmerkungen <strong>und</strong> konstruktive Verbesserungsvorschläge <strong>und</strong> bemühe mich, diese in<br />

eine neue Auflage dieses Dokumentes einfließen zu lassen.<br />

Heute freue ich mich Ihnen ein völlig überarbeitetes <strong>Handbuch</strong> mit vielen neuen Themen präsentieren zu<br />

dürfen. Auch wenn Sie lange darauf gewartet haben, so glaube ich doch, dass sich Ihre Geduld ausgezahlt<br />

hat. Zwar sind noch immer nicht alle Punkte unserer Arbeitsgliederung abgehandelt, dennoch rechtfertigen<br />

die massiven Aktualisierungen <strong>und</strong> Überarbeitungen einzelner Themen <strong>und</strong> nicht zuletzt die Neugliederung<br />

des Werkes den Sprung auf die Version 0.5.<br />

Michael Petter<br />

Nachdem die meisten Themen, die die Schulungsunterlagen betrafen, fertiggestellt waren, bat mich Tobias,<br />

das Buch vom Word-Format nach LATEXzu portieren, um die Abstürze, die bei diesem großen Dokument<br />

auftraten, zu beseitigen. Nachdem die Portierung abgeschlossen war, habe auch ich mich nicht mehr<br />

19


1. Einleitung<br />

zurückhalten können <strong>und</strong> nach bestem Wissen <strong>und</strong> Gewissen Anmerkungen, Ergänzungen <strong>und</strong> neue Kapitel<br />

hinzugefügt. Mittlerweile entwickelt sich die Schulungsunterlage zu einem ziemlich umfassenden Nachschlagewerk<br />

für den alltäglichen Umgang mit <strong>Linux</strong>, sowohl auf Servern als auch auf Desktop Systemen.<br />

Inzwischen hat die Besucheranzahl der Sourceforge-Seite dieses Projekts nach einem zähen Start die<br />

magische Marke von 1000 Zugriffen pro Monat überschritten <strong>und</strong> wir können langsam stolz auf unsere<br />

Fortschritte sein. Es hat sich herauskristallisiert, dass Tobias <strong>und</strong> ich doch sehr unterschiedliche Facetten an<br />

<strong>Linux</strong> beschreiben – Tobias geht die “professionellen” Themen an, meistens Serverdienste oder ähnliches,<br />

während der wesentliche Teil meiner Beiträge eher dem Anwender zugute kommt. Beides ergänzt sich ganz<br />

gut, so dass wir zusammen doch einen großen Bereich der <strong>Linux</strong>welt abdecken können.<br />

Andreas Schneider<br />

Noch befasst sich Andy mit der praktischen Entwicklung von Lösungen im <strong>Linux</strong>umfeld <strong>und</strong> ist bisher noch<br />

nicht dazu gekommen seine Arbeit in eigenen Kapiteln zu dokumentieren.<br />

1.2. Überblick<br />

Der Begriff <strong>Linux</strong> bezeichnet zwar im wesentlichen den Betriebssystemkern, wird aber auch als gleichbedeutend<br />

mit einer vollständigen Distribution verstanden. Man kann folglich nicht von dem “<strong>Linux</strong>“ sprechen.<br />

Zwar sind im folgenden Text gr<strong>und</strong>legende Ausführungen distributionsunabhängig, andererseits beruhen<br />

einzelne Kapitel, insbesondere die Beschreibung der Konfigurationstools, ausschließlich auf der SuSE<br />

Distribution Version 7.3 <strong>und</strong> 8.1. Andere Distributionen werden derzeit noch nicht in diesem Maße berücksichtigt.<br />

Nachdem der Umfang des Werkes beständig wächst <strong>und</strong> eine breite Zielgruppe mit diesem <strong>Handbuch</strong><br />

angesprochen werden soll, erschien eine Neugliederung sinnvoll. Dabei haben wir uns für eine Einteilung<br />

in fünf einzelne Bücher entschieden, die die Lesergruppen unseres Werkes widerspiegeln.<br />

Auch wenn eine Umschreibung des Inhaltsverzeichnisses wenig sinnvoll erscheint, soll mit der folgenden<br />

kurzen Zusammenfassung die Intention der einzelnen Bücher deutlich werden.<br />

Das erste Buch ist vor allem für Anwender gedacht, die bisher keinen oder nur wenig Kontakt mit <strong>Linux</strong><br />

hatten. In erster Linie soll Ihnen bei der Überwindung der anfänglich auftretenden Schwierigkeiten geholfen<br />

<strong>und</strong> Ihnen die Augen für andere umfangreiche Dokumentationsquellen geöffnet werden.<br />

Auf dieser Gr<strong>und</strong>lage werden im weiteren Verlauf des zweiten Buches anfänglich erworbene Kenntnisse<br />

durch tiefergehendes Wissen erweitert. Ziel der Abhandlungen ist es dabei auch immer Gr<strong>und</strong>lagenwissen zu<br />

vermitteln, bevor auf linuxspezifische Eigenheiten des Kernels, der Prozessverwaltung, des Bootvorgangs,<br />

der Netzwerkkonfiguration uvm. eingegangen wird.<br />

Im dritten Buch werden einige Server, wie NIS, NFS, SMB, VNC usw. aufgesetzt <strong>und</strong> konfiguriert. Thematisiert<br />

wird dabei nicht nur eine beispielhafte Konfiguration, sondern auch das zu Gr<strong>und</strong>e liegende Konzept<br />

dieser Dienste.<br />

Das vierte Buch richtet sich an sicherheitsbewusste Benutzer <strong>und</strong> Administratoren. Die Themen reichen<br />

von gr<strong>und</strong>sätzlichen Überlegungen zur Systemsicherheit bis hin zur Härtung der Installation.<br />

Das fünfte <strong>und</strong> vorerst letzte Buch richtet sich an Entwickler. Zum einen geht es um Entwicklungsumgebungen<br />

<strong>und</strong> deren Installation, zum anderen sollen auch zunehmend kurze Einführungen in die eine oder<br />

andere Sprache dazu kommen.<br />

Zu guter Letzt möchten wir Sie noch um die Beachtung des Anhangs bitten. Während Sie eine Auflistung<br />

besonders zu empfehlender Bücher über <strong>Linux</strong> <strong>und</strong> andere verwandte Themen im Literaturverzeichnis<br />

am Ende der Unterlage finden werden, geben andere Abschnitte weiterführende Informationen zu den verschiedensten<br />

abgehandelten Themen. So beispielsweise Überlegungen zur Serverhardware. Zudem gibt es<br />

20


verschiedene Hilfestellungen für Autoren zu LATEX <strong>und</strong> Sourceforge.<br />

1.3. Lizenzmodell<br />

1.3. Lizenzmodell<br />

Sollten Sie Interesse an dieser Dokumentation haben, sei es, dass Sie sie als Schulungsunterlage verwenden<br />

oder als neuer Autor mitarbeiten wollen, beachten Sie gegen Ende dieser Einleitung das Lizenzmodell <strong>und</strong><br />

nehmen Sie Kontakt mit uns auf.<br />

Dieses Dokument darf ganz im Sinne der Autoren frei vervielfältigt <strong>und</strong> an eigene Bedürfnisse angepasst<br />

werden. Allerdings müssen dabei immer die tatsächlichen Autoren <strong>und</strong> der Verweis auf den Ursprung des<br />

Dokuments erkennbar bleiben. Für den Urheber ist darüber hinaus die Verbreitung <strong>und</strong> die Verwendung des<br />

Textes von Interesse. Nehmen Sie demnach bitte insbesondere bei nicht privater Nutzung Kontakt mit uns<br />

auf. Es sei nochmals betont, dass Ihnen dadurch keine Nachteile entstehen.<br />

1.4. Kontakt<br />

Sie werden sich vielleicht fragen, warum Sie mit den Autoren dieses Werkes in Kontakt treten sollten. Nun<br />

die Gründe liegen auf der Hand.<br />

• Sie haben einzelne Tippfehler, missverständliche Passagen oder Fehler entdeckt.<br />

• Sie möchten eigene Verbesserungsvorschläge einbringen.<br />

• Sie haben zu einem der behandelten Themenbereiche noch weitere Fragen.<br />

• Sie wollen als Autor an diesem Werk mitarbeiten.<br />

• ...<br />

Sämtliche Fragen, die <strong>Linux</strong> im weitesten Sinne zum Thema von uns nicht nur gerne beantwortet werden,<br />

sondern uns auch dabei helfen dieses Werk immer besser zu machen. Somit profitieren nicht nur einzelne,<br />

sondern alle Leser dieser Bücher.<br />

Darüberhinaus bleibt anzumerken, dass die Entwicklung des Betriebssystems <strong>Linux</strong> <strong>und</strong> fast aller Teilkomponenten<br />

zu schnell verläuft <strong>und</strong> in der Tiefe zu komplex ist, als das wenige Autoren ein Werk dieses<br />

Umfangs ständig auf dem aktuellen Stand halten könnten. Deshalb möchten wir noch einmal alle Leser<br />

ausdrücklich dazu ermuntern an einem der Bücher als Autor mitzuwirken. Wir werden Sie dabei so gut als<br />

irgend möglich unterstützen.<br />

Die Homepage des Projekts finden Sie im Internet unter linuxhandbuch.sourceforge.net. Sollten Sie eine<br />

ältere Version des Textes vorliegen haben, finden Sie dort die aktuellste Ausgabe dieses Dokumentes.<br />

1.5. Arbeitsgliederung<br />

Wie bereits erwähnt, kann dieses Dokument noch lange keinen Anspruch auf Vollständigkeit erheben <strong>und</strong><br />

wird es vielleicht auch nie können. Dennoch bleiben einige interessante Themen hartnäckig auf unserer<br />

Arbeitsgliederung.<br />

Administration<br />

Noch immer fehlt die Beschreibung weiterer administrativer Tools auch anderer Distributionen. Außerdem<br />

sind bisher das Standard-Home-Verzeichnis /etc/skel <strong>und</strong> dessen Möglichkeiten unerwähnt geblieben.<br />

21


1. Einleitung<br />

Bootkonzept<br />

Hier muss eine korrekte Partitionstabelle eingetragen werden.<br />

Dateisysteme<br />

Dieses Kapitel soll komplett überarbeitet <strong>und</strong> dabei völlig aufgearbeitet werden. Teile sollen in das Kapitel<br />

VFS - Virtual File System übergehen, während die Gr<strong>und</strong>lagen im ersten Buch für <strong>Linux</strong>-Einsteiger verbleiben.<br />

Reguläre Ausdrücke sollen in das neue Kapitel über Shell-Programmierung aufgenommen werden.<br />

Gr<strong>und</strong>lagen muss jedoch auch der normale Anwender beherrschen. Deshalb verbleiben diese im Kapitel<br />

Kommandozeile.<br />

Kommandoreferenz<br />

Es stimmt zwar, dass viele Kommandos bereits über das gesamte Buch verstreut angewendet werden <strong>und</strong> mit<br />

einem ordentlichen Stichwortverzeichnis auch gef<strong>und</strong>en werden können, dennoch möchte ich nicht von dem<br />

Gedanken einer ordentlichen Kommandoreferenz abrücken, da dieses immer wieder von Kursteilnehmern<br />

nachgefragt wird.<br />

Gr<strong>und</strong>lagen Betriebssysteme<br />

Dieses Kapitel gibt es zwar schon, könnte jedoch ausgebaut werden.<br />

Kernel<br />

Bisher gefällt mir die Beschreibung, was ein Kernel wirklich zu leisten hat, noch nicht. Wenn man schon<br />

nahe am System ist, dann sollte der Einblick in die wahren Vorgänge mindestens genauso tiefgehend sein.<br />

X - Das Fenstersystem<br />

Hier fehlen Einblicke in die wichtigsten Fenstermanager, wie KDE 3 <strong>und</strong> Gnome 1.4. X-Forwarding.<br />

Wichtige X-Tools wären auch wünschenswert. Kdm <strong>und</strong> Konsorten müssen auch beschrieben werden. Die<br />

XF86Config muss noch beschrieben werden.<br />

Emacs<br />

Der mächtige Editor Emacs ist bisher noch gar nicht beschrieben, obwohl er beispielsweise aufgr<strong>und</strong> seiner<br />

Fähigkeiten von Entwicklern äußerst gerne verwendet wird.<br />

Netzwerk<br />

Das Kapitel Netzwerk ist überarbeitungsbedürftig, da allgemeine Erläuterungen beispielsweise zum ISO<br />

/ OSI Schichtenmodell, der Adressierung (IP, MAC) <strong>und</strong> diversen Protokollen fehlen. Zudem sollen die<br />

folgenden stichpunktartig zusammengefassten Gedankengänge aufgenommen werden (Sniffer). Das meiste<br />

davon dürfte in das dritte Buch Einzug finden. Hier bleibt noch viel zu tun.<br />

Prozesse<br />

Hier fehlen noch einige Begriffe, die eingehender erläutert werden sollten. Dazu gehören die streams.<br />

22


Programmierung<br />

1.5. Arbeitsgliederung<br />

Auf die Programmierung geht diese Unterlage noch sehr wenig ein. Es geht hier ja auch um das Betriebssystem<br />

<strong>Linux</strong>, dennoch sollten die Besonderheiten von <strong>Linux</strong> in diesem Bereich aufgezeigt werden. Sprachen<br />

wie C, C++, Perl <strong>und</strong> PHP sollten nicht unerwähnt bleiben.<br />

Internetdienste<br />

Auch dieser Themakomplex ist noch überhaupt nicht ausgeprägt. Zumindest sollte man jedoch einmal die<br />

folgenden Begriffe gehört haben <strong>und</strong> wissen, worum es sich dabei handelt. Damit sind im Besonderen der<br />

Apache Web Server <strong>und</strong> die dazugehörigen Module (wie php jsp) gemeint. Darüber hinaus sind Dienste wie<br />

ftp, dns <strong>und</strong> dhcp erklärungsbedürftig.<br />

Hardware<br />

Was offensichtlich immer noch fehlt sind Compact Flash Karten, PCMCIA Modems, RAID, UDMA <strong>und</strong><br />

SCSI.<br />

Autoyast<br />

Die automatische Installation mit Hilfe von AutoYaST ist ein sehr interessantes Thema <strong>und</strong> sollte in diesem<br />

Buch auch dokumentiert werden.<br />

Rettungssysteme<br />

Im schlimmsten Scenario eines Systemausfalls braucht man Rettungssysteme auf Diskette oder CD. Die hier<br />

vorgestellten Tools müssen so robust <strong>und</strong> zuverlässig sein, wie man es von einem Rettungssystem erwartet.<br />

Partitionierung<br />

Nochimmer fehlen Gr<strong>und</strong>lagen der Partitionierung. Das Tool fdisk kann in diesem Zusammenhang gleich<br />

mitbeschrieben werden.<br />

Anwender<br />

Letztendlich sollte aber auch der Anwender des <strong>Linux</strong>-Systems nicht vergessen werden. Hier steht ein Ausflug<br />

zu Themen, wie CDs brennen (mkisofs, cdrecord, scsi-emu) <strong>und</strong> DVDs ansehen, an.<br />

LAT E X<br />

Im Inhaltsverzeichnis sind einige Unterpunkte mit breiter Nummerierung zu nah an der Kapitelüberschrift.<br />

Außerdem werden von einigen Acrobatreader Versionen Seitenobjektfehler angemerkt. Die Ursache hierfür<br />

ist noch ungeklärt.<br />

LVM<br />

Dieses Kapitel muss nochmals, insbesondere um Abbildungen, erweitert werden. Die Kommandos werden<br />

in die Befehlsreferenz aufgenommen.<br />

23


1. Einleitung<br />

Shellprogrammierung<br />

Weiter ausbauen <strong>und</strong> mit Übungen <strong>und</strong> guten Beispielen garnieren.<br />

Cluster<br />

In das Kapitel über Hochverfügbarkeitscluster muss die Arbeit aus der Doku noch eingepflegt werden.<br />

NFS - Network File System<br />

Das Kapitel über NFS muss überarbeitet werden.<br />

VNC <strong>und</strong> Exceed<br />

VNC ist zwar schon beschrieben, muss aber noch ausführlicher dokumentiert werden. Insbesondere die<br />

Möglichkeit VNC in den inetd einzubinden, erscheint interessant.<br />

Exceed ist ein zweites Thema in diesem Zusammenhang. Die Architektur, Funktion <strong>und</strong> Konfiguration<br />

soll kurz erläutert werden.<br />

CVS<br />

CVS wird sowohl im Buch über Netzwerke als auch für Entwickler thematisiert. Hier muss genauer thematisch<br />

getrennt werden.<br />

24


Teil I.<br />

<strong>Linux</strong> für Anwender<br />

- Einsatz auf dem Desktop -<br />

25


2. Gr<strong>und</strong>wissen<br />

Jeder Anwender nutzt während seiner Arbeit wie selbstverständlich das eine oder andere Betriebssystem.<br />

Dennoch können nur wenige darüber Auskunft geben, was eine Betriebssystem eigentlich ausmacht <strong>und</strong><br />

welche Aufgaben von ihm wahrgenommen werden.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die Aufgaben des Betriebssystems kennen,<br />

• die Eigenschaften von <strong>Linux</strong> einzuschätzen,<br />

• wichtige Gr<strong>und</strong>begriffe im Open Source Umfeld zu verstehen.<br />

2.1. Personal Computer<br />

2.1.1. Schichtenmodell eines Computersystems<br />

Anwenderprogramme Diese oberste Schicht stellt den Benutzern des Systems Anwendungssoftware zur<br />

Verfügung. Als Beispiel könnte man Web-Browser, Datenbank- oder Officeanwendungen nennen.<br />

Systemprogramme Hierbei handelt es sich um Programme, die weder zum Betriebssystem noch zu den gerade<br />

beschriebenen Anwenderprogrammen gehören. Vom erstgenannten unterscheiden sie sich durch<br />

ihre Austauschbarkeit, vom zuletzt genannten durch ihre Systemnähe.<br />

Betriebssystem Die Aufgaben eines Betriebssystems, wie Implementierung von Schnittstellen <strong>und</strong> die<br />

Verwaltung der Ressourcen, werden im Abschnitt 2.2.3 auf Seite 29 beschrieben.<br />

Maschinensprache Die Maschinensprache besteht aus zahlreichen elementaren Maschinenbefehlen (z.B.<br />

zur Berechnung von arithmetischen Ausdrücken, zur Ausführung von Vergleichsoperationen), die<br />

vom Assembler in entsprechende Anweisungen im Mikrocode umgesetzt werden.<br />

Mikrocode Aufgabe des Mikrocodes ist die direkte Steuerung der physikalischen Geräte. In Mikrocode<br />

entworfene Programme werden von einem Interpreter in entsprechende Steueranweisungen übersetzt<br />

<strong>und</strong> an die Geräte weitergeleitet.<br />

Physikalische Geräte Komponenten dieser Ebene sind beispielsweise der Prozessor, die Speicherchips,<br />

Bussysteme usw.<br />

2.2. Betriebssysteme<br />

Zunächst soll geklärt werden, was unter einem Betriebssystem zu verstehen ist <strong>und</strong> welche Aufgaben es zu<br />

erfüllen hat.<br />

27


2. Gr<strong>und</strong>wissen<br />

2.2.1. Betriebssysteme im Überblick<br />

Unix DOS <strong>und</strong> Windows Windows NT / 2000 / XP OS / 2 Apple Macintosh Commodore Amiga Atari ST<br />

2.2.2. Betriebssystem - Geschichte<br />

Die Entwicklung von <strong>Linux</strong> ist nicht einfach nur eine spannende Geschichte. Um <strong>Linux</strong> zu verstehen, muss<br />

man die Philosophie verstehen, die hinter der Bewegung steckt.<br />

Unix - Geschichte<br />

Unix wurde Ende der 60er Jahre von Ken Thompson <strong>und</strong> Dennis Ritchie bei den Bell Laboratories entwickelt.<br />

In erster Linie zeichnete es sich durch etliche Neuerungen aus, die bahnbrechend <strong>und</strong> damit gr<strong>und</strong>legend<br />

für die spätere Entwicklung von <strong>Linux</strong> waren. Es wurde in der Hochsprache C geschrieben <strong>und</strong> enthielt<br />

somit nur noch sehr wenig Assemblercode. Dies ermöglichte es das Betriebssystem ohne große Schwierigkeiten<br />

auf andere Plattformen zu portieren. Außerdem war es von Anfang an sehr umfassend ausgelegt,<br />

so dass es auch später hinzukommenden Ansprüchen genügte. Zudem stellte es ein klassisches Multiuser<br />

Betriebssystem dar, dem ein strenges Rechtekonzept zugr<strong>und</strong>e lag.<br />

Schon damals war es ein 32 Bit Betriebssystem. Es verwendete eine hierarchische Verzeichnisstruktur<br />

<strong>und</strong> war eines der ersten Betriebssysteme mit virtueller Speicherverwaltung. Ergänzend kam hinzu, dass das<br />

Protokoll TCP / IP, das heute die Gr<strong>und</strong>lage des Internet bildet, auf dem System entwickelt wurde. Damit<br />

gingen die ersten Client - Server basierenden Anwendungen einher. Mitte der achtziger Jahre wurde dann<br />

das X Window System entwickelt.<br />

Unix wurde aufgr<strong>und</strong> seiner günstigen Lizenzierung für Universitäten verstärkt an diesen verwendet <strong>und</strong><br />

weiterentwickelt. Obwohl es bei den Studenten sehr beliebt war, verhinderten die verhältnismäßig hohen<br />

Hardwareanforderungen eine weite Verbreitung im privaten Bereich. Dazu kommt, dass zu diesem Zeitpunkt,<br />

wie auch heute noch, viele Unix-Versionen am Markt erhältlich sind, der Erwerb jedoch mit hohen<br />

Lizenzkosten verb<strong>und</strong>en ist.<br />

<strong>Linux</strong> - Geschichte<br />

Die erste Version des <strong>Linux</strong>-Kernels mit der Versionsnummer 0.01, entwickelt auf einem 80386-Prozessor,<br />

wurde im September 1991 von Linus Torvalds, einem finnischen Informatikstudenten, der heute noch immer<br />

die Entwicklung des Kernels leitet, im Internet zur Diskussion <strong>und</strong> Weiterentwicklung bereitgestellt.<br />

Das Internet wurde zu diesem Zeitpunkt noch von Mail- <strong>und</strong> Newsgroups dominiert, Hypertext als Gr<strong>und</strong>stock<br />

für World Wide Web war gerade erst entwickelt worden.<br />

Dabei war es zunächst nicht Linus erklärtes Ziel ein eigenes Betriebssystem zu schreiben, vielmehr ging<br />

es ihm darum die Fähigkeiten seines 386er PCs auszuloten. Erst später kristallisierte sich heraus in welche<br />

Richtung es gehen würde.<br />

Das Besondere an diesem Schritt war, dass neben den ablauffähigen Programmen in Maschinensprache<br />

auch der zugehörige Sourcecode veröffentlicht wurde. Ein unglaublicher Schritt, der eine riesige Lawine<br />

losgetreten hat.<br />

Seitdem wurde <strong>Linux</strong> von unzähligen Programmierern weltweit rasant weiterentwickelt, deren Interesse<br />

kein kommerzielles war, sondern vor allem in der Lösung von Problemen, im Hinzufügen von neuen Funktionen<br />

<strong>und</strong> in der Perfektionierung des Betriebssystems lag. Bedingung für die Arbeit am Quellcode war<br />

einzig die Auflage den angepassten Code wieder der programmierenden Allgemeinheit zur Verfügung zu<br />

stellen.<br />

28


2.3. <strong>Linux</strong> - Merkmale<br />

Zunächst setzte sich <strong>Linux</strong> vor allem als Server-Plattform durch. In neuerer Zeit ist <strong>Linux</strong>, aufgr<strong>und</strong><br />

der immer einfacheren Installation <strong>und</strong> der zunehmend komfortablen Bedienung, auch für Privatanwender<br />

interessant geworden.<br />

2.2.3. Aufgaben des Betriebssystems<br />

Schnittstelle Das Betriebssystem stellt die Schnittstelle zwischen Benutzer <strong>und</strong> Hardware dar. Dadurch<br />

wird die Komplexität der darunterliegenden Systemarchitektur verborgen <strong>und</strong> dem Anwender eine<br />

verständliche <strong>und</strong> handhabbare Oberfläche angeboten. So braucht sich beispielsweise ein Anwendungsentwickler<br />

nicht um die Steueranweisungen diverser Hardwarekomponenten zu kümmern, sondern<br />

kann sich auf die Implementierung seines Programms konzentrieren.<br />

Verwaltung von Ressourcen Das Betriebssystem verwaltet alle physikalischen Geräte, wie Prozessoren,<br />

Speicher, Platten, Terminals usw. Damit ist insbesondere eine sinnvolle Zuteilung der Ressourcen an<br />

die darum konkurrierenden Programme gemeint. Ohne eine solche Steuerung durch das Betriebssystem<br />

wäre eine vernünftige Benutzung heutiger Computer nicht möglich.<br />

2.2.4. Einsatzgebiete <strong>und</strong> Zukunft von <strong>Linux</strong><br />

Einarbeitung des c’t Artikels<br />

2.3. <strong>Linux</strong> - Merkmale<br />

<strong>Linux</strong> ist ein Unix-ähnliches Betriebssystem. Der gravierende Unterschied gegenüber herkömmlichen Unix-<br />

Systemen besteht im vollständig verfügbaren Quellcode. Zudem ist <strong>Linux</strong> in vielen Bereichen vollständiger<br />

als manch teures Unix-System, da es eine größere Hardwareauswahl unterstützt <strong>und</strong> in großen Bereichen<br />

auf effizienterem Code basiert.<br />

Wie bereits weiter oben dargestellt, ist ein Betriebssystem die Schnittstelle zwischen Anwender <strong>und</strong> Computer.<br />

Dazu gehört vor allem die Verwaltung der Ressourcen (Rechenkapazität, Speicher) <strong>und</strong> der Ein- (Tastatur;<br />

Maus) bzw. Ausgabegeräte (Monitor, Drucker). Darüber hinaus ist das Betriebssystem nötig, damit<br />

Programme gestartet <strong>und</strong> Daten verarbeitet werden können.<br />

• <strong>Linux</strong> bietet:<br />

– Multitasking (gleichzeitige Abarbeitung mehrerer Prozesse)<br />

– Multiuser (gleichzeitige Nutzung durch mehrere Anwender)<br />

– Paging (Auslagerung von Arbeitsspeicherinhalten auf die Swappartition)<br />

– Shared Libraries (Bibliotheken mit Systemfunktionen werden bei Verwendung durch mehrere<br />

Prozesse nur einmal geladen)<br />

– Interprocess Communication (IPC)<br />

– Symmetric Multi Processing (SMP, Nutzung mehrerer Prozessoren)<br />

• <strong>Linux</strong> unterstützt:<br />

– gängige Hardware (IA32 kompatible Plattform, nahezu alle Bussysteme (ISA, VLB, EISA,<br />

PCI), die meisten Controller (IDE, EIDE, SCSI), sämtliche Laufwerke (CDROM, HDD, Streamer),<br />

die meisten Netzwerkkarten usw. (vgl. Hardware HOWTO)<br />

29


2. Gr<strong>und</strong>wissen<br />

– besondere Hardware (DEC Alpha Prozessoren, Sun Sparc, Mips, Motorola <strong>und</strong> mittlerweile<br />

auch Großrechnerarchitektur)<br />

– nahezu alle Dateisysteme (Ext2, Ext3, Reiserfs, XFS, JFS, DOS, Windows, NTFS, OS/2, Minix,<br />

NFS usw.)<br />

– viele gängige Netzwerkprotokolle (TCP/IP, PPP, SLIP usw.)<br />

• <strong>Linux</strong> bringt:<br />

– ein eigenes Dateisystem ext2 bzw. reiserfs (ausgereifte Sicherheitsmerkmale, lange Dateinamen,<br />

Dateisysteme bis 4TByte, Dateien bis 2GByte, Dateinamen mit bis zu 255 Zeichen, Journaling)<br />

• <strong>Linux</strong> benötigt:<br />

– je nach Verwendung reicht ein 486 Rechner mit 16MByte oder es braucht einen aktuellen Prozessor<br />

mit mehr als 128MByte <strong>und</strong> ausreichend Speicherkapazität (zu den Hardwareanforderungen<br />

vgl. Abschnitt ?? auf Seite ??).<br />

2.3.1. OpenSource<br />

Das Herausragende an <strong>Linux</strong> ist, dass es weder einer Organisation noch einer Firma gehört. Alle Entwickler,<br />

die an diesem Projekt mitwirken, arbeiten unentgeldlich aus freien Stücken. Ihr Antrieb möge der persönliche<br />

Ehrgeiz, das System weiter zu verbessern, als auch das Ausprobieren neuer Programmiertechniken sein.<br />

Auch die meisten Anwendungen unterliegen diesem Prinzip. Diese Methode ist außerordentlich erfolgreich,<br />

wenn man die rasante Entwicklung von <strong>Linux</strong> in den letzten Jahren rückblickend betrachtet.<br />

Das Schlagwort ”freie Software” wurde vor allem im Umfeld von <strong>Linux</strong> geprägt. ”Frei” bezieht sich<br />

hierbei nicht nur auf die kostenlose Verfügbarkeit des Produktes, sondern in erster Linie auf die Zugänglichkeit<br />

des Quellcodes. <strong>Linux</strong> kann aus dem Internet heruntergeladen werden, was aber aufgr<strong>und</strong> der ständig<br />

wachsenden Archive zunehmend unpraktikabel wird.<br />

An dieser Stelle setzen die sogenannten Distributoren ein. Zusätzliche Informationen hierzu finden Sie in<br />

diesem Kapitel im Abschnitt ?? auf Seite ??.<br />

Wie bereits mehrmals angesprochen, entwickelt sich <strong>Linux</strong> besonders in speziellen Teilbereichen rasant.<br />

Aufgr<strong>und</strong> dessen sind Updates <strong>und</strong> Fehlerbehebungen schnell verfügbar. Dies betrifft sowohl den Kernel des<br />

Betriebssystems, als auch die darauf laufenden Anwendungen. Sollte das System zufriedenstellend laufen,<br />

so ist es nicht notwendig, eventuell verfügbare Updates einzuspielen. Man ist also nicht gezwungen, jede<br />

Aktualisierung des Systems mitzumachen.<br />

<strong>Linux</strong> ist keine Blackbox, sondern das am umfangreichsten dokumentierte Betriebssystem, dass bis ins<br />

kleinste Detail konfiguriert werden kann <strong>und</strong> somit einen Blick hinter die Kulissen zulässt. Ein weiterer<br />

Aspekt ist, dass <strong>Linux</strong> durch die Gestaltung der Schnittstellen <strong>und</strong> die Unterstützung standardisierter<br />

Protokolle eine problemlose Integration in ein bestehendes Netz gewährleistet. Beispielsweise kann ein<br />

<strong>Linux</strong>-System in eine Windows-Netzwerkumgebung eingeb<strong>und</strong>en werden, ohne dass für den Anwender<br />

eine Veränderung sichtbar wird.<br />

2.3.2. Dokumentation<br />

Auch wenn aufgr<strong>und</strong> des kostenfreien Vertriebsweges eine gedruckte Dokumentation oftmals fehlt, ist <strong>Linux</strong><br />

die am besten <strong>und</strong> umfangreichsten dokumentierte Plattform überhaupt. Welche unermesslichen Quellen<br />

sich hier auftun, wird im Kapitel 5 auf Seite 45 besprochen. (vgl. Kapitel Dokumenation)<br />

30


2.3.3. Sicherheit<br />

2.3. <strong>Linux</strong> - Merkmale<br />

Bisher sind kaum Viren für <strong>Linux</strong> bekannt. Aber nicht nur deshalb ist die Virengefahr eher gering einzuschätzen.<br />

Ein weiterer Gr<strong>und</strong> ist das Rechtekonzept unter <strong>Linux</strong>. Solange ein von einem Virus befallenes<br />

Programm nicht mit root Rechten gestartet wird, ist der Schaden am System stark begrenzt <strong>und</strong> weitet sich,<br />

wenn überhaupt, nur schleppend aus.<br />

2.3.4. Plattformvielfalt<br />

Vielen Anwendungen, die auf einem <strong>Linux</strong> System laufen, liegt eine Client-Server Struktur zugr<strong>und</strong>e. Die<br />

zusätzliche Konzeption als Multiuser-Betriebssystem prädestiniert <strong>Linux</strong> für die Netzwerkumgebung. Andersherum<br />

gesagt, macht es wenig Sinn, eine <strong>Linux</strong>maschine als Standalone Rechner aufzustellen. Multiuser<br />

heißt in diesem Zusammenhang, dass mehrere Benutzer zugleich ein Programm auf einem Rechner starten<br />

können, wobei jede einzelne Instanz unter den Rechten des jeweiligen Benutzers ausgeführt wird.<br />

In Kombination mit einem leistungsfähigen Netzwerk stellt <strong>Linux</strong> ein äußerst mächtiges Betriebssystem<br />

dar, das beispielsweise die Fernwartung anderer Rechner ermöglicht. Eine andere denkbare Anwendung ist<br />

die zeitaufwändige Ausführung eines Programms, während ein anderer Benutzer das System nahezu wie<br />

gewohnt verwenden kann. Die Grenzen werden in diesem Bereich nicht von <strong>Linux</strong> gezogen, sondern sind<br />

allein hardwarebedingt.<br />

Ein weiterer Vorteil, der <strong>Linux</strong> von der Windows Welt abhebt, ist die Möglichkeit, auch ohne grafische<br />

Benutzeroberfläche zu starten. Sämtliche Funktionen des Betriebssystems sind dann immer noch verfügbar.<br />

Auf diese Weise werden die Anforderungen an die Hardware stark reduziert bzw. die Leistungsfähigkeit des<br />

<strong>Linux</strong> Servers beträchtlich gesteigert. Die bereits angesprochene Client - Server Struktur, die auch vor dem<br />

X-Window-System nicht halt macht, ermöglicht es, grafische Anwendungen auf einem entfernten Host zu<br />

starten, die Ausgaben auf dem lokalen Rechner anzuzeigen <strong>und</strong> die Bedienung von hier aus vorzunehmen.<br />

Zudem hat ein Anwender im X-Window-System mehrere Arbeitsflächen gleichzeitig zur Verfügung, die auf<br />

einen oder mehrere Monitore verteilt werden können.<br />

Ein weiterer Vorteil, der vor allem bei Servern ein schlagendes Argument darstellt, ist die Eigenschaft<br />

von <strong>Linux</strong>, dass der Rechner so gut wie nie heruntergefahren werden muss. Einfache Kommandos reichen<br />

aus, um den jeweiligen Prozess durchzustarten bzw. die Konfiguration neu einzulesen.<br />

<strong>Linux</strong> spielt vor allem in folgenden Bereichen seine Stärken aus: Stabilität, Datensicherheit <strong>und</strong> Server<br />

für nahezu jeden denkbaren Einsatzbereich, da eine Vernetzung aufgr<strong>und</strong> der zahlreichen Schnittstellen mit<br />

fast allen bekannten Netzwerken möglich ist.<br />

2.3.5. Entwicklungsumgebung<br />

<strong>Linux</strong> bietet dem Anwender die Möglichkeit, Erfahrungen mit den verschiedensten Programmiersprachen<br />

zu sammeln. Verfügbar sind beispielsweise Compiler bzw. Entwicklungsumgebungen für Java, C++, Pascal,<br />

Fortran, C <strong>und</strong> Tcl / Tk.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

31


2. Gr<strong>und</strong>wissen<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

32


3. Installation<br />

Wer glaubt, dass eine <strong>Linux</strong> Installation auf dem heimischen Rechner ein schwieriges Unterfangen darstellt,<br />

wird überrascht sein. Gerade die letzten Versionssprünge haben nicht nur bei SuSE einer zunehmenden<br />

Vereinfachung den Weg bereitet, die soweit geht, dass selbst unbedarfte Anwender in wenigen Schritten ans<br />

Ziel gelangen.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• welche Anforderungen <strong>Linux</strong> an die Hardware stellt,<br />

• welche Vorbereitungen vor der Installation getroffen werden sollten,<br />

• in welchen Teilschritten die Installation von <strong>Linux</strong> abläuft,<br />

• wie eine beispielhafte Partitionierung aussehen könnte.<br />

3.1. Systemanforderungen<br />

Eine allgemeine Aussage zu der von <strong>Linux</strong> benötigten Hardware fällt in Anbetracht der genügsamen Anforderungen<br />

einerseits <strong>und</strong> dem breiten Einsatzspektrum andererseits schwer. Zur groben Orientierung werden<br />

im folgenden einige Installationsbeispiele <strong>und</strong> die benötigte Hardware genannt.<br />

Nicht bedacht sind an dieser Stelle Überlegungen, die die Ausfallsicherheit betreffen. Gerade bei kritischen<br />

Servern oder Steuereinheiten muss oft ein vielfach höherer Aufwand, z.B. aufgr<strong>und</strong> red<strong>und</strong>anter<br />

Hardwarekomponenten, betrieben werden.<br />

Außerdem außen vor sind Installationen auf Embedded Systems, die zu stark hardware- <strong>und</strong> funktionsspezifisch<br />

sind.<br />

Diskless Client Dieses System verfügt über keine oder nur über eine sehr kleine Festplatte für den Auslagerungsspeicher.<br />

Sämtliche Software wird entweder über das Netzwerk lokal oder auf einem Server<br />

remote gestartet. Dementsprechend sollte die Anbindung des Client PCs an die Netzwerkinfrastruktur<br />

ausfallen. Andere Komponenten des Systems müssen nicht sonderlich leistungsfähig sein, sondern<br />

lediglich den Anforderungen der zu startenden Anwendungen genügen.<br />

Workstation Auch hier gilt, dass die Ausstattung im Wesentlichen von den Anforderungen der installierten<br />

Anwendungen abhängig ist. In der Regel reicht jedoch ein aktueller Personal Computer mit genügend<br />

Arbeitsspeicher, um ein sinnvolles Arbeiten zu ermöglichen.<br />

Router Als Router kann unter <strong>Linux</strong> jeder alte PC dienen, der Platz für mindestens zwei Netzwerkkarten<br />

bietet.<br />

33


3. Installation<br />

Mailserver Auch als Mailserver sind ältere Systeme denkbar. Hier kommt es jedoch stark auf die Anzahl der<br />

zu versorgenden Anwender an. Wenn die Mails zentral gelagert werden sollen, ist vor allem Plattenkapazität<br />

<strong>und</strong> -performance wichtig. Außerdem werden Mailsysteme mittlerweile als geschäftskritisch<br />

eingestuft. Ein Ausfall kann demnach teuer zu stehen kommen.<br />

Fileserver Als reiner Fileserver kommt es ebenfalls auf die Kapazität der Plattensubsysteme <strong>und</strong> deren<br />

Performance an. Dabei spielt nicht nur die Mechanik <strong>und</strong> das Bussystem der Festplatten eine Rolle,<br />

sondern auch der Datendurchsatz im restlichen System. Denken Sie darüber hinaus aber auch an die<br />

Datensicherheit, die mit Hilfe von RAID Systemen <strong>und</strong> regelmäßigen Backups erreicht werden muss.<br />

Webserver Um auf viele Anfragen mit geringen Antwortzeiten reagieren zu können, braucht ein solches<br />

System eine ordentliche Gesamtperformance, die von der Prozessorleistung dominiert <strong>und</strong> von der<br />

Größe des Arbeitsspeichers bzw. dessen Datendurchsatz ergänzt wird. Natürlich kommt es im Wesentlichen<br />

wieder auf die Anzahl der gleichzeitigen Benutzer, aber auch auf die gefahrenen Anwendungen<br />

an. In Verbindung mit Datenbanken <strong>und</strong> aufwendigen, dynamischen Seiten wächst die Belastung des<br />

Systems überproportional.<br />

Application- / Datenbankserver Viel Arbeitsspeicher <strong>und</strong> hohe Rechenkapazität zeichnen diese Kategorie<br />

Server aus. Dazu kommt, dass solche Systeme hochverfügbar sein sollen <strong>und</strong> aus diesem Gr<strong>und</strong> ein<br />

hoher personeller <strong>und</strong> vor allem kostspieliger Aufwand betrieben werden muss.<br />

3.2. Boot- <strong>und</strong> Installationsmedien<br />

Sowohl zum Booten als auch für die Installation kommen mehrere Medien in Betracht. Für ersteres bieten<br />

sich die erste CD / DVD oder notfalls auch gesondert erstellte Bootdisketten an. Die zum Erstellen benötigten<br />

Images mitsamt einer ausführlichen Anleitung finden Sie auf der ersten CD im Verzeichnis disks.<br />

Während bis SuSE 7.3 noch zwei Disketten für zusätzliche Treiber ausreichten, sind inzwischen drei Moduldisketten<br />

nötig, um auch moderne Hardware wie USB, PCMCIA and FireWire (IEEE1394) abzudecken.<br />

Erstellung der Bootdisketten<br />

Sollte der zu installierende Rechner nicht über ein bootfähiges CDROM Laufwerk verfügen, müssen Sie<br />

die Bootdisketten selbst erstellen. Dafür benötigen Sie ein laufendes <strong>Linux</strong>system oder einen DOS- bzw.<br />

Windows-Rechner. Nachdem Sie die benötigten Images ausgewählt haben, gehen Sie entsprechend der<br />

nachfolgenden Anleitung vor.<br />

DOS / Windows<br />

1. Legen Sie sich eine formatierte Diskette bereit.<br />

2. Öffnen Sie die MS-DOS-Eingabeaufforderung.<br />

3. Wechseln Sie hier auf Ihr CDROM Laufwerk <strong>und</strong> dann in das Verzeichnis dosutils\rawrite.<br />

4. Starten Sie das Programm rawrite.<br />

5. Geben Sie bei source file name (Name der Quelldatei) X:\disks\bootdisk an. X steht für den Buchstaben<br />

Ihres CD / DVD Laufwerkes.<br />

6. Auf die Frage nach dem destination drive (Ziellaufwerk) antworten Sie mit a:\.<br />

34


7. Legen Sie dann die formatierte Diskette ins Laufwerk <strong>und</strong> bestätigen Sie mit Enter.<br />

3.3. Vorbereitungen<br />

Rawrite überträgt jetzt das Image auf die Diskette, was durchaus eine Weile dauern kann. Wenn Sie die<br />

Disketten mit den Modulen benötigen, gehen Sie genauso vor wie eben beschrieben, geben aber beim Namen<br />

der Quelldatei X:\disks\modules, X:\disks\modules2 bzw. X:\disks\modules3 an.<br />

<strong>Linux</strong><br />

1. Hängen Sie zunächst mit dem Kommando mount /media/cdrom die CD in Ihr Dateisystem ein.<br />

2. Formatieren Sie die Diskette mit dem Befehl fdformat /dev/fd0.<br />

3. Anschließend übertragen Sie mit dd if=/media/cdrom/disks/bootdisk of=/dev/fd0 das Image<br />

auf die Diskette.<br />

Diskdump kopiert das Image von der CD auf die Diskette. Hierbei steht if für inputfile <strong>und</strong> of für<br />

outputfile. Für die Moduldisketten gehen Sie wieder ähnlich vor. Zwei Stolpersteine sind noch zu beachten.<br />

Die Diskette sollte nicht gemountet sein <strong>und</strong> das Kommando dd muss als root ausgeführt werden, weil Sie<br />

als normaler Benutzer keine direkte Schreibberechtigung auf das Gerät /dev/fd0 haben.<br />

Eine ähnlich zahlreiche Auswahl wie bei den Bootmedien gibt es auch bei den verwendbaren Installationsmedien.<br />

So kann mittlerweile nicht bloß von CD bzw. DVD, sondern darüberhinaus über das Netzwerk<br />

per NFS oder SMB installiert werden. Allerdings müssen Sie für sämtliche netzwerkgestützten Installationsroutinen<br />

zunächst “Manuel Installation“ auswählen, was auch bedeutet, dass Sie z.B. Treiber für verschiedenste<br />

Hardwarekomponenten, insbesondere für die Netzwerkkarte, selber einbinden müssen. Nach<br />

dem Einhängen der Verzeichnisfreigaben stoßen Sie dann wieder auf den regulären Installationsvorgang.<br />

3.3. Vorbereitungen<br />

Bevor Sie sich in die Installation stürzen, sollten Sie noch eine paar Überlegungen anstellen <strong>und</strong> einige<br />

Vorbereitungen treffen.<br />

Bootlaufwerk Ihr Rechner sollte über ein bootfähiges Laufwerk verfügen <strong>und</strong> auch von diesem Booten<br />

(vgl. Einstellung der Bootsequenz im BIOS). Idealerweise handelt es sich hierbei um ein CD / DVD<br />

Laufwerk. Wenn die Installation über das Netzwerk erfolgen soll, reicht auch ein Diskettenlaufwerk<br />

aus.<br />

Festplattenkapazität <strong>und</strong> -zustand Im Wesentlichen muss genügend freier Festplattenplatz vorhanden sein.<br />

Ob dieser Platz bereits als Partition organisiert ist oder es sich um freien Speicherbereich am Ende<br />

des Datenträgers handelt, ist unerheblich. Wie viel Kapazität tatsächlich benötigt wird, hängt stark<br />

von der vorgesehenen Verwendung des Systems, also dem Installationsumfang, ab.<br />

Andere Hardwarekomponenten Die Unterstützung von unterschiedlichster Hardware hat sich gerade in<br />

den letzten Versionen sehr stark verbessert. Dennoch ist es nicht auszuschließen, dass einige Hardwarekomponenten<br />

im Zusammenspiel mit <strong>Linux</strong> nicht funktionieren bzw. nicht ihre volle Leistung<br />

entfalten. Dies trifft im Besonderen auf sehr neue Komponenten zu. Achten Sie also bereits bei der<br />

Anschaffung darauf, ob die jeweilige Komponente unterstützt wird.<br />

Netzwerkkonfiguration Sollten Sie eine Installation über das Netzwerk durchführen, besorgen Sie sich im<br />

Vorfeld sämtliche notwendigen Angaben, wie eigene IP-Adresse, Subnetmask, Gateway, Nameserver,<br />

IP-Adresse des Fileservers <strong>und</strong> den Namen der Freigabe. Dann sollte das Mounten der Dateisysteme<br />

des unter Unix, <strong>Linux</strong> oder Windows laufenden Servers problemlos funktionieren.<br />

35


3. Installation<br />

Dokumentation Egal ob Sie einen Server oder eine Workstation aufsetzen. In jedem Fall sollten Sie die<br />

ausgeführten Schritte genauestens dokumentieren. So können Sie später beispielsweise die Partitionierung<br />

des Plattensubsystems <strong>und</strong> die Konfiguration der einzelnen Hardwarekomponenten ohne weiteres<br />

nachvollziehen.<br />

3.4. Installationsschritte <strong>und</strong> Einstellmöglichkeiten<br />

Bevor Sie sich jetzt endlich an die Betriebssysteminstallation heranwagen, noch zwei letzte Hinweise:<br />

• Nachfolgend beschriebene Vorgänge können seit SuSE 8.0 nicht mehr mit YaST1 durchgeführt werden.<br />

Die Installation <strong>und</strong> auch später anfallende administrative Aufgaben werden jetzt nur noch mit<br />

Hilfe von YaST2 vollzogen. Allerdings steht neben der grafischen Benutzeroberfläche weiterhin eine<br />

textbasierte Version zur Verfügung.<br />

• Während Sie die Einstellungen im Vorfeld der Installation tätigen, werden keine dieser Änderungen<br />

ins bisherige System übertragen. Erst wenn Sie nach Abschluss aller Konfigurationsdialoge den Start<br />

der Installation ausdrücklich bejahen, wird die neue Partitionstabelle geschrieben, Dateisysteme angelegt,<br />

Pakete kopiert usw.<br />

3.4.1. Systemboot<br />

Der Boot vom jeweiligen Medium kann nur dann erfolgreich verlaufen, wenn die Bootreihenfolge im BIOS<br />

auch entsprechend eingestellt ist. Dann aber erscheint ein Bootmenü, in dem der erste Eintrag vorbelegt<br />

ist. Sollten Sie ein älteres System haben, kann es sinnvoll sein andere Einträge auszuwählen. Beachten Sie<br />

hierzu die Kernelparameter, die in der darunterliegenden Zeile aufgeführt werden. Sollte die Installation über<br />

das Netzwerk gestartet werden, ist hier “Manual Installation“ die richtige Auswahl. Außerdem können Sie<br />

mit den Funktionstasten F1 bis F5 die Auflösung am Terminal bestimmen. Mit Enter wird der Systemboot<br />

dann fortgesetzt.<br />

3.4.2. Kernel <strong>und</strong> Module<br />

Nach dem Anlegen einer Ramdisk im Arbeitsspeicher wird der Kernel geladen <strong>und</strong> es erscheinen etliche<br />

Meldungen, die insbesondere Informationen zu Ihrer Hardware enthalten. Sollten hier Fehler auftreten,<br />

ermöglicht diese Ausgabe eine Diagnose der Konflikte. In einem weiteren Schritt werden dann weitere<br />

Hardwarekomponenten erkannt <strong>und</strong> durch Module eingeb<strong>und</strong>en. Allerdings kommen Sie nur bei der manuellen<br />

Installation in die alte textbasierte Anwendung, in der Sie in Eigenregie Treiber laden können. Danach<br />

startet in jedem Fall YaST2 <strong>und</strong> Sie können endlich mit der eigentlichen Installation beginnen.<br />

3.4.3. YaST2<br />

Wie bereits erwähnt, wurde YaST1 durch YaST2 abgelöst. Letzteres werden Sie also sowohl während der<br />

Installation, als auch bei späteren administrativen Aufgaben einsetzen. Auch wenn der Installationsvorgang<br />

nochmals stark vereinfacht wurde, stehen weiterhin ausführliche Hilfetexte bereit.<br />

Sprachauswahl<br />

Die erste Frage, die Sie sich von YaST2 gefallen lassen müssen, ist die Frage nach Ihrer Muttersprache. Diese<br />

wird dann zugleich die Standardsprache des Betriebssystems. Darauf aufsetzende Anwendungen können,<br />

müssen sich aber nicht daran orientieren. Die Anzahl der möglichen Sprachen erstaunt. Von Deutsch über<br />

Griechisch bis hinzu Japanisch ist viel möglich. Die geänderte Auswahl wird sofort übernommen.<br />

36


Systemanalyse<br />

3.4. Installationsschritte <strong>und</strong> Einstellmöglichkeiten<br />

Danach erfolgt nochmals eine Systemanalyse, deren Ergebnisse ansprechend präsentiert werden. Prüfen<br />

Sie diese genau! Sollten Sie damit zufrieden sein, sind Sie ggf. nur noch zwei Klicks vom fertigen <strong>Linux</strong><br />

entfernt.<br />

Tastatur <strong>und</strong> Maus<br />

Trotz sehr guter Hardwareerkennung kann es passieren, dass Maus <strong>und</strong> Tastatur anders konfiguriert werden<br />

müssen. Das ist aber keine große Hürde. Innerhalb von YaST2 können Sie bequem mit Tabulator <strong>und</strong> Enter<br />

navigieren.<br />

Partitionierung<br />

Auch wenn YaST2 eine halbwegs sinnvolle Standardpartitionierung vorschlägt, so dürften in vielen Fällen<br />

andere Partitionierungen zum Einsatz kommen. Dann kann man auch gleich den Vorschlag verwerfen <strong>und</strong>,<br />

unter Berücksichtigung bereits bestehender Partitionen, von vorne anfangen.<br />

Es wurde bereits angesprochen, dass zunächst noch keine Einstellungen in das System zurückgeschrieben<br />

werden. Das gilt auch für die vorgenommene Partitionierung, die vorerst nur protokolliert <strong>und</strong> erst später<br />

geschrieben wird. Trotzdem ist dies natürlich ein kritischer Vorgang, insbesondere wenn sensible Daten auf<br />

Teilen des Plattensubsystems liegen.<br />

Das Einrichten der Partitionen <strong>und</strong> Dateisysteme gestaltet sich dann überraschend einfach, wenn man ein<br />

paar Gr<strong>und</strong>begriffe kennt. Auch für Profis ist mit LVM (Logical Volume Manager) <strong>und</strong> Software-RAID<br />

(red<strong>und</strong>ant Array of inexpensive / independent Disks) etwas dabei.<br />

Erstellung einer Partitionierung Partitionieren bedeutet in diesem Kontext, den freien Platz des Plattensubsystems<br />

(IDE, SCSI, RAID) bzw. bereits bestehende Partitionen in einzelne <strong>Linux</strong>-Partitionen<br />

aufzuteilen oder umzuwandeln. Dabei ist Umsicht geboten! Bei einem versehentlichen Löschen oder<br />

Überschreiben der Partitionstabelle können Daten anderer Partitionen verloren gehen oder gar ganze<br />

Partitionen unbrauchbar werden.<br />

Partitionsnamen Die von Windows bekannten Laufwerksbuchstaben gibt es unter <strong>Linux</strong> nicht. Sämtliche<br />

Hardwarekomponenten sind als sogenannte Gerätedateien ansprechbar, deren Benennung vom Hardwarepfad<br />

abhängt. Dieser gibt im Beispiel Partition an, über welches Bussystem / welchen Controller<br />

<strong>und</strong> welche Platte die einzelne Partition erreichbar ist.<br />

Konkret heißt das, dass die Namen der IDE-Geräte mit hd die der SCSI-Geräte mit sd beginnen. Danach<br />

folgt ein Buchstabe, der laufend vergeben wird <strong>und</strong> in IDE-Systemen über Primary / Secondary<br />

Controller <strong>und</strong> Master / Slave Auskunft gibt. Für Partitionen werden laufende Nummern (primäre<br />

Partitionen 1 bis 4, erweitere Partition: 5, logische Laufwerke: ab 6) vergeben.<br />

So kann aus der Bezeichnung /dev/hdb3 gefolgert werden, dass es sich hier um die dritte primäre<br />

Partition auf der als Slave gejumperten Festplatte am primären IDE Controller handelt.<br />

Aber auch Gerätenamen wie /dev/rd/c0d1p2 sind denkbar. Der Hardwarepfad hilft uns weiter: Es<br />

handelt sich um eine Partition in einem RAID-Verb<strong>und</strong>, der am ersten Controller als zweites RAID-<br />

System angeb<strong>und</strong>en wurde.<br />

Mountpoints Wie Sie später noch sehen werden, gibt es unter <strong>Linux</strong> ein virtuelles Dateisystem, in das<br />

alle anderen Dateisysteme, die auf lokalen Plattensubsystemen oder im Netzwerk verfügbar sind, eingehängt<br />

werden können. Das dazugehörige Verzeichnis wird auch Mountpoint genannt. Sollte Ihnen<br />

dieser Begriff an dieser Stelle noch nicht verständlich sein, ist das nicht weiter schlimm. Sicherlich<br />

wird er später noch klarer werden.<br />

37


3. Installation<br />

Dateisystemtypen Die verwendbaren Dateisysteme sind inzwischen auch zahlreicher geworden. Derzeit<br />

bietet YaST2 neben den Standarddateisystemen ext2, reiserfs <strong>und</strong> swap, auch neuentwickelte wie ext3<br />

oder Filesysteme aus dem professionellen Unix-Umfeld wie jfs <strong>und</strong> xfs an.<br />

Für welches Dateisystem Sie sich entscheiden, hängt stark von Verwendungszweck des Rechners ab.<br />

Weitere Informationen hierzu finden Sie in einem weiter fortgeschrittenen Kapitel, in dem auf die<br />

Besonderheiten der jeweiligen Filesysteme eingegangen wird.<br />

Partitionierungsempfehlung Auch wenn Sie jetzt vielleicht enttäuscht sind, kann an dieser Stelle keine<br />

detaillierte Empfehlung für diese oder jene Partitionierung gegeben werden, da diese zu stark vom<br />

späteren Einsatz des Rechners abhängt. Allerdings steht außer Frage, dass Sie eine eigene Boot- <strong>und</strong><br />

Swappartition einrichten sollten. Bei Neuinstallationen hat sich bisher auch immer eine eigene Partition<br />

für die Home-Verzeichnisse der Benutzer gerechnet, da man diese dann vor einer Formatierung<br />

bewahren kann.<br />

Software<br />

Auch der Installationsumfang kann bis hinzu einzelnen Paketen an die persönlichen Bedürfnisse angepasst<br />

werden. Allerdings verliert man schnell die Lust sich durch abertausende einzelner Softwarestückchen zu<br />

graben. Deshalb bietet SuSE bereits vorkonfigurierte Gruppen von Standard über Multimedia bis zu Netzwerk<br />

/ Server an. Außerdem können auch sämtliche Quelltexte mitinstalliert werden. Bedenken Sie bitte:<br />

Weniger ist hier oft mehr! Fehlende Pakete lassen sich später ohne weiteres nachinstallieren.<br />

Bevor Sie zum nächsten Schritt gehen können, prüft YaST2 eventuell auftretende Paketabhängigkeiten <strong>und</strong><br />

den zur Verfügung stehenden Speicherplatz in den Dateisystemen.<br />

Konfiguration des Systemstarts<br />

Hier kann der Bootloader LILO (<strong>Linux</strong> Loader) eingerichtet werden. YaST2 erkennt andere parallel installierte<br />

Betriebssysteme <strong>und</strong> richtet hierfür auch Einträge im Bootmenü ein. Auch wenn dies in den meisten<br />

Fällen klappt, sollten Sie zunächst LILO nicht in den MBR (Master Boot Record) sondern auf Diskette<br />

schreiben. Das entspricht auch der Standardeinstellung von YaST2. Später wenn Sie sicher sein können,<br />

dass alle Betriebssysteme von LILO gestartet werden können, steht dem Schreiben von LILO in den MBR<br />

nichts mehr entgegen.<br />

Zeitzone<br />

Sollte die automatische Erkennung fehlgeschlagen sein, wählen Sie einfach eine andere Zeitzone aus. Damit<br />

die Systemzeit richtig berechnet werden kann, muss <strong>Linux</strong> allerdings wissen, ob Ihre BIOS-Uhr der GMT<br />

oder lokalen Zeit folgt. Eine falsche Auswahl ist keine Beinbruch <strong>und</strong> kann später leicht korrigiert werden.<br />

Nach diesen zahlreichen Schritten kann nun der Installationsvorgang angestoßen werden.<br />

3.4.4. Installationsvorgang<br />

Nachdem alle Einstellungen Ihren Vorstellungen entsprechen, klicken Sie einfach weiter. Bevor Sie jedoch<br />

die nächste Abfrage mit “Ja“ beantworten, sollten Sie in jedem Fall nochmals die Partitionierung kontrollieren.<br />

Die grüne Warnung ist der letztmögliche Zeitpunkt, die Installation ohne Veränderungen am System<br />

vorzeitig zu verlassen. Erst wenn Sie sie übergehen, beginnt schließlich die Installation.<br />

Sie können sich jetzt eine Weile zurücklehnen <strong>und</strong> dem Treiben am Bildschirm zusehen. Zunächst wird<br />

die Partitionierung vorgenommen, dann erfolgt die Formatierung <strong>und</strong> das Anlegen der Dateisysteme. Anschließend<br />

werden die ausgewählten Softwarepakete installiert, was am meisten Zeit in Anspruch nimmt.<br />

38


3.4. Installationsschritte <strong>und</strong> Einstellmöglichkeiten<br />

Mittendrin verlangt YaST2 ggf. nach der Bootdiskette für LILO <strong>und</strong> kurz darauf werden zahllose Konfigurationsdateien<br />

geschrieben.<br />

Anschließend wird der Rechner durchgestartet <strong>und</strong> YaST2 erneut aufgerufen, um Benutzer <strong>und</strong> deren Passwörter<br />

anzulegen <strong>und</strong> weitere Hardwarekomponenten zu konfigurieren.<br />

Benutzer <strong>und</strong> Passwörter<br />

Zunächst soll ein Passwort für den Benutzer root vergeben werden. Dies ist der Adminstrator des Betriebssystems<br />

<strong>und</strong> verfügt damit über alle Rechte. Wählen Sie deshalb ein sicheres Passwort, das neben Buchstaben<br />

auch Ziffern <strong>und</strong> Sonderzeichen enthält <strong>und</strong> das so einprägsam ist, dass Sie es nicht vergessen!<br />

In einem zweiten Schritt sollte mindestens ein weiterer Benutzer angelegt werden. Unterlassen Sie es unter<br />

allen Umständen ständig als root zu arbeiten! Verwenden Sie stattdessen diesen zuletzt angelegten Benutzer,<br />

mit dessen eingeschränkten Rechten zwar keine administrativen Aufgaben wahrgenommen, aber eben auch<br />

das System nicht zerstört werden kann.<br />

weitere Hardwarekomponenten<br />

Zum Abschluss der Installation können noch etliche Hardwarekomponenten (derzeit Grafikkarte, Monitor,<br />

Netzwerkkarten, Drucker, Modem / ISDN, So<strong>und</strong>karte <strong>und</strong> TV-Karte) konfiguriert werden. Hier ist es sicher<br />

von Vorteil die verbaute Hardware zu kennen um die richtigen Treiber auswählen zu können. Alle Geräte<br />

können nachträglich noch mit YaST2 eingerichtet werden, so dass Sie diesen Schritt auch auf später verschieben<br />

können.<br />

Zwei Stolpersteine sind noch zu beachten: Schalten Sie zum einen die zu erkennenden Geräte ein <strong>und</strong><br />

zerstören Sie zum anderen mit einer zu hohen Auflösung / Bildwiederholfrequenz nicht Ihren Monitor.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Und fertig ist das SuSE <strong>Linux</strong>. Sollten dennoch Fragen offen geblieben sein oder verwenden Sie eine andere<br />

<strong>Linux</strong>-Distribution so ziehen Sie die vom jeweiligen Distributor mitgelieferte Dokumentation heran.<br />

39


3. Installation<br />

40


4. Erste Schritte<br />

Ist die Installation bereits erfolgreich verlaufen, können Sie die ersten Schritte in Ihrer <strong>Linux</strong> Umgebung<br />

wagen, auch dann wenn Sie zunächst eher stolpern als gehen.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die ersten Schritte in der neuen Umgebung zu gehen,<br />

• die verschiedenen Login-Möglichkeiten zu verwenden,<br />

• einige praktische Tastenkombinationen kennen,<br />

• die Uhrzeit zu stellen.<br />

4.1. <strong>Linux</strong> starten <strong>und</strong> beenden<br />

Je nach Installation erfolgt der Start von der Festplatte oder von Diskette. Seit SuSE 8.1 wird der Bootloader<br />

Grub verwendet. Gegebenenfalls trifft man aber auch noch auf den LiLo 1 . In der Bedienung sind sich beide<br />

jedoch so ähnlich, dass man als Anwender keinen Unterschied bemerken wird. Beide warten nämlich mit<br />

einem grafischen Menü auf, in dem mit den Pfeiltasten der gewünschte Eintrag ausgewählt <strong>und</strong> mit der<br />

Eingabetaste bestätigt werden kann. Wird keine Auswahl getroffen, wird das Betriebssystem hinter dem<br />

Standardeintrag nach einer bestimmten Zeitspanne hochgefahren.<br />

Darüber hinaus können im unteren Bereich am Bootprompt noch weitere Kernelanweisungen mitgegeben<br />

werden. Um genaueres hierüber zu erfahren, lesen Sie bitte das Kernel HowTo <strong>und</strong> das Kapitel 11 auf Seite<br />

97.<br />

4.1.1. Login<br />

Der Einloggvorgang ist Ihnen im wesentlichen bereits aus der Windowsumgebung bekannt. Sie müssen sich<br />

gegenüber dem System mit einem Benutzernamen <strong>und</strong> dem dazugehörigen Passwort ausweisen. Der Hintergr<strong>und</strong><br />

hierfür ist die Konzeption von <strong>Linux</strong> als Multiuser System <strong>und</strong> die damit verb<strong>und</strong>ene Verwaltung<br />

der Zugriffsrechte.<br />

Zu beachten ist, dass Sie sich als Systemverwalter root nur anmelden sollten, wenn dies notwendig ist,<br />

beispielsweise also bei der Systemadministration oder bei der Veränderung von Konfigurationsdateien, auf<br />

die Sie sonst keine Schreibberechtigung hätten. Solange Sie als root angemeldet sind, dürfen Sie faktisch<br />

alles im System. Gerade wenn man noch wenig Erfahrung im Umgang mit <strong>Linux</strong> hat, kann man auf diese<br />

Art <strong>und</strong> Weise viel kaputtmachen.<br />

1 Abk. für <strong>Linux</strong>Loader<br />

41


4. Erste Schritte<br />

Wie der Loginvorgang aussieht, hängt von der Konfiguration des Systems ab. Er kann grafisch, aber auch<br />

textbasiert erfolgen. Letztendlich geschieht bei beiden jedoch dasselbe. Mussten Sie sich textbasiert einloggen,<br />

so können Sie das X Window System nachträglich noch mit dem Aufruf startx aufrufen, insofern der<br />

X Server bereits korrekt konfiguriert wurde.<br />

4.1.2. Shutdown<br />

Auch das Herunterfahren kann grafisch oder textbasiert erfolgen. Niemals sollten Sie den Rechner einfach<br />

so abschalten oder gar den Netzstecker ziehen. Im günstigsten Fall wird beim nächsten Start die Festplatte<br />

auf Dateninkonsistenz geprüft, schlimmstenfalls können dabei aber auch Dateisysteme <strong>und</strong> damit sämtliche<br />

Daten zerstört werden.<br />

Wenn Sie unter X arbeiten, wählen Sie im Startmenü ”Abmelden” aus. Anschließend können Sie zwischen<br />

”Als anderer Benutzer anmelden”, ”Rechner ausschalten” <strong>und</strong> ”Rechner neustarten” auswählen.<br />

Sollten Sie an der Konsole arbeiten, so stehen verschiedene Befehle zur Auswahl. Für einen umfassenden<br />

Überblick sehen Sie sich bitte die Kommandoreferenz im Kapitel B ab Seite 305 an. Normalerweise kann<br />

nämlich nur der Systemadministrator mittels den Befehlen shutdown now bzw. halt das System herunterfahren.<br />

In der Standardkonfiguration ist es jedoch jedem Anwender gestattet, mit Hilfe der Tastenkombination<br />

Strg + Alt + Entf den Rechner durchzustarten. Warten Sie immer bis die Meldung ”System halted” oder<br />

”Runlevel 0 has been reached” erscheint, bevor Sie den Computer ausschalten. Neue Computersysteme werden<br />

nach der ATX Spezifikation ohnehin automatisch ausgeschaltet, ältere Rechner über den Powerschalter<br />

an der Gehäusefront. Sollte der Rechner durchstarten, können Sie auch während die BIOS Meldungen zu<br />

sehen sind, den Rechner einfach ausschalten.<br />

4.2. Tastatur <strong>und</strong> Maus<br />

Unter <strong>Linux</strong> gibt es spezielle Tastenkombinationen <strong>und</strong> Mausaktionen, die Ihnen das Leben sehr vereinfachen<br />

oder gar unerlässlich für die Bedienung des Betriebssystems sind.<br />

Tastenkombinationen<br />

Einige besondere Tastenkombinationen entnehmen Sie der Tabelle 4.1 auf Seite 42.<br />

42<br />

Tastenkombination Funktion<br />

Strg + Alt + Entf <strong>Linux</strong> beenden / X abmelden<br />

Strg + Alt + Backspace X Server beenden<br />

Strg + Alt + F1 bis F6 Zwischen den Textkonsolen wechseln<br />

Strg + Alt + F7 Zu X wechseln<br />

Shift + Bild auf / Bild ab Vorwärts / rückwärts blättern<br />

Tab einfach / doppelt Datei- <strong>und</strong> Kommandonamen vervollständigen<br />

Pos1, Ende, Entf, Backspace Normalerweise den Windowstasten entsprechend<br />

Tabelle 4.1.: Tastenkombinationen


Mausfunktionen<br />

4.3. X Window System<br />

Um Texte wie unter Windows über die Zwischenablage zu kopieren, gehen Sie unter <strong>Linux</strong> wie folgt vor.<br />

Markieren Sie zunächst mit gedrückter linker Maustaste, den gewünschten Text. Der so ausgewählte Text<br />

kann jetzt mit der mittleren Maustaste in einen anderen Text oder in ein anderes Programm eingefügt werden.<br />

Das Kopieren <strong>und</strong> Einfügen erfolgt also allein mit der Maus.<br />

4.3. X Window System<br />

Auch wenn KDE 2 nur einer von vielen Windowmanagern ist, so wird er doch von vielen Distributionen<br />

als Standardsystem eingerichtet <strong>und</strong> ist deswegen entsprechend weit verbreitet. Die Umsetzung der Benutzerführung<br />

orientiert sich zwar gr<strong>und</strong>sätzlich stark an der Windowsoberfläche, im Detail gibt es jedoch viele<br />

Unterschiede, die die Bedienung weniger intuitiv erscheinen lassen.<br />

Kontrollleiste Am unteren Bildschirmrand finden Sie die sogenannte Kontrollleiste. Von hier aus starten<br />

Sie Programme, haben Zugriff auf verschiedene Konfigurationswerkzeuge <strong>und</strong> nehmen die KDE Hilfe<br />

in Anspruch. Sie können per Klick auch die Arbeitsfläche oder das im Vordergr<strong>und</strong> befindliche<br />

Programm wechseln. Ähnlich wie unter Windows gibt es eine Art Systemtray mit im Hintergr<strong>und</strong><br />

laufenden Programmen <strong>und</strong> der aktuellen Uhrzeit.<br />

Programmleiste Diese findet sich normalerweise am oberen Bildschirmrand <strong>und</strong> zeigt für jede laufende<br />

Anwendung eine Schaltfläche. Unter KDE2 ist sie in die Kontrollleiste integriert worden.<br />

Virtuelle Desktops Die zur Verfügung stehende Arbeitsfläche wird durch virtuelle Desktops stark erweitert.<br />

Programme können auf anderen Arbeitsflächen gestartet oder im nachhinein dorthin verschoben<br />

werden. Sie können mit der Tastenkombination Strg + F1 bis F4 zwischen diesen bequem wechseln.<br />

Verknüpfungen <strong>Linux</strong> ist in dieser Hinsicht Windows sehr ähnlich. Verknüpfungen auf dem Desktop oder<br />

in der Menüstruktur verweisen auf Objekte wie Dateien, Laufwerke usw.<br />

Mausaktionen Generell benötigen Sie im X Window System nie einen Doppelklick. Ein einfacher Klick<br />

reicht aus, Programme zu starten oder Dateien <strong>und</strong> Verzeichnisse zu öffnen. Gegebenenfalls wird am<br />

Mauszeiger <strong>und</strong> in der Kontrollleiste signalisiert, dass gerade ein Programm gestartet wird.<br />

Mit der mittleren Maustaste erscheint beim Klicken auf den Desktop eine Liste mit allen derzeit laufenden<br />

Anwendungen sortiert nach Arbeitsfläche. Auf diese Weise können Sie schnell das Programm <strong>und</strong> den<br />

virtuellen Desktop wechseln.<br />

Die rechte Maustaste öffnet in der Regel ein Kontextmenü, wie Sie es von Windows gewohnt sind. Es ist<br />

kontextspezifisch <strong>und</strong> bietet verschiedene Befehle an, die zum jeweiligen Objekt passen. Sie haben auf diese<br />

Weise beispielsweise Zugriff auf die Eigenschaften einer Datei oder eines Verzeichnisses. Ein besonderes<br />

Kontextmenü haben die Titelleiste der Fenster anzubieten. Hiermit können Sie das Fenster selbst anpassen,<br />

dieses aber auch auf eine andere Arbeitsfläche verschieben. Der Desktop weist ein eigenes Menü auf,<br />

mit dem einige elementare KDE Kommandos, wie ”Neu erstellen”, ”Fenster anordnen” oder ”Bildschirm<br />

sperren”, durchgeführt werden können.<br />

Konqueror Eines der wichtigsten Programme ist der Konqueror. Er ist nicht nur ein einfacher Dateimanager,<br />

sondern hat sich mittlerweile auch zu einem Browser gemausert. Zudem kann er Dateien unterschiedlichster<br />

Formate anzeigen. Die Bedienung ist recht intuitiv, da viele Aktionen einfach per Drag<br />

and Drop ausgeführt werden können.<br />

2 Abk. für K Desktop Environment<br />

43


4. Erste Schritte<br />

Programme starten Wie bereits angesprochen, können Sie Programme aus dem K Menü in der Kontrollleiste<br />

starten. Es gibt jedoch noch eine zweite Möglichkeit, die weitaus schneller sein kann. Mit Alt<br />

+ F2 öffnet sich ein Fenster, in dem der Name eines Programms eingegeben werden kann. Das Feld<br />

merkt sich sämtliche Befehle <strong>und</strong> bietet diese später wieder an, so dass die Ausführung noch weiter<br />

beschleunigt wird.<br />

4.4. Konsole<br />

Konsolen haben trotz grafischer Benutzeroberflächen immer noch ihre Berechtigung. Sechs davon stehen<br />

sofort nach dem Hochfahren zur Verfügung, wobei Sie mit Strg + Alt + F1 bis F6 zwischen diesen wechseln<br />

können. Nach der obligatorischen Anmeldung steht Ihnen die mächtige Shell bei Ihrer Arbeit zur Seite.<br />

Sind Sie mit der Arbeit fertig oder möchten Sie den Benutzer wechseln, können Sie sich mit Strg + D<br />

ausloggen.<br />

Sollen neben der normalen Tätigkeit auch zugleich administrative Aufgaben erledigt werden, bietet es<br />

sich an, sich auf verschiedenen Konsolen unter verschiedenen Benutzernamen anzumelden.<br />

Natürlich können Sie mit der Shell auch unter X arbeiten. Oft findet sich ein entsprechendes Symbol auf<br />

der Startleiste des jeweiligen Windowmanagers. Alternativ kann man auch Anwendungen wie konsole <strong>und</strong><br />

xterm starten.<br />

4.5. Systemeinstellungen<br />

Uhrzeit<br />

Die Uhrzeit kann sehr komfortabel mit dem Eintrag ”Datum <strong>und</strong> Uhrzeit einstellen” im Kontextmenü der<br />

Systemuhr unter X gestellt werden. Allerdings muss man dazu das Administratorkennwort kennen. Mittlerweile<br />

findet hier auch ein Abgleich mit der Hardwareuhr statt, so dass die Änderungen auch nach einem<br />

Reboot erhalten bleiben.<br />

An der Konsole wird die Systemzeit mit dem Kommando date gesetzt <strong>und</strong> mit hwclock auf die Hardwareuhr<br />

geschrieben. Genauere Informationen zur Verwendung der beiden Kommandos in der Kommandoreferenz<br />

ab Seite 305.<br />

Übungen<br />

1. Starten Sie zweimal die Anwendung Kwrite <strong>und</strong> kopieren Sie Text mit Hilfe der Maus von der einen in<br />

die andere.<br />

2. Stellen Sie die Systemuhr richtig ein <strong>und</strong> kontrollieren Sie mit einem Reboot, ob diese auch anschließend<br />

richtig geht.<br />

3. Führen Sie einen Reboot aus der grafischen <strong>und</strong> der textbasierten Oberfläche aus.<br />

Zusammenfassung<br />

Sie sind im vorangegangenen Kapitel die ersten Schritte in der für Sie vielleicht noch ungewohnten <strong>Linux</strong><br />

Umgebung gegangen. Aufbauend auf diesen ersten Erfahrungen, können Sie sich in die nachfolgenden<br />

Themen stürzen.<br />

44


5. Dokumentation<br />

Von <strong>Linux</strong> wird behauptet, es sei das am besten dokumentierte Betriebssystem überhaupt. Aber nur wenn<br />

man weiß, wo man suchen muss, hat man auch gute Chancen das Gesuchte zu finden.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• welche verschiedenen Dokumentationsformen angeboten werden,<br />

• wo diese zu finden sind,<br />

• <strong>und</strong> bei welchen Fragestellungen diese weiterhelfen.<br />

5.1. Manual-Pages<br />

Manual-Pages gibt es zu den folgenden Themen.<br />

• Dokumentation für Kommandos<br />

• Systemaufrufe<br />

• Funktionen der Programmiersprache C<br />

• Dateiformate<br />

• Device-Dateien<br />

• Konfigurationsdateien<br />

• Spiele<br />

• Kommandos zur Systemadministration<br />

• Kernel-Funktionen<br />

• Verschiedenes<br />

Diese sind sowohl mit dem Kommando man an der Konsole als auch unter X mit xman verfügbar. Während<br />

Sie unter X mit der Maus durch die Manual-Pages navigieren, können Sie an der Konsole ausschließlich mit<br />

der Tastatur arbeiten. Übrigens sind sämtliche Pfade zu den Manual-Pages in der Datei /etc/manpath.config<br />

eingetragen.<br />

In folgenden Beispiel wird die Manual-Page des Kommandos cp aufgerufen.<br />

45


5. Dokumentation<br />

Tastenkürzel Funktion<br />

Cursortasten Text nach oben, unten, links oder rechts verschieben<br />

Pos1, Ende Sprung an den Anfang oder an das Ende des Textes<br />

Bild auf, Bild ab Seitenweises Blättern<br />

/muster Vorwärtssuche<br />

?muster Rückwärtssuche<br />

n Suche rückwärts wiederholen<br />

Shift + n Suche rückwärts wiederholen<br />

q Beenden<br />

h Anzeige eines ausführlichen Hilfetextes<br />

muctob@linux:˜> man cp<br />

Formatiere boot(7) neu, bitte warten...<br />

Tabelle 5.1.: Manual Pages - Bedienung mit der Tastatur<br />

Die gebräuchlichsten Befehle sind in der Tabelle 5.1 auf Seite 46 angegeben.<br />

Allerdings bringen die Manual-Pages auch einige Nachteile mit sich. Zum einen fehlt eine konsequente<br />

einheitliche Strukturierung <strong>und</strong> eine Verlinkung untereinander. Zum anderen wird auch demnächst die Pflege<br />

dieser Dokumentation eingestellt. An ihre Stelle treten die nachfolgend erläuterten Info-Pages.<br />

5.2. Info-Pages<br />

Wie bereits erwähnt wurde, sollen zukünftig die Info-Pages die bisher verwendeten Manual-Pages ablösen.<br />

Diese Dokumentation öffnet man mit dem Kommando info. Die Bedienung mit der Tastatur wird in der<br />

Tabelle auf Seite aufgezeigt.<br />

Tastenkürzel Funktion<br />

Cursortasten Text nach oben, unten, links oder rechts verschieben<br />

Pos1, Ende Sprung an den Anfang oder an das Ende des Textes<br />

Leertaste Sämtliche Info-Pages seitenweise vorwärts durchsehen<br />

Backspace Sämtliche Info-Pages seitenweise rückwärts durchsehen<br />

Tab Cursor zum nächsten Link bewegen<br />

Enter Aufruf eines Links eines Link<br />

l Zurück zum zuletzt angezeigten Text<br />

h, ? Ausführliche Bedienungsanleitung, Kommandoübersicht<br />

q Beenden des Info-Systems<br />

Tabelle 5.2.: Info Pages - Bedienung mit der Tastatur<br />

5.3. FAQs - Frequently Asked Questions<br />

FAQs begleiten die Dokumentation vieler umfangreicher Softwarepakete. Außerdem sind diese im Internet<br />

zu den verschiedensten <strong>Linux</strong>-Themen zu finden.<br />

46


5.4. HOWTOs<br />

5.4. HOWTOs<br />

Im Vergleich zu FAQs sind HOWTOs systematischer aufgebaut <strong>und</strong> vermitteln distributionsunabhängiges<br />

Gr<strong>und</strong>lagenwissen.<br />

Der entscheidende Vorteil dieser Dokumentationsform ist zugleich ihrer größter Nachteil. Der Umfang<br />

der als HOWTOs vorliegenden Doku ist so immens, dass man im ersten Moment erschlagen wird. Aufgr<strong>und</strong><br />

der sprechenden Benennung der Dokumente <strong>und</strong> der konsequenten Verwendung von HTML stößt man aber<br />

dennoch recht schnell auf die gesuchte Information.<br />

Dafür eignen sich HOWTOs auch für erfahrene Benutzer, die sich in ein bestimmtes Thema einlesen<br />

wollen.<br />

SuSE kopiert im Verlauf einer Standardinstallation eine Vielzahl an HOWTOs in deutscher <strong>und</strong> englischer<br />

Sprache gleich mit auf die Festplatte. Diese finden Sie im Verzeichnis /usr/share/doc/howto. Angefangen<br />

bei Beiträgen zur Shell <strong>und</strong> zum X-Window-System, über verschiedene Hardwarekomponenten bis hin<br />

zu den unterschiedlichsten Netzwerkdiensten ist diese Quelle mehr als umfangreich.<br />

5.5. LDP - <strong>Linux</strong> Documentation Project<br />

Im Rahmen des <strong>Linux</strong> Documentation Projects sind ganze Bücher zum Thema <strong>Linux</strong> entstanden. Ursprünglich<br />

waren auch diese Texte nur digital verfügbar, mittlerweile sind jedoch auch einige insbesondere vom<br />

Verlag O’Reilly aufgelegt worden. Der überwiegende Teil der Bücher ist in englischer Sprache geschrieben,<br />

einige wenige sind aber auch auf deutsch erhältlich.<br />

• Advanced Bash-Scripting Guide<br />

• <strong>Linux</strong> From Scratch<br />

• <strong>Linux</strong> Kernel 2.4 Internals<br />

• Securing & Optimizing <strong>Linux</strong>: The Ultimate Solution<br />

• The <strong>Linux</strong> Cookbook: Tips and Techniques for Everyday Use<br />

• The <strong>Linux</strong> System Administrators’ Guide<br />

• The <strong>Linux</strong> Network Administrator’s Guide, Second Edition<br />

Das Projekt ist im Internet unter www.linuxdoc.org zu finden. Neben den angesprochenen Büchern, sind<br />

hier auch die aktuellen HOWTOs, FAQs <strong>und</strong> Manual-Pages abrufbar. Dazu kommen die beiden Online-<br />

Zeitungen <strong>Linux</strong> Gazette <strong>und</strong> <strong>Linux</strong> Focus.<br />

5.6. Kernel<br />

Wenn Sie die Kernelquellen installiert haben, wird eine sehr umfangreiche Dokumentation im Verzeichnis<br />

/usr/src/linux angeboten. Allerdings setzt diese zum Teil f<strong>und</strong>ierte Kenntnisse im Bereich der Hardware<br />

<strong>und</strong> Kernelprogrammierung voraus. Als Lohn für die Mühen bekommen Sie jedoch einen sehr tiefen<br />

Einblick in die Funktionsweise des Betriebssystems. Wie die Hilfetexte zur Kernelkonfiguration gelesen<br />

werden können, erfahren Sie im Kapitel 13 ab Seite 111.<br />

47


5. Dokumentation<br />

5.7. KDE-Hilfe<br />

Ausführliche Hilfe zu KDE-Programmen erhalten Sie durch Drücken Taste F1 im jeweiligen Programm.<br />

Zudem bietet KDE eine allgemeine Online-Hilfe auf der Startleiste an. Sämtliche Hilfen basieren auf HTML<br />

<strong>und</strong> bieten die Annehmlichkeiten von Hypertexten<br />

5.8. Quellen im Internet<br />

Gr<strong>und</strong>sätzlich sind die Weiten des Internet bestens geeignet, um Dokumentation zu den unterschiedlichsten<br />

Themen, den ausgefallensten Problemen <strong>und</strong> der unmöglichsten Hardware aufzuspüren. Hier zeigt sich<br />

eine der wahren Stärken der OpenSource Community, die zudem durch die Bemühungen vieler Firmen<br />

professionellen Support zu leisten, ergänzt werden.<br />

Suchmaschinen Die Seite www.google.de/linux sticht unter den Suchmaschinen heraus, da Sie die Suche<br />

nach linuxspezifischem Wissen erleichtert <strong>und</strong> meist mit guten Ergebnissen überzeugen kann. Insbesondere<br />

wird man so bei speziellen Fehlermeldungen auf einen etwaigen Lösungsansatz aufmerksam.<br />

Knowledge Portal Auf dem unter www.www.linux-knowledge-portal.org erreichbaren Knowledge Portal<br />

sind leicht verständliche nach Rubriken sortierte Beiträge zu finden.<br />

Distributionen Ein guter Anlaufpunkt sind auch die Homepages des jeweiligen Distributors. Eine Liste mit<br />

URLs findet sich im Anhang A auf Seite 301ff.<br />

Insbesondere SuSE bietet mit der Hardware- <strong>und</strong> Supportdatenbank einen guten Service, sowohl für<br />

den Anwender als auch für den Administrator. So kann man bereits vor dem Kauf neuer Komponenten<br />

prüfen, in welchem Umfang diese unterstützt werden. Im Falle eines Fehlers findet sich hier oft bereits<br />

eine genaue Problemanalyse samt Anleitung zu deren Behebung.<br />

Wikis Ein Wiki ist ein völlig offenes System zur Verwaltung von Wissen. Im <strong>Linux</strong>-Umfeld sticht vor allem<br />

www.linuxwiki.de aus der Masse hervor.<br />

5.9. Software-Pakete<br />

In der Regel wird zu jedem Paket eine ordentliche Dokumentation mitgeliefert, die nach der Installation mit<br />

YaST2 meist unter /usr/share/doc/packages zu finden ist. Wollen Sie die Software selber kompilieren<br />

<strong>und</strong> installieren, so lesen Sie unbedingt die oft beigepackten Dateien README <strong>und</strong> INSTALL.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

48


6. X-Window-System<br />

Das X-Window-System ist für den <strong>Linux</strong>-Anwender die Schnittstelle zum Betriebssystem schlechthin. Aber<br />

es steckt mehr dahinter als nur bunte Fenster <strong>und</strong> Effekthascherei.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• den Aufbau des X-Window-Systems kennen,<br />

• verschiedene Windowmanager zu verwenden,<br />

• die eine oder andere Umgebungsvariable zu setzen bzw. Konfigurationsdatei anzupassen.<br />

6.1. Gr<strong>und</strong>lagen<br />

Die grafische Oberfläche von <strong>Linux</strong>, XFree86, weist eine längere Entwicklungsgeschichte auf. Um Sie nicht<br />

zu ermüden, möchte ich Ihnen die Details ersparen. Interessant ist jedoch die Tatsache, dass der Dienst eine<br />

Client-Server Architektur einsetzt.<br />

6.1.1. X-Server<br />

Der im Hintergr<strong>und</strong> laufende X-Server kümmert sich in erster Linie um die Bereitstellung einer einheitlichen<br />

hardwareunabhängigen Schnittstelle für verschiedenste Anwendungen. Zu seinen Aufgaben gehört die<br />

Ansteuerung der Grafikkarte, die Herstellung einer bestimmten Auflösung <strong>und</strong> Farbtiefe <strong>und</strong> die Verwaltung<br />

von Eingabegeräten, wie Maus <strong>und</strong> Tastatur.<br />

6.1.2. X-Client<br />

Der Benutzer arbeitet im X-Window-System mit sogenannten X-Clients, die aus den Anforderungen der<br />

verschiedensten Programme abstrakte Aufrufe generieren, die an den X-Server weitergegeben werden. Beispielsweise<br />

sind alle grafischen Elemente, die Sie auf dem Bildschirm sehen, von Ihrem X-Client erstellt.<br />

Gr<strong>und</strong>sätzlich kann man zwei große Gruppen von X-Clients unterscheiden. Zum einen die sogenannten<br />

Windowmanager, zum anderen alle sonstigen X-Anwendungen.<br />

Windowmanager Windowmanager sind spezielle X-Client-Programme, die speziell dafür ausgelegt sind,<br />

Ihnen eine komfortable Arbeitsumgebung bereitzustellen.<br />

X-Anwendungen Mit diesen grafischen Programmen, arbeiten Sie produktiv. Oftmals verzichten X-Anwendungen<br />

auf die besondere Darstellung von Rahmen <strong>und</strong> Titelzeile, damit die Windowmanager Gelegenheit haben,<br />

das Desktopdesign einheitlich zu gestalten.<br />

49


6. X-Window-System<br />

6.1.3. X-Architektur<br />

Bevor Sie weiterlesen, sollte die X-Architektur auf jeden Fall deutlich geworden sein. Dabei kann ein kleiner<br />

Versuch helfen, der es ermöglicht sämtliche Schichten des X-Window-Systems zu sehen.<br />

1. Damit man einen eigenen X-Server starten kann, müssen zunächst die bereits laufenden beendet werden.<br />

Melden Sie sich dazu als root an <strong>und</strong> wechseln Sie in den Runlevel 3.<br />

linux login: root<br />

Password:<br />

linux:˜ # init 3<br />

Jetzt gibt es nur noch die Möglichkeit des textbasierten Logins.<br />

2. An einer der übrigen Konsolen meldet man sich jetzt als unpriviligierter User an <strong>und</strong> startet den nackten<br />

X Server, den man jetzt auf der Konsole F7 zu sehen bekommt. Wie Sie sicher feststellen werden, ist<br />

hier nur eine grau gemusterte Oberfläche <strong>und</strong> ein Mauszeiger zu sehen.<br />

linux login: muctob<br />

Password:<br />

muctob@linux:˜> X &<br />

Durch das angehängte & wird der Prozess im Hintergr<strong>und</strong> gestartet. Sobald man sich am grau in grau<br />

gehaltenen X-Server satt gesehen hat, wechselt man wieder zur ursprünglichen Konsole zurück. Hier<br />

erscheint nach der Betätigung von Enter wieder der Prompt.<br />

3. Gr<strong>und</strong>sätzlich kann man jetzt bereits X-Anwendungen starten, die allerdings noch nicht wissen können,<br />

wo sie ihre Ausgabe hinschreiben sollen <strong>und</strong> deshalb mit einer Fehlermeldung abstürzen. Deshalb<br />

setzt man die DISPLAY Variable wie folgt.<br />

muctob@linux:˜> export DISPLAY=localhost:0<br />

4. Im Anschluss daran können jetzt X-Anwendungen gestartet werden. Rufen Sie diese einfach wie gewohnt<br />

von der Konsole aus auf.<br />

muctob@linux:˜> xterm &<br />

muctob@linux:˜> xclock &<br />

Das & dient auch hier wieder zum Starten im Hintergr<strong>und</strong>, so dass die Shell die Eingabe weiterer<br />

Befehle zulässt. Ein Blick auf den X-Server zeigt, dass die Anwendungen zwar gestartet sind, aber<br />

ohne Titelleiste, Fensterrahmen usw.<br />

5. Es fehlt noch immer der Windowmanager. Diesen kann man wie eine X-Anwendung einfach auf der<br />

Konsole nachstarten.<br />

50<br />

muctob@linux:˜> kde &<br />

Jetzt ist die X-Window-Umgebung brauchbar <strong>und</strong> sieht in der Regel genauso aus wie nach einem<br />

grafischen Login. Mit dem Unterschied, dass Sie jetzt in bisschen mehr über die Architektur des X-<br />

Window-Systems wissen.


6.1.4. Start<br />

6.2. Grafischer Login - Anmeldung<br />

Nach der Installation fährt das System normalerweise bis zu einem grafischen Login hoch. Ist das nicht der<br />

Fall kann nach geeigneter Konfiguration des X-Servers auch von der Konsole aus gestartet werden.<br />

Konsole<br />

Das Starten des X-Window-System kann mit startx bewerkstelligt werden.<br />

/.xinitrc Das Skript /.xinitrc legt fest, welcher Windowmanager verwendet wird <strong>und</strong> welche X-Anwendungen<br />

mitgestartet werden. Sämtliche Einträge sind mit einem & zu versehen, damit diese Programme im<br />

Hintergr<strong>und</strong> ausgeführt werden <strong>und</strong> nicht den Ablauf des Skripts behindern.<br />

Im nachfolgenden Beispiel wird der Konqueror <strong>und</strong> eine Konsole mitgestartet. Als Windowmanager wird<br />

Enlightenment verwendet.<br />

#<br />

# Add your own lines here...<br />

#<br />

konqueror &<br />

konsole &<br />

#<br />

# finally start the window manager<br />

#<br />

export WINDOWMANAGER=enlightenment<br />

exec $WINDOWMANAGER<br />

Grafischer Login<br />

In der Regel erfolgt die Anmeldung nach der Installation grafisch durch einen der folgenden Login-Manager.<br />

6.2. Grafischer Login - Anmeldung<br />

Standardmässig ist Ihr System von SuSE so konfiguriert, dass Sie keine Anmeldung im Textmodus vorfinden,<br />

sondern sich grafisch auf Ihrem Rechner einloggen können. Dafür dient bei Ihnen einer der folgenden<br />

Manager:<br />

6.2.1. Xdm<br />

Viele Einstellungen des xdm sind global auch für die anderen Loginmanager gültig. Daher machen Tuningmaßnahmen<br />

an xdm ofmals Sinn. SuSE stattet die grafische Anmeldung mit einem zusätzlichen Fenster,<br />

eine “xconsole” aus, vielfach stört dieses Fenster jedoch die Benutzer. Sie beseitigen dieses, indem Sie<br />

die entsprechenden Zeilen aus der Datei /usr/lib/X11/xdm/Xsetup entfernen. Die vorletzten drei Zeilen<br />

dürften diejenigen sein, die Sie suchen. Ein eigenes Hintergr<strong>und</strong>bild können Sie auch in dieser Datei einstellen.<br />

Suchen Sie einfach nach der Zeile, die mit backgro<strong>und</strong>= beginnt, <strong>und</strong> setzen Sie hier ihr Lieblingsbild<br />

ein. Dabei sollten Sie dieses zuvor ins Format .xpm umwandeln, <strong>und</strong> mit gzip packen.<br />

51


6. X-Window-System<br />

6.2.2. Kdm<br />

6.2.3. Gdm<br />

Der GDM kann bequem über eine grafische Oberfläche eingestellt werden. Dazu wählen Sie beim Login-<br />

Fenster aus dem Menü den Punkt aus. Nach der Eingabe des Root-Passworts finden Sie sich im Konfigurationsfenster<br />

wieder, mit dem Sie nach Lust <strong>und</strong> Laune einen eigenen Login-Bildschirm einstellen können.<br />

/.xsession Die oben angesprochene Datei ˜/.xinitrc wird eigentlich nur beim manuellen Start der X-<br />

Window-Umgebung benutzt. Erfolgt der Einstieg über einen der Login-Manager heißt das entsprechende<br />

Skript ˜/.xsession. Syntaktisch gilt für dieses dasselbe wie für ˜/.xinitrc (vgl. hierzu<br />

Abschnitt 6.1.4 auf Seite 51).<br />

6.3. Windowmanager<br />

Die Funktion des Windowmanagers ist vielleicht schon beim Versuch zur X-Architektur im Abschnitt 6.1.3<br />

auf Seite 50 deutlich geworden. Zum einen legt dieser das Look and Feel unter X fest, zum anderen gibt es<br />

auch gr<strong>und</strong>sätzliche Unterschiede in der Bedienung.<br />

Deshalb sollen die wichtigsten <strong>und</strong> am weitesten verbreiteten Windowmanager im Folgenden vorgestellt<br />

werden.<br />

Hinweis<br />

Auch wenn viele Anwendungen für die Verwendung unter einem bestimmten Windowmanager vorgesehen<br />

sind, erkennbar am führenden k bzw. g im Programmnamen, lassen sich diese auch in anderen Umgebungen<br />

problemlos ausführen.<br />

6.3.1. KDE<br />

KDE, mittlerweile in der Version 3.x verfügbar, ist der Standarddestop unter SuSE <strong>und</strong> wird zusammen mit<br />

vielen nützlichen <strong>und</strong> intuitiv bedienbaren KDE-Anwendungen installiert.<br />

6.3.2. Gnome<br />

Auch Gnome kann sich als Desktop sehen lassen. So verwendet beispielsweise RedHat diesen Windowmanager<br />

schon seit langem als Standardumgebung für X.<br />

6.3.3. Enlightenment<br />

Enlightenment, zu Deutsch “Erleuchtung” ist ein stark grafisch orientierter Fenstermanager. Er lebt vorallem<br />

von seiner Unterstützung für umfassend anpassen kann.<br />

Die Bedienung von Enlightenment erfolgt mit Tastatur <strong>und</strong> Maus. Dabei fungiert der Desktop im Gegensatz<br />

zu “echten” Arbeitsumgebungen wie KDE oder Gnome nur als reiner Hintergr<strong>und</strong>. Das soll sich erst ab<br />

der nächsten Version 0.17 ändern.<br />

Zum Starten von Programmen verwenden Sie einfache Menüs, die nach Klick mit der linken Maustaste<br />

auf den Desktop erscheinen. Die zahlreichen virtuellen Desktops, können bequem mit [SHIFT]-[ALT]-<br />

[Pfeiltaste] aufgerufen werden. Mit Hilfe eines Rechtsklicks auf den Desktop können Sie genauere Einstellungen<br />

vornehmen. Vor allem im Zusammenspiel mit Gkrellm <strong>und</strong> Eterm (wenn dieses installiert ist, können<br />

Sie es über [STRG]-[ALT]-[EINFG] starten) kann Enlightenment überzeugen.<br />

52


6.4. X im Netzwerk<br />

Eigene Menüs richten Sie ein, indem Sie die .menu Dateien im Verzeichnis ˜/.enlightenment anpassen<br />

<strong>und</strong> erweitern.<br />

Zum Verlassen von Enlightenment geht man über die besagten Menüs oder benutzt [STRG]-[ALT]-<br />

[ENTF].<br />

6.4. X im Netzwerk<br />

Durch die, auf den ersten Blick umständliche, X-Architektur, die das X-Window-System in Client <strong>und</strong><br />

Server teilt, eignen sich X-Anwendungen von Haus aus für die Verwendung im Netzwerk.<br />

6.4.1. X-Forwarding<br />

Verbindet man sich mit SSH auf einen anderen Rechner, so kann das X-Forwarding mit der Option -X<br />

eingeschaltet werden.<br />

muctob@linux:˜> ssh -X laptop<br />

Nach dem Verbindungsaufbau ist die DISPLAY Variable auf dem entfernten System so gesetzt, dass dort<br />

gestartete grafische Anwendungen ihre Ausgaben an den lokalen X-Server übermitteln.<br />

6.4.2. VNC<br />

Finden Sie im Kapitel über Netzwerke beschrieben.<br />

6.5. Wichtige Tools<br />

xkill<br />

Wenn ein X-Programm abgestürtzt ist, kann man umständlicherweise auf eine freie Kommandozeile wechseln,<br />

um die PID des abgestürzten Programmes herauszufinden <strong>und</strong> es daraufhin durch kill zu beenden.<br />

Das ganze geht auch komfortabler, durch das Programm xkill.<br />

Wenn Sie diesses aufrufen, verwandelt sich Ihr Mauszeiger in einen Totenkopf, <strong>und</strong> das nächste Programmfenster<br />

was sie damit anklicken wird augenblicklich “gekillt”.<br />

6.6. Truetype Schriftarten<br />

Bei der Arbeit mit X kann es vorkommen, dass Sie einige Schriften, die Sie von Windowssystemen gewöhnt<br />

sind, schmerzhaft vermissen. <strong>Linux</strong> schafft dem Problem Abhilfe, indem Sie Gelegenheit bekommen, Ihre<br />

Schriften in das X - System über den Truetype Manager xftt einzubinden.<br />

6.6.1. Truetype <strong>und</strong> X<br />

Truetypeschriften automatisch installieren<br />

Besonders einfach können Sie Truetypeschriften unter <strong>Linux</strong> installieren, wenn Sie KDE 2/3 mit dem kfontinst<br />

Werkzeug installiert haben <strong>und</strong> ein MS Betriebssystem auf einer anderen Partition Ihres Rechners<br />

betreiben. Dann können Sie zuerst die entsprechende Windows-Partition in Ihren Verzeichnisbaum mounten:<br />

Für Ihre erste Partition zum Beispiel mit:<br />

53


6. X-Window-System<br />

mount /windows/c<br />

auch die entsprechenden grafischen Methoden aus KDE2/3 führen Sie zum gewünschten Ergebnis.<br />

Im nächsten Schritt müssen die Schriften aus dem Windowssystem nach <strong>Linux</strong> überführt werden. Das<br />

können Sie entweder manuell wie unter 6.6.1 beschrieben erreichen, oder Sie verwenden das KDE Werkzeug<br />

kfontinst.<br />

Sie können die Truetypefonts entweder als User oder als Administrator einrichten, am geschicktesten wäre<br />

in diesem Fall aber die Lösung als Administrator, damit alle User von diesen Einstellungen profitieren<br />

können. Sie Tippen dazu in einem X Terminal ein:<br />

für KDE2:<br />

kcmshell System/kfontinst<br />

für KDE3:<br />

kcmshell kcmfontinst<br />

Im folgenden Wizard werden Sie Schritt für Schritt durch die Einstellungen geführt, bis Sie den Hauptbildschirm<br />

erreicht haben. Hier können Sie nun den Ordner mit den hinzuzufügenden Truetype Schriften<br />

auswählen, indem Sie auf Change Folder drücken. Danach sehen Sie eine Auflistung aller gef<strong>und</strong>enen Truetypeschriften,<br />

von denen Sie die markieren, die Sie übernehmen wollen, <strong>und</strong> dann Install drücken.Nun<br />

erledigt das Werkzeug die restlichen Schritte für Sie.<br />

Truetypeschriften halbautomatisch installieren<br />

SuSE darf aus lizenzrechtlichen Gründen die gängigen Truetype Schriften wie Arial, Times new Roman<br />

oder Verdana nicht mit ausliefern. Jedoch ist es gestattet, als gewöhnlicher Benutzer diese Schriften vom<br />

Microsoft Server im Internet herunterzuladen <strong>und</strong> herzunehmen.<br />

Führen Sie dazu als “root” folgenden Befehl aus, während Sie eine Internetverbindung aktiv haben:<br />

fetchmsttfonts<br />

Im Laufe dieses Skripts werden Sie gebeten, die Microsoft End User Licence zu bestätigen, was Sie wohl<br />

nicht umgehen werden können!<br />

Nach diesem Schritt stehen die Truetypefonts auch unter X zur Verfügung.<br />

Truetypeschriften manuell installieren<br />

Kopieren Sie die gewünschten Schriften ins Verzeichnis /usr/X11R6/lib/X11/fonts/truetype/ <strong>und</strong><br />

führen Sie die folgenden Befehle als “root” aus:<br />

cd /usr/X11R6/lib/X11/fonts/truetype/<br />

/usr/X11R6/bin/ttmkfdir|sed s/ˆ[0-9]*// > fonts.scale.neu<br />

Nun müssen Sie noch SuSEconfig ausführen <strong>und</strong> X neu starten!<br />

6.6.2. Antialiasing überprüfen<br />

Der Befehl xmag vergrößert beliebige Stellen Ihres Desktops. Rufen Sie aus einer Konsole heraus xmag auf<br />

<strong>und</strong> klicken die kleine Ecke über einen beliebigen Text, z.B. ein KDE2 Menü. Wenn Sie nun in dem xmag<br />

Fenster Zwischen den Pixeln der normalen Schrift noch Pixel in verschiedenen Graustufen bzw. Farbabstufungen<br />

der entsprechenden Schriftfarbe sehen, ist Font Anti Aliasing aktiviert.<br />

54


6.6.3. Open Office <strong>und</strong> Truetype<br />

6.6. Truetype Schriftarten<br />

Die Truetype Schriften können Sie unter Open (bzw. Star) Office erfordern gesonderte Behandlung. Wenn<br />

Sie Ihre Schriften mit kfontinst wie unter 6.6.1 eingerichtet haben, dann haben Sie vermutlich auch die Einrichtung<br />

von Open/Star Office angewählt. In diesem Fall sind Sie fertig mit der Arbeit. Wenn Sie allerdings<br />

die Schriften manuell wie unter 6.6.1 oder 6.6.1 beschrieben installiert haben, so müssen Sie noch einen<br />

Extrainstallationsschritt machen. Das mit Open/Star Office mitgelieferte Werkzeug spadmin erfüllt diesen<br />

Zweck. Sie können als Administrator mit dem Aufruf spadmin im Open Office Verzeichnis die Installation<br />

starten. Mit einem Klick auf Fonts <strong>und</strong> dann Add. . . werden Sie in einer Dialogbox nach dem Quellverzeichnis<br />

der Truetypefonts gefragt, für das Sie für gewöhnlich /usr/X11R6/lib/X11/fonts/truetype wählen.<br />

Mit einem Klick auf Select All <strong>und</strong> OK sind sie fertig!<br />

6.6.4. Truetypeschriften in Mozilla<br />

Ab Mozilla-Version 0.9.9 funktionieren die Truetypeschriftarten auch. . . wie’s geht können Sie hier lesen:<br />

• Wechseln Sie ins Verzeichnis [pfad, wo Mozilla sich befindet]/defaults/pref<br />

• Editieren Sie die Datei unix.js<br />

• Setzen Sie die Option font.FreeType2.enable auf true<br />

• Editieren Sie die Liste der Verzeichnisse von TrueType-Schriftarten nach Ihrem Geschmack. Sie<br />

müssen dazu die Variablen font.directory.truetype.? auf die entsprechenden Verzeichnisse setzen.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

55


6. X-Window-System<br />

56


7. Kommandozeile<br />

Auch wenn die grafische Oberfläche bereits den meisten Anforderungen des Anwenders gewachsen ist, der<br />

wissbegierige Tüftler kommt um die Kommandozeile nicht drumherum.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die Editoren vi <strong>und</strong> emacs kennen,<br />

• gr<strong>und</strong>legende Dateisystemoperationen mit dem mc auszuführen,<br />

• die Funktion <strong>und</strong> Umgebung der Shell zu verwenden <strong>und</strong> an Ihre Bedürfnisse anzupassen.<br />

7.1. Editoren<br />

Unter <strong>Linux</strong> steht eine Unzahl an Editoren zur Verfügung. An dieser Stelle sollen zwei der wichtigsten, da<br />

am weitesten verbreiteten, vorgestellt werden. Dabei wird auf die textbasierte Bedienung eingegangen, da<br />

erstens die grafische ohnehin intuitiv bedient werden kann <strong>und</strong> zweitens auf vielen Systemen im operativen<br />

Betrieb kein X installiert sein wird.<br />

Zunächst einige Befehle in Tabelle 7.1 auf Seite 57, mit denen man sich Dateien anzeigen lassen kann.<br />

Befehl Funktion<br />

cat datei Gibt die Datei ohne Unterbrechung am Bildschirm<br />

aus.<br />

more datei Gibt die Datei zeilenweise aus.<br />

less datei Zeigt die Datei an, wobei vorwärts <strong>und</strong> rückwärts<br />

gescrollt werden kann.<br />

Tabelle 7.1.: Verschiedene Dateibetrachter<br />

Manchmal kommt es nach der Anzeige einer binären Datei zur Fehlinterpretation des Zeichensatzes. Es<br />

werden dann nur noch seltsame Zeichen am Bildschirm angezeigt. Führen Sie in einem solchen Fall den<br />

Befehl reset aus.<br />

Achtung Außerdem sollte darauf geachtet werden, dass nach der letzten Zeile einer Konfigurationsdatei<br />

nochmals umgebrochen wird. Andernfalls kann es sein, dass die gesamte Datei falsch interpretiert wird.<br />

57


7. Kommandozeile<br />

7.1.1. vi<br />

Auch wenn man diesen Editor mit dem Befehl vi startet, muss sich nicht zwangsläufig der vi dahinter verbergen.<br />

Tatsächlich ist dieser nämlich urheberrechtlich geschützt <strong>und</strong> wird mit <strong>Linux</strong> nicht mitgeliefert.<br />

Deshalb wird ein Editor namens vim gestartet, der jedoch in der Bedienung dem vi bis aufs Haar gleicht.<br />

Auch wenn eingefleischte vi Benutzer es niemals zugeben würden, so ist dennoch festzustellen, dass dessen<br />

Bedienung sehr gewöhnungsbedürftig ist. An dieser Stelle wird aus zwei Gründen genauer auf den vi eingegangen.<br />

Zum einen ist dieser Editor sehr kompakt <strong>und</strong> steht deshalb bei Wartungsarbeiten oder beim Booten<br />

von einer Notfalldiskette zur Verfügung. Zum anderen ist der vi auf vielen Unix-Systemen der Standardeditor,<br />

der aufgr<strong>und</strong> der Konfiguration ungefragt aufgerufen wird. Demnach sollte man zumindest wissen, wie<br />

man diesen wieder verlässt. Der vi unterscheidet zwischen zwei Modi: den insert-Modus <strong>und</strong> den complexcommand-Modus.<br />

Wie aus den Bezeichnungen unschwer zu erkennen ist, wird beim erstgenannten der Text<br />

editiert <strong>und</strong> bei letzterem werden bestimmte Befehle an den Editor übertragen. Dabei gelten die Tastaturbelegungen<br />

aus Tabelle 7.2 auf Seite 58.<br />

7.1.2. emacs<br />

Tastenkürzel Funktion<br />

I Wechselt in den Insert-Modus<br />

Esc Beendet den Insert-Modus<br />

H / L Cursor Bewegung nach links / rechts<br />

J / K Cursor Bewegung ab / auf<br />

X Löscht ein Zeichen<br />

D D Löscht die aktuelle Zeile<br />

P Gelöschte Zeile an der Cursor-Position einfügen.<br />

U Generelles Undo<br />

: Wechselt in den Complex-Command-Modus<br />

:w name Speichert den Text unter einem neuen Namen<br />

:wq Speichert <strong>und</strong> beendet den vi<br />

:q! Beendet den vi<br />

:help Startet die Hilfe<br />

Tabelle 7.2.: vi - Bedienung mit der Tastatur<br />

Der emacs ist der Editor unter <strong>Linux</strong> schlechthin. Er ist aufgr<strong>und</strong> der beliebigen Erweiter- <strong>und</strong> Programmierbarkeit<br />

sehr mächtig. Im Rahmen dieses Kurses kann von daher nur auf die gr<strong>und</strong>legende Bedienung<br />

eingegangen werden, wobei anzumerken ist, dass vor allem, wenn große Textmengen oder Programmcode<br />

bearbeitet werden müssen, sich der emacs geradezu anbietet.<br />

Auch der emacs ist unter sämtlichen Unix-Versionen, zusätzlich aber auch unter Windows verfügbar.<br />

Gr<strong>und</strong>sätzlich macht dieser jedoch Probleme bei der Interpretation von Tasten wie Pos1, Entf usw. Dies<br />

liegt an der Defaultkonfiguration, die es Emacs aufgr<strong>und</strong> eines eingeschränkten Tastatur- <strong>und</strong> Zeichensatzes<br />

ermöglicht, plattformunabhängig lauffähig zu sein. Allerdings treten diese Probleme bei den Distributionen<br />

für PCs eher selten auf, da hier bereits die richtige Konfiguration bereitgestellt wird. Auch hier sieht die<br />

Bedienung zunächst eher abschreckend aus. Es wimmelt nur so von Strg- <strong>und</strong> Alt-Tastenkombinationen,<br />

mit denen die unzähligen Kommandos aufgerufen werden. Wenn mehrere Tastenkombinationen angegeben<br />

58


7.1. Editoren<br />

sind, werden diese nacheinander ausgeführt. Tabelle 7.3 auf Seite 59 wird versucht, einen kleinen Überblick<br />

zu vermitteln.<br />

Tastenkürzel Funktion<br />

Strg + X, Strg + F Lädt eine neue Datei.<br />

Strg + X, Strg + S Speichert die aktuelle Datei.<br />

Strg + X, Strg + S, ! Speichert alle offenen Dateien<br />

Strg + X, Strg + W Speichert die Datei unter einem neuen Namen.<br />

Strg + G Bricht die Eingabe eines Kommandos ab.<br />

Strg + X, I Fügt die Datei in den vorhanden Text ein<br />

Strg + D Löscht das Zeichen an der aktuellen Cursorposition<br />

Alt + D Löscht das nächste Wort<br />

Strg + K Löscht eine Zeile<br />

Alt + M Löscht den nächsten Absatz<br />

Strg + X, U Macht das Löschen rückgängig<br />

Strg + Y Fügt den zuletzt gelöschten Text an der aktuellen Cursorposition<br />

wieder ein.<br />

Strg + Leertaste Setzt einen unsichtbaren Markierungspunkt.<br />

Strg + X, Strg + X Vertauscht Cursorposition <strong>und</strong> Markierungspunkt.<br />

Strg + W Löscht den Text zwischen Markierung <strong>und</strong> aktueller Cursorposition<br />

Strg + Z Verlässt den emacs kurzzeitig<br />

Strg + X, Strg + C Beendet den emacs<br />

Tabelle 7.3.: Emacs - gebräuchliche Tastaturkommandos<br />

Während der Bearbeitung einer Datei legt Emacs in regelmäßigen Abständen eine Kopie mit dem aktuellen<br />

Zustand der Datei in einer Datei namens #dateiname# an. Beim Speichern wird ebenfalls eine Kopie des<br />

ursprünglichen Zustandes der Datei unter dateinameãbgelegt. Diese Dateien können bei einem unvorhergesehenen<br />

Systemausfall beim erneuten Start von emacs wiederhergestellt werden.<br />

Innerhalb einer Datei kann man sich, wenn die Tastatur korrekt konfiguriert ist, mit den Cursortasten<br />

bewegen <strong>und</strong> mit Del bzw. Entf Zeichen löschen. Sollte dies nicht möglich sein, so funktionieren die<br />

Tastenkombinationen aus Tabelle 7.4 auf Seite 59 auf jeden Fall. Der emacs unterstützt verschiedene Be-<br />

Tastenkürzel Funktion<br />

Strg + F Cursor ein Zeichen nach rechts<br />

Strg + B Cursor ein Zeichen nach links<br />

Strg + P Cursor eine Zeile nach oben<br />

Strg + N Cursor eine Zeile nach unten<br />

Strg + V Text eine Seite nach unten<br />

Alt + V Text eine Seite nach oben<br />

Tabelle 7.4.: Emacs - Ersatz für die Pfeiltasten<br />

arbeitungsmodi (z.B. für LATEX -Dateien, c-Dateien, Fließtexte usw.), in denen zusätzliche Kommandos zur<br />

59


7. Kommandozeile<br />

Bearbeitung spezieller Dateien zur Verfügung stehen. Weiterhin kann man die Kommandos auf zweierlei<br />

Arten eingeben. Einerseits über die bereits betrachteten Tastenkombinationen, andererseits durch die komplette<br />

Angabe des Kommandonamens. Eine solche Eingabe wird durch Alt + X eingeleitet, dann folgt das<br />

Kommando, das sogar durch Tab automatisch ergänzt wird.<br />

Insgesamt ist die Funktionalität des emacs sehr umfangreich. Es gibt beispielsweise noch die Möglichkeit,<br />

Texte in Registern zwischenzuspeichern, die Groß- <strong>und</strong> Kleinschreibung zu verändern, Zeichenketten<br />

zu vertauschen, Tabulatoren zu setzen, Texte ein- bzw. auszurücken, Zeichenketten zu suchen <strong>und</strong> zu ersetzen<br />

<strong>und</strong> nicht zuletzt Syntaxhervorhebung zu aktivieren. In der Dokumentation trifft man häufig auf Tastenkombinationen,<br />

die mit C bzw. M beginnen. C steht hier für Control also Strg <strong>und</strong> M für Meta folglich<br />

Alt.<br />

Zu guter Letzt bringt der emacs noch eine umfangreiche Hilfe mit, die man mit der Tastenkombination<br />

F1 + Taste aufruft, wie in Tabelle 7.5 auf Seite 60 angedeutet.<br />

Tastenkürzel Funktion<br />

F1, F1 Übersicht über vorhandene Hilfekommandos<br />

F1, A text Enter Übersicht über alle Kommandos, die text enthalten.<br />

F1, B Übersicht über alle Tastenkürzel<br />

F1, C tastenkürzel Kurzbeschreibung des zugeordneten Kommandos<br />

F1, F kommando Enter Kurzbeschreibung des Kommandos<br />

F1, Shift + F Emacs FAQ<br />

F1, I Zeigt das info-System für die Hilfetexte<br />

F1, T Einführung in die Bedienung des Emacs<br />

F1, Strg + P Informationen über die Idee freier Software<br />

Tabelle 7.5.: Hilfe unter Emacs<br />

7.2. Dateimanager - Midnight Commander<br />

Oft ist es eher umständlich mit Hilfe eines Kommandos Dateien zu kopieren bzw. zu verschieben, Verzeichnisse<br />

anzulegen oder Dateien zu editieren. Außerdem lässt sich nur schwer allein mit textbasierten<br />

Kommandos ein Überblick über das Dateisystem gewinnen. Der textbasiert Midnight Commander (Kommando<br />

zum Aufruf: mc) bringt Abhilfe.<br />

Übrigens lässt sich der Midnight Commander auch als Editor verwenden, indem man in mit dem Parameter<br />

-e aufruft:<br />

mc -e [Dateiname]<br />

7.2.1. Bedienung<br />

Die Oberfläche des Midnight Commanders gliedert sich in vier Bereiche.<br />

Menuzeile (zu erreichen mit F9) Hier finden sich teils ausgedehnte Menüs, die weitere Befehle anbieten.<br />

Verzeichnis- / Dateifenster (Tabulator zum wechseln) Hier sehen Sie die nicht nur die Verzeichnisstruktur<br />

des Dateisystems <strong>und</strong> die zahlreichen Dateien, sondern können auch anhand verschiedener Symbole<br />

60


7.2. Dateimanager - Midnight Commander<br />

zwischen symbolischen Links, normalen <strong>und</strong> ausführbaren Dateien unterscheiden. Während Sie mit<br />

Enter in ein Unterverzeichnis wechseln, gelangen Sie mit dem Eintrag .. <strong>und</strong> Enter wieder in das<br />

übergeordnete Verzeichnis. Mit der Taste Einfg können mehrere Dateien / Verzeichnisse auf einmal<br />

ausgewählt werden. Mehrere Dateien können auch mit der Taste + ausgewählt bzw. mit der Taste -<br />

abgewählt werden. Die Taste * verkehrt Ihre Auswahl in das Gegenteil.<br />

Kommandozeile Hier können Sie wie gewohnt einzelne Befehle absetzen, deren Ausgabe jedoch von den<br />

darüberliegenden Fenstern verdeckt wird. Die Tastenkombination Strg + O bewirkt ein Aus- bzw.<br />

Einblenden selbiger.<br />

Funktionszeile Die gängigsten Kommandos werden am unteren Rand des Bildschirms angezeigt. Mit der<br />

entsprechenden F-Taste können diese aufgerufen werden.<br />

7.2.2. Konfiguration<br />

Der Midnight Commander kann sehr flexibel an die Bedürfnisse des Benutzers angepasst werden. Aktivieren<br />

Sie mit der Taste F9 das Menü <strong>und</strong> wählen Sie den Punkt Optionen. Im Menü Konfiguration bieten sich<br />

Ihnen eine ganze Reihe von Optionen, die teils selbst erklärend sind, teils hier vorgestellt werden.<br />

Fensteroptionen (panel options) Wie in Tabelle 7.6 auf Seite 61 erläutert.<br />

Option Wirkung<br />

verborgene Dateien anzeigen<br />

(show hidden files)<br />

alle Dateien gemischt<br />

(mix all files)<br />

Normalerweise werden Dateien, die mit einem<br />

Punkt beginnen, nicht angezeigt, da dies unter <strong>Linux</strong><br />

eine versteckte Datei markiert.<br />

Ist diese Option aktiv, wird bei der Anzeige kein Unterschied<br />

zwischen Dateien <strong>und</strong> Verzeichnisse gemacht.<br />

Ist sie nicht aktiv, werden Verzeichnisse (<strong>und</strong><br />

Verknüpfungen zu Verzeichnissen) immer zuerst angezeigt.<br />

Tabelle 7.6.: mc - Fensteroptionen<br />

Andere Optionen (other options) Wie in Tabelle 7.7 auf Seite 62 angegeben.<br />

Darstellungsoptionen (Layout) Diese erklären sich eigentlich von selbst. Hervorheben will ich nur die<br />

Optionen zur Fensteraufteilung. Unter <strong>Linux</strong> können die Namen von Dateien <strong>und</strong> Verzeichnissen sehr<br />

lang werden. Bei vertikaler Teilung der Anzeigefenster werden u.U. die Namen abgekürzt. Teilen Sie<br />

hingegen die Fenster horizontal, bieten Ihnen die dann übereinander liegenden Fenster weitaus mehr<br />

Platz zur Anzeige. Der Umgang mit diesen horizontalen Fenstern mag etwas ungewohnt sein, aber<br />

die meist vollständige Anzeige der Namen macht dies mehr als wett.<br />

Darstellungsbits (Display bits) Hier legen Sie fest, ob nationale Sonderzeichen angezeigt bzw. deren Eingabe<br />

zugelassen wird. Wählen Sie sinnvollerweise ISO 8859-1 <strong>und</strong> die Option Komplette 8-Bit Eingabe.<br />

61


7. Kommandozeile<br />

62<br />

Option Wirkung<br />

berechne Gesamtsummen<br />

(compute totals)<br />

internen Editor benutzen<br />

(use internal edit)<br />

internen Betrachter benutzen<br />

(use internal view)<br />

Vor allen Datei-Operationen werden zunächst die<br />

Gesamtgröße <strong>und</strong> die Anzahl aller betroffenen Dateien<br />

berechnet. Damit erhalten Sie eine präzisere<br />

Fortschrittsanzeige, allerdings auf Kosten der Geschwindigkeit.<br />

Legt fest, ob Sie für das Bearbeiten von Dateien den<br />

eingebauten oder einen externen Editor verwenden<br />

wollen. Wird diese Option deaktiviert, so wird der in<br />

der Umgebungsvariable EDITOR angegebene gestartet.<br />

Wenn Sie zum Ansehen von Dateien nicht den eingebauten<br />

Betrachter verwenden wollen, deaktivieren<br />

Sie diese Option. Es wird dann der in der Umgebungsvariablen<br />

PAGER angegebenen Betrachter benutzt.<br />

In der rechten oberen Ecke wird, wenn ein Vorgang<br />

länger dauert, ein rotierender Strich angezeigt.<br />

rotierender Strich (rotating<br />

dash)<br />

sicheres Löschen Die Vorgabe im Bestätigungsdialog wechselt von<br />

der Ja zur Nein Schaltfläche. Beim Löschen von Verzeichnissen<br />

müssen Sie das Wort ja eingeben.<br />

Tabelle 7.7.: mc - Andere Optionen


7.2.3. Ausführung typischer Arbeiten<br />

7.3. Bash - Bourne Again Shell<br />

Kopieren / Verschieben von Dateien / Verzeichnissen Es empfiehlt sich, bevor Dateien bzw. Verzeichnisse<br />

kopiert werden, in einem der beiden Fenster das Ziel bereits auszuwählen, da dieses dann in den<br />

Dialog übernommen wird <strong>und</strong> man sich unter Umständen enorme Tipparbeit erspart. Anschließend<br />

markieren Sie die Dateien mit Einfg, +, - bzw. * <strong>und</strong> Kopieren (F5) / Verschieben (F6) die Dateien.<br />

Schnelles Mounten von Datenträgern Wechseln Sie mit dem Cursor zum Mountpoint <strong>und</strong> drücken Sie<br />

dann F2. Im erscheinenden Fenster wählen Sie das @ <strong>und</strong> geben im darauffolgenden Dialog mount<br />

bzw. umount ein.<br />

Navigieren in gepackten Dateien (.tar, .rpm, .zip) Daten in gepackten Dateien können problemlos angezeigt<br />

werden. Auch wenn das Öffnen einen Moment dauert, danach können Sie sich wie in einer<br />

normalen Verzeichnisstruktur bewegen.<br />

Das war jetzt nur ein kurzer Einblick in die interssantesten Möglichkeiten des Midnight Commanders.<br />

Es gibt noch eine ganze Reihe weiterer Möglichkeiten, die diesen textbasierten Dateimanager für mich zu<br />

einem unverzichtbaren Werkzeug werden ließen, das ich bei der täglichen Arbeit nicht missen möchte.<br />

7.3. Bash - Bourne Again Shell<br />

Die bourne again shell ist der Standardkommandointerpreter unter <strong>Linux</strong>. Sie ermöglicht Ihnen die Eingabe<br />

<strong>und</strong> Ausführung von Kommandos. Zudem stellt Sie eine eigene Programmiersprache zur Verfügung, die<br />

zur Erstellung von Shell-Scripts verwendet werden kann. Im folgenden Abschnitt wird zunächst auf die<br />

Verwendung der bash eingegangen. Themen sind hier beispielsweise die Ein- <strong>und</strong> Ausgabeumleitung, die<br />

Kommunikation zwischen mehreren Prozessen <strong>und</strong> die Verwaltung von Shell-Variablen.<br />

7.3.1. Shell - Benutzerschnittstelle<br />

Die Shell ist die Schnittstelle zwischen dem Anwender <strong>und</strong> dem Betriebssystem <strong>Linux</strong>. Mit ihrer Hilfe werden<br />

Kommandos ausgeführt <strong>und</strong> Programme gestartet. Der Begriff Kommandointerpreter rührt daher, dass<br />

die Shell zunächst die Eingaben des Benutzers deutet <strong>und</strong> dann an die jeweilige Anwendung weitergibt. Wie<br />

bereits angesprochen stellt sie außerdem eine leistungsfähige Programmiersprache zur Verfügung, mit der<br />

Arbeitsabläufe automatisiert werden können. Dabei ermöglichen es einige besondere Shell-Kommandos<br />

innerhalb dieser Programme Variablen zu verwenden, Abfragen <strong>und</strong> Schleifen zu bilden usw. Letztendlich<br />

handelt es sich hierbei um einfache Textdateien, die aufgr<strong>und</strong> Ihrer besonderen Verwendung als Shell-<br />

Skripte bezeichnet werden.<br />

Für jeden Anwender, der im System einen Benutzeraccount hat, ist eine default shell vorgesehen. Diese<br />

wird bei der Einrichtung des Benutzers in der Datei /etc/passwd hinterlegt. Mit dem Befehl chsh kann<br />

der Anwender diese Einstellung nachträglich anpassen. Eine Liste der verwendbaren Shells findet sich in<br />

/etc/shells.<br />

Abfrage der installierten bash-Version: echo $BASH_VERSION<br />

Abfrage der gerade aktiven Shell: echo $0<br />

7.3.2. Umgebungsvariablen<br />

Die Bash verwendet verschiedene Dateien zur Initialisierung der Umgebung. Wenn sie als Loginshell aufgerufen<br />

wird, werden diese Dateien in der folgenden Reihenfolge ausgewertet.<br />

1. /etc/profile<br />

63


7. Kommandozeile<br />

2. /.profile<br />

3. /etc/bash.bashrc<br />

4. /.bashrc<br />

Änderungen an der Umgebung können die Benutzer in ˜/.profile bzw. ˜/.bashrc vornehmen.<br />

7.3.3. Basiskonfiguration - Tastenbelegung <strong>und</strong> Prompt<br />

Die Konfiguration der Tastatur kann global in der Datei /etc/inputrc oder benutzerspezifisch in ˜/.inputrc<br />

eingestellt werden. Dies ist unter Umständen notwendig , da deutsche Sonderzeichen <strong>und</strong> die Funktionstasten<br />

Pos1, Ende <strong>und</strong> Entf nicht immer wie gewohnt sind arbeiten. Die erwähnten Dateien steuern die Funktion<br />

readline, die bash-intern zur Verarbeitung von Tastatureingaben verwendet wird. In einem Konsolenfenster<br />

müssen deshalb aber noch lange nicht alle Funktionstasten richtig interpretiert werden. Der Prompt zeigt<br />

üblicherweise den angemeldeten Benutzer, den Computernamen, das aktuelle Verzeichnis <strong>und</strong> mit welchen<br />

Rechten der eingeloggte Anwender ausgestattet ist. Weitere Einstellmöglichkeiten bieten sich durch die<br />

Umgebungsvariable PS1.<br />

7.3.4. Kommandoeingabe<br />

Die bash unterstützt Sie bei der Kommandoeingabe mit vielen praktischen Tastenkürzeln <strong>und</strong> Sondertasten.<br />

Insbesondere können Sie mit den Pfeiltasten die zuletzt eingegebenen Kommandos aufrufen, ausführen oder<br />

nachträglich bearbeiten. Diese Kommandos werden beim Ausloggen in einer Datei gespeichert <strong>und</strong> stehen<br />

somit nach dem nächsten Einloggen wieder zur Verfügung. Außerdem können Sie, sollten die Ausgaben<br />

eines Befehls aufgr<strong>und</strong> ihres Umfangs nicht mehr vollständig sichtbar sein, mit shift + Bild auf bzw. shift<br />

+ Bild ab die vorangegangenen Seiten betrachten. Dies ist solange möglich, bis Sie die Konsole wechseln.<br />

Auf diese Art <strong>und</strong> Weise können Sie beispielsweise nachvollziehen, was beim Systemstart abgelaufen ist.<br />

Eine weitere nützliche Funktion ist die automatische Expansion von Kommando- <strong>und</strong> Dateinamen. Haben<br />

Sie die ersten Buchstaben beispielsweise eines Befehls eingegeben, wird Ihnen nach Betätigung von Tab der<br />

Befehlsname ergänzt, wenn dieser bereits eindeutig ist, andernfalls wird nach einem kurzen Signalton <strong>und</strong><br />

einem nochmaligen Bestätigen mit Tab eine Liste mit allen zur Verfügung stehen Kommandos oder Dateien<br />

angezeigt. Diese Funktion verschleiert jedoch, wo sich ein Programm eigentlich befindet.<br />

Abfrage des Verzeichnisses für ein gesuchtes Kommando:<br />

whereis <br />

which <br />

Ähnliche Expansionsmechanismen treffen Sie auch bei Verzeichnis- <strong>und</strong> Pfadnamen an.<br />

7.3.5. Wichtige Tasten <strong>und</strong> Tastenkombinationen<br />

... entnehmen Sie der Tabelle 7.8 auf Seite 65.<br />

7.3.6. Alias-Abkürzungen<br />

Mit dem Kommando alias werden Abkürzungen für Kommandos festgelegt. Bei der Verarbeitung der Kommandozeile<br />

wird zunächst geprüft, ob das erste Wort ein Alias ist <strong>und</strong> dann gegebenenfalls durch den<br />

vollständigen Text ersetzt. Die bash durchsucht darüber hinaus bei Pipes, Kommandosubstitutionen oder<br />

bei der sequentiellen Ausführung von Kommandos alle vorkommenden Kommandonamen auf Abkürzungen.<br />

64


7.3. Bash - Bourne Again Shell<br />

Bash-Tastenkombination Funktion<br />

Pfeiltasten nach oben bzw. unten Scrollt durch die zuletzt eingegebenen Kommandos<br />

Pfeiltasten nach rechts bzw. links Bewegt den Cursor vor bzw. zurück<br />

Pos1, Ende Bewegt den Cursor an den Beginn, an das Ende der<br />

Zeile<br />

Strg + A, Strg + E Wie Pos1 <strong>und</strong> Ende<br />

Alt + B, Alt + F Bewegt den Cursor wortweise rückwärts, vorwärts<br />

Backspace, Entf Zeichen rückwärts, vorwärts löschen<br />

Alt + D Wort rechts vom Cursor löschen<br />

Strg + K Bis zum Ende der Zeile löschen<br />

Alt + T Die beiden vorangegangenen Wörter tauschen<br />

Tab Expansion des Kommando- oder Dateinamens<br />

Strg + L Löscht den Bildschirm<br />

Strg + R Sucht nach früher eingegebenen Kommandos, erneutes<br />

Betätigen geht zum nächsten Suchergebnis<br />

Tabelle 7.8.: Bash Tastaturfunktionen<br />

Festlegung eines Aliases: alias more=less<br />

Die Alias Abkürzungen werden vorrangig gegenüber gleichnamigen Kommandos behandelt. Das kann<br />

dazu genutzt werden, um den unerwünschten Aufruf eines Kommandos zu vermeiden. Einmal festgelegte<br />

Abkürzungen sind bis zum Verlassen der shell gültig, können jedoch mit dem Befehl unalias wieder gelöscht<br />

werden. Alias Anweisungen, die in die Dateien .profile oder .bashrc aufgenommen sind, werden beim<br />

Einloggen geladen.<br />

7.3.7. Ein- <strong>und</strong> Ausgabeumleitung<br />

Bei der Ausführung von Kommandos in der bash stehen drei Dateideskriptoren zur Verfügung, die auf<br />

Betriebssystemebene wie Dateien behandelt werden.<br />

Standardeingabe: Gerade ausgeführte Programme lesen aus dieser die Eingaben des Anwenders. Normalerweise<br />

ist dies die Tastatur.<br />

Standardausgabe: An diese werden alle Ausgaben des Programmes geschickt. Im Regelfall ist dies der<br />

Bildschirm bzw. das Terminal.<br />

Standardfehler: Fehlermeldungen werden üblicherweise ebenfalls im aktuellen Terminal ausgegeben.<br />

Diese drei Dateideskriptoren können jedoch angepasst werden. So ist es beispielsweise möglich, die Standardausgabe<br />

des einen Kommandos zur Standardeingabe eines anderen Kommandos zu machen. Zudem<br />

kann man Ausgaben eines Programmes in eine Datei umleiten. Beispiele sind in Tabelle 7.9 auf Seite 66<br />

angegeben.<br />

Pipes:<br />

Die Bildung einer Pipe erfolgt durch das Zeichen —, das zwischen zwei aufeinanderfolgende Befehle eingefügt<br />

wird. Dadurch wird die Standardausgabe des einen zur Standardeingabe des anderen Kommandos.<br />

Beispiel:<br />

65


7. Kommandozeile<br />

ls -al | less<br />

ps -ax | grep mucke<br />

FIFOs:<br />

Syntax Funktion<br />

ls *.tex ¿ inhalt Gibt das Ergebnis von ls in der Datei inhalt aus<br />

ls *.gz ¿¿ inhalt Hängt die Ausgabe von ls an die Datei inhalt an<br />

2¿ datei Leitet alle Fehlermeldungen in die angegebene Datei<br />

¿& datei Leitet sowohl die Ausgabe als auch die Fehler in die datei<br />

um<br />

¡ datei Leitet die Eingaben an das Kommando weiter<br />

Tabelle 7.9.: Ausgabeumleitung mit der Bash<br />

Die Idee, die hinter firs in first out steckt, ist im Gr<strong>und</strong>e dieselbe einer Pipe. Sie wird verwendet, damit zwei<br />

voneinander unabhängige Programme miteinander kommunizieren können.<br />

Beispiel:<br />

mkfifo fifo<br />

ls -l > fifo &<br />

less < fifo<br />

Ausgabevervielfältigung:<br />

Das Kommando tee bewirkt, dass zwei Kopien der Programmausgabe erzeugt werden. Auf diese Weise kann<br />

eine Kopie am Bildschirm angezeigt werden, während die zweite Kopie in eine Datei geschrieben wird.<br />

Beispiele:<br />

ls | tee inhalt<br />

ls | tee inhalt1 inhalt2<br />

ls -l | tee inhalt1 | sort +4 > inhalt2<br />

7.3.8. Kommandoausführung<br />

Bevor ein Kommando von der bash ausgeführt wird, interpretiert diese zunächst eventuell eingegebene<br />

Steuerzeichen. Auf diese Weise ist es möglich, Programme im Hintergr<strong>und</strong> zu starten, Jokerzeichen zu verwenden<br />

<strong>und</strong> Ergebnisse eines Kommandos in die Parameterliste eines anderen Kommandos zu übernehmen.<br />

Hintergr<strong>und</strong>prozesse<br />

Kommandos können im Hintergr<strong>und</strong> ausgeführt werden, wenn beim Aufruf ein & angehängt wird. Das<br />

unter Umständen zeitaufwendige Kommando wird dann von der bash verarbeitet, während im Vordergr<strong>und</strong><br />

bereits die Eingabeaufforderung zur Verfügung steht.<br />

Beispiel:<br />

66<br />

find / -name ’*sh’ > ergebnis &


Hinweis<br />

7.3. Bash - Bourne Again Shell<br />

Mit Strg + Z kann ein Programm zunächst unterbrochen <strong>und</strong> dann in den Hintergr<strong>und</strong> versetzt werden. Mit<br />

Strg + C wird die Ausführung gänzlich abgebrochen.<br />

Ausführung mehrerer Kommandos<br />

... wie in Tabelle 7.10 auf Seite 67 angegeben.<br />

Kommando Funktion<br />

Kommando1; kommando2 Führt die Kommandos nacheinander aus<br />

Kommando1 && Kommando2 Führt kommando2 aus wenn kommando1 erfolgreich<br />

war<br />

Kommando1 —— kommando2 Führt kommando2 aus wenn kommand1 einen Fehler<br />

liefert<br />

Kommando1 & kommando2 Startet kommando1 im Hintergr<strong>und</strong>, Kommando2<br />

im Vordergr<strong>und</strong><br />

(kommando1; kommando2) Führt beide Kommandos in der gleichen shell aus<br />

7.3.9. Substitutionsmechanismen<br />

Tabelle 7.10.: Mehrere Kommandos gleichzeitig<br />

Der Begriff Substitutionsmechanismus klingt zunächst sehr abstrakt. Gemeint ist, dass vor der Ausführung<br />

eines Kommandos die durch Sonderzeichen gebildeteten Ausdrücke von der bash ausgewertet werden. Dies<br />

geschieht bei der Verwendung von Jokerzeichen zur Bildung von Dateinamen, bei der Zusammensetzung<br />

von Zeichenketten, bei der Berechnung arithmetischer Klammern, bei der Verwendung von umgekehrten<br />

Apostrophen zur Kommandosubstitution usw.<br />

Dateinamenbildung mit Jokerzeichen<br />

Wie bereits mehrfach angesprochen, ist nicht das jeweilige Kommando für die Auswertung der Jokerzeichen<br />

wie in Tabelle 7.11 auf Seite 68 erläutert, zuständig, sondern die bash selbst. Diese übergibt nach der<br />

Expansion des Ausdrucks eine Liste mit den Dateien bzw. Verzeichnissen an das Kommando.<br />

Da oft das Ergebnis eines mit Jokerzeichen versehenen Ausdrucks nicht den Erwartungen entspricht, sollte<br />

man zunächst einmal die Expansion genauer betrachten. Außerdem ist zu beachten , was das Kommando<br />

dann mit der übergebenen Liste an Datei- <strong>und</strong> Verzeichnisnamen anstellt.<br />

Beispiel:<br />

echo /*<br />

ls /*<br />

Zeichenkettenbildung mit geschweiften Klammern<br />

Die Klammererweiterung (brace expansion) der bash setzt aus in geschweiften Klammern angegebenen<br />

Zeichenketten alle Zeichenkettenkombinationen zusammen.<br />

Beispiel:<br />

67


7. Kommandozeile<br />

echo {a,b}{1,2,3}<br />

echo u{01,02,03}tm<br />

Berechnung arithmetischer Ausdrücke<br />

Jokerzeichen Bedeutung<br />

? Genau ein beliebiges Zeichen<br />

* Beliebig viele Zeichen<br />

[abc Genau eines der angegebenen Zeichen<br />

[a-f] Ein Zeichen aus dem angegebenen Bereich<br />

[!abc] Keines der angegebenen Zeichen<br />

[âbc] Keines der angegebenen Zeichen<br />

˜ Abkürzung für das Heimatverzeichnis<br />

. Abkürzung für das aktuelle Verzeichnis<br />

.. Abkürzung für das übergeordnete Verzeichnis<br />

Tabelle 7.11.: Jokerzeichen<br />

Die bash ist in der Lage, bei der Eingabe eines korrekten Ausdrucks diesen zu berechnen. Hierbei sind die<br />

meisten aus der Programmiersprache C bekannten Operatoren erlaubt. Die vier Gr<strong>und</strong>rechenarten (+,-, *,<br />

/), die Modulofunktion %, für Vergleich (==, !=, ¡, ¡=, ¿, ¿=), für Bitverschiebungen (¡¡, ¿¿) <strong>und</strong> schließlich<br />

die logischen Operatoren Nicht (!), Und (& &) <strong>und</strong> Oder (——). Hierbei gültig sind auch die üblichen<br />

Rechenregeln (z.B. Punkt vor Strich).<br />

Beispiel:<br />

echo [2+3]<br />

7.4. Reguläre Ausdrücke<br />

Reguläre Ausdrücke (engl.: regular expressions)sind ein Begriff aus der Theoretischen Informatik - Reguläre<br />

Ausdrücke beschreiben Mengen aus Zeichenketten. Wichtig werden Sie daher immer dann, wenn Sie<br />

wie oben beschrieben Dateien an der Kommandozeile spezifizieren wollen. Doch auch bei der Suche von<br />

Mustern in Textdateien sind Reguläre Ausdrücke nützlich.<br />

7.4.1. Syntax von Regulären Ausdrücken<br />

Reguläre Ausdrücke setzt man aus einzelnen Zeichen zusammen. Die Bedeutung dieser entnehme man Tabelle<br />

7.12 auf Seite 69 oder der man-Page von grep. Diese Bausteine können Sie beliebig zusammensetzen,<br />

um Reguläre Ausdrücke zu bilden. Hilfreich dabei ist, dass jeder dieser Bausteine mit einer der Angaben<br />

aus Tabelle 7.13 auf Seite 69 ausgestattet werden kann.<br />

Weitere Besonderheiten von Regulären Ausdrücken entnehmen Sie bitte der man-Page von grep.<br />

7.4.2. grep<br />

grep wird gebraucht, um Dateien, oder die Ausgabe von Programmen, zu durchsuchen, <strong>und</strong> nach Stichworten<br />

<strong>und</strong> Mustern zu filtern. Als Parameter dienen dabei ein Regulärer Ausdruck wie oben beschrieben <strong>und</strong><br />

68


. Beliebiges Zeichen<br />

\w Beliebiges alphanumerisches Zeichen<br />

\W Beliebiges nicht alphanumerisches Zeichen<br />

[xyz] Eines der Zeichen x, y oder z<br />

[x-z] Ein Zeichen aus x - z<br />

[ˆq-v] Alle Zeichen außerhalb des Bereichs q-v<br />

Tabelle 7.12.: Bausteine von Regulären Ausdrücken<br />

? Muster kommt einmal oder gar nicht vor<br />

* Muster kommt nicht oder beliebig oft vor<br />

+ Muster kommt mindestens einmal vor<br />

{n} Muster kommt exakt n mal vor<br />

{n,} Muster kommt mindestens n mal vor<br />

{n,m} Muster kommt zwischen n <strong>und</strong> m mal vor<br />

Tabelle 7.13.: Multiplikatorbausteine<br />

7.4. Reguläre Ausdrücke<br />

eine Datei. Alternativ kann grep auch über sogenannte Pipes an “normale” Programme <strong>und</strong> Anweisungen<br />

“angehängt” werden. Dann wird die Ausgabe dieser Programme nach dem angegebenen Muster gefiltert.<br />

Beispiele<br />

• Durchsuche die Liste der aktuellen Prozesse nach denen des Users “michael”<br />

ps -eadf | grep michael<br />

• Durchsuche die /etc/fstab nach Master-Festplatten am Primary-Port:<br />

grep "\/dev\/hda*" /etc/fstab<br />

7.4.3. Limits<br />

Mit dem Befehl ulimits ist es möglich, Limits für die Nutzung von Systemressourcen zu setzen bzw. sich<br />

diese anzeigen zu lassen. Allerdings wirken sich die Beschränkungen nur auf Prozesse aus, die durch die<br />

Shell gestartet werden. Die zahlreichen Optionen <strong>und</strong> die Bedeutung von Hard- <strong>und</strong> Softlimit können in der<br />

manpage zur Bash nachgeschlagen werden. Die gesetzten Limits werden übrigens durch ulimit -a sichtbar.<br />

Systemweite Einstellungen sollten in /etc/profile gesetzt werden. Die Angaben erfolgen in kB.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

69


7. Kommandozeile<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

70


8. Standards<br />

Um ein Auseinanderfallen der verschiedensten Distributionen zu verhindern, gibt es einige Standardisierungsbemühungen.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die <strong>Linux</strong> Standard Base,<br />

• die TEX Directory Structure <strong>und</strong><br />

• die Vorgaben des Filesystem Hierarchy Standard kennen.<br />

8.1. LSB - <strong>Linux</strong> Standard Base<br />

Die <strong>Linux</strong> Standard Base liegt inzwischen in der Version 1.2 vor. Die SuSE Distribution bewegt sich in<br />

weiten Teilen sehr nahe an dieser Spezifikation. Aktuelle Informationen hierzu finden sich im Internet unter<br />

http://www.linuxbase.org.<br />

8.2. TDS - T E X Directory Structure<br />

TEX ist ein Satzsystem, das auf zahlreichen Plattformen läuft <strong>und</strong> über zahlreiche Makropakete erweiterbar<br />

ist. Die TEX Directory Structure beschreibt wie die zahlreichen Dateien von TEX im Verzeichnisbaum anzuordnen<br />

sind.<br />

SuSE bringt teTeX, eine Zusammenstellung aktueller TEX Pakete, in einer Konfiguration in ihre Distribution<br />

ein, die sowohl den Vorgaben von TDS als auch des FHS entspricht.<br />

8.3. FHS - Filesystem Hierarchy Standard<br />

Dieser Standard, der mittlerweile Bestandteil des LSB ist, beschreibt die Dateisystemstruktur. SuSE strebt<br />

eine weitgehende Konformität zum FHS an. Aktuelle Informationen finden sich im Internet unter http://www.pathname.com<br />

Der in der Überschrift genannte Standard wie aus Tabelle 8.1 auf Seite 72 ersichtlich, beschreibt, welche<br />

Dateien wo in der Verzeichnisstruktur abgelegt werden. Diese Ausdrucksweise ist zwar nicht völlig richtig,<br />

aber fürs erste ausreichend. Wie die Daten genau organisiert sind, wird später noch genauer erläutert.<br />

Auch wenn die eben beschriebene Hierarchie gar nicht so <strong>und</strong>urchsichtig erscheint, ist die wirkliche<br />

Struktur der Verzeichnisse <strong>und</strong> der dahinterstehenden Daten alles andere als eindeutig. Um dies nachzuvollziehen,<br />

betrachten Sie doch einfach mal den Inhalt des Verzeichnisses /usr <strong>und</strong> dessen weitreichende<br />

Unterverzeichnisse (/usr/bin/X11 ist dasselbe Verzeichnis wie /usr/X11R6/bin).<br />

71


8. Standards<br />

72<br />

Verzeichnis Inhalt des Verzeichnisses<br />

/ enthält, ausgehend vom Wurzelverzeichnis alle in das Dateisystem eingeb<strong>und</strong>enen<br />

Verzeichnisse.<br />

/bin enthält elementare Kommandos zur Systemverwaltung, die von allen<br />

Benutzern ausgeführt werden können (binaries).<br />

/boot enthält Dateien, die zum Booten des Systems verwendet werden (LILO<br />

Bootmanager) <strong>und</strong> zudem Kernel-Komponenten bzw. den Kernel selbst.<br />

/dev enthält block- <strong>und</strong> zeichenorientierte Gerätedateien für nahezu alle<br />

Hardware-Komponenten.<br />

/etc enthält nahezu alle Administrations- <strong>und</strong> Konfigurationsdateien, gegebenenfalls<br />

in weiteren bezeichnenden Unterverzeichnissen.<br />

/home enthält die Heimatverzeichnisse aller Anwender, abgesehen von root. Im<br />

eigenen Verzeichnis hat der Benutzer alle Rechte, darf folglich Dateien<br />

löschen, Verzeichnisse anlegen usw.<br />

/lib enthält einige gemeinsame Bibliotheken für dynamisch gelinkte Programme<br />

oder symbolische Links darauf (/lib/modules beinhaltet Kernel-<br />

Module, die im laufenden Betrieb eingeb<strong>und</strong>en werden).<br />

/lost+fo<strong>und</strong> hier werden Daten von fsck (file system check) abgelegt, die bei der<br />

Wiederherstellung eines defekten Dateisystem nicht mehr zugeordnet<br />

werden konnten.<br />

/mnt enthält Unterverzeichnisse wie cdrom oder floppy, die als Mountpoint<br />

dienen <strong>und</strong> an deren Stelle andere Dateisysteme eingeb<strong>und</strong>en werden<br />

können.<br />

/opt enthält Zusatzpakete <strong>und</strong> kommerzielle Programme, die nachträglich installiert<br />

wurden.<br />

/proc enthält Unterverzeichnisse für alle laufenden Prozesse, wobei die ProzessID<br />

dem Verzeichnisnamen entspricht, <strong>und</strong> spiegelt so die interne<br />

Prozessverwaltung wieder. Dieses Verzeichnis belegt keinen Speicher<br />

auf der Festplatte, da es sich nur um ein Abbild des Speicherinhaltes<br />

handelt.<br />

/sbin enthält Kommandos zur Systemverwaltung, auf die vor allem während<br />

der Initialisierung des Systems zugegriffen wird <strong>und</strong> die nur von root<br />

ausgeführt werden dürfen.<br />

/tmp dient als Arbeitsverzeichnis für das Anlegen von temporären Dateien<br />

<strong>und</strong> Verzeichnissen durch den Benutzer oder das System, wobei die Daten<br />

beim nächsten Bootvorgang gelöscht werden.<br />

/usr stellt das für den typischen Anwender wichtigste Verzeichnis dar, enthält<br />

idealerweise nur statische Daten, wie Anwendungsprogramme, das X<br />

System, verschiedene Compiler, Dokumentation <strong>und</strong> letztendlich auch<br />

die Quellcodes.<br />

/var enthält sämtliche veränderliche Daten wie beispielsweise Konfigurationsdateien,<br />

Druckaufträge für den Spooler, Systemanmeldungen, Protokolldateien,<br />

Lockfiles, Account-Dateien <strong>und</strong> zwischengespeicherte Daten.<br />

Tabelle 8.1.: Standardverzeichnisse


Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

8.3. FHS - Filesystem Hierarchy Standard<br />

Die einzelnen Abschnitte zu den angesprochenen Standards sollten bei Bedarf weiter ausgebaut werden.<br />

Allerdings kommt es hier auch zu Zielkonflikten mit anderen Kapiteln, insbesondere beim FHS.<br />

73


8. Standards<br />

74


9. Dateisystem<br />

Auch wenn der Anwender sich kaum außerhalb seines Home-Verzeichnisses bewegt, so ist das Dateisystem<br />

als Ganzes unter <strong>Linux</strong> doch der Dreh- <strong>und</strong> Angelpunkt jeglicher Abläufe. Deshalb wird man sich ohne<br />

gr<strong>und</strong>legende Kenntnisse desselben wohl kaum auf Dauer zurechtfinden.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• sich einen Überblick über das Dateisystem zu verschaffen,<br />

• verschiedene Dateitypen zu unterscheiden <strong>und</strong> Dateien <strong>und</strong> Verzeichnisse anzusprechen,<br />

• Zugriffsrechte zu setzen <strong>und</strong> zu ändern.<br />

• Dateisysteme zu erzeugen, zu überprüfen, ein- <strong>und</strong> auszugehänggen,<br />

• gr<strong>und</strong>legendes über Partitionen,<br />

• die Interna des Dateisystems ext2 kennen.<br />

9.1. Gr<strong>und</strong>lagen der Dateiverwaltung<br />

9.1.1. Dateitypen<br />

... entnehmen Sie der Tabelle 9.1 auf Seite 76.<br />

9.1.2. Pfadangaben<br />

Der Pfadname gibt eindeutig an, wo sich welche Dateien im System befinden. Auf diese Weise findet der<br />

Anwender die abgelegten Daten auch noch nach längerer Zeit wieder. Der Pfadname selbst setzt sich aus<br />

den einzelnen Verzeichnisnamen zusammen, die durch Schrägstriche / voneinander getrennt sind.<br />

Man unterscheidet gr<strong>und</strong>sätzlich zwei Pfadangaben, wie in Tabelle 9.2 auf Seite 76 angegeben.<br />

Angenommen das aktuelle Verzeichnis wäre /share. Es soll nur in das Unterverzeichnis /home/mucke<br />

gewechselt werden. Mit der absoluten Pfadangabe würde das Kommando cd /home/mucke lauten, bei Verwendung<br />

eines relativen Pfades hingegen<br />

cd ../home/mucke.<br />

Die wichtigsten Themen dieses Abschnittes sind die Dateien <strong>und</strong> Verzeichnisse (Dateinamen, Jokerzeichen,<br />

Verzeichnisverwaltung), die Verzeichnisstruktur, Besitzverhältnisse <strong>und</strong> Zugriffsrechte, feste <strong>und</strong> symbolische<br />

Links, Zugriff auf Datenträger, verschiedene Dateisysteme <strong>und</strong> letztendlich die schon angesprochenen<br />

Interna.<br />

75


9. Dateisystem<br />

76<br />

Dateitypen Charakterisierung<br />

Datei (file) Symbol:<br />

-<br />

Verzeichnis (directory)<br />

Symbol: d<br />

Gerätedatei (device<br />

file) Symbol: c oder<br />

b<br />

Ketten von Zeichen, denen ein Name zugeordnet wurde,<br />

unter dem der Anwender seine Daten wiederfindet. Dateien<br />

können unterschiedliche Daten enthalten (ASCII Text oder<br />

binären Code). Die Dateigröße wird vom Dateisystem auf<br />

eine bestimmte Größe beschränkt.<br />

Da das System mehrere tausend Dateien enthalten kann,<br />

werden diese Dateien geordnet <strong>und</strong> in sogenannten Verzeichnissen<br />

gespeichert. Ein Verzeichnis kann zudem weitere<br />

Unterverzeichnisse enthalten <strong>und</strong> nahezu beliebig tief<br />

geschachtelt werden, wenn man davon absieht, dass ein<br />

Pfadname höchstens 256 Zeichen lang sein darf. Außerdem<br />

enthält ein Verzeichnis mindestens zwei Einträge. Den<br />

Verweis .. auf das übergeordnete Verzeichnis <strong>und</strong> . für das<br />

aktuelle Verzeichnis.<br />

Alle Geräte des Systems können über spezielle Dateien, die<br />

sogenannten Gerätedateien angesprochen werden. Sie bilden<br />

die Schnittstelle zu den im Kernel geladenen Gerätetreibern,<br />

wobei jedes Gerät einen Eintrag im Verzeichnis<br />

/dev hat.<br />

Tabelle 9.1.: Dateitypen wie in ls -l<br />

Pfadangabe Beschreibung<br />

absoluter Pfad beschreibt den Weg zu einer Datei oder einem Verzeichnis immer ausgehend<br />

vom Wurzelverzeichnis. Die Pfadangabe beginnt immer mit einem<br />

Schrägstrich /. Hierbei spielt der eigene Standort keine Rolle.<br />

relativer Pfad beschreibt den Weg zu einer Datei oder einem Verzeichnis ausgehend<br />

vom aktuellen Standort des Benutzers im Dateisystem. Wird das übergeordnete<br />

Verzeichnis angesprochen, geschieht dies mit .., das aktuelle<br />

Verzeichnis kann mit . angesprochen werden.<br />

Tabelle 9.2.: Pfadangaben


9.1.3. Dateien <strong>und</strong> Verzeichnisse<br />

9.1. Gr<strong>und</strong>lagen der Dateiverwaltung<br />

Unter dem <strong>Linux</strong>-Dateisystem ext2 sind Dateinamen bis zu 255 Zeichen zulässig. Dabei wird zwischen<br />

Groß- <strong>und</strong> Kleinschreibung unterschieden. Auch Sonderzeichen sind erlaubt, sollten jedoch aus verschiedenen<br />

Gründen (gelegentliche Schwierigkeiten mit diversen Programmen) vermieden werden. Dateien, deren<br />

Namen mit einem Punkt beginnen, gelten als versteckt. Der Punkt im Dateinamen selbst wird häufig als<br />

Trennzeichen verwendet. Dateinamenserweiterungen kennt <strong>Linux</strong> jedoch nicht. Dateinamen, die Leerzeichen<br />

enthalten, müssen beim Ansprechen in Hochkommata gestellt werden, um eine Verwechselung mit<br />

Parametern bzw. Optionen auszuschließen.<br />

9.1.4. Gerätedateien<br />

Alle Geräte werden im <strong>Linux</strong>-System über sogenannte Gerätedateien angesprochen. Sie bilden die Schnittstelle<br />

zu den im Kernel geladenen Gerätetreibern. Jede Hardwarekomponente weist einen Eintrag in Form<br />

eines Gerätenamens im Verzeichnis /dev auf. Diese Dateien haben keine Datenblöcke, denn die Daten, die<br />

in eine solche Datei geschrieben werden, werden sofort an das entsprechende Gerät weitergeleitet. Es gibt<br />

zwei Arten von Gerätedateien:<br />

blockorientierte Geräte (block devices), die als kleinste Einheit einen Datenblock übergeben<br />

zeichenorientierte Geräte (character oder raw Devices), die byteweise arbeiten<br />

Manche Geräte, beispielsweise Festplatten, können sowohl eine block- als auch eine zeichenorientierte<br />

Gerätedatei im Verzeichnis /dev besitzen. Bei der Installation werden die Gerätedateien automatisch angelegt.<br />

Da alle eventuell vorkommenden Geräte abgedeckt werden sollen, ist es normal, dass auf Ihrem<br />

System weit mehr Gerätedateien abgelegt sind, als benötigt werden.<br />

Die wichtigsten Gerätedateien sind in Tabelle 9.3 auf Seite 77 angedeutet.<br />

Gerätedatei Beschreibung<br />

/dev/fd* steht für Diskettenlaufwerke<br />

/dev/hd* steht für (E)IDE Festplatten<br />

/dev/sd* bezeichnet SCSI Festplatten<br />

/dev/ttyS*<br />

/dev/cua*<br />

<strong>und</strong> stehen für serielle Schnittstellen, wie z.B. Bildschirm <strong>und</strong> Modems<br />

/dev/lp* steht für parallele Schnittstellen<br />

/dev/st*<br />

/dev/rmt*<br />

<strong>und</strong> bezeichnet Bandlaufwerke<br />

/dev/sr*<br />

/dev/scd*<br />

<strong>und</strong> steht für SCSI CD-ROM Laufwerke<br />

/dev/null bezeichnet ein Gerät, das einem Fass ohne Boden gleicht, alle an dieses<br />

Gerät gesandten Daten verschwinden im Nirvana<br />

Tabelle 9.3.: Arten von Gerätedateien<br />

Auch Gerätedateien können mit dem bereits bekannten Befehl ls -l gelistet werden. Der Buchstabe zu<br />

Beginn jeder Zeile bezeichnet die Art des Gerätes. Eine Besonderheit unter <strong>Linux</strong> sind noch die sogenannte<br />

Major <strong>und</strong> Minor Device Number. Die Major Device Number verweist auf einen entsprechenden Treiber<br />

im System-Kernel. Sie wird anstelle der Adressen auf Datenblöcke im Inode der Gerätedatei gespeichert.<br />

77


9. Dateisystem<br />

Mehrere gleichartige Geräte werden über denselben Gerätetreiber angesprochen <strong>und</strong> haben daher dieselbe<br />

Major Device Number. Die genauere Unterscheidung liefert die Minor Device Number, die den Gerätetreiber<br />

genauer beschreibt <strong>und</strong> somit zusätzliche Informationen über die Hardware liefert.<br />

9.1.5. Jokerzeichen <strong>und</strong> Platzhalter<br />

Die sogenannten Jokerzeichen werden Sie im täglichen Umgang mit Dateien zumindest an der Konsole<br />

immer wieder benötigen. Während das ? für ein beliebiges Zeichen steht, ersetzt der * gleich eine ganze, beliebige<br />

Zeichenkette. Grob betrachtet, entspricht dies den Wildcards unter Windows. Weitere Einschränkungen<br />

ermöglichen Ihnen die eckigen Klammern. Der Ausdruck [abcd]* steht somit für Dateien, die mit a,<br />

b, c oder d beginnen. Den gleichen Effekt erzielen Sie durch [a-d]*. Durch ein vorangestelltes ! oder ˆkann<br />

der Ausdruck negiert werden. Somit umfasst [!abc]* alle Dateien, deren Name nicht mit a, b oder c anfangen.<br />

Die Jokerzeichen können auch für Verzeichnisse verwendet werden. So meint der Ausdruck */*.tex<br />

alle Dateien im Unterverzeichnis erster Ordnung des aktuellen Verzeichnisses, deren Name mit .tex endet.<br />

Weitere Platzhalter sind der ., der für das aktuelle Verzeichnis, der .., der für das übergeordnete Verzeichnis<br />

<strong>und</strong> die ˜ , die für das Heimatverzeichnis steht. So werden durch das Kommando cp projekt/*.c alle *.c<br />

Dateien aus dem Verzeichnis projekt in das aktuelle Verzeichnis kopiert. Zunächst mag die Verwendung<br />

der Jokerzeichen recht einfach erscheinen. Durch eine Eigenart von <strong>Linux</strong> gestaltet sich dies jedoch unter<br />

Umständen sehr schwierig. Für die Interpretation der Wildcards ist die Shell zuständig. Diese übergibt die<br />

Liste der passenden Datei- <strong>und</strong> Verzeichnisnamen dem vorangestellten Befehl. Diese Vorgehensweise bringt<br />

nicht selten Komplikationen mit sich, da die Parameterliste des Kommandos erst greift, wenn die Liste der<br />

gef<strong>und</strong>enen Dateien bereits fertig ist. Es ist also mit dem Befehl ls -R *.tex nicht möglich, rekursiv alle<br />

Unterverzeichnisse nach *.tex Dateien zu durchsuchen.<br />

Probieren Sie verschiedene dieser Wildcards am besten im Zusammenhang mit dem Befehl echo aus, da<br />

dieser das Ergebnis Ihrer Jokerzeichen nicht interpretiert, sondern nur ausgibt.<br />

9.1.6. Versteckte Dateien<br />

Alle Dateien, deren Name mit einem Punkt beginnt, gelten als versteckte Dateien. Deswegen berücksichtigt<br />

* nicht wirklich alle Dateien eines Verzeichnisses. Der Ausdruck .* bringt Sie auch nicht weiter, da hiermit<br />

zwar alle Dateien, aber auch das aktuelle <strong>und</strong> das übergeordnete Verzeichnis mit allen darin enthaltenen<br />

Dateien gemeint sind. Je nach zugehörigem Befehl können die Auswirkungen verheerend sein. Die Lösung<br />

dieses Problems ist .[!.]*. Mit diesem Ausdruck werden alle Dateien angesprochen, die mit einem Punkt<br />

beginnen <strong>und</strong> mindestens ein weiteres Zeichen enthalten, das kein Punkt sein darf. Wollen Sie alle versteckten<br />

Dateien des aktuellen <strong>und</strong> der untergeordneten Verzeichnisse anzeigen, dann hilft Ihnen das Kommando<br />

ls nicht weiter, da dessen Optionen ja erst nach dem Zusammenstellen der Dateiliste durch die Shell greifen.<br />

Zu empfehlen ist hier der Befehl find . -name ’.*’, welcher aufgr<strong>und</strong> der Option name den nachfolgenden<br />

Ausdruck auf den Dateinamen anwendet <strong>und</strong> wegen . das aktuelle Verzeichnis durchsucht.<br />

9.1.7. Verzeichnisse<br />

Im <strong>Linux</strong>-Dateisystem sind alle Verzeichnisse <strong>und</strong> damit sämtliche Datenträger dem Verzeichnis / untergeordnet.<br />

Es gibt keine Laufwerke im herkömmlichen Sinn, vielmehr werden deren Verzeichnisstrukturen in<br />

das Dateisystem von <strong>Linux</strong> eingehängt <strong>und</strong> erscheinen somit als eigenes Unterverzeichnis. Jedes Verzeichnis<br />

enthält von vorneherein zwei Verweise, einmal auf das aktuelle Verzeichnis (.) <strong>und</strong> auf das übergeordnete<br />

Verzeichnis (..).<br />

78


9.2. Sicherheit<br />

In dieses Kapitel gehören mehr Beispiele <strong>und</strong> Verweise auf die Kommandoreferenz.<br />

9.2.1. Besitzverhältnisse <strong>und</strong> Zugriffsrechte<br />

9.2. Sicherheit<br />

<strong>Linux</strong> steht in der Tradition von Unix <strong>und</strong> ist deshalb ein echtes Multi-User-System. Aus diesem Gr<strong>und</strong><br />

ist es notwendig, strenge Regeln dafür vorzusehen, wer welche Rechte im System hat, damit eine Sicherheit<br />

gewährleistet werden kann. Diese umfasst sowohl den Schutz vor unberechtigtem Zugriff als auch vor<br />

Beschädigung durch Dritte. Wie bereits angesprochen, muss sich zunächst jeder Benutzer bei der Anmeldung<br />

gegenüber dem System mit einem Namen <strong>und</strong> dem dazugehörigen Passwort ausweisen. Innerhalb des<br />

System gibt es aber noch weitergehende Regelungen, die auf Datei <strong>und</strong> Geräteebene ansetzen. Dazu werden<br />

zusammen mit jeder Datei bzw. mit jedem Verzeichnis folgende Informationen gespeichert. Einmal der<br />

Besitzer (owner) der Datei, die Gruppe, die der Datei zuzuordnen ist <strong>und</strong> weitere neun Zugriffsbits (r für<br />

lesen (read), w für schreiben (write), x für ausführen (execute)), jeweils drei für den Besitzer, für andere<br />

Gruppenmitglieder <strong>und</strong> den Rest der Benutzer.<br />

Es gibt also drei Arten von Zugriffsrechten, die bei Dateien <strong>und</strong> Verzeichnissen aber eine unterschiedliche<br />

Bedeutung haben können, wie in Tabelle 9.4 auf Seite 79 angegeben.<br />

Recht Datei Verzeichnis<br />

r (read) Leserecht Der Inhalt der Datei darf gelesen Der Inhalt des Verzeichnisses<br />

<strong>und</strong> kopiert werden.<br />

darf gelistet werden.<br />

w (write) Schrei- Der Inhalt der Datei darf Der Inhalt eines Verzeichnisses<br />

brecht<br />

verändert, d.h. ergänzt oder darf geändert werden, d.h. es<br />

gelöscht, werden.<br />

dürfen Dateien oder Verzeichnisse<br />

neu angelegt, umbenannt<br />

oder gelöscht werden.<br />

x (execute) Die Datei kann als Befehl aus- Wenn das Ausführungsrecht bei<br />

Ausführungsrecht geführt werden.<br />

einem Verzeichnis gesetzt ist,<br />

bedeutet es, dass es möglich ist,<br />

in dieses Verzeichnis zu wechseln.<br />

Tabelle 9.4.: Rechte wie in ls -l angezeigt<br />

Die Rechte an Dateien <strong>und</strong> Verzeichnissen werden beim Anlegen mit einer Standardvoreinstellung vergeben.<br />

Der Besitzer kann anschließend die Rechte neu festlegen. Nur der Systemadministrator kann die Rechte<br />

von Dateien <strong>und</strong> Verzeichnissen ändern, die ihm nicht gehören.<br />

Rechte, die für ein Verzeichnis gesetzt sind, haben immer eine höhere Priorität als Rechte, die für eine<br />

Datei in diesem Verzeichnis gesetzt sind. Ein Schreibrecht kann demnach nicht in Anspruch genommen<br />

werden, wenn eines der übergeordneten Verzeichnisse nur ein Leserecht aufweist.<br />

Diese Zugriffsrechte können den drei, in Tabelle 9.5 auf Seite 80 aufgeführten, Benutzergruppen zugeteilt<br />

werden.<br />

? Lassen Sie sich die Dateien eines Verzeichnisses durch den Befehl ls -l anzeigen.<br />

Das erste Bit beschreibt die Art der Datei, die aus Tabelle 9.6 auf Seite 80 ersichtlich wird.<br />

Anschließend folgen die Zugriffsbits. Die ersten drei stehen für die Rechte des Besitzers, dann folgt die<br />

Gruppe <strong>und</strong> zuletzt alle anderen Benutzer. Der Systemadministrator root darf natürlich alles. Dann folgt eine<br />

79


9. Dateisystem<br />

Bezeichnung Bedeutung<br />

u (user) Besitzer<br />

g (group) Gruppe, zu der die Datei, das Verzeichnis gehört<br />

o (other) Alle übrigen Benutzer des Systems<br />

Tabelle 9.5.: Benutzerabkürzungen<br />

Kurzbezeichnung Dateityp<br />

d Directory, Verzeichnis<br />

- normale Datei<br />

b blockorientierte Gerätedatei<br />

c zeichenorientierte Gerätedatei<br />

l symbolic link<br />

Tabelle 9.6.: Dateitypen<br />

Ziffer, die angibt, wieviele Links auf diese Datei zeigen. Danach folgt der Name des Besitzers <strong>und</strong> der der<br />

Gruppe. Außerdem zeigt ls auch die Größe der Datei, deren letztes Änderungsdatum <strong>und</strong> ihren Dateinamen<br />

an.<br />

Die Zugriffsrechte bei Verzeichnissen müssen entsprechend anders interpretiert werden. Lesen heißt hier,<br />

sich den Inhalt anzuschauen, Schreiben beinhaltet auch das Hineinkopieren oder Löschen von Dateien <strong>und</strong><br />

Ausführen bedeutet das Verzeichnis zu öffnen. Ähnlich verhält es sich bei den Zugriffsrechten von Geräten<br />

im Verzeichnis /dev, worauf hier jedoch nicht näher eingegangen werden soll.<br />

9.2.2. Zugriffsrechte setzen<br />

Der Eigentümer oder root können mit dem Befehl chmod die Zugriffsrechte für bestehende Dateien <strong>und</strong><br />

Verzeichnisse ändern.<br />

chmod Rechte Datei(en) / Verzeichnis(se)<br />

Dabei kennt das Kommando zwei Schreibweisen. Zum einen die Symboldarstellung, zum anderen die Oktalzahldarstellung.<br />

Bei der Symboldarstellung gibt es Parameter, wie in Tabelle 9.7 auf Seite 80 dargestellt.<br />

80<br />

Benutzerklasse Aktion Zugriffsrecht<br />

u (user, Besitzer) - Recht wegnehmen r (read, lesen)<br />

g (group, Gruppe) + Recht setzen w (write, schreiben)<br />

o (other, übrige) = Recht absolut setzen x (execute, ausführen)<br />

a (all, alle)<br />

Tabelle 9.7.: Symboldarstellung


9.2. Sicherheit<br />

Bei der Oktalzahldarstellung wird für jede Benutzerklasse eine Ziffer zwischen 0 <strong>und</strong> 7 verwendet, die<br />

die gewünschte Rechtekombination angibt, wie in Tabelle 9.8 auf Seite 81.<br />

Wert Rechte Erläuterung<br />

0 — keine Zugriffsrechte<br />

1 –x Ausführungsrecht gesetzt<br />

2 -w- Schreibrecht gesetzt (weniger sinnvoll)<br />

3 -wx Schreib- <strong>und</strong> Ausführungsrecht gesetzt (nicht sinnvoll)<br />

4 r– Leserecht gesetzt<br />

5 r-x Lese- <strong>und</strong> Ausführungsrecht gesetzt<br />

6 rw- Lese- <strong>und</strong> Schreibrecht gesetzt<br />

7 rwx Lese-, Schreib- <strong>und</strong> Ausführungsrecht gesetzt<br />

Tabelle 9.8.: Oktalzahldarstellung<br />

9.2.3. Zuweisung eines Besitzers oder einer Gruppe<br />

Mit Hilfe des Befehls chown bzw. chgrp kann einer Datei bzw. einem Verzeichnis ein anderer Besitzer bzw.<br />

eine andere Gruppe zugeordnet werden.<br />

chown [-R] neuerBesitzer Datei(en)/Verzeichnis(se)<br />

chgrp neueGruppe Datei(en)/Verzeichnis(se)<br />

Als Anwender muss einem jedoch bei diesem Vorgang bewusst sein, dass man sich eine solche Datei nicht<br />

mehr zurückholen kann. Daher ist es eventuell besser, nur eine Kopie weiterzugeben.<br />

Mit der Schreibweise chown user:gruppe Datei(en)/Verzeichnis(se) kann einer Datei gleichzeitig<br />

ein anderer Benutzer <strong>und</strong> eine neue Gruppe zugewiesen werden.<br />

9.2.4. Verwaltung von Gruppen <strong>und</strong> Benutzern<br />

In der Datei /etc/passwd wird eine Liste aller Benutzer gespeichert. Sie enthält den Benutzernamen, dessen<br />

Passwort, die BenutzerID (UID), die GruppenID (GID), den auführlichen Namen als Kommentar, das Heimatverzeichnis<br />

<strong>und</strong> die Shell. Dabei ist das Passwort natürlich verschlüsselt oder in die Datei /etc/shadow<br />

ausgelagert. Hier ist wiederum der Name des Benutzers <strong>und</strong> dessen Passwort (bei * ist der login gespeert)<br />

abgelegt. Dann folgen Zahlen, die angeben, wann das Passwort das letzte Mal geändert wurde, wie lange es<br />

noch gültig ist usw. Letztendlich müssen der GID noch Gruppennamen zugeordnet werden. Dies passiert in<br />

der Datei /etc/group. Am Anfang jeder Zeile steht der Gruppenname, dann folgt die GID <strong>und</strong> schließlich<br />

die Namen der Benutzer, die zur Gruppe gehören.<br />

Hinweis<br />

Befehle wie ls, die Informationen zu Dateien <strong>und</strong> Verzeichnissen anzeigen, lesen Benutzer- <strong>und</strong> Gruppennamen<br />

aus den Dateien passwd <strong>und</strong> group aus <strong>und</strong> lösen so die UID <strong>und</strong> GID auf. Wenn Sie beispielsweise<br />

über NFS Laufwerke fremder Rechner einbinden, achten Sie darauf, dass für gleiche Benutzer <strong>und</strong> Gruppen<br />

sowohl die UID, als auch die GID auf den verb<strong>und</strong>enen Systemen übereinstimmen. Ansonsten kann<br />

es zu erheblichen Problemen kommen. Um die Administrierbarkeit zu gewährleisten, bietet sich in diesem<br />

Zusammenhang der Dienst NIS an, der im Kapitel ”Netzwerk” beschrieben wird.<br />

81


9. Dateisystem<br />

9.2.5. Feste <strong>und</strong> symbolische Links<br />

Links sind Verweise, mit denen Dateien oder Verzeichnisse angesprochen werden. Vorteilhaft ist, dass durch<br />

solche Links, von verschiedenen Orten der Verzeichnisstruktur aus, auf ein- <strong>und</strong> dieselbe Datei zugegriffen<br />

werden kann, ohne dass die Datei physikalisch mehrfach gespeichert werden muss. Unter <strong>Linux</strong> gibt es zwei<br />

verschiedene Arten von Links, die auf unterschiedliche Weise arbeiten. Zum einen die sogenannten Hardlinks,<br />

auch feste Links genannt, zum anderen die Symbolic bzw. symbolische Links. Mit dem Kommando<br />

ln [-s] kann ein Link angelegt werden. Die Option -s wird verwendet, um einen symbolischen Link anzulegen.<br />

Das Kommando ls -li gibt Ihnen die Möglichkeit solche Links nachzuvollziehen. Dadurch wird<br />

die I-Node <strong>und</strong> die Zahl der Links, die auf eine Datei zeigen, sichtbar.<br />

! Erstellen Sie mit ln Dateiname Linkname einen festen Verweis auf eine Datei in Ihrem Homeverzeichnis<br />

<strong>und</strong> schauen Sie sich im nachhinein mit dem Kommando ls -li das Resultat an.<br />

Hardlinks<br />

Ein Hardlink ist ein zweiter Name für eine Datei. Außer dem Namen gibt es dateisystemintern keinen<br />

Unterschied zwischen dem Link <strong>und</strong> dem Original. Beide Dateien verwenden dieselben Datenblöcke <strong>und</strong><br />

besitzen dieselbe Inode-Nummer, d.h. sie werden unter derselben Nummer vom System verwaltet, woraus<br />

folgt, dass es sich um ein <strong>und</strong> dieselbe Datei handelt. Wird eine Datei geändert, so sind auch sämtliche Links<br />

von dieser Änderung betroffen. Hardlinks können anhand des Linkcounters, der bei der Ausgabe des Befehl<br />

ls -l hinter dem Rechteblock steht, identifiziert werden. Wird die Datei gelöscht, so wird zunächst nur<br />

der entsprechende Link gelöscht. Erst wenn der letzte Link entfernt wird, wird der Inode freigegeben <strong>und</strong><br />

die Datei somit gelöscht. Ein Nachteil von Hardlinks ist, dass diese nicht partitionsübergreifend verwendet<br />

werden können, da Inode - Nummern nur innerhalb einer Partition eindeutig sind. Auch ist es nicht möglich,<br />

Hardlinks für Verzeichnisse zu verwenden.<br />

Symbolic Links<br />

Symbolische Links kennen die Beschränkung auf die Partition <strong>und</strong> auf Dateien nicht, da sie intern anders<br />

funktionieren. Ein symbolischer Link ist selbst wieder eine Datei mit der Typbezeichnung l. Diese weist<br />

eigene Datenblöcke <strong>und</strong> somit auch eine eigene Inode - Nummer auf. In den Datenblöcken ist jedoch nur<br />

ein Verweis in Form eines Pfadnamens auf die Originaldatei abgelegt. Wird diese gelöscht, führt der Link<br />

ins Leere. Symbolische Links erstellen Sie ebenfalls mit dem Befehl ln erweitert durch die Option -s. Im<br />

Gegensatz zu festen können symbolische Links auch auf Verzeichnisse <strong>und</strong> Dateien anderer Laufwerke verweisen.<br />

Das Löschen der Ursprungsdatei ändert zwar den Link selbst nicht, jedoch verweist der Link dann<br />

auf eine nicht mehr existierende Datei. Benutzen Sie symbolische Links beispielsweise um die Hierarchie<br />

der Verzeichnisstruktur abzuflachen <strong>und</strong> so eine Menge Tipperei an der Konsole zu sparen.<br />

! Erstellen Sie einen symbolischen Link zu einer beliebigen Datei <strong>und</strong> sehen Sie sich das Resultat an.<br />

Den Unterschied zwischen Hard- <strong>und</strong> Softlinks finden Sie in Tabelle 9.9 auf Seite 83.<br />

Der Vorteil der symbolischen Links besteht in ihrer einfachen Handhabung, während feste Links Speicherplatz<br />

sparen <strong>und</strong> wesentlich schneller arbeiten.<br />

9.2.6. Links auf Programme<br />

Es kommt unter <strong>Linux</strong> relativ häufig vor, dass mehrere oft unterschiedliche Befehle auf ein- <strong>und</strong> dasselbe<br />

Programm verweisen, aber dennoch sehr unterschiedlich auf die Eingabe des Benutzers reagieren. Die<br />

Auflösung ist einfach <strong>und</strong> dennoch überraschend. Bei der Erstellung des Befehls wurden Mechanismen eingebaut,<br />

die überprüfen durch welchen Aufruf das Programm gestartet wurde <strong>und</strong> wie es auf den Befehl zu<br />

reagieren hat. Ein Beispiel findet sich in den mtools, die Kommandos wie mattrib <strong>und</strong> mcd enthalten.<br />

82


9.3. Partitionen <strong>und</strong> Dateisysteme<br />

Vergleich Hardlink Symbolischer Link<br />

Auf Partition beschränkt ja nein<br />

Inode - Nummer wie Originaldatei eigene Inode - Nummer<br />

Linkcounter wird heraufgesetzt ja nein<br />

Originaldatei nicht mehr erkennbar bleibt erkennbar<br />

Quelldatei muss existieren ja nein (Verweis ins Leere)<br />

Linkfile darf nicht existieren ja ja<br />

Belegung eigener Datenblöcke nein ja (Block enthält Pfadangabe)<br />

Zugriffsrechte wie Originaldatei ja ja (nominell alle Rechte)<br />

Anwendbarkeit nur auf Dateien auf Dateien <strong>und</strong> Verzeichnisse<br />

Bedeutung anderer Name, gleiche eigene Datei mit Pfadan-<br />

Datei<br />

gabe zum Ziel<br />

Löschen der Originaldatei Originaldatei wird erst<br />

gelöscht, wenn der letzte<br />

Hardlink auf diese Datei<br />

gelöscht wird.<br />

Vorteil sehr performant, spart<br />

Speicherplatz<br />

9.3. Partitionen <strong>und</strong> Dateisysteme<br />

Tabelle 9.9.: Vergleich von Soft- <strong>und</strong> Hardlinks<br />

Originaldatei kann<br />

gelöscht werden, wobei<br />

der Symbolische Link<br />

dann ins Leere zeigt.<br />

einfache Handhabung<br />

Der Dateibaum unter <strong>Linux</strong> stellt die logische Ordnung der Dateien dar. Mit der tatsächlichen Organisation<br />

der Daten auf der Festplatte hat dieser Verzeichnisbaum aber nicht viel zu tun. Die physikalische Organisation<br />

der Daten erfolgt in den sogenannten Dateisystemen, einer Art Verwaltungsstruktur jeder Partition.<br />

Das Dateisystem ermöglicht den Zugriff auf die Dateien anhand des Dateinamens. Die Kommandos des<br />

Betriebssystems werden dann in entsprechende Lese- oder Schreibbefehle auf der Festplatte umgesetzt. Somit<br />

ist das Dateisystem für den Anwender transparent, da er nur über die Befehlsschnittstelle mit diesem<br />

kommuniziert. Ein Teil der Kennzeichen eines Dateisystems, wie die Länge von Dateinamen, maximale<br />

Dateianzahl in einem Verzeichnis usw., können für einen Benutzer sichtbar sein. Andere Eigenschaften,<br />

beispielsweise die interne Verwaltungsstruktur des Dateisystems, die Art wie Daten gespeichert werden<br />

etc., bleiben hingegen im Hintergr<strong>und</strong> verborgen. Der Zugriff auf die verschiedenen Dateisysteme wird<br />

über Treiber realisiert, die sich im Kernel des Betriebssystems befinden müssen.<br />

9.3.1. Zugriff auf mehrere Festplatten <strong>und</strong> Partitionen<br />

Unter <strong>Linux</strong> sind alle Laufwerke, deren Partitionen <strong>und</strong> Daten in einem Dateisystem vereint. Der Verzeichnisbaum<br />

anderer Datenträger wird in das <strong>Linux</strong>-Dateisystem eingehängt, man sagt gemountet. Der typische<br />

Anwender merkt also gar nicht, dass seine Daten auf mehrere Festplatten verteilt sind. An welcher Stelle<br />

welches Laufwerk eingeb<strong>und</strong>en wird <strong>und</strong> einige weitere Parameter, steuert die Datei /etc/fstab. Mit dem<br />

Befehl df können Sie die derzeitig eingehängten Laufwerke betrachten. Wenn Sie weitere Datenträger in<br />

die Verzeichnisstruktur einhängen wollen, können Sie dies mit dem Befehl mount umsetzen. Vergessen Sie<br />

jedoch nicht das Laufwerk mit umount wieder auszuhängen, bevor Sie den Datenträger wechseln. Der Be-<br />

83


9. Dateisystem<br />

fehl mount liest zunächst die am Prompt mitgegebenen Parameter <strong>und</strong> vervollständigt diese gegebenenfalls<br />

mit Einträgen aus der Datei /etc/fstab. Ein Befehlsstring für mount könnte folgendermaßen aussehen:<br />

mount -r -t msdos /dev/hda1 /dosc<br />

Achten Sie darauf, dass das Verzeichnis /dosc angelegt ist. Wenn nicht erstellen Sie mit mkdir ein Verzeichnis<br />

mit diesem Namen. Sollten bereits Daten in diesem Verzeichnis abgelegt worden sein, so werden<br />

diese, solange das andere Medium gemountet ist, ausgeblendet.<br />

9.3.2. Zugriff auf CD-ROM Laufwerke<br />

Diese Laufwerke werden im Prinzip genauso verwaltet, wie Festplatten. Natürlich ergibt sich, aufgr<strong>und</strong><br />

der Medienwechsel, ein häufigeres mounten <strong>und</strong> unmounten. Außerdem bringt die CD ein eigenes Format<br />

namens iso9660 mit. Um eine CD manuell in das Dateisystem einzubinden, ist folgender Befehlsstring<br />

vonnöten:<br />

mount -t iso9660 -o ro /dev/hdc /cdrom<br />

Achten Sie auch hier wieder darauf, dass das Verzeichnis /cdrom besteht. Die Option ro ist bei einer<br />

CDROM zwar klar, beim Mounten muss diese jedoch angegeben werden, damit keine Fehlermeldung erscheint.<br />

9.3.3. Zugriff auf Diskettenlaufwerke<br />

Der Zugriff auf Diskettenlaufwerke erfolgt auf dieselbe Art <strong>und</strong> Weise. Der Befehlsstring lautet hier leicht<br />

abgewandelt:<br />

mount -t auto -o ro /dev/fd0 /floppy<br />

Mit den Befehlen der mtools können Sie hingegen auch ohne die umständlich Prozedur des Mountens auf<br />

eine Diskette zugreifen.<br />

9.4. Dateisystemtypen<br />

Wie vielleicht schon deutlich geworden ist, beherrscht <strong>Linux</strong> eine Menge von Dateisystemen, genaugenommen<br />

werden Sie kaum ein Betriebssystem finden, dass problemlos mit einer solchen Unzahl an Dateisystemen<br />

zurecht kommt.<br />

ext2 Das derzeit übliche Dateisystem unter <strong>Linux</strong> heißt ext2. Es unterstützt Dateinamen mit bis zu 255<br />

Zeichen, Dateien bis zu 2 GByte Größe <strong>und</strong> kann Datenträger mit bis zu 4 TByte verwalten. Der Code<br />

der diesem Dateisystem zu Gr<strong>und</strong>e liegt, ist sehr ausgereift, sehr zuverlässig <strong>und</strong> auch performant.<br />

reiserfs Dieses Dateisystem ist noch relativ neu <strong>und</strong> bietet gegenüber ext2 eine Journaling-Option, die<br />

es ermöglicht, das Dateisystem nach einem Rechnerabsturz sehr schnell wiederherzustellen. Dafür<br />

arbeitet es nicht so performant, weil ständig mitprotokolliert wird, auf welche Inodes zugegriffen<br />

wurde.<br />

minix Das Dateisystem minix war Gr<strong>und</strong>lage der ersten Versuche in der <strong>Linux</strong>-Welt. Da es jedoch erheblich<br />

leistungsschwächer <strong>und</strong> zudem nicht frei kopierbar ist, hat es heute nur noch eine geringe Bedeutung<br />

für <strong>Linux</strong>.<br />

msdos Dies ermöglicht den Zugriff auf alte DOS bzw. Windows Partitionen.<br />

84


sysd / bsd Diese Dateisysteme rühren von anderen Unix Derivaten her.<br />

9.4. Dateisystemtypen<br />

ufs Das Unix File System ist das Standarddateisystem unter Sun Solaris 2.x. Es beruht auf dem Berkeley<br />

Fat Fast File System.<br />

vfat <strong>Linux</strong> kann mit Hilfe von vfat auch auf Partitionen von Windows 9x zugreifen. Die langen Dateinamen<br />

bleiben dabei erhalten.<br />

ntfs Das Dateisystem von Windows NT kann bis heute nur gelesen werden. Der Schreibzugriff ist noch<br />

im Experimentalstadium <strong>und</strong> sollte auf keinen Fall vor einem Backup der Windows NT Partition<br />

angewendet werden.<br />

hpfs Der Zugriff auf OS/2 Partitionen ist sowohl im Lese- als auch im Schreibmodus möglich.<br />

hsfs / iso9660 Über die Einbindung des High Sierra File Systems, dem die Norm iso9660 zugr<strong>und</strong>e liegt,<br />

haben Sie Zugriff auf nahezu alle CD-ROMs.<br />

udf Das neue Dateisystem für CD-ROMs <strong>und</strong> DVDs wird erst ab Kernelversion 2.4n unterstützt. Für den<br />

Kernel 2.2n gibt es jedoch Patches.<br />

nsf Das Network File System ist die unter Unix gebräuchliche Variante, Laufwerke anderer Unix-Rechner<br />

über das Netzwerk einzubinden. Solche verteilte Dateisysteme werden durch die Strukturierung in<br />

NFS-Server <strong>und</strong> -Clients umgesetzt.<br />

ncp Das Netware Core Protocol ist die Novell Variante des eben beschriebenen nfs.<br />

smbfs Das Server Message Buffer File System ist das Netzwerk-Dateisystem von Microsoft. Der Zugriff<br />

auf shares einer <strong>Linux</strong> Umgebung ausgehend von Windows Clients erfolgt über die Bereitstellung<br />

dieses Dateisystems.<br />

tmpfs Das Temporary File System imitiert eine Festplatte im Hauptspeicher <strong>und</strong> ist das Standarddateisystem<br />

für das Verzeichnis /tmp. Es nutzt auch die Swap-Bereiche als temporären Speicher.<br />

swapfs Der Kernel benutzt den Swap-Bereich der Festplatte aufgr<strong>und</strong> der Implementierung des Swap File<br />

Systems.<br />

9.4.1. Ein- <strong>und</strong> Aushängen von Dateisystemen<br />

Jedes Dateisystem befindet sich auf einem physikalischen Gerät, beispielsweise auf einer Diskette, einer<br />

CD-ROM, einer Partition einer Festplatte usw. Wenn <strong>Linux</strong> startet, wird automatisch das Dateisystem, auf<br />

dem sich das Betriebssystem befindet, verwendet. Sollen weitere Dateisysteme in die Verzeichnisstruktur<br />

eingeb<strong>und</strong>en werden, so werden diese mit dem Befehl mount, der in der Regel nur von root ausgeführt<br />

werden darf, eingehängt.<br />

mount [-a -t -v -f -w -r -o -h] Gerätedatei Mountpoint<br />

Die Parameter dieses Befehls finden Sie in Tabelle 9.10 auf Seite 86.<br />

Die Gerätedatei gibt wiederum den Namen des gewünschten Gerätes an. Der Mountpoint ist ein bereits<br />

vorhandenes Verzeichnis im Dateibaum von <strong>Linux</strong>. Dabei ist zu berücksichtigen, dass der Inhalt eines bereits<br />

verwendeten Verzeichnisses nicht mehr sichtbar ist, wenn hierauf ein weiteres Dateisystem gemountet wird.<br />

Deshalb ist es empfehlenswert ein leeres Verzeichnis für den Mount-Vorgang zu verwenden, das zudem<br />

einen sprechenden Namen hat.<br />

Folgende Voraussetzungen müssen also erfüllt sein, damit das Mounten erfolgen kann.<br />

85


9. Dateisystem<br />

Option Beschreibung<br />

-a mountet automatisch alle Dateisysteme, die in /etc/fstab eingetragen<br />

sind<br />

-t Typ gibt den Dateisystemtyp an, in Kombination mit der Option -a kann erreicht<br />

werden, dass nur die Dateisysteme aus /etc/fstab mit dem angegebenen<br />

Dateisystemtyp gemountet werden<br />

-v gibt während der Durchführung Meldungen aus<br />

-f imitiert den Mount-Vorgang <strong>und</strong> informiert in Kombination mit der Option<br />

-v den Benutzer, was beim Mounten passieren würde<br />

-w erlaubt einen Schreibzugriff auf das gemountete System<br />

-r erlaubt nur einen Lesezugriff auf das gemountete System<br />

-o Liste enthält Einstellungen für die vierte Spalte der /etc/fstab<br />

-h gibt einen Hilfetext aus<br />

Tabelle 9.10.: Dateisysteme - Parameter<br />

• Das zu mountende Gerät muss ein bekanntes Dateisystem aufweisen.<br />

• Der Mountpoint muss als Verzeichnis bereits angelegt sein.<br />

• Das aktuelle Verzeichnis darf nicht der Mountpoint sein.<br />

• Der Mount-Vorgang wird vom Superuser ausgeführt.<br />

Das Aushängen von Dateisystemen wird mit dem Befehl umount durchgeführt. Die Syntax lautet, wie folgt.<br />

umount [-t -a] Gerätedatei<br />

oder<br />

umount [-t -a] mountpoint<br />

Die Parameter finden Sie in Tabelle 9.11 auf Seite 86.<br />

Option Beschreibung<br />

-t Typ hängt alle Dateisysteme vom angegebenen Typ ab<br />

-a hängt alle Dateisysteme ab<br />

Tabelle 9.11.: Umount - Parameter<br />

<strong>Linux</strong> verwendet für das Mounten zwei Systemdateien, auf die im folgenden näher eingegangen wird.<br />

9.4.2. Datei /etc/fstab<br />

Die Datei /etc/fstab enthält eine Liste von Dateisystemen, die beim Systemstart in der Regel automatisch<br />

gemountet werden sollen. Sie ist wie unten abgebildet aufgebaut.<br />

Die Datei enthält folgende Angaben.<br />

86


• den Namen der Gerätedatei<br />

• den mountpoint<br />

• den Dateisystemtyp<br />

• die Mount - Optionen<br />

• einen Hinweis für das Programm dump, welches Dateisystem gesichert werden soll<br />

9.4. Dateisystemtypen<br />

• einen Hinweis für das Programm fsck, in welcher Reihenfolge die Dateisysteme geprüft werden sollen<br />

Die vierte Spalte enthält diverse Mount - Optionen, wobei die Argumente aus Tabelle 9.12 auf Seite 87<br />

zulässig sind.<br />

Argument Beschreibung<br />

async asynchroner, gepufferter Zugriff auf das Dateisystem<br />

atime ändern des Datums der letzten Benutzung einer Datei bei Zugriff auf die<br />

Datei<br />

auto automatisches Mounten mit der Option -a möglich<br />

defaults benutzen der Standardeinstellungen (rw, suid, dev, exec, auto, nouser,<br />

async)<br />

dev steht für zeichen- <strong>und</strong> blockorientierte Gerätedateien<br />

exec ermöglicht die Ausführung von binären Dateien<br />

noatime keine Datumsaktualisierung der letzten Benutzung von Dateien<br />

noauto kein automatisches Mounten mit der Option -a möglich<br />

nosuid s-Bit hat keine Wirkung<br />

nouser normale Benutzer dürfen dieses Dateisystem nicht mounten<br />

remount erneutes Mounten eines bereits eingehängten Dateisystems möglich<br />

ro erlaubt nur Lesezugriff<br />

rw erlaubt Schreib- <strong>und</strong> Lesezugriff<br />

suid s-Bit kann verwendet werden<br />

sync nur synchrone, ungepufferte Zugiffe auf das Dateisystem<br />

user erlaubt es einem beliebigen Benutzer, dieses Dateisystem zu mounten<br />

Tabelle 9.12.: fstab - die Parameter<br />

Ein manueller Mount-Vorgang erzeugt also nur ein zeitlich begrenztes Einhängen des Dateisystems, da<br />

es beim nächsten Systemstart nicht automatisch wieder gemountet wird. Durch entsprechende Änderungen<br />

in der Datei /etc/fstab kann jedoch bewirkt werden, dass das Einbinden ab dem nächsten Mal von selbst<br />

erfolgt. Achten Sie beim Editieren auf die vom System vorgegebenen Spalten, da eine Veränderung zu<br />

unschönen Problemen führen kann. Denken Sie auch an den Zeilenumbruch nach der letzten Zeile, damit die<br />

Datei für das System lesbar bleibt. Ist ein zu mountendes Dateisystem in der Datei /etc/fstab eingetragen,<br />

kann das Kommando mount verkürzt eingegeben werden, da die benötigten Informationen aus dieser Datei<br />

ausgelesen werden.<br />

87


9. Dateisystem<br />

9.4.3. Datei /etc/mtab<br />

Die Datei /etc/mtab enthält hingegen alle im Moment gemounteten Dateisysteme. Mit dem Befehl mount<br />

wird ein Eintrag in diese Tabelle erzeugt. Beim Herunterfahren verwendet <strong>Linux</strong> diese Tabelle, um alle<br />

Dateisysteme wieder sauber auszuhängen.<br />

Die Datei /etc/mtab kann beispielsweise so aussehen.<br />

9.5. Interna des Dateisystems ext2<br />

In diesem Abschnitt soll Ihnen Hintergr<strong>und</strong>wissen zur internen Verwaltung des <strong>Linux</strong>-Dateisystems ext2<br />

vermittelt werden. Das Dateisystem ext2 bietet folgende Features:<br />

• Verwendung von Inodes zur Verwaltung der Daten.<br />

• Partitionen dürfen bis zu 16GByte groß sein, demnächst sollen bis zu 4TByte realisiert sein.<br />

• Dateien können bis zu 2GByte groß sein.<br />

• wichtige systemrelevante Daten werden sofort synchronisiert, also direkt nach der Änderung auf die<br />

Festplatte geschrieben <strong>und</strong> nicht wie üblich in einen Zwischenpuffer gestellt.<br />

• Ein Teil des Dateisystems ist für den Superuser reserviert.<br />

9.5.1. Aufbau des ext2-Dateisystems<br />

Zunächst wird der Speicherplatz des Datenträgers in Blöcke unterteilt, wobei jeder Block eine Nummer<br />

zugewiesen bekommt. Die Blockgröße beträgt üblicherweise 1024 Byte. Anschließend werden diese Blöcke<br />

in sechs Gruppen geteilt, die zur Speicherung verschiedener Datentypen vorgesehen sind. Die beiden ersten<br />

Gruppen bestehen jeweils nur aus einem Block. Alle anderen nehmen je nach Partition <strong>und</strong> Inodedichte<br />

sehr viel mehr Speicherplatz ein. Die erste Gruppe ist der sogenannte Bootblock, der ein kleines Programm<br />

zum Starten des Betriebssystems enthält. Der Superblock, die zweite Gruppe, gibt an, wie groß die vier<br />

weiteren Gruppen sind. Er enthält die Anzahl der vorhandenen logischen Datenblöcke (allocation units),<br />

den Namen des Datenträgers, die maximal mögliche Anzahl von Dateien usw., <strong>und</strong> beschreibt auf diese<br />

Weise das Dateisystem genauer. Die dritte Gruppe, das sogenannte I-Node-Bitmap, besteht aus einzelnen<br />

Bits, wobei jedes einzelne Bit angibt, ob der zugehörige I-Node Block frei oder belegt ist. Ähnliches gilt<br />

für die vierte Gruppe, das Daten-Bitmap, das angibt welche Blöcke für Daten frei bzw. belegt sind. Die<br />

fünfte Gruppe schließlich ist der Speicherplatz für die I-Nodes, wobei pro Block acht I-Nodes abgelegt<br />

werden können. Der Speicherplatz für Daten findet sich letztendlich in der sechsten Gruppe, die auch die<br />

größte Gruppe darstellt, da in ihr, neben einigen wenigen Verzeichnisinformationen <strong>und</strong> Querverweisen,<br />

der tatsächliche Inhalt der Dateien gespeichert wird. Während die Gruppen eins bis fünf ausschließlich<br />

Verwaltungsinformationen enthalten.<br />

9.5.2. Dateien <strong>und</strong> Verzeichnisse<br />

Im Dateisystem ext2 besteht jede Datei <strong>und</strong> jedes Verzeichnis aus zwei Bestandteilen. Zum einen den Datenblöcken,<br />

zum anderen dem Inode, der alle Informationen außer den Dateinamen enthält.<br />

88


9.5.3. I-Nodes (Informationsknoten)<br />

9.6. Interna anderer Dateisysteme<br />

In den I-Nodes werden in 128 Bytes alle Verwaltungsinformationen gespeichert. Dazu gehören:<br />

• der Dateityp<br />

• die Datei- bzw. Verzeichnisgröße<br />

• die Zugriffsrechte<br />

• die Benutzer- (UID) <strong>und</strong> die Gruppen-ID (GID)<br />

• die Anzahl der Links auf den Inode<br />

• den Zeitpunkt der Erstellung, der letzten Änderung <strong>und</strong> des letzten Lesezugriffs<br />

• einen Verweis auf die ersten zwölf Datenblöcke der Datei<br />

Letztendlich werden alle Informationen mit Ausnahme des Dateinamens gespeichert.<br />

Ein Inode enthält also die Informationen, welche Datenblöcke zu welcher Datei gehören. Ein Datenblock<br />

ist standardmäßig acht KByte groß, kann aber beim Einrichten des Dateisystems auch eine andere Größe<br />

zugewiesen bekommen. Ein Inode besteht aus fünfzehn Adressen, von denen zwölf direkt <strong>und</strong> drei indirekt<br />

auf Datenblöcke verweisen. Kleine Dateien haben dadurch direkt Zugriff auf die Datenblöcke. Die dreizehnte<br />

Adresse verweist auf einen sogenannten einfach indirekten Block, der weitere 126 Adressen beinhaltet.<br />

Einschließlich der zwölf direkten Datenblöcke, ergeben sich also 138 Datenblöcke, die die Datei belegen<br />

kann. Sollte dies immer noch nicht ausreichen, so verweist die vierzehnte Adresse auf einen doppelt indirekten<br />

Block, der wiederum auf 126 Adressen zeigt, die wiederum auf einfach indirekte Blöcke verweisen.<br />

Schließlich zeigt die fünfzehnte Adresse auf einen dreifach indirekten Block.<br />

9.6. Interna anderer Dateisysteme<br />

Übungen<br />

1. Welche Zugriffsrechte gibt es?<br />

2. Welche Benutzergruppen gibt es?<br />

3. Legen Sie eine leere Datei in Ihrem Homeverzeichniss an <strong>und</strong> geben Sie dem Besitzer alle, der Gruppe<br />

Schreib- <strong>und</strong> Leserechte, <strong>und</strong> nehmen Sie den übrigen Benutzern alle Rechte.<br />

4. Übergeben Sie die neu angelegte Datei einem anderen Benutzer.<br />

5. Ändern Sie die Rechte auf Ihr Homeverzeichnis so ab, dass jeder zumindest das Leserecht darauf hat.<br />

6. Legen Sie zwei Hardlinks auf die gerade erstellte Datei an <strong>und</strong> lassen Sie sich den Linkcounter anzeigen.<br />

7. Legen Sie auch einen symbolischen Link auf diese Datei an.<br />

8. Woran ist erkenntlich, ob ein Gerät block- oder zeichenorientiert arbeitet? Wie ermittelt man die Major<strong>und</strong><br />

Minor Device Number <strong>und</strong> was sagen diese aus?<br />

9. In welchem Verzeichnis befinden sich <strong>Linux</strong> - Befehle, die von jedem Benutzer ausgeführt werden<br />

dürfen, in welchem die Befehle, die nur privilegierten Benutzern zur Verfügung stehen?<br />

89


9. Dateisystem<br />

10. Welches Verzeichnis enthält die Gerätetreiber?<br />

11. Nennen Sie fünf verschiedene Dateisysteme, deren Ursprung bzw. Besonderheit.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

90


10. Softwareinstallation<br />

Die Kürze des folgenden Abschnitts darf nicht über die unbestrittene Wichtigkeit, der Installation weiterer<br />

Programmpakete hinwegtäuschen. Dabei kann zwischen drei gr<strong>und</strong>sätzlich unterschiedlichen Verfahren<br />

unterschieden werden. Unter <strong>Linux</strong> kann nachzuinstallierende Software im rpm-Format, als gepackte<br />

Binärdateien <strong>und</strong> als, oftmals ebenfalls gepackter, Quellcode vorliegen.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• distributionseigene Pakete nachzuinstallieren,<br />

• zweites Lernziel,<br />

• drittes Lernziel.<br />

10.1. RPMs<br />

RPMs können Sie sehr einfach mit YaST installieren. Dazu wählen Sie im Hauptmenü von YaST Paketverwaltung,<br />

<strong>und</strong> dann “Pakete einspielen”. Im folgenden Bildschirm betätigen Sie RETURN, um den Ort<br />

auswählen zu können, an dem sich Ihre RPM - Pakete befinden. Wenn Sie hier “Verzeichnis” wählen, können<br />

Sie den Pfad zu diesen Paketen angeben...<br />

Sobald das System in dem von Ihnen angegebenen Pfad RPM - Pakete findet, können Sie diese mit den<br />

Pfeiltasten anwählen <strong>und</strong> installieren.<br />

10.2. TAR.GZs<br />

10.2.1. Kompilierte Pakete<br />

Im Internet finden Sie oft Softwarepakete in Form von tar.gz-Dateien. Dabei handelt es sich um gepackte<br />

Archive, vergleichbar mit zip-Dateien. Diese Archive müssen Sie entpacken, bevor Sie die enthaltenen Programme<br />

verwenden können. Achten Sie darauf, dass sich das Archiv in einem eigenen Verzeichnis befindet,<br />

da man nie weiß, ob ein neues für die entpackten Dateien angelegt wird. Mit<br />

tar -xzf archiv.tar.gz<br />

oder<br />

tar -xvzf archiv.tar.gz<br />

entpacken Sie das Archiv, wobei tar durch -v etwas gesprächiger wird <strong>und</strong> ausgibt, welche Dateien<br />

gerade entpackt werden.<br />

91


10. Softwareinstallation<br />

10.2.2. Quellcode Pakete<br />

Oftmals finden Sie im Internet keine bereits für Ihre Distribution kompilierten Softwarepakete. Statt dessen<br />

werden Sie überall auf tar.gz-Archive mit Sourcecode stossen. Dies ist kein Gr<strong>und</strong> zur Sorge, sofern Sie<br />

eine aktuelle Distribution verwenden, treten beim eigenen Kompilieren der Quellen kaum Probleme auf.<br />

Bei Softwarepaketen, die sich in einem auslieferungsfähigen Zustand befindet, finden Sie für gewöhnlich<br />

die beiden Dateien README <strong>und</strong> INSTALL, die Sie bei der Konfiguration, Kompilation <strong>und</strong> Installation der<br />

Software unterstützen sollten.<br />

Die nachfolgend beschriebene Methode gilt jedoch in den meisten Fällen <strong>und</strong> ist bei fehlender Dokumentation<br />

einen Versuch wert.<br />

• Entpacken Sie bitte zuerst die Quellen aus dem tar.gz-Archiv in ein Arbeitsverzeichnis wie in ?? auf<br />

Seite ?? beschrieben.<br />

• Als nächstes erfolgt die Anpassung der Software an die jeweilige Platform <strong>und</strong> das Betriebssystem.<br />

Es wird unter anderem festgestellt, welchen Compiler Sie verwenden <strong>und</strong> wo die Bibliotheken in Ihrer<br />

Distribution liegen. Dazu dient bei den meisten Paketen das mitgelieferte Skript ./configure.<br />

Sie können dem Skript auch meistens noch weitere Parameter übergeben, wie zum Beispiel mit<br />

--prefix [Verzeichnis] das Zielverzeichnis für die Installation. Eine genaue Beschreibung der<br />

Parameter entnehmen Sie bitte der Ausgabe von ./configure --help.<br />

Falls bei der Ausführung von ./configure eine zwingende Voraussetzung nicht erfüllt wird, werden<br />

Sie darauf hingewiesen. Beim Aufruf von ./configure werden sogenannte Makefiles erstellt, die<br />

genau auf Ihr System zugeschnitten sind.<br />

• Mit Hilfe der Makefiles ist es möglich, dass Sie Ihre Software mit dem Befehl make compilieren<br />

können. Falls die Umwandlung erfolgreich durchlaufen wurde, kann die fertige Software mit<br />

make install an Ihr Zielverzeichnis kopiert werden.<br />

• Nachdem die Software installiert ist, können Sie diese sofort verwenden.<br />

Achtung<br />

Die oben beschriebene Vorgehensweise reicht zwar für die meisten Fälle aus, kann aber auch von Software<br />

zu Software unterschiedlich sein. Lesen Sie in jdem Fall die Dateien README <strong>und</strong> INSTALL, in denen sich<br />

genauere Anweisungen verbergen!<br />

Sie sollten außerdem darauf achten, dass Sie die Softwarepakete aus aus vertrauenswürdigen Quellen<br />

beziehen. Die Möglichkeiten korrumpierter Pakete reichen aufgr<strong>und</strong> des als root durchgeführten Installationsvorgangs<br />

vom Ausspionieren von Daten bis hin zur völligen Zerstörung des Systems!<br />

Übungen<br />

1. Installieren Sie die RPM-Pakete enlightenment, mozilla <strong>und</strong> gkrellm nach.<br />

2. Laden Sie die neueste Version der Blackbox im Sourcecode aus dem Internet herunter <strong>und</strong> installieren<br />

Sie diesen Windowmanager auf Ihrem Computer.<br />

3. Laden Sie die aktuelle Version des Administrationstools webmin aus dem Internet www.webmin.com<br />

herunter <strong>und</strong> führen Sie die Installation durch.<br />

92


Zusammenfassung<br />

Nach der Lektüre dieses Abschnittes können Sie selbständig Software nachinstallieren.<br />

10.2. TAR.GZs<br />

93


10. Softwareinstallation<br />

94


Teil II.<br />

<strong>Linux</strong> für Administratoren<br />

- Einsatz auf dem Server -<br />

95


11. Bootkonzept <strong>und</strong> -manager<br />

Auch dieses Kapitel unterteilt sich in zwei wesentliche Abschnitte. Zunächst soll Ihnen das Bootkonzept,<br />

auch System-V-Init-Prozess genannt, vorgestellt werden. Dazu gehört im wesentlichen ein Einblick in die<br />

Abläufe beim Systemstart <strong>und</strong> die Erläuterung der distributionsspezifischen Details. Im zweiten Teil wird<br />

der Bootloader LILO thematisiert <strong>und</strong> dessen Konfiguration erklärt.<br />

Noch eine Warnung vorne weg: Auch in diesem Kapitel wird tief in das System eingegriffen. Nehmen<br />

Sie Änderungen an den Konfigurationsdateien nur vor, wenn Sie wissen was Sie tun. Für den Fall, dass<br />

sich <strong>Linux</strong> nicht mehr booten lässt, sollten Sie eine Bootdiskette mit einem Editor bereithalten, um im<br />

Ernstfall die root Partition von Hand zu mounten <strong>und</strong> die vorgenommenen Änderungen rückgängig machen<br />

zu können.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• gr<strong>und</strong>legendes über den Bootvorgang des Rechners,<br />

• den Bootmanager LILO kennen,<br />

• die Bedeutung des Kernels beim Booten einzuschätzen,<br />

• den Ablauf des System V Init Starts zu verstehen,<br />

• das Runlevelkonzept kennen.<br />

11.1. Bootvorgang<br />

Bevor auf einzelne Begriffe näher eingegangen wird, soll Ihnen ein grober Überblick über die Vorgänge<br />

beim Hochfahren des Systems, vom Einschalten bis zum Login, gegeben werden.<br />

11.1.1. BIOS<br />

Beim Einschalten des Systems springt der Rechner an den Adressbereich 0xFFFFFF0, der generell immer<br />

dann angesprungen wird, wenn ein RESET ausgeführt wird. An dieser Adresse befindet sich das sogenannte<br />

BIOS (Basic Input/Output System), eine Software, die sich auf einem Baustein der Hauptplatine Ihres Computers<br />

befindet. Ihre Aufgabe sind unter anderem die so genannten Power-On-Self-Tests, kurz POSTs. Es<br />

wird geprüft welche Hardwarekomponenten aktiv <strong>und</strong> angeschaltet sind. Anschließend werden Bildschirm<br />

<strong>und</strong> Tastatur initialisiert <strong>und</strong> der Arbeitsspeicher getestet. Nachdem die gr<strong>und</strong>legenden Komponenten des<br />

Systems dem BIOS bekannt sind, werden Informationen über die wichtigsten Peripherie-Geräte aus dem<br />

CMOS ausgelesen. Dazu gehört beispielsweise auch die Geometrie der Massenspeicher.<br />

Bis zu diesem Zeitpunkt ist das Booten des Systems völlig unabhängig vom installierten Betriebssystem<br />

<strong>und</strong> die Hardware steht nur über die vom BIOS zur Verfügung gestellten Routinen zur Verfügung.<br />

97


11. Bootkonzept <strong>und</strong> -manager<br />

11.1.2. CMOS<br />

Im CMOS des Computers wird unter anderem eine Liste der Bootmedien verwaltet. Es werden nun der Reihe<br />

nach die ersten Sektoren dieser Medien nach dem sogenannten Bootblock durchsucht. Dieser zeichnet sich<br />

durch einen Wert aus: An Adresse 0x1fe muss der Wert 0xaa55 eingetragen sein. Sie können das überprüfen<br />

durch Eingabe von hexdump -n 512 /dev/hda.<br />

11.1.3. MBR<br />

Bei einem Desktop PC befindet sich der Bootblock meistens auf der ersten IDE Festplatte. Ihr erster Sektor<br />

wird auch als MBR oder Master Boot Record bezeichnet. Auch die einzelnen Partitionen der Festplatte<br />

besitzen in ihren ersten Sektoren jeweils Bootsektoren. In diesen legen die Betriebssysteme, die auf diesen<br />

Partitionen installiert wurden ihre Bootprogramme ab.<br />

Der MBR wird sofort in den Speicher an Adresse 0000:7C00 kopiert <strong>und</strong> ausgeführt. Dieser Programmcode<br />

heißt Bootprogrammcode:<br />

Bootprogrammcode<br />

Das Bootprogramm kopiert sich sofort selbst an Stelle 0000:0600 <strong>und</strong> fährt dort mit der Ausführung fort.<br />

Hier beginnt nun spezifischer Code der verschiedenen Bootmanager. Dazu stehen dem Programm insgesammt<br />

446 Bytes zur Verfügung. Im Anschluss daran befindet sich die Partitionstabelle:<br />

Partitionstabelle<br />

Der Bereich der Partitionstabelle beginnt ab der Adresse 0000:07BE im Speicher, im MBR im ersten Sektor<br />

der Festplatte am Offset 01BE. Die Partitionstabelle selber besteht aus vier Einträgen von jeweils 16 Byte<br />

Länge. Jeder dieser Einträge ist aufgeteilt wie in Tabelle 11.1 auf Seite 98 angegeben. Die Grafik 11.1 auf<br />

Seite 99 zeigt ein Beispiel für eine Partitionstabelle. Hier ist eine Primäre FAT32 Partition, eine erweiterte<br />

Partition, eine <strong>Linux</strong>partition <strong>und</strong> eine <strong>Linux</strong>-Swappartition eingetragen.<br />

Bytes Bedeutung<br />

00 Aktivbit<br />

01-03 Start-CHS<br />

04 Partitionstyp<br />

05-07 End-CHS<br />

08-0B Start LBA<br />

0C-0F End LBA<br />

Tabelle 11.1.: Struktur eines Eintrags in der Partitionstabelle<br />

Wie Sie sicher bereits bemerkt haben, gibt es in der Partitionstabelle 4 Einträge von jeweils 16 Byte<br />

Länge. Viele Systeme haben jedoch mehr als 4 Partitionen - Wie kann das funktionieren?<br />

Die Lösung besteht darin, dass weitere Partitionen ermöglicht werden durch eine einseitig verknüpfte<br />

Liste von weiteren Partitionen. In der Praxis heisst das, dass es einen Partitionstyp gibt (im oberen Beispiel<br />

die sogenannte “Erweiterte Partition”, also Typ 0Fh), der als Platzhalter für mehrere andere Partitionen dient.<br />

Dabei verweist die Startadresse der “Platzhalterpartition” auf den Anfang der ersten “Tochterpartition”, die<br />

wieder auf den Anfang der nächsten “Tochterpartition” verweist, <strong>und</strong> so weiter.<br />

98


Adresse 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F<br />

00001BE 80 01 01 00 0B FE BF 7C 3F 00 00 00 FE 25 9c 00<br />

00001CE 00 00 81 7D 0F FE FF FF 3D 26 9C 00 9F 2A 2E 08<br />

00001DE 00 00 C1 FF 83 FE FF FF DC 50 CA 08 4E 01 B0 00<br />

00001EE 00 00 C1 FF 82 FE FF FF 2A 52 7A 09 C2 2D 10 00<br />

AK CHSStart ID CHSEnde LBA Adresse LBA Länge<br />

Abbildung 11.1.: Beispiel für eine Partitionstabelle<br />

11.1. Bootvorgang<br />

Die genauen Details der Partitionstabelle seien hier ausgeklammert, da die Partitionstabelle gut von grafischen<br />

Tools verwaltet werden kann. Für interessierte Anwender sei hier auf das <strong>Linux</strong>programm fdisk<br />

hingewiesen, mit dessen Hilfe Sie die Details der Partitionstabelle editieren können.<br />

<strong>Linux</strong> geht mit Erweiterten Partitionen erheblich freizügiger um als Windows. Sie sollten neue Logische<br />

<strong>Linux</strong>partitionen immmer direkt an den Anfang des freien Speichers innerhalb der Erweiterten Partition<br />

schreiben, damit Windowsprogramme wie “Partition Magic” nicht durcheinander kommen - vorausgesetzt,<br />

Sie verwenden solche! Wenn Sie die Partitionstabelle von Hand bearbeiten, können Sie Ihren kompletten<br />

Festplatteninhalt zerstören. Abhilfe kann in diesem Fall nur noch eine BootCD/Diskette mit dem Recovery-<br />

Werkzeug gpart helfen. Gpart versucht die ursprüngliche Partitionierung Ihrer Festplatte wieder zu erraten,<br />

kann aber dabei durchaus Fehler machen!<br />

11.1.4. LILO<br />

Der <strong>Linux</strong> Boot Loader ist ein komfortabler Bootloader, der alle gängigen Betriebssysteme starten kann. Er<br />

bietet ein Menu an, in dem das zu startende Betriebssystem auszuwählen ist. Handelt es sich dabei um ein<br />

<strong>Linux</strong>-System können zusätzlich noch Kernel-Parameter übergeben werden.<br />

LILO besteht aus zwei Hauptteilen. Der erste ist sehr klein, er muss nämlich in die 466 Bytes passen,<br />

die ihm der Masterbootrecord zur Verfügung stellt. Dadurch kann LILO gleich nach dem BIOS ausgeführt<br />

werden. Anschliessend kann LILO den zweiten Teil des Bootloaders nachladen, der sich an einer beliebigen<br />

Stelle auf der Festplatte befinden kann.<br />

Im zweiten Hauptteil des LILO ist der Code gespeichert, der für die Anzeige des Bootmenüs verantwortlich<br />

ist. Je nach Wahl des Users werden entweder die Bootsektoren anderer Partitionen angesprungen, oder<br />

das gewünschte Kernelimage in den Hauptspeicher geladen.<br />

11.1.5. Grub<br />

In der aktuellen SuSE 8.1 wird nicht mehr LILO sondern Grub als Bootmanager verwendet. GRUB bietet<br />

etwas mehr Komfort als lilo: Sie müssen nun nicht mehr jedesmal, wenn Sie einen neuen Kernelparameter<br />

für den Start anfügen wollen den kompletten MBR neu schreiben – dies ist bei GRUB unnötig, denn<br />

er kann standardmässig die geläufigsten Dateisysteme auslesen. Sie müssen daher nur einmal den MBR<br />

schreiben, <strong>und</strong> GRUB liest seine restlichen Parameter aus einer bestimmten Datei auf der Festplatte aus:<br />

/boot/grub/menu.lst.<br />

Hier finden Sie die Einträge zu den einzelnen Menüpunkten des Bootmanagers, die sich meistens relativ gut<br />

selbst erklären.<br />

Falls Sie dennoch in die Verlegenheit kommen, Ihren GRUB erneut in den MBR schreiben zu müssen<br />

(zum Beispiel durch die Installation gewisser anderer sogenannte Betriebssysteme), so können Sie das durch<br />

99


11. Bootkonzept <strong>und</strong> -manager<br />

grub-install /dev/FESTPLATTENDEVICE erledigen...<br />

11.1.6. Kernel<br />

Der Kernel wird durch den Bootloader angestartet <strong>und</strong> dadurch in den Arbeitsspeicher geladen. Sämtliche<br />

im System befindliche Hardware wird jetzt initialisiert <strong>und</strong> die übergegebenen Parameter wenn möglich ausgewertet.<br />

Des Weiteren werden die BIOS Register der Grafikkarte <strong>und</strong> das Ausgabeformat des Bildschirms<br />

überprüft. Anschließend liest der Kernel die Einstellungen des BIOS <strong>und</strong> initialisiert die Schnittstellen des<br />

Mainboards. Dann testen die Treiber als Bestandteile des Kernels die Hardware <strong>und</strong> initialisieren diese,<br />

wenn notwendig. Die Partitionen werden geprüft <strong>und</strong> das root Dateisystem gemountet. Zuletzt wird das<br />

Programm /sbin/init gestartet, dem die noch verbleibenden Parameter übergeben werden. Der Kernel<br />

selbst steuert weiterhin das gesamte System, verwaltet die Rechenzeit von Programmen <strong>und</strong> deren Zugriffe<br />

auf die Hardware.<br />

11.1.7. Init<br />

Init ist der erste laufende Prozess im System <strong>und</strong> steht deshalb innerhalb der Prozesshierarchie immer ganz<br />

oben (vgl. Kapitel Prozessverwaltung). Nachdem die verbliebenen Parameter ausgewertet wurden, erfolgt<br />

eine Basiskonfiguration des Systems <strong>und</strong> das Einbinden der Dateisysteme. Anschließend wird in den entsprechenden<br />

Runlevel gewechselt <strong>und</strong> die damit verb<strong>und</strong>enen Dämonprozesse (daemon) gestartet. Zuletzt<br />

erfolgt die Aufforderung zum Login. Dazu werden verschiedene Konfigurationsdateien gelesen <strong>und</strong> zahlreiche<br />

Skripten abgearbeitet (vgl. nähere Erläuterungen im nächsten Abschnitt).<br />

BIOS<br />

✬✩<br />

liest ❄<br />

CMOS<br />

zeigt✲ MBR Bootsektor1<br />

✫✪<br />

11.2. Systemstart-V-Init-Prozess<br />

Bootsektor2<br />

Bootsektor3<br />

lädt ✲<br />

Init<br />

ruft✻auf Kernel<br />

Abbildung 11.2.: Bootprozess grafisch veranschaulicht<br />

Jetzt nachdem einige Gr<strong>und</strong>lagen geklärt wurden, kann detaillierter auf die Vorgänge beim Systemstart<br />

eingegangen werden. Im wesentlichen ist zu klären, welche Mechanismen nach dem dem Anstarten des<br />

Prozesses init anlaufen. Dabei soll Ihnen aufgezeigt werden, an welcher Stelle einzugreifen ist, wenn andere<br />

Dienste mitgestartet oder bestimmte Konfigurationen vorgenommen werden sollen.<br />

100


11.2.1. Programm init<br />

11.2. Systemstart-V-Init-Prozess<br />

Das Programm /sbin/init ist dafür zuständig, dass das System korrekt initialisiert wird. Es ist allen anderen<br />

Prozessen übergeordnet <strong>und</strong> wird deswegen auch Vater-Prozess (parent) genannt, d.h. dass alle weiteren<br />

Prozesse von init oder dessen Kind-Prozessen (child) gestartet werden. Init hat die höchste Priorität.<br />

Demnach wird er bevorzugt vor allen anderen Prozessen ausgeführt. Stirbt init, sterben auch alle anderen<br />

Prozesse <strong>und</strong> das System stürzt ab. Zugleich ist init das einzige Programm, das direkt vom Kernel gestartet<br />

wird <strong>und</strong> es kann auch mit dem Kommando kill nicht beendet werden (weitere Informationen zur Prozessverwaltung<br />

sind im gleichnamigen Kapitel zu finden). Über die Datei /etc/inittab kann init konfiguriert<br />

werden. In dieser Datei werden die einzelnen Runlevel, <strong>und</strong> was in diesen geschehen soll, definiert. Die<br />

verschiedenen Skripten, die init startet, können durch die Einträge in dieser Konfigurationsdatei festgelegt<br />

werden. Diese Skripten sind übersichtlich im Verzeichnis /etc/init.d zusammengefasst.<br />

11.2.2. Runlevel<br />

Die Runlevel unter <strong>Linux</strong> definieren den Zustand des Betriebssystems. Was sich hinter dem einzelnen Runlevel<br />

Code verbirgt <strong>und</strong> in welchem Runlevel das System hochgefahren werden soll (default runlevel), ist in<br />

der Datei /etc/inittab dokumentiert. Beachten Sie bitte, dass die Runlevel versions- <strong>und</strong> distributionsspezifisch<br />

sind.<br />

Runlevel 0<br />

Das System wird angehalten. Es werden alle laufenden Prozesse beendet <strong>und</strong> zuletzt init selbst abgeschlossen.<br />

Das Abschalten des Rechners ist nach Erreichen dieses Zustandes gefahrlos möglich.<br />

Runlevel 1<br />

Der Single User Mode ist für Wartungsarbeiten oder Datensicherungen gedacht. Es läuft ein <strong>Linux</strong> Kernel,<br />

jedoch ist nur die root Partition gemountet. Nur der Benutzer root darf sich anmelden, alle anderen Benutzer<br />

haben keinen Zugang zum System. Alle Terminals sind getrennt <strong>und</strong> es ist nur noch die Arbeit an der<br />

Konsole möglich.<br />

Runlevel 2<br />

Im Multi User Mode ohne Netzwerk sind zwar sämtliche Benutzer am System zugelassen, allerdings ist es<br />

nicht möglich auf Remote-Systeme zuzugreifen, weil das Netzwerk nicht gestartet wird.<br />

Runlevel 3<br />

Das Netzwerk wird mitgestartet <strong>und</strong> das Einloggen erfolgt textbasiert.<br />

Runlevel 4<br />

Derzeit ist dieser nicht belegt.<br />

Runlevel 5<br />

Nachdem der X-Server gestartet wurde, dürfen sich alle Benutzer anmelden, auch wenn weiterhin alle Konsolen<br />

zur Verfügung stehen. Zudem wird das Netzwerk mitgestartet.<br />

101


11. Bootkonzept <strong>und</strong> -manager<br />

Runlevel 6<br />

Beim Wechsel in diesen Runlevel wird das System, nachdem alle Dienste beendet <strong>und</strong> alle Dateisysteme<br />

ausgehängt sind, durchgestartet.<br />

Als Systemadministrator (root) ist es jederzeit möglich in einen anderen Runlevel zu wechseln, indem<br />

mit dem Kommando init die gewünschte id des Runlevels an das System übergeben wird.<br />

init x<br />

11.2.3. init-Skripten<br />

Im Verzeichnis /sbin/init.d gibt es zwei Arten von Skripten. Zum einen Skripten, die direkt von init<br />

aufgerufen werden, was beim System-Boot, beim sofortigen Herunterfahren oder beim Neustart geschieht.<br />

Zum anderen indirekt von init gestartete Skripten. Beim Wechsel von Runleveln wird immer das übergeordnete<br />

Skript /etc/init.d/rc ausgeführt, woraufhin die relevanten Skripten in der richtigen Reihenfolge<br />

ausgeführt werden.<br />

Alle Skripten sind unter dem Verzeichnis /etc/init.d gespeichert. Auch die Skripten, die beim Wechseln<br />

des Runlevels gestartet werden, sind dort abgelegt, aber sie werden in der Regel als symbolischer Link<br />

aus den Unterverzeichnissen /etc/init.d/rcx.d aufgerufen. Diese Organisation ist sehr übersichtlich<br />

<strong>und</strong> vermeidet ein mehrfaches Vorkommen der Skripten, weil jedes Skript sowohl als Start- als auch als<br />

Kill-Skript gestartet werden kann. Der Unterschied liegt in der Parameterübergabe, die START oder STOP<br />

lautet.<br />

Die Kill- <strong>und</strong> Start-Skripten eines Runlevels sind in entsprechend benannten Verzeichnissen organisiert<br />

(/etc/init.d/rcx.d) <strong>und</strong> dort als Link realisiert. Durch ihre Benennung wird ersichtlich, um welchen<br />

Typ von Skript es sich handelt. Die Nummer im Namen der Links gibt an, in welcher Reihenfolge die zahlreichen<br />

Skripten abgearbeitet werden.<br />

Es kann jedoch auch ein sogenannter default runlevel festgelegt werden, in dem das System immer gestartet<br />

werden soll. Dies ist durch Anpassung der Einträge in der Datei /etc/inittab möglich. Hier könnte<br />

beispielsweise der default runlevel geändert werden oder das Verhalten des Systems beim Drücken der Tastenkombination<br />

Strg + Alt + Entf festgelegt werden.<br />

Wenn ein Runlevel gewechselt wird, werden die Kill-Skripten des aktuellen Runlevels ausgeführt. Diese<br />

beenden verschiedene Programme des Runlevels. Anschließend werden die Start-Skripten des neuen Runlevels<br />

ausgeführt. Init liest also die Konfigurationsdatei /etc/inittab <strong>und</strong> ruft das Skript /etc/init.d/rc<br />

auf, dem es den neuen Runlevel als Parameter übergibt. Als erstes noch bevor nur ein Dienst gestartet wird,<br />

kommt das Skript /etc/init.d/boot.local zur Ausführung. Anschließend ruft rc alle Kill-Skripten des<br />

aktuellen Runlevels auf, die im neuen Runlevel kein entsprechendes Start-Skript aufweisen.<br />

11.3. Bootkonzepte<br />

Das einfachste Bootkonzept ergibt sich zweifellos auf einem Rechner mit nur einem einzigen Betriebssystem,<br />

wie es oft bei nur ”Windows-Maschinen” der Fall ist. Aber auch ein reiner ”<strong>Linux</strong>-Rechner” ist<br />

denkbar. In diesem Fall ist es dennoch sinnvoll LILO zu installieren, da damit die Möglichkeit besteht, dem<br />

Kernel in einer Kommandozeile Parameter oder zusätzliche Informationen über Hardware mitzugeben, die<br />

den Startvorgang beeinflussen können. In einem solchen Szenario würde, wie bereits erwähnt, der MBR<br />

zusätzliche Informationen über den weiteren Bootvorgang enthalten.<br />

Sobald mehrere Betriebssysteme auf einem Rechner installiert sind, bieten sich anfänglich jedoch noch andere<br />

Bootkonzepte an. Der Ablauf nach Auslesen des MBR bleibt beim Start von <strong>Linux</strong> jedoch gr<strong>und</strong>sätzlich<br />

gleich dem eben beschriebenen Vorgang.<br />

102


System von Diskette / CD-ROM booten<br />

11.4. LILO - <strong>Linux</strong>-Bootloader<br />

Bei diesem Konzept wird ein Betriebssystem von der Festplatte geladen, während die alternativen Betriebssysteme<br />

mit Hilfe von Boot-Disketten bzw. Boot-CDs beim Hochfahren gebootet werden können. Bedingung<br />

für diesen Vorgang ist ein bootfähiges Disketten bzw. CD-ROM Laufwerk. Der Vorteil dieser Konfiguration<br />

besteht darin, dass man sich die heikle Installation des Bootloaders erspart. Allerdings werden<br />

auch die Nachteile dieses Vorgehens sehr schnell ersichtlich. Der Start des Rechners mit dem alternativen<br />

Betriebssystem dauert länger. Außerdem sind wechselbare bootfähige Medien eine zusätzliche Sicherheitslücke<br />

im System. Je nach Einsatz des Rechners ist es ein Vor- oder Nachteil, dass <strong>Linux</strong> nicht ohne<br />

Bootdiskette / BootCD gestartet werden kann.<br />

Installation eines Bootmanagers<br />

Ein Bootmanager erlaubt es, mehrere Systeme gleichzeitig auf einem Rechner zu halten <strong>und</strong> diese abwechselnd<br />

zu nutzen. Das zu ladende Betriebssystem wird bereits während des Bootens ausgewählt. Ein Wechsel<br />

erfordert den Neustart des Rechners. Allerdings ist es bei einer solchen Konfiguration unerlässlich, dass<br />

der gewählte Bootmanager alle anderen Betriebssysteme starten kann. Um Ärger zu vermeiden, sollte man<br />

von allen installierten Systemen zunächst eine Bootdiskette erstellen, damit man im Notfall oder bei Fehleinschätzung<br />

der Fähigkeiten des Bootmanagers dennoch Zugriff auf alle Betriebsysteme hat.<br />

11.4. LILO - <strong>Linux</strong>-Bootloader<br />

Im Folgenden wird zunächst die Installation <strong>und</strong> Konfiguration von LILO, dem Bootmanager für <strong>Linux</strong>-<br />

Systeme, näher erläutert.<br />

LILO ist ein vielseitiger Bootmanager, der für die Installation im MBR geeignet ist. Er funktioniert unabhängig<br />

von der Partitionstabelle <strong>und</strong> greift direkt auf die Festplatten zu, ohne auf ein angelegtes Dateisystem<br />

angewiesen zu sein. Aus diesem Gr<strong>und</strong> ist es auch möglich von anderen Festplatten bzw. Partitionen<br />

als der aktivierten primären Partition zu booten, d.h. dass Betriebssysteme beim Systemstart gr<strong>und</strong>sätzlich<br />

von den Bootsektoren aller Partitionen gestartet werden können. Außerdem macht LILO es möglich mit<br />

verschiedenen <strong>Linux</strong>-Kerneln zu starten, wobei diesen noch weitere Parameter mit Hilfe des Bootpromptes<br />

mitgegeben werden können.<br />

LILO ist der <strong>Linux</strong> - Bootmanager. Um die Konfiguration vorzunehmen, geht man wie folgt vor. Der Punkt<br />

Kernel- <strong>und</strong> Bootkonfiguration unter Administration des Systems beinhaltet die Konfiguration von LILO.<br />

Mit F4 können neue Konfigurationen erstellt werden. Diese entsprechen den Einträgen im LILO Bootmenü.<br />

Zuerst muss der Name des Menüpunktes eingegeben werden. Dann ist das zu bootende System auszuwählen.<br />

Unter root Partition ist die zu startende Festplatte in der Form /dev/xxxx anzugeben.<br />

Sollen weitere Einträge erstellt werden, so sind die oben angesprochenen Punkte nochmal durchzuführen.<br />

Wenn Konfigurationen für alle zu startenden Betriebssysteme erstellt worden sind, müssen noch zwei Parameter<br />

für <strong>Linux</strong> festgelegt werden.<br />

Zum einen der Ort, an den LILO installiert werden soll <strong>und</strong> zum anderen die Wartezeit beim Booten. Den<br />

Ort kann man in Tabelle 11.2 auf Seite 11.2 vergleichen.<br />

Die Frage, ob die root Partition aktiviert werden soll, darf natürlich nicht mit Ja beantwortet werden, wenn<br />

auf dem System ein Betriebsystem wie DOS oder Windows läuft, das nur von der aktiven Partition gebootet<br />

werden kann.<br />

103


11. Bootkonzept <strong>und</strong> -manager<br />

Ort Begründung<br />

MasterBootRecord Diese Option sollte nur gewählt werden, wenn man<br />

sicher sein kann, dass alle installierten Systeme von<br />

LILO gebootet werden können.<br />

Bootsektor der Rootpartition Wenn der MasterBootRecord unbeeinträchtigt bleiben<br />

soll, empfiehlt es sich diese Einstellung zu<br />

wählen.<br />

Diskette Soll von Diskette gebootet werden, ist diese<br />

Möglichkeit sinnvoll.<br />

11.4.1. Andere Betriebssysteme<br />

Tabelle 11.2.: lilo - Wo hin damit?<br />

<strong>Linux</strong> bietet die Möglichkeit, andere Betriebssysteme als Menüpunkte in LILO mit aufzunehmen. Problemlos<br />

funktioniert das mit DOS, Windows 95 - ME, Windows NT <strong>und</strong> Windows 2000. Dazu muss in der<br />

/etc/lilo.conf einfach nur die Partition, auf der das System sich befindet eingetragen werden.<br />

Die Integration von Windows XP gestaltet sich analog, solange XP sich auf einer mit NTFS formatierten<br />

Partition befindet. Wenn jedoch Windows XP auf eine logische FAT32 Partition installiert wurde, fehlt mir<br />

bisher die Möglichkeit, XP mit in den Bootmanager einzubinden, da das direkte Eintragen der Partition in<br />

die /etc/lilo.con nicht den gewünschten Erfolg bringt: Der Rechner bleibt beim Booten hängen...<br />

Als Alternative sei hier die Möglichkeit erwähnt, <strong>Linux</strong> in den NT-Bootmanager mit aufzunehmen. Dazu<br />

weisen Sie LILO an, sich in den Bootsektor der <strong>Linux</strong>-Root-Partition einzutragen.<br />

Danach führen Sie folgenden Befehl aus:<br />

dd if=/dev/hda3 of=/windows/bootpartition/linux.img bs=512 count=1<br />

Damit haben Sie den Bootsektor der Partition /dev/hda3 in die Datei linux.img auf Ihrer Windows-<br />

Bootpartition übertragen. Diese können Sie nun bequem als weiteren Menüpunkt in Ihrer boot.ini Datei<br />

mit aufnehmen.<br />

11.4.2. LILO deinstallieren<br />

Um LILO zu deinstallieren <strong>und</strong> den MBR zu restaurieren geben Sie folgenden Befehl ein:<br />

lilo -u /dev/hda<br />

11.5. Grafischer Boot<br />

Wie Sie sicherlich bemerkt haben, unterscheidet sich der Systemstart einer SuSE-<strong>Linux</strong>-Box von dem einer<br />

<strong>Linux</strong>-Box mit gewöhnlichem Standardkernel. SuSE hat den Standardkernel um ein Splash-Screen Modul<br />

erweitert. Dieses ist für die Anzeige des SuSE Hintergr<strong>und</strong>bildes verantwortlich. Wer sich durch dieses<br />

Bild gestört fühlt, oder um ein Corporate Design bemüht ist, sucht oft nach einer Möglichkeit, dieses<br />

Bild durch ein eigenes zu ersetzen. Dies geschieht durch die Anpassung einiger Dateien im Verzeichnis<br />

/usr/share/splash.<br />

104


Übungen<br />

11.5. Grafischer Boot<br />

1. Welches Programm ruft der Kernel beim Booten auf? Und was ist das besondere an diesem Programm?<br />

2. In welcher Datei wird der Standard-Runlevel ersichtlich? Was wird mit dieser Datei gesteuert bzw. in ihr<br />

dokumentiert?<br />

3. Mit welchem Kommando werden die Runlevel gewechselt <strong>und</strong> was passiert bei einem solchen Wechsel?<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

105


11. Bootkonzept <strong>und</strong> -manager<br />

106


12. RPM - RedHat Paket Manager<br />

Der ursprünglich von RedHat stammende Paket Manager wird zwar von modernen Installationstools vor<br />

neugierigen Blicken verborgen, allerdings bleibt deren Ausführung dem Administrator vorbehalten. Aber<br />

auch wenn Benutzer keine Software systemweit installieren dürfen, so brauchen sie gelegentlich Auskunft<br />

über das eine oder andere Paket. An der Kommandozeile bietet der Befehl rpm alles was man zum Umgang<br />

mit der Paketverwaltung benötigt.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die Paketdatenbank des Paket Managers abzufragen,<br />

• Abhängigkeiten anzuzeigen <strong>und</strong> zu lösen,<br />

• Informationen über einzelne Pakete zu erhalten.<br />

12.1. Gr<strong>und</strong>lagen<br />

Auf den ersten Blick erscheint die Installation von Software eine einfache Sache zu sein. Erst bei genauerem<br />

Hinsehen offenbart sich, dass mehr dahinter steckt als ein einfacher Kopiervorgang vom Installationsmedium<br />

in das lokale Dateisystem. Gerade in Multiusersystemen sind folgende Punkte zu beachten.<br />

• Umgebungsvariablen der Benutzer<br />

• Berechtigungen im Dateisystem<br />

• verschiedene Versionsstände<br />

• Dokumentation<br />

• Konfigurationsdateien<br />

• Abhängigkeiten zu anderen Paketen<br />

• rückstandsloses Entfernen von Softwarefragmenten<br />

Die Verwaltung dieser Informationen erfolgt mit Hilfe einer Datenbank, die von durchdachten Werkzeugen,<br />

beispielsweise YaST2, bedient wird. Spätestens wenn Pakete, die nicht von der Distribution mitgeliefert<br />

wurden, installiert werden sollen, kommt man jedoch um die Verwendung von rpm nicht mehr herum.<br />

107


12. RPM - RedHat Paket Manager<br />

12.1.1. Namenskonvention<br />

In der Regel enthält der Name eines rpm-Paketes folgende Einzelinformationen, die durch Bindestriche bzw.<br />

Punkte voneinander getrennt werden.<br />

• Name des Pakets, kann vom Entwickler frei bestimmt werden,<br />

• Versionsnummer, ergibt sich aus der laufenden Projekt-Entwicklung,<br />

• Releasestand, wird laufend für den Build des Pakets vergeben,<br />

• Plattform, gibt Auskunft über die Art des kompilierenden Rechners z.B. alpha, i386, ppc<br />

• Endung, lautet auf rpm.<br />

12.2. Installation<br />

Die Installation einzelner Pakete lässt sich leicht bewerkstelligen. Dabei kann das rpm-Paket im lokalen<br />

Dateisystem oder auf einem FTP- bzw. HTTP- Server liegen.<br />

# rpm -i /share/install/suse8.0/suse/doc4/books-2002.3.20-0.noarch.rpm<br />

Sind alle Abhängigkeiten aufgelöst, kann sofort mit der installierten Software gearbeitet werden. Bei<br />

Schwierigkeiten helfen ggf. einige Parameter weiter, die in der Manualseite von rpm aufgeführt werden<br />

(z.B. -v für eine gesprächigere Ausgabe, –hash für eine Fortschrittsanzeige, –test um zu prüfen, ob alle Installationsvoraussetzungen<br />

erfüllt sind usw.).<br />

12.3. Abfragen der Paketdatenbank<br />

Die Abfrage der Paketdatenbank beginnt immer mit der Option -q für Query.<br />

Datei - Paket<br />

Manchmal ist es interessant zu erfahren in welchem Paket eine bestimmte Datei bzw. ein häufig benutztes<br />

Kommando zu finden ist. Um dem auf die Schliche zu kommen, muss zunächst der komplette Pfad in<br />

Erfahrung gebracht <strong>und</strong> dann dem Befehl rpm übergeben werden.<br />

> rpm -qf ‘type -p konsole‘<br />

kdebase3-3.0-5<br />

Paketinformationen<br />

Zu den zahlreichen Paketen der Distribution sind auch etliche Informationen in der Datenbank bzw. im<br />

Paketheader abgelegt, die wie folgt erfragt werden können<br />

> rpm -qi kdebase3-3.0-5<br />

Name : kdebase3 Relocations: (not relocateable)<br />

Version : 3.0 Vendor: SuSE AG, Nuernberg, Germany<br />

Release : 5 Build Date: Mit 27 Mär 2002 18:50:26 CET<br />

108


12.3. Abfragen der Paketdatenbank<br />

Install date: Mit 22 Mai 2002 22:52:23 CEST Build Host: D4.suse.de<br />

Group : System/GUI/KDE Source RPM: kdebase3-3.0-5.src.rpm<br />

Size : 34644135 License: GPL<br />

Packager : feedback@suse.de<br />

Summary : KDE base package: base system<br />

Description :<br />

This package contains kdebase, one of the basic packages of the K<br />

Desktop Environment. It contains among others KWIN, the KDE window<br />

manager; KONQUEROR, the KDE browser; KControl, the configuration program.<br />

This package is not needed if you want to start some KDE 2 applications,<br />

but not to use the KDE 2 Desktop.<br />

Authors:<br />

--------<br />

The KDE Team <br />

SuSE series: kde<br />

Distribution: SuSE <strong>Linux</strong> 8.0 (i386)<br />

Paketinhalt<br />

In der Regel gibt die dem Paket beliegende Dokumentation Auskunft über den Umfang der Software, die<br />

Namen der Konfigurationsdateien <strong>und</strong> deren Installationspfad. Allerdings weiß darüber auch die Datenbank<br />

Bescheid.<br />

> rpm -ql kdebase3-3.0-5 | more<br />

/etc/opt/kde3/share/config/kdm<br />

/etc/opt/kde3/share/config/kdm/kdmrc<br />

/opt/kde3/bin<br />

/opt/kde3/bin/appletproxy<br />

/opt/kde3/bin/chooser<br />

/opt/kde3/bin/conttest<br />

/opt/kde3/bin/drkonqi<br />

/opt/kde3/bin/extensionproxy<br />

/opt/kde3/bin/kaccess<br />

/opt/kde3/bin/kaddressbook<br />

/opt/kde3/bin/kappfinder<br />

/opt/kde3/bin/kate<br />

/opt/kde3/bin/kblankscrn.kss<br />

/opt/kde3/bin/kcheckpass<br />

/opt/kde3/bin/kcminit<br />

/opt/kde3/bin/kcmshell<br />

/opt/kde3/bin/kcontrol<br />

/opt/kde3/bin/kdcop<br />

/opt/kde3/bin/kdebugdialog<br />

/opt/kde3/bin/kdeeject<br />

109


12. RPM - RedHat Paket Manager<br />

/opt/kde3/bin/kdeprintfax<br />

/opt/kde3/bin/kdesktop<br />

...<br />

12.4. Abhängigkeiten<br />

Die Fähigkeiten von rpm gehen jedoch über die reine Installation von zusätzlicher Software hinaus. So<br />

können auch Abhängigkeiten zu anderen Paketen abgebildetet werden. In der Regel wird damit nur am<br />

Rande konfrontiert, da die ausgeklügelten Installationswerkzeuge der Distributionen bestehende Abhängigkeiten<br />

erkennen <strong>und</strong> auflösen können.<br />

Um zu erkennen, welche Pakete von dem gefragten Paket benötigt werden, wird folgender Befehl angewendet.<br />

> rpm --requires -q kdebase3-3.0-5<br />

kdebase3-ksysguardd<br />

kcontrol.so<br />

kdesktop.so<br />

keditbookmarks.so<br />

kfmclient.so<br />

khotkeys.so<br />

klipper.so<br />

kmenuedit.so<br />

konqueror.so<br />

kwrite.so<br />

ld-linux.so.2<br />

libc.so.6<br />

...<br />

Auch der umgekehrte Weg ist denkbar. Welche Pakete bauen auf einem bestimmten anderen Paket auf<br />

<strong>und</strong> werden nach einer unbedachten Deinstallation möglicherweise nicht mehr funktionieren.<br />

> rpm --whatrequires -q kdebase3-3.0-5<br />

kein Paket verlangt kdebase3-3.0-5<br />

12.5. Erstellung eigener Pakete<br />

Hier die Erfahrungen aus der Arbeit dokumentieren!<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

110


13. Kernel <strong>und</strong> Kernelmodule<br />

Wer glaubt, dass <strong>Linux</strong> schon immer so umfangreich war wie heute, der irrt. Nicht nur die verschiedensten<br />

Distributoren, allen voran SuSE, haben immer mehr Software dazugepackt, sondern auch der eigentliche<br />

Betriebssystemkern <strong>und</strong> die darum angeordneten Kernelmodule haben in den letzten Jahren ordentlich an<br />

Codeumfang zugelegt.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• das dem Kernel zugr<strong>und</strong>e liegende Konzept kennen,<br />

• die Aufgaben des Kernels einzuschätzen,<br />

• eine Kernelkompilierung <strong>und</strong> -installation durchzuführen,<br />

• den Umgang mit Kernelmodulen zu verstehen.<br />

Dieses besonders systemnahe Kapitel richtet sich weder an Einsteiger noch an Anwender. Es bietet sich<br />

jedoch denjenigen an, die tiefer in das System einsteigen wollen <strong>und</strong> hinter die Kulissen des Betriebssystems<br />

blicken möchten. Für das allgemeine Verständnis sollten Sie Kenntnisse im Aufbau von IT-Systemen<br />

mitbringen <strong>und</strong> insbesondere die Hardware Ihres eigenen Systems kennen.<br />

Achtung!<br />

Der Kernel ist nicht nur dem Namen nach der innerste Kern von <strong>Linux</strong>. Sie bewegen sich im vorliegenden<br />

Kapitel sehr nah am System, was zwar einerseits interessant, andererseits aber auch nicht ganz ungefährlich<br />

ist. Gehen Sie also, nicht bloß weil Sie ständig als root angemeldet sein werden, mit Bedacht vor.<br />

13.1. Gr<strong>und</strong>lagen<br />

Bevor der Einstieg in die Umgebung des Kernels gelingen kann, sind noch einige Gr<strong>und</strong>lagen zu schaffen.<br />

Dazu gehören neben den Aufgaben des Kernels auch der gr<strong>und</strong>legende konzeptionelle Ansatz.<br />

13.1.1. Aufgabenteilung<br />

Der Kernel stellt eine Schnittstelle zwischen den einzelnen Hardwarekomponenten <strong>und</strong> den Anwendungen<br />

dar. Darüber hinaus übernimmt er gr<strong>und</strong>legende Funktionen wie die Speicher- <strong>und</strong> Prozessverwaltung.<br />

Module können in diesem Sinne als Treiber verstanden werden, die den Zugriff auf Geräte, wie Festplatten,<br />

Netzwerkkarten usw. gewährleisten.<br />

Alle Zugriffe auf die Hardware müssen vom Kernel koordiniert werden, d.h. keine Anwendung darf direkt<br />

auf einzelne Geräte zugreifen. Ausnahmen von dieser Regel sind beispielsweise X-Server, die direkt zur<br />

Grafikkarte durchgreifen oder verschiedene Datenbanken, die unter Umgehung des Kernel-Caches raw auf<br />

die Platten schreiben.<br />

111


13. Kernel <strong>und</strong> Kernelmodule<br />

13.1.2. Gerätedateien<br />

Damit Anwendungen die verschiedensten Komponenten bzw. deren Treiber überhaupt ansprechen können,<br />

stellt <strong>Linux</strong> im Dateisystem eine Unmenge an Gerätedateien, die ausschließlich im Verzeichnis /dev zu<br />

finden sind, bereit. Der Zugriff auf das jeweilige Gerät kann also so erfolgen, als ob es eine Datei wäre. Die<br />

Abwicklung der internen Systemaufrufe übernimmt dann der Kernel oder das zuständiges Modul.<br />

Beispiel<br />

Das Kommando dd soll das Image einer Bootdiskette auf Diskette schreiben. Dabei darf es nicht einfach am<br />

Kernel vorbei auf den Floppy-Controller zugreifen. Stattdessen schreibt es auf die Gerätedatei /dev/fd0.<br />

Alles andere ist Aufgabe des Kernels.<br />

Genauere Erläuterungen zum Devicefilesystem /dev finden Sie im gleichnamigen Kapitel.<br />

13.1.3. Konzeption<br />

Eine Kernel-Architektur kann gr<strong>und</strong>sätzlich zwei konzeptionelle Ansätze verfolgen. Zu Beginn der <strong>Linux</strong>entwicklung<br />

führte dies auch zu heftigen Streitigkeiten zwischen Linus Torvalds, der mit dem vorerst monolithischen<br />

Ansatz, ein anderes Model verfolgte als der Universitätsprofessor Andrew Tanenbaum, der<br />

Minix mit einem Microkernel implementiert hatte. Allerdings werden Sie im laufenden Betrieb auf keine<br />

der nachfolgend beschriebenen Lösungen in ihrer reinsten Form treffen.<br />

Monolithischer Ansatz<br />

Sämtliche Funktionen des Kernels werden bei der Kompilierung in diesen integriert. Daraus ergibt sich zwar<br />

einerseits eine einfache Struktur, andererseits braucht der Kernel aber aufgr<strong>und</strong> seiner Größe mehr Systemressourcen<br />

<strong>und</strong> ist überdies nicht sonderlich flexibel. Wenn beispielsweise neue Hardware hinzukommt,<br />

muss ein neuer Kernel kompiliert werden, um die Unterstützung für diese Komponente zu aktivieren.<br />

Modularisierter Ansatz<br />

Zunächst wird nur das Notwendigste in den sogenannten Microkernel integriert. Zusätzliche Funktionen<br />

werden von eigens kompilierten Kernelmodulen abgedeckt. Diese Module können im laufenden Betrieb<br />

in den Kernel eingeb<strong>und</strong>en <strong>und</strong> später wieder entfernt werden, weshalb der Kernel immer optimal an das<br />

System angepasst ist. Das spart zum einen wertvolle Systemressourcen <strong>und</strong> bringt zum anderen erhöhte<br />

Flexibilität, da neue Hardwarekomponenten ohne langwierige Neukompilierung des Kernels in das System<br />

integriert werden können.<br />

13.1.4. Versionsnummern<br />

Anhand der Versionsnummer eines Kernels kann zwischen stabilen Anwender-Kerneln <strong>und</strong> noch nicht ausgereiften<br />

Entwickler-Kerneln unterschieden werden. Der Unterschied besteht in der zweiten Ziffer in der<br />

Versionsnummer. Ist diese Ziffer gerade, so handelt es sich um einen ausgiebig getesteten Kernel, der für<br />

Anwender freigegeben wurde. Ist diese jedoch ungerade, so kann der Kernel noch nicht als stabil bezeichnet<br />

werden <strong>und</strong> ist in erster Linie für Kernel-Entwickler <strong>und</strong> muss noch ausgiebigen Stabilitäts- <strong>und</strong> Belastungstests<br />

ausgesetzt werden.<br />

112


13.2. Kompilierung <strong>und</strong> Installation<br />

13.2. Kompilierung <strong>und</strong> Installation<br />

Sämtliche Distributoren liefern brauchbare Standard-Kernel <strong>und</strong> eine umfangreiche Sammlung von Modulen<br />

mit. Einerseits laufen diese Kernel zwar stabil <strong>und</strong> enthalten die gängigsten Funktionen, andererseits<br />

heißt das aber, dass diese kaum für das von Ihnen eingesetzte System <strong>und</strong> die gefahrenen Anwendungen<br />

optimiert sind.<br />

Die folgende Anleitung soll es Ihnen nicht nur ermöglichen einen Kernel zu kompilieren <strong>und</strong> zu installieren,<br />

sondern Ihnen auch ein tieferes Verständnis für das System vermitteln.<br />

13.2.1. Motivation<br />

Einer der wichtigsten Gründe für die Beschäftigung mit den Kernel-Quellen ist das Durcharbeiten der mitgelieferten<br />

<strong>und</strong> äußerst umfangreichen Dokumentation. Natürlich gibt es weitere gute Gründe für die Kompilierung<br />

eines eigenen Kernels, beispielsweise<br />

• die Optimierung des Betriebssystems,<br />

• die Integration besonderer Funktionen,<br />

• das Durcharbeiten der Kerneldokumentation,<br />

• die Verwendung des neuesten Kernels.<br />

An dieser Stelle sei noch einmal betont: Erfüllt der verwendete Kernel Ihre spezifischen Anforderungen<br />

<strong>und</strong> darüber hinaus Ihre Vorstellungen von Stabilität <strong>und</strong> Systemsicherheit, brauchen Sie weder ein Kernel-<br />

Update bzw. einen Kernel-Patch noch eine Kernel-Kompilation durchzuführen.<br />

13.2.2. Installation der Kernel-Quellen<br />

Zunächst müssen die Quellen des Kernels installiert werden. SuSE liefert hierzu die Quellen des Standardkernels<br />

<strong>und</strong> die des distributionsspezifischen Kernels mit. Sie finden die Pakete mit Suchbegriffen wie<br />

“<strong>Linux</strong>”, “Kernel” oder “Quellen” in der Paketdatenbank. Sind Sie auf eine aktuelle Kernelversion angewiesen,<br />

so finden Sie diese im Internet. Erste Anlaufstelle wäre hier der jeweilige Distributor, der in der<br />

Regel eigene Kernelversionen zertifiziert <strong>und</strong> entsprechend als Paket bereitstellt. Hinzu kommt, dass die<br />

Distributoren eigene Patches einspielen, die den Kernel speziell für ihre Distribution anpassen. Reicht dies<br />

nicht aus, kann die neueste Entwicklerversion bei www.kernel.org heruntergeladen werden. Hier finden<br />

sich zu den letzten Versionen sogenannte Changelogs, die die Änderungen der letzten Prepatches enthalten.<br />

Nach der Installation finden Sie die Kernelquellen im Verzeichnis /usr/src/linux-n, wobei das n für<br />

die Kernelversion steht. In der Regel gibt es auch ein Verzeichnis /usr/src/linux, dass jedoch nur eine<br />

Verlinkung auf eines der Quell-Verzeichnisse ist.<br />

13.2.3. Konfiguration<br />

Es wurde bereits angesprochen, dass ein Kernel für das jeweils verwendete System optimiert werden kann.<br />

Dazu ist es nicht nur wichtig die eingebaute Hardware zu kennen, sondern auch zu wissen, welche Aufgaben<br />

der jeweilige Rechner zu übernehmen hat. Im privaten Gebrauch mag dies eine untergeordnete Rolle spielen,<br />

beim professionellen Einsatz von Application Servern <strong>und</strong> Datenbanken dürfen diese Überlegungen nicht<br />

außen vor bleiben.<br />

Bevor die eigentliche Kernel-Kompilierung begonnen werden kann, müssen umfangreiche Einstellungen,<br />

die in der Datei .config gespeichert werden, getätigt werden. Nach der Installation der Quellen ist diese<br />

113


13. Kernel <strong>und</strong> Kernelmodule<br />

Datei unter Umständen noch nicht vorhanden, so dass Sie bei null anfangen müssten. Wenn Sie bei der<br />

gleichen Kernelversion bleiben, gibt es allerdings Abhilfe, da SuSE eine Standardkonfiguration in der Datei<br />

vmlinuz.config im Verzeichnis /boot ablegt.<br />

Mit dem Befehl cp /boot/vmlinuz.config /usr/src/linux-n/.config kann diese für den jeweiligen<br />

Kernel übernommen werden.<br />

Im Editor betrachtet, werden schnell zwei Sachverhalte deutlich. Erstens ist der Umfang kaum überschaubar<br />

(fast jede Zeile enthält eine Einstellung) <strong>und</strong> zweitens gibt es zu nahezu jeder Angabe gr<strong>und</strong>sätzlich drei<br />

Möglichkeiten.<br />

Yes Unterstützung wird in den Kernel integriert, beispielsweise dann wichtig, wenn Sie das Gerät bereits<br />

beim Booten benötigen.<br />

Modul Treiber wird als Modul kompiliert <strong>und</strong> kann später bei Bedarf mit eingeb<strong>und</strong>en werden.<br />

No Unterstützung wird nicht mitkompiliert.<br />

Auch wenn es möglich ist, sollten Sie die Änderungen nicht eigenmächtig in die Datei .config eintragen,<br />

sondern eines der unten beschriebenen Werkzeuge verwenden. Wechseln Sie dazu in das Verzeichnis<br />

/usr/src/linux-n <strong>und</strong> führen Sie als root einen der genannten Befehle aus. Dabei gilt: Wenn Sie unsicher<br />

sind, sollten Sie in jedem Fall die Dokumentation zur Rate ziehen oder es bei der Standardeinstellung belassen.<br />

#make config Dieses Programm weist am wenigsten Komfort auf, da Sie eine endlose Liste von Fragen<br />

der Reihe nach beantworten müssen <strong>und</strong> ein Zurückgehen oder Vorwärtsspringen nicht möglich ist.<br />

Letztendlich arbeiten Sie einfach die Einstellmöglichkeiten von .config sequentiell ab. Einzigster<br />

Vorteil dieser Methode besteht darin, dass keinerlei zusätzliche Programme installiert werden müssen.<br />

#make menuconfig Dieses Programm ist vergleichsweise komfortabel. Die Konfiguration erfolgt zwar immer<br />

noch im Textmodus, allerdings können jetzt die einzelnen Konfigurationspunkte in einer Menüstruktur<br />

ausgewählt werden. Es ist also möglich, nur rasch vereinzelte Punkte zu verändern, ohne die gesamte<br />

Liste der Einstellungen durchzuarbeiten.<br />

#make xconfig Dieses Programm ist weit anspruchsvoller, da ein X - Server laufen <strong>und</strong> zudem tcl/tk installiert<br />

sein muss. Die Konfiguration erfolgt jetzt per Mausklick, indem einzelne Optionen aus den<br />

Menüs bzw. Listen an- bzw. abgewählt werden. Anschließend speichern Sie die vorgenommene Konfiguration<br />

ab.<br />

Gleich welchen Befehl Sie verwenden, bleiben Ihnen eine Menge Fragen zur Kernelkonfiguration nicht<br />

erspart. Jedoch kommt es nicht selten vor, dass viele spezielle Einstellungen nicht getätigt werden können,<br />

weil die dazugehörige gr<strong>und</strong>sätzliche Unterstützung nicht aktiviert wurde. In vielen Fällen werden Sie sich<br />

also in die Dokumentation einlesen oder von vorneherein bei der Standardeinstellung verbleiben müssen.<br />

13.2.4. Kompilierung<br />

Nachdem Sie die benötigten Einstellungen getätigt haben, muss der Rechner den Kernel <strong>und</strong> die Module<br />

kompilieren. Führen Sie dazu die untenstehenden Befehle der Reihe nach im Verzeichnis /usr/src/linux-n<br />

aus <strong>und</strong> lehnen Sie sich zurück, da der gesamte Vorgang je nach Systemleistung länger dauern kann.<br />

114


13.2. Kompilierung <strong>und</strong> Installation<br />

#make dep Die Abhängigkeiten zwischen den zu kompilierenden Kernelbestandteilen werden geprüft <strong>und</strong><br />

das Ergebnis in das entsprechende Quell-Verzeichnis in Dateien namens .depend eingetragen.<br />

#make clean Übergebliebene Reste vorangegangener Kompilationsläufe werden gelöscht.<br />

#make bzImage Die Kompilierung des Kernels wird gestartet <strong>und</strong> der fertige Kernel mit dem Namen<br />

bzImage in das Verzeichnis /usr/src/linux-n/arch/i386/boot kopiert. Die Module sind bei diesem<br />

Kompilationslauf jedoch noch nicht enthalten.<br />

#make modules Jetzt werden die Kernelmodule kompiliert. Dieser Vorgang dauert, in Abhängigkeit von<br />

der Anzahl der Module, wesentlich länger als die eigentliche Kernel-Kompilierung.<br />

Nach diesem recht zeitaufwendigen Vorgang, sind zwar der Kernel <strong>und</strong> die dazugehörigen Module kompiliert,<br />

allerdings hat dies noch keine Auswirkungen auf das System, da der Kernel noch nicht installiert<br />

wurde. Sie müssen Ihr System dazu bringen, mit dem neuen Kernel zu booten <strong>und</strong> die neuerstellten Module<br />

einzubinden.<br />

13.2.5. Installation des Kernels<br />

Nachdem der Kernel <strong>und</strong> sämtliche Module kompiliert wurden, werden im Anschluss zunächst die zahlreichen<br />

Module <strong>und</strong> erst danach der Kernel installiert.<br />

#make modules install Die gerade kompilierten Module, die verstreut im Quellpfad des Kernels liegen,<br />

werden in das Verzeichnis /lib/modules/n kopiert.<br />

# cp /usr/src/linux-n/arch/i386/boot/bzImage /boot/vmlinuz.user Beim Booten des Rechners wird durch<br />

LILO der ausgewählte Kernel gestartet. Haben Sie einen neuen Kernel kompiliert, muss der Kernel<br />

in das Verzeichnis /boot kopiert <strong>und</strong> LILO entsprechend angepasst werden. Überschreiben Sie keinesfalls<br />

einen der funktionsfähigen Kernel, sondern legen Sie eine neue Datei beispielsweise mit dem<br />

Namen vmlinuz.user an.<br />

Jetzt muss dem <strong>Linux</strong> Loader (LILO) noch ein neuer Eintrag in der Datei /etc/lilo.conf hinzugefügt<br />

werden, wobei Sie sich an den bereits vorhandenen Einträgen orientieren können. Damit der neue Eintrag<br />

auch beim Booten sichtbar wird, muss zu guter Letzt noch das Kommando lilo ausgeführt werden.<br />

Dabei werden die internen Zeiger von LILO auf die veränderten Kernel aktualisiert. Dies ist immer dann<br />

notwendig, wenn sich Kernel-Dateien geändert haben, also auch dann, wenn Sie nochmals einen Kernel<br />

kompilieren <strong>und</strong> damit einen älteren im Verzeichnis /boot überschreiben.<br />

13.2.6. Initial Ramdisk<br />

Theoretisch wäre ein <strong>Linux</strong>kernel mit den oben genannten Vorbereitungen voll benutzbar. Es gibt da jedoch<br />

noch eine kleine Schwachstelle in diesem Konzept:<br />

Eventuell gehören Sie zu den Menschen, die zum Beispiel ihre Root-Partition mit dem neuen Dateisystem<br />

reiserfs formatiert haben. Oder sie sind glücklicher Besitzer eines Brenners, der über die ide-scsi<br />

Module angesprochen wird. Sie ahnen bereits: Für beide Geräte wird nach SuSE-Standard jeweils ein Kernelmodul<br />

erzeugt. Woher jedoch soll der Kernel beim booten diese Module nachladen, wenn diese auf eben<br />

der Reiser-Partition abgelegt sind?<br />

Für dieses Problem haben sich die Leute bei SuSE das Konzept der Initial-Ramdisk ausgedacht: Der Bootloader<br />

lädt eine Datei mit eben diesen Modulen, die so dringend vom Kernel benötigt werden in den Hauptspeicher,<br />

auf den ja bekanntlich ohne Schwierigkeiten zugegriffen werden kann.<br />

115


13. Kernel <strong>und</strong> Kernelmodule<br />

So weit, so gut. Ihr selbst compilierter Kernel braucht jedoch eventuell ebenso eine Ramdisk, aber die wurde<br />

ja bisher nicht erzeugt – Hier kommen Sie ins Spiel.<br />

1. Um diese Ramdisk zu einzurichten, rufen Sie zuerst den Sysconfig-Editor im YaST auf, um die Variable<br />

Base-Administration/Common-Basics/initrd modules mit den richtigen benötigten Modulen zu<br />

füllen.<br />

2. Jetzt müssen Sie die neue Ramdisk nur noch erstellen lassen. Dies erledigt für Sie das Werkzeug<br />

mkinitrd. Sie müssen es aufrufen mit zwei Parametern:<br />

-k dahinter geben Sie in Anführungszeichen die Kerneldatei an, für die Sie eine Ramdisk erzeugen<br />

wollen<br />

-i dahinter geben Sie in Anführungszeichen den Namen der neuen Ramdisk an<br />

3. Schliesslich tragen sie die neue Ramdisk im Bootmanager, z.B. GRUB ein.<br />

13.2.7. Systemtest<br />

Jetzt starten Sie den Rechner durch <strong>und</strong> wählen beim Hochfahren den entsprechenden Eintrag im LILO aus.<br />

Kurz darauf wird der neue Kernel zum ersten Mal gestartet. Dabei sollten Sie genauestens die Kernel- <strong>und</strong><br />

Modulmeldungen beobachten. Treten hierbei bereits Fehler auf, kommen Sie um eine erneute Konfiguration<br />

<strong>und</strong> Kompilierung nicht herum. Verläuft hingegen alles problemlos <strong>und</strong> funktionieren alle Hardwarekomponenten<br />

sollten Sie den Kernel im laufenden Betrieb eine Weile testen <strong>und</strong> dabei die Systemperformance<br />

<strong>und</strong> Stabilität beobachten. Darüber hinaus ist auch die Funktion der zahlreichen, aber vielleicht selten verwendeten,<br />

Hardwarekomponenten sicherzustellen.<br />

13.3. Verwaltung der Kernelmodule<br />

Wie bereits deutlich geworden sein sollte, beruht der <strong>Linux</strong>-Kernel im wesentlichen auf Modulen. Im folgenden<br />

soll das Konzept der Kernelmodule aufgezeigt <strong>und</strong> die internen Systemabläufe bei der Einbindung<br />

von Modulen verdeutlicht werden.<br />

13.3.1. Motivation<br />

Die Vorteile des modularisierten Kernels sind vielleicht schon weiter oben klar geworden. Hier noch einmal<br />

in kurzen Stichpunkten.<br />

• Treiber für selten benötigte Hardware werden nur bei Bedarf geladen,<br />

• Kernel beherrscht viele Funktionen, bleibt aber übersichtlich schlank,<br />

• Laden <strong>und</strong> Entladen der Treiber ermöglicht die wechselweise Benutzung von unverträglichen Geräten<br />

ohne Durchstarten des Systems,<br />

• Vereinfachung <strong>und</strong> Beschleunigung der Entwicklung von Treibern.<br />

13.3.2. Modulklassen<br />

LowLevel-Treiber<br />

Ganz nah am System sind die eigentlichen Hardwaretreiber, wie z.B. für den Festplattencontroller, den<br />

Chipsatz oder die Netzwerkkarten.<br />

116


HighLevel-Treiber<br />

13.3. Verwaltung der Kernelmodule<br />

Darauf aufsetzend gibt es Treiber für die diversen Dateisysteme <strong>und</strong> Netzwerkprotokolle.<br />

Binary-Treiber<br />

Daneben gibt es Treiber für die Unterstützung der verschiedenen Binary-Formate, wie z.B. a.out.<br />

13.3.3. Automatismen<br />

Die Modulverwaltung erfolgt in der Regel automatisch <strong>und</strong> gegenüber dem Anwender völlig transparent,<br />

ohne dass dieser manuell eingreifen müsste. Noch nicht geladene Module werden bei Bedarf selbstständig<br />

eingeb<strong>und</strong>en <strong>und</strong> danach wieder entfernt. Dafür ist ein, in den Kernel integrierter, Bestandteil namens<br />

kmod zuständig. Beim Nachladen optionaler Module berücksichtigt kmod verschiedene Parameter <strong>und</strong> Modulabhängigkeiten.<br />

Die dazugehörigen Konfigurationsdateien werden während der Installation <strong>und</strong> später<br />

bei der Konfiguration des Systems von den entsprechenden Tools der Distribution gewartet.<br />

13.3.4. Selbstverwaltung<br />

Nichtsdestotrotz kann die Modulverwaltung auch von Hand durchgeführt werden. Die Erklärungen zu den<br />

nachfolgend aufgeführten beispielhaften Kommandos sollen Licht ins Dunkel bringen <strong>und</strong> die Vorgehensweisen<br />

der angesprochenen Automatismen verständlich machen.<br />

#lsmod Der Befehl zeigt die derzeit geladenen Module <strong>und</strong> deren Größe an. Zusätzlich erfahren Sie durch<br />

einen Zähler, wie oft das jeweilige Modul gerade geöffnet ist <strong>und</strong> von welchem Modul gerade darauf<br />

zugegriffen wird. Alle Module, die kmod automatisch geladen hat, werden mit dem Flag autoclean<br />

gekennzeichnet.<br />

#insmod ne io=0x300 irq=5 Mit diesem Kommando werden Module (hier eine Netzwerkkarte) nachgeladen.<br />

Als Parameter werden zum einen der Modulname <strong>und</strong> zum anderen die vom Gerät belegten<br />

Ressourcen (IO-Adresse, IRQ) mitgegeben. Sollte ein Fehler auftreten (falscher Modulname, falsche<br />

Ressourcen) wird eine Fehlermeldung zurückgegeben.<br />

#modprobe es1371 Nicht selten ist das korrekte Einbinden eines Modules (hier eine So<strong>und</strong>karte) von anderen<br />

Modulen abhängig. Aus der Datei /lib/modules/n/modules.dep werden diese Abhängigkeiten<br />

gelesen <strong>und</strong> fehlende Module mitgeladen. Außerdem bestimmt modprobe die Ressourcen einer<br />

Komponente mit Hilfe der Datei /etc/modules.conf. Der angeführte Beispielbefehl lädt demnach<br />

zwei Module. Zunächst das Modul so<strong>und</strong>core <strong>und</strong> danach das davon abhängige Modul es1371.<br />

Modprobe unterstützt auch die Funktionalität, mehrere passende Module durchzuprobieren. Spricht<br />

einer der Treiber an, so wird davon ausgegangen, dass das Gerät im System vorhanden ist.<br />

#rmmod isa-pnp Dieses Kommando entfernt Module (hier die Unterstützung für Plug and Play fähige<br />

ISA Karten) aus dem System <strong>und</strong> gibt den belegten Speicher wieder frei. Einzelne Module können<br />

natürlich nur entfernt werden, wenn diese gerade nicht verwendet werden. Mit der Option -a werden<br />

alle zur Zeit nicht benötigten Module entfernt.<br />

#depmod Dieser Befehl erstellt zusammen mit der Option -a die Datei modules.dep, damit modprobe die<br />

Abhängigkeiten der Kernelmodule bestimmen kann. Auch die Angaben in der Datei /etc/modules.conf<br />

werden dazu herangezogen.<br />

117


13. Kernel <strong>und</strong> Kernelmodule<br />

13.3.5. Konfiguration<br />

Nehmen Sie Änderungen an der Datei /etc/modules.conf nur dann vor, wenn Sie wissen was Sie tun.<br />

Die Einstellmöglichkeiten sind sehr systemnah <strong>und</strong> damit riskant! Dennoch ist es gut zu wissen, was mit<br />

dieser Datei gesteuert wird, um das System in seiner Gesamtheit besser zu verstehen.<br />

alias: gibt an, für welche Devices welche Kernelmodule geladen werden sollen,<br />

options: bestimmt die Optionen für das angegebene Modul,<br />

path: zeigt auf die Verzeichnisse, in denen sich die Kernelmodule befinden,<br />

pre-install / post-install: legt Aktionen fest, die vor bzw. nach dem Laden eines Moduls ausgeführt werden.<br />

Daneben gibt es noch zahlreiche weitere Anweisungen, die an dieser Stelle jedoch nicht näher erläutert<br />

werden.<br />

13.3.6. Kernelmodule von Drittanbietern<br />

Der <strong>Linux</strong>kernel bietet die Integration von dynamisch nachladbaren Modulen an. Das kann man auch vergleichen<br />

mit den unter der M$ –Welt so bekannt gewordenen Treibern. Auch unter <strong>Linux</strong> können Module<br />

von Drittanbietern, wie zum Beispiel Hardwareherstellern eingeb<strong>und</strong>en werden. Dazu müssen die jeweiligen<br />

Module für den verwendeten Kernel kompiliert werden. Dies passiert relativ häufig, einige prominente<br />

Beispiele seien hier aufgelistet:<br />

alsa Advanced <strong>Linux</strong> So<strong>und</strong> Architecture; viele moderne So<strong>und</strong>karten werden nicht mehr direkt durch das<br />

<strong>Linux</strong>-Kernelprojekt unterstützt. Das ALSA Team springt in diese Lücke <strong>und</strong> schreibt ergänzende<br />

Module für diese So<strong>und</strong>karten.<br />

nvidia Viele moderne Desktop PCs werden mit NVidia Grafikkarten bestückt. Um zum Beispiel die allseits<br />

beliebten Ego-Shooter oder harmlosere Spiele mit voller Hardwareunterstützung laufen lassen<br />

zu können, liefert NVidia Treiber für Ihre Grafikkarten mit einem verb<strong>und</strong>enen Kernelmodul aus. Dadurch<br />

können auch OpenGL Anwendungen unter <strong>Linux</strong> von vorhandener Beschleunigungshardware<br />

provitieren...<br />

vmware Der Hersteller von PC-Emulatoren verwendet Kernelmodule um sein “virtuelles” Netzwerkdevice<br />

in das <strong>Linux</strong>system einzubinden. Damit ist es dem “emulierten” Betriebssystem möglich, über den<br />

<strong>Linux</strong>-Host auf das “echte” Netzwerk zuzugreifen...<br />

Wie man sieht, ist die Nutzung von Kernelmodulen durch Drittanbieter weit verbreitet. Wenn man erst<br />

einmal die Scheu vor dem Kompilieren von Zusatzmodulen <strong>und</strong> die Installation selbiger überw<strong>und</strong>en hat,<br />

findet man dies gar nicht mehr so ungewöhnlich.<br />

Für ein Beispiel möchte ich hier auf die Installation eines ALSA-Moduls im Kapitel 14.11 auf Seite 132<br />

verweisen...<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

118


Zusammenfassung<br />

13.3. Verwaltung der Kernelmodule<br />

Im vorangegangenen Kapitel haben Sie den Kernel <strong>und</strong> dessen Aufgaben kennengelernt. Mit der Kernelkompilierung<br />

<strong>und</strong> der Modulverwaltung sind Sie tief in das System eingestiegen. Auch wenn solche Eingriffe<br />

nur selten notwendig sind, sollten Sie das gr<strong>und</strong>legende Verständnis für diese systemnahen Vorgänge im<br />

Hinterkopf behalten.<br />

119


13. Kernel <strong>und</strong> Kernelmodule<br />

120


14. Hardware<br />

Die Unterstützung von Standardhardware bereitet zwar nur noch selten Bauchschmerzen, von der unkomplizierten<br />

Benutzung sämtlicher Features einzelner Komponenten kann aber noch lange nicht die Rede sein.<br />

Ein guter Gr<strong>und</strong> der eigenen Hardware mit Betriebssystemmitteln auf den Zahn zu fühlen. Informationen zur<br />

verbauten Hardware erhält man aber auch mit Hilfe des Procfs, das im Kapitel ?? auf Seite ?? ausführlich<br />

beschrieben ist.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die Hotplugfähigkeiten von <strong>Linux</strong> kennen,<br />

• die Möglichkeiten der Hardwareerkennung,<br />

• die Verwendung von PCMCIA Karten,<br />

• die Konfiguration des APM,<br />

• das Tunen des IDE Subsystems,<br />

• einige Details zur Konfiguration von Netzwerkkarten,<br />

• die Installation von So<strong>und</strong>kartentreibern mit ALSA.<br />

14.1. Arbeitsspeicher<br />

Detaillierte Informationen zur derzeitigen Verwendung des Arbeitsspeichers können in der Datei /proc/meminfo<br />

nachgeschlagen werden. Die Größe des Arbeitsspeichers wird in der Regel korrekt vom Kernel erkannt.<br />

Nach einer Arbeitsspeichererweiterung kann es aber notwendig sein, den Kernelparameter mem z.B. durch<br />

mem=1024M auf die richtige Größe zu setzen.<br />

14.2. Festplatten<br />

Informationen über die verbauten Platten können mit dem Kommando hdparm abgefragt werden.<br />

alisa:˜ # hdparm -i /dev/hda<br />

/dev/hda:<br />

Model=IC35L040AVER07-0, FwRev=ER4OA41A, SerialNo=SX0SXLP2830<br />

Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }<br />

RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=40<br />

BuffType=DualPortCache, BuffSize=1916kB, MaxMultSect=16, MultSect=16<br />

121


14. Hardware<br />

CurCHS=16383/16/63, CurSects=-66060037, LBA=yes, LBAsects=80418240<br />

IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}<br />

PIO modes: pio0 pio1 pio2 pio3 pio4<br />

DMA modes: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 *udma4 udma5<br />

AdvancedPM=yes: disabled (255)<br />

Drive Supports : ATA/ATAPI-5 T13 1321D revision 1 : ATA-2 ATA-3 ATA-4 ATA-5<br />

Kernel Drive Geometry LogicalCHS=5005/255/63 PhysicalCHS=79780/16/63<br />

Informationen über den Festplattenzugriff im PIO bzw. DMA Modus erhält man ebenfalls mit hdparm.<br />

alisa:˜ # hdparm -cd /dev/hda<br />

/dev/hda:<br />

I/O support = 1 (32-bit)<br />

using_dma = 1 (on)<br />

Natürlich können sämtliche Parameter auch mit hdparm gesetzt werden (vgl. hierzu man hdparm). Allerdings<br />

muss man dabei mit Bedacht vorgehen, da unter Umständen bei fehlender Hardwareunterstützung<br />

seitens des Chipsatzes bzw. des Plattensubsystems das System stehen bleibt oder im Verlauf der Benutzung<br />

Fehler auftreten bzw. Daten verloren gehen können.<br />

14.3. Hotplug<br />

Hotplugfähige Komponenten können im laufenden Betrieb angeschlossen <strong>und</strong> wieder abgenommen werden.<br />

Zuerst denkt man hier vielleicht an USB, aber auch PCI, PCMCIA, Firewire <strong>und</strong> SCSI gehören dazu. Die<br />

Aufgabe von Hotplug ist es diese Hardware zu erkennen <strong>und</strong> einzubinden. Aber auch das Entfernen der<br />

Komponenten muss vorbereitet <strong>und</strong> die belegten Ressourcen freigegeben werden.<br />

14.3.1. Kernel<br />

Damit das Hotplug-System überhaupt funktionieren kann, müssen die Treiber eines hotplugfähigen Busses<br />

in der Lage sein, neue Geräte zu erkennen <strong>und</strong> dem Betriebssystem zu melden. Im Kernel 2.4 sind USB,<br />

PCMCIA, Firewire, teilweise PCI <strong>und</strong> das Netzwerksubsystem dazu in der Lage. Dieser erste Teil von<br />

Hotplug ist fest in den Kernel <strong>und</strong> dessen Module einkompiliert <strong>und</strong> kann ohne weiteres nicht beeinflusst<br />

werden.<br />

14.3.2. Shellskripte<br />

Der zweite Teil von Hotplug ist eine ganze Sammlung an Skripten im Verzeichnis /etc/hotplug, die die<br />

Behandlung der vom Kernel gemeldeten Hotplug Ereignisse übernimmt. Als Schnittstelle zwischen dieser<br />

Sammlung <strong>und</strong> dem Kernel gibt sich das Skript /sbin/hotplug. Zu dessen Aufgaben gehört nicht nur das<br />

Einbinden bzw. Herauslösen von Geräten durch das Laden bzw. Entfernen von Treibermodulen. Auch das<br />

Mounten von Dateisystemen, die Konfiguration von Netzwerkkomponenten usw. kann durch diese Shellskripte<br />

abgedeckt werden.<br />

Wenn ein hotplugfähiges Gerät angeschlossen wird, ruft der Kernel das Skript /sbin/hotplug auf <strong>und</strong><br />

übergibt ihm zusätzliche Informationen über die entsprechende Hardwarekomponente. Dann verteilt es die<br />

Arbeit an weitere Skripte, sogenannte Agenten, die dann die Treiber laden <strong>und</strong> die Konfiguration übernehmen.<br />

Je nach Hardware wird der usb.agent, der pci.agent usw. verwendet.<br />

Der Kernel gibt zwar alle Hotplugereignisse an /sbin/hotplug weiter, solange jedoch das Hotplugsystem<br />

nicht gestartet ist, werden alle Ereignisse verworfen. Außerdem erkennt der Kernel bereits erste Komponenten,<br />

wenn noch gar kein Dateisystem gemountet ist. Diese Ereignisse gehen dann einfach verloren. Um<br />

das zu vermeiden wird in den Skripten /etc/hotplug/*.rc versucht, für bereits vorhandene Hardware<br />

122


14.3. Hotplug<br />

entsprechende Ereignisse nachträglich zu erzeugen.<br />

Das Hotplug-System kann mit rchotplug start gestartet <strong>und</strong> mit rchotplug stop gestoppt werden.<br />

14.3.3. Konfiguration<br />

In der SuSE typisch gut kommentierten Datei /etc/sysconfig/hotplug gibt es einige Variablen, die das<br />

Verhalten des Hotplug-Systems steuern. Von besonderem Interesse sind die Variablen HOTPLUG_START_USB,<br />

HOTPLUG_START_PCI <strong>und</strong> HOTPLUG_START_NET. Weitere Variablen werden im folgenden näher beleuchtet.<br />

14.3.4. Logdateien<br />

Alle Meldungen des Hotplug-Systems werden in die Datei /var/log/messages geschrieben.<br />

14.3.5. USB<br />

Schließt man ein USB Gerät an, ermittelt das Skript /etc/hotplug/usb.agent einen geeigneten Treiber <strong>und</strong> lädt<br />

diesen. Die Zuordnung von Hardware <strong>und</strong> Treiber erfolgt mehrstufig. Zunächst wird die Datei /etc/hotplug/usb.usermap<br />

herangezogen. Findet sich hier keine Lösung wird eine individuelle Modulzuordnung durch die Datei /etc/hotplug/usb.handm<br />

versucht. Zuletzt wird die Zuordnungstabelle des Kernels /lib/modules/kernelversion/modules.usbmap verwendet.<br />

Je nach Typ werden die USB Komponenten anders behandelt.<br />

Speichermedien<br />

Die Dateisysteme auf solchen Speichermedien werden, nachdem die erforderlichen Treiber geladen worden,<br />

durch /usr/sbin/checkhotmounts gemountet.<br />

Netzwerkgeräte<br />

Netzwerkkomponenten lösen ein eigenes Hotplugereignis im Kernel aus. Der USB Agent spielt hier nur<br />

insofern eine Rolle, dass er für das spätere Hotplugereignis Hardwareinformationen hinterlegt.<br />

Kameras<br />

Solche Komponenten werden durch den KDE Hardwarescan erkannt. Die erforderlichen Zugriffsrechte auf<br />

das Devicefile werden dann durch /etc/hotplug/usb/usbcam gesetzt.<br />

Mäuse<br />

Solche Komponenten benötigen ausschließlich einen geladenes Modul, welches durch den USB Agenten<br />

geladen wird.<br />

Tastaturen<br />

Diese werden schon beim Bootvorgang benötigt <strong>und</strong> werden deshalb nicht von Hotplug behandelt.<br />

Modems <strong>und</strong> ISDN-Karten<br />

Leider wird diese Hardware noch nicht von Hotplug behandelt.<br />

In der bereits angesprochenen Datei /etc/sysconfig/hotplug finden sich noch weitere Variablen, die modulspezifische<br />

Angaben machen, so z.B. welche Module für den USB Hostcontroller geladen werden sollen<br />

<strong>und</strong> welche Module bei einem späteren Entfernen wieder entladen werden müssen.<br />

123


14. Hardware<br />

Zusammenfassung<br />

Die Hotplugfähigkeiten unterliegen einer äußerst dynamischer Entwicklung, die sich im wesentlichen im<br />

Kernel widerspiegelt. Insofern kann davon ausgegangen werden, dass im Kernel 2.6 eine noch bessere Unterstützung<br />

für diese Art von Hardware geboten wird.<br />

14.3.6. PCI <strong>und</strong> PCMCIA<br />

Hotplugereignisse für PCMCIA Karten werden nur dann ausgelöst, wenn es sich dabei um CardBus-Karten<br />

handelt <strong>und</strong> auch nur dann, wenn das Kernel PCMCIA-System aktiv ist. Technisch gesehen sind CardBus-<br />

Karten beinahe PCI Geräte, weshalb beide Bussysteme vom selben Skript /etc/hotplug/pci.agent behandelt<br />

werden. Im Wesentlichen wird hier wiede r der Treiber ermittelt <strong>und</strong> geladen. Außerdem werden<br />

Informationen hinterlegt, wo die Hardware angeschlossen wurde, damit ein späteres Netzwerkereignis die<br />

richtige Konfiguration auswählen kann.<br />

Die Auswahl der zugehörigen Treiber ist zweistufig. Zuerst wird in der Datei /etc/hotplug/pci.handmap nach<br />

individuellen Einstellungen gesucht. Bleibt das erfolglos wird wiederum die Kerneltabelle unter /lib/modules/kernelversion<br />

zu Rate gezogen.<br />

Sobald die Karte wieder entfernt wird, werden auch die verwendeten Module wieder entladen. Führt das Entfernen<br />

der Treiber zu Problemen, kann dies durch die Variable HOTPLUG_PCI_MODULES_NOT_TO_UNLOAD in<br />

der Datei /etc/sysconfig/hotplug abgefangen werden.<br />

14.3.7. Netzwerk<br />

Wird im Kernel ein neues Netzwerkinterface angemeldet, löst dieser ein Netzwerk-Hotplugereignis aus,<br />

welches vom Skript /etc/hotplug/net.agent behandelt wird. Gegenwärtig werden Ethernet-, Tokenring<strong>und</strong><br />

WirelessLAN-Interfaces berücksichtigt. Die Hardwareinformation, die zur Konfiguration der Interfaces<br />

notwendig ist, wird von vorausgegangenen USB- bzw. PCI-Hotplug-Ereignissen bereitgestellt. Dann werden<br />

die Skripte /sbin/ifup bzw. /sbin/ifdown aufgerufen, die so in der Lage sind, einer bestimmten Karte immer<br />

die richtige Konfiguration zuzuweisen, auch wenn das Interface, aufgr<strong>und</strong> der willkürlichen Namenszuordnung<br />

durch den Kernel, einen anderen Namen hat.<br />

Schlägt die automatische Ermittlung der Hardware fehl, kann die Beschreibung der Netzwerkkarte in der Variable<br />

HOTPLUG_NET_DEFAULT_HARDWARE in /etc/sysconfig/hotplug abgelegt werden. HOTPLUG_NET_TIMEOUT<br />

legt übrigens fest wie lange der Agent auf eine zur Laufzeit erzeugte Hardwarebeschreibung wartet.<br />

14.3.8. Firewire<br />

Unter SuSE werden für FireWire Komponenten derzeit nur die Treiber geladen. In nachfolgenden Versionen<br />

dürfte sich die Unterstützung solcher Komponenten weiter verbessern.<br />

14.4. PCMCIA<br />

14.4.1. Hardware<br />

Es gibt zwei unterschiedliche Typen von PCMCIA 1 -Karten.<br />

1. PC-Karten verwenden einen 16 Bit breiten Bus zur Datenübertragung <strong>und</strong> sind aufgr<strong>und</strong> ihreres günstigen<br />

Anschaffungspreises recht weit verbreitet. Solche Karten werden zum Großteil sauber unterstützt.<br />

1 Personal Computer Memory Card International Association<br />

124


14.5. Hardware Erkennung<br />

2. CardBus-Karten verwenden einen 32 Bit breiten Bus, was diese zwar beschleunigt aber auch teurer<br />

macht. Auch für diese Karten gibt es bereits etliche Treiber, allerdings ist die Unterstützung aufgr<strong>und</strong><br />

einiger Instabilitäten noch verbesserungsbedürftig.<br />

Die zweite notwendige Komponente ist der PCMCIA-Controller bzw. die PC-Card / CardBus-Bridge,<br />

wobei <strong>Linux</strong> alle gängigen Modelle unterstützt.<br />

14.4.2. Dokumentation<br />

Ausführliche Informationen zu PCMCIA finden sich übrigens im Verzeichnis /usr/share/doc/packages/pcmcia/.<br />

Neben dem PCMCIA HowTo listet hier auch eine eigene Datei alle unterstützten Karten.<br />

14.4.3. Kommandos<br />

Um zu erfahren, welche Karten gerade angemeldet sind, führt man cardctl ident aus. Man erhält Informationen<br />

über die einzelnen Steckplätze <strong>und</strong> erfährt welche Funktion die jeweilige Karte hat.<br />

Der Typ des Controllers lässt sich laut SuSE Administrationshandbuch mit dem Befehl probe abfragen.<br />

Handelt es sich um ein PCI-Gerät kann man auch mit lspci -vt einige zusätzliche Informationen erhalten.<br />

14.4.4. Software<br />

Derzeit gibt es zwei zu einander inkompatible Möglichkeiten das PCMCIA Subsystem zu unterstützen, die<br />

jeweils auf verschiedene Kartentreibersätze aufbauen.<br />

1. Das externe PCMCIA ist das ältere <strong>und</strong> damit das stabilere von beiden. Es wird zwar immernoch weiterentwickelt,<br />

die verwendeten Module sind jedoch nicht in die Kernelquellen integriert.<br />

2. Das Kernel PCMCIA System ist eine aktuelle Entwicklung, die erst im Kernel 2.4 aufgenommen wurde.<br />

Es werden vor allem neuere CardBus Komponenten besser unterstützt.<br />

Die Voreinstellung von SuSE verwendet das Kernel PCMCIA.<br />

Neben den Möglichkeiten an der Kommandozeile gibt es auch ein grafisches Tool namens cardinfo zur<br />

Verwaltung von PCMCIA-Karten.<br />

14.4.5. Konfiguration<br />

Die Konfiguration des PCMCIA Systems findet sich in der Datei /etc/sysconfig/pcmcia. Hier wird nicht<br />

nur bestimmt, welches der beiden Systeme verwendet wird. In seltenen Fällen ist es notwendig, anzugeben,<br />

welcher Treiber für den PCMCIA-Controller mit welchen Optionen geladen werden soll.<br />

Nach Änderungen wird das PCMCIA-System mit rcpcmcia restart durchgestartet. Vorübergehende Wechsel<br />

zwischen den beiden Systemen sind allerdings auch mit rcpcmcia external bzw. rcpcmcia kernel<br />

möglich.<br />

Programm PCMCIA CardInfo<br />

14.5. Hardware Erkennung<br />

14.5.1. hwinfo<br />

Schon einmal das Programm hwinfo betrachtet? Hier folgt eine Liste der Möglichkeiten.<br />

125


14. Hardware<br />

14.5.2. lspci<br />

Gibt etwas schneller alle Informationen zu den eingebauten PCI Geräten aus.<br />

14.6. Profile<br />

Sie kennen das Problem: Sie sitzen an Ihrem Laptop daheim <strong>und</strong> surfen mit Ihrem DSL Anschluss, oder tauschen<br />

Daten mit Ihrem Arbeitsplatzrechner aus. Am nächsten Tag an Ihrem Arbeitsplatz verbinden Sie sich<br />

wieder mit dem Firmennetzwerk. Natürlich haben beide Netzwerke verschiede IPs <strong>und</strong> Netzwerkmasken.<br />

Trotzdem wollen Sie nicht jeden Tag zweimal die Netzwerkdaten komplett umstellen. Die beiden Systeme<br />

External <strong>und</strong> Kernel PCMCIA gehen verschiedene Wege, um diese Funktionalitäten zu erreichen:<br />

14.6.1. SCPM<br />

Als Bestandteil des hotplug-Systems ist das Kernel-PCMCIA genauso in das Globale Profilmanagement<br />

per SCPM eingeb<strong>und</strong>en, wie alle anderen Geräte. Sie steuern SCPM über das Program scpm mit einem<br />

entsprechendem Parameter. Nach der Aktivierung von SCPM mit dem Befehl scpm enable können Sie<br />

sich den Namen des aktiven Profils mit scpm active ausgeben lassen. Ein neues (eigenes) Profil können<br />

Sie sich durch den Aufruf von scpm add PROFILNAME erzeugen. Durch ein scpm switch PROFILNAME<br />

wechseln Sie im laufenden Betrieb das aktuelle Profil. Scpm erkennt dann automatisch, welche Änderungen<br />

am System vorgenommen werden müssen, <strong>und</strong> tauscht die entsprechenden Konfigurationsdateien aus,<br />

bevor die relevanten Dienste neu gestartet werden. Änderungen an den Profilen können Sie ausführen, in<br />

dem Sie diese wie gewohnt durchführen, beim nächsten Profilwechsel werden diese dann erkannt <strong>und</strong> abgespeichert.<br />

Als Ergänzung können Sie Ihrem Bootmanager (lilo, grub) als Kernelparameter die Option<br />

PROFILE=profilname mitgeben, um gleich beim Systemstart im richtigen Profil zu landen.<br />

14.6.2. Schemen<br />

Für PC Cards können Sie SCPM nicht zur Verwaltung dieser Profile hernehmen, <strong>und</strong> sind auf eine eigene<br />

Lösung des PCMCIA Systems angewiesen: schemes. Den Namen des aktuellen Schemas können Sie sich<br />

durch Eingabe des Befehls cardctl scheme anzeigen lassen. Wenn Sie dabei noch zusätzlich einen neuen<br />

Schemennamen übergeben, wechselt der Cardmanager in dieses neue Schema <strong>und</strong> sobald Sie eine neue<br />

Karte einschieben/anmelden, wird Sie nach dem neuen Schema initialisiert.<br />

14.7. PCMCIA<br />

14.7.1. Überblick<br />

PCMCIA Geräte werden vom oben dargelegten Hotplug-System nur dann behandelt, wenn es Card-Bus-<br />

Karten sind <strong>und</strong> das Kernel PCMCIA-System gewählt wurde. PCMCIA Karten sind für PC-Verhältnisse bereits<br />

relativ alt - das Konzept stammt noch aus Commodorezeiten. Über die Jahre hinweg ist dieser Standard<br />

den Bedürfnissen der User angepasst worden. Heutzutage sind größtenteils zwei Versionen von PCMCIA<br />

Karten gängig: 16Bit- <strong>und</strong> 32Bit-Karten. Die älteren 16Bit-Karten werden auch oft als “PC Card”-Karten bezeichnet,<br />

wobei man neuere 32Bit-Karten oft unter dem Namen “CardBus”-Karten findet. <strong>Linux</strong> unterscheidet<br />

beide Typen, in der Art <strong>und</strong> Weise, wie diese benutzt werden können. Es existiert seit langem ein Zusatzpacket<br />

für <strong>Linux</strong>systeme, mit dessen Hilfe man PCMCIA-Karten betreiben kann. Dieses ist allein lauffähig<br />

<strong>und</strong> nicht auf Kernelunterstützung angewiesen. Daher wird es auch bei SuSE als der “External”-PCMCIA<br />

Manager bezeichnet. Seit der Kernelversion 2.4 enthält der <strong>Linux</strong>kernel Unterstützung für PCMCIA Karten.<br />

126


14.7. PCMCIA<br />

Diese sind homogen in das Management von Hotpluggeräten eingebettet. Zumindest theoretisch. Denn der<br />

<strong>Linux</strong>kernel unterstützt größtenteils nur die neueren “CardBus”-Karten. Dies ist eine häufige Ursache für<br />

Probleme vor allem mit billigeren oder älteren PCMCIA Karten, denn SuSE <strong>Linux</strong> 8.1 hat standardmäßig<br />

die Kernelversion von PCMCIA aktiviert. Begründet wird das mit der besseren Unterstützung für PCMCIA<br />

WLAN Adapter. Ich persönlich kenne allerdings mehr 16Bit-WLAN-Karten als 32Bit-Karten... Die beiden<br />

Varianten von PCMCIA Systemen sind leider inkompatibel zueinander <strong>und</strong> können nicht gleichzeitig betrieben<br />

werden. Sie stellen das verwendete System in der Datei /etc/sysconfig/pcmcia ein, indem Sie die<br />

entsprechende Variable (PCMCIA SYSTEM) auf den entsprechenden Wert (kernel oder external) setzen.<br />

Vorübergehend können Sie auch mit Hilfe der rc-Skripte manuell zwischen beiden Systemen umschalten.<br />

Die Syntax lautet dabei rcpcmcia restart kernel beziehungsweise rcpcmcia restart external.<br />

14.7.2. “Kernel” PCMCIA<br />

Zuerst möchte ich auf den neuen “Kernel” PCMCIA Manager eingehen, da es so aussieht, als ob SuSE <strong>Linux</strong><br />

sich in Zukunft ganz auf diesen Mechanismus verliesse. Augenscheinlich lassen sich PCMCIA Karten<br />

(vor allem die Netzwerkkarten) sehr einfach mit den grafischen SuSE Werkzeugen einrichten, sobald Sie allerdings<br />

mehrere PCMCIA Karten Ihr eigen nennen, kommen Sie sehr schnell an die Grenzen der Masken.<br />

CardBus Karten werden seit SuSE <strong>Linux</strong> 8.1 durch den Hotplug-Manager gehandhabt. Dieser übernimmt<br />

die Initialisierung der CardBus Karten <strong>und</strong> behandelt sie weiterhin wie die sonst üblichen (<strong>und</strong> von der Architektur<br />

her ähnlichen) PCI Karten. CardBus Netzwerk- (<strong>und</strong> Wireless-) Karten erzeugen beim Einstecken<br />

ein spezielles Hotplug-Event, dass geeignet abgefangen werden kann. Die Events für andere Kartenarbeiten<br />

sind teilweise noch in der Entwicklung <strong>und</strong> werden in zukünftigen Versionen eingebaut werden. Bei der Entnahme<br />

der Karten werden die entsprechenden Module auch wieder aus dem Speicher genommen. Genauere<br />

Instruktionen zur Einstellung von CardBus Netzwerkkarten sind nicht nötig, da die Einrichtung genauso<br />

erfolgt wie die von “normalen” PCI Netzwerkkarten. Die Beschreibungen hierzu finden Sie im Kapitel zu<br />

hotplug. Verschiedene Konfigurationen verwalten Sie beim Kernel PCMCIA mit dem SCPM Werkzeug, wie<br />

unter 14.6.1 auf Seite 126 beschrieben.<br />

14.7.3. “External” PCMCIA<br />

Wenn Sie den External PCMCIA Manager wie oben beschrieben aktiviert haben, können Sie die gewünschten<br />

Einstellungen an Ihren Karten mit Hilfe der Konfigurationsdateien im Verzeichnis /etc/pcmcia vollziehen.<br />

Für jede Art von PC Cards finden Sie eine entsprechende Konfigurationsdatei mit der Endung .opts, die<br />

alle zum größten Teil sehr gut kommentiert sind, daher möchte ich an dieser Stelle nicht auf die einzelnen<br />

Dateien eingehen, zumal External PCMCIA sowieso über kurz oder lang durch das Kernel System abgelöst<br />

werden soll.<br />

Wie eine Netzwerkkarte eingerichtet wird, erfahren Sie im Abschnitt 14.7.5 auf Seite 128.<br />

14.7.4. Kartenkontrolle<br />

<strong>Linux</strong> ist ein Mehrbenutzersystem. Daher ist es nur verständlich, dass sie als Benutzer nicht einfach PCM-<br />

CIA Karten nach belieben ein- <strong>und</strong> ausbauen können. Wenn Sie die Entnahme rechtzeitig ankündigen, kann<br />

<strong>Linux</strong> die Karten korrekt abmelden. In manchen Fällen ist aber eine Entnahme ohne vorherige Benachrichtigung<br />

nicht tragisch, zum Beispiel bei Netzwerkkarten...<br />

Sie verschaffen sich eine Übersicht über die derzeit eingebauten Karten <strong>und</strong> deren Anmeldung über den<br />

Befehl:<br />

cardctl status<br />

127


14. Hardware<br />

Um eine dieser Karten auszuwerfen, geben Sie als User root den Befehl:<br />

cardctl eject [Nummer des Slots, den Sie leeren wollen]<br />

Jetzt können Sie die Karte entweder entnehmen, oder wieder beim System anmelden mit dem Aufruf von:<br />

cardctl insert [Nummer des Slots, der angemeldet werden soll]<br />

Dieser Befehl ist normalerweise nicht notwendig. Sie können ihn allerdings dazu verwenden, Karten, die<br />

Sie mit eject abgemeldet aber nicht entnommen haben, wieder anzumelden.<br />

14.7.5. Beispieleinrichtung: PCMCIA-Netzwerkkarten<br />

Die Installation von Netzwerkkarten unter SuSE <strong>Linux</strong> gestaltet sich denkbar einfach. Sie stecken dazu die<br />

Karte in den PCMCIA Slot <strong>und</strong> rufen YaST2 auf. Hier wählen Sie unter dem Modul Netzwerk/Basis das<br />

Icon Konfiguration der Netzwerkkarte aus <strong>und</strong> fügen eine neue Netzwerkkarte hinzu, für die Sie als Treibermodul<br />

einfach PCMCIA ankreuzen. Die restlichen netzwerkspezifischen Einstellungen treffen Sie je nach<br />

Wunsch mit Hilfe des grafischen Assistenten.<br />

Soweit die Theorie - in der Praxis gestaltet sich diese Prozedur etwas schwieriger, durch die zwei verschiedenen<br />

PCMCIA Manager <strong>und</strong> die gehobenen Ansprüche in Bezug auf Profile/Schemen <strong>und</strong> andere<br />

“Spezialitäten”.<br />

Netzwerkkarten mit dem External PCMCIA Manager<br />

Die Einstellungen, die für Ihre Netzwerkkarte gelten sollen, finden sie in der Datei /etc/pcmcia/network.opts.<br />

Hier sind verschiedene Teilbereiche definierbar, die jeweils auf verschiedene Arbeitsumgebungen passen.<br />

Besonders interessant dabei ist die erste Zeile jeder Konfiguration, in der im Falle der SuSE Vorgabe<br />

eingetragen steht:<br />

SuSE,*,*,*)<br />

allgemein:<br />

[Schemenname],[Slot],[Instanz],[MAC-Adresse])<br />

Dabei handelt es sich um ein Muster, das immer dann überprüft wird, wenn eine PCMCIA Netzwerkkarte<br />

durch einlegen oder explizite Anmeldung dem System bekannt gemacht wird. Dieses Muster besteht aus vier<br />

Spalten, getrennt durch Kommata <strong>und</strong> abgeschlossen durch die Klammer. Die einzelnen Teile bezeichnen:<br />

Schemenname: Wird mit dem Namen des aktuellen Schemas verglichen<br />

Slot: Wird mit der Nummer des Slots verglichen, in den Sie die neue Karte eingelegt haben.<br />

Instanz: Keine Ahnung, was das ist.<br />

MAC-Adresse: Wird mit der Hardware-MAC-Adresse der Netzwerkkarte verglichen<br />

Unbelegte Teile werden durch * gekennzeichnet. Die Auswertung der Vergleiche erfolgt von links nach<br />

rechts. Ein passendes Muster führt zur Anwendung der folgeneden Konfiguration.<br />

So können Sie zum Beispiel die Netzwerkkarte, je nach dem in welchem Steckplatz sie eingelegt ist, mit<br />

unterschiedlichen IPs ausstatten.<br />

128


14.8. APM - Advanced Power Management<br />

Die meisten Konfigurationsmöglichkeiten sind dabei ziemlich selbserklärend, unterstützt von den Kommentaren.<br />

Ungewohnt sind jedoch die Einträge start_fn() <strong>und</strong> stop_fn(). Mit Hilfe dieser beiden Funktionen<br />

können Sie spezielle Befehle beim Start- oder Stopvorgang der Netzwerkkarte einstellen. Das ist<br />

zum Beispiel dann nützlich, wenn Sie Ihren Laptop zwischen zwei Netzwerken hin- <strong>und</strong> hertragen, die<br />

durch DHCP-Server nur MAC-Adressen von eingetragenen Netzwerkkarten zulassen. Wenn Sie in beiden<br />

Netzen mit verschiedenen MAC-Adressen angemeldet sind ist es unheimlich praktisch, die MAC-Adresse<br />

Ihrer Netzwerkkarte durch das start_fn() Skript auf das jeweilige Netzwerk anzupassen.<br />

Netzwerkkarten mit dem Kernel PCMCIA Manager<br />

Diese Netzwerkkarten richten Sie genau so ein wie allgemein PCI Netzwerkkarten. Auf Schemen müssen<br />

Sie dabei ja nicht achten. Wie Sie PCI Netzwerkkarten einrichten, entnehmen Sie dem Kapitel darüber...<br />

14.7.6. Compact Flash Adapter<br />

Compact Flash Karten haben dank Digitalkameras <strong>und</strong> MP3-Spielern einen Hohen Grad der Verbreitung<br />

erreicht. Unter <strong>Linux</strong> können diese Speichermedien über gängige Compact Flash PCMCIA Adapter Karten<br />

angesprochen werden.<br />

Die Einbindung in das System erfolgt denkbar einfach: Sobald der Adapter in das Kartenlaufwerk gesteckt<br />

wird, wird die Flashkarte erkannt <strong>und</strong> eingeb<strong>und</strong>en. Der Benutzer kann Sie verwenden wie eine beliebige<br />

Partition der Festplatte, durch einen Mountpoint im Dateisystem. Angesprochen wird diese Partition durch<br />

den nächsten freien Buchstaben, bei einem IDE-System mit zwei IDE-Kanälen also als /dev/hde1.<br />

Durch einen Eintrag in der Datei /etc/fstab mit der Option user, kann der Systemadministrator die<br />

Benutzung solcher Karten für alle User ermöglichen.<br />

Soll die Karte entnommen werden, so ist sie zuerst durch einen umount Befehl freizugeben, <strong>und</strong> durch<br />

cardctl eject [x] auszuwerfen!<br />

14.8. APM - Advanced Power Management<br />

Die Powermanagement Funktionalitäten unter <strong>Linux</strong> sind eher als rudimentär zu betrachten, für ACPI besteht<br />

gar keine Unterstützung, <strong>und</strong> APM wird nur sehr einfach unterstützt:<br />

14.8.1. Suspend Mode<br />

Sie können Ihren Rechner mit dem Befehl apm -s in den Suspend-Modus versetzen.<br />

14.8.2. Standby Mode<br />

Mit dem Befehl apm -S versetzen Sie den Rechner in den Standby-Modus. Auch diesmal wecken Sie ihn<br />

wieder durch Tastendruck.<br />

14.8.3. Batterie-Füllstand<br />

Sie erfahren mit apm -m den derzeitigen Akkufüllstand.<br />

14.9. IDE- <strong>und</strong> ATAPI Geräte<br />

Unter <strong>Linux</strong> steht ein Leistungsfähiges Tool zum Test <strong>und</strong> zur Konfiguration von IDE-Geräten zur verfügung.<br />

129


14. Hardware<br />

14.9.1. Informationen bezüglich IDE Geräte<br />

Eine kompakte Information über Ihre Geräte können Sie über hdparm -i /dev/hd[x] abrufen. Sie erfahren<br />

dadurch, welche Standards das Gerät beherrscht <strong>und</strong> welches Modell in Ihrem Computer steckt.<br />

14.9.2. Geschwindigkeitstests<br />

Mit hdparm können Sie sehr leicht die Performance Ihrer Geräte testen. Normale Lesetests starten Sie mit<br />

hdparm -t /dev/hd[x] <strong>und</strong> Tests unter Berücksichtigung des Caches mit hdparm -T /dev/hd[x].<br />

14.9.3. PIO-Mode <strong>und</strong> (U)DMA-Mode<br />

Für ältere Laufwerke ergibt sich manchmal die Notwendigkeit, die Geschwindigkeit, in der dieses angesprochen<br />

wird manuell herunterzusetzen. Dies kann mit dem Einstellen des PIO-Modes über hdparm -p [x] /dev/hd[x]<br />

erreicht werden. Weitere Einstellungen sind:<br />

• Auch Ultra-DMA oder normaler DMA-Zugriff macht auf älteren Systemen Probleme, daher kann<br />

man diesen Modus explizit über hdparm -d[x] /dev/hd[x] ein- <strong>und</strong> abgeschaltet werden.<br />

• Die Feineinstellungen für den (U)DMA-Zugriff können Sie mit dem Parameter -X?? treffen, dazu<br />

lesen Sie bitte die Man-Pages zu hdparm<br />

• 32bit-I/O Support können Sie mit hdparm -c[x] /dev/hd[x] einstellen.<br />

Sie können Ihr System ernsthaft beschädigen, wenn Sie mit hdparm falsche Einstellungen treffen! Um diese<br />

Einstellungen permanent vorzunehmen müssen Sie entweder beim Kernel-Kompilieren auf die richtige<br />

Konfiguration achten, oder die Boot-Skripten anpassen, darauf wird jedoch in den entsprechenden Kapiteln<br />

genauer eingegangen. . .<br />

14.10. Netzwerkkarten<br />

Hier sollte die Autonegotiation <strong>und</strong> die Möglichkeiten von ifconfig diskutiert werden.<br />

14.10.1. manuelle Einrichtung von Netzwerkkarten<br />

Unter <strong>Linux</strong> wird die Netzwerkkarte mit Hilfe von ifconfig eingerichtet. SuSE geht allerdings einen eigenen<br />

Weg in diesem Bereich, um dem Benutzer das mühseelige Erstellen eigener Skripts abzunehmen.<br />

Im Nächsten Kapitel wird genauer darauf eingegangen, zum besseren Verständnis soll hier jedoch auch der<br />

konventionelle Weg geschildert werden:<br />

Mit ifconfig fragen Sie die konfigurierten Netzwerkinterfaces ab. Hier sollte auf jeden Fall ein Loopback<br />

lo eingetragen sein, weil sonst diverse Programme nicht richtig funktionieren werden. Wenn Sie den Rechner<br />

in ein Netzwerk integrieren wollen <strong>und</strong> die Netzwerkkarte korrekt in das System eingeb<strong>und</strong>en wurde, sollte<br />

hier auch ein zweites Interface beispielsweise eth0 zu sehen sein.<br />

Alle anderen eventuell noch nicht eingerichteten Netzwerkinterfaces bringt ein Aufruf von ifconfig -a<br />

ans Licht.<br />

Angezeigt werden die gr<strong>und</strong>sätzlichen Daten des jeweiligen Netzwerkinterfaces, wie die IP-Adresse, die<br />

Subnetzmaske <strong>und</strong> die MAC Adresse.<br />

Die eigentliche Funktion von ifconfig besteht in der Einrichtung des Netzwerkes. Normalerweise übernehmen<br />

die SuSE Skripte diese Aufgabe für Sie, aber z.B. auf Boot-Disketten/CDs werden Sie die manuelle<br />

Einrichtung der Netzwerkkarte selbst übernehmen müssen. Zudem bietet ifconfig auch tiefergreifende<br />

130


14.10. Netzwerkkarten<br />

Einstellungsmöglichkeiten als die Masken einem zeigen. So können Sie zum Beispiel die MAC-Adresse<br />

Ihrer Netzwerkkarte temporär ändern.<br />

Vorgehensweise<br />

Voraussetzung für die Einrichtung des Netzwerks ist die korrekte Einbindung der Netzwerkkartentreiber in<br />

den Kernel, was im Kapitel Kernel näher erläutert ist.<br />

1. Rufen Sie ifconfig auf<br />

2. Nun sehen Sie, ob das gewünschte Interface bereits eingerichtet ist. Wenn es bereits läuft, dannn<br />

sollten Sie es herunterfahren, bevor Sie Einstellungen daran vornehmen:<br />

ifconfig eth0 down<br />

3. Nun können Sie zum Beispiel die MAC-Adresse des Interfaces einstellen:<br />

ifconfig eth0 hw ether 99:99:99:99:99:99<br />

4. Der nächste Schritt ist die Zuweisung einer IP-Adresse <strong>und</strong> einer Subnetzmaske, wie unter TCP/IP<br />

üblich:<br />

ifconfig eth0 192.168.0.103 netmask 255.255.255.0<br />

5. Nun kann das Interface wieder hochgefahren werden:<br />

ifconfig eth0 up<br />

14.10.2. Einrichtung der Netzwerkkarte über die Konfigurationsdateien<br />

SuSE <strong>Linux</strong> 8.1 verwaltet sämtliche Netzwerkkarten <strong>und</strong> deren Einstellungen im Verzeichnis /etc/sysconfig/network.<br />

Hier legen Sie für jede Ihrer Netzwerkkarten ein individuelles Konfigurationsskript in einer eigenen Datei<br />

an. Die Zuordnung von Konfigurationsdateien zu Netzwerkkarten erfolgt über einen Abgleich der Namen<br />

der Konfigurationsdateien mit den Kenndaten der Netzwerkkarten.<br />

Möglich sind hierbei Differenzierungen zwischen Bustypen (z.B. PCI, USB, PCMCIA,...), Interfaces<br />

(z.B. eth, wlan,...) oder MAC-Adressen. Wenn Sie sich für eine dieser Spezifizierungen entschieden haben,<br />

legen Sie die entsprechende ifcfg-XXXXXXXX Datei an, <strong>und</strong> füllen Sie sie mit den Daten Ihrer Netzwerkverbindung.<br />

Sie können das bereits vorliegende ifcfg-lo als Beispiel dafür nehmen, oder in der man-Page<br />

von ifup nachsehen.<br />

Letzteres ist das SuSE eigene Skript, das als Wrapper für ifconfig gedacht ist.<br />

Nach einem Aufruf von rcnetwork restart sollten Sie Ihre Änderungen bew<strong>und</strong>ern können.<br />

14.10.3. WLAN Karten<br />

Damit Sie WLAN Karten unter <strong>Linux</strong> hernehmen können, müssen die Wireless Extensions auf Ihrem System<br />

installiert sein. So ausgestattet, können Sie mit dem Befehl iwconfig die Parameter der Wireless-Geräte<br />

in Ihrem System einrichten. Die dazugehörige man-Page gibt Ihnen dazu genauer Auskunft.<br />

Um Ihre WLAN Karte automatisch beim Start des Systems initialisieren zu lassen, haben Sie die Möglichkeit,<br />

die entsprechenden Optionen entweder global in der Datei /etc/sysconfig/network/wireless zu<br />

setzen, oder für jedes Interface einzeln in der jeweiligen Konfigurationsdatei ifcfg-xxxxx, wie oben beschrieben.<br />

131


14. Hardware<br />

14.11. ALSA - Advanced <strong>Linux</strong> So<strong>und</strong> Architecture<br />

So<strong>und</strong>karten unter <strong>Linux</strong> zum laufen zu bringen ist gewöhnlich gar nicht schwer. Die meisten User benutzen<br />

die in der Standarddistribution mitgelieferten Module. In manchen Fällen gestaltet sich dies jedoch<br />

unmöglich –<br />

• Wenn Sie eine So<strong>und</strong>karte Ihr eigen nennen, die so neu ist, dass sie weder im Kernel, noch in den<br />

mitgelieferten Zusatzmodulen unterstützt wird<br />

• Wenn Sie einen neuen Kernel installieren<br />

In beiden Fällen werden Sie nicht umhin kommen, die Treiber für Ihre So<strong>und</strong>karte manuell hinzuzufügen.<br />

Dabei hilft Ihnen das sogenannte ALSA-System. ALSA steht für “Advanced <strong>Linux</strong> So<strong>und</strong> Architecture”.<br />

Sie können im Internet nachsehen, welche So<strong>und</strong>karten unter ALSA unterstützt werden. Eine Übersicht finden<br />

Sie unter www.alsa-project.org/alsa-doc.<br />

Um ALSA auf Ihrem <strong>Linux</strong>computer zu installieren müssen Sie 3 Pakete von der ALSA Homepage<br />

herunterladen. Achten Sie vor allem bei neueren So<strong>und</strong>karten darauf, auch die aktuellen Ausgaben der<br />

Pakete zu bekommen. Sie benötigen die Pakete:<br />

alsa-driver Um das Driver-Paket zu installieren, geben Sie nach dem Entpacken die Befehlskette<br />

./configure --with-cards=XXXXX --with sequencer=yes;make;make install ein, wobei Sie<br />

die Zeichenkette XXXXX mit dem richtigen Modulnamen wie auf der ALSA Webpage beschrieben ersetzen.<br />

alsa-lib installieren mit ./configure;make;make install<br />

alsa-utils installieren mit ./configure;make;make install<br />

Abschliessend müssen die Module noch bei jedem Rechnerstart mitgeladen werden alsaconf<br />

14.12. Grafikkarten<br />

Für die meisten Grafikkarten bieten Distributoren wie SuSE standardmässige XServer an. Mit diesen XServern<br />

lässt sich meist problemlos arbeiten. Sobald Sie allerdings daran denken, auf Ihrer <strong>Linux</strong>-Box ein<br />

3D-Spiel auszuführen, kommen Sie schnell an die Grenzen dieser Lösung.<br />

Ähnlich wie unter Windows gibts es auch unter <strong>Linux</strong> die Möglichkeit, die Fähigkeiten einer 3D-Beschleunigerkarte<br />

voll auszureizen – schliesslich existiert auch für <strong>Linux</strong> eine OpenGL Implementation. Die Einrichtung einer<br />

3D-Karte erfordert meist jedoch ein wenig Handarbeit.<br />

Eine weit verbreitete Marke von Grafikkarten ist die GeForce Reihe von NVidida. Weil deren XServer<br />

aus lizenzrechtlichen Gründen nicht mit in der SuSE Standarddistribution verteilt werden darf, stellt diese<br />

Grafikkarte ein ideales Beispiel dar, wie man unter <strong>Linux</strong> neue XServer einbinden kann...<br />

Nvidia<br />

Um Grafikkarten des Herstellers NVidia korrekt einzubinden laden Sie sich zuerst von der NVidia-Homepage<br />

die aktuellen Treiber herunter. Diese werden ausgeliefert in zwei Paketen:<br />

132<br />

1. NVIDIA_kernel-version.tar.gz


2. NVIDIA_GLX-version.tar.gz<br />

14.12. Grafikkarten<br />

Beide Pakete entpacken Sie wie gewohnt mit tar xfz filename.tar.gz. Nun liegen die zwei Pakete<br />

im Quellcode vor, <strong>und</strong> Sie müssen sie nur noch übersetzen. Das ist nätig, weil NVidia die Hardwarebeschleunigung<br />

mit Kernelunterstützung realisiert hat, <strong>und</strong> sie die nötigen Module passend zu Ihrem Kernel<br />

kompilieren müssen. Dies erledigen Sie durch:<br />

˜/# cd NVIDIA_kernel-version<br />

˜/NVIDIA_kernel-version# make install<br />

˜/NVIDIA_kernel-version# cd ..<br />

˜/# cd NVIDIA_GLX-version<br />

˜/NVIDIA_GLX-version# make install<br />

Jetzt sind beide Pakete übersetzt <strong>und</strong> einsatzbereit. Sie stellen Ihren aktuellen XServer auf den neuen um,<br />

indem Sie im Runlevel 3 die Konfigurationsdatei /etc/X11/XF86Config abändern.<br />

Sie bessern innerhalb der Section “Device” aus: Driver "nvidia". Innerhalb der Section “Module”<br />

muss stehen: Load "glx" <strong>und</strong> auf keinen Fall Load "dri" oder Load "GLcore".<br />

Nun ist Ihre Karte fertig eingerichtet, <strong>und</strong> Sie können Ihrem Laster von nun an auch unter <strong>Linux</strong> fröhnen!<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

133


14. Hardware<br />

134


15. LVM - Logical Volume Manager<br />

Wer kennt ihn nicht, den Server, der kurz nach seiner Übernahme in das Produktionsumfeld über sich hinauswächst<br />

<strong>und</strong> sich plötzlich ganz anderen Anforderungen gegenübergestellt sieht, als zunächst geplant. Flexiblie<br />

Abhilfe bezüglich Dateisystemplatz schafft hier der Logical Volume Manager (LVM), der bei SuSE<br />

<strong>Linux</strong> bereits seit mehreren Distributionen zum Lieferumfang gehört <strong>und</strong> mittlerweile zuverlässig grafisch<br />

konfiguriert werden kann.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die Funktionsweise des Logical Volume Managers <strong>und</strong> dessen Einsatzgebiete kennen,<br />

• RAID Systeme von LVM Implementierungen abzugrenzen,<br />

• den Logical Volume Manager zu konfigurieren.<br />

15.1. Gr<strong>und</strong>lagen<br />

Bevor auf die Konfiguration <strong>und</strong> spezifische Kommandos des LVM eingegangen werden kann, müssen<br />

zunächst die Funktion <strong>und</strong> einige gr<strong>und</strong>legende Begriffe geklärt werden.<br />

Volume Management heißt, dass zunächst eine abstrakte Ebene über dem physikalischen Speicher erzeugt<br />

wird, deren Verwaltung übernimmt der sogenannte Logical Volume Manager übernimmt. Dadurch wird die<br />

hardwareseitige Speicherbereitstellung vollständig vom softwareseitigen Speichermanagement entkoppelt.<br />

Dies hat zur Folge, dass flexible Änderungen in beiden Ebenen möglich werden, ohne dass die jeweils<br />

andere davon beeinträchtigt wird.<br />

15.1.1. Funktion <strong>und</strong> Begriffe<br />

ohne LVM: wie gewohnt gibt es physikalische Laufwerke mit Partitionen. Auf diese wird entweder über<br />

Dateisysteme oder ohne Benutzung des Kernelcaches <strong>und</strong> Dateisystemtreiber zugegriffen (sog. raw).<br />

mit LVM: zwischen die physikalischen Laufwerke, auch Physical Volumes genannt, <strong>und</strong> den Partitionen<br />

wird eine abstrakte Schicht mit sogenannten Volume Gruppen eingezogen. Eine solche besteht also<br />

aus einer Gruppierung von nahezu beliebigen physikalischen Speicher. Aus der Sicht des Systems<br />

handelt es sich hierbei um ein physikalisches Laufwerk, obwohl es in der Regel aus mehreren zusammen<br />

gruppiert ist. Die Volume Group wird jetzt in Logical Volumes unterteilt, wobei jedes einzelne<br />

als Partition betrachtet <strong>und</strong> behandelt werden kann.<br />

135


15. LVM - Logical Volume Manager<br />

15.1.2. Einsatzgebiete<br />

Flexibilität: Im laufenden Betrieb können Logical Volumes ohne weiteres vergrößert werden. Bei entsprechender<br />

Unterstützung durch das Dateisystem kann der neue Speicherplatz sofort ohne Betriebsunterbrechung<br />

benutzt werden. Anwendungen <strong>und</strong> User bemerken diesen Vorgang nicht. Da die Verwaltungsinformationen<br />

des LVM auf den einzelnen physikalischen Devices abgelegt sind, können sich<br />

die eigentlichen Devicenamen z.B. durch den Ein- / Umbau weiterer Platten ändern, ohne dass hieraus<br />

Probleme entstehen.<br />

HA-Systeme: Die Verwaltung einer Volume Group <strong>und</strong> der Logical Volumes kann geschehen, während<br />

diese vom System genutzt werden. So ist es beispielsweise durch die vollständige Trennung von<br />

logischem <strong>und</strong> physikalischen Speicher möglich, während des Lese- <strong>und</strong> Schreibzugriffs sämtliche<br />

physikalische Speichermedien zu tauschen. Darüber hinaus ist es denkbar, im laufenden Betrieb den<br />

logischen Speicher an einen anderen physikalischen Ort zu verschieben.<br />

Snapshots: Ein Snapshot Device ist ein Alias für ein bestehendes Logical Volume <strong>und</strong> stellt ein Abbild<br />

(nur Lesezugriff) desselben zum Zeitpunkt des Snapshots dar. Diese Funktionalität ist in der LVM<br />

Abstraktionsschicht implementiert <strong>und</strong> damit softwareunabhängig. Dies ermöglicht Sicherungsläufe,<br />

die den normalen Betrieb des Systems kaum beeinträchtigen.<br />

Concatenation <strong>und</strong> Striping: Wie bereits weiter oben beschrieben, besteht mit LVM die Möglichkeit mehrere<br />

Speichersubsysteme zu einer Volume Group zusammenzufassen. Die darauf angelegten Logical<br />

Volumes können jetzt in zwei Art <strong>und</strong> Weisen angelegt werden. Zum einen verkettet, also linear hintereinander,<br />

oder abschnittsweise verteilt über die Physical Volumes des Speicherpools. Mit letzterem<br />

wird zudem der Datenfluss beschleunigt, da die physikalischen Devices abwechselnd in Anspruch<br />

genommen werden.<br />

Shared Storage Cluster Option: Die Verwaltungsinformationen des LVM sind auf den physikalischen<br />

Geräten gespeichert. Beim Booten werden alle dem System bekannten Physical Volumes initialisiert,<br />

eventuelle LVM Konfigurationen ausgelesen <strong>und</strong> dementsprechend ins System integriert. Daher muss<br />

LVM in einem gemeinsamen Speichercluster nur einmal aufgesetzt werden. Allerdings fehlt noch ein<br />

völliges Clusterbewusstsein, weil die Konfigurationsinformationen nicht ohne Neustart an die Knoten<br />

verteilt werden.<br />

15.1.3. Verwaltung <strong>und</strong> Beschränkungen<br />

Jedes Physical Volume (PV) ist in Physical Extents (PE) von gleicher Größe unterteilt. Diese ist zwar<br />

gr<strong>und</strong>sätzlich variierbar innerhalb einer Volume Group jedoch gleich. Jede PE bekommt eine ID zugewiesen.<br />

Ein PE ist die kleinste Einheit, die vom LVM auf der physikalischen Ebene adressiert werden kann.<br />

Jedes Logical Volume (LV) ist in Logical Extents (LE) aufgeteilt, die die gleiche Größe wie die PEs<br />

haben. Jedem LE wird über eine Tabelle genau ein PE zugewiesen. Dieser Vorgang heißt Mapping <strong>und</strong> bringt<br />

einen gewissen Zeitaufwand mit, der bei jedem Lese- <strong>und</strong> Schreibzugriff entsteht. Allerdings ist dieser im<br />

Vergleich zur Reaktionszeit der Festplatte vernachlässigbar klein, da die wesentlichen Informationen im<br />

Cache vorgehalten werden.<br />

Die bereits erwähnten Verwaltungsinformationen werden auf jedem PV im sogenannten VGDA abgelegt.<br />

Hier wird im wesentlichen neben der Mapping Tabelle, die Zugehörigkeit des PV zur Volume Group <strong>und</strong><br />

die Größe eines PE gespeichert.<br />

136


15.1.4. Abgrenzung von RAID Systemen<br />

15.2. Konfiguration<br />

Gr<strong>und</strong>sätzlich ist das Logical Volume Management kein Ersatz für RAID. RAID Systeme sind sehr hardwarenah<br />

implementiert <strong>und</strong> demzufolge von einem bestimmten Controller / Speichersubsystem abhängig.<br />

Je nach Konfiguration soll es vor einem Ausfall der Platten schützen oder den Datendurchsatz erhöhen.<br />

Vorteile des LVM sind bereits weiter oben genannt worden <strong>und</strong> ergeben sich vor allem aus den Erklärungen<br />

zur HA <strong>und</strong> der aus LVM resultierenden Flexibilität, was das Speichermanagement anbelangt.<br />

Ein konkretes Beispiel soll noch einmal klar LVM von RAID abgrenzen. Angenommen ein RAID Array<br />

ist bereits mit der vollen Anzahl an Platten bestückt. Ohne die Trennung von logischem <strong>und</strong> physikalischem<br />

Speicher ist es in diesem Fall nicht mehr möglich, den Plattenplatz für den Benutzer / die Anwendungen<br />

transparent zu erweitern. Das Problem ergibt sich daraus, dass die in einem RAID Array zusammengefassten<br />

Platten an einem Controller hängen müssen. Mit LVM spielt die physikalische Anordnung der Laufwerke<br />

hingegen keine Rolle. Zudem müsste der Rechner bei einer Änderung der SCSI Controller Konfiguration<br />

heruntergefahren werden. Mit LVM kann der Betrieb ununterbrochen fortgesetzt werden. Es sei noch<br />

einmal betont: LVM bietet nicht unbedingt Schutz gegen Datenverlust nach einem Plattenausfall. Zu Bedenken<br />

ist die Implementierung des LVM in Software, die zwar systemnah arbeitet aber eben doch von der<br />

Hardwareebene abstrahiert ist.<br />

15.2. Konfiguration<br />

Die Konfiguration des LVM kann sowohl mit einzelnen Kommandos in der Shell, als auch mit YaST2 vorgenommen<br />

werden. Im folgenden soll die gr<strong>und</strong>sätzliche Vorgehensweise erläutert werden. Eine detaillierte<br />

Dokumentation finden Sie im LVM HowTo oder im von SuSE veröffentlichten Whitepaper.<br />

15.2.1. Vorgehensweise<br />

Jede LVM Konfiguration setzt sich aus drei Teilschritten zusammen (eine ordentliche Konzeption sollte dem<br />

vorausgegangen sein).<br />

• Initialisierung der Physical Volumes,<br />

• Definition der Volume Group,<br />

• Einrichtung der Logical Volumes.<br />

15.2.2. Physical Volumes<br />

Bei Physical Volumes kann es sich um Partitionen (vom Typ 8E), um völlig unpartitionierten Plattenplatz<br />

<strong>und</strong> um RAID-Systeme handeln. Beim Anlegen des PV wird eine einzigartige LVM ID generiert <strong>und</strong> zusammen<br />

mit anderen Verwaltungsinformationen in die ersten Sektoren der Partition / Platte geschrieben. Später<br />

wird diese stets ausgelesen <strong>und</strong> somit beispielsweise das Mapping zwischen LEs <strong>und</strong> PVs umgesetzt. Beim<br />

Verwenden von ganzen Platten ist es unumgänglich, dass diese keine Partitionstabelle aufweisen <strong>und</strong> nicht<br />

nur einfach eine leere. Mit folgendem Befehl kann dies bewerkstelligt werden.<br />

Vorsicht!<br />

dd if=/dev/zero of=/dev/[device name of disk] bs=1k count=1<br />

137


15. LVM - Logical Volume Manager<br />

15.2.3. Volume Group<br />

Jedes PV wird nach dem Anlegen einer Volume Group zugeordnet. Diese Konfiguration wird ebenfalls in<br />

den LVM Verwaltungsinformationen festgehalten.<br />

15.2.4. Logical Volume<br />

Das Anlegen der Logical Volumes ist der letzte Schritt bezüglich der LVM Konfiguration <strong>und</strong> entspricht<br />

dem bereits bekannten Anlegen von Partitionen. Später erfolgt der Zugriff auf diese mit Hilfe von Device<br />

Dateien, so wie Sie es bisher aus dem Umgang mit herkömmlichen Geräten gewöhnt waren.<br />

15.2.5. Dateisysteme<br />

Damit sind die Platten jedoch noch nicht bzw. nur raw benutzbar. Letztendlich müssen auf den LVs noch<br />

Dateisysteme angelegt <strong>und</strong> Mountpoints im Root-Dateisystem vorgesehen werden.<br />

15.3. Administration<br />

Im folgenden werden einige Befehle aufgezeigt, die der administrativen Verwaltung dienen. Diese stellen<br />

bei weitem nicht alle Möglichkeiten eines Logical Volume Managers dar. Weitere Informationen finden sich<br />

im Whitepaper von SuSE.<br />

Im Beispiel heißt die Volume Group vg system <strong>und</strong> das Logical Volume lv home. Es wird davon ausgegangen,<br />

dass eine IDE Platte hdb in das System eingebaut <strong>und</strong> vom BIOS korrekt erkannt wird.<br />

Erweitern einer Volume Group<br />

vgextend /dev/vg_system /dev/hdb<br />

Vergrößern eines Logical Volumes<br />

lvextend -L +1000M /dev/vg_system/lv_home<br />

resize_reiserfs /dev/vg_system/lv_home<br />

Verkleinern einer Partition<br />

umount /home<br />

reiserfsck -check /dev/vg_system/lv_home<br />

resize_reiserfs -s -1000M /dev/vg_system/lv_home<br />

lvreduce -L -1000M /dev/vg_system/lv_home<br />

mount /home<br />

Verkleinern einer Volume Group<br />

vgreduce /dev/vg_system /dev/hdb<br />

138


Entfernen eines Logical Volumes<br />

umount /usr/ora_vzn<br />

lvscan<br />

lvchange -a n /dev/vg_oracle/lv_ora_vzn<br />

lvscan<br />

lvremove /dev/vg_oracle/lv_ora_vzn<br />

Entfernen einer Volume Group<br />

vgdisplay<br />

vgchange -a n vg_oracle<br />

vgdisplay<br />

vgremove vg_oracle<br />

Anlegen einer Volume Group<br />

vgcreate -s 32M -v vg_oracle /dev/sdb1<br />

lvcreate -n lv_ora_vzn -L 200G -v vg_oracle<br />

lvdisplay /dev/vg_oracle/lv_ora_vzn<br />

Anlegen eines Dateisystems<br />

mkreiserfs /dev/vg_oracle/lv_ora_vzn<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

15.3. Administration<br />

139


15. LVM - Logical Volume Manager<br />

140


16. Administration<br />

Dieses etwas knapp geratene Kapitel zur Administration umfasst nicht viel mehr als die Benutzer- <strong>und</strong> Gruppenverwaltung.<br />

Kein sehr spannendes Thema, aber doch ein wesentlicher Bestandteil des Gesamtsystems<br />

ohne dem ein vernünftiger Betrieb eines Multiusersystems nicht möglich wäre.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• neue Benutzer <strong>und</strong> Gruppen anzulegen,<br />

• bestehende Beutzer- <strong>und</strong> Gruppeneinstellungen zu ändern,<br />

• bereits eingetragene Benutzer <strong>und</strong> Gruppen zu löschen,<br />

• due zugehörigen Systemdateien kennen.<br />

16.1. Systemverwalter<br />

Die Administration des Systems umfasst in erster Linie die Benutzer- <strong>und</strong> Gruppenverwaltung. Solcherlei<br />

Eingriffe in das System bedürfen bestimmter Rechte, die nur der Benutzer root hat. Dieser darf im<br />

Allgemeinen alles. Deswegen ist es notwendig, dass insbesondere, wenn man als root angemeldet ist, besondere<br />

Umsicht walten lässt. Man kann sich sowohl gleich als root einloggen, als auch mit dem Befehl<br />

su nachträglich root Rechte erhalten. Außerdem ist es mit su [Benutzername] möglich, sich als anderer<br />

Benutzer am System anzumelden. Ergänzt man beim Kommandoaufruf ein -, so werden auch alle Umgebungsvariablen<br />

dem neuen Account angepasst. Die derzeitigen Rechte sind an der Symbolik des Promptes<br />

zu erkennen. Ein # steht hier für die privilegierte shell mit root Rechten. Für größere Arbeiten am System ist<br />

es sicherlich sinnvoll, sich gleich als root am System anzumelden. Eine Sicherheitslücke würde sich hingegen<br />

bei andauernder Benutzung des root Accounts auftun, die leicht vermieden werden kann, solange man<br />

diszipliniert am System arbeitet.<br />

16.2. Login- <strong>und</strong> Systemsicherheit<br />

Viele Einstellungen, die den Login <strong>und</strong> die Systemsicherheit betreffen, werden in der Datei /etc/login.defs<br />

konfiguriert. Diese ist jedoch so gut kommentiert, das weitere Erläuterungen kaum notwendig sind.<br />

16.2.1. Name Service Cache Daemon<br />

Der NSCD ist ein Daemonprozess, der einen Cache für viele der üblichen Namensanfragen bereithält. Die<br />

zentrale Konfigurationsdatei findet sich unter /etc/nscd.conf <strong>und</strong> trifft vorallem Einstellungen bezüglich<br />

der gepufferten Dateien <strong>und</strong> deren Vorhaltezeit im Cache.<br />

141


16. Administration<br />

16.3. Wichtige Systemdateien<br />

Das System verwaltet die Informationen über die einzelnen Benutzer bzw. Gruppen in den Konfigurationsdateien<br />

/etc/passwd, /etc/shadow <strong>und</strong> /etc/group. Es ist möglich, diese Dateien mit einem Editor selbst<br />

zu editieren, da es sich hierbei um reine Textdateien handelt. Dabei muss man natürlich mit einer gewissen<br />

Vorsicht umgehen, da <strong>Linux</strong> ein bestimmtes Format der angesprochenen Dateien erwartet. Sollte dieser<br />

Aufbau nicht korrekt sein, können die Dateien nur noch teilweise oder gar nicht mehr ausgewertet werden.<br />

So sollte beispielsweise der Zeilenumbruch in der letzten Zeile nicht vergessen werden. Eine fehleranfällige<br />

manuelle Bearbeitung der zugr<strong>und</strong>e liegenden Dateien ist vor dem Hintergr<strong>und</strong> der zur Verfügung stehenden<br />

durchaus komfortablen Tools also nicht zu empfehlen.<br />

16.4. Konfigurationstools<br />

Unter <strong>Linux</strong> haben Sie für ein- <strong>und</strong> dieselbe Sache sehr oft nicht nur ein Konfigurationstool zur Hand. Außerdem<br />

könnten Sie sämtliche Einstellungen auch per Hand vornehmen. Deshalb zunächst ein paar Regeln,<br />

die Ihnen das Leben bei der Konfiguration erleichtern.<br />

• Konfigurationen, die mit einem vertrauenswürdigen Tool durchgeführt werden können, sollten nicht<br />

von Hand in die entsprechenden Dateien eingetragen werden.<br />

• Ist ein Teilaspekt des Systems mit einem bestimmten Werkzeug konfiguriert worden, sollten diese<br />

Einstellungen wieder mit demselben Tool verändert werden.<br />

• Dokumentieren Sie umfangreiche Änderungen am System mit, damit Sie bei einer späteren Neuinstallation<br />

nicht wieder vor demselben Problem stehen.<br />

• Bevor Sie Änderungen direkt in einer der zahlreichen Konfigurationsdateien durchführen, sichern Sie<br />

das Original. Führen Sie danach den Befehl SuSEconfig aus, damit alle abhängigen Dateien mit den<br />

neuen Einstellungen versorgt werden.<br />

• Gehen Sie erst von einer korrekten Konfiguration aus, wenn Sie das System komplett durchgestartet<br />

haben.<br />

16.4.1. YaST2 Kontrollzentrum<br />

YaST2 steht gr<strong>und</strong>sätzlich sowohl textbasiert als auch grafisch zur Verfügung. Beide Varianten nehmen sich<br />

letztendlich in der Funktionalität nichts. Die Konfigurationsmöglichkeiten, die das YaST2 Kontrollzentrum<br />

<strong>und</strong> seine Module bieten, werden von Version zu Version ausgefeilter. Dennoch kann YaST2 in seiner heutigen<br />

Form YaST1 noch nicht vollständig ersetzen, da noch wenige Funktionen fehlen. Die Dialoggestaltung<br />

ist derweil bereits an vielen Stellen so intuitiv, dass der Anwender in der Regel ohne größere Schwierigkeiten<br />

mit diesem Werkzeug zurecht kommt<br />

16.4.2. Sax2<br />

Mit diesen beiden Tools wird der X Server eingerichtet, wenn dies nicht bereits während der Installation<br />

geschehen ist. Dabei greifen beide Programme auf eine umfangreiche Hardwaredatenbank zu <strong>und</strong> versuchen<br />

so, die installierten Komponenten korrekt zu erkennen, was in der Regel problemlos klappt. Sollten einzelne<br />

Einstellungen nicht richtig vorgenommen worden sein, so können Sie hier manuell nachsteuern. Der letzte<br />

<strong>und</strong> wichtigste Schritt ist der Text des X Servers. Nur wenn dieser korrekt gestartet werden kann <strong>und</strong> keine<br />

142


16.4. Konfigurationstools<br />

Darstellungsfehler aufweist, können Sie danach das X Window System starten. Sax2 ist dem älteren Sax in<br />

der Regel vorzuziehen. Führen Sie jedoch eine einmal begonnene Konfiguration in jedem Fall zu Ende, da<br />

sonst falsche Einträge in die Konfigurationsdateien geschrieben werden.<br />

16.4.3. KDE Kontrollzentrum<br />

Das KDE Kontrollzentrum ähnelt der Systemsteuerung unter Windows. Die hier angebotenen Möglichkeiten<br />

sind sehr umfangreich <strong>und</strong> ermöglichen es dem einzelnen Anwender, seinen eigenen Desktop bis zur Unkenntlichkeit<br />

zu verstellen. Mit einigen Optionen kann man den <strong>Linux</strong> Desktop auch dem Windows-System<br />

angleichen. Andere Einstellmöglichkeiten sind das Verhalten der Task-Leiste, der Bildschirmhintergr<strong>und</strong>,<br />

die virtuellen Desktops, die Eingabegeräte Maus <strong>und</strong> Tastatur, der Bildschirmschoner uvm.<br />

16.4.4. Webmin<br />

All diese Konfigurationsmittel haben entschiedene Nachteile:<br />

• Es gestaltet sich sehr schwer, diese Tools sinnvoll zu verwenden, wenn man nicht direkt vor dem<br />

Rechner sitzt, den man konfigurieren will. Diese Lücke schliesst Webmin, denn man kann es von<br />

jedem Computer aus, der übers Netzwerk angeschlossen ist, mittels eines Browsers ansprechen.<br />

• Der Funktionsumfang der meisten Tools ist sehr stark eingeschränkt. Webmin besitzt einen großen<br />

Umfang an mitgelieferten Oberflächen. Von MySQL <strong>und</strong> Samba über NIS bis ProFTP - alle Dienste<br />

werden unterstützt, auch zusätzliche Plugins für nicht direkt unterstützte Dienste (z.B. Tomcat) sind<br />

frei erhältlich.<br />

• Die Bedienung verläuft komplett grafisch im Gegensatz zu den meisten anderen Einrichtungstools<br />

(z.B. YaST)<br />

• Webmin nimmt alle Verwaltungsmöglichkeiten unter einen Hut, <strong>und</strong> macht somit doppelte Benutzerverwaltungen<br />

<strong>und</strong> Passwortlisten unnötig. Zusatztools wie zum Beispiel myAdmin oder SWAT<br />

werden dadurch überflüssig.<br />

Installation<br />

Webmin ist nicht Bestandteil der SuSE Distribution, trotzdem gestaltet sich die Installation von Webmin<br />

denkbar einfach. Voraussetzung ist, dass Sie die das aktuelle .tar.gz Paket von www.webmin.com herunterladen.<br />

Sie müssen nur die folgenden Schritte als Root ausführen:<br />

1. Entpacken Sie das Archiv mit tar xzf webmin-0.9x.tar.gz .<br />

2. Rufen Sie ./setup.sh im Verzeichnis webmin-0.9x/ auf.<br />

3. Beantworten Sie die Fragen, die das Skript an Sie stellt nach Ihren Wünschen.<br />

Benutzung<br />

Sie können nun Webmin von jedem Browser aus aufrufen indem Sie die URL http://Rechnername:10000<br />

aufrufen, wobei Rechnername der Name des Rechners ist, auf dem Sie Webmin installiert haben. Daraufhin<br />

werden Sie dazu aufgeforert, den bei der Installation vergebenen Usernamen <strong>und</strong> Passwort einzugeben. Nun<br />

können Sie Webmin zum Einrichten des Rechners verwenden.<br />

143


16. Administration<br />

16.5. Benutzerverwaltung<br />

Um am System arbeiten zu können, benötigt ein Anwender einen Benutzernamen <strong>und</strong> ein Passwort. Diese<br />

Kennung <strong>und</strong> ein bestimmter dem Benutzer zugeordneter Bereich für die Datenablage wird in der Regel<br />

durch den Administrator eingerichtet. Wie bereits angesprochen werden die Informationen von <strong>Linux</strong> in<br />

Textdateien gespeichert, in die im folgenden ein tieferer Einblick gewonnen werden soll.<br />

Die Passwörter aller Benutzer werden in der Datei /etc/passwd gespeichert. Diese Datei wird beim<br />

Einloggen eines Benutzers vom System gelesen <strong>und</strong> ausgewertet. Sie beinhaltet durch einen Doppelpunkt<br />

voneinander getrennte Felder, wie in Tabelle 16.1 auf Seite 144 beschrieben.<br />

144<br />

Feldname Funktion<br />

Benutzername Der Name eines Benutzers wird vom Administrator festgelegt, der<br />

sich jedoch an bestimmte Namenskonventionen halten muss. Die Mindeslänge<br />

beträgt zwei Zeichen, die Höchstlänge acht Zeichen. Er darf<br />

keinen Doppelpunkt <strong>und</strong> keine Zeilenschaltung enthalten.<br />

Passwort In früheren Versionen stand an dieser Stelle einmal das verschlüsselte<br />

Passwort. Dieses ist jedoch aus Sicherheitsgründen in die Datei<br />

/etc/shadow verlagert worden.<br />

BenutzerID Hier steht eine, innerhalb des lokalen Rechners, eindeutige numerische<br />

Benutzernummer (UID für UserID), da das System in der Regel nicht<br />

mit Namen sondern mit Nummern arbeitet. Diese muss eine nicht negative<br />

ganze Zahl sein, wobei die Null an root vergeben ist, die Nummern<br />

eins bis 99 für systemseitig angelegte Benutzer reserviert sind <strong>und</strong> die<br />

Nummern über 500 von <strong>Linux</strong> für normale Benutzer vorgesehen sind.<br />

Es ist zwar möglich mehreren Benutzernamen eine UID zuzuordnen, für<br />

das System handelt es sich in diesem Fall um einen Benutzer.<br />

GruppenID Die Zahl kennzeichnet die primäre Zugehörigkeit des Benutzers zu einer<br />

Gruppe. Auch hier wird eine ganze positive Zahl vergeben. Benutzer mit<br />

derselben GID, gehören der gleichen Gruppe mit denselben Rechten an.<br />

Was sich genau hinter einer bestimmten GID verbirgt, wird in der Datei<br />

/etc/group beschrieben.<br />

Kommentar Dieses Feld enthält in der Regel eine genauere Beschreibung des Benutzers,<br />

beispielsweise den vollen Namen.<br />

Home-Verzeichnis Die Angabe des Homeverzeichnisses, das zugleich das Arbeitsverzeichnis<br />

des Benutzers darstellt, besteht aus einer absoluten Pfadangabe.<br />

Nach dem Anmelden befindet sich der Benutzer innerhalb dieses Verzeichnisses,<br />

wobei es üblich ist, für jeden Benutzer einen gesonderten<br />

Ordner unterhalb von /home zu erstellen, in dem dieser alle Rechte besitzt.<br />

Shell An dieser Stelle wird festgelegt, mit welchem Kommandointerpreter der<br />

Benutzer nach der Anmeldung konfrontiert wird. Es ist auch möglich an<br />

dieser Stelle den Pfad eines ausführbaren Programms anzugeben, welches<br />

dann automatisch gestartet wird sobald sich der Benutzer anmeldet.<br />

Tabelle 16.1.: Einstellungen in der /etc/passwd


16.5. Benutzerverwaltung<br />

Wie bereits angesprochen werden die Passwörter der Benutzer in der Datei<br />

/etc/shadow verwaltet. Auch diese Datei basiert auf Text <strong>und</strong> enthält durch Doppelpunkt getrennte Felder.<br />

Sie ist nicht für den Benutzer lesbar, sondern allein der Administrator hat sämtliche Rechte auf dieser Datei.<br />

Der Inhalt ist in Tabelle 16.2 auf Seite 145 beschrieben.<br />

Feldname Funktion<br />

Benutzername Dieser Eintrag entspricht dem in der Datei /etc/passwd.<br />

Passwort Dieses Feld beinhaltet das verschlüsselte Passwort des Benutzers.<br />

Änderungsdatum Hier steht die Anzahl der Tage, die seit dem 01.01.1970<br />

<strong>und</strong> dem Datum, an dem das Passwort zuletzt geändert<br />

wurde, vergangen sind.<br />

Minimale Anzahl von Tagen,<br />

an denen das Passwort<br />

gültig ist.<br />

Maximale Anzahl von Tagen,<br />

an denen das Passwort<br />

gültig ist.<br />

Erst nach Ablauf kann ein Benutzer das Passwort ändern.<br />

Dies verhindert, dass ein geändertes Passwort vom Benutzer<br />

gleich wieder zurückgesetzt wird.<br />

Nach Ablauf dieser Anzahl Tage muss der Benutzer sein<br />

Passwort ändern.<br />

Warntage Dieses Feld enthält die Anzahl der Tage, an denen der Benutzer<br />

eine Warnung erhält, dass er sein fast abgelaufenes<br />

Passwort bald ändern muss. Die Meldung erscheint in der<br />

Regel beim Abmelden.<br />

Inaktivsetzen des Passwortes<br />

Die Anzahl der Tage, nach deren Ablauf der Account automatisch<br />

gespeert wird, wenn sich der Benutzer nicht angemeldet<br />

hat, wird in diesem Feld festgelegt.<br />

Ablaufdatum Dieses Feld enthält die Anzahl der Tage, nach denen die<br />

Gültigkeit des Accounts abläuft. Das Datum wird durch die<br />

Anzahl der seit dem 01.01.1970 vergangenen Tage dargestellt.<br />

16.5.1. Befehle zur Benutzerverwaltung<br />

Tabelle 16.2.: Felder in der /etc/shadow<br />

Wie bereits angesprochen, sollte aufgr<strong>und</strong> der hohen Fehleranfälligkeit die manuelle Bearbeitung der Konfigurationsdateien<br />

vermieden werden, solange entsprechend mächtige Befehle zur Verfügung stehen. Für das<br />

Anlegen eines neuen Benutzers greift das System auf hinterlegte Standardeinstellungen, die mit dem Befehl<br />

useradd -D angezeigt werden können, zurück, sofern nichts anderes angegeben wird. Diese Einstellungen<br />

werden der Datei /etc/default/useradd entnommen.<br />

Die gelisteten Einträge haben folgende Bedeutung. Neue Benutzer werden per Standardeinstellung der<br />

Gruppe mit der GID 100 zugeordnet. Normalerweise handelt es sich hierbei um die Gruppe Users. Die<br />

Homedirectories neuer Benutzer werden unter /home angelegt <strong>und</strong> erhalten als Verzeichnisnamen den Namen<br />

des Benutzers. Der Account wird nicht auf inaktiv gesetzt, sollte sich der Benutzer eine längerer Zeit<br />

nicht anmelden. Zudem wird der Account nie ablaufen. Neue Benutzer erhalten die bash als Kommandointerpreter<br />

nach der Anmeldung zugeteilt. Beim Anlegen der Homedirectories werden die Vorlagedateien aus<br />

/etc/skel kopiert. Zum Ändern der Voreinstellungen wird ebenfalls der Befehl useradd -D, durch weitere<br />

145


16. Administration<br />

Optionen ergänzt, verwendet (z.B. useradd -D [-g GID] [-b Verzeichnis] [-s Shell] [-f Tage] [-e mm/dd/y<br />

Wann immer mit dem Kommando useradd Voreinstellungen angesehen oder verändert werden sollen, wird<br />

neben weiteren Optionen immer die Option -D für default benötigt. Ohne diesen Zusatz wird useradd benutzt,<br />

um weitere Benutzer anzulegen.<br />

Dabei lautet die Syntax:<br />

useradd [-m [-k Verzeichnis]] [-u UID] [-o] [-s shell] [-g GID]<br />

[-G GID,GID,...] [-d Verzeichnis] [-e Datum] [-f Tage] [-c ‘‘Kommentar’’]<br />

Benutzername<br />

Die Optionen haben dabei die Bedeutung aus Tabelle 16.3 auf Seite 146.<br />

146<br />

Option Bedeutung<br />

-m Das Homedirectory des Benutzers wird automatisch angelegt.<br />

Die Vorlagedateien werden dabei aus dem Standardvorlageverzeichnis<br />

kopiert.<br />

-m -k Verzeichnis Das Homedirectory des Benutzers wird automatisch angelegt.<br />

Die Vorlagedateien werden dabei aus dem angegebenen<br />

Verzeichnis kopiert.<br />

-u UID Der eindeutige numerische Wert der BenutzerID. Standardmäßig<br />

würde der erste freie Wert größer als 99, also<br />

nach den Systemkennungen, verwendet.<br />

-u UID -o Der numerische Wert der BenutzerID, allerdings darf die<br />

Nummer bereits vorhanden sein.<br />

-s Shell Der Name der Shell oder des Startprogramms des Benutzers.<br />

Fehlt diese Option wird die Standardshell übernommen.<br />

-g GID Gibt die primäre Gruppe zu der ein Benutzer gehört an.<br />

Es kann sowohl der numerische Wert als auch der Gruppename<br />

angegeben werden. Allerdings muss diese Gruppe<br />

bereits vorhanden sein.<br />

-G GID,GID,... Eine Liste weiterer Gruppen, zu denen der Benutzer<br />

gehören kann. Die Listeneinträge werden nur durch Kommata<br />

getrennt aneinandergereiht. Es gelten dieselben Bedingungen<br />

wie bei der primären Gruppe.<br />

-d Verzeichnis Das automatisch erstellte Homeverzeichnis des Benutzers,<br />

wenn dafür nicht der in den Standardvorgaben enthaltene<br />

Pfad verwendet werden soll.<br />

-e mm/dd/yy Das Datum, ab welchem sich der Benutzer nicht mehr anmelden<br />

darf.<br />

-f Tage Die Anzahl an Tagen, nach denen der Account gesperrt<br />

wird, wenn sich der Benutzer nicht mehr angemeldet hat.<br />

-c ”Kommentar” Kommentar zum Benutzereintrag, in der Regel eine nähere<br />

Beschreibung des Benutzers.<br />

Tabelle 16.3.: Parameter von useradd<br />

Sollen die Benutzereinstellungen geändert werden, steht das Kommando usermod dafür bereit. Dieses


16.5. Benutzerverwaltung<br />

Feldname Funktion<br />

Gruppenname Der Name einer Gruppe wird vom Administrator festgelegt. Er<br />

darf die Höchstlänge von acht Zeichen nicht überschreiten, keinen<br />

Doppelpunkt <strong>und</strong> auch keine Zeilenschaltung enthalten.<br />

Gruppenpasswort Das verschlüsselte Passwort der Gruppe ist an dieser Stelle abgelegt.<br />

Die Verwendung dieses Passwortmechanismus ist jedoch<br />

äußerst unüblich.<br />

GruppenID In diesem Feld wird dem Gruppennamen eine eindeutige numerische<br />

Gruppennummer (GID für GroupID) zugeordnet, da das<br />

System nicht mit Namen sondern mit Nummern arbeitet. Nummern<br />

zwischen null <strong>und</strong> 99 sind für Systemgruppen reserviert.<br />

In der Regel werden also Nummern zwischen 100 <strong>und</strong> 1000<br />

aufwärts für Gruppen verwendet.<br />

Benutzerliste Hier werden die zur Gruppe gehörenden Benutzer eingetragen.<br />

Die Zugehörigkeit eines Benutzer zur primären Gruppe wurde bereits<br />

in der Datei /etc/passwd hinterlegt, während weitere Gruppenzugehörigkeiten<br />

für eventuelle sek<strong>und</strong>är Gruppen hier festgehalten<br />

sind.<br />

Tabelle 16.4.: /etc/group aufgeschlüsselt<br />

weist dieselben Optionen wie das eben beschriebene useradd auf. Das Kommando userdel löscht einen<br />

nicht mehr benötigten Benutzer. Die Syntax lautet userdel -r Benutzername. Die Option -r bewirkt, dass<br />

auch das Homeverzeichnis des angegebenen Benutzers gelöscht wird. Hierbei ist Vorsicht geboten, da sich<br />

alle persönlichen Daten hierin befinden <strong>und</strong> diese nach dem Löschen unwiderruflich verloren sind.<br />

16.5.2. Gruppenverwaltung<br />

Wenn Benutzer zu Gruppen zusammengefasst werden, muss die GID der Benutzer übereinstimmen <strong>und</strong> es<br />

muss ein entsprechender Eintrag in der Datei /etc/group vorhanden sein, da sonst die Gruppe nicht vom<br />

System erkannt wird. In jeder Zeile dieser Datei steht wiederum genau eine Gruppe, wobei jede Zeile vier<br />

durch Doppelpunkt voneinander getrennte Felder enthält, wie in Tabelle 16.4 auf Seite 147 erläutert.<br />

16.5.3. Befehle zur Gruppenverwaltung<br />

Ähnlich wie bereits angesprochen, werden auch die Gruppen verwaltet. Das Kommando, um eine neue<br />

Gruppe hinzuzufügen, lautet groupadd. Die Syntax<br />

groupadd [-g GID [-o]] Gruppenname. Die Parameter sind in Tabelle 16.5 auf Seite 148.<br />

Auch Gruppen können nachträglich geändert werden. Der entsprechende Befehl lautet groupmod <strong>und</strong><br />

umfasst abgesehen von -n dieselben Optionen wie das Kommando groupadd. Mit -n NeuerName kann der<br />

Gruppenname verändert werden.<br />

groupmod [-g GID [-o]] [-n NeuerName] Gruppenname<br />

Mit dem Kommando groupdel können Gruppen wieder gelöscht werden. Die Syntax ist sehr einfach <strong>und</strong><br />

sieht folgendermaßen aus. groupdel Gruppenname. Zu beachten ist allerdings, dass nur Gruppen gelöscht<br />

147


16. Administration<br />

Option Bedeutung<br />

keine Option Das System verwendet als GID die größte bereits vorhandene GID <strong>und</strong><br />

addiert eins dazu. Nicht zu vergessen sind hierbei auch wieder die für<br />

Systemgruppen reservierten Nummern von 0 bis 99.<br />

-g GID Der neuen Gruppe wird die angegebene numerische GID zugewiesen.<br />

-g GID -e Die verwendete GID ist bereits vorhanden <strong>und</strong> wird mehrfach belegt.<br />

Tabelle 16.5.: groupadd Parameter<br />

Feldname Informationsgehalt<br />

Name Benutzername<br />

Status L steht für locked (gespeertes Passwort) P steht für password (gültiges<br />

Passwort) NP steht für no password (kein Passwort gesetzt)<br />

mm/dd/yy Datum, an dem das Passwort zuletzt geändert wurde<br />

Min Mindestanzahl Tage zwischen Passwortänderungen<br />

Max Höchstanzahl Tage zwischen zwei Passwortänderungen<br />

Warn Anzahl Tage vor Passwortablauf, an denen der Benutzer eine entsprechende<br />

Warnmeldung erhält<br />

Inactive Anzahl der Tage, nach denen das Benutzerkonto abläuft, wenn der Benutzer<br />

sich nicht angemeldet hat<br />

Tabelle 16.6.: passwd Ausgabe<br />

werden können, die nicht primäre Gruppe eines Benutzers sind. In diesem Fall müssten erst allen Mitgliedern<br />

eine neue primäre Gruppe zugewiesen werden. Diese Regelung ist eine notwendige Einschränkung um<br />

sicherzustellen, dass jeder Benuter Mitglied einer primären Gruppe ist.<br />

16.5.4. Passwortverwaltung <strong>und</strong> -alterung<br />

Einem Passwort ist stets eine besondere Bedeutung beizumessen, da es maßgeblich für die Sicherheit im<br />

System ist. Der Passwortstatus eines Benutzers kann mit dem Befehl passwd abgefragt werden. Die Syntax<br />

lautet passwd -S Benutzername.<br />

Die Ausgabe ist wie in Tabelle 16.6 auf Seite 148 zu interpretieren.<br />

Nach dem Anlegen einen neuen Benutzers mit den weiter oben beschriebenen Befehlen ist dessen Passwortstatus<br />

Locked, d.h. der Benutzer kann sich nicht anmelden, bis ihm ein Passwort gesetzt wurde.<br />

Auch zum ändern eines Passwortes oder zum Ändern von Passwortmerkmalen ist das Kommando passwd<br />

zuständig, allerdings um weitere Optionen ergänzt.<br />

Die Syntax lautet<br />

passwd [-f Kommentar] [-s Shell] [-g GID]<br />

[-x max] [-n min] [-w warn] -l -u -d<br />

Die Optionen haben die Bedeutung wie in Tabelle 16.7 auf Seite 149.<br />

Das Passwort muss aus Kontrollgründen zweimal eingegeben werden. Mit dem Kommando passwd kann<br />

root auch ein bestehendes Passwort ändern, auslesen kann er es hingegen nicht. Vorsicht ist bei der Löschung<br />

eines Passworts walten zu lassen, weil sich jetzt jeder ohne Passwortabfrage am System anmelden kann.<br />

148


16.6. Drucker - Installation <strong>und</strong> Verwaltung<br />

Option Bedeutung<br />

-f Kommentar Fügt einen Kommentar in die /etc/passwd ein.<br />

-s Shell Ändert die Anmelde-Shell des Benutzers<br />

-g GID Weist einer Gruppe ein Passwort zu.<br />

-x max Beschreibt das Feld Höchstanzahl Tage<br />

-n min Beschreibt das Feld Mindestanzahl Tage<br />

-w warn Setzt die Einstellung für das Feld Anzahl Tage für<br />

Warnmeldung<br />

-l Setzt das Passwort auf locked (gesperrt)<br />

-u setzt den Passworteintrag zurück auf den Wert, den<br />

es vor der Sperre hatte<br />

-d Setzt den Passworteintrag auf leer<br />

Tabelle 16.7.: passwd Parameter<br />

Auch wenn die Befehle für die Benutzer- <strong>und</strong> Gruppenverwaltung nicht schwer zu erlernen sind, so ist<br />

der Umgang mit ihnen nicht gerade komfortabel <strong>und</strong> zumindest anfänglich eher fehleranfällig. Deswegen<br />

werden in aller Regel die Benutzer mit yast oder über ein grafisches Tool namens KDE Benutzermanager,<br />

der mittlerweile auch zuverlässig arbeitet.<br />

Bei YaST ist anzumerken, dass sich der entsprechende Dialog unter Administration des Systems/Benutzer<strong>und</strong><br />

Gruppenverwaltung verbirgt. Die Bedienung des grafischen Tools kuser ist hingegen so intuitiv, dass<br />

keine näheren Erklärungen notwendig sind. Vielleicht nur soviel, dass es weitaus mehr Optionen der Befehle<br />

umsetzt als das klassische yast.<br />

Übungen<br />

• In welcher Datei sind die Standardeinstellungen für das Anlegen eines Benutzers abgelegt? Wie kann<br />

man sich diese anzeigen lassen?<br />

• Mit welchen Kommandos können Benutzer bzw. Gruppen angelegt <strong>und</strong> deren Passwörter <strong>und</strong> deren<br />

Einstellungen bearbeitet werden?<br />

• Welche Dateien verbergen sich hinter der Benutzer- <strong>und</strong> Gruppenverwaltung von <strong>Linux</strong>?<br />

• Wo wird das Passwort für einen Benutzer in aller Regel abgelegt <strong>und</strong> was ist die administrative Begründung<br />

dafür.<br />

16.6. Drucker - Installation <strong>und</strong> Verwaltung<br />

In diesem Abschnitt wird auf die Einrichtung eines Druckers unter <strong>Linux</strong> eingegangen. Zudem wird besprochen,<br />

wie Druckerwarteschlangen verwaltet <strong>und</strong> Drucker überwacht werden können.<br />

16.6.1. Installation<br />

Am einfachsten kann ein Drucker mit Hilfe von Yast eingerichtet werden. Starten Sie hierfür yast <strong>und</strong> wählen<br />

Sie im Hauptmenü den Befehl Administration des Systems. Wählen Sie dann den Unterpunkt Hardware in<br />

System integrieren <strong>und</strong> dann den Befehl Drucker konfigurieren.<br />

149


16. Administration<br />

Im sich öffnenden Fenster können Sie folgende Optionen festlegen.<br />

• ob der Drucker farbig angesteuert wird<br />

• den Typ des Druckers<br />

• den Namen des Druckers<br />

• die Papiergröße<br />

• die Schnittstelle<br />

• den Device - Namen<br />

Anschließend wählen Sie Install, damit die Einträge in die Konfigurationsdatei übernommen werden.<br />

<strong>Linux</strong> besitzt mit dem apsfilter einen mächtigen Filter, der automatisch den Typ einer Datei erkennen,<br />

diese dann bestmöglichst konvertieren <strong>und</strong> auf dem Drucker ausgeben kann. <strong>Linux</strong> kennt das PostScript -<br />

Format <strong>und</strong> kann entsprechende Dateien drucken. Da zumeist jedoch kein PostScript - Drucker am System<br />

angeschlossen ist, wird das Programm Ghostscript zur Interpretation <strong>und</strong> Konvertierung eingesetzt. Der<br />

Anschluss eines Druckers erfolgt in der Regel über eine parallele Schnittstelle. Wie alle anderen Hardwarekomponenten<br />

auch, werden diese Schnittstellen über Gerätedateien angesprochen, in diesem Fall /dev/lp0,<br />

/dev/lp1 usw.<br />

16.6.2. Warteschlangen<br />

Verwenden Sie den Befehl lpr mit folgender Syntax, um eine Datei auszudrucken.<br />

lpr [-P Drucker] [-# Anzahl] [-J Job] [-T Titel] [-i Leerstellen]<br />

[-w Spalten] [-hmrs] [-cdfglnptv] dateiname<br />

Die wichtigsten Optionen zum Kommando lpr werden in Tabelle 16.8 auf Seite 151 erklärt.<br />

Die auszudruckende Datei wird nicht direkt ausgedruckt. Die Druckaufträge werden zunächst gespoolt,<br />

d.h. in temporäre Dateien zwischengespeichert <strong>und</strong> vom Druckerdämon gesteuert der Reihe nach abgearbeitet.<br />

Auf diese Weise können von verschiedenen Anwendern mehrere Druckaufträge gleichzeitig zum<br />

Drucker gesandt werden, ohne dass es zu Konflikten kommt. Der Anwender kann nach Absetzen des Druckauftrages<br />

sofort weiterarbeiten.<br />

Eine Druckerwarteschlange, auch Drucker - Queue genannt, besteht aus einem Eintrag in der Datei<br />

/etc/printcap, der die Warteschlange festlegt, <strong>und</strong> einem Verzeichnis in /var/spool, in das für jeden<br />

Druckauftrag zwei Dateien gestellt werden, die eine für Daten <strong>und</strong> die andere für die Steuerung.<br />

Ein Druckauftrag wird unter <strong>Linux</strong> in folgenden Schritten abgearbeitet.<br />

150<br />

• zu druckende Datei wird in das Verzeichnis einer Drucker - Queue kopiert<br />

• eine zugehörige Steuerdatei wird erstellt, die zusammen mit der Datei einen Job bildet<br />

• die Datei wird durch Angaben der Steuerdatei durch einen Filter geschickt, der die Daten entsprechend<br />

den Duckeranforderungen konvertiert<br />

• die Datei wir entsprechend der Reihenfolge ihres Eintrags in der Drucker - Queue auf dem Drucker<br />

ausgegeben


16.6. Drucker - Installation <strong>und</strong> Verwaltung<br />

Option Beschreibung<br />

-P Drucker gibt den zu verwendenden Drucker an, fehlt die Angabe, wird der Standarddrucker<br />

verwendet.<br />

-# Anzahl gibt die Anzahl der gewünschten Ausdrucke an.<br />

-J Job gibt den Jobnamen zum Ausdruck auf der Kopfseite an, fehlt die Option<br />

wird der Name der auszudruckenden Datei verwendet.<br />

-T Titel gibt den in der Kopfzeile zu verwendenden Titel an, fehlt die Option,<br />

wird der Name der auszudruckenden Datei verwendet.<br />

-i Leerstellen gibt die Anzahl der Leerstellen an, die als linker Seitenrand eingehalten<br />

werden sollen.<br />

-w Spalten gibt die Anzahl der pro Seite zu verwendenden Spalten an.<br />

-h unterdrückt den Ausdruck einer Kopfseite.<br />

-m sendet dem Benutzer eine mail, wenn der Druckauftrag abgeschlossen<br />

ist.<br />

-r löscht die zu druckende Datei, nachdem der Druckauftrag abgeschlossen<br />

ist.<br />

-s verwendet im Spoolverzeichnis anstatt einer Kopie der zu druckenden<br />

Datei einen symbolischen Link zur Originaldatei.<br />

-cdfglnptv geben den je nach Dateityp zu verwendenden Filter an.<br />

16.6.3. Überwachung<br />

Tabelle 16.8.: lpr - Parameter<br />

Zur Steuerung Ihrer Drucker <strong>und</strong> Druckaufträge verwenden Sie das Kommando lpc.<br />

lpc [Kommando [Argumente ...]]<br />

Das Programm lpc kann folgende Aktionen durchführen.<br />

• deaktivieren eines oder aller Drucker<br />

• deaktivieren einer oder aller Druckerwarteschlangen<br />

• ändern der Reihenfolge einzelner Druckaufträge innerhalb der Warteschlange<br />

• Statusabfrage<br />

• Warteschlange einem anderen Drucker zuordnen<br />

• einzelne Druckaufträge einer anderen Warteschlange zuordnen<br />

• Priorität eines Druckauftrages ändern<br />

• Druckauftrag neu starten<br />

Die Parameter von lpc finden Sie in Tabelle 16.9 auf Seite 152. Es ist zwar eine direkte Eingabe der Kommandos<br />

beim Programmaufruf von lpc möglich, wenn jedoch keine der oben erläuterten Optionen angegeben<br />

wird, erscheint der lpc Prompt, hinter dem Sie dann die gewünschten Kommandos mit den erforderlichen<br />

Argumenten eingeben können. Die bei manchen lpc Kommandos benötigte Druckauftragsnummer<br />

können Sie mit dem Befehl lpq ermitteln.<br />

151


16. Administration<br />

152<br />

Option Beschreibung<br />

abort [all — Drucker ...] beendet den Druckdämon für den / die<br />

angegebenen Drucker sofort, der laufende<br />

Druckauftrag wird abgebrochen<br />

clean [all — Drucker ...] löscht alle Dateien aus der dem / den<br />

angegebenen Drucker (n) zugeordneten<br />

Warteschlange<br />

enable [all — Drucker ...] aktiviert die Warteschlange für den /<br />

die angegebenen Drucker<br />

exit beendet lpc<br />

disable [all — Drucker ...] deaktiviert die Warteschlange für den /<br />

die angegebenen Drucker<br />

down [all — Drucker ...] [Nachricht] kombiniert die Kommandos stop <strong>und</strong><br />

disable, eine Nachricht für die Benutzer<br />

kann hinzugefügt werden<br />

help [Kommando] gibt eine kurze Erklärung zum angegebenen<br />

Kommando, ohne Argument<br />

wird eine Liste der verfügbaren Kommandos<br />

ausgegeben<br />

quit beendet lpc<br />

restart [all — Drucker ...] Beendigung <strong>und</strong> Neustart des<br />

Spooldämons für den / die angegebenen<br />

Drucker<br />

start [all — Drucker ...] aktiviert den Spooldämon für den / die<br />

angegebenen Drucker<br />

status [all — Drucker ...] fragt den Status des / der angegebenen<br />

Drucker(s) ab<br />

stop [all — Drucker] beendet das Drucken von Aufträgen<br />

an dem / den angegebenen Drucker<br />

(n), sobald der laufende Auftrag abgeschlossen<br />

ist<br />

topq Drucker [Jobnummer ...] [Benutzer ...] stellt den / die angegebenen Job(s) an<br />

den Anfang der Warteschlange<br />

up [all — Drucker ...] kombiniert die Kommandos start <strong>und</strong><br />

enable<br />

Tabelle 16.9.: lpc - Parameter


16.6.4. Ausgabesteuerung<br />

16.6. Drucker - Installation <strong>und</strong> Verwaltung<br />

Das Kommando lpq dient zum Verfolgen der Druckerwarteschlange <strong>und</strong> zum Ermitteln der Jobnummer<br />

eines Druckauftrages.<br />

lpq [-a] [-l] [-P Drucker] [Benutzer ...] [Jobnummer ...]<br />

Die Optionen <strong>und</strong> Argumente werden in Tabelle 16.10 auf Seite 153.<br />

Option Beschreibung<br />

-a zeigt die Warteschlangen aller Drucker an<br />

-l gibt alles im langen Format aus<br />

-P Drucker zeigt die Warteschlange des angegebenen Druckers<br />

Benutzer zeigt die Aufträge des / der angegebenen Benutzer<br />

Jobnummer zeigt die Druckaufträge mit der / den angegebenen Druckauftragsnummer<br />

(n)<br />

Tabelle 16.10.: lpq - Parameter<br />

Ohne Angabe einer Option oder eines Arguments wird die Warteschlange des Standarddruckers angezeigt.<br />

Das Kommando lprm dient zum Löschen von Druckaufträgen aus der Warteschlange.<br />

lprm [-P Drucker] [[Jobnummer] [Benutzer] ...]<br />

Die Parameter sind wieder mal in einer Tabelle, nämlich 16.11 auf Seite 153.<br />

Um die Wirkung der Kommandos zu verdeutlichen, wurden im obigen Beispiel vor <strong>und</strong> nach dem lprm<br />

Kommando der jeweilige Zustand der Warteschlange mit lpq überprüft. Sie können an obigen Beispiel<br />

auch deutlich sehen, dass ein Druckauftrag in zwei Dateien (Steuerdatei <strong>und</strong> Daten) abgelegt wird, da beim<br />

Entfernen eines Druckauftrags zwei Dateien gelöscht werden. Beachten Sie, dass nur der Superuser das<br />

Recht hat, Jobs anderer Benutzer zu löschen.<br />

Übungen<br />

• Richten Sie einen weiteren Drucker auf Ihrem System ein.<br />

Option Beschreibung<br />

-P Drucker gibt den Drucker an, aus dessen Warteschlange ein Auftrag<br />

gelöscht wird, ist keiner angegeben, gilt der Standarddrucker als<br />

ausgewählt<br />

Benutzer gibt den Benutzer an, dessen Auftrag / Aufträge gelöscht werden<br />

sollen<br />

Jobnummer spezifiziert den zu löschenden Auftrag anhand der Druckauftragsnummer<br />

Tabelle 16.11.: lprm - Parameter<br />

153


16. Administration<br />

• Schicken Sie einen Druckauftrag an diesen neuen Drucker, um dessen Funktion zu überprüfen.<br />

• Lassen Sie sich den Druckerzustand anzeigen.<br />

• Starten Sie einmal einen Drucker durch.<br />

• Überprüfen Sie die Jobs im Spool - Verzeichnis.<br />

• Löschen Sie einen beliebigen Job aus der Queue.<br />

16.7. Umgang mit Dateisystemen<br />

Dieser Abschnitt behandelt die Partitionierung der Festplatte <strong>und</strong> das anschließende Einrichten eines Dateisystems.<br />

16.7.1. Partitionierung einer Festplatte mit fdisk<br />

Bevor Sie ein neues Dateisystem auf einer Partition erzeugen können, muss diese zunächst einmal auf der<br />

Festplatte erstellt werden. Bei der Installation wird dieser Vorgang bequem mit Yast bzw. Yast2 durchgeführt.<br />

Zu beachten ist, dass durch eine nachträglich durchgeführte Partitionierung gegebenenfalls Daten<br />

zerstört oder bereits vorhandene Partitionen verschoben werden <strong>und</strong> so andere Bezeichnungen erhalten <strong>und</strong><br />

damit nicht mehr korrekt gemountet werden können. Der Befehl lautet:<br />

fdisk [Plattenname]<br />

Vorsicht! Mit diesem Befehl können Sie Ihr System völlig zerstören. Im Menü, das Sie sich mit m anzeigen<br />

lassen, sind sämtliche Möglichkeiten aufgeführt. Mit x erhalten Sie weitreichende Optionen aus dem<br />

Expertenmenü.<br />

16.7.2. Überprüfen des Dateisystems mit fsck<br />

Immer wenn eine Datei geändert, neu angelegt oder gelöscht wird, muss das Betriebssystem diese Aktualisierungen<br />

des Dateisystems durchführen. Meistens werden solche Änderungen in einem Puffer zwischengespeichert<br />

<strong>und</strong> asynchron auf die Festplatte übertragen. Aufgr<strong>und</strong> der asynchronen Datenübertragung, die<br />

sehr performant arbeitet, muss der Rechner möglichst ordentlich heruntergefahren werden, damit noch im<br />

Puffer befindliche Daten sauber auf die Festplatte zurückgeschrieben werden. Die Pufferung ist notwendig,<br />

damit der Benutzer, auch wenn die Änderungen noch nicht auf der Festplatte durchgeführt worden sind,<br />

unbeeinträchtigt weiter arbeiten kann. Nur bestimmte systemrelevante Prozesse, wie z.B. die Freigabe von<br />

Inodes, werden synchron durchgeführt, um auf diese Weise zu vermeiden, dass das Dateisystem inkonsistent<br />

wird. Dennoch kann ein Dateisystem aus diversen Gründen solche Inkonsistenzen aufweisen. In den<br />

meisten Fällen sind hierfür Hardware-Fehler oder Stromausfälle verantwortlich. Sollte der Rechner nicht<br />

ordnungsgemäß heruntergefahren worden sein, führt das Betriebssystem beim Neustart einen Check des<br />

Dateisystems durch <strong>und</strong> schlägt bei Bedarf geeignete Korrekturmaßnahmen vor. Dies geschieht mit Hilfe<br />

des Programms fsck, das auch manuell gestartet werden kann.<br />

fsck [-A -a -r -R -N -V -t ] Dateisystem<br />

Die Parameter finden Sie in Tabelle 16.12 auf Seite 155.<br />

Beachten Sie, dass eine Überprüfung des Dateisystems mehrmals durchgeführt werden sollte <strong>und</strong> zwar<br />

solange bis keine Fehler mehr auftreten. Der Vorgang läuft in der Regel in mehreren Phasen ab.<br />

154


erste Phase<br />

16.7. Umgang mit Dateisystemen<br />

Option Beschreibung<br />

-A prüft alle in der Datei /etc/fstab aufgeführten Dateisysteme<br />

-a repariert automatisch das Dateisystem ohne Rückfrage<br />

-r erzeugt Sicherheitsabfragen, vor der möglichen Reparatur<br />

-R verhindert, dass das Root-System bei einer Überprüfung mit der<br />

Option -A ebenfalls überprüft wird<br />

-N führt keine echte Überprüfung durch, sondern gibt nur aus, wie<br />

eine Überprüfung aussehen würde<br />

-V gibt zeitgleich zur Überprüfung detaillierte Meldungen aus<br />

-t Dateisystemtyp gibt den Typ des Dateisystems an<br />

Tabelle 16.12.: fsck Parameter<br />

In der Initialisierungsphase werden die Optionen <strong>und</strong> Argumente, die dem Befehl übergeben wurden, auf ihre<br />

Richtigkeit hin überprüft. Zudem wird der Superblock auf Lesbarkeit kontrolliert. Tritt hierbei bereits der<br />

Fehler Der Superblock ist nicht lesbar auf, sollten Sie dem Vorschlag des Systems einen Backup-Superblock<br />

zu verwenden, zustimmen.<br />

zweite Phase<br />

Jetzt wird die Inode-Tabelle überprüft. Hier können zum Beispiel die Fehler Falsches Inode - Format, Bad<br />

Blocks, Nicht existierende Blöcke, doppelte Blöcke oder unbekannter Inode - Typ auftauchen. An dieser<br />

Stelle sollten Sie das Programm die fehlerhaften Angaben löschen lassen.<br />

dritte Phase<br />

Es werden Verzeichniseinträge entfernt, die auf Inodes verweisen, die die vorherige Phase als fehlerhaft<br />

oder nicht vorhanden gekennzeichnet hat.<br />

vierte Phase<br />

Es wird überprüft, ob es Verzeichnisse ohne Verbindung zum Dateisystem gibt. Solche Verzeichnisse treten<br />

dann auf, wenn in der vorangegangenen Phase übergeordnete fehlerhafte Verzeichnisse entfernt wurden, die<br />

jetzt untersuchten Verzeichnisse aber keine Fehler aufweisen. Diese werden nach erfolgter Bestätigung in<br />

das Verzeichnis lost + fo<strong>und</strong> gestellt.<br />

fünfte Phase<br />

Das Dateisystem wird nach Dateien durchsucht, die nicht referenziert sind. Auch diese werden in das Verzeichnis<br />

lost + fo<strong>und</strong> kopiert.<br />

letzte Phase<br />

Die Listen, die die freien Datenblöcke <strong>und</strong> die bereits verwendeten Inodes führen, werden mit der Liste<br />

verglichen, die fsck neu aufgebaut hat. Bei Abweichungen wird vorgeschlagen, die alten Listen durch die<br />

neuen zu ersetzen.<br />

155


16. Administration<br />

16.7.3. Wechsel von ext2 von ext3<br />

Der Wechsel von ext2 auf ext3 gestaltet sich recht einfach, da beide Dateisysteme binär kompatibel sind.<br />

Ein einfaches Kommando genügt. Allerdings muss das Dateisystem dafür unmounted sein.<br />

tune2fs -j <br />

Im gemounteten Zustand wird dann das Dateisystem in der Datei .journal mitgeschrieben.<br />

Übungen<br />

• Mit welchem Befehl kann eine Festplatte partitioniert werden?<br />

• Mit welchem Befehl erhalten Sie eine Liste aller Partitionen Ihres Systems?<br />

• Mit welchem Befehl kann ein Dateisystem überprüft werden?<br />

• Mounten <strong>und</strong> Unmounten Sie zur Übung verschiedene Dateisysteme.<br />

• In welchen Verzeichnissen kann der normale Anwender Dateien <strong>und</strong> Unterverzeichnisse anlegen?<br />

• Wie heißen die zentralen Konfigurationsdateien, die das Ein- <strong>und</strong> Aushängen von Dateisystemen mitbestimmen?<br />

16.8. Syslog-Daemon<br />

Der Syslog-Daemon ist für das Mitloggen umfangreicher Systemmeldungen zuständig. Die Konfiguration<br />

findet sich unter /etc/syslog.conf. An dieser Stelle muss noch eine genaue Betrachtung des syslogd<br />

durchgeführt werden. Insbesondere ist die Möglichkeit interessant, auf einem remote loghost zu loggen.<br />

16.9. Cron<br />

Das Kommando cron ist etwas schwieriger zu handhaben. Jedoch können hiermit Aufgaben immer zu<br />

bestimmten Zeitpunkten wiederholt werden. Diese Zeitsteuerungen werden in einer Tabelle namens crontab<br />

hinterlegt, wobei jede Zeile gr<strong>und</strong>sätzlich identisch aufgebaut ist <strong>und</strong> deren Inhalt in Tabelle 16.13 auf Seite<br />

156 erläutert wird.<br />

156<br />

Feld Inhalt<br />

Minute 0 bis 59 oder *<br />

St<strong>und</strong>e 0 bis 24 oder *<br />

Tag des Monats 0 bis 31 oder *<br />

Monat 0 bis 12 oder Monatsname oder *<br />

Wochentag 0 bis 7 oder Wochentag oder * (0 entspricht Sonntag)<br />

Kommando jedes beliebige <strong>Linux</strong> - Kommando oder ein beliebiges Programm<br />

Tabelle 16.13.: crontab - Parameter


16.10. Logdateien<br />

Da es unter Umständen zu schweren Systemfehlern aufgr<strong>und</strong> einer falschen crontab kommen kann, sollten<br />

Sie zunächst eine temporäre Datei editieren <strong>und</strong> erst nach nochmaliger Kontrolle diese Datei ins System<br />

einspielen <strong>und</strong> den crond durchstarten.<br />

Die benutzerspezifischen Tabellen für den crond liegen unter /var/spool/cron/tabs. Als systemweite<br />

Tabelle wird die Datei /etc/crontab verwendet, in der zusätzlich zur Zeitangabe der Benutzer, unter dem<br />

der jeweilige Auftrag laufen soll, angegeben werden muss. Ebenso verhält es sich mit den paketspezifischen<br />

Cron-Tabellen in /etc/cron.d.<br />

Das Skript /usr/lib/cron/run-crons wird durch die systemweite crontab alle 15 Minuten aufgerufen,<br />

um sicherzustellen, dass eventuell versäumte Läufe rechtzeitig nachgeholt werden. Innerhalb des Skripts<br />

wird dann mit Hilfe der Dateien im Verzeichnis /var/spool/cron/lastrun geprüft, ob ein erneuter Lauf<br />

notwendig ist.<br />

16.10. Logdateien<br />

Zahlreiche Systemdienste <strong>und</strong> der Kernel selbst schreiben im laufenden Betrieb oft in unregelmäßigen<br />

Abständen in sogenannte Logfiles, die meistens im Verzeichnis /var/log abgelegt sind. Hier kommt es<br />

also zu einem dynamischen Wachstum, dass durch geeignete Mechanismen kontrolliert werden muss, um<br />

ein Volllaufen des Dateisystems zu verhindern.<br />

Vor SuSE 8.0 war hierfür die Datei /etc/logfiles zuständig, deren Syntax selbsterklärend ist. Ab SuSE<br />

8.0 wird hierfür das Paket logrotate verwendet, dessen Konfiguration zum einen in etclogrotate.conf— <strong>und</strong><br />

zum zweiten im Verzeichnis /etc/logrotate.d abgelegt ist. Die genaue Syntax kann in der manpage von<br />

logrotate nachgeschlagen werden. Logrotate selbst wird einmal täglich durch den crond über das Skript<br />

/etc/cron.daily/logrotate<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

157


16. Administration<br />

158


17. Prozesskonzept<br />

Im folgenden Kapitel soll Ihnen Gr<strong>und</strong>lagenwissen hinsichtlich der Prozesse <strong>und</strong> ihrer Verwaltung vermittelt<br />

werden. Während im ersten Teil auf den Prozess selbst <strong>und</strong> dessen mögliche Zustände eingegangen wird,<br />

liegt der Schwerpunkt des zweiten Teils auf der Prozesshierarchie, den Kenndaten eines Prozesses <strong>und</strong> der<br />

Kommunikation zwischen den Prozessen. Im dritten Teil werden die Kommandos, die zur Steuerung <strong>und</strong><br />

Verwaltung von Prozessen notwendig sind, behandelt. Zur Abr<strong>und</strong>ung des Kapitels werden am Ende Dienste<br />

genannt, die Prozesse zeit- <strong>und</strong> ressourcenabhängig anstoßen.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• etliche neue Begrifflichkeiten im Kontext der Prozessverwaltung zu definieren,<br />

• die verschiedenen Prozesszustände kennen,<br />

• gr<strong>und</strong>legendes zur Prozesskommunikation,<br />

• administrative Prozessverwaltung durchzuführen.<br />

17.1. Gr<strong>und</strong>lagen<br />

Der Begriff des Prozesses <strong>und</strong> dessen Abgrenzung gegenüber dem Programm, ist nicht leicht festzumachen.<br />

Deswegen soll zunächst eine Erklärung versucht werden. Beachten Sie, dass im Verlauf des Kapitels der<br />

Einfachheit halber von einem Rechnersystem mit einer CPU ausgegangen wird.<br />

17.1.1. Definition des Begriffs “Prozess“<br />

Ein Prozess ist zunächst ein Programm während der Ausführung, kann darüber hinaus aber auch als Paket für<br />

ein Programm betrachtet werden, dass verschiedene Informationen verwaltet <strong>und</strong> über dessen Schnittstellen<br />

das Betriebssystem steuernd eingreifen kann. Ein Beispiel soll der Verdeutlichung dienen. Wird von einem<br />

Benutzer ein Programm gestartet, so wird der zugehörige Programmcode in den Hauptspeicher geladen. Das<br />

ablaufende Programm wird dann als Prozess bezeichnet. Startet ein anderer Benutzer dasselbe Programm,<br />

handelt es sich um verschiedene Prozesse, obwohl beide das gleiche Programm ausführen. Denken Sie aber<br />

bei Prozessen nicht nur an Programme, die von den Benutzern des Systems gestartet werden, wie die Shell,<br />

verschiedenste Kommandos oder Anwendungen unter X, sondern auch an die im Hintergr<strong>und</strong> laufenden<br />

Dämonen (daemons).<br />

159


17. Prozesskonzept<br />

17.1.2. Prozesszustände<br />

Während der Lebenszeit eines Prozesses nimmt dieser unterschiedliche Zustände an, wobei solche Zustandswechsel<br />

immer durch das Eintreten eines bestimmten Ereignisses ausgelöst werden. Man unterscheidet hierbei<br />

im wesentlichen drei Zustände: aktiv, bereit <strong>und</strong> blockiert. Ein Prozess ist aktiv (running), wenn er gerade<br />

von der CPU bearbeitet wird <strong>und</strong> bereit (ready), wenn er die CPU benutzen könnte. Ein blockierter<br />

(blocked) Prozess, wartet auf das Eintreten eines bestimmten Ereignisses (z.B. auf eine Eingabe des Benutzers).<br />

In einem Rechnersystem mit nur einem Prozessor kann immer nur ein Prozess aktiv sein. Für alle<br />

anderen verwaltet das Betriebssystem verschiedene Wartelisten, in der beispielsweise alle bereiten Prozesse<br />

in der Reihenfolge ihrer Ankunft <strong>und</strong> in Abhängigkeit von ihrer Priorität eingetragen werden. Die blockierten<br />

Prozesse werden ohne besondere Anordnung in einer eigenen Warteliste geführt, bis das entsprechende<br />

Ereignis eintritt.<br />

Wird ein Programm gestartet, so wird der zugehörige Prozess am Ende der Warteliste für bereite Prozesse<br />

eingetragen. Erst wenn er bis an den Anfang der Tabelle vorgedrungen ist <strong>und</strong> die CPU frei wird, bekommt<br />

er CPU-Zeit zugeteilt <strong>und</strong> wechselt seinen Zustand von bereit auf aktiv (dispatch). Um ein endloses Besetzen<br />

der CPU durch den Prozess zu verhindern, wird nach Ablauf einer Zeitscheibe die CPU wieder entzogen<br />

(timerunout). Der Prozess wird zurück in die Warteliste gestellt <strong>und</strong> ein anderer Prozess bekommt die CPU<br />

zugeteilt. Denkbar wäre auch, dass ein Prozess vor dem Ablauf der ihm zustehenden CPU-Zeit eine Einoder<br />

Ausgabeoperation anfordert. In diesem Fall gibt er selbständig die CPU frei (block). Dies ist zugleich<br />

der einzigste Zustandswechsel, den ein Prozess selbst veranlassen kann. Der letzte mögliche Zustandswechsel<br />

ist das Eintreten eines Ereignisses auf das ein blockierter Prozess wartet, wodurch dieser aufgeweckt<br />

wird (wakeup).<br />

Die vier möglichen Zustandswechsel stellen sich also wie in Abbildung 17.1 auf Seite 160 dar:<br />

17.1.3. Prozesskontrollblock<br />

aktiv<br />

�<br />

�<br />

bereit blockiert<br />

���✒<br />

� ❅<br />

dispatch<br />

� ❅block �time<br />

run out ❅❅❘<br />

�✠<br />

✛<br />

wakeup<br />

Abbildung 17.1.: Prozesszustände<br />

Wird ein neuer Prozess angelegt, so werden zur Verwaltung benötigte Informationen in einen sogenannten<br />

Prozesskontrollblock (process control block, kurz PCB) geschrieben. Dabei handelt es sich beispielsweise<br />

um<br />

160<br />

• die eindeutige Prozesskennung (process identification, kurz PID)<br />

• den Namen des auszuführenden Programms<br />

• die Priorität des Prozesses<br />

• den momentanen Prozesszustand<br />

• den aktuellen Programmschritt<br />

• die Adresse des vom Programm belegten Hauptspeichers


• die reservierten Ressourcen<br />

• den Benutzer, der das Programm gestartet hat<br />

• usw.<br />

17.1. Gr<strong>und</strong>lagen<br />

Bei der Zuteilung der CPU an die Prozesse greift das Betriebssystem auf den PCB zu, damit der Prozess<br />

an seiner unterbrochenen Stelle fortfahren kann. Verlässt der Prozess den aktiven Zustand werden für die<br />

Fortsetzung des Prozesses notwendige Informationen in den PCB zurückgeschrieben.<br />

17.1.4. Entstehung einer Prozesshierarchie<br />

Eine Prozesshierarchie entsteht durch die Möglichkeit eines Prozesses einen oder mehrere neue Prozess zu<br />

starten (spawn). Ein auf diese Weise erzeugter Prozess wird Sohnprozess (child process) <strong>und</strong> der erzeugende<br />

Prozess Vaterprozess (parent process) genannt. In dieser Hierarchie gilt, dass ein Sohnprozess immer nur<br />

einen Vater hat, aber jeder Vaterprozess mehrere Sohnprozesse aufweisen kann.<br />

17.1.5. Prozessoperationen<br />

Zur Verwaltung der Prozesse muss das Betriebssystem über Operationen verfügen, die das Prozessverhalten<br />

beeinflussen. Einige dieser Funktionen (dispatch, timerunout, block <strong>und</strong> wakeup) wurden bereits weiter<br />

oben genannt. An dieser Stelle kommen noch folgende hinzu.<br />

Erstellen eines Prozesses (create)<br />

Diese Operation zieht einige Arbeiten nach sich. So muss beispielsweise eine neue PID vergeben, ein Eintrag<br />

in die Prozesstabelle des System vorgenommen, die Prozesspriorität festgelegt <strong>und</strong> ein PCB angelegt<br />

werden. Außerdem müssen die benötigten Ressourcen reserviert werden.<br />

Löschen eines Prozesses (kill)<br />

In diesem Fall reicht es nicht aus, nur den Prozess selbst zu entfernen. Insbesondere müssen auch die Einträge<br />

aus den systeminternen Tabellen gelöscht, die reservierten Ressourcen freigegeben <strong>und</strong> der PCB entfernt<br />

werden. Dabei werden in der Regel auch alle zuvor gestarteten Sohnprozesse gelöscht.<br />

Suspendieren eines Prozesses (suspend)<br />

bzw.<br />

Wiederbeleben eines suspendierten Prozesses (resume)<br />

Eine Suspendierung wird zumeist nur für kurze Zeit vorgenommen, wenn das System überlastet oder benötigte<br />

Ressourcen zur Zeit nicht verfügbar sind. Je nachdem in welchem Zustand sich der Prozess vor der<br />

Suspendierung bef<strong>und</strong>en hat, wird er entweder auf suspendiert-bereit oder suspendiert-blockiert gesetzt.<br />

Nachdem sich die Situtation geändert hat, wird der Prozess wiederbelebt.<br />

Ändern einer Prozesspriorität (change)<br />

Im Betriebssystem konkurrieren alle Prozesse um die CPU. Dabei ist es von der Priorität abhängig wie oft<br />

ein Prozess innerhalb einer bestimmten Zeiteinheit die CPU zugeteilt bekommt. Um eine Änderung der<br />

Priorität eines Prozesses auch nachträglich zu ermöglichen, verfügt das Betriebssystem über die Operation<br />

change.<br />

161


17. Prozesskonzept<br />

17.2. Prozesse unter <strong>Linux</strong><br />

Wie bereits angesprochen, wird bei der Ausführung eines Kommandos oder einer Anwendung immer ein<br />

eigener Prozess gestartet. Als Ausnahme sind Befehle zu nennen, die vom Kommandointerpreter der Shell<br />

selbst ausgeführt werden, sogenannte built-in-Funktionen.<br />

Der nachfolgende Abschnitt geht im Einzelnen auf die Prozesshierarchie, die Prozesskenndaten <strong>und</strong> die<br />

Kommandos zur Prozessverwaltung ein.<br />

17.2.1. Prozesshierarchie<br />

Ein kurzer Abriss des Betriebssystemstarts <strong>und</strong> des Anmelden eines Benutzers soll verdeutlichen, wie sich<br />

die Prozesshierarchie unter <strong>Linux</strong> aufbaut.<br />

Zunächst wird nach dem Booten der <strong>Linux</strong>-Kernel in den Arbeitsspeicher geladen <strong>und</strong> zur Ausführung<br />

gebracht. Dieser Prozess erhält die PID 0 <strong>und</strong> startet das Programm init mit der PID 1, der die Wurzel der<br />

Prozesshierarchie bildet, da ihm alle weiteren System- <strong>und</strong> Benutzerprozesse untergeordnet sind. Init liest<br />

dann die Datei /etc/inittab <strong>und</strong> wertet die Einträge, wie z.B. den zu startenden Runlevel, aus. Durch die<br />

jeweiligen Startskripten werden jetzt Sohnprozesse von init mit eindeutigen PIDs erzeugt, die zunächst die<br />

drei Dateien Standardeingabe (stdin), Standardausgabe (stdout) <strong>und</strong> Standardfehlerausgabe (stderr) anlegen.<br />

Danach startet init unter anderem das Programm getty, dass die Aufforderung zum Anmelden am entsprechenden<br />

Terminal ausgibt <strong>und</strong> auf die Eingabe des Benutzernamens wartet. Getty ruft dann das Kommando<br />

login, mit dem Benutzernamen als Argument, auf, so dass das Passwort abgefragt <strong>und</strong> auf seine Richtigkeit<br />

überprüft werden kann. Sollten keine Fehler auftreten, startet init als nächstes die Standardshell des Benutzers<br />

(vgl Eintragung in /etc/passwd). Dieses Programm ist kein neuer Prozess, sondern läuft immer noch<br />

unter der gleichen Prozessnummer wie der von init für das entsprechende Terminal erzeugte Sohnprozess.<br />

Die zu startende Shell ist benutzerspezifisch <strong>und</strong> wird in der Datei /etc/passwd angegeben, wobei die<br />

Standardshell unter <strong>Linux</strong> die Bourne-Again-Shell (/bin/bash) ist. Dieses Programm ist ein Kommandointerpreter<br />

<strong>und</strong> dafür verantwortlich, dass alle vom Benutzer eingegebenen Kommandos entgegengenommen,<br />

ausgewertet, entsprechende Sohnprozesse erzeugt <strong>und</strong> durch den Kernel ausgeführt werden. Eventuelle<br />

Kernel-Meldungen werden dem Benutzer wieder durch die Shell übermittelt. Ist in /etc/passwd der<br />

Eintrag false gesetzt, kann der Benutzer keine Shell starten, sondern nur nach außen angebotene Dienste<br />

nutzen.<br />

Beendet jetzt der Benutzer seine Sitzung beispielsweise mit dem Kommando exit, so wird der Sohnprozess<br />

gelöscht <strong>und</strong> von init ein neuer Sohnprozess für dieses Terminal gestartet.<br />

17.2.2. Prozesskenndaten<br />

Zu jedem Prozess gibt es eine Reihe von Informationen, die vom Betriebssystem in verschiedenen internen<br />

Tabellen, wie den PCB (vgl. Erklärungen weiter oben), verwaltet werden. Dabei können einige dieser Daten<br />

von einem Vaterprozess an seine Sohnprozesse weiter vererbt werden. Typische Prozesskenndaten sind<br />

nachfolgend aufgelistet <strong>und</strong> in Teilen weiter unten genauer erläutert.<br />

162<br />

• Prozessnummer (process identification, kurz PID)<br />

• Prozessnummer des Vaterprozesses (parent process identification, kurz PPID)<br />

• Benutzernummer (user identification, kurz UID) <strong>und</strong> Gruppennummer (group identification, kurz<br />

GID) des Prozesseigentümers<br />

• Prozesspriorität


• Prozesszustand<br />

• Kontrollterminal, das Terminal von dem der Prozess aus gestartet wurde<br />

• CPU-Zeit, die der Prozess bisher verbraucht hat<br />

• CPU-Status (Befehlszähler <strong>und</strong> Inhalt der Register)<br />

• Adresse des Programmes im Arbeitsspeicher<br />

• Dateien, die vom Prozess geöffnet sind<br />

• Arbeitsverzeichnis (working directory) des Prozesses<br />

• usw.<br />

Prozessnummer<br />

17.2. Prozesse unter <strong>Linux</strong><br />

Die Nummer (PID), die jeder Prozess beim Starten zugewiesen bekommt, ist systemweit eindeutig, so dass<br />

sichergestellt ist, das zwei gleichzeitig laufende Prozesse niemals die gleiche PID besitzen. Die Prozessnummer<br />

des Vaterprozesses (PPID) gibt an, von welchem Prozess ein bestimmter Sohnprozess erzeugt wurde.<br />

Benutzer- <strong>und</strong> Gruppennummer des Prozesseigentümers<br />

Ein Prozess besitzt zwei Arten von UID <strong>und</strong> GID, zum einen die effektive UID / GID, zum anderen die<br />

reale UID / GID. Ist das set-user-id-Bit bzw. set-group-id-Bit für ein Programm nicht gesetzt, so sind die<br />

effektiven UID / GID für den erzeugten Prozess gleich den realen UID / GID, nämlich die UID <strong>und</strong> GID<br />

des Aufrufenden. Ist dagegen das set-user-id-Bit bzw. das set-group-id-Bit gesetzt, so wird als effektive<br />

UID / GID die UID / GID des Eigentümers der Programmdatei <strong>und</strong> als reale UID / GID die des Aufrufenden<br />

für den hieraus erzeugten Prozess gesetzt. Ein Beispiel verdeutlicht diese Funktionalität. Auf die<br />

Passwortdatei /etc/shadow hat nur der Benutzer root Schreibberechtigung. Trotzdem muss es jedem Benutzer<br />

möglich sein, sein Passwort zu ändern. Das Kommando heißt passwd <strong>und</strong> darf von jedem Benutzer<br />

ausgeführt werden. Die ausführbare Datei gehört dem Benutzer root <strong>und</strong> hat das set-user-id-Bit gesetzt. Wird<br />

passwd gestartet, läuft der entsprechende Prozess unter der effektiven UID von root, so dass in die Datei<br />

/etc/shadow geschrieben werden darf. Eine Loch in der Systemsicherheit entsteht in diesem Fall nur, wenn<br />

jeder die Programmdatei /sbin/passwd verändern darf, da somit die Möglichkeit besteht, Kommandos mit<br />

root Berechtigung auszuführen.<br />

Prozesspriorität<br />

Wie bereits angesprochen konkurrieren im Betriebssystem sehr oft mehrere Prozesse um die Zuteilung der<br />

CPU. Ein Algorithmus legt dabei anhand der Priorität fest, wie schnell Prozesse in der Warteliste nach vorne<br />

rücken. Damit ist sichergestellt, dass alle Prozesse irgendwann zur Ausführung gelangen, wobei Prozesse<br />

mit hoher Priorität öfter die CPU zugeteilt bekommen. Die Priorität ist dabei nicht nur abhängig von der<br />

beim Start festgelegten sondern zusätzlich von der vom Prozess verbrauchten Zeit, seiner Größe <strong>und</strong> seiner<br />

Wartezeit.<br />

Prozess-Adressraum<br />

Daneben verfügt ein Prozess noch über einen sogenannten Adressraum, welcher in drei getrennte Bereiche<br />

unterteilt ist, wie in Tabelle 17.1 auf Seite 164 angedeutet.<br />

163


17. Prozesskonzept<br />

Segment Beschreibung<br />

Textsegment enthält den Programmcode, ist schreibgeschützt <strong>und</strong> kann von mehreren<br />

Prozessen gleichzeitig benutzt werden.<br />

Datensegment enthält die Benutzerdaten des Prozesses <strong>und</strong> wird nochmals in einen<br />

initialisierten <strong>und</strong> einen nicht initialisierten Datenbereich unterteilt.<br />

Stacksegment enthält den Benutzerstack <strong>und</strong> die Verwaltungsdaten des Prozesses.<br />

17.2.3. Prozesskommunikation<br />

Tabelle 17.1.: Prozess-Adressraum<br />

Die Kommunikation zwischen Prozessen kann mit unterschiedlichsten Mechanismen erfolgen, von denen<br />

einige im folgenden vorgestellt, andere nur genannt werden sollen.<br />

Dateien<br />

Ein Prozess kann Daten in Dateien schreiben, welche von anderen Prozessen wieder ausgelesen werden.<br />

Allerdings ist diese Form des Datenaustausches nicht sehr effizient, da zeitaufwendige Plattenzugriffe unvermeidlich<br />

sind. Die Datei bzw. die enthaltenen Daten werden nach dem FIFO Prinzip verarbeitet, d.h. dass<br />

zuerst die Datensätze gelesen werden, die schon am längsten in der Datei stehen.<br />

Beispiel:<br />

ls > inhalt<br />

grep * < datei<br />

Das erste Kommando schreibt die Ausgaben des Befehls ls in eine Datei mit dem Namen inhalt. Sollte<br />

diese Datei noch nicht bestehen, wird sie angelegt, ist sie bereits vorhanden, wird sie überschrieben. Anschließend<br />

liest grep wieder die Inhalte der Datei aus. Mit ¿¿ werden die Ausgaben an die Datei angehängt<br />

<strong>und</strong> mit 2¿ die Standardfehlerausgabe umgeleitet.<br />

Pipes<br />

Um zeitaufwendige Zugriffe auf externe Speichermedien zu vermeiden, können im Arbeitsspeicher Puffer<br />

eingerichtet werden, die, als Pipe verwendet, einen deutlichen Geschwindigkeitsvorteil bieten. Ein Prozess<br />

schreibt seine Daten in diese Pipe, die ein anderer Prozess wieder auslesen kann. Eine Pipe ist einkanalig,<br />

d.h. ein Prozess kann entweder nur lesend oder nur schreibend darauf zugreifen. Sollen Daten in beide<br />

Richtungen ausgetauscht werden, ist das Einrichten einer zweiten Pipe notwendig. Wie Dateien auch, werden<br />

Pipes nach dem FIFO Prinzip verwaltet.<br />

Beispiel:<br />

ls | grep *<br />

Ein Nachteil der Pipe besteht darin, dass deren Lebensdauer von den darauf zugreifenden Prozessen<br />

abhängt.<br />

Signale<br />

Signale werden in erster Linie zur Kommunikation zwischen System- <strong>und</strong> Benutzerprozessen verwendet.<br />

Dieses asynchrone Ereignis kann zu jedem beliebigen Zeitpunkt eintreten <strong>und</strong> bewirkt eine Unterbrechung<br />

auf Prozessebene. Signale können durch folgende Ereignisse ausgelöst werden.<br />

164


17.3. Kommandos zur Prozessverwaltung<br />

Aktionen des Benutzers am Terminal (z.B. Tastenkombinationen, Beenden des Terminals) Programmfehler<br />

(z.B. Division durch Null) Senden eines Signals durch einen anderen Prozess (vgl. weiter unten)<br />

Fängt ein Programm ein Signal nicht explizit durch eine Signalbehandlungsroutine ab, so führt dies unweigerlich<br />

zum Programmabbruch. Wie später gezeigt wird, kann das Signal SIGKILL garnicht abgefangen<br />

werden.<br />

Andere Kommunikationsmöglichkeiten<br />

Des Weiteren gibt es sogenannte Named Pipes, Message Queues, Semaphores, Shared Memory <strong>und</strong> Streams.<br />

17.3. Kommandos zur Prozessverwaltung<br />

Wenn ein Anwender ein Programm startet <strong>und</strong> wieder beendet, werden folgende Schritte durchgeführt.<br />

• Erzeugen eines Prozesses<br />

• Ausführen des Programms<br />

• Beenden des Prozesses<br />

Ein Programm mit Unterprogrammen wird entsprechend abgearbeitet, indem weitere untergeordnete Prozesse<br />

für jedes gestartete Unterprogramm angelegt werden. Im folgenden werden Kommandos vorgestellt,<br />

die einen Zugriff auf die Prozesse erlauben.<br />

17.3.1. Befehle zur Prozessansicht<br />

pstree<br />

Der Aufbau der Prozesshierarchie verdeutlicht sich bei Aufruf des Kommandos pstree, das durch die Option<br />

-h zusätzlich noch den aktuellen Prozess fett gedruckt hervorhebt.<br />

ps<br />

Die Informationen aller Prozesse werden, im jeweiligen Prozesskontrollblock zusammengefasst, von <strong>Linux</strong><br />

verwaltet. Auf die darin enthaltenen Informationen kann über die eindeutige Prozessnummer, auch PID<br />

genannt, zugegriffen werden. Mit Hilfe des Befehls ps können Sie die Prozessnummer ausfindig machen.<br />

Die Ausgabe der einzelnen Spalten haben folgende Bedeutung.<br />

PID ist die eindeutige Prozessnummer, die fortlaufend vergeben wird<br />

TTY ist das Terminal, auf dem der Prozess gestartet wurde<br />

STAT bezeichnet den Prozessstatus wie in Tabelle 17.2 auf Seite 166<br />

TIME gibt die vom Prozess verbrauchte Prozessorzeit an<br />

COMMAND steht für den Namen des Programms, das der Prozess ausführt<br />

Zudem gibt es weitere Optionen zum Kommando ps, die es erlauben, detaillierte Informationen über alle<br />

gerade laufenden Prozesse abzufragen. Sie stehen in Tabelle 17.3 auf Seite 166.<br />

165


17. Prozesskonzept<br />

166<br />

STAT Bedeutung Erläuterung<br />

R runnable Prozess ist lauffähig<br />

S sleeping Prozess wartet auf ein Ereignis<br />

D uninterruptable sleep Prozess befindet sich im nicht unterbrechbaren<br />

Schlafzustand<br />

T traced gestoppter Prozess<br />

Z Zombie process Prozessausführung wurde abgeschlossen, ohne Vaterprozess<br />

zu informieren.<br />

W no resident pages Prozess belegt keine Seiten im Arbeitsspeicher<br />

Tabelle 17.2.: Prozessstatus<br />

Option Beschreibung<br />

-a zeigt die Prozesse aller Benutzer<br />

-e zeigt die Prozessumgebung<br />

-l langes Format<br />

-m zeigt die Speichernutzung<br />

-r zeigt nur die laufenden Prozesse<br />

-u zeigt die Besitzer der Prozesse<br />

-x zeigt die Prozesse, die von keinem Terminal kontrolliert<br />

werden<br />

Tabelle 17.3.: ps - Parameter


17.3.2. Prozessterminierung<br />

17.3. Kommandos zur Prozessverwaltung<br />

Wenn die Ausführung eines Befehls zu lange dauert, durch eine fehlerhafte Funktion die Eingabemöglichkeit<br />

der Shell blockiert ist oder das Kommando versehentlich gestartet wurde, gibt es die Möglichkeit diesen<br />

Prozess gezielt mit Hilfe das Befehls kill zu beenden. Dieses Kommando sendet ein Signal an den Prozess,<br />

der dieses Signal mit der nächsten CPU - Zuteilung empfängt. Ein Prozess kann, in Abhängigkeit von der<br />

Mächtigkeit des Signals <strong>und</strong> der Programmierung des Programms, auf unterschiedliche Weise auf ein solches<br />

Signal reagieren. Es ist durchaus möglich, dass das gesendete Signal, wenn man vom Signal SIGKILL<br />

absieht, ignoriert wird.<br />

Die Syntax lautet<br />

kill [-signalnummer] pid<br />

Sie müssen dem Kommando kill also sowohl eine Signal-, als auch eine Prozessnummer mitgeben.<br />

Die Bedeutung sämtlicher Signalnummern erhalten Sie mit dem Befehl kill -l. Die Prozessnummern<br />

werden mit dem Befehl ps ausgegeben. Geben Sie keine Signalnummer an, wird das Signal 15 (SIGTERM)<br />

an den Prozess gesendet. Dieses Signal fordert den Prozess auf, die laufenden Tätigkeiten abzuschließen<br />

<strong>und</strong> sich zu beenden. Das Signal 9 (SIGKILL) bedeutet, dass der Prozess sofort beendet wird. Diese Option<br />

sollte gr<strong>und</strong>sätzlich als letzte Möglichkeit in Betracht kommen, da unter Umständen temporäre Dateien<br />

zurückbleiben.<br />

17.3.3. Vorder- <strong>und</strong> Hintergr<strong>und</strong>prozesse<br />

Wenn ein Anwender einen Befehl am Terminal eingibt, wird das dazugehörige Programm gestartet. Dieses<br />

wird abgearbeitet <strong>und</strong> anschließend wieder beendet. In dieser Zeit ist das Terminal aber durch den Prozess<br />

belegt. Da es Prozesse gibt, die entweder sehr viel Zeit für die Ausführung in Anspruch nehmen oder aufgr<strong>und</strong><br />

einer Umlenkung in eine Datei keine Ausgabe am Terminal verwenden, ist es möglich, diese auch im<br />

Hintergr<strong>und</strong> ablaufen zu lassen.<br />

Ein Prozess der gerade im Vordergr<strong>und</strong> abläuft, kann mit der Tastenkombination Strg + Z gestoppt werden.<br />

Anschließend kann dieser mit der Anweisung bg im Hintergr<strong>und</strong> ausgeführt werden. Natürlich kann ein<br />

Prozess von Anfang an in den Hintergr<strong>und</strong> verschoben werden. Um dies zu erreichen, hängen Sie ein & an<br />

die Befehlszeile an. Die Rückmeldung besteht aus zwei Nummern. Die Zahl in eckigen Klammern enthält<br />

eine neue ID, die die auf diesem Terminal gestarteten Hintergr<strong>und</strong>prozesse identifiziert. während die zweite<br />

Zahl ist die zugehörige PID darstellt.<br />

Jobs, die im Hintergr<strong>und</strong> arbeiten, lenken ihre Ausgaben (stdout, stderr) weiterhin auf das Terminal um.<br />

Wenn Sie im Vordergr<strong>und</strong> ungestört arbeiten wollen, müssen Sie diese Ausgabe selbst entsprechend umleiten.<br />

Mit dem Befehl jobs geben Sie die im Moment laufenden Hintergr<strong>und</strong>prozesse aus. Mit dem Befehl<br />

fg jobnummer können Sie den jeweiligen Prozess wieder in den Vordergr<strong>und</strong> holen. Außerdem ist es mit<br />

Strg + C möglich, den im Vordergr<strong>und</strong> laufenden Prozess zu beenden.<br />

Hintergr<strong>und</strong>prozesse bis zum Ende ausführen lassen<br />

Oftmals möchte man auf einem Rechner einen Prozess starten, der lange Zeit läuft, <strong>und</strong> keine Kommunikation<br />

mit dem Benutzer erfordert. Zum Beispiel langwierige Downloads aus dem Internet. <strong>Linux</strong> bietet die<br />

Möglichkeit, solche Prozesse zu starten, <strong>und</strong> sich daraufhin auszuloggen, ohne dass der Prozess beendet<br />

wird, wie es gewöhnlich der Fall ist. Dazu dient der Befehl nohup.<br />

Als Parameter dient der ganz normale Befehl, der ausgeführt werden soll. Um zum Beispiel die Homepage<br />

http://www.mytux.de auf die eigene Festplatte zu spiegeln, <strong>und</strong> dabei nicht anwesend sein zu müssen,<br />

verwende man:<br />

167


17. Prozesskonzept<br />

nohup wget -r http://www.mytux.de &<br />

Achtung<br />

Einen Prozess, den Sie mit nohup gestartet haben, können Sie nur noch durch kill beenden!<br />

17.4. Zeitgesteuerte Prozessausführung<br />

Aufgaben, die zu bestimmten Zeiten ausgeführt werden sollen, müssen vom System zeitlich gesteuert werden.<br />

Dies könnten beispielsweise Datensicherungen oder große Druckaufträge sein. Oft handelt es sich um<br />

Vorgänge, die sehr viel Systemleistung benötigen oder zumindest eine Ressource des System dermaßen stark<br />

in Anspruch nehmen, dass ein vernünftiges Arbeiten der übrigen Benutzer nicht mehr möglich ist. Denkbar<br />

sind auch Sicherungen, die außerhalb der üblichen Benutzungszeiten durchgeführt werden müssen, um<br />

Inkonsistenzen zu vermeiden.<br />

<strong>Linux</strong> bietet zu diesem Zweck drei Programme an, die in der Lage sind, solche Aufgaben zeitgesteuert<br />

abzuarbeiten.<br />

• at für die Ausführung von einmaligen Jobs<br />

• cron für Aufgaben, die wiederholt auftreten<br />

• batch für das Abarbeiten von Jobs, die nicht an einen festgelegten Zeitpunkt geb<strong>und</strong>en sind, sondern<br />

sich nach der Belastung der Systemressourcen richten<br />

17.4.1. atd<br />

Die Syntax lautet wie folgt.<br />

at [-l -d -f ] zeit<br />

Das Kommando at kennt die Optionen aus Tabelle 17.4 auf Seite 168.<br />

Option Beschreibung<br />

-l zeigt eine Liste der zur Ausführung anstehenden at - Jobs an<br />

-d ¡jobnummer¿ löscht den durch die Jobnummer spezifizierten Auftrag aus der<br />

Liste<br />

-f dateiname liest die auszuführenden Befehle aus der angegebenen Datei<br />

Tabelle 17.4.: at - Parameter<br />

Alternativ zu at -l können Sie auch das Kommando atq, zu at -d können Sie auch das Kommando<br />

atrm verwenden.<br />

Sie werden nach der Festlegung der Zeit aufgefordert, die gewünschten Aktionen anzugeben. Sind alle<br />

Anweisungen eingegeben worden, so können Sie die Eingabe mit Strg + D beenden. Wenn das System<br />

mit Hilfe des Befehls echo Nachrichten verschicken soll, so werden diese nicht am Terminal ausgegeben,<br />

sondern als mail an den jeweiligen Benutzer verschickt.<br />

168


17.4.2. batch<br />

17.4. Zeitgesteuerte Prozessausführung<br />

Dieser Befehl entspricht in seiner Anwendung dem bereits besprochenen Befehl at, nur dass hierbei auf eine<br />

Zeitangabe verzichtet werden kann, da die eingegebenen Kommandos ausgeführt werden, wenn das System<br />

nur wenig belastet wird.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

169


17. Prozesskonzept<br />

170


18. Netzwerk<br />

Abbildung 18.1.: Bildunterschrift<br />

Dieses Kapitel soll in die Gr<strong>und</strong>lagen der Netzwerktechnologie einführen <strong>und</strong> einen Einblick in die Konfiguration<br />

der zugehörigen Hardware <strong>und</strong> Schnittstellen geben. Die Besprechung der zur Fehlersuche <strong>und</strong><br />

-analyse eingesetzten Werkzeuge r<strong>und</strong>et das Ganze ab.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• Gr<strong>und</strong>lagenwissen über Netzwerktechnologie, -topologien <strong>und</strong> -protokolle,<br />

171


18. Netzwerk<br />

• die Einbindung der Hardware vorzunehmen <strong>und</strong> die korrekte Funktion zu überprüfen,<br />

• die Konfiguration der Netzwerkinterfaces durchzuführen <strong>und</strong> die zugehörigen Konfigurationsdateien<br />

zu lesen,<br />

• Werkzeuge zur Fehlersuche <strong>und</strong> -analyse einzusetzen.<br />

Dieses Kapitel handelt übrigens nicht die unterschiedlichen Dienste im Intra- <strong>und</strong> Internet ab. Diese werden<br />

im eigens dafür vorgesehenen Buch III ab Seite 213 abgehandelt.<br />

18.1. Gr<strong>und</strong>begriffe<br />

Elementare Gr<strong>und</strong>begriffe werden in der Tabelle 18.1 auf Seite 173.<br />

18.2. Gr<strong>und</strong>konfiguration<br />

Die Konfiguration des Netzwerkes kann bequem mit Hilfe von YaST2 durchgeführt werden. Alternativ<br />

können Sie das Netzwerk auch manuell in den zahlreichen Konfigurationsdateien einrichten. Dies ist zwar<br />

sehr viel interessanter, kann jedoch aufgr<strong>und</strong> der erhöhten Fehleranfälligkeit gr<strong>und</strong>sätzlich nicht empfohlen<br />

werden. Andererseits muss Ihnen bewusst sein, dass gerade die Konfiguration eines Netzwerkes beliebig<br />

komplex werden kann, sodass Sie mit allgemeinen Werkzeuge zur Systemkonfigurationen sehr schnell an<br />

Grenzen stoßen werden. Deshalb ist es notwendig die verschiedenen textbasierten Dateien zu kennen, die<br />

für die Konfiguration des Netzwerkes verantwortlich zeichnen.<br />

18.2.1. YaST2<br />

Melden Sie sich grafisch als root an <strong>und</strong> starten Sie YaST2 entweder aus der Konsole oder mit dem Dialog<br />

Ausführen, der durch Drücken der Tastenkombination Alt + F2 erscheint. Wählen Sie jetzt die Rubrik Netzwerk<br />

<strong>und</strong> dann den Eintrag Konfiguration der Netzwerkkarte. YaST2 liest jetzt die derzeitige Konfiguration<br />

aus den Dateien aus, was durchaus eine Weile dauern kann. Anschließend wird die bisherige gr<strong>und</strong>legende<br />

Netzwerkkonfiguration angezeigt. Wenn Sie noch keine Hardware in das System eingeb<strong>und</strong>en bzw. die<br />

Netzwerkkarte getauscht haben, begeben Sie sich zunächst in den Dialog Hardware. Hier klicken Sie auf<br />

Hinzufügen <strong>und</strong> folgen den Anweisungen von YaST2.<br />

Sie kommen anschließend zur Konfiguration der Netzwerkadresse <strong>und</strong> wählen hier die richtigen Optionen<br />

aus. Sollte in Ihrem Netz ein DHCP Server die Adressvergabe übernehmen, brauchen Sie die IP-Adresse<br />

nicht statisch vergeben. Andernfalls geben Sie eine solche <strong>und</strong> die zugehörige Subnetzmaske ein. Diese<br />

Nummern sind nicht beliebig. Jede IP-Adresse identifiziert die Netzwerkschnittstelle eines Rechners im<br />

Netz eindeutig.<br />

Im Dialog Rechnername <strong>und</strong> Nameserver geben Sie Ihrem Computer noch einen Namen <strong>und</strong> legen eine<br />

Domain für diesen fest. Sollte die Namensauflösung der IP-Adressen von im Netz integrierten Nameservern<br />

vorgenommen werden, tragen Sie deren Adressen unter Liste der Nameserver ein. Im letzten Dialog Routing<br />

wird das sogenannte Standardgateway festgelegt. Hierbei kann es sich beispielsweise um einen Router handeln,<br />

der zwischen sämtlichen Teilnetzen eines Firmennetzes vermittelt. Haben Sie keinen solchen Router<br />

ist hier die IP-Adresse Ihrer Netzwerkkarte einzutragen.<br />

Damit sind die Einstellungen soweit vollständig. Sie können jetzt mit Weiter zum Ausgangsdialog, wo<br />

Sie jetzt ein Interface eingetragen finden, zurückkehren <strong>und</strong> mit Beenden die Konfiguration des Netzwerk<br />

abschließen.<br />

172


18.2. Gr<strong>und</strong>konfiguration<br />

Begriff Erklärung<br />

Rechner- bzw. Hostname Der Name, den der Rechner im Netzwerk haben soll. Der Name<br />

sollte nicht länger als acht Zeichen umfassen <strong>und</strong> darf im lokalen<br />

Netzwerk noch nicht vergeben sein.<br />

Domainname Der Name der Domain, der der Rechner angehört. Domains dienen<br />

der Gliederung von Netzen.<br />

FQHN 1 Ein Rechner wird durch die Angabe seines Full Qualified Host<br />

Name adressiert. Dieser setzt sich aus Rechnername, Domainname<br />

<strong>und</strong> Top-Level-Domain zusammen. Die einzelnen Namen<br />

werden durch Punkte voneinander getrennt.<br />

FQDN 2 Ein Netz wird durch die Angabe seines Full Qualified Domain<br />

Name adressiert. Dieser setzt sich aus Domainname <strong>und</strong> Top-<br />

Level-Domain zusammen. Die einzelnen Namen werden durch<br />

Punkte voneinander getrennt.<br />

IP-Adresse Jede Netzwerkschnittstelle weist mindestens eine Adresse auf,<br />

die innerhalb des Netzwerkes eindeutig ist. Diese Adresse besteht<br />

nach dem derzeit gültigen Standard aus einer Sequenz von<br />

vier Bytes, die durch Punkte voneinander getrennt werden. Bei<br />

der Vergabe der Adressen ist zu bedenken, ob das lokale Netz mit<br />

dem Internet verb<strong>und</strong>en werden soll. Wenn dem so ist, muss der<br />

Adressbereich registriert werden oder man greift auf die privaten<br />

Adressbereiche zurück, da diese innerhalb des Internet nicht<br />

geroutet werden.<br />

Einige IP-Adressen sind nicht für Rechner bestimmt, sondern<br />

haben eine spezielle Funktion. Während die auf Null endende<br />

Adresse für das Netzwerk selbst steht, ist die auf 255 endende<br />

Adresse die dazugehörige Broadcast-Adresse.<br />

Gateway- bzw. Router-Adresse Ein Rechner, der in mehr als einem Netz hängt <strong>und</strong> so das Weiterleiten<br />

von Paketen vom einen in das andere Netz übernimmt,<br />

fungiert als Gateway bzw. Router.<br />

Subnetzmaske Die Subnetzmaske gibt an, in welchem Netzwerk eine gegebene<br />

IP-Adresse zu finden ist. Die IP-Adresse des Rechners wird mit<br />

der Subnetzmaske durch ein logisches UND verknüpft, wodurch<br />

der Hostanteil der Adresse ausgeblendet wird <strong>und</strong> somit nur noch<br />

die Adresse des Netzwerks übrig bleibt.<br />

Nameserver Der Nameserver stellt den Dienst DNS 3 zur Verfügung, mit dem<br />

sich Rechnernamen in IP-Adressen auflösen lassen. Soll bei der<br />

Namensauflösung auf einen Nameserver zurückgegriffen werden,<br />

muss dessen IP-Adresse bei der Netzwerkkonfiguration angegeben<br />

werden.<br />

Tabelle 18.1.: Netzwerk - Gr<strong>und</strong>begriffe<br />

173


18. Netzwerk<br />

YaST2 hält jetzt das Netzwerk an, nimmt die Eintragungen in den Konfigurationsdateien vor <strong>und</strong> startet<br />

anschließend das Netzwerk neu, so dass sofort die Funktion mittels ping überprüft werden kann. Manchmal<br />

kommt es trotz korrekter Konfiguration zu Fehlermeldungen. Stellen Sie dennoch zunächst mit ifconfig<br />

sicher, dass das Interface eingetragen wurde. Andererseits können beispielsweise auch Probleme beim Routing<br />

auftreten. Entweder Sie starten den Rechner in einem solchen Fall komplett durch oder versuchen durch<br />

gezieltes Neustarten der Dienste das Netzwerk zum laufen zu bringen. Fahren Sie hierfür zunächst das Netzwerk<br />

<strong>und</strong> dann das Routing herunter, um diese gleich im Anschluss in umgekehrter Reihenfolge wieder zu<br />

starten. Die Befehlsfolge lautet rcnetwork stop, rcroute stop, rcroute start <strong>und</strong> rcnetwork start.<br />

18.2.2. Konfigurationsdateien<br />

Dieser Abschnitt soll eine Übsicht über die Netzwerkkonfigurationsdateien bieten, deren Funktion erläutern<br />

<strong>und</strong> auf das verwendete Format eingehen. Solange jedoch Tools zur Konfiguration der jeweiligen Funktion<br />

zur Verfügung stehen, sollten Sie von einem manuellen Eingreifen in die Dateien absehen.<br />

/etc/rc.config In dieser zentralen Konfigurationsdatei wird der überwiegende Teil der Einstellung<br />

hinsichtlich des Netzwerkes vorgenommen. Jede Variable ist durchaus einleuchtend dokumentiert. Sollten<br />

an einigen Stellen manuelle Veränderungen vorgenommen worden sein, so ist es notwendig nach dem<br />

Speichern der Datei durch den Aufruf von SuSEconfig alle abhängigen Dateien <strong>und</strong> Bootskripte neu zu<br />

generieren bzw. zu aktualisieren. Bevor die Funktion des Netzwerkes überprüft werden kann, ist es zudem<br />

unerlässlich des Netzwerk mit dem Befehl rcnetwork restart neu zu starten. Haben Sie zudem einen Router<br />

angegeben, muss durch rcroute restart auch der Routing-Dämon durchgestartet werden.<br />

/etc/hosts In dieser Datei werden den Rechnernamen IP - Adressen zugeordnet. Wird kein Nameserver<br />

verwendet, ist es notwendig sämtliche Rechner des Netzwerkes hier einzutragen, insofern überhaupt Namen<br />

verwendet werden sollen. Je Rechner wird hierfür eine Zeile bestehend aus IP - Adresse, dem voll qualifizierten<br />

Hostnamen <strong>und</strong> dem Rechnernamen in die Datei eingetragen. Dabei werden die Einträge durch<br />

Leerzeichen voneinander getrennt. Kommentare werden durch ein # eingeleitet.<br />

/etc/networks Hier werden Netzwerknamen in Netzwerkadressen umgesetzt. Im Gegensatz zur /etc/hosts<br />

stehen hier die Namen vor den Adressen.<br />

/etc/host.conf Diese Datei, die jedoch nur für ältere Programme, die noch gegen die libc4 oder die<br />

libc5 gelinkt sind, zuständig ist, steuert die Auflösung von Rechner- <strong>und</strong> Netzwerknamen. Die möglichen<br />

Parameter sind in Tabelle 18.2 auf Seite 175 aufgeführt.<br />

/etc/nsswitch.conf Ähnlich wie in der eben besprochenen Datei, wird in der Datei /etc/nsswitch.conf<br />

festgelegt, in welcher Reihenfolge bestimmte Informationen abgefragt werden. Aktuelle Programme, die<br />

bereits gegen die glibc gelinkt sind, greifen auf die Einstellungen des Name Service Switches zurück. Die<br />

ansprechbaren Datenbanken sind in der Tabelle 18.3 auf Seite 176 aufgeführt. Die Schalter aus Tabelle 18.4<br />

auf Seite 176 bestimmen, wo nach den jeweiligen Informationen gesucht werden soll.<br />

/etc/nscd.conf Der Name Service Cache Dämon wird über diese Datei konfiguriert. In diesen Service<br />

sind die Dateien passwd, groups <strong>und</strong> hosts eingeb<strong>und</strong>en. Der Daemon muss bei Veränderungen an der<br />

/etc/nscd.conf bzw. an /etc/resolv.conf mit dem Befehl rcnscd restart neu gestartet werden.<br />

/etc/resolv.conf Diese Datei ist ebenfalls für die Konfiguration der Auflösung von Rechnernamen<br />

verantwortlich. Es wird angegeben, welcher Domain der Rechner angehört <strong>und</strong> wie die Adresse des Nameservers<br />

ist, der angesprochen werden soll. Durch das Schlüsselwort nameserver eingeleitete Zeilen machen<br />

die verfügbaren Nameserver bekannt. Kommentare werden mit # eingeleitet.<br />

/etc/HOSTNAME Hier wird der Name des Rechners eingetragen, weshalb diese Datei nur eine Zeile enthalten<br />

darf. Verschiedene Skripten werten beim Start diese Datei, die automatisch aufgr<strong>und</strong> der Einstellungen<br />

in /etc/rc.config generiert wird, aus.<br />

174


18.3. Häufige Netzwerkbefehle <strong>und</strong> Fehlersuche<br />

Parameter Funktion<br />

order Legt fest, in welcher Reihenfolge die Dienste zum<br />

Auflösen eines Namens angesprochen werden. Mögliche<br />

Argumente sind durch Leerzeichen oder Kommata voneinander<br />

getrennt. Beispielhafte Einträge sind: hosts: durchsucht<br />

die Datei /etc/hosts bind: spricht einen Nameserver<br />

an nis: greift auf eine NIS Datenbank zu<br />

multi Bestimmt, ob ein in /etc/hosts eingetragener Rechner mehrere<br />

IP - Adressen haben darf.<br />

trim ¡domainname¿ Der angegebene Domainname wird vor dem Auflösen des<br />

Rechnernamens von diesem abgeschnitten, wenn der angegebene<br />

Rechnername diese Domain enthält. Diese Option<br />

ist von Nutzen, wenn in der Datei /etc/hosts die Rechnernamen<br />

ohne Domainnamen gepflegt sind.<br />

18.2.3. Startup - Skripten<br />

Tabelle 18.2.: /etc/host.conf<br />

Während des Hochfahrens des Rechners werden, wie bereits im Kapitel “Bootkonzept” erläutert, verschiedene<br />

Skripte angestoßen. Unter diesen sind auch etliche die Netzwerkprogramme starten, sobald in den<br />

entsprechenden Runlevel gewechselt wird. Dabei werden die angesprochenen Konfigurationsdateien ausgewertet.<br />

Eine Übersicht in Tabelle 18.5 auf Seite 177.<br />

18.3. Häufige Netzwerkbefehle <strong>und</strong> Fehlersuche<br />

In diesem Abschnitt lernen Sie verschiedene Befehle, die das Netzwerk betreffen, kennen. Gleich zu Beginn<br />

werden Ihnen ifconfig <strong>und</strong> ping vorgestellt, weil diese in der Regel zur Fehlersuche verwendet werden.<br />

Anbei werden auch verschiedene Fehlerquellen angesprochen. Danach folgen andere remote Befehle, die<br />

jedoch nicht unbedingt auf einem Standardsystem installiert sind.<br />

18.3.1. route<br />

Mit dem Befehl route können Sie die Routing-Tabelle des Rechners anzeigen <strong>und</strong> verändern lassen. Die<br />

Routing Tabelle bestimmt, wohinn Ihre TCP/IP Pakete verschickt werden. Sie können dazu sogenannte<br />

Gateways definieren, die Ihre Pakete an andere Netzwerkbereiche weiter verschicken. In der Praxis wird<br />

diese Tabelle von SuSE Skripten <strong>und</strong> Masken gesetzt, aber wie oben beschrieben könnten auch Sie in die<br />

Situation kommen, dass Sie die Routing-Tabelle selbst aufsetzen müssen.<br />

Vorgehensweise<br />

Die Routingtabelle wird beim Rechnerstart normalerweise, wie in der Datei<br />

/etc/route.conf angegeben, aufgebaut. Genauere Erläuterungen zu dieser Datei entnehmen Sie bitte der<br />

man-Page zu route.conf mit dem Befehl man route.conf.<br />

Um die Routingtabelle zur Laufzeit einzurichten gehen Sie folgendermassen vor:<br />

1. Lassen Sie sich die Routing-Tabelle ausgeben:<br />

route -n<br />

175


18. Netzwerk<br />

Datenbank Beschreibung<br />

aliases Mail - Aliase<br />

ethers Ethernet - Adressen<br />

group Liste mit den Gruppennamen<br />

hosts IP - Adressen <strong>und</strong> Hostnamen<br />

netgroup Zusammenfassung von Rechnern, Benutzern <strong>und</strong> Domains zu einer<br />

Netzwerkgruppe<br />

network Netzwerknamen <strong>und</strong> -adressen<br />

passwd Liste mit den Benutzernamen<br />

protocols Netzwerk-Protokolle<br />

publickey Öffentliche <strong>und</strong> geheime Schlüssel für sichere Remote Procedure<br />

Calls (Secure RPC), beispielsweise verwendet von NFS <strong>und</strong><br />

NIS+<br />

rpc Remote Procedure Call - Namen <strong>und</strong> - Adressen<br />

services Netzwerkdienste mit Portnummern <strong>und</strong> Protokollnamen<br />

shadow Passwörter der Benutzer<br />

Tabelle 18.3.: Datenbanken<br />

Schalter Beschreibung<br />

files auf Dateien zugreifen<br />

db auf Datenbanken zugreifen<br />

nis, nisplus über NIS Datenbanken zugreifen<br />

dns auf Dienst DNS zurückgreifen (nur bei hosts <strong>und</strong> networks verwendbar)<br />

compat nur bei passwd, shadow <strong>und</strong> group verwendbar<br />

Tabelle 18.4.: Wo soll gesucht werden<br />

2. Zusätzliche Einträge können Sie wie folgt einfügen. Hier wird ein Eintrag für das lokale Netzwerk<br />

gesetzt:<br />

route add -net 192.168.0.0 netmask 255.255.255.0 eth0<br />

3. Für alle weiteren Adressen wird hier als Gateway 192.168.0.1 gesetzt:<br />

route add default gw 192.168.0.1 eth0<br />

Die genaue Syntax von route ist analog zu den Einträgen der /etc/route.conf.<br />

18.3.2. nslookup<br />

Sie können mit Hilfe von nslookup Ihren DNS-Server fragen, in welche IP-Adresse eine URI übersetzt<br />

wird. Dazu geben Sie einfach ein:<br />

nslookup [URI]<br />

zum Beispiel<br />

nslookup www.petter-residenz.de<br />

176


18.3.3. ping<br />

18.3. Häufige Netzwerkbefehle <strong>und</strong> Fehlersuche<br />

Skriptname Beschreibung<br />

/etc/init.d/network übernimmt die Konfiguration der Netzwerk Hard- <strong>und</strong><br />

Software des Systems <strong>und</strong> wertet die Variablen der<br />

/etc/rc.config aus<br />

/etc/init.d/route setzt die statischen Routen im Netzwerk<br />

/etc/init.d/inetd<br />

/etc/init.d/portmap startet den Portmapper, der benötigt wird, um auf RPC aufsetzende<br />

Server verwenden zu können<br />

/etc/init.d/nfsserver startet den NFS Server<br />

/etc/init.d/sendmail kontrolliert sendmail<br />

/etc/init.d/ypserv startet den NIS Server<br />

/etc/init.d/ypbind startet den NIS Client<br />

Tabelle 18.5.: Startup - Skripts im Überblick<br />

Ping wird dazu verwendet, zu testen, ob eine Netzwerkverbindung besteht oder nicht <strong>und</strong> wird aus diesem<br />

Gr<strong>und</strong> sehr häufig beim Einrichten von Netzwerken zur Fehlersuche benutzt. Wenn die Namensauflösung<br />

funktionstüchtig ist, kann auch mit Rechnernamen gearbeitet werden.<br />

ping <br />

ping <br />

Ein paar häufige Fehlerquellen sehen Sie in Tabelle 18.6 auf Seite 178:<br />

18.3.4. traceroute<br />

Mit diesem Befehl können Sie den Weg von einem Rechner zu einem anderen nachvollziehen. Sie erhalten<br />

nach Ausführung des Kommandos eine Route, über welche Rechner die Verbindung weitergeleitet wird.<br />

traceroute rechnername<br />

18.3.5. rusers<br />

Dieser Befehl zeigt Ihnen, welche Benutzer, an welchen Systemen Ihres Netzwerks angemeldet sind.<br />

rusers [-al]<br />

-a zeigt alle Rechner im Netzwerk, auch wenn dort niemand angemeldet ist. -l ergibt eine detaillierte<br />

Auflistung<br />

Das Kommando rusers erfordert, dass auf allen beteiligten Hosts der Dämon rpc.rusersd läuft.<br />

18.3.6. rup<br />

Dieser Befehl zeigt eine Liste der im Moment aktiven Rechner im Netz.<br />

rup [host | -u | -v]<br />

177


18. Netzwerk<br />

178<br />

Fehler Lösung<br />

Man kann einen Rechner über dessen<br />

IP-Adresse anpingen, aber mit dessen<br />

Name funktioniert es nicht.<br />

Der Rechner kann sich zwar selbst anpingen,<br />

ist aber von außen nicht erreichbar.<br />

Das Interface erscheint nicht, wenn<br />

man den Befehl ifconfig eingibt.<br />

Obwohl alles richtig konfiguriert ist,<br />

kann ich mich remote, beispielsweise<br />

per telnet, nicht am anderen Rechner<br />

anmelden.<br />

Eine NFS Freigabe wurde auf dem Server<br />

eingerichtet, ein neuer Client kann<br />

diese Freigabe jedoch nicht mounten,<br />

da ihm Berechtigungen fehlen.<br />

Die Namensauflösung arbeitet nicht korrekt.<br />

Sehen Sie sich die Eintragungen in der<br />

/etc/hosts an <strong>und</strong> kontrollieren Sie die IP-<br />

Adresse des Nameservers insofern Sie einen<br />

verwenden.<br />

Das Routing funktioniert nicht. Dies kann<br />

zwei Ursachen haben. Entweder stimmt die<br />

IP-Adresse des Routers / Standardgateways<br />

nicht oder die Routingfunktion wurde nicht<br />

ordentlich hochgefahren. Versuchen Sie einmal<br />

den Rechner durchzustarten.<br />

Vermeiden Sie es für ein <strong>und</strong> dieselbe Konfiguration<br />

zwei unterschiedliche Werkzeuge<br />

wie YaST <strong>und</strong> YaST2 zu verwenden. Löschen<br />

Sie das Interface nochmals komplett <strong>und</strong> richten<br />

Sie es erneut ein. Beachten Sie auch die<br />

Ausgaben des jeweiligen Tools.<br />

Häufigste Fehlerursache ist an dieser Stelle<br />

eine veraltete Datei /etc/hosts, in der ja der IP-<br />

Adresse ein Rechnername zugeordnet wird.<br />

Wenn der Name des anfragenden Rechners<br />

vorhanden ist, die IP-Adresse aber nicht übereinstimmt,<br />

oder die IP-Adresse zwar gepflegt<br />

ist, jedoch ein anderer Name zugeordnet wurde,<br />

dann wird die Anmeldung verweigert.<br />

Die zentrale Steuerungsdatei für die Berechtigungen<br />

auf alle NFS Freigaben ist die<br />

/etc/exports. Hier müssen sämtliche Rechner,<br />

die das Verzeichnis des Servers einbinden<br />

wollen, aufgeführt sein. Eine korrekte Konfiguration<br />

kann mit YaST2 ohne große Schwierigkeiten<br />

durchgeführt werden. (vgl. auch Kapitel<br />

”NFS-Server <strong>und</strong> -Client Konfiguration”<br />

Tabelle 18.6.: Fehler im Netzwerk


18.3. Häufige Netzwerkbefehle <strong>und</strong> Fehlersuche<br />

Das Argument host wird angegeben, wenn Sie lediglich über einen einzelnen Host Informationen anfordern<br />

wollen. Die Option -v liefert die Versionsnummer <strong>und</strong> beendet anschließend das Programm. Informationen<br />

über die angemeldeten Benutzer erhalten Sie mit der Option -u.<br />

Das Kommando rup erfordert, dass auf allen beteiligten Rechnern der Dämon<br />

rpc.rstatd läuft (rup steht für remote up).<br />

18.3.7. rlogin<br />

Dieser Befehl ermöglicht es Ihnen, sich an einem Remote - Rechner anzumelden. Mit der Option -l username<br />

können Sie sich dort auch unter einem anderen Benutzernamen als dem aktuellen anmelden (rlogin steht für<br />

remote login).<br />

rlogin <br />

rlogin <br />

18.3.8. rlogin/rsh<br />

Mit diesem Befehl können Sie Befehle auf anderen Rechnern ausführen, d.h. Sie können dort Prozesse<br />

ablaufen lassen (rsh steht für remote shell). Dieser Befehl ist veraltet - Sie sollten die Alternativen slogin/ssh<br />

hernehmen<br />

rsh [-l Benutzername] remote-rechner | ip-adresse [befehl]<br />

Die Option -l ermöglicht es, das gewünschte Kommando unter einem anderen Benutzernamen ausführen zu<br />

lassen. Wenn Sie keinen Befehl angeben, werden Sie mittels rlogin am Fremdrechner angemeldet.<br />

18.3.9. rcp<br />

Mit diesem Befehl ist es möglich Dateien <strong>und</strong> Verzeichnisse von einem entfernten Rechner auf den eigenen<br />

Rechner zu kopieren (rcp steht für remote copy).Dieser Befehl ist veraltet - Sie sollten die Alternative scp<br />

hernehmen.<br />

rcp [-r] remote-rechner:/pfadname /zielpfad<br />

Die Option -r erlaubt eine rekursive Kopie, die sämtliche Unterverzeichnisse mit einschließt.<br />

18.3.10. slogin/ssh/scp<br />

Dieser Befehl ermöglicht es einem User, sich auf einem anderen Rechner einzuloggen. Dazu muss zwischen<br />

beiden Rechnern eine funktionierende TCP/IP Verbindung bestehen, wie bei rlogin/rsh. slogin/ssh<br />

ist als Ablösung von rlogin/rsh gedacht, da rlogin/rsh Verbindungen unverschlüsselt die Daten übertragen.<br />

Dadurch wird es für Hacker leicht, Passwörter <strong>und</strong> persönliche Daten des Benutzers abzuhören. slogin/ssh<br />

- Verbindungen werden mit dem Public-/Private-Key verfahren verschlüsselt, <strong>und</strong> sind damit erheblich viel<br />

sicherer als rlogin/rsh.<br />

Benutzung der s-Dienste<br />

Zur Verwendung der s-Dienste müssen Sie eigentlich nichts einrichten. Die Syntax entspricht der von<br />

rsh/rcp:<br />

179


18. Netzwerk<br />

slogin [-r] remoterechner [-l benutzer]<br />

bzw.<br />

ssh [-l benutzer] remoterechner befehl<br />

bzw.<br />

scp [-r] [benutzer@]remote-rechner:/pfadname /zielpfad<br />

Einrichtung von Passphrases<br />

Die s-Dienste unterstützen die Authentifizierung über Public-/Private-Keys in Verbindung mit Passphrases.<br />

Dazu muss der Benutzer ein Public-/Private-Key Paar erzeugen. Dazu dient der Befehl:<br />

ssh-keygen [-t rsa/dsa]<br />

z.B.: ssh-keygen -t dsa<br />

Im Laufe dieses Programmaufrufs werden Sie nach einem Dateinamen für den Private-Key gefragt, den Sie<br />

durch drücken auf RETURN auf seinem Standardwert<br />

( ˜/.ssh/id_dsa) belassen sollten. Als nächstes fragt Sie das Programm nach einer sogenannten “Passphrase”,<br />

die Sie beliebig vergeben können. Achtung: Sie werden in Zukunft beim Login über ssh immer<br />

nach diesem Passphrase gefragt werden, also merken Sie sich diese gut. Sie können auch gar kein Passphrase<br />

definieren, in dem Sie einfach auf RETURN drücken. Dadurch werden Sie bei Logins über ssh nicht<br />

mehr nach einem Passwort gefragt werden, <strong>und</strong> die Authentifizierung läuft komplett automatisch ab.<br />

ss-keygen erzeugt in Ihrem Verzeichnis ˜/.ssh die Dateien id_dsa <strong>und</strong> id_dsa.pub. Letztere enthält Ihren<br />

öffentlichen Schlüssel. Um sich vom Rechner charlotte auf dem Rechner babette in Zukunft ohne<br />

Passwort einloggen zu können, kopieren Sie diesen Schlüssel in Ihr ˜/ Verzeichnis auf babette <strong>und</strong> fügen<br />

den Inhalt dieser Datei in eine neue Zeile der Datei ˜/.ssh/authorized_keys2 auf babette hinzu:<br />

auf charlotte:<br />

ssh-keygen -t dsa<br />

scp .ssh/id_dsa.pub michael@babette:˜<br />

<strong>und</strong> auf babette:<br />

cat id_dsa.pub >> .ssh/authorized_keys2<br />

Zusätzlich sollten Sie darauf achten, dass die Rechtevergabe in den .ssh Verzeichnissen stimmen, sonst<br />

nehmen die s-Dienste auch in Zukunft die gewöhnliche Authentifizierung über Passworteingabe her. Typischerweise<br />

sollten alle Dateien in .ssh nur für Sie lesbar sein (600). Das Verzeichnis .ssh selbst sollte auch<br />

für andere lesbar sein (744).<br />

Sie sollten sich nun per Public/Private-Key verfahren auf babette einloggen können.<br />

180<br />

• Dieser Mechanismus eignet sich ideal dazu, skriptgesteuert Befehle auf viele Rechner zu verteilen.<br />

Allerdings sollten Sie beachten, dass Sie auf diese Weise in Zukunft sehr genau auf Ihre Login-Shell<br />

“aufpassen” sollten, da z.B.: in der Mittagspause ein “Kollege” durch Missbrauch Ihres Logins Zugang<br />

nicht nur auf Ihrer lokalen Maschine sondern auch auf allen von Ihnen mit Schlüsseln präparierten<br />

Rechnern erlangen kann.


18.4. TCP / IP Protokolle <strong>und</strong> darauf aufsetzende Dienste<br />

• Auf SuSE-Distributionen ist in der Datei /etc/ssh/ssh_config die Voreinstellung Protocol 1,2 getroffen.<br />

Dadurch versucht ssh sich über das ssh-Protokoll 1 zu authentifizieren. Wenn Sie jedoch Ihre<br />

Schlüssel wie empfohlen im Protokoll 2 erzeugt haben (mit dem Parameter -t dsa), dann funktioniert<br />

der Schlüsselaustausch nicht. Wenn Sie auf dieser Maschine root - Rechte haben, sollten Sie diese<br />

Option daher ausbessern. Wenn Sie nur einen gewöhnlichen Account besitzen können Sie entweder<br />

selbst eine Datei .ssh/config anlegen, oder ssh in Zukunft immer mit dem Parameter -2 aufrufen.<br />

• Auch auf die Gefahr der Einrichtung einer “Backdoor”, durch unerwünschte Schlüssel in Ihrer .ssh/authorized_ke<br />

sei hiermit hingewiesen<br />

18.4. TCP / IP Protokolle <strong>und</strong> darauf aufsetzende Dienste<br />

Gr<strong>und</strong>lage für den Netzwerkbetrieb ist unter <strong>Linux</strong> in der Regel das TCP / IP Protokoll. Rechner sind<br />

innerhalb eines Netzwerks über ihre IP - Adresse ggf. aber auch über einen vergebenen Namen erreichbar.<br />

Die IP - Adresse ist eindeutig, da sie innerhalb des Netzwerks nur ein Gerät identifiziert. Dieses Gerät<br />

kann sowohl eine Netzwerkkarte in einem PC, eine Schnittstelle zum Großrechner, ein Terminal oder ein<br />

Drucker sein. Die IP - Adresse ist in vier Elemente mit jeweils acht Bit Länge unterteilt, was der dezimalen<br />

Darstellung 0 bis 255 entspricht. Der gesamte Adressraum wird in Klassen unterteilt, die sich voneinander<br />

dadurch unterscheiden, dass der Netzanteil einer Adresse mit steigender Klasse zunimmt. Der Rechneranteil<br />

nimmt dagegen immer weiter ab.<br />

18.4.1. Dienst telnet<br />

Mit diesem Dienst kann eine Terminalemulation über das Netz realisiert werden. Der Aufruf kann mit<br />

Hilfe der IP - Adresse stattfinden oder bei aktivierter Namensauflösung mit dem Namen des gewünschten<br />

Rechners.<br />

telnet <br />

telnet <br />

Der Remote - Rechner meldet sich dann mit einem Login - Prompt, <strong>und</strong> Sie können sich durch Eingabe von<br />

Benutzernamen <strong>und</strong> Passwort am Remote - Rechner anmelden. Eine sofortige Anmeldung als root ist aus<br />

Sicherheitsgründen nicht möglich, da telnet die Passwörter unverschlüsselt überträgt. Mit exit oder Strg + D<br />

beenden Sie die telnet Verbindung.<br />

Eine hartnäckige Fehlerquelle ist immer wieder eine schlecht gepflegte Datei<br />

/etc/hosts, in der veralteten IP-Adressen noch älteren Rechnernamen zugeordnet werden. Der remote<br />

Rechner vergleicht den Namen des anfragenden Rechners mit dem der IP-Adresse entsprechenden Namen<br />

in seiner /etc/hosts. Treten hier Ungereimtheiten auf, kommt eine Verbindung garnicht erst zustande.<br />

18.4.2. Dienst ftp<br />

Dieser Dienst ermöglicht die Dateiübertragung zwischen beliebigen Systemen, die über eine Netzverbindung<br />

verfügen. Die Verbindung kann hier ebenfalls mit der IP - Adresse bzw. dem Namen des Remote<br />

Rechners aufgebaut werden.<br />

ftp <br />

ftp <br />

181


18. Netzwerk<br />

Wenn es sich nicht um anonymous ftp handelt, müssen Sie sich auch hier mit einem Benutzernamen <strong>und</strong><br />

zugehörigem Passwort am Remote-System authentifizieren. Nach der Anmeldung meldet sich ftp mit einem<br />

eigenen Prompt, an dem die ftp Befehle eingegeben werden können. In den meisten Fällen werden die<br />

beiden Befehle put <strong>und</strong> get völlig ausreichen. Ersterer ist für das Kopieren von Daten vom lokalen Rechner<br />

auf den Remote Rechner zu verwenden, letzterer zum Kopieren von Daten in der umgekehrten Richtung.<br />

Dabei sollte beachtet werden, dass für das Kopieren von binären Dateien zuerst der Transfertyp mit dem<br />

ftp Kommando bin auf binär gesetzt wird. Mit den ftp Kommandos quit oder bye beenden Sie die Sitzung.<br />

Hilfe erhalten Sie durch die Eingabe eines ? am ftp Prompt.<br />

Wenn Sie sich lediglich eine Datei von einem FTP-Server herunterladen wollen, so können Sie auf die<br />

interaktive FTP-Sitzung verzichten <strong>und</strong> können ftp im Batchmodus aufrufen. Dabei geben Sie einmal alle<br />

Parameter für den Download beim Aufruf des Programmes an, <strong>und</strong> haben danach keine weiteren Eingaben<br />

mehr zu tätigen. Die Syntax lautet:<br />

ftp ftp://[User][:Passwort]@[FTP-Server]/[Dateiname]<br />

zum Beispiel<br />

ftp ftp://bill:Weltherrschaft@ftp.kleinweich.com/overkill.exe<br />

Im letzten Beispiel lädt Benutzer Bill vom FTP-Server ftp.kleinweich.com mit dem Passwort “Weltherrschaft”<br />

die Datei overkill.exe herunter.<br />

Die Angabe eines Passworts ist allerdings nur im Notfall anzuraten, schliesslich kann jeder andere Benutzer<br />

mit einem einfachen top Befehl den kompletten Programmaufruf inklusive ihrem Passwort (!) direkt<br />

ablesen. Indem Sie auf die Angabe des Passwortes verzichten, zwingen Sie das Programm dazu, Sie nochmal<br />

explizit danach zu fragen, was bewirkt, dass sich das Passwort nicht mehr im Aufrufstring befindet.<br />

Eine Attacke durch einen Sniffer können Sie dadurch allerdings auch nicht ausschliessen, da ftp ein<br />

unverschlüsselndes Protokoll ist. Daher sei hier nochmals auf die SSH-Dienste verwiesen, die diese Mängel<br />

nicht aufweisen.<br />

18.4.3. Ausführen von X-Anwendungen<br />

franzi ist der Server, die Anwendungen sollen auf diesem ausgeführt werden, aber am lokalen Rechner<br />

angezeigt werden.<br />

alex ist der lokale Rechner<br />

Anweisungen:<br />

xhost +franzi<br />

rlogin franzi<br />

export DISPLAY=alex:0<br />

Programme werden jetzt auf alex angezeigt.<br />

Übungen<br />

1. Nennen Sie Dienste, die die Nutzung gemeinsamer Ressourcen im Netzwerk ermöglichen?<br />

2. Welche Voraussetzungen müssen erfüllt sein, damit ein Netzwerk für einen Anwender transparent ist?<br />

3. Mit welchem Befehl können Sie den Weg von einem Rechner zu einem anderen nachvollziehen?<br />

182


4. Was ist der erste Schritt zur Fehleranalyse im Netzwerk?<br />

5. Wie erhalten Sie eine Liste von aktiven Rechnern im Netz?<br />

18.4. TCP / IP Protokolle <strong>und</strong> darauf aufsetzende Dienste<br />

6. Auf welche unterschiedliche Arten können Sie sich remote auf anderen Rechnern einloggen?<br />

7. Mit welchem Tool können Sie Samba bequem per grafischer Oberfläche konfigurieren?<br />

8. Was bedeutet die Einstellung security = user in der Datei /etc/smb.conf?<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

Überbleibsel aus der alten Ausgabe 0.5 Ob das Interface korrekt erkannt <strong>und</strong> in den Kernel eingeb<strong>und</strong>en<br />

wurde, kann mit Hilfe des Befehls ifconfig nachvollzogen werden. Zum anderen ist in diesem Zusammenhang<br />

auch die Datei /etc/modules.conf interessant, in der der Name des Moduls als Alias eingetragen<br />

sein muss. Trifft dies zu, so ist der Kernel korrekt für das Netzwerk konfiguriert.<br />

183


18. Netzwerk<br />

184


19. Shellprogrammierung<br />

Während der Anwender nur selten mit ihr in Berührung kommt, ist die Shell 1 für den Administrator ein<br />

unerlässliches Werkzeug bei der täglichen Arbeit. Nicht zuletzt deshalb, weil sie es mit ihrer Skriptsprache<br />

ermöglicht, administrative Vorgänge zu automatisieren <strong>und</strong> eigene Anforderungen selbst auf einfachem<br />

Wege zu realisieren.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• mit der Shell umzugehen,<br />

• eigene Skripten zu schreiben,<br />

• Fehler in Shellskripten zu finden <strong>und</strong> auszubessern.<br />

19.1. Motivation<br />

Die Shell ist <strong>und</strong> bleibt auch zu Zeiten grafischer Oberflächen ein äußerst nützliches Werkzeug. Sie stellt<br />

dabei nicht nur eine vielfältige Auswahl an Kommandos zur Verfügung, sondern bietet mit der sogenannten<br />

Shellskript-Programmierung die Möglichkeit durchaus komplexe Vorgänge zu automatisieren. Die folgende<br />

Einführung soll Ihnen hierzu einen Überblick vermitteln, kann aber sicherlich in der jetzigen Form nicht ein<br />

gutes Buch bzw. eine umfangreiche Referenz zum Thema ersetzen.<br />

19.2. Shell - Allgemeinwissen<br />

Die Shell ist ein sogenannter Kommandointerpreter, der die Aufgabe hat, Eingaben vom Benutzer entgegen<br />

zunehmen, auszuwerten, auszuführen <strong>und</strong> anschließend die Ausgaben wieder zurückzuliefern (interaktive<br />

Shell). Außerdem stellt sie eine Umgebung zur Ausführung von Shell-Skripten, die grunsätzlich in einer<br />

eigenen Shell laufen, dar (nicht interaktive Shell). Darüber hinaus verwaltet die Shell sämtliche Systemvariablen<br />

<strong>und</strong> unterstützt benutzerfre<strong>und</strong>liche Mechanismen wie Pfad- <strong>und</strong> Kommandovervollständigung.<br />

Nicht nicht zu vergessen, die Auswertung der Wildcards, die Steuerung der Prozesse, die Verwendung regulärer<br />

Ausdrücke <strong>und</strong> die Möglichkeiten zur Ablaufsteuerung. Unter <strong>Linux</strong> ist die Standardshell die Bash<br />

(Bourne Again Shell), auf die sich die nachfolgenden Erläuterungen ausschließlich beschränken.<br />

19.3. Shellskripte - Gr<strong>und</strong>lagen<br />

Ein Shellskript ist im Gr<strong>und</strong>e nichts anderes als eine Textdatei, die mehrere Kommandos enthält. Dabei stellt<br />

es selbst ein Kommando dar <strong>und</strong> kann, wie ein Systemkommando, auch mit Parametern aufgerufen werden.<br />

1 die nachfolgenden Ausführungen beziehen sich ausschließlich auf die Bash, die unter <strong>Linux</strong> standardmäßig verwendet wird<br />

185


19. Shellprogrammierung<br />

Häufig gebrauchte Kommandofolgen können so leicht zusammengefasst <strong>und</strong> insbesondere admininstrative<br />

Vorgänge automatisiert werden.<br />

Um zu einem funktionsfähigen Skript zu kommen, erstellen Sie zunächst eine Textdatei, wobei darauf zu<br />

achten ist, dass bereits die Benennung auf den Zweck des Skriptes hinweist <strong>und</strong> dass die Dateiendung<br />

möglichst .sh ist. Anschließend kann das Skript mit einem beliebigen Editor bearbeitet werden. Zuletzt<br />

müssen natürlich noch die Ausführungsrechte gesetzt werden.<br />

touch skript.sh<br />

vi skript.sh<br />

chmod u+x skript.sh<br />

Jetzt ist das Skript zwar gr<strong>und</strong>sätzlich ausführbar, allerdings zeigt die Pfadvariable nur selten auf das<br />

aktuelle Verzeichnis, so dass das Skript wie folgt angestartet werden muss.<br />

./skript.sh<br />

Als Alternative hierzu kann auch eine neue Shell gestartet werden, der der Name des Skriptes als Parameter<br />

übergeben wird.<br />

bash skript.sh<br />

19.4. Skriptsprache - Bestandteile<br />

Der Sprachumfang der Skriptsprache dürfte im Vergleich zu anderen Programmiersprachen verhältnismäßig<br />

klein sein. Dabei sind Ihnen sicher bereits einige Sprachelemente aus anderen Umgebungen bekannt. Die<br />

Mächtigkeit der Shellskript-Programmierung geht indes nicht von diesen Elementen aus, sondern beruht auf<br />

den zahllosen Kommandos, die auf der Kommandozeile zur Verfügung stehen. Ein einfaches Beispielskript<br />

soll Ihnen die wesentlichen Komponenten aufzeigen <strong>und</strong> erläutern.<br />

#!/bin/bash Festlegung des verwendeten Shell-Interpreters<br />

#Kommentarzeilen<br />

ls -al; who; cp einfache Kommandos <strong>und</strong> deren Optionen<br />

$varname für eigene nur im eigenen Skript gültige Variablen<br />

$VARNAME für Systemvariablen (vgl. man bash)<br />

$n für Übergabeparameter Variablen <strong>und</strong> Übergabeparameter<br />

set; unset Setzen von Übergabeparametern <strong>und</strong> Löschen von Variableninhalten<br />

if bedingung; then kommandos; [ elif bedingung; then kommandos; ] ... [ else kommandos; ] fi<br />

case wort in [ [(] inhalt [ | inhalt ] ... ) kommandos;; ] ... esac Verzweigungen<br />

> bzw. >> <strong>und</strong> < bzw.


19.4.1. Festlegung des Shell-Interpreters<br />

19.4. Skriptsprache - Bestandteile<br />

Gleich in der ersten Zeile jedes Skriptes ist die zu verwendende Shell zu nennen. In dieser Umgebung wird<br />

dann das Skript ausgeführt. In der Regel werden Sie hier Angaben der Form #!/bin/bash bzw. #!/bin/sh<br />

finden. Dabei ist /bin/sh in der Regel nur ein Link auf die Bourne Again Shell.<br />

19.4.2. Kommentare<br />

Kommentare beginnen immer mit # <strong>und</strong> behalten ihre Gültigkeit bis zum Zeilenende. Die Verwendung von<br />

Kommentaren ist immer empfehlenswert, da Anmerkungen im Quelltext die Lesbarkeit des Skriptes deutlich<br />

erhöhen <strong>und</strong> damit die spätere Fehlersuche oder Anpassung deutlich erleichtern. Auch ist es sinnvoll im<br />

Kopf des Skriptes den Autor, das Datum, die Funktion <strong>und</strong> eventuell die Version des Skriptes festzuhalten.<br />

Manchmal wird sogar ein Changelog gepflegt, dass über die letzten Änderungen Auskunft gibt. Allerdings<br />

werden auch einige Spezialitäten der Shellskriptprogrammierung, wie z.B. die verwendete Shell <strong>und</strong> das<br />

exec Kommando, hinter Kommentarzeichen versteckt, <strong>und</strong> bleiben dennoch nicht unbeachtet.<br />

19.4.3. einfache Kommandos<br />

Hiermit sind Kommandos gemeint, die man auch am Prompt der Shell eingeben würde. Unix bzw. <strong>Linux</strong><br />

bietet aufgr<strong>und</strong> des Gr<strong>und</strong>satzes ”Small is beautiful” eine Vielzahl an Befehlen, die für sich alleine gestellt<br />

eine sehr eingeschränkte Funktionalität aufweisen, aber durch geschickte Kombination zu einem mächtigen<br />

Werkzeug heranwachsen. Einen Überblick über die gängigen Kommandos finden Sie in der Kommandoreferenz<br />

im Kapitel B auf der Seite 305.<br />

19.4.4. Übergabeparameter<br />

$0 Name des Shellskripts<br />

$1 $2 $3 $4 $5 $6 $7 $8 $9 ${n} Variablen aus der Parameterübergabe<br />

$# Anzahl der übergebenen Argumente<br />

$* ("$1 $2 $3 $4 $5 $6 $7 $8 $9 ...") Die Variable $* verbindet alle Argumente, die dem Programm<br />

$@ ("$1" "$2" ... "$n") Im Gegensatz zur Variablen $* werden die Parameter als einzelne Zeichenk<br />

Damit die Abgrenzung zu $*<br />

$? Rückgabewert des letzten Kommandos, setzen mit exit exitcode<br />

$$ Prozessnummer der aktuellen Shell (z.B. eignet sich für die Erzeugung von temporären Dateien,<br />

$! Prozessnummer des letzten Hintergr<strong>und</strong>prozesses<br />

19.4.5. Variablen<br />

Stringvariablen<br />

Variablen sind in der Shellprogrammierung zunächst vom Datentyp string <strong>und</strong> brauchen nicht deklariert zu<br />

werden. Es hat sich allerdings für die Übersichtlichkeit als günstig erwiesen, diese am Anfang des Skriptes<br />

zu initialisieren <strong>und</strong> ihre Funktion, soweit nicht aus dem Namen erkennbar, zu kommentieren. Abgesehen<br />

davon sieht die gebräuchliche Namenskonvention vor, dass kleingeschriebene Variablen nach dem Muster<br />

$varname nur innerhalb des eigenen Skriptes gültig sein sollten, während es sich bei großgeschriebenen<br />

in der Form $VARNAME in der Regel um Systemvariablen handelt, die mit Hilfe des Befehls export in<br />

187


19. Shellprogrammierung<br />

das Environment der untergeordneten Shells eingehen. Die Wertzuweisung kann auf unterschiedliche Art<br />

<strong>und</strong> Weise erfolgen. Eine genauere Erklärung zu den Quotierungen erfolgt weiter unten in einem eigenen<br />

Abschnitt.<br />

var=inhalt einfachste Zuweisung, möglich bei Strings ohne Leer- <strong>und</strong> Sonderzeichen<br />

var="inhalt der variablen: $var" hier sind auch Leerzeichen zulässig, mit $ angegebene Variable<br />

var=’inhalt der $variablen’ eine Auswertung der mit $ angeführten Variablen erfolgt jetzt nicht<br />

var= hier wird ein Leerstring zugewiesen, es sind keine Leerzeichen vor / nach dem = zulässig<br />

Während die Wertzuweisung nur mit dem Variablennamen erfolgt, wird später unter Verwendung des<br />

Dollarzeichens ($var) auf den Variableninhalt zugegriffen. Natürlich sind auch Stringoperationen wie Ausschneiden,<br />

Abschneiden, Teilen <strong>und</strong> Vergleichen möglich. Einige dieser Möglichkeiten werden in späteren<br />

Beispielskripten deutlich.<br />

Integervariablen<br />

Die Deklaration von Integervariablen erfolgt mit Hilfe von declare -i zahl. Übliche Operationen wie<br />

Ein-/Ausgaben, Wertzuweisungen, die Gr<strong>und</strong>rechenarten, Vergleichsoperationen <strong>und</strong> logische Ausdrücke<br />

werden von der Shell unterstützt. Allerdings ist der Umgang mit solchen Variablen nicht so einfach, wie es<br />

zunächst scheint. Gerade als Einsteiger fällt man hier leicht über Stolpersteine.<br />

read / echo Ein-/Ausgabe von Variableninhalten<br />

= Wertzuweisung<br />

+ - * / \% Rechenarten (Summe, Differenz, Produkt, Quotient, Modulo)<br />

< > == != Vergleiche (kleiner, größer, kleiner / gleich, größer / gleich, gleich, nicht gl<br />

&& || logische Verknüpfungen (logisches UND, logisches ODER)<br />

19.4.6. Arrays<br />

Variablen können in der Shell mit declare -a als eindimensionale Felder vereinbart werden. Arrays weisen<br />

dabei folgende Eigenschaften auf:<br />

• auf einzelne Array-Elemente kann mit Hilfe eines Indexes zugegriffen werden<br />

• ein Index ist ein Integerausdruck, der in eckigen Klammern steht<br />

• Arrays müssen nicht deklariert werden, es reicht aus den Elementen die jeweiligen Werte zuzuweisen<br />

• die Zuweisung eines Wertes zu einem Feld erfolgt wie bei Variablen<br />

• die Indizes beginnen bei 0<br />

Beispiel:<br />

#!/bin/bash<br />

# author: tobias mucke<br />

# date: 23. may 2002<br />

# comment: some experiences with arrays<br />

# initialization<br />

n=0 # counter<br />

i=$# # number of parameters<br />

188


# reading parameters into array<br />

while [ $n -lt $i ]; do<br />

array[$n]="$1"<br />

shift 1<br />

n=$[$n+1];<br />

done<br />

# getting the number of array elements<br />

i=${#array[*]}<br />

echo "Anzahl der Arrayelemente: $i"<br />

# writing all array elements to stdout<br />

n=0<br />

while [ $n -lt $i ]; do<br />

echo ${array[$n]}<br />

n=$[$n+1];<br />

done<br />

# end of skript<br />

19.5. Zeichenkettenzerlegung<br />

19.5. Zeichenkettenzerlegung<br />

Der Befehl set ist eigentlich dazu gedacht Übergabeparameter neu zu setzen. Durch einen typischen Shelltrick<br />

kann man jedoch auch auf einfachste Art <strong>und</strong> Weise eine Zeichenkette mit set zerlegen. Dabei ist<br />

jedoch zu beachten, dass sämtliche Parameter, die beim Aufruf des Skripts übergeben wurden, überschrieben<br />

werden.<br />

#!/bin/bash<br />

# author: tobias mucke<br />

# date: 31. dec 2002<br />

# comment: parsing of strings with set<br />

set $(date)<br />

day="$1 der $3."<br />

month="$2"<br />

time="$4"<br />

year="$6"<br />

echo "Uhrzeit: $time"<br />

echo "Datum: $day $month $year"<br />

# end of skript<br />

19.6. Parser<br />

Ähnlich wie viele Shellkommandos bringen auch einige Skripten eine Unzahl an Optionen <strong>und</strong> Parametern<br />

mit. Ein Parser sorgt für die Kontrolle <strong>und</strong> Auswertung der Übergabeparameter. Das folgende etwas<br />

trickreiche Beispiel zeigt einen einfachen Parser.<br />

#!/bin/bash<br />

189


19. Shellprogrammierung<br />

# author: tobias mucke<br />

# date: 31. dec 2002<br />

# comment: parsing parameters and options given to the script<br />

while [ -n "$1" ]; do<br />

case $1 in<br />

-f | --file) file=$2<br />

shift 2;;<br />

-d | --destination) destination=$2<br />

shift 2;;<br />

-s | --source) source=$2<br />

shift 2;;<br />

-h | --help) echo ’Hilfe!’<br />

shift 2;;<br />

*) echo ’Hilfe!’<br />

exit 1;;<br />

esac<br />

done<br />

echo ’File: ’$file<br />

echo ’Destination: ’$destination<br />

echo ’Source: ’$source<br />

# end of skript<br />

19.7. Funktionen<br />

Wie jetzt schon aus den gezeigten Beispielen ersichtlich wird, wächst der Umfang ausgeklügelter Skripte<br />

stark an. Oft braucht man denselben Code an mehreren Stellen <strong>und</strong> möchte durch die Verwendung von<br />

Funktionen zum einen vermeiden, dass man Anpassungen an mehreren Stellen vornehmen muss <strong>und</strong> zum<br />

anderen, dass man durch ausgelagerte Skripten viele voneinander abhängige Dateien erzeugt. Außerdem<br />

ermöglichen Funktionen eine strukturierte Programmierung, deren größter Vorteil die gesteigerte Übersichtlichkeit<br />

darstellt.<br />

#!/bin/bash<br />

# author: tobias mucke<br />

# date: 31. dec 2002<br />

# comment: functions in shellscripts<br />

usage() {<br />

echo ’genaue Anleitung zur Verwendung von Funktionen im <strong>Linux</strong>handbuch’<br />

exit<br />

}<br />

usage<br />

# end of skript<br />

Übungen<br />

1.<br />

190


2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

19.7. Funktionen<br />

191


19. Shellprogrammierung<br />

192


20. VFS - Virtual File System <strong>und</strong> andere<br />

Dateisysteme<br />

Wie bereits deutlich geworden sein sollte, ist das Dateisystem der entscheidende Dreh- <strong>und</strong> Angelpunkt<br />

unter <strong>Linux</strong>. Dabei dominiert nicht ein einzelnes Dateisystem die Szene, vielmehr gibt es für die verschiedensten<br />

Einsatzzwecke eigens konzipierte Filesysteme. Das VFS integriert alle unterstützten Dateisysteme<br />

<strong>und</strong> bietet so den Prozessen <strong>und</strong> Anwendern eine einheitliche Schnittstelle zu den Daten an. Die Implementierung<br />

einzelner Dateisysteme wird dadurch komplett abstrahiert, so weiß beispielsweise ein Benutzer<br />

nicht ob er gerade auf einem lokalen oder über das Netzwerk gemountetem Dateisystem arbeitet.<br />

Lernziele<br />

• Sie verstehen das Konzept des Virtuellen Filesystems.<br />

• Sie überblicken die verschiedenen Dateisysteme unter <strong>Linux</strong> <strong>und</strong> können diese einordnen.<br />

• Sie kennen die wichtigsten Kommandos zur Dateisystemverwaltung.<br />

20.1. Procfs<br />

Das Procfs ist nichts anderes als eine Schnittstelle zum Kernel, an der Sie Informationen über die laufenden<br />

Prozesse, die erkannte Hardware <strong>und</strong> verschiedenste Kerneleinstellungen abfragen können. Gr<strong>und</strong>sätzlich<br />

können Sie sich hier wie in einem normalen Dateisystem bewegen, so dass der Umgang mit dem Procfs<br />

sofort gewohnt erscheint.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• Informationen zu den laufenden Prozessen abzufragen,<br />

• Kerneleinstellungen einzusehen <strong>und</strong> zu ändern,<br />

• <strong>und</strong> zusätzliche Angaben über die erkannte Hardware auszulesen.<br />

Daneben werden Kommandos angesprochen, die ein komfortables Arbeiten dadurch ermöglichen, dass<br />

sie die im Procfs liegenden Dateien auslesen <strong>und</strong> deren Informationen aufbereiten. Auf diese Weise muss<br />

man nicht selbst in den Tiefen dieses speziellen Dateisystems wühlen <strong>und</strong> teils kryptische Angaben interpretieren.<br />

193


20. VFS - Virtual File System <strong>und</strong> andere Dateisysteme<br />

20.1.1. Prozessinformationen<br />

Viele Einträge im Procfs werden vom Kernel zur Prozessverwaltung verwendet. Für jede gestartete Anwendung<br />

gibt es ein eigenes Verzeichnis, das nach deren PID benannt ist. Da es sich hierbei nur um ein Abbild<br />

des Arbeitsspeichers handelt, belegt keines dieser Verzeichnisse wirklich Speicherplatz.<br />

Dateien / Verzeichnisse Funktion<br />

cmdline Kommando, Parameter <strong>und</strong> Optionen<br />

cwd symbolischer Link auf das aktuelle Arbeitsverzeichnis<br />

environ Umgebungsvariablen <strong>und</strong> deren Werte<br />

exe symbolischer Link auf das Binary des ausgeführten Programms<br />

fd Verzeichnis mit symbolischen Verlinkungen einzelner Dateideskriptoren<br />

auf Dateien<br />

mapped base<br />

maps Speicheradressen <strong>und</strong> deren Inhalt<br />

mem Arbeitsspeicher des Prozesses<br />

mounts gemountete Dateisysteme<br />

root symbolischer Link auf das Wurzelverzeichnis<br />

stat<br />

statm Informationen zur Verwendung des Arbeitsspeichers<br />

status Statusinformationen<br />

Tabelle 20.1.: Prozessinformationen<br />

————————————————————————————————————————-<br />

Daneben gibt es noch das Verzeichnis self, ein Link auf den Prozess, der gerade im Dateisystem liest.<br />

Jedes dieser Prozessverzeichnisse enthält die in der Tabelle ?? auf Seite ?? aufgeführten Dateien.<br />

Um detaillierte Informationen über einen einzelnen Prozess auszulesen, müssen nur die jeweiligen Dateien<br />

im Prozessverzeichnis betrachtet werden. Ein Beispiel anhand des Prozesses mit der PID 2422 soll das<br />

Erklärte verdeutlichen.<br />

> cat /proc/2422/cmdline<br />

/bin/sh/usr/X11R6/bin/mozilla<br />

> cat /proc/2422/status<br />

Name: mozilla<br />

State: S (sleeping)<br />

Tgid: 2422<br />

Pid: 2422<br />

PPid: 1487<br />

TracerPid: 0<br />

Uid: 500 500 500 500<br />

Gid: 100 100 100 100<br />

FDSize: 256<br />

Groups: 100 14 16 17 33<br />

VmSize: 2588 kB<br />

VmLck: 0 kB<br />

VmRSS: 1228 kB<br />

VmData: 124 kB<br />

194


VmStk: 24 kB<br />

VmExe: 432 kB<br />

VmLib: 1644 kB<br />

SigPnd: 0000000000000000<br />

SigBlk: 0000000080010000<br />

SigIgn: 8000000000000004<br />

SigCgt: 0000000000010002<br />

CapInh: 0000000000000000<br />

CapPrm: 0000000000000000<br />

CapEff: 0000000000000000<br />

20.2. Oberpunkt<br />

Die zurückgegebenen Informationen entsprechen im wesentlichen der Ausgabe des Kommandos ps. Tatsächlich<br />

greifen eine Menge Befehle auf das proc-Dateisystem zu <strong>und</strong> bereiten dessen Informationsgehalt für den Benutzer<br />

auf.<br />

Darüberhinaus kann anhand der Datei statm wie bereits angedeutet die Speicherverwendung des jeweiligen<br />

Prozesses betrachtet werden. Hier werden die Anzahl der Seiten im Speicher verwaltet, wobei zwischen<br />

total, shared, code, data/stack, lib <strong>und</strong> dirty unterschieden wird.<br />

20.2. Oberpunkt<br />

20.2.1. Unterpunkt<br />

• erster Stichpunkt<br />

• zweiter Stichpunkt<br />

• dritter Stichpunkt<br />

20.2.2. Unterpunkt<br />

1. erster Arbeitsschritt<br />

2. zweite Anweisung<br />

3. abschließende Ausführungen<br />

20.3. Oberpunkt<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

195


20. VFS - Virtual File System <strong>und</strong> andere Dateisysteme<br />

20.4. Kerneldaten<br />

Ähnlich wie die einzelnen Prozesse, gibt auch der Kernel im proc-Dateisystem Informationen über das laufende<br />

System bekannt. Die Tabellen 20.2 <strong>und</strong> 20.3 auf den Seiten 196 <strong>und</strong> 197 enthalten eine Liste der<br />

denkbaren Dateien, wobei es insbesondere vom Kernel aber auch von den geladenen Modulen abhängt,<br />

welche Dateien überhaupt vorhanden sind. Aus verständlichen Gründen sind einige Dateien nur als Systemadminstrator<br />

root lesbar.<br />

Datei Inhalt<br />

apm Informationen zum Advanced Power Management<br />

aso<strong>und</strong> Informationen zur So<strong>und</strong>karte <strong>und</strong> ihrer Fähigkeiten<br />

bus Verzeichnis mit den vorhandenen Bussystemen<br />

cmdline Kommandozeile des Kernels z.B. mit Kernelparametern<br />

cpuinfo Informationen über den Prozessor<br />

devices Liste der zur Verfügung stehenden block- <strong>und</strong> zeichenorientierten<br />

Geräte<br />

dma Liste der verwendeten DMA Kanäle<br />

filesystems Liste der unterstützten Dateisysteme<br />

fs Verzeichnis mit Dateisysteminformationen z.B. NFS exports, quota<br />

ide Verzeichnis mit detaillierten Informationen über IDE-Controller <strong>und</strong><br />

Geräte<br />

interrupts Verwendung der Interrupts<br />

iomem Speicherbereiche für I/O Operationen<br />

ioports Verwendung der I/O Ports<br />

kcore Speicherabbild des Kernelkerns<br />

kmsg Nachrichten des Kernels<br />

ksyms Tabelle mit Kernelsymbolen<br />

loadavg Ausgabe der durchschnittlichen Systembelastung<br />

locks Kernellocks<br />

lvm Verzeichnis für den Logical Volume Manager<br />

Tabelle 20.2.: Kerneldaten in /proc - Teil 1<br />

In der Datei /proc/meminfo finden sich sehr genaue Informationen zur derzeitigen Verwendung des<br />

Arbeits- <strong>und</strong> Swapspeichers. Hier gilt es jedoch zu beachten, dass nicht immer zwischen den beiden Speichertypen<br />

unterschieden wird. Abgesehen von der Performance stellt sich der Swapbereich gegenüber Anwendungen<br />

genauso dar, wie der eigentliche Arbeitsspeicher.<br />

Desweiteren benutzt der Kernel noch weitere Zwischenspeicher, die sogenannten Slab Caches, in denen<br />

beispielsweise Puffer für den Netzwerkzugriff enthalten sind. Die genaue Verwendung ist in der Datei<br />

/proc/slabinfo dokumentiert.<br />

So können Sie beispielsweise mit dem Kommando cat auf viele systeminterne Informationen zugreifen.<br />

> cat interrupts<br />

CPU0<br />

0: 1282097 XT-PIC timer<br />

1: 39613 XT-PIC keyboard<br />

2: 0 XT-PIC cascade<br />

196


20.5. IDE Subsystem<br />

Datei Inhalt<br />

meminfo Informationen zum Verwendung des Arbeitsspeichers<br />

misc Verschiedenes<br />

modules Liste der geladenen Module<br />

mounts Aufstellung der gemounteten Dateisysteme<br />

net Informationen zum Netzwerk (vgl. unten)<br />

partitions Liste der systemweit bekannten Partitionen<br />

pci Auflistung der erkannten Geräte am PCI Bus<br />

rtc real time clock im Unterverzeichnis /proc/driver<br />

scsi Informationen zum SCSI Subsystem (vgl. unten)<br />

slabinfo Informationen zu den slab pools (vgl. unten)<br />

stat umfassende Systemstatistik<br />

swaps Information über die Swapbereiche <strong>und</strong> deren Verwendung<br />

sys Verzeichnis mit Zugriff auf Kernelparameter (vgl. nächstes Kapitel)<br />

tty Verzeichnis mit detaillierten Informationen zu den seriellen Schnittstellen<br />

uptime Uptime des Systems<br />

version Kernel Version<br />

Tabelle 20.3.: Kerneldaten in /proc - Teil 2<br />

8: 2 XT-PIC rtc<br />

10: 145828 XT-PIC EMU10K1<br />

11: 87 XT-PIC eth0, usb-uhci, usb-uhci<br />

12: 366015 XT-PIC PS/2 Mouse<br />

14: 65590 XT-PIC ide0<br />

15: 21 XT-PIC ide1<br />

NMI: 0<br />

ERR: 0<br />

Die bereits angesprochene Datei slabinfo gibt über die Speicherverwendung im slab Level Auskunft.<br />

Die sogenannten slab pools liegen über dem page level der Speicherverwaltung <strong>und</strong> werden für häufig<br />

verwendete wie Netzwerkpuffer, Verzeichniscache usw. verwendet.<br />

20.5. IDE Subsystem<br />

Das Verzeichnis /proc/ide enthält alle IDE Geräte vom Chipsatz, über den Controller bis hin zu den<br />

einzelnen Laufwerken, die der Kernel erkannt hat. Neben der Datei drivers <strong>und</strong> einer chipsatzspezifischen<br />

Datei beispielsweise namens via wird für jeden Controller (vgl. Tabelle 20.4 auf Seite 198) <strong>und</strong> jedes daran<br />

angeschlossene Laufwerk (vgl. Tabelle 20.5 auf Seite 198) ein eigenes Verzeichnis verwaltet dessen Dateien<br />

äußerst genaue Informationen über das jeweilige Gerät bereitstellen. Allerdings sind nicht alle Dateien sind<br />

für jeden Benutzer lesbar.<br />

> cat /proc/ide/drivers<br />

ide-floppy version 0.99<br />

197


20. VFS - Virtual File System <strong>und</strong> andere Dateisysteme<br />

ide-cdrom version 4.59<br />

ide-disk version 1.12<br />

Datei Inhalt<br />

channel IDE Kanal (in der Regel 0 oder 1)<br />

config Konfiguration der PCI/IDE bridge<br />

mate Name des mates<br />

model Type bzw. Chipsatz des IDE Controllers<br />

Tabelle 20.4.: IDE Controller in /proc/ide<br />

Datei Inhalt<br />

cache Größe des Laufwerkscache<br />

capacity Kapazität des Mediums in 512Byte Blöcken<br />

driver Treiber <strong>und</strong> dessen Version<br />

geometry physikalische <strong>und</strong> logische Geometry des Laufwerks<br />

identity ID Block des Laufwerks<br />

media Typ des Mediums<br />

model Hersteller <strong>und</strong> Typbezeichnung<br />

settings Konfiguration des Laufwerks<br />

smart tresholds IDE Festplatten Verwaltung tresholds<br />

smart values IDE Festplatten Verwaltung Werte<br />

Tabelle 20.5.: IDE Laufwerke in /proc/ide<br />

Sollen also beispielsweise der Hersteller <strong>und</strong> die Typbezeichnung eines IDE Laufwerks ausgelesen werden,<br />

könnte der Befehl wie folgt aussehen.<br />

> cat /proc/ide/ide0/hda/model<br />

IC35L040AVER07-0<br />

Außerdem interessant sind die Laufwerkseinstellungen, die in der Datei settings abgelegt sind. Auf diese<br />

hat jedoch nur der Benutzer root lesenden Zugriff.<br />

20.6. SCSI Subsystem<br />

Wenn Sie einen SCSI Host Adapter in Ihrem System haben, finden Sie ein nach dem Treiber benanntes<br />

Verzeichnis unter /proc/scsi wieder. Dieses enthält eine Datei für jeden erkannten Adapter mit genauer<br />

Bezeichnung, BIOS Revision, belegte Ressourcen usw. Außerdem gibt die Datei /proc/scsi/scsi über<br />

sämtliche erkannten SCSI Komponenten Auskunft.<br />

> cat /proc/scsi/scsi<br />

...<br />

198


20.7. Netzwerk<br />

20.7. Netzwerk<br />

Genauso wie die bisher angesprochenen Verzeichnisse verhält es sich auch mit /proc/net. Tabelle 20.6<br />

auf Seite 199 listet einige der wichtigsten Dateien in diesem Zusammenhang. Sollte Ihr Kernel mit IPv6<br />

Unterstützung kompiliert worden sein, so kommen noch weitere Dateien hinzu.<br />

Datei Inhalt<br />

arp Tabelle des Kernel ARP Caches<br />

dev Netzwerk Interfaces <strong>und</strong> Statistiken<br />

igmp IP Multicast Adressen<br />

netstat Netzwerkstatistiken<br />

route Kernel Routing Tabelle<br />

rpc Verzeichnis für Remote Procedure Calls<br />

rt cache Routing Cache<br />

snmp Daten über SNMP<br />

sockstat Socketstatistiken<br />

tcp TCP Sockets<br />

udp UDP Sockets<br />

unix Unixdomain Sockets<br />

wireless Statistiken für Wireless Interfaces<br />

20.8. Parallelport<br />

Zu finden unter /proc/sys/dev/parport/ vgl. Kapitel 4<br />

20.9. Serielle Schnittstelle<br />

Tabelle 20.6.: Netzwerk in /proc/net<br />

Dieses Verzeichnis hält Informationen über die verfügbaren <strong>und</strong> verwendeten seriellen Schnittstellen vor.<br />

Tabelle 20.7 auf Seite 199 nennt einige Dateien <strong>und</strong> ihre Bedeutung.<br />

Datei Inhalt<br />

drivers Liste mit Treibern <strong>und</strong> deren Verwendung<br />

ldiscs registrierte Zeilen Discipline<br />

driver/serial Statistik <strong>und</strong> Status einzelner serieller Leitungen<br />

Übungen<br />

1.<br />

Tabelle 20.7.: Serielle Schittstellen in /proc/tty<br />

199


20. VFS - Virtual File System <strong>und</strong> andere Dateisysteme<br />

2.<br />

3.<br />

Zusammenfassung<br />

Wie Sie im vorangegangen Kapitel gesehen haben, dient das proc-Dateisystem nicht nur der Prozessverwaltung<br />

sondern auch in hohem Maße dem Zugriff auf Kerneldaten. Das Stöbern in der Verzeichnisstruktur <strong>und</strong><br />

in einzelnen Dateien ist dabei mit herkömmlichen Kommandos ohne weiteres möglich. Allerdings greifen<br />

viele Befehle aus dem Alltag des Systemadministrators ebenfalls auf /proc zurück <strong>und</strong> präsentieren ihre<br />

Ergebnisse weitaus schöner als manch kryptische Datei.<br />

20.10. Devfs<br />

Ziel des Kapitels<br />

• Sie haben im Hinterkopf, um was es sich beim Device File System handelt.<br />

• Sie können Fachbegriffe, die im Zusammenhang mit den Devfs stehen, einordnen <strong>und</strong> erläutern.<br />

• Sie kennen die Unterschiede zwischen der alten <strong>und</strong> der neuen Implementierung des Devfs.<br />

20.10.1. Gr<strong>und</strong>lagen<br />

Mehrmals ist bereits deutlich geworden, dass in einem <strong>Linux</strong>-System die Datei eine tragende Rolle spielt.<br />

So sind beispielsweise Verzeichnisse nur Dateien, in denen der Dateiname einer Inodenummer zugeordnet<br />

wird. Ähnlich verhält es sich mit sämtlichen Geräten des Computers. Der Zugriff auf diese erfolgt durch<br />

sogenannte Gerätedateien (Device-Files), die die Schnittstelle zum Kernel darstellen. In einem eigenen Verzeichniss<br />

/dev sind zahllose solcher Dateien angelegt, anhand derer Namen man die Verwendung erkennen<br />

kann.<br />

to do: wie arbeiten die alten Gerätedateien?<br />

Neuere Entwicklungen lassen die derzeitige Verwaltung der Geräte in einem anderen Licht erscheinen.<br />

Aus diesem Gr<strong>und</strong> beschäftigt sich eine Reihe von Entwicklern mit einer Neukonzeption, die man kurzerhand<br />

devfs nennt.<br />

• Bisher wurden die Geräte eindeutig durch die Zuordnung von major- <strong>und</strong> minor device numbers<br />

gekennzeichnet. Im Devfs werden diese durch einen namespace ersetzt. Dies hat den Vorteil, dass die<br />

Verwendung einer Gerätedatei in Zukunft aus dem Namen hervorgeht.<br />

• Die Verwaltung des Verzeichnisses /dev war bisher zweigeteilt. Die Major- and Minor-Device Nummern<br />

wurden in Datenbanken gehalten, wobei eine im Kernel <strong>und</strong> die andere in /dev abgelegt war.<br />

• Die zahllosen Dateien im Verzeichnis /dev werden größtenteils nicht verwendet, weil die entsprechende<br />

Hardwarekomponente nicht im System ist. Abgesehen von der Unübersichtlichkeit verlangsamt der<br />

zunehmende Umfang von /dev die Zugriffe auf die Kerneltreiber <strong>und</strong> damit auf die Geräte.<br />

Kernelhelp<br />

CONFIG DEVFS FS:<br />

This is support for devfs, a virtual file system (like /proc) which provides the file system interface to device<br />

drivers, normally fo<strong>und</strong> in /dev. Devfs does not depend on major and minor number allocations. Device<br />

200


20.11. Reiserfs<br />

drivers register entries in /dev which then appear automatically, which means that the system administrator<br />

does not have to create character and block special device files in the /dev directory using the mknod<br />

command (or MAKEDEV script) anymore.<br />

This is work in progress. If you want to use this, you *must* read the material in Documentation/filesystems/devfs/,<br />

especially the file README there.<br />

If unsure, say N.<br />

20.11. Reiserfs<br />

kurze Einstimmung<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

•<br />

•<br />

•<br />

20.12. Codafs<br />

Coda ist ein weit entwickeltes Dateisystem für den Einsatz im Netzwerk. Leider war es mir bisher nicht<br />

möglich genauere Informationen <strong>und</strong> praktische Erfahrungen zu sammeln, so dass dieser Abschnitt noch<br />

nicht weiter fortgeschritten ist.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• welche Eigenschaften Codafs mit bringt,<br />

• wie es in den Kernel eingeb<strong>und</strong>en ist.<br />

20.12.1. Eigenschaften<br />

1. steht unter einer freizügigen Lizenz<br />

2. hohe Performance durch clientseitigen Persistenzcache<br />

3. Replikation mit dem Server<br />

4. Sicherheitsmodell zur Authentifizierung, Verschlüsselung <strong>und</strong> Zugriffskontrolle<br />

5. durchgängiger Betrieb auch bei auftretenden Netzwerkfehlern<br />

6. Ausnutzung der Netzwerkbandbreite<br />

7. gute Skalierbarkeit<br />

8. Möglichkeit des Offline Betriebs z.B. für Mobile Computing<br />

201


20. VFS - Virtual File System <strong>und</strong> andere Dateisysteme<br />

20.12.2. Einbindung in den Kernel<br />

Es folgt die Kerneldokumentation zur Variable CONFIG_CODA_FS.<br />

Kernel Help<br />

CONFIG_CODA_FS:<br />

Coda is an advanced network file system, similar to NFS in that it<br />

enables you to mount file systems of a remote server and access them<br />

with regular Unix commands as if they were sitting on your hard<br />

disk. Coda has several advantages over NFS: support for<br />

disconnected operation (e.g. for laptops), read/write server<br />

replication, security model for authentication and encryption,<br />

persistent client caches and write back caching.<br />

If you say Y here, your <strong>Linux</strong> box will be able to act as a Coda<br />

*client*. You will need user level code as well, both for the<br />

client and server. Servers are currently user level, i.e. they need<br />

no kernel support. Please read<br />

Documentation/filesystems/coda.txt and check out the Coda<br />

home page .<br />

If you want to compile the coda client support as a module ( = code<br />

which can be inserted in and removed from the running kernel<br />

whenever you want), say M here and read<br />

Documentation/modules.txt. The module will be called coda.o.<br />

Zusammenfassung<br />

Weit mehr Informationen zu diesem interessanten Dateisystem finden sich im Internet unter www.coda.cs.cmu.edu.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

202


21. Cluster<br />

Bisher blieb der Teilbereich der hochverfügbaren Server <strong>und</strong> Dienste exotischer Hardware <strong>und</strong> teuren Betriebssystemen<br />

vorbehalten. Immer häufiger wird jedoch auch von herkömmlichen Systemen eine Ausfallsicherheit<br />

gefordert. Die konkrete Umsetzung aber auch prinzipbedingte Einschränkungen unter <strong>Linux</strong> auf<br />

Intel-Standardarchitektur soll im folgenden aufgezeigt werden.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die wichtigsten Gr<strong>und</strong>begriffe im Zusammenhang mit Hochverfügbarkeit kennen,<br />

• einen ausfallsicheren Cluster aufzubauen <strong>und</strong> zu konfgurieren,<br />

• das Gesamtsystem zu testen.<br />

21.1. Motivation<br />

Eine der ersten Frage bei Serverdiensten betrifft in der Regel die Verfügbarkeit <strong>und</strong> die Vereinbarung von<br />

Wartungsfestern. Immer häufiger bekommt man zu hören, dass man weder nachts noch am Wochenende auf<br />

den Server verzichten könne, geschweige denn tagsüber. R<strong>und</strong> um die Uhr soll die Anwendung verfügbar<br />

sein, Wartungsfenster gibt es nicht.<br />

Die Tatsache, dass Hochverfügbarkeit auch hohe Kosten nach sich zieht, wird dabei oft übersehen. Nichtsdestotrotz<br />

kann auch mit einem kleineren Geldbeutel die Verfügbarkeit gesteigert werden, um doppelte<br />

Hardware kommt man jedoch nicht herum.<br />

21.2. Gr<strong>und</strong>begriffe<br />

Auch in diesem Kapitel soll es so gehandhabt werden, dass zunächst ein gr<strong>und</strong>legender Überblick über<br />

das Thema gegeben wird. Diejenigen, die gleich mit einer konkreten Software <strong>und</strong> deren Konfiguration<br />

einsteigen wollen, können jedoch die folgenden Gr<strong>und</strong>begriffe überspringen.<br />

21.2.1. Cluster<br />

Der Begriff Cluster ist seit einiger Zeit in aller M<strong>und</strong>e, doch nur selten wird verdeutlicht, dass Cluster nicht<br />

gleich Cluster ist. Es folgen teils beachtliche Unterschiede.<br />

Computing Cluster<br />

Computing Cluster, auch Beowulf Cluster genannt, bestehen in der Regel aus günstigen Rechnern mit Intel<br />

32Bit Architektur <strong>und</strong> erledigen ihnen gestellte Rechenaufgaben verteilt über alle Clusternodes. Beim<br />

203


21. Cluster<br />

Einsatz solcher Clusterverbände handelt es sich immer um speziell auf den jeweiligen Zweck abgestimmte<br />

Konfigurationen. Das Beowulf-Projekt ist im Internet unter http://www.beowulf.org anzutreffen.<br />

Load balancing Cluster<br />

In einem sochen Cluster ist den zahlreichen Nodes ein sogenannter Load Balancer vorgeschalten, der Verbindungsanfragen<br />

zu einem bestimmten Dienst entgegennimmt <strong>und</strong> an einen der Clusternodes weitergibt, der<br />

dann die eigentliche Arbeit erledigt. Oft hört man in diesem Zusammenhang auch den Begriff Serverfarm.<br />

Übrigens: der Load Balancer kann sowohl ein Rechner mit eigenem Betriebssystem als auch eine spezielle<br />

Netzwerkkomponente sein. Im Internet arbeitet http://www.linuxvirtualserver.org an diesem Projekt.<br />

High availability Cluster<br />

Diese Form des Clusterings stellt die Verfügbarkeit einzelner Dienste sicher. Fällt einer der Nodes aus, so<br />

übernimmt ein zweiter dessen Funktion nach nur kurzer Unterbrechung. Ob auf diese Art <strong>und</strong> Weise Hochverfügbarkeit<br />

erreicht werden kann, hängt von der Konsequenz in der Umsetzung ab. In den anschließenden<br />

Ausführungen geht es ausschließlich um Hochverfügbarkeitscluster. Die Internetseite für das HA-Projekt<br />

lautet http://linux-ha.org<br />

21.2.2. Weitere Gr<strong>und</strong>begriffe<br />

Single Point of Failure<br />

Sogenannte SPOFs sind beim Aufbau eines HA-Cluster unbedingt zu identifizieren <strong>und</strong> anschließend zu<br />

elimieren.<br />

Service Interface<br />

Das Service Interface wird beim Booten mit einer IP angestartet, die tatsächlich diesem Rechner zugeordnet<br />

ist. Beim Starten von Heartbeat <strong>und</strong> den zugehörigen Resource Gruppen wird dieses Interface mit weiteren<br />

virtuellen IPs belegt. Keine der Resource Gruppen sollte unter der IP des Nodes ansprechbar sein, da deren<br />

IP-Adressen beim Failover auf den anderen Node übernommen werden.<br />

21.3. Hochverfügbarkeit<br />

Jetzt nachdem die Gr<strong>und</strong>begriffe klar geworden sind, kann das Thema Hochverfügbarkeit genauer betrachtet<br />

werden. Aber was heißt hochverfügbar überhaupt? Im Wesentlichen dreht es darum, dass durch Red<strong>und</strong>anz<br />

sämtlicher Einzelkomponenten das Gesamtsystem so zuverlässig wird, dass man von einer beinahe ständigen<br />

Verfügbarkeit gesprochen werden kann. Das eigentliche Ziel ist es also nicht, eine Maschine r<strong>und</strong> um<br />

die Uhr zu betreiben, sondern einzelne Ausfälle gegenüber dem Anwender so transparent zu gestalten, dass<br />

diese ohne oder nur mit kurzer Unterbrechung weiterarbeiten können.<br />

Hinweis<br />

Auch wenn ein zuverlässiger Cluster die Hochverfügbarkeit der Dienste garantiert, die Notwendigkeit, Notfallpläne<br />

für die Systemadministration <strong>und</strong> das Operating zu erstellen, besteht weiterhin. Insbesondere ist<br />

zu dokumentieren, wie die Funktionsfähigkeit des Clusters nach einem Failover überprüft werden kann <strong>und</strong><br />

204


21.3. Hochverfügbarkeit<br />

was zu tun ist, wenn die Übernahme fehlgeschlagen ist. Außerdem ist immer noch der Worst-Case denkbar,<br />

nämlich dass beide Clusternodes ausfallen.<br />

21.3.1. Verfügbarkeit <strong>und</strong> Ausfallszenarien<br />

Im Zusammenhang mit Hochverfügbarkeit hört man oft die Forderung 7x24, d.h. an sieben Tagen die Woche<br />

vier<strong>und</strong>zwanzig St<strong>und</strong>en Verfügbarkeit. Auf das Jahr hochgerechnet bedeutet das Ausfallzeiten zwischen<br />

nur wenigen Minuten bis zu einer halben St<strong>und</strong>e. Diese Forderung muss jedoch vor dem Hintergr<strong>und</strong> der<br />

unter <strong>Linux</strong> möglichen Lösungen relativiert werden.<br />

Bei den Ausfällen kann allerdings nochmals unterschieden werden. Zum einen die geplanten Systemwartungsarbeiten,<br />

deren Umfang im Service Agreement festzuhalten sind, <strong>und</strong> zum anderen die ungeplanten<br />

Systemausfälle, die auf unterschiedlichste Szenarien zurückgeführt werden können. Je nach Strenge des Betrachters<br />

werden geplannte Systemwartungsarbeiten von der Verfügbarkeitszeit abgezogen oder eben nicht.<br />

21.3.2. Kosten<br />

Natürlich sind die mit <strong>Linux</strong> darstellbaren Lösungen im Vergleich zu anderen Produkten günstig. Doch<br />

auch für sämtliche Umgebungen gilt, selbst wenn die doppelte bis dreifache IT Infrastruktur angeschafft<br />

werden muss, sind die dabei anfallenden Kosten im Vergleich zu den eventuell entstehenden Kosten bei<br />

einem Systemausfall gering.<br />

21.3.3. Single Point of Failure<br />

Sogenannte SPOFs sind in einer HA-Umgebung durch Anschaffung red<strong>und</strong>anter Komponenten konsequent<br />

auszuschalten. Dabei treten jedoch einige Schwierigkeiten auf. Zum einen ist Red<strong>und</strong>anz technisch nicht<br />

immer möglich, an anderen Stellen wird diese auch gar nicht benötigt <strong>und</strong> manchmal kann man sich Red<strong>und</strong>anz<br />

auch nicht in jeder Hinsicht leisten. Dennoch ist es unerlässlich jeden einzelnen SPOF zu ermitteln<br />

<strong>und</strong> sich, wenn er weiter besteht, dessen bewusst zu sein.<br />

Aber wo treten diese einzelnen Fehlerpunkte überhaupt auf? Ein paar Anregungen folgen.<br />

• Hardware: Nahezu sämtliche Komponenten in einem Rechner sind SPOFs. Offensichtlich ist dies bei<br />

Prozessoren, Speicher, I/O Controller, Erweiterungskarten usw. Aber auch Bus-Systeme, Netzteile<br />

<strong>und</strong> Verkabelung gehören dazu. Einige davon sind recht einfach andere überhaupt nicht zu beseitigen.<br />

Dennoch muss bereits auf dieser Ebene so konsquent wie möglich an der Vermeidung von SPOFs<br />

gearbeitet werden, z.B. durch entsprechende Netzteile, Netzwerkkarten, ... . Nicht vermeidbare SPOFs<br />

werden durch red<strong>und</strong>ante Auslegung in höheren Schichten aufgelöst.<br />

• Netzwerk: Ein durch Red<strong>und</strong>anz glänzender Cluster nützt nichts, wenn die Anbindung an das Netzwerk<br />

<strong>und</strong> dessen Infrastruktur nicht ähnlich robust ausgelegt ist. Jeder einzelne Netzwerkkomponente,<br />

angefangen bei Kabeln über Switches bis hin zu Routern, ist in diesem Sinne ein SPOF. Auch der Zugang<br />

zum Internet oder die Firewall sind als SPOF denkbar.<br />

• Stromversorgung: Die Anbindung an das Stromnetz bzw. an die USV sollte ebenfalls doppelt ausgelegt<br />

werden. Diese Idee muss auch innerhalb eines Clusters gewahrt bleiben, denn was nützt ein<br />

hochverfügbarer Cluster, wenn der Ausfall einer Steckerleiste sämtliche Nodes stromlos schaltet.<br />

• Location: Beim Aufbau eines Clusters muss man sich bewusst sein, dass auch die Platzierung innerhalb<br />

eines Rechenzentrums, innerhalb eines Gebäudes, innerhalb eines Standortes usw. ein SPOF sein<br />

kann. Ein Rechenzentrum kann zusammenbrechen, ein Gebäude brennen <strong>und</strong> ein Standort von einem<br />

Anschlag betroffen sein. Schlussendlich kann eine ganze Gegend von einem Erdbeben erschüttert<br />

205


21. Cluster<br />

werden. Diese SPOFs durch räumlich getrennte Cluster auszuräumen, zieht sicher einen ganzen Rattenschwanz<br />

an anderen Schwierigkeiten nach sich. Das heißt nicht, dass jeder SPOF vermieden werden<br />

soll. Wie bereits erwähnt, sollte man sich aber bei Inkaufnahme eines SPOFs immer dessen bewusst<br />

sein.<br />

• Personal: Auch das betreuende Personal in der Systemadministration <strong>und</strong> im Operating kann einen<br />

SPOF darstellen. Es ist darauf zu achten, dass es immer einen greifbaren Backup für jeden Themenbereich<br />

gibt. Sicher ist das nicht billig, aber es soll schon vorgekommen sein, dass wichtige Mitarbeiter<br />

nicht mehr aus ihrem Safari-Urlaub zurückgekommen sind.<br />

• Kernel: Zunächst mag man hier an die zahlreichen Treiber denken. Darüber hinaus ist aber auch z.B.<br />

die Implementierung des TCP / IP Stacks ein SPOF. Deshalb wird weiter unten auch empfohlen den<br />

Heartbeat zusätzlich über eine serielle Verbindung zu schicken.<br />

21.3.4. Fehlertolerante Systeme<br />

Ebenso wie andere HA-Lösungen im Unix ist auch HA unter <strong>Linux</strong> nicht dafür gedacht fehlertolerante<br />

Systeme aufzubauen, deren Ausfallzeiten bei einem Fehler weit unter einer Sek<strong>und</strong>e liegen. Ebenso kann<br />

nicht jeder Ausfall transparent gemacht werden. Bei Ausfall eines Clusternodes folgt die Reaktionszeit des<br />

Standbynodes. Erst nachdem dieser den anderen für äusgefallenërklärt, findet die Übernahme der Resource<br />

Gruppen statt. Wie später noch gezeigt wird, handelt es sich hierbei im wesentlichen um IP-Adressen, ggf.<br />

MAC-Adressen, externen Speicher <strong>und</strong> Dienste. Letztere werden neu angestartet <strong>und</strong> setzen nicht wie bei<br />

fehlertoleranten Systemen an der Unterbrechungsstelle wieder auf. Der gesamte Übernahmeprozess kann<br />

ein paar Sek<strong>und</strong>en aber auch wenige Minuten dauern.<br />

21.3.5. Aufwandsabschätzung<br />

Die Aufwände, die bei der Planung, Installation <strong>und</strong> Wartung entstehen, dürfen nicht unterschätzt werden. Je<br />

nach Komplexität der Anforderungen bleibt es nicht bei zeitlichem Aufwänden, sondern es benötigt darüber<br />

hinaus erfahrene Administratoren, Systemintegratoren, Storage- <strong>und</strong> Netzwerkspezialisten. Schließlich soll<br />

die Umgebung nicht nur hochverfügbar heißen, sondern auch sein.<br />

21.3.6. Datenbestände <strong>und</strong> Filesysteme<br />

Das möglicherweise kritischste Merkmal, das ein Betriebssystem für eine HA-Umgebung mitbringen muss,<br />

ist ein transaktionsorientiertes Dateisystem, das schnelle Dateisystemchecks im Falle eines Failovers erlaubt.<br />

An einem Logstrukturiertem Dateisystem wird bereits gearbeitet.<br />

21.3.7. Failover Strategien<br />

Der wesentliche Unterschiede zwischen den im folgenden vorgestellten Failover Strategien drücken sich<br />

vorallem durch deren Skalierbarkeit aus. So es zwar denkbar, dass ein Node den Failover eines anderen behandelt.<br />

Genauso gut kann auch ein Host als Failover für mehrere Nodes dienen oder ein Cluster abgebildet<br />

werden, in dem mehrere Nodes für den Failover mehrerer Nodes bereitstehen.<br />

Simple Failover<br />

Dem primären Node gehört die Resource Gruppe, während der sek<strong>und</strong>äre Node keine oder nur wenig kritische<br />

Anwendungen fährt. Bei einem Ausfall des ersten Nodes übernimmt der zweite die Resource Gruppe.<br />

206


21.4. Heartbeat<br />

Wenn der primäre Node zu einem späteren Zeitpunkt wieder in den Cluster eintritt, wird die Resource Gruppe<br />

wieder an diesen übergeben.<br />

Idle Standby<br />

Wieder gehört dem primären Node die Resource Gruppe. Alle anderen Nodes im Cluster überwachen ihn<br />

lediglich. Bei einem Ausfall findet auch hier eine Übernahme der Resourcen statt. Dabei wird jedoch auf die<br />

Priorität aller Nodes geachtet. Immer der Node mit der höchsten Priorität beansprucht die Resource Gruppe<br />

für sich. Kommt bei dieser Strategie ein höher priorisierter Node in den Cluster werden die entsprechenden<br />

Resourcen von ihm übernommen.<br />

Rotating Standby<br />

Im Gegensatz zum Idle Standby gibt es hier keine Priorisierung der Nodes. Der erste Nodes der dem Cluster<br />

beitritt, übernimmt demnach die Resourcen, während der zweite als Standby auftritt. Der Nachteil dieser<br />

Strategie ist die fehlende Skalierbarkeit, da man einen Cluster mit mehr als zwei Nodes gr<strong>und</strong>sätzlich nicht<br />

aufbauen kann.<br />

Mutual Takeover<br />

Beide Nodes verfügen über verschiedene Resource Gruppen, die bei einem Ausfall vom jeweils anderen<br />

übernommen werden. Beide Rechner müssen über ausreichende Performance für den Betrieb sämtlicher<br />

Resource Gruppen verfügen. Diese Strategie kann auch mit mehr als zwei Nodes bestens gefahren werden.<br />

Concurrent Access<br />

Alle Nodes fahren ein <strong>und</strong> dieselbe Resource Gruppe, die aber weder IP- noch MAC-Adresse dafür aber<br />

externen Speicher, auf den konkurrierend zugegriffen wird umfasst.<br />

21.3.8. Hardware Fehler<br />

Damit Ausfallsicherheit auch bei Teilausfällen des Systems gegeben ist, müssten die Kernelmodule standardisierte<br />

Errorcodes an die HA-Software zurückgeben. Der derzeitige Enwicklungsstatus ist in dieser<br />

Hinsicht aber unklar <strong>und</strong> muss für den produktiven Einsatz aufwendig erprobt werden.<br />

21.4. Heartbeat<br />

21.4.1. Konzept<br />

Resource Skript<br />

Zu einer Resource Group gehört mindestens eins in der Regel aber mehrere solcher Resource Skripte. Diese<br />

unterstützen als Parameter Start, Stop <strong>und</strong> Status <strong>und</strong> ordnen der Resource Gruppe z.B. IP-Adressen, Filesysteme<br />

usw. zu. In einer späteren Entwicklungsphase sollen diese Skripten auch eine Monitor-Funktion<br />

unterstützen.<br />

IP-Adress Takeover<br />

Wie bereits angesprochen, gehört zu jeder Resource Gruppe eine eigene IP-Adresse. Im Falle eines Failovers<br />

wird diese auf dem einspringenden Node auf das passende Interface als zusätzliche IP konfiguriert.<br />

207


21. Cluster<br />

MAC-Adress Takeover<br />

Nach einem IP-Adress Takeover werden sämtliche Clients mit einer neuen MAC-Adresse konfrontiert.<br />

Hier müssen im einzelnen noch Untersuchungen zum Verhalten der Clients <strong>und</strong> der Netzwerkkomponenten<br />

durchgeführt werden. In der Regel sollten die Einträge in den ARP-Caches jedoch schnell auf den aktuellen<br />

Stand gebracht sein.<br />

Anscheinend gibt es auch eine Möglichkeit die MAC-Adresse zu übernehmen. Allerdings gilt diese immer<br />

für alle IPs auf einem Interface, was dazu führt dass sämtliche Resource Gruppen die selbe MAC haben.<br />

Dabei muss auch sichergestellt werden, dass die für die Resource Gruppen benutzte MAC nicht im LAN<br />

verwendet wird.<br />

Filesysteme<br />

ext2fs<br />

Das herkömmliche Standarddateisystem ext2 gilt zwar als stabil <strong>und</strong> äußerst robust, eignet sich aber für<br />

die Verwendung in einem Cluster aufgr<strong>und</strong> verschiedener Schwächen kaum. So benötigt allein der Filesystemcheck<br />

eines inkonsistenten ext2fs je nach Größe viel oder eher noch mehr Zeit. Außerdem kann nicht<br />

davon ausgegangen werden, dass ein automatisierter Filesystemcheck sämtliche Fehler ohne Eingriff des<br />

Systemadministrators behebt. Demnach ist ext2fs überhaupt nicht für eine HA-Umgebung geeignet.<br />

ext3fs<br />

Dieses Journaling Filesystem erscheint schon eher geeignet.<br />

nfs<br />

Auf den ersten Blick scheint es eine gute Idee zu sein, den externen Speicher durch einen NFS-Server bereitzustellen.<br />

Für erste Versuche mit externen Filesystemen mag das eine vorübergehende aber inperformante<br />

Lösung sein. Das K.O. Kriterium ist jedoch, dass der NFS-Server ein SPOF ist.<br />

Das eigentliche Ziel sind transaction-oriented oder log-structured Filesystems. Aber was ist damit gemeint?<br />

Hinweis<br />

Wenn Dateisysteme von verschiedenen Nodes gemountet werden sollen, so muss sichergestellt sein, dass<br />

die Datei /etc/fstab auf allen Nodes des Clusters identisch gehalten wird. Auch diese Aussage bedarf<br />

einer konkreten einsichtigen Begründung!<br />

Es wird empfohlen auf den gemeinsam zu verwendenden Filesystemen nur die Datenbestände der Anwendung<br />

nicht aber die Binaries abzulegen, da unter Umständen eine abgestürzte Anwendung das saubere<br />

Aushängen des betroffenen Filesystems verhindert.<br />

Heartbeatmedien<br />

Es darf auf keinen Fall die Situation eintreten, dass beide Nodes leben, aber vom jeweils anderen glauben<br />

er wäre tot. In einem solchen Fall laufen sämtliche Resource Gruppen auf beiden Hosts. Im Falle von externen<br />

Storage, der dann gleichzeitig von beiden Nodes benutzt wird, kommt es aufgr<strong>und</strong> fehlender Locking-<br />

Mechanismen zu inkonsistenten Dateisystemen.<br />

208


21.4.2. Installation<br />

21.4.3. Konfiguration<br />

Init-Skripte<br />

21.4. Heartbeat<br />

Natürlich kann man Heartbeat in den System-V Start einbinden. In einer produktiven Umgebung wird man<br />

das jedoch vermeiden. Dafür gibt es zwei gute Gründe. Je nach Failback-Modus (vgl. unten) kann es passieren,<br />

dass nach dem Anstarten von Heartbeat sämtliche Resource Gruppen wieder übernommen werden.<br />

Stürzt das System immer wieder ab, kommt es damit zu einem ständigen Failover - Failback. Der zweite<br />

Gr<strong>und</strong> ist darin begründet, dass der Gr<strong>und</strong> für den Systemausfall zunächst untersucht werden sollte, bevor<br />

produktive Anwendungen wieder zum Laufen kommen.<br />

Failback-Modi<br />

Zwei Failback-Modi sind in Heartbeat implementiert.<br />

Normal<br />

In diesem Modus ist einer der beiden Rechner als bevorzugter Node für eine bestimmte Resource Group<br />

vorgesehen. Solange diese Maschine verfügbar ist, wird sie diese Resource Gruppen fahren. Im Falle eines<br />

Failovers übernimmt der zweite Clusternode diese Resourcen. Ein Failback tritt in dem Moment ein, in<br />

dem der erste Node wieder verfügbar wird. Dieser Modus wird zwingend benötigt, wenn eine Aktiv-Aktiv<br />

Konfiguration verwendet wird.<br />

Nice<br />

In diesem Modus gibt es keinen direkten Zusammenhang zwischen einer Resource-Gruppe <strong>und</strong> einem bestimmten<br />

Node im Cluster. Im Falle eines Failovers übernimmt wie gewohnt der andere Node die entsprechenden<br />

Resource-Gruppen. Auch wenn der ursprüngliche Node wieder verfügbar wird, findet kein Failback<br />

statt. Das minimiert zwar die Dienstunterbrechungen <strong>und</strong> ist letztendlich besser kontrollierbar, erlaubt aber<br />

nicht den Betrieb einer Aktiv-Aktiv Konfiguration.<br />

21.4.4. Failover-Szenarien<br />

21.4.5. Monitoring<br />

Heartbeat selbst ist nicht dafür gedacht die Resourcen mit Hilfe eines Monitors zu überwachen. Hierzu muss<br />

auf Software anderer Projekte zurückgegriffen werden.<br />

21.4.6. Warnungen<br />

Soweit funktioniert Heartbeat ganz gut <strong>und</strong> reicht in dieser Form sicherlich für viele Clusterszenarien für<br />

erste aus. Allerdings gibt es die eine oder andere Einschränkung, die man bei intensivem Einsatz beachten<br />

sollte.<br />

Failover-Szenarien mit vielen IP-Adressen<br />

Hier scheint Vorsicht geboten. Zumindest rät man in der Dokumentation zu Heartbeat davon ab mehr als<br />

acht IP-Resourcen im Failover-Fall zu übernehmen. Stattdessen soll man das Ganze über eine geschickte<br />

Konfiguration des Routings lösen.<br />

209


21. Cluster<br />

Verwendung von zwei Ethernetverbindungen als Heartbeatstrecke<br />

Eigentlich spricht auf den ersten Blick nichts gegen diese Konfiguration. Allerdings ist der IP-Stack des Kernels<br />

in diesem Falle ein SPOF, der leicht vermieden werden kann. Die Verwendung zweier unterschiedlicher<br />

Medien umgeht diesen Single Point of Failure.<br />

Timing Parameter bei hoher Systemauslastung<br />

Die Standardeinstellungen sind im Falle hoher Systemauslastung unter Umständen nicht günstig <strong>und</strong> führen<br />

vielleicht zu einem ungewollten Failover. Es bietet sich an während der ersten Wochen, die entsprechenden<br />

Einstellungen nach oben zu setzen <strong>und</strong> im Logfile die längsten Abstände zwischen zwei Heartbeats<br />

auszulesen. Diese sollten Anhaltspunkt für die zukünftigen Einstellungen sein.<br />

Authorisierung<br />

Wie in der Konfiguration beschrieben, ist es wichtig, dass die Datei authkeys nur für root lesbar ist. Ansonsten<br />

startet heartbeat nicht, schreibt aber auch keine entsprechenden Meldungen in die Logfiles oder an die<br />

Konsole.<br />

Betrieb mehrerer HA-Cluster im selben Netzsegment<br />

Das ist ohne weiteres möglich, wenn der Heartbeat über eigene Ethernetkabel bzw. serielle Verbindungen<br />

läuft. Ansonsten sollte man für jeden Cluster eine eigene Multicast-Gruppe einrichten. Möchte man Broadcasts<br />

verwenden, müssen die Heartbeats der Cluster auf unterschiedliche Ports gelegt werden.<br />

21.5. Dokumentation<br />

Weiterführende Dokumentation zu diesem Thema findet sich in den einschlägigen HOWTOs <strong>und</strong> in der<br />

Dokumentation zu den einzelnen Paketen.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Nach dem Durcharbeiten des vorangegangen Kapitels sollten Sie über einen gr<strong>und</strong>legenden Überblick über<br />

das HA-Clustering unter <strong>Linux</strong> verfügen. Vor diesem Hintergr<strong>und</strong> sollte es Ihnen keine Schwierigkeiten<br />

mehr bereiten Heartbeat zu installieren <strong>und</strong> zu konfigurieren.<br />

210


Teil III.<br />

<strong>Linux</strong> für Netzwerker<br />

- Einsatz in heterogenen Netzwerken -<br />

211


22. Netzwerk - Gr<strong>und</strong>lagen<br />

kurze Einstimmung<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• erstes Lernziel,<br />

• zweites Lernziel,<br />

• drittes Lernziel.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

213


22. Netzwerk - Gr<strong>und</strong>lagen<br />

214


23. SNMP - Simple Network Management Protocol<br />

kurze Einstimmung<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• erstes Lernziel,<br />

• zweites Lernziel,<br />

• drittes Lernziel.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

215


23. SNMP - Simple Network Management Protocol<br />

216


24. NTP - Network Time Protocol<br />

Egal ob Server oder Client ein richtig tickende Uhr ist ganz besonders wichtig. Insbesondere dann, wenn es<br />

um Fehleranalyse <strong>und</strong> Auswertung von Logfiles geht. Der Abgleich mit Referenzuhren im Internet <strong>und</strong> die<br />

Konfiguration eines Timeservers ist Gegenstand des folgenden Kapitels.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• allgemeines über das Network Time Protocol,<br />

• die Konfiguration des Clients,<br />

• die Konfiguration eines eigenen Servers.<br />

24.1. Allgemeines<br />

Auch wenn unter allen anderen Distributionen das zum Protokol ntp gehörige Paket ebenfalls ntp heißt, so<br />

hält doch SuSE aus historischen Gründen an der Bezeichnung xntp fest. Xntp wird bereits standardmäßig<br />

in der Version 4.1.1 mitinstalliert <strong>und</strong> enthält sowohl das Kommandozeilenprogramm ntpdate als auch den<br />

Daemon ntpd. Zusätzlich kann weitere Doku aus dem Paket xntp-doc installiert werden.<br />

24.1.1. Öffentliche Zeitserver<br />

Folgende NTP-Server sind innerhalb von Europa ansprechbar.<br />

Belgien Stratum 2 ntp1.belbone.be, btp2.belbone.be<br />

Deutschland Stratum 1 ntps1-0.cs.tu-berlin.de, ntps1-1.cs.tu-berlin.de, ntp0.fau.de, ntp1.fau.de, ntp2.fau.de,<br />

ntp3.fau.de, ntp1.ptb.de, ntp2.ptb.de<br />

Frankreich Stratum 2 ntp1.curie.fr, ntp2.curie.fr<br />

Großbritannien Stratum 2 ntp.cis.strath.ac.uk<br />

Italien Stratum 1 time.ien.it<br />

Niederlande Stratum 1 ntp0.nl.net, ntp1.nl.net, ntp2.nl.net<br />

Polen Stratum 1 ntp.certum.pl<br />

Schweden Stratum 1 ntp1.sp.se, ntp2.sp.se, time2.stupi.se<br />

217


24. NTP - Network Time Protocol<br />

24.2. Client<br />

Das Kommando ntpdate arbeitet nach einem einfachen Prinzip.<br />

1. Zeitserver abfragen<br />

2. Uhr stellen.<br />

Bereits nach wenigen Sek<strong>und</strong>en ist damit die Uhr gestellt.<br />

Damit die Zeit jedoch dauerhaft richtig geht, gibt es verschiedene Ansätze.<br />

permanete Internetverbindung<br />

Ist man mit einer dauerhaften Verbindung ins Internet wie LAN, Standleitung oder DSL ausgestattet, kann<br />

man es sich leisten in bestimmten Zeitabständen die Zeit zu syncronisieren. Für einen stündlichen Abgleich<br />

kopiert man einfach folgendes Skript nach /etc/cron.hourly <strong>und</strong> macht es dann ausführbar.<br />

#!/bin/sh<br />

ntpdate -s ntpserver [ntpserver] [ntpserver] ...<br />

Die Option -s bewirkt, dass der entstehene Output an den Syslogd übergeben wird. Soll zusätzlich bei jedem<br />

Boot die Zeit gleich mitgestellt werden, sieht SuSE in /etc/sysconfig/xntp hierfür die Variable XNTPD INITIAL NTPD<br />

vor, die ebenfalls mit mehreren NTP-Servern gefüllt wird.<br />

temporäre Internetverbindung<br />

Hier reicht es aus in XNTPD INITIAL NTPDATE Timeserver einzutragen, so dass durch das Skript /etc/ppp/ipup<br />

in Verbindung mit /etc/ppp/poll.tcpip bei Aufbau der Wählverbindung die Zeit richtig gesetzt wird.<br />

Tatsächlich wird übrigens /usr/sbin/rcxntpd ntptimeset ausgeführt.<br />

24.3. Server<br />

Der Server hingegen geht um ein Vielfaches aufwendiger vor. Er befragt mehrere Zeitserver, prüft die Plausibilität<br />

der Antworten <strong>und</strong> vergleicht deren Qualität. Zuletzt bewertet er die Rechneruhr <strong>und</strong> beginnt sie zu<br />

stellen. Bis zum ersten Stellen kann das einige Minuten dauern. Außerdem stellt der Xntpd solange er läuft<br />

einen Timeserver im Netzwerk bereit.<br />

Damit ist natürlich Aufwand in Form von Ressourcen verb<strong>und</strong>en, außerdem stellt der Ntpd eine potentielle<br />

Sicherheitslücke dar. Deshalb sollte also nur dann ein eigener Timeserver aufgesetzt werden, wenn man ihn<br />

tatsächlich benötigt.<br />

24.3.1. Konfiguration<br />

Seine Einstellungen liest der ntpd aus der Datei /etc/ntp.conf. Im Driftfile wird nach jeweils einer St<strong>und</strong>e<br />

ein Korrekturwert zur Systemuhr abgelegt. So braucht beim nächsten Anstarten des Daemons nicht lange die<br />

Hardwareuhr beobachtet zu werden. Jede Quelle für die Zeitsyncronisation steht in einer eigenen Zeile, die<br />

mit server eingeleitet wird. Dazu gehören neben anderen NTP-Servern auch lokal angeschlossene Uhren, die<br />

an etwas seltsamen IP-Adressen erkennbar sind. Zeilen die mit fudge beginnen, setzen zusätzliche Optionen<br />

für eine Zeitquelle. So beispielsweise ein hohes Stratum für die kaum vertrauenswürdige RTC 1 . Die Option<br />

1 Real Time Clock<br />

218


24.4. Zeitanpassung<br />

iburst beschleunigt übrigens die erste Syncronisation, da der betreffende Server anfangs mit mehr Paketen<br />

abgefragt wird <strong>und</strong> so die zur Bewertung erforderlichen Daten schneller gesammelt werden.<br />

##<br />

## Undisciplined Local Clock. This is a fake driver intended for backup<br />

## and when no outside source of synchronized time is available.<br />

##<br />

server 127.127.1.0 # local clock (LCL)<br />

fudge 127.127.1.0 stratum 10 # LCL is unsynchronized<br />

##<br />

## Outside source of synchronized time<br />

##<br />

## server xx.xx.xx.xx # IP address of server<br />

driftfile /var/lib/ntp/ntp.drift # path for drift file<br />

logfile /var/log/ntp # alternate log file<br />

# logconfig =syncstatus + sysevents<br />

# logconfig =all<br />

# statsdir /tmp/ # directory for statistics files<br />

# filegen peerstats file peerstats type day enable<br />

# filegen loopstats file loopstats type day enable<br />

# filegen clockstats file clockstats type day enable<br />

#<br />

# Authentication stuff<br />

#<br />

# keys /etc/ntp.keys # path for keys file<br />

# trustedkey 1 2 3 4 5 6 14 15 # define trusted keys<br />

# requestkey 15 # key (7) for accessing server variables<br />

# controlkey 15 # key (6) for accessing server variables<br />

24.4. Zeitanpassung<br />

Je nach Abweichung von der Referenzzeit werden zum Nachstellen der Zeit zwei verschiedene Methoden<br />

verwendet. Bei einem nur geringen Unterschied wird die Systemzeit über einen längeren Zeitraum in kleinen<br />

Schritten angepasst, sogenanntes Slew, damit insbesondere Anwendungen keine Änderung der laufenden<br />

Zeit bemerken. Ist der Unterschied zur Referenzzeit groß genug, wird die Uhr auf einen Schlag nachgestellt,<br />

sogenannter Step.<br />

Übungen<br />

1.<br />

2.<br />

219


24. NTP - Network Time Protocol<br />

3.<br />

Zusammenfassung<br />

Sie haben in diesem Kapitel gelernt die Sytemzeit mit den öffentlich zugänglichen Timeserver zu syncronisieren<br />

<strong>und</strong> einen eigenen Timeserver aufzusetzen.<br />

220


25. DNS - Domain Name System<br />

kurze Einstimmung<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• erstes Lernziel,<br />

• zweites Lernziel,<br />

• drittes Lernziel.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

221


25. DNS - Domain Name System<br />

222


26. DHCP - Dynamic Host Configuration Protocol<br />

Bereits in kleinen bis mittleren Netzen lohnt sich die Bereitstellung eines DHCP-Servers, gerade dann wenn<br />

das Netzwerk beständig weiter wächst. Wie unter <strong>Linux</strong> ein solcher Server aber auch der Client aufgesetzt<br />

<strong>und</strong> konfiguriert wird, beschreibt das nachfolgende Kapitel.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• Allgemeines über DHCP,<br />

• einen DHCP-Server aufzusetzen <strong>und</strong> zu konfigurieren,<br />

• einen DHCP Client ins Netzwerk zu integrieren.<br />

Ein oder mehrere DHCP-Server versorgen die Clients eines TCP/IP basierten Netzwerks mit IP-Adressen<br />

<strong>und</strong> anderen netzwerkspezifischen Informationen, wie Default-Route, Netzwerkmaske, DNS-Server usw.<br />

Das Protocol wird ausführlich in den RFCs 2131, 2132, 2485 <strong>und</strong> 2489 beschrieben.<br />

26.1. Funktionsweise<br />

Beim Hochfahren fragt der Client mittels eines Broadcasts nach seiner IP-Adresse. Die Antwort erfolgt<br />

durch den DHCP-Server, der gleich noch weitere Angaben ausliefert.<br />

Default-Route , jedes Subnetz verfügt über ein anderes Standard-Gateway<br />

DNS-Server-Adressen , zur Namensauflösung<br />

Subnetzmaske<br />

Broadcast-Adresse<br />

Vendor-Optionen , geben bestimmten Geräten anhand derer Kennung spezifische Werte mit<br />

Lease-Time , Gültigkeitsdauer der IP-Adresse<br />

Der Ablauf von der Anfrage bis zur fertigen Konfiguration des Clients sieht dabei wie folgt aus. Die<br />

Kommunikation läuft per UDP zwischen dem Server Port 67 <strong>und</strong> dem Client Port 68. Wenn der Client bootet,<br />

fragt er mit einem DHCPDISCOVER per Broadcast nach seiner Konfiguration. Zu diesem Zeitpunkt<br />

hat der Client keine brauchbare IP sondern nur seine weltweit eindeutige MAC-Adresse. Deshalb hat das<br />

Broadcast-Paket die Quelladresse 0.0.0.0 <strong>und</strong> die Zieladresse 255.255.255.255. Die Antwort des Servers<br />

mittels DCHPOFFER hat bereits die zukünftige IP des Clients als Zieladresse. Zugestellt wird diese allein<br />

durch die MAC-Adresse des Clients. Der Client sammelt die Antworten, die er gegebenenfalls von mehreren<br />

223


26. DHCP - Dynamic Host Configuration Protocol<br />

Server erhält <strong>und</strong> sucht sich anschließend eine Konfiguration heraus. Er schickt dann ein DHCPREQUEST<br />

an den Server zurück <strong>und</strong> fordert so die Konfiguration an. Die Bestätigung des Servers erfolgt durch ein<br />

DHCPACK. Ab sofort hat der Client eine gültige IP <strong>und</strong> Netzwerkkonfiguration.<br />

Sollte bei diesem Vorgang etwas schief gehen, z.B. dass die IP aufgr<strong>und</strong> von Konfigurationsfehlern doppelt<br />

vergeben wurde, schickt der Client ein DHCPDECLINE an den Server <strong>und</strong> die Initialisierung beginnt von<br />

vorne.<br />

Fährt der Client herunter, kann er seine IP-Adresse mit einem DHCPRELEASE wieder freigeben. Genausogut<br />

kann er sie sich jedoch merken <strong>und</strong> nach einem Reboot wieder verwenden, wenn die Gültigkeitsdauer,<br />

die sogenannte Lease-Time, noch nicht abgelaufen ist. Die ersten Schritte der Initialisierung entfallen dann<br />

<strong>und</strong> der Client fordert gleich mittels DHCPREQUEST die alte Konfiguration vom Server an. Dieser bestätigt<br />

die Adresse oder zeigt mit DHCPNAK an, dass der Client seine gespeicherte Konfiguration vergessen <strong>und</strong><br />

mit der Initialisierung neu beginnen soll.<br />

26.2. DHCP-Client<br />

SuSE installiert den DHCP-Client aus dem Paket dhcpcd bei jeder Standardinstallation mit. Die Unterstützung<br />

reicht von der normalen Netzwerkkonfiguration bis hin zu den PCMCIA CardServices. Nach dem der Client<br />

die Antwort vom Server erhalten hat, werden diese von von ifconfig <strong>und</strong> route ausgewertet <strong>und</strong> die Nameserver<br />

in die Datei /etc/resolv.conf eingetragen.<br />

Noch umfassender kann der DHCP-Client des ISC konfiguriert werden, der nachfolgend beschrieben wird.<br />

Dazu müssen die Pakete dhcp-client <strong>und</strong> dhcp-base installiert werden.<br />

26.2.1. Konfiguration<br />

Die eigentlichen Einstellungen für den DHCP-Client finden sich in der Datei /etc/dhclient.conf. Systemweite<br />

Einstellungen sind in /etc/sysconfig/network/dhcp abgelegt. Neben diesen beiden Dateien<br />

wird beim Start auch der Inhalt der Datei /var/lib/dhcp/dhclient.leases ausgewertet, der Auskunft über die<br />

bisher erhaltenen Konfigurationen gibt. So kann der Client im Falle eines Ausfalls des DHCP-Servers auf<br />

eine alte noch gültige Konfiguration zurückgreifen <strong>und</strong> mit diesen Einstellungen weiterarbeiten.<br />

/etc/dhclient.conf<br />

Neben Zeitangaben können in dieser Datei Angaben zu den Leases gemacht werden. Außerdem können<br />

einzelne Server benannt werden, von denen keine Konfigurationen akzeptiert werden.<br />

# wieviele Sek<strong>und</strong>en der Client nach einem Server sucht<br />

timeout 60;<br />

# ist kein Server erreichbar <strong>und</strong> ist keine gültige Konfiguration mehr verfügbar, so wird nach<br />

# einigen Sek<strong>und</strong>en die Suche erneut begonnen<br />

retry 60;<br />

# der Client hat innerhalb der Grenzen, die durch den Server vorgegeben werden, die Möglichkeit<br />

# bestimmte Einstellungen selbst zu setzen<br />

send dhcp-lease-time 3600;<br />

# der Client kann bestimmte Werte vom Server anfordern<br />

request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name;<br />

# die angebotenen Konfigurationen können auf bestimmte Informationen geprüft werden, werden diese<br />

# diese nicht angeboten, wird die Konfiguration abgelehnt<br />

require subnet-mask, domain-name-servers;<br />

# sind die vom DHCP-Server übermittelten Werte unvollständig, können diese Lücken durch Standardvorgaben<br />

# gefüllt werden<br />

default {<br />

nis-domain planeten;<br />

nis-servers sonne.welt.dom;<br />

}<br />

224


# außerdem können die vom Server angebotenen Werte auch überschrieben werden<br />

supersede {<br />

host-name saturn;<br />

}<br />

# Angebote bestimmter Server können auch abgelehnt werden<br />

reject 192.168.0.10;<br />

#reboot 10;<br />

#select-timeout 5;<br />

#initial-interval 2;<br />

#script "/sbin/dhclient-script";<br />

/etc/sysconfig<br />

26.3. DHCP-Server<br />

Jetzt muss der Client angewiesen werden vom DHCP-Server seine Konfiguration zu beziehen. Das kann<br />

bequem per YaST2 erledigt werden oder in den Dateien im Verzeichnis /etc/sysconfig. So kann nicht nur die<br />

IP-Adressvergabe, sondern auch die Übernahme des Hostnamens, der Nameserver <strong>und</strong> der Domainsearchliste<br />

aktiviert werden.<br />

Diese Optionen finden sich auch alle gut dokumentiert in /etc/sysconfig/dhcp wieder. Die Konfiguration der<br />

einzelnen Interfaces unter /etc/sysconfig/network enthält dann noch Variablen wie BOOTPROTO=”dhcp”<br />

<strong>und</strong> STARTMODE=”onboot”, die es ermöglichen, dass der DHCP-Client beim Hochfahren des Rechners<br />

mitgestartet wird.<br />

26.3. DHCP-Server<br />

Gr<strong>und</strong>sätzlich ist die Vergabe von IP-Adressen auf zwei Weisen möglich.<br />

1. Statische Vergabe: Jeder anfragende Rechner bekommt aufgr<strong>und</strong> seiner eindeutigen MAC-Adresse immer<br />

wieder dieselbe IP-Adresse zugewiesen.<br />

2. Dynamische Vergabe: Die IP-Adressen werden an anfragende Clients nur auf Zeit vergeben, so dass ein<br />

Client nach einer gewissen Zeit mit hoher Wahrscheinlichkeit eine neue Adresse zugeteilt bekommt.<br />

Dadurch wird die Administration eines großen Netzwerks entscheidend vereinfacht, da sämtliche netzwerkspezifischen<br />

Einstellungen zentral auf dem DHCP-Server verwaltet werden.<br />

26.3.1. Installation<br />

Der DHCP-Server befindet sich im Paket dhcp-server, das bequem mit YaST2 nachinstalliert werden<br />

kann. Zusätzlich wird dhcp-base automatisch ausgewählt. Der Server des ISC 1 liegt in der Version 3.0.1rc9<br />

vor.<br />

Im Paket dhcp-tools finden sich zwei weitere nützliche Werkzeuge. Das Programm dhcpdump hilft beim<br />

Debuggen des DHCP Servers in dem es den Netzwerkverkehr analysiert <strong>und</strong> dhcping prüft ob ein DHCP-<br />

Server noch erreichbar ist.<br />

26.3.2. Dokumentation<br />

Wie so oft kann dieses Kapitel nur einen gr<strong>und</strong>legenden Einstieg in den DHCP Server bieten, weiterführende<br />

Dokumentation finden Sie jedoch nach der Installation der Pakete im Verzeichnis /usr/share/doc/packages/dhcp*.<br />

Das zugehörige HowTo ist leider schon etwas älter <strong>und</strong> liegt unter /usr/share/doc/howto.<br />

1 Internet Software Consortium<br />

225


26. DHCP - Dynamic Host Configuration Protocol<br />

Auch zahlreiche man pages helfen weiter, so z.B. zu den Themen dhcpd, dhclient, dhcpd.conf, dhcp-options<br />

<strong>und</strong> dhcp.leases.<br />

26.3.3. Konfiguration<br />

Die Konfiguration spielt sich in der zentralen Konfigurationsdatei /etc/dhcpd.conf ab. Zusätzliche Einstellungen<br />

finden sich in /etc/sysconfig/dhcpd. Erstere ist hierarchisch strukturiert. Zuerst werden globale<br />

Konfigurationsoptionen gesetzt, die für alle Clients im Netz gelten. Weiter unten folgen Subnetz-, Pool<strong>und</strong><br />

Hostspezifische Angaben. Parameter in einer unteren Hierarchiestufe überschreiben übergeordnete Angaben.<br />

Werden Änderungen an einer dieser Dateien vorgenommen, muss der DHCP-Server neu gestartet<br />

werden.<br />

Globale Definitionen<br />

Die hier getroffenen Einstellungen gelten für alle nachfolgenden Hosts, wenn sie nicht weiter unten ausdrücklich<br />

überschrieben werden. Wichtig ist, dass sämtliche Zeilen mit einem Semikolon abgeschlossen<br />

werden.<br />

#Definition der DNS-Domain, in der Regel der tatsächliche Domainname<br />

option domain-name "de.eu";<br />

#Definition der Adressen der DNS-Server<br />

option domain-name-servers 151.136.124.134;<br />

#Definition der statischen Routen<br />

option static-routes Ziel Gateway;<br />

#Definition der NIS-Domain<br />

option nis-domain NIS-Domainname;<br />

#Definition der Adressen der NIS-Server<br />

option nis-servers NIS-Server;<br />

#Definition der Adresse des SMTP-Servers<br />

option smtp-server SMTP-Server;<br />

#Definition der Adressen der Druckserver<br />

option lpr-servers Printserver;<br />

#Definition der Adressen der Zeit-Server<br />

option ntp-servers NTP-Servers;<br />

#Definition der Subnetzmaske<br />

option subnet-mask Maske;<br />

#Definition der Broadcast-Adresse<br />

option broadcast-adress IP-Adresse;<br />

#Standardgültigkeitsdauer einer IP-Adresse in Sek<strong>und</strong>en<br />

default-lease-time 600;<br />

#maximale Gültigkeitsdauer einer zugewiesenen IP-Adresse in Sek<strong>und</strong>en<br />

max-lease-time 7200;<br />

#Wahl des Aktualisierungsverfahrens für DDNS<br />

#mögliche Werte für style sind interim, ad-hoc, none<br />

ddns-update-style style none;<br />

#Unterstützung für DDNS<br />

#mögliche Werte für flag sind on oder off<br />

ddns-updates flag off;<br />

226


26.3. DHCP-Server<br />

Abgesehen von den Einstellungen für DDNS können die Deklarationen auch in einzelnen Subnetzen<br />

wieder überschrieben werden.<br />

Deklarationen<br />

Deklarationen beschreiben die Topologie eines Netzwerkes, beschreiben die Clients, geben IP-Adressbereiche<br />

an usw. Die wichtigsten Deklarationen werden im folgenden vorgestellt.<br />

subnet Die Definition eines Subnetzes muss immer gefolgt sein von der Anweisung netmask, weitere Parameter<br />

können folgen. Aus diesen Angaben bestimmt der dhcpd, ob eine bestimmte IP-Adresse im<br />

jeweiligen Subnetz liegt.<br />

range Mit dieser Anweisung werden die IP-Adressbereiche eingegrenzt.<br />

host Hier können Angaben zu einem ganz bestimmten Host getätigt werden.<br />

group Rechner, Subnetze <strong>und</strong> andere Gruppen können mit dieser Deklaration zu einer Gruppe zusammengefasst<br />

werden.<br />

Parameter<br />

Parameter haben einen beschreibenden Charakter. Sie geben z.B. an, ob unbekannte Clients bedient werden,<br />

wie lange eine IP vergeben wird <strong>und</strong> welche Konfiguration an den Client übermittelt wird.<br />

default-lease-time Die Standardgültigkeitsdauer in Sek<strong>und</strong>en einer an einen Rechner zugewiesenen IP-<br />

Adresse.<br />

max-lease-time Die maximale Gültigkeitsdauer in Sek<strong>und</strong>en, für die ein Rechner eine IP behalten darf.<br />

hardware Mit Hilfe der Hardware-Adresse kann jeder Rechner eindeutig identifiziert werden. Zusätzlich<br />

muss noch die Netzwerktopologie mit ethernet bzw. token-ring angegeben werden. Der Eintrag kann<br />

nur innerhalb der Deklaration host erfolgen.<br />

fixed-address Bei fest vergebenen IP-Adressen z.B. für Server wird dieser Parameter verwendet, der nur<br />

innerhalb der Deklaration host zulässig ist.<br />

# in diesem Subnetz werden nur Adresse zwischen 0.100 <strong>und</strong> 0.150 zur Verteilung freigegeben<br />

subnet 192.168.0.0<br />

netmask 255.255.255.0<br />

{<br />

range 192.168.0.100 192.168.0.150;<br />

}<br />

# jetzt wird für einen Host eine feste IP vergeben, die angegebene Adresse liegt nicht in einem<br />

# der IP-Ranges<br />

host berlin<br />

{<br />

hardware ethernet 00:90:27:51:4D:95;<br />

fixed-address 192.168.0.3;<br />

}<br />

# für alle Mitglieder der Gruppe soll eine andere Gültigkeitsdauer gesetzt werden<br />

# für alle anderen gilt weiterhin die globale Definition<br />

group<br />

{<br />

default-lease-time 43200;<br />

max-lease-time 43200;<br />

227


26. DHCP - Dynamic Host Configuration Protocol<br />

host hamburg.de.eu<br />

{<br />

hardware ethernet 00:90:27:51:4D:96;<br />

}<br />

host dresden.de.eu<br />

{<br />

hardware ethernet 00:90:27:51:4D:97;<br />

}<br />

}<br />

andere Beispielkonfiguration<br />

#Name des DHCP-Servers, entspricht dem Hostnamen des Servers<br />

server-identifier dhcp.testnetz.de;<br />

# globale Vorgabe der Domain für alle Clients<br />

option domain-name "testnetz.de";<br />

# Angabe der Domain Name Server, bei Verwendung des Namens muss dieser auflösbar sein, ansonsten setzt man<br />

# hier die IP-Adresse<br />

option domain-name-servers dns.testnetz.de;<br />

# hier wird das Standardgateway gesetzt<br />

option routers 192.168.1.1;<br />

subnet 192.168.1.0 netmask 255.255.255.0 {<br />

range 192.168.1.10 192.168.1.50;<br />

range dynamic-bootp 192.168.1.50 192.168.1.60;<br />

option broadcast-address 192.168.1.255;<br />

default-lease-time 36000;<br />

max-lease-time 72000;<br />

option subnet-mask 255.255.255.0;<br />

}<br />

host extrawurst {<br />

hardware ethernet 00:11:22:33:44:55;<br />

option host-name "extrawurst";<br />

option routers 192.168.1.2;<br />

fixed-address 192.168.1.5;<br />

}<br />

26.3.4. Protokolldatei<br />

Damit keine Inkonsistenzen <strong>und</strong> Fehler bei der Vergabe der IP-Adresse auftreten, muss der Server stets<br />

darüber informiert sein, welche Konfigurationen gerade vergeben sind. In der Datei /var/lib/dhcp/dhcpd.leases<br />

werden die vom DHCP-Server vergebenen IP-Adressen festgehalten. Dazu kommen Informationen darüber<br />

welche Rechner die IP erhalten haben, wann diese vergeben wurden <strong>und</strong> wie lange sie gültig sind. Immer<br />

wenn eine dynamische Konfiguration ausgeliefert wird, kommt ein entsprechender Eintrag am Ende der<br />

Datei dazu. Adressen die fest an bestimmte Clients vergeben werden, stehen nicht in dieser Protokolldatei.<br />

Damit diese Datei nicht im Laufe der Zeit unmöglich groß wird, wird sie zwischenzeitlich neu geschrieben.<br />

Die alte Datei bleibt unter einem temporären Namen erhalten.<br />

Inhalt der Datei dhcpd.leases<br />

Hinter dem Eintrag starts steht die Zeit, zu der die Adresse vergeben wurde, hinter dem Schlüsselwort<br />

ends die Zeit, zu der die Gültigkeit der Adresse abläuft bzw. die Zeit, zu der die Adresse wieder freigegeben<br />

wurde. Die erste Zahl nach dem Schlüsselwort bezeichnet den Wochentag (0 steht für Sonntag, 1 für Montag<br />

usw.), anschließend folgen Datum <strong>und</strong> Uhrzeit als GMT.<br />

228


26.3.5. Integration System V<br />

26.3. DHCP-Server<br />

Natürlich kann der Server wie üblich mit rcdhcpd start gestartet werden. Damit der DHCPD auch beim<br />

Hochfahren des Systems mitgestartet wird, fügt man mit Hilfe des Runlevel-Editors von YaST2 oder mit<br />

insserv die erforderlichen symbolischen Links in die Runlevelverzeichnisse ein.<br />

Übungen<br />

1. Einer der Kursteilnehmer jeder Gruppe konfiguriert seinen Rechner als DHCP-Server, der alle benötigten<br />

Informationen an die anfragenden Clients ausliefert.<br />

2. Die anderen Gruppenmitglieder konfigurieren den DHCP-Client.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

229


26. DHCP - Dynamic Host Configuration Protocol<br />

230


27. NFS - Network File System<br />

kurze Einstimmung<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

•<br />

•<br />

•<br />

NFS steht für Network File System <strong>und</strong> ermöglicht es, dass ein Server seine lokalen Verzeichnisse über<br />

das Netzwerk zur Verfügung stellt. Nach dem Mounten der Freigaben greifen die Clients völlig transparent<br />

auf die Ressourcen des Servers zu, so als ob es sich um das lokale Dateisystem handelt.<br />

27.1. Motivation<br />

27.2. Installation der Software<br />

Die benötigten Pakete (nfs-server, nfs-utils) sind leicht zu finden <strong>und</strong> können ohne Schwierigkeiten mit<br />

YaST / YaST2 installiert werden.<br />

27.3. Konfiguration<br />

Die komplette Konfiguration des Servers kann mit YaST2 sehr zuverlässig durchgeführt werden. Wählen<br />

Sie hier den Eintrag Netzwerk aus <strong>und</strong> klicken Sie auf NFS-Server. Jetzt wählen Sie die Option NFS-Server<br />

starten <strong>und</strong> bestätigen mit Weiter. Im nächsten Dialog geben Sie im oberen Bereich die zu exportierenden<br />

Verzeichnisse an, während unten die Zugriffsrechte vergeben werden. Wählen Sie dafür die entsprechende<br />

Freigabe oben aus <strong>und</strong> klicken Sie dann am unteren Rand auf Neu bzw. Bearbeiten. Leider gibt Ihnen<br />

YaST2 keine genauere Hilfe <strong>und</strong> verweist nur auf die man-page der Datei exports. Im Feld Rechner (Wildcard)<br />

können Sie sowohl den Namen des berechtigten Rechners eintragen, insofern dieser über die Datei<br />

/etc/hosts bzw. einen Nameserver aufgelöst werden kann, als auch die IP-Adresse eintragen. Möglich ist<br />

jedoch auch die Verwendung sogenannter Wildcards, d.h. Sie dürfen auch Platzhalter für Adress- / Namensteile<br />

einsetzen. Unter Optionen geben Sie die Art des Zugriffs an. Hierbei steht ro für nur lesend (readonly)<br />

<strong>und</strong> rw für lesend <strong>und</strong> schreibend (read/write). Sind Sie soweit mit Ihren Änderungen zufrieden, verlassen<br />

Sie den Dialog über Beenden.<br />

231


27. NFS - Network File System<br />

Auch hier passieren natürlich im Hintergr<strong>und</strong> etliche Dinge, die durch YaST2 verdeckt werden. Für das<br />

gr<strong>und</strong>legende Systemverständnis sind deshalb folgende Informationen wichtig. NFS baut ebenfalls auf Remote<br />

Procedure Calls auf, weshalb sichergestellt werden muss, dass der portmapper gestartet wird. Im Hintergr<strong>und</strong><br />

wird die Variable USE KERNEL NFSD auf yes gesetzt <strong>und</strong> in die Datei /etc/exports geschrieben.<br />

27.4. Starten der Dämonen <strong>und</strong> Statusabfrage<br />

Dem System muss über das Setzen von bestimmten Variablen mitgeteilt werden, welche Dienste gestartet<br />

werden sollen. Dafür müssen die Variablen NFS SERVER, START PORTMAP <strong>und</strong> USE KERNEL NFSD<br />

auf yes gesetzt werden.<br />

Die Skriptdateien rpc, rstatd <strong>und</strong> nfsserver sind für den Start der Dienste verantwortlich.<br />

Zur Kontrolle kann der Status der Dämonen mit Hilfe der Befehle ps <strong>und</strong> rpcinfo abgefragt werden. Die<br />

Kommandos würden beispielsweise<br />

ps -ax | grep nfs<br />

ps -ax | grep rpc<br />

<strong>und</strong><br />

rpcinfo -p<br />

lauten.<br />

Sollte der Server einmal durchgestartet werden müssen, ist nur ein erneuter Start des nfsservers notwendig.<br />

Das zugehörige Skript ist unter /sbin/init.d/nfsserver abgelegt. Der Befehl lautet wie folgt.<br />

rcnfsserver restart<br />

27.5. Konfiguration der Datei /etc/exports<br />

Die zentrale Konfigurationsdatei für den NFS-Server ist die Datei /etc/exports. Diese steuert, welcher<br />

Rechner auf welche Verzeichnisse mit welchen Rechten zugreifen darf. Die Rechner können wahlweise<br />

durch IP Nummern oder durch Namen angegeben werden. Die Maskierung der IP Adressen ist genauso<br />

zulässig wie Jokerzeichen, die sowohl bei den Adressen als auch bei den Namen erlaubt sind. Eintragungen<br />

siehe Tabelle 27.1 auf Seite 232.<br />

232<br />

Parameter Funktion<br />

ro Freigabe mit Leserechten<br />

rw gr<strong>und</strong>sätzlich kann auf der Freigabe gelesen <strong>und</strong> geschrieben<br />

werden, Dateisystemrechte werden nicht ausgehebelt.<br />

no root squash Rootrechte bleiben erhalten<br />

link relative absolute symbolische Links werden in relative umgesetzt,<br />

sinnvoll wenn das gesamte Dateisystem eines Rechners gemountet<br />

wird.<br />

link absolute symbolische Links bleiben unverändert<br />

Tabelle 27.1.: Datei /etc/exports


27.6. Client<br />

Damit eine Veränderung von /etc/exports wirksam wird, muss das Kommando exportfs -a ausgeführt<br />

werden (vgl. hierzu man kexportfs <strong>und</strong> das Verzeichnis<br />

/var/lib/nfs). Hierbei wird eine syntaktische Überprüfung der Datei vorgenommen.<br />

27.6. Client<br />

Eine gesonderte Konfiguration der Clients ist in der Regel nicht notwendig.<br />

Damit man NFS-Freigaben verwenden kann, müssen jedoch einige Vorraussetzungen erfüllt sein. Der<br />

Rechner, dessen Dateisystem eingeb<strong>und</strong>en werden soll, muss über das Netzwerk erreichbar sein. Das Kommando<br />

ping prüft, ob die Verbindung steht. Außerdem muss dort ein NFS Server installiert <strong>und</strong> so konfiguriert<br />

sein, dass der Client die Erlaubnis zum Dateizugriff auf das gewünschte Verzeichnis hat. Sind diese<br />

Vorraussetzungen erfüllt, so ist der Zugriff denkbar einfach. Ein einfacher mount Befehl genügt um das<br />

entfernte Dateisystem einzubinden.<br />

mount -t nfs tina:/home /home<br />

Damit wird das Verzeichnis /home des NFS Servers tina auf dem lokalen Rechner alex unter dem Verzeichnis<br />

/home eingehängt. Natürlich muss dieses Verzeichnis vor der Ausführung des Befehls mount bereits<br />

angelegt sein. Außerdem ist die Angabe von host Namen nur zulässig, wenn die Einträge in der Datei<br />

/etc/hosts entsprechend gepflegt sind. Selbstverständlich kann auch ein entsprechender Eintrag in die<br />

Datei /etc/fstab vorgenommen werden.<br />

tina:/home /home nfs user,auto,exec 0 0<br />

27.7. Kommandos<br />

showmount<br />

Das Kommando showmount zeigt Informationen über die Freigaben eines NFS-Servers. Die wichtigsten<br />

Optionen heißen -a <strong>und</strong> -e.<br />

27.8. Stolpersteine<br />

Der Server ist über das Netz gar nicht erreichbar (Überprüfung mit ping). Der Client hat nicht die erforderlichen<br />

Rechte, um die freigegebenen Verzeichnisse zu mounten. Das angegebene Verzeichnis ist gar nicht<br />

freigegeben.<br />

Achtung! Damit NFS sauber funktioniert ist es wichtig, dass jeder einzelne Benutzer sowohl auf den<br />

Clients, als auch auf dem Server die selbe UID hat. Andernfalls besteht ein großes Sicherheitsloch!<br />

27.9. Fehlerbehebung<br />

Die nachfolgenden Erklärungen sollen dazu geeignet sein, sich Schritt für Schritt an den Fehler heranzutasten<br />

<strong>und</strong> diesen zu beheben.<br />

233


27. NFS - Network File System<br />

Keine Dateien auf der gemounteten Freigabe<br />

Zuerst ist zu überprüfen, ob die NFS-Freigabe tatsächlich gemountet wurde. Dies kann am sichersten in der<br />

Datei /proc/mounts nachvollzogen werden. Gleichfalls ist dies mit dem Kommando mount -f möglich.<br />

Wenn das Dateisystem gemountet ist, wurde vielleicht ein anderes darüber gemountet oder am Server wurde<br />

der Mountpoint exportiert bevor das Filesystem dort gemountet wurde, so dass nur der leere Mountpoint<br />

sichtbar ist.<br />

Sollte die Freigabe noch nicht gemountet sein, dann holen Sie das mit den gewohnten Kommandos nach.<br />

Dateizugriff hängt oder Timeout<br />

Anscheinend ist es dem Client nicht möglich mit dem Server zu kommunizieren. (vgl. unten)<br />

Freigabe kann nicht gemountet werden<br />

Es treten zwei mögliche Fehler beim Mounten einer NFS-Freigabe auf.<br />

Failed, reason given by server: Permission denied<br />

Der Server erkennt nicht, dass der Client berechtigterweise auf die Freigabe zugreift.<br />

Kontrollieren Sie in diesem Fall die Datei /etc/exports <strong>und</strong> stellen Sie sicher, dass die zu mountende<br />

Freigabe tatsächlich eingetragen ist <strong>und</strong> der Client mit der richtigen IP <strong>und</strong> den vorgesehenen Mountoptionen<br />

zugreift. Sollte beispielsweise die Freigabe nur readonly exportiert werden, schlägt der Mountrequest<br />

mit read/write fehl.<br />

Stellen Sie sicher, dass die Änderungen in /etc/exports auch dem NFS-Server bekannt gemacht worden.<br />

Um sicher zu gehen, führen Sie erneut das Kommando exportfs -ra aus, so dass die Freigaben erneut<br />

gelesen werden.<br />

Sehen Sie sich die Datei /proc/fs/nfs/exports an. Hier werden die Freigaben <strong>und</strong> Clients gelistet. Außerdem<br />

gibt die Datei /var/lib/nfs/xtab alle derzeit exportierten Verzeichnisse <strong>und</strong> die dazugehörigen<br />

Optionen an.<br />

Hilft das alles nichts sollte auf IP- bzw. Hostname-Ebene sichergestellt werden, dass der Client den Server<br />

mit der erwarteten IP anspricht. Dabei können Fehler in der Namensauflösung genauso wie f<strong>und</strong>amentale<br />

Netzwerkprobleme zu seltsamen Fehlern führen.<br />

RPC: Program Not Registered oder andere RPC Fehler<br />

Der Client kann den NFS-Server selbst nicht ansprechen.<br />

Zunächst sollte kontrolliert werden, ob der NFS-Server überhaupt läuft. Dies kann mit dem Kommando<br />

rpcinfo -p auf dem Server erfolgen. Die Ausgabe folgt.<br />

program vers proto port<br />

100000 2 tcp 111 portmapper<br />

100000 2 udp 111 portmapper<br />

100024 1 udp 32772 status<br />

100024 1 tcp 32774 status<br />

100003 2 udp 2049 nfs<br />

100003 3 udp 2049 nfs<br />

100021 1 udp 32773 nlockmgr<br />

100021 3 udp 32773 nlockmgr<br />

100021 4 udp 32773 nlockmgr<br />

234


100005 1 udp 32774 mountd<br />

100005 1 tcp 32775 mountd<br />

100005 2 udp 32774 mountd<br />

100005 2 tcp 32775 mountd<br />

100005 3 udp 32774 mountd<br />

100005 3 tcp 32775 mountd<br />

27.9. Fehlerbehebung<br />

Mindestens die Dienste portmapper, nfs <strong>und</strong> mountd sollten hier auftauchen. Ist das nicht der Fall können<br />

mit den RC-Skripten rcportmap bzw. rcnfsserver die jeweiligen Server durchgestartet werden.<br />

Auch vom Client aus kann geprüft werden, ob die Dienste laufen. Führen Sie hierzu rpcinfo -p [server]<br />

aus <strong>und</strong> setzen Sie für Server entweder die IP-Adresse oder den Hostnamen ein. Jetzt ist insbesondere auf<br />

die angegebenen Versionen <strong>und</strong> die Protokollart zu achten. Erscheint keine Auflistung der Dienste, kann dies<br />

an den Dateien /etc/hosts.allow bzw. /etc/hosts.deny auf dem Server liegen. Hinweise auf Verstöße<br />

gegen die Sicherheitseinstellungen finden sich ggf. in /var/log/messages. Notfalls stellt ein Ping die Erreichbarkeit<br />

des Servers sicher. Allerdings ist auch denkbar, dass eine zwischengeschaltete Firewall zwar<br />

das Pingen zulässt, NFS aber ausschließt.<br />

Zugriffsberechtigung auf Dateien der Freigabe<br />

Auch hier kommen wieder zwei Probleme in Betracht. Zum einen können die Berechtigungen für die Freigabe<br />

auf der Serverseite eingeschränkt sein, was in der Datei /proc/fs/nfs/exports nachvollzogen werden<br />

kann. Auf Clientseite kann die Freigabe auch readonly gemountet worden sein. Hier sieht man sich am besten<br />

die Datei /proc/mounts an.<br />

Das zweite Problem kann durch das Mapping der UID bzw der GID auf den Benutzernamen bzw. den Gruppennamen<br />

in der /etc/passwd bzw. in der /etc/group auftreten. Sowohl server- als auch clientseitig müssen<br />

die UIDs der angelegten Benutzer übereinstimmen, sonst geraten die Berechtigungen für Dateien <strong>und</strong> Verzeichnisse<br />

völlig durcheinander.<br />

Sollten Sie als root auf die Freigabe zugreifen wollen, so muss in der Datei /etc/exports die Option no root squash<br />

gesetzt sein. Ansonsten wird root auf den Benutzer nobody gemapped.<br />

Bei der Konfiguration des NFS-Servers muss darauf geachtet werden, dass Leerzeichen in der /etc/exports<br />

zu ernsthaften Missverständnissen führen können.<br />

/export/dir hostname(rw,no_root_squash)<br />

/export/dir hostname (rw,no_root_squash)<br />

Mit der ersten Zeile wird die Freigabe für den genannten Host read/write zur Verfügung gestellt, wobei der<br />

Benutzer root nicht umgelenkt wird. In der zweiten Zeile wird die Freigabe für den Host mit den Standardeinstellungen,<br />

also read/write mit Umlenkung der root Privilegien, freigegeben <strong>und</strong> außerdem allen anderen<br />

Schreibberechtigung ohne Umleitung der root Berechtigung gewährt! Trifft keines der zwei genannten Probleme<br />

zu, handelt es sich möglicherweise um Zugriffsrechte auf Dateisystemebene, die nichts mit NFS zu<br />

tun haben.<br />

Export oder Mount readonly<br />

Entweder die Freigabe wird nur readonly exportiert oder sie wurde nur readonly gemountet. Demnach muss<br />

die Datei /etc/export abgeändert <strong>und</strong> danach der Befehl exportfs -ra<br />

235


27. NFS - Network File System<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Im vorangegangenen Kapitel haben Sie den Kernel <strong>und</strong> dessen Aufgaben kennengelernt. Mit der Kernelkompilierung<br />

<strong>und</strong> der Modulverwaltung sind Sie tief in das System eingestiegen. Auch wenn solche Eingriffe<br />

nur selten notwendig sind, sollten Sie das gr<strong>und</strong>legende Verständnis für diese systemnahen Vorgänge im<br />

Hinterkopf behalten.<br />

236


28. NIS - Network Information Services<br />

kurze Einstimmung<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

•<br />

•<br />

•<br />

Mit zunehmender Größe des Netzwerks <strong>und</strong> steigender Anzahl der verb<strong>und</strong>enen Rechner wird eine zentrale<br />

Administration beispielsweise der Benutzer immer dringender erforderlich. Die Network Information<br />

Services, die anfänglich unter dem Namen Yellow Pages (eingetragenes Warenzeichen der British Telecom)<br />

von Sun entwickelt wurden, kommen dieser Anforderung nach <strong>und</strong> bieten darüber hinaus weitere nicht zu<br />

verachtende Vorteile. Dahinter steckt ein sauberes Konzept <strong>und</strong> eine nicht ganz einfache Konfiguration, der<br />

im folgenden jedoch der Schrecken genommen werden soll.<br />

28.1. Motivation<br />

Konkret sind die Network Information Services ein Dienst, der Informationen textbasierter Dateien in Form<br />

einer Datenbank im Netzwerk zur Verfügung stellt. Dabei handelt es sich in der Regel um Dateien aus dem<br />

Umfeld der Benutzer- <strong>und</strong> Gruppenverwaltung (/etc/passwd, /etc/group). Denkbar ist aber auch die<br />

Verteilung anderer Dateien, beispielsweise der /etc/hosts, die die IP-Adressauflösung in einem Netzwerk<br />

ohne Nameserver übernimmt. Diese Dienste bringen folgende entscheidende Vorteile mit sich.<br />

Zentrale Administration ausgewählter Dateien z.B. der Benutzer- / Gruppendatenbank. Transparenz des<br />

Netzwerks für den Benutzer, der sich in Verbindung mit einem NFS-Server (zentrale Bereitstellung der<br />

Home-Verzeichnisse) an allen Rechnern der jeweiligen NIS-Domäne anmelden kann <strong>und</strong> überall dieselbe<br />

Arbeitsumgebung vorfindet. Schaffung der Voraussetzungen für eine sichere Umgebung, in der über das<br />

Netzwerk Ressourcen verteilt werden können, da jeder Benutzer systemintern über die gleiche UID dargestellt<br />

wird.<br />

28.2. Konzept<br />

NIS gliedert, als asymmetrischer Datenbankdienst, das Netz zunächst in NIS-Domänen, die wiederum NIS-<br />

Server (einen Master- <strong>und</strong> beliebig viele Slave-Server) auf der einen <strong>und</strong> NIS-Clients auf der anderen Seite<br />

umfassen. Zusätzlich zu den oben genannten bietet eine solche Struktur weitere Vorteile, die bereits bei<br />

wenigen <strong>Linux</strong>-Rechnern das Aufsetzen einer NIS-Umgebung rechtfertigen.<br />

237


28. NIS - Network Information Services<br />

Sämtliche verteilte Informationen werden in datenbankähnlichen Maps bereitgehalten, die insbesondere<br />

bei großen Datenmengen schnellere Suchergebnisse, verglichen mit dem Zugriff auf in Textdateien vorgehaltene<br />

Informationen, ermöglichen. Durch die Bereitstellung von Slave-Servern kann die Ausfallsicherheit<br />

der NIS-Domain aufgr<strong>und</strong> der Red<strong>und</strong>anz entscheidend verbessert werden.<br />

28.3. Funktion der Einzelkomponenten<br />

28.3.1. Master-Server<br />

Der NIS-Server stellt zentral in seiner NIS-Domäne allen unter <strong>Linux</strong> laufenden Rechnern die bereits angesprochenen<br />

Datenbanken zur Verfügung. Somit können sich Anwender an jedem im LAN befindlichen<br />

<strong>Linux</strong>-Rechner anmelden, ohne dass sie dort einen lokalen Benutzeraccount haben müssen. Zugleich verwaltet<br />

der NIS-Server auch die Datenbanken, d.h. dass beispielsweise neue Benutzer vom Administrator nur<br />

noch hier anlegt werden. Um diese Änderungen im gesamten Netzwerk bekannt zu machen, müssen jetzt<br />

allerdings die Datenbanken aktualisiert werden.<br />

28.3.2. Slave-Server<br />

Gesetzt den Fall, der Master-Server würde abstürzen oder wäre über das Netzwerk nicht mehr erreichbar.<br />

Dann könnte sich in der Domäne niemand mehr anmelden <strong>und</strong> der Geschäftsbetrieb wäre empfindlich<br />

gestört. Hier greifen die Slave-Server <strong>und</strong> erhöhen durch eine red<strong>und</strong>ante Datenhaltung der Maps die Ausfallsicherheit<br />

der Domäne. Es gibt auch noch andere Gründe die für die Bereitstellung eines zweiten Servers<br />

sprechen. Bei einem weitläufigen Gelände <strong>und</strong> damit verb<strong>und</strong>enen langen Kabelstrecken zwischen dem Server<br />

<strong>und</strong> seinen Clients verbessern räumlich getrennte Slave-Server entscheidend die Antwortzeiten. Im Falle<br />

zahlreicher Hosts kommt es auch zu einer Lastverteilung unter den Servern, da sich die Clients dem Server<br />

mit den kürzesten Antwortzeiten zuwenden.<br />

28.3.3. Client<br />

Der Dämonprozess ypbind stellt eine Verbindung zum NIS-Server her <strong>und</strong> erhält diese Verbindung aufrecht,<br />

um die Informationen in der NIS-Datenbank nutzen zu können. Dann schickt ypbind in kurzen Abständen<br />

Anfragen an den Server. Sollte dieser nicht antworten, so versucht ypbind einen anderen Server anzusprechen.<br />

Außerdem wird von Zeit zu Zeit geprüft, ob der angesprochene Server noch der schnellste ist. Weist ein<br />

anderer kürzere Antwortzeiten auf, so wird auf diesen umgeschaltet. Beim Zugriff auf Informationen verlässt<br />

sich der NIS-Client zunächst auf seine lokalen Informationen. Sollte er hier nicht fündig werden, greift er<br />

auf die über NIS zur Verfügung gestellten Dienste zurück, um beispielsweise die Benutzerauthentifizierung<br />

durchzuführen. Beachten Sie, dass diese Reihenfolge (festgelegt in der Datei /etc/nsswitch.conf)<br />

entscheidend sein kann!<br />

28.4. Installation<br />

Die Benennung der Pakete kann von einer zur anderen Distribution variieren. Während der eigentliche<br />

Server im Paket ypserv steckt, muss clientseitig das Paket ypbind installiert werden. Hinzu kommen noch<br />

die Pakete yp-tools <strong>und</strong> ypmake, deren Installation auf beiden Seiten Sinn macht.<br />

ypserv Dies ist der eigentliche NIS-Server, der sich jedoch aus mehreren Komponenten zusammensetzt.<br />

238<br />

• Skript /etc/init.d/ypserv (Link unter /usr/sbin/rcypserv) startet den NIS-Server dessen<br />

Programmcode in der Datei /usr/sbin/ypserv abgelegt ist.


28.5. Konfiguration<br />

• Skript /etc/init.d/yppasswdd (Link unter /usr/sbin/rcyppasswdd) startet einen weiteren<br />

Server, der es den Benutzern ermöglicht, mit verschiedenen Kommandos auf die Datenbanken<br />

am Server zuzugreifen, um so beispielsweise ihr Passwort zu ändern.<br />

• Skript /etc/init.d/ypxfrd (Link unter /usr/sbin/rcypxfrd) startet einen weiteren Dienst,<br />

der das Kopieren der Daten zu den Slaves-Servern erheblich beschleunigt.<br />

• Programm /usr/sbin/yppush sorgt dafür, dass die Datenbanken an alle NIS-Slaveserver übertragen<br />

werden.<br />

• verschiedene Libraries, Konfigurationsdateien <strong>und</strong> man-pages.<br />

ypbind Der als Dämon realisierte NIS-Client bindet den jeweiligen Host in eine NIS-Domain ein <strong>und</strong> sucht<br />

nach anderen NIS-Servern, wenn der derzeit verwendete nicht erreichbar ist.<br />

• Skript /etc/init.d/ypbind (Link unter /usr/bin/rcypbind) startet den NIS-Client.<br />

• eigene man-pages.<br />

yp-tools Dieses Paket enthält nützliche Werkzeuge, um Zugang zu den Maps zu erhalten oder um die<br />

Konfiguration eines NIS-Servers zu testen.<br />

• Kommando nisdomainname / ypdomainname setzt den Namen der jeweiligen NIS-Domäne.<br />

• Kommando ypcat greift auf den Inhalt der NIS-Datenbanken durch, wenn man als Parameter<br />

den Namen einer Map angibt.<br />

• Kommando ypchfn ändert die persönlichen Informationen eines Benutzers<br />

• Kommando ypchsh ändert die Standardshell<br />

• Befehl ypmatch prüft beispielsweise, ob ein bestimmter Benutzer in den Maps vorhanden ist.<br />

• Kommando yppasswd ändert das Passwort eines Benutzers<br />

• Kommando ypwhich erfragt den aktuellen NIS-Server.<br />

• Kommandos yppoll <strong>und</strong> ypset<br />

• Konfigurationsdatei /var/yp/nicknames, in der die Zuordnung der Dateinamen zu den Namen<br />

der Datenbankdateien erfolgt.<br />

• umfangreiche man-pages zu jedem der genannten Befehl.<br />

ypmake Dieses Paket enthält Perl-Module (/usr/lib/yp/ypmake/...), die das Erstellen <strong>und</strong> Warten der<br />

NIS-Datenbanken auf dem Master-Server unterstützen.<br />

28.5. Konfiguration<br />

28.5.1. Master-Server<br />

• Starten der Dienste (Variablen ausschließlich in /etc/rc.config)<br />

Portmapper: Zuerst muss sichergestellt werden, dass der Portmapper gestartet wird. Dieser ist notwendig,<br />

da NIS über Remote Procedure Calls (RPC) realisiert ist. Die zugehörige Variable heißt<br />

START PORTMAP.<br />

YP-Server: Damit dieser bei jedem Hochfahren gleich mitgestartet wird, setzt man die Variable<br />

START SERV auf yes.<br />

239


28. NIS - Network Information Services<br />

weitere Server: Um yppasswdd zu starten, setzen Sie die Variable START YPPASSWDD ebenfalls<br />

auf yes. Das ist notwendig damit Benutzer beispielsweise ihr Passwort gleich in der Datenbank<br />

ändern dürfen. Für den Dienst ypxfrd, der ein beschleunigtes Kopieren der Maps auf die Slave-<br />

Server ermöglicht, ist eine eigene Variable START YPXFRD vorgesehen.<br />

• Setzen des Domainnamens Der nächste Schritt betrifft den NIS-Domainnamen <strong>und</strong> den Namen des<br />

NIS-Servers. Mit verschiedenen Domainnamen ist es möglich, mehrere NIS-Server in einem Netzwerk<br />

einzurichten, ohne dass sich diese in die Quere kommen.<br />

YP-Domainname: Die zugehörige Variable heißt YP DOMAINNAME.<br />

YP-Server: Der Name des Servers wird in der Variable YP SERVER abgelegt.<br />

Speichern Sie an dieser Stelle die vorgenommenen Einstellungen <strong>und</strong> starten Sie, damit der Domainname<br />

gesetzt wird, das System durch. Wollen Sie einen Neustart vermeiden, können Sie auch mit dem<br />

Kommando<br />

domainname YP_DOMAINNAME<br />

die NIS-Domäne setzen. Ruft man selbiges ohne Parameter auf, wird die eingestellte NIS-Domäne<br />

zurückgegeben.<br />

• weitere Einstellungen: Einige weitere Variablen sind noch in der Datei<br />

/etc/rc.config.d/ypserv.rc.config abgelegt. Hier können die Pfade zu den Dateien passwd,<br />

shadow usw. angegeben <strong>und</strong> die Möglichkeit des Benutzers, Änderungen an der Benutzerdatenbank<br />

vorzunehmen, beschnitten werden.<br />

28.5.2. Makefile<br />

Zunächst liegen sämtliche Dateien als reine Textdateien vor. Das Makefile<br />

(/var/yp/Makefile) gibt an, welche Informationen wie in die NIS-Datenbank übernommen werden.<br />

Achtung<br />

Gehen Sie bei Änderungen im Makefile mit Bedacht vor! Schnell ist etwas falsch konfiguriert <strong>und</strong> die<br />

Datenbanken können nicht mehr sauber erstellt werden. Sie können eine Aufstellung der Optionen in Tabelle<br />

28.1 auf Seite 241 nachlesen.<br />

Daneben gibt es noch weitere Variablen, durch die man das Erstellen der Maps konfigurieren kann. Die<br />

Verzeichnisse der Konfigurationsdateien lassen sich ebenso einstellen, wie die dafür verwendeten Programme.<br />

28.5.3. Erstellen der Datenbanken<br />

Nachdem alles soweit vorbereitet ist (Variablen in rc.config gesetzt, Makefile vorbereitet), fehlen jetzt<br />

nur noch die NIS-Datenbanken. Diese zu erstellen, ist jedoch keine große Hürde mehr. Wechseln Sie in<br />

das Verzeichnis /var/yp <strong>und</strong> führen Sie hier das Kommando make aus. Jetzt wird ein Verzeichnis mit dem<br />

Namen der NIS-Domain in /var/yp angelegt <strong>und</strong> hierhin werden die Datenbankdateien kopiert. Dazu greift<br />

make auf die Informationen zahlreicher Dateien (passwd, group, shadow, hosts, networks, printcap, ...) des<br />

Verzeichnisses /etc zurück. Achten Sie in der Ausgabe von make auf etwaige Fehlermeldungen.<br />

Das Makefile sollte nur auf dem NIS-Masterserver der Domain ausgeführt werden. Alle aktualisierten<br />

Maps werden automatisch zu den Slave-Servern geschoben, die jedoch in der Datei /var/yp/ypservers<br />

referenziert werden müssen.<br />

240


28.5. Konfiguration<br />

Option Funktion<br />

MIN UID MIN GID Benutzer <strong>und</strong> Gruppen, deren ID kleiner als der angegebene<br />

Wert ist, werden nicht in die NIS-Maps übernommen.<br />

Somit bleiben standardmäßig sämtliche Systemaccounts<br />

außen vor <strong>und</strong> deshalb lokal auf jedem Rechner bekannt.<br />

all Dateien, die in die Maps übernommen werden.<br />

NO PUSH z.B. false nur mit der Einstellung false werden die Maps an die<br />

in der Datei /var/yp/ypservers eingetragenen Slave-<br />

Server verteilt.<br />

MERGE PASSWD<br />

MERGE GROUP z.B.<br />

true<br />

Beispiel Benutzerverwaltung<br />

Die Passwort-Dateien für Benutzer <strong>und</strong> Gruppen sollten<br />

nicht über das Netz verteilt werden, da dies ein potenzielles<br />

Sicherheitsrisiko darstellt. Um dennoch eine Authentifizierung<br />

durchführen zu können, werden (bei Setzen der<br />

Variablen auf true) die Dateien passwd <strong>und</strong> shadow bzw.<br />

group <strong>und</strong> gshadow miteinander verknüpft.<br />

Tabelle 28.1.: Optionen im Makefile<br />

Durch die zentralisierte Benutzerverwaltung ist bereits viel gewonnen. Änderungen werden jedoch nicht<br />

direkt in den bereitgestellten Datenbanken vorgenommen, sondern man greift weiterhin auf die üblichen<br />

Tools zurück, um Benutzer, Gruppen, usw. zu pflegen. Die geänderten Einträge finden jedoch nicht alleine<br />

in die Datenbank. Deshalb muss der Administrator nach jeder Änderung das Makefile erneut aufrufen, was<br />

sich jedoch leicht mit cron automatisieren lässt. Interessant ist, dass nicht immer die kompletten Maps<br />

geschrieben, sondern nur die Veränderungen übernommen werden.<br />

28.5.4. Slave-Server<br />

Im Gr<strong>und</strong>e ist die Einrichtung weiterer Slave-Server ein Kinderspiel. Diese unterscheiden sich vom Master-<br />

Server nur insofern, dass sie die Maps nicht selbst erstellen, sondern vom Master beziehen. Sie halten sich<br />

bei der Konfiguration zunächst an die besprochenen Variablen im Abschnitt ”Konfiguration des Master-<br />

Servers”. Dann setzen Sie auf dem Master die Variable NO PUSH im Makefile auf false <strong>und</strong> tragen sämtliche<br />

Slave-Server in die Datei /var/yp/ypservers ein. Danach erstellen Sie nochmals die Datenbanken.<br />

28.5.5. Client<br />

Die Konfiguration des Clients gestaltet sich mit Hilfe von YaST / YaST2 sehr einfach <strong>und</strong> zuverlässig.<br />

Sie können aber die im Hintergr<strong>und</strong> vorgenommenen Änderungen anhand der folgenden Erläuterungen<br />

nachvollziehen.<br />

Zunächst muss der Name der NIS-Domäne in der Variablen YP DOMAINNAME gesetzt werden. Danach<br />

kann bereits der Dämon ypbind gestartet werden, der den Server selbstständig über Broadcasts findet.<br />

Da es auf diese Weise jedoch sehr leicht möglich ist, dem Netz einen falschen Server unterzujubeln, sollte<br />

darauf verzichtet werden. Der sicherere Weg ist, die verfügbaren Server fest in /var/yp/ypservers<br />

bzw. /etc/yp.conf einzutragen. Unter SuSE sollte diese Änderung nicht händisch vorgenommen werden,<br />

sondern die Variable YP SERVER in /etc/rc.config gesetzt werden. Ein Name ist hier natürlich nur<br />

zulässig, wenn dieser mit Hilfe der /etc/hosts aufgelöst werden kann. Eine Namensauflösung über DNS<br />

241


28. NIS - Network Information Services<br />

ist nicht möglich! Bei der Kontaktaufnahme verwendet ypbind den Server, der zuerst antwortet. Nun muss<br />

dem Client noch mitgeteilt werden, dass er Benutzer über NIS suchen soll. Dies bewerkstelligt die Zeile<br />

+:::::: am Ende der Dateien /etc/passwd <strong>und</strong> /etc/groups. Sie veranlasst das System bei ihm unbekannten<br />

Benutzern <strong>und</strong> Gruppen, diese über das Netzwerk zu authentifizieren. Die Reihenfolge der Quellen, in<br />

denen <strong>Linux</strong> nach Informationen sucht, wird in der Datei /etc/nsswitch.conf festgelegt.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Im vorangegangenen Kapitel haben Sie den Kernel <strong>und</strong> dessen Aufgaben kennengelernt. Mit der Kernelkompilierung<br />

<strong>und</strong> der Modulverwaltung sind Sie tief in das System eingestiegen. Auch wenn solche Eingriffe<br />

nur selten notwendig sind, sollten Sie das gr<strong>und</strong>legende Verständnis für diese systemnahen Vorgänge im<br />

Hinterkopf behalten.<br />

242


29. SMB - Samba File Server <strong>und</strong> Primary Domain<br />

Controller<br />

kurze Einstimmung<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

•<br />

•<br />

•<br />

In heterogenen Netzwerken nimmt die Integration des Betriebssystems <strong>Linux</strong>, sowohl als Client, als auch<br />

als Server eine besondere Rolle ein. Das Schlüsselwort für das Zusammenspiel mit Windows heißt Samba<br />

<strong>und</strong> leitet sich vom SMB Protokoll der Firma Microsoft ab. Seit Projektbeginn 1991 hat sich Samba zu<br />

einem sehr stabilen <strong>und</strong> portablen Produkt entwickelt, das seinen festen Platz im Unternehmen eingenommen<br />

hat <strong>und</strong> dort in die bestehenden Umgebungen integriert wurde. Im folgenden kann Samba keinesfalls<br />

auch nur halbwegs ausgeleuchtet werden, das würde den Umfang der Schulung <strong>und</strong> dieser Unterlage sprengen.<br />

Stattdessen sollen zwei gr<strong>und</strong>legende Konfigurationsbeispiele (Verzeichnis- / Drucker-Freigaben <strong>und</strong><br />

Primary Domain Controller) erläutert werden.<br />

29.1. Gr<strong>und</strong>lagen<br />

Das Projekt setzt das Protokoll SMB (Server Message Block) der Firma Microsoft auf TCP / IP auf. Mit<br />

der Version 2.2.2 kann die komplette Windows NT Domänenstruktur abgebildet werden. Die Version 3.x,<br />

die sich derzeit noch im alpha-Stadium befindet, soll auch das Active Directory unterstützen. Folgende<br />

Fähigkeiten bringt das aktuelle Programmpaket mit.<br />

Bereitstellung leistungsfähiger File- <strong>und</strong> Printserver für DOS, Windows <strong>und</strong> OS/2 Funktionalität eines<br />

Primary Domain Controllers unter Windows NT<br />

29.2. Installation<br />

Bei fast allen modernen <strong>Linux</strong>-Distributionen wird Samba als Paket mitgeliefert, so dass man sich vor einem<br />

Selbstkompilieren drücken kann. Außerdem ist Samba dann bereits an die Gegebenheiten der jeweiligen<br />

Distribution angepaßt. Braucht man hingegen die neueste Release oder möchte man die Version 3.0 alpha<br />

ausprobieren, kommt man um das Kompilieren der Sourcen nicht herum.<br />

Installation der rpm-Pakete samba <strong>und</strong> samba-client Während das erste im wesentlichen die beiden Serverdienste<br />

smbd (SMB-Server) <strong>und</strong> nmbd (Netbios Name Server) bereitstellt, ermöglicht das zweite<br />

Paket den Betrieb als Client.<br />

243


29. SMB - Samba File Server <strong>und</strong> Primary Domain Controller<br />

• smbd: nimmt Verbindungen der Clients entgegen<br />

• nmbd: stellt den Clients Netbios Dienste zur Verfügung<br />

Beide Dämonprozesse müssen laufen, damit der Samba Server seine Dienste im Netzwerk bereitstellen<br />

kann.<br />

Kompilierung der Sourcen Sollten Sie nicht auf die Pakete der jeweiligen Distribution zurückgreifen wollen,<br />

sondern die aktuellen Sourcen heruntergeladen haben, beachten Sie die beigefügte Anleitung zur<br />

Kompilierung <strong>und</strong> Installation. Eventuell weichen die daraus resultierenden Pfadangaben von den<br />

Vorgaben der Distribution <strong>und</strong> dieser Unterlage ab. Bei der Konfiguration können Sie sich trotzdem<br />

an den unten vorgestellten Vorschlägen orientieren.<br />

Die angesprochenen Serverdienste smbd <strong>und</strong> nmbd werden im Verzeichnis /usr/sbin installiert <strong>und</strong> beim<br />

Booten durch das bereitgestellte Start-Skript rcsmbd gestartet. Dafür muss allerdings die Variable START SMB<br />

in der rc.config auf yes gesetzt werden. Dies können Sie wahlweise mit YaST / YaST2 oder einem beliebigen<br />

Editor durchführen. Vergessen Sie in letzterem Fall nicht SuSEconfig zu starten. Natürlich können<br />

die Dienste mit rcsmb start / stop / restart auch manuell gestartet / beendet bzw. durchgestartet werden.<br />

29.3. Konfiguration<br />

Die Konfiguration des Samba-Servers wird ausschließlich durch die Datei<br />

/etc/samba/smb.conf gesteuert, die sich gr<strong>und</strong>sätzlich in drei Teile gliedert.<br />

Sehen Sie sich doch einmal diese Datei, bevor Sie mit der Konfiguration beginnen, an.<br />

global In diesem Abschnitt werden freigabeübergreifende Einstellungen vorgenommen.<br />

homes / shares Hier wird den Clients bzw. deren Benutzern der Zugriff auf ihre Homeverzeichnisse oder<br />

andere Verzeichnisfreigaben ermöglicht. Voraussetzung ist natürlich, dass der Client den Server übers<br />

Netzwerk erreichen kann <strong>und</strong> der Benutzer über eine Zugangsberechtigung zum Server verfügt. Weiteren<br />

Freigaben wird jeweils ein eigener gleichnamiger Abschnitt in der /etc/samba/smb.conf zugeordnet.<br />

Dabei kann der Freigabenahme völlig losgelöst von der eigentlichen Verzeichnisstruktur<br />

auf dem Server vergeben werden.<br />

printers Hiermit werden die in der /etc/printcap spezifizierten Drucker den Clients zur Verfügung gestellt.<br />

Die benötigte Konfiguration wird in der Regel schon nach Installation bereitgestellt <strong>und</strong> muss<br />

nur in seltenen Fällen angepasst werden.<br />

Natürlich können Sie die smb.conf mit einem Texteditor bearbeiten <strong>und</strong> danach, damit die Änderungen<br />

wirksam werden, die Dienste durchstarten. Diese Vorgehensweise ist jedoch fehleranfällig. Deswegen<br />

enthält das Samba Projekt ein sehr komfortables Tool für diesen Zweck, das zudem von den Clients aus über<br />

den Browser erreichbar ist. Dieses Werkzeug heißt Samba Web Administration Tool, kurz SWAT, <strong>und</strong> wird<br />

im folgenden vorgestellt.<br />

29.3.1. Samba Web Administration Tool (SWAT)<br />

SWAT bietet nicht nur die komfortable Konfiguration des Samba-Servers an, sondern weist zu jeder Option<br />

eine Verlinkung an eine Stelle in der umfangreichen Dokumentation auf. In der Regel läuft das Tool bereits<br />

nach der Installation der angesprochenen Pakete problemlos. Starten Sie einen Browser Ihrer Wahl <strong>und</strong><br />

geben Sie in der Adresszeile den Dienst http://, den Namen des Rechners gefolgt von einem Doppelpunkt<br />

<strong>und</strong> der Portnummer 901 ein (z.B. http://alisa001:901). Wenn die Verbindung problemlos aufgebaut werden<br />

244


29.3. Konfiguration<br />

kann, erscheint ein Fenster für die Passwortabfrage, in dem Sie sich, damit Sie administrativ tätig werden<br />

können, als root ausweisen. Würden Sie sich als normaler Benutzer anmelden, könnten Sie nicht viel mehr<br />

als Ihr Passwort ändern.<br />

mögliche Probleme • Name des Servers wird nicht aufgelöst: der Nameserver ist nicht erreichbar oder<br />

Sie haben keinen solchen eingerichtet. Tragen Sie den Server clientseitig in die Datei /etc/hosts<br />

ein oder geben Sie statt des Namens die IP-Adresse an.<br />

• Verbindung wird abgelehnt: der Server ist zwar erreichbar, aber eine Verbindung auf diesen Port<br />

wird nicht zugelassen. Sehen Sie sich die Dateien /etc/services <strong>und</strong> /etc/inetd.conf an. Sind hier<br />

die Zeilen für SWAT auskommentiert? Entfernen Sie ggf. das # <strong>und</strong> starten Sie den Dienst inetd<br />

mit rcinetd restart durch.<br />

• Rechner kann nicht erreicht werden: Nur im Ausnahmefall werden Sie den Samba-Server über<br />

einen Proxy erreichen. Rufen Sie die Einstellungen Ihres Browsers auf <strong>und</strong> vereinbaren Sie im<br />

Unterpunkt Proxies, dass Sie die Verbindung zum Samba-Server nicht über den Proxy herstellen.<br />

• Seite kann nicht angezeigt werden: Stellen Sie mit rcinetd status sicher, dass auf Ihrem <strong>Linux</strong>-<br />

System der Dienst inetd läuft. Ist das nicht der Fall starten Sie ihn mit rcinetd start <strong>und</strong> setzen Sie<br />

die Variable START INETD in der rc.config auf yes, damit dieser auch beim nächsten Durchstarten<br />

des Rechners mitgestartet wird.<br />

die Register Globals, Shares <strong>und</strong> Printers • Letztendlich trägt SWAT Ihre Änderungen auch nur in<br />

die dahinterstehende Datei smb.conf ein, weshalb sich die Benennung der Register <strong>und</strong> Optionen<br />

ganz nach den Vorgaben dieser Datei richten.<br />

• Auf den Registern Globals, Shares <strong>und</strong> Printers legen Sie mit zahlreichen Optionen die gr<strong>und</strong>legende<br />

Konfiguration <strong>und</strong> sämtliche Einstellungen für Freigaben fest. Wichtig ist, dass Sie, bevor<br />

Sie das Register bzw. die Freigabe wechseln, auf die Schaltfläche Commit Changes klicken.<br />

Erst dann werden Ihre Änderungen in die smb.conf übernommen. Andernfalls gehen Ihnen die<br />

zuletzt vorgenommenen Einstellungen verloren.<br />

die Register Home, Status, View <strong>und</strong> Password Während auf dem Register Home vor allem die umfangreiche<br />

Dokumentation zu Samba verlinkt ist, bietet Ihnen das Register Status die Möglichkeit, die<br />

Dämonprozesse smbd <strong>und</strong> nmbd, z.B. nach einer Änderung an der Konfiguration, durchzustarten.<br />

Darüberhinaus sind hier alle aktiven Verbindungen, Freigaben <strong>und</strong> geöffneten Dateien aufgeführt.<br />

Unter View erhalten Sie einen Einblick in die smb.conf. Auf dem Register Password können neue<br />

Benutzer zum System hinzugefügt bzw. gelöscht <strong>und</strong> Passwörter zurückgesetzt werden. Was sich so<br />

leicht anhört, hat es in sich. Mehr zur Benutzerverwaltung weiter unten.<br />

29.3.2. Globale Einstellungen<br />

Die in Tabelle 29.1 auf Seite 246 aufgeführten Optionen müssen unabhängig von der späteren Verwendung<br />

des Samba-Servers gesetzt werden. Leider kann hier nur ein sehr eingeschränkter Einblick in die zahlreichen<br />

Möglichkeiten gegeben werden.<br />

29.3.3. Verzeichnis-Freigaben<br />

Die Einstellungen aus Tabelle 29.2 auf Seite 247 sind für jedes freigegebene Verzeichnis individuell zu<br />

setzen.<br />

245


29. SMB - Samba File Server <strong>und</strong> Primary Domain Controller<br />

246<br />

Option Funktion<br />

workgroup z.B. mytux.de Geben Sie hier den Namen der Arbeitsgruppe oder der<br />

Domäne an.<br />

netbios name z.B. alisa001<br />

Geben Sie hier den Namen an, unter dem der Samba-Server<br />

in der Netzwerkumgebung der Windows - Clients erscheinen<br />

soll.<br />

Dieser Text wird in der Netzwerkumgebung der Clients als<br />

Kommentar im Eigenschaftsfenster sichtbar.<br />

server string z.B. Samba-<br />

Server<br />

interfaces z.B. eth0 Hier brauchen Sie nur das Netzwerkinterface anzugeben,<br />

könnten aber auch eine IP - Adresse mit Subnetmask eintragen.<br />

security z.B. user share: Sicherheit auf Freigabeebene. Dies erfordert für jede<br />

einzelne Freigabe ein eigenes Passwort <strong>und</strong> ist daher<br />

sehr aufwändig zu verwalten. user: Sicherheit auf Benutzerebene.<br />

Die Authentifizierung erfolgt über die Samba eigene<br />

Benutzerdatenbank. server: Die Authentifizierung der<br />

Benutzer wird von einem anderen Server durchgeführt. In<br />

diesem Fall müssen Sie zusätzlich den Parameter password<br />

server setzen. domain: Ähnlich der Einstellung server, nur<br />

wird die Authentifizierung von einem Windows NT Primary<br />

Domain Controller durchgeführt. Dieser muss in der<br />

Option password server referenziert werden.<br />

encrypt passwords z.B. Geben Sie hier an, ob die Passwortübertragung ver-<br />

yes<br />

schlüsselt oder unverschlüsselt stattfindet.<br />

map to guest z.B. never In welchen Fällen soll ein zugreifender Client auf den<br />

Gastzugang gelassen werden. never: Jeder Zugriff mit unbekannten<br />

Namen oder falschem Passwort wird abgewiesen.<br />

bad user: Zugriffe mit unbekanntem Benutzernamen<br />

werden unter dem Gast-Account angemeldet. bad password:<br />

Zugriffe mit falschem Passwort werden unter dem<br />

Gast-Account angemeldet.<br />

wins server wins support Samba kann einen bestehenden WINS - Server nutzen (ge-<br />

z.B. yes<br />

ben Sie hierfür im Feld wins server die IP - Adresse des<br />

entsprechenden Servers an) oder selbst die Funktion eines<br />

WINS - Servers übernehmen (setzen Sie die Option wins<br />

support auf auf yes).<br />

Tabelle 29.1.: Samba - Globale Einstellungen


29.3. Konfiguration<br />

Option Funktion<br />

comment z.B. Home Ver- Der Kommentar wird auf den Windows-Clients im Eigenzeichnisschaftsfenster<br />

der Freigabe angezeigt.<br />

path z.B. /home/%u Der Pfad gibt das freigegebene Verzeichnis auf dem<br />

Samba-Server an. Für die Variable %u wird der Benutzername<br />

eingesetzt.<br />

read only z.B. no Setzen Sie diese Option auf yes, ist die Freigabe schreibgeschützt,<br />

setzen Sie sie auf no, ist Sie gr<strong>und</strong>sätzlich für<br />

den Schreibzugriff freigegeben. Diese Einstellung wird<br />

ggf. von den Rechten des einzelnen Benutzers weiter eingeschränkt,<br />

jedoch niemals gelockert.<br />

create mask z.B. 0640 Diese Option gibt die Zugriffsrechte neu angelegter Dateien<br />

auf dieser Freigabe in Oktalzahldarstellung an.<br />

directory mask z.B. 0750 Diese Option gibt die Zugriffsrechte für neu angelegte Verzeichnisse<br />

an.<br />

guest ok (guest account) Wenn Sie diese Option auf yes setzen, können beliebige<br />

z.B. no (z.B. nobody) Anwender mit den Rechten des unter guest account angegebenen<br />

Benutzers auf die Freigabe zugreifen. Beachten<br />

Sie, dass solche Freigaben völlig ungeschützt vor unauthorisiertem<br />

Zugriff sind. Vereinbarte Zugriffsrechte auf<br />

Dateisystemebene bleiben davon jedoch unberührt!<br />

browseable z.B. yes Geben Sie hier yes an, wird die Freigabe in der Windows-<br />

Netzwerkumgebung sichtbar, andernfalls bleibt sie versteckt,<br />

kann aber dennoch verb<strong>und</strong>en werden.<br />

available z.B. yes Mit dieser Option können Sie eine Freigabe sperren, so<br />

dass alle Verbindungsversuche abgelehnt werden.<br />

valid users z.B. mucke Diese Option wird nur sichtbar, wenn Sie die Schaltfläche<br />

(invalid users)<br />

Advanced View anklicken. Hier geben Sie die Benutzer<br />

an, die auf die Freigabe zugreifen dürfen. Sie können sowohl<br />

einzelne Benutzer oder ganze Gruppen angeben. Eine<br />

Möglichkeit einzelne Benutzer oder Gruppen auszusperren,<br />

bietet die Option invalid users.<br />

Tabelle 29.2.: Verzeichnisfreigaben<br />

247


29. SMB - Samba File Server <strong>und</strong> Primary Domain Controller<br />

29.3.4. Drucker-Freigaben<br />

Um einen <strong>Linux</strong>-Drucker auch von Windows-Rechnern aus nutzen zu können, muß zunächst sichergestellt<br />

sein, daß der Drucker bereits unter <strong>Linux</strong> installiert <strong>und</strong> konfiguriert ist. Wenn das Drucken unter <strong>Linux</strong><br />

möglich ist, dann läßt sich die gemeinsame Nutzung des Druckers relativ einfach einrichten. Genau genommen<br />

brauchen Sie gar keine Freigabe einzurichten, weil der vordefinierte Eintrag Printers automatisch<br />

sämtliche Drucker freigibt. Dennoch sollen einige Einstellungen wie in Tabelle 29.3 auf Seite 248 erläutert,<br />

vorgestellt werden. Optionen, die sich mit denen für Verzeichnis-Freigaben decken (vgl. oben), werden nicht<br />

nochmals aufgeführt.<br />

Option Funktion<br />

path z.B. /var/tmp Mit diesem Parameter geben Sie den Pfad zum<br />

Spool-Verzeichnis an.<br />

printable z.B. yes Setzen Sie diese Option auf yes, damit Clients<br />

im vereinbarten Spoolverzeichnis Dateien schreiben<br />

dürfen.<br />

printer name z.B. HPLj5L Name des Druckers, so wie er bei der Einrichtung<br />

unter <strong>Linux</strong> angegeben wurde.<br />

Tabelle 29.3.: Druckerfreigaben<br />

Danach kann der Drucker in der Netzwerkumgebung gesehen <strong>und</strong> auf den Clients installiert werden,<br />

vorausgesetzt, Sie haben einen Treiber für die jeweilige Windows-Version.<br />

29.3.5. Aufsetzen eines Primary Domain Controllers<br />

Ein Primary Domain Controller ist für die zentrale Verwaltung der Benutzer <strong>und</strong> der Rechner in seiner<br />

Domäne verantwortlich. Jeder Benutzer meldet sich nach dem Hochfahren des Clients beim PDC, der die<br />

Authentifizierung durchführt, an. Von daher gestaltet sich die Konfiguration eines PDC ein wenig anspruchsvoller.<br />

Achtung<br />

Es ist zwar eine gute Idee, testweise einen Samba-Server als PDC zu konfigurieren, das sollte aber nie<br />

in einer produktiven Umgebung geschehen. Stellen Sie bei einem Testaufbau unbedingt sicher, dass Sie<br />

keinen anderen PDCs in die Quere kommen, d.h. auf keinen Fall eine physikalische Verbindung zu einem<br />

bestehenden Netzwerk herstellen!<br />

Wenn man weiß, wie Windows-Netze funktionieren, braucht man sich über die nachfolgend angeführte<br />

Konfiguration nicht zu w<strong>und</strong>ern. Tatsache ist, dass sich sämtliche Windows-Rechner, oder solche, die<br />

dieselben Protokolle verwenden, ständig um die Vormachtstellung streiten. Deswegen können Sie auch in<br />

Windows-Netzen mit einem Sniffer ständig Pakete nachweisen, obwohl keiner Ihrer Benutzer / Clients einen<br />

Dienst beansprucht. <strong>Linux</strong> <strong>und</strong> Unix Rechner verhalten sich in aller Regel sehr still, es sei denn, sie sind ein<br />

Samba-Server <strong>und</strong> werden ständig von anderen Windows-Clients befragt. Zusätzlich zu den oben genannten<br />

globalen Optionen, müssen noch die aus Tabelle 29.4 auf Seite 249 gesetzt werden.<br />

29.3.6. Benutzerverwaltung<br />

So weit so gut! Aber noch kann niemand die Freigaben im Explorer verbinden, geschweige denn sich <strong>und</strong><br />

seinen Rechner an der Domäne anmelden. Zunächst müssen noch Benutzer angelegt werden. Hier reicht<br />

248


Option Funktion<br />

domain logons z.B. yes Gibt an, ob sich Clients der unter workgroup angegebenen<br />

Arbeitsgruppe / Domäne bei diesem Server<br />

anmelden müssen.<br />

domain master z.B. true Diese Option legt fest, dass der Samba-Server derjenige<br />

Browser in der Domäne ist, den andere lokale<br />

Browser (in anderen Netzen) nach einer Liste mit<br />

zulässigen Rechnern <strong>und</strong> Benutzern fragen.<br />

preferred master z.B. true Der Rechner wird mit der vorgeschlagenen Einstellung<br />

mit an Sicherheit grenzender Wahrscheinlichkeit<br />

ein Master Browser für seine Domäne.<br />

local master z.B. yes Sorgt dafür, dass der Samba-Server auch der lokale<br />

Master des Subnetzes wird.<br />

os level z.B. 30 Diese Zahl legt, in Verbindung mit den anderen Optionen<br />

fest, wie gut die Chancen stehen, dass der<br />

Server ein lokaler Master Browser wird.<br />

Tabelle 29.4.: PDC mit Samba<br />

29.3. Konfiguration<br />

es nicht aus, auf dem letzten Register Password einen neuen User einzutragen. Welche Rechte sollte dieser<br />

im Dateisystem haben? Es muss also auch noch ein Benutzer auf der <strong>Linux</strong>-Betriebssystemseite her. Erst<br />

wenn dieser angelegt wurde, können Sie Ihn mit SWAT auf der Sambaseite hinzufügen. Nutzen die Benutzer<br />

nur die Dienste des Samba-Servers brauchen sich diese niemals auf dem <strong>Linux</strong>-Rechner einzuloggen. Das<br />

erreicht man, indem beim Anlegen des Users die Shell mit /bin/false angegeben wird.<br />

Wenn Sie einen PDC konfiguriert haben, braucht auch jeder Rechner einen Account. Sie könnten hierfür<br />

eine eigene Gruppe verwenden. Um einen solchen Maschinen Account anzulegen, schreiben Sie das folgende<br />

Skript ab <strong>und</strong> führen Sie es dann für jeden Rechner aus, indem Sie es mit dem Hostnamen als Parameter<br />

aufrufen.<br />

#!/bin/bash<br />

useradd -g hosts -s /bin/false -c ??Maschinen Account?? ??$1\$??<br />

smbpasswd -m -a ??$1\$??<br />

Sie können dieses kurze Skript noch an Ihre Bedürfnisse anpassen. Die erste Zeile gibt die Shell an,<br />

unter der das Skript lauffähig ist. Dann folgt die Anweisung, die den Benutzer in die /etc/passwd bzw.<br />

/etc/shadow einträgt. Nach dem Parameter -g steht die zugehörige Gruppe, nach -s folgt die Shell <strong>und</strong><br />

hinter -c wird ein Kommentar angegeben. Die Variable $1 enthält den Rechnernamen, der um ein $ erweitert<br />

wird <strong>und</strong> in der letzten Zeile in die Datei /etc/samba/smb.conf als Maschinen-Account (-m) eingetragen<br />

wird. Danach können die Rechner an der Domäne angemeldet werden. Als berechtigter Benutzer tritt root<br />

auf, der auch als Samba-User eingetragen sein muss.<br />

29.3.7. Passwort-Problematik<br />

Entscheidend für die Passwortverwaltung unter Samba ist die auf den Clients eingesetzte Windows-Version.<br />

Windows95 überträgt sämtliche Passwörter unverschlüsselt, während Windows98, WindowsNT, Windows2000<br />

usw. prinzipiell verschlüsselt arbeiten. Dementsprechend muss der Parameter encrypt passwords gesetzt<br />

werden. Sollten Ihre Clients verschiedene Windows-Versionen benutzen, so muss unter Umständen die Verschlüsselung<br />

der aktuelleren Clients durch Einträge in der Registry verhindert werden. Beim Anlegen der<br />

249


29. SMB - Samba File Server <strong>und</strong> Primary Domain Controller<br />

Benutzer mit SWAT wird die Datei /etc/samba/smbpasswd gepflegt. Die hier aufgeführten Passwörter<br />

werden mit den bei der Authentifizierung der Clients gelieferten verglichen. Ändert ein Benutzer sein<br />

Windows-Kennwort muss er auch sein Samba-Passwort (mit Hilfe von SWAT) ändern, damit er noch auf<br />

passwortgeschützte Freigaben zugreifen kann. Dieser Nachteil existiert mit einem Primary Domain Controller<br />

nicht, da die Passwortänderung auf dem PDC erfolgt.<br />

29.4. Samba-Client<br />

In der Regel wird ein <strong>Linux</strong>-Rechner in einem Netzwerk zwar als Samba-Server eingesetzt, aber auch der<br />

umgekehrte Weg ist möglich, soll hier aber nur kurz angerissen werden. Mit dem folgenden Kommando kann<br />

nach erfolgreicher Passworteingabe eine Windows-Freigabe in den Verzeichnisbaum von <strong>Linux</strong> gemountet<br />

werden.<br />

mount -t smbfs //alisa001/home /mnt<br />

oder<br />

mount -t smbfs -o username=mucke,ro //alisa001/home /mnt<br />

Sie können jetzt auf den Mountpoint zugreifen, als würden die Daten auf Ihrem eigenen Rechner liegen.<br />

29.5. Dokumentation <strong>und</strong> Quellcode<br />

Wie bereits deutlich geworden ist, stellt Samba ein sehr komplexes Produkt dar, weshalb an dieser Stelle auf<br />

weiterführende Dokumentation verwiesen werden soll.<br />

• Paketdokumentation im Verzeichnis /usr/share/doc/packages/samba<br />

• man-Page der Konfigurationsdatei smb.conf<br />

• Samba HOWTO<br />

Werfen Sie außerdem einen Blick auf das im Anhang befindliche Literaturverzeichnis, das einige Buchtips<br />

zu diesem <strong>und</strong> anderen Themen bereithält. Des Weiteren finden sich im Internet viele Quellen, die bei auftauchenden<br />

Fragen <strong>und</strong> Fehlern weiterhelfen. Allen voran sei hier die Homepage des Projekts www.samba.org<br />

selbst genannt. Es lohnt sich aber auch bei www.google.de nach Hilfestellungen, Erfahrungsberichten oder<br />

Foren mit dem Thema Samba zu suchen.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Im vorangegangenen Kapitel haben Sie den Kernel <strong>und</strong> dessen Aufgaben kennengelernt. Mit der Kernelkompilierung<br />

<strong>und</strong> der Modulverwaltung sind Sie tief in das System eingestiegen. Auch wenn solche Eingriffe<br />

nur selten notwendig sind, sollten Sie das gr<strong>und</strong>legende Verständnis für diese systemnahen Vorgänge im<br />

Hinterkopf behalten.<br />

250


30. CVS - Concurrent Version System<br />

Eine Entwicklungsumgebung ohne jegliche Verwaltung des Quellcodes ist bei den heutigen Projektumfängen<br />

kaum mehr denkbar. Im Vordergr<strong>und</strong> steht dabei die gleichzeitige Bearbeitung der Sourcen durch zahlreiche<br />

Entwickler. Weitere Eigenschaften wie eine geschickte Versionsverwaltung, die Möglichkeit Parallelentwicklungen<br />

vom Hauptentwicklungsast abzuspalten <strong>und</strong> die Möglichkeit zu einem späteren Zeitpunkt<br />

die verschiedenen Richtungen wieder zusammen zu führen, machen ein CVS unschlagbar. Wie man einen<br />

eigenen CVS-Server einrichtet, erklärt das nachfolgende Kapitel.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• wie man einen solchen Server aufsetzt,<br />

• geschickt einrichtet<br />

• <strong>und</strong> administriert.<br />

Wie man ein CVS verwendet, wird übrigens nicht an dieser Stelle, sondern im Buch V, Kapitel 37.1 auf<br />

Seite 273 erläutert.<br />

30.1. Installation der Softwarepakete<br />

Mit Hilfe von YaST2 kann das von SuSE mitgelieferte Paket cvs problemlos nachinstalliert werden. Auch<br />

andere Distributoren verzichten auf diese wichtige Software nicht <strong>und</strong> stellen entsprechende Pakete zur<br />

Verfügung.<br />

30.2. Vorbereitung<br />

Der hier vorgestellte CVS-Server verwendet als CVSROOT das Verzeichnis /var/cvs. Der Benutzer anonymcvs<br />

wird als Alias für den anonymen Zugriff eingerichtet. Außerdem wird eigens eine Gruppe cvs für<br />

alle Benutzer des CVS eingerichtet.<br />

30.2.1. Gruppenverwaltung<br />

Nachdem eine GID für die neue Gruppe cvs systemweit reserviert wurde, kann die Gruppe mit ”YaST2/Benutzer/Gruppen<br />

bearbeiten <strong>und</strong> anlegen” eingetragen werden. Anschließend werden alle Benutzer, die CVS benutzen sollen,<br />

in diese Gruppe aufgenommen. Für den anonymen Zugriff ergänzt man zusätzlich den User nobody.<br />

251


30. CVS - Concurrent Version System<br />

30.2.2. Einrichtung des Repositories<br />

Jetzt legt man ein Verzeichnis /var/cvs an <strong>und</strong> initialisiert dieses als CVS-Repository mit Hilfe der Kommandozeile<br />

cvs -d /var/cvs init.<br />

chgrp -R cvs /var/cvs<br />

chmod -R g+sw /var/cvs<br />

STICKY DIRECTORIES When the sticky bit is set on a directory, files in that directory may be unlinked<br />

or renamed only by root or their owner. Without the sticky bit, anyone able to write to the directory can delete<br />

or rename files. The sticky bit is commonly fo<strong>und</strong> on directories, such as /tmp, that are world-writable.<br />

30.2.3. Passwortverwaltung<br />

Damit der Benutzer anonymcvs auf das CVS zugreifen kann, muss er auf einen Systemuser gemappt werden<br />

<strong>und</strong> ein Passwort zugeordnet bekommen. Ersteres passiert mit der Datei /var/cvs/CVSROOT/passwd,<br />

letzteres kann mit dem Kommando htpasswd erzeugt werden. Außerdem wird eine Datei erzeugt, in der alle<br />

User mit lesendem Zugriff aufgeführt werden.<br />

htpasswd -n anonymcvs<br />

echo anonymcvs:SzYEQpU4cMmPU:nobody >> /var/cvs/CVSROOT/passwd<br />

echo anonymcvs >> /var/cvs/CVSROOT/readers<br />

30.3. Portkonfiguration<br />

In der Regel spricht man den CVS-Server über den Port 2401 an. Dieser muss in der Datei /etc/services<br />

für TCP- <strong>und</strong> UDP-Verbindungen genannt werden. Man fügt also die beiden Zeilen wie hier gezeigt ein.<br />

cvspserver 2401/tcp # cvspserver<br />

cvspserver 2401/udp # cvspserver<br />

30.4. Konfiguration des Inetd<br />

Der CVS-Server wird nur auf Anfrage vom Inetd gestartet. In dessen Konfiguration ist also die nachfolgende<br />

Zeile entweder mit ”YaST2/Netzwerk/Start <strong>und</strong> Stop von Systemdiensten” oder mit Hilfe eines beliebigen<br />

Editors in der Datei /etc/inetd.conf hinzuzufügen <strong>und</strong> zu aktivieren.<br />

cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs --allow-root=/var/cv<br />

Verwendet man YaST2 nicht, darf man keinesfalls das An- bzw. Durchstarten des Inetd vergessen. War<br />

dieser bereits gestartet reicht ein rcinetd reload aus. Zusätzlich muss sichergestellt sein, das dieser Dienst<br />

auch beim Hochfahren des Rechners gestartet wird.<br />

bis SuSE 7.3<br />

In der Datei /etc/rc.config muss START_INETD="yes" gesetzt werden. Diese wirkt sich dann beim nächsten<br />

Hochfahren des Systems aus. Manuell kann der Dienst aber auch mit rcinetd start angestartet werden.<br />

252


ab SuSE 8.0<br />

30.5. Funktionstest<br />

Entscheidend für das Anstarten eines Dienstes ist die Verlinkung im entsprechenden Runlevel. Dies kann<br />

mit YaST2/System/Runlevel-Editor oder dem Kommando insserv inetd erfolgen. Ein Durchstarten des<br />

Systems ist nicht notwendig, wenn der erste Start gleich mit rcinetd start angestoßen wird.<br />

30.5. Funktionstest<br />

Ein kurzer Funktionstest soll zeigen, ob der CVS-Server tatsächlich funktioniert.<br />

mucto@linux:˜> cvs -d :pserver:anonymcvs@linux:/var/cvs login<br />

Logging in to :pserver:anonymcvs@linux:2401/var/cvs<br />

CVS password:<br />

mucto@linux:˜><br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Im vorangegangenen Kapitel haben Sie gelernt einen CVS-Server aufzusetzen. Wie man ein CVS-System<br />

verwendet, erfahren Sie im Buch V, Kapitel 37.1 auf Seite 273.<br />

253


30. CVS - Concurrent Version System<br />

254


31. VNC - Virtual Network Computing<br />

Wer hat noch nicht davon geträumt, eine Verbindung zu einem entfernten X-Server herzustellen, <strong>und</strong> auf<br />

diesem zu arbeiten als wäre es der lokale Arbeitsplatz? Mit VNC steht dem nichts mehr im Wege.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die Konzeption von VNC kennen,<br />

• die Funktionsweise des Clients <strong>und</strong> Servers zu verstehen,<br />

• die wichtigsten Kommandos im Umgang mit VNC anzuwenden.<br />

31.1. Motivation<br />

Sich auf einem entfernten Rechner einzuloggen <strong>und</strong> eine Remote-Shell zu starten, ist, wie Sie wissen, kein<br />

großes Problem. Allerdings lässt dabei die Benutzerfre<strong>und</strong>lichkeit große Wünsche offen, die nur von einer<br />

grafischen Benutzeroberfläche bedient werden können. Warum also nicht gleich die X-Anwendungen oder<br />

besser noch den X-Server übers Netz verteilen? Gr<strong>und</strong>sätzlich steht dem unter <strong>Linux</strong> nichts im Wege, da<br />

die komplette Architektur des X Window Systems bereits auf einer Client-Server Architektur beruht. Dabei<br />

sind jedoch zwei Stufen zu unterscheiden. Zum Einen können die X-Anwendungen auf dem entfernten<br />

Rechner laufen, aber auf dem lokalen X-Server angezeigt werden, zum Zweiten kann der X-Server <strong>und</strong> alle<br />

darauf laufenden X-Anwendungen remote laufen <strong>und</strong> von einem Viewer lokal angezeigt werden. Die zuletzt<br />

genannte Vorgehensweise verfolgt VNC, <strong>und</strong> bietet damit gegenüber der ersten Variante entscheidende<br />

Vorteile.<br />

• Die entfernten grafischen Oberflächen können in einem Remote-Display über das Netzwerk auf anderen<br />

Rechnern einer Vielzahl an Architekturen angezeigt werden.<br />

• Dabei übernimmt der Viewer nur die Aufgabe der Anzeige <strong>und</strong> speichert keine zusätzlichen Informationen.<br />

Wird er geschlossen, hat das keine Auswirkungen auf den entfernten X-Server <strong>und</strong> man kann<br />

nach Aufbau einer neuen Verbindung an derselben Stelle weiterarbeiten, wo man zuvor aufgehört hat.<br />

• Der Programmcode ist stark optimiert <strong>und</strong> nimmt wenig Speicher ein.<br />

• Die Bedienung sowohl des Servers als auch des Clients ist denkbar einfach.<br />

• Neben dem normalen Viewer, der für viele Plattformen verfügbar ist, gibt es noch einen Java Viewer,<br />

der es ermöglicht den X-Server in einem Browserfenster anzuzeigen, dadurch wird echte Plattformunabhängigkeit<br />

erreicht.<br />

• Desweiteren ist es möglich, dass ein Desktop von mehreren Viewern gezeigt wird.<br />

• Außerdem ist VNC frei erhältlich <strong>und</strong> kann auf Basis der GNU Public Licence heruntergeladen, benutzt,<br />

weiterentwickelt <strong>und</strong> vertrieben werden.<br />

255


31. VNC - Virtual Network Computing<br />

31.2. Softwareinstallation<br />

Das Paket vnc wird bei SuSE 8.0 in der Version 3.3.3r2-223 mitgeliefert <strong>und</strong> kann demnach problemlos<br />

mit YaST2 nachinstalliert werden. Die aktuelle Version kann bei Bedarf als binäres tar.gz bzw. zip Archiv<br />

von http://www.uk.research.att.com/vnc für sämtliche Plattformen heruntergeladen werden. Außerdem<br />

findet sich hier reichhaltige Dokumentation zum Thema VNC <strong>und</strong> anderen damit verwandten Themen.<br />

Die nachfolgende Installation gestaltet sich recht einfach, da das Archiv nur entpackt <strong>und</strong> die Dateien in ein<br />

beliebiges Verzeichnis kopiert werden müssen. Dieses sollte jedoch für die Allgemeinheit zugänglich sein<br />

<strong>und</strong> in die Pfadvariablen aufgenommen werden.<br />

31.3. Funktionsweise<br />

VNC besteht im wesentlichen aus zwei Komponenten, dem Server, der das Display erzeugt, <strong>und</strong> dem Viewer,<br />

der das Display anzeigt. Dabei können Server <strong>und</strong> Viewer auf verschiedenen Rechnern verschiedener<br />

Architekturen laufen, da das darunterliegende Protokoll einfach, offen <strong>und</strong> plattformunabhängig ist. Wie<br />

bereits angesprochen, hält der Viewer keine sessionspezifischen Daten im Speicher, so dass eine erneute<br />

Verbindung auf den Server den zuletzt verlassenen Desktop wieder darstellt. Unter VNC liegt die TCP/IP<br />

Protokoll Suite. Insofern müssen die Rechner entsprechend vernetzt sein. Allerdings spricht gr<strong>und</strong>sätzlich<br />

nichts gegen die Implementierung anderer Netzwerkprotokolle <strong>und</strong> -topologien. Der Server übernimmt zwei<br />

wesentliche Aufgaben. Aus Sicht der X-Anwendungen handelt es sich um einen X-Server, der mit dem bekannten<br />

X-Protokoll angesprochen werden kann. Vom Standpunkt der VNC-Clients stellt er sich jedoch als<br />

VNC-Server dar, der über das VNC-Protokoll ein Remote-Display zur Verfügung stellt.<br />

31.4. VNC-Server<br />

Mit vncserver kann ein virtueller X-Server gestartet werden. Beim ersten Mal wird man nach einem Passwort<br />

gefragt, dass bei jeder weiteren Verbindung angegeben werden muss. Später kann es durch vncpasswd<br />

geändert werden. Der neu angestartete Server erstellt ein neues Display <strong>und</strong> gibt diesem einen Namen, der<br />

den Rechnernamen <strong>und</strong> eine fortlaufende Nummer enthält. Welcher Windowmanager <strong>und</strong> welche Anwendungen<br />

beim Starten des Servers aufgerufen werden, ist in der Datei ˜/.vnc/xstartup angegeben <strong>und</strong> kann<br />

nach Belieben angepasst werden. Außerdem schreibt der Server sämtliche Aktivitäten in ein Log-File namens<br />

˜/.vnc/.log. Weitere wichtige Optionen betreffen die Auflösung (-geometry widthxheight)<br />

<strong>und</strong> die Farbtiefe (-depth depth).<br />

Beispiel: vncserver -geometry 1024x768 -depth 24 startet einen VNC-Server auf dem ersten verfügbaren<br />

Display mit einer Auflösung von 1024x768 <strong>und</strong> einer Farbtiefe von 24bit.<br />

Ein VNC-Server kann mit demselben Aufruf auch wieder beendet werden. Allerdings ist hierzu der Parameter<br />

-kill notwendig.<br />

Beispiel: vncserver -kill :1.<br />

31.5. VNC-Client<br />

31.5.1. Viewer<br />

Mit vncviewer wird der Client gestartet, dem jedoch noch der Displayname <strong>und</strong> das Passwort übergeben<br />

werden muss. In der Regel funktioniert das problemlos <strong>und</strong> man erhält nach der Authentifizierung ein Fenster,<br />

das die grafische Oberfläche anzeigt.<br />

256


31.5.2. Browser<br />

31.6. Beispielanwendungen<br />

Der VNC-Server enthält auch einen kleinen Web-Server, der beim Verbindungsaufbau die Java-Version des<br />

Viewers an den Client übermittelt. Damit ist es möglich von jedem javafähigen Browser auf dem Server<br />

grafisch zu arbeiten. Der Server lauscht am Port 5800 + Displaynummer.<br />

Beispiel: http://mandy:5801/. Nach Anstarten des Applets wird nach dem Passwort gefragt <strong>und</strong> kurz<br />

darauf der X-Server <strong>und</strong> seine Anwendungen angezeigt.<br />

31.6. Beispielanwendungen<br />

Wie Screenshots auf der Website zeigen, ist das Einsatzgebiet von VNC recht weitläufig. Sowohl Windows-,<br />

als auch Unix-, ja sogar Macintosh-Systeme können als Server, aber auch als Client dienen. Allerdings ist<br />

die Performance stark abhängig vom verwendeten Windowmanager.<br />

Zusammenfassung<br />

Sie haben VNC kennengelernt.<br />

31.7. Überbleibsel aus der alten Version<br />

31.8. VNC - Virtual Network Computing<br />

Die Software VNC besteht gr<strong>und</strong>sätzlich aus zwei Komponenten, einerseits dem Server, der ein Display<br />

zur Verfügung stellt, <strong>und</strong> andererseits dem Viewer, der das Display auf dem Bildschirm anzeigt. Der Server<br />

kann auf einem anderen Rechner, einem anderen Betriebssystem <strong>und</strong> einer anderen Systemarchitektur laufen<br />

als der Viewer. Das Protokoll, das beide miteinander verbindet ist unkompliziert, offen <strong>und</strong> unabhängig<br />

von der Plattform. Der Viewer speichert keinerlei Daten. Somit gehen keinerlei Daten verloren, wenn die<br />

Verbindung unterbrochen wird. Nachdem diese wiederhergestellt wurde, kann ohne jegliche Einschränkung<br />

weitergearbeitet werden. Auf diese Weise ist man sehr flexibel, da die Verbindung ohne weiteres auch von<br />

einem anderen Rechner wiederaufgebaut werden kann. Um VNC zu starten, ist es demnach notwendig einen<br />

Server zu starten <strong>und</strong> den Viewer mit diesem zu verbinden. Dazu müssen natürlich zunächst die richtigen<br />

Pakete installiert werden. Das Paket heißt vnc <strong>und</strong> kann mit YaST2 nachinstalliert werden. Die Windowsversionen<br />

sowohl des Servers als auch des Viewers finden Sie auf der ersten CD unter /dosutils/vnc. VNC<br />

setzt voraus, dass zwischen Server <strong>und</strong> Viewer eine Netzwerkverbindung über TCP/IP besteht. Damit Sie<br />

mit VNC zurechtkommen, benötigen Sie in jedem Fall die IP-Adresse oder den Namen des Servers.<br />

31.8.1. VNC-Server<br />

Der VNC-Server stellt für die X-Anwendungen ein X-Display zur Verfügung, so dass diese annehmen, sie<br />

würden tatsächlich auf einem X-Server laufen. Was auf der Serverseite fehlt, ist der physikalische Monitor<br />

zur Anzeige der Anwendungen. Der Server kann am Prompt durch den Befehl vncserver, hinter dem sich<br />

ein Perl-Skript verbirgt, gestartet werden. Sitzen Sie an einem entfernten Rechner, loggen Sie sich zunächst<br />

auf dem Server beispielsweise telnet ein. Wenn Sie den VNC-Server zum ersten mal starten, werden Sie<br />

nach einem Passwort gefragt, das Sie dann benötigen, wenn Sie sich mit dem Viewer verbinden. Alle von<br />

einem Benutzer gestarteten Server verwenden das gleiche Passwort, das zu einem späteren Zeitpunkt mit<br />

vncpasswd geändert werden kann. Beim Starten des Servers wird Ihnen ein Hinweis angezeigt, was Sie<br />

beim Start des Viewers angeben müssen. Hierbei geht es um den Namen des Servers <strong>und</strong> die Nummer des<br />

Displays. Ersteren können Sie natürlich nur verwenden, wenn die Namensauflösung funktioniert. Ansonsten<br />

257


31. VNC - Virtual Network Computing<br />

müssen Sie mit der IP-Adresse arbeiten. Die erste freie Nummer wird die Nummer des neuen Displays. Sie<br />

werden einmal abgesehen von der Ausgabe des Skripts keine Veränderungen auf dem Server bemerken.<br />

weitere Optionen!!!<br />

Ein Server kann mit dem Befehl vncserver kill :DISPLAYNUMMER beendet werden.<br />

31.8.2. VNC Client<br />

Wenn Sie den Viewer starten, brauchen Sie den Namen des Servers oder dessen IP-Adresse <strong>und</strong> die Nummer<br />

des Displays.<br />

Beschreibung / Viewer, Browser<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

258


32. LDAP - Lightweight Directory Access Protocol<br />

kurze Einstimmung<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• erstes Lernziel,<br />

• zweites Lernziel,<br />

• drittes Lernziel.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

259


32. LDAP - Lightweight Directory Access Protocol<br />

260


33. Apache<br />

Die mit Abstand häufigste Verwendung eines <strong>Linux</strong> System dürfte nach wie vor der Einsatz als Webserver<br />

darstellen. Das Open Source Projekt Apache hat hier klar die Nase vorn.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die SuSE spezifischen Vorgaben <strong>und</strong><br />

• vieles mehr kennen.<br />

SuSE <strong>Linux</strong> bringt jedoch auch die Version 2 des Apache Webservers mit.<br />

33.1. Softwareinstallation<br />

Im Wesentlichen befinden sich die notwendigen Dateien für den Apache Webserver in den drei Paketen<br />

apache, apache-doc <strong>und</strong> apache-example-pages.<br />

Der eigentliche Server heißt /usr/sbin/httpd. Die Konfigurationsdateien sind im Verzeichnis /etc/httpd.<br />

Die Protokolldateien werden unter /var/log/httpd abgelegt. Die PID des Servers findet sich in der Datei<br />

/var/run/httpd.pid. Das Root Verzeichnis für den Server liegt unter \verb/srv/www— <strong>und</strong><br />

das Start-/Killskript liegt unter /etc/init.d/apache.<br />

33.2. Beispielumgebung<br />

Einige Beispieldokumente befinden sich im DocumentRoot /srv/www. Soll ein eigener Webserver aufgebaut<br />

werden, so sollte in der Datei /etc/httpd/httpd.conf die Einstellung DocumentRoot auf ein anderes<br />

Verzeichnis gelenkt werden.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Das war der Apache Web Server.<br />

261


33. Apache<br />

262


34. FTP - File Transfer Protocol<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die SuSE Beispielumgebung <strong>und</strong><br />

• vieles mehr kennen.<br />

34.1. Softwareinstallation<br />

34.2. Beispielumgebung<br />

Um die Einrichtung eines FTP-Servers zu erleichtern, hält die SuSE Distribution im Paket ftpdir eine<br />

Beispielumgebung für das Verzeichnis /src/ftp bereit.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Das war der FTP-Server.<br />

263


34. FTP - File Transfer Protocol<br />

264


35. Printserver<br />

kurze Einstimmung<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• erstes Lernziel,<br />

• zweites Lernziel,<br />

• drittes Lernziel.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

265


35. Printserver<br />

266


36. Internetdienste<br />

kurze Einstimmung<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• erstes Lernziel,<br />

• zweites Lernziel,<br />

• drittes Lernziel.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

267


36. Internetdienste<br />

268


Teil IV.<br />

<strong>Linux</strong> für Sicherheitsfanatiker<br />

- Einsatz in unsicherer Umgebung -<br />

269


Teil V.<br />

<strong>Linux</strong> für Entwickler<br />

- Einsatz als Entwicklungsumgebung -<br />

271


37. Programmierung<br />

<strong>Linux</strong> eignet sich hervorragend als Programmierungsumgebung, dank verschiedener Aspekte:<br />

• Viele Compiler sind als Open Source Projekte für <strong>Linux</strong> erhältlich<br />

• Dadurch ist auch oftmals Dokumentation für diese Projekte frei zugänglich<br />

• Die X - Umgebung ist dank Ihrer Vielseitigkeit gut für die Softwareentwicklung geeignet<br />

• Die Netzwerkfähigkeiten von <strong>Linux</strong> erleichtern dem Programmierer vielmals die Arbeit<br />

• <strong>Linux</strong> ist die naheliegende Basis für Apache, <strong>und</strong> daher auch als Inter/Intranet Server die ideale Plattform<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

•<br />

•<br />

•<br />

37.1. CVS - Concurrent Versions System<br />

In diesem Kapitel geht es um die Verwendung der Code-Verwaltung CVS. Die Einrichtung eines CVS-<br />

Servers kann im Buch III, Kapitel 30 auf Seite 251 nachgelesen werden.<br />

37.1.1. Motivation<br />

Sobald mehrere Menschen zusammenarbeiten gibt es zwangsläufig Probleme - Diese steigern sich, je mehr<br />

Leute an einem Projekt beteiligt sind. Das schlägt sich auch auf die produzierten Dokumente oder Quellcodes<br />

aus. Wenn ein Dokument für alle anderen zur Bearbeitung freigegeben ist, wird es von allen anderen<br />

genommen, <strong>und</strong> im schlechtesten Fall trägt jeder Änderungen <strong>und</strong> Kommentare ein - mit dem Resultat,<br />

dass der ursprüngliche Autor große Mühe hat die einzelnen Änderungen mit einander abzugleichen <strong>und</strong><br />

zusammenzuführen. Die Herausgabe des Dokuments an jeweils nur einen Bearbeiter fällt allerdings aus<br />

Zeitgründen auch weg - Was nun?<br />

An dieser Stelle setzt das CVS ein - es erlaubt eine zentrale Versionsverwaltung, bei der jeder jederzeit<br />

Zugriff auf das Dokument erhält, <strong>und</strong> in dem die Zusammenführung unterschiedlicher Versionen erleichtert,<br />

wenn nicht sogar kommplett dem Verwalter abgenommen wird.<br />

CVS eignet sich also sowohl für ein Team von Programmierern als auch für eine Gruppe von Autoren,<br />

die an einem Buch schreiben, <strong>und</strong> andere Projekte . . .<br />

273


37. Programmierung<br />

37.1.2. Installation<br />

CVS ist Bestandteil aller großen Distributionen, <strong>und</strong> daher einfach zu installieren. Es ist schon schwieriger<br />

eine Codebasis zur Arbeit mit CVS zu erstellen <strong>und</strong> allen Benutzern zur Verfügung zu stellen.<br />

Um CVS sinnvoll zu installieren ist es von Vorteil, auf dem Zielrechner Root-Rechte zu besitzen, es geht<br />

jedoch mit Einschränkungen in der Funktionalität auch ohne. Überspringen Sie einfach die entsprechenden<br />

Stellen, zu denen Sie als normaler Benutzer nicht berechtigt sind.<br />

Befolgen Sie die Anweisungen Schritt für Schritt, um eine Codebasis für CVS zu erstellen:<br />

1. Erstellen Sie das zentrale Verzeichnis für die Verwaltung der Quellcodes mit CVS mit:<br />

mkdir /pfad/codebasis<br />

2. Initialisieren Sie das Verzeichnis für die Benutzung mit CVS als Codebasis:<br />

cvs -d /pfad/codebasis init<br />

3. Um die Zugriffsrechte auf das Verzeichnis geeignet verwalten zu können legen Sie bitte eine eigene<br />

Benutzergruppe für die CVS Benutzer an, <strong>und</strong> verändern Sie für das Codebasis-Verzeichnis die Rechte<br />

folgendermassen:<br />

chgrp -R cvsgruppe /pfad/codebasis<br />

chmod ug+rwx /pfad/codebasis/CVSROOT<br />

4. Fügen Sie die Benutzer, die CVS verwenden sollen, in die CVS-Gruppe ein!<br />

Die Codebasis ist jetzt fertig für die Benutzung.<br />

37.1.3. CVS über das Netzwerk<br />

Installation<br />

CVS kann über das Netzwerk verwendet werden. Dafür gibt es zwei Möglichkeiten.<br />

• Um CVS über ein Extraprogramm, dem PServer zu verwenden, müssen Sie unter SuSE <strong>Linux</strong> zuerst<br />

eine Einstellung in der Datei /etc/inetd.conf vornehmen - hier ist nämlich standardmässig der<br />

Eintrag für cvspserver auf Port 2401 deaktiviert. An dieser Stelle können Sie auch die Repositories<br />

spezifizieren, zu denen die User Zugriff haben sollen.<br />

• Um CVS über die SSH Tools auszuführen müssen Sie auf dem Server-Rechner nichts anderes als<br />

einen normalen Benutzeraccount mit entsprechenden Rechten besitzen. Auf dem Clientrechner sollten<br />

Sie vor der Verwendung die Umgebungsvariable CVS_RSH auf ssh setzen.<br />

Verwendung<br />

Sie rufen CVS auf wie gewohnt, nur dass Sie als CVSROOT folgende Angabe nehmen:<br />

:[Remoteprotokoll]:[username]@[rechnername laut DNS]:[Verzeichnis des Repositories]<br />

Dabei können Sie als Remoteprotokoll entweder pserver für die Inetd Methode oder ext für die SSH<br />

Methode angeben. Um mit pserver aus entfernten Rechnern Dateien auschecken zu können müssen Sie<br />

sich allerdings zuerst mit cvs login auf dem Rechner authentifizieren.<br />

274


37.1.4. Verwendung<br />

37.1. CVS - Concurrent Versions System<br />

Zur Arbeit mit CVS bieten sich mehrere Werkzeuge oder auch Clients an. Auf der Kommandozeile heisst<br />

das Tool cvs. CVS kann auf verschiedene Repositories zugreifen; deshalb müssen Sie entweder die Umgebungsvariable<br />

CVSROOT für jeden Benutzer des Repositories richtig setzen, oder das richtige Repository<br />

bei jedem Aufruf von cvs per Parameter spezifizieren. Die Umgebungsvariable setzen Sie mit:<br />

export CVSROOT=/pfad/codebasis<br />

Um das nicht bei jeder neuen Login Shell neu eingeben zu müssen, können Sie diesen Befehl auch in Ihre<br />

Datei .profile eintragen.<br />

Wenn Sie das Repository über Parameter angeben wollen, tun Sie das analog hierzu:<br />

cvs -d /pfad/codebasis [CVS-Befehl]<br />

Im Folgenden gehen wir davon aus, dass Sie den Weg der Umgebungsvariable gewählt haben.<br />

Projekt anlegen<br />

Um ein neues Projekt (Sammlung von Quellcodes, alle zu einem Programm/Programmpaket gehörig) bei<br />

einem CVS - Repository anzumelden, muss man es “importieren”. Dazu dient der Befehl cvs import:<br />

cd [zu importierendes Verzeichnis]<br />

cvs import -m "[Kommentar/Erläuterung]" [group]/[name] [user] [releasetag]<br />

Dabei sind mehrere Sachen zu beachten:<br />

Kommentar: kurze Erläuterung des Zustands des Quellcodes<br />

group: Gruppenname für Projektgruppen, kann man beliebig schachteln<br />

name: Projektname<br />

user: Von wem das Release eingespielt wurde<br />

releasetag: “öffentlicher” Name für die eingespielte Version<br />

cvs liest nun das aktuelle Verzeichnis aus, <strong>und</strong> importiert enthaltene Dateien. Alle importierten Dateien<br />

werden nochmals ausgegeben.<br />

Sie haben nun ein neues Projekt im CVS-Repository angelegt <strong>und</strong> können getrost ihre Quellcodes löschen<br />

(Für vorsichtige Menschen empfiehlt es sich, das Quellcodeverzeichnis einfach nur umzubenennen).<br />

Projekt extrahieren/wiederherstellen<br />

Um die Quellcodes eines Projekts aus dem Repository herauszuholen brauchen Sie den Befehl cvs checkout<br />

oder auch cvs co:<br />

cd [Verzeichnis, in das sie das Projekt holen wollen]<br />

cvs co [group]/[name]<br />

CVS gibt dabei aus, welche Dateien aus dem Repository geholt wurden.<br />

275


37. Programmierung<br />

Unterschiede anzeigen lassen<br />

Um Ihre geänderten Quellcodes mit den ursprünglichen/neuen Quellen aus dem Repository zu vergleichen,<br />

verwenden Sie cvs diff:<br />

cd [Verzeichnis mit Ihren Quellcodes]<br />

cvs diff<br />

Nun vergleicht CVS die beiden Quellcodeversionen <strong>und</strong> schreibt Ihnen die Unterschiede aus: Dabei werden<br />

die Dateinamen, Zeilennummern <strong>und</strong> Zeileninhalte angegeben, die sich verändert haben:<br />

im Beispiel:<br />

cvs diff<br />

diff -r1.1.1.1 quelltext.cpp<br />

1c1,3c3,4<br />

< # quelltext.cpp editiert am 12.2.2002<br />

---<br />

> # quelltext.cpp editiert am 20.2.2002<br />

< return 0;}<br />

---<br />

> printf("Programmende");<br />

> return 0;}<br />

Hier wurden jeweils Zeile 1 <strong>und</strong> 3 durch andere Zeilen ersetzt (c steht für changed), <strong>und</strong> Zeile 4 neu eingefügt.<br />

Änderungen veröffentlichen<br />

Bevor Sie Ihre Änderungen veröffentlichen, sollten Sie Ihre Quellen mit den aktuellen im CVS abgleichen,<br />

damit Sie nicht eventuell inzwischen erfolgte Änderungen Ihrer Kollegen überschreiben. Daher ist zuerst<br />

ein cvs update nötig. Um Ihre Änderungen am Quellcode wieder zurück in das Repository zu schreiben,<br />

verwenden Sie den Befehl cvs commit oder cvs ci. Achtung, dabei werden Ihre neuen Quellcodes zu den<br />

allgemein aktuellen. Sie sollten das nur dann tun, wenn Sie wirklich vorher aktuellen Ausgangscode zur<br />

Verfügung hatten, sonst überschreiben Sie evtl. vorher von anderen Benutzern eingepflegte Änderungen. . .<br />

cd [Verzeichnis mit den Quellcodes]<br />

cvs update<br />

cvs commit -m "Kommentar"<br />

Softwareversion erstellen<br />

Von Zeit zu Zeit gerät Software in einen Zustand, in dem sie stabil <strong>und</strong> weitgehend ohne Bugs läuft. Dies ist<br />

der Zeitpunkt, aus den Quellcodes ein Paket anzufertigen, <strong>und</strong> dem ganzen eine Versionsnummer, oder einen<br />

Namen zuzuordnen. Diese Nummern sind dabei völlig unabhängig von den sogenannten Revisionsnummern<br />

der einzelnen Dateien, die eigentlich nur für interne Zwecke gedacht sind.<br />

Dazu verwenden Sie den Befehl cvs tag [Versionsname].<br />

Sonstiges<br />

CVS unterstützt noch eine Menge differenzierterer Verwaltungsmöglichkeiten, wie die Etablierung <strong>und</strong> wieder<br />

Zusammenführung von Quellcodezweigen, oder die Anzeige der Versionshistory. Auch die Verwaltung<br />

von Binärdateien beherrscht CVS. Weiterführende Informationen können Sie leicht der Man-Page von cvs<br />

entnehmen.<br />

276


37.2. Makefiles<br />

37.2. Makefiles<br />

muss Michael noch machen Makefiles unter <strong>Linux</strong> sind in einer Art Skriptsprache verfasst. Sie dienen dazu,<br />

größere Mengen Quellcodes effizient zu verwalten. Dabei können Sie meistens sogar mehrere Arten der<br />

Kompilierung <strong>und</strong> Präkompilierung spezifizieren. Kombiniert mit der Möglichkeit, Shellscriptkomponenten<br />

mit einzubauen stellt das Makefile ein mächtiges Werkzeug im Umgang mit Quellcodes bei der täglichen<br />

Arbeit dar. Im Folgenden soll ein kurzer Einblick in die Erstellung von Makefiles gegeben werden.<br />

37.2.1. Erste Schritte<br />

Makefiles werden aufgerufen durch den Befehl make. Ohne Parameter versehen sucht make im aktuellen<br />

Verzeichnis nach einer Datei mit Namen Makefile. In diese Datei also müssen wir unsere Anweisungen<br />

schreiben.<br />

Beim Aufruf von solchen Skripts wird meistens auch noch ein Parameter verwendet, der das sogenannte<br />

Ziel spezifiziert. Sie kennen Das wahrscheinlich vom Kernelkompilieren, wo es zum Beispiel die beiden<br />

Aufrufe make config <strong>und</strong> make bzImage gibt. Diese Aufrufe werden alle vom selben Makefile behandelt<br />

aber führen zu unterschiedlichen Ergebnissen.<br />

37.2.2. Aufbau des Makefiles<br />

Im ersten Teil des Makefiles hat der User Gelegenheit, Variablen zur späteren Verwendung in weiteren<br />

Anweisungen zu spezifizieren.<br />

Der zweite Teil des Makefiles wird von Verschiedenen Zielen eingenommen, die hier spezifisch behandelt<br />

werden können. Dabei werden auch die sogenannten Abhängigkeiten von anderen Zielen beachtet.<br />

37.2.3. Kommentare<br />

Kommentare in Makefiles werden durch # eingeleitet.<br />

37.2.4. Variablen<br />

Variablen werden können definiert werden duch<br />

[Variablenname] = [Variableninhalt]<br />

zum Beispiel:<br />

CC = gcc<br />

Im weiteren Teil des Makefiles können diese Variablen angesprochen werden über $(Variablenname), so<br />

würde zum Beispiel $(CC) zu gcc ausgewertet werden.<br />

Sollen Variablen mit Werten über mehrere Zeilen hinweg belegt werden, so muss die Direktive define<br />

verwendet werden:<br />

define erklaerungstext<br />

echo Programmname: MichaelsProgramm1<br />

echo Parameter: Nicht vorhanden<br />

echo Zweck: Welcher Zweck?<br />

endef<br />

277


37. Programmierung<br />

Variablen können auch dynamisch belegt werden. So kann zum Beispiel mit $(wildcard *.cpp) alle<br />

cpp Dateien angesprochen werden. Auch die Ausgabe von Unixbefehlen kann so angesprochen werden:<br />

$(shell date) gibt zum Beispiel das aktuelle Datum über den Befehl date aus.<br />

37.2.5. Zielbereich<br />

Hier steht eine Liste von Zielen. Ein Ziel ist so aufgebaut:<br />

Zielname: Abhängigkeiten<br />

Kommando1<br />

Kommando2<br />

Kommando3<br />

In Makefiles wird genau auf die Einrückung Ihres Zielbereichs geachtet. Sie müssen darauf achten, dass<br />

Zielnamen am Anfang der Zeile beginnen, <strong>und</strong> Kommandos durch zweimalige Einrückung mit der Tabulatortaste<br />

gekennzeichnet sind.<br />

Zielname: Der Zielname entspricht genau dem Parameter, der dem Makebefehl übergeben werden kann,<br />

oder auf den sich andere Zile mit ihren Abhängigkeiten beziehen können.<br />

Abhängigkeiten: Hier können Dateien oder andere Ziele eingetragen werden. Die Abhängigkeiten sind<br />

als für das aktuelle Ziel nötig als “Vorbereitung”, oder zur Erstellung des neuen Ziels. Dateien als<br />

Abhängigkeiten werden auf Existenz <strong>und</strong> Aktualität überprüft.<br />

Kommando: Jedes Kommando das nun folgt wird als Shell-Kommando aufgefasst. Um dabei die Ausgabe<br />

der Befehle selbst zu unterdrücken empfiehlt sich die Voranstellung eines “Klammeraffen”, dem @.<br />

37.2.6. Direktiven<br />

Direktiven in einem Makefile dienen dem Umgang mit Variablen. Ein Vergleich kann somit geprüft werden,<br />

durch<br />

ifeq "Variablenname" "Variablenname"<br />

# Anweisungen<br />

else<br />

# Anweisungen<br />

endif<br />

Auch kann geprüft werden, ob eine Variable definiert ist, durch ifdef.<br />

Weiterhin kann auch der Inhalt anderer Dateien über den include Befehl eingeb<strong>und</strong>en werden.<br />

37.2.7. Ausblick<br />

Gute Beispiele für Makefiles finden Sie beim <strong>Linux</strong>kernel mitgeliefert im Verzeichnis /usr/src/linux.<br />

37.3. Shellskripts<br />

37.4. Java<br />

Java hat sich mittlerweile zu einer der beliebtesten Programmiersprachen überhaupt gemausert. Einer der<br />

Gründe dafür ist die plattformunabhängige Bereitstellung des Compilers, <strong>und</strong> die Portierbarkeit sowohl der<br />

Quellcodes als auch der Binaries.<br />

278


37.4.1. Installation<br />

37.4. Java<br />

Bei jeder SuSE-Distribution befinden sich mehrere Versionen des JDK mit im Lieferumfang, welche jedoch<br />

meistens nicht mehr der aktuellen Ausgabe von Java entsprechen. Wie sie manuell ein JDK nachinstallieren<br />

können, erfahren Sie hier am Beispiel des SUN-JDKs:<br />

1. Rufen Sie YaST auf, um die Konfigurationsvariable CREATE_JAVALINK auf no zu setzen. Sie werden<br />

den richtigen Link auf das Java-Verzeichnis von Hand richtig setzen. . .<br />

2. Laden Sie die gewünschte Javaversion von der SUN-Homepage http://java.sun.com herunter <strong>und</strong> entpacken<br />

Sie sie in ein temporäres Verzeichnis<br />

3. Kopieren Sie letzteres in das Verzeichnis /usr/lib unter dem Namen jdk?.?.?, wobei Sie für die<br />

Fragezeichen die Java-Versionsnummern einsetzen<br />

4. Löschen Sie den Softlink java, der auf ein älteres Java-Verzeichnis linkt, falls ein solcher existiert,<br />

<strong>und</strong> erstellen Sie einen neuen, der auf Ihr Java verweist.<br />

5. Es macht Sinn, bei jedem User zu überprüfen, ob das Verzeichnis /usr/lib/java/bin im Pfad mit<br />

aufgenommen ist.<br />

37.4.2. Verwendung<br />

Durch einen einfachen Aufruf von java können Sie Java-Programme ausführen, mit javac können Sie<br />

.java Programme kompilieren<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

279


37. Programmierung<br />

280


38. Entwicklungsumgebungen<br />

erste Erläuterungen zum Thema<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• erstes Lernziel<br />

• zweites Lernziel<br />

• drittes Lernziel<br />

38.1. Entwicklungsumgebungen<br />

38.1.1. Emacs<br />

Viele Entwickler, die unter <strong>Linux</strong> Programme entwickeln, schwören auf den Editor Emacs. Er zeichnet<br />

sich durch seine vielen Zusatzmodule aus, die Sie zu einem richtigen Allro<strong>und</strong>genie machen. Die hohe<br />

Konfigurierbarkeit macht ihn zu einem sehr flexiblen Werkzeug – Er ist so beliebt, dass er mittlerweile auch<br />

unter Windows eine beachtliche Anhängerschar um sich sammelt.<br />

Der Nachteil betrifft hauptsächlich Umsteiger von Windowssystemen – die Tastenkombinationen, mit<br />

denen man Emacs bedient sind nicht die selben, die man von bekannten Windows-Pendants gewohnt ist.<br />

Umlernen ist in diesem Fall kaum zu umgehen. Zwar kann man die Tastenbelegungen abändern, jedoch<br />

bringen Sie damit die gängigen Tastenkombinationen durcheinander.<br />

Die nachfolgenden Bedienungshinweise beziehen sich größtenteils auf die in den gängigen <strong>Linux</strong>distributionen<br />

ausgeteilten Emacszusammenstellungen <strong>und</strong> unterscheiden sich zum Teil sehr stark von den<br />

Varianten für SUN-Solaris <strong>und</strong> andere professionelle Unixe.<br />

Emacs verwenden<br />

Sie starten Emacs mit dem Befehl emacs auf der Kommandozeile. Optional können Sie auch noch die zu<br />

öffnende Datei als Parameter übergeben. Falls Sie nur die Kommandozeilenvariante von Emacs verwenden<br />

wollen, so übergeben Sie als weiteren Parameter die Option -nw.<br />

Nun öffnet sich das Editiorfenster von Emacs, <strong>und</strong> sie können wie gewohnt mit den Pfeiltasten den Cursor<br />

bewegen, Buchstaben löschen <strong>und</strong> Text einfügen.<br />

Der Bereich, den Sie momentan editieren wird Buffer genannt. Pro Sitzung mit einem Emacs können<br />

meherere Dateien geöffnet werden, also mehrere Buffer erzeugt werden.<br />

281


38. Entwicklungsumgebungen<br />

Tastenkombinationen<br />

Bei der Benutzung von Emacs gewinnt man besonder stark durch die Benutzung der einzelnen Tastenkombinationen<br />

– die gebräuchlichsten finden Sie in Tabelle 38.1 auf Seite 282. Bei manchen dieser Befehle<br />

wandert der Cursor in die unterste Zeile des Editorfensters – den Minibuffer. Dieser dient der Interaktion<br />

von Benutzer <strong>und</strong> Programm. Hier können zum Beispiel Dateinamen der zu öffnenden Dateien eingegeben<br />

werden. Dabei unterstützt Emacs zum Beispiel auch die Vervollständigung von Dateinamen über die<br />

TAB-Taste.<br />

In die Tiefen von Emacs...<br />

Kürzel Bedeutung<br />

CTRL-x CTRL-f Datei öffnen<br />

CTRL-x CTRL-s Datei speichern<br />

CTRL-x CTRL-w Datei speichern unter<br />

CTRL-x 2 Fenster teilen<br />

CTRL-x 1 Fenster vereinen<br />

CTRL-x 5 2 zweites Editorfenster öffnen<br />

CTRL-x 5 1 zweites Editorfenster schliessen<br />

CTRL-x k aktuellen Buffer schliessen<br />

CTRL-x CTRL-c Emacs beenden<br />

CTRL-a An den Anfang der Zeile springen<br />

CTRL-e Ans Ende der Zeile springen<br />

CTRL-space Markierung anfangen<br />

CTRL-w Markierung ausschneiden<br />

ALT -w Markierung kopieren<br />

CTRL-y Text aus der Zwischenablage einfügen<br />

CTRL-k Rest der Zeile löschen<br />

CTRL-d Zeichen löschen<br />

CTRL-x z Letzte Aktion widerholen<br />

CTRL- Undo<br />

CTRL-s Suche / nächstes gef<strong>und</strong>enes Vorkommen<br />

CTRL-r Suche rückwärts / letztes gef<strong>und</strong>enes Vorkommen<br />

ALT-% Suchen&Ersetzen<br />

CTRL-c CTRL-q Quellcode automatisch einrücken<br />

CTRL-c CTRL-m Quellcode mit make komplilieren<br />

CTRL-c r t Rechteckigen markierten Bereich mit Minibuffer<br />

überschreiben<br />

ALT -/ Wort komplettieren<br />

ALT -! Befehl auf Kommandozeile ausführen<br />

ALT-X Einleitung zu einem Spezialbefehl<br />

Tabelle 38.1.: Tastenkombinationen für Emacs<br />

Die oben genannten Tastenkombinationen erleuchten nur einen sehr kleinen Teil der Mächtigkeit von Emacs.<br />

Sie können noch viele weitere Befehle auf den aktuellen Buffer anwenden. Dazu müssen Sie einen der in<br />

282


Befehl Wirkung<br />

bs-cycle-next Wechselt zum nächsten geöffneten Buffer<br />

bs-cycle-previous Wechselt zum vorigen geöffneten Buffer<br />

font-lock-mode Schaltet Syntax-Highlighting an oder aus<br />

indent-region Rückt den Quellcode nach Standards ein<br />

38.1. Entwicklungsumgebungen<br />

sgml-mode Schaltet in einen Modus für SGML-Dateien um (z.B.<br />

XML, HTML, etc.)<br />

java-mode Schaltet in den Java-Modus um<br />

c++-mode Schaltet in den C++-Modus um<br />

hexl-mode Schaltet in den Hex-Edit-Modus um<br />

latex-mode Schaltet in den LaTeX-Modus um<br />

pascal-mode Schaltet in den Pascal-Modus um<br />

base64-decode-region Decodiert den Bereich aus dem BASE64 Format<br />

revert-buffer Lädt den Puffer neu von der Festplatte<br />

auto-revert-mode Lädt den Puffer bei jeder Änderung neu von der Festplatte<br />

Tabelle 38.2.: einige nützliche Befehle für Emacs<br />

Emacs vordefinierten Befehle aufrufen. Dies leiten Sie durch die Tastenkombination ALT-x ein. Danach<br />

wechselt der Cursor in den Minibuffer, wo Sie den Befehl eintippen können.<br />

Wenn Sie nicht wissen, wie der Befehl heisst, den Sie aufrufen wollen, so tippen Sie analog zum Öffnen<br />

von Dateien einfach zweimalig die Tabulator-Taste, dann wird Ihnen angezeigt, welche Befehle Sie zur<br />

Verfügung haben. Auch die Namensvervollständigung funktioniert wie Befehle analog zum Vervollständigen<br />

beim Öffnen von Dateien.<br />

Zum Beispiel wollen Sie den Inhalt des aktuellen Buffers neu von der Festplatte laden lassen: Sie tippen<br />

ALT-x revert-buffer. Eine Liste mit einer Auswahl an hilfreichen Befehlen finden sie in Tabelle 38.2<br />

auf Seite 283.<br />

Emacs einrichten<br />

Sie können Emacs auf sehr vielfältige Weise anpassen. Zum Besipiel, indem Sie die Konfigurationsdatei<br />

˜/.emacs verändern. Sie können zum Beispiel eigene Tastenkombinationen vereinbaren. Sie vereinbaren<br />

zum Beispiel die Tastenkombination CTRL-tab mit “wechsle in den nächten Puffer”, indem Sie folgendes<br />

zur Konfiguration hinzufügen:<br />

(global-set-key [C-tab] ’bs-cycle-next)<br />

Die Datei .emacs ist in Lisp verfasst, mit ein bisschen Gewöhnung finden Sie sich sicher schnell darin<br />

zurecht. Im Internet gibt es eine Menge an Zusatzmodulen für den Emacs, meist Dateien mit der Endung<br />

.el, die Sie mit in Ihr Repertoir an Modulen aufnehmen, indem Sie das entsprechende Verzeichnis so laden:<br />

(add-to-list ’load-path (expand-file-name "˜/emacs_themes"))<br />

38.1.2. Java Netbeans<br />

Übungen<br />

1.<br />

283


38. Entwicklungsumgebungen<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

284


39. Sprache C<br />

Große Teile von <strong>Linux</strong> sind in C geschrieben, deswegen an dieser Stelle eine kurze Einführung.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• die Programmiersprache C kennen,<br />

• wie Sie eigene Programme schreiben, kompilieren <strong>und</strong> ausführen können,<br />

• wie fremde Quelltexte schnell verstanden, angepasst <strong>und</strong> neu kompiliert werden können.<br />

39.1. Gr<strong>und</strong>elemente<br />

io helloworld.c<br />

#include <br />

void main()<br />

{<br />

printf("Hello World.\n");<br />

}<br />

string linux.c<br />

#include <br />

void main()<br />

{<br />

char txt[] = "<strong>Linux</strong>\n";<br />

printf(txt);<br />

}<br />

io string basics.c<br />

#include <br />

void main()<br />

{<br />

char txt[80];<br />

printf("Input: ");<br />

285


39. Sprache C<br />

}<br />

scanf("%s",txt);<br />

printf("Output: ");<br />

printf(txt);<br />

39.1.1. Datentypen, Operatoren <strong>und</strong> Ausdrücke<br />

Bevor eine Variable in C verwendet werden kann, muss diese deklariert werden. Bei der Deklaration einer<br />

Variablen erhält diese einen Namen <strong>und</strong> einen Datentyp. In einem zweiten Schritt wird die Variable definiert,<br />

d.h ihr wird ein Stück vom Arbeitsspeicher zugewiesen. Zu einem späteren Zeitpunkt erfolgt dann die<br />

Initialisierung, also die Wertzuweisung.<br />

io int basics.c<br />

#include <br />

void main()<br />

{<br />

short int x;<br />

long int y;<br />

}<br />

printf("x=");<br />

scanf("%d",&x);<br />

printf("y=");<br />

scanf("%d",&y);<br />

printf("x= %d\ny= %d\n",x,y);<br />

Ein Ausdruck ist nichts anderes als eine Aneinanderreihung von Zahlen, Strings, oder sonstigen Datenelementen<br />

sowie Operatoren, die sich stets zu einem einzelnen Wert auflösen lässt.<br />

Operatoren: Addition, Subtraktion, Multiplikation, Division, Bestimmung des Divisionsrests (modulo),<br />

Inkrement, Dekrement, ...<br />

io int arithm.c<br />

#include <br />

void main()<br />

{<br />

int a, b, c;<br />

286<br />

printf("a= ");<br />

scanf("%d",&a);<br />

printf("b= ");<br />

scanf("%d",&b);<br />

c = a + b;<br />

printf("c= %d\n",c);


}<br />

39.1. Gr<strong>und</strong>elemente<br />

Die Kompilierung des nachfolgenden Beispiellistings muss mit gcc main.c -lm durchgeführt werden,<br />

damit math.h tatsächlich gelesen wird.<br />

io double arithm.c<br />

#include <br />

#include <br />

void main()<br />

{<br />

double x = 0.;<br />

}<br />

printf("x= ");<br />

scanf("%lg",&x);<br />

x = sqrt(x);<br />

printf("sqrt(x)= %lg\n",x);<br />

io char.c<br />

#include <br />

void main()<br />

{<br />

char letter = ’C’;<br />

char alphabet[] = "abcdefghijklmnopqrstuvwxyz";<br />

}<br />

alphabet[2] = letter;<br />

printf(alphabet);<br />

io ascii.c<br />

#include <br />

void main()<br />

{<br />

int i = 0;<br />

for(i=0;i


39. Sprache C<br />

arith mwst.c<br />

#include <br />

#define MWST 16.0<br />

void main()<br />

{<br />

float netto = 0.;<br />

float brutto = 0.;<br />

}<br />

printf("netto= ");<br />

scanf("%g",&netto);<br />

brutto = netto * ( 1 + MWST / 100);<br />

printf("brutto= %g",brutto);<br />

arith sqrt.c<br />

#include <br />

#include <br />

void main()<br />

{<br />

float x = 0.;<br />

}<br />

printf("x= ");<br />

scanf("%g",&x);<br />

if (x >= 0) {<br />

x = sqrt(x);<br />

printf("sqrt(x)= %g\n",x);<br />

}<br />

else {<br />

printf("x < 0\n");<br />

}<br />

39.1.2. Kontrollstrukuren<br />

Vergleichsoperatoren<br />

Logische Operatoren<br />

Auswertungsreihenfolge<br />

Zunächst wird der NICHT-Operator, dann der UND- <strong>und</strong> zuletzt der ODER-Operator ausgewertet. Bei einer<br />

Kombination ist demnach auf diese Reihenfolge zu achten <strong>und</strong> mit entsprechender Klammerung eine falsche<br />

Verarbeitung zu vermeiden.<br />

288


Kurzschreibweisen<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

39.1. Gr<strong>und</strong>elemente<br />

289


39. Sprache C<br />

290


40. Sprache Smalltalk<br />

erste Erläuterungen zum Thema<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• erstes Lernziel,<br />

• zweites Lernziel,<br />

• drittes Lernziel.<br />

Eine ordentliche Entwicklungsumgebung steht unter www.exept.de zum Download bereit.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Smalltalk ist eine vollständig objektorientierte Programmiersprache, die viel Spaß an der Entwicklungsarbeit<br />

vermittelt. Neben kleinen Projekten für den Hausgebrauch eignet sie sich vorallem auch für große Projekte<br />

im professionellen Umfeld. Von Web-Applikation bis hinzu Client-Server Anwendungen ist alles drin.<br />

291


40. Sprache Smalltalk<br />

292


41. Skriptsprache PHP<br />

41.1. Entwicklungsumgebungen<br />

41.1.1. Maguma Enterprise Environment <strong>und</strong> Maguma Studio Desktop<br />

Für anspruchsvolle Entwickler eignet sich dieses Entwicklungswerkzeug der Firma Maguma. Die Produkte<br />

werden detailliert im Internet unter www.maguma.com vorgestellt. Einen Einblick in die Gr<strong>und</strong>funktionalitäten<br />

bietet Maguma Studio Light, das kostenlos zum Download bereit steht. Allerdings läuft diese Software<br />

leider nur unter Windows, während die Enterprise Edition serverseitig auf <strong>Linux</strong>, clientseitig aber auch<br />

wieder auf Windows setzt.<br />

41.1.2. Datenübergabe in Formularen<br />

Damit die einfache unkomplizierte Datenübergabe von einem Formular an das anschließend laufende PHP<br />

Skript klappt, muss in der Datei /etc/php.ini die Variable ”register globals” auf on gesetzt werden. Anschließend<br />

lässt man den Webserver durch ein ”rcapache reload” seine Konfiguration neu einlesen.<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

293


41. Skriptsprache PHP<br />

294


42. LaTeX<br />

Dieses Kapitel soll eine komplette Einführung in LATEX geben. Das für dieses Buch notwendige LATEXWissen<br />

findet sich im Anhang E ab Seite 319.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• gr<strong>und</strong>legende LATEXBefehle anzuwenden,<br />

• <strong>und</strong> die Umwandelung von LATEXQuellen in PDF vorzunehmen.<br />

42.1. Kommentare<br />

So wie Sie den Quellcode aller Programmiersprachen kommentieren, um die Lesbarkeit zu bewahren, so<br />

sollten Sie auch Kommentare in den LATEXCode einarbeiten. Diese werden durch führende %-Zeichen eingeleitet.<br />

%Kommentar<br />

42.2. Gliederung<br />

Gr<strong>und</strong>sätzlich braucht man sich unter LATEX über die Formatierung des Textes keine Gedanken zu machen.<br />

Viel wichtiger ist die richtige Gliederung mit Hilfe der folgenden Befehle.<br />

%neuer Band innerhalb einer Buchreihe.<br />

\part{Band I - <strong>Linux</strong> <strong>und</strong> LaTeX}<br />

%neues Kapitel, Gliederungstiefe x.<br />

\chapter{LaTeX - Dokumentklassen}<br />

%neuer Oberpunkt, Gliederungstiefe x.x.<br />

\section{Dokumentklasse scrbook}<br />

%neuer Unterpunkt, Gliederungstiefe x.x.x.<br />

\subsection{Besondere Anweisungen}<br />

%neuer Punkt, Gliederungstiefe x.x.x.x.<br />

\subsubsection{Part}<br />

295


42. LaTeX<br />

42.3. Formatierung<br />

Sie können auf einfache Art <strong>und</strong> Weise die Formatierung bestimmter Gliederungspunkte übernehmen. Dazu<br />

ergänzen Sie den entsprechenden LATEXBefehl durch einen *. Der nachfolgende Text gehört nicht zur<br />

Gliederung <strong>und</strong> tauch auch nicht im Inhaltsverzeichnis auf.<br />

\subsection*{Text}<br />

Kurze Sätze oder einzelne Wörter können wie an der Konsole formatiert werden, indem man Sie wie folgt<br />

behandelt.<br />

\verb|wort|<br />

Diese Anweisung benutzt man einfach im fortlaufenden Text. Das Ergebnis dieser Formatierung kann<br />

sich sehen lassen.<br />

42.4. Spezielle Abschnitte<br />

42.4.1. Stichpunktlisten<br />

Stichpunktartige Aufzählungen können in einer gemeinsamen Liste wie folgt formatiert werden.<br />

\begin{itemize}<br />

\item Stichpunkte <strong>und</strong><br />

\item Gedankengänge<br />

\end{itemize}<br />

42.4.2. Quellcode<br />

Wenn Sie längere Texte, z.B. Quellcode oder Ausgaben von Programmen, genauso abbilden wollen, wie Sie<br />

in der Konsole erscheinen, dann benutzen Sie den Bereich verbatim.<br />

mkdir /pfad/codebasis<br />

42.5. Pakete<br />

42.5.1. Hyperref<br />

Dieses Paket enthält etliche Makros<br />

\definecolor{webgreen}{rgb}{0,.5,0}<br />

\textcolor{webgreen}{Grün!}<br />

\colorbox{webgreen}{Grün!}<br />

\fcolor{blue}{yellow}{Box!}<br />

296


42.6. Querverweise<br />

42.6. Querverweise<br />

Damit Querverweise überhaupt möglich werden, müssen zuerst sogenannte Labels, deren Name dokumentweit<br />

eindeutig ist, gesetzt werden.<br />

\label{name}<br />

Anschließend kann man sich mit bestimmten Anweisungen auf diese Textstelle beziehen.<br />

\hypertarget{name}{text}<br />

\ref{name}<br />

\pageref{name}<br />

42.7. Stichwortverzeichnis<br />

Ein Stichwortverzeichnis kann mit Einträgen folgendermaßen gefüllt werden.<br />

\index{Stichwort}<br />

Übungen<br />

1.<br />

2.<br />

3.<br />

Zusammenfassung<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

297


42. LaTeX<br />

298


Teil VI.<br />

Anhang<br />

299


A. Glossar<br />

Verschiedene Gr<strong>und</strong>begriffe, die im Zusammenhang mit <strong>Linux</strong> immer wieder auftauchen, sollen an dieser<br />

Stelle geklärt werden.<br />

Kernel Genau genommen bezeichnet der Begriff <strong>Linux</strong> nur den Kernel. Dieser ist der innerste Teil eines<br />

Betriebssystems mit ganz elementaren Funktionen, wie Speicher- <strong>und</strong> Prozessverwaltung <strong>und</strong> Steuerung<br />

der Hardware.<br />

Bei den Versionsnummern des Kernels wird zwischen Anwender-Kernel, bei dem die zweite Ziffer<br />

gerade ist, <strong>und</strong> Entwickler-Kernel, zweite Ziffer ist ungerade, unterschieden. Im Normalfall wird<br />

man einen ausgereiften <strong>und</strong> erfahrungsgemäß stabilen Kernel, dem teils nicht stabil laufenden <strong>und</strong><br />

unzureichend getesteten Kernel, vorziehen. Nur wenn man an der Kernelentwicklung arbeitet oder<br />

auf Funktionen angewiesen ist, die im letzten stabilen Kernel noch nicht umgesetzt wurden, kommt<br />

die Verwendung einer ungeraden Versionsnummer in Frage. Da die Entwicklung unter <strong>Linux</strong> rasant<br />

verläuft, gibt es wöchentlich mindestens eine neue Kernelversion. Die Verbesserungen betreffen aber<br />

zumeist nur die Anpassung des Systems an neue Hardware, die Korrektur von zugegebenermaßen<br />

selten auftretenden Fehlern oder die Optimierung einer Funktion.<br />

Distributionen Das Angebot, an für <strong>Linux</strong> verfügbarer Software, wird immer unüberschaubarer. Zudem<br />

wachsen die im Internet angebotenen Archive rasant, so dass sich das Herunterladen als zunehmend<br />

unpraktikabel gestaltet. Deshalb gibt es sogenannte Distributoren, die aus der großen Anzahl an für<br />

<strong>Linux</strong> verfügbaren Anwendungen auswählen <strong>und</strong> dann ein Programmpaket schnüren, das auf CDs<br />

bzw. DVDs gebrannt <strong>und</strong> verkauft wird. Beim Preis handelt es sich jedoch nicht um Lizenzkosten<br />

für die Software, sondern in erster Linie um eine Aufwandsentschädigung. Bedenken Sie, dass zu<br />

einer ordentlichen Distribution mehrere CDs <strong>und</strong> ein <strong>Handbuch</strong> gehören. Außerdem muss der Vertrieb<br />

organisiert werden. Den Unterschied zwischen einzelnen Distributionen macht jedoch nicht nur das<br />

geschnürte Softwarepaket aus. Jede Distribution bringt auch eine eigene Konfigurationssoftware mit<br />

sich, die für die Installation <strong>und</strong> Administration des Systems zuständig ist.<br />

SuSE: Der deutsche Distributor <strong>und</strong> europäische Marktführer SuSE zeichnet sich besonders durch<br />

seine riesige Softwarekollektion (sieben CDs), das dickste <strong>Handbuch</strong> <strong>und</strong> seine komfortable Installationsprozedur<br />

aus. Deutschsprachige <strong>Linux</strong>ein- <strong>und</strong> UmsteigerInnen finden sich mit SuSE<br />

gut zurecht.<br />

Abbildung A.1.: SuSE Logo<br />

RedHat: RedHat Inc. ist in den USA der Marktführer im Bereich der <strong>Linux</strong>-Distributionen <strong>und</strong> ist<br />

bekannt für seine einfache Installation, sein ausführliches <strong>Handbuch</strong> <strong>und</strong> seine einfache Bedienung.<br />

Die Zusammenstellung der Softwarepakete ist gelungen <strong>und</strong> ermöglicht den Einsatz als<br />

Server, wie auch als Workstation.<br />

301


A. Glossar<br />

Abbildung A.2.: RedHat Logo<br />

Mandrake: Mandrake ist eine verspielte, französische Distribution, die in gleichem Maße benutzerfre<strong>und</strong>lich<br />

ist, wie SuSE <strong>und</strong> RedHat.<br />

Abbildung A.3.: Mandrake Logo<br />

Debian: Debian ist ein nichtkommerzielles Konkurrenzprodukt zu RedHat <strong>und</strong> gilt als das Projekt<br />

für Freaks.<br />

Abbildung A.4.: Debian Logo<br />

Slackware: Die Slackware gehört zu den ältesten <strong>Linux</strong>-Distributionen. Die Zusammenstellung der<br />

Pakete ist mit Bedacht gemacht <strong>und</strong> umfaßt alles, was ein stabiles <strong>Linux</strong> braucht. Slackware ist<br />

die Wahl jener, die sich schon länger mit dem Betriebssystem beschäftigen <strong>und</strong> entsprechend<br />

Erfahrungen mitbringen.<br />

United <strong>Linux</strong>: United <strong>Linux</strong> ist eine Initiative der <strong>Linux</strong> Distributoren SuSE, Connectiva, Turbo <strong>Linux</strong><br />

<strong>und</strong> SCO.<br />

YaST - Yet another Setup Tool Das Konfigurationswerkzeug von SuSE heißt von jeher YaST. Mittlerweile<br />

hat YaST2 die Vorgängerversion YaST1 vollständig abgelöst.<br />

GPL - General Public License Die meisten Softwarelizenzen sind daraufhin entworfen worden, Ihnen die<br />

Freiheit zu nehmen, die Software weiterzugeben <strong>und</strong> zu verändern. Im Gegensatz dazu soll Ihnen die<br />

GNU General Public License eben diese Freiheit garantieren. Sie soll sicherstellen, daß die Software<br />

für alle Benutzer frei ist. Diese Lizenz gilt für den Großteil der von der Free Software Fo<strong>und</strong>ation<br />

herausgegebenen Software <strong>und</strong> für alle anderen Programme, deren Autoren ihr Werk dieser Lizenz<br />

unterstellt haben. Die Bezeichnung ”freie” Software bezieht sich auf Freiheit, nicht auf den Preis.<br />

Die Lizenz garantiert Ihnen die Freiheit, Kopien freier Software zu verbreiten (<strong>und</strong> etwas für diesen<br />

Service zu berechnen), die Möglichkeit, die Software im Quelltext zu erhalten oder den Quelltext auf<br />

Wunsch zu bekommen. Sie dürfen die Software ändern oder Teile davon in neuen freien Programmen<br />

verwenden. Um diese Rechte zu schützen, müssen wir Einschränkungen machen, die es jedem<br />

verbieten, die besagten Rechte zu verweigern. Daraus folgen bestimmte Verantwortlichkeiten für den<br />

Distributor, wenn dieser Kopien der Software verbreitet oder verändert. Beispielsweise müssen den<br />

Empfängern alle Rechte gewährt werden, die der Distributor selbst hat. Er muss sicherstellen, daß<br />

auch die Anwender den Quelltext erhalten bzw. erhalten können. Zudem muss er ihnen diese Bedingungen<br />

zeigen, damit sie ihre Rechte kennen. Um die Autoren zu schützen, soll darüberhinaus<br />

302


Abbildung A.5.: Slackware Logo<br />

Abbildung A.6.: SCO Logo<br />

sichergestellt werden, dass jeder erfährt, daß für diese freie Software keinerlei Garantie besteht. Wenn<br />

die Software von jemand anderem modifiziert <strong>und</strong> weitergegeben wird, müssen die Empfänger erfahren,<br />

daß sie nicht das Original erhalten haben, damit von anderen verursachte Probleme nicht den Ruf<br />

des ursprünglichen Autors schädigen. Schließlich <strong>und</strong> endlich ist jedes freie Programm permanent<br />

durch Software-Patente bedroht. Es soll die Gefahr ausgeschlossen werden, dass Distributoren eines<br />

freien Programms individuell Patente lizensieren - mit dem Ergebnis, daß das Programm proprietär<br />

würde. Um dies zu verhindern, wird klargestellt, daß jedes Patent entweder für freie Benutzung durch<br />

jedermann lizenziert werden muß oder überhaupt nicht lizenziert werden darf.<br />

An dieser Stelle wäre eine saubere Übersetzung der GPL sinnvoll, die durch Erläuterungen ergänzt<br />

werden könnte. Außerdem gibt es eine eigene Lizenz für Bücher <strong>und</strong> Dokumentation, die eigentlich<br />

die Gr<strong>und</strong>lage für das <strong>Linux</strong> <strong>Handbuch</strong> legen sollte.<br />

303


A. Glossar<br />

304<br />

Abbildung A.7.: Conectiva Logo<br />

Abbildung A.8.: Turbo <strong>Linux</strong> Logo<br />

Abbildung A.9.: United <strong>Linux</strong> Logo


B. Kommandoreferenz<br />

Es ist wenig sinnvoll Kommandos mit sämtlichen Optionen <strong>und</strong> Parametern zu pauken. Auch erfahrene<br />

Systemadministratoren verwenden bei alltäglichen Kommandos die eingebaute Hilfe oder gar die Manual-<br />

Pages. Oft wird man hier aber mit Informationen regelrecht erschlagen. Eine gute Kommandoreferenz mit<br />

sinnvollen Beispielen leistet deshalb wertvolle Dienste. Aufgr<strong>und</strong> der gesteigerten Zweckmäßigkeit sind die<br />

einzelnen Kommandos im folgenden nach Kategorien geordnet.<br />

Lernziele<br />

In diesem Kapitel lernen Sie Kommandos kennen, die<br />

• der Dateiverwaltung dienen,<br />

• zur Bearbeitung von Texten verwendet werden können,<br />

• die Komprimierung <strong>und</strong> Archivierung von Dateien durchführen,<br />

• zur Prozessverwaltung notwendig sind,<br />

• für die Verwaltung von Benutzern <strong>und</strong> Gruppen benutzt werden,<br />

• bei der Administration des Dateisystems nützlich sind,<br />

• den Bildschirm <strong>und</strong> das Terminal betreffen,<br />

• die Online-Hilfe bereitstellen<br />

• vieles andere mehr können.<br />

B.1. Kommandos zur Dateiverwaltung<br />

cat dateien<br />

Dieser Befehl zeigt den Inhalt der angegebenen Textdatei auf dem Bildschirm an. Bei längeren Texten sollten<br />

Sie statt cat die Kommandos more oder less verwenden. Darüberhinaus wird cat häufig dazu verwendet,<br />

mehrere Dateien zu einer größeren Datei zusammenzusetzen. Dazu muss die Standardausgabe mit ¿ in eine<br />

Datei umgeleitet werden.<br />

Beispiel:<br />

cat datei*.txt > datei.txt<br />

Dieser Befehl setzt die Dateien datei1.txt, datei2.txt usw. zu einer Gesamtdatei datei.txt zusammen.<br />

305


B. Kommandoreferenz<br />

cd [verzeichnis]<br />

Dieses Kommando wechselt in das angegebene Verzeichnis. Ohne Angabe eines Verzeichnisnamens wechselt<br />

cd in das Homeverzeichnis des Benutzers.<br />

cp [-optionen] quelle ziel<br />

Der Befehl cp dient zum Kopieren von Dateien. Mit der Option -R werden auch die Unterverzeichnisse <strong>und</strong><br />

die darin enthaltenen Dateien kopiert.<br />

Beispiel:<br />

cp -R /home/mucke /home/backup<br />

Das Homeverzeichnis des Benutzers mucke wird nach /home/backup gesichert.<br />

ln [optionen] quelle [ziel]<br />

Das Kommando ln stellt feste oder symbolische Links zu Dateien <strong>und</strong> Verzeichnissen her. Die Option -d<br />

erzeugt einen festen Link für ein Verzeichnis. Sollten Sie symbolische Verlinkungen erstellen wollen, geben<br />

Sie die Option -s an.<br />

Beispiel:<br />

ln -s datei.txt info<br />

Der Befehl erzeugt einen symbolischen Link info auf die bereits vorhandene Datei datei.txt.<br />

ls [-optionen] [pfad]<br />

Dieser Befehl zeigt eine Liste aller Dateien <strong>und</strong> Verzeichnisse an <strong>und</strong> entspricht im Wesentlichen dem<br />

Kommando dir. Wenn ls ohne weitere Parameter oder Optionen verwendet wird, liefert das Kommando eine<br />

mehrspaltige, nach Dateinamen sortierte Tabelle, in der alle Dateien, Links <strong>und</strong> Verzeichnisse im aktuellen<br />

Verzeichnis angezeigt werden. Die Option -a bewirkt, das auch versteckte Dateien <strong>und</strong> Verzeichnisse angezeigt<br />

werden. Mit -l werden zusätzlich zum Dateinamen weitere Informationen, wie die Dateigröße, die<br />

Zugriffsrechte usw., gelistet. Zur Anzeige jeder Datei wird eine eigene Zeile verwendet.<br />

mkdir verzeichnis<br />

Das Kommando erstellt ein neues Verzeichnis.<br />

mv quelle ziel<br />

Der Befehl verschiebt Dateien von der angegebenen Quelle zum gewünschten Ziel. Dabei können einzelne<br />

Dateien auch umbenannt werden. Somit entspricht mv im Wesentlichen der Funktion von cp, wenn nach<br />

dem Kopiervorgang die Quelldateien gelöscht werden.<br />

rm [optionen] dateien<br />

Das Kommando löscht die angegebenen Dateien. Verzeichnisse werden nur mit der Option -r gelöscht.<br />

Beispiel:<br />

rm -r /home/mucke/archiv/*<br />

Dieser Befehl löscht alle Dateien <strong>und</strong> Unterverzeichnisse im angegebenen Verzeichnis.<br />

306


mdir [optionen] verzeichnis<br />

B.1. Kommandos zur Dateiverwaltung<br />

Dieser Befehl löscht das angegebene Verzeichnis, wobei rmdir nur ausgeführt werden kann, wenn das Verzeichnis<br />

leer ist.<br />

B.1.1. Befehle zur Dateisuche<br />

find [pfadangabe] [suchoptionen]<br />

Dieses Kommando hilft bei der Suche nach Dateien, die irgendwo im Verzeichnisbaum liegen. Dabei können<br />

verschiedene Suchkriterien bei der Suche berücksichtigt werden. Es besteht sogar die Möglichkeit, auf alle<br />

Dateien, die diese Bedingung erfüllen, mit einem weiteren Programm wie grep zusätzliche Selektionskriterien<br />

anzuwenden. Somit kann man Dateien mit einer bestimmten Dateiendung ausfindig machen, die zudem<br />

einen gesuchten Textstring enthalten.<br />

Beispiele:<br />

find<br />

liefert eine Liste aller Dateien im aktuellen Verzeichnis <strong>und</strong> in allen Unterverzeichnissen.<br />

find -name ?.e*?<br />

findet alle Dateien im aktuellen Verzeichnis <strong>und</strong> dessen Unterverzeichnissen, die mit .e beginnen.<br />

find /home -group users<br />

findet alle Dateien in den Unterverzeichnissen von /home, die der Gruppe users angehören.<br />

locate muster<br />

Für die schnelle Suche nach Dateien ist der Befehl locate gedacht. Er durchsucht die Datenbank locatedb<br />

nach Dateien, in denen das angegebene Muster im vollständigen Dateinamen vorkommt. Mit updatedb muss<br />

zuvor jedoch die Datenbank, die in /var/lib abgelegt wird, erstellt werden.<br />

Beispiel:<br />

locate ?*s?mb*?<br />

Dieser Befehl findet alle Dateien in deren Dateinamen das Wort samba vorkommt.<br />

whereis datei<br />

Das Kommando durchsucht übliche Pfade nach dem angegebenen Dateinamen. Es ist in diesem Sinne zwar<br />

weniger gründlich als find, dafür aber um einiges schneller.<br />

which kommando<br />

Dieser Befehl durchsucht alle in der Variable PATH angegebenen Pfade nach dem angegebenen Kommando.<br />

Als Antwort wird der vollständige Name des Kommandos zurückgeliefert, das ausgeführt worden wäre,<br />

wenn man es ohne Pfadinformationen aufgerufen hätte. Dies ist dann sinnvoll, wenn von einem Programm<br />

mehrere Versionen in unterschiedlichen Verzeichnissen existieren.<br />

307


B. Kommandoreferenz<br />

B.2. Bearbeitung von Texten<br />

cat dateien<br />

Vergleichen Sie die Angaben zu diesem Befehl im Abschnitt ”Kommandos zur Dateiverwaltung”.<br />

grep [optionen] suchmuster datei<br />

Dieses Kommando durchsucht die angegebene Textdatei nach einem Suchmuster. Je nach Einstellung der<br />

Optionen zeigt das Kommando anschließend die gef<strong>und</strong>enen Textpassagen an oder gibt einfach nur an, in<br />

wie vielen Zeilen das Suchmuster gef<strong>und</strong>en wurde. Dabei kann grep beispielsweise mit find kombiniert<br />

werden, um alle Dateien, die bestimmten Bedingungen entsprechen, nach Texten zu durchsuchen.<br />

Beispiel:<br />

grep -i zeile ./datei*<br />

Dieser Befehl durchsucht alle Dateien im aktuellen Verzeichnis, deren Namen mit datei beginnen, nach dem<br />

Inhalt zeile, wobei die Groß- <strong>und</strong> Kleinschreibung ignoriert wird.<br />

grep -c Zeile datei<br />

Dieses Kommando findet alle Dateien im aktuellen Verzeichnis, deren Name mit datei beginnt, sucht in<br />

diesen nach dem Textstring Zeile <strong>und</strong> zählt wie oft dieser vorkommt.<br />

less [optionen] datei<br />

Dieses Kommando zeigt die angegebene Textdatei seitenweise an. Es wird häufig als Filter verwendet, um<br />

beispielsweise sehr lange Inhaltsverzeichnisse seitenweise zu listen. Es werden während der Anzeige sogar<br />

verschiedene Tastenkombinationen unterstützt. Mit den Cursortasten bewegen Sie sich zeilenweise durch<br />

die Datei, während es mit der Leertaste seitenweise vorwärts geht. Mit b kommen Sie wiederum seitenweise<br />

nach oben. Zur Eingabe eines Suchtextes arbeiten Sie mit /suchtext <strong>und</strong> mit q verlassen Sie less wieder.<br />

Beispiel:<br />

less /etc/services<br />

zeigt die Datei services an, in der die Dienstnamen den Portnummern zugeordnet werden.<br />

ls -al — less<br />

zeigt den Inhalt des aktuellen Verzeichnisses seitenweise an.<br />

more datei<br />

Auch dieser Befehl zeigt den Inhalt einer Textdatei an. Die Bedienung deckt sich mit less.<br />

B.3. Komprimierung <strong>und</strong> Archivierung von Dateien<br />

gzip [optionen] datei<br />

Dieses Programm packt bzw. entpackt die angegebene Datei. Komprimierten Dateien wird automatisch die<br />

Kennung .gz angehängt. Leider eignet sich gzip nur zur Komprimierung einzelner Dateien, so dass erst mit<br />

tar sämtliche Verzeichnisse <strong>und</strong> Dateien zusammengefasst werden müssen. Bei Angabe der Option -d wird<br />

308


B.4. Prozessverwaltung<br />

die angegebene Datei entpackt, andernfalls gepackt. Wenn Sie die Option -r verwenden, werden auch alle<br />

Unterverzeichnisse gepackt bzw. entpackt.<br />

Beispiel:<br />

gzip *.tex<br />

komprimiert alle *.tex Dateien des aktuellen Verzeichnisses. Das Ergebnis sind lauter *.tex.gz Dateien.<br />

gunzip datei<br />

Dieser Befehl dekomprimiert die angegebene Datei <strong>und</strong> entfernt dabei automatisch die Kennung .gz im<br />

Dateinamen. Der Befehl ist ein Link auf gzip, wobei automatisch die Option -d aktiviert ist.<br />

tar aktion [optionen] dateien<br />

Dieses Kommando vereint mehrere Dateien oder ganze Verzeichnisse in einem sogenannten Archiv bzw.<br />

extrahiert aus diesem Archiv wieder ihre Bestandteile. Wenn Sie ein Archiv in einer Datei anlegen möchten,<br />

müssen Sie die Option -f datei angeben. Da tar je nach Angabe der Optionen die zu archivierenden Dateien<br />

mit gzip komprimiert, ist es in seiner Funktion mit einem Packer vergleichbar. Die typische Kennung für<br />

Archivdateien ist .tar. Ist das Archiv zudem komprimiert, lauten die Kennungen zumeist .tar.gz.<br />

Beispiel:<br />

tar -czf datei.tar.gz datei*<br />

legt wegen der Option -c ein Archiv an, das alle Dateien des aktuellen Verzeichnisses, deren Name mit datei<br />

beginnt, enthält. Das aufgr<strong>und</strong> von -z mit gzip gepackte Archiv heißt datei.tar.gz.<br />

tar -xzf datei.tar.gz -C ./archiv<br />

entpackt wegen -x das Archiv datei.tar.gz in das Verzeichnis ./archiv.<br />

B.4. Prozessverwaltung<br />

bg [prozess]<br />

Dieser Befehl setzt einen unterbrochenen Prozess im Hintergr<strong>und</strong> fort. Wenn keine Prozessnummer angegeben<br />

wird, gilt bg für den zuletzt mit Strg + Z unterbrochenen Prozess. Andernfalls muss der Prozess durch<br />

seinen Namen oder durch die bash-interne Jobnummer angegeben werden.<br />

fg [prozess]<br />

Dieses Kommando setzt einen Prozess im Vordergr<strong>und</strong> fort. Wenn kein Prozess angegeben wird, gilt fg für<br />

den zuletzt unterbrochenen bzw. zuletzt im Hintergr<strong>und</strong> gestarteten Prozess. Andernfalls muss der Prozess<br />

durch seinen Namen oder durch die bash-interne Jobnummer angegeben werden.<br />

halt [optionen]<br />

Dieser Befehl beendet alle laufenden Prozesse. <strong>Linux</strong> fährt in den Runlevel 0 <strong>und</strong> reagiert nicht mehr auf<br />

Eingaben. Das System kann jetzt durchgestartet <strong>und</strong> ausgeschalten werden.<br />

309


B. Kommandoreferenz<br />

kill [-s signal] prozessid<br />

An den durch die eindeutige ProzessID angegebenen Prozess versendet kill das jeweilige Signal. Mit kill -l<br />

können Sie sich sämtliche Signale <strong>und</strong> deren Nummer ausgeben lassen.<br />

Beispiel:<br />

kill -9 1435<br />

beendet sofort den durch die ProzessID angegebenen Prozess. Dieser kann nicht einmal mehr Aufräumarbeiten<br />

vornehmen.<br />

kill -15 1743<br />

sendet dem Prozess das Signal temporäre Dateien zu löschen <strong>und</strong> sich dann zu beenden.<br />

killall [-signal] prozessname<br />

Dieser Befehl funktioniert wie kill jedoch wird jetzt der Prozessname angegeben. Sollte kein Signal vereinbart<br />

werden, wird SIGTERM an den Prozess übergeben. Sind mehrere Prozesse mit gleichem Namen aktiv,<br />

werden alle beendet.<br />

ps [optionen]<br />

Dieses Kommando zeigt eine Liste aller laufenden Prozesse an. Das Kommando wird häufig im Zusammenhang<br />

mit kill verwendet, weil es neben anderen Informationen auch die eindeutige ProzessID ausgibt.<br />

Die Option -a zeigt auch die Prozesse anderer Benutzer an. Mit -l werden zusätzliche Informationen, wie<br />

Speicherbedarf <strong>und</strong> Priorität, gelistet. Ähnlich ausführlich ist die Ausgabe mit -u, die beispielsweise den<br />

Benutzernamen zu jedem Prozess angibt. Wollen Sie auch Prozesse sehen, denen kein Terminal zugeordnet<br />

ist, so verwenden Sie die Option -x.<br />

pstree [optionen] [pid]<br />

Dieser Befehl gibt einen Baum mit allen Prozessen auf dem Bildschirm aus. Der Baum macht deutlich,<br />

welcher Prozess von welchem anderen Prozess gestartet wurde.<br />

reboot [optionen]<br />

Dieser Befehl beendet alle laufenden Prozesse <strong>und</strong> startet den Rechner anschließend neu. Wenn sich der<br />

Rechner im Runlevel 1 bis 5 befindet, wird dazu shutdown ausgeführt.<br />

shutdown [optionen] zeitpunkt [nachricht]<br />

Dieses Kommando kann ausgeführt werden, um <strong>Linux</strong> zu beenden. Zuvor werden alle anderen Benutzer<br />

informiert, dass das System in Kürze abgeschaltet wird. Während dieser Zeit werden keine neuen Logins<br />

mehr zugelassen. Anschließend werden alle Prozesse gewarnt, dass sie gleich gestoppt werden.<br />

Beispiel:<br />

shutdown -h -t 10 now<br />

fährt das System sofort herunter, lässt den Prozessen jedoch zehn Sek<strong>und</strong>en Zeit abschließende Arbeiten<br />

vorzunehmen. Der Rechner bleibt nach dem Herunterfahren des Betriebssystems stehen.<br />

310


shutdown -r -t 120 23:00 Achtung!!!<br />

B.5. Verwaltung von Benutzern <strong>und</strong> Gruppen<br />

fährt das System um 23 Uhr Systemzeit herunter, gibt den laufenden Prozessen jedoch zwei Minuten Zeit<br />

sich ordentlich zu beenden. Zudem wird eine Warnmeldung an alle Benutzer herausgegeben. Die Option -r<br />

bewirkt, dass das System nur durchgestartet wird.<br />

top [q]<br />

Dieses Programm zeigt alle fünf Sek<strong>und</strong>en eine Liste mit allen laufenden Prozessen an, wobei diese nach<br />

der Rechenzeit geordnet werden. Wenn beim Aufruf die Option q mit angegeben wird, aktualisiert top die<br />

Liste ständig <strong>und</strong> beansprucht die gesamte freie Rechenzeit. Taste q beendet das Programm.<br />

B.5. Verwaltung von Benutzern <strong>und</strong> Gruppen<br />

chsh [user]<br />

Mit diesem Befehl kann die Default-Shell, die automatisch nach dem Einloggen aufgerufen wird, verändert<br />

werden. Zur Auswahl stehen die in der Datei /etc/shells eingetragenen Shells. Das Kommando verändert<br />

das entsprechende Feld in der Datei /etc/passwd <strong>und</strong> trägt dort die neue Shell ein.<br />

groups<br />

Dieser Befehl zeigt eine Liste aller Gruppen an, denen der aktuelle Benutzer angehört.<br />

id<br />

Informationen über den aktuellen Benutzer.<br />

passwd [username]<br />

Ohne Parameter ermöglicht es dieses Kommando, das Passwort des aktuellen Benutzers zu ändern. Dazu<br />

müssen Sie zunächst das alte <strong>und</strong> dann zweimal das neue Passwort angeben. Die Änderungen werden<br />

verschlüsselt in die Datei /etc/shadow eingetragen.<br />

B.6. Administration des Dateisystems<br />

dd [optionen]<br />

Mit diesem Kommando kann man Daten byteweise von einem Medium auf das andere übertragen. Auf diese<br />

Weise lassen sich beispielsweise Image-Dateien auf eine Bootdiskette übertragen.<br />

Beispiel:<br />

dd if=/boot/vmlinuz of=/dev/fd0<br />

kopiert den Kernel vmlinuz, der als inputfile angegeben ist, direkt auf das Device fd0, das für das Diskettenlaufwerk<br />

steht. Auf diese Weise lassen sich Backups ganzer Laufwerke erstellen, da dd die Daten binär<br />

(also sehr hardwarenah) überträgt. Dies ermöglicht es dem Programm, auch ganze Partitionen mit beliebigen<br />

Dateisystemen zu kopieren. Beispielshalber:<br />

dd if=/dev/hda1 of=/dev/hdc1<br />

311


B. Kommandoreferenz<br />

Hier wurde die komplette 1. Partition auf der Primary/Master-Festplatte auf die erste Partition der der<br />

Secondary/Master-Festplatte geschrieben. Das ganze funktioniert auch mit Dateien als Zielen, was einen<br />

Festplattenbackup sehr vereinfacht. . . Bei ext2-Systemen können Dateien höchstens 2GB groß werden ...<br />

Auch zur Bearbeitung der Bootsetoren oder des MBR eignet sich dd hervorragend:<br />

dd if=/dev/hda of=˜/bootsektor bs=512 count=1<br />

dd if=˜/partitionstabelle of=/dev/hdc bs=64 skip=446 count=1<br />

Das erste Beispiel liest den MBR der Primary/Master-Festplatte in die Datei ˜/bootsektor. Im zweiten<br />

Beispiel wird die Partitionstabelle der Secondary/Master-Festplatte aus der Datei ˜/partitionstabelle<br />

neu geschrieben.<br />

df<br />

Es wird eine kurze Tabelle mit Informationen über die derzeit gemounteten Dateisysteme ausgegeben. Mit<br />

dem zusätzlichen Parameter -h wird die Statistik statt mit Kilobyteangaben mit geeigneten Größeneinheiten<br />

angezeigt.<br />

fdformat [-n] gerätedatei<br />

Dieser Befehl führt eine Low-Level-Formatierung einer Diskette durch. Auf diese kann anschließend mit dd<br />

ein Bootkernel geschrieben werden. Die Option -n verhindert eine anschließende Überprüfung der Diskette<br />

auf Fehler.<br />

Beispiel:<br />

fdformat /dev/fd0 > /dev/null &<br />

führt die Formatierung einer Diskette in Laufwerk A im Hintergr<strong>und</strong> durch <strong>und</strong> schreibt die Ausgabe des<br />

Kommandos ins Nirvana.<br />

fdisk [optionen] [device]<br />

Dieses Programm dient der Partitionierung von Festplatten.<br />

fsck [optionen] [device]<br />

Dieses Kommando überprüft die Konsistenz des Dateisystems <strong>und</strong> führt gegebenenfalls Reparaturen durch.<br />

mkfifo datei<br />

Dieser Befehl richtet eine FIFO-Datei ein, die prinzipiell wie Pipes funktionieren <strong>und</strong> den Datenaustausch<br />

zwischen zwei Programmen ermöglichen.<br />

Beispiel:<br />

mkfifo fifo<br />

ls -l > fifo &<br />

more < fifo<br />

richtet zunächst eine Datei namens fifo ein. Anschließend wird die Ausgabe von ls hierrein geschrieben,<br />

damit sie von more wiederum ausgelesen werden kann.<br />

312


mount [optionen] device mountpoint<br />

B.7. Bildschirm <strong>und</strong> Terminal<br />

Dieses Kommando bindet das Dateisystem eines Datenträgers in das <strong>Linux</strong>-Dateisystem ein. Geben Sie keine<br />

Parameter an, versucht mount die fehlenden Angaben aus der Datei /etc/fstab zu erschließen. Andernfalls<br />

müssten Sie das Dateisystem, den Zugriffstyp, die Gerätedatei <strong>und</strong> den Mountpoint bestimmen.<br />

umount<br />

B.7. Bildschirm <strong>und</strong> Terminal<br />

Reset<br />

Clear<br />

löscht den Inhalt der Textkonsole<br />

B.8. Online-Hilfe<br />

Apropos<br />

Info<br />

Man<br />

whatis<br />

Kurze Beschreibung des angegebenen Programms.<br />

B.9. Sonstiges<br />

Alias<br />

Date<br />

gibt die Systemzeit aus<br />

Expr<br />

free<br />

Das Kommando free zeigt die Ausnutzung des Arbeits- <strong>und</strong> Auslagerungsspeichers an. Allerdings ist dessen<br />

Ausgabe irreführend, da der Kernel stets unbenutzten Arbeitsspeicher als Cache verwendet <strong>und</strong> so kaum<br />

freier Speicher zugelassen wird. Erst in der zweiten Zeile sind die Angaben von Cachebereichen bereinigt.<br />

linux:˜ # free<br />

total used free shared buffers cached<br />

Mem: 126548 123564 2984 0 12424 53160<br />

-/+ buffers/cache: 57980 68568<br />

Swap: 530136 21536 508600<br />

linux:˜ #<br />

313


B. Kommandoreferenz<br />

hostname<br />

gibt den Rechnernamen zurück<br />

logname<br />

Gibt den Loginnamen zurück.<br />

logout<br />

Beendet den aktuellen Login.<br />

lpr<br />

Printenv Gibt verschiedene Umgebungsvariablen zurück.<br />

B.9.1. pwd<br />

Zeigt das aktuelle Verzeichnis<br />

set<br />

Zeigt alle gesetzten Umgebungsvariablen <strong>und</strong> deren Wert.<br />

tty<br />

Gibt den Devicenamen des Terminals zurück.<br />

alias / unalias<br />

Vereinbart einen Aliasnamen für ein Kommando.<br />

Uname<br />

who<br />

Liste aller eingelogten Benutzer.<br />

finger<br />

Ausführliche Liste aller Benutzer <strong>und</strong> Details zu einzelnen Benutzern<br />

write ¡username¿ [ttyname]<br />

Schickt Nachricht an den genannten Benutzer auf dem ggf. angegebenen Terminal. Kann aber in der Regel<br />

nur von root ordentlich verwendet werden, da dieser Schreibberechtigung auf sämtliche Terminals besitzt.<br />

314


C. Netzwerkplan<br />

C.1. Namenskonvention<br />

Domainname: eu<br />

Subdomain: de, fr, it, en<br />

Hostnamen:<br />

de: berlin, dresden, leipzig<br />

fr: paris, lyon<br />

it: rom, florenz, venedig, florenz<br />

en: london, belfast<br />

315


C. Netzwerkplan<br />

316


D. Serverhardware<br />

Die folgende Auflistung soll als Checkliste bei der Anschaffung eines auf die eigenen Bedürfnisse angepassten<br />

Servers dienen. Da sich allerdings keine allgemeingültigen Festlegungen treffen lassen, sind die<br />

angeführten Überlegungen <strong>und</strong> Komponenten als Vorschlag zu verstehen.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• welche Überlegungen vor der Konzeption anzustellen sind,<br />

• welche Bauteilgruppen <strong>und</strong> Komponenten unterschieden werden können,<br />

• wie eine beispielhafte Konfiguration aussehen könnte.<br />

D.1. Vorüberlegungen<br />

• Einsatzzweck des Servers (Dienste, Anzahl der Benutzer, Beachtung zukünftiger Entwicklungen)?<br />

• Budgetrahmen für das Projekt?<br />

• Ausgewogenheit / Abstimmung der Komponenten bezüglich des Einsatzzwecks?<br />

• Ausfallsicherheit / Red<strong>und</strong>anz?<br />

• Einsatzumgebung (Aufstellung, Integration ins Netz)?<br />

• Backup-Strategie / Backup-Server?<br />

• Erweiterbarkeit / Einsatzdauer?<br />

D.2. Bauteilgruppen <strong>und</strong> Komponenten<br />

D.2.1. Gehäuse <strong>und</strong> Netzteil<br />

• Platzangebot insbesondere für Laufwerke (z.B. ATX-Tower, 19” Serverracks)<br />

• Stromverbrauch (z.B. leistungsstarke Markennetzteile mit sauberen Ausgangsspannungen)<br />

• Red<strong>und</strong>anz (z.B. mehrere Netzteile mit intelligenter Steuerelektronik)<br />

• Erweiterbarkeit<br />

• Raumangebot, wegen Hitzeentwicklung, weitere Lüfter, Lärmdämmung<br />

317


D. Serverhardware<br />

D.2.2. Mainboard Prozessor Kühlung<br />

• Single- / Multiprozessorsystem<br />

• Preis- / Leistungsverhältnis<br />

• Sicherstellung der moderaten Hitzeentwicklung<br />

• Leistungsfähigkeit des I/O Systems (Speicherzugriff, Plattencontroller, Taktung der Bussysteme) (z.B.<br />

SCSI / IDE, Chipsätze)<br />

D.2.3. Arbeitsspeicher<br />

• Menge<br />

• Modul (Hersteller, Speichertakt, SPD-EEPROM, CAS-Latency)<br />

D.2.4. Weitere Komponenten<br />

• Netzwerkkarte mit Boot-ROM <strong>und</strong> Full-Duplex-Fähigkeit<br />

• Verkabelung (z.B. CAT5 CAT7)<br />

• ISDN (aktive Karte)<br />

• unproblematische Grafikkarte<br />

D.2.5. Plattenbus Controller Laufwerke<br />

• Flexibilität<br />

• Geschwindigkeit (Umdrehungszahl, Cache, Zugriffszeit)<br />

• Preis<br />

• Hitzeentwicklung / Geräuschentwicklung<br />

• Red<strong>und</strong>anz / Ausfallsicherheit (z.B. RAID)<br />

• Backup-Strategie (Bänder, Bandaufbewahrung, Sicherungsintervalle)<br />

• andere Laufwerke (Diskettenlaufwerk, CD- DVD-ROM<br />

D.2.6. Peripherie<br />

• Tastatur, Maus (Unterstützung durch das OS)<br />

D.2.7. USV<br />

318<br />

• Leistungsstärke, Überbrückungszeit<br />

• Anbindung an den Server / Unterstützung durch das Betriebssystem


E. Template für L AT E XDateien<br />

Mit Hilfe des folgenden Kapitels soll eine zunehmende Standardisierung aller LATEXDateien des <strong>Linux</strong>handbuchs<br />

eingeleitet werden. Darüber hinaus erleichtern die angeführten Beispiele den Einstieg in LATEX ˙Bei der<br />

Überarbeitung einzelner Kapitel ist der jeweilige Autor angehalten, den beschriebenen Vorgaben zu folgen.<br />

Um LATEXDateien, insbesondere das <strong>Linux</strong>handbuch, unter SuSE 8.1 in PDF bzw. PS zu übersetzen,<br />

müssen die Pakete te_latex <strong>und</strong> make nachinstalliert werden. Als brauchbarer Editor kann der KTexMaker<br />

verwendet werden, der im Paket kile enthalten ist.<br />

E.1. Dateikopf<br />

Im Dateikopf werden allgemeine Informationen zur jeweiligen LATEXDatei in Kommentarform abgelegt.<br />

Dazu gehören Informationen zum Status des jeweiligen Kapitels, die verwendete Distribution <strong>und</strong> ein fortlaufend<br />

zu führendes Log, in dem insbesondere größere Änderungen anzugeben sind.<br />

%Entwurf von Tobias Mucke<br />

%Korrekturlesung von Michael Petter<br />

%Kontext: Distribution SuSE 8.1<br />

%Log:<br />

%Timestamp Name Änderungen <strong>und</strong> Begründung<br />

%07.11.2002 Tobias Mucke Standardisierung der Stichworteinträge<br />

%04.11.2002 Tobias Mucke Ergänzungen bezüglich neuer Latex-Tags<br />

E.2. Kapitelüberschrift<br />

Im Allgemeinen entspricht eine LATEXDatei einem Kapitel mit eigener Überschrift. Damit das Kapitel von<br />

anderen Textstellen aus referenziert werden kann, wird noch eine Textmarke gesetzt. Diese besteht aus dem<br />

benutzten LATEXBefehl <strong>und</strong> der Kapitelüberschrift (vgl. hierzu Abschnitt E.9 auf Seite 322). Durch die konsequente<br />

Einhaltung dieser Vorgaben ist es ohne Weiteres möglich auf andere Kapitel zu verweisen.<br />

Da das im Anhang befindliche Stichwortverzeichnis das Inhaltsverzeichnis abbilden soll, wird gleich ein<br />

entsprechender Indexeintrag an dieser Stelle gesetzt. Dieser kann, muss aber nicht, mit der Kapitelüberschrift<br />

übereinstimmen. Auch ist es möglich mehrere Stichwörter vorzusehen.<br />

\chapter{Kapitelüberschrift}<br />

\label{chapter:Kapitelüberschrift}<br />

\index{Kapitel}<br />

\index{Kapitelüberschrift}<br />

319


E. Template für LATEXDateien<br />

E.3. Einleitung<br />

Bevor in das Thema richtig eingestiegen wird, soll eine kurzweilige Einleitung zur Lektüre des nachfolgenden<br />

Kapitels anregen. Hier können aber auch erste Erläuterungen zum später besprochenen Thema angebracht<br />

werden.<br />

erste Erläuterungen zum Thema<br />

E.4. Lernziele<br />

Durch Nennung der Lernziele wird bereits zu Beginn ein grober Einblick in die Inhalte des Kapitels möglich.<br />

An dieser Stelle ist unbedingt die vereinbarte Form zu wahren. Insbesondere ist auf die Zeichensetzung zu<br />

achten!<br />

\section*{Lernziele}<br />

In diesem Kapitel lernen Sie,<br />

\begin{itemize}<br />

\item erstes Lernziel,<br />

\item zweites Lernziel,<br />

\item drittes Lernziel.<br />

\end{itemize}<br />

Das Ganze sieht dann wie folgt aus.<br />

Lernziele<br />

In diesem Kapitel lernen Sie,<br />

• erstes Lernziel,<br />

• zweites Lernziel,<br />

• drittes Lernziel.<br />

E.5. Gliederungspunkte<br />

Erst jetzt folgt der Einstieg in das Thema. Bei der Formatierung mit LATEX liegt der Augenmerk besonders<br />

auf der Struktur, weniger auf der Formatierung des Textes. Auch an dieser Stelle gilt es, die konsequente<br />

Aufnahme der Gliederungspunkte in das Stichwortverzeichnis zu beachten. Wie das folgende Beispiel zeigt,<br />

können damit sogar Hierarchiestufen abgebildet werden. Zudem ist auf die zu verwendenden Textmarken<br />

zu achten.<br />

\section{Oberpunkt}<br />

\label{section:Oberpunkt}<br />

\index{Thema!Oberpunkt}<br />

\index{Oberpunkt}<br />

320<br />

Gleiches gilt auch für weitere Unterpunkte.


\subsection{Unterpunkt}<br />

\label{subsection:Unterpunkt}<br />

\index{Oberpunkt!Unterpunkt}<br />

\index{Unterpunkt}<br />

E.6. Stichworteinträge<br />

Weiter untergeordnete Punkte, die allerdings aufgr<strong>und</strong> der unschönen Gliederungstiefe nur in begründeten<br />

Ausnahmefällen verwendet werden sollten, richten sich ebenfalls nach diesen Vorgaben.<br />

\subsubsection{Punkt}<br />

\label{subsubsection:Punkt}<br />

\index{Unterpunkt!Punkt}<br />

\index{Punkt}<br />

E.6. Stichworteinträge<br />

Wie bereits angedeutet, soll das Stichwortverzeichnis ein alphabetisch geordnetes Abbild des Inhaltsverzeichnisses<br />

sein. Damit aber noch nicht genug. Zusätzlich können nach eigenem Ermessen der Autoren<br />

Stichwörter eingefügt werden.<br />

\index{Stichwort}<br />

\index{Kategorie!Stichwort}<br />

Für die angeführte Kategorie, die gr<strong>und</strong>sätzlich vom Autor vergeben wird, gibt es bereits einige Standardeinträge,<br />

die im passenden Einzelfall verwendet werden können.<br />

• Dateisysteme<br />

• Editoren<br />

• Hardware<br />

• Kernel<br />

• Kommandos<br />

• Konfigurationsdateien<br />

• Konfigurationstools<br />

• Netzwerk<br />

• Software<br />

So sollte beispielsweise bei jeder Konfigurationsdatei der folgende Eintrag ergänzt werden.<br />

\index{Konfigurationsdatei!/pfadangabe/datei.conf}<br />

Dadurch dürfte schließlich ein umfangreiches Stichwortverzeichnis entstehen, dass kaum noch Wünsche<br />

offen lässt.<br />

321


E. Template für LATEXDateien<br />

E.7. Tabellen<br />

Nach ein paar Versuchen gibt es jetzt endlich eine brauchbare Tabelle, die sich ganz gut ins <strong>Linux</strong>handbuch<br />

einfügt. Wie das Ganze aussieht, sieht man in Tabelle E.1 auf Seite 322.<br />

\begin{table}[htbp]<br />

\begin{center}<br />

\begin{tabular*}{0.95\textwidth}{p{0.3\textwidth}p{0.6\textwidth}}<br />

\hline<br />

\textbf{erste Spalte} & \textbf{zweite Spalte} \\<br />

\hline<br />

1. & Zeile \\<br />

2. & Zeile \\<br />

3. & Zeile \\<br />

\hline<br />

\end{tabular*}<br />

\caption{Tabellenbeschriftung}<br />

\label{table:Tabellenbeschriftung}<br />

\end{center}<br />

\end{table}<br />

erste Spalte zweite Spalte<br />

1. Zeile<br />

2. Zeile<br />

3. Zeile<br />

E.8. Abbildungen<br />

Tabelle E.1.: Tabellenbeschriftung<br />

Auch bei den Abbildungen gibt es bisher kaum Überlegungen zur einfachen <strong>und</strong> ansehnlichen Verarbeitung.<br />

Allerdings gibt es bereits einige gute Beispiele in Dokumentationen, die in der Arbeit entstanden sind.<br />

\begin{figure}[htbp]<br />

\centering<br />

\includegraphics[width=\textwidth]{filename.eps}<br />

\caption{Bildunterschrift}<br />

\label{figure:Bildunterschrift}<br />

\end{figure}<br />

E.9. Referenzen <strong>und</strong> Textmarken<br />

Die Verwendung von Textmarken wurde bisher an Gliederungspunkten festgemacht. Diese werden jedoch<br />

auch für Abbildungen <strong>und</strong> Tabellen vergeben. Allerdings müssen deutsche Sonderzeichen vermieden <strong>und</strong><br />

durch die gängigen Buchstabenkombinationen ersetzt werden. Demnach wird ”ä” zu ”ae” usw.<br />

322


\label{table:Tabellenname}<br />

\label{figure:Abbildung}<br />

E.10. Verlinkungen ins Internet<br />

Bei einer konsequenten Einführung dieser Textmarken, kann an anderer Stelle im Dokument ohne Weiteres<br />

auf andere Kapitel, Oberpunkte, Unterpunkte, Tabellen <strong>und</strong> Abbildungen wie folgt verwiesen werden.<br />

Kapitel \ref{chapter:Kapitelüberschrift} auf Seite \pageref{chapter:Kapitelüberschrift}<br />

Oberpunkt \ref{section:Oberpunkt} auf Seite \pageref{section:Oberpunkt}<br />

Tabelle \ref{table:Tabellenname} auf Seite \pageref{table:Tabellenname}<br />

Abbildung \ref{figure:Abbildung} auf Seite \pageref{figure:Abbildung}<br />

Zur Anschaung soll der Verweis auf das Kapitel E.9 auf Seite 322 dienen.<br />

E.10. Verlinkungen ins Internet<br />

Damit URLs als Links umgesetzt werden<br />

die aktuelle Version des <strong>Linux</strong>handbuchs kann unter<br />

\href{http://www.linuxdoc.org}{www.linuxdoc.org} bezogen werden.<br />

Im fortlaufenden Text, sieht das dann so aus. Die aktuelle Version des <strong>Linux</strong>handbuchs kann unter<br />

www.linuxdoc.org bezogen werden.<br />

E.11. Aufzählungen<br />

Bei vielen Gelegenheiten bieten sich Aufzählungen geradezu an.<br />

\begin{itemize}<br />

\item erster Stichpunkt<br />

\item zweiter Stichpunkt<br />

\item dritter Stichpunkt<br />

\end{itemize}<br />

Im Dokument stellt sich das dann so dar.<br />

• erster Stichpunkt<br />

• zweiter Stichpunkt<br />

• dritter Stichpunkt<br />

E.12. Beschreibungen<br />

Nicht immer will man in Stichwortlisten Einzelheiten aneinander reihen. Gerade wenn die Erläuterungen<br />

mehrzeilig werden, bietet sich folgendes an.<br />

\begin{description}<br />

\item[1.] erster Arbeitsschritt<br />

\item[2.] zweite Anweisung<br />

\item[3.] abschließende Ausführungen<br />

\end{description}<br />

323


E. Template für LATEXDateien<br />

Auch hier wieder ein Beispiel zur Veranschaulichung.<br />

1. erster Arbeitsschritt<br />

2. zweite Anweisung<br />

3. abschließende Ausführungen<br />

E.13. Textformatierungen<br />

Aber auch in LATEX geht es nicht nur um die Struktur eines Dokuments. Deshalb hier noch die bisher verwendeten<br />

Formatierungen für Text.<br />

Anhand eines professionell verlegten Buches, sollten zu einem späteren Zeitpunkt für die unterschiedlichen<br />

Zwecke eingene Formatierungen eingefügt werden. Vorab reichen jedoch die hier beschriebenen aus.<br />

E.13.1. Consolfont<br />

Manchmal soll ein Text so wie in jeder normalen Konsole aussehen. Um das zu erreichen, gibt es zwei<br />

Möglichkeiten. Für kurze Textstrings, beispielsweise ein einzelnes Kommando, das sich in den Gesamttext<br />

einfügen soll, verwendet man folgendes.<br />

\verb|kommando -option parameter|<br />

Für längere Konfigurationsdateien, Quelltexte <strong>und</strong> Skripte müssen die nachfolgenden Tags verwendet werden.<br />

\begin{verbatim}<br />

#<br />

# beispielhafte Konfigurationsdatei<br />

#<br />

LOG_DIR=/var/log<br />

...<br />

\end{verbatim}<br />

E.13.2. Kursivschrift<br />

Die Kursivschrift kann folgendermaßen gesetzt werden.<br />

normaler fortlaufender Text kann so \textit{kursiv} formatiert werden<br />

Der kursive Text ist auch ziemlich angenehm zu lesen.<br />

E.13.3. Gliederungsformate<br />

Die Formatierung der einzelnen Gliederungspunkte kann auch auf beliebigen Text angewendet werden,<br />

ohne dass dieser mit durchnummeriert <strong>und</strong> im Inhaltsverzeichnis aufgenommen wird. Zu den aufgeführten<br />

Textformaten gehört auch der Zeilenabstand <strong>und</strong> die Absatzformatierungen.<br />

\section*{großer fetter Text}<br />

\subsection*{normaler fetter Text}<br />

\subsubsection*{kleiner fetter Text}<br />

Zur besseren Anschauung, das Ganze jetzt nochmal als Vorschau.<br />

324


großer, fetter Text<br />

normaler, fetter Text<br />

kleiner, fetter Text<br />

E.14. Fussnoten<br />

E.14. Fussnoten<br />

Fussnoten wurden zwar bisher selten verwendet, können aber auf sehr einfache Art <strong>und</strong> Weise eingefügt<br />

werden.<br />

<strong>Linux</strong> <strong>und</strong> die SuSE\footnote{SuSE steht für Software- <strong>und</strong> Systemenwicklung} AG.<br />

Auch dieses Beispiel soll nicht unverdeutlicht bleiben (vgl. unten). <strong>Linux</strong> <strong>und</strong> die SuSE 1 AG.<br />

E.15. Übungen<br />

Übungen sollten immer am Ende eines Kapitels, kurz vor der Zusammenfassung, stehen.<br />

\section*{Übungen}<br />

\begin{description}<br />

\item[1.]<br />

\item[2.]<br />

\item[3.]<br />

\end{description}<br />

E.16. Zusammenfassung<br />

Am Ende jedes Kapitels folgt eine kurze Zusammenfassung.<br />

\section*{Zusammenfassung}<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

Wie das im echten Dokument aussieht, ist nicht mehr allzu schwer zu erraten.<br />

Zusammenfassung<br />

Aufgr<strong>und</strong> dieses Anhangs sollte es möglich sein, große Teile des <strong>Linux</strong>handbuchs zu standardisieren. Ein<br />

einheitliches Layout <strong>und</strong> die Qualitätsicherung des Inhalts- <strong>und</strong> Stichwortverzeichnisses stehen dabei im<br />

Vordergr<strong>und</strong>. Zu guter Letzt kann die folgende Vorlage als Gr<strong>und</strong>lage für neue Kapitel dienen.<br />

%Entwurf von<br />

%Korrekturlesung von<br />

%Kontext: Distribution SuSE 8.1<br />

%Log:<br />

%Timestamp Name Änderungen <strong>und</strong> Begründung<br />

%<br />

1 SuSE steht für Software- <strong>und</strong> Systemenwicklung<br />

325


E. Template für LATEXDateien<br />

\chapter{Kapitelüberschrift}<br />

\label{chapter:Kapitelüberschrift}<br />

\index{Kapitel}<br />

\index{Kapitelüberschrift}<br />

erste Erläuterungen zum Thema<br />

\section*{Lernziele}<br />

In diesem Kapitel lernen Sie,<br />

\begin{itemize}<br />

\item erstes Lernziel,<br />

\item zweites Lernziel,<br />

\item drittes Lernziel.<br />

\end{itemize}<br />

\section{Oberpunkt}<br />

\label{section:Oberpunkt}<br />

\index{Thema!Oberpunkt}<br />

\index{Oberpunkt}<br />

\subsection{Unterpunkt}<br />

\label{subsection:Unterpunkt}<br />

\index{Oberpunkt!Unterpunkt}<br />

\index{Unterpunkt}<br />

\begin{itemize}<br />

\item erster Stichpunkt<br />

\item zweiter Stichpunkt<br />

\item dritter Stichpunkt<br />

\end{itemize}<br />

\begin{figure}[htbp]<br />

\centering<br />

\includegraphics[width=\textwidth]{filename.eps}<br />

\caption{Bildunterschrift}<br />

\label{figure:Bildunterschrift}<br />

\end{figure}<br />

\subsection{Unterpunkt}<br />

\label{subsection:Unterpunkt}<br />

\index{Oberpunkt!Unterpunkt}<br />

\index{Unterpunkt}<br />

\begin{description}<br />

\item[1.] erster Arbeitsschritt<br />

\item[2.] zweite Anweisung<br />

\item[3.] abschließende Ausführungen<br />

326


\end{description}<br />

\section{Oberpunkt}<br />

\label{section:Oberpunkt}<br />

\index{Thema!Oberpunkt}<br />

\index{Oberpunkt}<br />

\begin{table}[htbp]<br />

\begin{center}<br />

\begin{tabular*}{0.95\textwidth}{p{0.3\textwidth}p{0.6\textwidth}}<br />

\hline<br />

\textbf{erste Spalte} & \textbf{zweite Spalte} \\<br />

\hline<br />

1. & Zeile \\<br />

2. & Zeile \\<br />

3. & Zeile \\<br />

\hline<br />

\end{tabular*}<br />

\caption{Tabellenbeschriftung}<br />

\label{table:Tabellenbeschriftung}<br />

\end{center}<br />

\end{table}<br />

\section*{Übungen}<br />

\begin{description}<br />

\item[1.]<br />

\item[2.]<br />

\item[3.]<br />

\end{description}<br />

\section*{Zusammenfassung}<br />

Zusammengefasste Inhalte des vorangegangenen Kapitels.<br />

E.16. Zusammenfassung<br />

327


E. Template für LATEXDateien<br />

328


F. Sourceforge<br />

Es folgt eine kurze Einleitung in die Zusammenarbeit mit Sourceforge.<br />

F.1. Umgebungsvariablen<br />

Das Environment der verwendeten Shell muss entsprechend angepasst werden.<br />

export CVS_RSH=ssh<br />

F.2. Checkout<br />

Zunächst müssen die jeweiligen Sourcen aus dem CVS ausgecheckt werden. Dazu braucht man in der Regel<br />

einen Benutzer. Im folgenden Beispiel wird das Projekt linuxhandbuch vom Benutzer mucke in das aktuelle<br />

Verzeichnis heruntergeladen.<br />

cvs -z3 -d:ext:mucke@cvs.linuxhandbuch.sourceforge.net:/cvsroot/linuxhandbuch co linuxhandbuch<br />

F.3. Übernahme von Änderungen auf dem CVS-Server<br />

Während man an den Quellen auf dem lokalen System arbeitet, können ja am CVS-Server Änderungen<br />

vorgenommen worden sein. Ein Abgleichen dieser Änderungen funktioniert wie folgt.<br />

cvs -z3 update<br />

F.4. Änderungen einstellen<br />

Wenn man Änderungen am ausgecheckten Projekt vorgenommen hat, füttert man diese mit folgendem Befehl<br />

wieder in das CVS ein.<br />

cvs -z3 commit<br />

F.5. Hinzufügen von weiteren Dateien<br />

Um neue Dateien einzustellen, benötigt man folgenden Befehl.<br />

cvs add myfile.tex<br />

F.6. Upload einer neuer Version<br />

Um ein Dokument bei Sourceforge als Release zu verbreiten muss man es per anonymous ftp auf upload.sourceforge.net<br />

laden...<br />

329


F. Sourceforge<br />

330


G. Literaturverzeichnis<br />

[1] Michael Kofler: <strong>Linux</strong> Installation, Konfiguration, Anwendung, 5. Auflage, Addison-Wesley, ISBN 3-<br />

8273-1658-8. Dieses Buch eignet sich für Einsteiger, die sich einen Überblick verschaffen <strong>und</strong> dabei<br />

distributionsunabhängig bleiben wollen. Dabei wird nicht bloß auf die Anwenderseite eingegangen,<br />

sondern auch ein Blick hinter die Kulissen gewährt. Das gut aufbereitete Hintergr<strong>und</strong>wissen vermittelt<br />

ganz nebenbei ein Gesamtverständnis für das System.<br />

[2] Helmut Herold: <strong>Linux</strong> Unix Gr<strong>und</strong>lagen, Kommandos <strong>und</strong> Konzepte, 4. Auflage, Addison-Wesley,<br />

ISBN 3-8273-1435-6. Dieses Buch liefert ein gutes Basiswissen für Anfänger <strong>und</strong> Fortgeschrittene<br />

im Bereich Unix bzw. <strong>Linux</strong> <strong>und</strong> ist für jene interessant, die ihr Wissen über diese Betriebssysteme<br />

vertiefen möchten. Dabei liegt der Schwerpunkt auf der Kommandozeile <strong>und</strong> nicht im X-Window-<br />

System.<br />

[3] Michael Kofler: MySQL Einführung, Programmierung, Referenz, Addison-Wesley, ISBN 3-8273-1762-<br />

2. Dieses Buch führt in die freie Datenbank MySQL ein, wirft aber auch einen Blick auf die Kombination<br />

mit dem Webserver Apache <strong>und</strong> der Skriptsprache PHP. Das praxisorientierte Buch geht<br />

ausführlich auf den Entwurf relationaler Datenbanksysteme, die Abfragesprache SQL, das Sicherheitssystem<br />

von MySQL <strong>und</strong> Benutzeroberflächen zur Administration ein. Eine Einführung in die<br />

Programmiersprache PHP r<strong>und</strong>et das Ganze ab.<br />

[4] Olaf Kirch: <strong>Linux</strong> Network Administrator’s Guide, O’Reilly, ISBN 1-56592-087-2. Dieses englischsprachige<br />

Buch, das auch auf deutsch erhältlich ist, gibt eine umfassende Einführung in die Protokollfamilie<br />

TCP/IP <strong>und</strong> beschreibt die Konfiguration des Netzwerks. Thematisiert werden auch verschiedenste<br />

Dienste, wie zum Beispiel DNS, NIS <strong>und</strong> NFS.<br />

[5] Helmut Herold, Jörg Arndt: C-Programmierung unter <strong>Linux</strong>, SuSE Press, Erscheinungsdatum: 1. März<br />

2002, 1. Auflage, ISBN: 3935922086, 1085 Seiten. Dieses Buch beschreibt die Programmiersprache<br />

C anhand vieler anschaulicher Beispiele, die ausführlich mit Programmcode vorgestellt werden.<br />

Die Autoren begnügen sich jedoch nicht allein mit der Vorstellung der einzelnen Sprachelemente,<br />

sondern vermitteln auch Einblicke in wichtige Gr<strong>und</strong>lagen der Informatik. Darüber hinaus werden<br />

zu den einzelnen C-Konstruktionen effektive Programmiertechniken aus der Praxis <strong>und</strong> typische Anwendungsgebiete<br />

der Programmiersprache C im Detail vorgestellt. Zu den wichtigsten Themen finden<br />

sich in dem Buch zudem vielfältige Tipps sowie Hinweise zur Umgehung von Stolpersteinen.<br />

[6] Service Fachvlg., Wien: Computer Lexikon Fachwörterbuch. Ausgabe 2002. Deutsch - Englisch / Englisch<br />

- Deutsch, Microsoft Press, Erscheinungsdatum: 2001, ISBN: 3860638270, 938 Seiten. Dieses<br />

Nachschlagewerk erklärt die wichtigsten Begriffe, mit der Sie in der EDV immer wieder konfroniertiert<br />

werden. Die einzelnen Beiträge sind sachlich-kurz <strong>und</strong> informativ. Dabei wird nicht nur<br />

auf Begrifflichkeiten der Microsoftwelt eingegangen. Zusätzlich zu den r<strong>und</strong> 9000 Stichwörtern finden<br />

noch ein umfassendes Englisch-Deutsch-Fachwörterbuch, eine Liste der Top-Level-Domains sowie<br />

eine Aufführung der wichtigsten Zeichensätze <strong>und</strong> Umrechnungstabellen zwischen Dezimal-,<br />

Hexadezimal-, Oktal- <strong>und</strong> Binärsystemen Platz.<br />

331


G. Literaturverzeichnis<br />

[7] Dirk Ammelburger: Go to PHP 4, Addison-Wesley, Erscheinungsdatum: 2002, ISBN: 3827317592, 591<br />

Seiten. Dieses Buch leistet in den ersten Kapiteln eine f<strong>und</strong>ierte Einführung in die Skriptsprache PHP,<br />

geht später aber zu konkreten Anwendungsfällen, wie Sessionbehandlung, Datenbankzugriff usw.,<br />

über <strong>und</strong> bereitet diese Themen sehr gut auf. Darüber hinaus kann es aufgr<strong>und</strong> der umfangreichen<br />

Referenz auch als Nachschlagewerk verwendet werden.<br />

[8] Andrew S. Tanenbaum: Moderne Betriebssysteme, Addison-Wesley, Erscheinungsdatum: 2002, 2. Auflage,<br />

ISBN: 3827370191. Dieses Standardwerk zur Konzepten <strong>und</strong> Gr<strong>und</strong>lagen von Betriebssystemen<br />

ist in einem lebhaften <strong>und</strong> leicht verständlichen Stil geschrieben. Der Schwerpunkt liegt auf traditionellen<br />

Single Processor-Systemen. Zahlreiche Abbildungen <strong>und</strong> viele, auch große Beispiele erleichtern<br />

das Verstehen der vorgestellten Konzepte <strong>und</strong> Theorien. Zum Üben des Stoffes gibt es 450 zum<br />

Teil neue oder aktualisierte Übungsaufgaben<br />

[9] Linus Torvalds, David Diamond: Just for Fun. Wie ein Freak die Computerwelt revolutionierte, Hanser<br />

Fachbuch, Erscheinungsdatum: Juli 2001, ISBN: 3446216847. In diesem Buch meldet sich der<br />

<strong>Linux</strong>-Erfinder Linus Torvalds selbst zu Wort <strong>und</strong> veröffentlich die Geschichte des freien Betriebssystems<br />

<strong>Linux</strong>, die gleichzeitig auch seine eigene Biografie ist. Torvalds vermittelt neben Details <strong>und</strong><br />

Anekdoten aus seinem Leben vor allem ein Lebensgefühl. Exemplarisch zeigt er, was sich aus der<br />

Begeisterung für eine Sache entwickeln kann. Ruhm, Ehre, Geld <strong>und</strong> Erfolg tragen dabei wenig zur<br />

eigenen Befriedigung bei. Das ist ungewohnt, irgendwie gut <strong>und</strong> macht einfach nur Spaß. Wie <strong>Linux</strong>.<br />

Ein revolutionäres Buch von einem Finnen ohne Revolutionsanspruch. Lesenswert <strong>und</strong> spektakulär.<br />

[10] SuSE Anwenderhandbuch <strong>und</strong> SuSE Administrationshandbuch<br />

332


Abbildungsverzeichnis<br />

11.1. Beispiel für eine Partitionstabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />

11.2. Bootprozess grafisch veranschaulicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />

17.1. Prozesszustände . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160<br />

18.1. Bildunterschrift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171<br />

A.1. SuSE Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301<br />

A.2. RedHat Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302<br />

A.3. Mandrake Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302<br />

A.4. Debian Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302<br />

A.5. Slackware Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303<br />

A.6. SCO Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303<br />

A.7. Conectiva Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304<br />

A.8. Turbo <strong>Linux</strong> Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304<br />

A.9. United <strong>Linux</strong> Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304<br />

333


Abbildungsverzeichnis<br />

334


Tabellenverzeichnis<br />

4.1. Tastenkombinationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

5.1. Manual Pages - Bedienung mit der Tastatur . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

5.2. Info Pages - Bedienung mit der Tastatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

7.1. Verschiedene Dateibetrachter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />

7.2. vi - Bedienung mit der Tastatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />

7.3. Emacs - gebräuchliche Tastaturkommandos . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

7.4. Emacs - Ersatz für die Pfeiltasten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

7.5. Hilfe unter Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

7.6. mc - Fensteroptionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />

7.7. mc - Andere Optionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />

7.8. Bash Tastaturfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

7.9. Ausgabeumleitung mit der Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66<br />

7.10. Mehrere Kommandos gleichzeitig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

7.11. Jokerzeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

7.12. Bausteine von Regulären Ausdrücken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

7.13. Multiplikatorbausteine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

8.1. Standardverzeichnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

9.1. Dateitypen wie in ls -l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76<br />

9.2. Pfadangaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76<br />

9.3. Arten von Gerätedateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />

9.4. Rechte wie in ls -l angezeigt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />

9.5. Benutzerabkürzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />

9.6. Dateitypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />

9.7. Symboldarstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />

9.8. Oktalzahldarstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81<br />

9.9. Vergleich von Soft- <strong>und</strong> Hardlinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

9.10. Dateisysteme - Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />

9.11. Umount - Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />

9.12. fstab - die Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87<br />

11.1. Struktur eines Eintrags in der Partitionstabelle . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />

11.2. lilo - Wo hin damit? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104<br />

16.1. Einstellungen in der /etc/passwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144<br />

16.2. Felder in der /etc/shadow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145<br />

16.3. Parameter von useradd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146<br />

335


Tabellenverzeichnis<br />

336<br />

16.4. /etc/group aufgeschlüsselt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147<br />

16.5. groupadd Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148<br />

16.6. passwd Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148<br />

16.7. passwd Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149<br />

16.8. lpr - Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151<br />

16.9. lpc - Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152<br />

16.10.lpq - Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153<br />

16.11.lprm - Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153<br />

16.12.fsck Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155<br />

16.13.crontab - Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156<br />

17.1. Prozess-Adressraum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164<br />

17.2. Prozessstatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166<br />

17.3. ps - Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166<br />

17.4. at - Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168<br />

18.1. Netzwerk - Gr<strong>und</strong>begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173<br />

18.2. /etc/host.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175<br />

18.3. Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176<br />

18.4. Wo soll gesucht werden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176<br />

18.5. Startup - Skripts im Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177<br />

18.6. Fehler im Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178<br />

20.1. Prozessinformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194<br />

20.2. Kerneldaten in /proc - Teil 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196<br />

20.3. Kerneldaten in /proc - Teil 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197<br />

20.4. IDE Controller in /proc/ide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198<br />

20.5. IDE Laufwerke in /proc/ide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198<br />

20.6. Netzwerk in /proc/net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199<br />

20.7. Serielle Schittstellen in /proc/tty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199<br />

27.1. Datei /etc/exports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232<br />

28.1. Optionen im Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241<br />

29.1. Samba - Globale Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />

29.2. Verzeichnisfreigaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247<br />

29.3. Druckerfreigaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248<br />

29.4. PDC mit Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249<br />

38.1. Tastenkombinationen für Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282<br />

38.2. einige nützliche Befehle für Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283<br />

E.1. Tabellenbeschriftung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322


Index<br />

802.11b, 131<br />

Administration<br />

cron, 156<br />

Logdateien, 157<br />

ALSA, 132<br />

alsaconf, 132<br />

Antialiasing, 54<br />

Apache, 261<br />

Beispielumgebung, 261<br />

Softwareinstallation, 261<br />

APM, 129<br />

Bash<br />

/etc/bash.bashrc, 64<br />

/etc/profile, 64<br />

/.bashrc, 64<br />

/.profile, 64<br />

bash, 63<br />

Ausgabeumleitung, 65<br />

Prozesse, 66<br />

Benutzerverwaltung<br />

groupadd, 147<br />

passwd, 148<br />

useradd, 146<br />

Beowulf, 203<br />

Betriebssysteme<br />

Aufgaben des Betriebssystems, 29<br />

Betriebssystem - Geschichte, 28<br />

Betriebssysteme im Überblick, 28<br />

Einsatzgebiete <strong>und</strong> Zukunft von <strong>Linux</strong>, 29<br />

Binary-Treiber, 117<br />

BIOS, 97<br />

Bootkonzept, 97<br />

init-Skripten, 102<br />

LILO, 103<br />

Runlevel, 101<br />

Systemstart, 100<br />

Bootprogramm, 98<br />

Bootvorgang<br />

BIOS, 97<br />

CMOS, 98<br />

Gr<strong>und</strong>lagen, 97<br />

Init, 100<br />

Kernel, 100<br />

LILO, 99<br />

MBR, 98<br />

C<br />

Ausdrücke, 286<br />

Datentypen, 286<br />

Gr<strong>und</strong>elemente, 285<br />

Operatoren, 286<br />

cardctl, 127<br />

eject, 127<br />

insert, 127<br />

scheme, 126<br />

status, 127<br />

Cluster, 203<br />

Computing, 203<br />

Gr<strong>und</strong>begriffe, 203, 204<br />

High availability, 204<br />

Load balancing, 204<br />

CMOS, 98<br />

Codafs, 201<br />

Eigenschaften, 201<br />

Einbindung in den Kernel, 202<br />

Compact Flash Cards, 129<br />

Concurrent Version System, 251<br />

configure, 92<br />

Cron, 156<br />

CVS, 251<br />

Einrichtung des Repositories, 252<br />

Funktionstest, 253<br />

Gruppenverwaltung, 251<br />

Installation der Softwarepakete, 251<br />

Konfiguration des Inetd, 252<br />

Passwortverwaltung, 252<br />

Portkonfiguration, 252<br />

Vorbereitung, 251<br />

cvs, 273<br />

checkout, 275<br />

337


Index<br />

ci, 276<br />

co, 275<br />

commit, 276<br />

CVSROOT, 275<br />

diff, 276<br />

im Netzwerk, 274<br />

import, 275<br />

init, 274<br />

update, 276<br />

Dateien anzeigen, 57<br />

Dateimanager, 60<br />

Dateisystem<br />

fdisk, 154<br />

fsck, 154<br />

fstab, 83, 86<br />

Links, 82<br />

mount, 83, 85<br />

mtab, 88<br />

Typen, 84<br />

unmount, 86<br />

Dateisysteme<br />

Codafs, 201<br />

Devfs, 200<br />

Reiserfs, 201<br />

Dateitypen, 75<br />

dd, 311<br />

Devfs, 200<br />

DHCP, 223<br />

Client, 224<br />

DHCP-Client<br />

Konfiguration, 224<br />

Funktionsweise, 223<br />

Server, 225<br />

Dokumentation, 225<br />

Installation, 225<br />

Integration System V, 229<br />

Konfiguration, 226<br />

Protokolldatei, 228<br />

DNS, 221<br />

Dokumentation, 45<br />

FAQs, 46<br />

Frequently Asked Questions, 46<br />

HOWTOs, 47<br />

Info-Pages, 46<br />

KDE-Hilfe, 48<br />

Kernel, 47<br />

LDP, 47<br />

338<br />

<strong>Linux</strong> Documentation Project, 47<br />

Manual-Pages, 45<br />

Quellen im Internet, 48<br />

Software-Pakete, 48<br />

Domain Name System, 221<br />

Drucker<br />

drucken, 150<br />

Installation, 149<br />

installieren, 149<br />

Verwaltung, 149<br />

Dynamic Host Configuration Protocol, 223<br />

Editoren<br />

emacs, 58<br />

mc, 60<br />

vi, 58<br />

Einleitung, 19<br />

Überblick, 20<br />

Anmerkungen, 19<br />

Arbeitsgliederung, 21<br />

Autoren, 19<br />

Kontakt, 21<br />

Lizenzmodell, 21<br />

emacs, 281<br />

.el, 283<br />

Befehle, 282<br />

Einrichten, 283<br />

Tastenkombinationen, 282<br />

Enlightenment, 52<br />

Erste Schritte, 41<br />

Konsole, 44<br />

<strong>Linux</strong> beenden, 41<br />

<strong>Linux</strong> starten, 41<br />

Login, 41<br />

Maus, 42<br />

Shutdown, 42<br />

Systemeinstellungen, 44<br />

Tastatur, 42<br />

Uhrzeit, 44<br />

X Window System, 43<br />

fdisk, 154<br />

FHS, 71<br />

Filesysteme<br />

Codafs, 201<br />

Devfs, 200<br />

Reiserfs, 201<br />

fstab, 86


FTP, 263<br />

Beispielumgebung, 263<br />

Softwareinstallation, 263<br />

ftp, 181<br />

gdm, 52<br />

Gerätedateien, 112<br />

Glossar, 301<br />

Gnome, 52<br />

gpart, 99<br />

Grafikkarten, 132<br />

Nvidia, 132<br />

OpenGL, 132<br />

XServer, 132<br />

grafischer Boot, 104<br />

grub, 99<br />

Gr<strong>und</strong>wissen, 27<br />

Betriebssysteme, 27<br />

<strong>Linux</strong> - Merkmale, 29<br />

Personal Computer, 27<br />

Hardware, 121<br />

Arbeitsspeicher, 121<br />

Festplatten, 121<br />

Hotplug, 122<br />

Netzwerkkarten, 130<br />

PCMCIA, 124<br />

Hardware Erkennung, 125<br />

hdparm, 129<br />

Heartbeat, 207<br />

HighLevel-Treiber, 117<br />

Hotplug, 122<br />

Firewire, 124<br />

Kernel, 122<br />

Konfiguration, 123<br />

Logdateien, 123<br />

Netzwerk, 124<br />

PCI, 124<br />

PCMCIA, 124<br />

Shellskripte, 122<br />

USB, 123<br />

hotplug<br />

PCMCIA, 127<br />

ifconfig<br />

Informationen abrufen, 130<br />

Netzwerkkarte einrichten, 131<br />

ifup, 131<br />

Init, 100<br />

Index<br />

Installation, 33<br />

Boot- <strong>und</strong> Installationsmedien, 34<br />

Installationsschritte <strong>und</strong> Einstellmöglichkeiten,<br />

36<br />

Systemanforderungen, 33<br />

Vorbereitungen, 35<br />

Installationsschritte <strong>und</strong> -einstellungen<br />

Installationsvorgang, 38<br />

Kernel <strong>und</strong> Module, 36<br />

Systemboot, 36<br />

YaST2, 36<br />

Installationsvorgang<br />

Benutzer <strong>und</strong> Passwörter, 39<br />

weitere Hardwarekomponenten, 39<br />

Internetdienste, 267<br />

iwconfig, 131<br />

Java, 278<br />

Installation, 279<br />

KDE, 52<br />

Kernel, 100<br />

Aufgaben, 111<br />

Gr<strong>und</strong>lagen, 111<br />

Initial Ramdisk, 115<br />

Installation, 113, 115<br />

Kompilierung, 113, 114<br />

Konfiguration, 113<br />

Konzeption, 112<br />

modularisiert, 112<br />

Module, 116<br />

monolithisch, 112<br />

Quellcode, 113<br />

Systemtest, 116<br />

Versionsnummern, 112<br />

Kernel <strong>und</strong> Kernelmodule, 111<br />

Kernelmodule<br />

Automatismen, 117<br />

depmod, 117<br />

Drittanbieter, 118<br />

insmod, 117<br />

lsmod, 117<br />

modprobe, 117<br />

rmmod, 117<br />

Selbstverwaltung, 117<br />

Kommmandos<br />

ulimit, 69<br />

Konfigurationsdatei<br />

339


Index<br />

crontab, 156<br />

Konfigurationsdateien, boot/grub/menu.lst99, ˙emacs283<br />

/etc/X11/XF86Config, 132<br />

/etc/bash.bashrc, 64<br />

/etc/login.defs, 141<br />

/etc/nscd.conf, 141<br />

/etc/pcmcia/network.opts, 128<br />

/etc/profile, 64<br />

/.bashrc, 64<br />

/.profile, 64<br />

/.xinitrc, 51<br />

/.xsession, 52<br />

host.conf, 174<br />

HOSTNAME, 174<br />

hosts, 174<br />

ifcfg, 131<br />

modules.conf, 118<br />

networks, 174<br />

nscd.conf, 174<br />

nsswitch.conf, 174<br />

passwd, 144<br />

resolv.conf, 174<br />

shadow, 145<br />

sysconfig/network, 131<br />

sysconfig/network/wireless, 131<br />

LaTeX, 295, 319<br />

Übungen, 325<br />

Abbildungen, 322<br />

Aufzählungen, 323<br />

Beschreibungen, 323<br />

Dateikopf, 319<br />

Einleitung, 320<br />

Formatierung, 296<br />

Fussnoten, 325<br />

Gliederung, 295<br />

Gliederungspunkte, 320<br />

Hyperref, 296<br />

Internet, 323<br />

Kapitelüberschrift, 319<br />

Kommentare, 295<br />

Lernziele, 320<br />

Pakete, 296<br />

Quellcode, 296<br />

Querverweise, 297<br />

Referenzen, 322<br />

Spezielle Abschnitte, 296<br />

Stichpunktlisten, 296<br />

340<br />

Stichworteinträge, 321<br />

Stichwortverzeichnis, 297<br />

Tabellen, 322<br />

Template, 319<br />

Textformatierungen, 324<br />

Consolfont, 324<br />

Gliederungsformate, 324<br />

Kursivschrift, 324<br />

Textmarken, 322<br />

Verlinkungen, 323<br />

Zusammenfassung, 325<br />

LILO, 99<br />

Andere Betriebssysteme, 104<br />

deinstallieren, 104<br />

in NT-Bootloader integrieren, 104<br />

<strong>Linux</strong> - Merkmale<br />

Dokumentation, 30<br />

Entwicklungsumgebung, 31<br />

OpenSource, 30<br />

Plattformvielfalt, 31<br />

Sicherheit, 31<br />

<strong>Linux</strong> starten <strong>und</strong> beenden, 41<br />

Logdateien, 157<br />

LowLevel-Treiber, 116<br />

LSB, 71<br />

LVM<br />

Abgrenzung von RAID Systemen, 137<br />

Administration, 138<br />

Dateisysteme, 138<br />

Einsatzgebiete, 136<br />

Funktion <strong>und</strong> Begriffe, 135<br />

Gr<strong>und</strong>lagen, 135<br />

Konfiguration, 137<br />

Logical Volume, 138<br />

Physical Volumes, 137<br />

Verwaltung <strong>und</strong> Beschränkungen, 136<br />

Volume Group, 138<br />

Vorgehensweise, 137<br />

LVM - Logical Volume Manager, 135<br />

make, 92<br />

bzImage, 115<br />

clean, 115<br />

config, 114<br />

dep, 115<br />

menuconfig, 114<br />

modules, 115<br />

modules install, 115


xconfig, 114<br />

make install, 92<br />

Makefiles, 277<br />

manuell<br />

Netzwerkkarte einrichten, 131<br />

Routingtabelle einrichten, 175<br />

Mausfunktionen, 43<br />

MBR, 98<br />

mtab, 88<br />

Network Time Protocol, 217<br />

Netzwerk, 171<br />

Befehle, 175<br />

cvs, 274<br />

Dienste, 181<br />

ftp, 181<br />

Gr<strong>und</strong>begriffe, 172<br />

Gr<strong>und</strong>konfiguration, 172<br />

Konfigurationsdateien, 174<br />

nslookup, 176<br />

ping, 177<br />

traceroute, 177<br />

VNC, 257<br />

NFS, 231<br />

/etc/exports, 232<br />

Client, 233<br />

NIS, 237<br />

Clients, 241<br />

Installation, 238<br />

Master-Server, 239<br />

Slave-Server, 241<br />

nohup, 167<br />

NTP, 217<br />

öffentliche Zeitserver, 217<br />

Allgemeines, 217<br />

Client, 218<br />

Server, 218<br />

Konfiguration, 218<br />

Zeitanpassung, 219<br />

Oberpunkt, 195<br />

Unterpunkt, 195<br />

Open Office<br />

Schriften, 55<br />

OpenGL, 132<br />

Partitionstabelle, 98<br />

PCMCIA, 124, 126<br />

16Bit, 126<br />

32Bit, 126<br />

CardBus, 126<br />

Dokumentation, 125<br />

External PCMCIA Manager, 127<br />

Hardware, 124<br />

hotplug, 127<br />

Kernel PCMCIA Manager, 127<br />

Kommandos, 125<br />

Konfiguration, 125<br />

network.opts, 128<br />

PC Card, 126<br />

Software, 125<br />

Personal Computer<br />

Schichtenmodell des Computers, 27<br />

PHP, 293<br />

Datenübergabe in Formularen, 293<br />

Entwicklungsumgebungen, 293<br />

Maguma Enterprise Environment, 293<br />

Maguma Studio Desktop, 293<br />

Powermanagement, 129<br />

Procfs, 193<br />

Prozessinformationen, 194<br />

Profile, 126<br />

Programmierung<br />

cvs, 273<br />

Makefile, 277<br />

Prozesse<br />

beenden, 167<br />

Definition, 159<br />

zeitgesteuert, 168<br />

Zustände, 160<br />

regexp, 68<br />

Reguläre Ausdrücke, 68<br />

grep, 68<br />

Syntax, 68<br />

regular expressions, 68<br />

Reiserfs, 201<br />

Remote login, 179<br />

route<br />

einrichten, 175<br />

Gro<strong>und</strong>lagen, 175<br />

route.conf, 175<br />

Routingtabelle, 175<br />

RPM, 107<br />

RPMs, 91<br />

Schriftarten, 53<br />

Index<br />

341


Index<br />

SCPM, 126<br />

Shellprogrammierung, 185<br />

Funktionen, 190<br />

Parser, 189<br />

Zeichenkettenzerlegung, 189<br />

Skriptsprachen<br />

PHP, 293<br />

SMB, 243<br />

Benutzerverwaltung, 248<br />

Client, 250<br />

Drucker-Freigaben, 248<br />

Globale Einstellungen, 245<br />

Konfiguration, 244<br />

PDC, 248<br />

SWAT, 244<br />

Verzeichnis-Freigaben, 245<br />

Software<br />

entpacken, 91<br />

Softwareinstallation, 91<br />

Kompilierte Pakete, 91<br />

Quellcode Pakete, 92<br />

RPMs, 91<br />

TAR.GZs, 91<br />

So<strong>und</strong>karten, 132<br />

Sourcecode<br />

configure, 92<br />

make, 92<br />

make install, 92<br />

Splashscreen, 104<br />

Sprache Smalltalk, 291<br />

ssh, 179<br />

Gefahren, 180<br />

Konfigurationsdateien, 180<br />

Passphrases, 180<br />

scp, 179<br />

Syntax, 179<br />

slogin, 179<br />

Syntax, 179<br />

ssh-keygen, 180<br />

Syntax, 179<br />

Standards, 71<br />

FHS, 71<br />

LSB, 71<br />

TDS, 71<br />

Star Office<br />

Schriften, 55<br />

TAR.GZs, 91<br />

342<br />

Tastenkombinationen, 42<br />

bash, 64<br />

TDS, 71<br />

Thema<br />

Oberpunkt, 195<br />

Truetype, 53<br />

Unterpunkt, 195<br />

Versionsverwaltung, 273<br />

VNC, 257<br />

Client, 258<br />

Server, 257<br />

Webmin, 143<br />

Windowmanager, 49, 52<br />

Wireless LAN, 131<br />

WLAN, 131<br />

X, 49<br />

Architektur, 50<br />

Enlightenment, 52<br />

Gnome, 52<br />

KDE, 52<br />

X im Netzwerk, 53<br />

X-Anwendungen, 49<br />

X-Client, 49<br />

X-Server, 49<br />

X-Window-System, 49<br />

Enlightenment, 52<br />

Gnome, 52<br />

KDE, 52<br />

VNC, 53<br />

X-Forwarding, 53<br />

xconsole, 51<br />

xdm, 51<br />

XF86Config, 132<br />

XServer, 132<br />

YaST2<br />

Konfiguration des Systemstarts, 38<br />

Partitionierung, 37<br />

Software, 38<br />

Sprachauswahl, 36<br />

Systemanalyse, 37<br />

Tastatur <strong>und</strong> Maus, 37<br />

Zeitzone, 38<br />

Zugriffsrechte, 79


chgrp, 81<br />

chown, 81<br />

Index<br />

343

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!