Linux - Handbuch und Projektdokumentation -
Linux - Handbuch und Projektdokumentation -
Linux - Handbuch und Projektdokumentation -
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