1451.book Seite 1 Dienstag, 7. Juli 2009 2:18 14
Harald Maaßen
LPIC-1 Sicher zur erfolgreichen Linux-Zertifizierung
1451.book Seite 4 Dienstag, 7. Juli 2009 2:18 14
Der Name Galileo Press geht auf den italienischen Mathematiker und Philosophen Galileo Galilei (1564–1642) zurück. Er gilt als Gründungsfigur der neuzeitlichen Wissenschaft und wurde berühmt als Verfechter des modernen, heliozentrischen Weltbilds. Legendär ist sein Ausspruch Eppur se muove (Und sie bewegt sich doch). Das Emblem von Galileo Press ist der Jupiter, umkreist von den vier Galileischen Monden. Galilei entdeckte die nach ihm benannten Monde 1610. Gerne stehen wir Ihnen mit Rat und Tat zur Seite:
[email protected] bei Fragen und Anmerkungen zum Inhalt des Buches
[email protected] für versandkostenfreie Bestellungen und Reklamationen
[email protected] für Rezensions- und Schulungsexemplare Lektorat Anne Scheibe Korrektorat Claudia Schulz, Hamburg Cover Barbara Thoben, Köln Titelbild Corbis Typografie und Layout Vera Brauner Herstellung Norbert Englert Satz Typographie & Computer, Krefeld Druck und Bindung Bercker Graphischer Betrieb, Kevelaer Dieses Buch wurde gesetzt aus der Linotype Syntax Serif (9,25/13,25 pt) in FrameMaker. Gedruckt wurde es auf chlorfrei gebleichtem Offsetpapier.
Bibliografische Information der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar. ISBN
978-3-8362-1451-3
© Galileo Press, Bonn 2009 2., aktualisierte Auflage 2009
Das vorliegende Werk ist in all seinen Teilen urheberrechtlich geschützt. Alle Rechte vorbehalten, insbesondere das Recht der Übersetzung, des Vortrags, der Reproduktion, der Vervielfältigung auf fotomechanischem oder anderen Wegen und der Speicherung in elektronischen Medien. Ungeachtet der Sorgfalt, die auf die Erstellung von Text, Abbildungen und Programmen verwendet wurde, können weder Verlag noch Autor, Herausgeber oder Übersetzer für mögliche Fehler und deren Folgen eine juristische Verantwortung oder irgendeine Haftung übernehmen. Die in diesem Werk wiedergegebenen Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. können auch ohne besondere Kennzeichnung Marken sein und als solche den gesetzlichen Bestimmungen unterliegen.
1451.book Seite 2 Dienstag, 7. Juli 2009 2:18 14
Liebe Leserin, lieber Leser, in vielen Unternehmen gilt ein Zertifikat des LPI als Garant für umfassende LinuxKenntnisse von Mitarbeitern und Bewerbern. Ein guter Grund also, sich den Prüfungen des LPI zu stellen. Natürlich bringt es ein hoher Standard mit sich, dass das Bestehen der Prüfungen keine Selbstverständlichkeit ist. Dass man nicht mit rudimentären Linux-Kenntnissen in die Prüfung gehen kann, versteht sich von selbst. Aber auch wenn Sie über ausreichendes Wissen und mehrjährige praktische Erfahrung mit Linux verfügen, werden in den Prüfungen einige Fallen lauern, in die man schnell hineintappen kann. Und genau dafür wurde dieses Buch verfasst, das auf die beiden Prüfungen zum Erwerb des Zertifikats LPIC-1 vorbereiten will. Aktuell zu den seit April 2009 geltenden Lernzielen werden alle Themen behandelt, die geprüft werden. Dabei wird jeweils detailliert dargestellt, welche Kenntnisse Sie für die Prüfung haben müssen. Zu jeder Prüfung gibt es eine kleine Testprüfung im Buch. Die Fragen ähneln in der Art den in der Prüfung verwendeten. Im Antwortteil erfahren Sie nicht nur, welche Antwort richtig ist, sondern auch warum Sie richtig ist und die anderen falsch sind. Damit Sie die Prüfungssituation schon einmal testen können, wurde ein Prüfungssimulator erstellt. Die Oberfläche ähnelt der in der Prüfung verwendeten. Auch das Arbeiten unter Zeitdruck können Sie testen: Je nach Anzahl der Fragen wird eine Zeitbegrenzung festgesetzt. Übrigens, wenn Sie dem Softwareentwickler, André Herrmann, ein Feedback geben wollen, können Sie das tun unter http:// andre.gosna.de. Sollten sonst noch Fragen zu Linux offen sein, dann schauen Sie doch mal in das Openbook des Linux-Handbuches von Steffen Wendzel und Johannes Plötner, das Sie wie den Prüfungssimulator auf der beiliegenden DVD-ROM finden. Viel Erfolg für die Prüfungen!
Ihre Anne Scheibe Lektorat Galileo Computing
[email protected] www.galileocomputing.de Galileo Press · Rheinwerkallee 4 · 53227 Bonn
1451.book Seite 3 Dienstag, 7. Juli 2009 2:18 14
Auf einen Blick LPI 101 Topic 101: Systemarchitektur ......................................................
21
Topic 102: Linux-Installation und -Paketverwaltung ....................
55
Topic 103: GNU- und Unix-Kommandos .....................................
87
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard .....................................................
159
Übungsfragen zu LPI 117-101 .....................................................
211
LPI 102 Topic 105: Shells, Skripte und Datenverwaltung ..........................
281
Topic 106: Oberflächen und Desktops .........................................
325
Topic 107: Administrative Aufgaben ............................................
355
Topic 108: Grundlegende Systemdienste .....................................
389
Topic 109: Netz-Grundlagen ........................................................
411
Topic 110: Sicherheit ...................................................................
439
Übungsfragen zu LPI 117-102 .....................................................
465
1451.book Seite 5 Dienstag, 7. Juli 2009 2:18 14
Inhalt Vorwort ..................................................................................................... Hinweise zum Buch ................................................................................. Hinweise zur Prüfung ..............................................................................
15 15 17
LPI 101 Topic 101: Systemarchitektur ...............................................................
21
101.1 Hardware-Einstellungen ermitteln und konfigurieren .......................... Allgemeines .................................................................................... Module zur Laufzeit beeinflussen und konfigurieren ........................ Modulkonfigurationsdateien ........................................................... Zum Kernel gehörende Dateien und Verzeichnisse .......................... Die Gerätedateien für Festplatten und CD-ROMs ............................ Die Gerätedateien für Partitionen ................................................... Ressourcen für Hardwarekomponenten ........................................... Der PCI-Bus .................................................................................... USB – Universal Serial Bus ............................................................... USB-Host-Controller-Typen ............................................................ USB-Klassen .................................................................................... USB-Module automatisch laden ...................................................... Coldplug und Hotplug .................................................................... Das virtuelle Dateisystem sysfs ........................................................ udev, hald und dbus ....................................................................... 101.2 Das System starten ............................................................................. Allgemeines .................................................................................... Boot-Strap-Loader .......................................................................... Kernel-Parameter ............................................................................ Startprotokollierung ........................................................................ 101.3 Runlevel wechseln und das System anhalten oder neu starten ............. Allgemeines .................................................................................... Die Runlevels und ihre Funktion ..................................................... Die Konfigurationsdatei inittab ....................................................... Verzeichnisse und Dateien des init-Prozesses .................................. Runlevel-Wechsel, Herunterfahren, Neustart ..................................
21 22 22 28 29 30 31 32 33 34 34 35 36 37 37 38 38 39 41 42 44 45 46 47 48 50 52
5
1451.book Seite 6 Dienstag, 7. Juli 2009 2:18 14
Inhalt
Topic 102: Linux-Installation und -Paketverwaltung ......................
55
102.1 Festplattenaufteilung planen .............................................................. Allgemeines .................................................................................... Planung im Detail ........................................................................... 102.2 Einen Bootmanager installieren .......................................................... Allgemeines .................................................................................... LILO ............................................................................................... GRUB ............................................................................................. 102.3 Shared Librarys verwalten ................................................................... Allgemeines .................................................................................... Verwaltung von Shared Librarys ...................................................... 102.4 Debian-Paketverwaltung verwenden .................................................. Allgemeines .................................................................................... Konfigurationsdateien und Verzeichnisse ........................................ DPKG-Programme .......................................................................... 102.5 RPM und YUM-Paketverwaltung verwenden ...................................... Allgemeines .................................................................................... Konfigurationsdateien ..................................................................... RPM aktiv verwenden ..................................................................... Abfragen der RPM-Datenbank ........................................................ Überprüfung installierter Pakete ...................................................... Pakete umwandeln ......................................................................... yum und der yumdownloader .........................................................
55 55 56 57 58 58 62 64 65 65 66 67 67 70 76 77 77 78 79 81 82 83
Topic 103: GNU- und Unix-Kommandos ...........................................
87
103.1 Auf der Kommandozeile arbeiten ....................................................... Allgemeines .................................................................................... Aufbau eines Shell-Kommandos ...................................................... Übergabe der Optionen .................................................................. Umgebungsvariablen und Shell-Variablen ....................................... Beliebte Variablen für die Prüfung ................................................... Bash-Befehls-History und automatisches Vervollständigen von Befehlen ......................................................................................... Befehlseingabe ................................................................................ PATH-Variable ................................................................................ Rekursive Befehlsausführung ........................................................... Das Kommando uname ................................................................... Die Manpages im Allgemeinen ....................................................... Funktionsweise der Manpages ........................................................
87 88 88 89 90 93
6
94 95 95 97 97 97 97
1451.book Seite 7 Dienstag, 7. Juli 2009 2:18 14
Inhalt
$MANPATH und die Datei manpath.config ..................................... Die Sektionen des Mansystems ....................................................... Aufbau von Manpages .................................................................... Verwandte Befehle ......................................................................... 103.2 Textströme mit Filtern verarbeiten ...................................................... Allgemeines .................................................................................... cat .................................................................................................. tac .................................................................................................. head ............................................................................................... tail .................................................................................................. expand/unexpand ........................................................................... fmt ................................................................................................. nl .................................................................................................... pr ................................................................................................... wc .................................................................................................. hexdump ........................................................................................ od ................................................................................................... sort ................................................................................................. uniq ................................................................................................ split ................................................................................................ cut, paste und join .......................................................................... tr .................................................................................................... 103.3 Grundlegende Dateiverwaltung .......................................................... Allgemeines .................................................................................... Kommandos für Dateioperationen .................................................. Verwendung von Wildcards ............................................................ 103.4 Ströme, Pipes und Umleitungen verwenden ....................................... Allgemeines .................................................................................... stdin, stdout und stderr .................................................................. Umleitungen (Redirects) ................................................................. Pipes ............................................................................................... tee und xargs .................................................................................. 103.5 Prozesse erzeugen, überwachen und beenden .................................... Allgemeines .................................................................................... Überwachen von Prozessen ............................................................. Signale an Prozesse senden ............................................................. Jobs im Vorder- und im Hintergrund ............................................... Prozesse unabhängig von einem Terminal laufen lassen ................... 103.6 Prozess-Ausführungsprioritäten ändern ............................................... Allgemeines ....................................................................................
98 98 99 99 101 102 102 103 103 103 104 104 105 105 105 106 106 107 107 107 108 110 112 113 113 119 125 126 126 127 128 129 129 130 131 134 137 139 140 141
7
1451.book Seite 8 Dienstag, 7. Juli 2009 2:18 14
Inhalt
nice ................................................................................................ renice ............................................................................................. top und ps zur Überprüfung von Prioritäten .................................... 103.7 Textdateien mit regulären Ausdrücken durchsuchen ........................... Allgemeines .................................................................................... Reguläre Ausdrücke ........................................................................ Die Verwendung von grep .............................................................. egrep und fgrep .............................................................................. Die Verwendung von sed ................................................................ 103.8 Grundlegendes Editieren von Dateien mit dem vi ............................... Allgemeines .................................................................................... Bedienungsgrundlagen .................................................................... Navigation in einem Dokument ...................................................... Einfügen, Löschen, Kopieren und Auffinden von Text ..................... Befehlszeilenoptionen für vi ............................................................
141 142 142 143 144 144 146 149 150 153 154 154 156 156 157
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard ............................................................................... 159 104.1 Partitionen und Dateisysteme anlegen ................................................ Allgemeines .................................................................................... Erzeugen der Partitionen ................................................................. Formatieren der Dateisysteme ........................................................ Erstellen einer Swap-Datei .............................................................. 104.2 Die Integrität von Dateisystemen sichern ............................................ Allgemeines .................................................................................... Sicherstellen der Integrität des Dateisystems und Problembehebung .......................................................................... XFS-Werkzeuge .............................................................................. Überwachen des freien Platzes und der freien Inodes ...................... 104.3 Das Ein- und Aushängen von Dateisystemen steuern .......................... Allgemeines .................................................................................... Manuelles Mounten und Unmounten ............................................. Automatisches Mounten über die Datei /etc/fstab .......................... 104.4 Platten-Quotas verwalten ................................................................... Allgemeines .................................................................................... Möglichkeiten der Quotierung ........................................................ Vorbereiten von Quota ................................................................... Aktivieren von Quota ...................................................................... Ändern und Überprüfen von Quota ................................................
8
159 160 160 163 166 167 168 168 172 172 175 176 176 179 182 183 183 184 185 186
1451.book Seite 9 Dienstag, 7. Juli 2009 2:18 14
Inhalt
104.5 Dateizugriffsrechte und -eigentümerschaft verwalten .......................... Allgemeines .................................................................................... Vergabe der Berechtigungen ........................................................... Verwendung von SUID, SGID und Sticky Bit ................................... chown ............................................................................................ chgrp .............................................................................................. Verwendung von umask .................................................................. Dateiattribute der ext2-/ext3-Dateisysteme .................................... 104.6 Harte und symbolische Links anlegen und ändern ............................... Allgemeines .................................................................................... Softlinks .......................................................................................... Hardlinks ........................................................................................ 104.7 Systemdateien finden und Dateien am richtigen Ort platzieren ........... Allgemeines .................................................................................... FHS – Filesystem Hierarchy Standard ............................................... Programme zum Auffinden von Dateien ..........................................
188 189 189 191 193 194 194 196 197 197 198 200 202 203 203 205
Übungsfragen zu LPI 117-101 .............................................................. 211 Fragen ............................................................................................... 211 Antworten und Erklärungen zu den Übungsfragen .............................. 249
LPI 102 Topic 105: Shells, Skripte und Datenverwaltung ............................ 281 105.1 Die Shell-Umgebung anpassen und verwenden .................................. Allgemeines .................................................................................... Verwendung von Shells ................................................................... Umgebungsvariablen und Shell-Variablen ....................................... Aliase und Funktionen .................................................................... Konfigurationsdateien der Bash ....................................................... Systemweite Konfigurationsdateien ................................................ Konfigurationsdateien für den Benutzer .......................................... Das Skeleton Verzeichnis /etc/skel .................................................. 105.2 Einfache Skripte anpassen oder schreiben ........................................... Allgemeines .................................................................................... Ausführen eines Skripts ................................................................... Ausführungsberechtigung ............................................................... Position eines Skripts ......................................................................
281 282 282 283 285 288 289 289 290 290 291 291 293 294
9
1451.book Seite 10 Dienstag, 7. Juli 2009 2:18 14
Inhalt
Übergabevariablen und Rückgabewerte .......................................... Schleifen und Bedingungen ............................................................. 105.3 SQL-Datenverwaltung ........................................................................ Allgemeines .................................................................................... SQL – Die Befehle ........................................................................... Die ersten Schritte .......................................................................... Eine erste Datenbank ...................................................................... Abfragen mit SELECT und WHERE .................................................. Aktualisieren von Datensätzen ........................................................ Sortieren und Gruppieren ............................................................... Erweitern von Datenbanken ............................................................ Arbeiten mit mehreren Tabellen ..................................................... Destruktive Kommandos .................................................................
294 296 303 303 304 304 307 310 312 313 314 317 321
Topic 106: Oberflächen und Desktops ............................................... 325 106.1 X11 installieren und konfigurieren ...................................................... Allgemeines .................................................................................... Der Aufbau von X ........................................................................... Der Startvorgang von X ................................................................... X-Terminals .................................................................................... X-Librarys ....................................................................................... Konfigurationsdateien ..................................................................... X-Fontserver ................................................................................... X-Display exportieren ..................................................................... xwininfo ......................................................................................... xdpyinfo ......................................................................................... 106.2 Einen Displaymanager einrichten ........................................................ Allgemeines .................................................................................... Starten und Beenden eines Displaymanagers ................................... Konfigurationsdateien der Displaymanager ..................................... 106.3 Hilfen für Behinderte .......................................................................... Allgemeines .................................................................................... Sehbehinderte und Blinde ............................................................... Barrierefreiheit ................................................................................ Orca ............................................................................................... GOK ............................................................................................... emacspeak ......................................................................................
10
325 325 326 328 329 329 330 334 335 336 337 339 340 340 340 341 342 342 343 348 353 354
1451.book Seite 11 Dienstag, 7. Juli 2009 2:18 14
Inhalt
Topic 107: Administrative Aufgaben ................................................... 355 107.1 Benutzer- und Gruppenkonten und dazugehörige Systemdateien verwalten ................................................................... Allgemeines .................................................................................... passwd, shadow, group, gshadow ................................................... Befehle zur Verwaltung von Benutzern ............................................ Befehle zur Verwaltung von Gruppen .............................................. Befehle zur Verwaltung des Shadow-Systems .................................. 107.2 Systemadministrationsaufgaben durch Einplanen von Jobs automatisieren ................................................................................... Allgemeines .................................................................................... Die Verwendung von cron .............................................................. Die Verwendung von at .................................................................. Grundlegendes zu anacron .............................................................. Zugriffssteuerung auf cron und at .................................................... 107.3 Lokalisierung und Internationalisierung .............................................. Allgemeines .................................................................................... Zeitzoneneinstellung ....................................................................... Umgebungsvariablen für die Lokalisation ........................................ Historische Zeichensätze ................................................................. ASCII – American Standard Code for Information Interchange ......... ISO 8859 ........................................................................................ Unicode und UTF-8 ........................................................................ Konvertierung von Zeichensätzen ...................................................
355 356 357 362 366 368 369 370 370 373 374 374 375 376 376 379 381 382 385 386 387
Topic 108: Grundlegende Systemdienste ........................................... 389 108.1 Die Systemzeit verwalten .................................................................... Allgemeines .................................................................................... Manuelle Konfiguration der Systemzeit ........................................... Die RTC-Uhr einstellen ................................................................... Zeitzonen ........................................................................................ Zeitsynchronisation über das Netzwerk ........................................... Automatische Zeitsynchronisation ................................................... NTP Diagnose ................................................................................. pool.ntp.org ................................................................................... 108.2 Systemprotokollierung ........................................................................ Allgemeines .................................................................................... syslogd und syslog-ng ..................................................................... Die Konfigurationsdateien .............................................................. Einsatz von Log-Dateien zur Fehlersuche ........................................
389 390 390 391 391 392 392 393 394 394 395 395 395 397
11
1451.book Seite 12 Dienstag, 7. Juli 2009 2:18 14
Inhalt
Selbst Ereignisse loggen .................................................................. Der Kernellog ................................................................................. 108.3 Grundlagen von Mail Transfer Agents (MTAs) ..................................... Allgemeines .................................................................................... MUA, MDA und MTA ..................................................................... Mail – Aliase ................................................................................... Weiterleitung von Mail ................................................................... Wichtige Dateien und Verzeichnisse ............................................... sendmail-Konfigurationsdateien ...................................................... postfix-Konfigurationsdateien ......................................................... Smarthost und SMTP-Relay ............................................................. exim und qmail ............................................................................... 108.4 Drucker und Druckvorgänge verwalten ............................................... Allgemeines .................................................................................... Verwalten der Druckerwarteschlangen ............................................ Befehle zur Kontrolle von Druckvorgängen ..................................... lpc – Line Printer Control ................................................................ Drucken mit CUPS ..........................................................................
399 399 399 400 400 401 402 402 403 403 404 405 405 406 406 407 408 409
Topic 109: Netz-Grundlagen ................................................................. 411 109.1 Grundlagen von Internet-Protokollen ................................................. Allgemeines .................................................................................... TCP/IP Geschichte kurz gefasst ........................................................ Das DoD Modell ............................................................................. Die Protokolle der dritten Schicht ................................................... Die Protokolle der zweiten Schicht ................................................. Das Internetprotokoll IPv4 .............................................................. IP-Klassen ....................................................................................... Die Verwendung der Subnetzmaske und CIDR ................................ Die Broadcast-Adressen .................................................................. Standardgateway ............................................................................ Das Internetprotokoll IPv6 .............................................................. TCP/IP Werkzeuge .......................................................................... 109.2 Grundlegende Netz-Konfiguration ...................................................... Allgemeines .................................................................................... Konfigurationsdateien eines Netzwerk-Clients ................................ Konfigurationsprogramme für Netzwerk-Clients .............................. 109.3 Grundlegende Netz-Fehlersuche ......................................................... Allgemeines .................................................................................... netstat ............................................................................................
12
411 412 412 413 413 415 416 417 418 420 421 421 423 429 430 430 432 435 436 436
1451.book Seite 13 Dienstag, 7. Juli 2009 2:18 14
Inhalt
109.4 Client-seitiges DNS konfigurieren ....................................................... 437 Allgemeines .................................................................................... 437
Topic 110: Sicherheit .............................................................................. 439 110.1 Administrationsaufgaben für Sicherheit durchführen ........................... Allgemeines .................................................................................... Auffinden von Dateien mit gesetztem SUID/SGID-Bit ..................... Setzen oder Löschen von Passwörtern und Passwort-Verfallszeiten ................................................................... nmap, netstat und socket ................................................................ Ressourcenverwendung kontrollieren .............................................. Offene Dateien ............................................................................... Arbeiten mit erhöhten Rechten ....................................................... 110.2 Einen Rechner absichern ..................................................................... Allgemeines .................................................................................... Superdaemons ................................................................................ TCP-Wrapper konfigurieren ............................................................ Die Datei /etc/nologin .................................................................... 110.3 Daten durch Verschlüsselung schützen ............................................... Allgemeines .................................................................................... SSH verwenden ............................................................................... SSH-Client-Verbindung ................................................................... SSH-Konfigurationsdateien ............................................................. Authentifizierung der Server mit Schlüsseln ..................................... Generieren von Schlüsseln .............................................................. Benutzerauthentifizierung mit Schlüsseln ........................................ Der Authentifizierungsagent ........................................................... GnuPG ............................................................................................ Schlüsselerstellung mit GnuPG ........................................................ GnuPG Dateien ............................................................................... GnuPG verwenden ..........................................................................
439 440 440 440 440 441 442 444 446 446 446 448 449 450 450 451 451 452 454 454 455 457 457 458 461 462
Übungsfragen zu LPI 117-102 .............................................................. 465 Fragen ............................................................................................... 465 Antworten und Erklärungen zu den Übungsfragen .............................. 491 Index ............................................................................................................ 509
13
1451.book Seite 14 Dienstag, 7. Juli 2009 2:18 14
1451.book Seite 15 Dienstag, 7. Juli 2009 2:18 14
Vorwort Herzlich willkommen! Dieses Buch bietet Ihnen eine optimale Möglichkeit, Ihr Wissen über Linux zu verbessern und sich auf die ersten beiden Prüfungen des Linux Professional Institute (LPI) vorzubereiten. Die vorliegende Auflage berücksichtigt bereits die letzten Änderungen des LPI vom 01. April 2009. Das Zertifikat, das Sie nach dem Bestehen dieser Prüfungen erwerben, wird Ihnen erhebliche Vorteile bei der Suche nach einem Arbeitsplatz bringen. Auch für Arbeitgeber ist es wünschenswert, die Fachkompetenz der eigenen Mitarbeiter schriftlich belegen zu können. Eine vollständige und aktuelle Auflistung der möglichen Zertifizierungen mit LPI finden Sie unter: http://www.lpi.org/en/lpi/english/certification
Hinweise zum Buch Für wen ist dieses Buch? Dieses Buch richtet sich an all diejenigen, die zur Förderung ihrer beruflichen Laufbahn Fachwissen erlangen und dieses dann zertifizieren lassen wollen. Das Buch ist ausdrücklich nicht als Nachschlagewerk gedacht, sondern bereitet gezielt auf die Prüfungen LPI 101 und LPI 102 vor. Um die Level-1-Zertifikation des Linux Professional Institute zu erwerben, müssen Sie diese beiden Prüfungen ablegen und bestehen. Voraussetzungen Sie sollten bereits gute Vorkenntnisse aus dem Bereich der EDV mitbringen. Auch Fachwissen im Bereich Unix oder Linux ist absolut von Vorteil, wenn auch nicht Voraussetzung. Wenn in diesem Buch Themen behandelt werden, die aus dem Bereich Linux für Einsteiger zu sein scheinen, dann hat das lediglich den Hintergrund, dass diese Themen für Sie prüfungsfähig aufgearbeitet werden sollen. Damit die vorgestellten Themen auch praktisch angewendet werden können, benötigen Sie einen Computer, auf dem eine beliebige Linux-Distribution installiert ist. Da die Prüfungen des LPI unabhängig von einem bestimmten Hersteller bzw. einer bestimmten Distribution erstellt wurden, sind Sie hier in Ihrer Auswahl nicht eingeschränkt. Es gibt hier lediglich ein paar sehr kleine Ausnahmen. So fin-
15
1451.book Seite 16 Dienstag, 7. Juli 2009 2:18 14
Vorwort
den Sie unter Ubuntu zum Beispiel keine /etc/inittab-Konfigurationsdatei. Lassen Sie sich von solchen Kleinigkeiten aber nicht beirren. Der Aufbau des Buches Das Buch ist in vier Abschnitte unterteilt. Für beide Prüfungen, die zum Erwerb des ersten LPI-Zertifikates notwendig sind, gibt es jeweils eine Sektion, die zum Selbststudium der jeweiligen Prüfungsinhalte geeignet ist. Außerdem gibt es für beide Prüfungen einen Bereich mit realistischen Fragen, wie sie auch in der Prüfung gestellt werden könnten. Zum besseren Verständnis sind die Antworten zu den Fragen genau erläutert. Sie sollten nicht versuchen, die Fragen einfach auswendig zu lernen, weil Sie möglicherweise in der Prüfung mit völlig anderen Fragen konfrontiert werden könnten. Seien Sie sich im Klaren darüber, dass Sie spätestens in Ihrem Berufsleben Ihr wirkliches Wissen unter Beweis stellen müssen! Die Kapitel in diesem Buch sind genau so angeordnet und benannt, wie die sogenannten Objectives des LPI. Jedem Kapitel ist eine Wichtung (im Original als Weight bezeichnet) zugeordnet. Bei den neuen Prüfungsinhalten (April 2009) gibt die Wichtung einen klaren Hinweis auf die Anzahl der Fragen, die zu dem jeweiligen Thema gestellt werden. Die Wichtung entspricht nämlich ab sofort der genauen Fragenanzahl in der Prüfung von 60 möglichen Fragen. Wie man mit diesem Buch arbeitet In den ersten beiden LPI-Prüfungen werden Sie mit sehr vielen Fragen konfrontiert, die sich mit Kommandos und deren (u.U. selten verwendeten) Optionen beschäftigen. Es wurde beim Erstellen dieses Buches sehr sorgfältig darauf geachtet, genau die Parameter und Optionen eines Kommandos niederzuschreiben, die für die Prüfungen auch relevant sind. Das ist aber leider keine Garantie dafür, dass keine anderen Optionen in der Prüfung abgefragt werden. Sie sollten sich also zusätzlich zu den dokumentierten Beispielen auch mit den Manpages der entsprechenden Kommandos beschäftigen. Gerade in den ersten beiden Prüfungen kommen Sie allein mit Berufserfahrung nicht weiter. Es ist hier auch notwendig, Parameter zu kennen, die man in der Praxis eher selten benötigt und bei Bedarf in den Manpages nachlesen würde. Die Prüfungssimulation Die dem Buch beiliegende Prüfungssimulation basiert auf XML und kann z.B. mit dem Webbrowser Firefox ausgeführt werden. Öffnen Sie zu diesem Zweck einfach die Datei pruefungssimulator_starten.html. Sie sollten dieses Programm aber erst dann verwenden, wenn Sie sich gründlich mit den Themen des Buches beschäftigt haben. Sie können mit dem Programm Ihren Kenntnisstand überprüfen,
16
1451.book Seite 17 Dienstag, 7. Juli 2009 2:18 14
Hinweise zur Prüfung
aber die Aussagekraft des erzielten Ergebnisses sinkt natürlich umgekehrt proportional mit der Anzahl der Durchgänge durch die Prüfungssimulation.
Hinweise zur Prüfung Onlineprüfung Es gibt zwei verschiedene Organisationen, bei denen Sie die Prüfungen in sogenannten Prüfungszentren online ablegen können. In Bezug auf die gestellten Fragen macht es keinen Unterschied, für welche der beiden Sie sich entscheiden. Pearson Vue: http://www.vue.com Thomson Prometric: http://www.prometric.com Besuchen Sie einfach eine dieser beiden Webseiten, und registrieren Sie sich. Die genauen Vorgehensweisen sind auf den jeweiligen Webseiten erklärt. Wenn ein Konto für Sie eingerichtet wurde, werden Sie per E-Mail informiert. Es ist dann sofort möglich, Prüfungen verschiedenster Hersteller bzw. Organisationen online zu buchen. Sie können den Zeitpunkt selbst bestimmen und ein Prüfungszentrum in Ihrer Nähe aus der Datenbank auswählen. Die Bezahlung erfolgt bequem per Kreditkarte, und Sie werden sofort per E-Mail benachrichtigt, sobald der Termin für Sie reserviert wurde. Im Augenblick benötigt Pearson Vue 24 Stunden Vorlauf für die Buchung einer Prüfung. Thomson Prometric benötigt sogar 48 Stunden. Sie können also eine Prüfung frühestens für den nächsten Tag buchen. Die LPIPrüfungen kosten derzeit 135 €. Papierprüfung Es gibt hin und wieder auch die Möglichkeit, LPI-Prüfungen auf Papier abzulegen. Das geschieht meist auf Messen oder Kongressen. Diese Prüfungen können normalerweise zu einem erheblich günstigeren Preis abgelegt werden als die im vorangegangenen Abschnitt thematisierten Onlineprüfungen. Da Papierprüfungen nicht immer sofort ausgewertet werden können, kann es allerdings eine Weile dauern, bis Sie über das Ergebnis Ihrer Prüfung informiert werden. In Deutschland werden Papierprüfungen normalerweise auf der CeBIT in Hannover oder auf den Linux-Tagen angeboten. Weitere Veranstaltungen, auf denen Sie Papierprüfungen ablegen können, finden Sie auf dieser Webseite: http://lpievent.lpice.eu Hier wird Ihnen auch gleich die Möglichkeit gegeben, sich zu einer Prüfung anzumelden.
17
1451.book Seite 18 Dienstag, 7. Juli 2009 2:18 14
Vorwort
Punktevergabe Die Punktevergabe bei den Prüfungen sieht im Moment folgendermaßen aus: Zum Bestehen einer beliebigen LPI-Prüfung sind 500 Punkte erforderlich. In der Prüfung 101 werden Ihnen 60 Fragen präsentiert. Sie können maximal 900 Punkte erreichen. Die Prüfung 102 konfrontiert Sie ebenfalls mit 60 Fragen. Sie können in dieser Prüfung allerdings nur maximal 800 Punkte erreichen. Bei Prüfungen, die auf Papier abgelegt werden, kann die Punktevergabe abweichend sein. In den Prüfungen sind jeweils Betafragen enthalten, die Ihre Punktezahl nicht beeinträchtigen. Da diese Fragen nicht gesondert markiert sind, müssen Sie sie ebenfalls beantworten. Wegen der eingestreuten Betafragen ist eine genaue Berechnung der benötigten Punkte in Prozent auch nicht möglich. Sprachen In Deutschland steht die LPI-Prüfung in den Sprachen Deutsch, Englisch, Chinesisch, Japanisch und brasilianisches Portugiesisch zur Verfügung. Viele Prüflinge legen die Prüfung in englischer Sprache ab, um eventuellen Übersetzungsfehlern aus dem Weg zu gehen. Das ist bei einigen Prüfungen, die ich aus eigener Erfahrung kenne, auch absolut angebracht. Die Fragen in den LPI-Prüfungen sind allerdings im Verhältnis zu den gängigen Herstellerprüfungen kurz gefasst und bieten deshalb wenig Stoff für Übersetzungsfehler. Wenn Ihr Englisch nicht erstklassig ist, sollten Sie die Prüfung lieber in Ihrer Muttersprache ablegen. Ich wünsche Ihnen viel Spaß und Erfolg beim Bestehen der Prüfungen! Harald Maaßen
18
1451.book Seite 19 Dienstag, 7. Juli 2009 2:18 14
LPI 101
1451.book Seite 20 Dienstag, 7. Juli 2009 2:18 14
1451.book Seite 21 Dienstag, 7. Juli 2009 2:18 14
Power On! Die Hardware wird initialisiert und die Daemonen geweckt. Grundlegende Fertigkeiten in der Konfiguration von Massenspeichern, Peripheriegeräten und BIOS-Einstellungen sind für die erste Prüfung unbedingt erforderlich.
Topic 101: Systemarchitektur 101.1 Hardware-Einstellungen ermitteln und konfigurieren Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, die wesentliche Hardware eines Systems zu bestimmen und zu konfigurieren. Wichtigste Wissensgebiete: 왘
integrierte Peripheriegeräte aktivieren und deaktivieren
왘
Systeme mit oder ohne externe Peripheriegeräte wie Tastaturen konfigurieren
왘
die verschiedenen Arten von Massenspeicher unterscheiden
왘
die korrekte Hardwarekennung für verschiedene Geräte einstellen, vor allem das Gerät, von dem das System gestartet wird
왘
die Unterschiede zwischen Coldplug- und Hotplug-Geräten kennen
왘
Hardwareressourcen für Geräte ermitteln
왘
Werkzeuge und Hilfsprogramme, um verschiedene Hardware-Informationen aufzulisten (z.B. lsusb, lspci usw.)
왘
Werkzeuge und Hilfsprogramme, um USB-Geräte zu manipulieren
왘
konzeptuelles Verständnis von sysfs, udev, hald, dbus
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/sys
왘
/proc
왘
/dev
왘
modprobe
21
1451.book Seite 22 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
왘
Hotplug-Konfigurationsdateien, -begriffe und -Hilfsprogramme
왘
lsmod
왘
lspci
왘
lsusb
Allgemeines Zur Konfiguration von Hardwaregeräten und auch der Peripherie ist eine Kommunikation mit dem Kernel des Systems erforderlich. Der Kernel eines Betriebssystems hat die Aufgabe, als Schnittstelle zwischen der Hardware und der Software zu fungieren. Natürlich handelt es sich bei dem Kernel selbst um ein Softwareprodukt, das allerdings den Kernbestandteil des Betriebssystems darstellt. Bei Linux handelt es sich um einen zum großen Teil modular aufgebauten Kernel. Die einzelnen Module dieses Kernels können zur Laufzeit des Systems geladen und auch wieder entladen werden. Man kann die Module eines Kernels mit Treibern anderer Betriebssysteme vergleichen. Der modulare Aufbau hilft dabei, unnötige Neustarts des ganzen Systems zu vermeiden. Im Gegensatz hierzu stehen monolithische Kernel. Diese können schwere Störungen verursachen, wenn eine Hardwarekomponente versagt oder aus dem System entfernt wird. Ausschließlich monolithisch aufgebaute Kernel sind verhältnismäßig unflexibel, weil beim Systemstart der gesamte Kernel geladen werden muss, unabhängig von der verwendeten Hardware. Sollte der laufende Kernel dann irgendwelche Geräte nicht unterstützen, muss er gegen einen neuen ersetzt werden. Mit der Konfiguration angepasster Kernel müssen Sie sich erst dann beschäftigen, wenn Sie den LPIC Level 2 in Angriff nehmen. Hier soll es aber zunächst um die Beeinflussung eines bestehenden Kernels gehen.
Module zur Laufzeit beeinflussen und konfigurieren Mit den folgenden Befehlen und Methoden können die Module des laufenden Kernels beeinflusst und überprüft werden. So ist es möglich, im laufenden Betrieb Gerätetreiber zu laden oder zu entladen. Das kann z.B. erforderlich werden, wenn eine Hardwarekomponente wegen fehlerhaften Verhaltens neu initialisiert werden muss. Im Folgenden werden die dafür benötigten Kommandos dargestellt: Identifizieren von Kernel-Versionen Die Version des aktuell laufenden Kernels finden Sie heraus, indem Sie folgendes Kommando ausführen:
22
1451.book Seite 23 Dienstag, 7. Juli 2009 2:18 14
101.1 Hardware-Einstellungen ermitteln und konfigurieren
harald@archangel:/> uname -r 2.6.11.4-21.9-smp
Diese Versionsnummer findet sich aber auch noch an anderen Stellen wieder. Unter /lib/modules/
hatten Sie im vorangegangenen Kapitel bereits mit der Versionsnummer Kontakt. Ein anderes Verzeichnis wäre /usr/src/ , in dem sich schlussendlich der Quellcode eines Kernels befindet. Außerdem ist sie auf der Webseite von kernel.org (http://www.kernel.org) zu finden. Aber was verbirgt sich hinter dieser Buchstaben- und Zahlenkombination? Es existiert natürlich auch hier ein Schema, das bestimmten Konventionen gehorcht: 왘
Die erste Zahl, in diesem Fall also die 2, steht für das sogenannte Major Release. Das Major Release wird nur dann erhöht, wenn es sozusagen revolutionäre Erneuerungen im Kernel zu verzeichnen gibt. Deshalb will ein »Linuxer« einen solchen Kernel sofort haben!
왘
Die zweite Zahl (im vorangegangenen Beispiel die 6) stellt die Version Minor Release dar. Das Minor Release ändert sich jedes Mal, wenn einem Kernel neue wesentliche Funktionen hinzugefügt werden. Dass die Ziffer an zweiter Stelle steht, sollte aber nicht zu einer Unterschätzung der Versionsänderungen führen. So bestehen bereits zwischen den Versionen 2.4 und 2.6 bahnbrechende Unterschiede. Es gibt zudem noch eine Unterscheidung zwischen Minor-Release-Versionen mit geraden und ungeraden Werten: Gerade Versionen (2.4, 2.6 usw.) werden als »stable« bezeichnet und gelten somit als sicher (stable = haltbar, dauerhaft). Ungerade Versionen (2.3, 2.5 usw.) bezeichnet man als Entwickler-Kernel. Der Verwendungszweck ist hier deutlich dem Namen zu entnehmen. Es wird aber natürlich gern gesehen, dass solche Kernel auf nicht produktiven Computern zu Testzwecken eingesetzt werden.
왘
Die dritte Zahl (im vorangegangenen Beispiel die 11) steht für den Patch-Level des Kernels. Bei Erhöhung des Patch-Levels ist allerdings nur mit kleineren Änderungen und Fehlerbeseitigungen des Vorgänger-Kernels zu rechnen.
왘
Alles, was danach folgt (im Beispiel ist es 4-21.9-smp), ist lediglich eine Bezeichnung, die man vor dem Kompilieren im sogenannten Makefile des Kernels angeben kann. Hier sind der eigenen Fantasie für Benennungskonventionen keine Grenzen gesetzt.
23
1451.book Seite 24 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
lsmod Mit dem Befehl lsmod können Sie den Status der Module eines laufenden Kernels anzeigen. Hierbei greift lsmod auf das Verzeichnis /proc/modules zu und gibt das Ergebnis in einer übersichtlicheren Form aus. Hier der Vergleich: harald@archangel:~> cat /proc/modules vfat 17792 0 – Live 0xe0c37000 fat 43804 1 vfat, Live 0xe0c6e000 usbserial 34024 0 – Live 0xe11e8000 8139too 30464 0 – Live 0xe10fe000 mii 9088 1 8139too, Live 0xe0fad000 parport_pc 44356 1 – Live 0xe0e81000 reiserfs 263024 1 – Live 0xe0e8e000 ext3 145032 1 – Live 0xe0dc2000
Nun die Ausgabe mit dem lsmod-Befehl: harald@archangel:~> lsmod Module Size vfat 17792 fat 43804 usbserial 34024 8139too 30464 mii 9088 parport 40392 reiserfs 263024 ext3 145032
Used by 0 1 vfat 0 0 1 8139too 3 ppdev,parport_pc,lp 1 1
Die Originalausgabe wurde aus Platzgründen um ca. 80% gekürzt. modinfo Mit modinfo können Sie ein Modul des Kernels genauer unter die Lupe nehmen: archangel: filename: author: description: license: vermagic: supported: depends:
24
/ # modinfo /lib/modules/2.6.11.4-21.9-smp/kernel/ drivers/usb/storage/usb-storage.ko /lib/modules/2.6.11.4-21.9-smp/kernel/drivers/usb/ storage/usb-storage.ko Matthew Dharm <[email protected]> USB Mass Storage driver for Linux GPL 2.6.11.4-21.9-smp SMP 586 REGPARM gcc-3.3 yes ide-core,usbcore,scsi_mod
1451.book Seite 25 Dienstag, 7. Juli 2009 2:18 14
101.1 Hardware-Einstellungen ermitteln und konfigurieren
alias: alias:
usb:v03EEp6901dl0000dh0100dc*dsc*dp*ic*isc*ip* usb:v03F0p0107dl0200dh0200dc*dsc*dp*ic*isc*ip*
In diesem Beispiel finden sich Details über das Modul, das für Massenspeichergeräte zuständig ist, die an eine USB-Schnittstelle angeschlossen sind. Der Autor mitsamt seiner Mail-Adresse wird angezeigt. Zudem erhält man Informationen über den Verwendungszweck des Moduls, die Versionsnummer, und vor allem die Abhängigkeiten von anderen Modulen werden aufgezeigt. Das sind sehr wesentliche Informationen, die auch noch von anderen Programmen, die Sie gleich kennenlernen werden, ausgewertet und genutzt werden. modinfo versteht einige Optionen, die überwiegend dazu gedacht sind, nicht benötigte Informationen auszublenden. Da wären: 왘
-a zeigt nur den Autor des Moduls an.
왘
-d zeigt die Beschreibung (description).
왘
-l zeigt die Lizenz.
왘
-p zeigt zu übergebende Parameter, falls möglich.
왘
-n zeigt den Dateinamen des Moduls an.
insmod Mit dem Kommando insmod lassen sich Module in den laufenden Kernel integrieren. Das Programm erwartet die Übergabe des Moduls mit kompletter Pfadangabe und eventuellen Optionen, falls das Modul diese benötigt. Es werden automatisch Abhängigkeiten geprüft, aber nicht automatisch aufgelöst. Sollte ein zu ladendes Modul also von weiteren Modulen abhängen, gibt insmod lediglich eine Fehlermeldung aus. Das Laden des Moduls für USB-Massenspeichergeräte könnte dann etwa so aussehen: archangel:~# insmod /lib/modules/2.6.11.4-21.9-smp/kernel/drivers/ usb/storage/usb-storage.ko
Unspektakulärerweise gibt insmod im Erfolgsfall keine Bestätigungsmeldung aus. Das fragliche Modul wird kommentarlos in den Arbeitsspeicher geladen und vom Kernel verwendet. rmmod Mit diesem Kommando können Sie nicht mehr benötigte Module wieder aus dem Arbeitsspeicher entfernen. Hierbei ist allerdings keine Pfadangabe erforderlich, weil rmmod mit dem /proc/modules-Verzeichnis arbeitet, und dieses muss (und kann) nicht explizit angegeben werden. Beispiel:
25
1451.book Seite 26 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
archangel:~# rmmod usb-storage.ko
Dieses Kommando entfernt also bei Bedarf den nicht mehr benötigten USBMassenspeichertreiber. Es werden, wie auch beim insmod-Kommando, keine Erfolgsmeldungen ausgegeben. Es gibt allerdings auch hier Fehlermeldungen, wenn man versucht, ein Modul zu entladen, das noch von einem anderen Modul oder von einem Programm benutzt wird: archangel:~ # rmmod ide_core.ko ERROR: Module ide_core is in use by ide_cd,ide_disk,piix
Ähnliches geschieht, wenn man versucht, einen Dateisystemtreiber zu entfernen, während er von einem Laufwerk gerade benötigt wird. Optionen für rmmod: 왘
-v startet den Verbose-Mode
왘
-f erzwingt das Entladen eines Moduls, auch wenn eventuelle Abhängigkei-
ten nicht erfüllt sind (Vorsicht!). modprobe Dieses Kommando ist eine optimierte Kombination von insmod und rmmod in einem einzigen Programm. Der Verwendungszweck ist grundsätzlich denen älterer Werkzeuge ähnlich, jedoch bietet modprobe einige zusätzliche Annehmlichkeiten. So kann modprobe z.B. nicht nur Abhängigkeiten zwischen Modulen erkennen, sondern hieraus resultierende Probleme auch beheben. Es löst also solche Abhängigkeiten auf, indem es fehlende Module selbstständig findet und auch lädt. Pfadangaben wie bei insmod sind hier nicht nötig, weil modprobe den Befehl uname –r benutzt, um selbst das Basisverzeichnis der Module für den momentan genutzten Kernel zu finden. Eine weitere Besonderheit ist, dass man mit modprobe einfach alle Module eines Typs auf einmal laden lassen kann. Dieser Vorgang kommt somit einer Hardwareerkennung sehr nahe. Für Netzwerkkarten könnte dies in etwa so aussehen: archangel:~ # modprobe -at net
Die Option –a steht hier für all und das -t für type des Moduls, das geladen werden soll. Auch hier gilt wieder der Grundsatz, dass bei Erfolg keine Meldungen ausgegeben werden, sondern nur im Fehlerfall. Weitere Möglichkeiten, die modprobe bietet, sind das Entfernen und Auflisten von Modulen. Beim Entfernen von Modulen können Sie auch mehrere Module durch Leerzeichen voneinander getrennt übergeben. Beispiel: archangel:~ # modprobe –r ext3 reiserfs – (Vorsicht!)
26
1451.book Seite 27 Dienstag, 7. Juli 2009 2:18 14
101.1 Hardware-Einstellungen ermitteln und konfigurieren
Das Auflisten von Modulen unterscheidet sich von der Auflistung durch lsmod. Während lsmod Module zeigt, die bereits geladen wurden, listet modprobe Module auf, die in den laufenden Kernel integriert werden können. Beispiele: archangel:~ # modprobe –l – zeigt alle ladbaren Module an: /lib/modules/2.6.11.4-21.9-smp/kernel/drivers/char/agp/amd-k7-agp.ko /lib/modules/2.6.11.4-21.9-smp/kernel/drivers/cdrom/sjcd.ko /lib/modules/2.6.11.4-21.9-smp/kernel/drivers/cdrom/optcd.ko /lib/modules/2.6.11.4-21.9-smp/kernel/drivers/cdrom/isp16.ko /lib/modules/2.6.11.4-21.9-smp/kernel/drivers/cdrom/gscd.ko /lib/modules/2.6.11.4-21.9-smp/kernel/drivers/cdrom/cdrom.ko /lib/modules/2.6.11.4-21.9-smp/kernel/drivers/cdrom/aztcd.ko /lib/modules/2.6.11.4-21.9-smp/kernel/drivers/cdrom/sonycd535.ko archangel:~ # modprobe -lt fs – zeigt alle Dateisystemmodule an: /lib/modules/2.6.11.4-21.9-smp/kernel/fs/xfs/xfs.ko /lib/modules/2.6.11.4-21.9-smp/kernel/fs/vfat/vfat.ko /lib/modules/2.6.11.4-21.9-smp/kernel/fs/ufs/ufs.ko /lib/modules/2.6.11.4-21.9-smp/kernel/fs/udf/udf.ko /lib/modules/2.6.11.4-21.9-smp/kernel/fs/subfs/subfs.ko /lib/modules/2.6.11.4-21.9-smp/kernel/fs/smbfs/smbfs.ko /lib/modules/2.6.11.4-21.9-smp/kernel/fs/romfs/romfs.ko /lib/modules/2.6.11.4-21.9-smp/kernel/fs/reiserfs/reiserfs.ko /lib/modules/2.6.11.4-21.9-smp/kernel/fs/quota_v2.ko /lib/modules/2.6.11.4-21.9-smp/kernel/fs/quota_v1.ko /lib/modules/2.6.11.4-21.9-smp/kernel/fs/sysv/sysv.ko
depmod Die Abhängigkeiten zwischen den Modulen werden in einer Datei mit der Bezeichnung modules.dep zentral festgehalten. Beispiel: /lib/modules/2.6.11.4-21.9-smp/modules.dep /lib/modules/2.6.11.4-21.9-smp/kernel/sound/pci/ac97/snd-ac97-codec.ko: /lib/modules/2.6.11.4-21.9-smp/kernel/sound/core/snd-pcm.ko /lib/modules/2.6.11.4-21.9-smp/kernel/sound/core/snd-timer.ko /lib/modules/2.6.11.4-21.9-smp/kernel/sound/core/snd.ko /lib/modules/2.6.11.4-21.9-smp/kernel/sound/soundcore.ko /lib/modules/2.6.11.4-21.9-smp/kernel/sound/core/snd-page-alloc.ko /lib/modules/2.6.11.4-21.9-smp/kernel/sound/oss/ymfpci.ko: /lib/modules/2.6.11.4-21.9-smp/kernel/sound/oss/ac97_codec.ko /lib/modules/2.6.11.4-21.9-smp/kernel/sound/oss/uart401.ko /lib/modules/2.6.11.4-21.9-smp/kernel/sound/oss/sound.ko /lib/modules/2.6.11.4-21.9-smp/kernel/sound/soundcore.ko
27
1451.book Seite 28 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
Erfreulicherweise ist es normalerweise nicht erforderlich, diese doch recht unübersichtliche Datei von Hand zu bearbeiten. Die hier vorliegende Datei ist übrigens erheblich gekürzt worden. Ohne Optionen erstellt depmod eine neue modules.dep-Datei, indem es vorher die Informationen über Abhängigkeiten bei allen vorhandenen Modulen erfragt und sammelt. Das kann u.U. ein paar Sekunden dauern. Nützliche Optionen für depmod sind: 왘
-n Trockenlauf mit Ausgabe nach stdout
왘
-A Schnelldurchgang: Es wird vor der Erstellung einer neuen modules.dep
geprüft, ob es überhaupt Module gibt, die neuer sind als die bestehende modules.dep.
Modulkonfigurationsdateien modules.dep Über diese Datei wurde bereits in Zusammenhang mit depmod berichtet. Daher wird sich hier auf eine Veranschaulichung des Sachverhalts in Form eines für die Darstellungsweise einer Abhängigkeit in dieser Datei typischen Beispiels beschränkt: /lib/modules/2.6.11.4-21.9-smp/kernel/sound/pci/ac97/snd-ac97codec.ko:/lib/modules/2.6.11.4-21.9-smp/kernel/sound/core/snd-pcm.ko
Dieser exemplarische Auszug ist eine Kopie der ersten Zeilen aus dem vorangegangenen Beispiel. Hier hängt das Modul snd-ac97-codec.ko von dem Modul snd-pcm.ko ab. Der Doppelpunkt stellt dabei den Zusammenhang her. modules.conf, modprobe.conf, modprobe.conf.local Diese drei Konfigurationsdateien steuern das Verhalten von modprobe und sind wie die meisten der ähnlich zu ihr aufgebauten Dateien im /etc-Verzeichnis beheimatet. Die modules.conf wird von neueren modprobe-Versionen allerdings nicht mehr verwendet und ist deshalb in Abhängigkeit von der eingesetzten Distribution auf vielen Systemen nicht mehr zu finden. Die modprobe.conf.local hat die Besonderheit, von Konfigurationsfrontends nicht modifiziert zu werden, weshalb sie sich besonders für die manuelle Konfiguration eignet.
28
1451.book Seite 29 Dienstag, 7. Juli 2009 2:18 14
101.1 Hardware-Einstellungen ermitteln und konfigurieren
In diesen Dateien werden u.a. die Optionen für Module festgelegt. So kann einem Hardwaregerät z.B. ein spezieller IRQ- oder DMA-Kanal zugewiesen werden. Beispiel: options 3c505
io=0x300 irq=10
In diesem Beispiel werden folglich einer Netzwerkkarte eines namhaften Herstellers die I/O-Adresse 0x300 und der Interrupt 10 zugewiesen. Außerdem können für bestehende Geräte Alias-Namen vergeben werden, sodass beim Hinzufügen von Modulen nicht erst überlegt werden muss, welche Geräte im Computer im Einzelnen eingebaut sind. Beispiel: alias eth0 3c505
Mit modprobe eth0 kann das Netzwerkkartenmodul ohne Kenntnis der im System verwendeten Netzwerkkarte geladen werden. Weitere Informationen finden Sie auch für diesen Kontext in den Manpages. Für die Prüfung sollten die hier genannten Fakten allerdings mehr als ausreichend sein.
Zum Kernel gehörende Dateien und Verzeichnisse In einem Verzeichnis unterhalb von /usr/src befinden sich die Quellen für den Linux-Kernel. Es wird hier ein Verzeichnis angelegt, das die genaue Versionsnummer des Kernels enthält, z.B. /usr/src/linux-2.6.11.4-21.9. Zusätzlich wird ein Softlink erstellt, sodass die zu konfigurierenden Kernel-Quelldateien unter dem Pfad /usr/src/linux zu erreichen sind. Der statische Teil des lauffähigen Kernels befindet sich im Verzeichnis /boot. Im Normalfall findet man dort einen Softlink namens vmlinuz, der auf den tatsächlichen Namen des Kernels zeigt. Hier gibt es natürlich bei der Verwendung mehrerer Kernel entsprechende Abweichungen. Auch sind distributionsspezifische Unterschiede denkbar. Die Module des Kernels, um die es zunächst gehen soll, befinden sich in Verzeichnissen unterhalb von /lib/modules. An dieser Stelle wird pro installiertem Kernel ein Unterverzeichnis angelegt, das nach der Kernel-Versionsnummer benannt ist, z.B. /lib/modules/2.6.11.4-21.9-smp. Hier befanden sich in Kernel-Versionen vor 2.4 die Unterverzeichnisse für verschiedene Kategorien von Modulen. Ab der Version 2.4 gibt es zunächst ein Unterverzeichnis namens kernel und erst darauf folgend die Verzeichnisse mit den jeweiligen Kategorien. Hier einige Beispiele:
29
1451.book Seite 30 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
왘
/lib/modules/2.6.11.4-21.9-smp/kernel/fs für Dateisystemmodule
왘
/lib/modules/2.6.11.4-21.9-smp/kernel/net für Netzwerkkartenmodule
왘
/lib/modules/2.6.11.4-21.9-smp/kernel/scsi für SCSI-Adaptermodule
왘
/lib/modules/2.6.11.4-21.9-smp/kernel/video für Grafikadaptermodule
An dieser Stelle findet man auch die Datei /lib/modules/2.6.11.4-21.9-smp/ modules.dep. Diese Datei enthält Informationen über die Abhängigkeiten der Kernel-Module untereinander. Die Moduldateien selbst sind durch den Compiler erstellte ausführbare Dateien mit der Dateierweiterung o, wie Objekt. Bei neuen Kernel-Versionen (2.6) ist diese Erweiterung auf ko, wie Kernel-Objekt, geändert worden.
Die Gerätedateien für Festplatten und CD-ROMs Sowohl physikalische als auch logische Laufwerke werden unter Linux als Gerätedateien unterhalb von /dev dargestellt. Hierbei handelt es sich nicht um ein gewöhnliches Verzeichnis auf der Festplatte, sondern um eine Präsentation der Geräte durch den Kernel. Man sagt, die Geräte werden ins Userland exportiert. Die Präsentation war bei älteren Kernel-Versionen statisch, weshalb auch Geräte dargestellt wurden, die der Computer gar nicht besaß. Für die Prüfung müssen Sie diese Gerätedateien genau kennen. Dateien für Geräte, die am IDE-Bus angeschlossen sind, beginnen normalerweise mit /dev/hd. Der nächste Buchstabe sagt etwas über die Position des Gerätes am Controller aus, aber nichts über das tatsächlich verwendete Gerät. Sie können eine Festplatte, ein CD-ROM- oder DVDLaufwerk nicht an der Gerätedatei unterscheiden. Die meisten (E)IDE-Controller verfügen über zwei Kanäle: Primary IDE und Secondary IDE. An jeden der beiden Kanäle können jeweils zwei Geräte (ein Master und ein Slave) angeschlossen werden. Moderne IDE-RAID-Controller verwalten mehr Geräte, diese sollen hier aber aufgrund der Irrelevanz für die Prüfung nicht weiter thematisiert werden. Die IDE-Gerätedateien sind: 왘
/dev/hda – Primary Master
왘
/dev/hdb – Primary Slave
왘
/dev/hdc – Secondary Master
왘
/dev/hdd – Secondary Slave
Wenn ein CD-ROM-Laufwerk z.B. als Secondary Master angeschlossen wird, dann wird oft ein Softlink von /dev/cdrom nach /dev/hdc erstellt. Das Gerät bleibt aber unter /dev/hdc weiterhin ansprechbar.
30
1451.book Seite 31 Dienstag, 7. Juli 2009 2:18 14
101.1 Hardware-Einstellungen ermitteln und konfigurieren
Die Gerätedateien für SCSI-Laufwerke beginnen mit /dev/sd. Ansonsten ist die Bezeichnung ähnlich: 왘
/dev/sda – erstes SCSI-Gerät
왘
/dev/sdb – zweites SCSI-Gerät
왘
…
und so weiter.
Die Gerätedateien für Partitionen Aufgrund des Aufbaus eines Master Boot Records und der darin enthaltenen Partitionstabelle können auf einer Festplatte nur vier Partitionen erstellt werden. Es wird unterschieden zwischen primären Partitionen und erweiterten Partitionen. Eine primäre Partition ist direkt ansprechbar. Sie können eine solche Partition formatieren und benutzen. Es können bis zu vier primäre Partitionen auf einer Festplatte koexistieren. Eine erweiterte Partition kann nicht direkt verwendet werden. Sie dient lediglich als eine Art »Behälter« für logische Partitionen. Sie können nur eine einzige erweiterte Partition auf einer Festplatte anlegen. Diese kann dann bis zu zwölf logische Partitionen aufnehmen. Primäre und erweiterte Partitionen werden von 1 bis 4 durchnummeriert. Die erste logische Partition bekommt die Ordnungszahl 5 zugewiesen, auch wenn es nur eine primäre und eine erweiterte Partition geben sollte. Eine Partitionierung kann also z.B. so aussehen: 왘
/dev/hda1 – erste primäre Partition auf dem Primary Master
왘
/dev/hda2 – zweite primäre Partition
왘
/dev/hda3 – einzige erweiterte Partition
왘
/dev/hda5 – erste logische Partition
왘
/dev/hda6 – zweite logische Partition
왘
/dev/hda7 – dritte logische Partition
Es sind nach der Partitionierung fünf Laufwerke tatsächlich nutzbar. Die erweiterte Partition /dev/hda5 ist nicht verwendbar. Viele Administratoren lassen sich davon verwirren, dass es üblicherweise maximal vier IDE-Geräte gibt (/dev/hda bis /dev/hdd) und auch maximal vier »echte« Partitionen. Es soll deshalb erneut darauf hingewiesen werden, dass diese beiden Fakten nichts miteinander zu tun haben. Aus diesem Grund erfolgt die Numme-
31
1451.book Seite 32 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
rierung der Partitionen (auch und insbesondere der logischen Partitionen) bei SCSI-Festplatten genauso wie bei IDE-Festplatten. Das Beispiel zeigt die Partitionierung der fünften SCSI-Festplatte, durch die fünf Laufwerke zur Verfügung stehen: 왘
/dev/sde1 – erste primäre Partition
왘
/dev/sde2 – zweite primäre Partition
왘
/dev/sde3 – dritte primäre Partition
왘
/dev/sde4 – einzige erweiterte Partition
왘
/dev/sde5 – erste logische Partition
왘
/dev/sde6 – zweite logische Partition
Wie Sie sehen, erfolgt die Partitionierung von SCSI-Laufwerken nach demselben Schema wie bei IDE-Geräten.
Ressourcen für Hardwarekomponenten Sie haben bereits erfahren, dass für die Verwendung von Hardware die Konfiguration von Ressourcen erforderlich ist. Um die aktuelle Konfiguration von Hardwareressourcen zu prüfen, können Sie die jeweils entsprechenden von /proc konsultieren. Das Verzeichnis /proc ist kein Verzeichnis im eigentlichen Sinn, sondern bildet Parameter des Kernels ab und kann dementsprechend auch zur Abfrage des Kernels verwendet werden. In diesem Zusammenhang sind folgende Verzeichnisse für die Prüfung wichtig: 왘
/proc/interrupts enthält Informationen über die vom System verwendeten Interrupts.
왘
/proc/ioports enthält Informationen über die von Hardwarekomponenten verwendeten I/O-Adressen.
왘
/proc/dma ist eine Liste der von Geräten verwendeten DMA-Kanäle.
왘
/proc/pci ist ein eigentlich veraltetes Verzeichnis, das bei älteren Kernel-Versionen Informationen über den PCI-Bus enthielt. Heutige Kernel-Versionen verwenden eine eigene Verzeichnishierarchie unterhalb von /proc/bus/pci.
Auch SCSI-Geräte werden in /proc abgebildet. Die Gerätedateien für SCSI-Geräte haben eine andere Bezeichnung als IDE-Geräte. Die erste SCSI-Festplatte, die am Bus gefunden wird, bekommt die Bezeichnung /dev/sda. Die Gerätedatei ist nicht mit der SCSI-ID oder der LUN verknüpft, sondern bezeichnet die Geräte in der Reihenfolge, wie sie am Bus gefunden werden. Wenn etwa die zweite SCSIFestplatte eines Systems die SCSI-ID 4 hat, wird sie dennoch mit der Gerätedatei
32
1451.book Seite 33 Dienstag, 7. Juli 2009 2:18 14
101.1 Hardware-Einstellungen ermitteln und konfigurieren
/dev/sdb angesprochen. Das erste SCSI-Bandlaufwerk wird mit /dev/st0 angesprochen (ein Floppy-Streamer im Vergleich dazu wäre /dev/ft0). Informationen über angeschlossene SCSI-Geräte befinden sich im Verzeichnis /proc/scsi eines Computers. Tipp Wenn Sie mit SCSI-Geräten für die Prüfung üben möchten, aber keine besitzen, können Sie USB-Geräte als Ersatz verwenden. Diese werden unter Linux als SCSI-Geräte gehandhabt.
Ein Beispiel für Informationen über SCSI-Geräte im /proc-Verzeichnis finden Sie hier: archangel:~ # cat /proc/scsi/scsi Attached devices: Host: scsi3 Channel: 00 Id: 00 Lun: 00 Vendor: WD Model: 1600BEA External Rev: 1.04 Type: Direct-Access ANSI SCSI revision: 04
Da USB-Laufwerke unter Linux ähnlich behandelt werden wie SCSI-Geräte, werden diese auch in einer ähnlichen Umgebung im /proc-System abgebildet: archangel:~ # cat /proc/scsi/usb-storage/3 Host scsi3: usb-storage Vendor: Western Digital Product: External HDD Serial Number: 575845393037313238333331 Protocol: Transparent SCSI Transport: Bulk Quirks:
Der PCI-Bus Der PCI-Bus (Peripheral Component Interconnect) ist ein 32-Bit-Bus-System, das Anfang der 90er-Jahre des letzten Jahrhunderts in Zusammenarbeit vieler hardwareproduzierender Firmen entwickelt wurde. Inzwischen gibt es auch eine 64-BitVersion dieses Bus-Typs. Er kann verwendet werden, um Erweiterungskarten auf die Hauptplatine eines Computers zu stecken. Einige, sogenannte Onboard-Komponenten (Soundkarten, Grafikkarten usw.), verwenden den PCI-Bus aber auch direkt. Die auf einer Hauptplatine befindlichen IDE-Controller sind auch PCI-Geräte. Um sich einen Überblick über den PCI-Bus eines Systems zu verschaffen, können Sie das Kommando lspci verwenden. Dieses Kommando kennt drei Stufen von verbose. Wenn Sie lspci -vvv eingeben, bekommen Sie also äußerst de-
33
1451.book Seite 34 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
taillierte Informationen zu Ihrem PCI-Bus. Eventuell brauchen Sie aber auch sehr genaue Informationen über ein bestimmtes Gerät, wie in diesem Beispiel über die Grafikkarte: archangel:/ # lspci -v ... 0000:01:00.0 VGA compatible controller: nVidia Corporation NV18 [GeForce4 MX 440 AGP 8x] (rev a2) (prog-if 00 [VGA]) Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 11 Memory at fc000000 (32-bit, non-prefetchable) [size=16M] Memory at f4000000 (32-bit, prefetchable) [size=64M] Expansion ROM at fd000000 [disabled] [size=128K] Capabilities: [60] Power Management version 2 Capabilities: [44] AGP version 3.0
Das Programm lspci arbeitet mit dem Verzeichnis /proc/bus/pci zusammen. Es wertet alle Dateien in diesem Verzeichnis aus und stellt die Informationen in übersichtlicher Weise dar. Wenn Sie die Option -t (tree) verwenden, stellt lspci die PCI-Geräte in einer Baumstruktur dar. Die menschenlesbaren Informationen bezieht lspci aus einer Datenbank.
USB – Universal Serial Bus Der USB (Universal Serial Bus) ist ein von Intel entwickeltes Bus-System zum Anschluss von Peripheriegeräten an einen PC. Die erste Version erschien bereits im Jahre 1996. Für die Prüfung sollten Sie mit den unterschiedlichen Typen von USB-Controllern und den verschiedenen Treiberkategorien für USB-Geräte vertraut sein.
USB-Host-Controller-Typen Im Allgemeinen unterscheidet man heute nur zwischen zwei USB-Typen. Der ältere Vertreter ist USB 1.1, der Übertragungsraten von lediglich maximal 12 MB/s unterstützt. Von diesem gibt es allerdings zwei Varianten, nämlich: 왘
OHCI (Open Host Controller Interface)
왘
UHCI (Universal Host Controller Interface)
Wenn Sie lediglich Windows einsetzen, brauchen Sie sich um den Unterschied nicht zu kümmern, aber bei Linux-Systemen müssen Sie den für den jeweiligen Typ passenden Treiber laden. Das wären die sogenannten Host-ControllerTreiber usb-ohci.o oder usb-uhci.o.
34
1451.book Seite 35 Dienstag, 7. Juli 2009 2:18 14
101.1 Hardware-Einstellungen ermitteln und konfigurieren
Neuere USB-Geräte vom Typ USB 2.0 unterstützen Übertragungsraten von immerhin 480 MB/s. Voraussetzung ist allerdings, dass alle involvierten Geräte auch diesen Standard unterstützen. Aufgrund der Abwärtskompatibilität ist es z.B. möglich, eine USB 2.0-Festplatte über einen USB 1.1-Hub an einem USB 2.0-Controller zu betreiben; aber eben nur mit 12 MB/s. Es gibt von USB 2.0 bisher nur einen Standard: 왘
EHCI (Enhanced Host Controller Interface)
Der passende Host-Controller-Treiber wäre entsprechend usb-ehci.o.
USB-Klassen Nachdem der richtige Treiber für den Host-Controller geladen wurde, können die benötigten Klassentreiber eingebunden werden. Damit eine USB-Maus oder -Tastatur angeschlossen werden kann, muss zunächst der Treiber hid.o geladen werden. HID steht für Human Interface Devices und ist zuständig für Eingabegeräte. Beliebtes Prüfungsthema ist auch das Modul usb-storage.o, das für die Ansteuerung von Massenspeichern, wie USB Memory Sticks und USB-Festplatten, benötigt wird. Weitere USB-Klassen, die Treibermodule benötigen, wären Kommunikationsgeräte (Modems u.a.), Audiogeräte (Wavetables usw.), Infrarotgeräte, Bluetooth und Drucker. Ein Blick in die geladenen Module eines Systems fördert noch mehr zutage: archangel:~ # lsmod | grep usb usb_storage 72512 1 hci_usb 19720 0 bluetooth 55300 4 hidp,rfcomm,l2cap,hci_usb usbcore 1688 6 usb_storage,hci_usb,ehci_hcd,uhci_hcd ide_core 131904 4 usb_storage,ide_cd,ide_disk,piix scsi_mod 136264 6 usb_storage,sg,st,sr_mod,libata,sd_mod
Wenn ein USB-Gerät initialisiert wurde, wird unterhalb von /proc ein Verzeichnis angelegt, unter dem das Gerät fortan erreichbar ist. Die Dateien in diesem System liegen in binärer Form vor und sind für den Administrator nicht mit einem Editor einsehbar. Um Informationen über USB-Geräte anzeigen zu können, verwenden Sie stattdessen das Programm lsusb. Auf Wunsch können Sie mit dem Parameter -t auch eine Baumstruktur anzeigen lassen: archangel:/proc/bus/usb # lsusb -t Bus# 5 `-Dev# 1 Vendor 0x0000 Product 0x0000 `-Dev# 29 Vendor 0x1058 Product 0x0702 Bus# 4
35
1451.book Seite 36 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
`-Dev# 1 Vendor 0x0000 Product 0x0000 Bus# 3 `-Dev# 1 Vendor 0x0000 Product 0x0000 Bus# 2 `-Dev# 1 Vendor 0x0000 Product 0x0000 `-Dev# 52 Vendor 0x050f Product 0x0003 |-Dev# 53 Vendor 0x1131 Product 0x1001 `-Dev# 54 Vendor 0x04e8 Product 0x1623 Bus# 1 `-Dev# 1 Vendor 0x0000 Product 0x0000
Um genauere Informationen über ein einzelnes Gerät zu erhalten, können Sie dieses über die Vendor- und Produktnummer angeben und einen ausführlichen Bericht erstellen lassen. Diese Nummern können Sie der normalen Ausgabe von lsusb weiter oben entnehmen. archangel:/proc/bus/usb # lsusb -d 0x1058:0x0702 -v Bus 005 Device 029: ID 1058:0702 Western Digital Technologies, Inc. Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 ...
USB-Module automatisch laden Ein Hardwaregerät darf normalerweise erst dann aus dem Computer entfernt werden, wenn der zu diesem Gerät gehörende Treiber entladen wurde. Umgekehrt muss der Treiber natürlich auch wieder geladen werden, wenn die Hardwarekomponente erneut hinzugefügt wurde. Da USB-Geräte im laufenden Betrieb an- und abgesteckt werden können, liegt nichts näher, als die Treiberverwaltung zu automatisieren. Hierfür gibt es zwei verschiedene Mechanismen: usbmgr Der Daemon usbmgr kann ausschließlich USB-Geräte verwalten. Wenn ein Gerät an den Computer angeschlossen wird, übermittelt dieses Gerät seine Vendor-ID und seine Product-ID. Das sind die IDs, die Sie in der Ausgabe von lsusb bereits gesehen haben. In der Datei /etc/usbmgr/usbmgr.conf findet der usbmgr die mit den IDs korrespondierenden Treibermodule heraus, lädt sie in den Arbeitsspeicher
36
1451.book Seite 37 Dienstag, 7. Juli 2009 2:18 14
101.1 Hardware-Einstellungen ermitteln und konfigurieren
und führt sie aus. Die Datei usbmgr.conf muss in regelmäßigen Abständen aktualisiert werden, damit auch neuere Hardwarekomponenten erkannt werden können. Die Datei /etc/usbmgr/preload.conf enthält eine Liste mit Treibern, die der usbmgr schon beim Systemstart laden soll. Die Konfigurationsdatei /etc/usbmgr/host enthält den Namen des Treibers für den Host (usb-ohci, usb-uhci oder usb-ehci). hotplug Wesentlich weiter verbreitet als der usbmgr ist der Daemon hotplug. Da er außer USB-Geräten auch PCMCIA-Karten und FireWire-Komponenten bedienen kann, stellt er im Allgemeinen die bessere Wahl dar. Wenn ein USB-Gerät an den Computer angeschlossen wird, übermittelt der Kernel eine Information über dieses Gerät an hotplug. Im Verzeichnis /etc/hotplug befinden sich zu den Komponentenarten (USB, PCMCIA usw.) passende Skripts, die dann die Installation der Treibermodule übernehmen. Unabhängig vom verwendeten Daemon sollten Sie aber darauf verzichten, USBMassenspeicher einfach »ohne Vorwarnung« vom PC zu trennen. Stellen Sie sicher, dass alle Schreibvorgänge vorher beendet wurden. Sie sollten das Gerät zumindest mit dem Kommando umount aushängen! Nicht nur der USB-Bus ist geeignet, Hotplug-Geräte zu verwenden. Grund genug, sich diesem Thema in den nächsten Abschnitten etwas näher zu widmen.
Coldplug und Hotplug Der Unterschied zwischen Coldplug- und Hotplug-Geräten ist der, dass ein Hotplug-Gerät im laufenden Betrieb in den Computer eingebaut werden kann, während der Computer für die Montage eines Coldplug-Gerätes heruntergefahren und ausgeschaltet werden muss. Typische Vertreter für Hotplug-Geräte sind PCMCIA-Karten bei Notebooks, FireWire- und alle USB-Geräte. Die Konfigurationsdateien für Hotplug-Geräte finden Sie unter dem Verzeichnis /etc/hotplug. Detailliertes Wissen über die Konfiguration von Hotplug ist für die Prüfung nicht erforderlich.
Das virtuelle Dateisystem sysfs Das virtuelle Dateisystem sysfs exportiert, ähnlich dem /proc-System, Informationen über Treibermodule des Kernels in ein für den Benutzer sichtbares Verzeichnis, nämlich /sys. Der Inhalt des Verzeichnisses sieht so aus: root@archangel:/sys# ls -l insgesamt 0
37
1451.book Seite 38 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
drwxr-xr-x 23 root root drwxr-xr-x 17 root root drwxr-xr-x 32 root root drwxr-xr-x 10 root root drwxr-xr-x 3 root root drwxr-xr-x 3 root root drwxr-xr-x 4 root root drwxr-xr-x 134 root root drwxr-xr-x 2 root root drwxr-xr-x 59 root root
0 0 0 0 0 0 0 0 0 0
2009-04-14 2009-04-14 2009-04-14 2009-04-14 2009-04-14 2009-02-12 2009-02-12 2009-04-14 2009-04-14 2009-04-14
18:39 18:39 18:39 18:39 18:39 19:47 19:47 18:39 18:39 18:39
block bus class devices firmware fs kernel module power slab
Jedes dieser Unterverzeichnisse repräsentiert ein Treibermodell des laufenden Kernels. Es existieren viele symbolische Links innerhalb dieser Verzeichnisse, um den Zusammenhang zwischen den Geräten (z.B. zwischen Controller und Festplatte) darzustellen. Da das Verzeichnis /sys dynamisch generiert wird, enthält es keine unnötigen Informationen über nicht vorhandene Geräte. Der Ressourcenverbrauch wird hierdurch auf ein Minimum reduziert.
udev, hald und dbus Der hald ist ein Daemon, der den Hardware Abstracion Layer repräsentiert. Im Zusammenhang mit Hotplug-Geräten hat er die Aufgabe, den Daemon dbus darüber zu informieren, wenn ein Wechsellaufwerk an das System angeschlossen oder entfernt wurde. Das Ergebnis kennen Sie wahrscheinlich aus eigener Erfahrung: Sobald ein USB-Memorystick eingesteckt wird, erscheint ein entsprechendes Symbol auf dem Desktop. Entfernt man den Memorystick (natürlich nachdem man ihn unmounted hat), verschwindet auch das Symbol wieder. In etwas entfernterem Zusammenhang ist hier noch udev zu nennen. Hierbei handelt es sich um einen Gerätemanager, der bei moderneren Kernel-Versionen das virtuelle Verzeichnis /dev verwaltet. Dieses Programm sorgt für ein aufgeräumtes /dev-Verzeichnis, in dem sich nur die Geräte befinden, die auch tatsächlich vorhanden sind. So wird /dev dynamisch erstellt.
101.2 Das System starten Wichtung: 3 Beschreibung: Kandidaten sollten in der Lage sein, das System durch den Startvorgang zu geleiten.
38
1451.book Seite 39 Dienstag, 7. Juli 2009 2:18 14
101.2 Das System starten
Wichtigste Wissensgebiete: 왘
zur Startzeit dem Bootloader gängige Kommandos und dem Systemkern Optionen übergeben
왘
Wissen über den Startvorgang vom BIOS bis zum Abschluss des Systemstarts demonstrieren
왘
Ereignisse beim Systemstart in den Protokolldateien nachschlagen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/var/log/messages
왘
dmesg
왘
BIOS
왘
bootloader
왘
kernel
왘
init
Allgemeines Der Betriebssystemstart ist ein echtes Dilemma. Schließlich ist das Betriebssystem dazu da, Software auszuführen, fällt aber selbst unter die Kategorie Software. Man spricht hier von einem Boot-Strap-Problem (Auch Henne-Ei-Problem). In diesem Kapitel wird der Startvorgang eines Linux-Computers genauer unter die Lupe genommen. Nach Einschalten des Computers werden zunächst ein paar initiale Prozesse durch das BIOS ausgeführt. Unter anderem findet ein Power On Self Test statt, mit dem das System auf grundsätzliche Funktionstüchtigkeit geprüft und darüber hinaus der Arbeitsspeicher auf seine Größe und prinzipielle Funktionstüchtigkeit hin getestet wird. Dieser Test kann allerdings eine genaue Diagnose bei sporadisch auftretendem Hardwareversagen nicht ersetzen. Schon die kurze Dauer der Überprüfung lässt ahnen, dass hier keine sehr sorgfältige Belastungsprobe der Bauelemente durchgeführt wird. Nachdem alle Hardwarekomponenten initialisiert wurden, sucht das BIOS nach einem Betriebssystem oder einem Programm, das ein Betriebssystem laden kann. Die genaue Suchreihenfolge ist im BIOS-Setup hinterlegt und beinhaltet meist Diskettenlaufwerke, Festplatten, CD-ROMs, SCSI-Adapter, ZIP-Medien, USB-Geräte und zudem bootfähige (PXE-)Netzwerkkarten. In der weiteren Betrachtung des Themas wird davon ausgegangen, dass der Startvorgang auf der Festplatte fortgesetzt wird. Zunächst ist es erforderlich, den logischen Aufbau einer Festplatte zu kennen, damit man versteht, auf welche Arten ein Betriebssystem geladen werden kann.
39
1451.book Seite 40 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
Eine Festplatte kann in mehrere Partitionen unterteilt sein. Es ist möglich, bis zu vier »echte« Partitionen auf einer Festplatte zu erstellen. Sollten mehr als vier Partitionen, logische Laufwerke o.Ä. (je nach Betriebssystem) existieren, so handelt es sich wahrscheinlich um logische Partitionen oder Laufwerke innerhalb einer erweiterten Partition oder um Volumen, die vom Betriebssystem außerhalb der Partitionstabelle verwaltet werden. Auch Bit-Slices können vortäuschen, man hätte mehr als vier Partitionen. Man kann bei vielen Systemen, und so auch bei Linux, drei primäre und eine erweiterte Partition besitzen. Diese erweiterte Partition kann dann ihrerseits logische Partitionen enthalten, die ebenfalls nicht von der Partitionstabelle verwaltet werden. Die Partitionstabelle befindet sich im sogenannten Master Boot Record (MBR). Dieser MBR gehört selbst keiner Partition an, sondern ist eigenständig. Er ist immer genau 512 Byte groß und befindet sich ganz am Anfang der Festplatte in Sektor 0, Spur 0. Nachdem der Aufbau der Festplatte nun zumindest ansatzweise geklärt ist (weitere Informationen folgen noch in diesem Kapitel), kann die Beschreibung des Computerstartvorgangs fortgesetzt werden. Das BIOS liest nun einfach in Spur 0 des Sektors 0 den Master Boot Record der Festplatte und findet dort beispielhaft Folgendes vor: ebfa 0000 096b 085c 0104 c08e a9e8 0054 c112 befb a7a7 b059 7500 09c2 7520 123e 0003 b400 c3f6 aa55 5306 45eb c051 f73f
40
9032 0000 00e0 00e0 8ef8 00b8 b000 99b4 06e0 0006 0975 e820 f4a5 74c8 3002 e800 c0c1 cd0e 7420 1e75 016a 595b 06e9 96e1
01a4 1a82 4100 e800 bcd0 b312 e84c 8166 062b f789 49b0 0056 fdeb ac26 97e4 0022 2404 5b10 bb2d c1f6 106a 5253 e986 5a58
494c 42da e008 0000 0800 cd36 00a4 fc7f 001c a766 63e8 43e8 91ad 02b4 c2f6 b872 270f c358 55aa 7401 e689 5157 cf89 f239
4f4c 0091 0000 2d58 52fb b010 30be 494c 0750 1375 0600 3100 a8ac 13cd 7410 c780 f004 5156 41b4 5b19 00b8 b406 c159 2373
0001 0000 e801 0038 0653 e80d bb00 4f4c db31 8026 006a cdc0 7560 1aeb 0308 c302 4014 8853 13cd 6659 cd42 cd08 08ea f6f7
0316 0380 e009 cf8c fc56 00ae 0200 3175 37e8 023d b4cb fe13 4e0f ad92 100e c0c1 5350 80d3 2472 006a 8d13 0713 4092 f839
0000 ffff 0000 e8c1 d88e 0ab0 e853 cd5e 7500 0d75 519a 000e 89ad c2f6 1300 e804 07bb 8fe2 fb81 5157 1064 3972 e183 1d77
1451.book Seite 41 Dienstag, 7. Juli 2009 2:18 14
101.2 Das System starten
e4c0 f086 f95b 0000 0001 0701 ffff ffff
8606 01b8 c35e 0000 fe83 fe83 fe82 fe83
92e0 cd02 0000 0000 063f ffff ffff ffff
f1f6 eb13 0000 0000 003f b747 9021 9aff
c4fe 5909 0000 133b 0000 0001 024c 0263
e200 eb5f 0000 b839 b708 d8da 0ade 49c2
d189 b402 0000 0000 0001 024a 0017 06ed
5b5a 5a40 0000 0180 0000 fe00 fe00 aa55
In diesem Fall sind das ein Ladeprogramm in hexadezimaler Schreibweise, nämlich LILO, und im unteren Bereich die Partitionstabelle. Es gibt in Abhängigkeit vom verwendeten Betriebssystem zwei absolut unterschiedliche Möglichkeiten, wie der Startvorgang fortgesetzt werden kann. Wenn ein Bootloader im Master Boot Record vorgefunden wird, wie in diesem Fall, gibt das BIOS die Kontrolle an diesen ab und beendet sich. Falls im MBR kein Bootloader vorhanden ist (dann wären im oberen Bereich des MBRs übrigens nur Nullen zu sehen), konsultiert das BIOS die Partitionstabelle. Hier sucht das BIOS nach einem Verweis auf eine startfähige Partition. Die Partitionstabelle beginnt in der fünften Zeile, von unten an gezählt, mit 8010. Der Eintrag für jede Partition entspricht genau einer Zeile. Das Ende der Partitionstabelle wird mit 55aa markiert. Hierbei handelt es sich um eine Abschlussmarkierung, die nicht Bestandteil eines Partitionseintrages ist. Die offensichtliche »Vertauschung« der Bytes (55aa wird als aa55 dargestellt) wird durch das Programm verursacht, das diese Partitionstabelle darstellt. Programme, die eine Big-Endian-First-Byte-Abfolge verwenden, zeigen das Byte mit den höchstwertigen Bits zuerst an. Andere Programme nutzen die Little-Endian-FirstByte-Abfolge. Sie zeigen das Byte mit den niedrigstwertigen Bits zuerst an. Dieser Unterschied ist historisch durch die Verwendung unterschiedlicher Prozessorarchitekturen begründet. Während Intel-basierte Systeme Little Endian verwenden, kommt beispielsweise bei Motorola 6800 Big Endian zum Einsatz. Die Partition, die mit 80 beginnt, ist die Startpartition. Sollte also kein Ladeprogramm im MBR vorliegen, würde das BIOS nun diesem Verweis folgen und den Bootsektor der Partition mit der Markierung 80 einlesen (machen Sie sich bitte den Unterschied zwischen Startsektor einer Partition und MBR klar!). Spätestens hier sollte sich dann entweder ein Bootloader oder das Betriebssystem selbst befinden. Nun kann der tatsächliche Vorgang, den man als Booten bezeichnet, beginnen.
Boot-Strap-Loader Der Ausdruck Booten ist historisch gewachsen und hat seine Wurzeln in einer Situation, in die der Baron von Münchhausen einst angeblich geraten sein soll. Er
41
1451.book Seite 42 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
war in einen Sumpf gefallen, und weil niemand da war, der ihm hätte helfen können, hat er sich selbst an den eigenen Haaren aus dem Sumpf herausgezogen. Im Lauf des Tradierens ist diese Münchhausen-Geschichte beim Übersetzen in die englische Sprache insoweit abgewandelt worden, dass sich der Baron am Stiefelgurt (Boot-Strap) aus dem Sumpf herausgezogen haben soll. Genau so muss sich, sinnbildlich gesehen, ein Betriebssystem auch selbst hochziehen. Ein Betriebssystem dient letztendlich als Plattform, um Software auszuführen. Andererseits ist ein Betriebssystem jedoch selbst Software. Deshalb benutzen wir den Begriff Boot-Strap-Loader, der später auf Bootloader verkürzt wurde. Die Konfiguration der beiden Bootloader LILO und GRUB werden Sie auf den nächsten Seiten noch erlernen. In dieser Prüfung wird es aber auch nur noch vereinzelt Fragen zu dieser Thematik geben. Im Kapitel über den Kernel kommt der Fall zur Sprache, in dem lilo.conf angepasst werden muss, damit ein neuer Kernel verwendet werden kann. Wichtig in diesem Zusammenhang ist, dass LILO daran anschließend stets einmal gestartet werden muss, um die neue Konfiguration in den MBR zu schreiben. Jetzt, wo Sie über Festplatteneinteilung genauer Bescheid wissen, kann man diese Angabe präzisieren. In der globalen Sektion der lilo.conf wird nämlich festgelegt, wo der LILO installiert wird: 왘
boot = /dev/hda installiert den LILO in den MBR der ersten Festplatte.
왘
boot = /dev/hda1 installiert den LILO in den Bootsektor der ersten Partition auf der ersten Festplatte.
왘
boot = /dev/fd0 installiert den LILO auf Diskette. Der Computer kann dann ohne Diskette nicht mehr gestartet werden, was manche Administratoren als einen preisgünstigen Sicherheitsmechanismus ansehen.
Kernel-Parameter Sie können den Kernel zur Startzeit auch noch über den Bootloader Parameter übergeben lassen. Hierfür gibt es mehrere Möglichkeiten: Entweder tragen Sie die zu übergebenden Parameter in /etc/lilo.conf bzw. in /boot/grub/grub.conf ein, oder Sie übergeben sie tatsächlich von Hand beim Systemstart. Wenn Parameter an Module des Kernels übergeben werden müssen, erfolgt dies in der Datei /etc/ modules.conf oder /etc/modprobe.conf. Diese Methode wurde im Kapitel über Modulkonfigurationsdateien schon eingehend besprochen. Der erzielte Effekt ist in allen Fällen gleich. Mögliche Parameter wären z.B.: 왘
ide=nodma
왘
apm=off
왘
acpi=off
42
1451.book Seite 43 Dienstag, 7. Juli 2009 2:18 14
101.2 Das System starten
Eine weitere Möglichkeit besteht darin, einer Hardwarekomponente einen anderen IRQ-, DMA-Kanal oder eine andere Adresse zu übergeben. Bei der heutigen Hardware ist diese Methode aber absolut nicht mehr angebracht. Wenn Kernel-Parameter bei jedem Systemstart übergeben werden müssen, tragen Sie sie mit einer append-Zeile in lilo.conf ein. Beispiel: append = "ide=nodma apm=off"
Wie Sie sehen, ist es möglich, mehrere Parameter zu übergeben, wenn Sie diese durch Leerzeichen voneinander trennen und insgesamt in Double Quotes einfassen. Bei GRUB hätten Sie das Gleiche durch einen Eintrag in grub.conf erreicht: kernel /bzImage-2.6.11 root=/dev/hda2 ide=nodma apm=off
Das Ergebnis ist dasselbe. Die Parameterübergabe durch modules.conf oder modprobe.conf erfolgt oft deshalb, weil einem Gerät beim Systemstart Parameter übergeben werden müssen. So würde z.B. die Zeile options sonycd535
sonycd535=0x340
einem veralteten CD-ROM-Laufwerk von Sony die I/O-Adresse 340 übergeben. Es können mit dieser Methode keine Optionen an Sektionen des Kernels übergeben werden, die nicht modular kompiliert wurden. Wenn Sie aber nun beim Systemstart Parameter übergeben müssen, ist die Vorgehensweise natürlich eine andere. Sie stoppen den Bootvorgang in dem Augenblick, in dem das Bootmenü erscheint. Das erreichen Sie durch ein kurzes Betätigen der Cursortasten. Es ist dadurch möglich, die Parameter auf dem angezeigten Prompt für den mit den Cursortasten ausgewählten Kernel einfach hinter die Menüauswahl zu schreiben. Ein beliebter Übergabeparameter, den Sie aus verständlichen Gründen ausschließlich am Boot-Prompt übergeben, ist init=/bin/bash. Sie benötigen ihn, wenn Sie Ihr root-Passwort vergessen haben. Es wird nach Ausführung dieses Parameters nicht, wie sonst üblich, der init-Prozess gestartet, sondern nur die Shell /bin/bash ohne Passwortabfrage. Das root-Dateisystem ist jetzt allerdings im Nurlesen-Modus gemountet, weshalb noch die Eingabe folgender Befehle erforderlich wird: mount -o remount,rw / passwd root
43
1451.book Seite 44 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
Jetzt kann das Kennwort neu gesetzt und der Computer anschließend im normalen Modus neu gestartet werden. Linux-Gegner weisen in diesem Zusammenhang natürlich sofort auf die theoretisch bestehende Sicherheitslücke hin. Doch hier gilt es, zwei entscheidende Argumente dagegenzuhalten: 왘
Dieses »unsichere« Verhalten von Linux können Sie sowohl bei LILO als auch bei GRUB über die jeweilige Konfigurationsdatei abschalten. Das ist natürlich nur dann notwendig, wenn man die physikalische Sicherheit eines Systems nicht sicherstellen kann.
왘
Es darf ohnehin keine nicht autorisierte Person unbeaufsichtigt in die Nähe eines Computers gelangen, weil sonst ein Diebstahl der Festplatte, des ganzen Computers oder ein Sabotageakt durch Gewalteinwirkung nicht ausgeschlossen werden kann.
Startprotokollierung Die Ausgaben, die der Kernel beim Systemstart produziert, werden selbstverständlich protokolliert. Nur wenige Menschen würden es schaffen, den Startprozess von Linux mit den bloßen Augen zu verfolgen. In der Prüfung wird hier gern mit dem Programm dmesg gearbeitet. Dieses Programm liest den sogenannten Kernel-Ring-Buffer aus, in dem sich die Meldungen des Kernels befinden. Weil dmesg mehrere Hundert Zeilen ausgeben kann, empfiehlt es sich, die Ausgabe in eine Textdatei umzuleiten oder an less zu pipen: dmesg > kernelmeldungen.log dmesg | less SFW2-INext-DROP-DEFLT IN=dsl0 OUT= MAC= SRC=83.189.45.7 DST=88.73.56.127 LEN=131 TOS=0x00 PREC=0x00 TTL=57 ID=51842 PROTO=UDP SPT=50142 DPT=16406 LEN=111 SFW2-INext-DROP-DEFLT IN=dsl0 OUT= MAC= SRC=85.182.126.21 DST=88.73.56.127 LEN=4 8 TOS=0x00 PREC=0x00 TTL=121 ID=39923 DF PROTO=TCP SPT=1066 DPT=1874 WINDOW=6553 5 RES=0x00 SYN URGP=0 OPT (020405A001010402) SFW2-INext-DROP-DEFLT IN=dsl0 OUT= MAC= SRC=85.182.126.21 DST=88.73.56.127 LEN=4 8 TOS=0x00 PREC=0x00 TTL=121 ID=39988 DF PROTO=TCP SPT=1066 DPT=1874 WINDOW=6553 5 RES=0x00 SYN URGP=0 OPT (020405A001010402)
Das ist natürlich nicht das erwartete Ergebnis. Der Grund für diese stark gekürzte Ausgabe ist der, dass die Firewall bei Linux im Kernel integriert ist. Deshalb protokolliert diese natürlich auch in den Kernel-Ring-Buffer. Wenn dmesg allerdings
44
1451.book Seite 45 Dienstag, 7. Juli 2009 2:18 14
101.3 Runlevel wechseln und das System anhalten oder neu starten
sehr bald nach dem Systemstart ausgeführt wird, erhalten Sie durchaus brauchbare Informationen. Hier ein Beispiel über das Laden der Module für zwei Netzwerkkarten: 8139too Fast Ethernet eth0: RealTek RTL8139 eth0: Identified 8139 eth1: RealTek RTL8139 eth1: Identified 8139
driver 0.9.27 at 0xe0dc0000, 00:e0:7d:78:e6:18, IRQ 193 chip type 'RTL-8139B' at 0xe0f70400, 00:e0:4c:39:68:3f, IRQ 169 chip type 'RTL-8139B'
Sollte der letzte Startvorgang schon länger zurückliegen, hilft nur noch die Auswertung der Datei /var/log/messages. Hier werden die Informationen über den Startvorgang deutlich länger, möglicherweise sogar für immer, aufgehoben. Um die kernel-bezogenen Meldungen schneller auffinden zu können, empfiehlt sich eine Filterung mittels grep, bevor das Ergebnis an less übergeben wird. grep kernel /var/log/messages | less
Hier finden Sie tatsächlich die Einträge von vorhin wieder. Diesmal sogar mit genauer Angabe des Zeitpunktes, zu dem die Module geladen wurden. Aug 4 11:34:37 archangel Aug 4 11:34:37 archangel 00:e0:7d:78:e6:18, IRQ Aug 4 11:34:37 archangel 'RTL-8139B' Aug 4 11:34:37 archangel 00:e0:4c:39:68:3f, IRQ Aug 4 11:34:37 archangel 'RTL-8139B'
kernel: 8139too Fast Ethernet driver 0.9.27 kernel: eth0: RealTek RTL8139 at 0xe0dc0000, 193 kernel: eth0: Identified 8139 chip type kernel: eth1: RealTek RTL8139 at 0xe0f70400, 169 kernel: eth1: Identified 8139 chip type
Auch diese Ausgabe ist, wie die meisten anderen, natürlich erheblich gekürzt worden.
101.3 Runlevel wechseln und das System anhalten oder neu starten Wichtung: 3 Beschreibung: Kandidaten sollten in der Lage sein, den Runlevel des Systems zu verwalten. Dieses Prüfungsziel umfasst das Wechseln in den Einbenutzermodus, das Anhalten und den Neustart des Systems. Kandidaten sollten in der Lage sein, Benutzer vor einem Wechsel des Runlevels zu benachrichtigen und Prozesse kor-
45
1451.book Seite 46 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
rekt anzuhalten. Dieses Prüfungsziel umfasst ferner das Einstellen des StandardRunlevels. Wichtigste Wissensgebiete: 왘
den Standard-Runlevel setzen
왘
zwischen Runlevels wechseln, einschließlich dem Einbenutzermodus
왘
Systemhalt und Neustart von der Kommandozeile
왘
Benutzer vor einem Runlevel-Wechsel oder anderem größerem Ereignis benachrichtigen
왘
Prozesse korrekt beenden
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/inittab
왘
shutdown
왘
init
왘
/etc/init.d
왘
telinit
Allgemeines Bei Linux ist es nicht nur möglich, das Betriebssystem herauf- bzw. herunterzufahren. Es gibt hier im Gegensatz zu anderen Betriebssystemen zudem noch zusätzliche Abstufungen. Die Zustände, in denen sich der Computer dann befindet, werden als Runlevels bezeichnet. Für den Wechsel von einem Runlevel in einen anderen ist der Prozess init zuständig. Von manchen Administratoren wird init auch als der Vater aller Prozesse bezeichnet. Das kommt wohl daher, weil er immer der erste Prozess ist, der auf einem Linux-Computer gestartet wird. Aus diesem Grund erhält er auch stets die PID 1. Beim Herunterfahren des Betriebssystems ist init außerdem der letzte Prozess, der sich beendet. Im folgenden Beispiel, das die Ausgabe des ps –A-Kommandos wiedergibt, erkennt man deutlich, wo der init-Prozess angesiedelt ist: archangel:~ # ps -A PID TTY TIME 1 ? 00:00:00 2 ? 00:00:00 3 ? 00:00:00 4 ? 00:00:00
46
CMD init migration/0 ksoftirqd/0 migration/1
1451.book Seite 47 Dienstag, 7. Juli 2009 2:18 14
101.3 Runlevel wechseln und das System anhalten oder neu starten
5 ? 6 ?
00:00:00 ksoftirqd/1 00:00:00 events/0
Wenn Sie pstree ausführen, wird init die Wurzel des Prozessbaumes repräsentieren.
Die Runlevels und ihre Funktion Runlevels sind sozusagen Zustände oder Funktionsstufen, in denen sich ein Linux-basiertes System befinden kann. Leider sind nicht alle Runlevels durch eine genaue Normung festgelegt. Sie müssen also gegebenenfalls nachlesen, wie die Distribution, die Sie gerade verwenden, die Runlevel organisiert. Im Normalfall gestaltet sich das Ganze folgendermaßen: 왘
Runlevel 0 ist bei allen Distributionen gleich definiert. Wenn der Computer in diesen Runlevel eintritt, schaltet er sich aus. Vorausgesetzt natürlich, das BIOS unterstützt eine automatische Abschaltung des Gerätes.
왘
Runlevel 1 entspricht Runlevel s oder auch Runlevel S. Dies gilt ebenfalls für alle Distributionen in gleicher Weise. Dieser Status wird auch als SingleuserMode bezeichnet, weil Linux hier nur rudimentäre Systemfunktionen zur Verfügung stellt. In dieser Stufe gibt es noch keine Netzwerkfunktionalität und keine Multiuser-Unterstützung (daher die Bezeichnung SingleuserMode). Der Runlevel 1 sollte nur zur Wartung und Administration verwendet werden.
왘
Runlevel 2 ist nicht bei allen Distributionen gleich definiert. In der Regel können Sie zumindest davon ausgehen, dass es in Runlevel 2 keine Unterstützung für eine grafische Anmeldung gibt. In jedem Fall gibt es in dieser Stufe eine Multiuser-Funktionalität, und bei manchen Distributionen wird hier das Netzwerk gestartet.
왘
Runlevel 3 ist ebenfalls nicht bei allen Distributionen gleich konfiguriert. Multiuser-Funktionalität ist selbstverständlich vorhanden. Das Netzwerk läuft spätestens in diesem Status bei allen bekannten Distributionen. Unterschiede bestehen lediglich distributionsspezifisch gesehen darin, ob jetzt eine grafische Anmeldung zur Verfügung steht oder nicht.
왘
Runlevel 4 wird von keiner bekannten Distribution genutzt.
왘
Runlevel 5 ist der höchste funktionale Runlevel und unterstützt in der Regel Netzwerk, Multiuser-Unterstützung und eine grafische Anmeldung, wenn eine solche installiert wurde.
47
1451.book Seite 48 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
Runlevel 6 ist dagegen distributionsübergreifend festgelegt. Wenn man diesen Runlevel startet, fährt init das System herunter und startet es anschließend neu.
왘
Die Konfigurationsdatei inittab Die Datei /etc/inittab ist die Hauptkonfigurationsdatei für den init-Prozess, der sich im Übrigen selbst im /sbin-Verzeichnis befindet. Hier kann beispielsweise festgelegt werden, in welchen Runlevel Linux standardmäßig bootet. So kann es gerade für Sie interessant sein, zu verhindern, dass der Rechner jedes Mal bis zur grafischen Anmeldung hochfährt, wenn Sie lediglich ein paar Kommandos testen wollen, für die man nur eine Konsole benötigt. Suchen Sie also in Ihrer /etc/ inittab folgende Zeilen: # The default runlevel is defined here id:3:initdefault:
Im gezeigten Beispiel ist Runlevel 3 als Standardwert eingestellt. Wenn Sie diesen Wert ändern, ist er beim nächsten Neustart wirksam. Die Werte 0 oder 6 sind hier demzufolge nicht gerade empfehlenswert. Es soll bereits Fälle gegeben haben, in denen nach Eingabe dieser Werte das komplette System neu installiert werden musste. Ein paar Zeilen weiter in der inittab können Sie nachverfolgen, wie die Runlevels in Ihrer Distribution organisiert sind: # # # # # # #
runlevel runlevel runlevel runlevel runlevel runlevel runlevel
0 1 2 3 4 5 6
is is is is is is is
System halt Single user mode Local multiuser without remote network Full multiuser with network Not used Full multiuser with network and xdm System reboot
Die meisten Linux-Distributionen stellen von sich aus sechs Konsolen bereit, auf denen man gleichzeitig arbeiten kann. Es ist aber auch möglich, weitere Konsolen hinzuzufügen oder zu entfernen. Achten Sie aber darauf, nicht die Konsole zu belegen, die Ihr X-Window-System verwendet: 1:2345:respawn:/sbin/mingetty 2:2345:respawn:/sbin/mingetty 3:2345:respawn:/sbin/mingetty 4:2345:respawn:/sbin/mingetty 5:2345:respawn:/sbin/mingetty 6:2345:respawn:/sbin/mingetty
48
--noclear tty1 tty2 tty3 tty4 tty5 tty6
1451.book Seite 49 Dienstag, 7. Juli 2009 2:18 14
101.3 Runlevel wechseln und das System anhalten oder neu starten
Die erste Ziffer jeder Zeile ist die ID der zu startenden Konsole. Sie muss mit der Nummer des verwendeten Terminals übereinstimmen. Nach dem ersten Doppelpunkt folgen die Runlevels, in denen die jeweiligen Konsolen verfügbar sein sollen. Der Runlevel 1 ist nicht vertreten, weil dieser an anderer Stelle konfiguriert wird und auch nur eine einzige Konsole zulässt. Die Anweisung respawn ist ein Kunstwort und könnte wohl am ehesten mit »wieder hervorbringen« übersetzt werden. Eine Konsole, die beendet wurde, wird hierdurch automatisch wieder neu gestartet. Das passiert allerdings normalerweise nie von selbst. Es wäre höchstens die Situation vorstellbar, eine Konsole mit dem kill-Befehl beenden zu müssen, weil sich ein in dieser Konsole laufender Prozess nicht mehr ansprechen lässt. Bekannt für solche Fehler ist der unter »bekehrten« DOS-Benutzern beliebte Midnight Commander. Er blockiert ein Terminal z.B. dauerhaft, wenn man mit ihm gerade auf ein NFS-Laufwerk zugreift und dieses plötzlich nicht mehr zur Verfügung steht. Der Midnight Commander zeigt sich dann auch von einem kill –s 9 nicht mehr sonderlich beeindruckt und bleibt im Arbeitsspeicher liegen. Ein Beenden der Shell, auf der er ausgeführt wird, hilft dann in der Regel auch nicht weiter. Abhilfe ist in einem solchen Fall nur so möglich: Es muss dann der richtige mingetty-Prozess (am besten mit pstree) herausgefunden und dieser mit kill beendet werden. Dann findet ein respawn der beendeten Konsole statt. /sbin/mingetty ist eines der wichtigsten Konsolenprogramme, das das Programm /bin/login aufruft. TTY ist eine sehr alte Abkürzung, die für Teletyper steht. Die letzte interessante und zudem prüfungsrelevante Option innerhalb der inittab ist: # what to do when CTRL-ALT-DEL is pressed ca::ctrlaltdel:/sbin/shutdown -r -t 4 now
Hier wird dargestellt, was passieren soll, wenn jemand den sogenannten Affengriff ausführt. In diesem Fall wird der Computer nach genau vier Sekunden (-t 4) neu gestartet (-r). Die genaue Verwendung des Befehls shutdown wird weiter unten erläutert. Vorher wird eine Konsolenmeldung an alle angemeldeten Benutzer gesendet. Da es sich um eine Konsolenmeldung handelt, werden natürlich keine Windows-Benutzer, die auf einen Samba-Server zugreifen, benachrichtigt. Sollten Sie den Computer immer allein verwenden, spricht nichts dagegen, die shutdown-Anweisung gegen ein init 0 oder init 6 zu tauschen. Damit eine solche Änderung sofort wirksam wird und nicht erst nach einem Neustart des Systems, sollten Sie anschließend telinit q ausführen. Merken Sie sich bitte auch für die Prüfung, dass telinit q den init-Prozess veranlasst, im laufenden Betrieb die Datei inittab neu einzulesen.
49
1451.book Seite 50 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
Verzeichnisse und Dateien des init-Prozesses Abgesehen von der /etc/inittab gibt es noch einige andere Dateien und Verzeichnisse, die der init-Prozess ausliest und verwendet. Hier gibt es allerdings in Abhängigkeit von der verwendeten Distribution zum Teil erhebliche Unterschiede. Das macht sich vor allem in der Platzierung von Skripten bemerkbar, die beim Wechsel von Runlevels involviert sind. So arbeiten Red-Hat-basierte Systeme meist mit einem monolithischen Initialisierungsskript, während die meisten anderen Distributionen kleine Einzelskripte abarbeiten. Das Basisverzeichnis ist aber bei den meisten Systemen leicht auffindbar, weil durch entsprechende Softlinks für eine Art Redundanz gesorgt wird. So heißt dieses Basisverzeichnis typischerweise /etc/init.d bzw. /etc/rc.d. Hier befinden sich bei den meisten Distributionen die einzelnen init-Skripte. Sie können diese natürlich auch im laufenden Betrieb von Hand ausführen. So können Sie mit folgenden Befehlszeilen z.B. sendmail beenden: /etc/init.d/sendmail stop
oder /etc/rc.d/sendmail stop
Ähnlich sieht es aus, wenn Sie sendmail wieder starten möchten: /etc/init.d/sendmail start
oder /etc/rc.d/sendmail start
Schon nimmt sendmail seine Arbeit wieder auf. Welche Übergabeparameter ein solches Skript versteht, können Sie im Skript selbst nachsehen. Alle diese Skripte verstehen, so wie in unserem Beispiel, start und stop. Einige verstehen auch noch status oder reload. Mit status können Sie nachprüfen, ob der zugehörige Daemon läuft oder nicht. Die reload-Anweisung dient dazu, einem Programm ein SIGHUB zu senden und es somit zu veranlassen, seine Konfigurationsdateien neu einzulesen. Das kann hilfreich sein, wenn Sie diese Dateien verändert haben und das Programm diese einlesen soll, ohne vorübergehend seinen Dienst einzustellen. Es lohnt sich durchaus, sich mit einem solchen Skript näher auseinanderzusetzen, auch wenn man es nicht lesen kann wie eine Geschichte. Sie können auch ohne Programmierkenntnisse ein paar Informationen finden, die zum Verständnis beitragen, wie die Skripte verarbeitet werden. Als Beispiel dienen hier ein paar Fragmente aus dem Startskript von apache2: ### BEGIN INIT INFO # Provides:
50
apache2 httpd2
1451.book Seite 51 Dienstag, 7. Juli 2009 2:18 14
101.3 Runlevel wechseln und das System anhalten oder neu starten
# Required-Start: $local_fs $remote_fs $network # X-UnitedLinux-ShouldStart: $named $time postgresql sendmail mysql ypclient dhcp radiusd # Required-Stop: $local_fs $remote_fs $network # X-UnitedLinux-Should-Stop: # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Short-Description: Apache2 httpd # Description: Start the httpd daemon Apache 2 ### END INIT INFO
Die wichtigsten Informationen, die Sie diesem Startskript entnehmen können, sind u.a. die Angaben darüber, in welchem Runlevel Apache überhaupt laufen soll. Default start sagt, dass Apache in Runlevel 3 und 5 laufen soll. In Runlevel 0, 1, 2 und 6 läuft er laut Default Stopp standardmäßig nicht. Runlevel 4 wird gar nicht erst erwähnt, aber das ist wohl auch verständlich. Im oberen Teil des Skripts erkennen Sie (hinter Required-Start), welche anderen Dienste Apache voraussetzt. Natürlich hängen diese ihrerseits von weiteren Programmen ab. In diesem Zusammenhang interessiert darüber hinaus, welche Parameter das Startskript von Apache versteht. Dazu müssen Sie wissen, dass der erste Parameter eines Shell-Skripts immer in der Variablen $1 hinterlegt wird. Also sucht man zunächst nach der Variablen $1 innerhalb des Skripts: action="$1"
Offensichtlich übergibt das Skript die Eingabevariable an eine andere Variable namens action. Also muss nun nach dieser Variablen und eventuell nach einer Auswahlanweisung gesucht werden. Die Suche wird folgende zwei Fundstellen ergeben: case "$action" in stop|try-restart|*status*|probe)
und case "$action" in start*)
Das ist das Ergebnis. An /etc/rc.d/apache2 können Sie die Parameter stop, start, try-restart, status und probe anhängen. Dieses Beispiel war im Übrigen schon vergleichsweise kompliziert, weil die meisten anderen Skripte ohne Umweg mit der Variablen $1 arbeiten. Nachdem Sie jetzt wissen, wie diese Skripte manuell bedient werden, können Sie dieses Vorgehen auch auf die Arbeitsweise von init übertragen.
51
1451.book Seite 52 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
Bei den meisten Distributionen liegen unterhalb des Verzeichnisses /etc/init.d bzw. /etc/rc.d Unterverzeichnisse, die den jeweiligen Runlevels zugeordnet sind. Diese heißen /etc/init.d/rc1.d, /etc/init.d/rc2.d usw. Bei anderen Distributionen liegen diese Verzeichnisse durchaus auch direkt unterhalb von /etc. In diesen Verzeichnissen befinden sich Softlinks, die auf die jeweiligen Startskripte zeigen, die in diesem Runlevel gestartet werden sollen. Diese Softlinks sehen in Runlevel 3 beispielsweise so aus: K04apache2 S13named K05sendmail S18apache2
In Wirklichkeit liegen hier vielleicht 50–100 Softlinks (in Abhängigkeit von der Anzahl der installierten Pakete), aber vier sollen zur Veranschaulichung genügen. Beim Eintreten in einen Runlevel führt init alle Skripte aus, deren Softlink ein S, wie start, vorangestellt wurde. Durch die folgende zweistellige Nummerierung weiß init auch, in welcher Reihenfolge er die Skripte abarbeiten muss. Beim Verlassen des Runlevels arbeitet er alle Skripte ab, deren Softlink ein K, wie kill, vorangestellt wurde. Auch hier gibt die zweistellige Nummerierung einen Hinweis auf die Verarbeitungsreihenfolge. Die letzte Frage, die sich noch stellt, ist die, wieso ein und dasselbe Skript, das durch zwei unterschiedliche Softlinks aktiviert wurde, einmal einen Daemon startet und diesen ein anderes Mal beendet: K04apache2 S18apache2
Beide Softlinks zeigen nämlich auf /etc/rc.d/apache2. Doch die Lösung ist ganz einfach: Jedes Skript kann durch die Abfrage einer Variablen, nämlich $0, feststellen, ob es durch Aufruf seines eigenen Dateinamens oder durch den Aufruf eines Links gestartet wurde, und dementsprechend mit Verzweigungen innerhalb des Programms reagieren.
Runlevel-Wechsel, Herunterfahren, Neustart Wenn Sie herausfinden wollen, in welchem Runlevel sich ein System gerade befindet, geben Sie einfach das Kommando runlevel ohne Parameter ein: archangel:~ # runlevel 1 3
Dieses System befindet sich in Runlevel 3 und lief vorher in Runlevel 1. Es sind also immer rechts der derzeitige und links der vorherige Runlevel eines Systems angegeben.
52
1451.book Seite 53 Dienstag, 7. Juli 2009 2:18 14
101.3 Runlevel wechseln und das System anhalten oder neu starten
Zum Wechsel eines Runlevels verwenden Sie das Kommando init oder telinit. In den meisten Fällen ist telinit sowieso kein eigenständiges Programm mehr, sondern lediglich ein Softlink auf init. Es ist also egal, welchen der beiden Befehle Sie verwenden. Wenn Sie in einen anderen Runlevel wechseln wollen, geben Sie einfach init ein, gefolgt von der Nummer des gewünschten Runlevels. So wechselt init 1 in den Singleuser-Mode. init s oder init S liefern dasselbe Ergebnis. Mit init 0 können Sie das System herunterfahren oder mit init 6 neu starten. In beiden Fällen werden eventuell verbundene Benutzer allerdings nicht benachrichtigt, und es wird ohne weitere Verzögerungen sofort heruntergefahren. Ein Datenverlust wäre nicht auszuschließen. Weitere Methoden, ein System herunterzufahren oder neu zu starten, sind: 왘
shutdown
왘
halt
왘
reboot
왘
poweroff
Der einzig sinnvolle Befehl der soeben genannten ist allerdings shutdown. Alle anderen sollten nicht von Administratoren verwendet werden, sondern es sind Hilfsprogramme, die von init benötigt werden. Wenn Sie den halt-Befehl einmal testen möchten, sollten Sie vorher zumindest mit dem Kommando sync Ihren Festplatten die Gelegenheit geben, den aktuellen Cache-Inhalt zu schreiben. Nach Eingabe von halt fährt das System nämlich erschreckend schnell herunter. Die sauberste Methode, ein System herunterzufahren oder neu zu starten, ist die Verwendung von shutdown. Die Benutzer werden vor dem Herunterfahren des Systems gewarnt. Alle noch laufenden Programme werden durch das Signal 15 aufgefordert, sich zu beenden. Sollten die Programme dies allerdings nach einer angemessenen Zeit nicht getan haben, werden sie mit dem Signal 9 gewaltsam terminiert. Wichtige Optionen sind hier: 왘
-r für reboot
왘
-h für halt
왘
-t für time in Sekunden
왘
-k nur Konsolenmeldung senden, aber nicht herunterfahren
왘
-f kein fsck bei Fälligkeit während des Neustarts
왘
-F nach Neustart fsck erzwingen
53
1451.book Seite 54 Dienstag, 7. Juli 2009 2:18 14
Topic 101: Systemarchitektur
Mit folgendem Befehl wird der Computer sofort neu gestartet und beim Startvorgang fsck nicht ausgeführt: shutdown –f –r now
Das ist eine wichtige Option, wenn Sie bei einem Produktionsserver wegen eines neuen Kernels booten müssen und nicht so lange warten können, bis fsck alle Festplatten überprüft hat. Wohl aus diesem Grund stellen diese beiden Schalter eine beliebte Prüfungsthematik dar.
54
1451.book Seite 55 Dienstag, 7. Juli 2009 2:18 14
Nachdem Sie über die korrekte Konfiguration der Hardware bestens Bescheid wissen, kann nun mit der Planung der Partitionen und der Konfiguration eines Bootloaders fortgefahren werden.
Topic 102: Linux-Installation und -Paketverwaltung 102.1 Festplattenaufteilung planen Wichtung: 2 Beschreibung: Kandidaten sollten ein Platten-Partitionierungsschema für ein Linux-System entwerfen können. Wichtigste Wissensgebiete: 왘
Dateisysteme und Swap Space einzelnen Partitionen oder Platten zuordnen
왘
die Partitionierung an den Verwendungszweck des Systems anpassen
왘
sicherstellen, dass die /boot-Partition den Anforderungen der HardwareArchitektur für den Systemstart genügt
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/ (Wurzel- bzw. root-Dateisystem)
왘
/var-Dateisystem
왘
/home-Dateisystem
왘
Swap Space
왘
Mountpoints
왘
Partitionen
Allgemeines Bevor Linux auf einem Computer installiert wird, sollten Sie sich ein paar Gedanken über das Layout der Partitionierung und der zu verwendenden Dateisysteme machen. Bedenken Sie, dass sich die Partitionierung im Nachhinein nicht mehr
55
1451.book Seite 56 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
ohne Weiteres ändern lässt. In Anbetracht der Lage, dass auch größere Festplatten inzwischen verhältnismäßig preiswert zu erwerben sind, rate ich hier nicht dazu, geizig mit dem Plattenplatz zu haushalten, wenn Sie sich nicht später über ein vollgelaufenes Dateisystem ärgern wollen.
Planung im Detail Wenn Sie Ihre Verzeichnisstruktur in mehrere Partitionen unterteilen, verhindern Sie damit, dass durch die Überfüllung eines einzelnen Verzeichnisses die Stabilität des ganzen Systems beeinträchtigt wird. Es ist denkbar, dass ein langfristig unbeobachtetes System durch umfangreiche Protokollierungen das Verzeichnis /var stark anwachsen lässt. Wenn sich /var dann auf einer separaten Partition befindet, werden andere Verzeichnisse nicht negativ beeinflusst. Ein weiteres, wichtiges Kriterium ist die Datensicherung. Das Programm dump sichert z.B. immer ganze Partitionen. Deshalb ist es angebracht, Daten die häufig gesichert werden (z.B. /home), von den Daten zu trennen, die selten gesichert werden müssen (z.B. /usr oder /var). Bei der Planung der Reihenfolge der Partitionen sollte als Erstes eine Partition für /boot eingeplant werden. Da es bei sehr alten BIOS-Versionen oder auch veralteten Versionen von LILO zu Startproblemen führt, wenn der Bootloader oder das Kernel-Image oberhalb des 1.024ten Zylinders der Festplatte liegt, sollte diese Partition relativ klein gewählt werden. Sie können dieses Problem vermeiden, indem Sie eine ca. 50 MB große Partition für /boot als erste Partition auf der Festplatte einplanen. Die Größe einer Swap-Partition festzulegen ist schwierig. Sie hängt von der Verwendung des Systems ab und von der Größe des Arbeitsspeichers, über die der Computer verfügt. Der von einem Computer verwendete Speicher ist der virtuelle Speicher. Dieser ist die Summe aus physikalischem Speicher (RAM) und Swap Space. Im Gegensatz zu anderen Betriebssystemen lagert Linux erst dann Daten in den Swap Space aus, wenn kein physikalischer Speicher mehr übrig ist. Wenn Sie also garantieren können, dass immer genügend RAM-Speicher zur Verfügung steht, brauchen Sie zumindest theoretisch überhaupt keinen Swap Space. Eine alte Faustregel besagt, dass immer doppelt so viel Swap Space wie physikalischer Speicher vorhanden sein sollte. Vielleicht sollten Sie sich darüber früher oder später Ihre eigene Meinung bilden. Wie viel Platz der root-Verzeichnisbaum »/« benötigt, hängt davon ab, welche anderen Partitionen Sie noch erstellen möchten. Wenn Sie keine weiteren Partitionen erstellen, muss im root-Verzeichnisbaum natürlich der gesamte Platz, der benötigt wird, auch zur Verfügung stehen. Sie sollten in so einem Fall für eine
56
1451.book Seite 57 Dienstag, 7. Juli 2009 2:18 14
102.2 Einen Bootmanager installieren
moderne Distribution mindestens 20 GB einkalkulieren. Sollten Sie allerdings inhaltsreiche Verzeichnisse separat partitionieren, können 800 MB für das Hauptverzeichnis ausreichend sein. Das Verzeichnis /usr belegt auf meinen Referenzsystemen bis zu 5 GB. Den Empfehlungen vieler Quellen im Internet nach ist schon deutlich weniger ausreichend. Das hätte in diesem Fall schon zu Engpässen geführt. Nehmen Sie lieber 10 GB. Für das Verzeichnis /var sollten Sie ca. 2 GB einkalkulieren. Es gibt Unterschiede von Distribution zu Distribution, was genau sich überhaupt in diesem Verzeichnis befindet, aber 2 GB sind normalerweise absolut ausreichend. Für temporäre Dateien in /tmp braucht nicht so viel Platz eingeräumt zu werden. Mit 400 MB unter /tmp sollten Sie problemlos auskommen. Das Verzeichnis /home ist vom Platzbedarf nicht vorhersehbar. Sie müssen selbst kalkulieren, wie viel Platz Ihre Benutzer im Dateisystem benötigen werden. Deshalb sollten Sie hier auch Quotas einsetzen. Prüfungstipp Für die Prüfung sollten Sie sich auch überlegen, welche dieser Dateisysteme oft gesichert werden müssen (etwa /home) und welche vielleicht gar nicht (/proc, /dev, /tmp).
102.2 Einen Bootmanager installieren Wichtung: 2 Beschreibung: Kandidaten sollten einen Bootmanager auswählen, installieren und konfigurieren können. Wichtigste Wissensgebiete: 왘
alternative und Notfall-Startmöglichkeiten vorsehen
왘
einen Bootloader wie GRUB installieren und konfigurieren
왘
mit dem Bootloader interagieren
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/boot/grub/menu.lst
왘
grub-install
57
1451.book Seite 58 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
왘
MBR
왘
Superblock
왘
/etc/lilo.conf
왘
lilo
Allgemeines Damit ein System starten kann, benötigt es ein Programm, das die für den Bootvorgang nötigen Schritte ausführt. Ein solches Programm wird als Boot-Strap-Loader bezeichnet. Nachdem das BIOS das System initialisiert und getestet hat, sucht es aus startfähigen Laufwerken nach einem solchen Startprogramm. Sollte es sich dabei um eine Festplatte handeln, wird zunächst der Sektor »0« der Festplatte eingelesen. Dieser enthält dann entweder den Boot-Strap-Loader selbst oder innerhalb der Partitionstabelle einen Verweis auf die aktive Partition, die dann stattdessen diesen Bootloader enthält. Was Bootloader anbelangt, so sind unter Linux zwei verschiedene Bootloader verfügbar: 왘
LILO (Linux Loader)
왘
GRUB (Grand Unified Bootloader)
Beide haben die Aufgabe, den Kernel aufzufinden und zu starten. Danach geben sie die Kontrolle an den Kernel ab und sind bis zum nächsten Systemstart untätig. Sie werden in diesem Kapitel die Unterschiede zwischen diesen beiden BootStrap-Loadern kennenlernen und können dann selbst entscheiden, welchem Sie den Vorzug geben. Da Linux im Gegensatz zu anderen Betriebssystemen nicht ständig neu gestartet werden muss, halte ich die Auswahl des richtigen Bootloaders eher für Nebensache.
LILO Der LILO ist ein zweistufiger Bootloader. Der kleinere Teil von LILO befindet sich in den meisten Fällen am Anfang des MBRs (Master Boot Record). Der MBR ist der erste Sektor auf einer Festplatte und hat eine Größe von nur 512 Byte. Die Partitionstabelle ist im hinteren Teil des MBRs abgelegt und benötigt 64 Byte. Der MBR endet mit einem Abschluss-Flag (55 AA), der noch mal 2 Byte belegt. Es bleiben also für LILO gerade mal 512 – 64 – 2 = 446 Byte. Das ist natürlich zu wenig, weshalb hier nur ein kleines initiales Progrämmchen hinterlegt ist, das dann den Rest von LILO aus der Bootpartition liest. Diese zweite Stufe von LILO enthält auch die Benutzerschnittstelle, die es erlaubt, einen Kernel auszuwählen und, wenn nötig, Parameter an den Kernel zu übergeben.
58
1451.book Seite 59 Dienstag, 7. Juli 2009 2:18 14
102.2 Einen Bootmanager installieren
Kernel-Parameter und Parameter für init Wie schon erwähnt, können während des Systemstarts mit LILO Parameter an den Kernel übergeben werden. Diese werden dann einfach an die Zeile angehängt, die LILO bei der Auswahl eines Startmenüeintrags anzeigt. Beispiele: 왘
ide=nodma
왘
apm=off
왘
acpi=off
Es können aber auch Parameter an den Daemon init übergeben werden. Damit kann z.B. festgelegt werden, welcher Runlevel gestartet werden soll, wenn man nicht den in der Datei inittab festgelegten Runlevel benötigt. Hängen Sie einfach an die Startzeile Folgendes an: init=/sbin/init 2
Der Computer startet dann bis zum Runlevel 2. Fehlercodes beim Start Wenn der LILO geladen wird, schreibt er (vorausgesetzt, er wird nicht von einer bunten Grafik überlagert) das Wort LILO auf den Bildschirm. Hierbei repräsentiert jeder Buchstabe die erfolgreiche Ausführung einer Aufgabe, die für den Start der zweiten Stufe von LILO erforderlich ist. Sollte LILO nicht vollständig erscheinen, liegt ein Problem vor. Je kürzer das Wort, desto früher wurde die Ausführung abgebrochen und umso schlimmer ist wahrscheinlich die Ursache. 왘
– die erste Stufe von LILO wurde nicht ausgeführt.
왘
L – die Datei /boot/boot.b konnte nicht geladen werden. Ein Festplattenfehler
ist möglicherweise das Problem. 왘
LI – die Datei /boot/boot.b konnte gelesen, aber nicht ausgeführt werden. Die Datei ist möglicherweise beschädigt.
왘
LIL – die zweite Stufe wurde gestartet, aber die Map-Datei konnte nicht gele-
sen werden. Ein fehlerhaftes Bootlaufwerk ist möglich. 왘
LIL? – die zweite Stufe wurde in einen falschen Speicherbereich geladen.
왘
LIL- – die Map-Datei ist ungültig. Möglicherweise wurde nach einer Änderung an der Bootkonfiguration der LILO Map-Installer nicht ausgeführt.
왘
LILO – der zweite Stage wurde erfolgreich geladen.
59
1451.book Seite 60 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
Die Konfigurationsdatei /etc/lilo.conf Die Datei lilo.conf verfügt über eine globale Sektion, die für alle eingetragenen Systeme Gültigkeit hat. Es folgt dann mindestens eine weitere Sektion, die sich auf einen zu ladenden Kernel oder ein fremdes Betriebssystem beziehen kann. Da LILO zum Teil im MBR dateisystemunabhängig gespeichert ist, kann er im Prinzip Betriebssysteme mit beliebigen Dateisystemen starten. Eine globale Sektion kann z.B. so aussehen: message = /boot/message timeout = 20 prompt default = 2.6.11-custom boot = /dev/hda
Im Anschluss folgt ein Beispiel für einen zu ladenden Kernel. Die Erläuterungen zu den einzelnen Einträgen folgen nach dieser Sektion: image = /boot/vmlinuz-2.6.11-custom label = 2.6.11-custom map = /boot/map initrd = /boot/initrd root = /dev/hda2
Die Bedeutung der Einträge in der lilo.conf: 왘
message enthält den Pfad zu der Datei, die beim Systemstart angezeigt wird,
also normalerweise das Startmenü. 왘
timeout gibt die Zeit in Sekunden an, nach der das Standardsystem gestartet
wird, wenn der Benutzer keine Auswahl getroffen hat. 왘
prompt legt fest, ob ein Prompt zur Verfügung gestellt wird oder nicht. Bei Systemen, die nicht physikalisch gesichert sind, ist das eine Sicherheitslücke.
왘
default kennzeichnet das System, das gestartet wird, wenn der Benutzer
keine Auswahl trifft. 왘
boot zeigt auf die Festplatte, die den Bootsektor bereitstellt (z.B. /dev/hda).
왘
image ist das zu startende Bootimage.
왘
label ist ein Alias für den zu startenden Kernel.
왘
map zeigt auf die Map-Datei (normalerweise /boot/boot.b).
왘
initrd enthält den Pfad zur initialen RAM-Disk, wenn vorhanden.
왘
root zeigt auf das root-Dateisystem für den gewählten Eintrag.
60
1451.book Seite 61 Dienstag, 7. Juli 2009 2:18 14
102.2 Einen Bootmanager installieren
Map-Installer Wenn Änderungen an der Konfiguration durchgeführt wurden, muss durch den Aufruf von lilo der Map-Installer aufgerufen werden. Der Systemstart würde sonst mit der alten Konfiguration fortgesetzt werden oder je nach Änderung sogar fehlschlagen: archangel:/boot # lilo Added 2.6.11-custom Added 2.6.9-custom * Added Failsafe_--_SUS
Dem Kommando lilo können auch Optionen übergeben werden: 왘
-C – mit dieser Option können Sie eine alternative Konfigurationsdatei ange-
ben, wenn nicht /etc/lilo.conf verwendet werden soll. 왘
-R – stellt die Kommandozeile für den nächsten Systemstart ein.
왘
-M – schreibt einen Master Boot Record (MBR) auf eine Festplatte.
왘
-q – zeigt die aktuelle Bootkonfiguration an.
왘
-v – ist wie immer der Verbose-Mode.
Beispiel für eine Abfrage gegen LILO: archangel:~ # lilo -q -v LILO version 22.3.4, Copyright (C) 1992-1998 Werner Almesberger Development beyond version 21 Copyright (C) 1999-2002 John Coffman Released 01-Nov-2002 and compiled at 19:03:37 on Mar 22 2005. Warning: LBA32 addressing assumed Reading boot sector from /dev/hda Global settings: Delay before booting: 0.0 seconds Command-line timeout: 8.0 seconds Always enter boot prompt Boot-time BIOS data saved Large memory (>15M) is NOT used to load initial ramdisk Non-RAID installation Serial line access is disabled Boot prompt message is 65535 bytes No default boot command line
Das war das Ergebnis der Abfrage in Bezug auf den LILO selbst und die globale Sektion innerhalb der Datei /etc/lilo.conf. Der folgende Teil der Ausgabe (desselben Befehls) bezieht sich auf einen einzelnen Eintrag, der zum Start eines Kernels verwendet wird:
61
1451.book Seite 62 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
Images: 2.6.11-custom No password Boot command-line won't be locked No single-key activation VGA mode is taken from boot image Kernel is loaded "high" Initial RAM disk is 1788620 bytes No fallback Options: "root=302"
Wie Sie deutlich sehen, werden auch Parameter angezeigt, die nicht in der Datei lilo.conf vorkommen. Diese Abfrage wurde nämlich mit demselben System erzeugt, von dem auch die Beispieldatei der lilo.conf stammt. Es handelt sich zum Teil um Voreinstellungen, aber auch um Werte, die lilo bei der Abfrage ermittelt hat.
GRUB GRUB ist ebenfalls ein zweistufiger Bootloader. Genau genommen sind es inzwischen drei Stufen, weil aus Gründen der Kompatibilität zu verschiedenen Dateisystemen irgendwann ein »Stage 1,5« hinzuerfunden wurde. Im Gegensatz zu LILO greift GRUB »ganz normal« über das Dateisystem auf den Kernel zu. Deshalb ist es auch nicht nötig, so etwas wie einen Map-Installer auszuführen, wenn ein Kernel modifiziert oder neu ins System integriert wurde. GRUB-Stages Das Programm für den ersten Stage befindet sich im MBR der Festplatte, von der das System starten soll. Es gibt aber normalerweise auch noch eine Kopie in /boot/grub/stage1. Es handelt sich hierbei um eine Binärdatei, weshalb ein normaler Pager eine Fehlermeldung ausgeben wird, wenn Sie versuchen, den Inhalt der Datei zu betrachten. Sie können die Datei im Hexadezimalformat anzeigen, indem Sie folgendes Kommando verwenden: [root@fedora10 grub]# od -h 0000000 48eb 0090 0000 0000 0000020 0000 0000 0000 0000 * 0000060 0000 0000 0000 0000 0000100 00ff 8000 0001 0000 0000120 0275 80b2 59ea 007c 0000140 2000 a0fb 7c40 ff3c 0000160 34e8 f601 80c2 5474
62
stage1 0000 0000 0000 0000 0000 0000 0000 0000 0000 0800 3100 0274 41b4
0000 ebfa 8ec0 c288 aabb
0000 f607 8ed8 be52 cd55
0203 80c2 bcd0 7d7f 5a13
1451.book Seite 63 Dienstag, 7. Juli 2009 2:18 14
102.2 Einen Bootmanager installieren
0000200 7252 8149 55fb 75aa a043 7c41 c084 0575 ...
Für den Stage 1,5 wird dann ein Programm ausgeführt, das mit dem verwendeten Dateisystem übereinstimmt, z.B. reiserfs_stage1_5. Diese Datei befindet sich ebenfalls im Pfad /boot/grub. Die letzte Stufe des Bootloaders (Stage 2) befindet sich wiederum in der Datei /boot/grub/stage2. Dieses Programm stellt das Bootmenü für den Benutzer bereit und ist auch für das Starten des Kernels zuständig. GRUB-Prompt GRUB verfügt über einen Prompt, den Sie verwenden können, um mit dem Bootloader zu interagieren. Das ist etwa dann nötig, wenn aufgrund einer Fehlkonfiguration das System nicht startet. Sie können dann mit GRUB das System manuell booten. Dazu benötigt GRUB Informationen über die Position des Hauptverzeichnisses, den Kernel und, falls vorhanden, die initiale RAM-Disk. Die GRUB-Eingabeaufforderung sieht so aus: grub>
Wenn Sie ein System manuell starten müssen, können Sie folgende Kommandos verwenden: grub> grub> grub> grub>
root (hd0,0) kernel /boot/vmlinuz-2.6.23.1-10.fc7 root=/dev/sda2 initrd /boot/initrd-2.6.23.1-10.fc7.img boot
Es wurde hier davon ausgegangen, dass sich das Verzeichnis /boot auf einer SCSIFestplatte, nämlich /dev/sda1, befindet, während sich das Hauptverzeichnis »/« auf /dev/sda2 befindet. GRUB-Konfigurationsdateien GRUB unterscheidet nicht zwischen SCSI-Festplatten und IDE-Geräten. Die erste Partition auf der ersten Festplatte, die ihm durch ein BIOS übermittelt wird, bezeichnet GRUB als (hd0,0). Dabei spielt die Art des verwendeten Festplattensubsystems keine Rolle. Damit für den weiteren Startverlauf eine Zuordnung möglich ist, benötigt er die Konfigurationsdatei /boot/grub/device.map. In dieser Datei gibt es lediglich eine Zuordnung von der GRUB-Notation zu den »normalen« Linux-Geräten: [root@fedora10 grub]# cat device.map (hd0) /dev/sda
63
1451.book Seite 64 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
In der Datei menu.lst (normalerweise ein Softlink auf grub.conf) finden Sie Einträge, die von der Funktionsweise her der Datei lilo.conf entsprechen: #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Fedora (2.6.23.1-10.fc7) root (hd0,0) kernel /vmlinuz-2.6.23.1-10.fc7 ro root=/dev/VolGroup00/ LogVol00 rhgb quiet initrd /initrd-2.6.23.1-10.fc7.img
Wenn Sie die vorangegangenen Abschnitte aufmerksam gelesen haben, sollten Sie keine Probleme damit haben, diese Datei zu lesen und zu verstehen. Prüfungstipp Für die Prüfung müssen Sie vor allem die Unterschiede zwischen GRUB und dem LILO kennen. Sie müssen wissen, wie GRUB Laufwerke benennt und dass es bei LILO notwendig ist, nach einer Konfigurationsänderung bezüglich des Kernels lilo auszuführen.
102.3 Shared Librarys verwalten Wichtung: 1 Beschreibung: Kandidaten sollten in der Lage sein, die Shared Librarys zu bestimmen, von denen ausführbare Programme abhängen und diese bei Bedarf zu installieren. Wichtigste Wissensgebiete: 왘
Shared Librarys identifizieren
왘
Die typischen Orte für Systembibliotheken identifizieren
왘
Shared Librarys laden
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
ldd
왘
ldconfig
왘
/etc/ld.so.conf
왘
LD_LIBRARY_PATH
64
1451.book Seite 65 Dienstag, 7. Juli 2009 2:18 14
102.3 Shared Librarys verwalten
Allgemeines Um Systemressourcen effizient zu verwenden, werden Programme modular aufgebaut. Die eigentliche Aufgabe, die das Programm ausführt, wird im Code des jeweiligen Programms selbst hinterlegt. Funktionen, die andere Programme auch verwenden, werden dynamisch in das laufende Programm eingebunden. Solche Funktionen sind in sogenannten Librarys enthalten. Es wäre z.B. nicht sinnvoll, wenn jedes Programm seine eigene Druckroutine enthalten würde. Stattdessen bindet ein Programm, wenn es drucken muss, dynamisch eine Bibliothek ein, die dann diese Aufgabe ausführt. Durch diese Vorgehensweise werden Speicherressourcen eingespart. Unter Windows finden Sie diese Bibliotheken als Dateien mit der Erweiterung .dll (Dynamic Link Library). Unter Linux heißen die Bibliotheken Shared Librarys und haben die Erweiterung .so (Shared Object). Programme, die mit solchen Shared Librarys arbeiten, bezeichnet man als »dynamically linked«, während Programme, die den Code der Shared Librarys in sich selbst tragen, als »statically linked« bezeichnet werden.
Verwaltung von Shared Librarys Um zu identifizieren, von welchen Librarys ein Programm abhängt, können Sie das Tool ldd verwenden. Die Ausgabe des Programms zeigt gleichzeitig die Position der benötigten Librarys im Dateisystem an: archangel:/ # ldd /usr/bin/grep linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/tls/libc.so.6 (0x40030000) /lib/ld-linux.so.2 (0x40000000)
Wenn Sie neue Bibliotheken auf einem System installieren, benötigen Sie das Programm ldconfig, damit der dynamische Linker diese Bibliotheken auch verwendet. Zu diesem Zweck liest ldconfig die Datei /etc/ld.so.conf ein. Hier sind alle Verzeichnisse aufgelistet, in denen sich dynamische Librarys befinden: archangel:/ # less /etc/ld.so.conf /usr/X11R6/lib /usr/i486-linux/lib /usr/i486-linux-libc5/lib=libc5 /usr/i486-linux-libc6/lib=libc6 /usr/i486-linuxaout/lib /usr/i386-suse-linux/lib /usr/local/lib ... weitere Zeilen wurden abgeschnitten ...
65
1451.book Seite 66 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
Diese Verzeichnisse werden von ldconfig konsultiert, um die Datei /etc/ ld.so.cache aufzubauen. Danach können die neuen Librarys vom dynamischen Linker verwendet und bei Bedarf eingebunden werden. Um den aktuellen Inhalt der Datei /etc/ld.so.cache anzuzeigen, verwenden Sie folgendes Kommando: archangel:/ # ldconfig -p | less 1128 libs found in cache `/etc/ld.so.cache' libzvbi.so.0 (libc6) => /usr/lib/libzvbi.so.0 libzio.so.0 (libc6) => /usr/lib/libzio.so.0 libzio.so (libc6) => /usr/lib/libzio.so libz.so.1 (libc6) => /lib/libz.so.1 libz.so.1 (libc6) => /usr/lib/libz.so.1 libz.so (libc6) => /usr/lib/libz.so liby2.so.2 (libc6) => /usr/lib/liby2.so.2 libyui.so.2 (libc6) => /usr/lib/libyui.so.2 ... weitere Zeilen wurden abgeschnitten ...
Manche Programme funktionieren nur dann, wenn eine Bibliothek mit einer bestimmten Versionsnummer auf Ihrem System installiert ist. Die Versionsnummer einer einzelnen Bibliothek ermitteln Sie auf folgendem Weg: archangel:/ # ldconfig -p | grep libusb libusb-0.1.so.4 (libc6) => /usr/lib/libusb-0.1.so.4
102.4 Debian-Paketverwaltung verwenden Wichtung: 3 Beschreibung: Kandidaten sollten in der Lage sein, Pakete mit den Debian-Paketwerkzeugen zu verwalten. Wichtigste Wissensgebiete: 왘
Debian-Binärpakete installieren, aktualisieren und entfernen
왘
Pakete finden, die bestimmte Dateien oder Bibliotheken enthalten und installiert sind oder nicht
왘
Paketinformationen bestimmen wie Version, Inhalt, Abhängigkeiten
왘
Integrität des Paketes und Installationsstatus (ob das Paket installiert ist oder nicht)
66
1451.book Seite 67 Dienstag, 7. Juli 2009 2:18 14
102.4 Debian-Paketverwaltung verwenden
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/apt/sources.list
왘
dpkg
왘
dpkg-reconfigure
왘
apt-get
왘
apt-cache
왘
aptitude
Allgemeines In den nächsten Abschnitten sollen Sie erlernen, wie die Paketverwaltung bei Distributionen funktioniert, die auf Debian basieren (Debian, Ubuntu, Mint, Knoppix, Damn Small usw.). Das Selbstkompilieren von Programmen, die Sie als TarBalls aus dem Internet heruntergeladen haben, hat nämlich einen Schönheitsfehler: Sie können diese Programme nicht mehr sauber deinstallieren. Dieser Nachteil wird durch paketbasierte Installationen beseitigt. Der Aufbau der Dateinamen bei Debian-Paketen soll an folgendem Beispiel verdeutlicht werden: fortune-mod_1.99.1-3_i386.deb 왘
Der Name des Paketes ist fortune-mod.
왘
Die Versionsnummer lautet 1.99.1.
왘
Die Revisionsnummer (Release) ist 3.
왘
Die unterstützte Architektur ist i386.
Diese vier Komponenten werden immer durch einen Unterstrich voneinander getrennt. Die meisten Programmierer halten sich an diese Namenskonvention, was das Identifizieren von Paketen im Internet erheblich erleichtert.
Konfigurationsdateien und Verzeichnisse /etc/dpkg/dpkg.cfg Das ist die Konfigurationsdatei für dpkg. In dieser Datei werden die voreingestellten Optionen für dpkg festgelegt. Sie können sich dabei Arbeitsaufwand ersparen, wenn Sie immer dieselben Optionen mit dpkg verwenden. Die Datei wird zeilensepariert ausgewertet. Es steht also in jeder Zeile nur eine Option. Bei den meisten aktuellen Distributionen enthält die Datei im Auslieferungszustand nur eine einzige Zeile, mit der die Log-Datei definiert wird: log /var/log/dpkg.log
67
1451.book Seite 68 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
/var/lib/dpkg/info In diesem Verzeichnis befinden sich zu jedem installierten Paket mehrere Skripte und Dateien, die für eine korrekte Installation und auch später wieder für die Deinstallation benötigt werden. Das Beispiel zeigt die entsprechenden Dateien für den Editor nano: root@ubuntu-server:/var/lib/dpkg/info# -rw-r--r-- 1 root root 12 2007-02-07 -rw-r--r-- 1 root root 1,5K 2007-10-15 -rw-r--r-- 1 root root 2,3K 2007-02-07 -rwxr-xr-x 1 root root 579 2007-02-07 -rwxr-xr-x 1 root root 160 2007-02-07 -rwxr-xr-x 1 root root 379 2007-02-07 -rwxr-xr-x 1 root root 288 2007-02-07
ls -lha | grep nano 12:32 nano.conffiles 23:19 nano.list 12:32 nano.md5sums 12:32 nano.postinst 12:32 nano.postrm 12:32 nano.preinst 12:32 nano.prerm
Wenn Sie nach einer verunglückten Installation manuell das System aufräumen möchten, finden Sie immer in der entsprechenden .list-Datei eine Aufstellung aller zum Programm gehörenden Dateien und Verzeichnisse. Im Falle von nano handelt es sich dabei übrigens um 64 über das System verteilte Dateien. /var/lib/dpkg/status In der Datei status sind Informationen über bereits installierte Pakete hinterlegt. Es wird auch angegeben, ob die Installation vollständig ausgeführt oder ob ein Programm bereits wieder deinstalliert wurde. Das Beispiel zeigt Informationen über einen korrekt installierten nano-Editor: Package: nano Status: install ok installed Priority: important Section: editors Installed-Size: 1624 ... weitere Zeilen wurden abgeschnitten ...
Der nächste Eintrag zeigt ein Paket, das »sauber« deinstalliert wurde: Package: courier-imap Status: deinstall ok config-files Priority: extra Section: mail Installed-Size: 1540 ... weitere Zeilen wurden abgeschnitten ...
68
1451.book Seite 69 Dienstag, 7. Juli 2009 2:18 14
102.4 Debian-Paketverwaltung verwenden
/var/lib/dpkg/available Diese Datei enthält eine Liste der verfügbaren Pakete. Sie beinhaltet Informationen über die Größe des Paketes, die Versionsnummer, Abhängigkeiten, den Autor, die Prozessorarchitektur und vieles andere mehr. Das Beispiel zeigt einen Eintrag für den Editor nano: Package: nano Priority: important Section: editors Installed-Size: 1624 Maintainer: Ubuntu Core Developers Architecture: i386 Version: 2.0.2-1 Replaces: pico Provides: editor Depends: libc6 (>= 2.5-0ubuntu1), libncursesw5 (>= 5.4-5) Suggests: spell Conflicts: nano-tiny (<= 1.0.0-1), pico Size: 286950 Description: free Pico clone with some new features ... weitere Zeilen wurden abgeschnitten ...
/etc/apt/apt.conf Hierbei handelt es sich um die Konfigurationsdatei für die apt-tools. Normalerweise ist hier nur ein Eintrag für den verwendeten Proxy hinterlegt, damit apt-get ohne Probleme Pakete aus dem Internet herunterladen kann. Beispiel: debian40:/# cat /etc/apt/apt.conf Acquire::http::Proxy "http://192.168.0.1:3128";
/etc/apt/sources.list Diese Datei enthält die Quellen für apt-get. Das ist meistens eine Liste mit FTPServern (bei modernen Distributionen auch HTTP-Servern), von denen Software mit apt-get install online installiert werden kann. Zusätzlich sind natürlich auch lokale Quellen in dieser Datei enthalten. Beispiel: root@archangel:~# head /etc/apt/sources.list #deb cdrom:[Ubuntu 8.04 _Hardy Heron_ – Release i386 (20080423)]/ hardy main restricted # See http://help.ubuntu.com/community/ UpgradeNotes for how to upgrade to # newer versions of the distribution. deb http://de.archive.ubuntu.com/ubuntu/
69
1451.book Seite 70 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
hardy main restricted universe multiverse deb-src http://de.archive.ubuntu.com/ubuntu/ hardy main restricted ## Major bug fix updates produced after the final release of the ## distribution. deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restric
DPKG-Programme dpkg Wenn Sie ein Programm auf einem Debian-basierten System installieren wollen, verwenden Sie das Kommando dpkg. Aus Bequemlichkeit greifen aber heutzutage selbst die größten Puristen auf Frontends wie dselect oder apt-get zurück. Prüfungstipp Für die Prüfung müssen Sie mit dpkg absolut vertraut sein. Es werden auch Fragen zu selten verwendeten Optionen von dpkg gestellt.
Manche Optionen von dpkg können sowohl mit einem einzelnen Buchstaben als auch mit einem ganzen Wort verwendet werden. Die beiden folgenden Kommandos installieren jeweils ein Paket: debian40:/pakete# dpkg -i fortune_1.0-861_i386.deb debian40:/pakete# dpkg --install fortune_1.0-861_i386.deb
Entsprechend ist die Ausgabe, die von diesen beiden Kommandos erzeugt wird, ebenfalls identisch: Wähle vormals abgewähltes Paket fortune. (Lese Datenbank ... 75945 Dateien und Verzeichnisse sind derzeit installiert.) Entpacke fortune (aus fortune_1.0-861_i386.deb) ... Richte fortune ein (1.0-861) ...
Die Deinstallation eines Programms, das mit dpkg installiert wurde, erfolgt mit den Schaltern -r oder --remove. Hierbei werden Konfigurationsdateien nicht gelöscht. Wenn Konfigurationsdateien ebenfalls aus dem System entfernt werden sollen, müssen Sie die Optionen -P bzw. --purge verwenden. Es folgt eine Auflistung der wichtigsten Optionen für die Prüfung: 왘
-i bzw. --install installiert das angegebene Paket.
왘
-r bzw. --remove entfernt das angegebene Paket. Konfigurationsdateien blei-
ben aber erhalten. Achtung! Die Option -e ist nicht, wie bei RPM, die EraseFunktion!
70
1451.book Seite 71 Dienstag, 7. Juli 2009 2:18 14
102.4 Debian-Paketverwaltung verwenden
왘
-P bzw. --purge entfernt das angegebene Programm inklusive der Konfigura-
tionsdateien. 왘
-s bzw. --status gibt umfangreiche Informationen über das installierte Paket aus.
왘
-C bzw. --audit zeigt Pakete an, die nur teilweise auf dem System installiert sind.
왘
-L bzw. --listfiles zeigt die Dateien an, die ein Paket installiert hat.
Prüfungstipp Prägen Sie sich für die Prüfung die hier aufgeführten Optionen in beiden Schreibweisen ein. Achten Sie auch auf Groß- und Kleinschreibung.
dselect Bei dselect handelt es sich um ein Frontend für dpkg. Mit dselect können Sie folgende Operationen durchführen: 왘
eine Zugriffsmethode auswählen
왘
die Liste der verfügbaren Pakete erneuern, falls möglich
왘
eine Auswahl der für Ihr System gewünschten Pakete treffen
왘
gewünschte Pakete installieren und aktualisieren
왘
alle unkonfigurierten Pakete konfigurieren
왘
nicht gewünschte Software löschen
dpkg-reconfigure Mit dpkg-reconfigure können Sie ein bereits installiertes Paket neu konfigurieren. Mit dpkg-reconfigure -a können Sie sogar alle installierten Pakete neu konfigurieren. Dieser Vorgang kann aber in Abhängigkeit von der Menge der installierten Pakete sehr viel Zeit in Anspruch nehmen. apt-get Das Programm apt-get ist ein sehr beliebtes Frontend für dpkg. Auch wenn der Name und der Hauptverwendungszweck das implizieren: Man kann mit apt-get nicht nur Programme »bekommen« bzw. »holen«, sondern auch diagnostizieren, neu konfigurieren und deinstallieren. Die Installation eines Paketes mit apt-get ist sehr bequem und erfolgt einfach so: debian40:/# apt-get install fortune Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut... Fertig
71
1451.book Seite 72 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
Achtung, wähle fortune-mod an Stelle von fortune Die folgenden zusätzlichen Pakete werden installiert: fortune-mod fortunes-min librecode0 Vorgeschlagene Pakete: xcontrib Die folgenden NEUEN Pakete werden installiert: fortune-mod fortunes-min librecode0 0 aktualisiert, 3 neu installiert, 0 zu entfernen und 19 nicht aktualisiert. Es müssen noch 0B von 816kB Archiven geholt werden. Nach dem Auspacken werden 1655kB Plattenplatz zusätzlich benutzt. Möchten Sie fortfahren [J/n]?
Wie man sieht, ist apt-get intuitiv bedienbar. Das Programm hat selbst erkannt, dass das Paket, das mit fortune korrespondiert, fortune-mod heißt und installiert dieses automatisch. Abhängigkeiten von anderen Paketen (fortunes-min librecode0) werden ebenfalls vollautomatisch aufgelöst. Es wird angegeben, wie viel Platz das neue Programm auf der Festplatte belegen wird. Die Installation kann in dieser Phase noch unterbunden werden. Die Deinstallation eines Paketes funktioniert genauso, nur dass Sie eben die Option remove verwenden anstatt install: debian40:/# apt-get remove fortune Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut... Fertig Achtung, wähle fortune-mod an Stelle von fortune Die folgenden Pakete werden ENTFERNT: fortune-mod fortunes-min 0 aktualisiert, 0 neu installiert, 2 zu entfernen und 19 nicht aktualisiert. Es müssen 0B Archive geholt werden. Nach dem Auspacken werden 352kB Plattenplatz freigegeben worden sein.
Um die Liste der verfügbaren Pakete zu aktualisieren, können Sie die Option update verwenden: root@archangel:~# apt-get update OK http://security.ubuntu.com hardy-security Release.gpg OK http://de.archive.ubuntu.com hardy Release.gpg OK http://de.archive.ubuntu.com hardy/main Translation-de OK http://de.archive.ubuntu.com hardy/restricted Translation-de OK http://de.archive.ubuntu.com hardy/universe Packages OK http://de.archive.ubuntu.com hardy/multiverse Packages OK http://de.archive.ubuntu.com hardy/main Sources
72
1451.book Seite 73 Dienstag, 7. Juli 2009 2:18 14
102.4 Debian-Paketverwaltung verwenden
OK http://de.archive.ubuntu.com hardy/restricted Sources OK http://de.archive.ubuntu.com hardy/universe Sources OK http://de.archive.ubuntu.com hardy/multiverse Sources OK http://de.archive.ubuntu.com hardy-updates/main Packages Paketlisten werden gelesen... Fertig
Die Ausgabe des Befehls wurde aus Platzgründen gekürzt. Die Auflistung ist normalerweise etwa dreimal so lang. Das Ergebnis der Abfrage wird in der Datei /etc/apt/sources.list abgespeichert. Eine Aktualisierung aller installierten Pakete kann apt-get mit der Option upgrade durchführen. Zwar bieten moderne Linux-Distributionen auch automatische Erinnerungen, die auf die Notwendigkeit von Updates hinweisen, diese Mechanismen setzen allerdings voraus, dass man sich lokal an der Maschine befindet. Ein Update aus der Ferne über ein Terminal wird deshalb so durchgeführt: root@archangel:~# apt-get upgrade Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut Reading state information... Fertig Die folgenden Pakete werden aktualisiert: ghostscript ghostscript-x libgs8 3 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert. Es müssen 3017kB Archive geholt werden. After this operation, 0B of additional disk space will be used. Möchten Sie fortfahren [J/n]? j Hole:1 http://security.ubuntu.com hardy-security/ main libgs8 8.61.dfsg.1-1ubuntu3.2 [2217kB] Hole:2 http://security.ubuntu.com hardy-security/ main ghostscript 8.61.dfsg.1-1ubuntu3.2 [740kB] 85 % [2 ghostscript 366070/740kB 49 %]
Das Programm zeigt den Fortschritt während der Installation jedes Paketes an, wie Sie in der letzten Zeile sehen können. aptitude Da in der Prüfung normalerweise nicht nach grafischen Frontends gefragt wird, soll die Arbeitsweise der Synaptics Paketverwaltung unterschlagen werden. Interessanter ist sowieso die Benutzerschnittstelle aptitude. Mit diesem Programm können Sie zum Beispiel bequem nach Paketen suchen, auch wenn Sie deren genauen Namen nicht kennen. Wenn Sie etwa einen DHCP-Server installieren müs-
73
1451.book Seite 74 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
sen, aber nicht wissen, welches Paket einen solchen Server enthält, versuchen Sie Folgendes: root@archangel:~# aptitude search dhcp p autodns-dhcp – Automatic DNS updates for DHCP p dhcp-client p dhcp-helper – A DHCP relay agent i dhcp3-client – DHCP client p dhcp3-relay – DHCP relay daemon p dhcp3-server – DHCP server for automatic IP address assignment p dhcpdump – Parse DHCP packets from tcpdump p dhcping – DHCP Daemon Ping Program p ebox-dhcp – eBox – DHCP server module p gdhcpd – GTK+ configuration tool for dhcpd3-server p udhcpc – very small DHCP client p udhcpd – very small DHCP server
In der sechsten Zeile ist dann auch tatsächlich der vom ISC empfohlene DHCPServer zu finden. Sie können diesen dann mit apt-get installieren. Einige Optionen, die aptitude versteht, gibt es auch bei apt-get. Die wichtigsten sind update, upgrade, clean und autoclean. Erfahrungsgemäß arbeitet apt-get aber bei update und upgrade zuverlässiger. Es gibt sogar Fälle, in denen aptitude Sie auf diesen Umstand hinweist: W: Duplicate sources.list entry http://de.archive.ubuntu.com hardy/ multiverse Packages (/var/lib/apt/lists/de.archive.ubuntu.com_ ubuntu_dists_hardy_multiverse_binary-i386_Packages) W: Duplicate sources.list entry http://de.archive.ubuntu.com hardy/ multiverse Translation-de (/var/lib/apt/lists/de.archive.ubuntu.com_ ubuntu_dists_hardy_multiverse_i18n_Translation-de) W: Probieren Sie "apt-get update", um diese Probleme zu korrigieren.
Übrigens: Sie können aptitude auch interaktiv verwenden. Führen Sie das Programm einfach mal ohne Optionen oder Parameter aus! apt-cache Mit apt-cache können Sie lediglich den Cache des apt-Systems verwalten. Wenn Sie Programme mit apt-get installieren, werden nämlich die Quellen in einem Cache zwischengespeichert. Dieser befindet sich normalerweise im Verzeichnis /var/cache/apt/archives. Sie können mit der Option stats eine Übersicht über den Cache ausgeben: root@archangel:~# apt-cache stats Gesamtzahl an Paketnamen: 32616 (1305k)
74
1451.book Seite 75 Dienstag, 7. Juli 2009 2:18 14
102.4 Debian-Paketverwaltung verwenden
davon gewöhnliche Pakete: 24910 davon rein virtuelle Pakete: 649 davon einzelne virtuelle Pakete: 1735 davon gemischte virtuelle Pakete: 234 davon fehlend: 5088 Gesamtzahl an unterschiedlichen Versionen: 28361 (1475k) Total Distinct Descriptions: 32098 (770k) Gesamtzahl an Abhängigkeiten: 196493 (5502k) Gesamtzahl an Version/Datei-Beziehungen: 30952 (495k) Total Desc/File relations: 32098 (514k) Gesamtzahl an Bereitstellungen: 5783 (116k) Gesamtzahl an Mustern: 120 (1568) Gesamtmenge an Abhängigkeits/Versionsspeicher: 1010k Gesamtmenge an Slack: 76,7k Gesamtmenge an Speicher: 8970k
Zur Bereinigung des Cache können Sie wahlweise aptitude oder apt-get einsetzen: root@archangel:~# aptitude clean Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut Reading state information... Fertig Lese erweiterte Statusinformationen Initialisiere Paketstatus... Fertig Erzeuge Tag-Datenbank... Fertig
Wenn Sie Informationen über die Abhängigkeiten eines Programms von anderen Programmen oder Bibliotheken benötigen, kann apt-cache Ihnen die gewünschten Informationen aus den Metadaten der Pakete generieren. Das Kommando erzeugt allerdings eine sehr umfangreiche Ausgabe, weshalb hier auf ein Beispiel verzichtet werden soll. alien Wenn Sie ein Programm installieren wollen, das nicht als dpkg-Paket vorliegt, dann können Sie dieses außerirdische Paket mit alien konvertieren. Obwohl alien überwiegend auf Debian-Systemen zum Einsatz kommt, unterstützt es unterschiedliche Formate sowohl als Eingabe- als auch als Ausgabedateiformat. Das Programm erkennt das Format einer Eingabedatei automatisch und wandelt diese in das auf der Kommandozeile angegebene Format um. Folgende Pakettypen werden unterstützt: 왘
rpm (Red Hat)
왘
dpkg (Debian)
75
1451.book Seite 76 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
왘
tgz (Slackware)
왘
pkg (Solaris)
왘
slp (Stampede)
Wenn Sie ein Paket mit alien übersetzen wollen, geben Sie die Quelldatei und das Ausgabeformat an. Sie können das Programm aber auch sofort nach der Konvertierung installieren, wenn Sie die Option -i bzw. --install angeben. Das generierte Quellpaket wird dann nach der Installation automatisch gelöscht. debian40:/aliens# alien fortune-1.0-860.i586.rpm --to-deb fortune_1.0-861_i386.deb generated
In diesem Beispiel ist ein bestehendes RPM-Paket in ein DPKG-Paket übersetzt worden. Die ursprüngliche Datei bleibt erhalten. Beachten Sie, dass die MinorVersionsnummer gegenüber dem Quellpaket um eins erhöht wurde. Wenn Sie dieses Standardverhalten von alien nicht wünschen, können Sie die Option -k oder --keep-version verwenden. Die Übersetzung in andere Paketformate als DPKG geht sinngemäß genauso vonstatten. Ersetzen Sie dazu in dem Schalter --to-deb das deb einfach durch das gewünschte Format (z.B. --to-rpm). Prüfungstipp Sie sollten für die Prüfung mit Debian-Paketen umgehen können. In den neuen Prüfungen (ab April 2009) wird der Akzent allerdings eher auf der Benutzung und Konfiguration von Frontends wie apt-get und aptitude liegen.
102.5 RPM und YUM-Paketverwaltung verwenden Wichtung: 3 Beschreibung: Kandidaten sollten in der Lage sein, Pakete mit den RPM und YUM-Werkzeugen zu verwalten. Wichtigste Wissensgebiete: 왘
Pakete mit RPM und YUM installieren, erneut installieren, aktualisieren und entfernen
왘
Informationen über RPM-Pakete bestimmen wie Version, Status, Abhängigkeiten, Integrität und Signaturen
왘
herausfinden, welche Dateien ein Paket zur Verfügung stellt, und herausfinden, aus welchem Paket eine bestimmte Datei kommt
76
1451.book Seite 77 Dienstag, 7. Juli 2009 2:18 14
102.5 RPM und YUM-Paketverwaltung verwenden
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
rpm
왘
rpm2cpio
왘
/etc/yum.conf
왘
/etc/yum.repos.d/
왘
yum
왘
yumdownloader
Allgemeines Fast alle Distributionen, die nicht auf Debian basieren, verwenden für das Paketmanagement RPM, den Red Hat Package Manager. Er ermöglicht ebenfalls die Installation von Programmen, die bereits fertig kompiliert in einem Binärformat vorliegen. Leider kann dieses System nicht automatisch Abhängigkeiten auflösen und Pakete, die als Grundlagen für das gewünschte Paket notwendig sind, beschaffen und installieren. Diese Aufgabe wird für gewöhnlich von Frontends übernommen. Die meisten modernen Distributionen verwenden hierfür yum. Die Dateinamen der Pakete sind ähnlich aufgebaut wie die von DPKG. Es kommt lediglich statt des Unterstrichs ein normaler Bindestrich zum Einsatz. Den Aufbau zeigt das Beispiel: bash-3.0-15.i586.rpm 왘
Der Name des Paketes ist bash.
왘
Die Versionsnummer lautet 3.0.
왘
Die Revisionsnummer (Release) ist 15.
왘
Die unterstützte Architektur ist i586.
Konfigurationsdateien Die Hauptkonfigurationsdatei von RPM ist die Datei rpmrc. Diese Datei kann sich in verschiedenen Verzeichnissen befinden: 왘
/etc/rpmrc enthält eine systemweite Konfiguration, die auch dann erhalten bleibt, wenn RPM selbst aktualisiert wird. Die Datei ist normalerweise nicht vorhanden und muss bei Bedarf erstellt werden.
왘
/usr/lib/rpm/rpmrc ist eine systemweite Konfiguration. Sie wird überschrieben, wenn RPM aktualisiert wird.
왘
/usr/lib/rpmrc ist ein inzwischen veralteter Speicherort, der vom Verwendungszweck her /usr/lib/rpm/rpmrc entspricht.
77
1451.book Seite 78 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
왘
Die Datei .rpmrc im Verzeichnis eines Benutzers definiert Einstellungen, die nur für einen bestimmten Benutzer gelten sollen.
Prüfungstipp Es gibt selten einen Grund, diese Dateien zu modifizieren, wenn Sie nicht selbst Pakete erstellen. Sie müssen für die Prüfung lediglich wissen, dass diese Datei existiert. Wissen über den genauen Aufbau der Datei ist nicht erforderlich.
Im Verzeichnis /usr/lib/rpm befinden sich etliche Skripte, die RPM verwendet, um das Paketmanagement durchzuführen. Die Datenbanken mit installierten Komponenten, Abhängigkeiten, Konflikten und anderen Informationen für RPM befinden sich in /var/lib/rpm. Diese Dateien können nicht mit einem Editor bearbeitet werden, weshalb sie ebenfalls für die Prüfung belanglos sind.
RPM aktiv verwenden In Bezug auf RPM ist für die Prüfung nur ein einziges Programm Thema, nämlich das Kommando rpm selbst. Damit Sie nicht denken, es gebe darüber hinaus nichts anderes, folgt eine (kommentarlose) Auflistung der RPM-Programme auf meinem Referenzsystem: rpmbuild, rpme, rpmi, rpmqpack, rpmsign, rpmverify, rpm2cpio, rpmdb, rpmgraph, rpmlocate, rpmquery, rpmu, rpmlead, rpmsignature, rpmheader, rpmarchive
Installation, Update und Deinstallation Wenn Sie Software mit rpm installieren, stehen Ihnen, ähnlich wie bei dpkg, Optionen mit einzelnen Buchstaben oder Optionswörter zur Verfügung. So können Sie ein Paket sowohl mit rpm -e als auch mit rpm --erase deinstallieren. Die wichtigsten Optionen zur aktiven Arbeit mit rpm sind: 왘
-i bzw. --install installiert das angegebene Paket (oder die Pakete).
왘
-U bzw. --upgrade aktualisiert das angegebene Paket (oder die Pakete) bzw.
installiert es einfach, wenn keine Vorgängerversion gefunden wird. 왘
-F bzw. --freshen aktualisiert Pakete nur, wenn diese auf dem System bereits
vorhanden sind. 왘
-v bzw. --verbose aktiviert den Verbose-Mode.
왘
-e bzw. --erase (früher --uninstall) entfernt das angegebene Paket.
왘
-h bzw. --hash sorgt für eine Fortschrittsanzeige mit 50 Hash-Zeichen (#).
78
1451.book Seite 79 Dienstag, 7. Juli 2009 2:18 14
102.5 RPM und YUM-Paketverwaltung verwenden
Prüfungstipp Merken Sie sich unbedingt, dass bei rpm die Option -r nicht für remove steht, sondern für requires. Es besteht hier Verwechslungsgefahr mit dpkg!
Ein typisches rpm-Kommando zur Installation wäre folgendes: archangel:/ # rpm -Uhv /i586/fortune-1.0-860.i586.rpm Preparing.. ########################################### [100 %] 1:fortune ########################################### [100 %]
Das Programm war übrigens vorher vom System entfernt worden. Trotzdem hat die Option -U keinen Fehler hervorgerufen, sondern das nicht vorhandene Programm aktualisiert. Zwangsinstallation Sollte ein Paket die Installation verweigern, können Sie es meist trotzdem installieren, wenn Sie die entsprechenden Optionen kennen. Das könnte z.B. der Fall sein, wenn eine oder mehrere Abhängigkeiten nicht erfüllt sind oder wenn ein Konflikt mit einem bestehenden Paket besteht. Sie sollten diese Optionen also nur dann verwenden, wenn Sie sich über die Konsequenzen der Installation im Klaren sind: 왘
--force erzwingt die Installation auch bei bestehenden Konflikten.
왘
--nodeps lässt die Prüfung der Abhängigkeiten aus. Das gilt sowohl für die
Installation als auch für die Deinstallation von Paketen. Für beide Schalter gibt es völlig zu Recht keine Kurzform, damit man sich der Tragweite des jeweiligen Kommandos bewusst wird.
Abfragen der RPM-Datenbank Ein sehr wichtiges Thema in der Prüfung ist die Abfrage der RPM-Datenbank. Hier sollten Sie auch Abfragen kennen, die Ihnen vielleicht unwichtig erscheinen. Grundsätzlich beginnt eine Abfrage mit rpm -q. Sie können aber auch verschiedene Zusatzschalter anwenden, um die Suche zu verfeinern. Man unterscheidet hier zwischen Package Selection Options und Query Options. Erstere dienen dazu, Pakete aufzufinden, die bestimmte Eigenschaften haben. Im Gegensatz dazu verwenden Sie Query Options, um Informationen über ein bestimmtes Paket zu bekommen. Eine einfache Abfrage ohne weitere Optionen dient normalerweise lediglich dazu, festzustellen, ob ein bestimmtes Paket installiert ist und wenn ja, welche Version dieses Paketes:
79
1451.book Seite 80 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
archangel:/ # rpm -q fortune fortune-1.0-860
Wäre das Paket auf dem System nicht vorhanden, würde das Ergebnis so aussehen: archangel:/ # rpm -q fortune package fortune is not installed
Package Selection Options Bei dieser Form der Abfrage geht es darum, ein Paket zu finden, auf das bestimmte Eigenschaften zutreffen. Sie können so auch herausfinden, zu welchem Paket eine bestimmte Datei gehört: archangel:/ # rpm -qf /usr/X11R6/bin/startx xorg-x11-6.8.2-30
Eine beliebte Kombination von Kommandos ist die folgende: archangel:/ # rpm -qa | grep apache apache2-worker-2.0.53-9.15 apache2-mod_php5-5.0.3-14.37 apache2-prefork-2.0.53-9.15 apache2-2.0.53-9.15
Das Kommando rpm -qa (query all) liefert eine Liste aller installierten RPM-Pakete. Mit dem grep wird die Liste anschließend so gefiltert, dass nur Pakete angezeigt werden, in deren Dateiname die Zeichenfolge »apache« vorkommt. Diese Kombination können Sie auch verwenden, wenn Sie sich nicht sicher sind wie der genaue Name eines Paketes lautet. Query Options Die Query Options dienen dazu, Informationen zu einem bestimmten Paket zu bekommen. Sie sollten sich die folgenden Optionen einprägen: 왘
-qR bzw. --requires zeigt Abhängigkeiten zu anderen Paketen an.
왘
-ql bzw. --list führt die im Paket enthaltenen Dateien auf.
왘
-qc bzw. --configfiles zeigt nur die Konfigurationsdateien eines Paketes an.
왘
-qd bzw. --docfiles zeigt nur die Dokumentationsdateien eines Paketes an.
왘
-qi bzw. --info zeigt umfangreiche Informationen zu einem Paket an.
80
1451.book Seite 81 Dienstag, 7. Juli 2009 2:18 14
102.5 RPM und YUM-Paketverwaltung verwenden
Prüfungstipp Achtung! Die Option -i ist, ohne -q verwendet, der Schalter für die Installation. Die Kombination -qi ist jedoch eine Abfrage. Es gibt Prüfungsfragen, die genau auf diese Tatsache abzielen.
Bei allen diesen Abfragen muss unterschieden werden, ob diese an ein bereits installiertes Programm oder direkt an ein Paket gestellt werden. Wenn Sie z.B. ein Paket abfragen wollen, bevor es installiert wird, benötigen Sie zusätzlich die Option p. Beispiel: archangel:/i586 # rpm -qpl zip-2.3-741.i586.rpm /usr/bin/zip /usr/bin/zipcloak /usr/bin/zipnote /usr/bin/zipsplit /usr/share/doc/packages/zip ... weitere Zeilen wurden abgeschnitten ...
Wenn Sie ein bereits installiertes Paket abfragen wollen, lassen Sie die Option p weg. Es wird dann auch nur der reine Paketname ohne die Versionsnummer und Dateierweiterung angegeben: archangel:/storage/suse93/suse/i586 # rpm -ql bzip2 /usr/bin/bunzip2 /usr/bin/bzcat /usr/bin/bzip2 /usr/bin/bzip2recover ... weitere Zeilen wurden abgeschnitten ...
Überprüfung installierter Pakete Sie können ein installiertes RPM-Paket überprüfen. Es wird dann festgestellt, ob zum Paket gehörende Dateien gelöscht oder modifiziert wurden. Dazu verwenden Sie einfach den Schalter -V. Dieser steht in diesem Fall nicht für verbose, sondern für verify. Die Ausgabe einer Überprüfung könnte so aussehen: archangel:/ # rpm -V samba S.5....T c /etc/samba/smbpasswd S.5....T c /etc/samba/smbusers S.5....T c /etc/xinetd.d/swat
Das Ergebnis der Überprüfung zeigt Änderungen an den aufgeführten Dateien. Da es sich hierbei um Konfigurationsdateien handelt, ist das auch nicht weiter
81
1451.book Seite 82 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
beunruhigend. Die Bezeichnungen vor den Dateinamen bedeuten bei der Überprüfung Folgendes: 왘
S (Size) – die Größe weicht vom Original ab.
왘
M (Mode) – die Berechtigungen auf die Datei wurden geändert.
왘
5 (MD5) – die Checksumme ist abweichend.
왘
D (Device) – Fehler in Gerätenummern.
왘
L (Link) – Fehler im Pfad eines Softlinks.
왘
U (User) – der Besitzer der Datei wurde geändert.
왘
G (Group) – die Besitzergruppe einer Datei wurde geändert.
왘
T (Time) – die Änderungszeit der Datei hat sich geändert.
Die einzelnen Fehlercodes müssen Sie nicht auswendig kennen. Es reicht, zu wissen, dass Sie eine Paketüberprüfung grundsätzlich durchführen können.
Pakete umwandeln Wie Sie RPM-Pakete installieren und auflisten, haben Sie bereits gelernt. Aber was ist eigentlich, wenn man aus einem RPM-Paket nur eine bestimmte Datei heraus extrahieren möchte? An dieser Stelle müssen normale RPM-Tools leider passen. Die einzige sinnvolle Möglichkeit besteht momentan darin, mit rpm2cpio das RPM-Paket in ein cpio-Paket umzuwandeln und daraus die Datei zu extrahieren. Es wäre natürlich auch möglich, das Paket einfach zu installieren, die gewünschte Datei zu sichern und das Paket anschließend wieder zu deinstallieren. Aber das wäre wirklich etwas umständlich. Das Programm rpm2cpio kommt übrigens völlig ohne Optionen aus, was in Bezug auf die Prüfung natürlich erfreulich ist. Lediglich das RPM-Paket muss als Option übergeben werden: archangel:~ # rpm2cpio samba-3.3.2-0.33.rpm >samba.cpio
Als Ergebnis erhalten Sie dann eine cpio-Datei. Wenn Sie wissen, welche Datei Sie einzeln extrahieren möchten, können Sie die Ausgabe von rpm2cpio auch direkt an cpio übergeben: archangel:~ # rpm2cpio samba-3.3.2-0.33.rpm |cpio -ivd usr/share/ man/man7/samba.7 /usr/share/man/man7/samba.7 12 Blocks
Auf diese Weise wurde nur die reine Manpage von Samba auf das System installiert.
82
1451.book Seite 83 Dienstag, 7. Juli 2009 2:18 14
102.5 RPM und YUM-Paketverwaltung verwenden
yum und der yumdownloader Mit dem Programm yum können Sie ähnlich wie mit apt-get Programme installieren. Nur dass es sich in diesem Fall um RPM-Pakete und nicht DPKG-Pakete handelt. Die Syntax ist sogar relativ ähnlich. Die Hauptkonfigurationsdatei von yum ist /etc/yum.conf. Hier wird unter anderem das Cache-Verzeichnis für Pakete festgelegt. In der Standardeinstellung befindet es sich unter /var/cach/yum. Im Verzeichnis /etc/yum.repos.d befinden sich Dateien mit der Dateierweiterung repo. In diesen Dateien befinden sich Verweise auf URLs, die Quellen für RPM-Pakete enthalten. Um ein Programm mithilfe von yum zu suchen, gehen Sie ähnlich vor wie bei apt-get: [root@centos01 /]# yum search fortune Loading "installonlyn" plugin Setting up repositories extras 100 % |=========================| 1.1 kB 00:00 updates 100 % |=========================| 951 B 00:00 base 100 % |=========================| 1.1 kB 00:00 addons 100 % |=========================| 951 B 00:00 Reading repository metadata in from local files primary.xml.gz 100 % |=========================| 90 kB 00:00 ################################################## 298/298 primary.xml.gz 100 % |=========================| 101 kB 00:00 ################################################## 156/156 primary.xml.gz 100 % |=========================| 878 kB 00:03 ################################################## 2508/2508 primary.xml.gz 100 % |=========================| 157 B 00:00 Excluding Packages in global exclude list Finished fortune-mod.i386 1.99.1-7.el5.centos extras Matched from: fortune-mod A program which will display a fortune Fortune-mod contains the ever-popular fortune program, which will display quotes or witticisms. Fun-loving system administrators can add fortune to users' .login files, so that the users get their dose of wisdom each time they log in. http://www.redellipse.net/code/fortune
Die Ausgabe des Programms ist recht umfangreich und detailliert. Sie erfahren unter anderem auch, dass das Paket, das tatsächlich benötigt wird, fortune-mod
83
1451.book Seite 84 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
heißt. Mit dem folgenden Kommando wird fortune ähnlich wie mit apt-get heruntergeladen und installiert: [root@centos01 /]# yum install fortune-mod.i386 Loading "installonlyn" plugin Setting up Install Process Setting up repositories Reading repository metadata in from local files Excluding Packages in global exclude list Finished Parsing package install arguments Resolving Dependencies --> Populating transaction set with selected packages. Please wait. ---> Downloading header for fortune-mod to pack into transaction set. fortune-mod-1.99.1-7.el5. 100 % |================| 19 kB 00:00 ---> Package fortune-mod.i386 0:1.99.1-7.el5.centos set to be updated --> Running transaction check --> Processing Dependency: librecode.so.0 for package: fortune-mod --> Restarting Dependency Resolution with new changes. --> Populating transaction set with selected packages. Please wait. ---> Downloading header for recode to pack into transaction set. recode-3.6-22.el5.centos. 100 % |===============| 8.3 kB 0:00 ---> Package recode.i386 0:3.6-22.el5.centos set to be updated --> Running transaction check Dependencies Resolved =============================================================== Package Arch Version Repository Size =============================================================== Installing: fortune-mod i386 1.99.1-7.el5.centos extras 1.2 M Installing for dependencies: recode i386 3.6-22.el5.centos extras 837 k Transaction Summary =============================================================== Install 2 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 2.0 M Is this ok [y/N]: y
Das Programm prüft nochmals die bereits bekannten Quellen (Repositorys), stellt fest, welche Abhängigkeiten noch aufgelöst werden müssen, und fragt dann nach, ob die Installation tatsächlich durchgeführt werden soll. Sobald die Abfrage bestätigt wurde, beginnen der Download und die anschließende Installation:
84
1451.book Seite 85 Dienstag, 7. Juli 2009 2:18 14
102.5 RPM und YUM-Paketverwaltung verwenden
Downloading Packages: (1/2): fortune-mod-1.99.1 100 % |===============| 1.2 MB 00:03 (2/2): recode-3.6-22.el5. 100 % |===============| 837 kB 00:02 Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing: recode ######################### [1/2] Installing: fortune-mod ######################### [2/2] Installed: fortune-mod.i386 0:1.99.1-7.el5.centos Dependency Installed: recode.i386 0:3.6-22.el5.centos Complete!
Wenn das Programm nicht mehr benötigt wird, kann es mit der Option remove wieder entfernt werden. Auch diese Vorgehensweise ist mit apt-get identisch: [root@centos01 ~]# yum remove fortune-mod Loading "installonlyn" plugin Setting up Remove Process Resolving Dependencies --> Populating transaction set with selected packages. Please wait. ---> Package fortune-mod.i386 0:1.99.1-7.el5.centos set to be erased --> Running transaction check Dependencies Resolved ============================================================== Package Arch Version Repository Size ============================================================== Removing: fortune-mod i386 1.99.1-7.el5.centos installed 2.8 M Transaction Summary ============================================================== Install 0 Package(s) Update 0 Package(s) Remove 1 Package(s) Is this ok [y/N]: y
Nach der Bestätigung der Sicherheitsabfrage wird das Programm dann deinstalliert. Angeblich beginnt dieser Vorgang mit einem Download: Downloading Packages: Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Removing : fortune-mod
######################### [1/1]
85
1451.book Seite 86 Dienstag, 7. Juli 2009 2:18 14
Topic 102: Linux-Installation und -Paketverwaltung
Removed: fortune-mod.i386 0:1.99.1-7.el5.centos Complete!
Prüfungstipp Sie können (und sollten) noch einige andere Optionen von yum in der Manpage nachlesen. Beachten Sie bitte den Umstand, dass die Option update hier nicht die Repositorys aktualisiert wie bei apt. Vielmehr wird hierdurch die Aktualisierung installierter Pakete initiiert. Solche Unterschiede werden gerne in Prüfungen thematisiert.
Der yumdownloader ist lediglich ein Hilfsmittel, das RPM-Pakete aus dem Internet herunterlädt. Er greift hierbei automatisch auf Quellen zurück, die unter den Repositorys in /etc/yum.repos.d/ konfiguriert sind. Folgende Optionen können verwendet werden: 왘
--destdir gibt ein Zielverzeichnis für den Download an. Alternativ wird das aktuelle Verzeichnis verwendet.
왘
--urls zeigt lediglich die Quell-URLs an. Ein Download wird nicht durchge-
führt. 왘
--resolve löst Abhängigkeiten auf und sorgt dafür, dass zusätzlich benötigte Pakete automatisch heruntergeladen werden.
왘
--source lädt statt der Binärdateien die Programmquellen herunter.
Prüfungstipp Die Thematik Paketmanagement sollte nicht auf die leichte Schulter genommen werden. Es gibt garantiert viele Prüfungsfragen zu diesem Thema, die Detailwissen verlangen. Leider ist es (im Moment) nicht mehr möglich, zwischen einer RPM- und einer DPKG-Prüfung zu wählen. Deshalb müssen Sie beide Systeme genau kennen. In den neuen Prüfungen (ab April 2009) wird es eine Verlagerung des Schwerpunktes auf yum geben.
86
1451.book Seite 87 Dienstag, 7. Juli 2009 2:18 14
Ein großer Teil dessen, was ganz selbstverständlich als Linux bezeichnet wird, entspringt in Wirklichkeit dem GNU-Projekt. In dem nun folgenden Kapitel geht es um einen kleinen Teil von GNU. GNU is Not Unix. GNU is Not Unix. GNU is Not U...
Topic 103: GNU- und Unix-Kommandos 103.1 Auf der Kommandozeile arbeiten Wichtung: 4 Beschreibung: Kandidaten sollten in der Lage sein, über die Kommandozeile mit Shells und Kommandos zu interagieren. Dieses Prüfungsziel setzt die Bash als Shell voraus. Wichtigste Wissensgebiete: 왘
einzelne Shell-Kommandos und einzeilige Kommandofolgen verwenden, um einfache Aufgaben auf der Kommandozeile zu lösen
왘
die Shell-Umgebung verwenden und anpassen, etwa um Umgebungsvariablen zu definieren, zu verwenden und zu exportieren
왘
die Kommando-Vorgeschichte verwenden und ändern
왘
Kommandos innerhalb und außerhalb des definierten Suchpfads aufrufen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
.
왘
bash
왘
echo
왘
env
왘
exec
왘
export
왘
pwd
왘
set
왘
unset
87
1451.book Seite 88 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
왘
man
왘
uname
왘
history
Allgemeines Inzwischen gibt es für Linux zwar etliche grafische Frontends, und auch die meisten administrativen Tätigkeiten können inzwischen mit der Maus ausgeführt werden, aber das wichtigste Eingabegerät bleibt bei der Systemverwaltung immer noch die Tastatur. Damit Sie im Textmodus mit dem Computer kommunizieren können, benötigen Sie eine Shell. Der Begriff Shell bedeutet in der englischen Sprache Schale, was genau den Punkt trifft, weil man über diese Schale mit dem Kern(el) Informationen austauschen kann. Unter Linux wird standardmäßig die Bash als Shell verwendet. Hierbei handelt es sich um eine Weiterentwicklung der ursprünglichen Unix-Shell »sh«. Die Shell »sh« ist immer noch Bestandteil von Linux, wird aber zumindest als Login-Shell nicht mehr so oft verwendet. Die Shell »sh« wurde von Stephen Bourne bereits 1977 entwickelt, während die Bash (Bourne again shell) als Teil des GNU-Projektes erst Ende der 80er-Jahre des letzten Jahrhunderts von Brian Fox und Chet Ramey geschrieben wurde. Die Bezeichnung Bash ist ein Wortspiel und kann als »Born Again« oder »Bourne Again« gelesen werden. Weitere bekannte, unter Linux verwendete Shells sind »ksh« (Korn Shell), »csh« (C-Shell), »tcsh« (eine Erweiterung der C-Shell), »zsh« (mit ksh verwandte Z-Shell), »rsh« (Remote Shell) und einige mehr.
Aufbau eines Shell-Kommandos Ein Kommando besteht aus bis zu drei verschiedenen Komponenten. Die erste Komponente ist das Kommando selbst, also eine ausführbare Datei, ein Skript oder ein shell-interner Befehl. Ein Kommando kann auch für sich allein stehen und ohne Optionen oder Argumente funktionieren: archangel:~ # mount
Wenn das Kommando mount ohne Optionen oder Argumente ausgeführt wird, zeigt es aktuell eingehängte Dateisysteme an. Es gibt aber auch Konstellationen, in denen ein Kommando mit einer oder mehreren Optionen ausgeführt wird: archangel:~ # mount -a
In diesem Beispiel wurde mount mit der Option -a ausgeführt. Das Programm mount würde mit dieser Option alle in der Datei /etc/fstab aufgeführten Dateisysteme einhängen.
88
1451.book Seite 89 Dienstag, 7. Juli 2009 2:18 14
103.1 Auf der Kommandozeile arbeiten
Es ist aber auch möglich, mount ausschließlich mit Argumenten zu versehen: archangel:~ # mount /dev/hda1 /boot
Argumente unterscheiden sich von Optionen. Eine Option sagt einem Programm, wie es sich verhalten soll. Argumente teilen einem Programm mit, was es verarbeiten soll. Es ist möglich, einem Programm sowohl mehrere Optionen als auch mehrere Argumente zu übergeben. Bei vielen Programmen ist die Reihenfolge sogar variabel: mount -o username=antje,password=xy //fs1/data /mnt/ -t smbfs
Das Beispiel zeigt ein »Gemisch« mit einer Option vorn, einer Option hinten und den Argumenten in der Mitte. Der mount-Befehl baut in diesem Fall eine Netzwerkverbindung zu einem Windows-Computer auf. Konsultieren Sie im Zweifelsfall immer die Manpage eines Programms, wenn Sie herausfinden wollen, wie Optionen und Argumente übergeben werden müssen.
Übergabe der Optionen Bei der Übergabe von Optionen gibt es mehrere gängige Methoden. Einige Kommandos verlangen, dass den Optionen ein Bindestrich vorangestellt wird, andere arbeiten auch ohne einleitenden Bindestrich. Außerdem sehen viele Programme vor, dass ganze Worte als Optionen verwendet werden. Diesen werden dann in der Regel zwei Bindestriche vorangestellt. Das folgende Beispiel kennen Sie sinngemäß schon aus dem vorangegangenen Kapitel: archangel:~ # rpm --install -vh /i586/fortune-1.0-860.i586.rpm Preparing.. ########################################### [100 %]
Diesmal wurden aber absichtlich mehrere Formen der Optionsübergabe kombiniert. Es sind ein Optionswort mit zwei vorangestellten Bindestrichen und zwei Optionen mit einem gemeinsamen vorangestellten Bindestrich vorhanden. Ein weiterer prominenter Vertreter der flexiblen Programme ist tar. Sie können tar mit normalen Optionen oder Optionsworten verwenden. Außerdem kann tar auch Optionen ohne vorangestellte Bindestriche übernehmen. Die folgenden vier Kommandos führen bei tar zu demselben Ergebnis: # # # #
tar tar tar tar
-x -z -v -f xmbmon205.tar.gz -xzvf xmbmon205.tar.gz xvzf xmbmon205.tar.gz --extract --gzip --verbose --file=xmbmon205.tar.gz
89
1451.book Seite 90 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Umgebungsvariablen und Shell-Variablen Grundsätzlich haben Variablen die Aufgabe, Werte aufzunehmen. Diese können dann von einem Programm ausgewertet und weiterverarbeitet werden. Variablen beeinflussen aber auch das Erscheinungsbild und Verhalten des ganzen Betriebssystems. Sie können sich den Inhalt einer Variablen einfach durch die Eingabe des Kommandos echo, gefolgt von einem Dollarzeichen und dann der Variablen selbst, ausgeben lassen: archangel:~ # echo $OSTYPE linux
Man unterscheidet auf einem Unix- oder auch Linux-System zwischen Shell-Variablen und Umgebungsvariablen. Die Unterschiede zwischen diesen beiden Variablentypen liegen einerseits darin, durch welche Konfigurationsdateien sie deklariert werden und demzufolge wann und durch welches Programm sie ausgewertet werden, und andererseits in ihrem Wirkungsbereich: 왘
Umgebungsvariablen gelten für alle Shells, die ein Benutzer verwendet. Die Inhalte dieser Variablen werden an Subshells vererbt. Das bedeutet, dass beim Aufruf einer Subshell ein automatischer Export der Variablen in diese Subshell stattfindet. Bei Umgebungsvariablen werden normalerweise Großbuchstaben verwendet.
왘
Shell-Variablen müssen in jeder Subshell, die durch den Benutzer oder ein Skript gestartet wird, neu deklariert werden. Es findet standardmäßig keine Vererbung statt. Für Shell-Variablen verwendet man üblicherweise Kleinbuchstaben.
Wenn sich ein Benutzer an einem System anmeldet, werden bereits mehrere Variablen definiert. Wenn er dann weitere Shells öffnet oder Skripte ausführt, werden weitere Variablen deklariert. Dafür sind folgende Konfigurationsdateien unter Linux vorhanden: 왘
/etc/profile ist die erste Konfigurationsdatei, die bei der Anmeldung eines Benutzers eingelesen wird. Sie enthält erste Umgebungsvariablen und (für die Prüfung besonders wichtig!) die erste PATH-Anweisung. Damit sich Änderungen an dieser Datei auswirken, muss sich der Benutzer gegebenenfalls ab- und wieder anmelden.
왘
/etc/bashrc kann von der .bashrc eines Benutzers geladen werden. Sie enthält systemweite Einstellungen, Aliase und Funktionen. Diese Datei wird beim Start jeder Shell neu eingelesen und erfordert deshalb nach Änderung keine Neuanmeldung des Benutzers.
90
1451.book Seite 91 Dienstag, 7. Juli 2009 2:18 14
103.1 Auf der Kommandozeile arbeiten
왘
~/.bash_profile wird (falls vorhanden) nur bei einer Neuanmeldung eingelesen und sofort nach /etc/profile ausgeführt. Sie beinhaltet zusätzliche Pfadanweisungen (z.B. das Heimatverzeichnis), den zu verwendenden Standard-Editor und benutzerspezifische Umgebungsvariablen.
왘
~/.bash_login ist eine Alternative zu .bash_profile und wird auch nur dann abgearbeitet, wenn die Datei .bash_profile nicht existiert. Auch diese Datei wird nur während der Anmeldung verwendet. Inhalt und Verwendungszweck entsprechen der .bash_profile.
왘
~/.profile ist die ursprüngliche Konfigurationsdatei der Bash. Sie wird nur während der Anmeldung eingelesen, und das auch nur dann, wenn weder eine .bash_profile- noch eine .bash_login-Datei im Verzeichnis des Benutzers existieren. Inhalt und Verwendungszweck entsprechen der .bash_profile und .bash_login.
왘
~/.bashrc ist die andere, ursprüngliche Konfigurationsdatei der Bash. Sie wird in jedem Fall eingelesen, und zwar auch beim Aufruf einer neuen Shell. Nach Änderungen in dieser Datei ist entsprechend keine Neuanmeldung des Benutzers erforderlich. Sie beinhaltet im Wesentlichen Aliase und Funktionen.
왘
~/.bash_logout ist eine optionale Datei, die ausgeführt wird, wenn der Benutzer sich abmeldet. Sie könnte z.B. den Monitor löschen.
Sie können sich alle aktuell gesetzten Shell-Variablen anzeigen lassen, indem Sie das Kommando set ohne Optionen und Argumente verwenden. Da die Ausgabe des Kommandos recht umfangreich ist, lohnt sich eine Ausgabe mit dem Pager less: archangel:~ # set | less BASH=/bin/bash BASH_ARGC=() BASH_ARGV=() ... ca. 800 Zeilen wurden abgeschnitten ...
Um die Umgebungsvariablen aufzulisten, verwenden Sie das Kommando env. Auch hier sollten Sie less zur Anzeige verwenden: archangel:~ # env | less LESSKEY=/etc/lesskey.bin HOSTNAME=archangel HOST=archangel TERM=xterm SHELL=/bin/bash
91
1451.book Seite 92 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
... ca. 60 Zeilen wurden abgeschnitten ...
Wenn Sie selbst eine Variable deklarieren müssen, können Sie das einfach durch Eingabe der Variablen, gefolgt von dem zuzuweisenden Wert an der Eingabeaufforderung, erledigen. Variablen, die auf diese Art Werte erhalten, werden aber nicht automatisch in Subshells exportiert, wie die folgende Befehlsfolge demonstriert: archangel:~ archangel:~ 5000 archangel:~ archangel:~
# x=5000 # echo $x # bash # echo $x
archangel:~ #
Im ersten Schritt wurde der Variablen x der Wert 5000 zugewiesen. Anschließend wurde die Variable mit dem echo-Kommando ausgegeben. In der vierten Zeile wird mit dem Kommando bash eine Subshell gestartet. Der Versuch, die Variable mit dem echo-Befehl auszugeben, schlägt fehl, weil keine Vererbung der Variablen in die Subshell stattgefunden hat. Wenn der Inhalt einer Variablen in einer Subshell benötigt wird, muss die Variable exportiert werden. Beispiel: archangel:~ archangel:~ Hans archangel:~ archangel:~ archangel:~ Hans
# Name=Hans # echo $Name # export Name # bash # echo $Name
Diesmal wurde die Variable Name mit dem Kommando export exportiert, bevor die Subshell gestartet wurde. Wie der zweite echo-Befehl zeigt, steht die Variable danach in der Subshell zur Verfügung. Es ist aber auch möglich, die Deklaration und den Export einer Variablen in einem einzigen Schritt durchzuführen. Das wird in der ersten Zeile des folgenden Beispiels demonstriert: archangel:~ # export Name=Willi archangel:~ # bash archangel:~ # echo $Name Willi
92
1451.book Seite 93 Dienstag, 7. Juli 2009 2:18 14
103.1 Auf der Kommandozeile arbeiten
Prüfungstipp Achtung: Eine Variable kann niemals in eine übergeordnete Shell exportiert werden, sondern nur in eine Subshell. In der Prüfung wird man Sie mit diesem Verhalten konfrontieren.
Wenn Sie den Inhalt einer Variablen nicht mehr benötigen, sollten Sie diese mit dem Kommando unset wieder zurücksetzen. Es macht auch Sinn, zu Beginn eines Skripts zunächst alle verwendeten Variablen zurückzusetzen. Damit verhindern Sie, dass eventuell exportierte Variablen mit gleichen Bezeichnungen den Funktionsablauf Ihres Skripts stören. Beispiel: archangel:~ # unset Name
Beliebte Variablen für die Prüfung Manche Variablen werden in der Prüfung immer wieder abgefragt. Dazu gehören besonders die folgenden: 왘
$HISTSIZE definiert die Anzahl der Kommandos, die in der Befehls-History aufbewahrt werden. Diese Variable wird normalerweise in der Datei /etc/ profile festgelegt.
왘
$PS1 bestimmt das Aussehen der Eingabeaufforderung (Prompt). Beispiel: harald@archangel:~> echo $PS1 \u@\h:\w>
Die Zeichen \u stehen für Username. Das @ wird normal ausgegeben. Die Zeichen \h werden mit dem Host-Namen ersetzt. Es folgt ein Doppelpunkt. Anschließend zeigt \w für Working Directory das aktuelle Verzeichnis an. Die Tilde ~ repräsentiert hierbei das Heimatverzeichnis des Benutzers. Es folgt ein >. Der Prompt kann durch Änderung der Variablen PS1 den eigenen Wünschen angepasst werden. Es empfiehlt sich dann eine Konfiguration in der Datei /etc/bashrc. 왘
$? enthält den Errorlevel des zuletzt ausgeführten Kommandos. In der Regel bedeutet der Wert 0 in dieser Variablen, dass das letzte Programm erfolgreich ausgeführt wurde. Die Fehlerwerte variieren von Programm zu Programm. Beliebte Werte sind 1 und 127. Beispiel: archangel:~ # Kommando, das es nicht gibt bash: Kommando: command not found archangel:~ # echo $? 127
Das »Kommando, das es nicht gibt« hat einen Errorlevel von 127 zur Folge.
93
1451.book Seite 94 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
왘
$1, $2 usw. enthalten die Optionen und Argumente, die an ein Programm übergeben werden. Sie werden im Normalfall von dem gestarteten Programm oder Skript selbst ausgewertet. Mehr über dieses Thema erfahren Sie im zweiten Teil dieses Buches.
Bash-Befehls-History und automatisches Vervollständigen von Befehlen Damit Sie auf der Kommandozeile effizienter arbeiten können, stellt die Bash Ihnen noch zwei hervorragende Hilfsfunktionen zur Verfügung. Stellen Sie sich vor, Sie wollen das folgende Programm entpacken: linux:/dl/ # tar xvzf ez-ipupdate-3.0.11b7-linux-i386.tar.gz
Die Wahrscheinlichkeit ist recht hoch, dass man sich bei diesem langen Dateinamen vertippt, und Dateinamen von solchem Ausmaß sind unter Linux nicht gerade die Ausnahme. Mit der automatischen Befehlsvervollständigung der Bash ist das kein Problem mehr. Der Befehl muss nur so weit ausgeschrieben werden, dass die Shell diesen eindeutig identifizieren kann. Danach betätigen Sie die Tabulatortaste: linux:/dl/ # tar xvzf ez[TAB]
Dieser Befehl sollte ausreichen, um den Tar-Ball zu entpacken. Wenn es beim Betätigen der TAB-Taste mehrere Möglichkeiten zur Vervollständigung des Kommandos gibt, bekommen Sie einen akustischen Hinweis. Sie können dann durch wiederholtes Betätigen der TAB-Taste eine Auswahl der Möglichkeiten zur Vervollständigung erhalten. Eine weitere nützliche Funktion der Bash ist die Befehls-History. Alle Befehle, die Sie verwenden, werden in einer Datei mit der Bezeichnung .bash_history abgespeichert. Der Punkt zu Beginn der Datei ist schon ein Hinweis darauf, dass es sich um eine Datei handelt, die im Heimatverzeichnis eines Benutzers abgelegt wird. Wie viele Kommandos in der History-Liste zwischengespeichert werden, wird über die Variable HISTSIZE festgelegt. Sie finden diese Variable normalerweise in der Datei /etc/profile. Um bereits verwendete Befehle zu wiederholen und gegebenenfalls zu editieren, stehen Ihnen verschiedene Möglichkeiten zur Verfügung. Die beliebteste ist wahrscheinlich die Verwendung der »Cursor nach oben«-Taste. Hierdurch werden die zuletzt verwendeten Befehle in umgekehrter Reihenfolge aufgerufen. Dieses Verhalten kennen DOS-Anwender auch von doskey. Weitere Möglichkeiten zur Verwendung der History sind:
94
1451.book Seite 95 Dienstag, 7. Juli 2009 2:18 14
103.1 Auf der Kommandozeile arbeiten
왘
!! – Dieses Kommando wird als Bang-Bang bezeichnet und führt den letzten Befehl der History noch einmal aus.
왘
!n – Wenn Sie einfach den Befehl history eingeben, bekommen Sie eine nummerierte Auflistung der zuletzt verwendeten Befehle. Sie können dann n mit der Nummer des gewünschten Befehls ersetzen.
왘
!-n führt den letzten Befehl -n aus. Wenn Sie !-2 eingeben, wird der vorletzte
Befehl wiederholt. 왘
! führt den letzten Befehl aus, der mit
beginnt. Wenn Sie etwa das Kommando tail /var/log/messages noch einmal wiederholen möchten, geben Sie einfach !ta ein. 왘
!? führt den letzten Befehl aus, in dem vor-
kommt.
Befehlseingabe Wie man einen »normalen« Befehl eingibt, wissen Sie schon lange, aber es gibt darüber hinaus noch ein paar spezielle Befehle. Sie können z.B. mehrere Befehle in einer einzigen Befehlszeile ausführen, indem Sie die einzelnen Kommandos einfach durch Semikolon getrennt aufzählen: archangel:/ # df -h;free -m
Dieses Kommando zeigt nacheinander die Festplattenbelegung und anschließend die aktuelle Speicherverwendung an. Umgekehrt können Sie lange Kommandos über mehrere Zeilen verteilen, indem Sie den Befehl mit einem Backslash aufteilen: mount -o username=harald,password=P@sswort47 \ -t smbfs \ //archangel/storage /mnt/storage
Der unübersichtliche, lange Befehl wurde an sinnvollen Stellen abgeteilt und so über mehrere Zeilen verteilt. Bewirkt wurde die Teilung durch jeweils einen Backslash am Ende der ersten beiden Zeilen. Beachten Sie bitte, dass hinter den Backslashes keine Leerzeichen stehen dürfen.
PATH-Variable Wenn Sie ein Programm ausführen wollen, das sich nicht in einem in Ihrer PATHVariablen enthaltenen Verzeichnis befindet, müssen Sie den kompletten Pfad zu diesem Programm auf der Kommandozeile mit angeben. Ein klassisches Beispiel
95
1451.book Seite 96 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
dafür sind die Startskripte in /etc/init.d. Dieses Verzeichnis befindet sich üblicherweise nicht in der PATH-Variablen. Deshalb muss z.B. Apache unter Angabe des Pfadnamens gestartet werden: archangel:~ # /etc/init.d/apache2 start
Wenn Sie ein Programm ohne Angabe eines Pfades starten, prüft die Shell zunächst, ob es sich um ein internes Kommando der Shell handelt. Dazu zählen: echo, bg, fg, jobs, kill, pwd, set, unset und viele mehr. Falls kein passendes Kommando gefunden wird, sucht die Shell das Programm in allen Verzeichnissen, die in der PATH-Variablen enthalten sind. Sollten mehrere Programme mit dem gleichen Namen vorhanden sein, wird das zuerst gefundene ausgeführt. Sie können in einem solchen Fall das Kommando which verwenden, um festzustellen, welches Programm die Shell automatisch ausführt: archangel:~ # which less /usr/bin/less
Es ist zu beachten, dass ein Programm auch dann nicht ohne Pfadangabe ausgeführt wird, wenn man sich aktuell in dessen Verzeichnis befindet. Dieses Verhalten gibt es unter DOS, aber nicht bei Linux. Sie können ein Programm, das sich im aktuellen Verzeichnis befindet, aber auch starten, indem Sie ./ dem Programm voranstellen. Die Zeichen ./ repräsentieren das aktuelle Verzeichnis. Sie können z.B. Konfigurationsscripts von Tar-Balls im aktuellen Verzeichnis ausführen, indem Sie folgende Syntax verwenden: archangel:/usr/src/xmbmon205 # ./configure
Wenn Sie einen Prompt verwenden, der Ihnen nicht anzeigt, in welchem Verzeichnis Sie sich gerade befinden, dann verwenden Sie das Kommando pwd (Path of Working Directory) ohne Optionen. Der Pfad wird Ihnen dann angezeigt: archangel:/usr/src/xmbmon205 # pwd /usr/src/xmbmon205
Sie können sich den Inhalt Ihrer PATH-Variablen, genau wie den anderer Variablen, anzeigen lassen: archangel:/ # echo $PATH /sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/ usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/ jvm/jre/bin
96
1451.book Seite 97 Dienstag, 7. Juli 2009 2:18 14
103.1 Auf der Kommandozeile arbeiten
Rekursive Befehlsausführung Wenn ein Kommando rekursiv ausgeführt wird, dann bezieht sich sein Wirkungsbereich nicht nur auf das angegebene Verzeichnis, sondern auch auf alle Unterverzeichnisse und alle darin enthaltenen Dateien. Programme, die rekursiv ausgeführt werden können, verstehen normalerweise die Option --recursive oder kurz -R. Typische Vertreter für diese Programme sind rm, chmod, chown, chgrp und cp.
Das Kommando uname Der Befehl uname gibt Informationen zum laufenden System aus. Mit entsprechenden Optionen versehen, können Sie hier auch die Versionsnummer des laufenden Kernels überprüfen. Zum Beispiel: root@archangel:~# uname -r 2.6.24-23-generic
oder: root@archangel:~# uname -a Linux archangel 2.6.24-23generic #1 SMP Mon Jan 26 00:13:11 UTC 2009 i686 GNU/Linux
Die von uname generierten Informationen können Sie im Folgenden benutzen, um sich genauere Informationen über bestimmte Module anzusehen oder um die zum laufenden Kernel passenden Module zu laden bzw. zu entladen.
Die Manpages im Allgemeinen Manpages sind ein komfortabel zu benutzendes Hilfesystem und stehen für fast alle Linux-Befehle zur Verfügung. Geben Sie einfach den Befehl man, gefolgt von dem zu erklärenden Befehl, auf der Kommandozeile ein, und schon erhalten Sie eine genaue Beschreibung.
Funktionsweise der Manpages Immer wenn Sie eine Manpage aufrufen, konsultiert das Programm man die in der Variablen $MANPATH enthaltenen Verzeichnisse. Hier können mehrere Verzeichnisse auf einmal hinterlegt sein. In nach Sektionen unterteilten Unterverzeichnissen befinden sich die Dateien der Manpages im komprimierten Zustand. Das Mansystem dekomprimiert die angeforderte Datei und übergibt sie anschließend an einen Pager. Dieser zeigt daraufhin die gewünschte Manpage an.
97
1451.book Seite 98 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
$MANPATH und die Datei manpath.config Wie bereits erwähnt, enthält die Variable $MANPATH Informationen darüber, wo sich die Manpages überhaupt befinden. Genauere Informationen darüber finden Sie in der Konfigurationsdatei /etc/manpath.config. Wenn dem System neue Manpages hinzugefügt werden, wird diese Datei normalerweise bei Bedarf auch automatisch aktualisiert. Ein manueller Eingriff ist in der Regel nicht nötig. Um den aktuellen MANPATH zu ermitteln, geben Sie einfach das Kommando manpath ohne Parameter ein. Das Ergebnis sieht dann beispielsweise so aus: archangel:/ # manpath /usr/share/man:/usr/local/man:/usr/X11R6/man:/opt/gnome/share/man
Ein weiterer wichtiger Pfad ist der, in dem das Mansystem seine Temporärdateien ablegt. Wie bereits erwähnt, sind Manpages im Rohformat komprimiert. Deshalb werden sie vor dem Anzeigen in ein temporäres Verzeichnis dekomprimiert. In der Regel handelt es sich hierbei um das Verzeichnis /var/cache/man. Dieses Verzeichnis wird, gestützt durch den Daemon cron, zyklisch von catman bereinigt. Um das Cache-Verzeichnis Ihres Computers ausfindig zu machen, geben Sie bitte das Kommando manpath –c ein: archangel:/ # manpath -c /var/cache/man:/var/cache/man/local:/var/cache/man/opt
Die Sektionen des Mansystems Das Mansystem ist in mehrere Sektionen unterteilt. Diese Sektionen sind folgendermaßen gegliedert: 왘
1 – ausführbare Programme für Benutzer
왘
2 – Systemaufrufe (Funktionen, die durch den Kernel unterstützt werden)
왘
3 – Bibliothekaufrufe (Librarys)
왘
4 – besondere Dateien (normalerweise in /dev)
왘
5 – Dateiformate und Konventionen
왘
6 – Spiele
왘
7 – Sonstiges (Makro-Pakete und Konventionen)
왘
8 – administrative Programme (nur für den root)
왘
9 – Kernel-Routinen (nicht standardisiert)
왘
A – mehrteilige Manpages
Zu vielen Programmen oder Dateien gibt es überhaupt nur eine einzige Manpage. Sollte es aber mehrere geben, so wird jene angezeigt, die numerisch betrachtet in
98
1451.book Seite 99 Dienstag, 7. Juli 2009 2:18 14
103.1 Auf der Kommandozeile arbeiten
der niedrigsten Sektion steht. Ein Beispiel hierfür ist crontab. Für crontab gibt es zwei Einträge in den Manpages, weil es sich bei crontab sowohl um ein ausführbares Programm als auch um eine Konfigurationsdatei handelt. Deshalb gibt es für crontab natürlich einen Eintrag unter Sektion 1 und einen unter Sektion 5. Brauchen Sie nun Informationen über die Konfigurationsdatei crontab, so können Sie diese mit folgendem Kommando aufrufen: man 5 crontab
Hilfe zum Programm crontab bekommen Sie, indem Sie die Manpage ohne Angabe der Sektion aufrufen: man crontab
Aufbau von Manpages Der Aufbau einer Manpage ist festgelegt und sollte immer die folgenden Elemente enthalten: 왘
Name – die Bezeichnung des Elements mit einer kurzen Beschreibung
왘
Synopsis – eine vollständige Kurzbeschreibung der Syntax
왘
Description – eine ausführliche Beschreibung des Elements
왘
Defaults – voreingestellte Parameter
왘
Overview – ein Überblick über die komplexeren Zusammenhänge
왘
Options – Optionen und deren Beschreibung
왘
Return Values – Informationen über eventuelle Rückgabewerte, teilweise auch als Exit-Status bezeichnet
왘
See also – Verweise auf artverwandte Themen
왘
Bugs – bekannte Fehler
왘
Files – Konfigurationsdateien u. Ä.
Es sind noch mehr Elemente denkbar, aber die hier aufgeführten sind die wohl geläufigsten.
Verwandte Befehle Es gibt noch einige Befehle, die mit man verwandt sind bzw. die man zumindest thematisch in diesem Zusammenhang erwähnen muss, weil sie auch in der Prüfung in einen gemeinsamen Kontext fallen. Vorrangig sind hier die Kommandos whatis und apropos zu nennen. Der Grund hierfür ist der, dass diese beiden auch auf die Dateien des Mansystems zugreifen. Der Befehl whatis durchsucht hierfür einfach nur das Feld »Name« aller verfügbaren Manpages. Das ist besonders dann
99
1451.book Seite 100 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
praktisch, wenn man damit rechnen muss, dass es zu einem Element in mehreren Sektionen Einträge gibt, z.B. in crontab: archangel:/ # whatis crontab crontab (1)
– maintain crontab files for individual users
crontab (5)
– tables for driving cron
crontab (1p)
– schedule periodic background work
Wenn Sie vergessen sollten, whatis einen Abfragewert als Argument zu übergeben, dann fragt das Programm übrigens noch einmal nach: archangel:/ # whatis whatis what?
Das Programm apropos ist ebenfalls nur ein verkürzter Spezialfall der Manpages. Im Gegensatz zu whatis durchsucht apropos nicht nur das Feld »Name«, sondern außerdem das Feld »Description«. Deshalb hat man die Möglichkeit mit apropos nach einem Programm zu suchen, das eine bestimmte Aufgabe erfüllt. Stellen Sie sich vor, Sie besitzen ein neues Bandlaufwerk, haben aber keine Idee, welche Programme ein solches ansteuern können. Geben Sie einfach folgendes Kommando ein: archangel:~ # apropos tape mt (1) – control magnetic tape drive operation st (4) – SCSI tape device smbtar (1) – shell script for backing up SMB/ CIFS shares directly to Unix tape drives
Immerhin ergab die Abfrage drei Treffer, mit denen sich schon etwas anfangen lässt. Wenn Sie die hiermit korrespondierenden Manpages gelesen haben und eventuellen »See also«-Hinweisen am Ende der jeweiligen Page gefolgt sind, dürften schon allein dadurch viele Fragen zum Thema Streamer geklärt worden sein. Es folgen nun einige nützliche Kommandos, die sowohl für die Praxis als auch für die Prüfung interessant sind, die aber nicht direkt mit dem Mansystem in Verbindung stehen. whereis zeigt an, wo sich ein Programm, seine Konfigurationsdatei(en) und die
zugehörige(n) Manpage(s) befinden. Um dies herauszufinden, stellen Sie die Frage: Wo ist cron? archangel:~ # whereis cron cron: /usr/sbin/cron /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly /usr/lib/cron /usr/share/man/man8/ cron.8.gz
100
1451.book Seite 101 Dienstag, 7. Juli 2009 2:18 14
103.2 Textströme mit Filtern verarbeiten
which zeigt den vollständigen Pfad eines Kommandos an. Das ist nützlich, wenn
Sie mehrere Versionen eines Programms besitzen und wissen möchten, welche von diesen bei einer Kommandoeingabe ohne Pfadhinweis ausgeführt wird: archangel:~ # which less /usr/bin/less which zeigt hier an, welches less bei einem Start ohne Pfadangabe ausgeführt
würde. Prüfungstipp Bei der Prüfung wird inzwischen auf das Thema Dokumentation nicht mehr allzu viel Wert gelegt. Dennoch sollten Sie natürlich mit der Verwendung des Mansystems bestens vertraut sein.
103.2 Textströme mit Filtern verarbeiten Wichtung: 3 Beschreibung: Kandidaten sollten in der Lage sein, Filter auf Textströme anzuwenden. Wichtigste Wissensgebiete: 왘
Textdateien und Ausgabeströme durch Textfilter schicken, um die Ausgabe mit Standard-UNIX-Kommandos aus dem GNU-textutils-Paket zu verändern
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
cat
왘
cut
왘
expand
왘
fmt
왘
head
왘
od
왘
join
왘
nl
왘
paste
왘
pr
왘
sed
101
1451.book Seite 102 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
왘
sort
왘
split
왘
tail
왘
tr
왘
unexpand
왘
uniq
왘
wc
Allgemeines Unter Linux stehen Ihnen viele Programme zur Verfügung, mit denen Sie Texte manipulieren können. Diese Programme werden auch zum Teil als Filter bezeichnet. Auf den nächsten Seiten werden Sie einige dieser nützlichen Tools kennenlernen.
cat Das Programm cat wird hauptsächlich benutzt, um Textdateien auf dem Bildschirm auszugeben oder in ein Programm umzuleiten. Ursprünglich steht cat für concatenate (verketten), und das Programm war dazu gedacht, mehrere Dateien zu einer einzigen Datei zusammenzufassen. Sie können mit den entsprechenden Schaltern auch nicht druckbare Zeichen ausgeben. Im nächsten Beispiel wurde eine Datei mit folgendem Inhalt verwendet: 1 2 3 4
Birnen Aepfel Bananen Erdbeeren
Die Abstände zwischen den Ziffern und dem Obst sind in Wirklichkeit je zwei Tabstops. Mit cat -A können diese dargestellt werden, wie die folgende Ausgabe demonstriert: archangel:/textfiles # cat textfile1 -A 1^I^IBirnen$ 2^I^IAepfel$ 3^I^IBananen$ 4^I^IErdbeeren$
102
1451.book Seite 103 Dienstag, 7. Juli 2009 2:18 14
103.2 Textströme mit Filtern verarbeiten
tac Es ist recht offensichtlich, dass tac einfach nur ein umgedrehtes cat ist. Und tac macht auch genau das, wonach es aussieht, wie die umgekehrte Nummerierung im folgenden Beispiel erkennen lässt: archangel:/textfiles # tac textfile1 4 Erdbeeren 3 Bananen 2 Aepfel 1 Birnen
head Das Kommando head zeigt per Voreinstellung die ersten zehn Zeilen einer Datei an. Es können auch mehrere Dateien angegeben werden. Der Ausgabe jeder einzelnen Datei wird dann der Dateiname vorangestellt: archangel:/textfiles # head textfile1 textfile2 ==> textfile1 <== 1 Birnen 2 Aepfel 3 Bananen 4 Erdbeeren ==> textfile2 <== hellgruen rot gelb dunkelgruen
Mit der Option -n kann die Anzahl der auszugebenden Zeilen auf einen anderen Wert als 10 eingestellt werden: archangel:/textfiles # head -n 1 textfile1 1 Birnen
tail In der Praxis erheblich wichtiger als head ist das Kommando tail. Tail bedeutet Ende, Heck oder auch Schwanz. Per Default gibt tail die letzten zehn Zeilen einer Textdatei aus. Das ist besonders nützlich, um schnell einen Blick auf das Ende einer Log-Datei werfen zu können. Sowohl in der Praxis als auch in der Prüfung besonders beliebt ist die Ausgabe des Syslogs mit tail: archangel:/ # tail /var/log/messages
103
1451.book Seite 104 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Genauso wie bei head können Sie mit -n die Anzahl der von tail auszugebenden Zeilen festlegen. Viel interessanter ist aber, dass tail eine Datei fortlaufend anzeigen kann, während sie von einem anderen Programm beschrieben wird. Das ist ebenfalls besonders praktisch, um den Syslog (diesmal in Echtzeit) zu beobachten. Sie beenden die Ausgabe dann mit (Strg) + (C). Starten Sie Ihre Beobachtung mit: archangel:/ # tail /var/log/messages -f
expand/unexpand Manchmal ist es nötig, Tabstops in Leerzeichen umzuwandeln. Die Software, die dieses Buch auf den Druck vorbereitet hat, ignoriert z.B. Tabstops. Deshalb mussten alle Beispiele in diesem Buch, die Tabstops enthielten, konvertiert werden. Diese Arbeit kann das Programm expand durchführen. Wenn Sie expand eine Datei als Argument übergeben, führt das Programm die Konvertierung nach stdout durch. Es macht also Sinn, die Ausgabe in eine Datei umzuleiten. Umleitungen werden in Abschnitt 103.4, »Ströme, Pipes und Umleitungen verwenden«, noch genauer beleuchtet. Beispiel: archangel:/textfiles # expand textfile1 >expandedtextfile1
Standardmäßig geht expand von acht Zeichen für einen Tabstop aus. Sie können diesen Wert aber mit der Option -t ändern. Das Gegenteil von expand bewirkt das Kommando unexpand. Es werden also Spaces zu Tabstops zusammengefasst. Auch bei diesem Kommando können Sie bei Bedarf mit dem Schalter -t festlegen, wie viele Zeichen durch einen Tabstop ersetzt werden sollen. Der Standardwert ist ebenfalls 8. Prüfungstipp Lassen Sie sich in der Prüfung nicht zu der Annahme verleiten, compress wäre das Gegenteil von expand! compress ist ein Programm, das vom Verwendungszweck her gzip ähnelt.
fmt Bei fmt handelt es sich um ein einfaches Textformatierungsprogramm. Es entfernt automatisch Zeilenumbrüche und kann mehrere Texte zu einem einzigen Text zusammenfassen. Mit dem Parameter -w (width) können Sie die Breite des Textes in Zeichen angeben.
104
1451.book Seite 105 Dienstag, 7. Juli 2009 2:18 14
103.2 Textströme mit Filtern verarbeiten
nl Diese Abkürzung steht für number lines. Das Programm nummeriert also Zeilen. Damit die zweite Beispieltextdatei auch eine Nummerierung erhält, wird folgendes Kommando verwendet: archangel:/textfiles # nl textfile2 > textfile3 archangel:/textfiles # cat textfile3 1 hellgruen 2 rot 3 gelb 4 dunkelgruen
Das Kommando nl versteht viele Optionen. Die Kenntnis dieser Optionen ist für die Prüfung nicht erforderlich. Prüfungstipp In der Prüfung wird gern als Antwort für diese Aufgabe das Programm ln genannt. Das ist die falsche Antwort. Mit ln werden Links auf Dateien und Verzeichnisse erstellt.
pr Mit pr können Dateien für den Druck vorbereitet werden. Das geht mit den heutigen Textverarbeitungsprogrammen natürlich erheblich besser. Trotzdem sollten Sie pr für die Prüfung kennen. Der folgende Befehl bereitet die altbekannte Beispieldatei für den Druck vor: archangel:/textfiles # pr -h Obstliste textfile1 > prfile
Auch hier war eine Umlenkung notwendig, weil pr sonst nach stdout schreibt. Das Ergebnis des vorangegangenen Kommandos sehen Sie hier: 2007-11-22 18:36 1 2 3 4
Obstliste
Page 1
Birnen Aepfel Bananen Erdbeeren
wc Das Programm wc (word count) zählt die Anzahl der Zeilen, Wörter und Bytes in einer Datei. In der Standardeinstellung zählt wc alle drei Werte in der oben angegebenen Reihenfolge. Sie können auch hier mehrere Dateien angeben oder Wild-
105
1451.book Seite 106 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
cards verwenden. Es werden dann alle Dateien einzeln bearbeitet, und zum Schluss wird die Summe gebildet. Beispiel: archangel:/textfiles # wc * 4 8 44 textfile1 4 4 31 textfile2 4 8 59 textfile3 12 20 134 total
Innerhalb eines Skripts ist es oft nötig, nur einen einzigen dieser Werte für eine Datei zu erhalten. Sie können dann als Option angeben, welchen Wert Sie benötigen: 왘
-c zeigt nur die Anzahl der Bytes an.
왘
-l zeigt nur die Anzahl der Zeilen (lines) an.
왘
-w zeigt nur die Anzahl der Wörter an.
왘
-m zeigt nur die Anzahl der Zeichen an.
hexdump Auch wenn der Name etwas anderes aussagt: Mit hexdump können Dateien hexadezimal, dezimal, im ASCII-Format oder als Oktaldump dargestellt werden. Das Programm kann im Gegensatz zu einem normalen Editor auch ohne Probleme Binärdateien einlesen. Eigentlich eignet sich so ziemlich alles zur Eingabe. Mit dem folgenden Beispiel wird die Partitionstabelle eines Computers angezeigt: archangel:/boot # 00001b0 0000 0000 00001c0 0001 fe83 00001d0 0701 fe83 00001e0 ffff fe82 00001f0 ffff fe83
hexdump /dev/hda | head -n 32 | tail -n 5 0000 0000 133b b839 0000 0180 063f 003f 0000 b708 0001 0000 ffff b747 0001 d8da 024a fe00 ffff 9021 024c 0ade 0017 fe00 ffff 9aff 0263 49c2 06ed aa55
Hier liest hexdump direkt von der Festplatte. Es wird mit dem Sektor 0 begonnen. Das head-Kommando sorgt dafür, dass nur die ersten 32 Zeilen gelesen werden. Jede Zeile enthält 16 Byte. Es werden also 512 Byte eingelesen, was der Größe des Master Boot Record (MBR) genau entspricht. Zum Schluss wird mit tail dafür gesorgt, dass nur die letzten fünf Zeilen des MBR ausgegeben werden. Darin ist die Partitionstabelle (im Beispiel fett gedruckt) enthalten.
od Das Kommando od (octal dump) ähnelt vom Verwendungszweck her dem hexdump. Es hat allerdings einen kleineren Funktionsumfang und verwendet per
106
1451.book Seite 107 Dienstag, 7. Juli 2009 2:18 14
103.2 Textströme mit Filtern verarbeiten
Voreinstellung das Oktalformat. Mit der Option -x kann die Ausgabe auf hexadezimal umgestellt werden.
sort Mit sort können die Zeilen von Textdateien sortiert werden. Es ist aber genauso gut möglich, andere Eingabequellen zu verwenden. Damit Sie eine sauber sortierte Ausgabe des mount-Kommandos erhalten, können Sie folgenden Befehl verwenden: archangel:~ # mount | sort /dev/fd0 on /media/floppy type subfs (rw,nodev,sync,procuid) /dev/hda1 on /boot type ext2 (rw,acl,user_xattr) /dev/hda2 on / type ext3 (rw,acl,user_xattr) /dev/hda4 on /storage type reiserfs (rw) /dev/sda1 on /media/512MB type subfs (rw, nodev,sync, procuid) /dev/sdb1 on /media/WD_Passport type ext3 (rw) ... weitere Zeilen wurden abgeschnitten ...
Wichtige Optionen für sort sind: 왘
-n sortiert nach numerischen Kriterien.
왘
-o sorgt für die Ausgabe in einer Datei (outfile). Normalerweise gibt sort das
Ergebnis an stdout aus. 왘
-r gibt das Ergebnis in umgekehrter Reihenfolge (reverse) aus.
Im folgenden Beispiel wird die Datei textfile1 eingelesen und in numerisch umgekehrter Reihenfolge in die Datei reversefile geschrieben: archangel:/textfiles # sort textfile1 -n -r -o reversefile
uniq Wenn Sie eine Datei, die sich wiederholende Zeilen enthält, kürzen wollen (z.B. eine Log-Datei), dann können Sie das Kommando uniq verwenden. Die Voraussetzung ist allerdings, dass diese Zeilen aufeinanderfolgen. Sollte es notwendig sein, auch die Duplikate zu entfernen, die nicht hintereinanderliegen, schalten Sie einfach das Kommando sort vor.
split Um große Dateien in mehrere kleinere Dateien zu unterteilen, können Sie das Programm split verwenden. Als Disketten noch ein gängiges Speichermedium waren, war diese Vorgehensweise sehr üblich, um große Dateien auf mehrere
107
1451.book Seite 108 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Disketten zu verteilen. Auch die Übermittlung großer Datenmengen per Mail war zu Zeiten geringer Bandbreiten im Internet ein Grund, Dateien zu teilen. Eigentlich arbeitet split per Voreinstellung zeilenorientiert. Wenn keine entsprechenden Optionen vergeben werden, teilt split eine Datei in kleinere Dateien zu je 1.000 Zeilen. Der Sachverhalt wird im Beispiel deutlich: Die folgende Datei ist 101 MB groß und soll per Mail versendet werden. Leider lässt der Internetprovider des Empfängers keine Mails zu, die größer sind als 12 MB: -rwxr--r--
1 root root 101M Nov 24 14:09 grosses-paket
Um eine noch kleinere Toleranz zu gewährleisten, wird die Datei mit dem folgenden Kommando in nur 11 MB große Stücke geteilt: archangel:/files # split -b 11m grosses-paket grosses-paket_
Die Option -b sorgt dafür, dass split nicht in Zeilen rechnet, sondern in Byte. Mit 11m wird die Größe der Teilpakete dann auf 11 MB festgelegt. Das letzte Argument »grosses-paket_« gibt das Präfix für die entstehenden Pakete an. Die Ausgabe des folgenden Kommandos spricht für sich selbst: archangel:/files # ls -lha total 203M drwxr-xr-x 2 root root 4.0K drwxr-xr-x 25 root root 4.0K -rwxr--r-1 root root 101M -rw-r--r-1 root root 11M -rw-r--r-1 root root 11M
Nov Nov Nov Nov Nov
24 24 24 24 24
14:15 14:08 14:09 14:15 14:15
. .. grosses-paket grosses-paket_aa grosses-paket_ab
... einige Zeilen wurden herausgeschnitten ... -rw-r--r--rw-r--r--
1 root root 11M Nov 24 14:15 grosses-paket_ai 1 root root 2.0M Nov 24 14:15 grosses-paket_aj
Damit der Empfänger die Dateifragmente wieder zusammensetzen kann, muss er lediglich das Programm cat in seinem eigentlichen Sinn (concatenate) verwenden: archangel:/files # cat grosses-paket_a* >grosses-paket
Dieses Verfahren mit einfachen Bordmitteln funktioniert übrigens hervorragend.
cut, paste und join Die drei Programme cut, paste und join werden oft miteinander kombiniert oder nacheinander angewendet. Für die Beispiele kommen die folgenden beiden Dateien zum Einsatz:
108
1451.book Seite 109 Dienstag, 7. Juli 2009 2:18 14
103.2 Textströme mit Filtern verarbeiten
archangel:/textfiles # cat textfile1 1:Birnen 2:Aepfel 3:Bananen 4:Erdbeeren
und archangel:/textfiles # cat textfile2 1:hellgruen 2:dunkelgruen 3:gelb 4:rot
cut Das Kommando cut (schneiden) kann Spalten einer Datei ausschneiden. Das bedeutet aber nicht, dass diese Spalten hinterher nicht mehr vorhanden sind. Im Gegenteil: Das Programm gibt die ausgeschnittenen Spalten nach stdout aus. Um die Spalten voneinander zu unterscheiden, muss cut wissen, welches Zeichen als Trenner (Delimiter) zwischen den Spalten verwendet wird. Dieses Zeichen ist in den aufgeführten Beispielen ein Doppelpunkt. Die folgende Befehlszeile schneidet die zweite Spalte (-f2 steht für field 2) aus der Datei textfile1 aus. Als Delimiter wird ein Doppelpunkt verwendet (-d:): archangel:/textfiles # cut -d: -f2 textfile1 Birnen Aepfel Bananen Erdbeeren
Normalerweise würde man die Ausgabe des Befehls mit einem Redirektor in eine Datei umleiten. Es lohnt sich aber während der Konstruktion einer Befehlszeile immer, das Ergebnis vorläufig auf den Bildschirm zu geben. paste Mit paste können Sie zwei oder mehr Dateien zusammenführen. Im Gegensatz zur Arbeitsweise von cat werden die Dateien aber, vereinfacht ausgedrückt, nicht untereinander, sondern nebeneinander zusammengefügt. So können korrespondierende Zeilen von textbasierten Datenbanken miteinander verknüpft werden. Beispiel: archangel:/textfiles # paste textfile1 textfile2 1:Birnen 1:hellgruen
109
1451.book Seite 110 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
2:Aepfel 3:Bananen 4:Erdbeeren
2:dunkelgruen 3:gelb 4:rot
Etwas unschön an dieser Ausgabe ist die doppelte Verwendung der Nummerierung. Aber auch für dieses Problem stehen Ihnen viele Bordmittel zur Verfügung, wie die folgenden Abschnitte zeigen. join Das Programm join kann ebenfalls Textdateien miteinander verknüpfen. Im Gegensatz zu cut verwendet join die Option -t für den Delimiter. Mit der Option -j wird praktisch der gemeinsame Nenner festgelegt, mit dem die Dateien verknüpft werden. In hier beispielhaft dargestelltem Fall ist dies die Nummerierung im ersten Feld beider Dateien: archangel:/textfiles # join -t : -j 1 textfile1 textfile2 1:Birnen:hellgruen 2:Aepfel:dunkelgruen 3:Bananen:gelb 4:Erdbeeren:rot
tr Wenn einzelne Zeichen einer Textdatei durch andere ersetzt oder ganz gelöscht werden sollen, kommt das Programm tr (translate) zum Einsatz. Es bietet keine Möglichkeit, Dateinamen als Argumente zu übergeben, weshalb eine Übergabe der Datei(en) mittels cat, gefolgt von einem Redirektor, üblich ist. Komplexere Änderungen sollten Sie aber dem Stream-Editor sed überlassen. Da sed noch an anderer Stelle detailliert behandelt wird, soll er hier nicht weiter thematisiert werden. Im folgenden Beispiel wird in einer Datei der Buchstabe »n« durch den Buchstaben »x« ersetzt. Natürlich ist das völlig sinnlos, zeigt aber sehr deutlich, wie tr arbeitet. archangel:/textfiles # cat textfile1 | tr n x 1:Birxex 2:Aepfel 3:Baxaxex 4:Erdbeerex
Wichtige Optionen für tr sind: 왘
-d bzw. --delete löscht das angegebene Zeichen.
왘
-c bzw. --complement kehrt die Ausgabe ins Gegenteil.
왘
-s bzw. --squeeze-repeats unterdrückt sich wiederholende Zeichen.
110
1451.book Seite 111 Dienstag, 7. Juli 2009 2:18 14
103.2 Textströme mit Filtern verarbeiten
Ein beliebtes Beispiel für die Verwendung von tr ist auch die Übersetzung aller Zeichen von a bis z in Großbuchstaben: archangel:/textfiles # cat textfile1 | tr a-z A-Z 1:BIRNEN 2:AEPFEL 3:BANANEN 4:ERDBEEREN
Dasselbe Ergebnis können Sie aber auch mit folgendem Kommando erreichen: archangel:/textfiles # cat textfile1 | tr [:lower:] [:upper:]
Diese Form der Argumente erlaubt eine Menge interessanter Konstellationen: 왘
[:alnum:] steht für alle Buchstaben und Ziffern.
왘
[:alpha:] repräsentiert alle Buchstaben.
왘
[:blank:] steht für Spaces und Tabstops.
왘
[:cntrl:] symbolisiert alle Steuerzeichen.
왘
[:graph:] steht für alle druckbaren Zeichen (ohne Space).
왘
[:upper:] vertritt Großbuchstaben.
왘
[:lower:] vertritt Kleinbuchstaben.
왘
[:print:] bedeutet druckbare Zeichen (inklusive Space).
왘
[:punct:] repräsentiert alle Satzzeichen.
왘
[:space:] steht für alle White-Spaces (Space, Tabstops).
Wenn Sie einzelne Steuerzeichen ersetzen wollen, muss ein Backslash vorangestellt werden. Das gilt insbesondere, wenn Sie den Backslash selbst ersetzen oder entfernen müssen. 왘
\NNN bezeichnet ein ASCII-Zeichen in Oktalschreibweise.
왘
\\ schützt den Backslash bei der Ersetzung vor der Interpretation durch die
Shell. Ohne diesen Schutz geht die Bash sonst davon aus, dass dieses Kommando in der nächsten Zeile fortgesetzt wird. 왘
\a ist der »audible BEL« und gibt einen Piepton aus.
왘
\b ist der Platzhalter für »backspace«.
왘
\f bezeichnet das »form feed«-Zeichen.
왘
\n steht für »new line«.
왘
\r bezeichnet ein »return«-Zeichen.
왘
\t ist ein »horizontal tab«.
111
1451.book Seite 112 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
왘
\v bezeichnet den »vertical tab«.
Die folgende Befehlszeile entfernt mit der Bezeichnung skript-laut alle akustischen Signale aus dem Skript und erstellt aus dem Ergebnis das skript-leise: archangel:/scriptdemo # cat skript-laut | tr -d \a >skript-leise
103.3 Grundlegende Dateiverwaltung Wichtung: 4 Beschreibung: Kandidaten sollten in der Lage sein, die grundlegenden LinuxKommandos zur Verwaltung von Dateien und Verzeichnissen zu verwenden. Wichtigste Wissensgebiete: 왘
einzelne Dateien und Verzeichnisse kopieren, verschieben und entfernen
왘
mehrere Dateien kopieren und Verzeichnisse rekursiv kopieren
왘
Dateien entfernen und Verzeichnisse rekursiv entfernen
왘
einfache und fortgeschrittene Dateinamen-Suchmuster in Kommandos verwenden
왘
find verwenden, um Dateien auf der Basis ihres Typs, ihrer Größe oder ihrer Zeiten zu finden und zu bearbeiten
왘
tar, cpio und dd verwenden
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
cp
왘
find
왘
mkdir
왘
mv
왘
ls
왘
rm
왘
rmdir
왘
touch
왘
tar
왘
cpio
왘
dd
왘
file
112
1451.book Seite 113 Dienstag, 7. Juli 2009 2:18 14
103.3 Grundlegende Dateiverwaltung
왘
gzip
왘
gunzip
왘
bzip2
왘
Dateisuchmuster
Allgemeines In den folgenden Abschnitten geht es um die Grundlagen der Dateiverwaltung. Sie müssen für die Prüfung die grundlegenden Befehle des Dateimanagements und deren Optionen kennen. Außerdem müssen Sie in der Lage sein, Wildcards mit diesen Kommandos zu verwenden.
Kommandos für Dateioperationen ls Das Kommando ls listet den Inhalt von Verzeichnissen auf. Die Ausgabe erfolgt per Voreinstellung in alphabetischer Reihenfolge. In der Prüfung sollten Sie zumindest mit den folgenden Optionen vertraut sein: 왘
-l gibt an, dass das Listingformat verwendet wird. Dieses beinhaltet u.a. die
Zugriffsberechtigungen auf Dateien und Verzeichnisse sowie Timestamps. 왘
-i zeigt die von Dateien und Verzeichnissen verwendeten Inodes an. Setzt die
Option -l voraus. 왘
-a listet alle Dateien, auch solche, die mit einem Punkt beginnen.
왘
-s zeigt in Kombination mit -l die Größe jeder Datei in Blocks an.
왘
-h zeigt die Dateigröße in einem menschenlesbaren Format an (21 KB, 24 MB,
3 GB usw.). Setzt die Option -l voraus. Aufgrund der Simplizität des Programms soll hier auf umfangreiche Beispiele verzichtet werden. cd und pwd Um das aktuelle Verzeichnis zu wechseln, verwenden Sie das Kommando cd. Bei cd handelt es sich um ein shell-internes Kommando. Sie können sowohl absolute als auch relative Pfade mit diesem Befehl verwenden. Wenn Sie keinen Prompt eingestellt haben, der Ihnen das aktuelle Verzeichnis anzeigt, können Sie das Kommando pwd verwenden. Als Ergebnis wird Ihnen das aktuelle Verzeichnis angezeigt.
113
1451.book Seite 114 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Die Tilde Die Tilde (~) zeigt an, dass Sie sich gerade in Ihrem Heimatverzeichnis befinden. Sie können die Tilde auch in Pfadangaben verwenden. So würde das im folgenden Beispiel dargestellte Kommando die dateiXY in Ihrem Heimatverzeichnis löschen. Hierbei spielt es keine Rolle, in welchem Verzeichnis Sie sich gerade selbst befinden: archangel:/ # rm ~/dateiXY
Wenn Sie in Ihr Heimatverzeichnis wechseln wollen, können Sie ebenfalls die Tilde verwenden. Die Eingabe von cd ohne Optionen und Argumente führt aber zu demselben Ergebnis: harald@archangel:/> cd harald@archangel:~>
Die Tilde in der zweiten Zeile zeigt, dass der Wechsel in das Heimatverzeichnis des Benutzers durchgeführt wurde. Absolute Pfadangaben Ein Verzeichniswechsel mit einer absoluten Pfadangabe beginnt immer mit einem Slash. Absoluter Pfad bedeutet, dass Sie den ganzen Pfad vom Hauptverzeichnis aus angeben, egal, in welchem Verzeichnis Sie sich selbst gerade befinden. Beispiel: archangel:/textfiles # cd /var/log archangel:/var/log #
Sie müssen also bei einem Verzeichniswechsel mit einer absoluten Pfadangabe Ihre eigene Position nie berücksichtigen. Relative Pfadangaben Bei einem Verzeichniswechsel mit relativer Pfadangabe bewegen Sie sich relativ zum aktuellen Verzeichnis fort. Eine relative Pfadangabe beginnt deshalb nie mit einem Slash. Beispiel: archangel:/var # cd log archangel:/var/log #
Es wurde hier relativ zum /var-Verzeichnis in das /var/log-Verzeichnis gewechselt.
114
1451.book Seite 115 Dienstag, 7. Juli 2009 2:18 14
103.3 Grundlegende Dateiverwaltung
Punkte Zwei aufeinanderfolgende Punkte repräsentieren das übergeordnete Verzeichnis. Sie können also ohne Weiteres durch die Eingabe von cd .. in das übergeordnete Verzeichnis wechseln. Beachten Sie, dass zwischen dem Befehl und den beiden Punkten ein Leerzeichen stehen muss. Das ist bei anderen Betriebssystemen teilweise different. Ein einzelner Punkt repräsentiert das aktuelle Verzeichnis. Die Eingabe von cd . führt also zu keinem Ergebnis. Prüfungstipp Sie müssen in der Prüfung zwischen absoluten und relativen Pfadangaben unterscheiden können. Außerdem müssen Sie auf »exotische« Argumente für das cd-Kommando gefasst sein.
Beispiele für cd: 왘
cd wechselt in das Heimatverzeichnis.
왘
cd / wechselt in das Hauptverzeichnis.
왘
cd .. wechselt eine Verzeichnisebene höher.
왘
cd ../.. wechselt zwei Verzeichnisebenen höher.
왘
cd ../dateien wechselt zuerst eine Verzeichnisebene höher und dann dazu relativ ins Verzeichnis dateien.
cp Mit dem Kommando cp können Sie Dateien und Verzeichnisse kopieren. Sie müssen bei der Verwendung von cp immer sowohl eine Quelle als auch ein Ziel angeben. Das gilt auch, wenn Sie sich gerade im Zielverzeichnis für die Dateien befinden sollten. Letztes Argument muss hierbei immer das Ziel sein. Dafür können Sie aber mit einem einzigen Kommando mehrere Dateien kopieren (abgesehen von der Verwendung von Wildcards, siehe Abschnitt »Verwendung von Wildcards«). Diese Mehrfachauswahl ist gleichzeitig der Grund, weshalb ein Ziel angegeben werden muss. Die Shell könnte sonst bei der Interpretation des letzten Argumentes nicht wissen, ob es sich um eine Quelldatei oder um eine Zieldatei handelt. Folgende Punkte müssen bei der Verwendung von cp berücksichtigt werden: 왘
Sowohl die Quelle als auch das Ziel können wahlweise relativ oder absolut angegeben werden.
왘
Bei dem angegebenen Ziel kann es sich wahlweise sowohl um eine Datei als auch um ein Verzeichnis handeln.
115
1451.book Seite 116 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
왘
Wenn mehrere Quelldateien angegeben wurden, geht die Shell davon aus, dass es sich bei dem angegebenen Ziel um ein Verzeichnis handeln muss.
왘
Wenn es sich beim Kopieren einer einzigen Datei bei dem Ziel ebenfalls um eine Datei handelt und diese bereits existiert, wird die Zieldatei überschrieben. Sie können das automatische Überschreiben von Dateien mit der Option -i verhindern.
왘
Wenn es sich beim Kopieren einer einzigen Datei bei dem Ziel um ein Verzeichnis handelt, dann wird die Datei in dieses Verzeichnis kopiert. Eventuell existierende Dateien gleichen Namens werden überschrieben.
Häufig verwendete Optionen von cp sind: 왘
-i bzw. --interactive fragt vor dem Überschreiben eventuell existierender Dateien im Zielverzeichnis, ob diese Dateien wirklich überschrieben werden sollen.
왘
-f bzw. --force erzwingt den Schreibvorgang im Zielverzeichnis.
왘
-p bzw. --preserve kopiert die Datei(en) unter Beibehaltung des Eigentü-
mers, der Eigentümergruppe, der Berechtigungen und der Timestamps. 왘
-R, -r bzw. --recursive kopiert ein Verzeichnis inklusive aller Unterverzeichnisse und Dateien.
In dem folgenden Beispiel werden die beiden Dateien /var/log/messages und /var/ log/apache2/access_log in das aktuelle Verzeichnis kopiert. Dieses wird durch den einzelnen Punkt am Ende der Befehlszeile repräsentiert: archangel:~ # cp /var/log/messages /var/log/apache2/access_log .
Beispiele mit alltäglichen Kopieraktionen möchte ich Ihnen an dieser Stelle ersparen. Sie sollten in der Prüfung darauf vorbereitet sein, Befehlszeilen wie die soeben dargestellte, inklusive der unmittelbar davor aufgeführten Optionen, lesen und verstehen zu können. mv Wenn Sie Dateien oder Verzeichnisse verschieben wollen, verwenden Sie das Kommando mv. Genauso wie cp benötigt mv eine Quellangabe und eine Zielangabe. Wenn das Ziel sich auf derselben Partition befindet wie die Quelle, werden die Verzeichnisse und Dateien nicht tatsächlich verschoben. Es werden lediglich die Einträge in den jeweiligen Verzeichnissen geändert, um der Verschiebung Rechnung zu tragen. Wenn Dateien auf eine andere Partition verschoben werden, dann werden diese Dateien zunächst auf die andere Partition kopiert und die ursprünglichen Dateien hinterher gelöscht. Deshalb dauert das Verschieben von
116
1451.book Seite 117 Dienstag, 7. Juli 2009 2:18 14
103.3 Grundlegende Dateiverwaltung
Daten über Partitionsgrenzen hinweg auch erheblich länger als Verschiebungen innerhalb einer Partition. Häufig verwendete Optionen von mv sind: 왘
-u bzw. --update erstellt eine Datei nur dann, wenn die bereits existierende Datei älter ist als die zu verschiebende Datei oder wenn die Zieldatei noch nicht existiert.
왘
-i bzw. --interactive fragt nach, ob bereits existierende Dateien wirklich überschrieben werden sollen. Per Voreinstellung wird nicht nachgefragt.
왘
-f bzw. --force erzwingt den Schreibvorgang im Zielverzeichnis.
mkdir Um ein neues Verzeichnis zu erstellen, verwenden Sie das Kommando mkdir. Die zu erstellenden Verzeichnisse können relativ zum aktuellen Verzeichnis oder als absoluter Pfad angegeben werden. Häufig verwendete Optionen für mkdir sind: 왘
-p bzw. --parents erstellt gegebenenfalls übergeordnete Verzeichnisse,
wenn diese noch nicht existieren. Mit dieser Option kann eine ganze Verzeichnishierarchie mit nur einem Kommando erstellt werden. 왘
-m bzw. --mode stellt die Berechtigungen für das neue Verzeichnis während
der Erstellung ein. Mit dem folgenden Kommando erstellt der aktuell angemeldete User ein Verzeichnis, das nur er selbst exklusiv verwenden kann. Voraussetzung für die Ausführung des Kommandos sind natürlich Schreibrechte im Zielverzeichnis. archangel:/textfiles # mkdir -m 700 Gedichte
Die automatische Erstellung einer Verzeichnishierarchie könnte z.B. so aussehen wie in der folgenden Befehlszeile: archangel:/ # mkdir --parents /arbeitsgruppe/dokumente/tabellen
rm Mit dem Kommando rm können Sie Dateien und (mit den entsprechenden Optionen) Verzeichnisse löschen. Sie benötigen in dem Verzeichnis, in dem Sie die Dateien löschen wollen, Schreibrechte, aber Sie benötigen keine Schreibrechte auf die Dateien selbst. Häufig verwendete Optionen von rm sind: 왘
-R, -r bzw. --recursive löscht, auf ein Verzeichnis angewendet, auch dessen
Unterverzeichnisse und alle Dateien.
117
1451.book Seite 118 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
왘
-i bzw. --interactive fragt bei jeder Datei noch einmal nach, ob sie wirklich
gelöscht werden soll (ähnlich wie bei Windows). 왘
-f bzw. --force erzwingt das Löschen. Fehlermeldungen, die durch nicht
vorhandene Dateien verursacht werden, werden unterdrückt. Prüfungstipp Rekursive Befehlsausführung ist ein beliebtes Prüfungsthema. Die Auswirkungen des Kommandos rm -R müssen Ihnen also klar sein.
rmdir Das Kommando rmdir entfernt leere Verzeichnisse. Verzeichnisse, die noch Dateien enthalten, können auch mit zusätzlichen Optionen nicht gelöscht werden. Sie können die Option -p verwenden, damit übergeordnete Verzeichnisse automatisch mit gelöscht werden, wenn diese durch die Löschung des eigentlichen Verzeichnisses leer werden. touch Eigentlich wird das Kommando touch verwendet, um die Timestamps einer Datei zu ändern. Sie können touch aber auch verwenden, um neue Dateien mit einer Größe von 0 Byte zu erstellen. Gängige Optionen von touch sind: 왘
-t setzt den Timestamp auf den Wert [[CC]YY]MMDDhhmm[.ss].
왘
-a ändert nur die letzte Zugriffszeit.
왘
-m ändert nur die letzte Änderungszeit.
find Das Programm find sucht nach Dateien in einer Verzeichnisstruktur. Um die Datei textfile1 zu finden, geben Sie folgendes Kommando ein: archangel:/ # find / -name textfile1
Der Slash direkt hinter dem eigentlichen Kommando weist find an, die Suche im Hauptverzeichnis zu beginnen. Die Option -name besagt, dass das Suchkriterium der Dateiname ist. Der Suchausdruck ist textfile1. Die Thematik »Auffinden von Dateien« wird in einem späteren Kapitel noch sehr ausführlich beschrieben werden. Deshalb soll es hier zunächst bei dieser kurzen Erklärung bleiben.
118
1451.book Seite 119 Dienstag, 7. Juli 2009 2:18 14
103.3 Grundlegende Dateiverwaltung
Verwendung von Wildcards Wildcards sind im Englischen die Joker eines Kartenspiels. Bei Linux werden Wildcards verwendet, um Operationen an mehreren Dateien gleichzeitig auszuführen, damit ein Kommando nicht für jede Datei einzeln eingegeben werden muss. Bei Suchoperationen dienen Wildcards auch dazu, Dateien zu spezifizieren, wenn deren Name nicht genau bekannt ist. Die Wildcards werden durch die Shell interpretiert und nicht durch das jeweilige Kommando. Das bietet vor allem den Vorteil, dass die Verwendung der Wildcards bei allen unterstützten Programmen gleich abläuft. Prüfungstipp Beachten Sie, dass sich die Wildcards »*« und »?« in der Interpretation von den entsprechenden DOS-Platzhaltern unterscheiden. Verwechseln Sie die Verwendungsmethoden nicht in der Prüfung!
Gängige Wildcards für Dateien sind: 왘
* ersetzt null oder mehr Zeichen. Datei* beinhaltet demnach Datei1,
Datei255, Datei-A usw. Im Gegensatz zur Ausgabe bei DOS-Wildcards ist auch Datei enthalten. 왘
? ersetzt genau ein Zeichen. Datei? beinhaltet Datei1, DateiX usw., aber nicht
Datei. 왘
[a-z] ersetzt ein einzelnes Zeichen aus dem angegebenen Bereich. Die Suche
nach Datei[a-d] beinhaltet also genau Dateia, Dateib, Dateic und Dateid. Dasselbe Verfahren ist auch mit Großbuchstaben oder Ziffern durchführbar. 왘
[abcde] ersetzt ein einzelnes der angegebenen Zeichen. Den Unterschied zu [a-z] verdeutlicht dieses Beispiel: Datei[amz] liefert die Dateien Dateia,
Dateim und Dateiz. 왘
[!a-z] ersetzt ein einzelnes Zeichen, das nicht angegeben ist.
Beispiele für die Verwendung von Wildcards sind folgende: archangel:~ # find / -name *.log
Damit erfolgt das Durchsuchen des Systems nach Log-Dateien. archangel:~ # find / -name samba*.rpm
Diese Wildcard bewirkt die Suche nach RPM-Paketen, die mit Samba in Zusammenhang stehen.
119
1451.book Seite 120 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
tar (Tape Archiver) Das Archivierungsprogramm tar wurde eigentlich entwickelt, um Dateien zu einem Archiv zusammenzufassen und dieses Archiv dann auf ein Bandlaufwerk zu sichern. Sie sollten sich merken, dass man bei der Übergabe von Optionen an tar einen Strich verwenden kann, aber nicht muss. In Bezug auf das erste Beispiel bedeutet das, dass die folgenden Kommandos beide zulässig sind und dasselbe Ergebnis zur Folge haben: archangel:/usr/src # tar -xvzf xmbmon205.tar.gz archangel:/usr/src # tar xvzf xmbmon205.tar.gz
Sie können also bei sogenannten Fill-in-the-blanks-Prüfungsaufgaben beide Schreibweisen verwenden. Wichtige Optionen sind: 왘
-x (extract) extrahiert ein Archiv.
왘
-z (gzip/gunzip) sorgt für eine Komprimierung mittels gzip bzw. eine Ent-
komprimierung durch gunzip. 왘
-v (verbose) schaltet den Verbose-Mode ein.
왘
-c (create) erstellt ein neues Archiv.
왘
-t (table) listet den Inhalt eines Archivs auf.
왘
-j (bzip2/bunzip2) sorgt für eine Komprimierung mittels bzip2 bzw. eine Entkomprimierung durch bunzip2.
왘
-f (file) zeigt an, dass zur Eingabe bzw. Ausgabe eine Datei verwendet wird. Standardmäßig arbeitet tar mit dem Bandlaufwerk /dev/rmt0.
Sie sollten für die Prüfung wenigstens die oben genannten Optionen kennen. Die Reihenfolge der Optionen spielt, wie bei den meisten Programmen, keine Rolle. Eine Ausnahme ist die Option f. Diese muss immer als Letzte verwendet werden. Das folgende Beispiel erzeugt ein mit bzip2 komprimiertes Archiv der Konfigurationsdateien eines Linux-Systems: archangel:/ # tar -cvjf backup.tar.bz2 /etc/*
Um den Inhalt eines solchen Archivs zu betrachten, benötigen Sie folgendes Kommando: archangel:/ # tar -tvjf backup.tar.bz2 | less
Im Notfall können die Dateien ohne Probleme wiederhergestellt werden: archangel:/ # tar -xvjf backup.tar.bz2
120
1451.book Seite 121 Dienstag, 7. Juli 2009 2:18 14
103.3 Grundlegende Dateiverwaltung
gzip Wenn Sie Dateien komprimieren wollen, dann können Sie das Programm gzip verwenden. Wie Sie im vorangegangenen Abschnitt gelesen haben, kann tar gzip aufrufen. Wenn Sie mehrere Dateien zu einem Archiv zusammenfassen wollen, ist tar in Kombination mit den Optionen z oder j die bessere Lösung. Wenn gzip ohne Optionen verwendet wird, komprimiert er die angegebenen Dateien, hängt an die Zieldateien die Erweiterung .gz an und löscht anschließend die Originaldateien. Sollen die Originaldateien erhalten bleiben, müssen Sie die Option -c verwenden. Damit man die Effizienz von gzip sehen kann, wird diese Option im folgenden Beispiel angewendet: archangel:/demo # gzip lpi101.doc archangel:/demo # ls -lh total 1.2M drwxr-xr-x 2 root root 4.0K Nov drwxr-xr-x 24 root root 4.0K Nov -rwxr--r-1 root root 903K Nov -rw-r--r-1 root root 237K Nov
-c > lpi101.doc.gz
16 16 16 16
17:50 17:45 17:46 17:50
. .. lpi101.doc lpi101.doc.gz
Die Datei ist von 903 KB auf 237 KB komprimiert worden. Der Redirektor > war in diesem Fall notwendig, weil die Ausgabe von gzip auf dem Bildschirm erfolgt, wenn die Option -c verwendet wird. Um eine Datei zu komprimieren, ohne das Original beizubehalten, geben Sie die Datei einfach ohne weitere Parameter an: archangel:/demo # gzip lpi101.doc
Sie können auch mehrere Dateien durch Leerstellen voneinander getrennt angeben oder Platzhalter (Wildcards) verwenden. Den Inhalt eines mit gzip komprimierten Archivs können Sie mit dem Schalter -l auflisten. Es wird Ihnen dann auch die komprimierte Größe der Einzeldateien angezeigt, falls das Archiv mehrere Dateien enthält: archangel:/demo # gzip -l lpi101.doc compressed uncompressed 31 0
ratio uncompressed_name 0.0 % lpi101.doc
gunzip Um eine oder mehrere Dateien, die mit gzip komprimiert wurden, wieder zu entkomprimieren, stehen Ihnen mehrere Möglichkeiten zur Verfügung: 왘
gunzip ist das offizielle Gegenstück zu gzip. Auf der Kommandozeile angegebene Dateien werden von gunzip dekomprimiert.
121
1451.book Seite 122 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
왘
gzip -d startet gzip im Modus decompress.
왘
zcat verhält sich ohne Optionen wie gunzip -c.
bzip2 Sie können zum Komprimieren von Dateien auch bzip2 verwenden. In vielen Fällen erreichen Sie hierdurch eine höhere Kompression als mit gzip. archangel:/demo # bzip2 lpi101.doc -c > lpi101.doc.bz2 archangel:/demo # ls -lh total 1.2M drwxr-xr-x 2 root root 4.0K Nov 16 18:00 . drwxr-xr-x 24 root root 4.0K Nov 16 17:45 .. -rwxr--r-1 root root 903K Nov 16 17:46 lpi101.doc -rw-r--r-1 root root 213K Nov 16 18:00 lpi101.doc.bz2
Die Datei ist von 903 KB auf 213 KB komprimiert worden. Die Effizienz war also zumindest in diesem Fall etwas besser als bei der Verwendung von gzip. bunzip2 Genauso wie bei gzip gibt es auch zur Entkomprimierung von bz2-Dateien folgende Möglichkeiten: 왘
bunzip2
왘
bzip2 -d
왘
bzcat
Tatsächlich handelt es sich in allen drei Fällen um dasselbe Programm, das lediglich jeweils über unterschiedliche Links aufgerufen wird. Verwendung von cpio Das Programm cpio wird verwendet, um Dateien in Archive hinein oder aus Archiven heraus zu kopieren. Es ähnelt vom Verwendungszweck also im weitesten Sinne dem tar-Befehl. Eigentlich wird cpio heutzutage kaum noch verwendet, aber Sie müssen die grundlegendsten Optionen für die Prüfung kennen. Es gibt drei verschiedene Betriebsmodi, in denen cpio arbeitet. Welcher Modus verwendet wird, hängt von der ersten übergebenen Option ab. Die Benennung dieser drei Schalter scheint auf den ersten Blick recht paradox. Merken Sie sich bitte trotzdem mindestens diese Optionen: 왘
cpio –i | --ectract aktiviert den Copy-in-Modus. In diesem Modus werden
Dateien aus einem Archiv in das Dateisystem kopiert. Sie müssen also das –i aus Sicht des Dateisystems sehen und nicht aus Sicht des Archivs.
122
1451.book Seite 123 Dienstag, 7. Juli 2009 2:18 14
103.3 Grundlegende Dateiverwaltung
왘
cpio –o | --create steht für das Gegenteil von –i und wird als Copy-outModus bezeichnet. Es werden also diesmal Dateien aus (out) dem Dateisystem in das Archiv kopiert bzw. zunächst ein Archiv erstellt (create).
왘
cpio –p | --pass-through – in diesem Modus wird weder ein Archiv erstellt
noch überhaupt ein Archiv verwendet. Das Programm cpio liest die zu kopierenden Dateien von Standardeingabekanal und kopiert diese dann in ein Verzeichnis, das als Argument übergeben wurde. Ein Beispiel, das ähnlich auch in der Prüfung vorkommen könnte, verlangt, dass alle mit OpenOffice.org erstellten Tabellendokumente, die in den Heimatverzeichnissen der Benutzer existieren, in ein Verzeichnis /backup gesichert werden sollen. Die im Dateisystem verwendete Verzeichnisstruktur soll im Backup nachvollziehbar sein. Der verwendete Befehl könnte dann so aussehen: archangel:/ # find /home -name *.ods | cpio -pd /backup
Das Suchwerkzeug find sucht hier also unterhalb von /home nach Dateien mit der Erweiterung ods und übergibt diese dann an cpio. Die Option –p bringt cpio in den Pass-Through-Modus. Es wird also kein Archiv angelegt. Das Kommando –d sorgt dafür, dass die benötigten Directorys angelegt werden. Als letztes Argument gibt /backup das Ziel für cpio an. Die von cpio verwendeten Optionen würden ohne Probleme zwei Buchseiten füllen. Deshalb verweise ich hier auf die Manpages zu cpio. Für die Prüfung reicht es normalerweise aus, die Schalter für die Betriebsmodi von cpio zu kennen. Verwendung von dd Mit dd können Sie Daten kopieren oder konvertieren. Da die Konvertierung von Daten in diesem Zusammenhang keine Rolle spielt, sei nur erwähnt, dass es etwa möglich ist, Daten von einem Datenträger zu lesen und dann mit einer geänderten Blockgröße auf einen anderen Datenträger zu schreiben. Wenn Sie dd (eigentlich sinnloserweise) ohne Parameter starten, dann liest dieser von der Standardeingabe und schreibt auf die Standardausgabe. Sie können dann erkennen, dass dd »stur« das schreibt, was Sie eingegeben haben, ohne zu interpretieren oder Modifikationen vorzunehmen: archangel:/ # dd Mal was schreiben und mit Strg + D abschicken... Mal was schreiben und mit Strg + D abschicken... 0+1 records in 0+1 records out 49 bytes (49 B) copied, 4.2909 seconds, 0.0 kB/s
123
1451.book Seite 124 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Diese Eigenschaft ist auch schon einer seiner großen Vorzüge, weil Sie auf diese Art problemlos empfindsame Betriebssysteme von einer Festplatte zu anderen klonen können. Es ist ratsam, gleich große Festplatten zu verwenden, weil selbst der MBR und die darin enthaltene Partitionstabelle mit kopiert werden. Dazu muss natürlich der Eingabekanal und der Ausgabekanal geändert werden. Wenn die Originalfestplatte /dev/sda ist und die erwünschte Kopie an /dev/sdb angeschlossen wurde, sieht die dd Zeile so aus: archangel:/ # dd if=/dev/sda of=/dev/sdb
In diesem Zusammenhang möchte ich darauf hinweisen, dass die Duplizierung großer Datenträger mit dd erhebliche Zeit in Anspruch nimmt. Sehr beliebt ist auch das Sichern des Master Boot Record mittels dd. Das funktioniert dann so: archangel:/ # dd if=/dev/hda of=mbr.backup ibs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.037257 seconds, 13.7 kB/s
Hier wurde als Eingabe die Festplatte an /dev/hda verwendet. Die Ausgabe erzeugt die Datei mbr.backup im aktuellen Verzeichnis, weil kein Pfad angegeben wurde. Der Parameter ibs steht für in block size und sorgt dafür, dass ein gelesener Block immer 512 Byte groß ist. Mit count wird die Anzahl der zu lesenden Blöcke auf 1 festgelegt, denn der MBR ist ja ausschließlich der erste Block auf einer Festplatte. Soll dd zur Erstellung einer Datensicherung verwendet werden, müssen Sie als Ausgabekanal einfach den Streamer einstellen. Denken Sie hierbei immer daran, dass es rückspulende und nicht rückspulende Geräte gibt. Beispiel: archangel:/ # dd if=/home of=/dev/st0 cbs=16b
Dieses Kommando sichert alle Benutzerverzeichnisse auf den ersten SCSI-Streamer und spult das Band anschließend zurück. Der Wert cbs sorgt für eine dem Streamer angemessene Blockgröße. file Mit dem Kommando file können Sie bei einer unbekannten Datei feststellen, um welchen Dateitypen es sich handelt. Am besten sehen Sie den Verwendungszweck an ein paar Beispielen: root@archangel:~# file /bin/bash /bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), stripped
124
1451.book Seite 125 Dienstag, 7. Juli 2009 2:18 14
103.4 Ströme, Pipes und Umleitungen verwenden
Über /bin/bash wissen Sie ja bereits bestens Bescheid. Deshalb ist dieses Beispiel auch selbsterklärend. In den nächsten Zeilen stößt file auf ein gewöhnliches Shell-Skript: root@archangel:~# file /etc/cron.daily/backup /etc/cron.daily/backup: Bourne-Again shell script text executable
Prüfungstipp Sie können file sehr viele Optionen übergeben (siehe Manpage). Für die Prüfung reicht es aber völlig aus, zu wissen, was das Programm grundsätzlich macht.
103.4 Ströme, Pipes und Umleitungen verwenden Wichtung: 4 Beschreibung: Kandidaten sollten in der Lage sein, Ströme umzuleiten und zu verbinden, um Textdaten effizient zu verarbeiten. Zu diesen Aufgaben gehören das Umleiten der Standardeingabe, Standardausgabe und Standardfehlerausgabe, das Weiterleiten der Ausgabe eines Kommandos an die Eingabe eines anderen Kommandos, die Verwendung der Ausgabe eines Kommandos als Argumente für ein anderes Kommando und das Senden der Ausgabe sowohl an die Standardausgabe als auch an eine Datei. Wichtigste Wissensgebiete: 왘
Umleiten der Standardeingabe, Standardausgabe und Standardfehlerausgabe
왘
Weiterleiten der Ausgabe eines Kommandos an die Eingabe eines anderen Kommandos (Pipe)
왘
Verwenden der Ausgabe eines Kommandos als Argumente für ein anderes Kommando
왘
Senden der Ausgabe sowohl an die Standardausgabe als auch eine Datei
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
tee
125
1451.book Seite 126 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Allgemeines Manchmal kann es vorkommen, dass Sie die Ausgabe eines Programms direkt mit einem anderen Programm weiterverarbeiten müssen. In diesem Fall können Sie eine sogenannte Pipe verwenden. Mit ihrer Hilfe ist das Zwischenspeichern der Ausgabe des ersten Programms in einer Datei zum Zweck, diese Datei dann mit dem zweiten Programm wieder einzulesen, unnötig. In einem anderen Fall erzeugt ein Programm vielleicht eine Ausgabe auf dem Bildschirm, die Sie abspeichern wollen. In diesem Fall benötigen Sie eine Umleitung der Standardausgabe (Redirect). Wenn ein Programm ausschließlich von der Standardeingabe (normalerweise die Tastatur) liest und Sie mit diesem Programm eine Datei einlesen müssen, benötigen Sie ebenfalls eine Umleitung. Diesmal muss allerdings die Standardeingabe umgeleitet (Redirect) werden.
stdin, stdout und stderr Immer wenn unter Linux ein Programm ausgeführt wird, erhält dieses Informationen über drei Dateideskriptoren. Diese werden als Standard-I/Os bezeichnet: 왘
Standardeingabekanal (stdin) ist normalerweise die Tastatur. Viele Programme erwarten ihre Eingaben von stdin. Es gibt aber auch, wie Sie schon oft gesehen haben, Programme, die stattdessen Dateien als Argumente erwarten. Diese Programme verwenden stdin nicht.
stdin entspricht dem Dateideskriptor 0. 왘
Standardausgabekanal (stdout) ist normalerweise ein Terminal. Viele Programme machen ihre Ausgaben direkt nach stdout.
stdout entspricht dem Dateideskriptor 1. 왘
Standardfehlerkanal (stderr) ähnelt vom Verhalten her stdout, enthält aber nur die Fehlermeldungen eines Programms. Die Ausgabe des Fehlerkanals erfolgt normalerweise auch auf dem Terminal.
stderr entspricht dem Dateideskriptor 2. Dadurch dass der Standardausgabekanal und der Standardfehlerkanal getrennt verwaltet werden, ist es möglich, Fehlermeldungen von den normalen Ausgaben eines Programms zu trennen. Deshalb können Sie den Fehlerkanal z.B. in eine Fehlerprotokolldatei umlenken.
126
1451.book Seite 127 Dienstag, 7. Juli 2009 2:18 14
103.4 Ströme, Pipes und Umleitungen verwenden
Umleitungen (Redirects) Umleitungen werden verwendet, um die Standard-I/Os entweder in eine Datei hinein oder aus einer Datei heraus umzulenken. Das ist z.B. dann erforderlich, wenn man einem Programm keine Dateien als Argumente übergeben kann. Wenn Sie alle Meldungen des Kernels in einer separaten Datei speichern möchten, können Sie mit grep im Syslog nach solchen Meldungen suchen und diese dann mit einem Redirektor in eine andere Datei speichern: archangel:/diag # grep kernel /var/log/messages > kernelmessages
Mit einem solchen Kommando erfassen Sie nur die Standardausgabe von grep. Wenn ein Fehler auftritt, werden die entsprechenden Meldungen weiterhin auf der Konsole ausgegeben. Sie können mit einer Kommandozeile wie der folgenden Standardmeldungen und Fehlermeldungen in zwei unterschiedlichen Dateien aufzeichnen: archangel:/scripts # script-xy 2>fehler.log 1>erfolg.log
Hierbei lenken das Argument 1>erfolg.log die normalen Meldungen des Programms und 2>fehler.log die Fehlermeldungen in je eine Datei um. Wenn nur eine einzige Datei für die Aufzeichnung sowohl von stdout als auch stderr verwendet werden soll, können Sie auch ein Kommando wie das folgende verwenden: archangel:/scripts # script-xy >protokolldatei 2>&1
Der erste Teil des Kommandos script-xy >protokolldatei sorgt für die Umleitung von stdout in die Textdatei. 2>&1 leitet stderr auf stdout um. Das & besagt, dass 1 keine Datei ist. Das Kommando würde ohne das & den Standardfehlerkanal in die Datei 1 umleiten. Wenn Sie einen Standard-I/O umleiten, wird die Zieldatei, wenn diese noch nicht existiert, automatisch erstellt. Sollten Sie dieselbe Umleitung noch einmal durchführen, wird die ursprüngliche Datei überschrieben. Um Daten an eine bestehende Datei anzuhängen, die für Umleitungen verwendet wird, müssen Sie einfach zwei Redirektorzeichen verwenden (>>). archangel:/diag # grep kernel /var/log/messages >> kernelmessages
Wenn Sie nur einen einzelnen Redirektor verwenden, wird gleich zu Beginn der Programmausführung die Zieldatei erstellt. Wenn diese bereits vorhanden ist, wird sie gelöscht und neu erstellt. Sollten also Zieldatei und Eingabedatei identisch sein, dann ist ein Datenverlust garantiert. Das folgende Kommando hat demnach eine leere Kundendatenbank zur Folge: archangel:/db # grep "Meier" kunden-db > kunden-db
127
1451.book Seite 128 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Es besteht aber auch die Möglichkeit, den Standardeingabekanal umzuleiten. Beliebt hierfür ist das Programm mail. Das folgende Kommando sendet den kompletten Syslog per Mail an einen kompetenten Mitarbeiter. Der Betreff lautet »Überprüfen!«, und der Inhalt der Datei erscheint im Textkörper der Mail: archangel:/ # mail -s "Überprüfen!" willi < /var/log/messages
Zusammenfassung: 왘
Um die Standardausgabe umzulenken, verwenden Sie diese Syntax: Kommando > Zieldatei (überschreibend) Kommando 1> Zieldatei (überschreibend) Kommando >> Zieldatei (anhängend) Kommando 1>> Zieldatei (anhängend)
왘
Um den Standardfehlerkanal umzulenken, verwenden Sie: Kommando 2> Zieldatei (überschreibend) Kommando 2>> Zieldatei (anhängend)
왘
Um beide Ausgabekanäle umzulenken, verwenden Sie: Kommando > Zieldatei 2>&1 (gemeinsame Zieldatei) Kommando 1> ZieldateiA 2> ZieldateiB (getrennte Zieldateien)
왘
Um die Standardeingabe umzulenken, verwenden Sie diese Syntax: Kommando < Quelldatei
Pipes Im Gegensatz zu Umleitungen lenken Pipes Datenströme nicht in Dateien um oder aus Dateien heraus. Sie sorgen vielmehr dafür, dass die Ausgabe eines Programms direkt als Eingabe für ein anderes Programm verwendet werden kann. Die Ausgabe des ersten Programms erfolgt dann nicht nach stdout. Oft werden Umleitungen und Pipes auch miteinander kombiniert. Sehr gebräuchlich ist die Umlenkung größerer Textmengen nach less. Das folgende Kommando würde möglicherweise eine solche größere Textmenge verursachen: archangel:/ # grep "kernel" /var/log/messages
Damit Sie die Ausgabe des Kommandos überhaupt komplett lesen können, wird sie einfach mit einer Pipe an less weitergegeben: archangel:/ # grep "kernel" /var/log/messages | less
Eine Kombination aus Umleitungen und Pipes verwendet z.B. üblicherweise das Programm tr. Das liegt daran, dass tr weder eine Eingabedatei noch eine Ausga-
128
1451.book Seite 129 Dienstag, 7. Juli 2009 2:18 14
103.5 Prozesse erzeugen, überwachen und beenden
bedatei als Argument übergeben werden kann. Deshalb erfolgt die Eingabe oft mittels einer Pipe aus dem Programm cat heraus und die Ausgabe mit einer Umlenkung in die entsprechende Zieldatei: archangel:/textfiles # cat textfile1 | tr \n \r > textfile2
tee und xargs Das Programm tee hat nichts mit dem gleichnamigen aromatischen Aufgussgetränk zu tun, sondern eher mit einem T-Stück. Mit tee kann der Datenstrom eines Programms gleichzeitig auf der Konsole und in einer Textdatei ausgegeben werden. Beispiel: archangel:/ # grep pppd /var/log/messages | tee pppdmessages
Mit xargs können Sie die Ergebnisse eines Programms, das eine mehrzeilige Ausgabe liefert, an ein Programm übergeben, das immer nur ein Argument gleichzeitig verarbeiten kann. Beispiel: archangel:/ # cut -d " " -f1 /var/log/apache2/access_log |\ sort | uniq | xargs -n1 host
Das Kommando wurde der Übersichtlichkeit halber mit dem Backslash auf zwei Zeilen aufgeteilt. Zur Erklärung: Mit diesem Kommando soll überprüft werden, von welchen Domänen aus auf einen Webserver zugegriffen wurde. Zunächst wird mit dem cut-Befehl die erste Spalte des acces_log von Apache isoliert. Diese Spalte enthält die IP-Adressen der Besucher. Das Kommando sort sortiert die Liste der IP-Adressen. Mit uniq wird dafür gesorgt, dass jede IP-Adresse nur einmal in der Liste auftaucht. Diese Liste kann nicht direkt an das Kommando host zur Namensauflösung übergeben werden, weil host nur ein einzelnes Argument erwartet. Deshalb übergibt xargs die IP-Adressen einzeln. Das Kommando host wird also durch xargs für jede IP-Adresse einmal aufgerufen.
103.5 Prozesse erzeugen, überwachen und beenden Wichtung: 4 Beschreibung: Kandidaten sollten die einfache Prozessverwaltung beherrschen. Wichtigste Wissensgebiete: 왘
Jobs im Vordergrund und im Hintergrund ablaufen lassen
왘
einem Programm signalisieren, dass es nach dem Abmelden weiterlaufen soll
129
1451.book Seite 130 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
왘
aktive Prozesse beobachten
왘
Prozesse zur Ausgabe auswählen und sortieren
왘
Signale an Prozesse schicken
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
&
왘
bg
왘
fg
왘
jobs
왘
kill
왘
nohup
왘
ps
왘
top
왘
free
왘
uptime
왘
killall
Allgemeines In diesem und auch im nächsten Kapitel geht es um die Steuerung und Überwachung von Prozessen. Jedes Programm, das auf einem Computer läuft, besteht aus mindestens einem Prozess. Prozesse sind in einer Baumhierarchie angeordnet, und die Wurzel dieses Baumes ist der Prozess init. Wenn der Kernel beim Systemstart alle seine Module initialisiert hat, übergibt er die Kontrolle an den Prozess init. Jedem Prozess wird eine eindeutige ID zugeordnet, die PID (ProzessID). Der init-Prozess hat immer die PID 1. Die PID 0 gibt es nicht. Fallen Sie in der Prüfung nicht darauf herein! root@ubuntu-server:~# ps -A | head –4 PID TTY TIME CMD 1 ? 00:00:04 init 2 ? 00:00:00 migration/0 3 ? 00:00:00 ksoftirqd/0
Der init-Prozess ist der erste Prozess, der auf einem System langfristig gestartet wird und der letzte Prozess, der beim Herunterfahren des Systems stirbt.
130
1451.book Seite 131 Dienstag, 7. Juli 2009 2:18 14
103.5 Prozesse erzeugen, überwachen und beenden
Überwachen von Prozessen ps Mit dem Kommando ps können Sie die aktuell auf einem Computer laufenden Prozesse anzeigen. Es handelt sich hierbei allerdings lediglich um eine Momentaufnahme. Programme, die über eine kurze Lebensdauer verfügen (z.B. df), werden Sie mit ps nicht anzeigen können. Wenn Sie das Kommando ps ohne Optionen ausführen, erhalten Sie lediglich eine Liste der Prozesse, die auf dem aktuellen Terminal laufen. Das sind in der Regel nur die Shell und das ps-Kommando selbst. Wenn Jobs im Hintergrund laufen (oder stehen), werden diese auch angezeigt. Sie können bei der Übergabe von Optionen einen Strich voranstellen oder auch nicht. Die folgenden beiden Kommandos hätten demnach die gleiche Ausgabe zur Folge: root@ubuntu-server:~# ps -A root@ubuntu-server:~# ps A
Optionen können, wie bei den meisten Programmen, nach Belieben kombiniert werden. Folgende Optionen sind sowohl für die Prüfung als auch für die Praxis wichtig: 왘
-a zeigt auch die Prozesse anderer Benutzer an. Voraussetzung ist, dass diese
Prozesse mit einem Terminal verknüpft sind. 왘
-u zeigt auch die Startzeit, den Pfad zur ausführbaren Datei und den ausfüh-
renden Benutzer an. 왘
-x führt auch die Prozesse auf, die nicht mit einem Terminal verbunden sind (z.B. init oder cron).
왘
-C prozess sorgt für die Ausgabe aller Instanzen eines auf der Kommando-
zeile angegebenen Prozesses. 왘
-U benutzer zeigt die Prozesse eines bestimmten Benutzers an.
Es folgen einige typische Beispiele, die ähnlich auch in der Prüfung Verwendung finden können. Um alle Instanzen des nfsd (NFS-Daemon), die auf einem System laufen, anzuzeigen, geben Sie folgendes Kommando ein: root@ubuntu-server:~# ps -C nfsd PID TTY TIME CMD 9592 ? 00:00:00 nfsd 9593 ? 00:00:00 nfsd 9594 ? 00:00:00 nfsd ... weitere Zeilen wurden abgeschnitten ...
131
1451.book Seite 132 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Eine sehr beliebte Kombination ist -aux. Damit werden alle Prozesse sämtlicher Benutzer angezeigt. Zusätzlich werden Prozesse gelistet, die nicht mit einem Terminal verbunden sind. Die Ausgabe enthält umfangreiche Informationen zum Prozess: root@ubuntu-server:~# ps aux USER PID %CPU %MEM VSZ RSS TTY root 1 0.0 0.3 2912 1848 ? Ss root 2 0.0 0.0 0 0 ? S root 3 0.0 0.0 0 0 ? SN root 4 0.0 0.0 0 0 ? S
STAT START Oct16 0:04 Oct16 0:00 Oct16 0:00 Oct16 0:00
TIME COMMAND /sbin/init [migration/0] [ksoftirqd/0] [watchdog/0]
... weitere Zeilen wurden abgeschnitten ...
Wenn Sie in einer langen Prozessliste schnell nach einem laufenden Prozess suchen müssen, empfiehlt es sich, die Ausgabe des Kommandos an grep weiterzuleiten. Beispiel: root@ubuntu-server:~# ps -A | grep apache 398 ? 00:00:00 apache2 404 ? 00:00:00 apache2 ... weitere Zeilen wurden abgeschnitten ...
pstree Das Kommando pstree zeigt ebenfalls die aktuell auf einem Computer laufenden Prozesse an. Im Gegensatz zu ps zeigt pstree aber auch die Hierarchie der Prozesse in einem Baumdiagramm aus ASCII-Zeichen an. Die Ausgabe des Kommandos sieht folgendermaßen aus: root@ubuntu-server:~# pstree -pn init(1) ][]migration/0(2) \]ksoftirqd/0(3) \]watchdog/0(4) \]events/0(5) \]khelper(6) \]kthread(7)][]kblockd/0(30) L \]kacpid(31) L \]kacpi_notify(32) L \]kseriod(88) ... weitere Zeilen wurden abgeschnitten ...
Folgende Optionen, die zum Teil schon im vorangegangenen Beispiel enthalten sind, sollten Sie kennen:
132
1451.book Seite 133 Dienstag, 7. Juli 2009 2:18 14
103.5 Prozesse erzeugen, überwachen und beenden
왘
-a zeigt zusätzlich die Optionen und Argumente an, die einem Prozess an der
Kommandozeile übergeben wurden. 왘
-G hat eine Ausgabe im VT100-Modus zur Folge. Das führt bei den meisten
Terminals zu einer optisch ansprechenderen Ausgabe. 왘
-p zeigt zusätzlich die PIDs an.
왘
-n sorgt für eine Sortierung nach PIDs. Normalerweise gibt pstree die Pro-
zesse in alphabetischer Reihenfolge aus. top Mit top können Sie die auf einem Computer laufenden Prozesse in Echtzeit überwachen. Während der Ausführung werden die folgenden Informationen dynamisch im Terminal ausgegeben: 왘
allgemeine Informationen, wie Uhrzeit, Uptime, Anzahl der angemeldeten Benutzer, durchschnittliche Systemauslastung
왘
Tasks: Anzahl der Prozesse insgesamt, laufende Prozesse, schlafende Prozesse, gestoppte Prozesse und Zombie-Prozesse
왘
CPU(s): Benutzung durch Benutzerprozesse, Systemprozesse, den Idle-Prozess u.a.
왘
Mem: Speicher insgesamt, in Verwendung, freier Speicher und für Buffers verwendeter Speicher
왘
Swap: diverse Werte zur Verwendung der Swap-Partition(en)
Anschließend folgt eine Auflistung der laufenden Prozesse. Diese werden standardmäßig in Reihenfolge der CPU-Verwendung ausgegeben. Die inaktiven Prozesse werden anschließend in Reihenfolge der PIDs ausgegeben. Beachten Sie bitte, dass das Programm top selbst auch Systemressourcen belegt und deshalb das Messergebnis beeinflusst. Dies demonstriert auch folgendes Beispiel: PID USER 223 root 1 root 2 root 3 root 4 root 5 root 6 root
PR NI VIRT RES SHR 15 0 2056 1016 752 R 16 0 680 104 72 S RT 0 0 0 0 S 34 19 0 0 0 S RT 0 0 0 0 S 34 19 0 0 0 S 10 –5 0 0 0 S
S %CPU %MEM TIME+ 1.5 0.0 0:00.03 0.0 0.0 0:03.71 0.0 0.0 0:04.70 0.0 0.0 11:55.58 0.0 0.0 0:16.45 0.0 0.0 3:09.48 0.0 0.0 0:04.55
COMMAND top init migration/0 ksoftirqd/0 migration/1 ksoftirqd/1 events/0
Sie können top sowohl beim Aufruf als auch zur Laufzeit Optionen übergeben. Für die Prüfung müssen Ihnen die gängigsten Optionen für beide Situationen bekannt sein.
133
1451.book Seite 134 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Wichtige Interaktivoptionen: 왘
k (kill) tötet einen Prozess. Es muss sowohl die PID als auch das Signal ange-
geben werden. 왘
n (number of) Anzahl der Zeilen, die top ausgibt.
왘
r (renice) ändert den Nice-Wert eines Prozesses zur Laufzeit.
왘
h (help) gibt eine Hilfe aus.
왘
q (quit) beendet das Programm.
Wichtige Kommandozeilenoptionen: 왘
-i zeigt nur die Prozesse an, die aktiv sind. Schlafende Prozesse werden igno-
riert. 왘
-b (batch) kann in Kombination mit einem Redirektor verwendet werden, um
die Ausgabe in eine Textdatei umzuleiten. 왘
-d (delay) gibt das Aktualisierungsintervall in Sekunden an. Der Standardwert
ist eine Sekunde. 왘
-q startet top mit Echtzeitausgabe. Die Aktualisierung wird sehr hochfrequent, was zu einem instabilen System führen kann.
Signale an Prozesse senden Wenn Sie einen Prozess zur Laufzeit beeinflussen wollen, dann können Sie diesem Prozess ein Signal senden. Es gibt insgesamt 64 verschiedene Signale. Die gute Nachricht ist, dass Sie nicht alle Signale für die Prüfung kennen müssen. Sie erhalten eine Auflistung aller Signale, wenn Sie das folgende Kommando ausführen: archangel:~ # kill -l 1) SIGHUP 2) SIGINT 5) SIGTRAP 6) SIGABRT 9) SIGKILL 10) SIGUSR1
3) SIGQUIT 7) SIGBUS 11) SIGSEGV
4) SIGILL 8) SIGFPE 12) SIGUSR2
... weitere Zeilen wurden abgeschnitten ...
Die folgenden Signale werden häufig (auch manuell) an Prozesse übermittelt. Sie sind sowohl für die Praxis als auch für die Prüfung von Interesse: 왘
1 bzw. SIGHUP ist das Hang-up-Signal, das ursprünglich Modems zum Aufle-
gen veranlasste. Es wird auch benutzt, um Prozesse, die als Daemons laufen (bind, squid usw.), dazu zu veranlassen, ihre Konfigurationsdateien neu einzulesen.
134
1451.book Seite 135 Dienstag, 7. Juli 2009 2:18 14
103.5 Prozesse erzeugen, überwachen und beenden
왘
9 bzw. SIGKILL beendet einen Prozess mit Gewalt. Dieses Signal sollte nur in
Notfällen verwendet werden, wenn Signal 15 kein Ergebnis bringt. Ein mit SIGKILL beendeter Prozess räumt nicht auf (temporäre Dateien usw.). 왘
15 SIGTERM fordert einen Prozess auf, sich selbst zu beenden. Der Prozess
bekommt die Gelegenheit, Aufräumaktivitäten durchzuführen. Weitere Signale, die häufig vorkommen, aber »über Umwege« an den Prozess gesendet werden, sind: 왘
2 bzw. SIGINT führt einen Programmabbruch aus. SIGINT wird gesendet, wenn die Tastenkombination (Strg) + (C) betätigt wird.
왘
18 bzw. SIGCONT setzt einen Prozess fort, der zuvor mit SIGSTOP angehalten
wurde. Das Signal SIGCONT wird durch die Kommandos fg und bg gesendet, die im nächsten Abschnitt behandelt werden. 왘
19 bzw. SIGSTOP hält einen Prozess an. Der Prozess kann später mit SIGCONT
fortgesetzt werden. 왘
20 bzw. SIGTSTP hält einen Prozess an. Der Prozess bleibt speicherresident
und kann mit SIGCONT fortgesetzt werden. Die Tastenkombination (Strg) + (Z) sendet dieses Signal. kill Wenn Sie ein Signal an einen Prozess senden wollen, verwenden Sie das Programm kill. Wie der Name schon vermuten lässt, ist kill primär dazu gedacht, ein Programm zu beenden. Der etwas morbide Begriff rührt wohl daher, dass man das Beenden eines Prozesses unter Unix auch Sterben eines Prozesses nennt. Das Kommando kill kann aber grundsätzlich alle 64 Signale (und nicht nur die »tödlichen«) an einen Prozess senden. Die Syntax von kill ist sehr vielfältig, und Sie müssen für die Prüfung mit den verschiedenen Optionen vertraut sein. Als Argument erwartet kill eine oder mehrere durch Leerstellen getrennte PIDs. Ohne Optionen sendet kill das Signal 15 (SIGTERM) an den angegebenen Prozess. Wenn Sie einen Prozess mit kill beenden wollen, müssen Sie zunächst dessen PID ermitteln. Das können Sie mit dem Durchführen des bereits bekannten Programms ps erreichen. Im folgenden Beispiel soll ein außer Kontrolle geratener Midnight Commander beendet werden. Zunächst wird die PID ermittelt: root@ubuntu-server:~# ps -au | grep mc root 3167 0.2 0.4 5684 2268 pts/0 root 3183 0.0 0.1 2884 752 pts/0
T 22:02 0:00 mc S+ 22:05 0:00 grep mc
135
1451.book Seite 136 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Die PID ist demnach 3.167. Die zweite Zeile, die grep ausgibt, ist das grep-Kommando mit der Suche nach dem mc selbst. Es soll zunächst ein SIGTERM (Signal 15) an den Prozess gesendet werden. Dazu stehen elf Varianten zur Verfügung: root@ubuntu-server:~# root@ubuntu-server:~# root@ubuntu-server:~# root@ubuntu-server:~# root@ubuntu-server:~# root@ubuntu-server:~# root@ubuntu-server:~# root@ubuntu-server:~# root@ubuntu-server:~# root@ubuntu-server:~# root@ubuntu-server:~#
kill kill kill kill kill kill kill kill kill kill kill
3167 -s 15 3167 -s SIGTERM 3167 -s TERM 3167 -s sigterm 3167 -s term 3167 –15 3167 -SIGTERM 3167 -TERM 3167 -sigterm 3167 -term 3167
Alle Kommandos führen zu demselben Ergebnis. Leider läuft der Midnight Commander immer noch. Das ist nicht überraschend, weil dieses Programm für dieses Verhalten bekannt ist. Das gilt übrigens auch für Netscape-Browser, die gerne noch Prozesse aufrechterhalten, wenn X schon längst beendet wurde. Dieses Verhalten ist auch bei LPI bekannt! Ein solcher Prozess muss mit Gewalt beendet werden: root@ubuntu-server:~# kill -SIGKILL 3167
Auch dieses Kommando kann in immerhin zehn Varianten ausgeführt werden. Die erste Variante von SIGTERM entfällt, weil SIGTERM die Voreinstellung ist. In der Prüfung wird häufig folgendes Konstrukt verwendet: root@ubuntu-server:~# kill -SIGHUP `cat /var/run/dhcpd.pid`
Mit dem Befehlsteil cat /var/run/dhcpd.pid wird die PID des dhcpd festgestellt. Die sogenannten Backquotes sorgen dafür, dass das Ergebnis dieses Kommandos an kill -SIGHUP angehängt wird. Eine andere Variante dieser Methode wäre: root@ubuntu-server:~# kill -SIGHUP $(cat /var/run/dhcpd.pid)
killall Damit Konstrukte, wie das letzte Beispiel, überflüssig werden, wurde das Programm killall entwickelt. Das Programm killall verwendet im Gegensatz zu kill keine PIDs, sondern Prozessnamen. Daraus ergeben sich zwei Vorteile: 왘
Die PID muss nicht ermittelt werden.
왘
Es können mehrere Prozesse mit gleichem Namen auf einmal beendet werden (deshalb heißt das Programm killall).
136
1451.book Seite 137 Dienstag, 7. Juli 2009 2:18 14
103.5 Prozesse erzeugen, überwachen und beenden
Ansonsten kann killall ähnlich wie kill verwendet werden. Das folgende Kommando beendet sofort alle Midnight-Commander-Instanzen mit Gewalt: root@ubuntu-server:~# killall -s 9 mc
Jobs im Vorder- und im Hintergrund Sie können auf einer einzigen Shell praktisch beliebig viele Benutzerprozesse (Jobs) gleichzeitig laufen lassen. Es kann aber immer nur ein Prozess im Vordergrund laufen. Programme, die in den Hintergrund transferiert wurden, können den Status »running« oder »stopped« haben. Wenn sich ein Hintergrundprozess im Status »running« befindet, dann verrichtet er weiterhin seine Tätigkeit. Im Status »stopped« wartet er untätig im Hintergrund, bis er fortgesetzt oder endgültig beendet wird. Wenn Sie ein Programm starten und anschließend die Tastenkombination (Strg) + (Z) ausführen, dann tritt das gestartete Programm in den Hintergrund. Außerdem sendet die Tastenkombination (Strg) + (Z) das Signal 20 (SIGTSTP) an den Prozess, sodass dieser vorübergehend gestoppt wird. archangel:~ # updatedb
Hier wurde anschließend (nicht sichtbar) (Strg) + (Z) durchgeführt. [1]+
Stopped
updatedb
Normalerweise wird man bei einem Job wie updatedb aber wollen, dass dieser im Hintergrund arbeitet und seine Datenbank aktualisiert. In einem solchen Fall können Sie an das Kommando einfach ein Et-Zeichen (&) anhängen. Das Programm wird dann in den Hintergrund transferiert, bekommt aber kein SIGTSTPSignal übermittelt. Deshalb wird dieser Prozess im Hintergrund laufend seine Arbeit verrichten. Beispiel: archangel:~ # updatedb & [1] 15749
Das Ergebnis des Kommandos kann sofort mit dem Kommando jobs überprüft werden. Sie sollten sich jedoch nicht zu lange Zeit lassen, weil der Job sonst bereits mit seiner Arbeit fertig ist: archangel:~ # jobs [1]+ Running
updatedb &
Wenn ein Job erledigt ist, bekommt er den Status »done«. Nach einmaliger Anzeige wird der Job nicht weiterhin gelistet:
137
1451.book Seite 138 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
archangel:~ # jobs [1]+ Done
updatedb
Wenn mehrere Prozesse in den Hintergrund transferiert wurden, liefert jobs eine Ausgabe wie die folgende: archangel:~ # jobs [1]- Stopped [2]+ Stopped
updatedb /etc/cron.daily/do_mandb
Die Zahlen in den eckigen Klammern [1] sind Jobnummern, über die der jeweilige Job ansprechbar ist. Das Pluszeichen + markiert den Prozess, der von den Programmen fg und bg angesprochen wird, wenn explizit kein Job auf der Kommandozeile angegeben wurde. Das Kommando jobs Wie das Kommando jobs funktioniert, haben Sie in den vorangegangenen Beispielen bereits mehrfach gesehen. Dem ist eigentlich nur noch hinzuzufügen, dass die Option -l dafür sorgt, dass auch die PIDs der Prozesse angezeigt werden und nicht nur deren Jobnummern. Wenn Sie die Option -p verwenden, wird ausschließlich die PID angezeigt. Beispiel: archangel:~ # jobs -l [1]- 14746 Stopped [2]+ 15395 Stopped
updatedb /etc/cron.daily/do_mandb
Die PIDs sind allerdings für die Steuerung von Hintergrundprozessen eigentlich nicht von Belang. Die Kommandos bg und fg Mit dem Kommando bg und der durch das Kommando jobs ermittelten Jobnummer können Sie einen gestoppten Hintergrundprozess im Hintergrund fortsetzen. Es wird dann ein SIGCONT (Signal 18) an den Prozess gesendet. Wenn Sie bg ohne Optionen ausführen, wird SIGCONT an den Prozess gesendet, dem in der Auflistung von jobs das Pluszeichen zugeordnet ist. Beispiel: archangel:~ # bg 1 [1]- updatedb &
Anschließend wird mit jobs geprüft, ob das Kommando erfolgreich war: archangel:~ # jobs [1]- Running [2]+ Stopped
138
updatedb & /etc/cron.daily/do_mandb
1451.book Seite 139 Dienstag, 7. Juli 2009 2:18 14
103.5 Prozesse erzeugen, überwachen und beenden
Wenn Sie einen Prozess, der sich im Hintergrund befindet, wieder in den Vordergrund holen möchten, dann verwenden Sie das Kommando fg, gefolgt von der Jobnummer. Es wird dann das Signal 18 (SIGCONT) an den Prozess gesendet. Wenn Sie fg keine Jobnummer angeben, wird der Prozess in den Vordergrund geholt und gegebenenfalls gestartet, dem in der Auflistung von jobs das Pluszeichen vorangestellt ist. Mit folgendem Kommando würde der Job updatedb aus dem vorangegangenen Beispiel in den Vordergrund geholt werden: archangel:~ # fg 1
Prozesse unabhängig von einem Terminal laufen lassen Wenn Sie einen Job unabhängig von einer Shell verwenden wollen, dann müssen Sie das Kommando nohup verwenden. Das kann sehr nützlich sein, wenn Sie z.B. kurz vor Feierabend einen Prozess in Gang bringen wollen, der lange Zeit in Anspruch nimmt. Das Kommando nohup macht einen Prozess immun gegen Signale wie SIGHUB und leitet außerdem stdout in eine Datei um, damit Programme, die Datenströme produzieren, zufriedengestellt werden. Diese Datei heißt nohup.out und wird im Heimatverzeichnis des Benutzers abgelegt. Beispiel: archangel:~ # nohup updatedb & archangel:~ # logout
Der Job läuft jetzt ohne Shell weiter. Das Programm uptime Gibt die aktuelle Zeit, die Dauer, wie lange das System läuft, die Anzahl der Benutzer und die durchschnittliche Anzahl von lauffähigen Jobs in den letzten 1, 5 und 15 Minuten aus. Hier sehen Sie die Ausgabe des Kommandos uptime. Die Bedeutung der Ausgabe des Befehls wird im Anschluss beschrieben: [root@centos01 ~]# uptime 11:07:44 up 284 days,19:05,2 user,load average: 0.37, 0.11, 0.03
Als Erstes wird die aktuelle Systemzeit (11:07:44) ausgegeben. Das System läuft demnach bereits seit 284 Tagen, 19 Stunden und 5 Minuten. Es sind aktuell zwei Benutzer verbunden. Die folgenden drei Werte zeigen an, wie viele Jobs durchschnittlich in den letzten 1, 5 und 15 Minuten gelaufen sind. Wenn Sie das Kommando w verwenden, um die aktuell angemeldeten Benutzer anzuzeigen, wird in der ersten Zeile ebenfalls die uptime angezeigt:
139
1451.book Seite 140 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
[root@centos01 ~]# w 11:07:44 up 284 days,19:05,2 user,load average: 0.70, 0.11, 0.07 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT harald tty1 – 28Mar09 20days 0.02s 0.02s -bash root pts/0 192.168.50.200 10:34 0.00s 0.38s 0.00s w
Das Kommando free Um festzustellen, wie die momentane Speicherauslastung eines Systems aussieht, können Sie das Kommando free verwenden. Die Ausgabe des Programms ist recht breit, weshalb sie sich in einem Buch nicht vernünftig darstellen lässt. Das Programm kennt folgende Optionen, die auch in der Prüfung abgefragt werden könnten: 왘
-b (bytes) Ausgabe in Bytes
왘
-k (kilo) Ausgabe in KB
왘
-m (mega) Ausgabe in MB
왘
-g (giga) Ausgabe in GB
왘
-l Details aus High- und Low – Memory anzeigen
왘
-o (old) altes Format verwenden
왘
-t (total) zeigt Summen für RAM und swap
왘
-s (seconds) automatische Aktualisierung nach der Zeit der angegebenen
Sekunden (z.B. free –s 5 für alle 5 Sekunden) 왘
-c (count) Häufigkeit der mit –s gewünschten automatischen Aktualisierung
왘
-V (Version) das ist nicht verbose, wie man denken könnte!
103.6 Prozess-Ausführungsprioritäten ändern Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, die Ausführungsprioritäten von Prozessen zu verwalten. Wichtigste Wissensgebiete: 왘
die Standardpriorität eines neu erzeugten Jobs kennen
왘
ein Programm mit einer höheren oder niedrigeren Priorität als im Normalfall laufen lassen
왘
die Priorität eines laufenden Prozesses ändern
140
1451.book Seite 141 Dienstag, 7. Juli 2009 2:18 14
103.6 Prozess-Ausführungsprioritäten ändern
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
nice
왘
ps
왘
renice
왘
top
Allgemeines Manchmal ist es nötig, einen Prozess mit einer höheren oder niedrigeren Priorität als der normalen Priorität laufen zu lassen. So kann ein Prozess, dessen Ausführungsgeschwindigkeit nicht wichtig ist, mit einer niedrigeren Priorität laufen als ein systemkritischer Prozess. Sie können diese Prioritäten sowohl beim Start des Programms festlegen als auch nachträglich zur Laufzeit des Programms. Ein normaler Benutzer kann allerdings einem Prozess lediglich eine niedrigere Priorität zuordnen. Damit soll verhindert werden, dass Benutzer, die ihre eigene Arbeit als besonders wichtig einstufen, das ganze System lahmlegen.
nice Mit dem Kommando nice legen Sie den Nice-Wert eines Programms schon beim Start fest. Sie sollten für die Prüfung unbedingt mit den unterschiedlichen Möglichkeiten, dieses Kommando zu verwenden, vertraut sein. Wenn Sie ein Programm mit nice ausführen, ohne Optionen anzugeben, dann wird dieses Programm um den Nice-Wert 10 »netter«. Es gibt Nice-Werte von –20 bis +19. Wenn Sie einen negativen Wert angeben, wird dem Programm eine höhere Priorität bei der Ausführung zugewiesen. Der Nice-Wert und die Prozesspriorität sind nicht dasselbe. Es wird durch nice lediglich Einfluss auf die Prozesspriorität genommen. Bei der Übergabe von Optionen erwartet nice immer einen vorangestellten Bindestrich. Wenn ein Programm mit einem positiven Nice-Wert gestartet werden soll, dann stehen Ihnen zwei Möglichkeiten zur Ausführung des Kommandos zur Verfügung: harald@archangel:~> nice -n 12 nano harald@archangel:~> nice –12 nano
In beiden Fällen wird der Editor nano mit einem positiven Nice-Wert von 12 gestartet. Der Strich in der zweiten Zeile ist also kein Minus, sondern dient der Einleitung der Option. Wenn Sie einen negativen Nice-Wert verwenden wollen, um die Ausführungspriorität eines Programms zu erhöhen, können Sie folgende Kommandos verwenden:
141
1451.book Seite 142 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
michi@archangel:~ # nice -n –15 pico michi@archangel:~ # nice --15 pico
Die zweite Zeile enthält jetzt zwei Striche. Der erste Strich leitet die Option ein, und der zweite ist diesmal ein Minuszeichen. Prüfungstipp Lassen Sie sich in der Prüfung nicht von dem doppelten Strich irritieren. Es handelt sich hier nicht um eine doppelte Verneinung!
renice Wenn Sie den Nice-Wert eines Prozesses zur Laufzeit verwenden wollen, dann verwenden Sie das Programm renice oder top. Die Behandlung von Nice-Werten mit top wird etwas später in diesem Buch beschrieben. Die Syntax weicht von der des nice-Kommandos ab, was leider oft für Verwirrung sorgt. Im Normalfall geben Sie renice ohne Bindestrich einfach den neuen Nice-Wert und die PID des zu ändernden Prozesses an. Das Programm teilt anschließend den alten und den neuen Nice-Wert mit: archangel:~ # renice –10 5309 5309: old priority 12, new priority –10
Hier ist also der Strich ein Minus und keine Einleitung für eine Option. Merken Sie sich unbedingt diesen Unterschied zu nice. Mit der Option -u (hier wiederum ist der Strich unabdingbar) können Sie alle Prozesse eines einzelnen Benutzers gleichzeitig beeinflussen. Die Syntax ist ansonsten mit der identisch, die man auch bei der Manipulation eines Prozesses benutzen würde: archangel:~ # renice 5 -u dominik 1002: old priority 0, new priority 5
top und ps zur Überprüfung von Prioritäten Ob ein Programm mit einer normalen Priorität läuft oder nicht, können Sie mit dem bereits bekannten Programm ps überprüfen: archangel:~ # ps -au ...Zeilen wurden entfernt... harald 2698 0.0 0.0 3024 michi 2736 0.0 0.0 2368
142
1076 pts/2 940 pts/3
SN+ S<+
11:45 11:46
0:00 nano 0:00 pico
1451.book Seite 143 Dienstag, 7. Juli 2009 2:18 14
103.7 Textdateien mit regulären Ausdrücken durchsuchen
dominik 3416 0.1 0.0 5616 2012 pts/4 ... Zeilen wurden entfernt ...
S+
12:00
0:00 mc
Die achte Spalte in der Ausgabe des Kommandos ist u.a. für diese Information zuständig. Wenn ein Prozess »nice« ist, wird in dieser Spalte ein großes N auftauchen. Bei einem Prozess, der mir einer erhöhten Priorität läuft, finden Sie dort ein <. Die anderen Zeichen in dieser Spalte haben mit den Prioritäten nichts zu tun. Das große S steht für »interruptible sleep«, und das Pluszeichen + weist auf einen Prozess hin, der im Vordergrund ausgeführt wird. Der mc in der letzten Zeile wurde also offensichtlich als einziger nicht mit dem Kommando nice gestartet. Um die tatsächliche Priorität eines Prozesses und den Wert für nice zu ermitteln, benötigen Sie das Programm top: PID USER PR NI 2736 michi 0 –15 2698 harald 27 12 3416 dominik 16 0
VIRT RES SHR 2368 952 748 3024 1084 892 5616 2028 1580
S %CPU %MEM S 0.2 0.0 S 0.2 0.0 S 1.2 0.1
TIME+ 0:00.01 0:00.02 0:00.22
COMMAND pico nano mc
Hier wird auch deutlich, dass eine Prozesspriorität und der Wert für nice nicht dasselbe sind. Der mit nice bzw. renice eingestellte Wert hat lediglich Einfluss auf die Prozesspriorität. Die dritte Spalte der Ausgabe von top entspricht der Priorität, die das System einem Prozess zugewiesen hat. Der Standardwert ist 16. In der vierten Spalte findet sich der Nice-Wert. Sie können mithilfe von top auch einen Nice-Wert ändern. Dazu müssen Sie lediglich zur Laufzeit von top die Taste (R) betätigen. Sie werden dann nach der PID des zu ändernden Prozesses gefragt. Anschließend müssen Sie den neuen NiceWert angeben.
103.7 Textdateien mit regulären Ausdrücken durchsuchen Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, Dateien und Textdaten mit regulären Ausdrücken zu manipulieren. Dieses Prüfungsziel umfasst etwa die Erstellung einfacher regulärer Ausdrücke, die mehrere Beschreibungselemente enthalten. Es umfasst ebenfalls den Einsatz von Werkzeugen, die reguläre Ausdrücke zum Durchsuchen eines Dateisystems oder von Dateiinhalten verwenden.
143
1451.book Seite 144 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Wichtigste Wissensgebiete: 왘
einfache reguläre Ausdrücke mit mehreren Beschreibungselementen aufstellen
왘
Werkzeuge verwenden, die mit regulären Ausdrücken Dateisysteme oder Dateiinhalte durchsuchen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
grep
왘
egrep
왘
fgrep
왘
sed
왘
regex(7)
Allgemeines In den nächsten Abschnitten geht es um die Verwendung regulärer Ausdrücke. Sie werden in diesem Zusammenhang auch in der Prüfung wahrscheinlich häufiger auf den englischen Originalbegriff regular expression oder die Kunstworte regexp und regex stoßen. Gemeint ist damit immer dasselbe. Auch wenn viele andere Programme ebenfalls Gebrauch von regulären Ausdrücken machen, werden Sie in der Prüfung ausschließlich in Verbindung mit dem Stream-Editor sed oder dem Programm grep verwendet. Andere Programme, die regexp verwenden, sind z.B. Python, awk, gawk oder Perl. Dem Editor vi, der natürlich auch regex verwendet, ist ein eigenes Kapitel gewidmet.
Reguläre Ausdrücke Ein regulärer Ausdruck kann als eine Art Beschreibungssprache verstanden werden. Hierbei werden Suchmuster verwendet, wie z.B. ein Suchwort, eine Position im Text (Zeilenanfang, Zeilenende) oder auch Wildcards. Es wäre schön, wenn reguläre Ausdrücke von allen Programmen gleich interpretiert würden. Leider ist das aber nicht so! Prüfungstipp Es ist empfehlenswert, sich zunächst mit den Bestandteilen regulärer Ausdrücke zu befassen, die von den prüfungsrelevanten Programmen (sed, grep, vi) gemeinsam genutzt werden.
144
1451.book Seite 145 Dienstag, 7. Juli 2009 2:18 14
103.7 Textdateien mit regulären Ausdrücken durchsuchen
Allgemeingültige Metazeichen 왘
^ Textanker für den Zeilenanfang
왘
$ Textanker für das Zeilenende
왘
\< markiert einen Wortanfang
왘
\> markiert ein Wortende
왘
\ schützt ein Zeichen vor der Interpretation. Das kann notwendig werden,
wenn Sie etwa nach einem Dollarzeichen suchen müssen. Dieses würde ohne den vorangestellten Backslash als Zeilenende interpretiert werden. 왘
[] – Der Ausdruck passt auf die enthaltenen Zeichen. [abcd] ist demnach
zutreffend, wenn der Ausdruck ein a, b, c oder d enthält. Derselbe Ausdruck hätte auch mit [a-d] beschrieben werden können. 왘
[^Zeichen] – Der Ausdruck trifft nicht auf »Zeichen« zu. Hier besteht (auch und insbesondere in der Prüfung) Verwechslungsgefahr mit dem Zeilenanfang!
Prüfungstipp Die Zeichenkette ^[^#] erzielt einen Treffer, wenn am Zeilenanfang keine Raute (#) steht. Der erste Zirkumflex bezeichnet den Zeilenanfang, während der zweite das »Nicht« für die Raute darstellt. Denken Sie daran: Das ist ein sehr beliebtes Prüfungsthema!
Wildcards (Joker) Wildcards ersetzen einzelne Zeichen innerhalb eines Suchmusters. 왘
* bezeichnet null oder beliebig viele Wiederholungen des voranstehenden Zeichens. Das ist bei Ersetzungen sinnvoller, als es zunächst scheint.
왘
? bezeichnet null oder eine einmalige Wiederholung des voranstehenden Zeichens. Dieser Joker wurde von sed und grep ursprünglich nicht unterstützt. In diesem Fall können Sie diesen Joker aber mit egrep verwenden. Neuere Versionen von grep unterstützen auch das Fragezeichen.
왘
+ bezeichnet das zumindest einmalige Vorkommen des voranstehenden Zeichens.
왘
. (Punkt) kann als Platzhalter für ein beliebiges Zeichen (außer Zeilenvor-
schub) verwendet werden. Prüfungstipp Achtung: In der Shell ersetzt der Stern (*) mehrere beliebige Zeichen und das Fragezeichen (?) ein beliebiges Zeichen. Achten Sie in der Prüfung darauf, das nicht zu verwechseln. Beispiele:
145
1451.book Seite 146 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
archangel:/bin # ls g* gawk getkeycodes grep guessfstype archangel:/bin # ls g??? gawk grep gzip
gunzip
gzip
Die Verwendung von grep Mit dem Kommando grep können Sie die Zeilen einer Datei nach regulären Ausdrücken durchsuchen. Die gefundenen Zeilen werden nach stdout ausgegeben. Der wesentlichste Unterschied zu sed ist der, dass grep keine Änderungen an den Inhalten einer Datei vornimmt. Die Bedeutung von grep ist wohl sinngemäß search Globally for Regular Expressions and Print out. Mittlerweile existieren allerdings sowohl im Internet als auch in der einschlägigen Fachliteratur viele leicht abweichende Interpretationen dieses Begriffes. Bevor es an die praktische Arbeit mit grep und den regulären Ausdrücken geht, sollten Sie noch die wichtigsten Optionen von grep kennen: 왘
-v invertiert die Ausgabe. Es werden also die Zeilen ausgegeben, auf die der angegebene reguläre Ausdruck nicht zutrifft. Das ist kein Verbose-Mode!
왘
-n fügt dem Suchergebnis eine Zeilennummerierung hinzu.
왘
-E aktiviert die Verwendung von erweiterten regex. Das Programm verhält
sich dann wie egrep. 왘
-c zählt lediglich die Anzahl der Übereinstimmungen mit dem Suchmuster.
왘
-i ignoriert die Groß-/Kleinschreibung.
Beispiele zur Verwendung von grep archangel:~ # grep Willi Adressliste
Sucht in der Datei Adressliste Zeilen, die das Suchwort »Willi« enthalten. archangel:~ # grep [Ww]ill[iy] Adressliste
Sucht in der Datei Adressliste nach »Willi«, »Willy«, »willi« und »willy«. Die Zeichen in den eckigen Klammern verstehen sich hier also als Aufzählung. Jede Klammergruppe ersetzt genau ein Zeichen. Ein ähnliches Ergebnis liefert das folgende Kommando: archangel:~ # grep -i will[iy] Adressliste
Mit der Option -i ignoriert grep die Groß-/Kleinschreibung. Allerdings gilt das dann für alle Zeichen innerhalb der Zeichenkette. Es würde demzufolge z.B. auch der Name »wILLy« gefunden werden.
146
1451.book Seite 147 Dienstag, 7. Juli 2009 2:18 14
103.7 Textdateien mit regulären Ausdrücken durchsuchen
Im nächsten Beispiel wird das zweite Zeichen durch einen Punkt ersetzt. Ein Punkt repräsentiert genau ein beliebiges Zeichen (außer Zeilenvorschub). archangel:~ # grep W.lli Adressliste
Als Ergebnis würde in der Adressliste auch »Wolli« oder »Wqlli« (falls dieser Name überhaupt existiert) gefunden werden. Wenn Sie Konfigurationsdateien untersuchen wollen, dann kann es passieren, dass Ihnen die umfangreiche Dokumentation innerhalb dieser Dateien oder überflüssige Leerzeilen die Übersicht erschweren. Das ist ein klassisches Einsatzgebiet für grep in Kombination mit Textankern. Es wird in den folgenden Beispielen davon ausgegangen, dass die fragliche Konfigurationsdatei mit Rauten (Hashes) am Zeilenanfang als Kommentarzeichen arbeitet, wie es unter Linux eigentlich fast immer der Fall ist. Die folgenden Beispiele sind so ausgewählt, dass prüfungsnahe Kommandos zum Einsatz kommen: archangel:~ # grep [#] /etc/config.conf
Hier werden alle Zeilen ausgegeben, die eine Raute (#) enthalten. Das ist aber nicht das gewünschte Ergebnis, sondern viel eher das Gegenteil davon. Im nächsten Schritt soll das Ergebnis invertiert werden. Dazu stehen zwei Möglichkeiten zur Verfügung: archangel:~ # grep -v [#] /etc/config.conf archangel:~ # grep [^#] /etc/config.conf
Die erste Variante invertiert einfach mit der Option -v die Ausgabe von grep. In der zweiten Zeile wird der Raute ein »Nicht« vorangestellt. Dieses »Nicht« muss unbedingt innerhalb der Klammern gesetzt werden, weil der Inhalt der Klammern genau einem Zeichen entspricht. Würde das Zeichen vor die Klammer gestellt, dann würde es als Zeilenanfang interpretiert werden. Das Ergebnis wäre dann die Ausgabe aller Zeilen, die eine Raute am Zeilenanfang enthalten. Normalerweise stehen Kommentarzeichen am Anfang einer Zeile. Damit erwünschte Rauten, die inmitten der Konfigurationsdatei auftauchen, nicht mit ausgesiebt werden, muss die Position des Zeichens noch festgelegt werden: archangel:~ # grep -v ^[#] /etc/config.conf archangel:~ # grep ^[^#] /etc/config.conf
Der Zirkumflex steht für den Zeilenanfang. In der zweiten Version repräsentiert der erste Zirkumflex den Zeilenanfang und der Zirkumflex innerhalb der Klammern das »Nicht«. Leider enthält das Ergebnis noch Leerzeilen. Diese werden im nächsten Kommando mit einem zweiten grep-Kommando entfernt. Eine Leerzeile besteht aus einem Zeichen für den Zeilenanfang (^) und einem Zeichen für
147
1451.book Seite 148 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
das Zeilenende ($). Wenn diese beiden Zeichen aufeinanderfolgen, dann kann es sich also nur um eine Leerzeile handeln. grep soll nach diesen Zeilen suchen und die Ausgabe invertieren: archangel:~ # grep -v ^[#] /etc/config.conf | grep -v ^$ archangel:~ # grep ^[^#] /etc/config.conf | grep -v ^$
Es folgen nun einige »lose« Beispiele, die das Verständnis für die mit grep verwendbaren regulären Ausdrücke fördern sollen. Das folgende Kommando gibt Zeilen aus, die entweder die Zeichenkette »Wort« allein oder »Wort«, gefolgt von einer beliebigen Anzahl von Ziffern zwischen 1 und 9, enthalten (Wort, Wort1, Wort47, Wort6279 usw.). archangel:~ # grep 'Wort[1-9]*\>' Suchdatei
Das »größer als« (>) repräsentiert das Ende des Wortes. Leicht abweichend vom vorangegangenen Beispiel sollen jetzt nur die Zeilen ausgegeben werden, die das Suchmuster »Wort« enthalten oder »Wort«, gefolgt von einer einzelnen Ziffer. archangel:~ # grep 'Wort[1-9]\?\>' Suchdatei
Beachten Sie, dass sowohl ein Fragezeichen als auch ein »größer als« (>) durch einen Backslash geschützt werden muss. Um alle Einträge aus der Datei /var/log/messages anzuzeigen, die beispielsweise am 10.12. vorgenommen wurden, können Sie folgendes Kommando verwenden: archangel:~ # grep ’^Dec 10’ /var/log/messages
Mit dem folgenden Kommando werden alle Zeilen einer Datei angezeigt, die drei, vier oder fünf aufeinanderfolgende Einsen enthalten: archangel:~ # grep '1\{3,5\}' Suchdatei
In diesem Fall müssen die geschweiften Klammern jeweils mit einem Backslash geschützt werden. Ohne diesen »Schutz« würde grep nach dem Muster 1{3,5} in der Datei suchen. Diese Konstellation kann verwendet werden, um die Anzahl der Wiederholungen eines einzelnen Zeichens genau festzulegen. Wildcards grenzen die Anzahl der Zeichenwiederholung nur grob ein. Wenn Sie lediglich eine Mindestanzahl von Wiederholungen angeben wollen, aber kein Limit nach oben hin, dann verwenden Sie folgendes Konstrukt: archangel:~ # grep '1\{3,\}' Suchdatei
Es werden hiermit alle Zeilen ausgegeben, die mindestens drei aufeinanderfolgende Einsen aufweisen. Die folgende Befehlszeile sucht nach Zeilen, die drei aufeinanderfolgende Ziffern beinhalten:
148
1451.book Seite 149 Dienstag, 7. Juli 2009 2:18 14
103.7 Textdateien mit regulären Ausdrücken durchsuchen
archangel:~ # grep '[0-9]\{3\}' Suchdatei
Wie bereits beschrieben, repräsentieren Angaben in rechteckigen Klammern immer genau ein Zeichen. In diesem Fall die Ziffern von 0 bis 9. Das so beschriebene Zeichen soll dreimal vorkommen. Die Angabe \{3\} legt genau das fest. Sollen stattdessen drei aufeinanderfolgende Großbuchstaben in einer Zeile enthalten sein, wird folgendes Kommando diese Zeilen auffinden: archangel:~ # grep '[A-Z]\{3\}' Suchdatei
Denken Sie daran, dass einige Metazeichen durch einen Backslash geschützt werden müssen, damit grep diese nicht als Suchmusterbestandteil versteht. Diese Zeichen sind: ?, +, {, }, |, (, und ). Umgekehrt kann es aber auch vorkommen, dass nach einem Zeichen gesucht werden soll, das grep als Metazeichen verstehen würde. Dann muss auch dieses Zeichen durch einen Backslash geschützt werden, aber aus dem gegenteiligen Grund. Beispiel: archangel:~ # grep '\$ [0-9]\{3,\}\>' Suchdatei
Dieses Kommando sucht nach mindestens dreistelligen Dollarbeträgen in einer Datei. Der erste Backslash sorgt dafür, dass das Dollarzeichen nicht als Metazeichen für das Zeilenende interpretiert wird. Die drei anderen Backslashes schützen die geschweiften Klammern und das »größer als« davor, als Bestandteil des Suchmusters interpretiert zu werden. Auch ein Slash muss geschützt werden. Wenn Sie nach Zeilen mit der Pfadangabe /var/log/ suchen müssen, sollten Sie daran denken, allen Slashes einen Backslash voranzustellen: archangel~ # grep '\/var\/log\/' Suchdatei
Sinngemäß gilt dasselbe für die Suche nach Windows-Pfaden, die ja als Trennzeichen einen Backslash verwenden. c:\windows\system32\ würde so gesucht: archangel~ # grep 'c:\\windows\\system32\\' Suchdatei
Das letzte Beispiel sucht nach Zeilen, die zumindest einen Großbuchstaben enthalten. Auch hier muss der Joker durch einen Backslash geschützt werden: archangel:~ # grep '[A-Z]\+' Suchdatei
egrep und fgrep Die beiden Programme egrep (extended) und fgrep (fixed) waren ursprünglich Varianten von grep mit zusätzlichen Fähigkeiten. Beide sind heutzutage eigentlich nicht mehr nötig, weil grep mit den entsprechenden Optionen dieselben Aufgaben ausführen kann wie egrep und fgrep.
149
1451.book Seite 150 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
왘
grep –E entspricht egrep
왘
grep –F entspricht fgrep
Weil ältere Skripte eventuell noch egrep oder fgrep verwenden, werden diese beiden Programme normalerweise weiterhin in Linux-Distributionen gepflegt. egrep unterstützt einen erweiterten Satz Metazeichen gegenüber grep. Entspre-
chend wird bei der Suche auch mehr Rechenzeit benötigt. Das genaue Gegenteil macht fgrep. Wenn in der zu suchenden Zeichenkette Metazeichen vorkommen, werden diese als normale Zeichen interpretiert. Weitere Verwandte von grep sind agrep für fehlertolerantes Suchen und zgrep für Suche in komprimierten Archiven. Diese sind aber bei der Prüfung nicht von Belang.
Die Verwendung von sed Der sed ist ein Stream-Editor. Das bedeutet, dass es sich nicht um einen interaktiven Editor handelt, wie z.B. vi, nano oder pico. Er liest, wenn keine Datei angegeben wird, von der Standardeingabe und gibt das Ergebnis an stdout wieder aus. Deshalb werden Sie die Ausgabe von sed in eine Datei umleiten müssen, wenn Sie die Änderungen abspeichern wollen. Hierbei darf die Zieldatei nicht mit der Quelldatei identisch sein. Bei der Ausführung des Kommandos mit einem einfachen Redirektor würde sed die Datei zuerst löschen und dann neu anlegen. Das Ergebnis wäre eine leere Datei. Beispiel: archangel:~ # sed 's/rumba/samba/g' Suchdatei1 >Suchdatei1
Dieses Kommando hat dann, wie gesagt, eine leere Datei zur Folge! Bei der Arbeit mit sed verwendet man Optionen und Kommandos, wobei die Optionen allerdings meist eine eher untergeordnete Rolle spielen. Wenn keine Optionen angegeben werden, kann sed allerdings auch nur ein Kommando mit einer einzigen Befehlszeile entgegennehmen. Optionen 왘
-e Kommando – Diese Option ist, wenn nur ein einziges Kommando verwendet
wird, optional. Wenn mehrere Kommandos in einer Befehlszeile verwendet werden sollen, muss diese Option jedem Kommando vorangestellt werden. 왘
150
-f Scriptdatei – Mit dieser Option wird eine Skriptdatei angegeben, die die Kommandos für sed enthält. Diese Methode ist besonders nützlich, wenn mehrere sed-Kommandos routinemäßig ausgeführt werden müssen.
1451.book Seite 151 Dienstag, 7. Juli 2009 2:18 14
103.7 Textdateien mit regulären Ausdrücken durchsuchen
왘
-g – Im Normalfall reagiert sed nur auf das erste Vorkommnis eines Suchmus-
ters innerhalb einer Zeile. Wenn die Option -g gesetzt wird, gelten alle folgenden Kommandos als global. Es ist aber auch möglich, eine globale Verfahrensweise in ein Kommando aufzunehmen. Adressierung Standardmäßig bearbeitet sed alle Zeilen der angegebenen Datei(en). Es kann aber vorkommen, dass dieses Verhalten nicht erwünscht ist. Dann müssen Sie dem Editor mitteilen, an welcher Textposition er seine Arbeit beginnen bzw. aufhören soll. Für diese Positionsangaben verwenden Sie Adressen. Sie können eine, zwei oder gar keine Adresse verwenden. Es gibt grundsätzlich nur drei Arten von Adressen für sed: 왘
Zeilennummern
왘
das Dollarzeichen ($) für die letzte Zeile
왘
einen regulärer Ausdruck, der auf beiden Seiten durch Slashes begrenzt wird (z.B. /regexp/)
Wenn sed eine Datei komplett verarbeiten soll, dann geben Sie einfach gar keine Adresse ein. Sollen z.B. in einem bestimmten Bereich eines Textes Ersetzungen vorgenommen werden, dann geben Sie zwei Adressen an. Diese sind dann durch ein Komma voneinander zu trennen. Einige Kommandos arbeiten mit nur einer Adresse. So hängt das Kommando a (append) an einer Zeile Text an, auf die die Adresse passt. Eine »von bis«-Angabe hätte hier wenig Sinn. Kommandos Es gibt zwei Methoden, Kommandos an sed zu übergeben. Entweder Sie geben die Kommandos direkt auf der Kommandozeile ein, oder Sie verwenden ein Skript. Erfreulicherweise ist die Syntax für die Kommandos in beiden Fällen annähernd identisch. Am besten lernen Sie diese Kommandos durch eigenes Anwenden. Deshalb werden sie im Folgenden anhand einiger Beispiele demonstriert. Das erste Beispiel demonstriert das Kommando y. Dieses Kommando wird für die Übersetzungen von einem Zeichen in ein anderes Zeichen verwendet. Es können auch mehrere Zeichen übersetzt werden, aber z.B. niemals ein Zeichen in drei andere Zeichen. Es besteht also immer eine 1:1-Beziehung, ähnlich wie bei dem Kommando tr. Das folgende Beispiel demonstriert die Konvertierung einer kommaseparierten Datei (CSV) in eine semikolonseparierte Datei: archangel:~ # sed 'y/,/;/' Kommadatei > Semikolondatei
151
1451.book Seite 152 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Das Kommando d (delete) löscht ganze Zeilen, wenn ein regulärer Ausdruck zutrifft oder auch Zeilen, die mit Adressen angegeben wurden: archangel:~ # sed -e '/^$/d' -e '/^#/d' /etc/config.conf
Mit dem voranstehenden Befehl wurden sowohl Kommentarzeilen (Hash am Zeilenanfang ^#) als auch Leerzeilen (Aufeinanderfolge von Zeilenanfang ^ und Zeilenende $) aus einer Konfigurationsdatei entfernt. Da hier zwei Kommandos auf einmal an sed übergeben wurden, musste diesmal der ansonsten optionale Schalter -e zweimal verwendet werden. Das nächste Beispiel zeigt die Löschung von Zeilen, basierend auf Adressen: archangel:~ # sed '25,47d' Originaldatei > Kurzdatei
Bei der Zeichenkette 25,47 handelt es sich um die kommagetrennten Adressen, hier also Zeilennummern. Das Ergebnis des Kommandos ist die Ausgabe aller Zeilen von 1 bis 24 und der Zeilen 48 bis zum Ende. Sie können die Ausgabe des Kommandos auch einfach invertieren, indem Sie zusätzlich ein Ausrufezeichen verwenden: archangel:~ # sed '25,47!d' Originaldatei > Kurzdatei
Als Ergebnis werden die Zeilen 25 bis 47 ausgegeben. Alle anderen Zeilen werden gelöscht. Mit der Substitution s können Zeichen übersetzt werden. Im Vergleich zu y ist dieses Kommando leistungsfähiger, weil es auch mehrere Zeichen in ein einziges Zeichen überführen kann und umgekehrt: archangel:/textfiles # sed 's/ue/ü/' Namensliste
Mit diesem Befehl wird das erste in einer Zeile gefundene ue in ein ü übersetzt. Der Befehl kann durch das Hinzufügen des sed-Kommandos g globalisiert werden. Dadurch wird sichergestellt, dass sed auch bei mehrfachem Auftreten der Zeichenkette ue innerhalb einer Zeile diese ebenfalls in ein ü übersetzt: archangel:/textfiles # sed 's/ue/ü/g' Namensliste
Wenn Sie eine ganze Serie von Kommandos an sed übergeben wollen, empfiehlt sich die Verwendung einer Skriptdatei. Es ist zu beachten, dass die Kommandos innerhalb der Skriptdatei einzeln und zudem nacheinander abgearbeitet werden. Wenn das erste Kommando einige Zeilen löscht und das zweite Kommando Zeilennummern als Adressen verwendet, dann sind diese Zeilennummern durch die Ausführung des ersten Kommandos verschoben. Dieser Umstand muss bei der Planung eines Skripts berücksichtigt werden.
152
1451.book Seite 153 Dienstag, 7. Juli 2009 2:18 14
103.8 Grundlegendes Editieren von Dateien mit dem vi
Das letzte Beispiel demonstriert, wie sed mit einer Skriptdatei verwendet wird, um die Umlaute einer Textdatei in ein HTML-taugliches Format zu konvertieren. Die Meta-Tags für HTML müssen natürlich nachträglich eingefügt werden. Zunächst wird die Skriptdatei mit folgendem Inhalt erstellt: archangel:~ # cat sed-umltohtml-script s/ä/\ä\;/g; s/Ä/\Ä\;/g; s/ü/\ü\;/g; s/U/\Ü\;/g; s/ö/\ö\;/g; s/Ö/\Ö\;/g; s/ß/\ß\;/g;
Danach wird diese Serie von Kommandos mit sed -f auf die Quelldatei (umltext) angewendet und das Ergebnis in eine neue Textdatei (htmltext) umgeleitet. Der Backslash schützt jeweils das Et-Zeichen vor der Interpretation. Aus ä wird dann beispielsweise ä: archangel:~ # sed -f sed-umltohtml-script umltext > htmltext
Das war nur ein ganz einfaches Beispiel. Sie können mit sed noch wesentlich komplexere Arbeiten ausführen. Für die Prüfung jedoch ist das hier Beschriebene mehr als ausreichend.
103.8 Grundlegendes Editieren von Dateien mit dem vi Wichtung: 3 Beschreibung: Kandidaten sollten in der Lage sein, Textdateien mit dem vi zu editieren. Dieses Prüfungsziel umfasst vi-Navigation, grundlegende vi-Modi, Einfügen, Ändern, Löschen, Kopieren und Finden von Text. Wichtigste Wissensgebiete: 왘
mit vi in einem Dokument navigieren
왘
grundlegende vi-Modi verwenden
왘
Text einfügen, ändern, löschen, kopieren und finden
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
vi
왘
/, ?
153
1451.book Seite 154 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
왘
h,j,k,l
왘
i, o, a
왘
c, d, p, y, dd, yy
왘
ZZ, :w!, :q!, :e!
Allgemeines Der vi ist ein interaktiver Editor für Dateien, die im Textformat vorliegen. Er ist ein Nachfahre des Editors ed, weshalb er auch etliche Kommandos genauso unterstützt wie sein Vorgänger. Es gibt inzwischen mehrere Derivate des vi, wie vim, elvis, vile usw. Es ist heutzutage sogar wahrscheinlich, dass auf Ihrem Linux-Computer vim als Editor gestartet wird, auch wenn Sie das Kommando vi eingeben. Der Befehl vi folgt dann einem Softlink, der auf den vim zeigt. Wenn Sie den vi bedienen können, werden Sie kaum in die Verlegenheit kommen, keinen Editor vorzufinden, den Sie bedienen können, wenn Sie sich mit einer Ihnen noch unbekannten Linux- oder Unix-Version befassen. Prüfungsfragen zum vi sind normalerweise nicht in großer Zahl zu erwarten. Leider sind diese Fragen dafür aber ziemlich schwierig, weil viele Optionen und Kommandos abgefragt werden, die Sie nicht unbedingt jeden Tag brauchen. Unterschätzen Sie also nicht die Relevanz der in den folgenden Abschnitten behandelten Themen.
Bedienungsgrundlagen Start Sie können den Editor einfach durch Ausführen des Kommandos vi starten oder gleichzeitig ein bzw. mehrere Dokumente laden. Mehrere Dokumente werden durch Leerzeichen voneinander getrennt angegeben: archangel:/textfiles # vi text1 text2
Wenn mehrere Dokumente geladen wurden, können Sie mit :n (vorwärts) oder :N (rückwärts) zwischen den Dokumenten wechseln. Modi Wenn Sie den vi gerade gestartet haben, befindet sich der Editor im Kommandomodus. In diesem Modus können Sie den Text nicht direkt bearbeiten. Sie können sich lediglich im Text fortbewegen, Zwischenablagenoperationen durchführen, Löschungen vornehmen, nach Schlüsselworten suchen, die Datei speichern usw. Im Einfügemodus schreiben Sie Text wie mit jedem anderen Editor
154
1451.book Seite 155 Dienstag, 7. Juli 2009 2:18 14
103.8 Grundlegendes Editieren von Dateien mit dem vi
auch. Sie gelangen vom Kommandomodus in den Einfügemodus, indem Sie entweder die Taste i oder die Taste a betätigen. 왘
i wechselt vor der aktuellen Cursorposition in den Einfügemodus.
왘
I wechselt am Anfang der aktuellen Zeile in den Einfügemodus.
왘
a wechselt hinter der aktuellen Cursorposition in den Einfügemodus.
왘
A wechselt am Ende der aktuellen Zeile in den Einfügemodus.
Wie sie sehen, gibt es bei der Auswahl der Kürzel einen logischen Zusammenhang, sodass Sie sich die Kommandos leicht merken können. Um wieder in den Kommandomodus zurückzugelangen, betätigen Sie einfach die Escape-Taste. Bei den meisten Versionen und Derivaten des vi wird in einer der unteren Ecken --insert-- angezeigt, wenn Sie sich im Einfügemodus befinden. Der Kommandomodus wird üblicherweise nicht gesondert angezeigt. Beenden und speichern Sie können den vi nur beenden oder ein Dokument speichern, wenn sich der Editor im Kommandomodus befindet. Folgende Kommandos sollten Sie in diesem Zusammenhang kennen: 왘
:w dateiname speichert die Datei unter dateiname. Sollte die Datei bereits
existieren, ist die Angabe des Dateinamen optional. 왘
:w! speichert die Datei nach Möglichkeit auch dann, wenn sie schreibgeschützt ist.
왘
:wq speichert die aktuelle Datei und beendet den Editor.
왘
:x speichert die aktuelle Datei und beendet den Editor.
왘
ZZ speichert die aktuelle Datei und beendet den Editor. Der »fehlende« Dop-
pelpunkt ist kein Druckfehler! 왘
:q beendet den Editor. Bearbeitete Dateien müssen vorher gespeichert wor-
den sein. 왘
:q! beendet den vi auch dann, wenn Dateien noch nicht gespeichert wurden.
Die Änderungen an diesen Dateien gehen verloren. 왘
:e dateiname öffnet die Datei dateiname. Die aktuelle Datei wird geschlossen (versionsabhängig!). Die ursprüngliche Datei muss vorher gespeichert werden.
Sie sollten diese Kommandos auch dann schon kennen, wenn Sie den vi nur ausprobieren. Es ist nämlich nicht möglich, moderne Versionen des vi mit (Strg) + (C) zu beenden wie die meisten anderen Programme.
155
1451.book Seite 156 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
Navigation in einem Dokument Normalerweise werden Sie wahrscheinlich mit den Cursortasten in einem Textdokument navigieren. Das ist auch sinnvoll, weil Sie ansonsten immer zuerst in den Kommandomodus wechseln müssten, um sich im Text fortzubewegen. Die Cursortasten funktionieren nämlich auch im Einfügemodus. Es gibt allerdings mindestens eine Situation, in der Sie wissen müssen, wie innerhalb des vi ohne Cursortasten navigiert wird, nämlich dann, wenn Sie eine Terminalsoftware verwenden, die den Editor-Block der Tastatur nicht korrekt übersetzt. Um diese Kommandos ausführen zu können, muss der Editor natürlich im Kommandomodus verwendet werden. Die wichtigsten Bewegungskommandos sind: 왘
h bewegt den Cursor um ein Zeichen nach links.
왘
j bewegt den Cursor um ein Zeichen nach unten.
왘
k bewegt den Cursor um ein Zeichen nach oben.
왘
l bewegt den Cursor um ein Zeichen nach rechts.
왘
G bewegt den Cursor zum Ende der Datei.
왘
H bewegt den Cursor zum oberen Bildschirmrand.
왘
L bewegt den Cursor zum unteren Bildschirmrand.
Sie können diesen Buchstaben auch Zahlen voranstellen, um mehrere Bewegungen auf einmal auszuführen. So wird 20j den Cursor um 20 Zeilen nach unten verschieben. Es gibt zudem Prüfungsfragen zu kombinierten Bewegungen. Wenn Sie z.B. um drei Zeilen nach oben und um vier Zeichen nach rechts navigieren wollen, verwenden Sie 3k4l. Der vi wird die Kommandos 3k und 4l dann allerdings getrennt ausführen. Es gibt noch viele andere Zeichen, mit denen die Cursorbewegung (Wortweise, Satzweise usw.) gesteuert werden kann. Diese sind aber für die LPI-Prüfung nicht von Bedeutung.
Einfügen, Löschen, Kopieren und Auffinden von Text Im Kommandomodus stehen Ihnen viele Möglichkeiten zur Bearbeitung eines Textes zur Verfügung. Die folgenden Kommandos sollten Sie unbedingt kennen: 왘
yy (yank) kopiert den Inhalt der aktuellen Zeile in die Zwischenablage.
왘
p (paste) fügt den Inhalt der Zwischenablage unterhalb der Zeile, in der sich
der Cursor befindet, ein. 왘
P (Paste) fügt den Inhalt der Zwischenablage oberhalb der Zeile, in der sich der
Cursor befindet, ein.
156
1451.book Seite 157 Dienstag, 7. Juli 2009 2:18 14
103.8 Grundlegendes Editieren von Dateien mit dem vi
왘
dd (delete) löscht die komplette Zeile, in der sich der Cursor befindet.
왘
D (Delete) löscht den Text hinter dem Cursor bis zum Ende der Zeile.
왘
cc (cut) schneidet die komplette Zeile aus, in der sich der Cursor befindet. Die ausgeschnittene Zeile wird in die Zwischenablage kopiert. Anschließend wechselt vi automatisch in den Einfügemodus.
왘
C (Cut) schneidet den Text hinter dem Cursor bis zum Ende der Zeile aus. Der ausgeschnittene Text wird in die Zwischenablage kopiert. Anschließend wechselt vi automatisch in den Einfügemodus.
왘
o generiert eine neue Zeile unterhalb der Zeile, in der sich der Cursor aktuell
befindet. Anschließend wechselt vi automatisch in den Einfügemodus. 왘
O generiert eine neue Zeile oberhalb der Zeile, in der sich der Cursor aktuell befindet. Anschließend wechselt vi automatisch in den Einfügemodus.
왘
/regexp sucht nach der Zeichenkette regexp.
왘
/ sucht nach dem nächsten Vorkommen der Zeichenkette regexp.
왘
? sucht rückwärts nach dem vorherigen Vorkommen der Zeichenkette regexp.
왘
:!kommando führt das Skript mit der Bezeichnung kommando aus. Der Editor
bleibt hierbei weiterhin geöffnet. Wenn ein Kommando mehrfach ausgeführt werden soll, dann wird diesem Kommando einfach ein numerischer Wert vorangestellt, der die Anzahl der Ausführungen des Befehls festlegt. Beispiele: 왘
17dd löscht 17 Zeilen (die aktuelle Zeile und die 16 folgenden).
왘
54yy kopiert 54 Zeilen in die Zwischenablage.
왘
12cc schneidet die aktuelle und die elf folgenden Zeilen aus.
Befehlszeilenoptionen für vi Sie können bereits beim Starten des Editors einige anfängliche Bedingungen festlegen. Bei der Prüfung wird es sich bei diesen anfänglichen Bedingungen wahrscheinlich um die Cursorposition handeln. Wenn Sie die Datei text1 so öffnen wollen, dass der Cursor gleich in Zeile 65 positioniert wird, geben Sie folgendes Kommando ein: archangel:/textfiles # vi text1 +65
Eine andere Variante ist die Positionierung des Cursors mit einem Suchmuster. Wenn Sie die Datei text1 so öffnen wollen, dass der Cursor sofort in der ersten Zeile erscheint, in der beispielsweise das Wort Pinguin gefunden wird, geben Sie diesen Befehl ein:
157
1451.book Seite 158 Dienstag, 7. Juli 2009 2:18 14
Topic 103: GNU- und Unix-Kommandos
archangel:/textfiles # vi text1 +/Pinguin
Diese Befehlszeilenoptionen wurden vom Editor ex übernommen. Prüfungstipp Die in den letzten Abschnitten besprochenen Kommandos für den vi wurden sehr sorgfältig und prüfungsnah ausgesucht. Sie sollten zumindest diese Kommandos kennen, wenn Sie zur Prüfung gehen.
158
1451.book Seite 159 Dienstag, 7. Juli 2009 2:18 14
Im nächsten Themenkomplex soll dargestellt werden, was alles nötig ist, um Daten sicher auf einem Medium speichern zu können und die Zugriffsrechte auf diese Dateien professionell zu handhaben.
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard 104.1 Partitionen und Dateisysteme anlegen Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, Plattenpartitionen zu konfigurieren und dann Dateisysteme auf Medien wie Festplatten anzulegen. Dies umfasst auch den Umgang mit Swap-Partitionen. Wichtigste Wissensgebiete: 왘
verschiedene mkfs-Kommandos verwenden, um Partitionen zu installieren und verschiedene Dateisysteme anzulegen wie: 왘
ext2
왘
ext3
왘
xfs
왘
reiserfs v3
왘
vfat
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
fdisk
왘
mkfs
왘
mkswap
159
1451.book Seite 160 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Allgemeines Wenn Sie für einen neuen Computer die Verzeichnisstruktur planen, gibt es verschiedene Faktoren zu berücksichtigen. Die Festplattenaufteilung ist insofern wichtig, als sie sich nachträglich nicht ohne Weiteres ändern lässt. In den folgenden Abschnitten geht es allerdings vornehmlich um die Erzeugung der Dateisysteme im Sinn von Partitionierung und Formatierung.
Erzeugen der Partitionen Wenn Sie Partitionen auf einer Festplatte erstellen wollen, stehen Ihnen normalerweise, unabhängig von der verwendeten Distribution, die Werkzeuge fdisk und cfdisk zur Verfügung. Das Programm cfdisk ist menügeführt und intuitiv bedienbar. Da in den LPI-Prüfungen ausschließlich der traditionelle fdisk behandelt wird, soll auf die Bedienung von cfdisk in diesem Buch verzichtet werden. Wenn fdisk gestartet wird, müssen Sie zumindest als Argument die zu bearbeitende Festplatte angeben. Wenn Sie lediglich die aktuelle Partitionierung der Festplatte einsehen wollen, können Sie die Option -l (list) verwenden: archangel:~ # fdisk /dev/hda -l Disk /dev/hda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 7 56196 83 Linux /dev/hda2 8 2401 19229805 83 Linux /dev/hda3 2402 2495 755055 82 Linux swap /dev/hda4 2496 9729 58107105 83 Linux
Wenn Sie beabsichtigen, die Partitionierung eines Datenträgers zu ändern, sollten Sie die aktuelle Belegung genau kennen. Am besten drucken Sie die Liste aus, oder schreiben Sie sie ab. Eine Übersicht über alle Partitionen sämtlicher Festplatten eines Computers können Sie im /proc-System abfragen. Gehen Sie dazu folgendermaßen vor: archangel:~ # cat /proc/partitions major minor #blocks name 3 0 78150744 hda 3 1 56196 hda1 3 2 19229805 hda2 3 3 755055 hda3 3 4 58107105 hda4 8 16 156290904 sdb 8 17 156288321 sdb1
160
1451.book Seite 161 Dienstag, 7. Juli 2009 2:18 14
104.1 Partitionen und Dateisysteme anlegen
Wenn Sie mit fdisk eine Festplatte partitionieren wollen, starten Sie fdisk, und geben Sie die Festplatte mit Ihrer Gerätedatei an: archangel:~ # fdisk /dev/hda
Durch einfaches Betätigen der Taste n (new) erstellen Sie, interaktiv geführt, eine neue Partition. Das folgende Beispiel demonstriert die Erstellung einer 500 MB großen primären Partition auf einem SCSI-Laufwerk. Die vom root getätigten Eingaben werden durch Fettdruck hervorgehoben. [root@fedora10 ~]# fdisk /dev/sdb
Der fdisk ist gestartet und wartet auf weitere Befehle. Befehl (m für Hilfe): n Befehl Aktion e Erweiterte p Primäre Partition (1-4)
Durch das n wurde das Erstellen einer neuen Partition eingeleitet. Als Nächstes muss festgelegt werden, ob die Partition eine primäre oder eine erweiterte Partition werden soll. Das p sagt primär: p Partitionsnummer (1-4):
1
Die Partitionsnummer wurde also auf 1 festgelegt. Hätte es sich um eine Festplatte mit bestehenden Dateisystemen gehandelt, wäre spätestens jetzt eine genaue Kenntnis der bestehenden Partitionen erforderlich. Als Nächstes wird der Startzylinder angegeben. Bei einer fabrikneuen Festplatte bietet sich Zylinder 1 förmlich an. Also wird der Vorgabewert einfach durch Betätigen der Eingabetaste übernommen. Erster Zylinder (1-1044, Vorgabe: 1):
Das Programm bestätigt diese Angabe und fragt anschließend nach dem Ende der zu erstellenden Partition. Mit dem Pluszeichen wird die Einheit für die Größe der Partition in Byte, Kilobyte oder Megabyte festgelegt. Eine numerische Eingabe ohne Pluszeichen steht für die Angabe des Endzylinders. Die Angabe des Endzylinders ist während der Installation besonders interessant, damit man das Dateisystem für /boot bequem innerhalb der ersten 1024 Zylinder positionieren kann. Sie brauchen sich dann nicht mehr zu überlegen, wie groß die Partition wohl höchstens, in Megabyte gerechnet, sein darf. In diesem Beispiel soll aber eine 500-MB-Partition für Daten erstellt werden:
161
1451.book Seite 162 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Benutze den Standardwert 1 Letzter Zylinder oder +Größe, +GrößeK oder +GrößeM (1-1044, Vorgabe: 1044): +500MB
Das Ergebnis sollte anschließend unbedingt geprüft werden: Befehl (m für Hilfe): p Platte /dev/sdb: 8589 MByte, 8589934592 Byte 255 heads, 63 sectors/track, 1044 cylinders Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes Gerät boot. /dev/sdb1
Anfang 1
Ende 62
Blöcke 497983+
Id 83
System Linux
Nachdem die Konfiguration geprüft und für gut befunden wurde, kann die Partitionstabelle auf die Festplatte geschrieben werden. Bis jetzt hat noch kein Schreibzugriff stattgefunden! Befehl (m für Hilfe): w Die Partitionstabelle wurde verändert! Rufe ioctl() um Partitionstabelle neu einzulesen. Synchronisiere Platten.
Der Vorgang ist nun abgeschlossen, und die Partition kann formatiert werden. Vorher sollen aber noch ein paar Kommandos für fdisk erläutert werden. Um alle verfügbaren Optionen von fdisk anzuzeigen, betätigen Sie die Taste m (menu). 왘
a (activate) legt die aktive Partition fest. Dieses Flag wird vom BIOS ausgewertet und für Betriebssysteme benötigt, die über kein Startprogramm im MBR verfügen.
왘
d (delete) löscht eine Partition.
왘
l (list) zeigt alle von fdisk unterstützten Dateisysteme an.
왘
m (menu) zeigt das Menü an.
왘
n (new) erstellt eine neue Partition.
왘
p (print) zeigt die aktuelle Partitionstabelle an.
왘
q (quit) verwirft alle Änderungen und beendet fdisk.
왘
t (type) ändert den Dateisystemtyp einer Partition.
왘
u (units) ändert die Einstellung für die Einheit der Anzeige (z.B. für p).
왘
v (verify) überprüft die Partitionstabelle.
162
1451.book Seite 163 Dienstag, 7. Juli 2009 2:18 14
104.1 Partitionen und Dateisysteme anlegen
왘
w (write) schreibt alle Änderungen in die Partitionstabelle.
왘
x (extra) ergibt ein zusätzliches Menü mit hardwarenahen Optionen.
Wenn Sie p betätigen, werden Sie feststellen, dass Linux sehr viele Dateisystemarten unterstützt. Sie sollten allerdings dem Typ 83 (Linux) den Vorzug geben, damit Sie bei der Formatierung ein für Linux optimales Dateisystem (ext2, ext3 oder reiserfs) erstellen können. Für ein Swap-Dateisystem ist der Typ 82 erforderlich. Sie sollten die anderen verfügbaren Dateisystemtypen nur dann verwenden, wenn Sie mit anderen Betriebssystemen, über die zu erstellende Partition, Dateien austauschen müssen. Die gängigsten Kennungen sind: 왘
7 – HPFS/Windows NTFS
왘
c – Windows 95 FAT-32 (LBA)
왘
f – Windows 95, erweiterte Partition (LBA)
왘
82 – Linux Swap
왘
83 – Linux (für alle Linux-Dateisysteme: ext2, ext3, reiserfs usw.)
왘
85 – Linux Extended
왘
8e – Linux LVM
Formatieren der Dateisysteme Nachdem Sie eine Partition mit fdisk erstellt haben, muss diese noch formatiert werden. Hierbei vollzieht sich die eigentliche Erstellung des Dateisystems. Der fdisk modifiziert lediglich die Partitionstabelle. Das wichtigste Formatierungswerkzeug unter Linux ist mkfs. Eigentlich handelt es sich hierbei um ein Frontend, das je nach zu formatierendem Dateisystem ein passendes Backend-Programm ausführt. Sie finden mkfs mit den zugehörigen Backends im Verzeichnis /sbin. Einige von diesen Backends sind lediglich Hardlinks oder Softlinks, die die Bedienung, unabhängig vom verwendeten Dateisystem, vereinheitlichen sollen. Die Backends sind: 왘
mkfs.ext2 erstellt sowohl ext2- als auch ext3-Dateisysteme. Zur Formatierung
mit ext3 wird die Option -j (Journal) verwendet. 왘
mkfs.ext3 ist normalerweise ein Hardlink auf mkfs.ext2. Durch den Aufruf erkennt das Programm, welches Dateisystem formatiert werden soll.
왘
mkfs.reiserfs erstellt das Linux ReiserFS-Dateisystem.
왘
mkfs.msdos erstellt MS-DOS-Dateisysteme unter Linux. Sie können von Parti-
tionen, die mit mkfs.msdos erstellt wurden, kein Betriebssystem starten. Normalerweise handelt es sich bei mkfs.msdos um einen Softlink zu mkdosfs. 왘
mkfs.vfat ist ein weiterer Softlink auf mkdosfs.
163
1451.book Seite 164 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
왘
mkfs.ntfs erstellt NTFS-Dateisysteme unterschiedlicher Versionen. Momentan werden alle Windows-Systeme (bis einschließlich Vista) unterstützt.
왘
mkfs.xfs erstellt das ursprünglich für IRIX entwickelte 64-Bit-Dateisystem
XFS. XFS pflegt ein Journal, ähnlich wie ReiserFS, und unterstützt die Verwendung von Zugriffssteuerungslisten. Leider sind die Datenverluste bei einem Stromausfall im System relativ groß. 왘
mkfs.cramfs erstellt das Dateisystem cramFS. Hierbei handelt es sich um ein
komprimiertes Read-Only-Dateisystem, das eigentlich ausschließlich für Embedded Systems eingesetzt wird, auf die nicht schreibend zugegriffen werden muss. 왘
mkfs.jfs erstellt das Dateisystem JFS, das ursprünglich für das Betriebssys-
tem AIX entwickelt wurde. Prüfungstipp Für die Prüfung müssen Sie sich aber vor allem mit der Bedienung der Frontend-Programme auseinandersetzen.
mkfs und mke2fs Die beiden wichtigsten Frontends zur Formatierung sind mkfs und mke2fs. Bei mke2fs handelt es sich allerdings erneut lediglich um einen Hardlink, nämlich auf mkfs.ext2 bzw. mkfs.ext3. Bei manchen Distributionen stimmt der Aufruf der Verlinkungen nicht. So kommt es vor, dass mkfs nach den Programmen mkfs.ex2 und mkfs.ex3 sucht (beachten Sie das fehlende »t«). Nennen Sie die beiden Dateien einfach entsprechend um, wenn dieser Fehler bei Ihnen auftritt: [root@fedora10 ~]# mv /sbin/mkfs.ext2 /sbin/mkfs.ex2 [root@fedora10 ~]# mv /sbin/mkfs.ext3 /sbin/mkfs.ex3
Wenn Sie mkfs verwenden, benötigen Sie vor allem folgende Optionen: 왘
-t (type) legt den zu formatierenden Dateisystemtyp fest.
왘
-c (check) prüft das Gerät auf fehlerhafte Sektoren.
왘
-v (verbose) erzeugt eine informativere Ausgabe.
왘
-j (journal) erstellt ein Journal für ext3.
왘
-L Bezeichnung (Label) erstellt ein Volumenlabel.
ext2/ext3 Beachten Sie die Besonderheit bei der Erstellung von ext3-Dateisystemen. Wie Sie bereits gelesen haben, stellen die Formatierungs-Backends für ext2 und ext3 ein und dasselbe Programm dar. Das ist auch sinnvoll, weil es sich nämlich bei
164
1451.book Seite 165 Dienstag, 7. Juli 2009 2:18 14
104.1 Partitionen und Dateisysteme anlegen
ext3 um ein ext2-Dateisystem handelt, das lediglich um ein Journal erweitert wurde. Sie können sogar ein bestehendes ext2-Dateisystem um ein Journal erweitern. Sie erhalten dann ein vollwertiges ext3-Dateisystem. Wenn Sie z.B. die ext2Partition /dev/hdb3 nach ext3 konvertieren wollen, geben Sie folgendes Kommando ein: [root@fedora10 ~]# tune2fs -j /dev/hdb3 tune2fs 1.40.2 (12-Jul-2007) Erstelle Journal-Inode: erledigt Das Dateisystem wird automatisch alle 26 Mounts bzw. alle 180 Tage überprüft, je nachdem, was zuerst eintritt. Veränderbar mit tune2fs -c oder -t .
Bei der Formatierung können Sie deshalb entweder ext3 als Dateisystem angeben, oder Sie wählen ext2 mit der Option -j. Sie können deshalb wahlweise die folgenden beiden Kommandos verwenden: [root@fedora10 ~]# mkfs -t ex3 /dev/sdb1
oder: [root@fedora10 ~]# mkfs -t ex2 -j /dev/sdb1
Beide Kommandos erzeugen zudem die gleiche Ausgabe. Beachten Sie bitte, dass in Wirklichkeit mke2fs aufgerufen wird: mke2fs 1.40.2 (12-Jul-2007) Dateisystem-Label= OS-Typ: Linux Blockgröße=1024 (log=0) Fragmentgröße=1024 (log=0) 124928 Inodes, 497980 Blöcke 24899 Blöcke (5.00 %) reserviert für den Superuser erster Datenblock=1 Maximum filesystem blocks=67633152 61 Blockgruppen 8192 Blöcke pro Gruppe, 8192 Fragmente pro Gruppe 2048 Inodes pro Gruppe Superblock-Sicherungskopien gespeichert in den Blöcken: 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409 Schreibe Inode-Tabellen: erledigt Erstelle Journal (8192 Blöcke): erledigt Schreibe Superblöcke und DateisystemAccountinginformationen: erledigt Das Dateisystem wird automatisch alle 36 Mounts bzw. alle 180 Tage überprüft, je nachdem, was zuerst eintritt. Veränderbar mit tune2fs -c oder -t.
165
1451.book Seite 166 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
mkswap Wenn Sie eine Swap-Partition formatieren wollen, benötigen Sie das Programm mkswap. Die Partition (Typ 82) muss zuvor mit fdisk erzeugt werden. [root@fedora10 ~]# mkswap /dev/sdb4 Swapbereich Version 1 wird angelegt, Größe 1011703 KBytes
Damit Linux die neu erstellte Swap-Partition verwendet, muss sie mit dem Kommando swapon aktiviert werden. [root@fedora10 ~]# swapon -v /dev/sdb4 swapon für /dev/sdb4
Ohne die Option -v erhalten Sie keine Bestätigung darüber, dass die neue SwapPartition verwendet wird. Umgekehrt können Sie die Verwendung einer SwapPartition abschalten, indem Sie das Kommando swapoff verwenden. Was die Redseligkeit von swapoff betrifft, gilt das Gleiche wie für swapon. Die Option -v kann also auch hier nicht schaden: [root@fedora10 ~]# swapoff -v /dev/sdb4 swapoff für /dev/sdb4
Damit die neue Swap-Partition gleich nach dem Systemstart verfügbar wird, muss die Datei /etc/fstab bearbeitet werden. Tragen Sie die Swap-Partition hier folgendermaßen ein (der genaue Aufbau der Datei /etc/fstab wird im Kapitel »Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard« erläutert): /dev/sdb4
swap
swap
pri=42
0 0
Erstellen einer Swap-Datei Im Gegensatz zu Windows verwendet Linux im Normalfall keine Swap-Datei, sondern ganze Swap-Partitionen, wie bereits beschrieben. Das hat vor allem den Vorteil, dass es nicht zu einer Fragmentierung des Auslagerungsbereiches kommen kann. Sollte es aber kurzfristig im Speicher einmal eng werden, können Sie ohne großen Aufwand schnell eine Swap-Datei (mit all ihren Nachteilen) erzeugen. Verwenden Sie dazu folgendes Kommando: archangel:~ # dd if=/dev/zero of=/swapfile bs=1024 count=524288 524288+0 Datensätze ein 524288+0 Datensätze aus
Der dd-Befehl bewirkt hier Folgendes: Aus dem Zero Device (/dev/zero) werden Nullen in die noch nicht existierende Datei swapfile kopiert. Die Blockgröße ist auf 1024 Bytes festgelegt. Das Ganze geschieht 524.288-mal. Durch diese Prozedur entsteht eine Datei, die aus 512 MB Nullen besteht. Diese Datei kann an-
166
1451.book Seite 167 Dienstag, 7. Juli 2009 2:18 14
104.2 Die Integrität von Dateisystemen sichern
schließend als Swap File formatiert werden. Das geht deshalb so einfach, weil Linux nicht zwischen einer normalen Datei (hier /swapfile) und einer Gerätedatei (z.B. /dev/sdb4 für Swap-Partition) unterscheidet. archangel:~ # mkswap /swapfile Swapbereich Version 1 wird angelegt, Größe 524288 KBytes
Zur Aktivierung der Swap-Datei geben Sie, wie gehabt, dieses Kommando ein: archangel:~ # swapon /swapfile
Damit ein Swap File gleich nach dem Systemstart verfügbar wird, muss die Datei /etc/fstab bearbeitet werden. Tragen Sie die Swap-Datei hier ein wie jedes andere Dateisystem auch (der genaue Aufbau der Datei /etc/fstab wird in Abschnitt 104.3 im Zusammenhang mit dem mount-Kommando erläutert): /swapfile
swap
swap
defaults
0 0
Nach dem Hinzufügen der neuen Swap-Datei und ihrer Aktivierung vergewissern Sie sich, dass sie wirklich aktiv ist, indem Sie die Ausgabe der Befehle cat /proc/ swaps oder free durchführen: archangel:~ # cat /proc/swaps Filename Type /dev/hda3 partition /dev/hdb2 partition /swapfile file
Size 755044 755044 524288
Used 0 0 0
Priority 42 41 40
Prüfungstipp Für die Prüfung sollten Sie sich besonders mit der Verwendung der Frontends und den Besonderheiten bei der Erstellung von ext3 im Verhältnis zu ext2 vertraut machen.
104.2 Die Integrität von Dateisystemen sichern Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, ein Standarddateisystem und die zusätzlichen Daten eines Journaling-Dateisystems zu verwalten. Wichtigste Wissensgebiete: 왘
die Integrität von Dateisystemen überprüfen
왘
freien Platz und verfügbare Inodes überwachen
왘
einfache Probleme von Dateisystemen reparieren 167
1451.book Seite 168 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
du
왘
df
왘
fsck
왘
e2fsck
왘
mke2fs
왘
debugfs
왘
dumpe2fs
왘
tune2fs
왘
xfs-Werkzeuge (etwa xfs_metadump und xfs_info)
Allgemeines Auf den letzten Seiten haben Sie einiges über die Erstellung von Dateisystemen erfahren. Sie sollten aber auch in der Lage sein, die Integrität dieser Dateisysteme sicherzustellen und kleinere Probleme aufzufinden bzw. zu beseitigen. Hierzu zählt auch die Möglichkeit, Engpässe bei der Speicherkapazität zu ermitteln und bei einem überfüllten Dateisystem festzustellen, wo der Speicherplatz verbraucht wird.
Sicherstellen der Integrität des Dateisystems und Problembehebung fsck und e2fsck Das Programm fsck ist ein Frontend zur Überprüfung von Dateisystemen. Es ruft zur Laufzeit andere Programme auf, die auf die Überprüfung der jeweiligen Dateisysteme spezialisiert sind. Zur Überprüfung von ext2- oder ext3-Dateisystemen gibt es zusätzlich das Programm e2fsck. Hierbei handelt es sich lediglich um einen Hardlink mit den Programmen fsck.ext2 und fsck.ext3. Die Beziehungen zwischen den Frontend- und den Backend-Programmen zur Dateisystemprüfung ähneln stark denen zwischen Formatierungsfrontends und Backends. Die Backends zur Dateisystemprüfung können natürlich auch direkt angesprochen werden. Da wären: 왘
fsck.ext2 prüft ext2- und ext3-Dateisysteme. Dieses Backend ist hart verlinkt
mit fsck.ext3 und e2fsck. 왘
fsck.ext3 ist ein Hardlink zu fsck.ext2 und e2fsck.
왘
fsck.reiserfs prüft ReiserFS-Dateisysteme.
왘
fsck.minix prüft minix-Dateisysteme.
168
1451.book Seite 169 Dienstag, 7. Juli 2009 2:18 14
104.2 Die Integrität von Dateisystemen sichern
왘
fsck.cramfs prüft cramFS-Dateisysteme.
왘
fsck.xfs prüft XFS-Dateisysteme.
왘
fsck.jfs prüft JFS-Dateisysteme.
왘
fsck.msdos und fsck.vfat sind Links zu dosfsck.
Sie sollten die folgenden Optionen von fsck kennen: 왘
-f (force) erzwingt die Prüfung, auch wenn das Dateisystem sauber erscheint.
왘
-A (all) testet alle Dateisysteme, die in /etc/fstab aufgeführt sind.
왘
-t Dateisystemtyp (type) sorgt dafür, dass das zum Dateisystem passende
Backend gestartet wird. 왘
-c (check) sucht nach defekten Blöcken.
왘
-b Blocknummer (block) gibt einen alternativen Superblock an.
왘
-y (yes) beantwortet alle Fragen des Programms mit »yes«, damit eine Repa-
ratur unbeaufsichtigt durchgeführt werden kann. Wenn Sie fsck ausführen, dann sollte das zu prüfende Dateisystem nicht eingehängt sein. Das gilt insbesondere, wenn zu Reparaturzwecken Schreibzugriffe von fsck durchgeführt werden müssen. Sie erhalten vor der Prüfung eines eingehängten Dateisystems eine Warnmeldung, wie das Beispiel zeigt: [root@fedora10 ~]# fsck -f /dev/sdb1 fsck 1.40.2 (12-Jul-2007) e2fsck 1.40.2 (12-Jul-2007) /dev/sdb1 is mounted. WARNING!!! Running e2fsck on a mounted filesystem may cause SEVERE filesystem damage. Do you really want to continue (y/n)? n
Sicherheitshalber wird das Dateisystem also vorher mit umount ausgehängt: [root@fedora10 ~]# umount /dev/sdb1
Anschließend kann die Überprüfung gefahrlos durchgeführt werden: [root@fedora10 ~]# fsck -f /dev/sdb1 fsck 1.40.2 (12-Jul-2007) e2fsck 1.40.2 (12-Jul-2007) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information
169
1451.book Seite 170 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
/dev/sdb1: 11/124928 files (9.1 % non-contiguous), 18084/497980 blocks
Mit dem Dateisystem war in diesem Fall alles in Ordnung. Ein Dateisystem wird standardmäßig alle 36 Mounts oder alle 180 Tage beim Systemstart geprüft (diese Werte können in Abhängigkeit von der verwendeten Distribution abweichen). Um diese Prüfung für den nächsten Systemstart zu unterbinden, verwenden Sie shutdown mit der Option -f: archangel:~ # shutdown -sf now
Das ist besonders wichtig, wenn Sie einen Server z.B. für Hardware-Arbeiten herunterfahren müssen, dieser aber sehr schnell wieder verfügbar werden muss. Umgekehrt können Sie die Überprüfung für den nächsten Start erzwingen, wenn Sie die Option -F verwenden: archangel:~ # shutdown -sF now
tune2fs Das Programm tune2fs ermöglicht das Bearbeiten der Dateisystemparameter bei einem ext2- oder ext3-Dateisystem. So ist es z.B. möglich, die Intervalle für die automatische Überprüfung der Dateisysteme mittels fsck zu beeinflussen. Sie können die Intervalle entweder ändern oder die aktuellen Werte in den entsprechenden Zählern verändern. Die hierfür benötigten Optionen sind: 왘
-c legt die maximale Anzahl der Mounts zwischen den Dateisystemüberprü-
fungen fest. 왘
-C legt fest, wie oft das Dateisystem nach der letzten Überprüfung tatsächlich
gemountet wurde. 왘
-i legt das Intervall zwischen den Dateisystemprüfungen in Tagen, Wochen
oder Minuten fest. Ohne Zeitangabe schaltet diese Option die regelmäßige Überprüfung aus. 왘
-T YYYYMMDD[[HHMM]SS] legt den Zeitpunkt fest, wann die letzte Dateisystem-
prüfung tatsächlich stattgefunden hat. Wenn Sie ein ext2-Dateisystem in ein ext3-Dateisystem konvertieren wollen, dann verwenden Sie die Option -j (journal). Bei einem ext3-Dateisystem handelt es sich, wie bereits erläutert, um ein ext2-Dateisystem mit Journal. Deshalb ist die Konvertierung recht einfach: [root@fedora10 ~]# tune2fs -j /dev/hdb3 tune2fs 1.40.2 (12-Jul-2007) Erstelle Journal-Inode: erledigt Das Dateisystem wird automatisch alle 26 Mounts bzw. alle 180 Tage
170
1451.book Seite 171 Dienstag, 7. Juli 2009 2:18 14
104.2 Die Integrität von Dateisystemen sichern
überprüft, je nachdem, was zuerst eintritt. Veränderbar mit tune2fs -c oder -t.
Um die Informationen des Superblocks anzuzeigen, verwenden Sie einfach die Option -l. Da die vollständige Ausgabe dieses Kommandos mindestens zwei Buchseiten füllen würde, soll hier auf ein Beispiel verzichtet werden. debugfs Das Programm debugfs dient dazu, ein ext2- oder ext3-Dateisystem interaktiv zu untersuchen oder zu modifizieren. Es gibt auch die Möglichkeit, mit debugfs gelöschte Dateien wiederherzustellen. Dazu muss zunächst das betroffene Dateisystem ausgehängt werden: [root@fedora10 /]# umount /dev/sdb1
Anschließend wird eben dieses Dateisystem mit debugfs geöffnet: [root@fedora10 /]# debugfs /dev/sdb1
Am interaktiven Prompt von debugfs geben Sie das Kommando lsdel ein, um gelöschte Inodes anzuzeigen: debugfs: lsdel Inode Owner Mode Size 12 0 100600 12288 13 0 100644 7416 2 deleted inodes found.
Blocks Time deleted 12/ 12 Sun Dec 23 00:02:48 2007 8/ 8 Sun Dec 23 00:02:57 2007
Davon ausgehend, dass die wiederherzustellende Datei, die auf Inode 13 befindliche war, muss jetzt noch folgendes Kommando verwendet werden: debugfs:
dump <13> /tmp/restored
Anschließend kann das Dateisystem wieder gemountet und die Datei an ihren ursprünglichen Platz zurückkopiert werden. In der Prüfung sind bis heute keine Fragen gestellt worden, die eine genauere Kenntnis von debugfs voraussetzen. dumpe2fs Mit dumpe2fs können detaillierte Informationen über ein ext2- oder ext3-Dateisystem eingeholt werden. Um einen Überblick zu erhalten, starten Sie das Programm am besten ohne Optionen, aber mit einer Dateisystemangabe als Argument. Da die Ausgabe des Programms recht umfangreich ist, sollten Sie die Ausgabe an less weitergeben. Beispiel:
171
1451.book Seite 172 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
archangel:~ # dumpe2fs /dev/hda1 | less
Da auch dumpe2fs in der Prüfung eher peripher abgefragt wird, soll es hier nicht weiter thematisiert werden. mke2fs Sie können auch mit dem Formatierungsprogramm mke2fs die Integrität eines Dateisystems überprüfen. Verwenden Sie dazu die Option -c: [root@fedora10 ~]# mke2fs -c /dev/sdb1 mke2fs 1.40.2 (12-Jul-2007) Dateisystem-Label= OS-Typ: Linux Blockgröße=1024 (log=0) Fragmentgröße=1024 (log=0) 124928 Inodes, 497980 Blöcke 24899 Blöcke (5.00 %) reserviert für den Superuser ... der restliche Teil der Ausgabe wurde abgeschnitten ...
XFS-Werkzeuge Zur Verwaltung des XFS-Dateisystems gibt es mehrere Werkzeuge. Das zur Erstellung eines XFS-Dateisystems notwendige mkfs.xfs kennen Sie bereits. Weitere Tools sind: 왘
xfs_growfs kann die Größe des Dateisystems nachträglich erweitern.
왘
xfs_info gibt u.a. Informationen über die Geometrie des Dateisystems aus.
왘
xfs_metadump speichert die Metainformationen des Dateisystems in eine
Datei.
Überwachen des freien Platzes und der freien Inodes Zur Wartung der Dateisysteme gehört auch die Überprüfung des zur Verfügung stehenden Speicherplatzes. Außerdem sollte hin und wieder geprüft werden, wofür genau Speicherplatz auf den Datenträgern verwendet wird. Schließlich müssen Daten nicht nur gespeichert, sondern auch gesichert werden. Das nimmt Zeit und Geld in Anspruch. Damit Sie dieser Aufgabe gerecht werden können, stehen Ihnen unter Linux zwei wichtige Programme zur Verfügung, nämlich df und du. Die Optionen dieser beiden Programme werden in der Prüfung sehr häufig abgefragt.
172
1451.book Seite 173 Dienstag, 7. Juli 2009 2:18 14
104.2 Die Integrität von Dateisystemen sichern
df (disk free) Durch das Kommando df erhalten Sie Informationen über die aktuelle Belegung der verwendeten Dateisysteme. Selbst wenn Sie keine Optionen angeben, haben Sie sofort einen Überblick: archangel:~ # df Filesystem 1K-blocks /dev/hda2 18928028 /dev/hda4 58105324 /dev/hda1 54416 /dev/sdb1 153834852
Used 8277080 50835552 11369 98530852
Available 9689460 7269772 40238 47489584
Use% 47 % 88 % 23 % 68 %
Mounted on / /storage /boot /media/usb
Die Tabelle gibt Aufschluss über die Belegung aller eingehängten Dateisysteme. Standardmäßig werden die vorhandenen Blöcke, die belegten Blöcke und die noch verfügbaren Blöcke in 1K-blocks (1024 Byte) angezeigt. Die Partition /dev/ hda2 im vorangegangenen Beispiel ist also ca. 19 GB groß. Es folgt eine Angabe der prozentualen Belegung und der Einhängepunkt (Mountpoint). Das impliziert gleichzeitig, dass eine Partition eingehängt sein muss, damit df sie in die Auswertung mit einbezieht. Sie sollten für die Prüfung zumindest die folgenden Optionen von df kennen: 왘
-i (inodes) zeigt die Belegung der Inodes anstatt der Blockbelegung.
왘
-h (human readable) zeigt die Informationen in einem angenehm lesbaren Format (in K, M, G, T, P usw.).
왘
-m zeigt die Blöcke in M anstatt in K an.
Was die Inodes betrifft, kann man eigentlich sagen, dass es hier selten zu Engpässen kommt. Man müsste schon sehr viele, sehr kleine Dateien erzeugen, um hier an Grenzen zu stoßen. Sie sehen jetzt die Belegung der Inodes desselben Systems, aus dem das vorangegangene Beispiel entnommen wurde: archangel:~ # df -i Filesystem Inodes /dev/hda2 2403744 /dev/hda4 0 /dev/hda1 14056 /dev/sdb1 19546112
IUsed IFree 344963 2058781 0 0 42 14014 69530 19476582
IUse% Mounted on 15 % / – /storage 1 % /boot 1 % /media/usb
Wie Sie sehen, steht die Verwendung der Inodes in einem sehr sicheren Verhältnis zur Belegung der Festplattenkapazität. Damit soll sichergestellt werden, dass die Inodes nicht zu einem begrenzenden Faktor bei der Belegung eines Dateisystems werden.
173
1451.book Seite 174 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Es folgen die Beispiele für die Optionen -h und -m. Der Punkt bewirkt jeweils, dass nur die Partition gelistet wird, in der sich das aktuelle Arbeitsverzeichnis befindet: archangel:/storage # df . -m Filesystem 1M-blocks /dev/hda4 56744
Used Available Use% Mounted on 49849 6896 88 % /storage
Die Option -m ruft eine Änderung der Überschrift in der zweiten Spalte auf 1M-blocks hervor. Alle Ausgaben erfolgen jetzt in Megablocks. archangel:/storage # df . -h Filesystem Size Used Avail Use% Mounted on /dev/hda4 56G 49G 6.8G 88 % /storage
Bei Verwendung der Option -h ändert sich die zweite Spaltenüberschrift in Size, und die Größeneinheit wird bei jedem ausgegebenen Wert einzeln angezeigt. du (disk utilization) Wenn Sie mit df einen Engpass auf einem Dateisystem festgestellt haben, dann ist der nächste Schritt das Auffinden der Verzeichnisse, die diesen Engpass hervorrufen. Oftmals existieren irgendwo ein paar Gigabyte ISO-Dateien, die man nicht mehr benötigt, die aber vergessen und deshalb nie gelöscht wurden. Dann benötigen Sie das Programm du. Sie sollten für die Prüfung zumindest die folgenden Optionen von du kennen: 왘
-a (all) zeigt auch die Belegung durch Dateien, nicht nur die von Verzeichnis-
sen. 왘
-k (kilo) zeigt die Blöcke in Kilo an.
왘
-m (mega) zeigt die Anzahl der Blöcke in Megablocks an.
왘
-h (human readable) macht die Ausgabe angenehmer zu lesen (in K, M, G
usw.). 왘
-c zeigt zusätzlich die Summe der gelisteten Einträge.
왘
-s zeigt nur die Einträge für die angegebenen Verzeichnisse an. Ohne diese
Option zeigt du alle Einträge rekursiv für alle Unterverzeichnisse an. Wenn Sie du ohne Optionen verwenden, dann wird aufgrund der rekursiven Arbeitsweise des Programms u.U. eine unübersichtliche Anzahl von Zeilen ausgegeben. Wenn Sie z.B. ermitteln wollen, wie viel Platz durch einzelne Benutzer im /home-Dateisystem belegt wird, kommen Sie ohne Optionen nicht weiter. Das Programm wc zählt die Zeilen, die du auf dem Referenzsystem ausgegeben hätte:
174
1451.book Seite 175 Dienstag, 7. Juli 2009 2:18 14
104.3 Das Ein- und Aushängen von Dateisystemen steuern
archangel:/home # du | wc -l 825
Eine praktische Kombination aus Optionen ist -sch. Sie bewirkt eine übersichtliche Anzeige und ist leicht zu behalten. archangel:/home # du -sch * 9.4G dominik 543M harald 190M michaela 10.1G total
Zur Erklärung: Die Option -s sorgt dafür, dass nur die angegebenen Verzeichnisse aufgeführt werden. Deshalb muss auch als Wildcard der Stern verwendet werden. Das Programm würde sonst das aktuelle Verzeichnis auswerten, und die Ausgabe sähe so aus: archangel:/home # du -sch 10.1G . 10.1G total
Die Option -c bewirkt die Summenbildung (10.1G total) am Ende der Ausgabe und die Option -h für die angenehme Lesbarkeit in Megabyte und in Gigabyte. Das Ergebnis des Kommandos zeigt, dass der User Dominik kontaktiert werden sollte, um ihn auf sein Speicherverhalten aufmerksam zu machen. Um die Verzeichnisse zu identifizieren, die innerhalb seines Benutzerverzeichnisses eine starke Belegung verursachen, geben Sie folgendes Kommando ein: archangel:/home # du -sh /home/dominik/* | less
Prüfungstipp Merken Sie sich für die Prüfung unbedingt die Optionen von df und du und achten Sie darauf, die beiden Kommandos nicht miteinander zu verwechseln.
104.3 Das Ein- und Aushängen von Dateisystemen steuern Wichtung: 3 Beschreibung: Kandidaten sollten in der Lage sein, das Einhängen eines Dateisystems zu konfigurieren. Wichtigste Wissensgebiete: 왘
Dateisysteme manuell ein- und aushängen
175
1451.book Seite 176 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
왘
das Einhängen von Dateisystemen beim Systemstart konfigurieren
왘
von Benutzern einhängbare Wechseldateisysteme konfigurieren
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/fstab
왘
/media
왘
mount
왘
umount
Allgemeines Wie Sie wissen, werden Laufwerke unter Linux bei Bedarf ein- oder ausgehängt. Dieser Vorgang kann manuell ausgeführt oder durch Einträge in der Datei /etc/ fstab automatisiert werden. Im Normalfall darf das Ein- und Aushängen eines Dateisystems nur vom root-Benutzer durchgeführt werden. Ausnahmen von dieser Regel können in der Datei /etc/fstab festgelegt werden.
Manuelles Mounten und Unmounten In der deutschen Umgangssprache wird der Vorgang des Einhängens eines Dateisystems als »mounten« bezeichnet. Hierbei handelt es sich um einen »verbogenen« englischen Ausdruck. Der Begriff »mount« bedeutet so viel wie »montieren« oder »anbringen«. Das Kommando, das zum Einhängen eines Dateisystems verwendet wird, heißt aus verständlichen Gründen ebenfalls mount. Soll das Dateisystem wieder ausgehängt werden, verwendet man umount. Achtung: Es heißt nicht unmount. mount Wenn Sie das Kommando mount ohne Optionen und Argumente verwenden, erhalten Sie eine Auflistung der momentan in den Verzeichnisbaum eingehängten Dateisysteme. Beispiel: archangel:~ # mount /dev/hda2 on / type ext3 (rw,acl,user_xattr) /dev/hda4 on /storage type reiserfs (rw,usrquota,grpquota) /dev/hda1 on /boot type ext2 (rw,acl, user_xattr) proc on /proc type proc (rw) /dev/fd0 on /media/floppy type subfs (rw, sync,fs=floppyfss) //connor/daten on /mnt/connor type smbfs (0)
176
1451.book Seite 177 Dienstag, 7. Juli 2009 2:18 14
104.3 Das Ein- und Aushängen von Dateisystemen steuern
Wenn Sie mit dem Kommando mount Dateisysteme in den Verzeichnisbaum einhängen wollen, erwartet mount die Angabe von Optionen, den Pfad zum Gerät, das eingehängt werden soll, und den Pfad zum Einhängepunkt (Mountpoint). Beispiel: [root@fedora10 /]# mount -t ext3 /dev/sdb1 /dateien
Die Option -t ext3 gibt den Dateisystemtyp an, /dev/sdb1 ist die Partition, die eingehängt werden soll, und das Verzeichnis /dateien ist der Mountpoint. Wenn die Zuordnung von Dateisystem zu Mountpoint und Dateisystemtyp bereits vorab in der Datei /etc/fstab (die Datei /etc/fstab wird auf den nächsten Seiten ausführlicher thematisiert werden) vorgenommen wurde, reicht es aus, nur den Mountpoint oder nur das einzuhängende Dateisystem anzugeben. Folgende Kommandos führen zu demselben Ergebnis, wenn das Dateisystem aus dem vorangegangenen Beispiel in die Datei fstab eingetragen wurde: [root@fedora10 /]# mount /dateien [root@fedora10 /]# mount /dev/sdb1
Auf dieselbe Art werden auch Diskettenlaufwerke, CD-ROMs und DVD-Laufwerke eingehängt. Beim Einhängen von USB Memory Sticks ist zu beachten, dass diese dieselben Gerätedateien verwenden wie SCSI-Laufwerke. Beispiel: root@ubuntu-server:~# mount -t iso 9660 /dev/hdc /media/cdrom0
Sie können u.a. folgende Kommandozeilenoptionen mit dem mount-Befehl verwenden: 왘
-a (all) hängt alle Dateisysteme ein, die in der Datei /etc/fstab gelistet sind.
왘
-r (read only) hängt ein Dateisystem schreibgeschützt ein.
왘
-w (writeable) hängt ein Dateisystem im read/write-Modus ein.
왘
-t (type) gibt den Dateisystemtyp an, falls erforderlich. Folgende Arten von
Dateisystemen werden unterstützt: adfs, affs, autofs, coda, coherent, cramfs, devpts, efs, ext, ext2, ext3, hfs, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, ntfs, proc, qnx4, ramfs, reiserfs, romfs, smbfs, sysv, tmpfs, udf, ufs, umsdos, usbfs, vfat, xenix, xfs, xiafs 왘
-v (verbose) sorgt für eine Bestätigung des Vorgangs. Der mount-Befehl zeigt
normalerweise keine Erfolgsmeldungen an. 왘
-o (options) übergibt Mountoptionen. Die wichtigsten dieser Optionen soll-
ten Sie kennen.
177
1451.book Seite 178 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Mountoptionen (mount -o) Manchmal ist es notwendig, während des Einhängens eines Dateisystems Optionen zu übergeben. Diese Optionen werden kommagetrennt mit der Kommandozeilenoption -o übermittelt. Das kann z.B. nötig sein, wenn Sie ein Laufwerk, das mit der Option -r (read only) gemountet wurde, beschreiben müssen. Wenn Sie dieses Laufwerk einfach aushängen und dann schreibbar wieder einhängen, gehen nicht gespeicherte Daten von Benutzern, die eventuell über das Netzwerk auf das System zugreifen, verloren. Ein anderer Grund könnte der sein, dass Sie das Dateisystem neu einhängen wollen, auf dem sich der mount-Befehl selbst befindet. Wenn Sie dieses Dateisystem zuerst unmounten, haben Sie keine Möglichkeit mehr, das Kommando mount erneut auszuführen. Das geschieht nicht, wenn Sie das Dateisystem stattdessen schreibbar remounten: [root@fedora10 /]# mount -v -o remount,rw /dateien
Beachten Sie die kommagetrennte Übergabe der beiden Optionen. Wenn eine Authentifizierung beim Zugriff auf entfernte Ressourcen notwendig ist, können Benutzername und Passwort ebenfalls als kommaseparierte Optionen übergeben werden: archangel:~ # mount -t smbfs -o username=michaela,password=geheim //connor/daten /mnt/connor/
Weitere Optionen finden Sie auf den nächsten Seiten in Zusammenhang mit der Datei /etc/fstab, denn in dieser Konfigurationsdatei finden dieselben Optionen Verwendung wie auf der Kommandozeile. In der Prüfung werden Mountoptionen oft mit der Datei /etc/fstab in Zusammenhang gebracht. Netzwerkressourcen einhängen Mit dem Kommando mount können auch entfernte Dateisysteme eingehängt werden. Wenn Sie auf einen NFS-Server zugreifen wollen, verwenden Sie den mountBefehl wie folgt: root@ubuntu-server:~# mount -t nfs archangel:/storage /daten
Als Dateisystemtyp wird also einfach nfs angegeben. Der Mountpoint ist in diesem Fall das lokale Verzeichnis /daten. Merken Sie sich unbedingt, wie die Syntax für das einzuhängende Dateisystem bei NFS aussieht: hostname:/exportiertes_Verzeichnis
Im vorangegangenen Beispiel ist demnach auf dem Host archangel das Verzeichnis /storage exportiert worden. Es gibt einen erheblichen Unterschied zum Einhängen von SMB-Dateisystemen: Mit dem Dateisystemtyp smbfs können sowohl
178
1451.book Seite 179 Dienstag, 7. Juli 2009 2:18 14
104.3 Das Ein- und Aushängen von Dateisystemen steuern
Windows-Freigaben als auch Shares auf einem Samba-Server angesprochen werden. Die Syntax für den mount-Befehl sieht dann so aus: archangel:~ # mount -t smbfs //connor/daten /mnt/connor
In diesem Fall existiert auf dem Host connor eine Freigabe mit der Bezeichnung daten. Diese Freigabe wird in das lokale Verzeichnis /mnt/connor auf dem Host archangel eingehängt. Im Normalfall muss beim Zugriff auf eine SMB-Share ein Benutzername und ein Passwort angegeben werden. Verwenden Sie dazu die Option -o wie folgt: archangel:~ # mount -t smbfs -o username=michaela,password=geheim //connor/daten /mnt/connor/
umount Wenn ein Dateisystem nicht mehr benötigt wird, können Sie es mit dem Kommando umount aushängen. Das kann auch dann erforderlich sein, wenn Sie ein Dateisystem mit fsck überprüfen wollen. Sie können auch Optionen mit umount verwenden, aber das ist in der Regel nicht nötig. Sie können beim Aushängen eines Dateisystems entweder die Gerätedatei oder den Mountpoint des zu entfernenden Dateisystems als Argument übergeben. Wenn z.B. das Dateisystem /dev/ hda1 auf dem Mountpoint /boot eingehängt ist, führen die folgenden beiden Kommandos zu demselben Ergebnis: archangel:/ # umount /dev/hda1 archangel:/ # umount /boot
Sie können auch alle Dateisysteme, die in der Datei /etc/fstab eingetragen sind, mit einem einzigen Kommando aushängen, nämlich: archangel:/ # umount -a
Das macht aber normalerweise keinen Sinn. Prüfungstipp In der Prüfung geht es eigentlich eher selten um das Kommando umount als solches, sondern vor allem darum, wer es verwenden darf. Im Normalfall darf nur root Dateisysteme ein- bzw. aushängen. Ausnahmen von dieser Regel werden in der Datei /etc/ fstab über die entsprechenden Optionen festgelegt.
Automatisches Mounten über die Datei /etc/fstab Wenn auf Dateisysteme regelmäßig zugegriffen wird, macht es natürlich Sinn, dass diese schon beim Systemstart in den Verzeichnisbaum eingehängt werden. Aber auch dann, wenn ein Dateisystem erst im laufenden Betrieb eingehängt
179
1451.book Seite 180 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
werden soll, bringt die Verwendung der Datei /etc/fstab einige Vorteile mit sich. Sie können Dateisysteme, die hier aufgeführt sind, mit dem verkürzten mount-Befehl wesentlich bequemer einhängen. So entfällt die Angabe des Dateisystemtyps und wahlweise des Mountpoints oder der einzuhängenden Partition. Darüber wurde aber bereits in Zusammenhang mit dem Kommando mount ausführlich berichtet. Sie sehen ein Beispiel für eine fstab-Datei: archangel:/ # /dev/hda2 /dev/hda1 /dev/hda4 /dev/hda3 proc usbfs host7:/share
cat /etc/fstab / /boot /storage swap /proc /proc/bus/usb /mnt/host7
ext3 ext2 reiserfs swap proc usbfs nfs
acl,user_xattr acl,user_xattr defaults pri=42 defaults noauto defaults
1 1 1 0 0 0 0
1 2 2 0 0 0 0
Die sechs Spalten der Datei /etc/fstab müssen Sie für die Prüfung genau kennen: 왘
1. Spalte enthält das einzuhängende Gerät.
왘
2. Spalte enthält den Mountpoint.
왘
3. Spalte bezeichnet den Dateisystemtyp.
왘
4. Spalte enthält Mountoptionen (eine Auflistung folgt).
왘
5. Spalte ist eine Information für das Sicherungsprogramm dump. Wenn hier eine Null steht, wird das Dateisystem von dump nicht gesichert. Dateisysteme, die nicht ständig eingehängt sind, sollten nicht über die Datei fstab zur Sicherung mit dump vorgemerkt werden.
왘
6. Spalte enthält Informationen für fsck. Hier wird festgelegt, ob und in welcher Reihenfolge das Programm fsck die Dateisysteme beim Systemstart prüfen soll: 왘
0 wird nicht geprüft.
왘
1 wird vorzugsweise geprüft.
왘
2 wird geprüft, nachdem Dateisysteme mit dem Wert 1 in diesem Feld bereits geprüft wurden.
Mountoptionen Mountoptionen können im vierten Feld der Datei /etc/fstab verwendet oder beim manuellen Einhängen von Dateisystemen mit mount -o übergeben werden. Einige dieser Optionen machen aber nur bei der Verwendung mit der Datei fstab überhaupt Sinn. Wichtige Optionen sind:
180
1451.book Seite 181 Dienstag, 7. Juli 2009 2:18 14
104.3 Das Ein- und Aushängen von Dateisystemen steuern
왘
auto ermöglicht automatisches Einhängen mittels mount -a.
왘
noauto verhindert automatisches Einhängen mittels mount -a.
왘
usrquota aktiviert die Möglichkeit der Verwendung von Quota auf Benutzer-
ebene. 왘
grpquota aktiviert die Möglichkeit der Verwendung von Quota auf Gruppen-
ebene. 왘
suid ermöglicht die Funktion der SUID-Bits.
왘
nosuid verhindert aus Sicherheitsgründen die Funktion der SUID-Bits.
왘
exec erlaubt das Ausführen von Dateien auf diesem Dateisystem.
왘
noexec verhindert das Ausführen von Dateien auf diesem Dateisystem.
왘
ro – Das Dateisystem wird im read-only-Modus eingehängt.
왘
rw – Das Dateisystem wird im read/write-Modus eingehängt.
왘
user erlaubt es einem normalen Benutzer, dieses Dateisystem einzuhängen. Das Dateisystem kann dann nur von demselben Benutzer oder vom root ausgehängt werden.
왘
nouser verhindert, dass ein normaler Benutzer ein Dateisystem einhängen
kann. 왘
users erlaubt es einem normalen Benutzer, dieses Dateisystem einzuhängen.
Das Dateisystem kann von einem beliebigen Benutzer wieder ausgehängt werden. 왘
defaults setzt die Standardeinstellungen. Ausnahmen werden kommasepa-
riert übergeben. Defaults sind: rw, suid, dev, exec, auto, nouser, async. Prüfungstipp Achten Sie bitte besonders darauf, die Optionen user und users nicht miteinander zu verwechseln.
Die Datei /etc/mtab Wenn ein Dateisystem eingehängt wird, dann trägt das Programm mount das Dateisystem, den Mountpoint und eventuell übergebene Optionen in die Datei /etc/mtab ein. Eine Ausnahme stellen Dateisysteme dar, die mit der Option -n gemountet wurden. Beispiel: archangel:~ # cat /etc/mtab /dev/hda2 / ext3 rw,acl,user_xattr 0 0 proc /proc proc rw 0 0 sysfs /sys sysfs rw 0 0 tmpfs /dev/shm tmpfs rw 0 0
181
1451.book Seite 182 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
devpts /dev/pts devpts rw,mode=0620,gid=5 0 0 /dev/hda4 /storage reiserfs rw,usrquota,grpquota 0 0 usbfs /proc/bus/usb usbfs rw 0 0 nfsd /proc/fs/nfsd nfsd rw 0 0 /dev/hda1 /boot ext2 rw,acl,usrquota,grpquota,user_xattr 0 0
Im /proc-Dateisystem werden eingehängte Dateisysteme in jedem Fall aufgeführt. Auf diese Art können Sie auch die Dateisysteme anzeigen lassen, denen beim Einhängen mit mount die Option -n übergeben wurde. archangel:~ # cat /proc/mounts rootfs / rootfs rw 0 0 /dev/root / ext3 rw 0 0 proc /proc proc rw,nodiratime 0 0 sysfs /sys sysfs rw 0 0 devpts /dev/pts devpts rw 0 0 tmpfs /dev/shm tmpfs rw 0 0 /dev/hda4 /storage reiserfs rw 0 0 usbfs /proc/bus/usb usbfs rw 0 0 nfsd /proc/fs/nfsd nfsd rw 0 0 /dev/hda1 /boot ext2 rw 0 0
Prüfungstipp Eignen Sie sich für die Prüfung auch besonders die Fähigkeit an, die Datei /etc/fstab genau auswerten zu können. Sie müssen z.B. antworten können, wenn Sie gefragt werden, was das fünfte Feld in dieser Datei bewirkt. Seit April 2009 steht die Verwendung von /media als bevorzugtes Verzeichnis für Wechselmedien auf der LPIC-Liste. Seien Sie sich dessen bewusst.
104.4 Platten-Quotas verwalten Wichtung: 1 Beschreibung: Kandidaten sollten in der Lage sein, Platten-Quotas für Benutzer zu verwalten. Wichtigste Wissensgebiete: 왘
Platten-Quotas für ein Dateisystem in Kraft setzen
왘
Benutzer-Quota-Berichte anpassen, prüfen und erzeugen
182
1451.book Seite 183 Dienstag, 7. Juli 2009 2:18 14
104.4 Platten-Quotas verwalten
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
quota
왘
edquota
왘
repquota
왘
quotaon
Allgemeines Wie Sie ermitteln, ob ein Dateisystem über ausreichend Ressourcen verfügt, haben Sie bereits gelesen. Auch das Lokalisieren von umfangreichen Verzeichnissen wurde in diesem Buch bereits behandelt. In diesem Kapitel geht es sozusagen um die Prophylaxe. Mithilfe von Quotas können Sie von vornherein verhindern, dass ein Dateisystem durch die Benutzer überfüllt wird. Damit Sie Quotas verwenden können, müssen diese vom Kernel unterstützt werden. Das ist bei den mitgelieferten Kerneln der meisten Distributionen der Fall.
Möglichkeiten der Quotierung Grundsätzlich können Quotas auf Basis von Benutzerkonten oder auf Basis von Gruppenmitgliedschaften festgelegt werden. In beiden Fällen gibt es sogenannte Hardlimits und Softlimits. Im Übrigen beziehen sich Quotas immer auf ein ganzes Dateisystem im Sinn einer Partition. Sie können keine Unterverzeichnisse einzeln quotieren. Hardlimit Bei einem Hardlimit handelt es sich um eine harte Grenze. Wenn ein Benutzer Daten speichert und dabei vom Speicherplatz her an sein Hardlimit stößt, dann wird ihm der Schreibzugriff verweigert. Er muss dann zunächst Dateien löschen, um wieder unter sein Limit zu sinken und daraufhin Schreibzugriff zu erhalten. Softlimit und Gracetime Ein Softlimit ist eine Grenze, die immer unterhalb des Hardlimits liegt. Wenn ein Benutzer aufgrund seiner Datenspeicherung an sein Softlimit stößt, dann darf er weiterhin Daten speichern. Ab dem Zeitpunkt der Softlimit-Überschreitung beginnt allerdings die sogenannte Gracetime oder auch Graceperiod. Darunter versteht man eine Gnadenfrist, die dem Benutzer gewährt wird. Innerhalb dieser Gnadenfrist muss der Benutzer ausreichend Daten löschen, um wieder unterhalb seines Softlimits zu fallen. Tut er das nicht, wird aus dem Softlimit nach Ablauf der Gracetime ein Hardlimit, und der Schreibzugriff wird dem Benutzer verweigert.
183
1451.book Seite 184 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Hardlimits, Softlimits und Gracetime gibt es sowohl bei der Quotierung von Benutzern als auch von Gruppen.
Vorbereiten von Quota Optionen in /etc/fstab Damit Sie Quota verwenden können, sind einige vorbereitende Maßnahmen zu treffen. Zunächst muss eine Partition mit den entsprechenden Optionen gemountet werden, damit eine Quotierung möglich wird. Zu diesem Zweck werden die entsprechenden Optionen in die Datei /etc/fstab eingetragen. Spätestens jetzt ist klar, warum ein Unterverzeichnis nicht einzeln quotiert werden kann, sondern immer nur eine ganze Partition. Sie können Quotas auf jeder Partition einrichten, die in der Datei /etc/fstab eingetragen ist. Es macht allerdings hauptsächlich Sinn, Quotierungen auf Dateisystemen einzurichten, auf die Benutzer Schreibzugriff haben (z.B. /home). Ein fstab-Eintrag für Quotas könnte so aussehen: /dev/sdb1
/dateien
ext3
defaults,usrquota,grpquota
0 0
Prüfungstipp Merken Sie sich unbedingt, dass die relevanten Optionen usrquota und grpquota heißen, nicht userquota und groupquota.
Erstellung der Quota-Dateien Die Quotierungen werden in Dateien, jeweils getrennt nach Benutzer-Quotas und Gruppen-Quotas, im Hauptverzeichnis eines zu quotierenden Dateisystems abgespeichert. Diese Dateien heißen aquota.user und aquota.group. Alte Implementierungen von Quota verwendeten quota.user und quota.group. Um unschöne Fehlermeldungen zu vermeiden, sollten Sie diese beiden Dateien von Hand erstellen und die Dateiberechtigungen auf 600 einstellen, wie die folgenden drei Befehlszeilen zeigen: [root@fedora10 dateien]# touch aquota.user [root@fedora10 dateien]# touch aquota.group [root@fedora10 dateien]# chmod 600 aquota*
Anschließend können Sie die beiden Dateien initialisieren. Sie benötigen für diese Aufgabe das Programm quotacheck. Dieses Werkzeug erstellt eine Tabelle der aktuell existierenden Dateien und Verzeichnisse und gleicht das Ergebnis mit den beiden Dateien aquota.user und aquota.group ab. Wenn alle auf dem System befindlichen Quotas aktualisiert werden sollen, verwenden Sie folgendes Kommando:
184
1451.book Seite 185 Dienstag, 7. Juli 2009 2:18 14
104.4 Platten-Quotas verwalten
[root@fedora10 /]# quotacheck -avug quotacheck: Scanning /dev/sda3 [/home] done quotacheck: Checked 423 directories and 9184 files quotacheck: Scanning /dev/sdb1 [/dateien] done quotacheck: Checked 25 directories and 4125 files
Sie haben auch die Möglichkeit, nur eine ausgewählte Datei zu aktualisieren. Um nur die Datei aquota.user im Verzeichnis /dateien zu aktualisieren, geben Sie den folgenden Befehl ein: [root@fedora10 /]# quotacheck -vu /dateien quotacheck: Checked 25 directories and 4125 files
Die wichtigsten Optionen von quotacheck sind: 왘
-a (all) bearbeitet alle eingehängten Dateisysteme.
왘
-u (user) bearbeitet nur aquota.user.
왘
-g (group) bearbeitet nur aquota.group.
왘
-v (verbose)
Aktivieren von Quota Nachdem das System vorbereitet wurde, können Sie die Quotas einschalten. Verwenden Sie dazu das Kommando quotaon. Dieses Programm versteht ähnliche Optionen wie quotacheck. Wenn Sie Quotierungen für alle eingehängten Dateisysteme und für alle Benutzer und Gruppen einschalten wollen, dann verwenden Sie folgenden Befehl: [root@fedora10 /]# quotaon -avug quotaon: using /home/aquota.user on /dev/sda3 [/home] quotaon: using /dateien/aquota.user on /dev/sdb1 [/dateien]
Sie können aber auch selektiv Quotas starten, indem Sie entweder das Dateisystem oder den Mountpoint des Dateisystems angeben, das quotiert werden soll. Das folgende Kommando startet ausschließlich die Quotierung für Benutzer im Verzeichnis /dateien (vorausgesetzt, /dateien ist das Hauptverzeichnis einer Partition): [root@fedora10 /]# quotaon -vu /dateien
Wenn Sie Quotas deaktivieren wollen, dann verwenden Sie das Kommando quotaoff. Sie müssen Quotas z.B. dann deaktivieren, wenn Sie mit quotacheck die Quotierungsdateien aktualisieren wollen. Die Optionen sind auch hier wieder denen der vorangegangenen Programme ähnlich. Um alle Quotierungen des
185
1451.book Seite 186 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Dateisystems, das auf /dateien gemountet ist, zu deaktivieren, verwenden Sie diesen Befehl: [root@fedora10 /]# quotaoff -vug /dateien /dev/sda3 [/home]: group quotas turned off /dev/sda3 [/home]: user quotas turned off /dev/sdb1 [/dateien]: group quotas turned off /dev/sdb1 [/dateien]: user quotas turned off
Wenn Sie alle Quotierungen des Systems deaktivieren müssen, verwenden Sie das Kommando: [root@fedora10 /]# quotaoff -avug /dev/sda3 [/home]: group quotas turned off /dev/sda3 [/home]: user quotas turned off /dev/sdb1 [/dateien]: group quotas turned off /dev/sdb1 [/dateien]: user quotas turned off
Es werden dann alle Quotas abgeschaltet.
Ändern und Überprüfen von Quota Ändern von Quotierungen mit edquota Bisher sind die Quotas noch nicht wirksam geworden. Das liegt daran, dass noch keine Limits für Benutzer oder Gruppen eingerichtet wurden. Diese Tätigkeit wird mit dem Kommando edquota ausgeführt. Wenn Sie edquota ausführen, öffnet der vi die zum Benutzer oder zur Gruppe gehörende Quotierungsdatei, und Sie können diese bearbeiten. Im folgenden Beispiel werden die Quotierungen eines Users nur in Bezug auf das Verzeichnis /dateien geändert: [root@fedora10 /]# edquota -f /dateien -u harald Disk quotas for user harald (uid 500): Filesystem blocks soft hard inodes /dev/sdb1 0 5000 7000
soft 0
hard 0
Der Benutzer bekommt hier ein Softlimit von 5000 Blocks und ein Hardlimit von 7000 Blocks im Dateisystem /dev/sdb1. Ein Block entspricht normalerweise 1024 Bytes. Sie können die genaue Blockgröße mit dumpe2fs herausfinden: [root@fedora10 /]# dumpe2fs -h /dev/sdb1 | grep "Block size" dumpe2fs 1.40.2 (12-Jul-2007) Block size: 1024
186
1451.book Seite 187 Dienstag, 7. Juli 2009 2:18 14
104.4 Platten-Quotas verwalten
Es besteht auch die Möglichkeit, die Verwendung von Inodes zu limitieren. Die Anzahl der bewilligten Inodes entspricht normalerweise der Anzahl der Dateien, die ein Benutzer erstellen kann. Alle Werte sind per Voreinstellung auf 0 gesetzt. Das bedeutet nicht, dass der Benutzer nichts abspeichern darf, sondern im Gegenteil, dass es für ihn keine Limits gibt. Wenn Sie eine Quotierung ausschalten wollen, können Sie also einfach alle Parameter auf 0 setzen. Kopieren von Quotierungen mit edquota Um ein und dieselben Quotierungen für mehrere Benutzer festzulegen, können Sie den Eintrag für einen einzigen Benutzer editieren und diesen Eintrag mit nachfolgendem Kommandoaufruf auf die anderen kopieren: [root@fedora10 /]# edquota –p albert –u martha,oliver,louis,lukas
Der Schalter -p steht für Prototype. Die Einstellungen für den User Albert werden also als Vorlage für die anderen, kommaseparierten Benutzer angewendet. Anzeige des aktuellen Status mit quota Jeder Benutzer kann mithilfe des Kommandos quota Auskunft über die ihn betreffenden Quotierungen erhalten. Der User root kann sich mit der Option –u auch die Einstellungen anderer User anzeigen lassen. Sie sehen die Ausgabe des Kommandos quota für einen Benutzer, der sein Kontingent mit sechs sehr großen Dateien offensichtlich überschritten hat: [harald@fedora10 dateien]$ quota Disk quotas for user harald (uid 500): Filesystem blocks quota limit grace files /dev/sdb1 7000* 5000 7000 6days 6
quota 0
limit 0
grace
Wenn dieser Benutzer versucht, weitere Dateien auf diesem Dateisystem zu speichern, wird er eine Fehlermeldung erhalten, die so aussieht: [harald@fedora10 /]$ cp /home/harald/* -R /dateien/ cp: reguläre Datei "/dateien/zArchiv Ausgang" kann nicht angelegt werden: Der zugewiesene Plattenplatz (Quota) ist überschritten
Erstellen eines Berichts mit repquota Mit repquota können Sie einen Bericht erzeugen, der die konfigurierten Quotierungen und die aktuelle Belegung des Dateisystems darstellt. Der Bericht kann auf Basis der Benutzer oder Gruppen ausgelegt werden. Die verwendeten Parameter sind auch hier wieder a, u, g, und v. Als Argument wird das Dateisystem
187
1451.book Seite 188 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
oder der Einhängepunkt angegeben, für den der Bericht erstellt werden soll. Die folgenden beiden Kommandos erzielen also dasselbe Ergebnis: [root@fedora10 /]# repquota -avug /dev/sdb1 [root@fedora10 /]# repquota -avug /dateien
Das Kommando erzeugt eine umfangreiche Tabelle, die hier nicht abgedruckt werden soll. Machen Sie sich mit dem Kommando bitte auf Ihrem eigenen Computer vertraut. Prüfungstipp Im Hinblick auf die Prüfung ist es sehr erfreulich, dass die Kommandos, die mit Quota in Zusammenhang stehen, jeweils ähnliche Optionen verstehen. Doch Vorsicht: Es gibt auch Stolpersteine! Sie müssen genau wissen, in welchen Kommandos, Optionen oder Dateien die Worte user und group auf usr und grp gekürzt werden und in welchen nicht.
104.5 Dateizugriffsrechte und -eigentümerschaft verwalten Wichtung: 3 Beschreibung: Kandidaten sollten in der Lage sein, Dateizugriffe durch angemessenen Einsatz von Rechten und Eigentümerschaft zu steuern. Wichtigste Wissensgebiete: 왘
Zugriffsrechte für reguläre und besondere Dateien sowie Verzeichnisse verwalten
왘
Zugriffsmodi wie SUID, SGID und das Sticky Bit verwenden, um die Sicherheit aufrechtzuerhalten
왘
wissen, wie man die umask ändert
왘
das Gruppen-Feld verwenden, um Gruppenmitgliedern Dateizugriff einzuräumen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
chmod
왘
umask
왘
chown
왘
chgrp
188
1451.book Seite 189 Dienstag, 7. Juli 2009 2:18 14
104.5 Dateizugriffsrechte und -eigentümerschaft verwalten
Allgemeines Die Zugriffsrechte auf Dateien und Verzeichnisse werden unter Linux durch eine binäre Zeichenkette mit einer Gesamtlänge von 12 Bit definiert. Üblicherweise wird diese Zeichenkette entweder in Oktalschreibweise oder symbolisch dargestellt. Wenn die Oktalschreibweise verwendet wird, fasst man immer je drei der 12 Bit zu einer Gruppe zusammen. Die Symbolschreibweise bezeichnet die Rechte read (r), write (w) und execute (x). Sie müssen die Überführung der drei Systeme zueinander beherrschen: read (r) => 100 => 4 write (w) => 010 => 2 execute (x) => 001 => 1
Die Rechte werden bei der Vergabe entweder durch die symbolische Schreibweise angegeben oder durch Addition der Oktalwerte. So entspricht Lese- und Schreibrecht 4 + 2, also 6. Lesen und Ausführen wäre 4 + 1, also 5 usw.
Vergabe der Berechtigungen Zur Vergabe von Berechtigungen im Dateisystem wird das Kommando chmod verwendet. Sie können hierbei sowohl die Oktalschreibweise als auch die Symbolschreibweise für die Berechtigungen verwenden. Zur Vereinfachung werden bei den Erläuterungen in diesem Abschnitt die ersten drei der 12 Bit für Berechtigungen nicht berücksichtigt. Die verbleibenden 9 Bit legen in Dreiergruppen jeweils die Berechtigungen für den Besitzer der Datei, die Besitzergruppe und zuletzt alle anderen (others) fest. Beispiel: [root@fedora10 files]# ls -l insgesamt 8 -rw-r--r-- 1 root root 40 3. Jan 11:15 adressen
Die erste Spalte der Ausgabe (-) zeigt lediglich an, dass es sich hier um eine Datei handelt. Bei einem Verzeichnis stünde hier ein d. Die erste Gruppe ist rw, ergibt also read und write für den Besitzer. Der Bindestrich besagt, dass das execute-Recht (x) nicht vergeben wurde. Die zweite Gruppe r-- besagt, dass die Besitzergruppe lediglich Leserechte an der Datei hat. Die letzte Gruppe, die wieder mit r-- konfiguriert ist, legt dieselben Rechte für alle anderen (others) fest. Eine solche Datei wird als world-readable bezeichnet. Datei- und Verzeichnisberechtigungen ändern Sie mit dem Kommando chmod. Sie können hierbei sowohl die Oktal- als auch die Symbolschreibweise verwenden. Bei Verwendung der Oktalschreibweise verwenden Sie einfach die Werte, die Sie für die Berechtigungen errechnet haben. Beispiel:
189
1451.book Seite 190 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
[root@fedora10 files]# chmod 755 script-x
In diesem Fall erhält der Besitzer der Datei Lese-, Schreib- und Ausführungsrechte an der Datei script-x. Alle anderen erhalten lediglich das Recht, dieses Skript zu lesen und auszuführen. Sie können chmod, wie viele andere Programme auch, rekursiv verwenden. Dazu verwenden Sie die Option -R. Damit das Ergebnis des Kommandos angezeigt wird, können Sie die Optionen -v oder -c verwenden. Während -v in altbekannter Weise alle Aktivitäten dokumentiert, zeigt -c (change) nur tatsächlich geänderte Dateien an. Damit alle Skripte im Verzeichnis /files dieselben Berechtigungen erhalten wie im vorangegangenen Beispiel das Skript script-x, verwenden Sie folgendes Kommando: [root@fedora10 /]# chmod -Rv 755 /files Modus von "/files/script2" als 0755 (rwxr-xr-x) erhalten Modus von "/files/script3" nach 0755 (rwxr-xr-x) geändert Modus von "/files/script4" nach 0755 (rwxr-xr-x) geändert Modus von "/files/script5" nach 0755 (rwxr-xr-x) geändert
Bei Verwendung der Symbolschreibweise stehen Ihnen zusätzlich andere Möglichkeiten zur Verfügung. Sie können bei Symbolschreibweise nämlich nicht nur absolute Werte für die Berechtigungen angeben, sondern auch Rechte hinzufügen oder abziehen. Zu diesem Zweck wird jeweils entweder ein Plus- oder ein Minuszeichen verwendet. Wenn Sie Rechte vergeben wollen, die dem Modus 755 entsprechen, können Sie z.B. folgendes Kommando verwenden: [root@fedora10 files]# chmod u=rwx,g=rx,o=rx script-x
Die Berechtigungen werden durch Kommata getrennt; zusätzliche Leerzeichen sind nicht erlaubt. Das u (user) steht für den Besitzer der Datei, g (group) für die Besitzergruppe und o (others) für den Rest der Welt. Es gibt zusätzlich die Möglichkeit, ein a (all) zu verwenden, wenn für alle Benutzer dieselben Berechtigungen gelten sollen. Wenn das oben genannte Skript vor versehentlichen Modifikationen durch den Besitzer geschützt werden soll, reicht es aus, wenn alle die Berechtigungen Lesen und Ausführen für das Skript erhalten. Das kann durch folgendes Kommando erreicht werden: [root@fedora10 files]# chmod a=rx script-x
Wenn Sie ein neues Skript erstellen, erhält es normalerweise aufgrund der umask (umask wird auf den nächsten Seiten noch behandelt) die Berechtigungen 644. Damit das Skript ausgeführt werden kann, müssen noch Ausführungsberechtigungen vergeben werden. Von den Standardberechtigungen ausgehend, stehen dafür verschiedene Kommandos zur Verfügung. Die folgenden Kommandos haben alle zur Folge, dass besagtes Skript durch jeden ausgeführt werden kann. Versuchen Sie nochmals, jedes der Kommandos genau zu verstehen:
190
1451.book Seite 191 Dienstag, 7. Juli 2009 2:18 14
104.5 Dateizugriffsrechte und -eigentümerschaft verwalten
[root@fedora10 [root@fedora10 [root@fedora10 [root@fedora10
files]# files]# files]# files]#
chmod chmod chmod chmod
755 neues-script u=rwx,g=rx,o=rx neues-script a+x neues-script u+x,g+x,o+x neues-script
Die letzten beiden Kommandos haben also keine absoluten Berechtigungen erteilt, sondern die Ausführungsberechtigungen jeweils hinzugefügt. Genauso können Berechtigungen aber auch subtrahiert werden. Verwenden Sie dazu einfach ein Minuszeichen, wie im folgenden Beispiel gezeigt wird: [root@fedora10 files]# chmod u-rwx,o-rwx /geheimverzeichnis -R
Mit diesem Kommando wurden allen Benutzern, außer dem Besitzer, sämtliche Rechte an dem Verzeichnis /geheimverzeichnis und an allen darin enthaltenen Unterverzeichnissen (-R sorgt für rekursive Befehlsausführung) und Dateien entzogen.
Verwendung von SUID, SGID und Sticky Bit Bisher wurden die ersten drei der 12 Bit, die die Zugriffe steuern, vernachlässigt. Diese repräsentieren das SUID, das SGID und das Sticky Bit. Die Verwendung dieser Bits bewirkt Folgendes: SUID bzw. Setuid Auf eine ausführbare Binärdatei angewendet, bewirkt dieses Bit, dass ein Programm immer im Sicherheitskontext des Besitzers dieses Programms ausgeführt wird. Ein klassisches Beispiel hierfür ist passwd. Mit diesem Programm kann ein Benutzer sein eigenes Passwort ändern. Dazu benötigt er theoretisch gesehen Schreibrechte auf die Datei /etc/shadow. Tatsächlich kann aber nur der root schreibend auf diese Datei zugreifen. Da das Programm passwd über ein gesetztes SUID-Bit verfügt, gehört der resultierende Prozess bei der Ausführung des Programms (egal, durch wen) dem User root. Deshalb wird dem Prozess der Schreibzugriff gewährt, und das Kennwort kann geändert werden. Sie erkennen ein gesetztes SUID-Bit daran, dass bei den Symbolen für die Ausführungsberechtigungen einer Datei für deren Besitzer ein s gesetzt ist: [root@fedora10 /]# ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 25604 5. Apr 2007
/usr/bin/passwd
Da Programme, die mit einem SUID-Bit bestückt sind, mit root-Rechten ausgeführt werden, stellen diese ein Sicherheitsrisiko dar. Es macht deshalb Sinn, ein Produktivsystem hin und wieder nach solchen Dateien zu durchsuchen. Diese Aufgabe können Sie leicht mit find durchführen:
191
1451.book Seite 192 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
[root@fedora10 /]# find / -perm -u+s
Das SUID-Bit hat zumindest unter Linux keine Auswirkung auf Verzeichnisse und Skripte. SGID oder Setgid Das SGID hat auf ausführbare Dateien einen ähnlichen Einfluss wie das SUID-Bit. Der Prozess, der beim Ausführen einer Datei mit gesetztem Setgid-Bit entsteht, gehört der Gruppe, die auch die Eigentumsrechte an der Datei besitzt. Ein klassischer Vertreter für solche Programme ist sendmail: [root@fedora10 /]# ls -l /usr/sbin/sendmail -r-xr-sr-x 1 root mail 676688 Aug 30 2006 /usr/sbin/sendmail
Sie erkennen das gesetzte Setgid-Bit am kleinen s bei den Ausführungsberechtigungen der Besitzergruppe. Wenn das SGID-Bit auf ein Verzeichnis angewendet wird, dann werden alle Dateien, die in diesem Verzeichnis neu erstellt werden, automatisch der Gruppe zugeordnet, der auch das Verzeichnis selbst gehört. Das ist sehr praktisch bei der Verwendung von Arbeitsgruppenverzeichnissen. Sticky Bit Auch das Sticky Bit wird gern für Arbeitsgruppen verwendet. Wenn Sie es auf ein Verzeichnis anwenden, kann nur noch der Besitzer einer Datei, der Besitzer des Verzeichnisses oder root eine Datei löschen bzw. umbenennen, die sich in diesem Verzeichnis befindet. Sie erkennen das Sticky Bit am kleinen t an der Position für die Ausführungsberechtigung von others. drwxr-xr-t
2 root root
4096 Oct 19 18:42 public
Auf Dateien angewendet, hat das Sticky Bit unter Linux keinen Einfluss. Setzen der speziellen Berechtigungen Die drei speziellen Bits werden ebenfalls mit dem Kommando chmod gesetzt. Wenn Sie diese Bits von vornherein einplanen, können Sie diese direkt bei der normalen Vergabe von Dateirechten mit übergeben. Soll etwa ein Skript durch jeden als root ausführbar sein, dann können Sie folgendes Kommando verwenden. archangel:/tools # chmod 4755 killerprogramm
Sie erkennen das gesetzte SUID-Bit wieder am kleinen s: -rwsr-xr-x
192
1 root root 10060 Jan
3 17:00 killerprogramm*
1451.book Seite 193 Dienstag, 7. Juli 2009 2:18 14
104.5 Dateizugriffsrechte und -eigentümerschaft verwalten
Sie können das SUID-Bit auch nachträglich hinzufügen, indem Sie es mit dem Plus-Operator übergeben: archangel:/tools # chmod u+s killerprogramm
Wenn Sie einem Verzeichnis das Sticky Bit nachträglich hinzufügen wollen, können Sie dieses Kommando verwenden: archangel:/tools # chmod o+t /worgroup
Bei der Interpretation der Ausgabe des ls-Kommandos ist in Bezug auf spezielle Mode Bits Folgendes zu beachten: Alle speziellen Mode Bits werden auf den korrespondierenden Ausführungsberechtigungen platziert. Deshalb wird die jeweilige Ausführungsberechtigung »verdeckt«. Ob es sich jeweils auch um eine ausführbare Datei handelt, erkennen Sie daran, ob das spezielle Bit mit einem Kleinbuchstaben oder mit einem Großbuchstaben dargestellt wird: 왘
-rwsr-xr-x –
Das SUID-Bit ist gesetzt. Die Datei ist für den Besitzer ausführbar.
왘
-rwSr--r-- –
Das SUID-Bit ist gesetzt. Die Datei ist für den Besitzer nicht ausführbar.
왘
-rwxr-sr-x –
Das SGID-Bit ist gesetzt. Die Datei ist für die Besitzergruppe ausführbar.
왘
-rwxr-Sr-- –
Das SGID-Bit ist gesetzt. Die Datei ist für die Besitzergruppe nicht ausführbar.
왘
-rwsr-xr-t –
Das Sticky Bit ist gesetzt. Die Datei ist für alle ausführbar.
왘
-rwsr-xr-T –
Das Sticky Bit ist gesetzt. Die Datei ist nicht für alle ausführbar.
chown Das Kürzel chown steht für change owner. Ursprünglich wurde das Programm primär dazu eingesetzt, um den Besitzer einer Datei oder eines Verzeichnisses zu ändern. Inzwischen können Sie aber auch die Eigentümergruppe von Dateien und Verzeichnissen mit chown ändern. Sie sollten für die Prüfung unbedingt wissen, wie diese Aufgaben jeweils einzeln oder gleichzeitig mittels chown durchgeführt werden. Die folgenden Beispiele zeigen, eng an die Prüfungssituation angelehnt, wie Sie mit chown arbeiten. Mit den ersten beiden Kommandozeilen werden sowohl der Besitzer als auch die Besitzergruppe für alle Dateien im aktuellen Verzeichnis jeweils auf root gesetzt: archangel:/tools # chown root.root * archangel:/tools # chown root:root *
193
1451.book Seite 194 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Beachten Sie, dass sowohl ein Punkt als auch ein Doppelpunkt als Trennzeichen eingesetzt werden kann. Wenn nur der Besitzer für ein Verzeichnis geändert werden soll, dieser dafür aber rekursiv, geben Sie z.B. folgendes Kommando ein: archangel:/ # chown hans /home/hans -R
Außerdem können Sie mit chmod auch nur die Besitzergruppe ändern. Hierzu stehen wieder zwei Varianten mit unterschiedlichen Trennzeichen zur Verfügung: archangel:/ # chown :users /home -R archangel:/ # chown .users /home -R
Für die Praxis sind Sie mit diesem Kommando in Bezug auf die Dateieigentümerschaft bestens ausgerüstet. Für die Prüfung müssen Sie zusätzlich das Programm chgrp kennen.
chgrp Mit chgrp (change group) ändern Sie die Besitzergruppe für Dateien und Verzeichnisse. Sie können diese Tätigkeit auch mit chown durchführen, wie bereits beschrieben. Im folgenden Beispiel wird die Besitzergruppe für die Datei file1 auf users gesetzt: archangel:/testfiles # chgrp users file1
Genau wie chown kann chgrp auch rekursiv eingesetzt werden. Die folgende Befehlszeile setzt die Besitzergruppe für das Verzeichnis /home und alle darin enthaltenen Verzeichnisse und Dateien auf users: archangel:/ # chgrp -R users /home
Prüfungstipp Für die Prüfung sollten Sie mit der Verwendung von chown und chgrp vertraut sein. Insbesondere die Verwendung von chown zur Änderung von Besitzergruppen ist in diesem Zusammenhang wichtig.
Verwendung von umask Die umask legt fest, welche Berechtigungen für eine neu erstellte Datei oder ein Verzeichnis per Voreinstellung vergeben werden. Üblicherweise wird der Wert für umask in der Datei /etc/profile festgelegt. Soll für einen einzelnen Benutzer ein anderer Wert gelten, konfigurieren Sie diesen in der Datei .bash_profile im Heimatverzeichnis des betreffenden Benutzers. Sie können diese Einstellung aber jederzeit mit dem Kommando umask überprüfen bzw. ändern. Die Berechnung der zu vergebenden Berechtigungen ist für Dateien und Verzeichnisse verschie-
194
1451.book Seite 195 Dienstag, 7. Juli 2009 2:18 14
104.5 Dateizugriffsrechte und -eigentümerschaft verwalten
den. Beim Erstellen einer neuen Datei wird die umask von 0666 subtrahiert, während beim Erstellen neuer Verzeichnisse die umask von 0777 abgezogen wird. Bei den meisten Systemen ist der Wert für umask 0022. Sie können das durch einfache Eingabe des Kommandos umask ohne Optionen überprüfen: [root@fedora10 ~]# umask 0022
Eine neu erstellte Datei würde somit die Berechtigung 0666–0022, also 0644 erhalten. Das bedeutet, dass der Besitzer der Datei Lese- und Schreibrechte bekommt. Alle anderen erhalten lediglich Leserecht. Es folgt die Aufstellung in Oktal-, Binär- und Symbolschreibweise: 0644 => 000 110 100 100 => rw- r-- r--
Wenn ein Verzeichnis neu erstellt wird, ergibt sich 0777–0022, also 0755. In Bezug auf ein Verzeichnis bedeutet Ausführen, dass in dieses Verzeichnis gewechselt werden darf. Der Besitzer darf also lesen, schreiben und in das Verzeichnis wechseln. Alle anderen dürfen nur lesen und in das Verzeichnis wechseln. Oktal, binär oder in Symbolschreibweise würde das folgendermaßen ausgedrückt werden: 0755 => 000 111 101 101 => rwx r-x r-x
Manche Administratoren sichern ihr System ab, indem sie den Wert für umask auf 0027 setzen. Damit wird bewirkt, dass sowohl bei der Erstellung von Dateien als auch von Verzeichnissen keine Berechtigungen für others erteilt werden. Selbst Leserechte müssen dann für others bewusst und ausdrücklich vergeben werden. Sie ändern umask einfach durch Eingabe des Kommandos, gefolgt von dem gewünschten Wert. Führende Nullen können weggelassen werden. Die folgenden Kommandos haben demzufolge denselben Effekt: [root@fedora10 ~]# umask 0027 [root@fedora10 ~]# umask 27
Sie können die umask auch in Symbolschreibweise verwenden. Die folgende Zeile zeigt, dass auch diese Schreibweise genau denselben Effekt bewirkt: [root@fedora10 ~]# umask
u=rwx,g=rx,o=
Prüfungstipp Merken Sie sich für die Prüfung, wie die aus der umask resultierenden Berechtigungen für Dateien und Verzeichnisse aussehen.
195
1451.book Seite 196 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Dateiattribute der ext2-/ext3-Dateisysteme Für ext2- bzw. ext3-Dateisysteme gibt es noch einen Satz Attribute, den Sie verwenden können. Sie können diese Attribute mit dem Kommando lsattr anzeigen und mit chattr ändern. Das Programm chattr kann mit drei verschiedenen Operatoren verwendet werden: 왘
+ fügt Attribute hinzu.
왘
- entfernt Attribute.
왘
= weist Attribute zu. Bestehende andere Attribute werden entfernt.
Sie können mit den Operatoren folgende Attribute zuweisen: 왘
append only (a) – Die Datei kann nur noch anhängend erweitert werden.
왘
compressed (c) – Die Datei wird durch den Kernel komprimiert.
왘
no dump (d) – Die Datei wird durch dump nicht gesichert.
왘
immutable (i) – Die Datei kann nicht modifiziert, umbenannt oder gelöscht
werden. 왘
data journalling (j) – Die Daten werden in das ext3-Journal geschrieben, bevor die eigentliche Datei ins Dateisystem geschrieben wird.
왘
secure deletion (s) – Wenn diese Datei gelöscht wird, wird der Datenbe-
reich mit Nullen überschrieben. 왘
no tail-merging (t) – Wird noch nicht unterstützt.
왘
undeletable (u) – Die Datei kann zwar gelöscht, im Zweifelsfall aber auch problemlos wiederhergestellt werden.
왘
no atime updates (A) – Die Zugriffszeit wird nicht aktualisiert. Das soll die Anzahl unnötiger Schreibzugriffe (insbesondere für Notebooks) auf das Dateisystem minimieren.
왘
synchronous directory updates (D) – Verzeichnisänderungen werden syn-
chron auf die Festplatte geschrieben. 왘
synchronous updates (S) – Dateiänderungen werden synchron auf die Fest-
platte geschrieben. 왘
top of directory hierarchy (T) – Ein Verzeichnis mit diesem Attribut wird
als Top der Verzeichnishierarchie erachtet. Beispiel: Die Dateien adressen, kunden und händler sollen nicht modifizierbar, sondern lediglich erweiterbar sein. Um Schreibzugriffe auf die Festplatte zu minimieren, sollten Zugriffe nicht in der atime dokumentiert werden. Aus Sicherheitsgründen sollten geänderte Daten sofort (synchron) auf die Festplatte ge-
196
1451.book Seite 197 Dienstag, 7. Juli 2009 2:18 14
104.6 Harte und symbolische Links anlegen und ändern
schrieben werden. Die gewünschten Änderungen werden anschließend mit lsattr angezeigt: [root@fedora10 [root@fedora10 --S--a-A-------S--a-A-------S--a-A------
files]# chattr =aAS adressen händler kunden files]# lsattr ./händler ./kunden ./adressen
Den Dateien sollte nachträglich das Attribut u hinzugefügt werden. Das Ergebnis wird während der Programmausführung mit -V geprüft: [root@fedora10 files]# chattr -V +u adressen händler kunden chattr 1.40.2 (12-Jul-2007) Flags von adressen wie folgt gesetzt: -uS--a-A-----Flags von händler wie folgt gesetzt: -uS--a-A-----Flags von kunden wie folgt gesetzt: -uS--a-A------
Das Kommando chattr kann, wie viele andere Programme auch, mit -R rekursiv aufgerufen werden. Prüfungsfragen zu diesem Thema sind bisher eher selten gestellt worden.
104.6 Harte und symbolische Links anlegen und ändern Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, harte und symbolische Links auf eine Datei anzulegen und zu verwalten. Wichtigste Wissensgebiete: 왘
Links anlegen
왘
harte und/oder symbolische Links identifizieren
왘
Dateien kopieren vs. verlinken
왘
Links verwenden, um Systemadministrationsaufgaben zu unterstützen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
ln
Allgemeines Wenn es ermöglicht werden soll, auf eine Datei von verschiedenen Verzeichnissen aus zuzugreifen, können Sie auf diese Datei einen Link legen, anstatt die Datei
197
1451.book Seite 198 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
in die verschiedenen Verzeichnisse zu kopieren. Das hat im Wesentlichen zwei Vorteile: Einerseits sparen Links Platz auf dem Datenträger; weil eine Datei nicht mehrfach vorhanden sein muss, soll diese über mehr als einen Pfad bereitgestellt werden können. Andererseits wird die Administration vereinfacht, weil man nicht mehrere Versionen einer Datei pflegen muss. Wenn eine Datei über einen beliebigen Link modifiziert wird, gelten die Änderungen für alle Instanzen dieser Datei.
Softlinks Softlinks werden auch als symbolische Links bezeichnet. Ein Softlink ist im Prinzip ein Zeiger, der auf eine Datei zeigt. Er belegt nur wenig Speicherplatz auf dem Datenträger, auf dem er angelegt wurde. Die Besonderheiten eines Softlinks sind: 왘
Er kann sowohl auf Dateien als auch auf Verzeichnisse verweisen.
왘
Er kann auf Dateien und Verzeichnisse einer anderen oder derselben Partition angewendet werden, auf der er sich selbst befindet.
왘
Er verwendet die Dateiberechtigungen der Zieldatei und ist deshalb immer mit Lese-, Schreib- und Ausführungsrechten versehen.
왘
Ein Softlink bleibt bestehen, wenn die Zieldatei gelöscht wird. Man bezeichnet einen solchen verwaisten Link auch als gebrochenen Link.
Die folgenden kommentierten Kommandos demonstrieren das Verhalten von Softlinks. Das erste Kommando ln -s erzeugt einen Softlink mit der Bezeichnung softlink, der auf die existierende Datei file1 verweist. Mit dem zweiten Kommando wird das Ergebnis der Aktion überprüft: archangel:/testfiles # ln -s file1 softlink archangel:/testfiles # ls -l total 44 drwxr-xr-x 2 root root 4096 Jan 2 18:00 . drwxr-xr-x 24 root root 4096 Jan 2 17:55 .. -rw-r--r-1 root root 35184 Jan 2 17:55 file1 lrwxrwxrwx 1 root root 5 Jan 2 18:00 softlink -> file1
Die erste Spalte der letzten Zeile des Kommandos ls -l zeigt an, dass es sich um einen Link handelt. Beachten Sie bitte auch, dass in der Zugriffssteuerungsliste alle Rechte gesetzt sind. Wenn Sie nun den Modus dieses Links verändern, ändert sich stattdessen der Modus der Zieldatei: archangel:/testfiles # chmod a+w softlink archangel:/testfiles # ls -l total 44 drwxr-xr-x 2 root root 4096 Jan 2 18:00 .
198
1451.book Seite 199 Dienstag, 7. Juli 2009 2:18 14
104.6 Harte und symbolische Links anlegen und ändern
drwxr-xr-x -rw-rw-rwlrwxrwxrwx
24 root root 4096 Jan 1 root root 35184 Jan 1 root root 5 Jan
2 17:55 .. 2 17:55 file1 2 18:00 softlink -> file1
Das erste Kommando fügt zu softlink Schreibrechte für alle hinzu. Diese Rechte werden aber stattdessen der Datei file1 hinzugefügt, wie Sie sehen. Es gibt mehrere Methoden, sich die Auswirkungen von Links anzusehen. Mit dem Kommando ls -li kann z.B. nachgewiesen werden, dass die Zieldatei und der Softlink zwei verschiedene Inodes verwenden: archangel:/testfiles # ls -li total 44 1896834 drwxr-xr-x 2 root root 4096 Jan 2 drwxr-xr-x 24 root root 4096 Jan 1896921 -rw-rw-rw- 1 root root 35184 Jan 1896920 lrwxrwxrwx 1 root root 5 Jan
2 2 2 2
18:00 17:55 17:55 18:00
. .. file1 softlink -> file1
Die Datei file1 verwendet den Inode 1896921, während der Softlink softlink den Inode 1896920 belegt. Mit dem Kommando stat kann Ähnliches nachgewiesen werden: archangel:/testfiles # stat softlink File: `softlink' -> `file1' Size: 5 Blocks: 0 IO Block: 4096 symbolic link Device: 302h/770d Inode: 1896920 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-01-02 18:26:45.000000000 +0100 Modify: 2008-01-02 18:00:07.000000000 +0100 Change: 2008-01-02 18:00:07.000000000 +0100
In der zweiten Zeile der Kommandoausgabe wird angezeigt, dass es sich um einen symbolischen Link handelt. Die Zugriffsrechte sind auch noch einmal deutlich dargestellt. Wenden Sie dasselbe Kommando auf die Zieldatei des Links an, ergibt sich folgendes Bild: archangel:/testfiles # stat file1 File: `file1' Size: 35184 Blocks: 72 IO Block: 4096 regular file Device: 302h/770d Inode: 1896921 Links: 1 Access: (0666/-rw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-01-02 17:55:38.000000000 +0100 Modify: 2008-01-02 17:55:38.000000000 +0100 Change: 2008-01-02 18:01:03.000000000 +0100
199
1451.book Seite 200 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Die zweite Zeile besagt, dass es sich um eine gewöhnliche Datei handelt. Auch hier sieht man deutlich, dass die Zieldatei und der Softlink zwei verschiedene Inodes verwenden. Mit den nächsten Kommandos wird demonstriert, was geschieht, wenn Sie die Zieldatei eines symbolischen Links löschen, den Link selbst aber nicht: archangel:/testfiles # rm file1
Die Zieldatei ist nun gelöscht: archangel:/testfiles # ls -l total 8 drwxr-xr-x 2 root root 4096 Jan drwxr-xr-x 24 root root 4096 Jan lrwxrwxrwx 1 root root 5 Jan
2 18:40 . 2 17:55 .. 2 18:00 softlink -> file1
Der Softlink ist bestehen geblieben, wie Sie sehen. Wenn Sie nun versuchen, über diesen Link auf die nicht mehr existierende Datei zuzugreifen, erhalten Sie jedoch eine Fehlermeldung: archangel:/testfiles # cat softlink cat: softlink: No such file or directory
Ein typisches Beispiel für die praktische Verwendung von Softlinks sind die Verlinkungen der init-Skripte, die beim Systemstart abgearbeitet werden. Die genaue Funktionsweise dieser Links wurde bereits im Abschnitt 101.2 »Das System starten«, behandelt. Sie sehen hier einen Teil der Links, die zum Runlevel 3 eines Systems gehören: archangel:/etc/rc.d/rc3.d # ls -l total 8 drwxr-xr-x 2 root root 4096 Oct 19 21:53 drwxr-xr-x 11 root root 4096 Dec 19 11:04 lrwxrwxrwx 1 root root 7 Jul 20 2005 lrwxrwxrwx 1 root root 8 Jul 20 2005 lrwxrwxrwx 1 root root 6 Jul 20 2005 lrwxrwxrwx 1 root root 8 Jul 20 2005 ... weitere Zeilen wurden entfernt ...
./ ../ K03cron -> ../cron* K03smbfs -> ../smbfs* K05smb -> ../smb* K05squid -> ../squid*
Hardlinks Bei einem Hardlink handelt es sich eigentlich nur um einen weiteren Verzeichniseintrag für eine existierende Datei. Demzufolge belegt er auch keinen eigenen Inode und fast gar keinen Speicherplatz im Dateisystem. Daraus ergeben sich völlig andere Eigenschaften im Vergleich zu einem symbolischen Link:
200
1451.book Seite 201 Dienstag, 7. Juli 2009 2:18 14
104.6 Harte und symbolische Links anlegen und ändern
왘
Hardlinks können nicht auf Verzeichnisse angewendet werden, sondern nur auf Dateien.
왘
Hardlinks können nicht partitionsübergreifend eingesetzt werden.
왘
Es gibt keine verwaisten bzw. gebrochenen Hardlinks. Eine Datei wird gelöscht, wenn der letzte Hardlink zu dieser Datei gelöscht wird.
왘
Die Zieldatei und der Hardlink verwenden eine gemeinsame Zugriffssteuerungsliste (ACL).
왘
Ein Hardlink ist im Nachhinein nicht mehr von seiner Zieldatei zu unterscheiden.
Wenn Sie das Kommando ln ohne Optionen verwenden, wird ein Hardlink erstellt. Die folgenden Kommandos demonstrieren die Eigenarten von Hardlinks. Zunächst werden zwei Hardlinks zu einer bestehenden Datei erstellt. Das Kommando ls -l zeigt das Ergebnis der Aktion: archangel:/testfiles # ln file1 hardlink1 archangel:/testfiles # ln file1 hardlink2 archangel:/testfiles # ls -l total 80 drwxr-xr-x 2 root root 4096 Jan 2 19:21 drwxr-xr-x 24 root root 4096 Jan 2 17:55 -rw-r--r-3 root root 22271 Jan 2 19:21 -rw-r--r-3 root root 22271 Jan 2 19:21 -rw-r--r-3 root root 22271 Jan 2 19:21
. .. file1 hardlink1 hardlink2
Die drei Dateien sind offensichtlich gleich groß und verfügen auch sonst über dieselben Eigenschaften. Mit ls -li soll festgestellt werden, welche Inodes die Dateien jeweils belegen: archangel:/testfiles # total 80 1896834 drwxr-xr-x 2 2 drwxr-xr-x 24 1896921 -rw-r--r-3 1896921 -rw-r--r-3 1896921 -rw-r--r-3
ls -li root root root root root
root 4096 Jan root 4096 Jan root 22271 Jan root 22271 Jan root 22271 Jan
2 2 2 2 2
19:21 17:55 19:21 19:21 19:21
. .. file1 hardlink1 hardlink2
Alle drei Dateien verwenden ein und denselben Inode. Wenn Sie das Kommando stat auf eine der drei Dateien anwenden, sehen Sie zwei interessante Details. Erstens werden die Hardlinks als reguläre Dateien erkannt, und zweitens erkennt das Programm drei Links. Es wird also auch die ursprüngliche Datei als Link dargestellt:
201
1451.book Seite 202 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
archangel:/testfiles # stat hardlink1 File: `hardlink1' Size: 22271 Blocks: 48 IO Block: 4096 regular file Device: 302h/770d Inode: 1896921 Links: 3 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-01-02 19:21:30.000000000 +0100 Modify: 2008-01-02 19:21:30.000000000 +0100 Change: 2008-01-02 19:21:46.000000000 +0100
Prüfungstipp Sie müssen in der Prüfung die Verwendungszwecke und Eigenschaften von Hardlinks und Softlinks kennen. Das Kommando stat war hier zwar nur ein Mittel zum Zweck, sollte aber ebenfalls für die Prüfung bekannt sein.
104.7 Systemdateien finden und Dateien am richtigen Ort platzieren Wichtung: 2 Beschreibung: Kandidaten sollten mit dem Filesystem Hierarchy Standard (FHS) vertraut sein und typische Dateiorte und Verzeichnisklassifizierungen kennen. Wichtigste Wissensgebiete: 왘
die korrekten Orte von Dateien unter dem FHS kennen
왘
Dateien und Kommandos auf einem Linux-System finden
왘
den Ort und den Zweck wichtiger Dateien und Verzeichnisse gemäß dem FHS kennen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
find
왘
locate
왘
updatedb
왘
whereis
왘
which
왘
type
왘
/etc/updatedb.conf
202
1451.book Seite 203 Dienstag, 7. Juli 2009 2:18 14
104.7 Systemdateien finden und Dateien am richtigen Ort platzieren
Allgemeines Um den Umgang mit Unix-Betriebssystemen zu vereinfachen, wird der Aufbau der Verzeichnisstruktur durch den FHS (Filesystem Hierarchy Standard) vereinheitlicht. Hierbei handelt es sich lediglich um eine Referenz, die aber von vielen UnixHerstellern und auch Linux-Distributoren verwendet wird. Ähnliches gilt für die wichtigsten Werkzeuge, die zum Auffinden von Dateien auf einem System eingesetzt werden können. Sie sind praktisch auf jedem Unix- oder Linux-Computer zu finden. Deshalb ist es einem versierten Linux-Administrator jederzeit möglich, sich schnell in ein fremdes Unix- oder Linux-System einzuarbeiten.
FHS – Filesystem Hierarchy Standard Der FHS definiert eine Mindestvoraussetzung, welche Verzeichnisse und auch welche Dateien auf einem System vorhanden sein müssen. Für Linux gibt es innerhalb dieses Standards eine zusätzliche Sektion, die Verzeichnisse enthält, die auf gewöhnlichen Unix-Systemen nicht zu finden sind. Der Filesystem Hierarchy Standard wird benötigt, damit Unix-Programme leichter zwischen unterschiedlichen Unix-Versionen portierbar sind. Ein Programm findet durch diese Standardisierung immer bestimmte Verzeichnisse, Librarys und auch einige Tools in denselben Pfaden wieder. Auch für den Anwender ist es natürlich angenehm, immer in einer gewohnten Umgebung von Verzeichnissen zu arbeiten. Um eine erste Einteilung zu erreichen, werden Daten nach gegensätzlichen Kategorien eingestuft: 왘
shareable sind Verzeichnisse, die von mehreren Systemen gemeinsam genutzt werden können. Das wären z.B. die Verzeichnisse /usr und /opt.
왘
unshareable sind Verzeichnisse, die keinesfalls gemeinsam genutzt werden können (z.B. /etc und /boot).
왘
variable sind Verzeichnisse, deren Datenbestand sich ständig ändert (z.B. /home und /var/mail).
왘
static sind Verzeichnisse, wie /boot, /opt und /usr, deren Dateien sich eher selten ändern.
Diese Unterteilung ist vor allem bei der Partitionierung hilfreich. Wenn Daten, die eher statischer Natur sind, auf einer gemeinsamen Partition abgelegt werden, dann brauchen Sie diese Partition nicht so oft zu sichern wie Partitionen, die eher variable Daten enthalten. Dateien, die von mehreren Computern gemeinsam genutzt werden können, sollten natürlich der übersichtlicheren Exportierbarkeit halber in denselben Unterverzeichnissen untergebracht sein. Nach FHS, Version
203
1451.book Seite 204 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
2.3, müssen zumindest die folgenden Verzeichnisse auf einem Unix-Rechner unterhalb von / untergebracht sein (Stand: 28. Januar 2004): 왘
/bin enthält grundlegende Programme, die sowohl für Anwender als auch für den root verfügbar sind.
왘
/boot enthält den statischen Teil des Kernels und den Bootloader.
왘
/dev enthält die Gerätedateien.
왘
/etc enthält host-spezifische Konfigurationsdateien.
왘
/lib enthält grundlegende Shared Librarys und Kernel-Module.
왘
/media enthält Mountpoints für Wechselmedien.
왘
/mnt ist der Mountpoint für temporär eingehängte Dateisysteme.
왘
/opt enthält Zusatzanwendungen und Softwarepakete.
왘
/sbin enthält grundlegende Systemprogramme.
왘
/srv enthält Daten, die von Diensten dieses Systems angeboten werden (z.B. www-root, ftp-root).
왘
/tmp enthält temporäre Dateien.
왘
/usr enthält die sekundäre Hierarchie.
왘
/var enthält variable Daten.
Für Linux sind zusätzlich folgende Pfade definiert: 왘
/dev/null – Daten, die auf diesem Gerät ausgegeben werden, werden verworfen.
왘
/dev/zero – Wenn von diesem Gerät gelesen wird, werden beliebig viele »0 Bit« generiert.
왘
/dev/tty – Dieses Gerät repräsentiert das Terminal, auf dem ein Prozess läuft.
왘
/proc – Das ist das Verzeichnis für Kernel- und Prozessinformationen.
왘
/sbin gibt es auch unter Unix, soll aber bei einem Linux-System zusätzlich Programme zur Verwaltung von ext2 enthalten (e2fsck, mke2fs, tune2fs usw.).
왘
/var/spool/cron enthält die variablen Daten für cron.
Auch wenn Ihnen diese Verzeichnisse besonders vertraut und wichtig erscheinen mögen: Sowohl /home als auch /root sind optionale Verzeichnisse. Der FHS enthält auch Richtlinien darüber, welche Dateien explizit in den jeweiligen Verzeichnissen vorhanden sein müssen. Für die Prüfung müssen Sie den FHS allerdings nur insoweit kennen, wie er hier beschrieben wurde.
204
1451.book Seite 205 Dienstag, 7. Juli 2009 2:18 14
104.7 Systemdateien finden und Dateien am richtigen Ort platzieren
Prüfungstipp In den Prüfungen werden häufig Fragen gestellt, die Sie vor die Entscheidung stellen werden, welche Dateisysteme Sie vorzugsweise sichern sollten und welche nicht. Es ist empfehlenswert, sich dazu ein paar Gedanken zu machen, während Sie die oben genannten Verzeichnisse und deren Verwendungszweck untersuchen. (Es macht beispielsweise wenig Sinn, /proc zu sichern, wenn die Sicherung von /home als sehr wichtig einzustufen ist.)
Programme zum Auffinden von Dateien Damit Sie sich auf einem Linux-System orientieren und Dateien schnell auffinden können, stehen Ihnen verschiedene Programme zur Verfügung. Die wichtigsten dieser Programme werden auf den folgenden Seiten beschrieben. whereis Das Kommando whereis (wo ist?) können Sie verwenden, wenn Sie Informationen über die Speicherorte eines Programms erfahren wollen. Das Programm zeigt Ihnen: 왘
den Pfad zu den ausführbaren Dateien
왘
den Pfad zu den Konfigurationsdateien des Programms (falls vorhanden)
왘
den Pfad zu den Manpages des Programms
왘
den Pfad zu den Quellen des Programms (falls vorhanden)
Beispiel: [root@fedora10 ~]# whereis samba samba: /etc/samba /usr/lib/samba /usr/share/samba
Auch das Kommando whereis versteht mehrere Optionen. Diese brauchen Sie zum Bestehen der Prüfung aber nicht zu kennen. which Wie Sie wissen, werden Programme, die sich in einem in der PATH-Variablen enthaltenen Verzeichnis befinden, ohne Angabe des Pfades gestartet. Problematisch wird das Ganze, wenn mehrere Programme mit dem gleichen Dateinamen auf einem System existieren. Es stellt sich dann die Frage, welches (which) der Programme überhaupt ausgeführt wird, wenn man nicht den kompletten Pfad mit angibt. Hierzu ein Beispiel:
205
1451.book Seite 206 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
Auf einem der Referenzsysteme befindet sich ein doppelt vorhandenes Skript. Die kompletten Pfade sind jeweils /usr/local/sbin/script1 und /sbin/script1. Beide Pfade sind in der PATH-Variablen des Systems enthalten: root@ubuntu-server:~# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/ games
Das Skript /usr/local/sbin/script1 würde in diesem Fall bevorzugt ausgeführt werden, weil der entsprechende Pfad ganz vorn in der PATH-Variablen steht. Damit Sie auch in dieser Situation herausbekommen können, welches Programm standardmäßig ohne Pfadangabe ausgeführt würde, können Sie das Programm which verwenden. Dieses zeigt nämlich den Pfad zur ersten gefundenen, ausführbaren Datei eines angegebenen Kommandos an: root@ubuntu-server:~# which script1 /usr/local/sbin/script1
Damit alle über die PATH-Variable erreichbaren Programme gleichen Namens angezeigt werden, können Sie die Option -a verwenden: root@ubuntu-server:~# which -a script1 /usr/local/sbin/script1 /sbin/script1
whatis, apropos Die Kommandos whatis und apropos sind eigentlich kein Bestandteil der Prüfung, werden aber gern als falsche Antwortalternativen mit eingestreut. 왘
whatis zeigt das Beschreibungsfeld einer Manpage an.
왘
apropos durchsucht die Namen und Beschreibungsfelder der Manpages nach
einem angegebenen Suchwort. find Das Programm find sucht, wie der Name schon vermuten lässt, nach Dateien und Verzeichnissen in einer Verzeichnishierarchie. Zur Suche können unterschiedliche Kriterien angesetzt werden. In den meisten Fällen wird aber wahrscheinlich nach einem Dateinamen gesucht. Hierbei können auch Wildcards verwendet werden. Ein * ersetzt z.B. beliebig viele Zeichen. Verwechseln Sie diesen Sachverhalt in der Prüfung bitte nicht mit den regulären Ausdrücken. Beispiel: Um eine Datei mit einer Auflistung aller OpenOffice.org-Textdateien zu erhalten, die Ihre Benutzer in Ihren Heimatverzeichnissen erstellt haben, geben Sie folgendes Kommando ein:
206
1451.book Seite 207 Dienstag, 7. Juli 2009 2:18 14
104.7 Systemdateien finden und Dateien am richtigen Ort platzieren
root@ubuntu-server:~# find /home -name ’*.sxw’ > Dokumentenliste
Es wird dann unterhalb des Verzeichnisses /home nach Dateien mit beliebigen Namen und der Dateierweiterung sxw gesucht. Das Ergebnis wird in der Datei mit der Bezeichnung Dokumentenliste gespeichert. Sie können mit find aber auch nach völlig anderen Kriterien suchen: 왘
-name sucht nach Dateinamen (wie gehabt).
왘
-amin n sucht nach Dateien, auf die vor n Minuten zugegriffen wurde.
왘
-mmin n sucht nach Dateien, die vor n Minuten modifiziert wurden.
왘
-cmin n sucht nach Dateien, die vor n Minuten geändert wurden (z.B. Datei-
name, Zugriffsrechte). 왘
-atime n sucht nach Dateien, auf die zuletzt vor n mal 24 Stunden zugegriffen
wurde. 왘
-mtime n sucht nach Dateien, die vor n mal 24 Stunden modifiziert wurden.
왘
-ctime n sucht nach Dateien, die vor n mal 24 Stunden geändert wurden (z.B.
Dateiname, Zugriffsrechte). 왘
-user sucht nach Dateien des angegebenen Benutzers.
왘
-group sucht nach Dateien der angegebenen Gruppe.
왘
-perm findet Dateien mit den angegebenen Berechtigungen.
왘
-size findet Dateien mit einer angegebenen Größe.
Das folgende Kommando erstellt eine Datei mit einer Aufstellung aller Dateien und Verzeichnisse des Users Dominik unterhalb des Hauptverzeichnisses: root@ubuntu-server:~# find / -user dominik >dominiks_dateiliste
Beliebt ist auch das Auffinden und Dokumentieren von Programmen mit gesetzten SUID-Bits. Diese Aufgabe kann z.B. durch folgende Befehlszeile gelöst werden: root@ubuntu-server:~# find / -perm +4000 >suid-programme
Sie können auch eine Aufstellung aller Dateien erhalten, die besonders groß sind. In Zeiten zunehmender Internetbandbreiten befinden sich häufig an verschiedensten Stellen Linux-ISO-Dateien, die in Vergessenheit geraten sind. Das folgende Kommando findet alle Dateien, die größer sind als 500 MB: archangel:/ # find / -size +500M | xargs ls -l >grosse-dateien
207
1451.book Seite 208 Dienstag, 7. Juli 2009 2:18 14
Topic 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
locate Mit dem Kommando locate können Dateien erheblich schneller gefunden werden als mit find. Das liegt daran, dass locate sich auf eine Datenbank stützt und nicht einfach das gesamte Dateisystem durchsucht. Ein Nachteil ist allerdings, dass locate nur nach Suchmustern sucht und nicht nach anderen Eigenschaften einer Datei. Genau wie find versteht auch locate den Umgang mit Wildcards. Deshalb wird auch das folgende Kommando alle Textdokumente, die mit OpenOffice.org erstellt wurden, ausfindig machen: root@ubuntu-server:/ # locate *.sxw
Das Programm verwendet bei der Suche die Datenbank /var/lib/locatedb. Diese Datenbank wird durch das Programm updatedb erzeugt bzw. aktualisiert. updatedb und /etc/updatedb.conf Die Konfiguration des Programms updatedb erfolgt im Normalfall in der Datei /etc/updatedb.conf. Wie bei den meisten anderen Programmen ist das eine Textdatei, die Sie mit einem beliebigen Editor bearbeiten können. Sie sehen im Folgenden eine typische updatedb.conf-Datei: FINDOPTIONS='-ignore_readdir_race' export FINDOPTIONS PRUNEFS="afs binfmt_ misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf" export PRUNEFS PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /var/spool /mnt /media /dev /proc" export PRUNEPATHS NETPATHS="/daten" export NETPATHS LOCALUSER="nobody" export LOCALUSER NICE=10 export NICE
Für die Prüfung müssen Sie nicht jede einzelne Zeile dieser Datei kennen. Typischerweise wird häufig nach PRUNEPATHS gefragt. Diese Variable enthält die Verzeichnisse, die updatedb beim Erstellen der Datenbank nicht durchsuchen soll. Interessant ist auch die Variable NETPATHS, weil Sie hierüber Verzeichnisse indexieren lassen können, die auf einem anderen System liegen (in diesem Fall ein NFS-Verzeichnis).
208
1451.book Seite 209 Dienstag, 7. Juli 2009 2:18 14
104.7 Systemdateien finden und Dateien am richtigen Ort platzieren
PRUNEFS gibt an, welche Dateisystemtypen von der Durchsuchung ausgeschlossen werden sollen. Wenn Sie NETPATHS verwenden, dürfen Sie nicht vergessen, hier nfs oder gegebenenfalls smbfs von der Liste zu nehmen.
Die Option NICE sorgt dafür, dass updatedb das System während der Indexierung nicht lahmlegt. Wenn Sie updatedb von Hand starten, können Sie alle genannten Optionen auch auf der Befehlszeile übergeben. Da das Indexieren der Datenbank bei großen Dateisystemen relativ lange dauern kann, ist es nicht unüblich, updatedb mit einem Et-Zeichen in den Hintergrund zu stellen: root@ubuntu-server:/ # updatedb &
Bei den meisten Distributionen führt cron schon per Voreinstellung täglich einmal updatedb aus.
209
1451.book Seite 210 Dienstag, 7. Juli 2009 2:18 14
1451.book Seite 211 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101 Die folgenden Fragen sollen Ihnen helfen, sich an die Art der Fragestellung in der wirklichen Prüfung zu gewöhnen. Sie sollten diese Fragen nicht einfach auswendig lernen, sondern versuchen, die Antworten zu jeder einzelnen Frage zu verstehen. Deshalb werden auch die entsprechend falschen Antworten im Lösungsteil des Buches bei Bedarf genau besprochen. Das Üben mit diesen Fragen soll Sie auch an die Herangehensweise an eventuell Ihnen unbekannte Themen nahe bringen. Ein unbekanntes Kommando in einer Frage ist nämlich kein Grund, eine Frage nicht beantworten zu können. Oft führt ein wenig Logik oder das Ausschlussverfahren dennoch zum Ziel.
Fragen Frage 1: Das Kommando jobs gibt folgende Ausgabe auf Ihrem Terminal aus: [1]+
Stopped
/usr/bin/programm
Welches Kommando setzt die Ausführung des Programms im Hintergrund fort, sodass Sie weitere Kommandos auf dem gleichen Terminal eingeben können? 첸 A: bg 1 첸 B: continue programm 첸 C: exec programm 첸 D: fg programm 첸 E: programm & Frage 2: Sie müssen alle Tabstops in datei1 durch Leerzeichen ersetzen. Welches Kommando führen Sie aus? 첸 A: file --tabs-to-spaces datei1 첸 B: extend datei1 첸 C: wc -t2s datei1 첸 D: expand datei1
211
1451.book Seite 212 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 3: Sie wollen find beschränken, um eine Verzeichnisstruktur nur bis zu einer Tiefe von drei Unterverzeichnissen zu durchsuchen. Welche Kommandozeilenoption müssen Sie verwenden? 첸 A: --max-dirs 첸 B: -dirmax 첸 C: -maxdepth 첸 D: -s 첸 E: -n Frage 4: Welcher der folgenden Daemonen repräsentiert die Hardware AbstraktionsSchicht? 첸 A: initd 첸 B: udev 첸 C: hald 첸 D: hardd Frage 5: Welches Kommando filtert die Ausgabe der Datei named.conf so, dass nur die Zeilen, die nicht mit einer Raute (#) beginnen, auf stdout ausgegeben werden? 첸 A: grep -v ^# /etc/named.conf 첸 B: grep ^# /etc/named.conf 첸 C: grep #$ /etc/named.conf 첸 D: grep -v #$ /etc/named.conf Frage 6: Welche der folgenden Kommandos können benutzt werden, um PCI-Geräte aufzulisten, die vom Kernel erkannt werden? Wählen Sie zwei Antworten. 첸 A: less lspci 첸 B: less /dev/pci 첸 C: less /proc/devices/pci 첸 D: less /proc/pci 첸 E: lspci | less
212
1451.book Seite 213 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 7: Welche der folgenden Geräteinformationen kann das Kommando lspci nicht anzeigen? Nur eine Antwort ist richtig. 첸 A: Bus-Geschwindigkeit einer Karte (z.B. 66 MHz) 첸 B: IRQ-Einstellungen einer Karte 첸 C: Herstelleridentifikation einer Karte 첸 D: AGP-Rate einer Karte (z.B. 1x, 2x, 4x) 첸 E: MAC-Adresse einer Ethernet-Karte Frage 8: Ihre USB-Festplatte funktioniert nicht. Sie haben alle notwendigen USB-Optionen in Ihren 2.2-Kernel integriert, aber die Festplatte kann nicht verwendet werden. Was könnte das Problem verursachen? 첸 A: Sie haben Ihre usb.usermap nicht richtig konfiguriert. 첸 B: Sie benutzen den falschen Kernel für dieses Gerät. 첸 C: Das USB-Gerät ist nicht USB 2.0-kompatibel. 첸 D: Es gibt einen USB-Ressourcenkonflikt. Frage 9: Sie benutzen einen Kernel mit der Version 2.0.36 und möchten eine USB-Maus anschließen. Welche der folgenden Aussagen ist richtig? 첸 A: Sie müssen den Kernel neu kompilieren. 첸 B: Sie müssen den Kernel aktualisieren. 첸 C: Sie müssen die USB-Module für Ihren modularen Kernel laden. 첸 D: USB wird von Linux nicht unterstützt.
213
1451.book Seite 214 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 10: Sie bauen in einen PC eine 60-GB-Festplatte ein. Bei der Partitionierung bemerken Sie, dass nur 32 GB verfügbar sind. Wie können Sie den gesamten Speicher nutzen? 첸 A: Legen Sie zwei 30-GB-Partitionen an. 첸 B: Schalten Sie den LBA-Modus im BIOS ein. 첸 C: Erstellen Sie zunächst eine Partition, die komplett innerhalb der ersten 1024 Zylinder liegt. 첸 D: Benutzen Sie GRUB oder die neueste LILO-Version als Bootloader. 첸 E: Aktualisieren Sie Ihr BIOS mit der neuesten Version. Frage 11: Wie lautet der Gerätedateiname der zweiten SCSI-Festplatte in Ihrem System? Geben Sie den gesamten Pfad an.
Frage 12: Welcher Umstand könnte das System am Startvorgang hindern, wenn Sie eine Partition erstellen, die mehr als 1024 Zylinder hat? 첸 A: der Speicherort, an dem sich der LILO befindet 첸 B: der Speicherort, an dem sich /var befindet 첸 C: der Datendurchsatz der Festplatte 첸 D: der Speicherort, an dem sich das Verzeichnis /boot befindet 첸 E: die mittlere Zugriffszeit der Festplatte Frage 13: Welches Kommando müssen Sie verwenden, um LILO zu deinstallieren? 첸 A: remove lilo 첸 B: uninstall lilo 첸 C: lilo -r 첸 D: lilo -u
214
1451.book Seite 215 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 14: Sie möchten festlegen, dass das System beim Start 3 Sekunden wartet, bevor der voreingestellte Kernel gebootet wird. Welches der folgenden Kommandos müssen Sie ausführen? 첸 A: lilo -t 30 첸 B: lilo -d 30 첸 C: lilo delay 30 첸 D: lilo 30 Frage 15: Welcher der folgenden Parameter in der Datei lilo.conf legt fest, nach welcher Wartezeit das System den voreingestellten Kernel bootet? 첸 A: delay 첸 B: wait 첸 C: pause 첸 D: default Frage 16: Mit welcher Option listet LILO die auf dem System verfügbaren und installierten Kernel auf? 첸 A: -q 첸 B: -k 첸 C: -v 첸 D: -l Frage 17: Welcher Parameter in der lilo.conf legt den VGA-Textmodus fest? 첸 A: vgatext 첸 B: svga 첸 C: vga 첸 D: vtm
215
1451.book Seite 216 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 18: Sie möchten beim nächsten Systemstart einmalig ein Skript ausführen. Welche Option für LILO sollten Sie verwenden? 첸 A: -R 첸 B: -S 첸 C: -T 첸 D: -L Frage 19: Auf Ihrem System ist LILO im Master Boot Record (MBR) installiert. Sie haben soeben einen neuen Kernel kompiliert. Da Sie für Notfälle über einen Back-up-Kernel verfügen, entscheiden Sie sich, den neuen Kernel einfach über den bestehenden Kernel zu kopieren. Der alte Kernel wird überschrieben. Beim Neustart des Systems stellen Sie fest, dass sich der neue Kernel nicht laden lässt. Was ist die Ursache für dieses Problem? 첸 A: Der neue Kernel liegt oberhalb des 1024. Zylinders und kann deshalb nicht vollständig geladen werden. 첸 B: Sie haben vergessen, vor dem Neustart das Kommando lilo auszuführen. 첸 C: Sie haben die /etc/lilo.conf nicht aktualisiert, um den neuen Kernel einzutragen. 첸 D: Sie müssen den neuen Kernel mit einer Boot-Floppy laden, um den alten Kernel wiederherzustellen. 첸 E: Sie haben neu gestartet, bevor Sie LILO in den MBR installiert haben. Frage 20: Wo kann LILO sein Startprogramm ablegen? 첸 A: in einem Boot-ROM 첸 B: im Boot-RAM 첸 C: im MBR auf einer Festplatte 첸 D: in der /boot-Partition Frage 21: Sie beabsichtigen, den Kernel mit der Bezeichnung meinkernel vom LILOPrompt aus zu starten. Geben Sie das Kommando ein.
216
1451.book Seite 217 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 22: Mit welchem Parameter in der Datei lilo.conf wird das root-Dateisystem nur lesbar eingehängt? 첸 A: read-only 첸 B: no-write 첸 C: read 첸 D: no-right Frage 23: Welcher lilo.conf-Parameter legt fest, welches Gerät als root-Dateisystem (/) eingehängt wird? 첸 A: root 첸 B: drive 첸 C: mntroot 첸 D: mount Frage 24: Welches Programm gibt die ersten Zeilen einer Datei aus?
Frage 25: Welches Kommando entfernt rekursiv alle Unterverzeichnisse in /tmp, unabhängig davon, ob sie existieren oder gerade in Gebrauch sind? 첸 A: del /tmp/* 첸 B: m -rf /tmp 첸 C: rm -Ra /tmp/* 첸 D: rm -rf /tmp/* 첸 E: delete /tmp/*,* Frage 26: Sie wollen den gesamten Inhalt des Verzeichnisses /home/willi mit allen Unterverzeichnissen in das Verzeichnis /home/wilhelm verschieben. Geben Sie das komplette Kommando an.
217
1451.book Seite 218 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 27: Mit welchem Kommando können Sie ohne die Angabe eines Pfades in Ihr eigenes Heimatverzeichnis wechseln?
Frage 28: Sie schreiben ein Skript, das Routineaufgaben automatisch ausführt. Die Ausgabe des Skripts soll sowohl auf der Konsole als auch in einer Datei erfolgen. Welches Programm können Sie hierfür verwenden?
Frage 29: Was bewirkt das Kommando kill -HUP 4711? 첸 A: Es beendet zwingend den Prozess mit der PID 4711. 첸 B: Es beendet kontrolliert den Prozess mit der PID 4711 und führt einen Aufräumprozess aus. 첸 C: Der Prozess mit der PID 4711 liest seine Konfigurationsdateien neu ein. 첸 D: Es startet den Prozess mit der PID 4711 neu und setzt das damit gesteuerte Modem zurück. Frage 30: Sie bekommen den Statuscode 0 nach der Ausführung eines Kommandos, das eine Ausgabe auf dem Bildschirm erzeugt. Welchen Rückschluss ziehen Sie daraus? 첸 A: Das Programm hat einen Fehler verursacht. 첸 B: Das Programm benötigt mehr Eingaben. 첸 C: Das Programm gab Standardeingaben zurück. 첸 D: Das Programm endete mit einem Syntaxfehler. 첸 E: Das Programm wurde fehlerfrei ausgeführt.
218
1451.book Seite 219 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 31: Sie führen das Kommando kill ohne Optionen, nur unter Angabe einer PID als Argument aus (z.B. kill 4711). Welches Signal wird dann an den Prozess 4711 übermittelt? 첸 A: 1 (SIGHUP) 첸 B: 2 (SIGINT) 첸 C: 3 (SIGQUIT) 첸 D: 9 (SIGKILL) 첸 E: 15 (SIGTERM) 첸 F: 19 (SIGSTOP) Frage 32: Der Prozess netscape ist außer Kontrolle geraten. Mehrere Versuche, den Prozess sauber zu beenden, sind fehlgeschlagen. Die Ausgabe des Kommandos ps enthält u.a. die folgende Zeile: 17461 tty1
00:00:00 netscape
Mit welchem Kommando können Sie den Prozess mit Gewalt beenden?
Frage 33: Welches Kommando ermöglicht es einem Programm, seine Ausführung auch dann fortzusetzen, wenn sich der ausführende Benutzer vom System abmeldet?
Frage 34: Sie wollen wissen, in welchem Runlevel sich Ihr System befand, bevor es in den aktuellen Runlevel eingetreten ist. Geben Sie das Kommando an, das die benötigte Information liefert.
219
1451.book Seite 220 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 35: Welche Option muss mit dem Kommando shutdown verwendet werden, um das System neu zu starten? 첸 A: shutdown -y 첸 B: shutdown -c 첸 C: shutdown -r 첸 D: shutdown -b Frage 36: Sie führen nacheinander die folgenden Kommandos aus: archangel:/ # nice -n 12 programm1 archangel:/ # nice -n 6 programm2 archangel:/ # nice -n 2 programm3
Welches der Programme wird hierdurch mit der höchsten Priorität ausgeführt? 첸 A: programm1 첸 B: programm2 첸 C: programm3 첸 D: keines Frage 37: Sie bearbeiten eine Textdatei mit dem vi. Der Editor befindet sich im Kommandomodus. Sie suchen eine Zeile, die mit dem Wort »Dokumente« beginnt. Welches Kommando müssen Sie eingeben?
Frage 38: Sie wollen nach folgenden Zeichenfolgen in vi suchen: A4.1, A4.2, A4.3 bis A4.7. Geben Sie den regulären Ausdruck an, der diese Suche ermöglicht.
220
1451.book Seite 221 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 39: Sie möchten eine Textdatei komplett auf stdout ausgeben. Welches Kommando können Sie hierfür verwenden? 첸 A: printfile 첸 B: cat 첸 C: ls 첸 D: pr2stdout Frage 40: Welches Kommando zeigt die prozentuale Belegung aller eingehängten Dateisysteme? 첸 A: df 첸 B: vmstat 첸 C: du 첸 D: top 첸 E: free Frage 41: Welches Kommando mit Optionen zeigt die Belegung aller eingehängten Dateisysteme in Kilobyte an? 첸 A: du -k 첸 B: df -h 첸 C: df -k 첸 D: du -h 첸 E: du -s Frage 42: Welches allgemeingültige Programm wird benutzt, um die Integrität eines Dateisystems zu überprüfen?
221
1451.book Seite 222 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 43: Mit welchen Kommandos werden ausschließlich ext2-Dateisysteme überprüft? 첸 A: fsck.ext2 첸 B: fsck -t ext2 첸 C: e2fsck 첸 D: ext2fsck Frage 44: Welche Option kann mit dem Kommando shutdown verwendet werden, um die automatische Ausführung von fsck beim nächsten Neustart zu verhindern? 첸 A: shutdown -s 첸 B: shutdown -o 첸 C: shutdown -r 첸 D: shutdown -f Frage 45: Welche Option in der Datei /etc/fstab verhindert, dass ein Dateisystem beim Systemstart automatisch eingehängt wird? 첸 A: noauto 첸 B: nomount 첸 C: noatime 첸 D: nohup Frage 46: Welche Informationen befinden sich in der Datei /etc/fstab? 첸 A: Informationen über eingehängte Dateisysteme 첸 B: Informationen über Dateisysteme und Einhängepunkte 첸 C: Informationen über Dateisystemtypen, wie Superblock-Offset 첸 D: Informationen über die Konsistenz der eingehängten Dateisysteme 첸 E: Informationen über Festplatten, wie Zylinder oder Köpfe
222
1451.book Seite 223 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 47: Welche ist die richtige Option für die Datei /etc/fstab, um Gruppenquotierungen einzuschalten? 첸 A: groupquota 첸 B: grpquota 첸 C: groupquotas 첸 D: grpquotas Frage 48: Sie beabsichtigen, alle in der Datei /etc/fstab aufgeführten Dateisysteme automatisch einzuhängen, wenn diese noch nicht eingehängt sind. Welches Kommando und gegebenenfalls welche Optionen müssen Sie verwenden?
Frage 49: Sie wollen den kompletten Inhalt von /dev/hda1 nach /dev/hdb1 Block für Block kopieren. Geben Sie das Kommando an, das diese Aufgabe ausführt.
Frage 50: Sie konfigurieren einen neuen Dateiserver, der von etwa 100 Benutzern verwendet werden soll. Welches Standardverzeichnis sollte zwingend auf einer eigenen Partition oder idealerweise Festplatte untergebracht werden? Geben Sie den Pfad an.
Frage 51: Sie beabsichtigen, eine Aufstellung über die Festplattennutzung und die Quotierungen zu erstellen. Diese Auflistung soll alle Dateisysteme enthalten, für die in der Konfigurationsdatei /etc/fstab Quotierungen konfiguriert sind. Welches Kommando können Sie verwenden? 첸 A: quotarep -a 첸 B: repquota /dev/hd* 첸 C: repquota -a 첸 D: quotarep /dev/hd*
223
1451.book Seite 224 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 52: Sie konfigurieren einen neuen Computer, der als Mail- und Webserver genutzt werden soll. Sie befürchten, dass die Protokollierungen auf diesem System zu einem Problem werden könnten. Welches Dateisystem sollten Sie auf einer separaten Partition unterbringen? Geben Sie den absoluten Pfad an.
Frage 53: Welche der folgenden ist die Standard-umask auf den meisten Linux-Systemen? 첸 A: 644 첸 B: 022 첸 C: 066 첸 D: 077 첸 E: 211 Frage 54: In welcher Datei finden Sie in den meisten Fällen die globalen Einstellungen für umask und ulimit vor? 첸 A: /etc/bashrc 첸 B: /etc/bash_profile 첸 C: /etc/profile 첸 D: ~/.bashrc 첸 E: ~/.bash_profile Frage 55: Welche beiden Rechte muss ein Benutzer haben, um ein Shell-Skript ausführen zu können? 첸 A: Schreibrecht 첸 B: Ausführrechte 첸 C: Das Recht, in das Verzeichnis zu wechseln 첸 D: Benutzer können keinesfalls Shell-Skripte ausführen. 첸 E: Leserecht
224
1451.book Seite 225 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 56: Sie müssen die Rechte für das Verzeichnis /home/hans und dessen gesamten Inhalt derart ändern, dass dieses den folgenden Rechten entspricht: rwxr--r--. Welche der folgenden Kommandos stellen die Berechtigungen entsprechend ein? Wählen Sie zwei Antworten. 첸 A: chmod 744 /home/hans/* 첸 B: chmod 0744 /home/hans -R 첸 C: chmod -R u=rwx,g=r,o=r /home/hans 첸 D: chmod u+rwx,g+r,o+r /home/hans Frage 57: Sie wollen den gesamten Pfad der ausführbaren Datei prog1 herausfinden. Das Programm lässt sich ohne Pfadangabe ausführen. Welches Kommando zeigt den Pfad zur Datei an?
Frage 58: Um alle Dateien zu finden, die älter als eine Woche sind, benutzen Sie das Kommando ____________ -mtime –7. Frage 59: Mit welchem Kommando finden Sie ein Programm, die dazugehörenden Manpages und alle anderen Quelldateien? Andere Dateien, die den Namen des Programms enthalten, sollen nicht angezeigt werden. 첸 A: find 첸 B: locate 첸 C: apropos 첸 D: whereis 첸 E: whatis
225
1451.book Seite 226 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 60: Sie möchten sicherstellen, dass bestimmte Verzeichnisse bei der Aktualisierung Ihrer Datenbankdatei für locate nicht einbezogen werden. In welcher Datei legen Sie diese Einstellungen fest? 첸 A: /etc/locatedb.conf 첸 B: /etc/updatedb.conf 첸 C: /etc/slocatedb.conf 첸 D: /etc/searchdb.conf Frage 61: Sie haben Änderungen an der Datei /etc/inittab durchgeführt. Sie möchten, dass diese Änderungen sofort wirksam werden, ohne das System neu zu starten. Welches Kommando sollten Sie ausführen? 첸 A: init r 첸 B: inittab r 첸 C: inittab q 첸 D: init q Frage 62: Welche Datei müssen Sie modifizieren, damit das System bei einem Neustart einen Runlevel mit einer grafischen Anmeldung anstatt der Textkonsole startet? Geben Sie die Datei und den Pfad an.
Frage 63: Sie wollen, dass der Prozess /etc/meinprozess ausgeführt wird, wenn das System in den Runlevel 2 wechselt. Das System soll warten, bis dieser Prozess seine Ausführung abgeschlossen hat. Mit welchem der folgenden Einträge in der Datei /etc/inittab erreichen Sie dieses Verhalten? 첸 A: 2:7:wait:/etc/meinprozess 첸 B: wait:2:7:/etc/meinprozess 첸 C: 7:2:wait:/etc/meinprozess 첸 D: wait:7:2:/etc/meinprozess
226
1451.book Seite 227 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 64: Mit welcher Konfigurationsdatei steuern Sie das Verhalten des Daemons init? 첸 A: /etc/proc 첸 B: /etc/inittab 첸 C: /etc/init 첸 D: /etc/initproc Frage 65: Sie bearbeiten eine Datei mit dem Editor vi. Als Sie versuchen, die Datei mit :w! zu speichern, erhalten Sie eine Fehlermeldung. Sie wollen sich die Zugriffsberechtigungen der Datei ansehen, ohne den Editor vi zu beenden. Welches Kommando geben Sie in vi ein? 첸 A: :\ls -l 첸 B: esc :ls -l 첸 C: :!ls -l 첸 D: :?ls -l Frage 66: Ein Benutzer beklagt sich, dass er ein Skript nicht mit einer höheren Priorität als 0 starten kann. Was ist hierfür der Grund? 첸 A: Benutzerprozesse können nur mit einer Priorität von 0 laufen. 첸 B: Die Beschwerde ist falsch. Benutzerprozesse laufen immer mit einer Priorität von 0. 첸 C: Nur root kann eine Priorität, abweichend vom Standard, festlegen. 첸 D: Nur root kann die Priorität höher als 0 setzen. Frage 67: Welches Kommando können Sie verwenden, um eine Datei im Oktalformat anzuzeigen? 첸 A: od 첸 B: octdump 첸 C: dumpoct 첸 D: cat -o
227
1451.book Seite 228 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 68: Sie wollen die Verzeichnisstruktur photos/urlaub/2007/gebirge unter dem aktuellen Verzeichnis erstellen. Keines dieser Verzeichnisse existiert bislang. Welches Kommando erstellt die gesamte Verzeichnisstruktur in einem Schritt? 첸 A: mkdir -r photos/urlaub/2007/gebirge/ 첸 B: mkdir -R photos/urlaub/2007/gebirge/ 첸 C: mkdir -p photos/urlaub/2007/gebirge/ 첸 D: mkdir -P photos/urlaub/2007/gebirge/ 첸 E: mkdir -m photos/urlaub/2007/gebirge/ Frage 69: Sie möchten die Priorität eines bereits laufenden Prozesses auf das Maximum erhöhen. Die PID des Prozesses ist 7353. Welches Kommando würden Sie verwenden? 첸 A: renice +20 7353 첸 B: setpriority +20 7353 첸 C: setpriority –20 7353 첸 D: renice –20 7353 Frage 70: Sie müssen in einer Textdatei alle vorhandenen Tabstops durch Leerzeichen ersetzen. Welches Kommando (ohne Optionen) müssen Sie verwenden?
Frage 71: Sie verwenden den Editor vi in einem Terminal. Sie möchten eine Seite weiter blättern, aber das Terminal reagiert weder auf Cursortasten noch auf andere Funktionstasten. Welchen Hotkey verwenden Sie zusammen mit der (Strg)-Taste? 첸 A: a 첸 B: d 첸 C: f 첸 D: u
228
1451.book Seite 229 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 72: Mit welchem Kommando können Sie die Zeilen einer Textdatei automatisch nummerieren? 첸 A: ln 첸 B: nl 첸 C: cat -n 첸 D: numline 첸 E: tr Frage 73: Welches der folgenden Programme würden Sie verwenden, um die Auslastung eines Computers zu überprüfen? 첸 A: nice 첸 B: loadavg 첸 C: cpustat 첸 D: ps 첸 E: top Frage 74: Sie verwenden eine Shell in einer Remote-Sitzung. Das Terminal ist durch eine Anwendung belegt. Welche Tastenkombination sorgt dafür, dass die Anwendung im Hintergrund pausiert, sodass Sie die Shell verwenden können? 첸 A: (Strg) + (C) 첸 B: (Strg) + (Z) 첸 C: (Strg) + (X) 첸 D: (Strg) + (D) Frage 75: Um die Ausgabe des Kommandos ls an eine bestehende Datei namens Dateiliste anzuhängen, kann folgendes Kommando verwendet werden. 첸 A: ls > Dateiliste 첸 B: ls > & Dateiliste 첸 C: ls &> Dateiliste 첸 D: ls >> Dateiliste
229
1451.book Seite 230 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 76: Welches Kommando entfernt mehrfach vorhandene Zeilen aus einer bereits sortierten Datei? 첸 A: uniq 첸 B: filter 첸 C: trim 첸 D: wc Frage 77: Welche Option muss in der Datei /etc/fstab enthalten sein, um Quota zu ermöglichen? 첸 A: quota 첸 B: user 첸 C: quotaon 첸 D: usrquota Frage 78: Welches der folgenden Kommandos erstellt ein ext3-Dateisystem auf der Partition /dev/hda4? 첸 A: mke2fs -d /dev/hda4 첸 B: mke2fs -m 3 /dev/hda4 첸 C: mke2fs -j /dev/hda4 첸 D: mke2fs -c ext3 /dev/hda4 Frage 79: Welches der folgenden Kommandos listet die Quotierungen für den Benutzer hans auf? 첸 A: repquota hans 첸 B: quota hans 첸 C: lsquota hans 첸 D: printquota hans
230
1451.book Seite 231 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 80: Sie beabsichtigen, die Ausgabe eines Programms sowohl auf stdout als auch auf stderr zu unterdrücken. Welche Umleitungen sollten Sie dem Programm übergeben? 첸 A: >/dev/null 첸 B: >/dev/null 1>&2 첸 C: 1>&2>/dev/null 첸 D: >/dev/null 2>&1 첸 E: 2>&1>/dev/null Frage 81: Welches Kommando gibt die Dateiattribute der Datei test.txt aus? 첸 A: ls --attr test.txt 첸 B: printattr test.txt 첸 C: fileattr test.txt 첸 D: lsattr test.txt Frage 82: Welche Konfigurationsdatei enthält Informationen über Dateisysteme und deren Mountpoints? 첸 A: /etc/mount 첸 B: /etc/fs_mount 첸 C: /etc/fstab 첸 D: /proc/fstab Frage 83: Welcher Wert für umask sorgt dafür, dass die Dateirechte einer neu erstellten Datei auf -rw-r--r-- (644) gesetzt werden? 첸 A: 0004 첸 B: 0022 첸 C: 0226 첸 D: 0244
231
1451.book Seite 232 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 84: Sie beabsichtigen, den Benutzern eines Systems das Ein- und Aushängen von Dateisystemen (z.B. CD-ROM oder Floppy) zu ermöglichen. Welche Option sollte der entsprechenden Zeile in der Datei /etc/fstab hinzugefügt werden? 첸 A: nouidchk 첸 B: user 첸 C: alluser 첸 D: auto Frage 85: Wenn Linux beim Systemstart ein ACPI-BIOS erkennt, was wird dann automatisch deaktiviert? 첸 A: PnP 첸 B: APM 첸 C: PCI 첸 D: ATA Frage 86: Welches Programm kann RPM-Pakete in DEB-Pakete konvertieren? Geben Sie das einfache Kommando ohne Optionen an.
Frage 87: Bei dem Versuch, ein installiertes Paket zu aktualisieren, sehen Sie folgende Ausgabe: archangel:/download # rpm -i zip-2.3-741.i586.rpm package zip-2.02-621 is already installed
Mit welchem der folgenden Kommandos können Sie die Aktualisierung des Paketes durchführen? 첸 A: rpm -i zip-2.3-741.i586.rpm 첸 B: rpm -ivh zip-2.3-741.i586.rpm 첸 C: rpm -U zip-2.3-741.i586.rpm 첸 D: rpm -qu zip-2.3-741.i586.rpm 첸 E: rpm -qiv zip-2.3-741.i586.rpm
232
1451.book Seite 233 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 88: Welche Gerätedatei bezeichnet unter Linux normalerweise die erste serielle Schnittstelle (entsprechend COM 1)? 첸 A: /dev/com0 첸 B: /dev/com1 첸 C: /dev/ttyS0 첸 D: /dev/ttyS1 첸 E: keine der genannten Frage 89: Sie benötigen eine Liste der Dateien, die ein DPKG-Paket installiert hat. Welches Kommando, gefolgt von dem Namen des Paketes, können Sie verwenden? 첸 A: dpkg -l 첸 B: dpkg -L 첸 C: dpkg -C 첸 D: dpkg -s 첸 E: dpkg -S Frage 90: In GRUBs Konfigurationsdatei (menu.lst) finden Sie folgende Zeile vor: root
(hd1,3)
Welcher Gerätedatei entspricht dieser Eintrag? 첸 A: /dev/hda4 첸 B: /dev/hda5 첸 C: /dev/hdb4 첸 D: /dev/hdb5
233
1451.book Seite 234 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 91: Sie beabsichtigen, ein DPKG-Paket von einem System zu deinstallieren. Sie möchten die Konfigurationsdateien behalten, damit das Programm im Fall einer Neuinstallation nicht neu konfiguriert werden muss. Welches Kommando verwenden Sie? 첸 A: dpkg -s paket 첸 B: dpkg -L paket 첸 C: dpkg -P paket 첸 D: dpkg -r paket Frage 92: Sie wollen sehen, wohin das Paket zip-2.3-741.i586.rpm im Fall einer Installation Dateien kopiert. Welches Kommando verwenden Sie? 첸 A: rpm -qp zip-2.3-741.i586.rpm 첸 B: rpm -qpl zip-2.3-741.i586.rpm 첸 C: rpm -qv zip-2.3-741.i586.rpm 첸 D: rpm -ql zip-2.3-741.i586.rpm Frage 93: Mit welchem Kommando deinstallieren Sie ein DPKG-Paket von einem Computer? 첸 A: dpkg -Ra 첸 B: dpkg -R 첸 C: dpkg -r 첸 D: dpkg -ra Frage 94: Sie beabsichtigen die Installation eines RPM-Paketes auf einem Debian-System. Mit welchem Programm können Sie die Installation durchführen? 첸 A: apt-conf 첸 B: dselect 첸 C: cpio 첸 D: alien
234
1451.book Seite 235 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 95: Sie beabsichtigen die Aktualisierung eines RPM-Paketes mit dem neueren Paket zip-2.3-741.i586.rpm. Vor der Installation wollen Sie die Änderungen in dem neuen Paket gegenüber der Vorgängerversion überprüfen. Welches Kommando können Sie hierfür verwenden? 첸 A: rpm -qp --changelog zip-2.3-741.i586.rpm 첸 B: rpm -qp zip-2.3-741.i586.rpm 첸 C: rpm -qc zip-2.3-741.i586.rpm 첸 D: rpm -showchangelog zip-2.3-741.i586.rpm Frage 96: Nach längerer Nichtbenutzung wollen Sie apt-get verwenden, um einige Pakete auf Ihrem System zu installieren. Vorher wollen Sie die Paketlisten aktualisieren, nicht aber die Pakete selbst. Welches Kommando führen Sie aus? 첸 A: apt-get build-dep 첸 B: apt-get mirror-select 첸 C: apt-get upgrade 첸 D: apt-get dist-upgrade 첸 E: apt-get update Frage 97: Sie beabsichtigen, die Dateien eines DPKG-Paketes aufzulisten. Welches Kommando verwenden Sie? 첸 A: dpkg -L 첸 B: dpkg --dump 첸 C: dselect --dump 첸 D: dselect -L Frage 98: Mit welchen beiden der folgenden Programme können Sie DPKG-Pakete verwalten? 첸 A: dpkg 첸 B: deb 첸 C: dselect 첸 D: debselect
235
1451.book Seite 236 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 99: Welches der folgenden Kommandos ändert den Besitzer der Datei liste zu hanz und die Gruppe zu panz? 첸 A: chown hanz/panz liste 첸 B: chown -u hanz -g panz liste 첸 C: chown hanz:panz liste 첸 D: chown --user hanz --group panz liste Frage 100: Sie wollen einen Hardlink zu einer Datei erstellen, erhalten jedoch eine Fehlermeldung. Was könnte der Grund für die Fehlermeldung sein? 첸 A: Die Quelldatei ist versteckt. 첸 B: Die Quelldatei ist nur lesbar. 첸 C: Die Quelldatei ist ein Shell-Skript. 첸 D: Sie kennen die Quelldatei nicht. 첸 E: Die Quelle und das Ziel befinden sich auf verschiedenen Dateisystemen. Frage 101: Sie verwenden Quota auf Ihrem System. Wie können Sie eine Zusammenfassung über die Quota eines Dateisystems erhalten? 첸 A: quota -l 첸 B: quota 첸 C: quotacheck 첸 D: repquota 첸 E: quota -list Frage 102: Wie viele Inodes werden beim Erstellen einer Datei vergeben? 첸 A: 1 첸 B: 2 첸 C: 4 첸 D: 8 첸 E: 512
236
1451.book Seite 237 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 103: Sie erstellen eine neue Datei. Anschließend stellen Sie fest, dass die Berechtigungen für die neue Datei -rw-rw-rw- (666) sind. Wie muss der Wert für umask demnach eingestellt sein? 첸 A: 134 첸 B: 000 첸 C: 222 첸 D: 334 Frage 104: Mit welchem Kommando können Sie die Anzahl der noch verfügbaren Inodes pro eingehängtem Dateisystem ermitteln? 첸 A: du -i 첸 B: lsfs -i 첸 C: df -i 첸 D: printfs -i Frage 105: Sie benötigen eine Liste mit den Benutzernamen (erste Spalte der Datei passwd) und den UIDs (dritte Spalte der Datei passwd) eines Systems. Mit welchem Kommando können Sie eine solche Liste generieren? 첸 A: chop -c 1,3 /etc/passwd 첸 B: cut -d: -f 1,3 /etc/passwd 첸 C: tac 1-3/etc/passwd 첸 D: fmt -u/etc/passwd Frage 106: Mit welchem Kommando können Sie in der Bash-Shell ein kurzes Pseudonym für ein längeres Kommando erstellen? 첸 A: shortcut 첸 B: ln 첸 C: alias 첸 D: sudo 첸 E: link
237
1451.book Seite 238 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 107: Sie bearbeiten eine Datei mit dem Editor vi. Die aktuelle und die folgenden zwölf Zeilen sollen aus der Datei gelöscht werden. Welches Kommando geben Sie in den Editor ein (zwei Möglichkeiten)? 첸 A: 13d 첸 B: 13x 첸 C: d13d 첸 D: 13d 첸 E: 13dd Frage 108: In der Datei test.csv soll die Zeichenkette hans immer durch die Zeichenkette haenschen ersetzen werden. Welches Kommando benötigen Sie? 첸 A: sed 's/hans/haenschen/g' test.csv 첸 B: sed 's/hans/haenschen/g' test.csv > test.csv 첸 C: sed 's/hans/haenschen/g' test.csv | test.csv 첸 D: sed -i 's/hans/haenschen/g' test.csv 첸 E: sed -i 's/hans/haenschen/g' test.csv > test.csv Frage 109: Welche der folgenden Kommandos sind gleichbedeutend mit kill 4711? 첸 A: kill -s 1 4711 oder kill -s SIGHUP 4711 첸 B: kill -s 2 4711 oder kill -s SIGINT 4711 첸 C: kill -s 15 4711 oder kill -s SIGTERM 4711 첸 D: kill -s 3 4711 oder kill -s SIGQUIT 4711 첸 E: kill -s 9 4711 oder kill -s SIGKILL 4711 Frage 110: Welche Option zwingt insmod dazu, das Laden eines Moduls auch dann fortzusetzen, wenn eine Problemsituation eintritt? 첸 A: -f 첸 B: -F 첸 C: -r 첸 D: -u
238
1451.book Seite 239 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 111: Welches Kommando lädt das Modul snd-ac97-codec.ko und alle Module, von denen snd-ac97-codec.ko abhängt? 첸 A: modinfo – snd-ac97-codec.ko 첸 B: lsmod –a snd-ac97-codec.ko 첸 C: modprobe snd-ac97-codec.ko 첸 D: insmod –d snd-ac97-codec.ko Frage 112: lsmod zeigt Informationen über
첸 A: alle geladenen Module 첸 B: alle update-fähigen Module 첸 C: alle nicht update-fähigen Module 첸 D: alle entladbaren Module Frage 113: Welches Kommando entfernt ein Modul aus dem laufenden Kernel? 첸 A: rmmod 첸 B: remove -mod 첸 C: delmod 첸 D: unload module Frage 114: Welches Programm erstellt oder aktualisiert die Datei modules.conf?
Frage 115: Welches der folgenden Kommandos können Sie benutzen, um Module in einen Kernel mit der Version 2.4 zu laden? 첸 A: vi/proc/modules 첸 B: rmmod 첸 C: kmod 첸 D: depmod
239
1451.book Seite 240 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 116: Das Kommando ______ listet die momentan in den Kernel geladenen Module auf. Frage 117: Sie haben Änderungen an der lilo.conf vorgenommen. Mit welchem Kommando schreiben Sie diese Änderungen in den MBR?
Frage 118: Wohin kann Lilo das Bootmenü bzw. die Bootinformationen speichern? 첸 A: MBR 첸 B: BIOS 첸 C: erster Sektor der Startpartition 첸 D: BOOT-ROM Frage 119: Welche Datei enthält Protokollierungseinträge auf Kernel-Ebene, wie die Ausgabe eines Netzwerktreibers, während er geladen wird?
Frage 120: Welcher Bootloader kann Windows vorgaukeln, er wäre auf der ersten Partition der ersten angeschlossenen Festplatte installiert? 첸 A: GRUB 첸 B: XLOAD 첸 C: FILO 첸 D: LILO Frage 121: Welches Kommando kann verwendet werden, um Kernel-Meldungen zu lesen? 첸 A: less dmesg 첸 B: less /var/log/boot.log 첸 C: cat /proc/kernel |less 첸 D: cat /proc/dmesg
240
1451.book Seite 241 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 122: Welche Runlevel sollten nicht in der inittab als default angegeben werden? 첸 A: 1 첸 B: 3 첸 C: 5 첸 D: 6 Frage 123: Sie befinden sich in Runlevel 5 und möchten zum Runlevel 1 wechseln. Welches Kommando ist hier erforderlich?
Frage 124: Sie müssen den Default-Runlevel ändern. Welche Datei modifizieren Sie? 첸 A: /etc/init.d 첸 B: /etc/init-table 첸 C: /etc/inittab 첸 D: /etc/init Frage 125: Sie planen, einen Server vom Netzwerk zu trennen, mit dem mehrere Benutzer verbunden sind. Mit welchem Befehl sollten Sie den Server herunterfahren? 첸 A: init 0 첸 B: init S 첸 C: shutdown –r 첸 D: shutdown -h Frage 126: Welcher Prozess verwendet die PID 1?
241
1451.book Seite 242 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 127: In welcher Sektion der Manpages findet man Informationen zu Konfigurationsdateien? 첸 A: 1 첸 B: 3 첸 C: 5 첸 D: 8 Frage 128: In welcher Sektion der Manpages findet man Informationen zu Administrationsprogrammen? 첸 A: 1 첸 B: 3 첸 C: 5 첸 D: 8 Frage 129: Sie benötigen eine Auflistung aller Manpages, die sich mit der Thematik ppp auseinandersetzen. Welches Kommando führen Sie aus? 첸 A: whatis ppp 첸 B: man ppp 첸 C: apropos ppp 첸 D: mandb ppp Frage 130: Der Inhalt welcher Datei wird angezeigt, BEVOR sich ein Benutzer lokal am System anmeldet? 첸 A: /etc/local.banner 첸 B: /etc/issue 첸 C: /etc/issue.net 첸 D: /etc/motd
242
1451.book Seite 243 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 131: In welcher Konfigurationsdatei passen Sie Shell-Variablen an, die für alle Benutzer wirksam sind? 첸 A: /etc/bashrc 첸 B: /etc/profile 첸 C: ~/.bash_profile 첸 D: /etc/skel/.bashrc 첸 E: /etc/skel/.bash_profile Frage 132: Welche beiden Konfigurationsdateien im Heimatverzeichnis eines Benutzers konfigurieren die Bash-Umgebung? 첸 A: bash und .bashrc 첸 B: bashrc und bash_conf 첸 C: bashrc und bashprofile 첸 D: .bashrc und .bash_profile 첸 E: bash.conf und bash_profile Frage 133: Sie geben das Kommando export proxy_http=http://192.168.0.1:3128. Wie können Sie die Übergabe dieser Variablen rückgängig machen? Geben Sie das Kommando an! _____________proxy_http Frage 134: Welches Kommando erlaubt es, eine Shell-Variable mit dem Namen VARIABLE für Subshells sichtbar zu machen? 첸 A: export $VARIABLE 첸 B: export VARIABLE 첸 C: set $VARIABLE 첸 D: set VARIABLE 첸 E: env VARIABLE
243
1451.book Seite 244 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 135: Sie beabsichtigen, für alle Benutzer der Bash einen neuen Pfad der PATH Variablen hinzuzufügen, sobald sie sich neu anmelden. Welche Konfigurationsdatei ist hierfür zuständig?
Frage 136: Ein Benutzer möchte für sich selbst die PATH-Variable modifizieren. Welche Konfigurationsdatei muss er bearbeiten?
Frage 137: Welches Kommando würde die Datei ld.so.cache neu erstellen? 첸 A: ldd 첸 B: ldconfig 첸 C: ld.so.cache –rebuild 첸 D: ld Frage 138: Welche Datei sollten Sie bearbeiten, um dem System Informationen über hinzugefügte Library Dateien mitzuteilen? 첸 A: /etc/modules.conf 첸 B: /etc/conf.modules 첸 C: /etc/ld.so.conf 첸 D: /etc/ld.so.cache 첸 E: /etc/LD_LIBRARY_PATH.conf Frage 139: Wenn Sie die Festplattenbelegung eines Systems prüfen wollen, ist ______ der einfachste Befehl, um diese Informationen zu erhalten.
244
1451.book Seite 245 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 140: Sie haben Probleme mit einer Festplattenpartition und müssen einige Wartungsaufgaben durchführen. Auf dieser Partition liegen die Heimatverzeichnisse mancher Benutzer, die jetzt auch gerade angemeldet sind. Welches Kommando wird diese Benutzer trennen und dafür sorgen, dass die Wartungsarbeiten sicher durchgeführt werden können? 첸 A: telinit 1 첸 B: shutdown –r now 첸 C: killall –9 inetd 첸 D: /bin/netstop –maint 첸 E: /etc/rc.d/init.d/network stop Frage 141: Sie müssen alle Ihre Benutzer informieren, dass Sie gleich einen Dienst beenden müssen, den diese gerade verwenden. Welches Kommando wird Ihnen ermöglichen, eine Nachricht an alle angemeldeten Benutzer zu senden? Geben Sie nur das Kommando an, keine Optionen.
Frage 142: Welches Kommando ist funktional äquivalent zu man –f suchwort? 첸 A: whatis suchwort 첸 B: apropos suchwort 첸 C: locate suchwort 첸 D: find suchwort 첸 E: keines der angegebenen Frage 143: Geben Sie das Kommando an, das äquivalent zu man –k ist:
245
1451.book Seite 246 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 144: Wie schalten Sie innerhalb des Editors vi die Zeilennummerierung (nicht druckbar) ein? 첸 A: :set num 첸 B: :se nu 첸 C: :set –o number 첸 D: :set +o num 첸 E: keine der angegebenen Frage 145: Was bewirkt das folgende Kommando? export PATH=$PATH:$APPLICATIONS
첸 A: eine Änderung der Pfadvariablen auf das Applikationsverzeichnis 첸 B: Aktualisierung der Pfadvariablen mit dem Inhalt von $APPLICATIONS 첸 C: alle NFS-Benutzer können das Applikationsverzeichnis direkt mounten 첸 D: erweitert die Pfadvariable um das Applikationsverzeichnis Frage 146: Sie haben gerade einen neuen Eintrag in der Datei /etc/exports erstellt. Welche der folgenden Aktionen wird dafür sorgen, dass sich die gemachten Änderungen auswirken, ohne dass es eine Unterbrechung für die aktuell verbundenen Benutzer gibt oder die Maschine sogar neu gestartet werden muss? Wählen Sie alle zutreffenden Aktionen. 첸 A: exportfs –a 첸 B: /etc/rc.d/init.d/nfs restart 첸 C: service nfs restart 첸 D: kill –1 HUP nfs 첸 E: init 1 Frage 147: Sie haben Ihrer PATH Umgebungsvariablen den Pfad /usr/local/bin hinzugefügt. Als Nächstes führen Sie das Kommando make aus, das seinerseits gcc aufruft. Dieser Aufruf schlägt fehl, weil gcc die benötigten Dateien im Verzeichnis /usr/local/ bin nicht findet. Um dieses Problem zu lösen, sollten Sie ________PATH allowable ausführen.
246
1451.book Seite 247 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 148: Das Zusammenspiel welcher beiden Dateien macht die Login-Umgebung eines Benutzers auf einer normal installierten Linux-Maschine aus? 첸 A: /etc/profile 첸 B: /etc/bashrc 첸 C: /etc/.login 첸 D: ~/.bash_profile 첸 E: /etc/.profile Frage 149: Was ist der Zweck des Bash-builtin-Kommandos export? 첸 A: Es erlaubt allen Festplatten, remote eingehängt zu werden. 첸 B: Es erlaubt das Ausführen eines Kommandos in einer Subshell. 첸 C: Es macht die Kommando-History für Subshells verfügbar. 첸 D: Es setzt Umgebungsvariablen für Anwendungsprogramme. 첸 E: Es gibt NFS-Partitionen zur Benutzung durch andere Systeme frei. Frage 150: Sie möchten alle Dokumente, die in Ihrem Heimverzeichnis liegen und mit dem Wort projects beginnen, in eine Datei namens myprojects.tar.gz archivieren und komprimieren. Sie befinden sich aktuell in Ihrem Heimverzeichnis. Geben Sie das Kommando ein, das diese Aufgabe löst.
Frage 151: Sie haben einen Tarball mit der Bezeichnung myprojects.tar.gz und möchten sich die Berechtigungen und Eigentümerschaft seines Inhaltes anzeigen, ohne ihn zu entpacken. Geben Sie das Kommando ein, das diese Aufgabe löst.
Frage 152: Sie haben gerade eine Anwendung mit der Bezeichnung rdesktop aus dem Internet herunter geladen. Die heruntergeladene Datei heißt rdesktop.tar.gz. Mit welchem Kommando können Sie die Datei entkomprimieren und entarchivieren?
247
1451.book Seite 248 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 153: Welches Dateisystem sollte niemals gesichert werden und wird demzufolge auch niemals wiederhergestellt? 첸 A: ufs 첸 B: usr 첸 C: tmp 첸 D: home 첸 E: swap Frage 154: Für welches Dateisystem ist das Kommando dump auf einem gewöhnlichen LinuxSystem zuständig? 첸 A: Ext2 첸 B: UFS 첸 C: JFS 첸 D: XFS 첸 E: ReiserFS Frage 155: Welcher Verzeichniszweig ist der, bei dem eine Datensicherung am wenigsten Sinn macht? 첸 A: /tmp 첸 B: /var 첸 C: /proc 첸 D: /usr 첸 E: /etc
248
1451.book Seite 249 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Antworten und Erklärungen zu den Übungsfragen Frage 1: A: bg 1 das Kommando bg setzt Programme im Hintergrund fort. Die 1 ist die Jobnummer des entsprechenden Programms, nicht die PID! 왘
zu B und C: Die Kommandos continue und exec sind Bash-interne Befehle zur Programmierung von Skripten.
왘
zu D: fg programm würde das Programm im Vordergrund ausführen.
왘
zu E: programm & startet das Programm und sorgt sofort dafür, dass dieses im Status »laufend« in den Hintergrund gebracht wird.
Frage 2: D: expand datei1 konvertiert Tabs in Leerzeichen und ist das Gegenstück zu unexpand.
Das Kommando file ermittelt den Typ einer Datei. Das Programm wc zählt Worte, Zeilen und Bytes einer Datei. Frage 3: C: -maxdepth – Mit dieser Option kann die maximal zu durchsuchende Verzeichnistiefe festgelegt werden. Die Reihenfolge der Optionen muss hierbei eingehalten werden. Beispiel: archangel:~ # find / -maxdepth 2 -name named.conf /etc/named.conf
Frage 4: C: hald ist der hardware abstraction layer daemon. Frage 5: A: grep -v ^# /etc/named.conf Das -v invertiert die Ausgabe, und ^ ist das Zeichen für den Zeilenanfang. 왘
zu B: grep ^# /etc/named.conf würde ausschließlich Kommentarzeilen ausgeben.
왘
zu C: grep #$ /etc/named.conf zeigt alle Zeilen an, die eine Raute (#) am Zeilenende ($) aufweisen.
왘
zu D: grep -v #$ /etc/named.conf zeigt alle Zeilen an, die keine Raute (#) am Zeilenende ($) aufweisen.
249
1451.book Seite 250 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 6: D: less /proc/pci Eigentlich ist diese Antwort veraltet. Neuere Kernel-Versionen verwenden dieses Verzeichnis nicht mehr. Heutige Kernel verwenden eine ganze Verzeichnishierarchie unter /proc/bus/pci. E: lspci | less Das Kommando lspci listet die PCI-Geräte eines Systems auf. Gegen eine Übergabe der Ausgabe an den Pager less ist nichts einzuwenden. 왘
zu A: Der Pager less würde versuchen, eine Datei mit der Bezeichnung lspci zu öffnen. Daraus würde eine Fehlermeldung resultieren.
왘
zu B: Die Datei /dev/pci existiert nicht. Auch hier würde less eine Fehlermeldung ausgeben.
왘
zu C: Es gibt unterhalb von /proc kein Verzeichnis namens devices.
Frage 7: E: MAC-Adresse einer Ethernet-Karte Alle anderen Antworten enthalten Parameter, die eine starke Affinität zum PCIBus aufweisen. Diese werden dementsprechend auch alle angezeigt. Frage 8: B: Sie benutzen den falschen Kernel für dieses Gerät. USB wird von Kerneln erst ab Version 2.2.18 unterstützt. Die Frage impliziert zwar, dass es sich um den korrekten Kernel handelt, aber die übrigen Antworten können mit Sicherheit als falsch ausgeschlossen werden. 왘
zu A: Die Datei usb.usermap wird nur für hotplug benötigt.
왘
zu C: Eine Kompatibilität mit USB 2.0 ist nicht nur unnötig, sondern würde überhaupt erst mit einem 2.4er-Kernel unterstützt.
왘
zu D: USB-Ressourcenkonflikte kommen eher selten vor.
Frage 9: B: Sie müssen den Kernel aktualisieren. USB wird erst ab Kernel 2.2.18 unterstützt.
250
1451.book Seite 251 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 10: E: Aktualisieren Sie Ihr BIOS mit der neuesten Version. Veraltete BIOS-Versionen sind die häufigste Ursache dafür, dass eine Festplatte vom Betriebssystem nicht mit ihrer vollen Kapazität erkannt wird. 왘
zu A: Das geht nicht, wenn das Betriebssystem lediglich von einer 32-GB-Festplatte ausgeht.
왘
zu B: Wäre der LBA-Modus ausgeschaltet, würde das System eine noch bedeutend kleinere Festplatte (nämlich 504 MB) anzeigen.
왘
zu C: Mit dieser Methode kann man lediglich Problemen beim Systemstart vorbeugen.
왘
zu D: Der verwendete Bootloader spielt in diesem Zusammenhang keine Rolle.
Frage 11: /dev/sdb Frage 12: D: der Speicherort, an dem sich das Verzeichnis /boot befindet Deshalb sollte auch immer zuerst eine kleine Partition (ca. 50 MB) für das Dateisystem /boot erstellt werden. 왘
zu A: LILO befindet sich wahrscheinlich ohnehin im MBR (Zylinder 0, Sektor 0).
왘
zu B: Das Dateisystem /var ist für den Systemstart nicht kritisch.
왘
zu C und E: Die Leistungswerte einer Festplatte sind lediglich für die Geschwindigkeit des Systemstarts, nicht aber für seine grundsätzliche Funktion relevant.
Frage 13: D: lilo -u Mit diesem Kommando wird der LILO deinstalliert und eine Sicherungskopie des MBR wiederhergestellt.
251
1451.book Seite 252 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 14: B: lilo -d 30 Die Option -d erwartet eine Verzögerungszeit in 10tel-Sekunden. Wenn der Parameter delay in der Datei /etc/lilo.conf angegeben wurde, dann wird die Option -d ignoriert. Die anderen drei Antworten laufen auf eine Fehlermeldung hinaus. Frage 15: A: delay Frage 16: A: -q Die Optionen der falschen Antworten sind für die Prüfung nicht von Belang. Frage 17: C: vga Frage 18: A: -R Frage 19: B: Sie haben vergessen, vor dem Neustart das Kommando lilo auszuführen. Auch dann, wenn der neue Kernel denselben Dateinamen trägt wie der zuvor verwendete, ist es notwendig, einmalig lilo auszuführen, damit der neue Kernel verwendet wird. 왘
zu A: Das kann nicht sein, weil an der Partitionierung keine Änderung durchgeführt wurde.
왘
zu C: Das ist nicht nötig, weil der Dateiname des Kernels beibehalten wurde. Was sollte man also ändern?
왘
zu D: Damit wird das Problem nicht behoben.
왘
zu E: Da das System vorher funktioniert hat, kann man diese Möglichkeit ausschließen.
Frage 20: C: im MBR auf einer Festplatte
252
1451.book Seite 253 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Das ist wohl der meistgenutzte Speicherort für die erste Stufe eines Bootloaders. Die anderen drei Antworten sind Unsinn. Frage 21: meinkernel
Ein Kernel kann einfach mit seinem Namen oder mit seinem Alias aufgerufen und gestartet werden. Frage 22: A: read-only Frage 23: A: root Die Antwort ist absolut selbsterklärend. Frage 24: head
Per Voreinstellung gibt head die ersten zehn Zeilen einer angegebenen Datei aus. Frage 25: D: rm -rf /tmp/* Hierbei steht -r für die rekursive Ausführung des Kommandos, während das f das Löschen erzwingt (force). Frage 26: mv /home/willi/* /home/wilhelm
Frage 27: cd
Die Antwort cd ~ wäre hier falsch gewesen. Das Ergebnis wäre zwar dasselbe, aber es ist ausdrücklich gefordert, dass kein Pfad angegeben werden soll. Das gilt somit auch für die Tilde (~). Frage 28: tee
Mit dem Kommando tee (T-Stück) können Sie die Ausgabe eines Programms so verzweigen, dass die Ausgabe auf dem Bildschirm und in einer Datei erfolgt.
253
1451.book Seite 254 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 29: C: Der Prozess mit der PID 4711 liest seine Konfigurationsdateien neu ein. Das Signal HUP (auch SIGHUP) bewirkt, dass ein Programm seine Konfiguration neu einliest. 왘
zu A: Wäre passend zu kill -KILL 4711.
왘
zu B: Wäre passend zu kill -TERM 4711.
왘
zu D: Von einem Modem ist keine Rede.
Frage 30: E: Das Programm wurde fehlerfrei ausgeführt. Der Statuscode 0 weist auf eine saubere Programmausführung hin. Alle anderen Werte in der Variablen $? (meist 1 oder 127) sind Hinweise auf einen Fehler. Frage 31: E: 15 (SIGTERM) SIGTERM ist der Default-Wert von kill. Alle anderen Signale müssen ausdrücklich angegeben werden. Frage 32: Da das Kommando kill recht flexibel eingesetzt werden kann, sind mehrere Antworten denkbar: 왘
kill –9 17461
왘
kill -s 9 17461
왘
kill -s kill 17461
왘
kill -s sigkill 17461
왘
kill -s KILL 17461
왘
kill -s SIGKILL 17461
왘
kill -kill 17461
왘
kill -sigkill 17461
왘
kill -KILL 17461
왘
kill -SIGKILL 17461
Frage 33: nohup
254
1451.book Seite 255 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Dieses Kommando verhindert, dass einem Prozess ein SIGTERM-Signal gesendet werden kann. Das gilt auch dann, wenn die Shell, auf der das Programm gestartet wurde, beendet wird. Frage 34: runlevel
Das Kommando runlevel zeigt den aktuellen und den vorangegangenen Runlevel eines Systems an. Frage 35: C: shutdown -r Das -r steht hierbei für reboot. 왘
zu B: shutdown -c bricht einen laufenden shutdown ab (cancel).
왘
zu A und D: Diese Optionen werden mit shutdown nicht verwendet.
Frage 36: C: programm3 In allen drei Fällen wurden positive Werte an nice übergeben. Da ein hoher positiver Wert für nice die Prozesspriorität absenkt, hat programm3 die höchste Priorität. Frage 37: /^Dokumente
Der Slash (/) besagt, dass der vi etwas suchen muss. Das Zeichen ^ ist der Anker für den Zeilenanfang. Anschließend folgt das eigentliche Suchwort. Frage 38: /A4\.[1-7] – um die Suche einzuleiten, muss ein Slash vorangestellt werden. A4\.[1-7] ist der rein reguläre Ausdruck für die Suche.
Das Zeichen A4 steht für sich selbst. An der dritten Position folgt ein Punkt, der durch einen Backslash geschützt werden muss, weil er sonst durch den vi interpretiert würde. Ausdrücke in rechteckigen Klammern ersetzen immer genau ein Zeichen, in diesem Fall die Zeichen von 1 bis 7 an Position 4. Frage 39: B: cat
255
1451.book Seite 256 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 40: A: df Die prozentuale Belegung der Dateisysteme ist in der normalen Ausgabe enthalten. Sie brauchen keine Optionen zu übergeben. Frage 41: C: df -k ist die richtige Antwort. 왘
zu B: Mit df -h wird die Anzeige human readable. Die Ausgabe wird also angenehmerweise in Kilobyte, Megabyte usw. durchgeführt.
왘
zu A, D und E: Das Kommando du wird verwendet, um die Festplattenbelegung einer Datei oder eines Verzeichnisses zu bestimmen.
Frage 42: fsck
Frage 43: A: fsck.ext2 B: fsck -t ext2 C: e2fsck Alle drei Kommandos bewirken das Gleiche. Lediglich Antwort D ist nicht möglich. Frage 44: D: shutdown -f Durch die Option -F wird übrigens das genaue Gegenteil bewirkt. Hier besteht Verwechslungsgefahr! 왘
zu A: shutdown -s steht für stop.
왘
zu B: shutdown -o gibt es nicht.
왘
zu C: shutdown -r steht für reboot.
Frage 45: A: noauto Frage 46: B: Informationen über Dateisysteme und Einhängepunkte
256
1451.book Seite 257 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 47: B: grpquota Eine Stolperfalle in der Prüfung stellt die Verwechslungsgefahr durch ähnlich klingende Begriffe in Zusammenhang mit Quota und insbesondere Groupquota dar. Frage 48: mount -a
Mit diesem Kommando werden alle in der Datei /etc/fstab aufgeführten Dateisysteme eingehängt, wenn sie nicht bereits eingehängt sind. Frage 49: dd if=/dev/hda1 of=/dev/hdb1
Das ist die namensgebende Verwendung des dd-Kommandos (disc dump). Frage 50: /home Da es sich um einen Dateiserver handeln soll, der von vielen Benutzern verwendet wird, ist im Verzeichnis /home mit einem hohen Datenaufkommen zu rechnen. Frage 51: C: repquota -a Dieses Kommando erstellt einen Report über alle Quotierungen auf allen Dateisystemen, die in der Datei /etc/fstab eingetragen sind. 왘
zu A und D: Das Kommando quotarep gibt es nicht.
왘
zu B: Das Kommando repquota /dev/hd* versucht, einen Quotareport zu allen Dateisystemen zu erstellen, für die es eine Gerätedatei gibt, die mit /dev/hd beginnt. Als Ergebnis erhalten Sie sehr viele Fehlermeldungen.
Frage 52: /var Es gibt in der Frage mehrere Hinweise darauf, dass das /var-Dateisystem in diesem Fall besonders große Datenmengen enthalten kann. Mails liegen hier zumindest so lange, bis ein Benutzer diese abgeholt hat, und Protokollierungen werden normalerweise unterhalb von /var/log durchgeführt.
257
1451.book Seite 258 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 53: B: 022 Das ist absoluter Standard. Es kommt sehr selten vor, dass eine Distribution eine andere umask verwendet. Frage 54: C: /etc/profile Frage 55: B: Ausführrechte E: Leserecht Frage 56: B: chmod 0744 /home/hans -R C: chmod -R u=rwx,g=r,o=r /home/hans Beide Kommandos liefern dasselbe Ergebnis. Das -R sorgt für eine rekursive Verarbeitung, sodass auch alle Unterverzeichnisse und Dateien erfasst werden. 왘
zu A: chmod 744 /home/hans/* – hier wird nur der Modus der Dateien und Verzeichnisse geändert, die sich direkt unterhalb von /home/hans befinden. Unterverzeichnisse bleiben unberücksichtigt.
왘
zu D: chmod u+rwx,g+r,o+r /home/hans ändert nur den Modus für das Verzeichnis /home/hans selbst. Der Inhalt bleibt unverändert.
Frage 57: which prog1
Das Kommando which zeigt den Pfad zu einem Programm an, das ohne Angabe eines Pfades ausgeführt werden kann. Sollten mehrere Programme mit dem gleichen Namen vorkommen, zeigt which an, welches Programm theoretisch bei Aufruf des Kommandos ausgeführt würde. Daher der Name which. Frage 58: find ist hier das richtige Werkzeug.
Frage 59: D: whereis
258
1451.book Seite 259 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Mit whereis werden die gefragten Informationen ausgegeben. 왘
zu A: find dient dem Auffinden von Dateien anhand von gegebenen Suchkriterien.
왘
zu B: locate findet Dateien mithilfe einer eigenen Indexdatei.
왘
zu C: apropos durchsucht Manpage-Namen und -Beschreibungen nach einem Suchwort.
왘
zu E: whatis durchsucht die Beschreibungen von Manpages nach einem Suchwort.
Frage 60: B: /etc/updatedb.conf Die Datei updatedb.conf ist die Konfigurationsdatei für das Programm locate. Alle Einstellungen für locate werden hier festgelegt. Frage 61: D: init q 왘
zu A: init r ergibt eine Fehlermeldung, weil das Kommando init die Option r nicht verwendet.
왘
zu B und D: inittab ist keine ausführbare Datei. Diese Kommandos können also auch nichts bewirken.
Frage 62: /etc/inittab Der geforderte Eintrag in dieser Datei sollte bei den meisten Distributionen so aussehen: id:5:initdefault:
Es gibt allerdings auch Distributionen, bei denen die grafische Anmeldung in einem anderen Runlevel als 5 gestartet wird. Frage 63: C: 7:2:wait:/etc/meinprozess Die Ziffer 7 dient lediglich als Label. Die Ziffer 2 bezeichnet den Runlevel. Das wait sorgt für eine synchrone Verarbeitung, sodass auf die Fertigstellung des Kommandos gewartet wird, bevor das System den Startvorgang fortsetzt.
259
1451.book Seite 260 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 64: B: /etc/inittab Die anderen drei Antworten sind frei erfunden. Frage 65: C: :!ls -l Mit einem Doppelpunkt, gefolgt von einem Ausrufezeichen, leiten Sie innerhalb des Editors vi ein Kommando ein. Nachdem das Kommando ausgeführt wurde, können Sie den Editor durch einfaches Betätigen der Eingabetaste fortsetzen. Die übrigen drei Kommandos werden eine Fehlermeldung nach sich ziehen. Frage 66: D: Nur root kann die Priorität höher als 0 setzen. Damit ein Benutzer nicht das ganze Betriebssystem lahmlegen kann, ist es ihm verboten, einem Programm eine höhere Priorität zuzuweisen. Frage 67: A: od Das Kommando od erstellt per Voreinstellung Octaldumps. 왘
zu B und C: Diese Kommandos gibt es nicht.
왘
zu D: Das Kommando cat kennt keine Option -o.
Frage 68: C: mkdir -p photos/urlaub/2007/gebirge/ Mit der Option -p (wie parents) erstellt mkdir ganze Verzeichnishierarchien. Frage 69: D: renice –20 7353 Um die Priorität eines laufenden Prozesses mit renice zu erhöhen, muss renice ein negatives Vorzeichen vorangestellt werden. 왘
zu A: Wegen des positiven Vorzeichens würde die Priorität gesenkt werden.
왘
zu B und C: setpriority ist kein Shell-Kommando unter Linux.
260
1451.book Seite 261 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 70: expand
Das Gegenstück wäre übrigens unexpand. Frage 71: C: f Mit (Strg) + (F) wird in vi eine Bildschirmseite vorgeblättert. (Strg) + (B) blättert eine Seite zurück. 왘
zu A: (Strg) + (A) sucht nach dem nächsten Vorkommen des Wortes unter dem Cursor.
왘
zu B: (Strg) + (D) bewegt den Cursor um einen halben Bildschirm vor.
왘
zu D: (Strg) + (U) bewegt den Cursor um einen halben Bildschirm zurück.
Frage 72: B: nl ist das »offizielle« Kommando. C: cat -n funktioniert ebenfalls. 왘
zu A: Hier besteht eine gewisse Verwechslungsgefahr. Das Programm ln erstellt Links, keine Zeilennummern.
왘
zu D: Dieses Kommando gibt es nicht.
왘
zu E: Dieses Programm ersetzt einzelne Zeichen in einer Textdatei.
Prüfungstipp Wenn mehrere Antworten zu einer Frage richtig sind, dann sollten Sie bei einer Frage, die nur eine Antwort zulässt, die »offizielle« Variante wählen. Das Kommando nl ist hier demnach im Zweifelsfall die bessere Wahl, weil es sein einziger Verwendungszweck ist, Zeilen zu nummerieren.
Frage 73: E: top ist hierfür das richtige Programm. 왘
zu A: Mit nice werden Prozessprioritäten verwaltet.
왘
zu B und C: Das sind keine Standardprogramme unter Linux.
왘
zu D: Mit ps können Sie lediglich sehen, welche Prozesse laufen, aber nicht wie viel Last sie erzeugen.
261
1451.book Seite 262 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 74: B: (Strg) + (Z) ist die richtige Lösung. 왘
zu A: (Strg) + (C) bricht ein Programm ab.
왘
zu C: (Strg) + (X) ist kein übliches Kürzel für die Bash.
왘
zu D: (Strg) + (D) sendet ein EOF (z.B. zum Versenden einer Mail mit dem Programm mail).
Frage 75: D: ls >> Dateiliste Der doppelte Redirektor sorgt dafür, dass die Datei nicht gelöscht, sondern das Ergebnis des Befehls an die Datei angehängt wird. 왘
zu A, B und C: Alle drei Kommandos würden die ursprüngliche Dateiliste zuerst löschen, also überschreiben.
Frage 76: A: uniq ist das korrekte Kommando. 왘
zu B und C: Das sind keine Shell-Kommandos unter Linux.
왘
zu D: Dieses Kommando zählt Zeilen, Worte und Bytes einer Datei.
Frage 77: D: usrquota Prüfungstipp Das ist die richtige Option. Machen Sie sich für die Prüfung vertraut mit den verschiedenen Kommandos, Dateinamen und Optionen zu dieser Thematik. Es besteht hier eine hohe Verwechslungsgefahr!
Frage 78: C: mke2fs -j /dev/hda4 Eigentlich dient mke2fs der Erstellung von ext2-Dateisystemen. Bei ext3 handelt es sich allerdings im Prinzip um ein ext2-Dateisystem mit einem Journal. Dieses Journal wird durch die Option -j erzeugt. 왘
zu A: Die Option -d gibt es nicht bei diesem Kommando.
왘
zu B: Mit der Option -m 3 reserviert mke2fs 3% aller Blöcke auf dem Dateisystem für den root.
262
1451.book Seite 263 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
왘
zu D: Die Option -c sorgt für eine Prüfung der Festplatte, bevor die Formatierung durchgeführt wird.
Frage 79: B: quota hans Das Kommando quota listet Quotierungen und Belegungen auf. Es können u.a. Benutzer oder Gruppenquota geprüft werden. 왘
zu A: Das Kommando repquota dient der Auflistung von Quotierungen auf Basis eines Dateisystems, nicht eines Users.
왘
zu C und D: Das sind keine gültigen Kommandos unter Linux.
Frage 80: D: >/dev/null 2>&1 ist die übliche Vorgehensweise. 왘
zu A: leitet nur stdout um, aber nicht stderr.
왘
zu B, C und E: Das sind keine üblichen Konstrukte für eine Umleitung.
Frage 81: D: lsattr test.txt 왘
zu A: Die Option --attr gibt es nicht für ls.
왘
zu B und C: Diese Kommandos gibt es nicht bei Linux.
Frage 82: C: /etc/fstab Die anderen drei Konfigurationsdateien gibt es nicht. Frage 83: B: 0022 Um die umask zu ermitteln, müssen Sie den numerischen Wert für die gewünschten Dateirechte von 666 subtrahieren. In diesem Falle 666 – 644 = 22. Danach werden nur noch die führenden Nullen ergänzt und man erhält 0022. Frage 84: B: user
263
1451.book Seite 264 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 85: B: APM Da ACPI ohnehin alle Funktionen von APM beinhaltet, wird APM deaktiviert, wenn ACPI genutzt werden kann. Frage 86: alien
Mit alien können auch noch andere Formate konvertiert werden. Frage 87: C: rpm -U zip-2.3-741.i586.rpm Mit der Option -U wird rpm im Update-Modus verwendet. Die Aktualisierung wird dann durchgeführt. Sie können diesen Modus auch dann verwenden, wenn noch keine Vorgängerversion des fraglichen Paketes vorhanden ist. 왘
zu A: Das hat beim ersten Mal schon nicht funktioniert.
왘
zu B: Ein Verbose-Mode und Hashes (####) werden die Installation nicht ermöglichen.
왘
zu D und E: Die erste Option ist jeweils ein -q, wodurch lediglich eine Abfrage von Paketen eingeleitet wird, aber keine Installation.
Frage 88: C: /dev/ttyS0 Hierbei stehen tty für Teletyper und das große S für serielle Schnittstelle. Die Nummerierung beginnt bei Linux mit 0. Frage 89: B: dpkg -L erstellt eine Liste der Dateien, die ein DPKG-Paket installiert hat. 왘
zu A: dpkg -l listet ein Suchmuster übereinstimmender Pakete auf.
왘
zu C: dpkg -C sucht nach teilweise installierten Paketen.
왘
zu D: dpkg -s zeigt den Status eines angegebenen Paketes an.
왘
zu E: dpkg -S sucht nach einem Dateinamen in installierten Paketen.
Frage 90: C: /dev/hdb4
264
1451.book Seite 265 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
GRUB nummeriert sowohl die Festplatten als auch die Partitionen mit 0 beginnend. Deshalb ist hd1 die zweite Festplatte, die als Gerätedatei mit hdb bezeichnet würde. Die Partition 3 ist demnach die vierte Partition. Das ergibt als Gerätedatei samt Pfad: /dev/hdb4. Frage 91: D: dpkg -r paket entfernt (remove) ein Paket unter Beibehaltung von Konfigurationsdateien. 왘
zu A: Dieser Befehl erstellt eine Liste der Dateien, die ein DPKG-Paket installiert haben.
왘
zu B: Der Befehl erstellt eine Liste der Dateien, die ein Paket installiert haben.
왘
zu C: Dieses Kommando entfernt auch die Konfigurationsdateien (Purge).
Frage 92: B: rpm -qpl zip-2.3-741.i586.rpm Die Option -q (query) leitet eine Abfrage ein, die durch die folgenden Optionen näher spezifiziert wird. Das p zeigt an, dass ein noch nicht installiertes Paket untersucht werden soll. Dieses Paket muss als Argument angegeben werden. Das l steht für die Liste der Dateien, die angezeigt werden soll. Frage 93: C: dpkg -r entfernt (remove) ein Paket unter Beibehaltung von Konfigurationsdateien. Frage 94: D: alien Mit alien können auch noch andere Formate konvertiert werden. Frage 95: A: rpm -qp --changelog zip-2.3-741.i586.rpm Die Option -q (query) leitet eine Abfrage ein, die durch die folgenden Optionen näher spezifiziert wird. Das p zeigt an, dass ein noch nicht installiertes Paket untersucht werden soll. Dieses Paket muss als Argument angegeben werden. Die Option --changelog fragt die Änderungsinformationen des Paketes ab.
265
1451.book Seite 266 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 96: E: apt-get update Dieses Kommando führt die gewünschte Operation durch. Ein Update von apt-get wird üblicherweise vor apt-get upgrade ausgeführt. Mit dem Upgrade werden die Pakete selbst aktualisiert. Da ist es natürlich sinnvoll, vorher die aktuellen Quellen zu kennen. Frage 97: A: dpkg -L listet den Inhalt eines DPKG-Paketes auf. 왘
zu B, C und D: Diese Kommandos gibt es nicht mit den jeweils angegebenen Optionen.
Frage 98: A: dpkg C: dselect Die Antworten B und D sind frei erfunden. Frage 99: C: chown hanz:panz liste Das ist die korrekte Syntax. Alle anderen Antworten werden eine Fehlermeldung zur Folge haben. Frage 100: E: Die Quelle und das Ziel befinden sich auf verschiedenen Dateisystemen. Ein Hardlink ist ein weiterer Dateiname für eine vorhandene Datei. Nach seiner Erstellung ist der Hardlink von der Zieldatei nicht mehr zu unterscheiden. Im Gegensatz zu einem Softlink ist ein Hardlink also selbst keine Datei, die nur auf eine andere Datei zeigt. Deshalb muss sich ein Hardlink auf derselben Partition befinden wie seine Zieldatei. Frage 101: D: repquota Frage 102: A: 1
266
1451.book Seite 267 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 103: B: 000 Um die umask zu ermitteln, müssen Sie den numerischen Wert für die Dateirechte von 666 subtrahieren. In diesem Falle also: 666 – 666 = 000. Frage 104: C: df -i Frage 105: B: cut -d: -f 1,3 /etc/passwd Mit dem Kommando cut können Sie Spalten einer Datei ausschneiden. Dies geschieht aber nicht im Sinn von Entfernen der Spalten, sondern es werden die mit -f angegebenen Spalten »herausgeholt«. Die Option -d legt den Delimiter, also das Trennzeichen für die Spalten, fest. Das ist in diesem Fall ein Doppelpunkt. 왘
zu A: chop entfernt u.a. Leerzeichen und Tabulatoren aus einer Datei.
왘
zu C: tac gibt eine Datei umgekehrt aus. Die letzte Zeile wird zuerst ausgegeben, die erste Zeile zum Schluss.
왘
zu D: fmt ist ein einfaches Textformatierungsprogramm.
Frage 106: C: alias Frage 107: C: d13d E: 13dd Prüfungstipp Sie sollten für die Prüfung mit den gängigsten Kommandos des vi vertraut sein. Fragen zu diesem Editor sind immer noch absolut aktuell.
Frage 108: D: sed –i 's/hans/haenschen/g' test.csv Das s sorgt dafür, dass sed hans mit haenschen substituiert. Mit dem g wird das Kommando globalisiert. Ohne dieses g würde sed nur das erste Vorkommen der Zeichenkette hans einer jeden Zeile ersetzen. Mit der Option –i wird bewirkt,
267
1451.book Seite 268 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
dass die Ersetzung direkt in der Datei stattfindet. Die Eingabedatei test.csv wird als Argument übergeben. Frage 109: C: kill -s 15 4711 oder kill -s SIGTERM 4711 Wenn dem Kommando kill keine Option angegeben wird, sendet es das Signal 15, was mit SIGTERM gleichbedeutend ist. Frage 110: A: -f steht für force = erzwingen. Die anderen genannten Optionen sind bei modernen Versionen von insmod nicht mehr von Bedeutung. Frage 111: C: modprobe snd-ac97-codec.ko 왘
modprobe kann Module laden und gegebenenfalls Abhängigkeiten auflösen.
왘
modinfo würde lediglich Informationen zu einem Modul liefern.
왘
lsmod listet die geladenen Module eines Kernels auf.
왘
insmod würde versuchen, das Modul zu laden, aber dann fehlschlagen, weil
Abhängigkeiten nicht erfüllt sind. Frage 112: A: lsmod zeigt alle geladenen Module anhand der Informationen aus /proc/ modules an. Die anderen drei Antworten sind frei erfunden. Frage 113: A: rmmod entfernt geladene Module aus dem Kernel. Die anderen Antworten sind frei erfunden. Frage 114: erzeugt die Datei modules.conf oder aktualisiert eine bestehende modules.conf. depmod
Prüfungstipp Bei solchen sogenannten »Fill in the blanks«-Fragen muss immer darauf geachtet werden, ob zu übergebende Optionen Bestandteil der Frage sind oder nicht. Es muss hier einfach nur genau gelesen werden, ob lediglich nach dem einfachen Kommando gefragt wird oder nach dem ganzen Befehl.
268
1451.book Seite 269 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 115: C: kmod übernimmt diese Aufgabe beim Kernel mit Version 2.4 Prüfungstipp Diese Frage war kniffelig, weil dieses Kommando noch gar nicht behandelt wurde. Aber was können Sie mit einer solchen Prüfungsfrage im Ernstfall anfangen? Vor allem müssen Sie Ruhe bewahren, wenn etwas anscheinend Unbekanntes gefragt wird. In der Regel kann so eine Frage dann sauber mit dem Ausschlussverfahren geklärt werden. So auch hier: Das Kommando vi/proc/modules wird lediglich eine Fehlermeldung erzeugen, weil zwischen vi und /proc/modules ein Leerzeichen fehlt. Außerdem wird es nichts bringen, ein Verzeichnis mit einem Editor zu bearbeiten. Das gilt besonders für Verzeichnisse in /proc. A ist also dreifach ausgeschlossen. Von rmmod wissen Sie genau, dass es Module entfernt. B ist also ebenfalls ausgeschlossen. Den depmod-Befehl kennen Sie auch genau. Er erstellt oder aktualisiert bei Bedarf die modules.conf. D ist also auch ausgeschlossen.
Frage 116: lsmod ist hier richtig. Es ist denkbar, dass in der Prüfung auch selten genutzte Op-
tionen der oben besprochenen Kommandos abgefragt werden. Es schadet also nicht, die entsprechenden Manpages zu sichten und noch einige Optionen auszuprobieren. Frage 117: lilo
Nach Änderungen an der lilo.conf muss Lilo einmalig ausgeführt werden. Hierbei werden dann die vorgenommenen Änderungen registriert und in den Master Boot Record (oder u.U. in den ersten Sektor der Startpartition) übernommen. Frage 118: A: und C: Diese Informationen müssen an einen Ort kopiert werden, auf den der Computer beim Systemstart zugreift. Master Boot Record oder erster Sektor einer Startpartition bieten sich hier an. Lilo kann diese Informationen aber auch auf einer Diskette ablegen. Viele Administratoren nutzen diese Methode, um einen zusätzlichen Schutz vor nicht autorisierten Systemstarts zu erhalten. Ein Zugriff auf das BIOS oder ein BOOT-ROM ist Lilo selbstverständlich nicht möglich.
269
1451.book Seite 270 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 119: /var/log/messages Das ist auch die Standard-Log-Datei für den Kernel. Die Konfiguration finden Sie unter /etc/syslog.conf Frage 120: A: GRUB kann das tatsächlich. Lilo kann lediglich vorgaukeln, Windows befände sich auf einer anderen Festplatte, nicht aber auf einer anderen Partition eines Laufwerks. Die Notwendigkeit für diese Schwindeleien ist übrigens darin begründet, dass Windows nur von der ersten Partition auf der ersten Festplatte starten kann. Frage 121: B: less /var/log/boot.log Hier befinden sich die gleichen Informationen wie in /var/ log/messages, allerdings nur die kernel-bezogenen. Die einfache Eingabe des Befehls dmesg hätte auch zu diesem Ergebnis geführt. Antwort A hätte eine Fehlermeldung zur Folge, weil less dann nach der Datei dmesg im aktuellen Pfad gesucht hätte. Die Antworten C und D sind falsch, weil im proc-Verzeichnis keine Protokolldateien liegen. Frage 122: A: und D: Der Runlevel 1 ist ausschließlich für administrative Zwecke gedacht (single-user-mode). Er ist also als Standard-Runlevel ungeeignet. Runlevel 6 bewirkt einen Neustart des Systems, würde also als Standard-Runlevel zu einer Schleife führen, die das System ständig neu startet. Frage 123: Hier gibt es drei Antwortmöglichkeiten, die alle gleichberechtigt sind: 왘
init 1
왘
init s
왘
init S
Frage 124: C: /etc/inittab ist die richtige Konfigurationsdatei. 왘
Bei /etc/init.d handelt es sich um ein Verzeichnis, in dem sich üblicherweise Start- und Stopskripte befinden.
왘
Sowohl /etc/init als auch /etc/init-table sind frei erfunden.
270
1451.book Seite 271 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 125: D: shutdown –h ist die richtige Methode. Hier werden die Benutzer gewarnt, bevor das System herunterfährt. Mit –t kann hier auch noch eine Wartezeit angegeben werden. 왘
init 0 würde das System sofort herunterfahren, und ein Datenverlust für die
Benutzer wäre die Folge. 왘
init S ändert den Runlevel auf single-user-mode, was nicht gefordert ist.
왘
shutdown –r startet das System neu.
Frage 126: init verwendet die PID 1. Frage 127: C: 5 ist die Sektion, in der Konfigurationsdateien beschrieben werden. Frage 128: D: 8 ist die Sektion, in der Administrationsprogramme beschrieben werden. Frage 129: C: apropos ppp durchsucht die Datenbank der Manpages sowohl im Feld »Name« als auch im Feld »Description« nach dem gefragten Wert. Das Ergebnis sieht so aus (stark gekürzt): archangel:~ # apropos ppp ipppstats (8) – print PPP statistics smpppd (8) – SuSE Meta PPP Daemon pppd (8) – Point-to-Point Protocol Daemon smpppd.conf (5) – global smpppd configuration file pppstats (8) – print PPP statistics cinternet (1) – simple frontend for smpppd ipppd (8) – (ISDN) Point to Point Protocol daemon wvdial (1) – PPP dialer with built-in intelligence. pppd-radattr (8) – RADIUS utility plugin for pppd (8)
Frage 130: B: /etc/issue wird einem Benutzer angezeigt, bevor er sich lokal anmeldet. 왘
/etc/issue.net zeigt Meldungen für Remote-User an.
271
1451.book Seite 272 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
왘
/etc/motd enthält Informationen, die dem User nach der Anmeldung angezeigt werden.
왘
Die Datei /etc/local.banner gibt es nicht.
Frage 131: B: Die Datei /etc/profile setzt Variablen für alle Benutzer und ist unabhängig von der verwendeten Shell. 왘
/etc/bashrc ist ausschließlich für die Bash zuständig.
왘
~/.bash_profile bezieht sich nur auf einen Benutzer.
왘
/etc/skel/.bashrc und /etc/skel/.bash_profile sind Vorlagen für neu erstellte Benutzer.
Frage 132: D: .bashrc und .bash_profile sind hier die richtigen Dateien. Grundsätzlich sollten Sie sich merken, dass die shell-spezifischen Konfigurationsdateien, die für einzelne Benutzer zuständig sind, einerseits natürlich in seinem Heimatverzeichnis liegen und andererseits immer mit einem Punkt beginnen. Ein Benutzer darf seine eigenen Shell-Variablen modifizieren. Die Punkte verhindern, dass diese Dateien durch den normalen ls-Befehl angezeigt werden. Frage 133: unset proxy_http
Der Befehl unset setzt Variablen zurück. Es ist auch üblich, am Ende eines Skripte alle benutzten Variablen wieder zurückzusetzen. Frage 134: B: export VARIABLE erzielt das erwünschte Ergebnis. export $VARIABLE würde eine Variable mit der Bezeichnung $VARIABLE exportieren. Das Kommando set setzt Variablen, exportiert diese jedoch nicht. Der env-Befehl lässt ein Programm in einer modifizierten Umgebung laufen. Frage 135: /etc/profile ist die systemweite Konfigurationsdatei für diese Zwecke. Frage 136: .bash_profile
272
1451.book Seite 273 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 137: B: ldconfig – Das Programm ldconfig erstellt aus der Textdatei /etc/ld.so.conf die /etc/ld.so.cache, die wiederum vom System ausgewertet wird. 왘
Das Programm ldd gibt lediglich Informationen über die Abhängigkeiten der Bibliotheken untereinander auf dem Bildschirm aus.
왘
ld erstellt Verknüpfungen zwischen Objekten und Bibliotheken. Das ist nor-
malerweise der letzte Schritt, nachdem ein Programm kompiliert wurde. Frage 138: C: /etc/ld.so.conf ist hier die richtige Datei. Die Antworten A und B beziehen sich auf Kernel-Module. D wird mit ldconfig aus C generiert. E gibt es nicht. Frage 139: du ist hier das gesuchte Kommando. Das Kürzel steht für disk usage.
Frage 140: A: telinit 1 bringt den Computer in den Single–User-Mode, der für Wartungszwecke gedacht ist. In diesem Modus gibt es kein Netzwerk und auch keine Terminalverbindungen über serielle Leitungen oder Ähnliches, weil wirklich nur ein User (nämlich root an der Konsole) verbunden ist. 왘
shutdown –r now fährt das System herunter und startet es neu.
왘
killall –9 inetd beendet gewaltsam den inetd, was aber bestehende ssh-
Sitzungen nicht beendet, auch dann nicht, wenn der sshd über diesen TCPWrapper gestartet wurde. 왘
/bin/netstop –maint ist frei erfunden.
왘
/etc/rc.d/init.d/network stop trennt nur die Benutzer, die über Netzwerk
zugreifen, aber keine seriellen Terminalbenutzer (Modem etc.). Frage 141: shutdown ist die beste Antwort. Mit shutdown –k können Sie Nachrichten an Be-
nutzer senden, ohne das System wirklich herunterzufahren. Der Befehl wall wäre zwar in der Praxis die bessere Wahl, in der Prüfung wird thematisch aber eher auf den shutdown-Befehl abgezielt.
273
1451.book Seite 274 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Frage 142: A: whatis suchwort ist die richtige Antwort. Das Kommando whatis ist äquivalent zu man –f. Sie sehen, dass auch selten benutzte Schalter in der Prüfung abgefragt werden. 왘
apropos suchwort entspricht man –k.
왘
locate suchwort durchsucht datenbankgestützt das Dateisystem nach der
Datei »suchwort« und hat natürlich keine Entsprechung im man-System. 왘
find / -name suchwort durchsucht das Dateisystem nach der Datei suchwort.
왘
E ist falsch, weil A richtig ist.
Frage 143: apropos ist das Äquivalent zu man –k.
Prüfungstipp Machen Sie sich für die Prüfung auch mit den anderen Parametern von man vertraut!
Frage 144: B: :se nu ist die richtige Antwort. Alle anderen Optionen ergeben Fehlermeldungen, weil sie keine Optionen für den vi sind. Prüfungstipp Machen Sie sich für die Prüfung auch mit selten genutzten Optionen für den vi vertraut. Das gilt sowohl für den Kommando – Modus als auch für die Übergabe von Parametern beim Start.
Frage 145: B: Aktualisierung der Pfadvariablen mit dem Inhalt von $APPLICATIONS Der Befehl: export PATH=$PATH:$APPLICATIONS nimmt den Inhalt der Variablen APPLICATIONS (wobei es sich hoffentlich um einen Dateipfad handelt), fügt diesen der aktuellen PATH-Variablen hinzu und macht diese Neuerung für alle neuen Shells durch den Export verfügbar. Die anderen Antworten sind frei erfunden. Frage 146: A: exportfs –a ist die richtige Antwort.
274
1451.book Seite 275 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
restart funktioniert zwar auch, startet aber das ganze NFS-System neu und bewirkt eine Unterbrechung der verbundenen Benutzer. Das ist aber ausdrücklich nicht erwünscht.
왘
/etc/rc.d/init.d/nfs
왘
service nfs restart ist frei erfunden.
왘
kill –1 HUP nfs ist kein gültiges Kommando.
왘
init 1 bringt das System in den Single User Mode und bringt garantiert eine
Unterbrechung aller verbundenen Benutzer mit sich. Frage 147: export PATH allowable ist die gewünschte Antwort. In Wirklichkeit ist das allowable nicht erforderlich. Es würde hier zum Export der Variablen »PATH« und der leeren Variablen »allowable« kommen, was keinen Sinn macht. Es ist also ausreichend, export PATH auszuführen.
Frage 148: A: /etc/profile, und D: ~/.bash_profile sind die richtigen Antworten. 왘
/etc/bashrc konfiguriert nicht beim Login, sondern beim Start jeder neuen Shell.
왘
/etc/.login gibt es nicht im /etc-Verzeichnis.
왘
/etc/.profile gibt es nicht im /etc-Verzeichnis.
Prüfungstipp Merken Sie sich für die Prüfung, dass das /etc-Verzeichnis nie Dateien enthält, die mit einem Punkt beginnen. So können Sie häufig gleich ein paar falsche Antworten ausschließen.
Frage 149: D: Es setzt Umgebungsvariablen für Anwendungsprogramme. Frage 150: Hier gibt es mehrere Antworten, die als richtig angesehen werden müssen. 왘
tar –czf myprojects.tar.gz projects*
왘
tar –zcf myprojects.tar.gz projects*
왘
tar czf myprojects.tar.gz projects*
왘
tar zcf myprojects.tar.gz projects*
275
1451.book Seite 276 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-101
Zur Erklärung: Zu den Zieldateien muss keine Pfadangabe gemacht werden, weil die Frage besagt, dass man sich bereits in seinem Heimatverzeichnis befindet. Der tar-Befehl benötigt die folgenden Optionen: 왘
c für create, damit ein neues Archiv erstellt wird.
왘
z für zip, damit das Archiv mit gzip komprimiert wird.
왘
f für file. Diese Option muss immer als Letzte übergeben werden und begrenzt damit die Anzahl der möglichen Antworten.
An tar können Optionen mit einem vorangestellten Strich oder auch ohne übergeben werden. Da die Reihenfolge von z und c irrelevant ist, ergibt das die vier oben angegebenen Varianten. Frage 151: Hier gibt es wieder mehrere Antworten, die alle als richtig angesehen werden müssen, weil die Optionen gegeneinander vertauscht werden können wie in der vorangegangenen Frage. Eine Möglichkeit wäre: tar –tzvf myprojects.tar.gz
Die Optionen wirken hier, wie folgt: 왘
t steht für table und erstellt eine Liste der im Archiv enthaltenen Dateien.
왘
z bewirkt die Dekomprimierung der Dateien.
왘
v steht wie immer für verbose und ist in diesem Fall erforderlich, weil die Option t sonst nur eine Liste mit Dateien ohne weitere Informationen generieren würde.
왘
f steht für file und ist, wie bereits erwähnt, immer die letzte Option.
Prüfungstipp Machen Sie sich für die Prüfung unbedingt mit den gängigsten Optionen dieses Befehls vertraut.
Frage 152: Hier gibt es ebenfalls mehrere Antworten, die alle als richtig angesehen werden müssen. Eine Möglichkeit wäre: tar –xzf rdesktop.tar.gz
Die einzige Option, die nicht in den beiden vorherigen Fragen vorkam, war das x. Diese Option steht für extract. Bildlich gesprochen, könnte man hier von Ar-
276
1451.book Seite 277 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
beitsteilung reden, weil das z im Prinzip die Erweiterung gz entfernt, und das x entfernt dann das tar. Frage 153: Das ist ein beliebtes Thema. Suchen Sie sich bei solchen Fragen einfach die Verzeichnisse oder Dateisysteme aus, auf deren Inhalt Sie nach einem Systemcrash am ehesten verzichten können. In diesem Fall also ganz klar: E: swap Wenn man sich vor Augen hält, dass swap ein Teil des virtuellen Speichers ist, kann man sagen, dass eine Sicherung von swap genauso sinnlos ist wie ein Backup des Arbeitsspeichers. 왘
ufs (UNIX File System) ist ein Dateisystem aus der System-V-Zeit und wird eigentlich unter Linux nicht benutzt. Wenn doch, sollte es natürlich auch gesichert werden.
왘
usr enthält Programme, sollte also unbedingt gesichert werden.
왘
tmp enthält wahrscheinlich vergleichsweise unwichtige Daten. Aber auch hier kann das System Zwischenwerte irgendwelcher Programmabläufe hinterlegt haben.
왘
home enthält Benutzerdaten und wird definitiv gesichert.
Frage 154: A: Ext2 ist die richtige Lösung. Für die anderen genannten Dateisysteme kann dump nicht eingesetzt werden. Frage 155: Diesmal fällt die Antwort hoffentlich schon leichter: C: /proc Da das Proc-System im Arbeitsspeicher liegt und nur scheinbar auf der Festplatte zu finden ist, muss es natürlich keinesfalls gesichert werden. Alle anderen genannten Verzeichnisse sollten regelmäßig gesichert werden.
277
1451.book Seite 278 Dienstag, 7. Juli 2009 2:18 14
1451.book Seite 279 Dienstag, 7. Juli 2009 2:18 14
LPI 102
1451.book Seite 280 Dienstag, 7. Juli 2009 2:18 14
1451.book Seite 281 Dienstag, 7. Juli 2009 2:18 14
Was eine Shell ist und wie man sie benutzt, wissen Sie ja bereits. Jetzt werden Sie lernen, an der Shell einige individuelle Anpassungen vorzunehmen und Skripte zu schreiben, welche die alltägliche Arbeit erleichtern. Optimieren Sie Ihre Arbeitsumgebung!
Topic 105: Shells, Skripte und Datenverwaltung 105.1 Die Shell-Umgebung anpassen und verwenden Wichtung: 4 Beschreibung: Kandidaten sollten in der Lage sein, Shell-Umgebungen an die Anforderungen der Benutzer anzupassen. Kandidaten sollten in der Lage sein, globale und nutzerindividuelle Voreinstellungen zu ändern. Wichtigste Wissensgebiete: 왘
Umgebungsvariable (etwa PATH) beim Anmelden oder Erzeugen einer neuen Shell setzen
왘
Bash-Funktionen für häufig gebrauchte Kommandofolgen erstellen
왘
Skelettverzeichnisse für neue Benutzerkonten pflegen
왘
den Kommando-Suchpfad mit den richtigen Verzeichnissen setzen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/profile
왘
env
왘
export
왘
set
왘
unset
왘
~/.bash_profile
왘
~/.bash_login
왘
~/.profile
281
1451.book Seite 282 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
왘
~/.bashrc
왘
~/.bash_logout
왘
function
왘
alias
Allgemeines Linux ist wohl das anpassungsfähigste Betriebssystem, das es gibt. Das trifft auch auf die verschiedenen Linux-Shells zu, die Sie sehr leicht auf Ihre eigenen Bedürfnisse anpassen können. Alles, was Sie dazu brauchen, sind ein paar Befehle, Variablen und Konfigurationsdateien. Aber was ist überhaupt eine Shell?
Verwendung von Shells Eine Shell ist zunächst einmal ein textbasiertes Programm. Sie hat mehrere Aufgaben. Die wichtigste Aufgabe einer Shell ist es, als Schnittstelle zwischen Benutzer und Computer zu fungieren. Der Benutzer kann durch die Shell auch mit dem Kernel kommunizieren. Wenn man jetzt noch bedenkt, dass der englische Begriff Kernel zu Deutsch Kern heißt und dass eine Shell eine Schale ist, wird wohl sehr schnell klar, wie diese beiden Fachbegriffe entstanden sind und wo eine solche Shell im Linux-Gefüge angesiedelt ist. Eine weitere Aufgabe von Shells ist es, als Umgebung für die Ausführung von Skripten und Programmen zu dienen. Außerdem verstehen Shells unterschiedliche Befehle, sodass man sie auch noch als Programmiersprache betrachten kann. Es haben sich im Laufe der Jahre unterschiedlichste Shells hervorgetan: 왘
bash ist die Bourne Again Shell. Hierbei handelt es sich um ein Wortspiel:
Zum einen handelt es sich, phonetisch betrachtet, um eine wiedergeborene Shell (born again shell), zum anderen ist sie schon wieder (again) eine BourneShell. Sie ist nämlich vollständig abwärtskompatibel zu sh, die Stephen Bourne bereits 1977 programmierte. 왘
sh ist demzufolge der Vorfahre der heute weit verbreiteten Bash. Sie wird
noch recht häufig eingesetzt, insbesondere bei der Ausführung von Skripten. 왘
ksh steht für Korn-Shell und ist ein gelungener Versuch, eine Bourne-Shell mit
einer C-Shell zu kombinieren. 왘
csh ist der Syntax nach an die Programmiersprache C angelehnt.
왘
zsh ähnelt der ksh, bietet aber einen erheblich höheren Funktionsumfang.
282
1451.book Seite 283 Dienstag, 7. Juli 2009 2:18 14
105.1 Die Shell-Umgebung anpassen und verwenden
Es gibt noch weitere Shells, aber diese kleine Auflistung soll reichen, um Ihnen einen ersten Einblick zu geben. Im weiteren Verlauf des Buches soll jedoch fast ausschließlich die Bash thematisiert werden. Einerseits ist das die heutzutage bedeutendste Shell, und andererseits befassen sich die Prüfungsfragen ausschließlich mit der Konfiguration der Bash.
Umgebungsvariablen und Shell-Variablen In diesem und den folgenden Abschnitten soll es um die Umgebung gehen, die Ihnen eine Shell bietet, und darum, wie Sie diese Umgebung konfigurieren. Zuerst einmal wären hier die Variablen zu nennen. Die Inhalte von Variablen sorgen dafür, dass laufende Programme und Skripte sich selbst mit kleinen Informationen versorgen können, ohne dass der Benutzer diese jedes Mal explizit angeben muss. Hierbei wird unterschieden zwischen Umgebungsvariablen und ShellVariablen. Die Unterschiede zwischen diesen beiden Variablentypen liegen einerseits darin, durch welche Konfigurationsdateien sie deklariert werden und demzufolge, wann Sie durch welches Programm ausgewertet werden, und andererseits in ihrem Wirkungsbereich: 왘
Umgebungsvariablen gelten für alle Shells, die ein Benutzer verwendet. Die Inhalte dieser Variablen werden außerdem vererbt. Das bedeutet, dass beim Aufruf einer Subshell (egal, ob durch ein Skript oder den Benutzer) ein automatischer Export der Variablen in diese Subshell stattfindet. Bei Umgebungsvariablen werden normalerweise Großbuchstaben verwendet. Das hat keinen technischen Hintergrund, sondern dient lediglich der Übersichtlichkeit und Auffindbarkeit für den Benutzer.
왘
Shell-Variablen müssen in jeder Shell, die durch den Benutzer oder ein Skript gestartet wird, neu deklariert werden. Es findet standardmäßig keine Vererbung statt. Gemäß Konvention werden Shell-Variablen kleingeschrieben.
Beachten Sie, dass die Bash zwischen Groß- und Kleinschreibweise unterscheidet. Die Konventionen bezüglich der Schreibweisen bei Umgebungs- oder Shell-Variablen werden von einigen Distributionen nicht eingehalten. Die Deklaration und Abfrage einer Shell-Variablen erfolgt recht einfach: archangel:~ archangel:~ archangel:~ archangel:~ 11=5+6
# # # #
a=5 b=6 let c=$a+$b echo $c=$a+$b
In diesem Beispiel werden also zunächst die Variablen A und B mit den Werten 5 und 6 gefüllt. Die dritte Zeile sorgt dafür, dass der Variablen C das Ergebnis der
283
1451.book Seite 284 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
Summe aus $A und $B übergeben wird. Die letzte Zeile gibt die komplette Operation aus. Die Inhalte einer Variablen bleiben innerhalb einer Shell erhalten. Sie können also die Variable wiederholt abrufen oder verwenden: archangel:~ # echo $c 11
Wird eine Subshell aufgerufen, so steht diese Variable nicht mehr zur Verfügung, weil es sich nicht um eine Umgebungsvariable handelt. Es ist aber möglich, eine Variable für eine Subshell verfügbar zu machen, indem man diese exportiert. Merken Sie sich für die Prüfung unbedingt, dass ein solcher Export nur an untergeordnete, jedoch nie an übergeordnete Shells erfolgen kann. Ein Export bewirkt nämlich nicht, wie oftmals fälschlich behauptet, dass aus einer Shell-Variablen eine Umgebungsvariable wird. Der Exportbefehl kann auf zwei Arten durchgeführt werden: archangel:~ # export c archangel:~ # sh sh-3.00# echo $c 11
In der gerade dargestellten, ersten Variante wurde die Variable C aus dem vorangegangenen Beispiel exportiert. Anschließend wurde mit sh eine neue Subshell geöffnet und dann mit echo $C die Variable auf dem Bildschirm ausgegeben. Die zweite Methode sieht folgendermaßen aus: archangel:~ # export Z=1000 archangel:~ # sh sh-3.00# echo $Z 1000 sh-3.00#
Diesmal ist die Deklaration der Variablen und der Export mit nur einem einzigen Befehl durchgeführt worden. Mit echo $Z wird wieder demonstriert, dass der Inhalt der Variablen in der Ziel-Shell angekommen ist. Mit dem Befehl set können Sie ohne Angabe von Parametern nachsehen, welche Umgebungs- und Shell-Variablen Ihre aktuelle Shell gerade verwendet. Am besten geben Sie die Ausgabe an less weiter, damit Sie den Inhalt in Ruhe untersuchen können. Eine gekürzte Ausgabe könnte Folgendes enthalten: archangel:~ # set | less A=5 B=6
284
1451.book Seite 285 Dienstag, 7. Juli 2009 2:18 14
105.1 Die Shell-Umgebung anpassen und verwenden
BASH=/bin/bash C=11 HISTSIZE=1000 HOME=/root HOSTNAME=archangel MANPATH=/usr/share/man:/usr/local/man:/usr/X11R6/man:/opt/gnome/ share/man PAGER=less PATH=/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/ bin:/usr/X11R
Sie finden hier also eine Menge alter Bekannter wieder, die zum Teil auch für die Prüfung bekannt sein müssen. Besonders die Verwendung von PATH ist ein beliebter Kandidat für Prüfungsfragen. Es ist natürlich auch möglich, die Umgebungsvariablen einzusehen. Das geschieht mit dem Kommando env. Auch hier ist es ratsam, die Ausgabe mit less zu betrachten. Sie werden feststellen, dass es eine große Schnittmenge zwischen Shellund Umgebungsvariablen gibt. Zum guten Schluss sollten Sie noch wissen, wie man Variablen wieder löscht. Das machen Sie einfach mit dem Befehl unset. Um die Variablen aus den Beispielen weiter oben zu entfernen, geben Sie Folgendes ein: archangel:~ # unset A archangel:~ # unset B archangel:~ # unset C
Zur Überprüfung: archangel:~ # set | less BASH=/bin/bash HISTSIZE=1000 ...
Die Variablen A, B und C wurden gelöscht. Alternativ wäre natürlich auch eine Neuanmeldung möglich gewesen, denn es handelt sich ja um Shell-Variablen, die bei einer Abmeldung nicht erhalten bleiben.
Aliase und Funktionen Aliase Wenn Sie Befehle in Kombination mit bestimmten Parametern immer wieder verwenden, ist es empfehlenswert, einen Alias zu definieren. Das ist auch hilfreich, wenn ein Befehl in sich sehr lang ist. Ein Beispiel: Wenn man oft Tar-Balls
285
1451.book Seite 286 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
aus dem Internet herunterladen und entpacken muss, benötigt man immer wieder das Kommando tar –xvzf <archivname.tgz>. Es wäre doch viel einfacher, nur ein einziges oder zumindest wenige Zeichen hierfür zu verwenden. Es lohnt sich also, einen Alias anzulegen: archangel:~ # alias tx="tar -xvzf"
Jetzt kann ein Tar-Ball einfach mit dem Kommando tx <archivname.tgz> extrahiert und ausgepackt werden. Es ist auch möglich, mehrere Kommandos in einem einzigen Alias zu kombinieren. In einem solchen Fall müssen diese Kommandos durch Semikolons voneinander getrennt werden. Hier ein Beispiel: archangel:~ # alias frei="free; df" archangel:~ # frei total used free shared buffers cached Mem: 13268 471568 41700 0 109120 202360 -/+ buffers/cache: 160088 353180 Swap: 755044 0 755044 Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda2 18928028 7795076 10171464 44 % / tmpfs 256632 0 256632 0 % /dev/shm /dev/hda1 54416 7541 44066 15 % /boot /dev/hda4 58105324 24807836 33297488 43 % /storage
Auf diese Art wird mit einem einzigen Befehl die Festplatten- und Speicherbelegung überprüft. Besonders weit verbreitet und in manchen Distributionen schon von Hause aus integriert, sind die folgenden Aliase: alias alias alias alias alias alias alias alias alias alias
..='cd ..' ...='cd ../..' dir='ls -l' la='ls -la' ll='ls -l' md='mkdir -p' o='less' rd='rmdir' unmount='echo "Error: Try the command: umount" 1>&2; false' which='type -p'
Aus diesen Beispielen kann man lernen, wie man sich das Leben leicht macht. Die beiden Verzeichniswechsel sind nette Abkürzungen. Für alte DOS-Benutzer sind die wichtigsten DOS-Befehle (dir, md, rd) mit Aliasen in Linux überführt worden. Der viel verwendete ls-Befehl bekommt hier auch einige Abkürzungen mit 286
1451.book Seite 287 Dienstag, 7. Juli 2009 2:18 14
105.1 Die Shell-Umgebung anpassen und verwenden
auf den Weg. Das Kommando unmount gibt es nicht, ist aber ein beliebter Tippfehler. Deshalb gibt ein Alias hier eine Fehlermeldung aus. Mit einem einfachen o wird der wichtigste Pager gestartet. Zu guter Letzt sehen Sie, dass Sie schon unbewusst in einem vorangegangenen Kapitel mit dem Alias für type –p gearbeitet haben: Das Kommando which ist ein Alias. Wenn Sie nun wissen wollen, welche Aliase Ihr System zurzeit verwendet, geben Sie einfach den Befehl alias ohne Parameter ein. Es folgt dann eine Auflistung. Die Definition der Aliase geht bei einer Neuanmeldung am System verloren. Wie Aliase dauerhaft eingerichtet werden, wird im Kapitel weiter unten beschrieben. Funktionen Eine der unangenehmsten Einschränkungen, die ein Alias mit sich bringt, ist die Tatsache, dass Übergabewerte ($1, $2 usw.) nur einmal ausgewertet werden können. Bei einer Funktion gibt es diese Einschränkung nicht. Man könnte eine Funktion durchaus schon mit einem kleinen Skript vergleichen. Der Begriff Funktion entstammt der Programmierung, und es handelt sich eigentlich um ein Unterprogramm, das man für wiederkehrende Aufgaben verwenden kann. Eine Funktion in einer Shell kann sowohl von einem Benutzer als auch von einem Skript aufgerufen werden. Der Aufbau einer Funktion sieht immer so aus: function Funktionsname() { Befehl 1 Befehl 2 ... Befehl n }
Der Befehl function selbst kann übrigens auch einfach weggelassen werden, weil die Bash an den beiden Klammern erkennt, dass es sich um eine Funktion handelt. Wenn Sie den Befehl function dennoch verwenden, können Sie alternativ die Klammern direkt hinter dem Namen der Funktion weglassen. Es soll hier aber im Folgenden die korrekte Syntax angewendet werden. Das Beispiel demonstriert, dass es mit einer Funktion sogar möglich ist, Rechenoperationen auszuführen: archangel:/ # function addiere () > { > let summe=$1+$2 > echo -e "Die Summe ist $summe" > } archangel:/ # addiere 3 4 Die Summe ist 7
287
1451.book Seite 288 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
Es wurde eine Funktion mit dem Namen addiere erstellt. Die geschweiften Klammern sorgen dafür, dass diese mehrzeilige Anweisung überhaupt als ein einziger Befehl interpretiert wird. Die Zeile let summe=$1+$2 sorgt dafür, dass der Variablen summe die Summe aus den beiden Übergabevariablen $1 und $2 übergeben wird. In der nächsten Zeile erfolgt dann die Ausgabe. Es ist auch möglich, eine Funktion in einer einzigen Zeile zu erstellen: archangel:/ # function addiere { let summe=$1+$2; echo "Die Summe ist $summe"; }
Diese Methode wird jedoch von den meisten Benutzern als unübersichtlich empfunden. Bei der Vergabe einer Bezeichnung für Ihre Funktionen sollten Sie sicherheitshalber feststellen, ob es nicht schon ein Kommando mit dieser Bezeichnung gibt. Im extremsten Fall können Sie aber sogar eine Funktion genauso benennen wie ein in der Funktion selbst vorkommendes Bash-Kommando. Das lösen Sie dann so: function ls () { builtin ls –lisa }
Damit die Funktion sich nicht versehentlich selbst aufruft, wird bei der Übergabe des Kommandos mit builtin klargestellt, dass es sich hier um ein bash-internes Kommando handelt. Es würde sonst zu einer Endlosschleife kommen, die bei jedem Aufruf an sich selbst Arbeitsspeicher anfordert. Das kann sogar zum Absturz des gesamten Systems führen.
Konfigurationsdateien der Bash Für die Bash gibt es gleich eine ganze Litanei von Konfigurationsdateien, deren Verwendungszweck Sie für die Prüfung kennen müssen. Es folgt nun eine Auflistung der für die Prüfung wesentlichen Dateien in Reihenfolge ihrer Ausführung. Denken Sie daran, dass es in unterschiedlichen Linux-Distributionen auch zu unterschiedlichen Konstrukten der Konfigurationsdateien kommen kann. Es lohnt sich also, nach ähnlich lautenden Dateien Ausschau zu halten und in der Dokumentation zur jeweiligen Distribution nachzusehen, wie diese die Konfigurationsdateien nutzt. Eine erste grobe Unterscheidung sollten Sie sich dringend für die Prüfung merken: Konfigurationsdateien, die für alle Anwender Gültigkeit haben, befinden sich im Verzeichnis /etc und beginnen niemals mit einem Punkt. Die individuellen Konfigurationsdateien für den jeweiligen User befinden sich im entsprechenden Heimatverzeichnis und beginnen immer mit einem Punkt. Allein durch diese Unterschiede können Sie bei der Prüfung oft schon etliche falsche
288
1451.book Seite 289 Dienstag, 7. Juli 2009 2:18 14
105.1 Die Shell-Umgebung anpassen und verwenden
Antworten ausschließen. Eine Datei /etc/.bashrc kommt als Konfigurationsdatei genauso wenig infrage wie eine Datei mit der Bezeichnung /home/udo/profiles.
Systemweite Konfigurationsdateien Die systemweiten Konfigurationsdateien sind für jeden Benutzer gültig, der sich am System anmeldet. Die beiden gängigsten sind: 왘
/etc/profile ist die erste Konfigurationsdatei, die bei der Anmeldung (für die Login-Shell) eines Benutzers eingelesen wird. Sie enthält erste Umgebungsvariablen und (für die Prüfung besonders wichtig!) die erste PATH-Anweisung. Änderungen in dieser Datei erfordern eine neue Anmeldung des Benutzers.
왘
/etc/bashrc kann von der .bashrc eines Benutzers geladen werden. Sie enthält systemweite Einstellungen, Aliase und Funktionen. Diese Datei wird beim Start jeder Shell neu eingelesen und erfordert deshalb nach Änderung keine Neuanmeldung des Benutzers.
Manche Distributionen verwenden auch noch andere Konfigurationsdateien. SuSE und Debian verwenden z.B. eine bash.bashrc, die nicht bearbeitet werden sollte, weil diese ohnehin von Konfigurationsfrontends modifiziert wird. Stattdessen soll die Datei bash.bashrc.local bearbeitet werden. Für die Prüfungen sind solche Sonderfälle aber nicht von Bedeutung.
Konfigurationsdateien für den Benutzer Die folgenden Dateien befinden sich im Heimatverzeichnis eines jeden Benutzers und dürfen auch durch seinen Besitzer modifiziert werden. Damit weniger versierte Benutzer nicht durch diese Dateien irritiert werden, sind diese mit einem Punkt vor einer Auflistung mit Dateibrowsern geschützt worden. Die folgende Auflistung entspricht auch der Ausführungsreihenfolge (vorausgesetzt, die Dateien sind in der jeweiligen Distribution überhaupt vorhanden). 왘
~/.bash_profile wird (falls vorhanden) nur bei einer Neuanmeldung eingelesen und sofort nach /etc/profile ausgeführt. Sie beinhaltet zusätzliche Pfadanweisungen (z.B. das Heimatverzeichnis), den zu verwendenden Standardeditor und benutzerspezifische Umgebungsvariablen.
왘
~/.bash_login ist eine Alternative zu .bash_profile und wird auch nur dann abgearbeitet, wenn die Datei .bash_profile nicht existiert. Auch diese Datei wird nur während der Anmeldung verwendet. Der Inhalt und Verwendungszweck entspricht der .bash_profile.
왘
~/.profile ist die ursprüngliche Konfigurationsdatei der Bash. Sie wird nur während der Anmeldung (für die Login-Shell) eingelesen, und das auch nur
289
1451.book Seite 290 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
dann, wenn weder eine .bash_profile noch eine .bash_login-Datei im Verzeichnis des Benutzers existieren. Inhalt und Verwendungszweck entsprechen der .bash_profile und .bash_login. 왘
~/.bashrc ist die andere, ursprüngliche Konfigurationsdatei der Bash. Sie wird in jedem Fall eingelesen, und zwar auch beim Aufruf einer neuen Shell. Nach Änderungen in dieser Datei ist entsprechend keine Neuanmeldung des Benutzers erforderlich. Sie beinhaltet im Wesentlichen Aliase und Funktionen.
왘
~/.bash_logout ist eine optionale Datei, die ausgeführt wird, wenn der Benutzer sich abmeldet. Sie könnte zum Beispiel den Monitor löschen.
왘
~/.inputrc enthält Definitionen, welche die Tastatur betreffen. So wird hier auch der Verwendungszweck von Funktionstasten definiert u.Ä. Es ist auch möglich, in dieser Datei Hotkeys für häufig verwendete Befehle zu definieren. Zum Beispiel könnte man mit (Strg) + (H) ins Heimatverzeichnis wechseln wollen. Das erreichen Sie durch folgenden Eintrag: Control-h: "cd ~"
Beachten Sie bitte, dass es hier wiederum erhebliche distributionsspezifische Unterschiede gibt. Eine systemweite /etc/inputrc ist heutzutage eigentlich Standard bei fast allen Systemen.
Das Skeleton Verzeichnis /etc/skel Ein Skeleton ist, wie Sie wahrscheinlich schon vermutet haben, ein Knochengerüst. Man kann das Skeleton-Verzeichnis als eine Vorlage für das Heimatverzeichnis eines neuen Benutzers betrachten. Beim Erstellen eines neuen Benutzerkontos mit useradd –m willi wird, die richtigen Standardeinstellungen vorausgesetzt, ein Verzeichnis namens /home/willi erstellt. Der Inhalt des Skeleton-Verzeichnisses wird dann in das Verzeichnis /home/willi kopiert, und abschließend werden die Berechtigungen für das Verzeichnis und dessen Inhalt auf den neuen User abgestimmt. Der Speicherort für Skeleton ist normalerweise /etc/skel. Auch hier kann es in Abhängigkeit von der verwendeten Distribution zu Unterschieden kommen.
105.2 Einfache Skripte anpassen oder schreiben Wichtung: 4 Beschreibung: Kandidaten sollten in der Lage sein, existierende Skripte anzupassen oder einfache neue Bash-Skripte zu schreiben.
290
1451.book Seite 291 Dienstag, 7. Juli 2009 2:18 14
105.2 Einfache Skripte anpassen oder schreiben
Wichtigste Wissensgebiete: 왘
Standard-sh-Syntax verwenden (Schleifen, Fallunterscheidungen)
왘
Kommandosubstitution verwenden
왘
Rückgabewerte auf Erfolg, Misserfolg oder andere von einem Programm gelieferte Informationen prüfen
왘
situationsabhängig Mail an den Superuser senden
왘
den richtigen Skript-Interpreter über die Shebang-Zeile (#!) wählen
왘
den Ort, die Eigentümerschaft, die Ausführungs- und SUID-Rechte von Skripten verwalten
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
for
왘
while
왘
test
왘
if
왘
read
왘
seq
Allgemeines Bisher haben Sie schon gesehen, dass Sie durch die Verwendung von Variablen, Aliasen und Funktionen eine Menge Zeit sparen können. Aber die Shell bietet noch viel mehr Möglichkeiten. Wenn Sie in der Lage sind, Skripte zu erstellen, können Sie nicht nur die Beschränkungen überwinden, denen Aliase oder Funktionen unterliegen, sondern Sie können auch alltägliche Aufgaben vollautomatisieren. Eigentlich ist das Schreiben eigener Skripte relativ einfach. Sie können alle Kommandos, die Sie bisher in diesem Buch gelernt haben und noch lernen werden, dazu verwenden. Das bedeutet, dass Sie ja eigentlich schon eine Menge Befehle kennen, die Sie für die Programmierung benötigen. Es sind nur noch ein paar kleine Kenntnisse über Programmverzweigungen und Schleifen notwendig, und schon können Sie programmieren. Ich empfehle Ihnen die Verwendung von vi, damit Sie gleichzeitig ein wenig Praxis in der Benutzung dieses weit verbreiteten Editors bekommen.
Ausführen eines Skripts Bevor es losgehen kann, sollten Sie erst einmal wissen, wie man ein Skript ausführt. Schließlich ist ein Skript ja eigentlich nur eine Textdatei und sollte wohl
291
1451.book Seite 292 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
kaum ausführbar sein. Es gibt mindestens drei grundlegend verschieden Methoden, die an folgendem Beispielskript demonstriert werden sollen: # Addiert zwei Werte let summe=$1+$2 echo "Die Summe aus $1 und $2 ist $summe"
Es handelt sich hier um drei Textzeilen, die in einer Datei mit der Bezeichnung add stehen. Der Verwendungszweck ähnelt einem vorangegangenen Beispiel mit Aliasen. Sie sollten sich übrigens von vorneherein angewöhnen, am Anfang eines Skripts dessen Verwendungszweck zu kommentieren. Als Kommentarzeichen dient bei der Bash, wie bei vielen anderen auch, das Hash-Zeichen #. Um diese Datei ausführen zu können, können Sie sie mitsamt den benötigten Parametern an die Bash übergeben: archangel:~ # /bin/bash /storage/scriptdemo/add 5 6 Die Summe aus 5 und 6 ist 11
Eine zweite Möglichkeit ist die Ausführung mit dem Kommando source. Hierbei handelt es sich um ein Bash-internes Kommando. archangel:~ # source /storage/scriptdemo/add 5 6 Die Summe aus 5 und 6 ist 11
Das Ergebnis ist dasselbe. Die eleganteste Lösung ist jedoch, aus der Textdatei ein ausführbares Shell-Skript zu machen. Dazu sind zwei Arbeitsschritte nötig, die gerne in der LPI-Prüfung thematisiert werden. Zunächst muss die Datei ausführbar gemacht werden. archangel:/storage/scriptdemo # ls -l ... -rw-r--r-1 root root 92 Aug 24 16:52 add ... –rw-r-r— sind die Standardberechtigungen für eine neue Datei. Also muss mit chmod das Attribut für die Ausführbarkeit hinzugefügt werden. archangel:/storage/scriptdemo # chmod a+x add archangel:/storage/scriptdemo # ls -l ... -rwxr-xr-x 1 root root 92 Aug 24 16:52 add ...
Großzügig ist hier die Ausführungsberechtigung gleich für alle vergeben worden. Das Ergebnis zeigt die erneute Ausgabe von ls. Der nächste Schritt ist das Einfügen der shebang!-Zeile. Diese teilt der Shell mit, dass es sich um ein ausführbares
292
1451.book Seite 293 Dienstag, 7. Juli 2009 2:18 14
105.2 Einfache Skripte anpassen oder schreiben
Programm handelt und welche Umgebung für das Skript benötigt wird. Das fertige Skript sieht dann also so aus: #!/bin/bash # Addiert zwei Werte let summe=$1+$2 echo "Die Summe aus $1 und $2 ist $summe"
Das Skript kann jetzt durch einfaches Aufrufen ausgeführt werden wie jedes andere Programm auch. Der Hash ist diesmal ausnahmsweise kein Kommentarzeichen. Die Kombination #! zeigt der Bash die Ausführbarkeit der Datei an. Darauf folgt die Angabe des Interpreters /bin/bash. In dieser Zeile können auch andere Interpreter stehen. Wenn Sie Dateien mit der Erweiterung pl auf Ihrem Computer finden, dann handelt es sich wahrscheinlich um Perl-Skripte. Diese tragen dann die Shebang-Zeile #!/usr/bin/perl. Ein falsch ausgewählter Interpreter führt zu einer falschen Interpretation des Skripts und somit zu unerwünschten Ergebnissen.
Ausführungsberechtigung chmod 700 Sowohl für die Praxis als auch für die Prüfung ist es wichtig, festzulegen, wer ein Programm überhaupt ausführen darf. Im vorangegangenen Beispiel ist großzügig dafür gesorgt worden, dass das Beispielskript von jedem beliebigen Anwender ausgeführt werden kann. Das ist bei einem Programm, das lediglich zwei Zahlen addieren kann, auch nicht als sonderlich riskant einzustufen. Die Methoden der Vergabe von Dateisystemberechtigungen sind Ihnen schon aus dem ersten Teil des Buches bekannt und sollen hier auch nicht unnötigerweise wiederholt werden. Es sei nur darauf hingewiesen, dass ein Skript, das administrative Aufgaben durchführt, grundsätzlich mit chmod 700 <scriptname> aktiviert wird. So kann es ein normaler User weder lesen noch ausführen. SUID Bit Auch dieses Thema stellt lediglich eine kurze Erinnerung an bereits behandelte Methoden dar. In der Prüfung wird in Zusammenhang mit ausführbaren Programmen gerne nach dem SUID-Bit gefragt. Es bewirkt, wie Sie vielleicht noch wissen, dass ein Programm im Sicherheitskontext des Besitzers dieses Programms ausgeführt wird und nicht, wie sonst üblich, im Sicherheitskontext dessen, der es aufruft. Setzen Sie das SUID-Bit mit: archangel:/storage/progdemo # chmod 4700 xy-prog archangel:/storage/progdemo # ls -l
293
1451.book Seite 294 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
... -rws-----...
1 root root
92 Aug 24 17:30 xy-prog
Das kleine s in der Spalte –rws------ zeigt, dass das SUID-Bit gesetzt ist. Diese Methode kann verwendet werden, wenn ein normaler Benutzer regelmäßig eine Aufgabe ausführen muss, für die root-Rechte erforderlich sind. Denken Sie auch in der Praxis daran, dass diese Vorgehensweise als gefährlich einzustufen ist.
Position eines Skripts Position im Dateisystem Wo ein Skript auf der Festplatte abgelegt werden sollte, hängt von verschiedenen Faktoren ab. Wenn das Skript sehr oft benutzt werden soll, macht es natürlich Sinn, ein Verzeichnis auszuwählen, auf das die PATH-Variable zeigt. Am besten sehen Sie einfach noch einmal mit echo $PATH nach. Der Pfad /usr/bin ist normalerweise eine gute Wahl – besonders, wenn das Skript systemweit für jeden zugänglich sein soll. Sollte es sich um ein Skript handeln, das administrative Eingriffe durchführt oder aus anderen Gründen nicht für normale User benutzbar sein sollte, ist /usr/sbin ein gutes Verzeichnis. Position im Prozessbaum Wenn Sie ein Skript ausführen, dann sorgt die shebang (#!)-Zeile dafür, dass eine neue Shell aufgerufen wird. Das ist deshalb wichtig zu berücksichtigen, weil Shell-Variablen, die nicht vorher exportiert wurden, in einer Subshell auch nicht zur Verfügung stehen. Umgekehrt gestaltet sich das Ganze noch schwieriger, weil nach Beendigung des Skripts die Variablen, die im Skriptverlauf gesetzt wurden, nicht mehr existieren. Ein Export ist auch nicht möglich, weil die Exportfunktion nur auf Subshells wirkt und nicht auf übergeordnete Shells. Das ist eine Tatsache, die Sie sich auch für die Prüfung unbedingt merken sollten. Wenn die Variablen eines Skripts also auch nach dessen Beendigung noch von Belang sein sollten, müssen diese in eine Datei geschrieben werden. Hier bietet sich /tmp als Zwischenlager an.
Übergabevariablen und Rückgabewerte Wenn man ein Skript schreibt, so wird man diesem, je nach Art der Aufgabenstellung, eventuell beim Start Werte übergeben. Dafür gibt es festgelegte Variablen, die in den vorangegangenen Beispielen bereits verwendet wurden. Das folgende Skript wird die Wirkung der Variablen demonstrieren.
294
1451.book Seite 295 Dienstag, 7. Juli 2009 2:18 14
105.2 Einfache Skripte anpassen oder schreiben
#!/bin/sh #Gibt Variablen aus echo Das script wurde mit $0 gestartet. Echo Sie haben $# Parameter übergeben. echo Der erste Übergabewert war $1. echo Der zweite Übergabewert war $2. Murks echo Der aktuelle Errorlevel ist $?. exit 0
Dieses Skript enthält die Variablen $0, $1, $2 und $?, deren Bedeutung gleich nach Ausführung des Skripts, mit zwei Zahlen als Übergabeparametern, geklärt werden soll. archangel:/storage/scriptdemo # ./vartest 47 11 Das script wurde mit ./vartest gestartet. Sie haben 2 Parameter übergeben. Der erste Übergabewert war 47. Der zweite Übergabewert war 11. ./vartest: line 7: Murks: command not found Der aktuelle Errorlevel ist 127.
Die Variable $0 enthält also den Namen des aufrufenden Programms mitsamt dem beim Start angegebenen Pfad. $1 und $2 enthalten die Übergabewerte. Weitere Werte würden entsprechend fortlaufend nummeriert. Die Variable $# enthält die Anzahl der übergebenen Parameter. Mit dem Kommando Murks wird ein Fehler provoziert, der dann auch mit einem »command not found« quittiert wird. Dieser Fehler setzt den Errorlevel in der Variablen $? auf 127. Errorlevels sind eine sehr oft genutzte Information, um Programmabzweigungen festzulegen. Wenn kein Fehler auftaucht, ist der Errorlevel normalerweise »0«. Die Errorlevels, die in Fehlerfällen auftauchen, sind unterschiedlich und können in der Regel in den Manpages des jeweiligen Kommandos nachgelesen werden. Umgehen können Sie diese Problematik, indem Sie Abzweigungen definieren, die sinngemäß sagen: Wenn der Errorlevel nicht »0« ist ... Im Zweifelsfall lässt sich ein Errorlevel aber auch feststellen, indem man einfach einen Fehler provoziert und den Errorlevel dann mit echo $? nachschaut. archangel:/ # locate Marmeladenbrot archangel:/ # echo $? 1
Das Kommando locate gibt also offensichtlich im Fehlerfall einen Errorlevel von »1« aus. Das ist ein weit verbreitetes Verhalten.
295
1451.book Seite 296 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
Schleifen und Bedingungen while, test, do, done, shift, let Im nächsten Beispiel werden schon zwei weitere Techniken angewendet, die in der Programmierung von Shell-Skripten häufig in genau dieser Kombination Verwendung finden. #!/bin/sh #Addiert beliebig viele Zahlen summe=0 while test $# -gt 0 do let summe=summe+$1 shift done echo Die Summe Ihrer Eingaben ist $summe unset summe exit 0
Dieses kleine Skript arbeitet auf folgende Weise: Zuerst wird sicherheitshalber dafür gesorgt, dass die Variable summe den Wert 0 enthält. Wahrscheinlich existiert diese Variable gar nicht, aber diese Sicherheitsmaßname ist Standard. Im nächsten Schritt wird die Abbruchbedingung für eine Schleife aufgestellt. Deshalb muss zunächst geklärt werden, was in der Schleife geschieht. Besagte Schleife beginnt mit einem do und endet auf done. Die erste Anweisung in der Schleife let summe=summe+$1 bewirkt, dass zur leeren Variablen summe der erste (hoffentlich numerische) Übergabewert addiert wird. Das Kommando shift bewirkt, dass anschließend die Werte der Übergabeparameter innerhalb Ihrer Variablen verschoben werden. Das heißt, aus $2 wird $1, aus $3 wird $2, aus $4 wird $3 und so weiter. Sollte die Abbruchbedingung noch nicht erfüllt sein, wird die Schleife weiter durchlaufen. let summe=summe+$1 addiert wieder den Inhalt der Variablen $1 zu summe. Das ist der Wert, der vorher in $2 gestanden hat. Jetzt muss nur noch geklärt werden, wann die Schleife beendet wird. Die Abbruchbedingung while test $# -gt 0 prüft nämlich, ob noch weitere Übergabeparameter vorhanden sind. Das könnte in etwa so übersetzt werden: »Solange (while) die Anzahl der verbleibenden Übergabeparameter ($#) greater than 0 ist, tue (do) …!« Wenn diese Bedingung nicht mehr zutrifft, wird die Schleife verlassen und hinter dem done fortgesetzt. Es erfolgt die Ausgabe des Ergebnisses, aber diese Anweisung ist für Sie inzwischen selbsterklärend. Die Ausführung des Beispielskripts sieht so aus: archangel:/storage/scriptdemo # ./add 47 11 0 8 15 Die Summe Ihrer Eingaben ist 81
296
1451.book Seite 297 Dienstag, 7. Juli 2009 2:18 14
105.2 Einfache Skripte anpassen oder schreiben
Es ist übrigens auch möglich, die Syntax für test etwas anders auszuführen. Im vorherigen Beispiel hätte das dann so ausgesehen: while [ $# -gt 0 ]. Das Kommando test wurde durch eine rechteckige Klammer ersetzt. Hier ist Vorsicht geboten. Die Leerzeichen nach der geöffneten und vor der geschlossenen rechteckigen Klammer dürfen nicht fehlen. Wenn man bedenkt, wie dieses Prinzip funktioniert, ist das aber auch verständlich. Die geöffnete rechteckige Klammer ist ein Programm mit der Bezeichnung [. Es muss also ein Leerzeichen folgen, damit die Shell weiß, dass alles, was nun folgt, Parameter für dieses Programm sind. Die schließende Klammer ] ist ein Parameter, der von dem Programm [ erwartet wird. Hier ist also auch ein Leerzeichen erforderlich, damit sich die schließende Klammer von den vorangegangenen Parametern abgrenzen kann. Für die Prüfung ist das Testen von Bedingungen ein beliebtes Thema. Auffallend ist, dass die Überprüfung von Dateien hinsichtlich bestimmter Eigenschaften häufig thematisiert wird. Es wird nun deshalb eine Liste mit den für die Prüfung wichtigsten Parametern folgen. Die Bezeichnungen in den Klammern sollen dabei helfen, die Schalter leichter auswendig lernen zu können. Machen Sie sich bitte zusätzlich mit der Manpage von test vertraut. 왘
-r – die Datei existiert und ist lesbar (readable).
왘
-w – die Datei existiert und ist beschreibbar (writeable).
왘
-x – die Datei existiert und ist ausführbar (executable).
왘
-d – die Datei existiert und ist ein Verzeichnis (directory).
왘
-b – die Datei existiert und ist ein blockorientiertes Gerät.
왘
-c – die Datei existiert und ist ein zeichenorientiertes Gerät.
왘
-g – die Datei existiert, und das SGID-Bit ist gesetzt.
왘
-k – die Datei existiert, und das Sticky-Bit ist gesetzt.
왘
-u – die Datei existiert, und das SUID-Bit ist gesetzt.
Anmerkung: Das SUID-Bit wird im Allgemeinen als unsicher betrachtet und deshalb zu Recht vom LPI gern zum Gegenstand von Prüfungsfragen gemacht. 왘
-e – die Datei existiert (exists).
왘
-f – die Datei existiert und ist eine reguläre Datei (file).
왘
-L – die Datei existiert und ist ein symbolischer Link (link).
왘
-nt – File1 ist neuer als File2 (newer than).
왘
-ot – File1 ist älter als File2 (older than).
Abgesehen von Dateien können auch Werte und Variablen miteinander verglichen werden. Das ist im vorangegangenen Beispielskript auch schon durchge-
297
1451.book Seite 298 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
führt worden, um festzustellen, ob noch weitere Übergabeparameter vorhanden sind. Die Vergleiche sehen folgendermaßen aus: 왘
WertA -eq WertB trifft zu, wenn Wert A gleich Wert B ist (equal).
왘
WertA -ne WertB trifft zu, wenn Wert A ungleich Wert B ist (not equal).
왘
WertA -gt WertB trifft zu, wenn Wert A größer ist, als Wert B (greater than).
왘
WertA -ge WertB trifft zu, wenn Wert A größer oder gleich ist, wie Wert B
(greater or equal). 왘 왘
WertA -lt WertB trifft zu, wenn Wert A kleiner ist als Wert B (less than). WertA -le WertB trifft zu, wenn Wert A kleiner oder gleich Wert B ist (less or
equal). Schleifen mit »for«, Befehlssubstitutionen, echo, mail und find Befehlssubstitution bedeutet, dass die Ausgaben eines Befehls an einen anderen Befehl oder an eine Variable übergeben werden. Dies kann auf zwei Arten geschehen, die beide die gleiche Auswirkung haben. #!/bin/bash # Sucht nach Sicherungskopien der user for z in `find /home -name *.old` do echo –e "\n$z kann vermutlich geloescht werden!" done unset z exit 0
Dieses Skript basiert u.a. auf der Befehlssubstitution. In diesem Fall werden für die Substitution sogenannte Backquotes verwendet. Das find Kommando in der ersten Zeile find /home -name *.old sucht in allen Benutzerverzeichnissen nach Dateien, deren Dateinamenerweiterung auf .old endet. Die beiden kleinen Striche vor und hinter diesem Befehl sind die besagten Backquotes. Sie werden gesetzt wie die französischen Akzente in à oder è. Weil Sie erst erscheinen, wenn man weiter schreibt, sind dies Backquotes vielen Programmierern unangenehm. Zum Glück gibt es aber eine andere Möglichkeit, dasselbe Ziel zu erreichen. Die beiden folgenden Zeilen führen mit unterschiedlicher Syntax zum selben Ergebnis: for z in $(find /home -name *.old) for z in `find /home -name *.old`
Die Ausgaben des find-Befehls werden also jetzt einzeln an die Variable z übergeben. Nach jeder einzelnen Übergabe wird dann einmal die for-Schleife durch-
298
1451.book Seite 299 Dienstag, 7. Juli 2009 2:18 14
105.2 Einfache Skripte anpassen oder schreiben
laufen. Diese beginnt genau wie eine while–Schleife mit einem do und endet mit done. Wenn find keine weiteren Dateien findet, ist die Abbruchbedingung für die Schleife erfüllt. Innerhalb der Schleife geschieht die Ausgabe des Skripts. Der echo-Befehl gibt jede gefundene Datei auf dem Bildschirm aus. Der Parameter –e aktiviert für echo die Escape-Sequenzen. Das gibt hier die Möglichkeit, mit \n vor der Ausgabe jeder Zeile eine zusätzliche Leerzeile zu generieren, um mehr Übersicht zu schaffen. Weitere Escape-Zeichen sind: 왘
\\ – Wenn ein Backslash angezeigt werden soll, muss dieser nun selbst – wie
man so sagt – escaped werden, weil der erste Backslash interpretiert und nicht ausgegeben wird 왘
\a – alert (piept einmal)
왘
\b – backspace
왘
\c – unterdrückt die Ausgabe des Newline-Zeichens
왘
\f – form feed (Leerseite)
왘
\n – new line
왘
\r – carriage return
왘
\t – horizontal tabulator (8 Leerzeichen breit)
왘
\v – vertical tabulator (entspricht 8 Leerzeilen)
Die Ausgabe eines Skripts kann statt auf dem Monitor auch in einer Mail ausgegeben werden. Das ist unter Linux besonders einfach, weil auf jedem Linux-System ein kompletter Mailserver implementiert ist. Sie können Text von der Konsole oder aus einer beliebigen Datei direkt in das Programm mail pipen, und schon werden die Informationen zugestellt. archangel:/ # echo "was testen" | mail -s Test root
Sie können dieses Verfahren einfach auf der Shell testen. Die Zeile oben sendet eine Mail mit dem Text »was testen« und der Betreffzeile Test (-s steht für Subject) an den Benutzer root. Wenn Ihr Mailsystem an das Internet angebunden ist, kann natürlich auch eine externe Mailadresse voll qualifiziert angegeben werden. Die Benutzung von mail in eigenen Skripten ist eine angenehme Sache, weil Sie sich immer darüber informieren lassen können, wenn bei der Ausführung von Routineaufgaben (beispielsweise durch cron) etwas schief läuft. Erfolgsmeldungen via Mail werden übrigens schnell lästig, weshalb ich davon abraten würde, so etwas zu programmieren.
299
1451.book Seite 300 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
Die Anweisungen if, fi elif, else, case, esac, read, clear und einfaches Rechnen mit der Shell Das nächste Skript ist etwas länger, demonstriert aber auch mehrere Kommandos. Außerdem werden die vier Grundrechenarten durchgeführt. Der Einfachheit halber stehen die Kommentare diesmal mitten im Skript jeweils unter dem Programmtext. #!/bin/bash #Die vier Grundrechenarten clear; echo -e "Welche Operation möchten Sie ausführen?\ nBitte den ersten Buchstaben eingeben und mit Eingabe bestätigen!\n" echo -e " [a]ddieren [s]ubtrahieren [m]ultiplizieren [d]ividieren " read operator
Zunächst wird der Bildschirm aus kosmetischen Gründen mit clear »gesäubert«. Anschließend wir dem Benutzer ein Auswahlmenü angezeigt. Die Eingabe des Benutzers wird mit der read-Anweisung gelesen und in die Variable operator übernommen. So wird dem Skript später mitgeteilt, welche Rechenart ausgeführt werden soll. clear; echo -e "\nGeben Sie jetzt den ersten Werte ein " read a clear; echo -e "\nGeben Sie jetzt den zweiten Werte ein " read b
Den Variablen a und b werden die zu verarbeitenden Werte übergeben. if [ $operator = a ]; then let c=a+b clear; echo $a + $b = $c
Jetzt beginnen die bedingten Programmausführungen. Wenn (if) der Operator ein a, wie addieren enthält, werden die Werte in a und in b in c addiert. Anschließend wird das Ergebnis ausgegeben. elif [ $operator = s ]; then let c=a-b clear; echo $a – $b = $c
Das Wort elif ist ein Kunstwort. Es handelt sich um eine Abkürzung aus else und if. Sinngemäß könnte man elif vielleicht mit »ansonsten – wenn« übersetzen. Wenn der Operator ein s ist, wird jetzt also eine Subtraktion durchgeführt.
300
1451.book Seite 301 Dienstag, 7. Juli 2009 2:18 14
105.2 Einfache Skripte anpassen oder schreiben
elif [ $operator = m ]; then let c=a*b clear; echo $a "*" $b = $c
Entsprechend wird hier multipliziert: elif [ $operator = d ]; then let c=a/b clear; echo $a / $b = $c
und hier dividiert. else clear; echo -e "\nSie haben einen ungültigen Operator angegeben.!" Exit 1
Ansonsten (else) wird eine Fehlermeldung ausgegeben, weil außer den vier oben angegebenen Operatoren kein weiterer zulässig ist. Der Errorlevel wird dann auf 1 gesetzt. fi
Das Gegenteil von if ist fi. fi beendet die bedingte Verarbeitung: exit 0
Das nächste Skript soll genau dieselbe Aufgabe ausführen, diesmal allerdings unter Verwendung von case-Anweisungen. In den meisten Fällen ist es wohl Geschmacksache, welche Form der bedingten Ausführung benutzt wird. Bei den hier verwendeten Beispielen hat die Version mit den if-Anweisungen einige Zeilen weniger, dafür aber auch ein paar Byte mehr als das Skript, das auf case basiert. Nun aber wieder zur Sache: #!/bin/bash #Die vier Grundrechenarten clear; echo -e "Welche Operation möchten Sie ausführen?\nBitte den ersten Buchstaben eingeben und mit Eingabe bestätigen!\n" echo -e " [a]ddieren [s]ubtrahieren [m]ultiplizieren [d]ividieren " read operator clear; echo -e "\nGeben Sie jetzt den ersten Werte ein " read a clear; echo -e "\nGeben Sie jetzt den zweiten Werte ein " read b
Bis hierher ist alles mit dem vorherigen Beispiel identisch:
301
1451.book Seite 302 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
case "$operator" in a) let c=a+b clear; echo $a + $b = $c;;
Das ist der erste Teil der case-Anweisung. Die Variable operator bestimmt die Auswahl. Die Zeile mit a) definiert den Fall »Addition«, und es werden anschließend die entsprechenden Kommandos ausgeführt. s) let c=a-b clear; echo $a – $b = $c;;
Hier wird entsprechend dem s) subtrahiert. m) let c=a*b clear; echo $a "*" $b = $c;;
Mit m) wird multipliziert. d) let c=a/b clear; echo $a / $b = $c;;
Die Division wird mit d) ausgeführt. *) clear; echo -e "\nSie haben einen ungültigen Operator angegeben!" exit 1;;
Als Entsprechung zum else-Kommando gibt es bei einer case-Auflistung ein *). Hiermit werden alle Fälle abgedeckt, die in den vorangegangenen Auswahlen nicht enthalten sind. In diesem Fall sind es also unerwünschte Benutzereingaben. esac
Die Umkehrung von case ist esac. Hiermit wird die bedingte Ausführung abgeschlossen. exit 0
Wie Sie schon gemerkt haben, habe ich diesmal keine Ausgaben der Programme mit in den Text aufgenommen. Ich wollte damit ein unnötiges Auffüllen des Textes mit zu vielen Bildschirmausgaben vermeiden. Es ist sicherlich für ungeübte Programmierer ratsam, die Skripte abzuschreiben und auszuprobieren.
302
1451.book Seite 303 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
In der Praxis ist es natürlich auch wichtig, in bestehenden Skripten kleine Änderungen vornehmen zu können. Dazu ist es nicht erforderlich, ein Skript lesen zu können wie einen Roman. Sehen Sie sich doch einfach einmal die Skripte in /etc/ init.d an, und versuchen Sie zu verstehen, was diese Skripte machen. Prüfungstipp Fragen zum Thema Skripte sind in dieser Prüfung eher die Ausnahme. Sie sollten dieses Thema aber trotzdem für Ihre tägliche Arbeit zumindest ansatzweise beherrschen.
105.3 SQL-Datenverwaltung Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, mit einfachen SQL-Kommandos Datenbanken abzufragen und Daten zu manipulieren. Dieses Lernziel umfasst auch Anfragen, die zwei Tabellen verbinden bzw. Subselects verwenden. Wichtigste Wissensgebiete: 왘
Gebrauch einfacher SQL-Kommandos
왘
einfache Datenmanipulation
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
insert
왘
update
왘
select
왘
delete
왘
from
왘
where
왘
group by
왘
order by
왘
join
Allgemeines SQL ist eine Sprache zur Definition, Abfrage und Bearbeitung von Datenbanken. Die Abkürzung steht für Structured Query Language. SQL ist von der ISO und der ANSI standardisiert und wird von den meisten Datenbanksystemen unterstützt.
303
1451.book Seite 304 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
Im Linux-Umfeld werden Sie normalerweise MySQL-Datenbanken verwenden. Da Datenbanken immer häufiger mit Webbrowsern abgefragt werden, finden Sie unter Linux sehr oft die Kombination aus Apache-Webserver, MySQL und PHP vor. Die Sprache PHP ist gut geeignet, um Webseiten zu unterstützen, die an eine Datenbank angebunden sind. Sehr bekannt ist auch die Administrations-Webseite phpMyAdmin, mit der wohl die meisten Web-Administratoren ihre MySQLDatenbanken verwalten. In der anstehenden Prüfung geht es allerdings ausschließlich um die Administration auf der Konsole. Sie werden in diesem Buch keine umfangreiche Einführung in die Thematik Datenbanken im Allgemeinen finden. Hauptsächlich werden Sie hier wieder auf die Prüfungsfragen vorbereitet. Die Beispiele in den praktischen Teilen des Kapitels werden aber dennoch gut auf Ihrem Computer nachvollziehbar sein.
SQL – Die Befehle SQL-Befehle werden in vier Bereiche eingeteilt. Diese Bereiche sagen etwas über den Verwendungszweck der jeweiligen Kommandogruppe aus. 왘
DQL (Data Query Language) wird verwendet, um die Datenbank abzufragen. Daten können ausgewählt, sortiert oder zusammengeführt werden. Typische Vertreter dieser Sprache sind SELECT, ORDER BY, und DISTINCT.
왘
DML (Data Manipulation Language) wird verwendet, um Daten innerhalb von Tabellen zu erstellen, zu löschen oder zu modifizieren. Typisch hierbei sind INSERT, UPDATE, COMMIT und ROOLBACK.
왘
DDL (Data Definition Language) dient der Verwaltung der Datenbank selbst. Es werden z.B. Tabellen erstellt, Spalten zu Tabellen hinzugefügt oder entfernt und so weiter. Vertreter dieser Sprache sind CREATE TABLE, ALTER TABLE, DROP TABLE und so weiter.
왘
DCL (Data Control Language) wird benötigt, um den Zugriff auf bestimmte Bereiche der Datenbank zu steuern. Hier kommen GRANT und REVOKE zum Einsatz, um Rechte zu erteilen oder zu entziehen.
Die ersten Schritte Damit Sie gleich praktisch an die ganze Thematik herangehen können, empfehle ich Ihnen als Minimalausstattung einen MySQL-Server und einen MySQL-Client zu installieren. Am einfachsten erledigen Sie das mit apt-get oder yum, je nachdem, welche Distribution Sie verwenden: [root@centos01 ~]# yum install mysql-server mysql-client
304
1451.book Seite 305 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
oder: root@archangel:~# apt-get install mysql-server mysql-client
Und schon verfügen Sie über alles, was Sie für dieses Thema benötigen. Hinweis Die in diesem Kapitel verwendeten Beispiele bauen aufeinander auf. Sie sollten also von Anfang bis Ende alle Kommandos lückenlos ausführen.
Damit Sie mit Ihrem MySQL-Server arbeiten können, müssen Sie sich zunächst anmelden. Die verschiedenen Methoden können Sie in der Manpage zu mysql nachlesen. Ein Verfahren sieht so aus: root@archangel:~# mysql --user=root -h localhost Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 20 Server version: 5.0.51a-3ubuntu5.4 (Ubuntu) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
Die Angabe von -h localhost ist normalerweise optional, wenn Sie den Client auf derselben Maschine ausführen wie den Server. Wenn Sie das angegebene Benutzerkonto zur Verwendung eines Kennwortes konfiguriert haben, müssen Sie zusätzlich den Schalter --password anhängen. Sie werden dann zur Eingabe eines Passwortes aufgefordert. Wenn Sie von einem entfernten Computer aus auf den Server zugreifen, müssen Sie natürlich anstelle von localhost das Zielsystem angeben. Die Verwendung von localhost kommt in diesem Zusammenhang recht häufig vor, weil eine eventuelle Webanwendung, die auf MySQL zugreift, normalerweise auf ein und derselben Maschine installiert ist. Sie können nun mit der Arbeit beginnen. Das abschließende mysql> ist nämlich die Eingabeaufforderung. Wichtig Ein SQL-Kommando muss immer mit einem Semikolon abgeschlossen werden, weil der Server ansonsten einen mehrzeiligen Befehl erwartet.
Status überprüfen Einen ersten Überblick über den Status des Servers erhalten Sie mit dem Kommando status. Alternativ kann das Kurzkommando \s verwendet werden.
305
1451.book Seite 306 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
mysql> status; -------------mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2 Connection id: 20 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.0.51a-3ubuntu5.4 (Ubuntu) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 1 day 4 hours 30 min 32 sec Threads: 1 Questions: 136 Slow queries: 0 Opens: 25 Flush tables: 1 Open tables: 18 Queries per second avg: 0.001 --------------
Die Connection id ist eine eindeutige Kennung, über die die Sitzung identifiziert wird. Mit Current database wird angezeigt, welche Datenbank gerade verwendet wird (in diesem Fall noch keine). Current user ist natürlich der Benutzer, der die Sitzung initiiert hat. Ansonsten finden Sie noch Informationen über die verwendete Server-Version und über die Zeichensätze. Am Ende gibt es noch einen statistischen Überblick über die Laufzeit des Servers, die Anzahl der aktuell verbundenen Clients und Abfragen durch Clients. Hilfe erhalten Wenn Sie eine Zusammenstellung über die möglichen Servergrundbefehle und deren Kurzformen benötigen, dann können Sie das Kommando help oder kurz \h verwenden. Eine Aufstellung der detaillierten Hilfe über bestimmte Bereiche erhalten Sie mit dem Kommando help contents: mysql> help contents; You asked for help about help category: "Contents" For more information, type 'help - ', where
- is one of the following categories:
306
1451.book Seite 307 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
Account Management Administration Data Definition Data Manipulation Data Types Functions Functions and Modifiers for Use with GROUP BY Geographic Features Language Structure Storage Engines Stored Routines Table Maintenance Transactions Triggers
Die Hilfe lässt immer weitere Verfeinerungen der Themengebiete zu. So gibt das Kommando help data types eine Liste der verwendbaren Datentypen aus: mysql> help data types; You asked for help about help category: "Data Types" For more information, type 'help - ', where
- is one of the following topics: AUTO_INCREMENT BIGINT BINARY BIT BLOB CHAR BYTE ... hier wurden aus Platzgründen einige Zeilen entfernt ... TINYINT TINYTEXT VARBINARY VARCHAR YEAR DATA TYPE
Aus dieser Liste geht noch nicht hervor, welche Datentypen mit welchen Inhalten gefüllt werden können. Um zu erfahren, wie z.B. VARCHAR eingesetzt werden kann, geben Sie help VARCHAR ein. Es erfolgt dann eine sehr ausführliche Beschreibung des Datentyps.
Eine erste Datenbank Wenn Sie überprüfen wollen, ob auf einem Server bereits Datenbanken existieren, auf die Sie Zugriff haben, geben Sie folgendes Kommando ein:
307
1451.book Seite 308 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.00 sec)
Es existieren nur die beiden Datenbanken information_schema und mysql. Beide enthalten keinen Nutzdaten, sondern gehören sozusagen zum Lieferumfang von MySQL. Es soll nun eine erste Datenbank zu Übungszwecken erstellt werden: mysql> CREATE DATABASE kontakte; Query OK, 1 row affected (0.00 sec)
MySQL ist übrigens eigentlich nicht Case-Sensitive, weshalb Sie auch alle Kommandos durchgehend klein schreiben können. Groß- und Kleinschreibung kann aber die Übersichtlichkeit erhöhen. Im vorangegangenen Befehl können Sie so leicht erkennen, dass die Datenbank kontakte erstellt wurde. Um mit dieser Datenbank arbeiten zu können, wird mindestens eine Tabelle benötigt. Zu diesem Zweck muss MySQL aber zuerst durch das Kommando use mitgeteilt werden, welche Datenbank jetzt zu verwenden ist. Bei der Erstellung der Tabelle selbst werden Sie um ein mehrzeiliges Kommando nicht umhinkommen, weil die Bezeichnungen der Spalten und die Variablentypen der Spalten gleich mit übergeben werden. mysql> USE kontakte; Database changed
Die Datenbank ist ausgewählt, und mit der Erstellung der Tabelle kann nun begonnen werden: mysql> CREATE TABLE rufnummern ( -> id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY, -> vorname VARCHAR(128), -> nachname VARCHAR(128), -> vorwahl VARCHAR(32), -> rufnummer VARCHAR(32) -> ); Query OK, 0 rows affected (0.01 sec)
Wenn ein Kommando mehrzeilig eingegeben wird wie in diesem Fall, ist es üblich, die geöffnete Klammer für eine Aufzählung in die erste Zeile des Kommandos und die schließende Klammer in die letzte Zeile des Kommandos zu setzen.
308
1451.book Seite 309 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
Das ist allerdings nicht durch die Syntax vorgeschrieben, sondern soll lediglich die Lesbarkeit des Kommandos erhöhen. Es folgt, wie immer, ein Semikolon. Wie Sie sehen, werden die einzelnen Deklarationen für die Spalten mit Kommata getrennt. Die letzte Definition darf aber nicht mehr mit einem Komma abgeschlossen werden. Das ist ein beliebter Eingabefehler! Die erste Spalte der soeben erstellten Tabelle »rufnummern« enthält den primären Schlüssel, der beim Verknüpfen mehrerer Tabellen benötigt wird. Es hat sich eingebürgert, diesen Wert mit id zu bezeichnen, was aber nicht Voraussetzung ist. Sie sollten nur sicherstellen, dass der Primärschlüssel eindeutig ist. Die Spalte »nachname« wäre also ein denkbar schlechter Primärschlüssel. Sollten Sie keine separate Spalte für den Primärschlüssel verwenden wollen, ist eine Kundennummer für Personen oder die Artikelnummer für Waren eine gute Wahl. Wenn der Wert id bei der Eingabe neuer Datensätze nicht mit angegeben wird, vergibt MySQL automatisch den ersten noch freien Wert (AUTO_INCREMENT). Die Anweisung NOT NULL besagt, dass dieser Wert nicht leer bleiben darf. Es handelt sich nicht um den numerischen Wert »0«! Die verwendeten Datentypen sollen an dieser Stelle mangels Prüfungsrelevanz nicht näher erläutert werden. Lesen Sie diese bitte bei Interesse in der Hilfe von MySQL nach. Jetzt können die ersten Datensätze in die Tabelle eingetragen werden. Hierfür wird das Kommando INSERT verwendet: mysql> -> -> -> -> -> -> -> ->
INSERT INTO rufnummern (id,vorname,nachname,vorwahl,rufnummer) VALUES (1, 'Hans', 'Panz', '030', '1234588' );
Es gibt mehrere Methoden, wie Sie SQL-Kommandos übergeben können. Im vorangegangenen Beispiel wurde die Eingabe über mehrere Zeilen »verteilt«, was die Übersichtlichkeit bei der Eingabe erheblich erhöht. Eine weitere Möglichkeit wäre es, das ganze Kommando hintereinander weg zu schreiben. Es wird auf diese Weise nun der zweite Datensatz angelegt: mysql> INSERT INTO rufnummern (id, vorname, nachname, vorwahl, rufnummer) VALUES (2, 'Willi', 'Wichtig', '030', '4711999'); Query OK, 1 row affected (0.00 sec)
Sie können aber auch alle Kommandos einer Sitzung zunächst in eine Textdatei schreiben und diese Textdatei dann als Eingabedatei für das mysql-Programm
309
1451.book Seite 310 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
verwenden. Hierbei haben Sie sogar die Möglichkeit des Editierens. Üblicherweise verwendet man hierbei die Dateierweiterung sql. Sie können in einer solchen Datei beliebige Kommandos unterbringen. Sie übergeben diese Textdatei an MySQL, indem Sie das Kommando source verwenden. Beispiel: mysql> source /home/harald/rufnummerntabelle.sql
Sollten Sie einen Windows-Client verwenden, müssen Sie den Pfad Unixlike mit Slashes und nicht mit Backslashes angeben: mysql> source e:/daten/harald/rufnummerntabelle.sql
Es werden alle in der Datei enthaltenen Kommandos nacheinander ausgeführt.
Abfragen mit SELECT und WHERE Um einfach den gesamten Inhalt einer Tabelle auszugeben, verwenden Sie SELECT mit einem * als Joker: mysql> SELECT * FROM rufnummern; +----+---------+----------+---------+-----------+ | id | vorname | nachname | vorwahl | rufnummer | +----+---------+----------+---------+-----------+ | 1 | Hans | Panz | 030 | 1234588 | | 2 | Willi | Wichtig | 030 | 4711999 | +----+---------+----------+---------+-----------+ rows in set (0.00 sec)
Wenn nur ausgewählte Spalten einer Tabelle ausgegeben werden sollen, müssen diese durch Kommata voneinander getrennt angegeben werden. Um eine reine Namensliste zu erhalten, können Sie also so vorgehen: mysql> SELECT vorname,nachname FROM rufnummern; +---------+----------+ | vorname | nachname | +---------+----------+ | Hans | Panz | | Willi | Wichtig | +---------+----------+ 2 rows in set (0.01 sec)
Es können aber auch einzelne Datensätze anhand von Angaben einzelner Feldinhalte gesucht und ausgegeben werden. Wenn zum Beispiel die Rufnummer von Willi benötigt wird, und Sie wissen genau, dass es nur einen einzigen Willi in der Datenbank gibt, können Sie folgendes Kommando verwenden:
310
1451.book Seite 311 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
mysql> SELECT vorwahl,rufnummer FROM rufnummern WHERE vorname='Willi'; +---------+-----------+ | vorwahl | rufnummer | +---------+-----------+ | 030 | 4711999 | +---------+-----------+ 1 row in set (0.00 sec)
Schön an der SQL-Syntax ist, dass Sie die Anweisungen fast lesen können wie einen normalen Satz. Obiges Beispiel ist also mit etwas logischem Denken selbsterklärend. Übrigens ist es wohl eher unwahrscheinlich, dass jemand auf eine so umständliche Art und Weise versucht an, eine Rufnummer heranzukommen. Bedenken Sie aber immer, dass SQL-Kommandos in den meisten Fällen von Anwendungsprogrammen »unter der Motorhaube« ausgeführt werden. Typische Programmiersprachen für solche Anwendungen sind PHP, Perl und C#. Als Demonstration für die automatische Vergabe der ID-Nummer (die ja mit AUTO_INCREMENT konfiguriert wurde) und damit die Abfragen etwas interessanter gestaltet werden können, sollten Sie die Tabelle jetzt um ein paar Datensätze erweitern. Im nächsten Beispiel wird ein Datensatz ohne ID angelegt. Beachten Sie die automatische Vergabe: mysql> INSERT INTO rufnummern (vorname,nachname,vorwahl,rufnummer) VALUES ('Susi', 'Paschke', '030', '770815'); Query OK, 1 row affected (0.00 sec)
Die Eingabe wurde auch ohne die Vergabe der ID-Nummer akzeptiert. Mit einer Abfrage wird überprüft, ob dennoch eine ID-Nummer vergeben wurde: mysql> SELECT * FROM rufnummern WHERE vorname='Susi'; +----+---------+----------+---------+-----------+ | id | vorname | nachname | vorwahl | rufnummer | +----+---------+----------+---------+-----------+ | 3 | Susi | Paschke | 030 | 770815 | +----+---------+----------+---------+-----------+ 1 row in set (0.00 sec)
Ein weiterer Test wird zeigen, was geschieht, wenn bei der Erstellung eines Datensatzes die Vorwahl vergessen wird: mysql> INSERT INTO rufnummern (vorname,nachname,rufnummer) VALUES ('Dieter','Durstig','99912357'); Query OK, 1 row affected (0.00 sec)
Zumindest wird die Eingabe akzeptiert. Und jetzt wieder die Überprüfung:
311
1451.book Seite 312 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
mysql> SELECT * FROM rufnummern WHERE vorname='Dieter'; +----+---------+----------+---------+-----------+ | id | vorname | nachname | vorwahl | rufnummer | +----+---------+----------+---------+-----------+ | 4 | Dieter | Durstig | NULL | 99912357 | +----+---------+----------+---------+-----------+ 1 row in set (0.00 sec)
Als Inhalt wird in der Tabelle NULL angezeigt, was, wie schon einmal erwähnt wurde, nichts mit dem numerischen Wert zu tun hat. Sie hätten das beim Erstellen der Tabelle von vorneherein abfangen können, indem Sie einen voreingestellten Wert (default) vergeben hätten. Bei der Planung und Erstellung von Tabellen gibt es noch viele Faktoren zu berücksichtigen, die aber nicht Bestandteil der Prüfung sind. Sie können die Ausgabe von SELECT auch noch auf eine andere Weise begrenzen. Bisher ist die Tabelle noch recht kurz, sodass mache Anweisungen nicht wirklich Sinn machen, aber Sie sehen wenigstens, wie sie funktionieren. Betrachten Sie also das folgende Kommando: mysql> SELECT * FROM rufnummern WHERE id > 1 AND id < 4;
Durch die Angaben hinter WHERE werden nur Datensätze ausgegeben, deren IDNummer größer ist als 1 aber kleiner als 4: mysql> SELECT * FROM rufnummern WHERE id > 1 AND id < 4; +----+---------+----------+---------+-----------+ | id | vorname | nachname | vorwahl | rufnummer | +----+---------+----------+---------+-----------+ | 2 | Willi | Wichtig | 030 | 4711999 | | 3 | Susi | Paschke | 030 | 770815 | +----+---------+----------+---------+-----------+ 2 rows in set (0.00 sec)
Aktualisieren von Datensätzen Natürlich müssen die Werte einer Datenbank veränderbar sein. Zu diesem Zweck gibt es das Kommando UPDATE. Sie können UPDATE gleich verwenden, um die Vorwahl von Dieter Durstig zu aktualisieren: mysql> UPDATE rufnummern SET vorwahl = '02131' WHERE vorname = 'Dieter'; Query OK, 1 row affected (0.00 sec) Rows matched: 1
Changed: 1
Warnings: 0
Die Änderung wurde von MySQL akzeptiert und durchgeführt. Der Schönheitsmakel in der Tabelle wäre damit behoben. Sie können den Datensatz über eine
312
1451.book Seite 313 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
beliebige Spalte der Tabelle identifizieren lassen. Die Angabe muss nur eindeutig sein, damit nicht die falschen Datensätze verändert werden. Im obigen Beispiel wurde der Vorname verwendet. Damit die folgenden Übungen besser funktionieren, sollte Willi nach Köln umziehen, damit er eine andere Vorwahl bekommt. Und damit dieses Update nicht mit dem vorangegangenen Kommando identisch ist, wird diesmal die ID-Nummer zur Identifikation verwendet: mysql> UPDATE rufnummern SET vorwahl = '0221' WHERE id=2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
Sortieren und Gruppieren Wenn Sie eine Abfrage mit SELECT durchführen, können Sie das Ergebnis sortieren lassen. Damit das funktioniert, müssen Sie MySQL sagen, welche Spalte für die Sortierung verwendet werden soll. Normalerweise wird einfach die erste Tabellenspalte herangezogen, aber Sie können in unserer Beispieltabelle auch nach Vornamen, Nachnamen, Vorwahlen oder Rufnummern sortieren. Folgendes Kommando sortiert nach Nachnamen: mysql> SELECT * FROM rufnummern ORDER BY nachname; +----+---------+----------+---------+-----------+ | id | vorname | nachname | vorwahl | rufnummer | +----+---------+----------+---------+-----------+ | 4 | Dieter | Durstig | 02131 | 99912357 | | 1 | Hans | Panz | 030 | 1234588 | | 3 | Susi | Paschke | 030 | 770815 | | 2 | Willi | Wichtig | 0221 | 4711999 | +----+---------+----------+---------+-----------+ 4 rows in set (0.00 sec)
Die Sortierung hat funktioniert. Natürlich können Sie das Ganze noch mit einer Filterung kombinieren und zusätzlich die auszugebenden Spalten auswählen. Außerdem ist es möglich, die Anzahl der auszugebenden Datensätze zu limitieren (LIMIT): mysql> SELECT vorname,nachname FROM rufnummern ORDER BY vorwahl LIMIT 2; +---------+----------+ | vorname | nachname | +---------+----------+ | Dieter | Durstig | | Willi | Wichtig | +---------+----------+ 2 rows in set (0.00 sec)
313
1451.book Seite 314 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
Mit dem Kommando GROUP kann eine andere Form der Filterung vorgenommen werden. Zunächst einmal wird auch GROUP eine alphabetische bzw. eine numerische Sortierung nach der angegebenen Spalte durchführen. Außerdem wählt GROUP nur einen Repräsentanten pro gefundenen Datensatz aus. Sie sehen das am besten in einem Beispiel, in dem GROUP nach Vorwahlen gruppiert: mysql> SELECT * FROM rufnummern GROUP BY vorwahl; +----+---------+----------+---------+-----------+ | id | vorname | nachname | vorwahl | rufnummer | +----+---------+----------+---------+-----------+ | 4 | Dieter | Durstig | 02131 | 99912357 | | 2 | Willi | Wichtig | 0221 | 4711999 | | 1 | Hans | Panz | 030 | 1234588 | +----+---------+----------+---------+-----------+ 3 rows in set (0.00 sec)
Natürlich ergibt das in Bezug auf diese Tabelle keinen Sinn, aber Sie sehen, was GROUP grundsätzlich macht. Die Tabelle wurde zunächst nach Vorwahl sortiert. Da Berlin (030) zweimal vorkommt, wird nur der erste gefundene Treffer ausgegeben.
Erweitern von Datenbanken Um die folgenden Operationen durchführen zu können, benötigen Sie eine zweite Tabelle. Damit die Erstellung nicht zu mühselig wird und damit Sie gleichzeitig lernen können, wie man SQL-Kommandos aus einer Datei übergibt, tippen Sie bitte folgendes kurzes Listing ab, und speichern Sie es unter dem Namen kategorien.sql: USE kontakte; CREATE TABLE kategorien ( id INT(2) NOT NULL AUTO_INCREMENT PRIMARY KEY, kategorie VARCHAR(32) ); INSERT INTO kategorien (kategorie) VALUES ('Freunde'); INSERT INTO kategorien (kategorie) VALUES ('Kollegen'); INSERT INTO kategorien (kategorie) VALUES ('Bekannte');
In dem Listing gibt es keine Kommandos, die Sie noch nicht kennen, weshalb ich mir Erläuterungen an dieser Stelle spare. Damit die Tabelle erstellt werden kann, starten Sie bitte Ihren MySQL-Client und geben Sie folgendes Kommando am Prompt ein: mysql> source /home/harald/kategorien.sql;
314
1451.book Seite 315 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
Den Pfad ersetzen Sie natürlich durch den, den Sie bei der Speicherung der Anweisungsdatei angegeben haben. Die Ausgabe des Befehls sollte dann (abgesehen von den Verarbeitungszeiten) so aussehen: Database changed Query OK, 0 rows affected (0.01 sec) Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec)
Es wurden alle Kommandos innerhalb der Datei positiv quittiert. Sollte etwas falsch gelaufen sein, dann löschen Sie die Tabelle mit folgendem Kommando: mysql> drop table kategorien;
Überprüfen Sie anschließend noch einmal das Listing, und wiederholen Sie die Operation noch einmal. Wenn Sie der Meinung sind, dass jetzt alles in Ordnung ist, überprüfen Sie das Ergebnis: mysql> show tables -> ; +--------------------+ | Tables_in_kontakte | +--------------------+ | kategorien | | rufnummern | +--------------------+ 2 rows in set (0.00 sec)
Sie verfügen jetzt über eine zweite Tabelle in derselben Datenbank. Überprüfen Sie den Inhalt der zweiten Tabelle: mysql> select * from kategorien; +----+-----------+ | id | kategorie | +----+-----------+ | 1 | Freunde | | 2 | Kollegen | | 3 | Bekannte | +----+-----------+ 3 rows in set (0.00 sec)
Damit die beiden Tabellen miteinander kombiniert werden können, muss die erste Tabelle erweitert werden. Das ist übrigens absolut nicht Bestandteil der Prüfung, sondern hier ein Mittel zum Zweck:
315
1451.book Seite 316 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
mysql> ALTER TABLE rufnummern ADD (kategorie_id INT(5)); Query OK, 4 rows affected (0.01 sec) Records: 4 Duplicates: 0 Warnings: 0
Es gibt keine Fehlermeldung. Überprüfen Sie aber dennoch, ob die erste Tabelle wunschgemäß erweitert wurde: mysql> SELECT * FROM rufnummern; +----+---------+----------+---------+-----------+--------------+ | id | vorname | nachname | vorwahl | rufnummer | kategorie_id | +----+---------+----------+---------+-----------+--------------+ | 1 | Hans | Panz | 030 | 1234588 | NULL | | 2 | Willi | Wichtig | 0221 | 4711999 | NULL | | 3 | Susi | Paschke | 030 | 770815 | NULL | | 4 | Dieter | Durstig | 02131 | 99912357 | NULL | +----+---------+----------+---------+-----------+--------------+ 4 rows in set (0.00 sec)
Die neu angelegte Spalte enthält zwar noch keine Werte, aber sie wurde angelegt. Damit Sie die Kategorien für Abfragen verwenden können, müssen jetzt nur noch die entsprechenden IDs aus der Tabelle »kategorien« eingetragen werden. Das geschieht mit dem Befehl UPDATE. Hier noch einmal ein Beispiel: mysql> UPDATE rufnummern SET kategorie_id='1' -> WHERE vorname='Willi'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
Verfahren Sie mit den anderen drei Datensätzen genauso, wobei Sie die Kategorien unterschiedlich wählen. Wenn Sie alles richtig gemacht haben, sollten Sie sinngemäß ein solches Ergebnis erhalten: mysql> SELECT * FROM rufnummern; +----+---------+----------+---------+-----------+--------------+ | id | vorname | nachname | vorwahl | rufnummer | kategorie_id | +----+---------+----------+---------+-----------+--------------+ | 1 | Hans | Panz | 030 | 1234588 | 1 | | 2 | Willi | Wichtig | 0221 | 4711999 | 1 | | 3 | Susi | Paschke | 030 | 770815 | 3 | | 4 | Dieter | Durstig | 02131 | 99912357 | 2 | +----+---------+----------+---------+-----------+--------------+ 4 rows in set (0.00 sec)
Die Tabelle wurde erfolgreich erweitert und kann nun mit der neuen Spalte verwendet werden. Wenn Sie so etwas in einer Produktivdatenbank durchführen müssen, sollten Sie natürlich vorher eine Datensicherung machen und die Tabelle auf eventuelle Fehler hin untersuchen. Die Überprüfung der Tabelle muss dann
316
1451.book Seite 317 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
vor und nach der Erweiterung durchgeführt werden. Bei den gerade erstellten Übungstabellen sind zwar keine Fehler zu erwarten, aber eine Überprüfung sollten Sie schon allein zu Übungszwecken durchführen: mysql> CHECK TABLE rufnummern EXTENDED; +---------------------+-------+----------+----------+ | Table | Op | Msg_type | Msg_text | +---------------------+-------+----------+----------+ | kontakte.rufnummern | check | status | OK | +---------------------+-------+----------+----------+ 1 row in set (0.00 sec)
Wie nicht anders zu erwarten war, ist alles in Ordnung. Eine Überprüfung mit der Option EXTENDED kann übrigens bei großen Datenbanken sehr lange dauern.
Arbeiten mit mehreren Tabellen Die Aufteilung von Datensätzen über mehrere Tabellen hat erhebliche Vorteile. Ein Vorteil ist der geringere Speicherverbrauch. In unserem Beispiel müssen jetzt nicht mehr die kompletten Worte »Freunde«, »Bekannte« oder »Kollegen« pro Datensatz in der Tabelle »rufnummern« abgespeichert werden, sondern nur noch ein numerische Wert. Dadurch, dass in der Tabelle keine redundanten Werte abgelegt werden, ist es auch unwahrscheinlicher, dass Inkonsistenzen in der Datenbank auftreten. In unserem Beispiel könnte man außerdem, wenn man eines Tages in Rente geht, alle Kollegen sehr einfach in Ex-Kollegen umwandeln – mit nur einem einzigen UPDATE-Kommando! Das Beispiel ist zwar etwas albern, aber es gibt auch Bereiche bei echten Datenbanken, wo diese Vorteile zum Tragen kommen. Wenn mit mehreren Tabellen gearbeitet wird, dann müssen Sie bei Abfragen und anderen Operationen sogenannte Subselects verwenden. Stellen Sie sich vor, Sie müssen die Rufnummern aller Freunde mit den dazu passenden Vornamen herausfinden. Dann könnten Sie natürlich die Tabelle »rufnummern« nach der kategorie_id 1 durchsuchen. Es ist aber nicht realistisch, dass man solche Zuordnungen kennt (Sonst bräuchte man schließlich keine Datenbank). Deshalb muss ein geeigneter Abfragemechanismus gewählt werden. Subselect Ein Subselect ist eigentlich nichts anderes als eine verschachtelte Abfrage: mysql> -> -> -> ->
SELECT vorname, vorwahl, rufnummer FROM rufnummern WHERE kategorie_id IN (SELECT id FROM kategorien WHERE kategorie='Freunde' );
317
1451.book Seite 318 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
+---------+---------+-----------+ | vorname | vorwahl | rufnummer | +---------+---------+-----------+ | Hans | 030 | 1234588 | | Willi | 0221 | 4711999 | +---------+---------+-----------+ 2 rows in set (0.00 sec)
Die kategorie_id der ersten Abfrage wird im Prinzip durch das Ergebnis der zweiten Abfrage (in den Klammern) ersetzt. Das Ergebnis der zweiten Abfrage, nach der ID der Kategorie Freunde, lautet ‚1’. Sie können exakt dasselbe Ergebnis erreichen, wenn Sie mit der folgenden, geänderten Syntax in der ersten SELECT-Anweisung arbeiten: mysql> SELECT rufnummern.vorname, rufnummern.vorwahl, rufnummern.rufnummer FROM rufnummern -> WHERE kategorie_id IN -> (SELECT id FROM kategorien -> WHERE kategorie='Freunde' -> ); +---------+---------+-----------+ | vorname | vorwahl | rufnummer | +---------+---------+-----------+ | Hans | 030 | 1234588 | | Willi | 0221 | 4711999 | +---------+---------+-----------+ 2 rows in set (0.01 sec)
Es wurde hierbei dem Spaltennamen jeweils der Name der Tabelle vorangestellt. Dadurch ist es möglich, in der Ausgabe auf Felder von mehreren Tabellen gleichzeitig zuzugreifen. Diese Methode benötigen Sie auch bei der Verwendung des Kommandos JOIN. JOIN Eine wesentlich elegantere Methode, Tabellen miteinander zu verknüpfen, bietet das Kommando JOIN. Damit die Tabellennamen nicht immer ausgeschrieben werden müssen, können Sie hier auch Aliase verwenden. Die Definition der Aliase geschieht ganz einfach während der Befehlsausführung. Wenn Sie anstatt FROM rufnummern die Zeile FROM rufnummern r verwenden, dann kann der Alias r für die Tabelle »rufnummern« eingesetzt werden. Das gilt sogar rückwirkend für die SELECT-Anweisung innerhalb desselben Befehls. Die ausgeschriebenen Tabellennamen können dann innerhalb desselben Befehls übrigens nicht mehr verwendet werden! Das folgende Kommando gibt alle »Nutzdaten« beider Tabellen auf einmal aus:
318
1451.book Seite 319 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
mysql> SELECT r.vorname, r.nachname, r.vorwahl, -> r.rufnummer, k.kategorie -> FROM rufnummern r -> LEFT JOIN kategorien k ON r.kategorie_id = k.id; +---------+----------+---------+-----------+-----------+ | vorname | nachname | vorwahl | rufnummer | kategorie | +---------+----------+---------+-----------+-----------+ | Hans | Panz | 030 | 1234588 | Freunde | | Willi | Wichtig | 0221 | 4711999 | Freunde | | Susi | Paschke | 030 | 770815 | Bekannte | | Dieter | Durstig | 02131 | 99912357 | Kollegen | +---------+----------+---------+-----------+-----------+ 4 rows in set (0.00 sec)
Aus diesem Beispiel können Sie viel Neues lernen. Erst in der dritten Zeile wurde der Alias r für rufnummern definiert, aber er wurde schon in der SELECT-Anweisung vorab verwendet. Der Alias für die Tabelle kategorien wurde erst in der JOIN-Anweisung festgelegt, weil er vorher nicht benötigt wurde. Was die LEFT JOIN-Anweisung betrifft, kann man sagen, dass die Quelltabelle (hier »rufnummern«) links von dieser Anweisung steht und die Verknüpfungstabelle (hier »kategorien«) rechts. Das sehen Sie am besten, wenn Sie das Kommando auf einer einzelnen Zeile eingeben, was normalerweise aus Gründen der Übersichtlichkeit nicht gemacht würde: ... FROM rufnummern r LEFT JOIN kategorien k ON r.kate ...
Die Reihenfolge der Angaben hinter dem ON ist unerheblich. Es liegt nahe, dass es auch ein RIGHT JOIN geben muss. Das folgende Kommando wurde so gewählt, dass dieselben Spalten aus den Tabellen ausgegeben werden wie im vorangegangenen Beispiel. So wird der Zusammenhang bzw. der Unterschied zwischen den beiden JOIN-Formen leichter ersichtlich. mysql> SELECT r.vorname, r.nachname, r.vorwahl, -> r.rufnummer, k.kategorie -> FROM kategorien k -> RIGHT JOIN rufnummern r ON r.kategorie_id = k.id; +---------+----------+---------+-----------+-----------+ | vorname | nachname | vorwahl | rufnummer | kategorie | +---------+----------+---------+-----------+-----------+ | Hans | Panz | 030 | 1234588 | Freunde | | Willi | Wichtig | 0221 | 4711999 | Freunde | | Susi | Paschke | 030 | 770815 | Bekannte | | Dieter | Durstig | 02131 | 99912357 | Kollegen | +---------+----------+---------+-----------+-----------+ 4 rows in set (0.00 sec)
319
1451.book Seite 320 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
In diesem Fall steht die Quelltabelle (»rufnummern«) rechts von JOIN, wie im folgenden Befehlsausschnitt wieder deutlich zu sehen ist: ... FROM kategorien k RIGHT JOIN rufnummern r ON r.kat ...;
Die Reihenfolge der Angaben hinter ON wurde absichtlich genauso gewählt wie im Beispiel für LEFT JOIN, um zu demonstrieren, dass diese Reihenfolge nichts mit der Verwendung des Kommandos selbst zu tun hat. Bei den beiden vorangegangenen Methoden spricht man von Outer Joins. Diese haben die Eigenschaft, auch dann ein Ergebnis zu liefern, wenn ein überprüftes Feld leer ist. Es hängt von den Daten selbst ab, ob dieses Verhalten erwünscht ist oder eben nicht. In den vorangegangenen Beispielen spielt das überhaupt keine Rolle, weil es in der Tabelle »rufnummern« in jedem Datensatz auch eine Angabe zur kategorie_id gibt. Problematisch wird es aber nur bei leeren Feldern. Wenn es leere Felder in einer Tabelle gibt, und die Ausgabe der entsprechenden Abfragen mit Outer Joins ist nicht akzeptabel, können Sie auf Inner Joins ausweichen. Um das zu überprüfen, können Sie zunächst einen Datensatz aus der »rufnummern« Tabelle auf eine kategorie_id setzen, die es in der Zieltabelle gar nicht gibt. Dazu verwenden Sie einen UPDATE Befehl: mysql> UPATE rufnummern SET kategorie_id='42' WHERE vorname='Dieter'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
Überprüfen Sie die Tabelle anschließend, indem Sie diese komplett ausgeben. Verwenden Sie hierzu die entsprechende SELECT-Anweisung. mysql> SELECT * FROM rufnummern; +----+---------+----------+---------+-----------+--------------+ | id | vorname | nachname | vorwahl | rufnummer | kategorie_id | +----+---------+----------+---------+-----------+--------------+ | 1 | Hans | Panz | 030 | 1234588 | 1 | | 2 | Willi | Wichtig | 0221 | 4711999 | 1 | | 3 | Susi | Paschke | 030 | 770815 | 3 | | 4 | Dieter | Durstig | 02131 | 99912357 | 42 | +----+---------+----------+---------+-----------+--------------+ 4 rows in set (0.01 sec)
Bevor INNER JOIN zum Einsatz kommt, soll aber erst noch überprüft werden, was ein Outer Join aus dieser Situation macht. Ein JOIN RIGHT soll hier genügen: mysql> -> -> ->
320
SELECT r.vorname, r.nachname, r.vorwahl, r.rufnummer, k.kategorie FROM kategorien k RIGHT JOIN rufnummern r ON r.kategorie_id = k.id;
1451.book Seite 321 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
+---------+----------+---------+-----------+-----------+ | vorname | nachname | vorwahl | rufnummer | kategorie | +---------+----------+---------+-----------+-----------+ | Hans | Panz | 030 | 1234588 | Freunde | | Willi | Wichtig | 0221 | 4711999 | Freunde | | Susi | Paschke | 030 | 770815 | Bekannte | | Dieter | Durstig | 02131 | 99912357 | NULL | +---------+----------+---------+-----------+-----------+ 4 rows in set (0.00 sec)
Wie Sie sehen, ergibt der Vergleich r.kategorie_id = k.id kein Ergebnis für Dieter Durstig, was mit NULL quittiert wird. Diese unschöne Ausgabe wird bei einem INNER JOIN nicht vorkommen. Die Syntax entspricht übrigens ansonsten der von JOIN RIGHT: mysql> SELECT r.vorname, r.nachname, r.vorwahl, -> r.rufnummer, k.kategorie -> FROM rufnummern r -> INNER JOIN kategorien k ON r.kategorie_id = k.id; +---------+----------+---------+-----------+-----------+ | vorname | nachname | vorwahl | rufnummer | kategorie | +---------+----------+---------+-----------+-----------+ | Hans | Panz | 030 | 1234588 | Freunde | | Willi | Wichtig | 0221 | 4711999 | Freunde | | Susi | Paschke | 030 | 770815 | Bekannte | +---------+----------+---------+-----------+-----------+ 3 rows in set (0.00 sec)
Wie sie sehen, wird der Datensatz von Dieter Durstig nicht ausgegeben.
Destruktive Kommandos Abschließend müssen Sie noch lernen, wie Datensätze, Tabellen und Datenbanken gelöscht werden. Dieses Thema wird zum Schluss behandelt, um Ihnen unnötige Tipparbeit zu ersparen. Sie können mit den Beispielen dieses Unterkapitels Ihren Computer praktisch wieder in den ursprünglichen Zustand zurück versetzen. Sie können mit SQL keine einzelnen Felder eines Datensatzes löschen. Wenn Sie das vorhaben, müssen Sie stattdessen das Kommando UPDATE verwenden und das entsprechende Feld mit nichts (zwei aufeinander folgende Hochkommata) füllen. Die kleinste Verwaltungseinheit, die Sie löschen können, ist eine ganze Zeile, also ein Datensatz. Verwenden Sie dazu das Kommando DELETE. Im folgenden Beispiel wird der Datensatz, der den Kontakt Dieter Durstig enthält, gelöscht:
321
1451.book Seite 322 Dienstag, 7. Juli 2009 2:18 14
Topic 105: Shells, Skripte und Datenverwaltung
mysql> DELETE FROM rufnummern -> WHERE vorname='Dieter' -> AND nachname='Durstig'; Query OK, 1 row affected (0.00 sec)
So haben Sie noch ganz nebenbei die Verwendung des Operators AND erlernt. Im vorliegenden Fall hätte natürlich die Angabe des Vornamens ausgereicht, weil die Tabelle nur einen Dieter enthielt. Wenn Sie alle Datensätze einer Tabelle löschen wollen, verwenden Sie einfach folgendes Kommando: mysql> DELETE FROM rufnummern; Query OK, 3 rows affected (0.00 sec)
Das Beispiel illustriert, wie gefährlich diese Anweisung ist, wenn Sie schnell tippen und zwischendurch versehentlich die Eingabetaste erwischen. Die Tabelle »rufnummern« ist jetzt nämlich leer! Um eine ganze Tabelle zu löschen, verwenden Sie das Kommando DROP. Hierbei spielt es keine Rolle, ob die Tabelle Datensätze enthält oder nicht. Die folgenden beiden Kommandos löschen die selbst erstellten Tabellen: mysql> DROP TABLE rufnummern; Query OK, 0 rows affected (0.00 sec)
Die Tabelle wurde ohne Vorwarnung oder Sicherheitsabfrage unwiderruflich gelöscht. mysql> DROP TABLE kategorien; Query OK, 0 rows affected (0.00 sec)
Auch die Tabelle »kategorien«, die ja noch Datensätze enthielt, wurde, wie fast immer, in weniger als einer hundertstel Sekunde gelöscht. Überprüfen Sie das Ergebnis: mysql> SHOW TABLES; Empty set (0.00 sec)
Die Datenbank enthält jetzt keine Tabellen mehr. Sie können die Datenbank jetzt auch noch löschen. Dazu wird ebenfalls das Kommando DROP verwendet: mysql> DROP DATABASE kontakte; Query OK, 0 rows affected (0.00 sec)
Jetzt ist Ihr MySQL wieder in dem Zustand wie kurz nach der Installation. Überprüfen Sie das durch die Ausgabe der vorhandenen Datenbanken:
322
1451.book Seite 323 Dienstag, 7. Juli 2009 2:18 14
105.3 SQL-Datenverwaltung
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.00 sec)
Die Datenbanken information_schema und mysql gehören zum ursprünglichen Zustand dazu.
323
1451.book Seite 324 Dienstag, 7. Juli 2009 2:18 14
1451.book Seite 325 Dienstag, 7. Juli 2009 2:18 14
In diesem Kapitel lernen Sie die prüfungsgerechte Konfiguration von X11, von Displaymanagern und der Windowmanager. Es wird also zur Abwechslung ausnahmsweise mal grafisch.
Topic 106: Oberflächen und Desktops 106.1 X11 installieren und konfigurieren Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, X und einen X-Fontserver zu installieren und zu konfigurieren. Wichtigste Wissensgebiete: 왘
sicherstellen, dass die Videokarte und der Monitor von einem X-Server unterstützt werden
왘
einen X-Fontserver installieren und konfigurieren
왘
die X-Window-Konfigurationsdatei prinzipiell verstehen und kennen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/X11/xorg.conf
왘
xhost
왘
DISPLAY
왘
xwininfo
왘
xdpyinfo
왘
X
Allgemeines X-Window ist ein modular aufgebautes, grafisches System, das u.a. von Linux verwendet wird. Ursprünglich wurde X-Window von MIT (Massachusetts Institute of Technology), DEC (Digital Equipment Corporation) und IBM (International Business Machines Corporation) in Zusammenarbeit entwickelt, lange Zeit bevor es überhaupt Linux gab. Die erste Version erschien schon 1984. Bereits 1987 lag
325
1451.book Seite 326 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
X-Window in der Version 11 vor. Diese Versionsnummer ist bis heute aktuell (X11). Lediglich Revisionsnummern, die durch ein großes R gekennzeichnet sind, dokumentieren den Fortschritt in der Entwicklung von X. Nach vier Jahren, also ab 1988, wurde das Projekt vom X Consortium weiter betreut. Dieses Consortium bestand aus 12 namhaften Computerherstellern. Die letzte Version von X, die unter dieser Organisation entwickelt wurde, war X11R6. Auch diese Bezeichnung hat bis heute in der Verzeichnisstruktur vieler Unix- und Linux-Systeme ihre Spuren hinterlassen. Im Jahre 1992 wurde X11R6 von dem frisch gegründeten XFree86-Team erstmals in einer freien Version auf den PC portiert. Die Mindestvoraussetzung war ein i80386-kompatibler Prozessor. Nachdem 2003 aufgrund von Streitigkeiten innerhalb des Entwicklerteams von XFree86 keine konstruktive Zusammenarbeit mehr möglich war, übernahm die X.Org Foundation die Weiterentwicklung des freien Projektes. Bereits im April 2004 hatte die X.Org eine Version X11R6.7.0 vorzuweisen. Am 14. April 2009 erschien die (momentan aktuelle) Version X11R7.5.
Der Aufbau von X Bei X-Window handelt es sich um eine Client-Server-Applikation. Auch wenn in den meisten Fällen sowohl die Serverkomponente als auch die Client-Komponenten auf derselben Maschine ausgeführt werden, durchläuft die Kommunikation zwischen dem X-Server und den X-Clients immer die Netzwerkschicht. Es ist mithilfe des X-Protokolls möglich, die Ausgabe eines Programms (X-Client) auf einem entfernten Rechner (X-Server) ausgeben zu lassen. Wie das funktioniert, erfahren Sie etwas später in diesem Buch. Doch nun sollen zunächst die wichtigsten Komponenten von X-Window voneinander unterschieden werden. X-Server Der X-Server ist die Komponente, die über den Kernel und seine Module mit der Hardware kommuniziert. Er nimmt Eingaben von der Tastatur entgegen und ist für die Kommunikation mit der Grafikhardware zuständig. Der X-Server hat keinen Einfluss auf das Aussehen der Anwendungsprogramme, sondern ist nur für die Ausgabe zuständig. Zu diesem Zweck kommuniziert er mit den X-Clients. Zudem kann er auch auf einer entfernten Maschine im Netzwerk laufen. X-Clients Ein X-Client ist ein Programm, das mit dem X-Server kommuniziert. Um diese Aussage zu präzisieren: Es handelt sich bei einem X-Client normalerweise schlicht
326
1451.book Seite 327 Dienstag, 7. Juli 2009 2:18 14
106.1 X11 installieren und konfigurieren
und ergreifend um ein Anwendungsprogramm. Dieses Programm (z.B. Textverarbeitung, Mail-Client, Browser) übernimmt die eigentliche Verarbeitung der Daten. Das Ergebnis wird dann an den X-Server geschickt, der die Ausgabe auf dem Bildschirm durchführt. Windowmanager Ein Windowmanager ist selbst ein X-Client. Er fungiert als Schnittstelle zu allen anderen X-Clients. Außerdem ist er für das Aussehen der Fenster und Schaltflächen innerhalb von X-Window verantwortlich. Es gibt für Linux viele verschiedene Windowmanager. Einige Beispiele sind: KWin, Metacity, Windowmaker, FVWM95, twm, Sawfish und viele andere mehr. Die Auswahl und Reihenfolge dieser Aufzählung soll keine Aussage über die Qualität der jeweiligen Windowmanager beinhalten. Displaymanager Ein Displaymanager ist hauptsächlich für die Authentifikation von Benutzern zuständig. Zu diesem Zweck zeigt er einen grafischen Anmeldebildschirm an. Es gibt mehrere verschiedene Displaymanager, von denen die wichtigsten ausführlich in Abschnitt 106.2, »Einen Displaymanager einrichten«, beschrieben werden sollen. Desktop Environment Ein Desktop Environment ist eine Desktop-Umgebung. Hierbei handelt es sich um eine vorkonfigurierte Ansammlung von Programmen, einen Windowmanager und einen passenden Displaymanager. Die beiden bekanntesten DesktopUmgebungen sind KDE und GNOME. KDE verwendet als Windowmanager KWin und als Displaymanager den kdm. Neuere Versionen von GNOME arbeiten mit dem Windowmanager Metacity, während ältere den Sawfish verwendet haben. Als Displaymanager kommt bei GNOME gdm zum Einsatz. Zusammenfassung des Aufbaus Zusammenfassend kann man sagen, dass ein Benutzer über den X-Server mit der Anwendung (dem X-Client) kommuniziert. Diese Vorstellung mag gewöhnungsbedürftig sein, weil bei der Ausgabe eines Programms auf einem entfernten Rechner der Benutzer am X-Server sitzt, während die Applikation (X-Client) auf einer leistungsfähigeren Maschine im Keller abgearbeitet wird. Lassen Sie sich hierdurch nicht verwirren.
327
1451.book Seite 328 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Sie können feststellen, ob und wie Ihre Grafikkarte durch X-Window unterstützt wird, indem Sie sich auf den Webseiten der Hersteller des jeweiligen X-Servers kundig machen. Besuchen Sie zu diesem Zweck folgende Seiten: http://www.x.org/wiki/ http://www.xfree86.org/current/manindex4.html Im Normalfall werden aber heutzutage alle auf dem freien Markt erhältlichen Grafikkarten unterstützt.
Der Startvorgang von X Der Startvorgang von X-Window ist im Lauf seiner Entwicklung zu einer ziemlich komplexen Angelegenheit angewachsen. Die hier beschriebenen Vorgänge sind etwas vereinfacht dargestellt und enthalten vor allem die für die Prüfung relevanten Informationen. Wenn kein Displaymanager (xdm, gdm oder kdm) verwendet wird, gibt man zum Starten der grafischen Umgebung das Kommando startx auf der Kommandozeile ein. startx Bei startx handelt es sich um ein Frontend für das eigentliche Startskript xinit. Das Skript startx sucht zusätzlich Konfigurationsskripts und bezieht deren Inhalt in den Start der X-Window-Umgebung mit ein. Es gibt natürlich distributionsspezifisch gesehen kleine Unterschiede bei der Ausführung von startx. Es sollten aber üblicherweise zumindest die folgenden Dateien mit einbezogen werden: 왘
xinitrc – Startskript für xinit
왘
xserverrc – Startskript für den X-Server
왘
.xinitrc – benutzerspezifisches Startskript für xinit
왘
.xserverrc – benutzerspezifisches Startskript für den X-Server
왘
.Xresources bzw. .Xdefaults – enthält benutzerspezifische Einstellungen
Die Dateien mit dem vorangestellten Punkt sind, wie immer, Konfigurationen, die sich auf bestimmte Benutzer beziehen. Deshalb befinden sich diese Dateien in den jeweiligen Benutzerverzeichnissen. Benutzerspezifische Einstellungen werden gegenüber systemweiten Konfigurationen bevorzugt. xinit Das Skript xinit ist für die eigentliche Initialisierung von X-Window zuständig. Es startet den X-Server und auch die ersten Client-Programme. Wenn xinit kein Client-Programm über die Kommandozeile übergeben wurde (das dürfte der Nor-
328
1451.book Seite 329 Dienstag, 7. Juli 2009 2:18 14
106.1 X11 installieren und konfigurieren
malfall sein), liest das Skript die Datei .xinitrc im Heimatverzeichnis des Benutzers ein. Wenn diese nicht existiert, verwendet xinit die systemweite xinitrc, die sich meist in /etc/X11/xinit befindet. xinitrc Die Datei xinitrc (oder ~/.xinitrc) enthält u.a. Anweisungen darüber, welche XClients gestartet werden sollen und welcher Windowmanager zu verwenden ist. Wenn aus dieser Datei heraus Programme gestartet werden, sollten Sie daran denken, diese in den Hintergrund zu schicken (wie gehabt mit einem Kaufmannsund), weil sie eventuell andere Programme an ihrer Ausführung hindern könnten. Der Windowmanager (der eigentlich selbst lediglich einen X-Client darstellt) sollte jedoch immer im Vordergrund laufen.
X-Terminals Wenn Sie X-Window verwenden, haben Sie natürlich weiterhin die Möglichkeit, konsolenbasierte Programme auszuführen. Damit das funktioniert, stehen Ihnen diverse grafische Terminal-Emulationsprogramme zur Verfügung. Das bekannteste ist xterm. Wenn Sie von einer normalen Konsole aus einfach das Kommando xinit ausführen, ohne Optionen oder Argumente zu übergeben, dann startet xinit den X-Server und als einzigen Client xterm. Der Terminal-Emulator verwendet zu seiner Konfiguration folgende Datei: /usr/lib/X11/app-defaults/XTerm In dieser Datei können Schriftarten, Farben, Menüs und andere Einstellungen festgelegt werden. Normalerweise können Sie mit xterm alle nötigen Aufgaben durchführen. Es stehen Ihnen für den Fall, dass Sie etwas Abwechslung haben möchten, aber auch andere Terminal-Emulationsprogramme (aterm, eterm, rxvt usw.) zur Verfügung.
X-Librarys Grafische Programme verwenden auf die gleiche Art und Weise wie andere Programme dynamisch eingebundene Bibliotheken. Dementsprechend müssen diese Librarys auch genau so im System eingebunden werden. Die Konfiguration von Librarys wurde bereits ausführlich im Abschnitt 102.3, »Shared Librarys verwalten«, besprochen. Wenn als Desktop-Umgebung GNOME eingesetzt wird, kommen viele Bibliotheken aus dem GTK (GIMP Toolkit) zum Einsatz. Bei der Verwendung der KDE werden bevorzugt QT Librarys verwendet.
329
1451.book Seite 330 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Wenn neue Programme installiert werden, müssen benötigte Bibliotheken in der richtigen Version vorliegen. Achten Sie auf Fehlermeldungen, die bei der Installation von Binärdateien oder auch beim Kompilieren neuer Programme ausgegeben werden. Fehlende oder veraltete Bibliotheken sind der wahrscheinlich häufigste Grund dafür, dass sich ein Programm nicht implementieren lässt.
Konfigurationsdateien Die Hauptkonfigurationsdatei von X ist entweder die Datei xorg.conf oder die Datei XF86Config, je nach Alter der verwendeten Distribution. Beide Dateien befinden sich jeweils im Verzeichnis /etc/X11. Damit ältere Programme nicht verwirrt werden, gibt es bei modernen Distributionen normalerweise einen Link von XF86Config auf xorg.conf. Vom Aufbau her sind beide Dateien allerdings absolut identisch. Im weiteren Verlauf wird deshalb nur noch von xorg.conf die Rede sein. Die Datei ist in unterschiedliche Sektionen unterteilt. Alle Sektionen haben den gleichen Aufbau: Section "Sektionsname" Sektionseintrag Sektionseintrag Sektionseintrag EndSection
Sie müssen die einzelnen Verwendungszwecke der wichtigsten Sektionen für die Prüfung unterscheiden können. Section »Files« Diese Sektion definiert ein paar Pfade, die der Server für den Betrieb benötigt. In dieser Sektion gibt es Einträge des Typs Fontpath. Diese zeigen auf Verzeichnisse, in denen sich Fonts befinden: Section "Files" FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/local" FontPath "/usr/X11R6/lib/X11/fonts/Type1" FontPath "/usr/X11R6/lib/X11/fonts/URW" FontPath "/usr/X11R6/lib/X11/fonts/Speedo" FontPath "/usr/X11R6/lib/X11/fonts/PEX" ... weitere Zeilen wurden entfernt ... EndSection
Fonts können auch zentral auf einem X-Fontserver gepflegt werden. Wie ein solcher Server konfiguriert wird, lesen Sie auf den nächsten Seiten. Wenn ein X-
330
1451.book Seite 331 Dienstag, 7. Juli 2009 2:18 14
106.1 X11 installieren und konfigurieren
Fontserver zum Einsatz kommt, muss die Section "Files" eines Clients so aussehen: Section "Files" Fontpath "Unix/:7100" EndSection
Ein weiterer Eintragstyp in der Sektion Files ist RgbPath. In dieser Datei werden Farbbezeichnungen zu RGB-Werten übersetzt. Ein solcher Eintrag hätte diese Form: Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb.txt" EndSection
Ein kleiner Auszug aus der Datei rgb.txt zeigt, wie die Farbwerte zugeordnet werden. Die erste Spalte gibt den Rotanteil an. Die zweite Spalte zeigt den Grünwert und die dritte den Blauanteil: 0 255 255 255
250 106 174 250
154 106 185 240
MediumSpringGreen IndianRed1 LightPink1 FloralWhite
Die Originaldatei auf dem Referenzsystem beinhaltet übrigens 752 benannte Farben. Grundsätzlich sind alle Einträge in der Sektion Files optional. Section »Server-Flags« In dieser Sektion werden globale Einstellungen für den Server festgelegt. Hierbei handelt es sich z.B. um das Verhalten des Power Managements, Hotkeys u.Ä. Diese Sektion ist ebenfalls optional und wenig prüfungsrelevant. Section »Input Device« Diese Sektion enthält Angaben über die verwendete Tastatur und die Maus (oder andere serielle Zeigereinheiten). Zur Erhöhung der Übersichtlichkeit ist ein mehrfaches Vorkommen dieser Sektion üblich, um die Inhalte sauberer voneinander getrennt zu erhalten: Section "InputDevice" Driver "kbd" Identifier "Keyboard[0]" Option "Protocol" "Standard" Option "XkbLayout" "de" Option "XkbModel" "pc105" Option "XkbRules" "xfree86"
331
1451.book Seite 332 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Option "XkbVariant" "nodeadkeys" EndSection Section "InputDevice" Driver "mouse" Identifier "Mouse[1]" Option "Buttons" "5" Option "Device" "/dev/input/mice" Option "Name" "ImPS/2 Generic Wheel Mouse" Option "Protocol" "explorerps/2" Option "Vendor" "Sysp" Option "ZAxisMapping" "4 5" EndSection
Der Aufbau der Einträge in diese Sektion ist immer in dieser Abfolge organisiert: Section "InputDevice" Driver "Treiber" Identifier "Name des Gerätes" Option Option ... weitere Optionen möglich ... EndSection
Section »Monitor« und »Modes« In der Sektion Monitor sind die technischen Daten eines oder mehrerer Monitore spezifiziert. Anschließend werden in der Sektion Modes die möglichen verwendbaren Videomodi für das Gerät aufgelistet: Section "Monitor" DisplaySize 300 230 HorizSync 30-61 Identifier "Monitor[0]" ModelName "NEC LCD1500M" Option "DPMS" VendorName "NEC" VertRefresh 43-77 UseModes "Modes[0]" EndSection Section "Modes" Identifier "Modes[0]" Modeline "1024x768" 81.80 1024 1096 1208 1344 768 769 772 802 Modeline "800x600" 42.11 800 840 920 1040 600 601 604 623 Modeline "800x600" 48.91 800 840 920 1040 600 601 604 627 Modeline "640x480" 25.95 640 656 720 800 480 481 484 499
332
1451.book Seite 333 Dienstag, 7. Juli 2009 2:18 14
106.1 X11 installieren und konfigurieren
Modeline EndSection
"640x480" 30.72 640 664 728 816 480 481 484 502
Sie können den aktuell eingestellten Modus für ein Gerät ermitteln, indem Sie das Kommando xvidtune -show verwenden. Das funktioniert aber nur in einer Shell, die von X-Window aus gestartet wurde. Die Sektion Modes ist optional, weil die verwendbaren Modi für einen Monitor auch direkt in der Sektion Monitor eingetragen werden können. Section »Device« Die Sektion Device enthält Angaben über die verwendete Grafikkarte bzw. mehrere Grafikkarten. Der Aufbau dieser Sektion gestaltet sich so: Section "Device" BoardName "GeForce4 MX 440 with AGP8X" BusID "1:0:0" Driver "nv" Identifier "Device[0]" VendorName "NVidia" EndSection
Section »Screen« Die Sektion Screen führt sozusagen Grafikkarte(n) und Monitor(e) zusammen. Zu diesem Zweck gibt es sowohl für den Monitor als auch für die Grafikkarte (Device) einen eindeutigen Bezeichner (Identifier). Diese Zusammenführung zu einem »Screen« geschieht am Ende der Sektion, nachdem unterschiedliche mögliche Videomodi aufgelistet werden: Section "Screen" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 32 Modes "1024x768" "800x600" "640x480" EndSubSection ... einige Subsektionen wurden aus Platzgründen entfernt ... Device "Device[0]" Identifier "Screen[0]" Monitor "Monitor[0]" EndSection
333
1451.book Seite 334 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Prüfungstipp Stellen Sie für die Prüfung sicher, dass Sie die Sektionen Monitor und Screen nicht miteinander verwechseln! Es gibt noch weitere Sektionen innerhalb der xorg.confbzw. der XF86Conf-Datei. Diese sind allerdings für die Prüfung weniger relevant.
X-Fontserver Ein X-Fontserver (xfs) dient der zentralen Verwaltung von Fonts. Wenn Sie für eine größere Menge Arbeitsstationen häufig Schriftarten bereitstellen müssen, ist die Verwendung eines solchen Servers ideal. Die Konfiguration eines X-Fontservers ist normalerweise kein Problem. Bei den meisten Distributionen ist er sogar schon vorkonfiguriert, und Sie brauchen den Server nur noch zu starten. Die einzige Konfigurationsdatei des Servers ist die Datei /etc/X11/fs/config. Diese beinhaltet u.a. einen Katalog mit den Pfaden zu den installierten Schriftarten. Die Konfigurationsdatei enthält folgende Einträge: port = 7100
Hiermit wird der zu verwendende TCP-Port auf 7.100 festgelegt. client-limit = 10
Mit dem client-limit wird festgelegt, dass maximal zehn Clients gleichzeitig durch eine Instanz von xfs bedient werden sollen. clone-self = on
Sollte das client-limit überschritten werden, erstellt der Server Klone von sich selbst, um weitere Clients zu unterstützen. use-syslog = on
Eine Protokollierung auf dem Syslog ist aktiviert. catalogue = /usr/X11R6/lib/X11/fonts/misc:unscaled, /usr/X11R6/lib/X11/fonts/75dpi:unscaled, /usr/X11R6/lib/X11/fonts/100dpi:unscaled, /usr/X11R6/lib/X11/fonts/japanese:unscaled, /usr/X11R6/lib/X11/fonts/baekmuk:unscaled, /usr/X11R6/lib/X11/fonts/Type1, /usr/X11R6/lib/X11/fonts/URW, /usr/X11R6/lib/X11/fonts/Speedo, /usr/X11R6/lib/X11/fonts/hellas/Type1 ... weitere Zeilen wurden abgeschnitten ...
Die Katalogeinträge verweisen auf die Verzeichnisse mit den verfügbaren Schriftarten.
334
1451.book Seite 335 Dienstag, 7. Juli 2009 2:18 14
106.1 X11 installieren und konfigurieren
# in decipoints default-point-size = 120 default-resolutions = 75,75,100,100
Wenn Sie mit der Konfiguration zufrieden sind, starten Sie den Server: archangel:~ # /etc/rc.d/xfs start
Anschließend sollten Sie den Server testen. Wenn Sie den Server einfach in die Datei xorg.conf eines Clients eintragen und der Server funktioniert nicht, wird X-Window wahrscheinlich nicht starten. Einen Test können Sie mit dem Tool fslsfonts durchführen: archangel:/etc/X11/fs # fslsfonts -server Unix/:7100 -adobe-courier-bold-o-normal--10-100-75-75-m-60-iso10646-1 -adobe-courier-bold-o-normal--10-100-75-75-m-60-iso8859-1 -adobe-courier-bold-o-normal--10-100-75-75-m-60-iso8859-10 -adobe-courier-bold-o-normal--10-100-75-75-m-60-iso8859-13 ... alle weiteren Zeilen wurden abgeschnitten ...
Wenn der Test erfolgreich ist, gibt das Programm alle verfügbaren Schriftarten des Servers aus. Das können sehr viele sein. Wenn Sie zufrieden mit der Konfiguration sind, können Sie die Konfiguration der Clients vornehmen, indem Sie folgenden Eintrag in der Datei xorg.conf hinzufügen: Section "Files" Fontpath "Unix/:7100" EndSection
Anschließend starten Sie X-Window auf den Client-Rechnern wie gewohnt.
X-Display exportieren Sie können die Ausgabe eines X-Clients auf einem entfernten X-Server durchführen. Die Positionierung des Benutzers ist hierbei etwas ungewohnt, weil dieser sich an der Tastatur und dem Monitor des X-Servers befindet. Das eigentliche Anwendungsprogramm ist der X-Client, der wahrscheinlich auf einem leistungsfähigen Computer im Keller ausgeführt wird. Denken Sie immer daran, dass ein Server ein Programm ist und nicht, wie der Volksmund impliziert, ein besonders leistungsfähiger Computer in einem High-Tower-Gehäuse. Serverseitige Maßnahmen Der Computer, an dem sich der Benutzer befindet (X-Server), muss den Zugriff auf sein Display durch den entfernten Rechner (X-Client) erlauben. Verwenden
335
1451.book Seite 336 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Sie dazu das Programm xhost. Um den Zugriff von beliebigen Computern aus zu erlauben, verwenden Sie folgendes Kommando: root@ubuntu-desktop:~# xhost + access control disabled, clients can connect from any host
Um den Zugriff pauschal zu verbieten, verwenden Sie dieses Kommando: root@ubuntu-desktop:~# xhost access control enabled, only authorized clients can connect
Sie können mit dem Pluszeichen auch einzelnen Hosts den Zugriff auf das Display gestatten. Folgendes Kommando erlaubt nur dem Host archangel den Zugriff auf das Display: root@ubuntu-desktop:~# xhost +archangel archangel being added to access control list
Um einem einzelnen Host den Zugriff auf das Display zu verbieten, verwenden Sie das Minus: root@ubuntu-desktop:~# xhost –fedora10 fedora10 being removed from access control list
Client-seitige Maßnahmen Auf dem Computer, der das Client-Programm ausführen soll, muss die Variable DISPLAY so geändert werden, dass die Ausgabe der Anwendung zum X-Server umgeleitet wird. Wenn Sie z.B. OpenOffice.org auf dem entfernten Rechner anzeigen lassen wollen, geben Sie folgende Kommandos ein: archangel:/ # export DISPLAY=ubuntu-desktop:0.0 archangel:/ # ooffice
Die Anwendung OpenOffice.org wird dann auf dem Host archangel ausgeführt; die Ein- und Ausgaben erfolgen aber auf dem Computer ubuntu-desktop. Sollte der Ziel-Host über mehrere Displays verfügen, muss das Kommando zum Export der DISPLAY-Variablen entsprechend anders lauten.
xwininfo Mit dem Programm xwininfo können Sie Informationen über ein einzelnes Fenster erhalten. In Abhängigkeit von den gewählten Optionen werden unterschiedliche Parameter ausgegeben. Geben Sie xwininfo einfach in ein Terminal innerhalb von X ein. Wenn Sie keine Optionen verwenden, zeigt das Programm Ihnen alle Parameter an, die es erkennt. Sie werden dann dazu aufgefordert, das zu analysierende Fenster anzuklicken:
336
1451.book Seite 337 Dienstag, 7. Juli 2009 2:18 14
106.1 X11 installieren und konfigurieren
root@arch-nb:/# xwininfo xwininfo: Please select the window about which you would like information by clicking the mouse in that window. xwininfo: Window id: 0x3400003 "Taschenrechner" Absolute upper-left X: 708 Absolute upper-left Y: 73 Relative upper-left X: 5 Relative upper-left Y: 24 Width: 311 Height: 329 Depth: 24 Visual Class: TrueColor Border width: 0 Class: InputOutput Colormap: 0x20 (installed) Bit Gravity State: NorthWestGravity Window Gravity State: NorthWestGravity Backing Store State: NotUseful Save Under State: no Map State: IsViewable Override Redirect State: no Corners: +708+73 –5+73 –5-366 +708-366 -geometry 311x329-0+49
Sie erhalten also die eindeutige ID des Fensters, Angaben über die genaue Position, die Größe und vieles andere mehr.
xdpyinfo Mit dem Kommando xdpyinfo erhalten Sie umfangreiche Informationen über den installierten X-Server. Es wird verwendet, um die verschiedenen Fähigkeiten eines X-Servers zu untersuchen und die Parameter, die zur Kommunikation mit den X-Clients verwendet werden. So kann auch festgestellt werden, welche Screens von einem X-Server unterstützt werden. root@arch-nb:/# xdpyinfo name of display: :0.0 version number: 11.0 vendor string: The X.Org Foundation vendor release number: 10502000 X.Org version: 1.5.2 maximum request size: 16777212 bytes motion buffer size: 256 bitmap unit, bit order, padding: 32, LSBFirst, 32
337
1451.book Seite 338 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
image byte order: LSBFirst number of supported pixmap formats: 7 supported pixmap formats: depth 1, bits_per_pixel 1, scanline_pad 32 depth 4, bits_per_pixel 8, scanline_pad 32 depth 8, bits_per_pixel 8, scanline_pad 32 depth 15, bits_per_pixel 16, scanline_pad 32 depth 16, bits_per_pixel 16, scanline_pad 32 depth 24, bits_per_pixel 32, scanline_pad 32 depth 32, bits_per_pixel 32, scanline_pad 32 keycode range: minimum 8, maximum 255 focus: window 0x2e0000b, revert to Parent number of extensions: 31 BIG-REQUESTS Composite DAMAGE DOUBLE-BUFFER DPMS Extended-Visual-Information GLX MIT-SCREEN-SAVER MIT-SHM MIT-SUNDRY-NONSTANDARD RANDR RECORD RENDER SECURITY SGI-GLX SHAPE SYNC TOG-CUP X-Resource XC-APPGROUP XC-MISC XFIXES XFree86-DGA XFree86-DRI XFree86-Misc XFree86-VidModeExtension XINERAMA XInputExtension XKEYBOARD XTEST XVideo default screen number: 0 number of screens: 1 screen #0: dimensions: 1024x768 pixels (270x203 millimeters) resolution: 96x96 dots per inch depths (7): 24, 1, 4, 8, 15, 16, 32 root window id: 0x78 depth of root window: 24 planes number of colormaps: minimum 1, maximum 1 default colormap: 0x20 default number of colormap cells: 256 preallocated pixels: black 0, white 16777215 options: backing-store NO, save-unders NO largest cursor: 64x64 current input event mask: 0xfa8033 KeyPressMask KeyReleaseMask EnterWindowMask LeaveWindowMask ExposureMask StructureNotifyMask SubstructureNotifyMask SubstructureRedirectMask FocusChangeMask PropertyChangeMask ColormapChangeMask number of visuals: 3 default visual id: 0x21 visual: visual id: 0x22
338
1451.book Seite 339 Dienstag, 7. Juli 2009 2:18 14
106.2 Einen Displaymanager einrichten
class: DirectColor depth: 24 planes available colormap entries: 256 per subfield red, green, blue masks: 0xff0000, 0xff00, 0xff significant bits in color specification: 8 bits visual: visual id: 0x52 class: TrueColor depth: 32 planes available colormap entries: 256 per subfield red, green, blue masks: 0xff0000, 0xff00, 0xff significant bits in color specification: 8 bits
Die Ausgabe des Programms wurde aus Platzgründen etwas reduziert. Am besten wird es sein, wenn Sie Ihren eigenen Computer einer Untersuchung mit xdpyinfo unterziehen. Das Programm kann allerdings nur auf einem laufenden X-Server ausgeführt werden.
106.2 Einen Displaymanager einrichten Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, einen Displaymanager zu installieren und anzupassen. Dieses Prüfungsziel umfasst die Displaymanager xdm (X Display Manager), gdm (Gnome Display Manager) und kdm (KDE Display Manager). Wichtigste Wissensgebiete: 왘
den Displaymanager ein- und ausschalten
왘
die Begrüßung des Displaymanagers ändern
왘
die Standard-Farbtiefe des Displaymanagers ändern
왘
Displaymanager für den Gebrauch durch X-Terminals konfigurieren
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/inittab
왘
Konfigurationsdateien von xdm
왘
Konfigurationsdateien von kdm
왘
Konfigurationsdateien von gdm
339
1451.book Seite 340 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Allgemeines Wenn Sie einen grafischen Anmeldebildschirm verwenden möchten, benötigen Sie einen Displaymanager. Heutzutage ist eigentlich bei jeder Linux-Distribution ein Displaymanager per Voreinstellung nach der Installation vorhanden. Es gibt verschiedene Displaymanager. Der Standard-Displaymanager ist xdm. Er gehört ursprünglich zum XFree86-Projekt. Die Desktop-Umgebungen GNOME und KDE haben jeweils einen eigenen Displaymanager im Marschgepäck. KDE verwenden kdm, und GNOME verwendet gdm.
Starten und Beenden eines Displaymanagers Sie können einen Displaymanager einfach durch das Ausführen der entsprechenden Binärdatei starten. Führen Sie dazu einfach das Kommando xdm zum Starten des xdm-Displaymanagers aus. Entsprechend starten Sie alternativ kdm oder gdm. Normalerweise wird eine grafische Anmeldung gestartet, indem das System in den Runlevel wechselt, der jeweils den grafischen Login bereitstellt. Das ist in den meisten Fällen der Runlevel 5. Debian und Ubuntu starten allerdings den grafischen Login bereits in Runlevel 2. Um manuell in den Runlevel 5 zu wechseln, geben Sie folgendes Kommando ein: archangel:~ # init 5
Wenn Sie wollen, dass das System nach einem Neustart automatisch in den Runlevel 5 hochfährt, dann müssen Sie diesen Runlevel in der Datei /etc/inittab als Default festlegen. Modifizieren Sie dazu folgenden Eintrag: # The default runlevel is defined here id:3:initdefault:
Ändern Sie einfach die 3 in eine 5, und beim nächsten Neustart steht der Displaymanager zur Verfügung.
Konfigurationsdateien der Displaymanager Normalerweise gibt es kaum einen Grund, die Einstellungen für einen Displaymanager zu verändern. Sie müssen aber für die Prüfung zumindest die wichtigsten Konfigurationsdateien kennen: 왘
xdm – /etc/X11/xdm-config, /etc/X11/Xresources und /etc/X11/xdm/Xsetup für Hintergrundbild und Farben
왘
kdm – /etc/X11/kdm/kdmrc
340
1451.book Seite 341 Dienstag, 7. Juli 2009 2:18 14
106.3 Hilfen für Behinderte
왘
gdm – /etc/X11/gdm/init/Default und /etc/opt/gnome/gdm/gdm.conf
Diese Verzeichnisse stimmen nicht immer mit der Wirklichkeit überein. Insbesondere kdm und gdm platzieren ihre Konfigurationsdateien gerne in anderen Verzeichnissen. Die Konfiguration von xdm und kdm ist grundsätzlich sehr ähnlich, weil diese beiden Displaymanager eine gewisse Verwandtschaft aufweisen. Völlig different dazu ist gdm. Sie sollten gdm normalerweise mit dem Frontend gdmconfig konfigurieren.
106.3 Hilfen für Behinderte Wichtung: 1 Beschreibung: Wissen um die Existenz von Hilfen für Behinderte. Wichtigste Wissensgebiete: 왘
Tastatureinstellungen für Behinderte (AccessX)
왘
visuelle Einstellungen und Themen
왘
assistive Techniken
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
»Klebrige« und Wiederholungstasten
왘
Langsame-, Bounce- und Umschalt-Tasten
왘
Maustasten
왘
Desktop-Themen mit hohem Kontrast oder großer Schrift
왘
Screenreader
왘
Braille-Anzeige
왘
Bildschirmvergrößerung
왘
Tastatur auf dem Bildschirm
왘
Gesten
왘
Orca
왘
GOK
왘
emacspeak
341
1451.book Seite 342 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Allgemeines Es gibt für Linux etliche freie Softwareprodukte, die es behinderten Menschen ermöglichen, trotz schwerster Handicaps mit einem Computer zu arbeiten. Die Unterstützungen, die solche Produkte bereitstellen, werden als Assistive Techniken bezeichnet. Im Normalfall werden durch diese Hilfsmittel Ein- und Ausgabegeräte der Behinderung entsprechend transformiert. Es gibt auch äquivalente Produkte aus der Windows-Welt. In den heutigen Windows-Versionen sind allerdings beispielsweise keine Screenreader integriert. Diese müssen ggf. zugekauft werden. Leider finanzieren die Krankenkassen aus Kostengründen nur preiswerte Lösungen, die meist störanfällig sind und keine gute Integration bieten.
Sehbehinderte und Blinde Zur Unterstützung sehbehinderter oder gar blinder Menschen sind zwei assistive Techniken von besonderer Bedeutung. Hier wären zunächst die Screenreader zu nennen. Wie die Bezeichnung vielleicht schon vermuten lässt, liest ein Screenreader den Inhalt des Bildschirms. Hierbei kann es sich um »normalen« Text wie zum Beispiel eine Mail oder eine Webseite handeln. Ein Screenreader liest aber auch Menüleisten von Anwendungsprogrammen und deren Menüpunkte. Die Ausgabe erfolgt dann entweder akustisch durch einen Vorleser, und/oder über eine sogenannte Braillezeile. Eine Braillezeile ist ein Gerät, dass Schriftzeichen in Brailleschrift übersetzen kann. Bei der Brailleschrift handelt es sich um die wohl gängigste Blindenschriftart, bei der ein ertastbares Punktmuster von der sehbehinderten oder blinden Person gelesen wird. Es gibt hier auch noch Varianten, nämlich: 왘
Normalschrift – ein Braillezeichen entspricht genau einem Buchstaben
왘
Basisschrift – Groß-/Kleinschreibung entfällt
왘
Vollschrift – enthält zusätzliche Zeichen für »ei«, »au«, »sch« und ähnliche
왘
Kurzschrift – ist im Prinzip eine Art Stenografie
Sie brauchen diese Varianten nicht genau zu kennen. Es gibt aber ScreenreaderProgramme (z.B. Orca), wo zumindest die Kurzschrift konfigurierbar ist. Ein Brailledisplay als solches ist ein Gerät, das in der Regel unter der Tastatur oder unter dem Notebook platziert wird. Es ist dann nur noch die eigentliche Braillezeile sichtbar bzw. ertastbar. Aus dieser Zeile ragen Stifte hervor, die durch ein piezoelektrisches Prinzip angetrieben werden. Die Stifte stellen die Braillezeichen dar. Es sind Braillezeilen mit 20, 40 oder 80 Zeichen auf dem Markt erhältlich. Leider steigt hierbei der Preis in etwa proportional mit der Anzahl der darstellbaren Zeichen.
342
1451.book Seite 343 Dienstag, 7. Juli 2009 2:18 14
106.3 Hilfen für Behinderte
Barrierefreiheit Die in Linux-Systemen integrierten Hilfstechnologien werden unter dem Schlagwort Barrierefreiheit zusammengefasst. Sie können die entsprechenden Einstellungen mit grafischen Frontends zentral konfigurieren. Die auf den folgenden Seiten dargestellten Abbildungen wurden unter Gnome erstellt. Es gibt aber natürlich auch entsprechende Produkte für KDE. Über den Menüpfad System 폷 Einstellungen 폷 Hilfstechnologien gelangen Sie zur zentralen Einstellungsseite für Barrierefreiheit (Abbildung 1). Von hier aus gelangen Sie zur Konfiguration der Tastatursteuerung, der Maussteuerung oder zu den Einstellungen für Barrierefreies Anmelden. Die Schaltfläche Bevorzugte Anwendungen versetzt Sie in die Lage, gleich bei der Anmeldung zusätzliche Hilfsprogramme zu starten. Beachten Sie auch, dass von dieser Stelle aus die Hilfstechnologien überhaupt pauschal ein- bzw. ausgeschaltet werden können.
Abbildung 1 Die Haupseite der Einstellungen für Barrierefreiheit bietet zentralen Zugriff auf assistive Techniken.
Menschen, die motorisch eingeschränkt sind, haben besondere Ansprüche, was die Abfrage und Interpretation der Tastatur durch den Computer anbelangt (Abbildung 2). So können Klebrige Tasten verwendet werden, wenn jemand nicht in der Lage ist, zwei Tasten gleichzeitig zu betätigen (z.B. (Strg) + (C), (Strg) + (V) usw.). Wenn Tasten oft durch versehentliche, kurze Berührungen fälschlicherweise betätigt werden, kann eine Tastenverzögerung Abhilfe schaffen. Es werden dann nur noch die Tastenanschläge interpretiert, die über eine einstellbare Mindestzeit angelegen haben. Für stark zitternde Personen gibt es die Möglichkeit,
343
1451.book Seite 344 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
mehrfach angeschlagene Tasten ignorieren zu lassen, wenn diese innerhalb einer zu kurzen, einstellbaren Zeit erfolgt sind.
Abbildung 2 Barrierefreie Tastatureinstellungen helfen vor allem motorisch eingeschränkten Personen.
Sie können auch den Mauszeiger über die Tastatur ansteuern. Das ist einerseits interessant für Anwender, die vielleicht aufgrund ihrer Armlänge nicht zwischen mehreren Eingabegeräten wechseln möchten. Andererseits können diese sogenannten Maustasten auch in Kombination mit einem Screenreader die Navigation für blinde Menschen erheblich erleichtern. Wenn der Mauszeiger etwa in einer geraden Linie von oben nach unten bewegt werden muss, kann das mit der Nachunten-Taste des Editierblocks erheblich genauer erledigt werden als mit der Maus oder einem anderen Zeigegerät. Das gilt natürlich ganz besonders dann, wenn man den Mauszeiger nicht sehen kann. Die Konfiguration der Maustasten sehen Sie in Abbildung 3. Damit sehbehinderte Menschen die Farben und Schriftarten des Begrüßer-Displays für die Anmeldung ändern dürfen, brauchen Sie erhöhte Rechte. Das liegt daran, dass sich diese Änderung nicht auf einen einzelnen Benutzer beschränken lässt. Schließlich kann das System nicht wissen, wer sich gleich anmelden wird, weshalb diese Konfiguration systemweite Auswirkungen hat.
344
1451.book Seite 345 Dienstag, 7. Juli 2009 2:18 14
106.3 Hilfen für Behinderte
Abbildung 3 Die Steuerung des Mauszeigers mit den Cursortasten kann für blinde Menschen in Kombination mit einem Screenreader sehr hilfreich sein. Blinde Menschen verwenden übrigens normalerweise keine Maus.
Zur leichteren Orientierung können Systemklänge zugewiesen werden. Diese signalisieren dann die Bereitschaft des Anmeldebildschirms, die erfolgreiche Anmeldung oder eine fehlgeschlagene Anmeldung. Die möglichen Einstellungen für diesen Bereich zeigt Abbildung 4.
Abbildung 4 Menschen mit Sehbehinderung werden schon bei der Anmeldung am System unterstützt.
345
1451.book Seite 346 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Gerade was die Interpretation der Maus anbelangt, gibt es eine Menge Möglichkeiten. Das ist besonders bei Einschränkungen der Beweglichkeit hilfreich. Es kann auch sein, dass die Maus durch ein anderes Zeigegerät ersetzt wird, das nicht so präzise zu handhaben ist wie eine gewöhnliche PC-Maus. Beispiele hierfür wären Eyetracker oder auch Headtracker, bei denen die Bewegungen von Augen bzw. Kopf an den Computer übertragen werden. Insbesondere Mausklicks können auf viele verschieden Arten von Bewegungen (Gesten) vorkonfiguriert werden, wie Sie auf Abbildung 5 sehen können.
Abbildung 5 Behindertengerechte Mausunterstützung wird durch »Beobachtung« der Hand-, Kopf- oder Augenbewegungen (Gesten) gewährleistet.
Im Bereich Bevorzugte Anwendungen können Sie festlegen, welche gängigen Anwendungen bei der Anmeldung des Benutzers gestartet werden sollen (Abbildung 6). Auf die abgebildeten Anwendungen wird im Verlauf des Kapitels noch näher eingegangen.
346
1451.book Seite 347 Dienstag, 7. Juli 2009 2:18 14
106.3 Hilfen für Behinderte
Abbildung 6 Assistive Techniken können auch automatisch bei der Anmeldung gestartet werden.
Wenn Sie den Computer zur Nutzung von Barrierefreiheit konfiguriert haben, können Sie über das Rollstuhlsymbol (Abbildung 7) im Infobereich schnell auf die allgemeinen Einstellungen für Assistive Techniken (Abbildung 8) zugreifen. Hier ist die Konfiguration von häufig verwendeten Optionen der Barrierefreiheit möglich.
Abbildung 7 Schneller Zugriff auf die allgemeinen Einstellungen zur Barrierefreiheit wird über den Infobereich angeboten.
Damit Menschen mit eingeschränkter Sehfähigkeit leichter mit dem Desktop interagieren können, bietet sich die Verwendung einer kontrastreichen Optik an. Diese Konfiguration nehmen Sie einfach in den normalen Erscheinungsbild-Einstellungen vor (Abbildung 9).
347
1451.book Seite 348 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Abbildung 8 Das sind sie allgemeinen Einstellungen, die über den Infobereich schnell zugänglich sind.
Abbildung 9 Kontrastreiche Einstellungen werden ganz normal über das Erscheinungsbild konfiguriert.
Orca Orca ist in der Hauptsache ein Screenreader für blinde oder stark sehbehinderte
Menschen. Das Programm enthält zwar auch eine Bildschirmlupe für stark sehge-
348
1451.book Seite 349 Dienstag, 7. Juli 2009 2:18 14
106.3 Hilfen für Behinderte
schädigte, aber die eigentliche Stärke von Orca liegt im Vorlesen und in der Unterstützung von Brailledisplays. Beachten Sie, dass hierfür der Daemon BRLTTY installiert und geladen sein muss. Es sollten natürlich zuerst die Grundeinstellungen von Orca so vorgenommen werden, dass diese mit den Gegebenheiten und den Ansprüchen des Benutzers übereinstimmen. Nachdem Orca gestartet wurde, erscheint ein Fenster mit lediglich drei Schaltflächen, nämlich: Einstellungen, Beenden und Hilfe. Orca ist in dieser Phase schon aktiv und kann auch einem sehbehinderten Menschen ermöglichen, die Konfiguration von Orca selbst durchzuführen. Wenn Sie die Schaltfläche Einstellungen betätigen, gelangen Sie zu den allgemeinen Einstellungen des Programms (Abbildung 10). Hier kann beispielsweise festgelegt werden, ob es sich bei dem verwendeten Computer um ein Notebook oder um einen Desktopcomputer handelt. Sie sollten gleich festlegen, ob Orca bei der Anmeldung automatisch starten soll oder ob Texte unterhalb des Mauszeigers immer vorgelesen werden sollen. Sollte es sich bei dem Anwender nicht um einen versierten LinuxNutzer handeln, sollten Sie an dieser Stelle auch den Zugriff durch gksu blockieren, damit nicht versehentlich administrative Eingriffe vorgenommen werden.
Abbildung 10
Hier werden die Grundeinstellungen für Orca vorgenommen.
349
1451.book Seite 350 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Auf der zweiten Registerkarte Sprache sind etliche Einstellungen durchführbar (Abbildung 11). Das Sprachsystem und der Synthesizer werden normalerweise nicht modifizierbar sein, weil ein Standardsystem dafür keine Auswahl anbietet. Das Pulldown-Menü Stimmeinstellungen ist keine Auswahl für das Programm selbst, sondern eine Vorgabe für die als nächstes folgenden Menüpunkte. Wenn Sie hier Vorgabe wählen, bestimmen Sie als nächstes, wie z.B. mit normalem Text bezüglich der Tonhöhe, Sprechgeschwindigkeit und Lautstärke zu verfahren ist. Wählen Sie Großbuchstaben um festzulegen, wie Text vorgelesen wird, der in Blockbuchstaben geschrieben wurde. Die wichtigste Einstellung auf dieser Seite finden Sie im Pulldown-Menü Person. Hier wird die Landessprache der Ausgabe festgelegt. Wenn Sie hier nicht die richtige Auswahl treffen, werden Texte mit ausländischem Akzent vorgelesen. Ein Voicesynthesizer mit Akzent ist übrigens praktisch nicht zu verstehen. Der Parameter Grad bestimmt die Geschwindigkeit der Sprachausgabe. Die übrigen Optionen sind selbsterklärend.
Abbildung 11
Die Sprachausgabe erlaubt ein sehr fein abgestimmtes Setup.
Orca unterstützt auch die Ausgabe von Text über eine Braillezeile. Die Aktivie-
rung führen Sie auf der Registerkarte Braille aus, wie in Abbildung 12 zu sehen
350
1451.book Seite 351 Dienstag, 7. Juli 2009 2:18 14
106.3 Hilfen für Behinderte
ist. Wenn Sie die Option Braille-Monitor aktivieren auswählen, wird der Inhalt, der auf der Braillezeile ausgegeben wird, zusätzlich auf dem normalen Monitor angezeigt. Sie sehen das auf den Abbildungen 14 und 15 jeweils am oberen Bildrand. Es ist so für sehende Administratoren leichter nachzuvollziehen, was die Braillezeile gerade darstellt.
Abbildung 12
Orca bietet auch eine Unterstützung für Braillezeilen.
Mit Vorsicht ist die Registerkarte Tastaturecho zu genießen (Abbildung 13). Wenn Sie hier zu viele Optionen auf einmal auswählen, dann wird der Vorleser Sie mit Informationen überfluten. Grundsätzlich ist das Tastaturecho dazu da, gerade über die Tastatur eingegebene Zeichen zu wiederholen, damit der Blinde Kontrolle über seine Eingabe erlangt. Sie sollten diese Funktion also unbedingt nutzen. Experimentieren Sie mit der Auswahl etwas herum, um ein Gefühl dafür zu bekommen. Ein »Wortweises Echo« liest ein Wort vor, sobald ein Leerzeichen registriert wurde. Das »Satzweise Echo« wird am Ende eines Satzes durchgeführt. Aktionstasten werden übrigens bei uns in englischer Sprache mit deutschem Akzent vorgelesen, wodurch es zu Wortkreationen, wie »Backschpaake« für »Backspace« kommt. Auch »Reh turn!« anstatt »Return« klingt etwas gewöhnungsbedürftig.
351
1451.book Seite 352 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Abbildung 13 Es kann sehr genau festgelegt werden, welche Informationen über die Sprachausgabe weitergegeben werden sollen.
Abbildung 14 Orca liest auch Texte vor und gibt diese auf Wunsch zusätzlich über die Braillezeile aus.
352
1451.book Seite 353 Dienstag, 7. Juli 2009 2:18 14
106.3 Hilfen für Behinderte
Die beiden Abbildungen 14 und 15 zeigen Orca in Aktion. Es ist also für Sehbehinderte mit etwas Übung kein Problem, im Internet zu surfen oder ein Dokument mit OpenOffice.org zu erstellen.
Abbildung 15 Orca unterstützt alle wichtigen Anwendungsprogramme akustisch und über die Braillezeile.
GOK Bei GOK handelt es sich um eine ausgeklügelte Form der Bildschirmtastatur. Die Eingabe erfolgt über ein serielles Gerät wie eine Maus, einen Headtracker oder Eyetracker. Da ein solches Onscreen-Keyboard nicht mit der Tastatur bedient wird und somit auch kein Zehn-Finger-System zum Einsatz kommt, sind die Tasten auch nicht wie gewohnt angeordnet. Um die Eingabe von Text weiter zu vereinfachen, versucht GOK anhand eines Wörterbuches, die Vervollständigung eines Wortes zu prognostizieren und zeigt entsprechende Vorschläge. In der Abbildung 16 sehen Sie, dass das gewünschte Wort »helpful« schon nach Eingabe der ersten drei Zeichen zur Verfügung steht.
353
1451.book Seite 354 Dienstag, 7. Juli 2009 2:18 14
Topic 106: Oberflächen und Desktops
Abbildung 16 Ähnlich wie ein Wörterbuch für SMS schlägt GOK automatisch Vervollständigungen für Wörter vor.
emacspeak Der Editor emacs verfügt über einen eigenen Screenreader. Dieser Screenreader heißt emacspeak. Da er sich optisch nicht von dem normalen emacs-Editor unterscheidet, soll auf Abbildungen an dieser Stelle verzichtet werden. Prüfungstipp Der Editor emacs ist eine Art Kultobjekt; Sie sollten in der Prüfung also wissen, dass emacs über ein Vorlesemodul verfügt. Es gibt noch einige andere Programme, die unter Assistive Techniken geführt werden. Zu nennen wären hier zumindest noch die Produkte Gnopernicus (ein Vorläufer von Orca) und dasher (ein Texteingabeprogramm für außergewöhnliche Eingabegeräte). Diese sind allerdings nicht Bestandteil der Prüfungen.
354
1451.book Seite 355 Dienstag, 7. Juli 2009 2:18 14
Nun geht es um eine der wichtigsten Tätigkeiten eines Administrators: das Verwalten von Benutzerkonten, Gruppenkonten und das Schaffen einer anfänglichen Umgebung, in der die Benutzer arbeiten können.
Topic 107: Administrative Aufgaben 107.1 Benutzer- und Gruppenkonten und dazugehörige Systemdateien verwalten Wichtung: 5 Beschreibung: Kandidaten sollten in der Lage sein, Benutzerkonten hinzuzufügen, zu entfernen, vorübergehend zu deaktivieren und zu verändern. Wichtigste Wissensgebiete: 왘
Benutzer und Gruppen hinzufügen, ändern und entfernen
왘
Benutzer- und Gruppeninformationen in password/group-Datenbanken verwalten
왘
spezielle und beschränkte Konten anlegen und verwalten
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/passwd
왘
/etc/shadow
왘
/etc/group
왘
/etc/skel
왘
chage
왘
groupadd
왘
groupdel
왘
groupmod
왘
passwd
왘
useradd
왘
userdel
왘
usermod
355
1451.book Seite 356 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
Allgemeines Die Benutzer- und Gruppenverwaltung unter Linux unterscheiden sich stark von den Konzepten, die unter Windows oder unter Novell eingesetzt werden. Das liegt u.a. daran, dass auch die Art der Vergabe von Rechten auf einem völlig anderen Prinzip basiert. Nach der Anmeldung am System sind Benutzer sowohl unter Windows als auch unter Novell sofort Mitglieder mehrerer Sicherheitsgruppen und können aufgrund dieser Gruppenmitgliedschaften auf verschiedenste Ressourcen zugreifen. Ein Linux-User muss bei Bedarf selbst in die entsprechenden Benutzergruppen wechseln, wenn er auf Ressourcen zugreifen möchte, für die er sonst keine Berechtigungen hätte. Die Konzepte der Zugriffssteuerung unterscheiden sich also von Betriebssystem zu Betriebssystem. Die Steuerung über ACLs (Access Control List) ist für die LPIPrüfungen nicht von Bedeutung und soll deshalb hier auch nur der Vollständigkeit halber erwähnt werden. ACLs sind Zugriffssteuerungslisten, die mehrere Benutzer und Sicherheitsgruppen beinhalten können, um so diesen Benutzern und Gruppen jeweils einen Satz von Berechtigungen für die jeweilige Ressource zu erteilen. Die Steuerung der Berechtigungen für den Zugriff auf Verzeichnisse und Dateien funktioniert ursprünglich wie folgt: Eine Ressource (Datei oder Verzeichnis) kann lediglich einen Besitzer, im Sinne von einem Benutzer und eine Besitzergruppe haben. Aufgrund dieser beiden Zuordnungen können Berechtigungen vergeben werden, die sich aber lediglich auf Lesen, Schreiben und Ausführen beziehen. Eine weitere Rechtevergabe kann natürlich noch für »others«, also alle anderen, angewendet werden. Weil das alles so ist, macht es unter Linux keinen Sinn, gleichzeitig Mitglied mehrerer Sicherheitsgruppen zu sein. Ein Benutzer ist nach erfolgreicher Anmeldung Mitglied einer einzigen Gruppe, die auch als die initiale Gruppe bezeichnet wird. Möchte dieser Benutzer auf Dateien zugreifen, die er aufgrund seiner Mitgliedschaft in einer anderen Gruppe verwenden darf, so muss er im laufenden Betrieb in diese Gruppe wechseln. Beim Wechsel in eine andere Gruppe startet Linux eine neue Shell, die sich als Subshell der Login-Shell des Users versteht. Benötigte Variablen und Aliase müssen gegebenenfalls exportiert werden. Um wieder in die ursprüngliche Gruppe zurück zu wechseln, verlässt der Benutzer die Subshell einfach wieder durch Eingabe von exit. Auf den folgenden Seiten geht es um die Administration von Benutzern und Gruppen. Sie sollten für die Prüfung lernen, die für diese Aufgaben benötigten Befehle und Dateien zu verwenden.
356
1451.book Seite 357 Dienstag, 7. Juli 2009 2:18 14
107.1 Benutzer- und Gruppenkonten und dazugehörige Systemdateien verwalten
passwd, shadow, group, gshadow /etc/passwd Die wichtigste Datei, die mit der Verwaltung von Benutzerkonten in Zusammenhang steht, ist die Datei /etc/passwd. Für die Prüfung sind genaue Kenntnisse dieser Datei dringend erforderlich. Beispiel: root:x:0:0:root:/root:/bin/bash harald:x:1000:100:Harald Maaßen:/home/harald:/bin/bash michaela:x:1001:100:Michaela Maaßen:/home/michaela:/bin/bash dominik:x:1002:100:Dominik Maaßen:/home/dominik:/bin/bash willi:x:1003:100:Willi 0173-1234567:/home/willi:/bin/bash
Bei dieser Datei handelt es sich um eine durch Doppelpunkte separierte Textdatei, welche die Benutzerinformationen enthält. Die einzelnen Felder sollen hier am Beispiel von User Willi erläutert werden: 왘
Das erste Feld willi ist der Anmeldename des Benutzers. Er wird beim Login verwendet.
왘
Das zweite Feld, hier ein x, enthält das Passwort. Dieses Passwort befindet sich in diesem Fall in der shadow-Datei. Zu diesem Thema komme ich später noch. Würde die shadow-Datei nicht verwendet werden, dann sähe das Passwort für Willi so aus: :$2a$10$c97VgTb9Jm.HB.PS09AwtOO/E0ra/MeAtXoYDxeKcg2poenShfuau:
Wenn Sie ein Benutzerkonto neu erstellen möchten, können Sie hier auch vorübergehend ein * einsetzen, um eine Sperrung des Kontos zu bewirken, bis dieses tatsächlich verwendet wird. Achten Sie bitte immer auf leere Kennworte, weil diese natürlich eine Sicherheitsbedrohung des ganzen Systems und auch Ihrer Daten bedeuten können. 왘
Die dritte Position 1003 ist die User-ID. Das ist ein eindeutiger Bezeichner für jeden Benutzer, der »unter der Motorhaube« dazu verwendet wird, die Rechte an einer Datei oder einem Verzeichnis zu definieren. Daraus resultiert auch die Problematik, die entsteht, wenn man ein Linux-System neu installiert, aber den alten Datenbestand beibehalten hat. Es wird dann höchstwahrscheinlich passieren, dass die Berechtigungen auf Dateien und Verzeichnisse völlig durcheinander geraten. Abhilfe: Sorgen Sie dafür, dass die Benutzer nach der Neuinstallation dieselben User-IDs bekommen, die sie vor der Neuinstallation hatten. Der User root bekommt immer die ID »0«. Der Benutzer mit dieser ID darf auf alle Dateien und Verzeichnisse zugreifen. Die ersten hundert UIDs sind eigentlich für administrative Benutzer und Programme gedacht. Die ist allerdings nicht zwingend vorgeschrieben, sondern lediglich eine Konvention.
357
1451.book Seite 358 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
왘
Das vierte Feld, hier die »100«, enthält die Group-ID. Das ist die initiale Gruppe des Benutzers, die in diesem Fall in der Datei /etc/group auf die Gruppe »users« zeigt. Es muss beim Erstellen neuer Benutzer immer auf die Eindeutigkeit dieser Kennung geachtet werden, weil es sonst zu unerwünschten Zugriffsberechtigungen auf Dateien kommen kann. Das liegt daran, dass sich das Dateisystem eigentlich für die Erteilung der Zugriffsberechtigungen nicht den Namen des Benutzers, sondern lediglich dessen UID merkt. Aus eben diesem Grund verwendet Red Hat die Gruppe »users« nicht, sondern legt für jeden neuen Benutzer auch eine neue Gruppe an.
왘
Die vierte Spalte Willi 0173-1234567 ist das sogenannte GECOS-Feld. Es kann Informationen über den Benutzer enthalten, die z.B. mit dem Programm finger abgefragt werden können. In der Regel stehen in diesem Feld Vorname und Nachname des Benutzers. Ursprünglich war das GECOS-Feld so gedacht, dass es Informationen in folgender Reihenfolge enthalten sollte: 왘
vollständiger Name
왘
Büronummer und Gebäude
왘
Nebenstellenanschluss im Büro
왘
private Telefonnummer
Ein Benutzer kann das GECOS-Feld auch selbst ändern, indem er das Kommando chfn (change fullname) benutzt. Ein Beispiel für die Ausgabe der Befehle chfn und finger folgt nach dieser Auflistung. 왘
Das fünfte Feld /home/willi enthält den Pfad zum Heimatverzeichnis des Benutzers.
왘
Als Letztes wird in Feld sechs /bin/bash der Pfad zur Login-Shell des Benutzers angegeben. Wenn hier keine ausführbare Datei angegeben wird, kann sich der Benutzer nicht anmelden. Wenn das gar erwünscht sein sollte, ist es auch möglich, hier /bin/false anzugeben. Das ist z.B. interessant, wenn ein Benutzer nur Mail abholen darf.
Das Beispiel für chfn gefolgt von finger: willi@archangel:/> chfn Ändere Finger-Informationen für willi. Password: Geben Sie den neuen Wert ein, oder drücken Sie ENTER für den Alten Voller Name: Willi Wichtig Büro Nummer []: 1 Büro Telefon []: 01 Private Rufnummer []: 030 – 12345 Weitere Informationen:
358
1451.book Seite 359 Dienstag, 7. Juli 2009 2:18 14
107.1 Benutzer- und Gruppenkonten und dazugehörige Systemdateien verwalten
Finger-Informationen geändert. willi@archangel:/>
Und nun das Ergebnis durch die Abfrage mit finger: archangel:~ # finger willi Login: willi Name: Willi Wichtig Directory: /home/willi Shell: /bin/bash Office: 1, 01 Home Phone: 030 – 12345 On since Tue Sep 4 18:31 (CEST) on pts/ 2, idle 0:02, from connor.homelinux.net No Mail. No Plan.
/etc/shadow Die Datei /etc/shadow enthält in der Hauptsache die Passwörter der Benutzer. Der Vorteil, der sich daraus ergibt, ist der, dass die shadow-Datei nicht für alle lesbar gespeichert werden muss, wodurch sich die Sicherheit der Passwörter erhöht. In der Datei /etc/passwd werden Kennwörter zwar ohnehin auch verschlüsselt abgelegt, aber diese Datei ist für jeden lesbar. Wenn kein Shadow-System auf dem Computer installiert ist, befindet sich das Passwort, wie bereits besprochen, in der zweiten Spalte der Datei /etc/passwd. Die Felder der Datei /etc/shadow gliedern sich in dieser Reihenfolge: 왘
Das erste Feld enthält den Anmeldenamen. Dieser stimmt mit dem ersten Feld der /etc/passwd-Datei überein.
왘
Das zweite Feld enthält das verschlüsselte Passwort. Die Verschlüsselung geschieht, je nach Distribution, mittels DES oder MD5. Die Verschlüsselung mit MD5 ist nicht sicherer als die mit DES, erlaubt jedoch die Verwendung längerer Passwörter. Bei der Verwendung von DES ist die Kennwortlänge auf acht Zeichen begrenzt. Längere Passwörter werden praktisch »abgeschnitten«.
왘
Zeitpunkt der letzten Kennwortänderung. Dieser Wert wird in ganzen Tagen ab dem 1. Januar 1970 angegeben.
왘
Mindestanzahl von Tagen zwischen Kennwortänderungen
왘
maximale Anzahl von Tagen zwischen Kennwortänderungen
왘
Der Benutzer wird vor dem Ablauf seines Kennwortes gewarnt. Dieser Wert zeigt an, wie viele Tage vor dem Ablauf des Kennwortes der Benutzer zur Passwortänderung aufgefordert wird.
359
1451.book Seite 360 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
왘
Wenn das Kennwort abgelaufen ist, wird das Konto deaktiviert. Dieses Feld enthält die Anzahl der Tage bis zur Deaktivierung des Accounts nach Ablauf des Kennwortes.
왘
Ablaufdatum des Benutzerkontos (falls ablaufend)
왘
reserviert für zukünftige Zwecke
Ein Beispiel: dominik: $2a$10$7oAMWZUt...OwK8kMhuAk:13760:1:21:1:3:::
Der Benutzer heißt dominik und verfügt über ein Passwort. Die Ausgabe des Passwortes wurde der Übersichtlichkeit halber gekürzt. Das Passwort wurde zuletzt am 04.09.2007 geändert (01.01.1970 + 13760 Tage). Der Benutzer darf sein Kennwort höchstens 1-mal täglich ändern, muss es jedoch mindestens alle 21 Tage ändern. 1 Tag vor Ablauf des Kennwortes wird er vom System gewarnt. Nach Ablauf des Kennwortes kann er sich noch 3 weitere Tage anmelden. Sein Konto läuft nie ab. /etc/group Ähnlich wie bei den Benutzerkonten, gibt es für die Benutzergruppen auch eine Hauptkonfigurationsdatei, die /etc/group, und eine vom Shadow-System erstellte Datei mit der Bezeichnung /etc/gshadow. Eine group-Datei könnte in etwa folgendermaßen aussehen: root:x:0: bin:x:1:daemon daemon:x:2: users:x:100: sales:x:133:michaela,dominik,willi
Die verwendeten Felder beinhalten in dieser Reihenfolge: 왘
Name der Gruppe
왘
verschlüsseltes Passwort oder den Verweis in die /etc/gshadow-Datei
왘
Gruppen-ID (kurz GID)
왘
Liste der Gruppenmitglieder, die durch ein Komma voneinander getrennt sind
Die Benutzer, die in einer solchen Gruppe aufgelistet sind, haben das Recht, in die jeweilige Gruppe zu wechseln. Erst dann bekommen sie das Recht, auf die Daten, die mit Berechtigungen über die GID konfiguriert sind, zuzugreifen. Deshalb kann hier für eine Gruppe auch ein Kennwort vergeben werden. Es muss bei der Erstellung von neuen Gruppen auch auf die Eindeutigkeit von GIDs geachtet wer-
360
1451.book Seite 361 Dienstag, 7. Juli 2009 2:18 14
107.1 Benutzer- und Gruppenkonten und dazugehörige Systemdateien verwalten
den. Auch die Wiederverwendung von GIDs, die vorher bereits gelöschten Gruppen zugeordnet waren, kann für Probleme sorgen. Wenn z.B. »willi«, der ein Mitglied der Gruppe »sales« ist, eine Datei -rw-r--r--
1 willi sales
4096 Sep 17 17:10 Verkaufsbericht
erstellt, und die Gruppe »sales« anschließend gelöscht wird, dann geschieht mit dieser Datei Folgendes: -rw-r--r--
1 willi 133
4096 Sep 17 17:10 Verkaufsbericht
Es bleibt also der Benutzer erhalten, aber die Gruppe »sales« wird mit Ihrer ursprünglichen GID (133) angezeigt. Das liegt daran, dass sich das Dateisystem lediglich UIDs und GIDs merkt und diese erst für den Benutzer wieder in Namen »auflöst«, wenn dieser auf die Dateien zugreift. Sollten Sie nun eine neue Gruppe erstellen und versehentlich die alte GID wieder verwenden, können Mitglieder dieser neuen Gruppe den Verkaufsbericht lesen. In diese Beziehung stellt das Standardkonto »users« bei unvorsichtiger Vergabe von Dateirechten eventuell auch ein Sicherheitsrisiko dar. Deshalb wird unter Red Hat für jeden neuen Benutzer auch eine gleichnamige neue Gruppe angelegt. /etc/gshadow Was die Datei /etc/gshadow macht, das wissen Sie bereits. Bleibt nur noch zu klären, was die einzelnen Felder der Datei bedeuten: sales: $2a$10$....5nvMAwrW39u1:harald:michaela,dominik,willi
Hier erfolgt eine Auflistung der Inhalte in der entsprechenden Reihenfolge: 왘
Name der Gruppe
왘
Gruppenpasswort (hier gekürzt). Bei Standardgruppen wird auf ein Passwort oftmals auch verzichtet. Es kann ohnehin nur ein Benutzer in diese Gruppe wechseln, der sich am System angemeldet hat und in der Mitgliederliste eingetragen ist. Ein Missbrauch ist also unwahrscheinlich.
왘
Gruppenverwalter. Der Gruppenverwalter kann Mitglieder zur Gruppe hinzufügen oder entfernen. Weiterhin hat er als Einziger (außer dem root natürlich) das Recht, das Passwort für die Gruppe zu ändern.
왘
Mitglieder der Gruppe. Sie werden, wie gehabt, durch Kommata voneinander getrennt.
361
1451.book Seite 362 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
Befehle zur Verwaltung von Benutzern Machen Sie sich für die Prüfung besonders vertraut mit den genauen Namen der Befehle. Es besteht hier eine große Ähnlichkeit zwischen den Befehlsnamen und sogar den Konfigurationsdateien. Es gibt Prüfungsfragen, die genau auf dieser Ähnlichkeit basieren und für viel Verwirrung sorgen können. Lesen Sie bitte zusätzlich die Manpages zu den folgenden Befehlen. Die in diesem Buch aufgeführten Optionen sind absolute Prüfungskandidaten. useradd Mit diesem Befehl wird ein neuer Benutzer erstellt. Als Grundlage für die Voreinstellungen dient hierbei die Datei /etc/default/useradd. Diese Datei kann z.B. so aussehen: GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel GROUPS=video,dialout
Die Einträge bedeuten von oben nach unten: 왘
Die initiale Gruppe des Benutzers ist 100 (also in diesem Fall »users«).
왘
Sein Heimatverzeichnis wird unterhalb von /home angelegt.
왘
Das Konto ist nicht deaktiviert (INACTIVE=-1).
왘
Das Konto läuft nie ab (EXPIRE=).
왘
Die voreingestellte Shell ist die Bash.
왘
Das Heimatverzeichnis wird aus der Vorlage /etc/skel erstellt.
왘
Der Benutzer gehört, abgesehen von der initialen Gruppe, auch noch den Gruppen video und dialout an.
Häufig mit useradd verwendete Optionen: 왘
-c (comment) legt den Inhalt des Beschreibungsfeldes fest.
왘
-d verzeichnis verwendet verzeichnis statt des Benutzernamens als Hei-
matverzeichnis (/home/verzeichnis). 왘
-m steht alleine für make und erstellt das Heimatverzeichnis mit den Standard-
einstellungen aus /etc/default/useradd. 왘
362
-s stellt eine alternative Shell ein (z.B. /bin/false für nicht interaktive User).
1451.book Seite 363 Dienstag, 7. Juli 2009 2:18 14
107.1 Benutzer- und Gruppenkonten und dazugehörige Systemdateien verwalten
왘
-G legt die Mitgliedschaften in Gruppen fest, Trennung erfolgt durch Kommata ohne Leerzeichen.
왘
-g legt die initiale Gruppe (auch Hauptgruppe genannt) neuer Benutzer fest.
왘
-p legt ein Passwort für den Benutzer fest. Diese Option funktioniert bei
einem eingeschalteten Shadow-System nicht bei jeder Distribution. Erstellen Sie in diesem Fall das Kennwort nachträglich. 왘
-k spezifiziert ein alternatives Skeletonverzeichnis abweichend von dem in
/etc/default/useradd angegebenen. 왘
-u legt die UID für den neuen Benutzer fest.
Beispiel: useradd –m –c "Dominik Merlin Maassen" –s /bin/sh dominik
legt den Benutzer »dominik« mit Heimatverzeichnis und vollem Namen an und teilt ihm die Shell /bin/sh zu. useradd willi
legt den Benutzer »willi« an. Da die Option –m nicht angegeben wurde, ist dieser Benutzer ohne Heimverzeichnis und erhält bei jeder Anmeldung einen unschönen Hinweis. userdel Mit diesem Kommando wird ein Benutzerkonto vom System entfernt. Es wird einfach nur der Anmeldename übergeben. Häufig verwendete Optionen sind: 왘
-r (remove) löscht gleichzeitig das Heimverzeichnis des Benutzers.
왘
-f (force) löscht das Heimverzeichnis des Benutzers auch dann, wenn dieses
Verzeichnis Dateien anderer Benutzer enthält. Beispiel: userdel willi –rf
löscht den Benutzer »willi« inklusive seines Heimatverzeichnisses, auch wenn dieses Daten anderer Benutzer enthält. usermod Der Befehl usermod dient dazu, ein existierendes Benutzerkonto zu ändern (modifizieren). Die Syntax bzw. die Optionen zu usermod ähneln größtenteils denen
363
1451.book Seite 364 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
von useradd. Ausnahmen bilden die Optionen, die bei der Erstellung von Benutzern keinen Sinn ergäben. Häufig verwendete Optionen sind: -L (lock) zum Deaktivieren eines Kontos -U (unlock) zum Aktivieren eines Accounts
Beispiele: archangel:~ # usermod -L dominik
sperrt das Benutzerkonto von »dominik«. archangel:~ # usermod -G management michaela
fügt »michaela« der Gruppe »management« hinzu. Die initiale Gruppe (Hauptgruppe) würde mit –g geändert. archangel:~ # usermod -p p@sswort dominik
ändert das Kennwort von »dominik« auf »p@sswort«. passwd Das Kommando passwd wird hauptsächlich dazu verwendet, das Kennwort eines Benutzers zu ändern. Es können aber auch Änderungen damit durchgeführt werden, die eigentlich usermod machen sollte. Der Grund hierfür wird klar, wenn Sie die beiden Kommandos mal miteinander vergleichen: -rwsr-xr-x -rwxr-xr-x
1 root shadow 1 root root
66040 Oct 25 92000 Oct 25
2005 passwd 2005 usermod
Wie Sie sehen, ist bei passwd das SUID-Bit gesetzt und bei usermod nicht. Die Folge ist, dass passwd auch dann schreibend auf /etc/passwd und /etc/shadow zugreifen kann, wenn das Programm von einem nicht administrativen Benutzerkonto ausgeführt wird. Sonst könnte ein Benutzer nämlich sein Kennwort nicht selbst ändern. Die Änderung selbst wird interaktiv durchgeführt. Das Kennwort wird während der Eingabe nicht angezeigt. Sollte das Passwort zu kurz sein, wird eine Warnmeldung ausgegeben. Beispiele: Als root ändern Sie das Passwort eines Benutzers, indem Sie den Benutzernamen dem passwd Kommando übergeben: archangel:~ # passwd dominik Changing password for dominik.
364
1451.book Seite 365 Dienstag, 7. Juli 2009 2:18 14
107.1 Benutzer- und Gruppenkonten und dazugehörige Systemdateien verwalten
New password: Re-enter new password: Password changed.
Ein Benutzer gibt einfach nur den Befehl passwd ohne Parameter an. Er wird dann zuerst zur Eingabe seines alten Kennwortes aufgefordert. chage Die Art, in der Linux Kennwortänderungen handhabt, kann für jeden User einzeln mit chage festgelegt werden. Die Standardwerte sind in der Konfigurationsdatei /etc/default/useradd festgelegt. Des Weiteren ist es möglich, ein Ablaufdatum für ein Konto anzugeben. Das ist allerdings aufwendig, weil es sich um ein Datum relativ zum 1. Januar 1970 handeln muss. Sie müssten also die Anzahl der Tage berechnen, die von diesem Datum bis zum Erlöschen des Kontos vergangen sind. Es folgt ein Beispiel mit den wichtigsten Optionen: archangel:~ # chage -m 2 dominik Aging information changed.
Die Option –m (Minimum) legt den frühesten Zeitpunkt in Tagen fest, nach denen der Benutzer sein Kennwort ändern darf. archangel:~ # chage -M 21 dominik Aging information changed.
Das große –M (Maximum) legt fest, wie lange der Benutzer maximal dasselbe Kennwort verwenden darf. Ein Benutzer kann nicht zweimal hintereinander dasselbe Kennwort angeben. Mit der oben durchgeführten Kombination wird verhindert, dass ein Benutzer zweimal hintereinander sein Kennwort ändert, um sein ursprüngliches Passwort weiterhin verwenden zu können. archangel:~ # chage -l dominik Minimum: 2 Maximum: 21 Warning: 7 Inactive: –1 Last Change: Sep 20, 2007 Password Expires: Oct 11, 2007 Password Inactive: Never Account Expires: Never
Abschließend werden die vorgenommenen Änderungen mit chage –l (list) überprüft. Sie sehen die erwarteten Modifikationen und zusätzliche Informationen, die aber alle selbsterklärend sein dürften.
365
1451.book Seite 366 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
Befehle zur Verwaltung von Gruppen groupadd Mit dem Kommando groupadd werden neue Benutzergruppen erstellt. Es kann während der Erstellung eine GID und auch ein Gruppenpasswort festgelegt werden. Die Gruppe wird dann in /etc/group erstellt. Merken Sie sich für die Prüfung, dass dieses Verzeichnis paradoxerweise nicht auf »s« endet. Die Datei /etc/ groups gibt es nicht! Häufig verwendete Optionen: 왘
-g, --gid legt die GID für die neue Gruppe fest.
왘
-o, --non-unique erlaubt die Verwendung von nicht eindeutigen GIDs.
왘
-p, --password gibt das Passwort an, das zum Wechsel in diese Gruppe notwendig ist. Die Verwendung von Gruppenpasswörtern ist allerdings eher unüblich.
Beispiel: archangel:~ # groupadd produktion -g 4711 -p prodp@ssword
erstellt die Gruppe »produktion« mit der GID 4711 und dem Gruppenkennwort »prodp@ssword«. groupdel Mit dem Kommando groupdel werden nicht mehr benötigte Benutzergruppen gelöscht. Die Übergabe von Parametern ist nicht erforderlich. Beispiel: archangel:~ # groupdel produktion
entfernt die Gruppe »produktion«. Das System gibt keine Bestätigung über den Löschvorgang aus. groupmod Mit groupmod werden bestehende Benutzergruppen modifiziert. Die Syntax dieses Kommandos ist stark an die des Kommandos groupadd angelehnt. Eine Besonderheit ist allerdings die Möglichkeit, eine Gruppe mittels groupmod umzubenennen. Die verwendete GID und daraus resultierende Berechtigungen im Dateisystem bleiben hierbei erhalten. Häufig verwendete Optionen:
366
1451.book Seite 367 Dienstag, 7. Juli 2009 2:18 14
107.1 Benutzer- und Gruppenkonten und dazugehörige Systemdateien verwalten
왘
-A, --add-user fügt Benutzer zur Gruppe hinzu.
왘
-R, --remove-user entfernt Benutzer aus der angegebenen Gruppe.
왘
-n, --new-name ändert den Namen der Gruppe unter Beibehaltung der GID
und der in der Gruppe enthaltenen Benutzer. Beispiel: archangel:~ # groupmod mktg -n marketing
nennt die Benutzergruppe »mktg« in »marketing« um. Mitglieder in dieser Gruppe und auch die GID bleiben erhalten. gpasswd Mit diesem Kommando ändern Sie das Kennwort einer Gruppe. Diese Operation ist natürlich dem root vorbehalten. Mit der Option –r wird ein Gruppenpasswort entfernt. Beispiel: archangel:~ # gpasswd -r sales Password removed.
Die Ausgabe des Kommandos ist selbsterklärend. newgrp Dieses Kommando wird nicht zur Administration verwendet. Ein Benutzer führt newgrp aus, um damit seine Gruppenzugehörigkeit zu ändern. Es ist hierbei zu beachten, dass beim Wechsel in eine andere Linux-Gruppe eine neue Shell gestartet wird. Das hat zur Folge, dass eventuell in der ersten Shell gesetzte Variablen zunächst exportiert werden müssen. Die Variablen, die in der mit newgrp erzeugten Shell deklariert werden, können nicht auf die übergeordnete Shell übertragen werden. Sie müssen solche Variablen gegebenenfalls zunächst in eine Datei schreiben. Sie verlassen eine Gruppe durch die einfache Eingabe des Kommandos exit. Beispiel: michaela@archangel:~> newgrp sales Passwort: michaela@archangel:~>pstree ... \]]sshd]]sshd]]sshd]]bash]]bash]]pstree ...
367
1451.book Seite 368 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
Der relevante Ausschnitt der Ausgabe des pstree-Kommandos zeigt, dass tatsächlich eine Subshell erzeugt wurde. Normalerweise läuft nur eine Instanz der Bash, wenn sich ein Benutzer am System anmeldet. Die Anzahl der Instanzen von sshd hat nichts mit dem Gruppenwechsel zu tun. Drei hierarchisch verschachtelte Instanzen sind bei einem Remote-Zugriff der Normalfall.
Befehle zur Verwaltung des Shadow-Systems pwconv Das Programm erstellt und aktualisiert die Datei /etc/shadow. pwconv sucht in der Datei /etc/passwd nach Passwörtern und verschiebt diese, falls vorhanden, in die Datei /etc/shadow. Sollte im Passwortfeld eines Benutzers ein x stehen, erkennt pwconv daran, dass das Kennwort dieses Benutzers bereits in der /etc/shadow enthalten sein muss. Eine Angabe von Optionen ist bei diesem Programm nur dann notwendig, wenn die Dateien /etc/passwd oder /etc/shadow nicht an ihren üblichen Positionen im Dateisystem zu finden sind. pwunconv Dieses Programm ist die Umkehrung zu pwconv. Es verschiebt die verschlüsselten Kennwörter der Benutzer nach /etc/passwd und löscht im Anschluss daran die Datei /etc/shadow. pwck Mit pwck können Sie auf einfache Art und Weise eine Konsistenzprüfung der Dateien /etc/passwd oder /etc/shadow durchführen. Die Übergabe von Optionen ist normalerweise nicht nötig. Hier ein Beispiel: archangel:~ # pwck Checking `/etc/passwd' User `hans': directory `/home/hans' does not exist. Checking `/etc/shadow'. archangel:~ #
Die Überprüfung ergab hier, dass das für den Benutzer Hans angegebene Heimverzeichnis nicht existiert. Das wird dazu führen, dass der Benutzer bei einer Anmeldung mit dem Hauptverzeichnis des Systems verbunden wird. Die Datei /etc/shadow hat bei der Überprüfung keine Fehler ergeben.
368
1451.book Seite 369 Dienstag, 7. Juli 2009 2:18 14
107.2 Systemadministrationsaufgaben durch Einplanen von Jobs automatisieren
grpconv Dieses Kommando ist äquivalent zu pwconv, nur dass es stattdessen die Gruppendateien /etc/group und /etc/gshadow verwendet. Optionen sind auch hier in der Regel nicht nötig. grpunconv Dieses Kommando ist äquivalent zu pwunconv, nur dass es stattdessen die Gruppendateien /etc/gshadow und /etc/group verwendet. Optionen sind auch hier in der Regel nicht nötig. grpck Mit grpck können Sie eine Konsistenzprüfung der Dateien /etc/gshadow und /etc/ group durchführen, ähnlich wie pwck die beiden Dateien /etc/passwd und /etc/ shadow überprüft.
107.2 Systemadministrationsaufgaben durch Einplanen von Jobs automatisieren Wichtung: 4 Beschreibung: Kandidaten sollten in der Lage sein, cron oder anacron zu verwenden, um Jobs in regelmäßigen Abständen auszuführen. Sie sollten at beherrschen, um Jobs zu einem bestimmten Zeitpunkt auszuführen. Wichtigste Wissensgebiete: 왘
Cron- und at-Jobs verwalten
왘
Zugriffsrechte auf die Dienste cron und at konfigurieren
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/cron.{d,daily,hourly,monthly,weekly}
왘
/etc/at.deny
왘
/etc/at.allow
왘
/etc/crontab
왘
/etc/cron.allow
왘
/etc/cron.deny
왘
/var/spool/cron/*
왘
crontab
369
1451.book Seite 370 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
왘
at
왘
atq
왘
atrm
Allgemeines Manchmal ist es nötig, Prozesse in Abwesenheit des Benutzers auszuführen. So werden auch schon nach der Grundinstallation eines Linux-Systems etliche Wartungsarbeiten automatisch ausgeführt, die man sonst wohl ohnehin einrichten müsste. Ein Beispiel wäre die tägliche Ausführung von logrotate. Für die Ausführung dieser Jobs sind drei verschiedene Werkzeuge verfügbar. Zur einmaligen Ausführung eines Programms oder Skripts verwendet man at. Diese Einrichtung basiert auf dem Daemon atd. Sollen Programme oder Skripte regelmäßig ausgeführt werden, benutzen Sie cron oder anacron. Der Hauptunterschied zwischen anacron und dem althergebrachten cron ist der, dass anacron einkalkuliert, dass ein Computer zur geplanten Laufzeit der Jobs heruntergefahren sein könnte. Deshalb ist anacron, theoretisch jedenfalls, für Arbeitsstationen interessanter. In der Praxis bieten die meisten Distributionen aber auch in Kombination mit cron die Möglichkeit, versäumte Aufgaben nachzuholen.
Die Verwendung von cron Bei der Thematik cron sollten Sie bei der Prüfung sorgfältig die Fragen auf Feinheiten prüfen. Wenn nach einem Werkzeug gefragt wird, dass automatisch Programme ausführen kann, dann ist von cron die Rede. Wird nach einem Daemon gefragt, der Programme automatisch ausführt, dann sollten Sie mit crond antworten. Also: Das kleine »d« nicht vergessen! Der zweite mögliche Stolperstrick ist die Frage nach dem Aufrufen von Manpages zu dieser Thematik. Schließlich heißen sowohl die Hauptkonfigurationsdatei als auch das Programm zum Hinzufügen von Einträgen zur Cron-Tabelle crontab. Informationen über die Syntax der Datei /etc/crontab erhalten Sie mit man 5 crontab, während das Kommando man 1 crontab über den Befehl zum Hinzufügen von Jobs informiert. Die Datei crontab Der Aufbau der crontab-Datei sollte für die Prüfung genauestens bekannt sein, weil zu diesem Thema erwartungsgemäß mehrere Fragen gestellt werden. Eine sehr schöne und vor allem prüfungsnahe Cron-Tabelle finden Sie bei Fedora 10: SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root
370
1451.book Seite 371 Dienstag, 7. Juli 2009 2:18 14
107.2 Systemadministrationsaufgaben durch Einplanen von Jobs automatisieren
HOME=/ # run-parts 01 * * * * root 02 4 * * * root 22 4 * * 0 root 42 4 1 * * root
run-parts run-parts run-parts run-parts
/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
Der obere Teil der Datei legt lediglich ein paar Grundeinstellungen fest. Cron soll bei seiner Ausführung die Shell /bin/bash verwenden. Sicherheitshalber wird die Pfadvariable innerhalb dieser Subshell neu deklariert. Wenn es ein Problem gibt, wird der root per Mail benachrichtigt. Sollten Sie nur selten als root angemeldet sein, empfiehlt es sich hier, eine andere Mailadresse anzugeben. Cron verwendet zur Laufzeit das Hauptverzeichnis als sein Heimatverzeichnis. Nach dem Kommentar run-parts beginnt die eigentliche Tabelle. Die ersten fünf Abschnitte bestimmen, wann ein Programm ausgeführt werden soll. Das sechste Feld legt den Benutzerkontext fest, in dem dieses Programm ausgeführt werden soll. Und das letzte Feld definiert das auszuführende Programm selbst. Für die Prüfung sind die Felder zur Festlegung der Ausführungszeitpunkte besonders wichtig. Hier also deren Bedeutungen in der Reihenfolge von links nach rechts: 왘
Minute(n) mögliche Werte sind 0–59
왘
Stunde(n) mögliche Werte sind 0–23
왘
Tag(e) des Monats mögliche Werte sind 1–31
왘
Monat(e) mögliche Werte sind 0–12
왘
Tag(e) der Woche mögliche Werte 0–7 (Sonntag ist sowohl 0 als auch 7)
Wenn Werte mehrfach belegt werden müssen, dann wird entweder eine durch Kommata getrennte Aufzählung angegeben oder ein (-) Strich als »bis« verwendet. Die Sternchen (asterisk) bedeuten, wie in vielen anderen Zusammenhängen auch, jede(r). Beispiele: 01 * * * * root run-parts /etc/cron.hourly
bedeutet also immer um eine Minute nach der vollen Stunde, zu jeder Stunde zu jedem Tag im Monat, in jedem Monat und an beliebigen Wochentagen. Es wird dann das Skript run-parts im Benutzerkontext des root ausgeführt, das im Verzeichnis /etc/cron.hourly nach Skripten sucht und diese dann ausführt. 22 4 * * 0 root run-parts /etc/cron.weekly
Führt mittels run-parts die in /etc/cron.weekly befindlichen Skripte aus. Die Ausführung erfolgt jeden Sonntag (0) um 4 Uhr und 22 Minuten.
371
1451.book Seite 372 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
0 8,10,13,16 * * 1-5 root /etc/myscripts/virusscan
Diese Zeile führt von Montag bis Freitag (1–5) immer um 8.00, 10.00, 13.00 und 16.00 Uhr einen Virenscanner aus. 0/30 8-16 * * 1-5 root /etc/myscripts/virusscan
In diesem letzten Beispiel kommt noch der Schrägstrich ins Spiel. Der Virenscanner würde jetzt an Wochentagen zwischen 8:00 Uhr und 16:30 Uhr alle 30 Minuten ausgeführt werden. Prüfungstipp Kenntnisse über die gerade genannten Crontab-Felder sind für die Prüfung besonders wichtig.
In der Praxis kann es angenehmer sein, mit »Nicknames« zu arbeiten. Mit diesen können Sie die fünf Zeitfelder ersetzen. Diese Nicknames sind: 왘
@yearly einmal im Jahr, entspricht 0 0 1 1 *
왘
@annually einmal im Jahr, entspricht 0 0 1 1 *
왘
@monthly jeweils am 1. eines Monats, entspricht 0 0 1 * *
왘
@weekly jeden Sonntag um Mitternacht, entspricht 0 0 * * 0
왘
@daily täglich um Mitternacht, entspricht 0 0 * * *
왘
@hourly zu jeder vollen Stunde, entspricht 0 * * * *
왘
@reboot einmal nach dem Systemstart
Das Kommando crontab Mit dem Kommando crontab können Einträge zu einer Cron-Tabelle hinzugefügt werden. Grundsätzlich kann crontab auch von gewöhnlichen Benutzern verwendet werden, es gibt aber auch die Möglichkeit, die Verwendung auf bestimmte Benutzer zu beschränken. Doch dazu später mehr. Die Cron-Tabelle /etc/crontab, die bereits oben besprochen wurde, wird mit dem Programm crontab nicht modifiziert. Diese muss stattdessen mit einem Editor bearbeitet werden. Wenn der User root dieses Programm startet, wird für ihn eine crontab-Datei erstellt wie für andere Benutzer auch. Diese benutzerspezifischen crontab-Dateien werden zentral in /var/spool/cron abgelegt. Das Kommando crontab versteht die folgenden Optionen: 왘
-e editiert die crontab des angemeldeten Benutzers
왘
-l listet den Inhalt einer crontab-Datei auf
372
1451.book Seite 373 Dienstag, 7. Juli 2009 2:18 14
107.2 Systemadministrationsaufgaben durch Einplanen von Jobs automatisieren
왘
-r löscht die crontab-Datei eines Benutzers (remove)
왘
-u mit dieser Option kann der root die crontab eines anderen Benutzers bearbeiten oder einsehen
Beispiel: archangel:/ # crontab -l -u michaela # DO NOT EDIT THIS FILE – edit the master and reinstall. # (/tmp/crontab.XXYXwBgjc7 installed on Thu Sep 27 18:44:29 2007) # (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/ 23 18:56:42 vixie Exp $) 0 0 * * 1-6 /home/michaela/backupscript
Die Ausgabe von crontab zeigt, dass die Benutzerin »michaela« täglich außer sonntags um Mitternacht ein Backup-Skript ausführt.
Die Verwendung von at Im Gegensatz zu cron ist at darauf ausgelegt, Programme oder Skripte einmalig zu einer vorher festgelegten Zeit auszuführen. Auch das at-Kommando kann von normalen Anwendern ausgeführt werden, solange es ihnen nicht verweigert wird. Achten Sie auch hier bei der Prüfung auf die Verwendung der richtigen Begriffe: Der Daemon heißt atd, während das Programm nur at heißt. Bei vielen Distributionen läuft der atd standardmäßig nicht. Starten Sie ihn also zunächst: debian40:~# /etc/init.d/atd start Starting deferred execution scheduler: atd.
Jetzt ist der Daemon sofort bereit, Aufträge entgegenzunehmen. Es ist möglich, diese Aufträge entweder in einem interaktiven Modus zu übergeben oder in einer Textdatei, die dann mit einer Kommandozeile angegeben wird. Die Zeitangaben sind bei diesem Daemon sehr vielfältig. Beispiele: michaela@debian40:~$ at 17:00 tomorrow at> /home/michaela/cleanupscript at> /home/michaela/backupscript at> <EOT> job 3 at Fri Sep 28 17:00:00 2007
Hier wurde interaktiv für morgen um 17:00 Uhr (also vermutlich zu einer Zeit, zu der das System nicht stark belastet ist) die Verarbeitung von zwei Skripten geplant. An der Position, wo das System <EOT> für End Of Transmission anzeigt, wurde vom Benutzer in Wirklichkeit (Strg) + (D) betätigt.
373
1451.book Seite 374 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
Soll eine ganze Reihe von Kommandos zeitgesteuert ausgeführt werden, dann können Sie diese zeilenweise in eine Textdatei schreiben und sie dann wie folgt an at übertragen: michaela@debian40:~$ at -f commandlist teatime tomorrow warning: commands will be executed using /bin/sh job 4 at Fri Sep 28 16:00:00 2007
Die Datei commandlist enthält hier die auszuführenden Kommandos. Die Zeitangabe »teatime« bezieht sich auf 16:00 Uhr. Lassen Sie sich in der Prüfung nicht durch anscheinend unrealistische Zeitpläne irritieren! Mit atq kann der Inhalt der at-Warteschlange überprüft werden (q = queue). Es ist alternativ die Verwendung von at –l möglich. Beide Varianten sind prüfungsrelevant: michaela@debian40:~$ atq 4 Fri Sep 28 16:00:00 2007 a michaela
Das Entfernen eines mit at geplanten Jobs geschieht entweder mit dem Befehl atrm <jobnummer> oder auch at –d <jobnummer>, also in diesem Fall so: michaela@debian40:~$ atrm 3
Grundlegendes zu anacron Ein weiteres Programmpaket zur Automatisierung von Programmabläufen ist anacron. Im Gegensatz zu cron berücksichtigt anacron von sich aus, dass ein System neu gestartet worden sein könnte und holt eventuell verpasste Jobs nach. Ein weiterer Unterschied zu cron ist der, dass anacron nicht von normalen Benutzern verwendet werden kann, sondern ausschließlich von root. Anacron bezieht seine Konfiguration aus der Datei /etc/anacron. Diese ist vom Aufbau her nicht mit der Datei /etc/crontab zu vergleichen. Der Daemon, der hierbei zum Einsatz kommt, heißt anacron. Beachten Sie wieder die Schreibweise, diesmal ohne »d«! In der Prüfung sind bisher keine Fragen zum Thema anacron aufgetaucht, weshalb Sie sich auch eher auf cron und at konzentrieren sollten.
Zugriffssteuerung auf cron und at Weil sowohl cron als auch at für Benutzer zugänglich sind, kann es notwendig werden, den Zugriff auf diese beiden Werkzeuge auf bestimmte User zu beschränken. Es gibt zu diesem Zweck für jedes dieser beiden Programmpakete jeweils zwei Konfigurationsdateien, deren Konfiguration sich leider jeweils unterscheidet. Seien Sie hierbei auf kniffelige Prüfungsfragen vorbereitet! Für anacron gibt es solche Dateien nicht, weil anacron ohnehin nicht von Benutzern verwen-
374
1451.book Seite 375 Dienstag, 7. Juli 2009 2:18 14
107.3 Lokalisierung und Internationalisierung
det werden kann. Die Autorisierungsdateien für cron und at befinden sich direkt im Verzeichnis /etc und verhalten sich wie folgt: 왘
cron.allow wenn diese Datei existiert, dann dürfen nur die Benutzer cron verwenden, die in dieser Datei gelistet sind.
왘
cron.deny wenn diese Datei existiert, aber keine cron.allow-Datei, dann dürfen alle Benutzer cron verwenden, die nicht in cron.deny aufgeführt sind.
왘
at.allow wenn diese Datei existiert, dann dürfen nur die Benutzer at verwenden, die in dieser Datei gelistet sind.
왘
at.deny wenn diese Datei existiert, aber keine at.allow-Datei, dann dürfen alle Benutzer at verwenden, die nicht in at.deny aufgeführt sind.
Bis hierher ist das Verhalten logisch nachvollziehbar und bei beiden Diensten identisch. Aber: 왘
Wenn es weder die Datei cron.allow noch cron.deny gibt, dürfen alle Benutzer cron verwenden.
왘
Wenn es weder die Datei at.allow noch at.deny gibt, darf nur root at verwenden. Eine leere at.deny-Datei ermöglicht den Zugriff für alle Benutzer.
Prüfungstipp Der Unterschied bei der Konfiguration des Zugriffs auf diese beiden Dienste ist Gegenstand der Prüfung.
107.3 Lokalisierung und Internationalisierung Wichtung: 3 Beschreibung: Kandidaten sollten in der Lage sein, ein System in einer anderen Sprache als Englisch zu lokalisieren. Dazu gehört auch ein Verständnis dafür, warum LANG=C in Shell-Skripten nützlich ist. Wichtigste Wissensgebiete: 왘
Locale-Einstellungen
왘
Zeitzonen-Einstellungen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/timezone
왘
/etc/localtime
왘
/usr/share/zoneinfo
375
1451.book Seite 376 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
왘
Umgebungsvariablen: 왘
LC_*
왘
LC_ALL
왘
LANG
왘
/usr/bin/locale
왘
tzselect
왘
tzconfig
왘
date
왘
iconv
왘
UTF-8
왘
ISO-8859
왘
ASCII
왘
Unicode
Allgemeines Damit es möglich ist, ein Betriebssystem in unterschiedlichen Ländern mit unterschiedlichen Sprachen zu verwenden, sind einige Parameter veränderlich. Es muss eine Zeitzone konfigurierbar sein, damit die Hardware-Uhr weltweit identisch auf UTC eingestellt sein kann, das Betriebssystem aber trotzdem die Ortszeit anzeigt. Außerdem müssen landesspezifische Eigenschaften, wie Währung, Papierformate, Datums- und Uhrzeitfomat, Telefonnummernformate und physikalische Größen (metrisch oder nicht) definiert werden. Diese Parameter sind in Variablen hinterlegt und können dann z.B. von Anwendungsprogrammen abgefragt werden. Ein weiterer wichtiger Faktor sind Zeichensätze und Tastaturbelegungen. Hierbei handelt es sich um ein problematisches Fachgebiet, weil durch die Verwendung falscher Zeichensätze oftmals Zeichen falsch oder auch gar nicht dargestellt werden. Für uns in Deutschland wären die Umlaute als besonders kritische Patienten zu benennen.
Zeitzoneneinstellung Wenn Sie ein Betriebssystem installieren, werden Sie normalerweise vom SetupAssistenten gefragt, in welcher Zeitzone Sie sich befinden. Es kann aber auch vorkommen, dass Sie die eingestellte Zeitzone nachträglich ändern möchten. Einen
376
1451.book Seite 377 Dienstag, 7. Juli 2009 2:18 14
107.3 Lokalisierung und Internationalisierung
schnellen Überblick über die verfügbaren Zeitzonen bekommen Sie mit dem interaktiven Programm tzselect. Sie können das Programm einfach auf der Kommandozeile aufrufen. Als Erstes werden Sie dann nach dem Kontinent gefragt, den Sie auswählen möchten. root@archangel:~# tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent or ocean. 1) Africa 2) Americas 3) Antarctica 4) Arctic Ocean 5) Asia 6) Atlantic Ocean 7) Australia 8) Europe 9) Indian Ocean 10) Pacific Ocean 11) none – I want to specify the time zone using the Posix TZ format. #? 8
In diesem Fall soll Europa der Kontinent der Wahl sein. Als Nächstes wählen Sie das Land aus, das es zu betrachten gilt: Please select a country. 1) Aaland Islands 2) Albania 3) Andorra 4) Austria 5) Belarus 6) Belgium 7) Bosnia & Herzegovina 8) Britain (UK) 9) Bulgaria 10) Croatia 11) Czech Republic 12) Denmark 13) Estonia 14) Finland 15) France 16) Germany 17) Gibraltar #? 16
18) 19) 20) 21) 22) 23) 24) 25) 26) 27) 28) 29) 30) 31) 32) 33) 34)
Greece Guernsey Hungary Ireland Isle of Man Italy Jersey Latvia Liechtenstein Lithuania Luxembourg Macedonia Malta Moldova Monaco Montenegro Netherlands
35) 36) 37) 38) 39) 40) 41) 42) 43) 44) 45) 46) 47) 48) 49)
Norway Poland Portugal Romania Russia San Marino Serbia Slovakia Slovenia Spain Sweden Switzerland Turkey Ukraine Vatican City
377
1451.book Seite 378 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
Eine 16 wählt Deutschland aus, und es erscheint eine abschließende Abfrage, ob die angezeigten Informationen richtig sind: The following information has been given: Germany Therefore TZ='Europe/Berlin' will be used. Local time is now: Tue Apr 28 17:42:29 CEST 2009. Universal Time is now: Tue Apr 28 15:42:29 UTC 2009. Is the above information OK? 1) Yes 2) No #?
Wie Sie sehen, wird die Uhrzeit zum Abschluss in Ortszeit und in UTC angezeigt. Hierdurch wird der Grund für die Zeitzonenzuordnung noch einmal deutlich. Eine Erläuterung der UTC finden Sie etwas später in diesem Buch unter dem Topic 108. Das Programm tzselect verwendet für seine Anzeige die Dateien im Verzeichnis /usr/share/zoneinfo. Sie finden hier einen Verzeichnisbaum, der den Auswahlen des Programms tzselect entspricht. In der oberen Ebene finden Sie Verzeichnisse, die den Kontinenten entsprechen. Wenn Sie in eines dieser Verzeichnisse wechseln, finden Sie Binärdateien, die mit den jeweiligen Städten korrespondieren. Wenn Sie die Zeitzone eines Computers ändern wollen, dann erstellen Sie einen symbolischen Link mit der jeweiligen »Stadt-Datei« zu /etc/localtime, oder kopieren Sie die Datei selbst auf /etc/localtime. Sie sollten aus Kompatibilitätsgründen zu hwclock letztere Methode bevorzugen. In der Konfigurationsdatei /etc/timezone muss die Zeitzone ebenfalls festgelegt werden. Die Syntax des Eintrags ist sehr einfach: root@archangel:/# cat /etc/timezone Europe/Berlin
Das ist also im Prinzip lediglich der Verzeichnisname unterhalb von /usr/share/ zoneinfo, und hinter dem Slash folgt der Binärdateiname der entsprechenden »Stadt-Datei«. Wenn die Zeitzone nur vorübergehend oder nur für einen bestimmten Benutzer gelten soll, können Sie geschickt mit der Variablen TZ (Time Zone) arbeiten. Wenn ein bestimmter Benutzer, der sich z.B. per ssh aus einem anderen Land einloggt, eine ihm entsprechende Zeitzone benötigt, können Sie die Variable TZ in der .profile-Datei in seinem Heimatverzeichnis anpassen. Für einen User von den Marshallinseln sähe der Eintrag dann so aus:
378
1451.book Seite 379 Dienstag, 7. Juli 2009 2:18 14
107.3 Lokalisierung und Internationalisierung
TZ='Pacific/Majuro'
Um eine temporäre Änderung der Zeitzone zu bewirken, können Sie die Variable natürlich auch einfach auf der Konsole setzen und exportieren: root@archangel:/# export TZ='Pacific/Majuro'
Eine Überprüfung mit date und sofort danach mit date –u ergibt dieses Ergebnis: root@archangel:/# date Mi 29. Apr 05:02:30 MHT 2009 root@archangel:/# date -u Di 28. Apr 17:02:34 UTC 2009
Die Option –u fordert die UTC an, sodass ein interessanter Vergleich möglich ist. MHT ist übrigens das Kürzel für die Zeitzone der Marshallinseln. Zeitzonen-Frontends Einige Distributionen verwenden zum Einstellen der Zeitzone das Frontend tzconfig. Hier wird ähnlich wie bei tzselect interaktiv nach dem zu konfigurierenden Land gefragt. In diesem Fall findet allerdings auch tatsächlich eine Konfiguration statt. Unter Debian, Ubuntu und ähnlichen Betriebssystemen können Sie übrigens einfach dpkg-reconfigure tzdata menügeführt verwenden.
Umgebungsvariablen für die Lokalisation Einige Anwendungsprogramme benötigen Informationen über regionale Gegebenheiten. Das wären z.B. Währung, Papierformate, Datums- und Uhrzeitfomat, Telefonnummernformate und physikalische Größen. Diese Parameter sind in Umgebungsvariablen hinterlegt, die von Programmen abgefragt werden können. Einige Beispiele hierfür sind: 왘
LC_CTYPE – Zeichenklassifikationen
왘
LC_COLLATE – Sortierreihenfolge
왘
LC_TIME – Zeit- und Datumsformat
왘
LC_NUMERIC – numerische Formate außerhalb des Finanzsektors
왘
LC_MONETARY – numerische Formate des Finanzsektors
왘
LC_MESSAGES – Formate für informative und diagnostische Benachrichtigungen
왘
LC_PAPER – Papierformate und Größen
왘
LC_NAME – Namenformate
379
1451.book Seite 380 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
왘
LC_ADDRESS – Adressformate
왘
LC_TELEPHONE – Formate der Telefonnummern
왘
LC_MEASUREMENT – Maßeinheiten (metrisch oder andere)
왘
LC_IDENTIFICATION – Metadaten der Lokalisation
Diese Umgebungsvariablen können sich, abhängig von der verwendeten Distribution, in unterschiedlichen Verzeichnissen befinden. Typisch wären hier die Unterverzeichnisse von /usl/lib/locale. Sie sehen am Inhalt dieses Verzeichnisses sofort, welche Sprachen Ihr System momentan unterstützt. Wenn Sie erfahren wollen, welche Sprachunterstützung grundsätzlich möglich ist, dann konsultieren Sie die Datei /usr/share/i18n/SUPPORTED. Um einen schnellen Überblick zu erhalten, wie die Umgebungsvariablen in Bezug auf die Lokalisation gerade gesetzt sind, können Sie einfach das Kommando locale verwenden. Ohne Optionen zeigt das Programm die aktuell verwendete Sprachunterstützung an: root@archangel:/# locale LANG=de_DE.UTF-8 LC_CTYPE="de_DE.UTF-8" LC_NUMERIC="de_DE.UTF-8" LC_TIME="de_DE.UTF-8" LC_MONETARY="de_DE.UTF-8" LC_MESSAGES="de_DE.UTF-8" ... der Rest wurde herausgeschnitten ... LC_ALL=
Wichtig Die Variable LANG hat eine Sonderstellung. Wenn eine der anderen Variablen (auch LC_ALL) fehlen sollte, gilt der hier stehende Eintrag. LANG hat also eine geringe Priorität. Genau andersherum verhält es sich mit LC_LANG. Diese Variable ist normalerweise überhaupt nicht gesetzt. Wenn sie doch gesetzt wird, hat sie Priorität vor allen anderen LC-Variablen auch vor LANG. Wenn Sie die Variable LANG manuell setzen und exportieren (z.B. in einem Skript), werden allerdings alle anderen LC-Variablen mit dem von Ihnen angegebenen Wert überschrieben. Hierbei gibt es noch eine Besonderheit: Wenn Sie nämlich LANG=C setzen, dann geben Programme, die auf Lokalisationen reagieren, ihre Daten »roh« aus. Die Daten durchlaufen dann keine Zeichensatztabelle mehr, sondern werden einfach ausgegeben, wie sie sind. Ein amerikanisches Finanzprogramm würde dann auch auf einem deutsch lokalisierten Linux ein Dollarzeichen anstatt des Eurozeichens ausgeben.
380
1451.book Seite 381 Dienstag, 7. Juli 2009 2:18 14
107.3 Lokalisierung und Internationalisierung
Mit dem Schalter Kommando locale –a können Sie die verfügbaren Lokalisationen anzeigen (gemäß /usl/lib/local). root@archangel:/# locale -a C de_AT.utf8 de_BE.utf8 de_CH.utf8 de_DE.utf8 de_LI.utf8 de_LU.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 ... der Rest wurde abgeschnitten ...
Um eine Liste der verfügbaren Zeichensätze anzuzeigen, können Sie locale mit der Option –m (für charmap) verwenden. root@archangel:/# locale -m |head ANSI_X3.110-1983 ANSI_X3.4-1968 ARMSCII-8 ASMO_449 BIG5 BIG5-HKSCS BRF BS_4730 BS_VIEWDATA CP10007 ... der Rest wurde abgeschnitten ...
Auf das Thema Zeichensätze wird auf den folgenden Seiten noch ausführlich eingegangen.
Historische Zeichensätze Wenn Zeichen von einem Ort zu einem anderen elektrisch übertragen werden sollen, müssen diese zunächst in eine geeignete Form umgewandelt werden. Leider ist es ja nicht möglich, ein A oder ein B einfach in elektrischen Strom zu verwandeln, denn es gibt nur zwei Möglichkeiten: Entweder es fließt Strom, oder es fließt kein Strom. Um diese Umwandlung hat sich Samuel Morse erstmals im Jahre 1836 gekümmert, indem er den ersten elektrischen Telegrafen erfand. Hierbei wurde einfach eine elektrische Spannung über einen Schalter an einen entfernten Elektromagneten übertragen. Im Prinzip gab es dabei (durch entspre-
381
1451.book Seite 382 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
chende Schalterbetätigung) drei mögliche Signale, nämlich lang, kurz oder Pause. Der Morse-Code ist demnach nicht als digital zu betrachten, weil es drei verschiedene Signale gab und nicht nur zwei. Bereits im Jahre 1870 entwickelte Jean-Maurice-Émile Baudot für die Telegrafie den Baudot-Code. Hierbei handelte es sich um synchron übertragene 5-Bit-Codes. Mit 5 Bit konnte bereits das komplette Alphabet übertragen werden (denn 25=32). Der Baudot-Code wird als ein früher Vorläufer von ASCII gehandelt. Die Maßeinheit Baud für die Übertragungsgeschwindigkeit von Modems ging ebenfalls auf Jean-Maurice-Émile Baudots Nachnamen zurück. Donald Murray erfand 1901 den Murray-Code. Hierbei handelte es sich ebenfalls um eine 5-Bit-Kodierung. Das Besondere an seiner Erfindung war aber jedenfalls die Hardware, die hier zum Einsatz kam. Ein Gerät, das einer Schreibmaschine ähnelte, produzierte Lochstreifen, die dann wiederum in einen Bandtransmitter eingeführt wurden. Hieraus ergaben sich einige Vorteile. Das Problem mit Operatoren, die rhythmisch nicht sauber morsten, entfiel. Außerdem konnte mit Murrays Gerät erheblich schneller geschrieben und übertragen werden. Es ergaben sich hier schon Übertragungsgeschwindigkeiten von bis zu 1260 Buchstaben pro Minute. Das waren immerhin schon 21 Baud!
ASCII – American Standard Code for Information Interchange ASCII ist eine 7-Bit-Zeichenkodierung, die bereits 1967 als Standard veröffentlicht wurde. Die letzte Aktualisierung von ASCII fand im Jahre 1987 statt. Die Zeichenkodierung ASCII umfasst 128 Zeichen (denn 27=128), die sich in der ASCIITabelle wiederfinden. Die Tabelle stellt die dezimale Schreibweise den entsprechenden Zeichen gegenüber. 95 der Zeichen sind druckbar. Die übrigen 33 Zeichen sind Steuerzeichen, von denen heutzutage die meisten nicht mehr verwendet werden. Die druckbaren Zeichen beginnen mit dem Space-Zeichen (Dez. 32) und enden mit der Tilde ~ (126). Dez.
Zeichen
Dez.
Zeichen
Dez.
Zeichen
Dez.
Zeichen
0
NUL
32
SP
64
@
96
`
1
SOH
33
!
65
A
97
a
2
STX
34
"
66
B
98
b
3
ETX
35
#
67
C
99
c
4
EOT
36
$
68
D
100
d
5
ENQ
37
%
69
E
101
e
6
ACK
38
&
70
F
102
f
Tabelle 1
382
7-Bit-ASCII-Tabelle
1451.book Seite 383 Dienstag, 7. Juli 2009 2:18 14
107.3 Lokalisierung und Internationalisierung
Dez.
Zeichen
Dez.
Zeichen
Dez.
Zeichen
Dez.
Zeichen
7
BEL
39
´
71
G
103
g
8
BS
40
(
72
H
104
h
9
TAB
41
)
73
I
105
i
10
LF
42
*
74
J
106
j
11
VT
43
+
75
K
107
k
12
FF
44
‚
76
L
108
l
13
CR
45
-
77
M
109
m
14
SO
46
.
78
N
110
n
15
SI
47
/
79
O
111
o
16
DLE
48
0
80
P
112
p
17
DC1
49
1
81
Q
113
q
18
DC2
50
2
82
R
114
r
19
DC3
51
3
83
S
115
s
20
DC4
52
4
84
T
116
t
21
NAK
53
5
85
U
117
u
22
SYN
54
6
86
V
118
v
23
ETB
55
7
87
W
119
w
24
CAN
56
8
88
X
120
x
25
EM
57
9
89
Y
121
y
26
SUB
58
:
90
Z
122
z
27
Esc
59
;
91
[
123
{
28
FS
60
<
92
\
124
|
29
GS
61
=
93
]
125
}
30
RS
62
>
94
^
126
~
31
US
63
?
95
_
127
DEL
Tabelle 1
7-Bit-ASCII-Tabelle (Forts.)
Beispiele für die nicht druckbaren Steuerzeichen sind: 왘
00 NUL
왘
01 SOH – Start Of Header
왘
02 STX – Start Of Text
왘
03 EOT – End Of Transmission
왘
10 LF – Line Feed
왘
12 FF – Form Feed
383
1451.book Seite 384 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
왘
13 CR – Carriage Return
왘
27 ESC – Escape
Vielleicht ist Ihnen aufgefallen, dass in dieser Tabelle keine Umlaute vorkommen. Überhaupt kommt man mit dieser Tabelle nicht mehr aus. Es fehlen: das €-Zeichen, den Briten fehlt das £, den Franzosen das Ÿ, den Spaniern das ¿ und so weiter. Damit Computer neben der englischen Sprache auch mit anderen Sprachen zurechtkommen, sind also Erweiterungen der ASCII-Tabelle erforderlich. Eine sehr gängige Erweiterung zeigt die folgende Tabelle: Dez. 1281 129
Zeichen
Dez.
€
1602
1
Zeichen
Dez.
Zeichen
Dez.
Zeichen
192
À
224
à
161
¡
193
Á
225
á
130
,
162
¢
194
Â
226
â
131
ƒ
163
£
195
Ã
227
ã
132
„
164
¤
196
Ä
228
ä
133
…
165
¥
197
Å
229
å
134
†
166
¦
198
Æ
230
æ
135
‡
167
§
199
Ç
231
ç
136
ˆ
168
¨
200
È
232
è
137
‰
169
©
201
É
233
é
138
Š
170
ª
202
Ê
234
ê
139
‹
171
«
203
Ë
235
ë
140
Œ
172
¬
204
Ì
236
ì
205
Í
237
í
1411 142
1733 174
®
206
Î
238
î
1431
175
¯
207
Ï
239
ï
1441
176
°
208
–
240
ð
Ž
145
‘
177
±
209
Ñ
241
ñ
146
’
178
²
210
Ò
242
ò
147
“
179
³
211
Ó
243
ó
148
”
180
´
212
Ô
244
ô
149
폷
181
µ
213
Õ
245
õ
150
–
182
¶
214
Ö
246
ö
151
—
183
·
215
×
247
÷
152
˜
184
¸
216
Ø
248
ø
153
™
185
¹
217
Ù
249
ù
154
š
186
º
218
Ú
250
ú
Tabelle 2
384
Erweiterung der ASCII-Tabelle auf 8 Bit
1451.book Seite 385 Dienstag, 7. Juli 2009 2:18 14
107.3 Lokalisierung und Internationalisierung
Dez.
Zeichen
Dez.
Zeichen
Dez.
Zeichen
Dez.
Zeichen
155
›
187
»
219
Û
251
û
156
œ
188
¼
220
Ü
252
ü
189
½
221
Ý
253
ý
1571 158
ž
190
¾
222
Þ
254
þ
159
Ÿ
191
¿
223
ß
255
ÿ
Tabelle 2
Erweiterung der ASCII-Tabelle auf 8 Bit (Forts.)
1 Die Zeichen 129, 141, 143, 144 und 157 sind bisher nicht definiert. 2 Zeichen 160 ist das Leerzeichen. 3 Zeichen 173 ist der bedingte Trennstrich.
Dieser auf 8 Bit erweiterte Zeichensatz ist nun schon für viele Länder, zumindest bedingt, einsetzbar. Mit einem 8-Bit-Code können Sie 256 verschiedene Zeichen darstellen (denn 28=256). Wenn Sie aber Schriften wie Chinesisch, Japanisch, Russisch, Griechisch oder Hebräisch einbeziehen, können Sie sich leicht vorstellen, dass man wohl noch ein paar zusätzliche Tabellen und/oder eine sehr große Tabelle (und die gibt es auch!) benötigt.
ISO 8859 Bei der ISO 8859 handelt es sich um eine ganze Normenfamilie. Jede Teilnorm der ISO 8859 ist ein 8-Bit-Zeichensatz. Die Gemeinsamkeit all dieser Normen liegt in den ersten 128 Zeichen. Diese sind nämlich identisch mit dem 7-Bit-ASCIICode. In der folgenden Aufstellung werden die Teilnormen aufgeführt: 왘
1 – Latin-1, Westeuropäisch
왘
2 – Latin-2, Mitteleuropäisch
왘
3 – Latin-3, Südeuropäisch
왘
4 – Latin-4, Baltisch
왘
5 – Kyrillisch
왘
6 – Arabisch
왘
7 – Griechisch
왘
8 – Hebräisch
왘
9 – Latin-5, Türkisch
왘
10 – Latin-6, Nordisch
왘
11 – Thai
왘
12 – nicht verwendet, abgelehnte Normvorschläge
왘
13 – Latin-7, Baltisch
왘
14 – Latin-8, Keltisch
385
1451.book Seite 386 Dienstag, 7. Juli 2009 2:18 14
Topic 107: Administrative Aufgaben
왘
15 – Latin-9, Westeuropäisch
왘
16 – Latin-10, Südosteuropäisch
Numerisch würde z.B. der Zeichensatz Latin-1, Westeuropäisch als ISO-8859-1 ausgedrückt werden. Sie finden beide Arten der Bezeichnung in vielen Anwendungsprogrammen – insbesondere in Mail-Clients und Internet-Browsern wieder. Wenn Sie eine Mail empfangen, die in einer anderen Kodierung verfasst wurde, als Ihr Mail-Client es aufgrund seiner Konfiguration erwartet, dann kommt es oft zu Fehldarstellungen. Das wären z.B. fehlende oder falsch interpretierte Umlaute und fehlerhafte Währungszeichen. Die deutschen Umlaute sind übrigens in allen zehn ISO-8859 Zeichensätzen enthalten, die jeweils mit Latin bezeichnet sind. Üblicherweise werden bei Texten, die in deutscher Sprache verfasst sind, allerdings ISO-8859-1 oder ISO-8859-15 verwendet.
Unicode und UTF-8 Unicode ist ein internationaler Standard, der irgendwann einmal alle bekannten Schriftarten enthalten soll, die es gibt. Um eine Kompatibilität zu bestehenden Zeichensätzen zu gewährleisten, entsprechen die ersten 128 Zeichen des Unicode natürlich dem ASCII-Zeichensatz. Die ersten 256 Zeichen enthalten außerdem die ISO-8859-1-Kodierung. UTF-8 ist die am weitesten verbreitete Form von Unicode. Die 8 im Namen des Zeichensatzes weist auf einen 8-Bit-Code hin. Da die ersten 256 Zeichen, wie bereits erwähnt, mit ISO-8859-1-Zeichen gefüllt sind, kann das natürlich noch nicht alles sein. UTF-8-Zeichen können tatsächlich aus bis zu vier Byte bestehen. Die Anzahl der möglichen Zeichen ist dadurch enorm. Wenn Sie Probleme bei der Darstellung internationaler Webseiten oder Mails haben, ist eine Umstellung der Client-Software auf UTF-8 immer ein guter Lösungsansatz. Das gilt insbesondere, weil die Unterstützung von UTF-8 sich weltweit zusehends ausbreitet. Tipp Wenn Sie sich noch nie mit den gängigen Zeichenkodierungen auseinandergesetzt haben, können Sie leicht mit dem Browser etwas experimentieren. Sie finden z.B. beim Firefox-Browser die entsprechenden Einstellungen unter Ansicht und dann Zeichenkodierung. Was passiert bei der Umstellung mit Umlauten und Währungszeichen? Oder besuchen Sie doch einmal eine dieser Webseiten: http://www.ynet.co.il/ http://www.iba.org.il/ Erstere Seite unterstützt UTF-8. Die zweite Seite unterstützt UTF-8 nicht! Sie müssen den Text übrigens von rechts nach links lesen. Sonst ergibt der Inhalt keinen Sinn. Was geschieht, wenn Sie jetzt einfach den Zeichensatz ihres Browsers auf ISO-8859-1 umstellen?
386
1451.book Seite 387 Dienstag, 7. Juli 2009 2:18 14
107.3 Lokalisierung und Internationalisierung
Konvertierung von Zeichensätzen Wenn Sie Dateien von einer Zeichenkodierung in eine andere überführen müssen, können Sie das Kommandozeilenprogramm iconv verwenden. Das Programm liest in der Voreinstellung von der Standardeingabe (stdin) und schreibt zur Standardausgabe (stdout). Sie können u.a. folgende Optionen verwenden: 왘
--from-code, -f gibt die aktuelle Zeichenkodierung an.
왘
--to-code, -t gibt die Zeichenkodierung für die Ausgabe an.
왘
--list, -l zeigt die dem Programm bekannten Kodierungen an. Sie können
allerdings nicht aus jeder Kodierung in jede beliebige andere umwandeln. Sie werden aber überrascht sein, wie viele Zeichensätze das Programm grundsätzlich unterstützt. 왘
--output, -o gibt die Ausgabedatei an.
Ein Beispiel für die Verwendung von iconv könnte etwa so aussehen: # iconv -f UTF-8 -t ISO-8859-15 Quelldatei -o Zieldatei
Prüfungstipp Es gibt auch andere Programme, die Umkodierungen von Zeichensätzen durchführen können. Diese sind aber für die Prüfung nicht von Bedeutung.
387
1451.book Seite 388 Dienstag, 7. Juli 2009 2:18 14
1451.book Seite 389 Dienstag, 7. Juli 2009 2:18 14
Die Dienste eines Systems müssen kontrolliert und gepflegt werden. Um sich die Arbeit so weit wie möglich zu erleichtern, können Sie hier einiges automatisieren. Und zur Vereinfachung der Kontrolle können Sie die Protokollierung auf die eigenen Bedürfnisse zuschneiden.
Topic 108: Grundlegende Systemdienste 108.1 Die Systemzeit verwalten Wichtung: 3 Beschreibung: Kandidaten sollten in der Lage sein, die Systemzeit korrekt zu halten und die Uhr mittels NTP zu synchronisieren. Wichtigste Wissensgebiete: 왘
Systemzeit und -datum setzen
왘
die Hardware-Uhr auf die korrekte Zeit in UTC setzen
왘
die korrekte Zeitzone einstellen
왘
grundlegende NTP-Konfiguration
왘
Wissen über den Gebrauch von pool.ntp.org
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/usr/share/zoneinfo
왘
/etc/timezone
왘
/etc/localtime
왘
/etc/ntp.conf
왘
date
왘
hwclock
왘
ntpd
왘
ntpdate
왘
pool.ntp.org
389
1451.book Seite 390 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
Allgemeines Für viele Abläufe auf einem Computer ist es wichtig, dass die Systemzeit korrekt eingestellt ist. Vergleichsweise harmlos ist hier noch der Umstand, dass bei abweichender Systemzeit Wartungsarbeiten, die durch cron oder anacron ausgeführt werden, möglicherweise zu Zeiten mit Spitzenbelastung laufen und so die Produktionsumgebung negativ beeinflussen. Unangenehm ist dann schon, dass Protokollierungen mit einer falschen Uhrzeit oder gar mit einem falschen Datum versehen werden. Verwirrend kann es auch werden, wenn Mails anscheinend eintreffen, bevor Sie überhaupt geschrieben wurden. All diese Unannehmlichkeiten lassen sich durch eine richtig eingestellte Systemzeit vermeiden. Eine Automatisierung der Zeitkorrektur macht bei Servern, die unbeaufsichtigt in einem Keller ihre Arbeit verrichten, also absolut Sinn.
Manuelle Konfiguration der Systemzeit Die manuelle Konfiguration der Systemzeit erfolgt über das Kommando date. Wenn Sie date ohne Parameter starten, wird einfach das aktuelle Datum und die Uhrzeit ausgegeben. [root@fedora10 ~]# date Di 28. Apr 17:54:52 CEST 2009
Hierbei ist zu beachten, dass es sich tatsächlich um die Systemzeit handelt. Diese ist unter Umständen nicht synchron mit der Hardware-Uhr (RTC bzw. Real-TimeClock). Wenn Sie die Uhrzeit mittels date ändern wollen, dann gehen Sie folgendermaßen vor: archangel:~ # date -s 1755 Di 28. Apr 17:55:00 CEST 2009
Die Uhr wird auf 17.55 Uhr eingestellt. Es ist aber auch möglich, date zu verwenden, um recht elegante Uhrzeitausgaben zu generieren. Das kann etwa in eigenen Skripten verwendet werden. Wenn date auf ein + trifft, wird die darauf folgende Zeichenkette von date ausgegeben und die enthaltenen Variablen entsprechend ergänzt. Das könnte zum Beispiel so aussehen: # date "+Heute ist der %d.%m.%Y. Das ist der %j. Tag des Jahres." Heute ist der 28.04.2009. Das ist der 118. Tag des Jahres.
Das Programm unterstützt zahlreiche weitere Variablen. Diese können Sie sich mit date –help anzeigen lassen.
390
1451.book Seite 391 Dienstag, 7. Juli 2009 2:18 14
108.1 Die Systemzeit verwalten
Die RTC-Uhr einstellen Mit dem Kommando hwclock können Sie die Systemzeit in die Hardware-Uhr schreiben oder umgekehrt. Sie müssen beide Verfahren für die Prüfung kennen. Das sollte aber nicht weiter problematisch sein, weil Sie die benötigten Optionen leicht wiedererkennen können. Folgendes Kommando schreibt die Systemzeit in die Echtzeituhr: archangel:~ # hwclock –-systohc
Umgekehrt holt folgender Befehl die Zeit bei der RTC ab und stellt danach die Systemzeit ein: archangel:~ # hwclock –-hctosys
Interessant ist es auch, zu beobachten, wie die Uhrzeiten zwischen der HardwareUhr und der Systemzeit driften. Die Differenz lässt sich mit hwclock ermitteln, indem Sie folgendes Kommando verwenden: archangel:~ # hwclock --show Di 28 Apr 2009 17:58:13 CEST
–0.020712 Sekunden
Die Genauigkeit, mit der die Abweichung ermittelt wird, ist eine Millionstel Sekunde. Das sollte für die meisten Anwendungsgebiete ausreichen.
Zeitzonen Es gibt grundsätzlich zwei Arten, wie eine Linux-Uhr eingestellt werden kann. Entweder Sie stellen sie der Einfachheit halber auf die Zeit der Zone ein, in der Sie sich befinden, oder Sie verwenden UTC. Heutzutage geben die meisten Administratoren der zweiten Methode den Vorzug, was im Zuge internationaler Kommunikation auch nur vernünftig ist. Das Kürzel UTC leitet sich ursprünglich von Coordinated Universal Time ab. Im Lauf der Jahre ist der Buchstabe C dann aus irgendwelchen Gründen, die heute niemand mehr kennt, an den Schluss gestellt worden. Die UTC löst die MEZ inzwischen auch in Europa weitestgehend ab. UTC+1 entspricht der MEZ. Damit der Computer dem Benutzer die lokale Zeit anzeigt, muss dem System noch mitgeteilt werden, dass die BIOS-Uhr (RTC) auf UTC eingestellt ist. Das kann über folgende Konfigurationsdateien geschehen: 왘
/usr/share/zoneinfo – In diesem Verzeichnis befinden sich Binärdateien, die mit allen existierenden Zeitzonen korrespondieren.
왘
/etc/localtime – Diese Datei ist die mit der aktuellen Zeitzone übereinstimmende Binärdatei aus /usr/share/zoneinfo. Es kann sich hier um eine Kopie oder einen Softlink zur Originaldatei handeln.
391
1451.book Seite 392 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
왘
/etc/timezone ist eine textbasierte Konfigurationsdatei. Sie können die richtige Zeitzone in dieser Datei einfach eintragen.
Um einen Überblick über die verfügbaren Zeitzonen zu bekommen, können Sie tzselect verwenden, wie sie ja bereits aus dem vorangegangenen Kapitel wissen. Dieses nützliche Werkzeug ist in den meisten aktuellen Distributionen enthalten.
Zeitsynchronisation über das Netzwerk Zeitsynchronisation über das Netzwerk heißt in den meisten Fällen natürlich Synchronisation über das Internet. Zu diesem Zweck kommt das Network Time Protocol (NTP) zum Einsatz. Es handelt sich hier um ein relativ altes Protokoll, das schon 1985 in RFC 958 definiert wurde. Wegen der geringen zu übertragenden Datenmengen nutzt NTP das UDP. Der verwendete UDP-Port ist 123. Viele interessante Informationen und aktuelle NTP-Programmpakete erhalten Sie auf http:// www.ntp.org. Hier finden Sie auch Listen mit öffentlichen Servern, von denen Sie synchronisieren können. Interessant ist in diesem Zusammenhang auch ein Projekt, in dem ganze NTP-Pools mittels Round Robin zur Verfügung gestellt werden. Es folgt ein Beispiel mit einem Zugriff auf eben diese Server: root@archangel:~# ntpdate pool.ntp.org 28 Apr 18:03:14 ntpdate[30836]: adjust time server 131.234.137.24 offset –0.000341 sec
Wie Sie sehen, können Sie mit ntpdate einfach durch Angabe eines Zeitservers die Uhrzeit des Systems aktualisieren. Es wird allerdings empfohlen, bei der Synchronisation mehrere Server gleichzeitig zurate zu ziehen, damit die Richtigkeit der übermittelten Uhrzeit gegengeprüft werden kann.
Automatische Zeitsynchronisation Wenn die Systemzeit automatisch synchronisiert werden soll, könnten Sie natürlich einfach ntpdate regelmäßig von cron ausführen lassen. Das ist sogar in einigen Prüfungsfragen so vorgesehen. Komfortabler und genauer funktioniert das allerdings mit dem Daemon ntpd. Die Verwendung von ntpd hat vor allem den Vorteil, dass der Computer dann seinerseits selbst als Zeitserver fungieren kann. Sie können ohne Schwierigkeiten einen Windows XP-Computer von einem Linux-Host synchronisieren. Dazu müssen Sie auf dem Windows XP-Computer lediglich einen Doppelklick mit der seriellen Zeigereinheit (Maus o.Ä.) auf die Uhr ausführen. Auf der Registerkarte Internetzeit können Sie dann den Zeitserver festlegen. Diese Methode funktioniert nicht, wenn der Windows Computer Mitglied einer Domäne ist.
392
1451.book Seite 393 Dienstag, 7. Juli 2009 2:18 14
108.1 Die Systemzeit verwalten
Die Hauptkonfigurationsdatei für den ntpd ist /etc/ntp.conf. Hier findet der Daemon vor allem die Adressen mit den zur Aktualisierung vorgesehenen Servern und einen Verweis auf den Driftfile. Dieser liegt, zumindest offiziell (und somit für die Prüfung), unter /etc/ntp.drift. Der tatsächliche Speicherort hängt von der verwendeten Distribution ab. Die Mindestausstattung der ntp.conf könnte etwa so aussehen: server de.pool.ntp.org server ptbtime1.ptb.de driftfile /var/lib/ntp/drift/ntp.drift
Mit diesen Einträgen ist der Server schon lauffähig. Starten Sie den Server, wie üblich, mit /etc/init.d/ntpd start. Er wird sofort eine erste Synchronisation durchführen. In Abhängigkeit von der verwendeten Distribution wurde ntpd bereits durch xntpd ersetzt. Die Konfigurationsdateien sind jedoch identisch. Die Driftdatei wird von ntpd verwendet, um Ungenauigkeiten der Systemuhr festzuhalten. Die Abweichung von der tatsächlichen Zeit wird auf eine Millionstel Sekunde ermittelt und in die Driftdatei geschrieben.
NTP Diagnose Es gibt mehrere Bordwerkzeuge, um den ntpd oder auch xntpd zu untersuchen. Die beiden wichtigsten sind wohl ntpq und ntpdc. Beide Programme unterstützen einen interaktiven Modus, der nach Eingabe eines Fragezeichens Aufschluss über die Möglichkeiten der beiden Programme liefert. Das Beispiel zeigt eine Abfrage nach sysinfo mit ntpdc im interaktiven Modus: archangel:/ # ntpdc ntpdc> sysinfo system peer: system peer mode: leap indicator: stratum: precision: root distance: root dispersion: reference ID: reference time: system flags: jitter: stability: broadcastdelay: authdelay: ntpdc>
ptbtime1.ptb.de client 00 2 –18 0.02992 s 0.02531 s [192.53.103.108] cab10cf1.fd8090b4 Fri, Oct 5 2007 21:20:17.990 auth monitor ntp kernel stats 0.004898 s 236.358 ppm 0.003998 s 0.000000 s
393
1451.book Seite 394 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
Beide Diagnoseprogramme geben große Informationsmengen aus, weshalb es hier auch bei diesem einen Beispiel bleiben soll. Sehr interessant sind sicherlich noch die Abfragen nach peers und monlist. Probieren Sie diese doch einfach einmal aus.
pool.ntp.org Eine beliebte Quelle zur Synchronisation ist pool.ntp.org. Hierbei handelt es sich um einen sehr großen virtuellen Cluster, der über die ganze Welt verteilt ist. Europa ist hier übrigens mit etwas über 1 000 Nodes vertreten. Die Verteilung an die Clients wird über DNS mittels Round Robin abgewickelt. Das ist auch der Grund, warum Sie in der Datei /etc/ntp.conf mehrere Zeitserver eintragen sollten. Round Robin kümmert sich nämlich bei der Herausgabe einer IP-Adresse nicht darum, ob der Zielserver auch wirklich erreichbar ist. Bei Windows-Clients (egal, ob XP oder Vista) können Sie nur einen Zeitserver eintragen. Hier tragen Sie einfach pool.ntp.org ein und hoffen, per Round Robin immer einen funktionstüchtigen Server anzutreffen. Bei Linux-Clients schreibt man gerne in die /etc/ntp.conf: server 0.pool.ntp.org server 1.pool.ntp.org server 2.pool.ntp.org
So haben Sie trotz Round Robin eine realistische Chance auf einen Treffer. Prüfungstipp Das Thema pool.ntp.org ist in den LPI-Prüfungen neu. Die Wahrscheinlichkeit ist also recht hoch, dass zu diesem Thema Fragen kommen.
108.2 Systemprotokollierung Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, den Syslog-Daemon zu konfigurieren. Dieses Lernziel umfasst auch die Konfiguration des Syslog-Daemons für den Versand von Logmeldungen an einen zentralen Protokollserver oder das Annehmen von Logmeldungen als zentraler Protokollserver. Wichtigste Wissensgebiete: 왘
Syslog-Konfigurationsdateien
왘
syslog
왘
Standard-Facilities, -Prioritäten und -Aktionen
394
1451.book Seite 395 Dienstag, 7. Juli 2009 2:18 14
108.2 Systemprotokollierung
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
syslog.conf
왘
syslogd
왘
klogd
왘
logger
Allgemeines Viele Programme, und natürlich auch Linux selbst, protokollieren zur Laufzeit Ereignisse, die sich in den jeweiligen Programmabläufen ergeben. Diese Protokolle kann sich ein Administrator zunutze machen, um Fehler zu diagnostizieren oder Engpässe frühzeitig zu erkennen. Dazu ist es wichtig, die Speicherorte dieser Protokolldateien zu kennen und gegebenenfalls Anpassungen am Verhalten der für die Protokollierung zuständigen Konfigurationsdateien vornehmen zu können.
syslogd und syslog-ng Damit überhaupt eine Protokollierung von Ereignissen stattfindet, brauchen Sie zunächst einmal ein Programm, das diese Protokollierung durchführt. Auf LinuxSystemen finden Sie momentan zwei verschiedene Produkte, die für das Logging zuständig sind. Das neuere Produkt ist der syslog-ng, den man inzwischen in vielen modernen Distributionen vorfindet. So verwenden Fedora 10 und Debian 4 immer noch den alten syslogd, während SuSE bereits ab Version 9.3 den syslog-ng einsetzt. Solche Kriterien sollten allerdings niemals einen Qualitätsvergleich der Distributionen nach sich ziehen. Die meisten Distributionen haben unterschiedliche Vor- und Nachteile. Letztendlich ist es auch Ansichtssache, ob man auf solide, altbewährte Methoden setzen will oder ob man mit neuen, verbesserten Technologien neue Kinderkrankheiten in Kauf nehmen möchte. Prüfungstipp Für die Prüfung sollten Sie sich unbedingt auf den alten syslog konzentrieren. Fragen zu syslog-ng sind bis dato nicht aufgetaucht und vorläufig nicht zu erwarten. SuSEBenutzer sollten also den alten syslogd nachinstallieren. Das benötigte Paket ist auf der SuSE-CD enthalten (/suse/i586/syslogd-1.4.1-537.i586.rpm).
Die Konfigurationsdateien Zunächst einmal muss festgelegt werden, was protokolliert wird, wohin und von wem. Normalerweise sind die Voreinstellungen brauchbar und müssen nicht sofort modifiziert werden. Da Protokolldateien, wenn sie nicht regelmäßig geprüft
395
1451.book Seite 396 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
werden, sehr stark anwachsen können, muss auch noch ein Mechanismus verwendet werden, der ein Überlaufen der Festplatte verhindert. /etc/syslog.conf Das Protokollierungsverhalten des syslogd wird mit der Datei /etc/syslog.conf gesteuert. Achtung bei der Prüfung: Es gibt keine /etc/syslogd.conf! Das kleine d gibt es nur bei dem entsprechenden Daemon! Der Aufbau dieser Datei ist recht einfach organisiert. Jede Zeile enthält jeweils Felder, die immer folgendermaßen action gegliedert sind: facility.level 왘
왘
facility ist hierbei der Prozess, der den zu protokollierenden Eintrag erstellt. Es kommen folgende Prozesse in Frage: 왘
auth (ehemals security), authpriv, cron, daemon, kern, lpr, mail, mark, news, syslog, user, uucp, local0 bis local7
왘
Ein Stern (engl. asterisk) bezeichnet alle facilities.
왘
Wenn Sie für eigene Programme den Syslog verwenden möchten, dann können Sie hierfür auf die facilities local0 bis local7 zurückgreifen, die für eben diesen Zweck bestimmt sind.
level legt den jeweiligen Protokollierungsgrad fest. Wenn Sie einen Fehler genauer untersuchen wollen, kann es sinnvoll sein, den Protokollierungsgrad recht hoch einzustellen. In einigen Fällen können aber auch die Erfolgsmeldungen einiger facilities das Verzeichnis /var überschwemmen. Für die Prüfung müssen Sie die Reihenfolge der Loglevel kennen: 왘
debug – extremer, in der Regel unnötiger Protokollierungsgrad
왘
info – harmlose Informationen
왘
notice – ungefährlicher Hinweis
왘
warning, warn – normalerweise harmlos, je nach facility
왘
err, error – z.B. Authentifizierungsfehler, I/O Fehler
왘
crit – ein kritischer Fehler sorgt immer für Probleme
왘
alert – ein Alarm weist immer auf schwerwiegende Probleme hin
왘
emerg panic – wird (wenn überhaupt noch) als letzter Eintrag vor dem Systemcrash geschrieben. Das gilt natürlich nicht, wenn ein unwichtiges Programm abstürzt, bei dem die Ansteuerung des Syslog völlig übertrieben wurde.
Die Level error, warn und panic sind veraltet, und es sollten stattdessen jeweils err, warning und emerg verwendet werden.
396
1451.book Seite 397 Dienstag, 7. Juli 2009 2:18 14
108.2 Systemprotokollierung
왘
action ist von der Bezeichnung her irreführend. In diesem Feld wird das Ziel spezifiziert, in die das facility protokollieren soll. Hierbei wird es sich normalerweise um eine Datei handeln. Die Benachrichtigung kann aber auch an einen anderen Computer oder an eine kommagetrennte Liste von Benutzern gesendet werden.
Es folgt ein Auszug aus einer typischen Debian-syslog.conf: auth,authpriv.* cron.* kern.* lpr.* mail.*
/var/log/auth.log /var/log/cron.log -/var/log/kern.log -/var/log/lpr.log -/var/log/mail.log
Wie Sie gleich sehen, verwendet Debian für jedes facility seine eigene Log-Datei. Das ist eher außergewöhnlich, kann aber bei der Fehlersuche angenehm sein, wenn Sie kleinere Logfiles gezielt durchsuchen. Bei den meisten anderen Distributionen können Sie davon ausgehen, dass der Löwenanteil der protokollierten Informationen in der Datei /var/log/messages abgelegt werden. /etc/logrotate.conf Damit die Log-Dateien auf einem unbeobachteten System nicht unkontrolliert anwachsen und das Dateisystem fluten, werden diese mit dem Programm logrotate überwacht. Wie logrotate diese Dateien behandelt, hängt von den Einstellungen in der Konfigurationsdatei /etc/logrotate.conf ab. Normalerweise werden nach Ablauf einer voreingestellten Zeit die im Verzeichnis /var/log befindlichen Dateien komprimiert und dann im leeren Zustand neu erstellt. Es ist heute der Übersichtlichkeit halber üblich, die Konfiguration mit Include-Dateien zu versehen. Deshalb sollten Sie auf Ihrem System auch nach einem Verzeichnis mit der Bezeichnung /etc/logrotate.d Ausschau halten. Logrotate sollte täglich von cron ausgeführt werden. Prüfungstipp Detaillierte Kenntnisse über die Konfiguration der logrotate.conf sind für die Prüfung nicht erforderlich. Sie sollten aber auf jeden Fall wissen, wozu logrotate eingesetzt wird.
Einsatz von Log-Dateien zur Fehlersuche Wenn auf einem Linux-System ein unerklärlicher Fehler auftritt, ist es immer eine gute Idee, das Verzeichnis /var/log zu konsultieren und die mit dem Problem
397
1451.book Seite 398 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
in Zusammenhang stehenden Log-Dateien zu untersuchen. Die einfachste Methode ist wohl die Anzeige einer Log-Datei mit einem Pager: archangel:/ # less /var/log/messages Aug 17 09:07:42 archangel named[6801]: client 172.16.0.2#2509: updating zone '0.16.172.in-addr.arpa/IN': adding an RR at '2.0.16.172.in-addr.arpa' PTR Aug 17 09:45:39 archangel sshd[31158]: Accepted password for root from ::ffff:192.168.0.10 port 4345 Aug 17 10:00:32 archangel syslog-ng[6389]: STATS: dropped 0 Aug 17 11:00:33 archangel syslog-ng[6389]: STATS: dropped 0
Scheinbar ist nichts Aufregendes passiert. Der DNS-Server hat einen ReverseLookup-Eintrag aktualisiert, und der root hat sich via ssh eingeloggt. Danach geschah zwei Stunden lang nichts! Eine völlig andere Methode, sich Log-Dateien zunutze zu machen, ist das Kommando tail. Standardmäßig gibt tail die letzten zehn Zeilen einer Textdatei auf dem Bildschirm aus. Wenn Sie aber die Option –f übergeben, wird das Anzeigen der betreffenden Log-Datei fortgesetzt. Das bedeutet, dass der Computer keinen Eingabe-Prompt anzeigt, sondern die Datei samt Änderungen im laufenden Betrieb anzeigt und aktualisiert. Das ist besonders nützlich, wenn Sie beabsichtigen, einen Fehler zu provozieren und dessen Auswirkungen gleichzeitig auf einem anderen Terminal zu beobachten. Die vollständige Kommandozeile wäre dann also folgende: archangel:~ # tail /var/log/messages -f
Wenn Sie nach der Ausgabe eines bestimmten Programms in einer umfangreichen Protokolldatei oder nach einem bestimmten Ereignistyp suchen, empfiehlt es sich, die Anzeige der Log-Datei mit grep zu filtern. Bei umfangreicheren Ergebnissen kann die Ausgabe natürlich nach less umgeleitet werden. archangel:~ # grep sshd /var/log/messages | grep invalid | less
In diesem Beispiel sucht grep zunächst alle Einträge, die der sshd protokolliert hat. Die anschließende Filterung nach invalid sucht fehlgeschlagene Anmeldeereignisse. Zum Schluss wird die Ausgabe an less übergeben und auf dem Bildschirm dargestellt: Sep 17 13:04:47 archangel sshd[310]: Failed none for invalid user rooot from ::ffff:87.187.104.63 port 64960 ssh2 Sep 25 16:58:55 archangel sshd[1774]: Failed none for invalid user martin from ::ffff:192.168.0.53 port 55380 ssh2
398
1451.book Seite 399 Dienstag, 7. Juli 2009 2:18 14
108.2 Systemprotokollierung
Offensichtlich ist beim ersten Eintrag der Username root falsch geschrieben worden. Der zweite Eintrag ist ein Anmeldeversuch von einem Benutzer, den es auf diesem System gar nicht gibt.
Selbst Ereignisse loggen Eine einfache Methode, ein Ereignis selbst zu generieren, bietet das Programm logger. Dieses Tool kann natürlich auch in eigenen Skripten eingesetzt werden. Wenn z.B. ein selbst geschriebenes Skript verwendet wird, dass eigenständig eine Datensicherung durchführt, wäre am Ende des Skripts folgende Zeile denkbar: logger -t Backup "Datensicherung ausgeführt"
Zu Testzwecken können Sie den Befehl natürlich auch einfach auf der Kommandozeile eingeben. Ein Blick in den Syslog zeigt das Ergebnis: archangel:~ # tail –1 /var/log/messages Sep 25 17:20:42 archangel Backup: Datensicherung ausgeführt
So haben Sie also in Zukunft jederzeit die Möglichkeit, zu überprüfen, wann dieses Skript ausgeführt wurde.
Der Kernellog Der Daemon mit dem Namen klogd fängt Meldungen des Kernels ab und protokolliert diese. Normalerweise wird er vom init-Prozess gestartet und läuft sinnvollerweise in jedem Runlevel, den ein System nutzt. Die Ausgabe erfolgt in der Regel auf dem Syslog. Man kann (am besten im zugehörigen init-Skript) einige Optionen an den klogd übergeben. Einige wichtige Optionen sind: 왘
-c n setzt den Loglevel für Konsolenmeldungen auf n
왘
-d aktiviert den Debugging Modus
왘
-f datei ändert die Ausgabe vom Syslog auf die angegebene datei
Als Eingabedatei verwendet klogd /proc/kmsg. Auch das lässt sich mit einem Schalter (nämlich –p path) ändern. Dazu gibt es allerdings normalerweise keine Veranlassung.
399
1451.book Seite 400 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
108.3 Grundlagen von Mail Transfer Agents (MTAs) Wichtung: 3 Beschreibung: Kandidaten sollten wissen, welche gebräuchlichen MTA-Programme existieren und einfache Weiterleitungs- und Alias-Konfigurationen auf einem Client-Rechner einstellen können. Weitere Konfigurationsdateien werden nicht abgedeckt. Wichtigste Wissensgebiete: 왘
Mail-Aliase anlegen
왘
Mail-Weiterleitung konfigurieren
왘
Wissen von allgemein verfügbaren MTA-Programmen (postfix, sendmail, qmail, exim) (keine Konfiguration)
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
~/.forward
왘
Kommandos in der Sendmail-Emulationsschicht
왘
newaliases
왘
mail
왘
mailq
왘
postfix
왘
sendmail
왘
exim
왘
qmail
Allgemeines Prüfungstipp Für die anstehende Prüfung müssen Sie mit den Grundfertigkeiten der Konfiguration eines Mail Transfer Agenten vertraut sein. Komplexere Administrationsaufgaben erwarten Sie allerdings erst in der LPI-Prüfung 117–201.
MUA, MDA und MTA Die Verarbeitung von Mail-Nachrichten auf einem SMTP-Server wird von drei Softwarekomponenten durchgeführt.
400
1451.book Seite 401 Dienstag, 7. Juli 2009 2:18 14
108.3 Grundlagen von Mail Transfer Agents (MTAs)
왘
MUA – Der Mail User Agent ist nichts anderes als ein Mail-Client-Programm, mit dem Mails geschrieben und gelesen werden. (z.B. kmail, Evolution, Outlook)
왘
MDA – Der Mail Delivery Agent nimmt Mails entgegen. Er entscheidet, wie mit den Mails weiter zu verfahren ist. Handelt es sich um lokale Mail-Adressen, stellt er die Mail im entsprechenden Mail-Verzeichnis zu. Ansonsten übergibt er die Nachricht an den MTA, der dann für die Weiterleitung sorgt. (z.B. procmail, maildrop, cyrus)
왘
MTA – Der Mail Transfer Agent ist hauptsächlich für die Zustellung einer Nachricht an den richtigen Zielserver verantwortlich. Auf dem Zielserver übernimmt dann wieder der MDA die Nachrichten und verteilt sie in die richtigen Mail-Verzeichnisse. (z.B. sendmail, postfix, qmail, exim)
Für die endgültige Auslieferung einer Mail-Nachricht an ein Client-Programm sind diese drei Agenten allerdings nicht zuständig. Dafür benötigen Sie noch einen Serverdienst wie IMAP oder POP. Das Starten und Stoppen eines Mail Transfer Agents funktioniert genau so, wie bei den meisten anderen Netzwerkdiensten auch, wenn diese nicht gerade von inetd oder xinetd gesteuert werden. Das bedeutet zum Beispiel für postfix: root@ubuntu-server:/# /etc/init.d/postfix start * Starting Postfix Mail Transport Agent postfix
[ OK ]
Mail – Aliase Die Datei /etc/aliases In der Datei /etc/aliases können Sie Mail-Nachrichten umleiten. Hierbei sind vier verschiedene Verfahren möglich. Das gängigste ist dieses: willi: root:
wilhelm wilhelm
Mit dem ersten Eintrag werden Mails, die an »willi« adressiert sind, dem real existierenden Benutzerkonto »wilhelm« zugeordnet. Da Wilhelm ein Systemverwalter ist, der sich äußerst selten als root anmeldet, werden Mails, die an den root adressiert sind, ebenfalls Wilhelms Benutzerkonto zugewiesen. Eine andere Methode ist die Zuweisung eines Alias zu einer Datei. So könnte man Tätigkeitsberichte, automatisch mit Datum und Uhrzeit versehen, per Mail-Programm schreiben: taetigkeiten:
"/home/harald/taetigkeitsbericht"
401
1451.book Seite 402 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
Die Berichte müssen dann einfach an das Konto taetigkeiten gesendet werden, und die Aufzeichnung geschieht automatisch in der angegebenen Datei. Für dieses Konto muss ebenfalls kein reales Benutzerkonto auf dem Server existieren. freunde:
:include:/home/harald/meinefreunde
Der voranstehende Eintrag macht tatsächlich das, wonach er aussieht: Wenn eine Mail an Freunde gesendet wird, wird diese Nachricht an alle Mail-Adressen versendet, die in der Textdatei /home/harald/meinefreunde zeilensepariert aufgeführt sind. Die letzte, nicht selten genutzte Möglichkeit ist die Übergabe einer Nachricht an ein Programm. Mit dieser Methode arbeitet etwa das Mailinglistenprogramm Majordomo: majordomo:
"|/usr/lib/majordomo/wrapper majordomo"
Der Unterschied zur Umleitung in eine Datei ist das führende Pipe-Zeichen. newaliases Nach dem Anlegen eines neuen Alias in der Datei /etc/aliases müssen Sie den Befehl newaliases eingeben, damit Sendmail den neuen Alias auch verwendet. Alternativ können Sie auch sendmail -bi ausführen. Selbst die Antwort der beiden Kommandos ist identisch: [root@fedora10 home]# sendmail -bi /etc/aliases: 77 aliases, longest 10 bytes, 777 bytes total
Weiterleitung von Mail Ein Benutzer kann für sich selbst eine Mail-Weiterleitung einrichten. Das wird oft mit einem Nachsendeauftrag bei der Post verglichen. Ein gern genannter Verwendungszweck ist die Weiterleitung geschäftlicher Mails an eine Urlaubsvertretung. Dazu muss der Benutzer nichts weiter tun, als eine Datei mit dem Namen .forward (der Punkt muss sein) in seinem Heimatverzeichnis zu erstellen, welche die Weiterleitungsadresse in einer einzelnen Zeile enthält. Die Weiterleitung greift sofort. Es muss nichts weiter unternommen werden.
Wichtige Dateien und Verzeichnisse Prüfungstipp Für die Prüfung müssen Sie die Verzeichnisse, die von den gängigen MTAs (hauptsächlich postfix und sendmail) verwendet werden, kennen.
402
1451.book Seite 403 Dienstag, 7. Juli 2009 2:18 14
108.3 Grundlagen von Mail Transfer Agents (MTAs)
왘
/var/spool/mail – In diesem Verzeichnis liegen Dateien mit den Namen der Benutzerkonten, die auf diesem System Mails empfangen. Der MDA liefert hier Nachrichten für die lokalen Benutzer aus.
왘
/var/spool/mqueue – Das ist die Mail-Queue oder auch Warteschlange. Hier holt der MDA Nachrichten ab und entscheidet dann, ob sie lokal ausgeliefert werden oder an den MTA zur weiteren Verarbeitung übergeben werden müssen.
왘
/var/spool/postfix – Hier liegt die Datenverzeichnisstruktur von Postfix.
왘
/var/mail ist ein typischer Link auf /var/spool/mail.
왘
/etc/postfix beherbergt die Konfigurationsdateien von postfix.
왘
/etc/mail enthält die meisten Konfigurationsdateien für sendmail.
Um den Inhalt einer Mail-Queue im laufenden Betrieb sehen zu können, verwenden Sie das Programm mailq ohne Parameter: archangel:/var/spool/mqueue # mailq /var/spool/mqueue (2 requests) --Q-ID---- --Size-- --Q-Time---- ----Sender/Recipientl9HH2A016576* 816 Wed Oct 17 19:02 <[email protected]> l929jC016576* 931 Wed Oct 17 19:02 <[email protected]> Total requests: 2
In der Regel ist hier aber nichts zu sehen, weil bei einem normal frequentierten Server die Verarbeitung der Mails sehr schnell geschieht.
sendmail-Konfigurationsdateien Die Hauptkonfigurationsdatei von Sendmail ist die Datei sendmail.cf. Weitere Konfigurationsdateien befinden sich normalerweise in /etc/mail. Die Datei sendmail.cf selbst finden Sie z.B. bei SuSE direkt unter /etc, während sie bei Fedora 10 unter /etc/mail residiert. Das ist schon ein erster Hinweis darauf, dass die Konfiguration von Sendmail stark variiert. Die Datei sendmail.cf könnte man durchaus als kompliziertes Konstrukt bezeichnen. Deshalb wird sie auch normalerweise nicht von Hand erstellt. Stattdessen schreibt man M4-Makros, die dann durch einen M4-Präprozessor verarbeitet werden. Die LPI-Prüfungen sind aber weit davon entfernt, sich mit dieser Thematik auseinanderzusetzen.
403
1451.book Seite 404 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
postfix-Konfigurationsdateien Der MTA postfix wird mit Konfigurationsdateien konfiguriert, die sich im Verzeichnis /etc/postfix befinden. Die Datei main.cf ist die globale Konfigurationsdatei für postfix. Hier werden wichtige Grundeinstellungen festgelegt. Um eventuelle Pfadangaben zu irgendwelchen Arbeitsverzeichnissen müssen Sie sich normalerweise nicht kümmern, weil diese distributionsspezifisch schon immer richtig eingestellt sind. Es sollte aber natürlich festgelegt werden, unter welchem Namen der Computer aus der Sicht des Internets angesprochen wird, und für welche Domänen er verantwortlich ist: myhostname = echtername.meinedomain.com myhostname = virtuellername.meinedomain.com mydomain = meinedomain.com
Wie in dieser Datei die Smarthost-Einstellungen u. Ä. konfiguriert werden, erfahren Sie auf der nächsten Seite. Eine weitere Konfigurationsdatei, die postfix verwendet, heißt master.cf. Hierbei handelt es sich um die Konfiguration für die postfix-internen Prozesse. In dieser Datei müssen in den seltensten Fällen Änderungen vorgenommen werden.
Smarthost und SMTP-Relay Ein Smarthost ist ein Mailserver, der als SMTP-Relay fungiert. Normalerweise werden Sie Ihre zu versendenden Mails nicht direkt zustellen, sondern durch den SMTP-Server Ihres Internet Service Providers ausliefern lassen. Anderenfalls würden viele Mailserver Ihre Mail nicht entgegennehmen, weil Ihr SMTP-Server im Internet nicht bekannt ist. Daraus schließen diese Zielserver, dass Ihr Server ein mögliches Relay für Spam ist und verwerfen Ihre Mail. Smarthost mit sendmail Wenn Sie einen externen Smarthost für sendmail angeben wollen, ist das eine der wenigen Situationen, in denen Sie die sendmail.cf bearbeiten müssen. Suchen Sie nach einem DS am Zeilenanfang (möglicherweise auskommentiert), und schreiben Sie dahinter lückenlos den FQDN des Relayservers. # "Smart" relay host (may be null) DSmailrelay.myisp.org.
So sieht der Eintrag also aus, wenn der Server mailrelay.myisp.org heißt. Soll Ihr Server selbst als SMTP-Relay fungieren, dann müssen Sie die Dateien /etc/ mail/access und /etc/mail/relay-domains modifizieren und anschließend in eben
404
1451.book Seite 405 Dienstag, 7. Juli 2009 2:18 14
108.4 Drucker und Druckvorgänge verwalten
diesem Verzeichnis einmal das Kommando make ausführen, um die korrespondierenden db-Files zu generieren. Smarthost mit postfix Sollten Sie postfix als MTA verwenden, dann muss der Smarthost entsprechend in der Datei /etc/postfix/main.cf eingetragen werden. Dieser Eintrag sieht aus wie folgt: relayhost = mail.myisp.org
Um postfix selbst als Relay einzusetzen, gibt es verschiedene Möglichkeiten. Eine sehr einfache (wenn auch umstrittene) Methode ist es, einfach mit der Angabe der eigenen Netzwerke für bestimmte Subnetze Relaying zuzulassen: mynetworks = 127.0.0.0/8 192.168.50.0/24 172.16.0.0/28
Das setzt natürlich voraus, dass die Mitarbeiter, die sich in diesen Subnetzsegmenten aufhalten, vertrauenswürdig sind und nicht auf die Idee kommen, die Absender ihrer Mails zu fälschen. Wesentlich sicherer ist es natürlich, eine Authentifizierung des Benutzers zu verlangen. Als Mechanismus kommt hier am ehesten SASL (Simple Authentication and Security Layer) infrage. Sollte ein authentifizierter Benutzer eine Mail mit gefälschtem Absender verschicken, ist dieser Vorgang zumindest in den Protokollen (/var/log/mail) nachvollziehbar.
exim und qmail Weniger bekannt sind die MTAs exim und qmail. Exim ist weitgehend ähnlich zu konfigurieren wie sendmail, die Konfiguration ist aber etwas einfacher. Debian verwendet exim sogar als Standard-MTA. Der MTA qmail wurde hauptsächlich entwickelt, um die Sicherheit gegenüber sendmail zu erhöhen. Auch qmail ist erheblich leichter zu konfigurieren als sendmail.
108.4 Drucker und Druckvorgänge verwalten Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, Druckerwarteschlangen und Druckaufträge von Benutzern mit CUPS und der LPD-Kompatibilitätsschnittstelle zu verwalten.
405
1451.book Seite 406 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
Wichtigste Wissensgebiete: 왘
grundlegende CUPS-Konfiguration (für lokale und entfernte Drucker)
왘
Benutzer-Druckerwarteschlangen verwalten
왘
allgemeine Druckprobleme lösen
왘
Druckaufträge zu eingerichteten Druckerwarteschlangen hinzufügen und daraus löschen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
CUPS-Konfigurationsdateien, -Werkzeuge und -Hilfsprogramme
왘
/etc/cups
왘
LPD-Kompatibilitätsschnittstelle (lpr, lprm, lpq)
Allgemeines Drucken funktioniert unter Linux praktisch genauso wie unter Unix. Das ist auch nicht weiter verwunderlich, weil die beiden Drucksysteme, die unter Linux verwendet werden, Portierungen aus der Unix-Welt sind. Die ältere der beiden Varianten ist an BSD-Unix angelehnt, das in Kalifornien an der Universität in Berkeley entwickelt wurde (BSD steht für Berkeley Software Distribution). Das BSDDrucksystem wurde allerdings später für Linux komplett neu geschrieben, weil es eine Sicherheitslücke aufwies, die man unter Linux nicht akzeptieren wollte. Dieses neu entwickelte System finden Sie heute unter der Bezeichnung LPRng in praktisch allen Linux-Distributionen wieder. Das zweite große Drucksystem unter Linux heißt CUPS (Common Unix Printing Solution oder auch Common Unix Printing System). CUPS wurde ursprünglich entwickelt, um das Internet Printing Protocol (IPP) zu unterstützen, löste aber auf vielen Systemen BSD und LPRng ab. Auch wenn CUPS intern völlig anders arbeitet und zudem ein webbasiertes Konfigurationsfrontend anbietet, so ist bei seiner Entwicklung an Abwärtskompatibilität gedacht worden. CUPS unterstützt nicht nur die Kommandos von BSD bzw. LPRng, sondern zusätzlich auch die von System V, einer verbreiteten Unix-Version.
Verwalten der Druckerwarteschlangen Ein Druckauftrag durchläuft bei den meisten Betriebssystemen, bevor er ausgedruckt wird, eine sogenannte Warteschlange. In diesem Zusammenhang wird auch häufig der Begriff Queue verwendet. Das Wort Queue kommt ursprünglich aus der französischen Sprache und bedeutet Schlange. Billard wird also, wenn man es auf gut Deutsch ausdrücken will, nicht mit einem Stock, sondern mit einer
406
1451.book Seite 407 Dienstag, 7. Juli 2009 2:18 14
108.4 Drucker und Druckvorgänge verwalten
(offensichtlich erstarrten) Schlange gespielt. Einen weiteren gängigen Fachbegriff, nämlich Spooler, kann man beinahe phonetisch aus dem Englischen mit Spule übersetzen. Druckaufträge reihen sich also in eine Schlange ein oder werden aufgespult. Die zu druckenden Aufträge werden unter Linux zunächst von einem Druck-ClientProgramm (z.B. lpr) in die entsprechende Warteschlange gestellt. Um das genaue Verzeichnis zu ermitteln, in das der Druckauftrag hingespoolt werden muss, wird die Konfigurationsdatei /etc/printcap ausgewertet. Normalerweise befinden sich die Warteschlangen unterhalb von /var/spool. Ein Druckauftrag besteht immer aus zwei Dateien, nämlich einem Control-File mit der Dateierweiterung cf und einem in der Regel erheblich größeren Data-File mit der Extension df. Der SpoolVorgang ist nun abgeschlossen, und die beiden Dateien bleiben jetzt so lange liegen, bis sie jemand bearbeitet. Diese Aufgabe übernimmt der Line Printer Daemon (lpd) nun, vorausgesetzt, er wurde gestartet. lpd prüft zyklisch das Vorhandensein von Dateien in allen Druckerwarteschlangen. Wird er fündig, so übergibt er die momentan noch in einem sehr rohen, RAW genannten Format vorliegenden, Daten an einen Druckfilter. Dieser wandelt dann die Daten in Abhängigkeit vom verwendeten Druckermodell in einen geeigneten Datenstrom und sendet diesen an den Drucker. Wenn der Auftrag ausgedruckt wurde, werden die Kontroll- und die Datendatei aus der Warteschlange gelöscht. Die Verarbeitung der Dateien ist bei der Verwendung von CUPS geringfügig anders. So sind z.B. die Konventionen für die Benennung der Dateien innerhalb einer Warteschlange different, aber das Druckprinzip ist weitestgehend gleich. Den Line Printer Daemon startet man mit dem Befehl: /etc/init.d/lpd start
oder alternativ CUPS mit: /etc/init.d/cups start
Man beachte die Besonderheit, dass der Daemon CUPS nicht, wie die meisten anderen, auf d endet! Nach Änderungen an den Konfigurationsdateien, insbesondere /etc/printcap, muss der jeweilige Druckdaemon neu gestartet werden.
Befehle zur Kontrolle von Druckvorgängen 왘
lp und lpr senden Druckaufträge an einen angegebenen Drucker. Das Kommando lp entstammt dem System V und versteht andere Optionen als lpr.
407
1451.book Seite 408 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
Machen Sie sich für die LPI-Prüfung mit den Optionen von lpr vertraut. Mit –P wird die zu verwendende Warteschlange angegeben. archangel:~ # lpr -Plaserjet1300 /etc/printcap
druckt die Datei /etc/printcap auf dem Printer laserjet1300 aus. 왘
lpq zeigt den Inhalt von Warteschlangen an. Es kann auch hier mit der Option –P eine bestimmte Warteschlange angegeben werden: archangel:~ # lpq -Plaserjet1300 laserjet1300 is ready and printing Rank Owner Job File(s) active root 450 printcap 1st michaela 451 haushaltplan 2nd michaela 452 haushaltplan 3rd dominik 453 kinderprogramm.html
왘
Total Size 1024 bytes 9216 bytes 9216 bytes 1024 bytes
lprm löscht Aufträge aus der Warteschlange. Bereits im Druck befindliche Aufträge können nicht mehr entfernt werden. archangel:~ # lprm -Plaserjet1300 451
entfernt den versehentlich doppelt abgesendeten Druckauftrag aus dem Beispiel für lpq. Ein Benutzer ohne administrative Rechte kann ohne Weiteres selbst alle eigenen Aufträge löschen, indem er einfach den Befehl lprm – eingibt. Wenn derselbe Befehl aber vom Benutzer root ausgeführt wird, dann werden sämtliche Druckaufträge aller Benutzer aus der Warteschlange entfernt.
lpc – Line Printer Control lpc ist ein Programm, das man als gewöhnlichen Konsolenbefehl oder interaktiv verwenden kann. Es bietet umfangreiche Funktionen, weshalb ihm auch ein eigener Abschnitt zusteht. Der interaktive Modus bietet einen Eingabe-Prompt und macht vor allem dann Sinn, wenn Sie beabsichtigen, dem Druckdaemon mehrere Befehle hintereinander zu geben. Wenn lpc mit CUPS verwendet wird, sind nur einige wenige Befehle innerhalb von lpc verfügbar. Genau genommen ist dann lediglich eine Statusabfrage möglich. lpc> status laserjet1300: printer is on device 'parallel' speed –1 queuing is enabled printing is enabled 4 entries daemon present
408
1451.book Seite 409 Dienstag, 7. Juli 2009 2:18 14
108.4 Drucker und Druckvorgänge verwalten
Unter BSD bzw. LPRng sind deutlich mehr Optionen verfügbar, wobei die Befehlsstruktur, bis auf die Ausnahmen topq und status, immer die gleiche ist. In den Beispielen wird immer davon ausgegangen, dass lpc im interaktiven Modus gestartet wurde. lpc> up laserjet1300
startet und aktiviert den Laserjet 1300, während lpc> up all
alle Drucker gleichzeitig startet und aktiviert. Also werden immer lpc, gefolgt vom lpc-Kommando (up) und von dem anzusteuernden Drucker (Laserjet1300 bzw. all) angegeben. Die lpc-Kommandos sind im Einzelnen: 왘
start startet den Druckprozess als solchen, sodass jetzt Aufträge aus der War-
teschlange abgearbeitet und ausgedruckt werden können. 왘
stop beendet den Druckprozess. Ein laufender Auftrag wird noch bis zum
Ende abgearbeitet. Die Druckerwarteschlange nimmt aber weiterhin Aufträge entgegen. 왘
enable aktiviert die Druckerwarteschlange.
왘
disable deaktiviert die Druckerwarteschlange. Bereits in der Warteschlange
befindliche Aufträge werden noch fertig abgearbeitet. Neue Jobs werden jedoch abgelehnt. 왘
up kombiniert die Kommandos enable und start.
왘
down kombiniert die Kommandos disable und stop.
왘
abort beendet den Druckprozess sofort. Auch ein bereits in Arbeit befindli-
cher Druckauftrag wird sofort abgebrochen. Sollte der Drucker seine Tätigkeit nicht sofort einstellen, ist dies auf Restdaten im Druckerspeicher zurückzuführen. 왘
topq stellt einen bereits gespoolten Druckauftrag an die erste Position in der
Warteschlange. Hier sieht die Befehlssyntax etwas anders aus als bei den anderen Kommandos: lpc> topq Laserjet1300 453 verschiebt den Druckjob mit der Nummer 453
an die erste Position der Druckerwarteschlange. Ein bereits in Arbeit befindlicher Druckauftrag wird hierdurch nicht abgebrochen. 왘
quit beendet letztendlich den interaktiven Modus des lpc und kehrt zur nor-
malen Shell zurück.
409
1451.book Seite 410 Dienstag, 7. Juli 2009 2:18 14
Topic 108: Grundlegende Systemdienste
Drucken mit CUPS CUPS ist ein Drucksystem, das von Anfang an auf das Drucken im Netzwerk ausgelegt wurde. Deshalb modifiziert CUPS auch gleich nach seiner Installation die altbekannte /etc/printcap, in der er sich selbst als Netzwerkdrucker deklariert: # This file was automatically generated by cupsd(8) from the # /etc/cups/printers.conf file. All changes to this file # will be lost. laserjet1300|laserjet1300:rm=archangel:rp=laserjet1300:
Abgesehen vom Namen des Druckers und seinem Alias, findet man hier also noch einen remote printer an einer remote machine und das, obwohl der Drucker lokal angeschlossen ist. Die Konfigurationsdateien für CUPS befinden sich alle unterhalb von /etc/cups. Aber selbst diese müssen Sie nur selten modifizieren, weil die komplette Konfiguration über Frontends durchgeführt werden kann. Am einfachsten ist die Konfiguration mit einem Webbrowser. CUPS horcht am TCP-Port 631 und kann somit über http://localhost:631 angesprochen werden. Auf diesem Weg können nicht nur Wartungsaufgaben, wie das Löschen von Druckaufträgen u.Ä., durchgeführt, sondern dem System auch neue Drucker hinzugefügt werden. Der TCP-Port für die Konfiguration lässt sich übrigens in der Datei /etc/cups/ cupsd.conf ändern. CUPS kennt von sich aus sehr viele verschiedene Drucker und bringt die nötigen Filter alle mit. Die normalen Befehle zur Verwaltung von Warteschlangen, wie lpr, lprm, lpq und lpc, stehen genauso zur Verfügung wie unter BSD. Einzig der lpc ist in seiner Funktionsweise stark eingeschränkt. Zur konsolenbasierten Konfiguration dient das Tool lpadmin, was Sie sich auch unbedingt für die Prüfung merken sollten. In der Praxis werden Sie nach kurzer Eingewöhnungszeit auf die angenehme HTML-Oberfläche von CUPS nicht mehr verzichten wollen.
410
1451.book Seite 411 Dienstag, 7. Juli 2009 2:18 14
TCP/IP ist das Netzwerkprotokoll, das sich im Laufe der Jahrzehnte weltweit, sowohl im Internet, als auch in Intranets, absolut durchgesetzt hat. Grund genug, hier ein paar Worte darüber zu verlieren.
Topic 109: Netz-Grundlagen 109.1 Grundlagen von Internet-Protokollen Wichtung: 4 Beschreibung: Kandidaten sollten ein angemessenes Verständnis der Grundlagen von TCP/IP-Netzen demonstrieren. Wichtigste Wissensgebiete: 왘
Verständnis von Netzmasken demonstrieren
왘
Wissen über die Unterschiede zwischen privaten und öffentlichen »dotted quads« IP-Adressen
왘
eine Default-Route einstellen
왘
Wissen über gängige TCP- und UDP-Ports (20, 21, 22, 23, 25, 53, 80, 110, 119, 139, 143, 161, 443, 465, 993, 995)
왘
Wissen über die Unterschiede und wesentlichen Eigenschaften von UDP, TCP und ICMP
왘
Wissen über die wesentlichen Unterschiede zwischen IPv4 und IPV6
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/services
왘
ftp
왘
telnet
왘
host
왘
ping
왘
dig
왘
traceroute
왘
tracepath
411
1451.book Seite 412 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
Allgemeines Da es sich bei Linux um ein ausgesprochenes Netzwerkbetriebssystem handelt, müssen Sie darauf vorbereitet sein, Fragen zum Thema Netzwerk, insbesondere TCP/IP, beantworten zu können. Auch Fragen, die sich auf historische Hintergründe beziehen, kommen vor, weshalb diese hier auch näher betrachtet werden. Sie müssen natürlich nicht auswendig wissen, dass TCP/IP etwa Ende 1974 entwickelt wurde, aber Sie dürfen auch nicht denken, das Protokoll wäre von Bill Gates persönlich erfunden worden.
TCP/IP Geschichte kurz gefasst Schon dem Namen dieses Protokolls (oder dieser Protokollfamilie) können Sie entnehmen, wo es seine Wurzeln hat: IP – das Internetprotokoll. Allerdings ist es eigentlich eher so, dass sich der Name des Internets von diesem Protokoll ableitet und nicht umgekehrt. Das Internet ist der direkte Nachfolger des alten ARPANET. Man kann heute noch in den Konfigurationsdateien und auch Zonendaten eines DNS-Servers sehen, wo dieser seine Ursprünge hat. Das dokumentiert der folgende Ausschnitt einer /etc/named.conf Datei: zone "0.0.127.in-addr.arpa" in { type master; file "127.0.0.zone"; };
Sie sehen, dass selbst bei der Deklaration der Reverse-Lookup-Zone für das Loopback-Netzwerk eine Syntax aus ARPANET-Zeiten verwendet wird. Aber woher kommt nun eigentlich das ARPANET? Am 04. Oktober 1957 sendete der russische Satellit Sputnik 1 seine ersten Funksignale zur Erde. Als Reaktion darauf wurde vom amerikanischen Verteidigungsministerium DoD (Departement Of Defence) die Organisation ARPA (Advanced Research Projects Agency) ins Leben gerufen, um neue, für das Militär nutzbare Technologien zu entwickeln. Die ARPA entwickelte diese Technologien jedoch nicht selbst, sondern delegierte diese Forschungsarbeiten an verschiedene Universitäten innerhalb der USA. Gegen Ende 1969 wurde von vier Universitäten das erste Netzwerk mit vier Knoten in Betrieb genommen. Dieses frühe ARPANET verband folgende Forschungsorganisationen: 왘
University of California Los Angeles (UCLA)
왘
University of California Santa Barbara (UCSB)
왘
Stanford Research Institute (SRI)
왘
University of Utah
412
1451.book Seite 413 Dienstag, 7. Juli 2009 2:18 14
109.1 Grundlagen von Internet-Protokollen
Das ARPANET wuchs schnell heran, und schon bald konnten die alten Protokolle die Netzlast nicht mehr verwalten. Ein neues Protokoll wurde erforderlich, und gegen Ende 1974 wurde TCP/IP entwickelt. Die weitere Entwicklung und Integration von TCP/IP in UNIX-Systeme wurde u.a. durch die University of California in Berkeley betrieben. Hier wurde auch BIND entwickelt – der Berkeley Internet Name Daemon.
Das DoD Modell Das DoD-Modell wurde nach dem amerikanischen Departement of Defence benannt und dient der modellhaften Beschreibung des TCP/IP-Protokollstapels. Das ebenfalls bekannte OSI-Referenzmodell wurde erheblich später entwickelt und ermöglicht aufgrund seiner höheren Komplexität die modellhafte Umsetzung fast aller bekannten Netzwerkprotokolle. Zum Verständnis von TCP/IP ist das DoDModell normalerweise ausreichend. Während das OSI-Modell in sieben Schichten aufgeteilt ist, kommt das DoD-Modell mit vier Schichten aus. Diese wären von oben nach unten: 왘
Anwendungsschicht (Application Layer) – In dieser Schicht liegen die Netzwerkanwendungen. Beispiele: HTTP, FTP, SMTP, DNS, Telnet usw.
왘
Host zu Host (Host to Host) – Hier befinden sich TCP, UDP. Diese Schicht wird heutzutage als Transportlayer bezeichnet.
왘
Internetschicht (Internetlayer) – In dieser Schicht befindet sich IPv4, IPv6, RIP, OSPF, ARP, IGMP, ICMP
왘
Netzwerk-Zugriff (Network Access) beinhaltet u.a. die Protokolle Ethernet, HDLC, pppoe, Token Ring und FDDI. Die Protokolle dieser Schicht sind für Ihre Prüfung nicht von Belang und sollen deshalb auch hier nicht weiter behandelt werden. Die modernere Bezeichnung für diese Schicht lautet LinkLayer.
Sie werden feststellen, dass die Positionierung der Protokolle sich von Modell zu Modell leicht unterscheidet. Das ist aber nicht besorgniserregend, weil es sich ja nur um ein Modell handelt. Es ist wie mit allen Modellen: Man kann damit einfach nicht alles lückenlos darstellen.
Die Protokolle der dritten Schicht Die dritte Schicht ist die Host-zu-Host-Schicht. Die hier vertretenen Protokolle haben die Aufgabe, die von den Anwendungen bereit gestellten Daten in Pakete bzw. Datagramme zu verpacken und an die darunter gelegene Internetschicht weiterzureichen. Umgekehrt nehmen sie auch Pakete und Datagramme aus der
413
1451.book Seite 414 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
zweiten Schicht entgegen und ordnen diese dann den entsprechenden Anwendungen zu. 왘
TCP (Transmission Control Protocol) ist ein verbindungsorientiertes Protokoll. Es stellt die Integrität der Verbindung sicher, indem es eventuell beschädigte Datenpakete neu anfordert oder deren Reihenfolge reorganisiert. Deshalb wird es von vielen Anwendungen verwendet, insbesondere wenn größere Datenmengen ausgetauscht werden.
왘
UDP (User Datagram Protocol) ist ein verbindungsloses Protokoll. Es reicht vorwiegend die Datenpakete aus der Internetschicht an die entsprechend richtige Anwendung hoch. UDP wird von Programmen verwendet, die geringen Datenverkehr verursachen (z.B. DNS, NTP). Auch Anwendungen, die keine Antworten erwarten (Broadcasts, Multicasts), verwenden UDP.
Damit die Zustellung der Datenpakete und Datagramme an die richtige Anwendung erfolgen kann, verwenden Netzwerkanwendungen sogenannte Ports. Die Kenntnis der gängigsten TCP- und UDP-Portnummern ist für einen Administrator Allgemeinbildung und für die Prüfung unverzichtbar. Sie sollten wenigstens die folgenden Ports auswendig kennen: ftp-data ftp ssh telnet smtp dns http pop3 nntp ntp netbios-ssn imap snmp https
20/tcp+udp 21/tcp 22/tcp+udp 23/tcp+udp 25/tcp+udp 53/tcp+udp 80/tcp+udp 110/tcp+udp 119/tcp+udp 123/tcp+udp 139/tcp+udp 143/tcp+udp 161/tcp+udp 443/tcp+udp
Es sind insgesamt 65536 Ports verfügbar. Die ersten 1024 Ports werden als Well Known Ports bezeichnet. Das Betriebssystem wird über die Konfigurationsdatei /etc/services darüber informiert, welche Dienste mit welchen Ports korrespondieren. Sie können die Datei natürlich auch in Kombination mit grep als kleines Nachschlagewerk verwenden. Wenn Sie etwa vergessen haben, welchen Port üblicherweise https verwendet, liefert Ihnen das folgende Kommando die richtige Antwort:
414
1451.book Seite 415 Dienstag, 7. Juli 2009 2:18 14
109.1 Grundlagen von Internet-Protokollen
archangel:~ # grep ^https /etc/services https 443/tcp # http protocol over TLS/SSL https 443/udp # http protocol over TLS/SSL
Um andersherum für einen bekannten Port den zugehörigen Dienst zu ermitteln, kann folgendes Kommando eine sauber gefilterte Ausgabe liefern: archangel:~ # grep " 389/" /etc/services ldap 389/tcp # Lightweight Directory Access Protocol ldap 389/udp # Lightweight Directory Access Protocol
Das führende Leerzeichen in der Abfrage mit grep und der Schrägstrich verhindern unerwünschte Ausgaben, wie etwa solche: itv-control clariion-evr01
3899/udp 6389/tcp
# ITV Port # clariion-evr01
Um festzustellen, an welchen Ports Ihr System aktuell lauscht, können Sie nmap verwenden. Der Vorteil gegenüber einer Überprüfung mittels netstat ist die Übersichtlichkeit der Ausgabe, wie das Beispiel zeigt: archangel:~ # nmap localhost Starting nmap 3.81 at 2007-10-06 23:10 CEST Interesting ports on localhost (127.0.0.1): (The 1646 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 25/tcp open smtp 53/tcp open domain 80/tcp open http 139/tcp open netbios-ssn 143/tcp open imap 443/tcp open https 3128/tcp open squid-http
Die Protokolle der zweiten Schicht 왘
IPv4 (Internet Protocol Version 4) fügt den Paketen oder Datagrammen zur Adressierung einen IP-Header hinzu. Dieser Header enthält u.a. die Informationen über die Ziel- und die Quelladresse eines Datenpaketes, damit dieses korrekt zugestellt werden kann. Das fertige Produkt wird dann als Frame bezeichnet. Die von IPv4 verwendeten Adressen haben eine Länge von 32 Bit.
왘
IPv6 (Internet Protocol Version 6) entspricht vom Verwendungszweck her IPv4, weist aber einen Adressraum von 128 Bit auf.
왘
RIP (Routing Information Protocol) ist ein dynamisches Routing-Protokoll, das dem Austausch von Informationen zwischen Routern dient.
415
1451.book Seite 416 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
왘
OSPF (Open Shortest Path First) ist ebenfalls ein dynamisches Routing-Protokoll. Es verwendet im Gegensatz zu RIP den Link State Algorithmus (LSA) und ist deshalb auch für große Netzwerke geeignet.
왘
ARP (Address Resolution Protocol) stellt den Zusammenhang zwischen der IPAdresse und der MAC-Adresse (Media Access Control) eines Netzwerkadapters her.
왘
ICMP (Internet Control Message Protocol) wird überwiegend von Routern verwendet, um die Verfügbarkeit eines Gateways zu prüfen bzw. zu propagieren. Ausnahmen stellen Diagnoseprogramme wie ping oder traceroute dar. Diese prüfen die Verfügbarkeit von Routern bzw. Ziel-Hosts.
왘
IGMP (Internet Group Management Protocol) wird verwendet, wenn Nachrichten für eine bestimmte Gruppe von Hosts bestimmt sind. Diese benötigen dann auch eine IGMP-taugliche IP-Adresse. Typische Anwendungen sind Videokonferenzen und Anwendungen, die für Präsentationen eingesetzt werden.
Es gibt auch noch weitere, weniger wichtige Protokolle in dieser Schicht, die hier aber vernachlässigt werden. Ein besonderes Augenmerk muss aber noch auf die beiden Internetprotokolle IPv4 und IPv6 gerichtet werden. Besonders Kenntnisse des erstgenannten sind für die Prüfung unabdingbar.
Das Internetprotokoll IPv4 Die Version 4 des Internetprotokolls wurde so, wie sie heute bekannt ist, schon im September 1981 von der Organisation ARPA fertig gestellt und in einem RFC veröffentlicht: http://tools.ietf.org/html/rfc791. Es hat danach lediglich geringfügige Modifikationen gegeben. IPv4-Adressen haben eine Länge von 32 Bit. Deshalb sind zumindest theoretisch 4.294.967.296 unterschiedliche Adressen möglich. Man schreibt die Adressen in vier einzelnen Bytes dezimal. Die einzelnen Bytes sind durch Punkte voneinander getrennt. Diese Notationsweise, die auch als Dotted Quad bezeichnet wird, sieht dann zum Beispiel so aus: 192.168.100.55. Jede dieser Zahlen zwischen zwei Punkten wird als ein Oktett bezeichnet. Da ein Oktett jeweils ein Byte lang ist, ergeben sich immer 28 Möglichkeiten. Das sind 256 Variationsmöglichkeiten. Da die 0 hier mitgezählt werden muss, ist der höchstmögliche Wert für ein solches Oktett also 255. Eine IPAdresse besteht aus zwei Teilen. Der erste Teil ist der Netzwerkanteil und der zweite der Host-Anteil der Adresse. Es können nur Hosts direkt miteinander kommunizieren, deren Netzwerkanteil der IP-Adressen identisch sind. Hosts, die sich in unterschiedlichen Netzwerken befinden, müssen durch Router miteinan-
416
1451.book Seite 417 Dienstag, 7. Juli 2009 2:18 14
109.1 Grundlagen von Internet-Protokollen
der verbunden werden. Welcher Anteil einer IP-Adresse zum Netzwerk- und welcher zum Host-Anteil gehört, wird durch die Subnetzmaske bestimmt.
IP-Klassen Die Adressen des Internetprotokolls sind in Klassen eingeteilt. Welcher Klasse ein Netzwerk angehört, wird durch den Inhalt des ersten Bytes der Adresse bestimmt. Die Klassen legen gleichzeitig fest, welche Standardsubnetzmaske verwendet wird. Die tatsächlich verwendete Subnetzmaske kann in der Realität jedoch durch das Erstellen von Subnetzen unterschiedlich sein: 왘
Klasse A 왘
Erste Adresse: 1.0.0.0
왘
Letzte Adresse: 127.255.255.255
왘
Standardsubnetzmaske: 255.0.0.0
왘
Privater Ausschlussbereich: 10.0.0.0–10.255.255.255
Besonderheit: Bei dem Netzwerk 127.0.0.0 handelt es sich um das LoopbackNetzwerk, das ein Computer zur internen Kommunikation innerhalb der Maschine verwendet. 왘
Klasse B 왘
Erste Adresse: 128.0.0.0
왘
Letzte Adresse: 191.255.255.255
왘
Standardsubnetzmaske: 255.255.0.0
왘
Privater Ausschlussbereich: 172.16.0.0–172.31.255.255
Besonderheit: Das Netzwerk mit der Adresse 169.254.0.0 wird zur automatischen Adressierung in Heimnetzwerken (APIPA) verwendet. 왘
왘
Klasse C 왘
Erste Adresse: 192.0.0.0
왘
Letzte Adresse: 223.255.255.255
왘
Standardsubnetzmaske: 255.255.255.0
왘
Privater Ausschlussbereich: 192.168.0.1–192.168.255.255
Klasse D 왘
Erste Adresse: 224.0.0.0
왘
Letzte Adresse: 239.255.255.255
왘
Standardsubnetzmaske: 255.255.255.255
417
1451.book Seite 418 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
Besonderheit: Dieses Netzwerk wird von Multicast-Anwendungen genutzt. Die vollständig gesetzte Subnetzmaske bewirkt, dass alle Rechner eines Multicast-Netzwerkes dieselbe IP-Adresse verwenden müssen. Adressen der Klasse D werden normalerweise immer nur zusätzlich zu anderen IP-Adressen verwendet. 왘
Klasse E 왘
Erste Adresse: 240.0.0.0
왘
Letzte Adresse: 255.255.255.254
왘
Standardsubnetzmaske: 255.255.255.255
Besonderheit: Dieses Netzwerk wird als Experimentalklasse bezeichnet und normalerweise nicht verwendet. Damit Sie ermitteln können, welche IP-Adressen zu welcher Klasse gehören, müssen Sie nur das erste Byte der Adresse betrachten. Die Klasse A beginnt einfach am Anfang, also mit 1. Sie endet da, wo die Klasse B beginnt. Das ist der Fall, wenn das erste Bit des ersten Byte einer IP-Adresse gesetzt wird. Das wäre also das 128er-Bit. Die Klasse C beginnt entsprechend, wenn zusätzlich das zweite Bit gesetzt wird (128 + 64 = 192). Entsprechend wird bei den Klassen D und E jeweils ein weiteres Bit hinzugefügt. Zur Verdeutlichung sehen Sie in der folgenden Aufstellung die Startadressen der Adressklassen in binärer und in dezimaler Schreibweise: 왘
Klasse A: Start 00000001.00000000.00000000.00000000 – (1.0.0.0)
왘
Klasse B: Start 10000000.00000000.00000000.00000000 – (128.0.0.0)
왘
Klasse C: Start 11000000.00000000.00000000.00000000 – (192.0.0.0)
왘
Klasse D: Start 11100000.00000000.00000000.00000000 – (223.0.0.0)
왘
Klasse E: Start 11110000.00000000.00000000.00000000 – (240.0.0.0)
Die Verwendung der Subnetzmaske und CIDR Die Subnetzmaske maskiert den Netzwerkanteil und den Host-Anteil einer IPAdresse. Mit ihrer Hilfe kann ein Computer ermitteln, in welchem Netzwerk bzw. Subnetz er sich selbst befindet. Er kann nur direkt mit anderen Computern kommunizieren, die sich in demselben Netzwerk oder Subnetz befinden. Bei Kontaktaufnahmen zu netzwerkfremden Hosts müssen die Datenpakete zunächst an einen Router geschickt werden. Die Ermittlung der Netzwerkzugehörigkeit geschieht über eine logische UND-Verknüpfung der IP-Adresse mit der Subnetzmaske. Für Subnetzmasken sind zwei Notationsweisen üblich. Die eine davon ist, genau wie die IP-Adressen selbst, eine Dotted-Quad-Schreibweise, z.B.
418
1451.book Seite 419 Dienstag, 7. Juli 2009 2:18 14
109.1 Grundlagen von Internet-Protokollen
255.255.255.0 für eine Standard-C-Klasse. Da Subnetzmasken von links nach rechts inkrementell aufgefüllt werden, sind pro Oktett nur neun verschiedene Werte möglich: 00000000 10000000 11000000 11100000 11110000 11111000 11111100 11111110 11111111
Bin Bin Bin Bin Bin Bin Bin Bin Bin
= = = = = = = = =
0 Dez 128 Dez 192 Dez 224 Dez 240 Dez 248 Dez 252 Dez 254 Dez 255 Dez
Auf derselben Tatsache basiert die CIDR-Notation (Classless Inter-Domain Routing) von Subnetzmasken. Bei dieser Schreibweise wird einfach nur die Anzahl der gesetzten Bits einer Subnetzmaske angegeben. Ein Standard-C-Klasse-Netz wird also so ausgedrückt: 192.168.100.0 /24 (255.255.255.0, wobei jede einzelne 255 acht gesetzten Bit entspricht). Die Ermittlung der Netzwerkmitgliedschaft eines Hosts erfolgt, wie bereits erwähnt, über eine logische UND-Verknüpfung. Das Ergebnis einer UND-Verknüpfung ist immer dann 1, wenn beide verknüpften Werte ebenfalls 1 sind. In allen anderen Fällen ist das Ergebnis der Verknüpfung 0. Zur Verdeutlichung soll im folgenden Beispiel die Netzwerkmitgliedschaft eines Computers mit der Adresse 192.168.150.9/24 ermittelt werden. Für die Berechnung müssen sowohl IP-Adresse als auch Subnetzmaske zunächst in Binärschreibweise umgewandelt werden: 192.168.150.9 255.255.255.0 192.168.150.0
11000000.10101000.10010110.00001001 11111111.11111111.11111111.00000000 11000000.10101000.10010110.00000000
Host-Adresse Subnetzmaske Netzadresse
Die logische UND-Verknüpfung ergab, dass sich der Computer in dem Netzwerk mit der IP-Adresse 192.168.150.0 befindet. Der Netzwerkanteil der IP-Adresse erstreckt sich in diesem Fall über die ersten drei Oktette (24 Bit), weil die Subnetzmaske ebenfalls eine Länge von 24 Bit aufweist. Ein weiteres Beispiel soll die Funktionsweise der Subnetzmaske genauer verdeutlichen. Es wird hier eine nicht Standardsubnetzmaske verwendet, um gleichzeitig die Unterteilung eines Netzes in Subnetze zu erläutern. Ein Host mit der Adresse 192.168.4.147/26 soll ein Datenpaket an einen anderen Host mit der IP-Adresse 192.168.4.116 senden. Die Subnetzmaske des Ziel-Hosts ist einer sendenden Station nie bekannt. Das ist aber auch nicht nötig. Wenn sich der Ziel-Host in dem-
419
1451.book Seite 420 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
selben Subnetz befindet wie die sendende Station, dann kann das Paket direkt zugestellt werden. Im anderen Fall muss das Paket zunächst an einen Router (eventuell Standardgateway) geschickt werden, der sich dann um die Weiterleitung kümmert. Es müssen zwei Berechnungen erfolgen: 왘
Der Quell-Host: 192.168.004.147 255.255.255.192 192.168.004.128
왘
11000000.10101000.00000100.10010011 (Host) 11111111.11111111.11111111.11000000 (Maske) 11000000.10101000.00000100.10000000 (Netz)
Der Ziel-Host: 192.168.004.116 255.255.255.192 192.168.004.064
11000000.10101000.00000100.01110100 (Host) 11111111.11111111.11111111.11000000 (Maske) 11000000.10101000.00000100.01000000 (Netz)
Der Quell-Host befindet sich selbst laut logischer UND-Verknüpfung mit der Subnetzmaske im Netzwerk 192.168.4.128. Diese Adresse darf in diesem Fall, da das ursprüngliche Netz in Subnetze unterteilt wurde, nicht mehr für einen Host verwendet werden. Die Subnetzmaske für den Ziel-Host wurde hier nur angenommen. Sie ist für die sendende Maschine aber auch unerheblich, weil sich die IPAdresse des Ziels in einem fremden Netzwerk befindet. Das zu sendende Paket muss also über einen Router zugestellt werden. Der Abstand zwischen den einzelnen Subnetzen kann an der Subnetzmaske abgelesen werden. Sie brauchen nur das letzte gesetzte Bit zu betrachten. Im letzten Beispiel ist das letzte gesetzte Bit das 64er-Bit. Das bedeutet einen Abstand der Netze untereinander von 64. Die resultierenden Netzwerke hätten dann die folgenden Adressen: 왘
192.168.4.0/26
왘
192.168.4.64/26
왘
192.168.4.128/26
왘
192.168.4.192/26
Die Anzahl der möglichen Host pro Subnetz errechnet sich aus den verbleibenden Bits für Host-Adressen abzüglich der Netzwerkadresse und der BroadcastAdresse. In diesem Fall also 26 – 2 = 64 – 2 = 62 Hosts.
Die Broadcast-Adressen Ein Broadcast ist eine Rundsendung von Informationen an alle Computer im Wirkungsbereich des Broadcasts. Es gibt eine allgemeine, netzwerkunabhängige Broadcast-Adresse 255.255.255.255. Pakete, die an diese Adresse gerichtet werden, erreichen alle Computer, die sich im selben physikalischen Netzwerksegment befinden. Außerdem gibt es eine weitere Broadcast-Adresse für jedes IP-
420
1451.book Seite 421 Dienstag, 7. Juli 2009 2:18 14
109.1 Grundlagen von Internet-Protokollen
Subnetz. Das ist normalerweise die letzte Adresse in einem Netz bzw. einem Subnetz. Für ein C-Klasse-Netzwerk mit der Netzwerkadresse 192.168.0.0/24 wäre das also der Broadcast 192.168.0.255. Für das Beispiel von vorhin sähe die Zuordnung folgendermaßen aus: 왘
192.168.4.000/26 – Broadcast: 192.168.4.63
왘
192.168.4.064/26 – Broadcast: 192.168.4.127
왘
192.168.4.128/26 – Broadcast: 192.168.4.191
왘
192.168.4.192/26 – Broadcast: 192.168.4.255
Router sind Broadcast-Grenzen. Das bedeutet, dass Broadcasts von einem Router nicht weitergeleitet werden können.
Standardgateway Dem Thema Routing wird auf den nächsten Seiten eine Menge Platz gewidmet. Deshalb soll das Thema Standardgateway hier nur kurz und knapp umrissen werden. Ein Host sendet Datenpakete immer dann an das Standardgateway, wenn er diese Pakete nicht selber zustellen und auch aufgrund keines anderen Eintrages in der Routing-Tabelle zuordnen kann. Die Reihenfolge der Verarbeitung sieht folgendermaßen aus: 왘
Der Host ermittelt durch UND-Verknüpfung mit seiner Subnetzmaske, ob sich der Ziel-Host in demselben Subnetz befindet wie er selbst. Bei Erfolg wird der Host direkt kontaktiert. Wenn nicht ...
왘
... dann überprüft dieser Host seine Routing-Tabelle. Findet er ein zuständiges Gateway, so stellt der Host eine Verbindung über eben diesen Gateway her. Wenn nicht ...
왘
... dann versucht der Rechner den Ziel-Host über das Standardgateway zu kontaktieren.
Ein Gateway – und das gilt auch und insbesondere für das Standardgateway – muss sich immer im selben Netzwerk bzw. Subnetz befinden, in dem sich auch der Host befindet. Ansonsten kann der Host das Gateway nicht erreichen.
Das Internetprotokoll IPv6 Durch das schnelle Wachstum des Internets ergibt sich das Problem, dass der Adressraum des IPv4-Protokolls annähernd erschöpft ist. Wie Sie bereits wissen, besteht eine IPv4-Adresse nur aus 32 Bit, wodurch sich zumindest rein rechne-
421
1451.book Seite 422 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
risch eine Anzahl von 4.294.967.296 Adressen ergibt. Ein großer Teil dieser Adressen steht außerdem nicht zur Verfügung. Alleine durch die Tatsache, dass die komplette D-Klasse und die E-Klasse nicht zur Verfügung stehen, ergibt sich schon ein enormer Verlust. Außerdem müssen private Adressräume abgezogen werden, und der großzügige Umgang mit ganzen A-Klassen in den frühen Computertagen ist auch nicht zu vernachlässigen. IPv6-Adressen warten mit einer Länge von 128 Bit auf. Die Anzahl der möglichen Adressen, die sich daraus ergibt, macht genau: 340.282.366.920.938.463.463.374.607.431.768.211.456
Das sind also über 340 Sextillionen. Man kann bei IPv6 wohl ohne Weiteres großzügig bei der Verteilung der Adressen vorgehen. Weil IPv6 ohne Subnetzmaske auskommt, werden auch schon gleich zu Anfang eine ganze Menge Adressen »verbraucht«. Die Unterscheidung der Netze geschieht innerhalb der ersten 64 Bit. Demzufolge sind also »nur« noch 64 Bit für Host-Adressen verfügbar (allerdings pro Netzwerk). Die Anzahl der möglichen Netze und Adressen pro Netzwerk ist somit identisch und liegt bei genau: 18.446.744.073.709.551.616
Das sind über 18 Trillionen, und es könnte somit momentan jeder Mensch etwa 3,7 Milliarden eigene Netzwerke betreiben, ohne in einen Engpass bezüglich der IP-Adressen zu kommen. Diese Zahlen sollten Ihnen nur eine kleine Vorstellung von den Dimensionen eines 128-Bit-Adressraums geben. Bei der Notation von IPv6-Adressen sind folgende Punkte zu beachten: 왘
Eine IPv6-Adresse wird hexadezimal notiert.
왘
Sie besteht aus acht Segmenten zu je 16 Bit.
왘
Die einzelnen Segmente sind durch Doppelpunkte voneinander getrennt.
왘
Führende Nullen innerhalb eines Segments können weggelassen werden.
왘
Segmente, die nur aus Nullen bestehen, können unter Umständen leer gelassen werden. Daraus ergeben sich dann zwei aufeinander folgende Doppelpunkte. Wenn mehrere aufeinanderfolgende Segmente aus Nullen bestehen, können diese auf dieselbe Art notiert werden. Innerhalb einer einzelnen IPv6Adresse kann nur einmal ein doppelter Doppelpunkt verwendet werden, weil sonst im mittleren Bereich nicht mehr eindeutig festgestellt werden kann, wo der Netzwerkanteil der Adresse endet bzw. der Host-Anteil beginnt.
Beispiel: fe80::20c:6eff:febe:22fc
422
1451.book Seite 423 Dienstag, 7. Juli 2009 2:18 14
109.1 Grundlagen von Internet-Protokollen
Dies ergibt »aufgefüllt«: fe80:0000:0000:0000:020c:6eff:febe:22fc
Hierbei handelt es sich übrigens um eine private Adresse. Die Definition privater Adressen geschieht über die ersten 10 Bit. Die Netzwerke fe80 bis febf sind für lokale Netzwerke reserviert und sollen später auch im Internet nicht geroutet werden. Die Host-Adresse kann ein IPv6-Host aus seiner MAC-Adresse selbst errechnen. Ein DHCP-Server ist deshalb zumindest in einfachen Netzwerken nicht erforderlich. Die Integration mit IPv4 war zunächst so gedacht, dass nur die letzten 32 Bit einer IPv6-Adresse Verwendung finden, um diese 1:1 abzubilden. Die ersten 96 Bit sollten frei bleiben. Sie sollten sich bei der Implementierung von IPv6 im Klaren darüber sein, dass sich dieses Protokoll immer noch im Wandel befindet, obwohl es inzwischen fast ein Vierteljahrhundert alt ist. Deshalb müssen Sie bei der LPI-Prüfung auch nicht mit Fragen rechnen, die sehr tief in diese Materie vordringen.
TCP/IP Werkzeuge Sie sollten sich zur Vorbereitung auf die Prüfung mit den wichtigsten TCP/IPTools auseinandersetzen. Sie sollten vor allem den Verwendungszweck der Tools und die wichtigsten Optionen kennen. ping traceroute und tracepath Zu den wahrscheinlich wichtigsten Diagnoseprogrammen gehören ping und traceroute. Beide basieren auf ICMP. Verwenden Sie das Kommando ping, um die Erreichbarkeit eines Hosts zu überprüfen. Hierbei können Sie sowohl eine IPAdresse als auch einen Host-Namen verwenden. debian40:~# ping 85.88.3.146 PING 85.88.3.146 (85.88.3.146) 56(84) 64 bytes from 85.88.3.146: icmp_seq=1 64 bytes from 85.88.3.146: icmp_seq=2 64 bytes from 85.88.3.146: icmp_seq=3
bytes of data. ttl=57 time=21.2 ms ttl=57 time=22.2 ms ttl=57 time=45.4 ms
Aus den Antworten können Sie schließen, dass der Server in einer angemessenen Zeit antwortet. Außerdem können Sie an dem TTL-Wert (Time to Live) erkennen, dass die Pakete vom Quell- zum Ziel-Host sieben Router durchlaufen. Die anfängliche TTL liegt bei 64. Unterwegs reduziert jeder Router die TTL um 1, damit bei falsch konfigurierten Routern keine Pakete für immer zwischen diesen Routern hin- und hergesendet werden. Wenn der Wert für die TTL 0 wird, verwirft der
423
1451.book Seite 424 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
Router das Paket. Im nächsten Beispiel wird ein direkter Nachbar »gepingt«. Die anfängliche TTL von 64 müsste erhalten bleiben: debian40:~# ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) 64 bytes from 192.168.0.1: icmp_seq=1 64 bytes from 192.168.0.1: icmp_seq=2 64 bytes from 192.168.0.1: icmp_seq=3
bytes of data. ttl=64 time=0.139 ms ttl=64 time=0.197 ms ttl=64 time=0.174 ms
Um einen defekten Router auf dem Weg zu einem Ziel zu identifizieren, benötigen Sie das Programm traceroute. Dieses Programm sendet zunächst ein UDPPaket mit einer TTL von nur 1 an das endgültige Ziel. Da der erste Router das Paket verwirft und mit einem Fehler antwortet, ist die Paketlaufzeit zu diesem Router bekannt. Als Nächstes wird wieder ein Paket, diesmal mit einer TTL von 2, losgeschickt. Der zweite Router wird das Paket diesmal verwerfen und ebenfalls mit einer Fehlermeldung antworten. Nun ist auch die Paketlaufzeit zum zweiten Router bekannt. Traceroute setzt diese Prozedur bis zum Ziel-Host fort. Der Router, bei dem die längste Antwortzeit ermittelt wird, ist dann als Engpass für das Netzwerk identifiziert: [root@fedora10 ~]# traceroute -n 217.147.216.241 traceroute to 217.147.216.241, 30 hops max, 40 byte packets 1 192.168.0.1 0.295 ms 0.294 ms 0.165 ms 2 88.73.0.1 7.059 ms 8.746 ms 9.908 ms 3 145.254.5.137 11.533 ms 12.850 ms 14.842 ms 4 145.254.18.89 7234.327 ms 6541.484 ms 8046.301 ms 5 145.254.16.182 29.524 ms 30.774 ms 32.764 ms 6 80.81.192.141 58.472 ms 56.592 ms 55.878 ms 7 195.141.190.118 43.765 ms 42.432 ms 43.378 ms 8 217.147.223.35 44.350 ms 45.655 ms 45.141 ms 9 217.147.216.241 45.298 ms 32.745 ms 33.116 ms
In diesem Beispiel ist also der vierte Router das Problem. Seine Antwortzeit liegt deutlich außerhalb des akzeptablen Bereichs. Die Option -n, die hier bei traceroute verwendet wurde, steht übrigens für »numerical« und unterdrückt die Namensauflösung der einzelnen IP-Adressen. Dadurch wird die Ausgabe von traceroute erheblich beschleunigt. Diese Option wird häufig in der Prüfung abgefragt. Sie sollten sich aber auch mit den anderen möglichen Parametern von traceroute in der entsprechenden Manpage vertraut machen. Mit tracetpath können Sie eine Route auch ohne root-Rechte überprüfen. Das Programm untersucht auf seiner Route zusätzlich die MTU der jeweiligen Abschnitte:
424
1451.book Seite 425 Dienstag, 7. Juli 2009 2:18 14
109.1 Grundlagen von Internet-Protokollen
harald@archangel:~$ tracepath -n 217.18.182.170 1: 88.73.134.72 0.248ms pmtu 1492 1: 88.73.128.1 35.669ms 1: 88.73.128.1 35.839ms 2: 145.254.5.133 39.090ms 3: 92.79.209.101 39.606ms 4: 145.254.16.18 51.104ms 5: 80.81.192.132 47.583ms asymm 4 6: 213.83.19.194 60.805ms asymm 7 7: 217.18.184.22 59.603ms asymm 8 8: 81.201.155.22 91.071ms asymm 9 9: 217.18.182.170 92.728ms reached Resume: pmtu 1492 hops 9 back 55
dig, host und nslookup Die Programme dig, host und nslookup dienen der Diagnose bei Problemen mit der Namensauflösung. Sie gehören eigentlich nicht direkt zu TCP/IP, aber LPI ordnet sie diesem Thema zu. Das erheblich ältere Programm nslookup soll irgendwann einmal von dig und host abgelöst werden. Die Verwendungszwecke sind dementsprechend ähnlich, wobei die beiden neueren Programme in der Summe den größeren Funktionsumfang bieten. Eine wichtige Gemeinsamkeit aller drei Programme ist ihr Verhalten bei der Auflösung von Namen in IP-Adressen oder umgekehrt. Sie fragen nicht das lokal installierte Betriebssystem an, das sich dann um die DNS-Abfragen kümmern muss. Sie wenden sich stattdessen direkt selbst an die Nameserver, sodass bei einer Serverdiagnose mit diesen Tools ein lokaler Client-Fehler von vorneherein als Fehlerquelle ausgeschlossen wird. Mit dem Kommando host sind sowohl einfache Namensauflösungsanfragen als auch Reverse-Lookup-Anfragen durchführbar. Das Programm liefert (solange man es nicht mit -v in den Verbose-Mode schaltet) kurze und klare Antworten ohne jede Zusatzinformationen: [root@fedora10 ~]# host www.galileocomputing.de www.galileocomputing.de has address 85.88.3.146
Umgekehrt liefert eine Reverse-Abfrage: [root@fedora10 ~]# host 85.88.3.146 146.3.88.85.in-addr.arpa domain name pointer galileo-press.de.
Ähnlich wie nslookup können Sie dem Programm host den Typ der Abfrage als Option übergeben. Dazu geben Sie die Option -t gefolgt vom Typ der Abfrage mit auf der Kommandozeile ein, wie das folgende Beispiel anhand des MX Eintrags demonstriert:
425
1451.book Seite 426 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
archangel:~ # host -t MX efdah.com mail is handled efdah.com mail is handled efdah.com mail is handled efdah.com mail is handled
efdah.com by 2 efdah.com.s8a1.psmtp.com. by 4 efdah.com.s8a2.psmtp.com. by 6 efdah.com.s8b1.psmtp.com. by 8 efdah.com.s8b2.psmtp.com.
Testen Sie bitte auch die Ausgabe mit der Option -v. Diese wurde hier aus Platzgründen nicht abgedruckt. Mit dem Programm dig erhalten Sie per Voreinstellung erheblich umfangreichere Informationen. Außerdem können Sie schon direkt auf der Kommandozeile den abzufragenden DNS-Server angeben, während das Programm host den DNS-Server verwendet, der in der Datei /etc/resolv.conf eingetragen ist. Das folgende Beispiel zeigt die (um ca. 20 Zeilen gekürzte) Ausgabe einer MX-Abfrage an den DNS-Server mit der IP-Adresse 198.151.35.5: archangel:~ # dig @198.151.35.5 -t MX efdah.com ; <<>> DiG 9.3.2 <<>> @198.151.35.5 -t MX efdah.com ;; QUESTION SECTION: ;efdah.com. IN MX ;; ANSWER SECTION: efdah.com. 600 IN MX 8 efdah.com.s8b2.psmtp.com. efdah.com. 600 IN MX 2 efdah.com.s8a1.psmtp.com. ;; AUTHORITY SECTION: efdah.com. 86400 IN NS ns1.dtc.cendant.com. efdah.com. 86400 IN NS ns2.dtc.cendant.com. ;; ADDITIONAL SECTION: efdah.com.s8b2.psmtp.com. 871 IN A 64.18.7.14 efdah.com.s8a1.psmtp.com. 871 IN A 64.18.7.10 ns1.dtc.cendant.com. 300 IN A 198.151.35.5 ns2.dtc.cendant.com. 300 IN A 198.151.36.1
Die Antwort, die dig erhält, beinhaltet nicht nur die abgefragten MX-Einträge, sondern auch die Namen der für diese Einträge zuständigen DNS-Server. Im unteren Abschnitt werden auch die IP-Adressen der zuständigen Mailserver und DNS-Server gelistet. Alles in allem ist dig ein sehr umfangreiches Diagnoseprogramm. Es lohnt sich in jedem Fall ein Blick auf man dig. Last, but not least wäre in dieser Gattung noch nslookup zu nennen. Sie sollten nslookup in jedem Fall kennen. Es ist bisher noch kein DNS-Problem bekannt, das man nicht mit nslookup hätte diagnostizieren können. Wenn Sie nslookup beherrschen, sind Sie in der Lage, plattformübergreifend zu arbeiten, weil dieses Tool auch (sogar unter demselben Namen) auf Windows-Hosts existiert. Ein besonderes Merkmal von nslookup ist die interaktive Verwendbarkeit. Das ist besonders vorteilhaft, wenn Sie mehrere Abfragen hintereinander durchführen
426
1451.book Seite 427 Dienstag, 7. Juli 2009 2:18 14
109.1 Grundlagen von Internet-Protokollen
möchten. Die Ausgabe ist recht übersichtlich, und Sie haben auch hier (genau wie bei dig) die Möglichkeit, einen alternativen DNS-Server anzugeben, um genau diesen zu überprüfen. Im folgenden Beispiel wird nslookup interaktiv gestartet. Anschließend wird der abzufragende Server auf die IP-Adresse 198.151.35.5 geändert. Danach wird der Abfragetyp auf MX eingestellt, und zum Schluss wird die Abfrage nach den zuständigen Mailservern für efdah.com durchgeführt. Welche Eingaben innerhalb von nslookup durch den Benutzer ausgeführt wurden, erkennen Sie am nslookup-Prompt >. Bei den anderen Zeilen handelt es sich jeweils um Antworten des Programms. Die Ausgaben von nslookup wurden diesmal lediglich um zwei Zeilen gekürzt: archangel:~ # nslookup > server 198.151.35.5 Default server: 198.151.35.5 Address: 198.151.35.5#53 > set type=mx > efdah.com Server: 198.151.35.5 Address: 198.151.35.5#53 efdah.com mail exchanger = 8 efdah.com.s8b2.psmtp.com. efdah.com mail exchanger = 2 efdah.com.s8a1.psmtp.com.
Prüfungstipp Auch hier empfehle ich Ihnen, sich mit dem Programm aktiv auseinanderzusetzen und die wichtigsten Optionen zu lernen.
whois Bei whois handelt es sich u.a. um eine Protokollspezifikation zur Abfrage von Verwaltungsinformationen für registrierte Domänen. Es gibt hierfür sowohl Server als auch Client-Applikationen. Standardmäßig wird zur Kommunikation zwischen diesen der TCP-Port 43 verwendet. Die genauen Spezifikationen für dieses Protokoll finden Sie in RFC 3912. Wahrscheinlich haben Sie zumindest unbewusst schon einmal eine solche Abfrage durchgeführt. Ein prominenter deutscher Client (der allerdings auch nur auf einen deutschen Server zugreift) ist dieser: http://www.denic.de/de/whois/index.jsp Sie können hier nicht nur nachsehen, ob eine Domäne noch frei ist, sondern auch, wem eine existierende Domäne gehört, wann Sie angeschlossen wurde und wer sie verwaltet. Unter Linux steht Ihnen ein kommandozeilenbasiertes Abfrage-Tool für solche whois-Server zur Verfügung. Dieses Tool ist übrigens nicht auf bestimmte Top-Level-Domains festgelegt. Es versucht, selbstständig zu ermitteln, welcher whois-Server für die entsprechende Domäne zuständig ist. Sie kön-
427
1451.book Seite 428 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
nen aber auch einen abzufragenden Server angeben. Ein Beispiel (wieder mit extrem gekürzter Ausgabe) wird das Ganze verdeutlichen: debian40:~# whois galileocomputing.de Domain: galileocomputing.de Domain-Ace: galileocomputing.de Nserver: ns1.surfplanet.de Nserver: ns2.surfplanet.de Status: connect Changed: 2005-05-12T10:35:27+02:00 [Holder] Type: PERSON Name: Galileo Press GmbH Organisation: Galileo Press GmbH Address: Gartenstrasse 24 Pcode: 53229 City: Bonn Country: DE Changed: 2005-05-11T20:28:06+02:00
Das sind eine Menge nützlicher Informationen. Es ist also jetzt heraus, dass die Domäne galileocomputing.de der Galileo Press GmbH gehört (was aber auch kein Geheimnis sein soll). Auch die vollständige Adresse und der Webhoster werden genannt. Sie sollten sich als Privatperson also im Klaren darüber sein, was ein whois-System über Sie veröffentlicht, wenn Sie eine Domäne besitzen. ftp In diesem Kapitel soll bezüglich ftp lediglich geklärt werden, dass es einen textbasierten FTP-Client gibt. Dieser ist auch heutzutage noch hilfreich. Er ist z.B. hervorragend dazu geeignet, etwas auf ein System herunterzuladen, an dem man sich per ssh angemeldet hat. Manche Menschen werden das für puristisch halten, aber die gelegentliche Benutzung von textbasierten FTP-Clients (und manchmal sogar Browsern) ist aus genau demselben Grund durchaus sinnvoll. Eine Anmeldung an den Server ftp.kernel.org sähe dann etwa so aus: debian40:~# ftp ftp.kernel.org Connected to pub.kernel.org. 220 Welcome to ftp.kernel.org. Name (ftp.kernel.org:root): anonymous 331 Please specify the password. Password:
Die Syntax des FTP-Servers ist der von Linux sehr ähnlich. Sie können mit ls Verzeichnisinhalte auflisten, mit cd in Verzeichnisse wechseln und mit einem ? alle
428
1451.book Seite 429 Dienstag, 7. Juli 2009 2:18 14
109.2 Grundlegende Netz-Konfiguration
verfügbaren Befehle anzeigen. Wenn Sie eine Datei herunterladen wollen, geben Sie den Befehl get, gefolgt von dem Dateinamen, ein. Mit mget können Sie mithilfe von Wildcards mehrere Dateien auf einmal herunterladen. Die Kommandos put und mput sind die entsprechenden Befehle zum Heraufladen von Dateien auf einen FTP-Server. Prüfungstipp Die Kenntnis aller FTP-Befehle ist für die Prüfung nicht erforderlich. Sie sollten allerdings zumindest die oben genannten Kommandos kennen.
telnet Telnet ist eine inzwischen als veraltet zu betrachtende Methode, entfernte Rechner zu verwalten. Es handelt sich um eine Konsolensitzung, die über das Netzwerk initiiert wird wie auch bei ssh. Im Gegensatz zu ssh verschlüsselt telnet die Verbindungsdaten nicht. Es wird sogar das Kennwort während der Authentifizierung unverschlüsselt über das Netzwerk übertragen. Für die Prüfung sollten Sie wissen, wozu man telnet verwendet, dass es den TCP-Port 23 verwendet und dass es sich um ein unsicheres Protokoll handelt.
109.2 Grundlegende Netz-Konfiguration Wichtung: 4 Beschreibung: Kandidaten sollten in der Lage sein, Konfigurationseinstellungen auf Client-Rechnern anzuschauen, zu verändern und zu überprüfen. Wichtigste Wissensgebiete: 왘
Netzschnittstellen manuell und automatisch konfigurieren
왘
grundlegende TCP/IP-Rechnerkonfiguration
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/hostname
왘
/etc/hosts
왘
/etc/resolv.conf
왘
/etc/nsswitch.conf
왘
ifconfig
왘
ifup
429
1451.book Seite 430 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
왘
ifdown
왘
route
왘
ping
Allgemeines Der Bereich TCP/IP-Konfiguration und Problemlösung wird von LPI als sehr wichtig eingestuft. Deshalb sollten Sie die in den folgenden Abschnitten behandelten Konfigurationsdateien und Programme unbedingt genau kennen. Sie werden feststellen, dass es speziell bei der Ansprache von Infrastrukturdiensten zunächst ausschließlich um die Konfiguration von Clients geht.
Konfigurationsdateien eines Netzwerk-Clients /etc/HOSTNAME oder /etc/hostname Diese beiden Konfigurationsdateien beinhalten den Namen des Computers. Welche der beiden Dateien (wenn überhaupt eine) verwendet wird und deren Inhalt, hängt von der verwendeten Distribution ab. Die Systeme, die während der Erstellung dieses Buches eingesetzt wurden, sind: 왘
Linux Mint 7.0 »Gloria« verwendet /etc/hosts und /etc/hostname
왘
openSuSE 11.1 – die Datei /etc/HOSTNAME mit FQDN des Hosts
왘
Debian 5.0 – die Datei /etc/hostname mit dem reinen Host-Namen
왘
IPCop 1.4.21 verwendet ausschließlich /etc/hosts zur Selbstauflösung
왘
Fedora 11.0 verwendet ausschließlich /etc/hosts zur Selbstauflösung
왘
Ubuntu 9.04 »Jaunty Jackalope« verwendet /etc/hosts und /etc/hostname
Prüfungstipp Merken Sie sich also bitte für die Prüfung, dass diese Dateien den Namen des Rechners enthalten können.
/etc/hosts Diese Datei ist, historisch betrachtet, ein Vorläufer von DNS. Bevor es überhaupt DNS gab, wurden in dieser Datei Zuordnungen zwischen voll qualifizierten HostNamen (FQDN = Full Qualified Domain Name) und IP-Adressen eingetragen und durch den Client verwendet. So war es schon sehr früh möglich, Computer über ihre Namen anstatt über IP-Adressen anzusprechen. Heutzutage wird diese Datei hauptsächlich verwendet, um den Namen localhost mit der Loopback-Adresse zu verknüpfen oder um einen Ersatzeintrag zu schaffen, falls der Rechner die be430
1451.book Seite 431 Dienstag, 7. Juli 2009 2:18 14
109.2 Grundlegende Netz-Konfiguration
reits weiter oben beschriebene Datei /etc/hostname nicht verwendet. Ein Beispiel: root@ipcop:/etc # cat /etc/hosts 127.0.0.1 localhost 192.168.0.56 ipcop.homelinux.net
ipcop
Der Inhalt der Datei ist wohl absolut selbsterklärend. /etc/networks Diese Datei ist ebenfalls nicht in allen Distributionen von Linux vorhanden. Sie wird normalerweise nur beim Systemstart gelesen, um ein paar initiale Zuordnungen zu schaffen, noch bevor das DNS-Client-System überhaupt läuft. Eine solche /etc/networks-Datei könnte so aussehen: debian40:~# cat /etc/networks default 0.0.0.0 loopback 127.0.0.0 link-local 169.254.0.0 localnet 192.168.0.0
Die Datei /etc/networks wird, wenn vorhanden, von route und von netstat eingelesen. /etc/resolv.conf Dies ist die wohl wichtigste Konfigurationsdatei für den DNS-Client. Sie enthält in erster Linie die IP-Adressen der zu verwendenden DNS-Server. Es gibt aber auch noch andere Eintragstypen, von denen zwei besonders wichtig und auch prüfungsrelevant sind. Doch zur Erklärung zunächst ein Beispiel: archangel:~ # cat /etc/resolv.conf domain homelinux.net search galileocomputing.de search galileo-press.de nameserver 192.168.0.1 nameserver 192.168.0.2 왘
Die beiden Einträge vom Typ nameserver teilen dem Host mit, welche DNSServer zu verwenden sind. Beachten Sie bitte unbedingt, dass hier keine Gleichzeichen oder Doppelpunkte zum Einsatz kommen.
왘
Der Eintrag vom Typ domain sagt dem Rechner, in welcher Domäne er sich selbst befindet. Das ist vor allem dazu nützlich, dass ein Computer, der sich in derselben Domäne befindet, einfach über seinen Host-Namen angesprochen werden kann. Der Suffix (hier homelinux.net) wird dann automatisch ergänzt.
431
1451.book Seite 432 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
왘
Etwas seltener wird der Eintrag search verwendet. Man braucht diesen Eintragstyp, wenn Computer unterschiedlicher Domänen sich gegenseitig über die kurzen Host-Namen erreichen können sollen. Die Verwendung von FQDNs ist dann nicht mehr notwendig.
/etc/nsswitch.conf Mit dieser Datei werden unterschiedliche Systeme in ihrem Verhalten beeinflusst. Das bezieht sich auf unterschiedliche Dienste, die etwa der Namensauflösung von Rechnern dienen (NIS, NIS+, DNS), aber auch auf Mechanismen, die zur Authentifizierung von Benutzern verwendet werden. Beispiel (gekürzt): passwd: files group: files hosts: networks:
files dns files dns
In diesem Fall verwendet das Authentifizierungsmodul (PAM) Dateien zur Authentifizierung für Benutzer und Gruppen. Das sind dann die bereits aus vorangegangenen Kapiteln bekannten /etc/passwd, /etc/group und eventuelle shadowDateien. Bei der Namensauflösung wird auch zunächst die /etc/hosts-Datei und erst danach DNS kontaktiert. /etc/host.conf Die Datei /etc/host.conf steuert im Gegensatz zur /etc/nsswitch.conf ausschließlich die Auflösungsreihenfolge des DNS-Clients. Der Verwendungszweck ist aber in Bezug auf DNS eigentlich ähnlich. Beispiel: order hosts, bind multi on
Der order-Eintrag sorgt dafür, dass bei der Auflösung eines DNS-Namens als Erstes die Datei /etc/hosts konsultiert wird. Ist der gesuchte Host-Name hier nicht eingetragen, wird der DNS-Server abgefragt, der in der /etc/resolv.conf eingetragen ist. Der weitverbreitete Eintrag multi on sorgt dafür, dass der Resolver für einen Host, der mit mehreren IP-Adressen in der Datei /etc/hosts eingetragen ist, diese auch dem Client zur Verfügung stellt.
Konfigurationsprogramme für Netzwerk-Clients ifconfig Das Programm ifconfig wird verwendet, um Netzwerkkarten zu konfigurieren oder deren Konfiguration zu prüfen. Sie können mit ifconfig auch Netzwerk-
432
1451.book Seite 433 Dienstag, 7. Juli 2009 2:18 14
109.2 Grundlegende Netz-Konfiguration
schnittstellen aktivieren bzw. deaktivieren. Aber Vorsicht: Es gehen dann alle Einträge in Routing-Tabellen, die mit dieser Netzwerkschnittstelle assoziiert sind, verloren. Diese Einträge werden beim erneuten Start dieser Netzwerkschnittstelle nicht automatisch neu erstellt. Das Programm ifconfig wird keine Erfolgsmeldungen von sich geben, wenn Sie es verwenden. Deshalb müssen Sie die vorgenommenen Einstellungen selbst prüfen. Hier zur Veranschaulichung ein paar Anwendungsbeispiele: root@ipcop:~ # ifconfig eth1 down
Die Netzwerkschnittstelle eth1 ist nun deaktiviert. Es folgt eine Neukonfiguration der Karte mit IP-Adresse und Subnetzmaske: root@ipcop:~ # ifconfig eth1 209.14.5.88 netmask 255.255.255.192
Nach Rekonfiguration einer Schnittstelle ist keine Aktivierung erforderlich. Das geschieht implizit von selbst. Wäre die IP-Konfiguration nicht verändert worden, hätten Sie eth1 durch folgendes Kommando wieder gestartet: root@ipcop:~ # ifconfig eth1 up
Die aktuelle Konfiguration aller Netzwerkschnittstellen können Sie durch Eingabe von ifconfig ohne Parameter ansehen. Wenn Sie der Übersichtlichkeit halber nur eine einzige Schnittstelle betrachten wollen, geben Sie deren Namen mit auf der Befehlszeile an. Das Ergebnis der vorangegangenen Beispiele sollte schließlich noch überprüft werden: root@ipcop:~ # ifconfig eth1 eth1 Link encap:Ethernet HWaddr 00:0C:29:9E:F5:EF inet addr:209.14.5.88 Bcast:209.14.5.255 Mask:255.255.255.192 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Interrupt:10 Base address:0x1400
Alle Parameter sehen aus wie erwartet. Bleibt nur noch die Frage nach den verlorengegangenen Routing-Tabellen-Einträgen zu klären. Doch dazu später mehr. ifup und ifdown Die Kommandos ifup und ifdown werden verwendet, um bereits konfigurierte Netzwerkschnittstellen zu starten oder zu stoppen. Das setzt natürlich voraus, dass eine entsprechende Konfigurationsdatei bereits existiert. Normalerweise werden ifup und ifdown lediglich beim Systemstart ausgeführt und nicht manuell verwendet. Die Verwendung variiert von Distribution zu Distribution. Einige be-
433
1451.book Seite 434 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
nutzen diese beiden Programme gar nicht. Für das Beispiel soll es diesmal Debian sein. Die Konfigurationsdatei /etc/network/interfaces, die von Debian verwendet wird, hat (gekürzt) folgenden Inhalt: debian40:/etc/network# cat interfaces allow-hotplug eth0 iface eth0 inet static address 192.168.0.52 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 auto eth0
Es sind also alle Informationen vorhanden, um die Netzwerkkarte zu bestücken. Durch einfache Eingabe von ifup eth0 kann diese Netzwerkschnittstelle nutzbar gemacht werden. Wenn Sie eine andere Distribution als Debian verwenden, finden Sie im unteren Bereich der Manpage zu ifup den Pfad zur entsprechenden Konfigurationsdatei. Der Inhalt sollte natürlich ähnlich sein. route Mit dem Kommando route können Sie Routing-Tabellen überprüfen und anpassen. Aus einem vorangegangenen Beispiel zu ifconfig steht immer noch die Prüfung und Rekonfiguration des Routings aus. Durch die Deaktivierung der Schnittstelle eth1 waren nämlich alle mit dieser Netzwerkkarte assoziierten RoutingEinträge entfernt worden. Ein Blick in die Routing-Tabelle des Rechners zeigt das Dilemma: root@ipcop:~ # route Kernel IP routing table Destination Gateway 209.14.5.64 * 192.168.0.0 *
Genmask F. M. Ref. Use Iface 255.255.255.192 U 0 0 0 eth1 255.255.255.0 U 0 0 0 eth0
Es sind nur noch die Standardeinträge vorhanden, die mit den Netzwerken in Verbindung stehen, in denen der Computer selbst vertreten ist. Es fehlt das Standardgateway, das vor allem für die Kommunikation mit dem Internet erforderlich ist. Außerdem gibt es noch zwei interne Netze, die dieser Host über einen anderen Router erreichen können muss. Die fehlenden Einträge werden mit den folgenden Befehlen ergänzt: root@ipcop:~ # route add default gw 209.14.5.65
Das Standardgateway zum Internet steht somit fest. Fehlen nur noch die Einträge, die den Weg in die beiden privaten Netze aufzeigen:
434
1451.book Seite 435 Dienstag, 7. Juli 2009 2:18 14
109.3 Grundlegende Netz-Fehlersuche
# route add -net 172.16.0.0 netmask 255.255.0.0 192.168.0.10 # route add -net 172.20.0.0 netmask 255.255.0.0 192.168.0.10
Die resultierende Routing-Tabelle sieht dann so aus: root@ipcop:~ # route Kernel IP routing table Destination Gateway 209.14.5.64 * 192.168.0.0 * 172.16.0.0 192.168.0.10 172.20.0.0 192.168.0.10 default 209.14.5.65
Genmask 255.255.255.192 255.255.255.0 255.255.0.0 255.255.0.0 0.0.0.0
F. U U U U UG
M. 0 0 0 0 0
Ref. 0 0 0 0 0
Use Iface 0 eth1 0 eth0 0 eth1 0 eth1 0 eth1
An dieser Tabelle können Sie leicht erkennen, wie das Routing abläuft. In den ersten beiden Netzen 209.14.5.64 und 192.168.0.0 ist der Computer selbst vertreten. Der Stern (*) als Gateway-Eintrag weist darauf hin, dass der Rechner für die Auslieferung der Pakete in diese Netze selbst zuständig ist. Die beiden privaten Netze 172.16.0.0/16 und 172.20.0.0/16 erreicht er über das Gateway mit der IPAdresse 192.168.0.10. Alle Pakete, die nicht aufgrund anderer Routing-Einträge zuzuordnen sind, schickt der Computer an das Standardgateway. Dieses ist mit default bezeichnet und hat die IP-Adresse 209.14.5.65.
109.3 Grundlegende Netz-Fehlersuche Wichtung: 4 Beschreibung: Kandidaten sollten in der Lage sein, Netzwerkprobleme auf ClientRechnern zu lösen. Wichtigste Wissensgebiete: 왘
Netzschnittstellen und Routing-Tabellen manuell und automatisch konfigurieren; dies umfasst das Hinzufügen, Starten, Stoppen, Neustarten, Löschen oder Umkonfigurieren von Netzschnittstellen
왘
die Routing-Tabelle ändern, anschauen oder konfigurieren und eine falsch gesetzte Default-Route manuell richtigstellen
왘
Probleme mit der Netzkonfiguration finden und lösen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
ifconfig
왘
ifup
435
1451.book Seite 436 Dienstag, 7. Juli 2009 2:18 14
Topic 109: Netz-Grundlagen
왘
ifdown
왘
route
왘
host
왘
hostname
왘
dig
왘
netstat
왘
ping
왘
traceroute
Allgemeines Die Inhalte dieses und des folgenden Kapitels sind bereits unter Topic 109.2 beschrieben worden. Es soll sich hier also nur noch auf die wenigen fehlenden Themen beschränkt werden. Prüfungstipp Die Mehrfachnennung von Tools zur Diagnose sollte für deren Wichtigkeit sensibilisieren. Setzen Sie sich also unbedingt gewissenhaft mit diesen Werkzeugen auseinander und arbeiten Sie Topic 109.2 gegebenenfalls noch einmal durch.
netstat Bei netstat handelt es sich um ein reines Diagnoseprogramm. Sie verwenden es zum Anzeigen von Netzwerkverbindungen, Routing-Tabellen oder Statistiken der Netzwerkschnittstellen. Es gibt sogar noch mehr Verwendungsmöglichkeiten, aber diese sind nicht Bestandteil der Prüfung. Wichtige Optionen sollten Sie sich aber einprägen: 왘
-n sorgt für eine rein numerische Anzeige, beschleunigt also die Ausgabe, weil
keine Namensauflösung stattfinden muss. 왘
-r zeigt die Routing-Tabelle an.
왘
-i zeigt eine Liste der Netzwerkschnittstellen (interfaces) an.
왘
-a zeigt alle Verbindungen an und nicht nur die, an denen der Host selber
lauscht. 왘
-c sorgt für eine fortlaufende Aktualisierung der Anzeige und kann mit
(Strg) + (C) abgebrochen werden.
Die Ausgaben von netstat sind sehr umfangreich, weshalb auf ein ungefiltertes Beispiel verzichtet werden soll. Es ist sinnvoll, die Ausgabe der Kommandos je-
436
1451.book Seite 437 Dienstag, 7. Juli 2009 2:18 14
109.4 Client-seitiges DNS konfigurieren
weils an less zu übergeben oder eventuell eine Filterung mit grep durchzuführen. archangel:/ # netstat -an | grep ":80 " tcp 0 0 :::80 :::* tcp 0 0 192.168.0.1:80 192.168.0.10:3983
LISTEN ESTABLISHED
Sie sehen, dass es sich bei diesem Computer um einen Webserver handelt, zu dem auch eine Client-Verbindung hergestellt (established) wurde.
109.4 Client-seitiges DNS konfigurieren Wichtung: 2 Beschreibung: Kandidaten sollten in der Lage sein, DNS auf einem Client-Rechner einzurichten. Wichtigste Wissensgebiete: 왘
den Gebrauch von DNS auf dem lokalen System demonstrieren
왘
die Reihenfolge der Namensauflösung ändern
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/hosts
왘
/etc/resolv.conf
왘
/etc/nsswitch.conf
Allgemeines Die Themen dieses Kapitels sind ebenfalls bereits vollständig in Thema 109.2 beschrieben worden. Prüfungstipp Das Thema Konfiguration von DNS-Servern ist aus dem Fragenkatalog der LPIC-1Prüfungen komplett entfernt worden. Die mehrfache Nennung der Konfigurationsdateien für den DNS-Client ist allerdings ein klarer Hinweis auf eine Priorisierung der clientseitigen Thematik.
437
1451.book Seite 438 Dienstag, 7. Juli 2009 2:18 14
1451.book Seite 439 Dienstag, 7. Juli 2009 2:18 14
Ein Administrator muss natürlich auch in der Lage sein, Sicherheitsbedrohungen in seinem Netzwerk aufzufinden und zu beseitigen. Die folgenden Themen bieten dazu eine gute Grundlage.
Topic 110: Sicherheit 110.1 Administrationsaufgaben für Sicherheit durchführen Wichtung: 3 Beschreibung: Kandidaten sollten wissen, wie sie die Systemkonfiguration prüfen, um die Sicherheit des Rechners in Übereinstimmung mit örtlichen Sicherheitsrichtlinien zu gewährleisten. Wichtigste Wissensgebiete: 왘
ein System nach Dateien mit gesetztem SUID/SGID-Bit durchsuchen
왘
Benutzerkennwörter und den Verfall von Kennwörtern setzen oder ändern
왘
mit nmap und netstat offene Ports auf einem System finden können
왘
Grenzen für Benutzeranmeldungen, Prozesse und Speicherverbrauch setzen
왘
grundlegende Konfiguration und Gebrauch von sudo
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
find
왘
passwd
왘
lsof
왘
nmap
왘
chage
왘
netstat
왘
sudo
왘
/etc/sudoers
왘
su
439
1451.book Seite 440 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
왘
usermod
왘
ulimit
Allgemeines Dieses und das folgende Kapitel beschäftigen sich mit einem bunten Gemisch verschiedener Werkzeuge, die Sie zur Absicherung eines Systems oder zum Auffinden von Sicherheitsbedrohungen verwenden können. Einige dieser Programme haben Sie bereits in anderen Zusammenhängen kennengelernt.
Auffinden von Dateien mit gesetztem SUID/SGID-Bit Programme mit gesetztem SUID-Bit werden hauptsächlich verwendet, wenn Benutzer eine Aufgabe im Sicherheitskontext des root ausführen müssen. Prominentestes Beispiel hierfür ist sicherlich das Programm passwd. Damit kann auch ein gewöhnlicher Benutzer sein Kennwort ändern, wofür ein Schreibzugriff auf die Datei /etc/shadow notwendig ist. Diese Datei ist für Benutzer normalerweise noch nicht einmal lesbar. Da ein Programm mit gesetztem SUID-Bit mit erhöhten Rechten arbeitet, stellt es auch eine Sicherheitsbedrohung dar. Deshalb sollte regelmäßig nach Programmen mit diesem Bit gesucht werden. Diese Aufgabe kann natürlich cron übernehmen. Folgendes Kommando findet die besagten Programme: root@ubuntu-server:~# find / -perm -u+s
Wenn Sie auch Dateien mit gesetztem GID-Bit suchen, verwenden Sie stattdessen folgendes Kommando: root@ubuntu-server:~# find / -perm -g+s
Es gibt mehrere Varianten von diesen Kommandozeilen. Sehr typisch ist etwa das Unterdrücken der Suche in /proc oder /dev.
Setzen oder Löschen von Passwörtern und Passwort-Verfallszeiten Das Setzen von Kennwörtern für Benutzer mit dem Programm passwd ist Ihnen schon bestens bekannt und muss sicherlich nicht noch einmal wiederholt werden. Bereits besprochen wurde auch die Konfiguration von Kennwortverfallszeiten mithilfe des Programms chage.
nmap, netstat und socket Um Sicherheitsbedrohung durch Programme zu erkennen, die unbemerkt Kontakt zu anderen Computern aufnehmen, können Sie die Programme nmap oder 440
1451.book Seite 441 Dienstag, 7. Juli 2009 2:18 14
110.1 Administrationsaufgaben für Sicherheit durchführen
auch netstat verwenden. Diese Möglichkeiten wurden aber bereits in einem früheren Kapitel erörtert. Etwas weniger bekannt ist die Verwendung des Programms socket. Mit socket können Sie nach außen hin sogar das Vorhandensein eines bestimmten Serverdienstes simulieren. Das Programm horcht dann an dem angelegten Socket und gibt eingehende Anforderungen am Bildschirm aus. Das folgende Beispiel wird das Ganze verdeutlichen. Es wird ein Webserver simuliert und ein Zugriff von außen beobachtet: root@ubuntu-server:~# socket -sl 80 GET / HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */* Accept-Language: de UA-CPU: x86 Accept-Encoding: gzip, deflate If-Modified-Since: Thu, 18 Oct 2007 20:18:23 GMT If-None-Match: "941c5-53-1eb3c1c0" User-Agent: Mozilla/ 4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322) Host: ubuntu-server Connection: Keep-Alive
Ressourcenverwendung kontrollieren Damit ein Benutzer nicht unkontrolliert die Ressourcen eines Systems für sich in Anspruch nehmen kann, kann die Verwendung dieser Ressourcen mit dem Programm ulimit beschränkt werden. Die Einstellungen hierfür sollten genauso wie die initiale PATH-Variable in der Datei /etc/profile festgelegt werden. Bei diesen Festlegungen gibt es ein Hardlimit (ulimit -H), das ausschließlich vom root festgelegt werden kann, und ein Softlimit (ulimit -S), das der Benutzer selbst bis an die Grenzen des Hardlimits heran erhöhen kann. Die Auflistung eines ulimit sieht aus wie folgt: dominik@archangel:/> ulimit -a core file size (blocks, -c) data seg size (kbytes, -d) file size (blocks, -f) max locked memory (kbytes, -l) max memory size (kbytes, -m) open files (-n) pipe size (512 bytes, -p) stack size (kbytes, -s)
0 unlimited unlimited 32 unlimited 1024 8 unlimited
441
1451.book Seite 442 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
cpu time max user processes virtual memory
(seconds, -t) unlimited (-u) 20465 (kbytes, -v) unlimited
Prüfungstipp Merken Sie sich vor allem für die Prüfung, dass ulimit in /etc/profile konfiguriert werden sollte.
Es folgen ein paar Beispieleinträge: 왘
ulimit -c 20000 – die Maximalgröße für core-files ist 20 MB.
왘
ulimit -d 15000 – die maximale Datengröße eines Programms ist 15 MB.
왘
ulimit -Sd $(ulimit -Hd) limitiert die Größe des Softlimit für die maximale
Datengröße eines Programms auf die Größe des korrespondierenden Hardlimits.
Offene Dateien Es kann während einer Sicherheitsüberprüfung notwendig werden, festzustellen, welche Dateien auf einem System gerade geöffnet sind und durch wen diese offen gehalten werden. Für diese Aufgabe können Sie lsof (list open files) verwenden. Es macht wenig Sinn, das Programm ohne Optionen zu verwenden, weil dann alle geöffneten Dateien angezeigt werden. Das sind normalerweise extrem viele: root@archangel:/# lsof |wc -l 7256
In diesem Fall sind es also 7.256 Dateien. (Sie erinnern sich: wc –l zählt die Anzahl der Zeilen.) Dieses Werkzeug kann z.B. sehr nützlich sein, wenn ein beschäftigter Datenträger sich mit umount nicht aushängen lässt, weil noch Dateien im Hintergrund geöffnet sind. Sie können die zugreifenden Prozesse ermitteln und diese dann mit kill beenden. Danach lässt sich der Datenträger aushängen. Im folgenden Beispiel lässt sich die USB-Festplatte nicht aushängen, die unter /media/disk-1 eingehängt ist: root@archangel:~# umount /media/disk-1 umount: /media/disk-1: Das Gerät wird momentan noch benutzt
Als Erstes muss jetzt festgestellt werden, welche Prozesse auf das Laufwerk zugreifen. Dann kann auch eine Entscheidung getroffen werden, ob es sich um
442
1451.book Seite 443 Dienstag, 7. Juli 2009 2:18 14
110.1 Administrationsaufgaben für Sicherheit durchführen
einen kritischen Prozess handelt, der durch gewaltsames Beenden Datenverluste verursachen könnte: root@archangel:~# lsof /media/disk-1 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME bash 13601 root cwd DIR 8,33 4096 2244609 /media/disk-1
Das sieht ungefährlich aus. Es wird auf keine Dateien zugegriffen. Lediglich eine Shell (bash) mit der Prozess-ID (PID) 13601 hält ein Verzeichnis (DIR) geöffnet. Es besteht also kein Anlass zur Sorge, wenn Sie diesen Zugriff gewaltsam unterbinden: root@archangel:~# kill –s 9 13601
Bei einer wiederholten Abfrage mit lsof wird es jetzt keine Antwort mehr geben, und der Datenträger kann ausgehängt werden. Die Anzeige von lsof kann übrigens sehr gut gefiltert werden. Für das vorangegangene Beispiel hätte als Ausgabe die PID gereicht. Besonders dann, wenn viele Dateien geöffnet gewesen wären, hätten Sie leicht folgendes Konstrukt realisieren können: root@archangel:~# kill –s 9 $(lsof –t /media/disk-1)
Es wären dann alle Prozesse, die auf /media/disk-1 zugegriffen hätten, auf einen Schlag beendet worden. Was die Überprüfung von Netzwerkdiensten anbelangt, kann lsof auch wertvolle Dienste leisten. Sie können nämlich mit der Option –i sehr leicht feststellen, welche Prozesse Verbindungen zum Netzwerk herstellen: root@archangel:~# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME apache2 7605 oot 3u IPv4 23571 TCP *:www (LISTEN) apache2 11047 www-data 3u IPv4 23571 TCP *:www (LISTEN) apache2 11048 www-data 3u IPv4 23571 TCP *:www (LISTEN) apache2 11049 www-data 3u IPv4 23571 TCP *:www (LISTEN) apache2 11050 www-data 3u IPv4 23571 TCP *:www (LISTEN) apache2 11051 www-data 3u IPv4 23571 TCP *:www (LISTEN) apache2 13968 www-data 3u IPv4 23571 TCP *:www (LISTEN) apache2 13973 www-data 3u IPv4 23571 TCP *:www (LISTEN) apache2 13973 www-data 8u IPv4 70619 TCP . archangel.homelinux.net: www-> 24.215.7.162:49668 (ESTABLISHED) apache2 13974 www-data 3u IPv4 23571 TCP *:www (LISTEN) apache2 13975 www-data 3u IPv4 23571 TCP *:www (LISTEN) apache2 13977 www-data 3u IPv4 23571 TCP *:www (LISTEN)
443
1451.book Seite 444 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
An Port 80 lauscht also ein Apache-Webserver. Die meisten Abhörer (listener) warten auf eingehende Verbindungen (LISTEN). Es gibt eine eingehende Verbindung, die aktiv von einem Computer mit der Adresse 24.215.7.162 genutzt wird (ESTABLISHED). Hinweis Mit lsof haben Sie sehr viele Möglichkeiten. Das Beste wird sein, wenn Sie selbst in der Manpage zu lsof ein wenig nach Optionen Ausschau halten, die Sie vielleicht selbst gut gebrauchen können.
Arbeiten mit erhöhten Rechten Wie Sie wahrscheinlich schon oft gelesen haben, soll man alltägliche Arbeiten nicht mit dem Konto root (oder unter Windows Administrator) ausführen, weil das aus verschiedenen Sicherheitsaspekten heraus bedenklich wäre. Sie sollen also diesmal von den Einzelheiten verschont bleiben, und das Thema bleibt bei den prüfungsrelevanten Details. Superuser Mit dem Kommando su können Sie sich in einer normalen Sitzung, in der Sie sich als gewöhnlicher Benutzer angemeldet haben, vorübergehend root-Rechte verschaffen. Geben Sie dazu einfach das Kommando su ohne Optionen ein. Um wieder in die ursprüngliche Umgebung mit normalen Benutzerrechten zurückzukehren, verwenden Sie das Kommando exit. Merken Sie sich bitte, dass Sie an dieser Stelle nicht logout verwenden können, weil es sich nicht um eine Login-Shell handelt! Sie erhalten dann eine Fehlermeldung: harald@archangel:~$ su Passwort: root@archangel:/home/harald# logout bash: logout: not login shell: use `exit'
Sie können mit su auch vorübergehend die Identität eines anderen Benutzers annehmen. Das ist vor allem dann nötig, wenn Sie die Umgebung des entsprechenden Benutzers überprüfen wollen. Verwenden Sie hierfür die Option –l. root@archangel:~# su -l dominik dominik@archangel:~$
Das funktioniert ohne weitere Passwortabfrage. Sie müssen allerdings über rootRechte verfügen, um diesen Vorgang ausführen zu können.
444
1451.book Seite 445 Dienstag, 7. Juli 2009 2:18 14
110.1 Administrationsaufgaben für Sicherheit durchführen
Sudoer Wenn Sie lediglich ein einziges Kommando mit root-Rechten ausführen möchten, können Sie das Programm sudo verwenden. Zu diesem Zweck stellen Sie dem eigentlichen Kommando einfach ein sudo voran. Sie werden dann (zumindest in der Voreinstellung) nach ihrem Passwort gefragt: harald@archangel:~$ sudo apt-get install orca [sudo] password for harald:
Nach der Eingabe des angeforderten Passwortes wird das Kommando im Sicherheitskontext des root ausgeführt. Sollten Sie bereits mit root-Rechten angemeldet sein, können Sie alternativ auch Programme im Sicherheitskontext eines beliebigen anderen Benutzers ausführen. Das ist allerdings eher selten nötig. Damit Sie sudo verwenden können, müssen Sie direkt oder indirekt in der Konfigurationsdatei /etc/sudoers die Berechtigung dazu erhalten. Beachten Sie bitte, dass Sie zum Bearbeiten der Datei das Programm visudo verwenden müssen. Wie Sie schon dem Namen des Kommandos entnehmen können, kommt hier im Hintergrund der vi zum Einsatz, und das Programm wird auch entsprechend bedient. Inhaltlich wird festgelegt, wer von wo aus (welches Terminal) was ausführen darf. Für den root sieht das ganz einfach so aus: root
ALL=(ALL) ALL
Sie können außer dem root auf dieselbe Weise weitere Sudoer direkt anlegen. Eine andere Möglichkeit besteht darin, über Gruppenzugehörigkeiten weitere Sudoer indirekt zu bestimmen. Gängig ist hier die Gruppe »admin«, die z.B. unter Ubuntu schon per Voreinstellung vorhanden und in der Datei /etc/sudoers eingetragen ist: %admin ALL=(ALL) ALL
In diesem Fall können in der Datei /etc/group weitere administrative Konten kommagetrennt definiert werden, wie folgt: admin:x:115:harald,michaela,dominik
Ein Versuch, das Kommando sudo unberechtigt zu verwenden, wird übrigens protokolliert. Bei vielen Distributionen wird sogar eine Mail-Benachrichtigung an den root gesendet.
445
1451.book Seite 446 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
110.2 Einen Rechner absichern Wichtung: 3 Beschreibung: Kandidaten sollten wissen, wie sie eine grundlegende Rechnersicherheit konfigurieren können. Wichtigste Wissensgebiete: 왘
Kenntnisse über Shadow-Kennwörter und wie sie funktionieren
왘
nicht verwendete Netzdienste abschalten
왘
die Rolle der TCP-Wrapper verstehen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
/etc/nologin
왘
/etc/passwd
왘
/etc/shadow
왘
/etc/xinetd.d/*
왘
/etc/xinetd.conf
왘
/etc/inet.d/*
왘
/etc/inetd.conf
왘
/etc/inittab
왘
/etc/init.d/*
왘
/etc/hosts.allow
왘
/etc/hosts.deny
Allgemeines Wie Dienste unter Linux gestartet und beendet werden, wissen Sie bereits aus vorangegangenen Kapiteln. Deshalb beschäftigt sich dieses Kapitel hauptsächlich mit der Konfiguration von Superdaemons und TCP-Wrappern. Beide Instanzen haben den Sinn, einen Computer sicherer gegenüber Angreifern zu machen und vorhandene Hardwareressourcen sinnvoll auszunutzen.
Superdaemons inetd Der inetd ist der ältere Vertreter der beiden Superdaemons. Er wird normalerweise beim Systemstart geladen und liest dann seine Konfigurationsdatei ein. Zur
446
1451.book Seite 447 Dienstag, 7. Juli 2009 2:18 14
110.2 Einen Rechner absichern
Laufzeit lauscht er stellvertretend für benötigte Serverdienste an deren TCP- und UDP-Ports. Wenn nun ein Client eine Verbindung zu einem von inetd kontrollierten Netzwerkdienst aufnimmt, startet der inetd diesen Dienst und übergibt ihm die Kontrolle über die Sitzung. Damit inetd feststellen kann für welche Dienste er zuständig ist, müssen Sie die Datei /etc/inetd.conf editieren. In den meisten Fällen sind bereits alle Dienste, die inetd starten kann, in dieser Konfigurationsdatei eingetragen, aber mit einem Doppelkreuz ausdokumentiert. Damit der Dienst erreichbar wird, müssen Sie also lediglich das Doppelkreuz entfernen und inetd anschließend neu starten. Wenn Sie inetd nicht neu starten, liest dieser seine Konfigurationsdatei nicht neu ein, und der gewünschte Dienst wird nicht verfügbar. Sie sehen einen Ausschnitt aus einer /etc/inetd.conf-Datei, an der die einzelnen Komponenten dieser Konfigurationsdatei verdeutlicht werden sollen: klogin eklogin kshell imap2 imaps
stream stream stream stream stream
tcp tcp tcp tcp tcp
nowait nowait nowait nowait nowait
root root root root root
/usr/sbin/tcpd rlogind -k /usr/sbin/tcpd rlogind -k -x /usr/sbin/tcpd rshd -k /usr/sbin/tcpd /usr/sbin/imapd /usr/sbin/tcpd /usr/sbin/imapd
Die einzelnen Elemente der Spalten bedeuten (in Bezug auf die erste Zeile) Folgendes: 왘
klogin ist der Name des Dienstes, so wie er in der Datei /etc/services eingetra-
gen ist. 왘
stream zeigt den Socket-Typ. Gültige Werte sind stream, dgram, raw, rdm und seqpacket. Gängig sind allerdings nur stream für TCP-basierte Dienste und dgram für UDP-basierte Protkolle.
왘
tcp ist das verwendete Transportprotokoll. Hier sind nur TCP und UDP üblich. Es sind aber alle Protokolle denkbar, die in /etc/protcols eingetragen sind.
왘
nowait ist das Flag. Es gibt an dieser Stelle nur die Flags wait oder nowait.
왘
root ist der Benutzer, in dessen Kontext der Daemon gestartet wird.
왘
/usr/sbin/tcpd rlogind -k Hier steht das zu startende Programm und eventuelle Startparameter. In diesem Fall ist das Programm der rlogind, der aber von einem zwischengeschalteten TCP-Wrapper (dem tcpd) ausgeführt wird.
Mit dem Tool tcpdchk können Sie eine inetd.conf-Datei auf Syntaxfehler prüfen. Wenn /etc/inetd.conf fehlerfrei sein sollte, gibt tcpdchk keine Erfolgsmeldung aus. Im Fall eines Fehlers bekommen Sie eine Meldung, die so aussehen könnte:
447
1451.book Seite 448 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
debian40:~# tcpdchk warning: /etc/inetd.conf, line 28: usr/sbin/ tcpd: not found: No such file or directory warning: /etc/inetd.conf, line 28: usr/sbin/tcpd: file is set-uid or set-gid
xinetd Der modernere Nachfahre von inetd ist der xinetd. Er hat nicht nur einen integrierten TCP-Wrapper, sondern er kann (im Gegensatz zu inetd) auch Dienste starten, die über keinen Eintrag in der Datei /etc/services verfügen. Weil der xinetd erheblich mehr Optionen bietet als inetd, benötigt er auch eine komplexere Konfigurationsdatei. Die Hauptkonfigurationsdatei heißt /etc/xinetd.conf. In den meisten Fällen gibt es aber in dieser Datei eine include-Anweisung, die dafür sorgt, dass zusätzlich zur xinetd.conf alle Dateien, die sich im Verzeichnis /etc/ xinetd.d befinden, ebenfalls ausgewertet werden. Hierdurch wird die Konfiguration erheblich übersichtlicher. Interessant für die Administration sind hauptsächlich diese Einzeldateien innerhalb von /etc/xinetd.d. Hier ein Beispiel: # imap – imap mail daemon service imap { disable = socket_type = protocol = wait = user = server = flags = }
no stream tcp no root /usr/sbin/imapd IPv4
Die meisten Optionen erkennen Sie aus der inetd.conf wieder, oder sie sind selbsterklärend. In der Grundkonfiguration sind, genau wie bei inetd, normalerweise alle benötigten Dienste enthalten. Sie müssen dann lediglich aus dem »yes« hinter der Option disable ein »no« machen und xinetd neu starten, damit er die Konfiguration neu einliest. Beachten Sie, dass der xinetd die Serverdienste direkt startet, ohne diese erst an den TCP-Wrapper tcpd zu übergeben, wie inetd das tun würde. In xinetd ist der TCP-Wrapper funktional integriert, weshalb er tcpd auch nicht benötigt.
TCP-Wrapper konfigurieren Die Konfiguration von TCP-Wrappern erfolgt über die Dateien /etc/hosts.allow und /etc/hosts.deny. Hierbei macht es keinen Unterschied, ob das System mit
448
1451.book Seite 449 Dienstag, 7. Juli 2009 2:18 14
110.2 Einen Rechner absichern
inetd arbeitet und der TCP-Wrapper somit tcpd ist, oder ob xinetd zum Einsatz
kommt, der einen integrierten TCP-Wrapper besitzt. Die Verarbeitungsweise der beiden Konfigurationsdateien ist etwas außergewöhnlich. 왘
Wenn in der Datei /etc/hosts.allow eine zutreffende Regel gefunden wird, dann wird der Zugriff, basierend auf dieser Regel, erlaubt. Die hosts.denyDatei wird dann nicht mehr verarbeitet.
왘
Wenn in der Datei /etc/hosts.deny eine zutreffende Regel gefunden wird, dann wird der Zugriff, basierend auf dieser Regel, verweigert.
왘
Wenn keine Einträge in den beiden Dateien zutreffen, wird der Zugriff erteilt.
왘
Ist eine Datei oder sind beide Dateien nicht vorhanden, wird das gewertet, als wäre(n) die Datei(en) leer.
Es bringt also nichts, über die hosts.allow-Datei einem einzelnen Host explizit Zugriff auf einen Dienst zu gewähren, ohne es den anderen Hosts explizit zu verbieten. Eine »wasserdichte« Grundkonfiguration erreichen Sie, indem Sie in die Datei /etc/hosts.deny folgende Zeile schreiben: ALL : ALL
Damit ist zunächst allen alles verboten. Sie müssen alle erlaubten Zugriffe explizit in der Datei /etc/hosts.allow eintragen. z.B.: ALL : LOCAL
Dieser Eintrag erlaubt allen lokalen Hosts den Zugriff auf alle Dienste. Als lokal werden alle Computer betrachtet, in deren Name kein Punkt vorkommt. Dieser muss dann folglich Mitglied derselben Domäne sein wie der Ziel-Host.
Die Datei /etc/nologin Mit Einträgen in der Datei /etc/nologin können Sie verhindern, dass sich ein Benutzer interaktiv an Ihrem System anmeldet. Das ist zum Beispiel interessant, wenn ein Anwender nur über einen Browser in einer Webanwendung oder zur Abholung von Mails authentifiziert werden soll. Es genügt, die Datei zu erstellen und jeden Benutzer in einer eigenen Zeile mit seinem Anmeldenamen aufzuführen. Diese Benutzer können sich dann sofort nicht mehr anmelden. Hinweis Einige Themen, die unter den wichtigen Wissensgebieten aufgeführt wurden, sind bereits in vorangegangenen Kapiteln behandelt worden. Das betrifft z.B. die /etc/inittab, /etc/passwd, /etc/shadow und /etc/services. Lesen Sie über diese Dateien lieber noch einmal nach, wenn Sie sich an deren Funktionsweise nicht mehr genau erinnern.
449
1451.book Seite 450 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
110.3 Daten durch Verschlüsselung schützen Wichtung: 3 Beschreibung: Der Kandidat sollte in der Lage sein, Public-Key-Techniken zum Schutz von Daten und Kommunikation einzusetzen. Wichtigste Wissensgebiete: 왘
einen OpenSSH-2-Client grundlegend konfigurieren und verwenden
왘
die Rolle von OpenSSH-2-Rechnerschlüsseln verstehen
왘
GnuPG grundlegend konfigurieren und verwenden
왘
SSH-Port-Tunnel (auch X11-Tunnel) verstehen
Liste wichtiger Dateien, Verzeichnisse und Anwendungen: 왘
ssh
왘
ssh-keygen
왘
ssh-agent
왘
ssh-add
왘
~/.ssh/id_rsa and id_rsa.pub
왘
~/.ssh/id_dsa and id_dsa.pub
왘
/etc/ssh/ssh_host_rsa_key and ssh_host_rsa_key.pub
왘
/etc/ssh/ssh_host_dsa_key and ssh_host_dsa_key.pub
왘
~/.ssh/authorized_keys
왘
/etc/ssh_known_hosts
왘
gpg
왘
~/.gnupg/*
Allgemeines Damit Sie einen Computer, der sich nicht in unmittelbarer Nähe befindet, remote administrieren können, benötigen Sie eine entsprechende Zugriffsmöglichkeit. Solche Aufgaben wurden früher mit Telnet durchgeführt. Heute sollten Sie Telnet nur noch der Allgemeinbildung wegen kennen und wissen, dass Telnet eine Konsolensitzung über den Port 23 herstellte. Da Telnet keinen Mechanismus zur Verschlüsselung von Authentifizierungs- oder gar Nutzdaten in sich birgt, wird es heute normalerweise nicht mehr verwendet. Als sichere Alternative kommt SSH (Secure Shell) zum Einsatz. Mit SSH (inzwischen SSH2) ist es aber nicht nur mög-
450
1451.book Seite 451 Dienstag, 7. Juli 2009 2:18 14
110.3 Daten durch Verschlüsselung schützen
lich, eine Konsolensitzung zu initiieren. Sie können mit SSH auch Daten transferieren und sogar beliebige andere Protokolle tunneln.
SSH verwenden In den meisten Linux-Distributionen ist SSH nicht nur enthalten, sondern standardmäßig auch installiert. Sie können den SSH-Daemon dann einfach starten wie jeden anderen Daemon auch: archangel:~ # /etc/rc.d/sshd start
Zwar unterstützt der sshd auch die Verwendung eines TCP-Wrappers, und er ist auch von inetd bzw. xinetd aus startbar, aber diese Vorgehensweise wird nicht empfohlen.
SSH-Client-Verbindung Wenn eine Verbindung von einem Linux-System zu einem anderen aufgebaut werden soll, starten Sie einfach ssh und übergeben den Host-Namen als Parameter. Sie werden dann zur Eingabe eines Kennwortes aufgefordert: archangel:~ # ssh ubuntu-server root@ubuntu-server's password:
Sollten Sie sich an der entfernten Maschine nicht mit dem gleichen Benutzerkonto anmelden wollen, das Sie derzeit lokal verwenden, müssen Sie die Option -l verwenden: archangel:~ # ssh -l willi ubuntu-server willi@ubuntu-server's password:
Sie können über diese Verbindung auch grafische Anwendungen, die unter XWindows laufen, tunneln. Das setzt allerdings voraus, dass Sie die ssh-Verbindung von einem X-Terminal aus initiieren, damit ein Display für die Anwendung auf dem Rechner verfügbar ist, an dem Sie sitzen. Es ist sehr einfach, eine solche Anwendung zu tunneln. Initiieren Sie die Verbindung einfach zusätzlich mit der Option –X. Auf der erscheinenden Konsole des Remotesystems führen Sie die Anwendung dann einfach aus: archangel:~ # ssh -l willi –X ubuntu-server willi@ubuntu-server's password: willi@ubuntu-server:~ # openoffice
Die Anwendung wird auf dem entfernten System ausgeführt, während die grafische Ausgabe und die Bedienung lokal an dem SSH-Client-Rechner erfolgen. Das hier beschriebene Verfahren wird als X11-Tunnel bezeichnet.
451
1451.book Seite 452 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
Sie können durch einen SSH-Tunnel auch beliebige andere Ports weiterleiten. Zu diesem Zweck ordnen Sie einen lokalen Port einer entfernten IP-Adresse in Kombination mit einem (entfernten) Ziel-Port zu. Im folgenden Beispiel wird auf einen Terminalserver in einem entfernten Netzwerk zugegriffen, der hinter einem SSH-Server residiert. Die private IP-Adresse des Terminalservers sei 192.168.50.10. Der Terminalserver lauscht an Port 3389. Der SSH-Server ist über eine Dyndns-Adresse meinserver.dyndns.org erreichbar. Der Verbindungsaufbau aus der Ferne geht so vonstatten, dass zunächst die SSH-Verbindung initiiert wird: Linux:~ # ssh meinserver.dyndns.org –L 4711:192.168.50.10:3389
Mit der Option –L wird der lokale Port 4711 an die entfernte IP-Adresse 192.168.50.10 mit der Portnummer 3389 weitergeleitet. Alle Verbindungen, die mit diesem lokalen Port hergestellt werden, werden nun an 192.168.50.10:3389 weitergeleitet. Sie können also in diesem Fall einen Terminal-Dienste-Client (tsclient) starten und als Ziel localhost:4711 angeben. Hinweis Privilegierte Ports können nur durch den Benutzer root weitergeleitet werden. Alle anderen Ports (auch der oben verwendete RDP-Port) können auch von normalen Benutzern umgeleitet werden.
Wenn Sie von einem Windows-Computer aus auf einen Linux-Host zugreifen wollen, dann kommt das frei verfügbare SSH-Client-Programm putty zum Einsatz. Das Tunneln von Ports inklusive von X11 ist auch mit putty durchführbar. Sie erhalten putty unter http://www.chiark.greenend.org.uk. Es ist auch möglich, die Authentifizierung über RSA- oder DSA-Schlüssel durchzuführen. Um diese Methode wird es etwas später in diesem Kapitel gehen.
SSH-Konfigurationsdateien /etc/ssh/sshd_config Die Datei sshd_config wird für die Konfiguration von sshd, also den SSH-Server, verwendet. Hier können z.B. folgende Parameter festgelegt werden: 왘
Port 22
왘
Protocol 2,1
왘
ListenAddress 192.168.0.58
왘
PermitrootLogin no
452
1451.book Seite 453 Dienstag, 7. Juli 2009 2:18 14
110.3 Daten durch Verschlüsselung schützen
In diesem Beispiel verwendet der sshd den Standard-Port 22. Es können sowohl ssh2- als auch »normale« ssh-Verbindungen hergestellt werden. Sicherheitshalber kann sich der root nicht direkt einloggen. Der Zugriff ist auf die interne Schnittstelle des Rechners 192.168.0.58 beschränkt. /etc/ssh/ssh_config Die Konfigurationsdatei ssh_config befasst sich ausschließlich mit der client-seitigen Konfiguration von SSH. Im Prinzip werden hier dieselben Parameter festgelegt wie in der Konfigurationsdatei für den Server. Sie sollten vor allem darauf achten, dass Sie die beiden gerade behandelten Dateien nicht aufgrund ihrer Namensähnlichkeit verwechseln. /etc/hosts.allow und /etc/hosts.deny Der Zugriff auf SSH kann auch mit den beiden Dateien /etc/hosts.allow und /etc/ hosts.deny gesteuert werden. Wie Sie diese Dateien verwenden können, ist aber bereits an anderer Stelle ausführlich beschrieben worden. Aufgrund der Wichtigkeit für die Prüfung sei hier nur noch einmal darauf hingewiesen, dass die hosts.allow-Datei Vorrang vor der Datei hosts.deny hat. Wenn einem Host also aufgrund eines Eintrags in der Datei hosts.allow Zugriff auf SSH gewährt wurde, kann das durch keinen Eintrag in hosts.deny zurückgenommen werden. /etc/nologin Wenn Sie vorübergehend den Zugriff auf SSH verhindern müssen, können Sie einfach eine leere Datei /etc/nologin erstellen. Es kann sich dann nur noch root per SSH verbinden. Sie können in der Datei auch eine informative Nachricht an Benutzer hinterlassen, die sich anmelden wollen. Die Nachricht wird dann bei einem Anmeldeversuch im SSH-Client-Programm angezeigt. /etc/ssh_known_hosts Die Datei ssh_known_hosts kann sich als systemweite Datei im Verzeichnis /etc befinden oder auch unterhalb des Heimatverzeichnis eines Benutzers in ~/.ssh/ ssh_know_hosts. In jedem Fall beinhaltet sie die öffentlichen RSA-Schlüssel bereits bekannter Hosts. /etc/sshrc Das Skript sshrc wird ausgeführt, sobald sich ein Benutzer über SSH authentifiziert hat. Das geschieht noch vor dem Laden einer Shell.
453
1451.book Seite 454 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
Authentifizierung der Server mit Schlüsseln Bei der Anmeldung über ssh authentifiziert sich der Server gegenüber dem Client mit seinem Hostkey. Bei der ersten Anmeldung ist der Ziel-Host dem Client aber noch nicht bekannt, weshalb eine Warnmeldung ausgegeben wird. In der Ausgabe erscheint auch der Fingerprint des Hostkeys. Theoretisch wäre jetzt eine telefonische Rückversicherung möglich, ob der Zielserver wirklich der ist, der er vorgibt zu sein. Wenn der Benutzer die Warnmeldung mit yes bestätigt, wird der Hostkey des Servers in die Datei ~./ssh/known_hosts des Benutzers eingetragen. Bei späteren Anmeldungen entfällt dann deshalb die Warnmeldung: root@DR02:~# ssh 192.168.0.150 The authenticity of host '[192.168.0.150]:22 ([192.168.0.150]:22)' can't be established. RSA key fingerprint is 6a:aa:a2:b2:a8:25:21:42:3e:25:49:81:b3:8d:3d:98. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[192.168.0.150]:22' (RSA) to the list of known hosts. [email protected]'s password:
Es gibt auch eine systemweite Datei /etc/known_hosts. Sie können hier die Hostkeys aller zu kontaktierenden SSH-Server direkt einbinden, um Warnmeldungen zu vermeiden.
Generieren von Schlüsseln Mit ssh-keygen können Sie u.a. neue Hostkeys für Ihr System generieren. Typischerweise werden drei Schlüsselpaare erstellt: root@DR02:/# ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): /etc/ssh/ssh_host_dsa_key Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /etc/ssh/ssh_host_dsa_key. Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub. The key fingerprint is: 68:b0:73:be:0f:fe:b2:13:09:4a:c7:e7:c8:0b:61:d4 root@DR02
Nachdem Sie das Kommando abgeschickt haben, müssen Sie interaktiv die Zieldatei angeben (Hier: /etc/ssh/ssh_host_dsa_key), weil das Programm in der Voreinstellung davon ausgeht, dass ein Schlüsselpaar für einen Benutzer erstellt werden soll und nicht, wie hier, für einen Computer. Optional (und empfohle-
454
1451.book Seite 455 Dienstag, 7. Juli 2009 2:18 14
110.3 Daten durch Verschlüsselung schützen
nermaßen) können Sie eine Passphrase für das Schlüsselpaar angeben. Das Ergebnis werden zwei Dateien sein. Die Datei /etc/ssh/ssh_host_dsa_key enthält sowohl den privaten als auch den öffentlichen Schlüssel des Hosts. In der Datei /etc/ssh/ ssh_host_dsa_key.pub (die Erweiterung steht für public) ist nur der öffentliche Schlüssel enthalten. Dieser öffentliche Schlüssel kann in die known_hosts-Dateien der Client-Computer verteilt werden: root@client:/# cat ssh_host_dsa_key.pub >> /etc/known_hosts
Der DSA-Schlüssel aus dem vorangegangenen Beispiel dient ausschließlich der Signatur. Für eine Verschlüsselung ist ein RSA-Key nötig. Auch er kann mit einem ssh-keygen-Kommando erzeugt werden: root@DR02:/# ssh-keygen -t rsa
Die weitere Verfahrensweise entspricht der bei DSA. Als Zieldatei wird diesmal allerdings /etc/ssh/ssh_host_rsa_key angegeben. In dieser Datei liegt dann entsprechend sowohl der private als auch der öffentliche RSA-Schlüssel. In der Datei /etc/ssh/ssh_host_rsa_key.pub wird entsprechend nur der öffentliche Schlüssel hinterlegt. Dieser kann wiederum zur Verteilung in known_hosts-Dateien verwendet werden: root@client:/# cat ssh_host_rsa_key.pub >> /etc/known_hosts
Wenn noch ssh-Clients der Version 1 verwendet werden, benötigen Sie einen weiteren Hostkey. Erzeugen Sie diesen mit: root@DR02:/# ssh-keygen -t rsa1
Sie sollten diesen Schlüssel in /etc/ssh/ssh_host_key abspeichern. Wie Sie wahrscheinlich schon vermuten, liegt der öffentliche Schlüssel exportfähig in der Datei /etc/ssh/ssh_host_key.pub. In der Realität sollten Sie allerdings die Verwendung von ssh 1 vermeiden.
Benutzerauthentifizierung mit Schlüsseln Wenn Sie die Benutzerauthentifizierung für SSH-Sitzungen ohne Passwort durchführen möchten, können Sie auch mit Schlüsseln arbeiten. Es müssen dann Schlüsselpaare für den Benutzer generiert werden. Anschließend muss der öffentliche Schlüssel des Benutzers auf dem Zielsystem in die zum Benutzer gehörende Datei ~/.ssh/authorized_keys integriert werden. Die Vorgehensweise ist ähnlich wie bei der Erstellung der Hostkeys, nur dass Sie diesmal keinen Pfad zur Zieldatei angeben müssen. Wenn bei der Authentifizierung kein Passwort verwendet werden soll, dann geben Sie auch keine Passphrase an:
455
1451.book Seite 456 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
michaela@archangel:/$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/michaela/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/michaela/.ssh/id_rsa. Your public key has been saved in /home/michaela/.ssh/id_rsa.pub. The key fingerprint is: 2e:99:f4:2e:70:8f:f3:c3:80:7f:df:f7:12:8f:3d:d9 michaela@archangel
Durch die Ausführung dieses Kommandos (das muss der User übrigens selbst machen) werden die Dateien ~/.ssh/id_rsa und ~/.ssh/id_rsa.pub erstellt. Ähnlich wie beim Hostkey enthält die Datei id_rsa den privaten und den öffentlichen Schlüssel, während die Datei id_rsa.pub nur den öffentlichen Schlüssel enthält. Für das DSA-Schlüsselpaar gilt entsprechend das Kommando: michaela@archangel:/$ ssh-keygen -t dsa
Es werden dann die Dateien ~/.ssh/id_dsa und ~/.ssh/id_dsa.pub entsprechend generiert. Damit Sie die Schlüssel zur Authentifizierung verwenden können, müssen diese, wie bereits erwähnt, in die authorized_keys des Zielsystems implementiert werden. Das geht am bequemsten mit scp. Vorher sollten Sie die Dateien aber umbenennen (bzw. umkopieren), damit eventuell auf dem Zielsystem existierende Dateien nicht überschrieben werden. Sie benötigen hierfür nur die beiden Dateien mit den öffentlichen Schlüsseln: michaela@archangel:~/.ssh$ cp id_dsa.pub temp1 michaela@archangel:~/.ssh$ cp id_rsa.pub temp2
Im nächsten Schritt werden die beiden Dateien auf den Zielserver kopiert. Das kann der Benutzer selbst durchführen. Er wird allerdings jetzt noch nach seinem Passwort gefragt: ...@archangel:~/.ssh$ scp temp? [email protected]:~/.ssh/ [email protected]'s password: temp1 100 % 608 0.6KB/s 00:00 temp2 100 % 400 0.4KB/s 00:00
Zum Schluss müssen die beiden temporären Dateien (ganz einfach mit cat) in die authorized_keys auf dem Zielserver implementiert werden. Dazu ist eine gewöhnliche SSH-Sitzung nötig: michaela@archangel:~/.ssh$ ssh 217.18.182.170 [email protected]'s password:
456
1451.book Seite 457 Dienstag, 7. Juli 2009 2:18 14
110.3 Daten durch Verschlüsselung schützen
Linux DRINET 2.6.24-16-generic #1 SMP Thu Apr 10 13:23:42 UTC 2008 i686 michaela@DRINET:~$ cat .ssh/temp1 >> .ssh/authorized_keys michaela@DRINET:~$ cat .ssh/temp2 >> .ssh/authorized_keys
Ab sofort kann sich die Benutzerin Michaela auch ohne Eingabe eines Passwortes bei diesem Server anmelden.
Der Authentifizierungsagent Ein anderer Weg, Authentifizierungen auszuführen, ohne Passworte eingeben zu müssen, ist der ssh-agent. Er ist in der Lage, mehrere Schlüssel für einen Benutzer zu verwalten. Zu diesem Zweck sollte er frühzeitig während der Startphase von X ausgeführt werden. Mit dem Kommandozeilen-Tool ssh-add können Sie dem ssh-agent weitere Schlüssel hinzufügen. Ohne Optionen ausgeführt, sucht das Programm automatisch nach ~/.ssh/id_rsa, ~/.ssh/id_dsa und ~/.ssh/identity. Es können aber auch gezielt Schlüssel angegeben werden. Wichtige Optionen sind: 왘
-l – listet die Fingerabdrücke der verfügbaren Schlüssel auf
왘
-d – entfernt einen einzelnen (angegebenen) Schlüssel vom Agenten
왘
-D – entfernt alle Schlüssel vom Agenten
왘
-s – liest Schlüssel von Smartcard
왘
-e – entfernt Schlüssel der Smartcard
왘
-x – sperrt den Agenten (mit Passwortschutz)
왘
-X – entsperrt den Agenten
Warnhinweis Sie sollten normalerweise automatische Anmeldungen jeder Art vermeiden. Ein kurzzeitig unbeaufsichtigter Computer kann sonst zu einer schweren Sicherheitsbedrohung für Ihr Netzwerk werden. Bei einem Betriebssystem, das ohnehin überwiegend durch Tastatureingaben verwaltet wird, ist die Eingabe eines Passwortes wohl zumutbar.
GnuPG Wenn auf einfache Weise Daten verschlüsselt oder signiert werden sollen, kommt GnuPG (in der Szene auch kurz als GPG bezeichnet) zum Zug. Die Abkürzung steht für GNU Privacy Guard, und die Namensähnlichkeit mit PGP ist nicht zufällig. Vielmehr ist GPG eine Weiterentwicklung als Ersatz für PGP. Das Verschlüsselungsverfahren von GPG ist asymmetrisch. Deshalb ist bei der Verwen-
457
1451.book Seite 458 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
dung von GnuPG ein Schlüsselpaar erforderlich. Der öffentliche Schlüssel ist der Verschlüsselungsschlüssel, und der private Schlüssel ist der Entschlüsselungsschlüssel. Daten, die mit einem öffentlichen Schlüssel verschlüsselt wurden, können nur mit dem dazu passenden privaten Schlüssel wieder entschlüsselt werden. Außerdem wird der private Schlüssel beim Generieren von Signaturen verwendet. Das sind also gleich zwei gute Gründe, den privaten Schlüssel zu hüten wie einen Augapfel. Wenn Sie beabsichtigen, eine große Datenmenge (z.B. eine Videosammlung) zu verschlüsseln, ist ein symmetrisches Verfahren übrigens aufgrund der einfacheren Algorithmen angebrachter. Die Verschlüsselung ist dann erheblich schneller. Zur Sicherheit können Sie den Schlüssel der symmetrischen Verschlüsselung anschließend mit einem asymmetrischen Schlüssel verschlüsseln. Man spricht dann bei dem verwendeten öffentlichen Schlüssel auch von einem Schlüsselverschlüsselungsschlüssel. Um die Verwendung von Verschlüsselung auch für weniger versierte Benutzer zugänglich zu machen, wurden verschiedene Frontends für grafische Oberflächen entwickelt. Als allgemeines Frontend kann der GNU Privacy Assistant (GPA) verwendet werden. Es gibt aber auch Frontends, die auf bestimmte Desktop-Umgebungen spezialisiert sind. So gibt es für Gnome das Programm Seahorse, und für den KDE wurde KGpg entwickelt. Damit Windows-Computer in einem solchen Umfeld nicht zur Sicherheitslücke werden, können diese Gpg4win einsetzen, das übrigens absolut kompatibel zu den Linux-Versionen ist. Verschlüsselung ist besonders bei der Übermittelung von Mail-Nachrichten notwendig. Es sei an dieser Stelle einmal darauf hingewiesen, dass sich ein SMTP-Server dieser Problematik nicht annimmt. Auch wenn beim Transport SSL oder TLS verwendet werden, so werden die Mails bei der Lagerung auf dem Server unverschlüsselt gespeichert. Sie sollten also den Inhalt unbedingt schützen, wenn Sie beim Mailversand nicht den gleichen Sicherheitsstandard haben möchten wie bei einer Postkarte. Es gibt mehrere Mailprogramme, die GPG direkt oder indirekt über Plugins unterstützen. Beispiele hierfür sind Evolution, Mutt, Kmail, Thunderbird, Eudora, Enigmail, Apple Mail und sogar Microsoft Outlook. Für die LPI-Prüfung müssen Sie natürlich nicht mit den Frontends arbeiten können, sondern das Programm gpg selbst mit den dazugehörenden Dateien kennen. Das Programm ist sehr umfangreich, wie ein Blick in die Manpage sofort verrät.
Schlüsselerstellung mit GnuPG Damit es losgehen kann, benötigen Sie erst einmal ein Schlüsselpaar. Dieses können Sie mit der Kommandozeile gpg –gen-key generieren:
458
1451.book Seite 459 Dienstag, 7. Juli 2009 2:18 14
110.3 Daten durch Verschlüsselung schützen
harald@archangel:~$ gpg --gen-key gpg (GnuPG) 1.4.6; Copyright (C) 2006 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. Bitte wählen Sie, welche Art von Schlüssel Sie möchten: (1) DSA and Elgamal (default) (2) DSA (nur signieren/beglaubigen) (5) RSA (nur signieren/beglaubigen) Ihre Auswahl? 1
Damit das Schlüsselpaar auch zur Verschlüsselung und nicht nur zur Signatur verwendet werden kann, wählen Sie die erste Option. Das DSA-Schlüsselpaar wird 1024 Bit haben. ELG-E Schlüssel können zwischen 1024 und 4096 Bits lang sein. Welche Schlüssellänge wünschen Sie? (2048) 2048
Die vorgeschlagene Schlüssellänge von 2048 Bits ist für die meisten Zwecke absolut ausreichend. Die verlangte Schlüssellänge beträgt 2048 Bit Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll. 0 = Schlüssel verfällt nie = Schlüssel verfällt nach n Tagen w = Schlüssel verfällt nach n Wochen m = Schlüssel verfällt nach n Monaten y = Schlüssel verfällt nach n Jahren Wie lange bleibt der Schlüssel gültig? (0)
Sie können nun festlegen, wie lange der Schlüssel gültig sein soll. Diese Option ist allerdings nur für die Gültigkeit von Signaturen von Belang (ähnlich wie bei einem abgelaufenen Personalausweis). Ein verfallener Schlüssel kann aber weiterhin Daten ver- bzw. entschlüsseln. Schlüssel verfällt nie Ist dies richtig? (j/N) j You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " Ihr Name ("Vorname Nachname"):
459
1451.book Seite 460 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
Nachdem die Sicherheitsabfrage bezüglich des nie verfallenden Schlüssels beantwortet wurde, kann mit der Angabe der persönlichen Daten begonnen werden. Bei GnuPG werden der Vor- und Nachname sowie eine Mail-Adresse verwendet: Ihr Name ("Vorname Nachname"): Harald Maaßen Email-Adresse: [email protected] Kommentar: kein Kommentar Sie benutzen den Zeichensatz `utf-8' Sie haben diese User-ID gewählt: "Harald Maaßen (kein Kommentar) " Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden?
Nachdem alle Angaben gemacht wurden, können noch einmal Korrekturen durchgeführt werden. Ansonsten kann mit F oder mit B fortgesetzt werden. Geben Sie die Passphrase ein: Str3ng_G3h3im!
Die Passphrase, die Sie hier angeben, wird sowohl bei der Verschlüsselung als auch bei der Entschlüsselung von Daten benötigt. Auch wenn Sie den Schlüssel für Signaturzwecke verwenden, müssen Sie diese Passphrase eingeben. Geben Sie die Passphrase nochmal ein: Str3ng_G3h3im!
Nachdem Sie die Passphrase noch einmal wiederholt haben, geht es los. Das Schlüsselpaar wird erstellt. Während der Erstellung der Schlüssel sollten Sie den PC weiter verwenden. Aus den Aktivitäten des Computers werden die Zufallswerte für die Schlüssel gewonnen. Wir müssen eine ganze Menge Zufallswerte erzeugen. Sie können dies unterstützen, indem Sie z.B. in einem anderen Fenster / Konsole irgendetwas tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen. +++++.+++++++++++++++++++++++++.+++++++++++++++.++++++++++...+++++++ ++++++++++++++++++.++++++++++.++++++++++++++++++++...+++++++++++++++ +++++>+++++..+++++>+++++<+++++.........>+++++........<+++++......... .............+++++++++++++++++++++++++..++++++++++++++++++++++++++++ +++++++.++++++++++..++++++++++.++++++++++.++++++++++++++++++++..++++ +++++++++++.++++++++++.+++++.+++++..+++++>++++++++++>.+++++.....>+++ ++.<+++++...............>+++++..................<.+++++...+++++^^^ gpg: Schlüssel 5AFD1C62 ist als uneingeschränkt vertrauenswürdig gekennzeichnet Öffentlichen und geheimen Schlüssel erzeugt und signiert. gpg: "Trust-DB" wird überprüft gpg: 3 marginal-needed, 1 complete-needed, PGP Vertrauensmodell gpg: Tiefe: 0 gültig: 2 signiert: 0 Vertrauen:
460
1451.book Seite 461 Dienstag, 7. Juli 2009 2:18 14
110.3 Daten durch Verschlüsselung schützen
0-, 0q, 0n, 0m, 0f, 2u pub 1024D/5AFD1C62 2009-05-10 Schl.-Fingerabdruck = 68CC 4780 3B86 59C6 8EDA 5AFD 1C62 uid Harald Maaßen (kein Kommentar) sub 2048g/5F3B10AC 2009-05-10
3F8C BF5D 1278
Wenn auf dem System wenig Aktivität stattfindet, wird das Programm Sie dazu auffordern, mit dem Computer zu arbeiten, damit die nötigen Zufallswerte schneller gesammelt werden können. Das fertige Schlüsselpaar wird dann im Heimverzeichnis des Benutzers abgelegt.
GnuPG Dateien Das Standardverzeichnis für GnuPG ist ~/.gnupg. In diesem Verzeichnis befinden sich folgende Dateien: harald@archangel:~/.gnupg$ insgesamt 24 -rw------- 1 harald harald -rw------- 1 harald harald -rw------- 1 harald harald -rw------- 1 harald harald -rw------- 1 harald harald -rw------- 1 harald harald
ls -l 28 2374 2374 600 2672 1360
2008-09-19 2009-05-10 2009-05-10 2009-05-10 2009-05-10 2009-05-10
21:45 19:27 19:27 19:27 19:27 19:27
gpg.conf pubring.gpg pubring.gpg~ random_seed secring.gpg trustdb.gpg
Die Datei pubring.gpg enthält die öffentlichen Schlüssel eines Benutzers. Das Wort ring im Dateinamen ist an Keyring, also Schlüsselbund, angelehnt. Entsprechend enthält die Datei secring.gpg die geheimen Schlüssel eines Benutzers. In trustedb.gpg sind die Signaturschlüssel anderer Benutzer gespeichert, denen ein Benutzer selbst vertraut. Die Datei gpg.conf kann von einem Benutzer verwendet werden, um ständig wiederkehrende Optionen automatisch an das Kommando gpg anzuhängen. Zu diesem Zweck werden diese Optionen einfach in die Datei gpg.conf eingetragen. Die beiden führenden Striche des jeweiligen Kommandos werden hierbei allerdings weggelassen. Es können nur lange Optionen verwendet werden, nicht die Kurzformen.
461
1451.book Seite 462 Dienstag, 7. Juli 2009 2:18 14
Topic 110: Sicherheit
GnuPG verwenden Nachdem die Schlüssel erstellt wurden, kann GPG verwendet werden. Es soll eine Datei mit dem Kommandozeilenprogramm gpg verschlüsselt werden. Im ursprünglichen Zustand sieht die Datei so aus: harald@archangel:~/Dokumente/Privat$ ls -l insgesamt 804 -rw-r--r-- 1 harald harald 817152 2009-05-11 17:59 Tagebuch
Das ist soweit nichts Besonderes. Es handelt sich hier um eine ganz normale Datei. Im folgenden Arbeitsschritt wird die Datei mit dem eben erstellten Schlüssel verschlüsselt: harald@archangel:~/Dokumente/Privat$ gpg --encrypt Tagebuch Sie haben keine User-ID angegeben (Sie können die Option "-r" verwenden). Derzeitige Empfängerliste: Geben Sie die User-ID ein. Beenden mit einer leeren Zeile:
An dieser Stelle wird die User-ID abgefragt, für den Fall, dass mehrere Schlüsselpaare vorhanden sind. Diese ID besteht aus dem Vor- und Zunamen des Benutzers, wie sie beim Erzeugen des Schlüssels angegeben wurden. Es genügt aber, die ersten Zeichen einzugeben, bis eine Eindeutigkeit erreicht wird. In diesem Fall gibt es nur ein einziges Schlüsselpaar, weshalb die Eingabe des Anfangsbuchstaben H ausreichend ist. Das Programm setzt dann folgendermaßen fort: Derzeitige Empfängerliste: 2048g/51C49F2C 2009-0504 "Harald Maaßen " Geben Sie die User-ID ein. Beenden mit einer leeren Zeile:
Sollte die User-ID falsch erkannt worden sein (weil doch noch keine Eindeutigkeit vorlag), kann jetzt noch einmal eine Korrektur durchgeführt werden. Ansonsten können Sie mit der Eingabetaste fortfahren, und die Datei wird verschlüsselt. Bitte beachten Sie unbedingt, dass die ursprüngliche Datei erhalten bleibt und ggf. von Hand gelöscht werden muss. Die verschlüsselte Datei erhält die Extension gpg: harald@archangel:~/Dokumente/Privat$ ls -l insgesamt 1024 -rw-r--r-- 1 harald harald 817152 2009-05-11 18:10 Tagebuch -rw-r--r-- 1 harald harald 219493 2009-05-11 18:22 Tagebuch.gpg
Davon ausgehend, dass die unverschlüsselte Datei gelöscht wurde, kann die verschlüsselte Datei mit folgendem Kommando wieder hergestellt werden:
462
1451.book Seite 463 Dienstag, 7. Juli 2009 2:18 14
110.3 Daten durch Verschlüsselung schützen
harald@archangel:~/Dokumente/Privat$ gpg --decrypt Tagebuch.gpg > Tagebuch Sie benötigen einen Passwortsatz, um den geheimen Schlüssel für Nutzer: "Harald Maaßen " zu entsperren 2048-Bit ELG-E Schlüssel, ID 51C49F2C, erstellt 2009-05-04 (Hauptschlüssel-ID A2DEEC7F) Geben Sie die Passphrase ein:
An dieser Stelle benötigen Sie die Passphrase, die bei der Erstellung de Schlüsselpaares angegeben wurde. Das war in diesem Beispiel Str3ng_G3h3im!. Das Programm wird fortgesetzt, und die Entschlüsselung erfolgt: gpg: verschlüsselt mit 2048-Bit ELG-E Schlüssel, ID 51C49F2C, erzeugt 2009-05-04 "Harald Maaßen "
Beachten Sie, dass bei der Entschlüsselung ein Redirektor und eine Zieldatei verwendet wurden. Das Programm würde die entschlüsselten Daten ansonsten nach stdout schreiben. Bei der Verschlüsselung musste hingegen kein Ziel angegeben werden. Auch in diesem Fall muss gegebenenfalls die verschlüsselte Datei von Hand gelöscht werden: harald@archangel:~/Dokumente/Privat$ ls -l insgesamt 1024 -rw-r--r-- 1 harald harald 817152 2009-05-11 18:29 Tagebuch -rw-r--r-- 1 harald harald 219493 2009-05-11 18:22 Tagebuch.gpg
463
1451.book Seite 464 Dienstag, 7. Juli 2009 2:18 14
1451.book Seite 465 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102 Die folgenden Fragen sollen Ihnen helfen, sich an die Art der Fragestellung in der wirklichen Prüfung zu gewöhnen. Sie sollten diese Fragen nicht einfach auswendig lernen, sondern versuchen, die Antworten zu jeder einzelnen Frage zu verstehen. Deshalb werden auch die entsprechend falschen Antworten im Lösungsteil des Buches bei Bedarf genau besprochen. Das Üben mit diesen Fragen soll Sie auch an die Herangehensweise an eventuell Ihnen unbekannte Themen nahebringen. Ein unbekanntes Kommando in einer Frage ist nämlich kein Grund, eine Frage nicht beantworten zu können. Oft führt ein wenig Logik oder das Ausschlussverfahren dennoch zum Ziel.
Fragen Frage 1: Welche der folgenden Dateien konfiguriert den Syslog-Daemon? 첸 A: slog.conf 첸 B: syslog.conf 첸 C: syslogd 첸 D: system.conf Frage 2: Bei welchem der folgenden Programme handelt es sich um einen Editor, der gleichzeitig einen Screenreader enthält? 첸 A: Orca 첸 B: StarWriter 첸 C: vi-read 첸 D: Emacspeak
465
1451.book Seite 466 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 3: Welcher der folgenden Syslog-Level bezeichnet die höchste Priorität eines Ereignisses? 첸 A: alert 첸 B: error 첸 C: critical 첸 D: emerg Frage 4: Welche der folgenden Angaben in der Datei /etc/passwd sind zwingend erforderlich, wenn ein Benutzerkonto angelegt wird? Wählen Sie alle nötigen Angaben. 첸 A: password age 첸 B: account name 첸 C: userid 첸 D: groupid 첸 E: minimum password length Frage 5: Nach der Installation von XFree86 bemerken Sie, dass Ihr Bildschirm beim Start von X nicht zentriert ist. Welches Programm können Sie verwenden, um diese Einstellung zu korrigieren? 첸 A: XF86Setup 첸 B: xf86config 첸 C: xvideoagent 첸 D: xvidtune Frage 6: Wie heißt der Standard-Fontserver von XFree86? 첸 A: xfserver 첸 B: xfree86fs 첸 C: xfs 첸 D: Xfs 첸 E: xfontserver
466
1451.book Seite 467 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 7: Welches Kommando können Sie verwenden, um einen neuen RSA-Schlüssel für Ihren Computer zu generieren? 첸 A: ssh-keygen –t rsa 첸 B: ssh-keygen –t dsa 첸 C: ssh-keygen –d rsa 첸 D: ssh-keygen –d dsa Frage 8: Welche Abfolge von Programmen und Skripten beschreibt den Startprozess eines X-Window-Systems? 첸 A: xinit – Xsession – startx – Xclients 첸 B: kde – kdm – Xdefaults – Xclients 첸 C: startx – xinit – xinitrc – Xclients 첸 D: startx – Xclients – Xsession – fvwm 첸 E: startx – xinitrc – Xclients – xinit Frage 9: Sie beabsichtigen, GNOME als Ihren Fenstermanager zu verwenden. In welcher Konfigurationsdatei können Sie den Begrüßungstext anpassen? 첸 A: /etc/X11/gdm.conf 첸 B: /etc/X11/prefdm 첸 C: /etc/X11/XF86config 첸 D: /etc/X11/gdm/Init/Default Frage 10: Sie beabsichtigen, xdm als Ihren Fenstermanager zu verwenden. In welcher Datei können Sie die Hintergrundfarbe anpassen? 첸 A: /etc/X11/prefdm 첸 B: /etc/X11/xdm/Xsetup 첸 C: /etc/X11/XF86Config 첸 D: /etc/X11/xdm.conf
467
1451.book Seite 468 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 11: Bei welcher der folgenden SQL-Abfragen handelt es sich um ein funktionierendes Subselect? 첸 A: mysql> SUBSELECT feld1, feld2, feld3 FROM tabelleA 첸 B: mysql> SELECT t1.feld1, t1.feld2, t1.feld3, -> t1.tabelle1, t2.tabelle2 -> FROM tabelle2 t2 AND tabelle1 t1 -> RIGHT JOIN tabelle1 t1 ON t1.tabbelle1_id= t2.id;
첸 C: mysql> SELECT feld1, feld2, feld3 FROM tabelleA -> WHERE tabelleB_id IN -> (SELECT id FROM tabelleB ->
WHERE feld1='informationB'
-> );
첸 D: mysql> SELECT feld1, feld2, feld3 FROM tabelleA -> WHERE tabelleB_id SUBTABLE
Frage 12: Sie verwenden X-Window auf Ihrem Computer. Sie beabsichtigen, den Computern Comp1, Comp2 und Comp3 zu ermöglichen, remote auf Ihr X-Display zuzugreifen. Geben Sie das Kommando, die Optionen und alle notwendigen Argumente an, um dieses Ziel zu erreichen.
Frage 13: Welcher der folgenden Zeichencodes ist ein 4-Byte-Zeichencode, der geeignet ist, international alle Schriftzeichen aufzunehmen? 첸 A: ANSI 첸 B: ASCII 첸 C: ISO 8859-1 첸 D: UTF-8
468
1451.book Seite 469 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 14: Sie benutzen ein Programm unter X-Window, dessen Ausgabe Sie auf dem Bildschirm eines anderen Rechners anzeigen möchten. Welche Umgebungsvariable müssen Sie modifizieren, um dieses Ziel zu erreichen? 첸 A: DISPLAY 첸 B: REMOTE 첸 C: REMOTE_XWINDOW 첸 D: SCREEN Frage 15: Welche Parameter sollten in einer /etc/printcap-Datei eingetragen werden, damit auf einer entfernten Maschine gedruckt werden kann? (Wählen Sie zwei) 첸 A: rm 첸 B: rp 첸 C: remoteprinter 첸 D: netprint Frage 16: Welche der folgenden Kommandos benötigen Sie bei der Verwaltung von Druckwarteschlangen? 첸 A: lprm 첸 B: lpq 첸 C: lpio 첸 D: lpc 첸 E: lpstatus Frage 17: Welches Kommando sorgt dafür, dass ein Druckjob, unabhängig von seiner aktuellen Position, in der Druckerwarteschlange als Nächstes ausgedruckt wird? 첸 A: lpc topq 첸 B: lpc -t 첸 C: lpq -t 첸 D: lpc move 첸 E: lpc --next
469
1451.book Seite 470 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 18: Welches der folgenden Tools wird verwendet, um CUPS zu konfigurieren? 첸 A: lpc 첸 B: lpadmin 첸 C: lpr 첸 D: lpd 첸 E: lpctrl Frage 19: Welche der folgenden Dateien ist für die Konfiguration von Druckern und deren Warteschlangen zuständig? 첸 A: /etc/printd.conf 첸 B: /etc/printers 첸 C: /etc/printcap 첸 D: /etc/print.conf Frage 20: Mit welchem Kommandozeilen-Tool können Sie Informationen zum installierten X-Server erhalten? 첸 A: xhost 첸 B: xwininfo 첸 C: xfs 첸 D: xdpyinfo Frage 21: Sie erstellen ein Bash-Skript ~/meinscript mit folgendem Inhalt: shift echo $2
Sie führen das Skript mit ~/meinscript alpha beta gamma delta aus. Was wird das Skript ausgeben? 첸 A: alpha 첸 B: beta 첸 C: gamma 첸 D: delta
470
1451.book Seite 471 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 22: Was ist erwartungsgemäß der normale exit-Status eines Prozesses?
Frage 23: Sie haben Ihren Server gerade neu gestartet. Benutzer informieren Sie, dass der Server sichere Verbindungen ablehnt. Welche der folgenden ist die wahrscheinlichste Ursache für dieses Problem? 첸 A: Die Clients können den Namen des Servers nicht auflösen. 첸 B: sshd ist nicht konfiguriert, im Default-Runlevel zu starten. 첸 C: sshd benutzt tcpwrapper zur Sicherheit. 첸 D: Die öffentlichen Schlüssel auf dem Server wurden beschädigt. 첸 E: Die Benutzer müssen ihren SSH-Client neu starten. Frage 24: Sie möchten eine textbasierte Liste erstellen, die Informationen über das Starten und Stoppen aller Ihrer Daemons in allen Runlevels enthält. Geben Sie das einfachste Kommando an:
Frage 25: Eine Datei existiert auf einem Server, aber sie hat keinen Inhalt. Benutzer können keine Aufträge an einen angeschlossenen Drucker senden. Wählen Sie die richtige Datei, um das Problem zu lösen. 첸 A: /etc/hosts 첸 B: /etc/hosts.allow 첸 C: /etc/host.deny 첸 D: /etc/hosts.lpd 첸 E: /var/spool/hosts.lpd
471
1451.book Seite 472 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 26: Welcher der folgenden Einträge sorgt dafür, dass eine Datei namens myscript immer 23 Minuten nach Mitternacht und dann alle zwei Stunden ausgeführt wird? 첸 A: 23 0-23/2 * * * /myscript 첸 B: 23 */0-23 * * * /myscript 첸 C: 23 @2 * * * /myscript 첸 D: 11 2/0-23 * * * /myscript Frage 27: Mit welchem Kommando können Sie auf einem Red Hat-System ein Paket in nur einem Arbeitsgang aus dem Internet herunterladen und installieren? 첸 A: apt-get install paketname 첸 B: alien – extract paketname 첸 C: yum install paketname 첸 D: yum autoinstall paketname 첸 E: aptitude install paketname Frage 28: Sie arbeiten Ihre Sicherheitscheckliste ab, und einer der Einträge weist auf die Überprüfung der Datei /etc/passwd hin. Sie sehen sich die Datei an und stellen fest, dass bei den meisten Benutzern ein x in der zweiten Spalte steht, aber bei einigen ist eine 14-stellige Zeichenfolge eingetragen. Welche Aktion sollte (wenn überhaupt) durchgeführt werden? 첸 A: keine Aktion, die Benutzerkonten mit dem x sind gesperrte Konten 첸 B: Starten Sie pwconv, um die UNIX-Kennwörter in Shadow-Kennwörter umzuwandeln 첸 C: Benutzen Sie das passwd-Programm, um den Benutzern mit den gehashten Passwörtern neue Passwörter zu geben. 첸 D: Benutzen Sie das passwd-Programm, um den Benutzern mit dem x neue Passwörter zu geben. 첸 E: Keine Aktion; Linux weiß diese Situation zu handhaben und die User zu authentifizieren.
472
1451.book Seite 473 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 29: Wo sind die Voreinstellungen für das Kommando useradd gespeichert? 첸 A: /etc/default/useradd 첸 B: /etc/sysconfig/useradd.cfg 첸 C: /etc/.useradd 첸 D: /etc/defaults/useradd 첸 E: /etc/login.defs Frage 30: Welches Kommando erlaubt es Ihnen, die Voreinstellungen für das useraddKommando zu modifizieren? Geben Sie das Programm und die Optionen bzw. Argumente an:
Frage 31: Sie möchten den User Willi mitsamt einem Heimatverzeichnis Ihrem System hinzufügen. Geben Sie das einfachste Kommando mitsamt den benötigten Schaltern ein, um diese Aktion durchzuführen:
Frage 32: Sie möchten den Benutzer Stefan mitsamt seinem Heimatverzeichnis von Ihrem System entfernen. Geben Sie das einfachste Kommando mitsamt den benötigten Schaltern ein, um diese Aktion durchzuführen:
Frage 33: Sie haben gerade ein neues System installiert. Bevor Sie den ersten Benutzer anlegen, möchten Sie sicherstellen, dass alle neu erstellten Benutzer ein Verzeichnis /bin unterhalb ihres Heimatverzeichnisses vorfinden. In welchem Sub-Verzeichnis müssen Sie /bin anlegen, damit es bei jedem neu angelegten Benutzer automatisch erscheint?
473
1451.book Seite 474 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 34: Wir lautet der vollständige Pfad und Dateiname der Konfigurationsdatei für den Syslog?
Frage 35: Sie möchten eine Liste mit allen Benutzern erstellen, die kürzlich am System angemeldet waren. Die Datei /var/log/wtmp existiert. Welches Kommando würden Sie benutzen?
Frage 36: Welcher Daemon oder Dienst kann auch von einem Nicht-root-Benutzer konfiguriert werden? 첸 A: cron 첸 B: ntp 첸 C: lpr 첸 D: nmbd 첸 E: slocate Frage 37: Welche beiden Dateien sind dafür zuständig, Benutzern das Ausführen von cronJobs zu erlauben? 첸 A: /etc/cron.allow 첸 B: /var/spool/cron.allow 첸 C: /var/spool/cron.deny 첸 D: /etc/cron.deny
474
1451.book Seite 475 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 38: Um die Systemsicherheit zu erhöhen, ist es manchmal ratsam, Daemons mit Nicht-root-User-IDs auszuführen. Welcher der folgenden Dienste kann als Nichtroot-User laufen? 첸 A: inetd 첸 B: named 첸 C: rlogind 첸 D: crond 첸 E: telnetd Frage 39: Wie viele Felder gibt es in einer crontab-Tabelle, um die Zeit zur Ausführung eines cron-Jobs festzulegen? 첸 A:1 첸 B: 3 첸 C: 4 첸 D: 5 첸 E: 6 Frage 40: Welches Programm können Sie verwenden, um Informationen über die auf einem System verfügbaren Zeitzonen zu erhalten? 첸 A: hwclock 첸 B: tzselect 첸 C: date 첸 D: time
475
1451.book Seite 476 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 41: Welches Protokoll wird es Ihnen ermöglichen, die Zeit auf Ihren Hosts aktuell zu halten? 첸 A: ntp 첸 B: nntp 첸 C: ncftp 첸 D: inn 첸 E: ntime Frage 42: Welches Tool eignet sich am besten, um mehr über die Eigentümerschaft und das Management einer Webseite zu erfahren? 첸 A: tracert 첸 B: traceroute 첸 C: whois 첸 D: ping 첸 E: telnet Frage 43: Welches Protokoll wird von ping verwendet? 첸 A: TCP 첸 B: UDP 첸 C: SMB 첸 D: ICMP 첸 E: OSPF Frage 44: Sie vermuten, dass eine Ihrer Gateway-Maschinen ausgefallen ist, aber Sie sind nicht sicher, welche. Welches Kommando wird das Problem lokalisieren? 첸 A: ps 첸 B: netstat 첸 C: nslookup 첸 D: ifconfig 첸 E: traceroute
476
1451.book Seite 477 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 45: Sie erstellen und konfigurieren einen Bastions-Host, der als Router zwischen zwei internen Netzwerken fungieren soll. Beide Netzwerkschnittstellen, sowohl eth0 und eth1, erreichen Hosts in Ihrem jeweiligen Netzwerk. Aber die anderen Computer erreichen keine Hosts im jeweils anderen Netzwerksegment. Nachdem Sie bei den anderen Computern überprüft haben, dass diese über korrekte GatewayEinträge verfügen, vermuten Sie, dass auf dem Bastions-Host IP-Forwarding nicht aktiviert ist. Um diese Vermutung zu überprüfen, geben Sie den folgenden Befehl ein: cat /proc/sys/net/ipv4/_________. Sie erwarten die Antwort 1. Vervollständigen Sie die Zeile. Frage 46: Identifizieren Sie die Befehlszeile, die einen Standard-Gateway mit der IP-Adresse 192.168.1.1 definiert. 첸 A: netstat –add default gw 첸 B: route default 192.168.1.1 첸 C: ip route default 192.168.1.1 첸 D: route add default gw 192.168.1.1 첸 E: ifconfig default gw 192.168.1.1 eth0 Frage 47: Welche der folgenden Optionen beschleunigt traceroute bei Abfragen weit entfernter bzw. langsamer Netzwerke? 첸 A: -n 첸 B: -p 첸 C: -0 첸 D: -t 첸 E: -q
477
1451.book Seite 478 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 48: Welche Ports werden für FTP zur Steuerung und für Daten benötigt? 첸 A: 20 첸 B: 23 첸 C: 22 첸 D: 21 첸 E: 25 Frage 49: Welche der folgenden IP-Adressbereiche müssen laut RFC1918 als privat betrachtet werden? Wählen Sie alle zutreffenden. 첸 A: 10.0.0.0 – 10.255.255.255 첸 B: 192.168.0.0 – 192.168.255.255 첸 C: 172.16.0.0 – 172.31.255.255 첸 D: 191.168.16.0 – 192.168.31.255 첸 E: 172.40.0.0 – 172.40.255.255 Frage 50: Wie sieht die binäre Übersetzung für die IP-Adresse 192.168.1.10 aus? 첸 A: 11000000.10101000.00000001.00001010 첸 B: 01101010.11000100.10101000.00000001 첸 C: 00000001.00001010.11000000.10101000 첸 D: 10101000.00000001.00001010.11000000 첸 E: keine der angegebenen Frage 51: Ihre Server-Log-Dateien zeigen wiederholte Zugriffsversuche auf Port 143. Auf welchen Dienst wird zugegriffen? 첸 A: smtp 첸 B: imap 첸 C: pop3 첸 D: pop2 첸 E: nmbd
478
1451.book Seite 479 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 52: Die __________ wird von Computern benutzt, um festzustellen, welche Hosts sich in Ihrem eigenen Subnetz befinden und welche nicht. 첸 A: DNS 첸 B: ARP 첸 C: Gateway 첸 D: Subnetzmaske 첸 E: Routing-Protokoll Frage 53: Welche der folgenden Dateien enthält Definitionen wohlbekannter Ports samt ihren assoziierten Diensten und Protokollen? 첸 A: /etc/services 첸 B: /etc/sysconfig/network-scripts 첸 C: /etc/services.conf 첸 D: /etc/inet/hosts 첸 E: keine der angegebenen Frage 54: Welcher wohlbekannte Dienst verwendet Port 25 und wird auf Hosts vorausgesetzt? 첸 A: SNMP, und er sollte deaktiviert werden, wenn man ihn nicht benötigt. 첸 B: SMTP, und es ist ein benötigter Dienst. 첸 C: SMTP, und er wird nur auf MX-Hosts vorausgesetzt. 첸 D: SLPD, und er wird nur benötigt, wenn LDAP-Dienste laufen. 첸 E: SSHD, und er ist Voraussetzung für sichere Anmeldungen. Frage 55: Welches Kommando zeigt aktive Verbindungen und Unix-Domain-Sockets für eine Linux-Maschine mit Netzwerkkarte an? Geben Sie nur das Kommando an.
479
1451.book Seite 480 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 56: Ihr Server verfügt über zwei voll funktionstüchtige Netzwerkkarten (NIC’s) mit einer korrekten IP-Konfiguration. Der Server führt keine Weiterleitung von IP-Paketen zwischen den Netzwerkkarten durch. Welches Kommando wird die Karten zur Weiterleitung veranlassen? 첸 A: setparam 1 > /proc/sys/net/ipv4/ip_autoconfig 첸 B: echo 1 > /proc/sys/net/ipv4/ip_forward 첸 C: set $=1 /proc/sys/net/ipv4/route 첸 D: cat $1 > /proc/sys/net/ethernet 첸 E: vi +/1 /proc/sys/net/unix/max_dgram_qlen Frage 57: In welcher Datei können Sie die Namensauflösung so konfigurieren, dass bei einer Anfrage als Erstes die Datei hosts verwendet wird? Geben Sie den Pfad und die Datei an.
Frage 58: Welche Dienste sind notwendig, um es einem Windows 98-Client zu ermöglichen, auf Netzlaufwerke zuzugreifen und NetBIOS-Namen aufzulösen? 첸 A: nmbd 첸 B: smbd 첸 C: named 첸 D: routed 첸 E: winsd Frage 59: Welche der folgenden Aktionen sollten Sie durchführen, um die Telnet-Dienste auf einem Computer zu deaktivieren? 첸 A: Schreiben Sie NONE in /etc/telnet.allow. 첸 B: Entfernen Sie das Telnet-Init-Skript. 첸 C: Schreiben Sie »ALL:ALL« in /etc/hosts.deny. 첸 D: Kommentieren Sie den Telnet-Eintrag in der /etc/inittab aus. 첸 E: Kommentieren Sie den Telnet-Eintrag in der /etc/inetd.conf aus.
480
1451.book Seite 481 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 60: Welche Datei müssen Sie in Ihrem Heimatverzeichnis erstellen, um Mail-Forwarding zu aktivieren? 첸 A: .redirect 첸 B: .forward 첸 C: .plan 첸 D: .mail 첸 E: keine der genannten Frage 61: Welches Kommando mitsamt Optionen zeigt die Mailserver von lpi.org an?
Frage 62: In welcher Datei werden die Mail-Aliase für Sendmail aufbewahrt? Geben Sie den kompletten Pfad an. 첸 A: /etc/aliases 첸 B: /etc/mailaliases 첸 C: /etc/sendmail.aliases 첸 D: /etc/sendmail/aliases 첸 E: /var/spool/mail/aliases Frage 63: Welches Verzeichnis beinhaltet per default die ausgelieferten Mails für Benutzer? 첸 A: ~/mail/ 첸 B: /usr/mail/ 첸 C: /var/mail/ 첸 D: /var/mail/spool 첸 E: /var/spool/mail Frage 64: Welches Kommando (gegebenenfalls mit Optionen) wird sendmail zur Laufzeit dazu bringen, neue Mail-Aliase zur Kenntnis zu nehmen?
481
1451.book Seite 482 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 65: In welcher Datei wird eine nicht ausgelieferte Mail zwischengespeichert? Geben Sie den vollen Pfad und den Dateinamen an.
Frage 66: Welche Aussage über den root-User ist in Zusammenhang mit NFS wahr? 첸 A: NFS-Freigaben erlauben per Voreinstellung keinen root-Zugriff. 첸 B: NFS maskiert automatisch die Freigabeberechtigungen. 첸 C: NFS weist alle Zugriffe mit der root-UID dem Benutzer »rootsquash« zu. 첸 D: NFS ignoriert alle Benutzer mit einer UID von 0 und alle Gruppen mit einer GID von 0. 첸 E: NFS schenkt der Sicherheit keine Aufmerksamkeit. Frage 67: Welche Datei legt fest, dass Namensauflösungsinformationen außerhalb des lokalen Computers angefordert werden sollen? Bitte geben Sie die Datei und den Pfadnamen an.
Frage 68: Welche Dateien haben Einfluss auf die Namensauflösung eines Linux-Systems? Wählen Sie drei. 첸 A: /etc/resolv.conf 첸 B: /etc/hosts 첸 C: /etc/default/names 첸 D: /etc/nsswitch.conf 첸 E: /etc/inet/hosts Frage 69: Welchen Port benutzt DNS? 첸 A: 110 첸 B: 21 첸 C: 23 첸 D: 52 첸 E: 53
482
1451.book Seite 483 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 70: Wozu werden Reverse-DNS-Einträge benutzt? 첸 A: Sie befähigen Diagnose-Tools wie traceroute, zu funktionieren. 첸 B: Sie geben Aufschluss über den Besitzer eines DNS-Eintrages. 첸 C: Sie dienen zur Auflösung von IP-Adressen in Host-Namen. 첸 D: Sie enthalten geografische Informationen eines Netzwerks. Frage 71: Welche Art von DNS-Einträgen ist involviert, wenn Sie DNS verwenden, um den Host-Namen zu einer Ihnen bekannten IP-Adresse zu ermitteln? 첸 A: Reverse-DNS-Einträge 첸 B: IP-Adress-Einträge 첸 C: Address-DNS-Einträge 첸 D: Netzwerk-DNS-Einträge Frage 72: Welche Datei enthält eine Liste von Hosts, die sich nicht mit den Diensten der Maschine verbinden dürfen? 첸 A: /etc/host/denial 첸 B: /etc/hosts.deny 첸 C: /etc/hosts.notallow 첸 D: /etc/inetd.conf 첸 E: /etc/hosts.not Frage 73: Welche Konfigurationsoptionen können Sie verwenden, um zu verhindern, dass sich der root-User direkt mittels ssh an einem System anmeldet? 첸 A: NorootLogon 첸 B: PermitrootLogin no 첸 C: NorootLogin yes 첸 D: rootLogin = no 첸 E: ProhibitrootLogin = no
483
1451.book Seite 484 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 74: Die Datei /etc/ssh_host_key sollte sein: 첸 A: für jeden lesbar 첸 B: lesbar für die Gruppe sys 첸 C: nur für root lesbar 첸 D: für alle SSH-User lesbar Frage 75: Welches der folgenden Kommandos überprüft die Syntax der beiden Dateien hosts.allow und hosts.deny? 첸 A: tcpdchk 첸 B: verify tcpd 첸 C: ipswitch 첸 D: tcpdump 첸 E: tcpmatch Frage 76: Welche der folgenden Zeilen wird man in der Datei host.allow erwartungsgemäß zu sehen bekommen? 첸 A: in.ftpd:LOCAL 첸 B: tftp dgram udp wait root /usr/sbin/tcpd in tdtpd 첸 C: tftp 69/udp 첸 D: udp 17 UDP Frage 77: Welche Dateien beeinflussen die Funktion von TCP-Wrappern? 첸 A: /etc/hosts.deny 첸 B: /etc/nsswitch.conf 첸 C: /etc/security/autconfig 첸 D: /etc/default/clients 첸 E: /etc/hosts.allow
484
1451.book Seite 485 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 78: Welches Kommando beeinflusst ein Benutzerkennwort so, dass dieser es alle 60 Tage ändern muss. Wählen Sie alle zutreffenden. 첸 A: passwd –x60 user1 첸 B: chage –M 60 user1 첸 C: passwd –x 60 user1 첸 D: useradd –e 60 user1 첸 E: usermod –f 60 user1 Frage 79: Welches Kommando konvertiert Ihre Passwörter in md5 kompatible Passwörter in der shadow-Datei? 첸 A: passconv 첸 B: pwconv 첸 C: mdconv 첸 D: md5sum 첸 E: passwd --convert Frage 80: Auf einem System, das Shadow-Passwörter verwendet, sind die korrekten Berechtigungen für die Datei /etc/passwd _______ und für /etc/shadow ______. 첸 A: -rw-r-----, -r-------첸 B: -rw-r--r--, -r--r--r-첸 C: -rw-r--r--, -r-------첸 D: -rw-r--rw-, -r-----r-첸 E: -rw-------, -r-------Frage 81: Welche der aufgelisteten Methoden ist die beste, um einen Benutzer vorübergehend daran zu hindern, sich interaktiv anzumelden? 첸 A: ändern der UID 첸 B: ändern des Passwortes 첸 C: ändern der Benutzer-Shell auf /bin/false 첸 D: entfernen des Benutzereintrages aus der /etc/passwd 첸 E: platzieren des Kommandos logout im Profil des Benutzers
485
1451.book Seite 486 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 82: Welche Aussagen in Bezug auf Benutzerkonten sind wahr? 첸 A: Bei Benutzernamen wird zwischen Groß- und Kleinschreibung unterschieden. 첸 B: Bei Passwörtern wird zwischen Groß- und Kleinschreibung unterschieden. 첸 C: Bei Benutzernamen wird nicht zwischen Groß- und Kleinschreibung unterschieden. 첸 D: Bei Passwörtern wird nicht zwischen Groß- und Kleinschreibung unterschieden. Frage 83: Bewerten Sie diesen Kommentar: Das Konto »root« unterliegt keinen Sicherheitseinschränkungen. 첸 A: wahr 첸 B: falsch Frage 84: Ein cronjob muss zumindest alle 11 Minuten laufen. Der Job dauert bis zu 7 Minuten bis zu seiner Fertigstellung und darf nicht in zwei Instanzen gleichzeitig laufen. Welche crontab-Zeile löst dieses Problem? 첸 A: */8 * * * * myjob 첸 B: */9 * * * * myjob 첸 C: */10 * * * * myjob 첸 D: */11 * * * * myjob Frage 85: Sie müssen Ihre Hardware-Uhr, die in GMT eingestellt ist, mit Ihrer Systemuhr synchronisieren, die gerade mittels NTP aktualisiert wurde. Vervollständigen Sie den Befehl, der diese Aufgabe durchführt. ________ -u --systohc
486
1451.book Seite 487 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 86: Wie heißt das Dienstprogramm, das neue Logfiles erstellt und bestehende verschiebt? 첸 A: newlog 첸 B: mvlog 첸 C: rotatelog 첸 D: logrotate Frage 87: Sie entdecken einen abgelaufenen Job für das at-Kommando. Welches der folgenden Dienstprogramme entfernt diesen? 첸 A: atrm 첸 B: atq -r 첸 C: at -r 첸 D: rmat Frage 88: Die folgende Ausgabe zeigt einen Auszug aus einer Standard-Netzwerkkonfigurationsdatei. Um welche Datei handelt es sich? time time domain domain bootps bootps bootpc bootpc
37/tcp 37/udp 53/tcp 53/udp 67/tcp 67/udp 68/tcp 68/udp
# # # # # # # #
Time Time Domain Name Server Domain Name Server Bootstrap Protocol Bootstrap Protocol Bootstrap Protocol Bootstrap Protocol
Server Server Client Client
첸 A: /etc/hosts 첸 B: /etc/inetd.conf 첸 C: /etc/named.conf 첸 D: /etc/services 첸 E: /etc/syslog.conf
487
1451.book Seite 488 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 89: Welcher ist der höchste nummerierte TCP/IP-Port? 첸 A: 2047 첸 B: 32767 첸 C: 65535 첸 D: 131071 Frage 90: Welches der folgenden Protokolle verwendet zwei verschiedene Ports? 첸 A: NTP 첸 B: FTP 첸 C: Rsh 첸 D: HTTP 첸 E: Telnet Frage 91: Welche der folgenden Subnetzmasken repräsentiert eine C-Klasse? 첸 A: 255.0.0.0 첸 B: 255.255.0.0 첸 C: 255.255.255.0 첸 D: 255.255.255.255 Frage 92: Sie arbeiten an einem Server, der über mehrere Netzwerkkarten verfügt. Sie möchten die IP-Adresse herausfinden, die an die Karte eth1 gebunden ist. Welches der folgenden Kommandos gibt Ihnen die benötigten Informationen? 첸 A: ipconfig /dev/eth1 첸 B: ethconfig –d eth1 첸 C: ifconfig eth1 첸 D: prntconf eth1
488
1451.book Seite 489 Dienstag, 7. Juli 2009 2:18 14
Fragen
Frage 93: Ihr ISP hat Ihnen einen IP-Adressbereich zur Verfügung gestellt. Der Bereich ist 217.118.112.64/26. Wie viele nutzbare Adressen bleiben Ihnen, wenn Ihr Administrator die erste benutzbare IP-Adresse für einen Router verbraucht?
Frage 94: Welcher Daemon repräsentiert den Syslog? 첸 A: syslogd 첸 B: syslog 첸 C: logd 첸 D: sys Frage 95: Sie verwenden X-Window auf Ihrem Computer. Sie möchten allen Benutzern im Netzwerk die Möglichkeit geben, Anwendungen remote auf Ihrem Computer anzuzeigen. Zu diesem Zweck wollen Sie die Zugriffskontrolle auf Ihr X-Display ausschalten. Welches Kommando müssen Sie verwenden?
Frage 96: Sie verwenden X-Window auf Ihrem Computer und bemerken, dass jemand versucht, eine unautorisierte Sitzung vom computer47 aus zu initiieren. Welches Kommando mit Optionen und Argumenten wird den Zugriff für computer47 auf Ihr X-Window unterbinden? Andere Computer sollen von Ihrer Aktion nicht beeinträchtigt werden.
Frage 97: In einem Skript müssen Sie eine Schleife erstellen. Die Kommandos innerhalb der Schleife werden von den Schlüsselwörtern _____ und done eingeschlossen.
489
1451.book Seite 490 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 98: Welche der folgenden Zeilen der Datei /etc/X11/XF86Config zeigt an, von welchem Fontserver Schriftarten geladen werden? 첸 A: FontPath=server 첸 B: Fonts "Unix/:7100" 첸 C: FontPath "Unix/:7100" 첸 D: Fonts=server 첸 E: Fontserver="servername" Frage 99: Der korrekte Eintrag in der crontab zur Ausführung des Skripts chklog einmal pro Stunde zwischen 3p.m. und 5p.m., jeden Montag und Donnerstag, ist: 첸 A: 0 3,4,5 * * 2,5 chklog 첸 B: 0 3,4,5 * * 1,4 chklog 첸 C: 0 15,16,17 * * 1,4 chklog 첸 D: 0 15,16,17 1,4 * * chklog 첸 E: * 15,16,17 * * 1,4 chklog Frage 100: Sie möchten die Alterungsinformationen in der Datei /etc/shadow ändern. Was ist das beste Werkzeug um dies zu tun? 첸 A: vi 첸 B: emacs 첸 C: usermod 첸 D: modinfo 첸 E: chage
490
1451.book Seite 491 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Antworten und Erklärungen zu den Übungsfragen Frage 1: B: syslog.conf Die anderen Dateien gibt es nicht, oder es handelt sich nicht um Konfigurationsdateien. Frage 2: D: Emacspeak ist die richtige Antwort Orca ist zwar ein Screenreader, enthält aber keinen eigenen Editor. StarWriter
enthält keinen Screenreader, und vi-read gibt es nicht. Frage 3: D: emerg Die Reihenfolge der Dringlichkeiten sieht so aus: emerg – alert – crit – err – warning – debug Frage 4: Die richtigen Antworten sind: 왘
B: account name
왘
C: userid
왘
D: groupid
Die Datei passwd enthält folgende Felder in der angegebenen Reihenfolge: account, password, UID, GID, GECOS, directory und shell 왘
zu A und E: Diese Angaben sind in der Datei /etc/passwd nicht enthalten.
Frage 5: D: xvidtune Mit xvidtune können Sie u.a. die Zentrierung des Bildschirms einstellen. Voraussetzung ist natürlich ein funktionierendes X-Window-System.
491
1451.book Seite 492 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 6: C: xfs Die anderen Antworten sind frei erfunden. Frage 7: A: ssh-keygen –t rsa generiert einen neuen Maschinenschlüssel vom Typ RSA. Frage 8: C: startx – xinit – xinitrc – Xclients Prägen Sie sich die richtige Reihenfolge für die Prüfung ein. Frage 9: A: /etc/X11/gdm.conf ist die richtige Antwort. 왘
zu B: Das ist ein Skript, das benutzt wird, um den bevorzugten Displaymanager zu starten.
왘
zu C: Das ist die Hauptkonfigurationsdatei des X-Window-Systems.
왘
zu D: Das ist auch eine Konfigurationsdatei für gdm. Der Begrüßungstext kann hier aber nicht eingestellt werden.
Frage 10: B: /etc/X11/xdm/Xsetup ist die richtige Datei. 왘
zu A: Das ist ein Skript, das benutzt wird, um den bevorzugten Displaymanager zu starten.
왘
zu C: Das ist die Hauptkonfigurationsdatei des X-Window-Systems.
왘
zu D: Die Datei xdm.conf befindet sich nicht in diesem Pfad.
Frage 11: Die richtige Antwort ist C: mysql> -> -> -> ->
SELECT feld1, feld2, feld3 FROM tabelleA WHERE tabelleB_id IN (SELECT id FROM tabelleB WHERE feld1='informationB' );
Sie finden diese Befehlssyntax genau so unter Topic 105.3.
492
1451.book Seite 493 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 12: xhost +Comp1 Comp2 Comp3
Mit diesem Kommando werden die Computer der Zugriffsliste für X-Window hinzugefügt. Mehrere Hosts werden also nach dem Pluszeichen, durch Leerzeichen separiert, aufgelistet. Frage 13: D: UTF-8 ist der gesuchte Zeichensatz. Prüfungstipp Sollten Ihnen die übrigen Zeichensätze nicht mehr geläufig sein, so lesen Sie bitte noch einmal das entsprechende Kapitel.
Frage 14: A: DISPLAY Diese Variable bestimmt, wo die Ausgabe eines X-Clients erfolgen soll. Frage 15: A und B: rm steht in diesem Zusammenhang für remote machine und rp für remote printer. Beide Parameter können hier verwendet werden. Die anderen beiden Antworten sind erfunden. Frage 16: A, B und D: lprm entfernt Druckjobs aus einer Warteschlange. lpq zeigt den Inhalt und den Status einer Druckerwarteschlange an. lpc ist ein interaktives, wenn auch nur sehr begrenzt verwendbares Programm zur Verwaltung von Warteschlangen. All dies sind gängige Werkzeuge zum Verwalten von Druckwarteschlangen, die auch ein Anwender kennen sollte. Die anderen beiden Befehle sind frei erfunden. Frage 17: A: lpc topq kann dafür sorgen, dass ein Druckjob bevorzugt behandelt wird. Sie funktioniert allerdings (noch) nicht in der CUPS-Version von lpc. Die anderen Kombinationen aus Kommandos und Optionen sind frei erfunden.
493
1451.book Seite 494 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 18: B: lpadmin ist das Einzige der hier genannten Werkzeuge, dass ausschließlich für die Konfiguration von CUPS entwickelt wurde. Frage 19: C: /etc/printcap ist die zuständige Konfigurationsdatei. Die anderen Antworten sind frei erfunden. Frage 20: D: xdpyinfo ist das richtige Programm für diese Aufgabe. 왘
xhost wird verwendet, wenn der Zugriff auf das Display geregelt werden
muss, damit Benutzer auch von entfernten Rechnern aus auf das Display zugreifen können. 왘
xwininfo zeigt lediglich Informationen zu einem einzelnen Fenster an – nicht zu einem X-Server.
왘
xfs ist der X-Font-Server, mit dem Sie zentral für mehrere X-Server Fonts zur Verfügung stellen können.
Frage 21: C: gamma wird ausgegeben. Das Skript ist natürlich alles andere als vollständig. Davon sollen Sie sich aber in der Prüfung nicht irritieren lassen. Das shift-Kommando löscht den Inhalt der ersten Parametervariablen $1 und füllt Sie mit dem Inhalt von $2. Es findet also eine Verschiebung statt. Das Gleiche findet mit allen anderen Übergabeparametern statt. Das Wort »gamma« wurde als Drittes übergeben, wird aber nun durch das shift an Position zwei verschoben. echo $2 gibt also gamma aus. Frage 22: 0 ist der normale Errorlevel (exit status) der meisten Programme. Es gibt hiervon
nur sehr wenige Ausnahmen. Frage 23: B: sshd ist nicht konfiguriert, im Default-Runlevel zu starten. Das ist in der Tat der wahrscheinlichste der genannten Gründe. 왘
A: ist unwahrscheinlich. Wieso sollte plötzlich die Namensauflösung gestört sein? Außerdem müsste eine Verbindung über die IP-Adresse des Rechners trotzdem möglich sein.
494
1451.book Seite 495 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
왘
C: ist sehr wahrscheinlich und auch gut so; verhindert aber nicht den sshZugriff.
왘
D: Warum sollten die Schlüssel durch einen Neustart des Servers beschädigt werden?
왘
E: Das haben die User wahrscheinlich gerade schon gemacht.
Frage 24: chkconfig –list ist die richtige Antwort. Achten Sie in der Prüfung bitte noch
einmal darauf, ob nur das Kommando oder auch der Schalter gefragt ist. Frage 25: D: /etc/hosts.lpd ist zuständig, um Remote-Computern das Recht zu erteilen, Kommandos an einen Drucker zu senden. Die anderen aufgezählten Dateien haben andere Verwendungszwecke. Frage 26: A: 23 0-23/2 * * * /myscript wäre der richtige Eintrag in der crontab-Datei. Die crontab-Tabelle ist in dieser Reihenfolge aufgebaut: 왘
1. Feld: Minute von 0–59
왘
2. Feld: Stunde von 0–23
왘
3. Feld: Tag des Monats von 1–31
왘
4. Feld: Monat 1–12 (es können auch Namen angegeben werden)
왘
5. Feld: Tag der Woche von 0–7 (0 oder 7 sind Sonntag, Namen sind erlaubt)
왘
6. Feld: auszuführendes Kommando oder Skript
Ein Stern (*) ist ein Platzhalter und bedeutet, wie immer, jede bzw. jeden. Die Antwort A muss also wie folgt gelesen werden: »myscript« ausführen, wenn (1) die Minute 23 ist, die Stunde (2) jede zweite zwischen 0 und 23 Uhr. (3) Jeden Tag des Monats, (4) jeden Monat und an (5) jedem Tag der Woche. Die anderen Antworten sind also jeweils falsch. Frage 27: C: yum install paketname ist das richtige Kommando. 왘
apt-get install paketname wäre das entsprechende Kommando auf einem
Debian-basierten System.
495
1451.book Seite 496 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
왘
alien wird zur Konvertierung von Debian-Paketen in RPM-Pakete verwendet.
왘
yum autoinstall – die Option autoinstall gibt es nicht bei yum.
왘
aptitude ist ein Debian-Tool zur Paketverwaltung.
Frage 28: B: Starten Sie pwconv, um die UNIX-Kennwörter in Shadow-Kennwörter umzuwandeln. Die Benutzer, bei denen in der zweiten Spalte ein »x« steht, verfügen bereits über Kennwörter, die vom Shadow-System verwaltet werden. Anders ist das bei den Benutzern, wo der Hash-Wert zu sehen ist. Diese Kennwörter sind zwar verschlüsselt, aber für jeden lesbar in der /etc/passwd gespeichert. Nach der Eingabe von pwconv werden diese Kennwörter in der Datei /etc/shadow verwaltet, die eben nicht von jedem einsehbar ist. Frage 29: A: /etc/default/useradd ist die richtige Datei. Frage 30: useradd –D lautet die richtige Antwort.
Aber Vorsicht! Dieser Parameter ist eigentlich schon veraltet und wurde ersetzt. 왘
useradd --show-defaults zeigt jetzt die aktuellen Default-Werte
왘
useradd --save-defaults ändert (natürlich unter Angabe weiterer Parame-
ter) die Default-Werte. Frage 31: useradd –m Willi ist das richtige Kommando. Der Parameter »m« steht für
»make home«. Frage 32: userdel –r Stefan ist das richtige Kommando. Das »r« steht für »remove home«.
Frage 33: /etc/skel ist das Skeleton Directory. Skeleton steht für Skelett bzw. Gerüst und stellt das Grundgerüst für ein neues Heimatverzeichnis dar. Bei der Erstellung eines neuen Benutzers wird das Skeleton-Verzeichnis auf das Heimatverzeichnis des neuen Benutzers kopiert und anschließend die Rechte an den neuen Benutzer übertragen.
496
1451.book Seite 497 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 34: /etc/syslog.conf ist die gesuchte Konfigurationsdatei. Frage 35: last ist hierfür das richtige Kommando. Die Ausgabe von last könnte etwa so
aussehen: archangel:~ # last michaela pts/0 connor.homelinux harald pts/0 p57bb71d4.dip.troot pts/0 p57bb71d4.dip.t-
Fri Aug 10 17:32-19:44(02:11) Fri Aug 10 13:03-14:52(01:49) Fri Aug 10 12:02-12:33(00:31)
Frage 36: A: cron kann von einem anderen Benutzer als root konfiguriert werden. Die anderen genannten können lediglich von einem Benutzer benutzt, nicht aber konfiguriert werden. Frage 37: A: /etc/cron.allow und D: /etc/cron.deny sind die gesuchten Dateien. /var/spool/cron.allow und /var/spool/cron.deny sind frei erfunden. Frage 38: D: crond ist die richtige Antwort. Cron kann sogar von Nicht-root-Benutzern konfiguriert und benutzt werden. inetd, named, rlogind, und telnetd benötigen alle root–Rechte, um ihre Aufgaben ausführen zu können.
Frage 39: D: 5 Felder definieren in der crontab-Datei die Termine. Das sechste Feld beinhaltet den auszuführenden Job, darf also bei dieser Formulierung der Frage nicht mitgezählt werden. Frage 40: B: tzselect Mit tzselect können Sie die Zeitzonen auswählen und anzeigen lassen. Beachten Sie, dass aber zur tatsächlichen Änderung der Zeitzone die Datei /etc/timezone bearbeitet werden muss. Es muss außerdem ein entsprechender symbolischer Link in /etc/localtime erstellt werden.
497
1451.book Seite 498 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 41: A: ntp ist das Network Time Protokoll. Danach wird hier gesucht. nntp ist das Network News Transport Protokoll, also ungeeignet. Die anderen drei Protokolle gibt es nicht. Frage 42: C: whois zeigt solche Informationen, nachdem es eine RFC-3912-kompatible Datenbank im Internet kontaktiert hat (z.B. denic.de o.Ä.). Die anderen genannten Programme haben andere Verwendungszwecke. Frage 43: D: ICMP ist das Internet Control Message Protocol und wird von Diagnoseprogrammen wie ping und traceroute verwendet. Die anderen genannten Protokolle gibt es auch. Diese haben jedoch andere Verwendungszwecke. Frage 44: E: traceroute findet ausgefallene Router, indem UDP-Pakete an alle auf dem Weg zum Ziel befindlichen Router sendet. Der erste Router, der nicht (oder verzögert) antwortet, ist dann die Fehlerquelle. In der Praxis verhindern die heute leider notwendigen Firewalls oft die Diagnose mit traceroute, weil diese Firewalls die ICMP-Anfragen nicht beantworten, um so gegenüber potenziellen Angreifern ihre Existenz zu verleugnen. Die Programme in den anderen möglichen Antworten gibt es zwar auch, diese dienen aber einem anderen Verwendungszweck. Frage 45: cat /proc/sys/net/ipv4/ip_forward lautet die vollständige Kommandozeile.
Wenn diese Datei (die sich wie alle anderen Dateien des procdevices im Arbeitsspeicher des Rechners befindet) den Wert 1 beinhaltet, ist das Routing mit diesem Computer möglich, weil dann die Weiterleitung von IP-Paketen aktiviert ist. Frage 46: D: route add default gw 192.168.1.1 lautet die richtige Antwort. Alle anderen Antworten in dieser Frage werden eine Fehlermeldung zur Folge haben.
498
1451.book Seite 499 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 47: A: -n sorgt dafür, dass traceroute nur numerische Werte ausgibt und keine IPAdressen in Namen auflöst. Durch das Weglassen der Namensauflösung über DNS ergibt sich in der Regel eine enorme Beschleunigung dieses Befehls. Die Option –n wird gerne in der Prüfung auch bei anderen Programmen wie route oder netstat abgefragt. Der Sinn des Parameters ist hier identisch. Frage 48: A: 20 für den Datenfluss und D: 21 für die Steuerung Frage 49: 왘
A: 10.0.0.0 – 10.255.255.255 (Klasse A)
왘
B: 192.168.0.0 – 192.168.255.255 (Klasse C)
왘
C: 172.16.0.0 – 172.31.255.255 (Klasse B)
Diese Bereiche sollten Sie unbedingt auswendig kennen. Frage 50: A: 11000000.10101000.00000001.00001010 ist die Binärschreibweise der IPAdresse 192.168.1.10. Prüfungstipp Es wird zwar von vielen Administratoren als lästig empfunden, Sie sollten aber dennoch (auch für die Prüfung) mit den Grundbegriffen der Binärarithmetik vertraut sein. Binäres Denken hilft außerdem bei der Erstellung von Routing-Tabellen und FirewallRegeln.
Frage 51: B: imap verwendet den Port 143. Prüfungstipp Sie sollten für die Prüfung (und natürlich auch die tägliche Praxis) die gängigsten Ports auswendig kennen. Ein erstklassiges Nachschlagewerk ist die Datei /etc/services. Probieren Sie doch einmal Folgendes aus: archangel:~ # grep "^pop3 " /etc/services pop3 110/tcp # Post Office Protocol – Version 3 pop3 110/udp # Post Office Protocol – Version 3
499
1451.book Seite 500 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 52: Die Subnetzmaske wird von Computern benutzt, um festzustellen, welche Hosts sich in Ihrem eigenen Subnetz befinden und welche nicht. Frage 53: A: /etc/services, wie bereits besprochen wurde. Frage 54: C: SMTP, und er wird nur auf MX-Hosts vorausgesetzt. Diese Frage ist unangenehm, weil eigentlich auf allen Linux-Distributionen standardmäßig ein Mail-System inklusive SMTP installiert ist. Das bedeutet allerdings nicht, dass das auch so bleiben muss. Vermutlich konnten Sie allerdings die falschen Antworten A, D und E sicher ausschließen, weil Sie den Port 25 bestens kennen. Frage 55: netstat ist hier die richtige Lösung.
Frage 56: B: echo 1 > /proc/sys/net/ipv4/ip_forward ist die einzig richtige Lösung. Alle anderen Antworten ergeben überhaupt keinen Sinn oder sogar eine Fehlermeldung. Frage 57: /etc/nsswitch.conf ist die Datei, in der u.a. definiert wird, wie das System eine Namensauflösung durchführt und welche Instanzen hierfür in welcher Reihenfolge zu konsultieren sind. Das kann in Bezug auf die Namensauflösung dann so aussehen: hosts: networks:
files lwres dns files dns
Frage 58: A: nmbd löst NetBIOS-Namen in IP-Adressen auf wie ein WINS-Server, und B: smbd stellt Freigaben Windows-konform mit dem Server Message Block Protokoll zur Verfügung. 왘
C: named ist der DNS-Daemon von BIND.
왘
D: routed ist ein dynamisches Routing-Protokoll.
왘
E: winsd klingt gut, gibt es aber nicht.
500
1451.book Seite 501 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 59: E: Kommentieren Sie den Telnet-Eintrag in der /etc/inetd.conf aus. Der Telnet-Dienst wird üblicherweise über einen TCP-Wrapper (hier inetd) gestartet und muss also auch durch Entfernen aus den Konfigurationsdateien von inetd oder xinetd deaktiviert werden. Frage 60: B: .forward ermöglicht es auch einem normalen Benutzer, seine Mail an ein anderes Konto weiterzuleiten. Das kann zum Beispiel bei längerer Abwesenheit von Bedeutung sein. Die Datei ist per Default nicht vorhanden und muss einfach im Heimatverzeichnis des Users erstellt werden. Frage 61: 왘
dig lpi.org mx
왘
dig lpi.org MX
왘
dig mx lpi.org
왘
dig MX lpi.org
Alle diese Schreibweisen sind hier zulässig. Frage 62: A: /etc/aliases ist die richtige Datei. Alle anderen Antworten sind frei erfunden. Frage 63: E: /var/spool/mail ist das richtige Verzeichnis. Die anderen Verzeichnisnamen sind frei erfunden. Frage 64: 왘
newaliases
왘
sendmail –bi
Beide Antworten sind hier richtig. In der Prüfung wird zur ersteren Version geraten, weil dies die bekanntere Variante ist. Frage 65: /var/spool/mqueue ist das korrekte Verzeichnis. Achten Sie in der Prüfung darauf, dieses Verzeichnis nicht mit /var/spool/mail zu verwechseln.
501
1451.book Seite 502 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Frage 66: A: NFS-Freigaben erlauben per Voreinstellung keinen root-Zugriff. Das ist richtig. Soll der User root auf NFS-Dateien zugreifen können, erfordert das die ausdrückliche Erlaubnis mit der Angabe no_root_squash in der Datei /etc/ exports. Frage 67: /etc/nsswitch.conf – Diese Datei legt u.a. fest, in welcher Reihenfolge z.B. die Datei hosts oder der in der resolv.conf festgelegte DNS-Server abgefragt werden sollen. Die Datei steuert außerdem die Verwendungsreihenfolge von Authentifizierungsmodulen. Frage 68: A: /etc/resolv.conf beinhaltet die Client-Konfiguration. B: /etc/hosts hält häufig angefragte Host-Namen zur schnelleren Auflösung lokal vor. Sie wird von manchen Systemen beim Systemstart benötigt, um localhost abzufragen, noch bevor das DNS-System gestartet wurde. D: /etc/nsswitch.conf steuert u.a. die Reihenfolge der Namensauflösung (z.B. zuerst die Datei des Hosts, dann DNS). Frage 69: E: 53 ist der Port, der für DNS benutzt wird. 왘
A: 110 Post Office Protocol – Version 3
왘
B: 21 File Transfer Protocol [Control]
왘
C: 23 Telnet
왘
D: 52 XNS Time Protocol
Frage 70: C: Sie dienen zur Auflösung von IP-Adressen in Host-Namen. Frage 71: A: Reverse DNS Einträge Frage 72: B: /etc/hosts.deny
502
1451.book Seite 503 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 73: B: PermitRootLogin no ist hier die richtige Antwort. Sie finden diesen Eintrag in der Datei /etc/ssh/sshd_config. Frage 74: D: für alle SSH User lesbar Frage 75: A: tcpdchk Frage 76: A: in.ftpd:LOCAL ist ein typischer Eintrag in der host.allow-Datei. Frage 77: A: /etc/hosts.deny und E: /etc/hosts.allow sind Konfigurationsdateien, die den Zugriff auf Dienste für angegebene Hosts erlauben oder verbieten. Frage 78: A: passwd –x60 user1 und B: chage –M 60 user1 ändern die Gültigkeitsdauer des Kennwortes für den Benutzer »user1« auf 60 Tage. Frage 79: B: pwconv konvertiert, erstellt oder aktualisiert die Shadow-Passwörter. Hierbei werden die Passwörter aus der /etc/passwd-Datei eingelesen, verschlüsselt und dann in die Datei /etc/shadow geschrieben. Frage 80: C: -rw-r--r--, -r-------Prüfungstipp Leider gibt es in dieser Frage einen Fehler. Aber auch damit muss man in der Prüfung umgehen können. Ob solche Fehler beabsichtigt sind, ist unklar. Der Fehler liegt darin, dass in keiner der Antworten der root Schreibrecht auf die shadow-Datei erhält. Das muss er aber! Sehen Sie das gegebenenfalls auf Ihrem System nach! Nun aber zur Lösung durch Ausschlussverfahren: Die shadow-Datei darf nur von root gelesen werden. Deshalb wurde sie schließlich erfunden. B und D sind also schwere Sicherheitslücken!
503
1451.book Seite 504 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Das Shadow-System ist deshalb für die Sicherheit von großer Bedeutung, weil die passwd-Datei für jeden lesbar sein muss. Also bleibt nur Antwort C – trotz des Fehlers ist dies zumindest die beste Antwort.
Frage 81: C: ändern der Benutzer Shell auf /bin/false Die anderen Lösungen führen auch zum Ziel, sind aber entweder zu umständlich durchzuführen oder aber zu aufwendig wieder rückgängig zu machen. Bei Fragen, bei denen es mehrere Lösungen gibt, sollten Sie immer die Antwort auswählen, die den geringsten Verwaltungsaufwand mit sich bringt. Frage 82: A: Bei Benutzernamen wird zwischen Groß- und Kleinschreibung unterschieden. B: Bei Passwörtern wird zwischen Groß- und Kleinschreibung unterschieden. Linux unterscheidet im Gegensatz zu Windows grundsätzlich zwischen Großund Kleinschreibung. Frage 83: A: wahr Das Konto »root« darf wirklich alles. Deshalb ist es für unvorsichtige Administratoren sehr gefährlich, als root zu arbeiten. Frage 84: C: */10 * * * * myjob Die Antwort D klang hier auch verlockend, aber die Anwendung muss mindestens alle 11 Minuten laufen. Sollten Verzögerungen im Sekundenbereich auftreten, gewährleistet D nicht mehr, dass diese Anforderung erfüllt wird. Frage 85: hwclock -u --systohc aktualisiert die Hardware-Uhr mit der Systemuhr. Die Option –u besagt, dass die Systemuhr in UTC arbeitet, um die Synchronisation mit der auf GMT laufenden Hardware-Uhr abzugleichen. -systohc steht für system to hardwareclock. Die Umkehrung wäre also -hctosys.
504
1451.book Seite 505 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
Frage 86: D: logrotate führt diese Wartungsarbeiten durch. Deshalb wird logrotate in der Regel zyklisch von cron ausgeführt. Frage 87: A: atrm entfernt at-Jobs. Frage 88: D: /etc/services enthält solche Einträge. Frage 89: C: 65535 – Das sind 216 Ports oder auch 64 k (64 × 1024 = 65536 abzgl. der »0«). Frage 90: B: FTP verwendet die Ports 20 (für Daten) und 21 (zur Steuerung). Frage 91: C: 255.255.255.0 ist die Standardmaske für die C-Klasse. 왘
255.0.0.0 wird für die A-Klasse verwendet.
왘
255.255.0.0 spezifiziert eine B-Klasse.
왘
255.255.255.255 maskiert einen Einzel-Host oder eine Multicast-Adresse.
Frage 92: C: ifconfig eth1 zeigt Informationen für das Gerät eth1 an. Frage 93: 61 Adressen sind nutzbar. Wenn die Subnetzmaske 26 von 32 Bit »verbraucht«, bleiben noch 6 Bit für den Host-Anteil. 26 macht 64. Davon müssen noch drei Adressen abgezogen werden. Eine für die Netzwerkadresse, eine für den Broadcast und eine für den Router. Frage 94: A: syslogd Die anderen Antworten sind frei erfunden. Frage 95: xhost +
505
1451.book Seite 506 Dienstag, 7. Juli 2009 2:18 14
Übungsfragen zu LPI 117-102
Dieses Kommando verlangt bei der Übergabe von Parametern keinen einleitenden Strich. Wenn hier also ein Strich auftaucht, dann handelt es sich um ein Minus. Mit dem Minus können Hosts von der Zugriffsliste gelöscht werden. Entsprechend können Sie mit einem Plus einen oder mehrere Hosts der Zugriffsliste hinzufügen. Ein alleinstehendes Plus fügt alle Hosts der Zugriffsliste hinzu, was dem Abschalten der Zugriffskontrolle gleichkommt. Frage 96: xhost -computer47
Mit diesem Kommando wird ein Host von der Zugriffsliste eines X-Hosts entfernt. Frage 97: Die richtige Antwort lautet do. Eine Schleife beginnt immer mit einem do, dem eine Abbruchbedingung für die Schleife vorangeht. Als Nächstes folgen die in der Schleife enthaltenen Kommandos, die ausgeführt werden, bis die Abbruchbedingung erfüllt ist. Die Schleife endet auf done. Die Abbruchbedingung beginnt normalerweise mit einer while-Anweisung. Frage 98: C: FontPath "Unix/:7100" Die anderen Antworten sind frei erfunden. Prägen Sie sich die richtige Angabe unbedingt ein! Frage 99: C: 0 15,16,17 * * 1,4 chklog Die Antwort bedeutet als Text gesprochen: Jede »0-te« Minute (also zur vollen Stunde) um 15, 16, und 17 Uhr an jedem Tag im Monat (erster Stern), in jedem Monat (zweiter Stern), am Montag (1) und Donnerstag (4). Zur Erinnerung: Bei den Wochentagen ist der Sonntag sowohl 0 als auch 7. Sie müssen das bei der Prüfung beherrschen. Deshalb nun noch einmal die falschen Antworten zur Übung: 왘
0 3,4,5 * * 2,5 chklog bedeutet zur vollen Stunde um 3, 4 und 5 Uhr morgens jeden Dienstag und jeden Freitag.
왘
0 3,4,5 * * 1,4 chklog
506
1451.book Seite 507 Dienstag, 7. Juli 2009 2:18 14
Antworten und Erklärungen zu den Übungsfragen
bedeutet zur vollen Stunde um 3, 4 und 5 Uhr morgens jeden Montag und jeden Donnerstag. 왘
0 15,16,17 1,4 * * chklog bedeutet zur vollen Stunde um 15, 16 und 17 Uhr jeden ersten und vierten Tag eines jeden Monats an beliebigen Wochentagen.
왘
* 15,16,17 * * 1,4 chklog bedeutet zu jeder Minute zwischen 15 Uhr und 17:59 Uhr jeden Montag und jeden Donnerstag.
Frage 100: E: chage ist hierfür das richtige Programm. vi und emacs sind Editoren. usermod verwenden Sie, um alle erdenklichen Benutzereinstellungen zu ändern, aber nicht die Alterungsinformationen eines Kennwortes. modinfo zeigt Informationen zu Kernel-Modulen an.
507
1451.book Seite 508 Dienstag, 7. Juli 2009 2:18 14
1451.book Seite 509 Dienstag, 7. Juli 2009 2:18 14
Index #!/bin/bash 293 $? 93, 295 $0 295 $1 94, 295 $2 94, 295 $HISTSIZE 93 $PS1 93 * 145 ./ 96 .bash_history 94 .bash_login 290 .bash_profile 91, 194, 289, 290 .bashrc 90, 289 .forward 402 .rpmrc 78 .Xdefaults 328 .xinitrc 328 .Xresources 328 .xserverrc 328 /bin/bash 293 /bin/login 49 /boot 29, 161 /boot/boot.b 59 /boot/grub/ 62 /boot/grub/grub.conf 42 /boot/grub/stage2 63 /dev 30 /dev/cdrom 30 /dev/ft0 33 /dev/hd 30 /dev/hda 30 /dev/hda1 31 /dev/hda2 31 /dev/hda3 31 /dev/hda5 31 /dev/hdb 30 /dev/hdc 30 /dev/hdd 30 /dev/sd 31 /dev/sda 31, 32 /dev/sdb 31, 33 /dev/st0 33 /dev/zero 166 /etc/.bashrc 289 /etc/aliases 401, 402
/etc/anacron 374 /etc/apt/apt.conf 69 /etc/apt/sources.list 69 /etc/bashrc 90, 289 /etc/crontab 370 /etc/cups 410 /etc/cups/cupsd.conf 410 /etc/default/useradd 362, 365 /etc/false 358 /etc/fstab 88, 166, 176, 177, 178, 184 /etc/group 360, 369, 432 /etc/gshadow 361, 369 /etc/host.conf 432 /etc/HOSTNAME 430 /etc/hostname 430 /etc/hosts 430, 432 /etc/hosts.allow 448, 453 /etc/hosts.deny 448, 453 /etc/hotplug 37 /etc/inetd.conf 447 /etc/init.d 50, 52, 96 /etc/inittab 48, 50, 340 /etc/inputrc 290 /etc/known_hosts 454 /etc/ld.so.cache 66 /etc/ld.so.conf 65 /etc/lilo.conf 42, 60 /etc/localtime 378, 391 /etc/logrotate.conf 397 /etc/mail 403 /etc/mail/access 404 /etc/mail/relay-domains 404 /etc/manpath.config 98 /etc/modprobe.conf 42 /etc/modules.conf 42 /etc/mtab 181 /etc/network/interfaces 434 /etc/networks 431 /etc/nologin 449, 453 /etc/nsswitch.conf 432 /etc/ntp.conf 393 /etc/ntp.drift 393 /etc/passwd 357, 359, 368, 432 /etc/printcap 407, 410 /etc/profile 91, 94, 194, 289
509
1451.book Seite 510 Dienstag, 7. Juli 2009 2:18 14
Index
/etc/rc.d 50, 52 /etc/rc.d/xfs 335 /etc/resolv.conf 431 /etc/rpmrc 77 /etc/services 414 /etc/shadow 191, 359, 368 /etc/skel 290, 362 /etc/ssh/ssh_config 453 /etc/ssh/ssh_host_dsa_key 455 /etc/ssh/ssh_host_dsa_key.pub 455 /etc/ssh/ssh_host_key 455 /etc/ssh/ssh_host_key.pub 455 /etc/ssh/ssh_host_rsa_key 455 /etc/ssh/ssh_host_rsa_key.pub 455 /etc/ssh_known_hosts 453 /etc/sshrc 453 /etc/sudoers 445 /etc/syslog.conf 396 /etc/timezone 378, 392 /etc/updatedb.conf 208 /etc/usbmgr/host 37 /etc/usbmgr/preload.conf 37 /etc/usbmgr/usbmgr.conf 36 /etc/X11/fs/config 334 /etc/xinetd.conf 448 /etc/xinetd.d 448 /etc/yum.conf 83 /etc/yum.repos.d 83 /home 57 /lib/modules 23, 29 /proc 33, 160 /proc/bus/pci 34 /proc/dma 32 /proc/interrupts 32 /proc/ioports 32 /proc/kmsg 399 /proc/modules 24, 25 /proc/partitions 160 /proc/pci 32 /proc/scsi 33 /proc/swaps 167 /sbin/mingetty 49 /tmp 57 /usl/lib/locale 380 /usr 57 /usr/bin 294 /usr/lib/rpm 78 /usr/lib/rpm/rpmrc 77 /usr/lib/rpmrc 77
510
/usr/lib/X11/app-defaults/XTerm 329 /usr/sbin 294 /usr/share/i18n/SUPPORTED 380 /usr/share/zoneinfo 391 /usr/src 29 /usr/src/ 23 /usr/src/linux 29 /var 57 /var/cache/man 98 /var/lib/dpkg/available 69 /var/lib/dpkg/info 68 /var/lib/dpkg/status 68 /var/lib/rpm 78 /var/log 397 /var/log/mail 405 /var/log/messages 45, 398 /var/mail 403 /var/spool 407 /var/spool/cron 372 /var/spool/mail 403 /var/spool/mqueue 403 ? 145 ~./ssh/known_hosts 454 ~/.bash_login 91, 289 ~/.bash_logout 290 ~/.bash_profile 289 ~/.bashrc 290 ~/.gnupg 461 ~/.inputrc 290 ~/.profile 289 ~/.ssh/authorized_keys 455 ~/.ssh/id_dsa 456 ~/.ssh/id_dsa.pub 456 ~/.ssh/id_rsa 456 ~/.ssh/id_rsa.pub 456 ~/.ssh/ssh_know_hosts 453 ~/.xinitrc 329
A Absolute Pfadangaben 114 ACL 201 Aktive Partition 162 Akzent Circumflex 147 alias 286 Aliase 285 alien 75 ALTER TABLE 304, 316 anacron 374
1451.book Seite 511 Dienstag, 7. Juli 2009 2:18 14
Index
AND 322 Änderungszeit 118 Anwendungsschicht 413 apache2 50 append only 196 apropos 99, 100, 206 apt-cache 74 apt-get 69, 71 aptitude 73 aquota.group 184 aquota.user 184 Argumente 88 ARP 416 ARPA 412 ARPANET 412 Assistive Techniken 342 at 373 at.allow 375 at.deny 375 atd 373 aterm 329 authorized_keys 456 auto 181 awk 144
B Backslash 145 Barrierefreies Anmelden 343 Barrierefreiheit 343 Bash 88 bash 282 bash.bashrc.local 289 Baudot, Jean-Maurice-Émile 382 Baudot-Code 382 Befehls-History 94 Bevorzugte Anwendungen 343, 346 bg 138 Bildschirmlupe 348 Bildschirmtastatur 353 BIOS 39, 162 BIOS-Uhr 391 Bootloader 41, 58 Bootpartition 58 Boot-Strap-Loader 41, 42, 58 Brailledisplay 342, 349 Brailleschrift 342 Braillezeile 342 BRLTTY 349
Broadcastadresse 420 builtin 288 bunzip2 120, 122 bzip2 120, 122
C case 300 cat 102, 129 catman 98 cd 113 CD-ROM 30 cfdisk 160 chage 365, 440 chattr 196 chfn 358 chgrp 194 chmod 189, 191, 192, 292, 293 chown 193 CIDR 418, 419 clear 300 Coldplug 37 COMMIT 304 cp 115 cpio 122 cpio-Paket 82 CREATE DATABASE 308 CREATE TABLE 304 cron 370 cron.allow 375 cron.deny 375 crond 370 crontab 370, 372 csh 88, 282 CSV 151 CTRL-ALT-DEL 49 CUPS 407, 410 cut 108, 129
D Data Control Language 304 Data Definition Language 304 Data Manipulation Language 304 Data Query Language 304 date 390 Dateiattribute 196 Dateideskriptoren 126 dbus 38
511
1451.book Seite 512 Dienstag, 7. Juli 2009 2:18 14
Index
DCL 304 dd 123, 166 DDL 304 debugfs 171 DEC 325 defaults 181 DELETE 321 depmod 27, 28 Desktop Environment 327 Device 333 df 131, 173 dig 425 DISPLAY 336 Display Manager 327, 340 DISTINCT 304 dma 32 dmesg 44 DML 304 do 296 DoD 412 DoD Modell 413 Dollarzeichen 145 Donald Murray 382 done 296 Doppelkreuzen 147 dosfsck 169 Dotted Quad 416 dpkg 67, 70, 75 dpkg-reconfigure 71 DQL 304 DROP 322 DROP DATABASE 322 DROP TABLE 304, 322 Druckfilter 407 DSA-Schlüssel 455 dselect 70, 71 du 174 dump 56, 180 dumpe2fs 171, 186 DVD-Laufwerk 30 Dynamic Link Library 65 dynamically linked 65
E e2fsck 168 echo 90, 292, 298 Echtzeituhr 391 ed 154
512
edquota 186, 187 egrep 146, 149 EHCI 35 Einfügemodus 154 elif 300 else 300 elvis 154 emacspeak 354 Endzylinder 161 env 91, 285 esac 300 eterm 329 Ethernet 413 exec 181 exim 401, 405 expand 104 export 92, 284 ext2 163, 164, 170 ext3 163, 164, 170 Eyetracker 346
F FAT-32 163 FDDI 413 fdisk 160, 161, 166 Festplatte 30 fg 138 fgrep 149 FHS 203 fi 300 file 124 Filesystem Hierarchy Standard 203 find 118, 206, 298 finger 358 Fingerprint 454 Firewire 37 fmt 104 Fontpath 330 for 298 FQDN 430 free 140, 167 fsck 168, 170, 179, 180 fsck.cramfs 169 fsck.ext2 168 fsck.ext3 168 fsck.jfs 169 fsck.minix 168 fsck.msdos 169
1451.book Seite 513 Dienstag, 7. Juli 2009 2:18 14
Index
fsck.reiserfs 168 fsck.vfat 169 fsck.xfs 169 fslsfonts 335 ftp 428 ftp.kernel.org 428 function 287 Funktionen 287
G gawk 144 gdm 340, 341 gdm.conf 341 gdmconfig 341 GECOS 358 Gesten 346 GNOME 327, 340 Gnopernicus 354 GNU 88 GNU Privacy Guard 457 GnuPG 457 GOK 353 gpasswd 367 GPG 457 gpg.conf 461 Gpg4win 458 Gracetime 183, 184 GRANT 304 grep 45, 127, 144, 146, 147 GROUP 314 group 357 groupadd 366 groupdel 366 groupmod 366 grpck 369 grpconv 369 grpquota 181 grpunconv 369 GRUB 42, 58, 62 GRUB Stages 62 grub.conf 64 gshadow 357 GTK 329 gunzip 120, 121 gzip 120
H hald 38 halt 53 Hardlimit 183, 186, 441 Hardlinks 200 Hardware Abstracion Layer 38 Hashes 147 head 103 Headtracker 346 Herunterfahren 52 hexdump 106 hid.o 35 Hilfstechnologien 343 HISTSIZE 94 host 425 Host zu Host 413 Hostkey 454 hosts.allow 453 hosts.deny 453 Hotkeys 290 Hotplug 37 hotplug 37 HPFS 163 http //lpievent.lpice.eu/ 17 //tools.ietf.org/html/rfc791 416 //www.denic.de/de/whois/index.jsp 427 //www.ntp.org 392 hwclock 391
I IBM 325 ICMP 416 iconv 387 id_rsa 456 id_rsa.pub 456 if 300 ifconfig 432 ifdown 433 ifup 433 IGMP 413 IMAP 401 immutable 196 inetd 446 inetd.conf 447 init 46, 47, 48, 50, 53, 59, 130 initdefault 48
513
1451.book Seite 514 Dienstag, 7. Juli 2009 2:18 14
Index
initrd 60 inittab 48, 59 Inodes 173 Inputdevice 331 INSERT 304 insmod 25, 26 Internetschicht 413 interrupts 32 ioports 32 IP-Klassen 417 IPv4 415, 416 IPv6 415, 421 IRIX 164 ISO 8859 385 ISO-8859-1 386
J jobs 137, 138 JOIN 318 join 108 Joker 119, 145 journal 170
K KDE 327, 340 kdm 340 kdmrc 340 Kernel 22 Kernel-Parameter 42, 43, 59 Kernel-Ring-Buffer 44 KGpg 458 kill 135 killall 136 Klebrige Tasten 343 klogd 399 klogin 447 Kommandomodus 154 ksh 88, 282
L LANG 380 LANG=C 380 LC_ALL 380 ldconfig 65 ldd 65 LEFT JOIN 319
514
less 128 let 292, 293, 296 LILO 42, 58 lilo.conf 42, 60 LIMIT 313 Link-Layer 413 ln 198, 201 locale 380 locate 208 logger 399 logrotate 370 logrotate.conf 397 lp 407 lpadmin 410 lpc 408, 410 lpd 407 lpq 408, 410 lpr 407, 410 lprm 408, 410 ls 113 lsattr 196 lsdel 171 lsmod 24, 27, 35 lsof 442 lspci 33 lsusb 35 LVM 163
M mail 298 Mail - Aliase 401 Mail Delivery Agent 401 Mail Transfer Agent 401 Mail User Agent 401 mailq 403 Major Release 23 man 99 Manpages 97 MANPATH 97 manpath 98 manpath.config 98 Map-Installer 61 Master Boot Record 31, 40, 58 master.cf 404 Maussteuerung 343 Maustasten 344 MBR 41, 58, 60 MDA 401
1451.book Seite 515 Dienstag, 7. Juli 2009 2:18 14
Index
menu.lst 64 Metacity 327 Metazeichen 145, 149 MEZ 391 mingetty 48 Minor Release 23 MIT 325 mkdir 117 mkdosfs 163 mke2fs 164, 165, 172 mkfs 163, 164 mkfs.cramfs 164 mkfs.ext2 163 mkfs.ext3 163 mkfs.jfs 164 mkfs.msdos 163 mkfs.ntfs 164 mkfs.reiserfs 163 mkfs.vfat 163 mkfs.xfs 164 mkswap 166, 167 modinfo 24 modprobe 26 modprobe.conf 28 modprobe.conf.local 28 modules.conf 28 modules.dep 27, 28 Monolithische Kernel 22 Morse-Code 382 mount 88, 176, 178, 179 Mounten 176 Mountpoint 177 MTA 401 MUA 401 Murray-Code 382 mv 116
N nano 150 netstat 415, 436, 440 Netzwerk-Zugriff 413 Neustart 52 newaliases 402 newgrp 367 NFS 178 nfs 178 nfsd 131 nice 141, 143
nl 105 nmap 415, 440 noauto 181 noexec 181 nohup 139 nohup.out 139 nosuid 181 nouser 181 nslookup 425 NTFS 163 NTP 392 ntp.conf 393 ntpd 392, 393 ntpdc 393 ntpq 393
O od 106 OHCI 34 Oktett 416 Optionen 88 Orca 348 ORDER BY 304, 313 OSPF 416
P Partition 160, 161 Partitionierung 55 Partitionstabelle 31, 41, 162 passwd 191, 357, 364, 440 paste 108, 156 Patchlevel 23 PATH 90, 285, 294 PATH Variable 95 pci 32 PCI Bus 33 PCMCIA 37 Pearson Vue 17 Perl 144 PGP 457 pico 150 PID 130, 136, 142 PID 1 46 ping 423 Pipe 126 Pipes 128 pkg 76
515
1451.book Seite 516 Dienstag, 7. Juli 2009 2:18 14
Index
POP 401 postfix 401 poweroff 53 Power-On-Self-Test 39 pr 105 Primärschlüssel 309 Primary IDE 30 Prozesspriorität 141 ps 46, 131, 132, 135, 142 pstree 47, 132 pubring.gpg 461 putty 452 pwck 368 pwconv 368 pwd 96, 113 pwunconv 368 Python 144
Q qmail 401, 405 QT Librarys 329 Quellen 29 Queue 406 Quota 183 quota 187 quota.group 184 quota.user 184 quotacheck 184, 185 quotaoff 185 quotaon 185
R RAW 407 read 300 Real-Time-Clock 390 reboot 53 redirect 126 regex 144, 146 regexp 144, 157 regular expression 144 Regulärer Ausdruck 151 reiserfs 163 Rekursive Befehlsausführung 97 Relative Pfadangaben 114 renice 142, 143 repquota 187 Resolver 432
516
respawn 49 REVOKE 304 RgbPath 331 RIGHT JOIN 319 RIP 415 rm 117 rmdir 118 rmmod 25, 26 ro 181 ROOLBACK 304 root-Passwort vergessen 43 route 434 Routing-Tabelle 435 RPM 77 rpm 75, 78 rpm2cpio 78, 82 rpmarchive 78 rpmbuild 78 RPM-Datenbank 79 rpmdb 78 rpme 78 rpmgraph 78 rpmheader 78 rpmi 78 rpmlead 78 rpmlocate 78 rpmqpack 78 rpmquery 78 rpmrc 77 rpmsign 78 rpmsignature 78 rpmu 78 rpmverify 78 RSA-Key 455 rsh 88 RTC 390, 391 Rückgabewerte 294 Runlevel 46, 47 runlevel 52 Runlevel-Wechsel 52 rw 181 rxvt 329
S Samuel Morse 381 SASL 405 Sawfish 327 Screen 333
1451.book Seite 517 Dienstag, 7. Juli 2009 2:18 14
Index
Screenreader 342, 348, 354 SCSI 161 SCSI Laufwerke 31 Seahorse 458 Secondary IDE 30 secring.gpg 461 secure deletion 196 sed 144, 146, 150, 151 SELECT 304, 310 semikolonsepariert 151 sendmail 401 sendmail.cf 403 Serverflags 331 set 91, 284 Setgid 192 Setuid 191 SGID 192, 297 sh 282 shadow 357 shareable 203 Shared Object 65 she-bang! 292 Shell 88, 282 Shell-Variablen 90, 283 shift 296 shutdown 49, 53, 170 SIGCONT 135, 138 SIGHUP 134 SIGINT 134 SIGKILL 134 Signale 134 SIGSTOP 135 SIGTERM 135 SIGTSTP 135 Skeleton 290 slp 76 Smarthost 404 smbfs 178 SMTP-Relay 404 socket 440 Softlimit 183, 186, 441 Softlinks 52, 198 sort 107, 129 source 292 split 107 Spooler 407 SRI 412 SSH 451 ssh_config 453
ssh_known_hosts 453 ssh-add 457 ssh-agent 457 sshd_config 452 ssh-keygen 454 sshrc 453 stable 23 Standardgateway 421, 434 Startprotokollierung 44 Startskripte 52 startx 328 Startzylinder 161 stat 199, 202 static 203 statically linked 65 stderr 126 stdin 126 stdout 126, 128 Sticky Bit 192, 193 Sticky-Bit 297 stream 447 Stream Editor 150 Stream-Editor 144 su 444 Subnetzmaske 418 Subselects 317 Subshell 92, 284 Substitution 152 Suchmuster 146, 149 sudo 445 SUID 191, 193, 293 suid 181 SUID-Bit 297, 440 Superblocks 171 Superdaemon 446 swap 163 Swap-Datei 166 swapoff 166 swapon 166 Swap-Partition 166 Synaptics 73 Synopsis 99 sysfs 37 syslog 395 syslogd 395 syslog-ng 395 Systemzeit 390, 391
517
1451.book Seite 518 Dienstag, 7. Juli 2009 2:18 14
Index
T tac 103 tail 103, 398 tar 89 Tastatursteuerung 343 TCP 413, 414 TCP/IP 412, 413 tcpd 448 tcpdchk 447 TCP-Wrapper 448 tcsh 88 tee 129 telinit 49, 53 telnet 429 test 296 Textanker 145, 147 tgz 76 Thomson Prometric 17 Tilde 114 Timestamp 118 Token Ring 413 top 133, 142, 143 topq 409 touch 118 tr 110, 128 traceroute 423 tracetpath 424 Transportlayer 413 trustedb.gpg 461 tsclient 452 TTL 423 tune2fs 165, 170 tzselect 377, 378, 392
U Übergabevariablen 294 UCLA 412 UCSB 412 udev 38 UDP 413, 414 UHCI 34 ulimit 441 umask 190, 194, 195 Umgebungsvariablen 90, 283 umount 37, 169, 176, 179, 442 uname 23, 26, 97 undeletable 196
518
unexpand 104 Unicode 386 uniq 107, 129 unmounten 176 unset 93, 285, 298 unshareable 203 UPDATE 304, 312 updatedb 137, 208, 209 uptime 139 USB 34 USB 1.1 34 USB 2.0 35 usb-ehci 37 usb-ehci.o 35 USB-Klassen 35 USB-Maus 35 USB-Memory-Sticks 35 usbmgr 36, 37 usbmgr.conf 37 usb-ohci 37 usb-ohci.o 34 usb-storage.o 35 usb-uhci 37 usb-uhci.o 34 user 181 useradd 362 userdel 363 usermod 363 users 181 usrquota 181 UTC 391 UTF-8 386
V variable 203 vi 150, 154 vile 154 vim 154 visudo 445 vmlinuz 29
W w 139 Warteschlange 406 wc 105, 174 whatis 99, 206 WHERE 310, 311
1451.book Seite 519 Dienstag, 7. Juli 2009 2:18 14
Index
whereis 100, 205 which 96, 101, 205 while 296 whois 427 Wildcards 119, 144, 145, 148 Window Manager 327
X X.org 326 X11R6 326 X11-Tunnel 451 xargs 129 X-Clients 326 X-Consortium 326 xdm 340 xdm-config 340 xdpyinfo 337 XF86Config 330 X-Fontserver 334 XFree86 326 xfs 334 xhost 336 xinetd 448 xinetd.conf 448 xinit 328
xinitrc 328, 329 X-Librarys 329 xntpd 393 xorg.conf 330 X-Server 326 xserverrc 328 Xsetup 340 xterm 329 xvidtune 333 X-Windows 325, 328 xwininfo 336
Y yank 156 yum 77, 83 yumdownloader 86
Z Zeitsynchronisation 392 Zeitzone 376 zsh 88, 282 Zugriffsrechte 189 Zugriffszeit 118
519