magnum Linux
Unser Online-Tipp für noch mehr Wissen …
... aktuelles Fachwissen rund um die Uhr – zum Probelesen, Downloaden oder auch auf Papier.
www.InformIT.de
magnum
UTE HERTZOG
kompakt k o m p le t t kompetent
Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über
abrufbar.
Die Informationen in diesem Buch werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Fast alle Hardware- und Softwarebezeichnungen und weitere Stichworte und sonstige Angaben, die in diesem Buch verwendet werden, sind als eingetragene Marken geschützt. Da es nicht möglich ist, in allen Fällen zeitnah zu ermitteln, ob ein Markenschutz besteht, wird das Symbol ® in diesem Buch nicht verwendet. Umwelthinweis: Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt.
10 9 8 7 6 5 4 3 2 1
08 07 06
ISBN-10: 3-8272-6810-9 ISBN-13: 978-3-8272-6810-5
© 2006 by Markt+Technik Verlag, ein Imprint der Pearson Education Deutschland GmbH, Martin-Kollar-Straße 10–12, D-81829 München/Germany Alle Rechte vorbehalten Coverkonzept: independent Medien-Design, Widenmayerstraße 16, 80538 München Lektorat: Boris Karnikowski, [email protected] Fachlektorat: Detlef Lannert & Michael Gutmann, Düsseldorf Korrektorat: Marita Böhm, München Herstellung: Philipp Burkart [email protected] Satz: Michael und Silke Maier, Ingolstadt, www.magus-publishing.de Druck und Verarbeitung: Bercker, Kevelaer Printed in Germany
Quickview Teil 1: Grundlagen Im ersten Teil lernen Sie alle Möglichkeiten unter Linux kennen, die ein regulärer Benutzer hat. Für die meisten der in den später folgenden Kapiteln vorgestellten Arbeiten und Aufgaben benötigen Sie spezielle Systemrechte, eine Ausnahme bildet im Grundlagenteil nur die Installation und Deinstallation von Software. Sie erhalten zuerst Informationen darüber, was Linux ist, was es kann und welches die bekanntesten Linux-Distributionen sind. Mit Hilfe des zweiten Kapitels können Sie gleich mit Linux loslegen, denn es beschreibt Ihnen im Detail die Installation von SUSE Linux 10.0, Fedora Core Linux 4.0 und Debian GNU/Linux 3.1. Dasselbe Kapitel zeigt Ihnen auch, wie Sie mit Hilfe von Befehlen oder Tools der grafischen Oberfläche überflüssige Softwarepakete wieder deinstallieren bzw. zusätzlich benötigte Pakete nachträglich installieren können. Wenn Sie zum ersten Mal mit der Befehlszeile von Linux experimentieren möchten, ist Kapitel 3 das Richtige für Sie: dort erhalten Sie Tipps für den Umgang mit Befehlen und zum Thema Hilfe unter Linux. In Kapitel 4 können Sie dann mit Hilfe von vielen verschiedenen Linux-Befehlen Dateien und Verzeichnisse anlegen, löschen und bearbeiten oder für diese Aufgabe auch auf die grafische Oberfläche zurückgreifen. Wie Sie Ihre Dateien und Verzeichnisse unter Linux vor unbefugtem Zugriff schützen, erfahren Sie in Kapitel 5. Hier werden nicht nur die einfachen grundlegenden Zugriffsrechte beschrieben, sondern auch zusätzliche spezielle Rechte und die so genannten Access Control Lists. Wenn Sie nun Freude am Umgang mit der Befehlszeile gefunden haben (obwohl Sie alle bisher vorgestellten Aufgaben auch mit der grafischen Oberfläche durchführen können), können Sie Ihr Wissen über Linux-Shells und deren Möglichkeiten in Kapitel 6 vertiefen. Das letzte Kapitel des ersten Teils zeigt Ihnen schließlich, dass die Multimediawelt Ihnen auch unter Linux offen steht. Sie lernen, Video- und Audiodateien abzuspielen sowie Daten- und Audio-CDs individuell zusammenzustellen und zu brennen.
Teil 2: Systemverwaltung In diesem Teil müssen Sie über die speziellen Administrationsrechte des so genannten Superusers root verfügen. Aus Sicherheitsgründen ist es nur dem Systemadministrator erlaubt, Änderungen am System durchzuführen, zum Beispiel neue Benutzer und Gruppen anzulegen bzw. zu ändern oder zu löschen. Dies wird ausführlich in Kapitel 8 mit Befehlen und Tools der grafischen Oberfläche erläutert. Wie Sie Ihr Linux-System herunterfahren oder eine spezielle Bootkonfiguration einrichten, lernen Sie in Kapitel 9. Kapitel 10 zeigt Ihnen, wie Sie Geräte, wie zum Beispiel eine Festplatte, unter Linux aktivieren und in Ihr aktives Dateisystem einbinden können. Ein besonderes Kapitel der Geräteverwaltung ist die Druckeradministration, die in Kapitel 11 beschrieben wird. Welche Möglichkeiten Sie haben, um laufende Prozesse anzuzeigen und zu manipulieren, wird in Kapitel 12 gezeigt. Das darauf folgende Kapitel ist für Leser gedacht, die ihr System genau überwachen und eventuell mit dem Kernel experimentieren wollen. Wie Sie die wichtigste Aufgabe der Systemverwaltung bewälti-
5
Quickview
magnum
gen, die Datensicherung und -wiederherstellung, wird in Kapitel 14 ausführlich geschildert und in diesem Zusammenhang werden einige Überlegungen zu Datensicherheit und -strategien vorgestellt.
Teil 3: Netzwerk Häufig werden Sie Ihren Rechner nicht als Standalone-Rechner betreiben, sondern ihn in ein bestehendes Netzwerk einbinden bzw. ein Netzwerk einrichten. Das Konfigurieren der Netzwerkkarte und andere grundlegende Netzwerkaufgaben werden in Kapitel 15 beschrieben. Wie Sie ins Internet per Modem, ISDN oder DSL gelangen und welche Möglichkeiten das Internet Ihnen bietet, erfahren Sie in Kapitel 16. Außerdem wird ein Tool vorgestellt, mit dem Sie Ihre verschiedenen Messenger-Dienste problemlos gemeinsam verwalten können. Kapitel 17 ist für Sie interessant, wenn Sie Dateien und Verzeichnisse in einem reinen Linux-Netzwerk mit NFS oder in einem Netzwerk, das aus Microsoft Windows- und Linux-Rechnern besteht, mit Samba freigeben wollen. In Kapitel 18 erhalten Sie eine Einführung in Namensdienste und lernen, wie Sie DNS und NIS unter Linux konfigurieren. Das letzte Kapitel liefert Ihnen schließlich noch einige Überlegungen zum Thema Sicherheit, beschreibt den Umgang mit einem LinuxPaketfilter und informiert Sie über die Möglichkeiten einer Firewall und eines Intrusion-Detection-Systems unter Linux. Anhang A beschreibt den Inhalt der auf DVD beiliegenden openSUSE 10 OSS.
6
Inhaltsverzeichnis Quickview .......................................................................................... 5 Liebe Leserin, lieber Leser,................................................................ 21
Teil 1 Grundlagen............................................................... 25 1
2
Was ist Linux? .................................................................................. 27 1.1
Wie alles begann .................................................................. 27 1.1.1 Am Anfang war Unix ............................................... 27 1.1.2 Die »Unix-Kriege« .................................................... 28 1.1.3 Das GNU-Projekt ..................................................... 30 1.1.4 Freie Software und Open Source .............................. 32 1.1.5 Linux und das GNU-Projekt ..................................... 32
1.2
Linux-Distributionen ............................................................ 33 1.2.1 SUSE Linux .............................................................. 33 1.2.2 Debian GNU/Linux .................................................. 34 1.2.3 Fedora Core ............................................................. 36 1.2.4 Mandriva/Mandrake ................................................ 36 1.2.5 Knoppix ................................................................... 37 1.2.6 Slackware ................................................................. 38 1.2.7 Red Hat Linux ......................................................... 38
1.3
Distributionsquellen ............................................................. 39
1.4
Welche Eigenschaften hat Linux? ......................................... 40
1.5
Linux-Komponenten............................................................. 41 1.5.1 Der Kernel ................................................................ 41 1.5.2 Die Shell ................................................................... 42 1.5.3 Das X-Window-System ............................................ 43 1.5.4 System- und Anwendungsprogramme ....................... 43
Installation und Updates................................................................... 45 2.1
Installationsvoraussetzungen ................................................ 45 2.1.1 Hardwarevoraussetzungen für Linux ........................ 45 2.1.2 Linux als zweites Betriebssystem installieren ............ 45
7
Inhaltsverzeichnis
3
4
2.2
Installation ........................................................................... 46 2.2.1 Installation von SUSE Linux 10.0 ............................. 47 2.2.2 Installation von Fedora Core 4.0 .............................. 57 2.2.3 Installation von Debian GNU/Linux 3.1 ................... 65
2.3
Softwareupdates ................................................................... 72
2.4
Softwarepakete installieren und deinstallieren ...................... 72 2.4.1 RPM-Pakete installieren ........................................... 73 2.4.2 Grafische Paketverwaltung mit KDE ........................ 75 2.4.3 Grafische Paketverwaltung mit YaST ....................... 79 2.4.4 Grafische Paketverwaltung mit Fedora Linux ........... 82
2.5
Debians Paketverwaltung ..................................................... 83 2.5.1 Der Befehl aptitude .................................................. 83 2.5.2 Der Befehl apt-get ..................................................... 88
2.6
Quellcode kompilieren.......................................................... 89 2.6.1 Komprimierte Quellcodedateien entpacken .............. 90
Die Befehlszeile und Hilfe verwenden ............................................... 93 3.1
Aufbau von Linux-Befehlen .................................................. 93
3.2
Optionen und Argumente ..................................................... 94
3.3
Hilfe unter Linux.................................................................. 95 3.3.1 Hilfe-Befehle unter Linux ......................................... 95 3.3.2 Grafische Hilfe ....................................................... 100 3.3.3 Internet, Mailinglisten und Webforen ..................... 104
Mit Dateien und Verzeichnissen arbeiten ........................................ 107 4.1
8
magnum
Dateien und Verzeichnisse bearbeiten ................................. 107 4.1.1 Verzeichnisse erstellen ............................................ 107 4.1.2 Dateien erstellen und aktualisieren ......................... 108 4.1.3 Verzeichnisse wechseln ........................................... 109 4.1.4 Verzeichnisse anzeigen ............................................ 110 4.1.5 Dateien anzeigen .................................................... 115 4.1.6 Dateien und Verzeichnisse löschen ......................... 126 4.1.7 Dateien und Verzeichnisse kopieren ....................... 128 4.1.8 Dateien und Verzeichnisse verschieben und umbenennen .................................................... 130
Inhaltsverzeichnis
4.1.9 4.1.10 4.1.11 4.1.12
5
Dateien vergleichen ................................................ 131 Dateiausgabe formatieren ....................................... 136 Mit Dateien arbeiten .............................................. 150 Dateien und Verzeichnisse mit dem Konqueror verwalten.............................................. 158
4.2
Editoren und Werkzeuge .................................................... 164 4.2.1 Der Editor vi .......................................................... 164 4.2.2 Der Editor joe ......................................................... 168 4.2.3 Der Streameditor sed .............................................. 170 4.2.4 Der Befehl awk ....................................................... 174 4.2.5 Dateien mit Hilfe von Editoren in KDE erstellen .... 181
4.3
Links .................................................................................. 183 4.3.1 Hard Links ............................................................. 183 4.3.2 Symbolische Links .................................................. 184 4.3.3 Verknüpfungen in KDE erstellen ............................ 185
4.4
Dateien und Dateiinhalte suchen ........................................ 186 4.4.1 Der Befehl find ....................................................... 186 4.4.2 Der Befehl grep ....................................................... 192 4.4.3 Dateien oder Verzeichnisse mit Hilfe von KDE suchen..................................................... 196
Zugriffsschutz für Dateien und Verzeichnisse anwenden................. 199 5.1
Zugriffs- und Besitzrechte................................................... 199 5.1.1 Grundlagen der Zugriffsberechtigungen ................. 199 5.1.2 Arten von Zugriffsrechten und ihre Bedeutung ....... 201 5.1.3 Überprüfen der Berechtigungen .............................. 202 5.1.4 Setzen von Zugriffsrechten ..................................... 203
5.2
Spezielle Zugriffsrechte....................................................... 210 5.2.1 Das SetUID-Zugriffsrecht ....................................... 210 5.2.2 Das SetGID-Zugriffsrecht ....................................... 211 5.2.3 Das Zugriffsrecht für »Shared Directories« oder »Mandatory Locking-Bit« .............................. 212 5.2.4 Das Sticky Bit-Zugriffsrecht ................................... 213
9
Inhaltsverzeichnis
6
10
magnum
5.3
Datei- und Gruppenbesitz ändern ....................................... 215 5.3.1 Der Befehl chattr .................................................... 215 5.3.2 Der Befehl chfn ...................................................... 216 5.3.3 Der Befehl chown ................................................... 217 5.3.4 Der Befehl chgrp .................................................... 218 5.3.5 Der Befehl groups ................................................... 219 5.3.6 Der Befehl newgrp .................................................. 219
5.4
Access Control Lists ........................................................... 220 5.4.1 Der Befehl setfacl .................................................... 220 5.4.2 Der Befehl getfacl ................................................... 222 5.4.3 ACL-Einträge erzeugen, ändern und löschen .......... 223
5.5
Zugriffsrechte mit Hilfe von KDE einrichten ...................... 225
Grundlagen der Shells und Shellskriptprogrammierung .................. 229 6.1
Arten von Shells.................................................................. 230
6.2
Sonderzeichen der Shells ..................................................... 232 6.2.1 Metazeichen ........................................................... 232 6.2.2 Ein-/Ausgabeumlenkung ......................................... 239 6.2.3 Pipe-Mechanismus ................................................. 241 6.2.4 Gesamtüberblick über die Sonderzeichen ................ 242 6.2.5 Funktionen ............................................................. 244
6.3
Die verschiedenen Shells ..................................................... 245 6.3.1 Die Bourne-Again-Shell .......................................... 245 6.3.2 Die C- und TC-Shell ............................................... 255
6.4
Variable.............................................................................. 258 6.4.1 Shellvariable ........................................................... 259 6.4.2 Standardvariablen .................................................. 261 6.4.3 Shellvariablen der C- und TC-Shell ......................... 264
6.5
Grundlagen der Shellskriptprogrammierung ....................... 265 6.5.1 Variablen der Shellskriptprogrammierung .............. 265 6.5.2 Bedingungsabfragen ............................................... 266
Inhaltsverzeichnis
7
Multimedia ..................................................................................... 271 7.1
Audio unter Linux .............................................................. 271 7.1.1 Audiodateitypen ..................................................... 271
7.2
Soundkarte einrichten......................................................... 272 7.2.1 Der Befehl alsaconf ................................................. 273 7.2.2 Lautstärke bei der Soundkarte regeln? .................... 275 7.2.3 Soundkarte grafisch mit YaST konfigurieren .......... 277 7.2.4 Soundkarte grafisch mit Fedora Linux konfigurieren................................................ 279 7.2.5 Audio-CDs abspielen .............................................. 280 7.2.6 Audiodateien abspielen ........................................... 283 7.2.7 Videodateien abspielen ........................................... 286
7.3
CDs brennen....................................................................... 289 7.3.1 Dateisysteme für CDs und DVDs ........................... 289 7.3.2 CDs mit Linux-Befehlen erstellen ........................... 289 7.3.3 Das Programm K3b ................................................ 296 7.3.4 Encoder-Programme der KDE ................................ 306
Teil 2 Systemverwaltung................................................... 313 8
Benutzer und Gruppen verwalten ................................................... 315 8.1
Gruppen verwalten ............................................................. 315 8.1.1 Gruppen anlegen mit dem Befehl groupadd ............ 316 8.1.2 Gruppen ändern mit dem Befehl groupmod ............ 317 8.1.3 Gruppen löschen mit dem Befehl groupdel ............. 317 8.1.4 Die Datei /etc/group ............................................... 318 8.1.5 Die Datei /etc/gshadow ........................................... 319 8.1.6 Weitere Befehle der Gruppenverwaltung ................ 319
8.2
Benutzer verwalten ............................................................. 322 8.2.1 Defaultwerte zum Anlegen von Benutzern .............. 323 8.2.2 Benutzer anlegen mit dem Befehl useradd ............... 324 8.2.3 Passwortablauf mit dem Befehl passwd steuern ...... 325 8.2.4 Benutzer ändern mit dem Befehl usermod ............... 327 8.2.5 Benutzer löschen mit dem Befehl userdel ................ 328 8.2.6 Die Datei /etc/passwd ............................................. 329 8.2.7 Die Datei /etc/shadow ............................................. 330 8.2.8 Weitere Befehle der Benutzerverwaltung ................. 331
11
Inhaltsverzeichnis
9
12
magnum
8.3
Weitere Konfigurationsdateien der Benutzer- und Gruppenverwaltung ............................... 340 8.3.1 Die Datei /etc/login.defs .......................................... 340 8.3.2 Die Datei /etc/securetty ........................................... 342 8.3.3 Die Datei /etc/shells ................................................ 342
8.4
Initialisierungsdateien ......................................................... 343 8.4.1 Die Datei /etc/profile .............................................. 344 8.4.2 Die Datei ~/.profile ................................................. 345 8.4.3 Initialisierungsdateien einlesen ................................ 346
8.5
Grafische Benutzerverwaltung ............................................ 346 8.5.1 KDE-Benutzerverwaltung ....................................... 346 8.5.2 Gruppenverwaltung mit YaST ................................ 350 8.5.3 Benutzerverwaltung mit YaST ................................ 353 8.5.4 Sicherheitseinstellungen mit YaST .......................... 359 8.5.5 Fedora-Linux-Benutzerverwaltung ......................... 363
Linux booten und herunterfahren ................................................... 367 9.1
Der Bootprozess ................................................................. 367 9.1.1 Der Power-on-self-Test (POST) .............................. 367 9.1.2 Die BIOS-Phase ...................................................... 367 9.1.3 Die Kernel-Initialisierungsphase ............................. 368
9.2
Die Bootloader ................................................................... 368 9.2.1 Der Bootloader lilo ................................................. 369 9.2.2 LILO-Konfiguration über YaST ............................. 375 9.2.3 Der Bootloader GRUB ........................................... 377 9.2.4 GRUB-Konfiguration über YaST ............................ 384
9.3
Bootsektor sichern und wiederherstellen............................. 386
9.4
Die Runlevel von Linux ...................................................... 9.4.1 Überblick über die Runlevel von SUSE Linux 10.0 .................................................... 9.4.2 Überblick über die Runlevel von Debian GNU/Linux 3.1 .......................................... 9.4.3 Überblick über die Runlevel von Fedora Core Linux 4.0 ...........................................
387 388 389 390
Inhaltsverzeichnis
9.4.4 9.4.5 9.4.6 9.4.7 9.4.8 9.5
10
Die Datei /etc/inittab .............................................. 390 Die Run-Control-Skripte ........................................ 393 Run-Control-Skripte mit YaST bearbeiten .............. 400 Run-Control-Skripte mit KDE SysV-Init-Editor bearbeiten............................ 402 Run-Control-Skripte mit Fedora Linux grafisch bearbeiten ................................................. 404
Das System herunterfahren ................................................. 405 9.5.1 Der Befehl shutdown .............................................. 405 9.5.2 Der Befehl init ........................................................ 406 9.5.3 Der Befehl halt ....................................................... 407 9.5.4 Der Befehl poweroff ............................................... 407 9.5.5 Der Befehl reboot ................................................... 408 9.5.6 Der Befehl swsusp .................................................. 408
Geräteverwaltung ........................................................................... 409 10.1
Festplatten verwalten.......................................................... 409 10.1.1 Gerätedateien ......................................................... 410 10.1.2 Gerätenamen .......................................................... 410 10.1.3 Gerätedateien mit dem Befehl mknod erzeugen ...... 416 10.1.4 Gerätedateien mit dem Befehl MAKEDEV erzeugen ................................................................. 417 10.1.5 PCI-Geräte mit dem Befehl lspci anzeigen ............... 418 10.1.6 USB-Geräte mit dem Befehl lsusb anzeigen ............. 419 10.1.7 Festplattenanalyse mit den Smartmontools ............. 420 10.1.8 DMA-Modus von IDE-Festplatten ......................... 422 10.1.9 DMA-Modus von IDE-Festplatten mit YaST aktivieren................................................ 423
10.2
Der Verzeichnisbaum von Linux......................................... 424
10.3
Festplatten partitionieren.................................................... 426 10.3.1 Der Befehl fdisk ...................................................... 427 10.3.2 Der Befehl cfdisk .................................................... 430 10.3.3 Grafische Hardware-Informationen mit YaST ........ 432 10.3.4 Grafische Hardware-Informationen mit Fedora ...... 433 10.3.5 Grafische Festplattenpartitionierung mit YaST ....... 434
13
Inhaltsverzeichnis
14
magnum
10.4
Dateisystem verwalten ........................................................ 436 10.4.1 Lokale Dateisysteme ............................................... 436 10.4.2 Netzwerk- oder verteilte Dateisysteme .................... 437 10.4.3 Pseudodateisysteme ................................................ 438 10.4.4 Der Aufbau von ext2 .............................................. 438 10.4.5 Das Dateisystem ext3 ............................................. 443 10.4.6 Das Dateisystem reiserfs ......................................... 444 10.4.7 Die verschiedenen Dateitypen ................................. 444 10.4.8 Dateisysteme anlegen .............................................. 445 10.4.9 Dateisystemgröße verändern ................................... 453 10.4.10Dateisysteme einbinden .......................................... 455 10.4.11Dateisysteme überprüfen ........................................ 463 10.4.12Informationen zu Dateisystemen ausgeben ............. 474 10.4.13Grafische Systemverwaltung mit KDE .................... 476
10.5
Swapping unter Linux ........................................................ 476 10.5.1 Swapping und Paging ............................................. 476 10.5.2 Der Befehl mkswap ................................................ 477 10.5.3 Der Befehl swapon ................................................. 478 10.5.4 Der Befehl swapoff ................................................. 479 10.5.5 Der Befehl free ....................................................... 479 10.5.6 Swap-Konfiguration mit YaST ............................... 480
10.6
Mit Disketten arbeiten........................................................ 481 10.6.1 Der Befehl fdformat ................................................ 481 10.6.2 Der Befehl setfdprm ................................................ 481 10.6.3 Grafische Diskettenverwaltung mit KDE ................ 482 10.6.4 Die Mtools ............................................................. 483
10.7
Monitor und Grafikkarte einrichten ................................... 486 10.7.1 Der Befehl xf86config ............................................ 486 10.7.2 Die Datei /etc/X11/XF86Config ............................. 490 10.7.3 Der Befehl vidmode ................................................ 491 10.7.4 Monitor und Grafikkarte mit YaST und SaX2 einrichten ............................................... 492
Inhaltsverzeichnis
10.8
Terminal einstellen ............................................................. 504 10.8.1 Der Befehl tty ......................................................... 504 10.8.2 Der Befehl stty ........................................................ 504
10.9
Tastatur einrichten ............................................................. 505 10.9.1 Der Befehl kbd_mode ............................................. 505 10.9.2 Der Befehl kbdrate ................................................. 506 10.9.3 Maus und Tastatur mit YaST und SaX2 einrichten ............................................... 507
10.10 Systemkonfiguration mit SUSE Linux ................................. 512 10.11 Systemkonfiguration mit Debian GNU/Linux..................... 513 11
Drucker verwalten .......................................................................... 515 11.1
Drucksysteme unter Linux.................................................. 515
11.2
BSD-LPD- und LPRng-Druckerverwaltung......................... 517 11.2.1 Der Daemon lpd ..................................................... 517 11.2.2 Die Konfigurationsdatei /etc/printcap ..................... 517 11.2.3 Im Netzwerk drucken ............................................. 519 11.2.4 Druckertreiberfilter ............................................... 520 11.2.5 Druckerverwaltung mit lpc ..................................... 521
11.3
Das neue Drucksystem CUPS.............................................. 522 11.3.1 Das Verzeichnis /etc/cups ........................................ 523 11.3.2 MIME-Types .......................................................... 523 11.3.3 Die Datei /etc/cups/cupsd.conf ................................ 524 11.3.4 Der Daemon cupsd ................................................. 525 11.3.5 Druckerverwaltung über Webserver ....................... 526 11.3.6 KDE-Druckerverwaltung ........................................ 530 11.3.7 Grafische Druckerverwaltung mit YaST und CUPS ..................................................... 531 11.3.8 Grafische Druckerverwaltung bei Fedora ............... 539
11.4
Drucker auf der Befehlszeile einrichten ............................... 542 11.4.1 Bestimmung des Druckziels .................................... 548
11.5
Dateien drucken ................................................................. 548 11.5.1 System V-Druckbefehle .......................................... 548 11.5.2 BSD-Druckbefehle .................................................. 552
15
Inhaltsverzeichnis
12
13
16
magnum
Prozessverwaltung .......................................................................... 555 12.1
Prozesse verwalten.............................................................. 555 12.1.1 Signale .................................................................... 555 12.1.2 Befehle für die Prozessverwaltung ........................... 558 12.1.3 Daemons starten oder beenden ............................... 574 12.1.4 Jobkontrolle ........................................................... 575
12.2
Automatisches Starten von Prozessen ................................. 577 12.2.1 Prozesse einmalig einplanen .................................... 577 12.2.2 Prozesse wiederholt einplanen ................................ 579 12.2.3 Cron-Jobs mit KDE einplanen ................................ 583
12.3
Prozesse mit KDE überwachen ........................................... 585
Kernel-Verwaltung und Systemüberwachung.................................. 589 13.1
Den Kernel verwalten ......................................................... 589 13.1.1 Der Befehl lsmod .................................................... 591 13.1.2 Der Befehl insmod .................................................. 592 13.1.3 Der Befehl modprobe ............................................. 593 13.1.4 Der Befehl rmmod .................................................. 594 13.1.5 Der Befehl modinfo ................................................ 595 13.1.6 Der Befehl depmod ................................................. 595 13.1.7 Die Datei modules.dep ........................................... 597 13.1.8 Die Datei /etc/modules.conf .................................... 597 13.1.9 Die Datei /etc/modprobe.conf ................................. 598
13.2
Kernel konfigurieren........................................................... 599 13.2.1 Kernel übersetzen und installieren .......................... 600 13.2.2 Module übersetzen und installieren ........................ 601
13.3
Das System überwachen ..................................................... 601
13.4
Das System protokollieren .................................................. 611 13.4.1 Der Dienst syslogd ................................................. 611 13.4.2 Die Datei /etc/syslog.conf ....................................... 612 13.4.3 Befehle der Systemprotokollierung ......................... 615 13.4.4 Protokolldateien ..................................................... 620 13.4.5 Grafische Anzeige von Protokolldateien mit YAST..................................... 620 13.4.6 Grafische Anzeige von Protokolldateien mit KDE ...................................... 623
Inhaltsverzeichnis
14
Datensicherung und -wiederherstellung .......................................... 625 14.1
Sicherungsarten und -strategien .......................................... 626 14.1.1 Sicherungsarten ...................................................... 626 14.1.2 Sicherungsstrategien ............................................... 627
14.2
Medien für Datensicherungen............................................. 630
14.3
Tools zur Datensicherung ................................................... 631 14.3.1 Die Befehle dump und restore ................................. 631 14.3.2 Der Befehl mt ......................................................... 635 14.3.3 Dateien archivieren und komprimieren ................... 636
14.4
Datensicherung und -wiederherstellung mit YaST .............. 651
14.5
KDE-Tools zur Datensicherung .......................................... 657 14.5.1 Daten mit Ark archivieren ...................................... 657 14.5.2 Datensicherung mit KDar ....................................... 658
Teil 3 Netzwerk................................................................ 667 15
Netzwerkgrundlagen....................................................................... 669 15.1
Netzwerkgrundlagen .......................................................... 669 15.1.1 Netzwerkkarten ...................................................... 669 15.1.2 Netzwerkkomponenten .......................................... 670 15.1.3 Das OSI-Referenzmodell ........................................ 671 15.1.4 Aufbau von IP-Adressen und Subnetting ................ 672
15.2
Netzwerk einrichten ........................................................... 674 15.2.1 Netzwerkkonfiguration zur Bootzeit ...................... 674 15.2.2 Befehle zur Netzwerkkonfiguration ........................ 675 15.2.3 Netzwerk mit YaST einrichten ............................... 680 15.2.4 Netzwerk mit Fedora Linux grafisch einrichten ...... 688
15.3
Wireless LAN ..................................................................... 690 15.3.1 WLAN mit KWiFiManager einrichten .................... 690 15.3.2 WLAN mit YaST einrichten ................................... 693
15.4
Das Netzwerk überprüfen................................................... 694 15.4.1 Grafische Netzwerktools ........................................ 702 15.4.2 Im Netzwerk arbeiten ............................................. 706 15.4.3 FTP mit KBear durchführen ................................... 718
17
Inhaltsverzeichnis
16
17
15.5
Das Netzwerk verwalten..................................................... 721 15.5.1 Die Netzwerkkonfigurationsdateien ....................... 721 15.5.2 Konfiguration von inetd/xinetd mit YaST ............... 732 15.5.3 Netzwerk-Daemons ................................................ 735
15.6
Trusted Host-Umgebung .................................................... 737 15.6.1 Dateien der Trusted Host-Umgebung ..................... 737 15.6.2 Trusted Host-Umgebung mit Secure Shell ............... 738
15.7
Routing .............................................................................. 739 15.7.1 Routingprozesse ..................................................... 741 15.7.2 Routing mit YaST einrichten .................................. 744
Internetdienste einrichten................................................................ 745 16.1
Internet-Zugang einrichten ................................................. 745 16.1.1 Voraussetzungen für einen Internetanschluss .......... 746 16.1.2 Internet mit YaST einrichten .................................. 747 16.1.3 Internet mit Fedora Core Linux grafisch einrichten .................................................. 762 16.1.4 Den Internetzugang starten ..................................... 767 16.1.5 Webbrowser unter Linux ....................................... 768 16.1.6 Dateien/Grafiken aus dem Internet herunterladen ......................................................... 769 16.1.7 Im Internet suchen .................................................. 770
16.2
E-Mails schreiben und versenden........................................ 772 16.2.1 E-Mail-Dienst eines Providers nutzen ..................... 772 16.2.2 E-Mails empfangen ................................................. 777 16.2.3 Kostenloses E-Mail-Konto aktivieren ..................... 780
16.3
Im Internet chatten ............................................................. 781
16.4
Messenger-Dienste.............................................................. 787
Netzwerke mit NFS oder Samba verbinden..................................... 791 17.1
18
magnum
NFS einrichten.................................................................... 791 17.1.1 Überblick über NFS ................................................ 791 17.1.2 NFS-Prozesse .......................................................... 793 17.1.3 Einen NFS-Server konfigurieren ............................. 796 17.1.4 Konfiguration eines NFS-Clients ............................ 803 17.1.5 Weitere NFS-Befehle ............................................... 806 17.1.6 Überprüfen von NFS-Funktionen ........................... 808
Inhaltsverzeichnis
18
17.2
Der Automounter ............................................................... 808 17.2.1 Funktion und Zugriff des Automounters ................ 808 17.2.2 Das Dateisystem autofs .......................................... 810 17.2.3 Das Programm automount ..................................... 811 17.2.4 Die Konfigurationsdateien des Automounters ........ 812 17.2.5 Automounter starten und anwenden ...................... 814
17.3
Samba einrichten ................................................................ 816 17.3.1 Samba-Daemonen .................................................. 816 17.3.2 Die Konfigurationsdatei smb.conf .......................... 819 17.3.3 Passwortsicherheit unter Samba ............................. 826 17.3.4 Samba-Server starten und anhalten ......................... 830 17.3.5 Samba-Client und Samba-Server verbinden ............ 830 17.3.6 Grafische Konfiguration mit SWAT ....................... 835 17.3.7 Grafische Konfiguration mit YaSt .......................... 840 17.3.8 Grafische Konfiguration mit Fedora Core Linux ................................................. 845
Namensdienste................................................................................ 849 18.1
Einführung ......................................................................... 849 18.1.1 Arten von Namensdiensten ..................................... 850 18.1.2 Der Befehl getent .................................................... 850 18.1.3 Die Datei /etc/nsswitch.conf ................................... 851 18.1.4 Der Name Service Cache Daemon (nscd) ................ 853
18.2
Domain Name Service (DNS) ............................................. 856 18.2.1 DNS-Konfigurationsdateien ................................... 858 18.2.2 Einen DNS-Nameserver konfigurieren .................... 860 18.2.3 Einen DNS-Client konfigurieren ............................. 873 18.2.4 DNS-Befehle ........................................................... 873
18.3
Network Information Service (NIS) .................................... 877 18.3.1 Merkmale von NIS ................................................. 878 18.3.2 NIS-Dateien und NIS-Maps .................................... 878 18.3.3 NIS-Konfigurationsdateien ..................................... 880 18.3.4 NIS-Befehle ............................................................ 883 18.3.5 NIS-Daemonen ....................................................... 886 18.3.6 Konfiguration des NIS-Master-Servers ................... 888 18.3.7 Konfiguration eines NIS-Slave-Servers .................... 889 18.3.8 NIS-Client .............................................................. 890 18.3.9 NIS mit YaST einrichten ......................................... 891
19
Inhaltsverzeichnis
19
A
magnum
Sicherheit ........................................................................................ 897 19.1
Allgemeines ........................................................................ 897
19.2
Arten von Bedrohungen...................................................... 898 19.2.1 Physikalische Bedrohungen .................................... 898 19.2.2 Systembezogene Bedrohungen ................................ 898 19.2.3 Systembezogene Schutzmaßnahmen ....................... 902
19.3
Paketfilter ........................................................................... 906 19.3.1 Der Paketfilter iptables ........................................... 907
19.4
Die Firewall ........................................................................ 915 19.4.1 Bestandteile einer Firewall ...................................... 916 19.4.2 Eine Firewall mit YaST für SUSE Linux einrichten ...................................... 917 19.4.3 Eine Firewall für Fedora Core Linux einrichten................................. 920
19.5
Intrusion-Detection-Systeme (IDS)...................................... 922 19.5.1 Typen von IDS ....................................................... 922 19.5.2 Möglichkeiten eines IDS ......................................... 923 19.5.3 Aufbau eines IDS .................................................... 924 19.5.4 Fazit ....................................................................... 925
Inhalt der DVD-ROM .................................................................... 927 Stichwortverzeichnis ....................................................................... 929
20
Liebe Leserin, lieber Leser, Linux ist für viele ein neues Betriebssystem, an das sie sich nicht recht heranwagen, da hartnäckigen Gerüchten zufolge einerseits der Umgang mit komplizierten Befehlen notwendig ist, andererseits auch die Hardware oft Probleme bereitet und es kaum Anwendungsprogramme für dieses System gibt. Diese Vorurteile waren in der Vergangenheit zum Teil begründet, als es kaum Anwendungssoftware, keine grafischen Verwaltungstools und nur wenig Treiber der Hardwarehersteller für Linux gab. Dieses Bild hat sich aber in den letzten Jahren sehr gewandelt. Die Linux-Installationen haben sich zum Beispiel von komplizierten, umständlichen ASCII-Programmen meist zu einfach handhabbaren, leicht verständlichen Grafikinstallationsroutinen gewandelt. Die meisten Hardwarehersteller liefern inzwischen auch Linux-Treiber für ihre Geräte und sehr viele Systemadministrationsaufgaben lassen sich mit einfachen grafischen Tools durchführen. Was die Applikationen unter Linux betrifft, so hat der Anwender heute die Qual der Wahl: alleine bei den Office-Programmen (Textverarbeitung, Tabellenkalkulation, Präsentationssoftware usw.) stehen ihm die beiden großen kostenlosen Pakete OpenOffice und KOffice zur Auswahl und unzählig viele kleine andere Tools. Auch die großen Softwareanbieter, wie zum Beispiel SAP, folgen dem Trend und bieten ihre Produkte auch für das Betriebssystem Linux an. Auch der Umgang mit komplizierten Befehlen kann in der Regel durch die Verwendung von verschiedenen Administrationstools umgangen werden. Manche Distributionen bieten eigene grafische Verwaltungstools, die auch für Systemadministratoren, die bisher für grafische Betriebssysteme zuständig waren, kaum noch Wünsche offen lassen, wie zum Beispiel SUSE mit YaST. Andere Distributionen bieten die Möglichkeit, die Administrationswerkzeuge der jeweiligen grafischen Oberfläche einzusetzen. Trotzdem haben erfahrene Administratoren und Benutzer auch weiterhin die Möglichkeit, die von den grafischen Tools verwendeten Befehle auch direkt und damit schneller und effizienter einzusetzen. In diesem Buch werden zu jeder Aufgabe immer zuerst die entsprechenden Befehle und dann die Möglichkeiten der grafischen Oberfläche erläutert. Zu den Stärken von Linux gehört neben dieser Wahlmöglichkeit, die Administration grafisch oder über Befehle durchzuführen, natürlich auch die Stabilität des Systems und das Einsparen der Lizenzkosten, nicht nur beim Betriebssystem selbst, sondern oft auch bei der Anwendungssoftware.
Die verwendeten Distributionen Bei den Distributionen fällt dem Anwender die Wahl aufgrund der vielen Möglichkeiten oft schwer. Im ersten Kapitel werden einige Distributionen kurz vorgestellt, in diesem Buch fiel die Entscheidung für folgende drei Distributionen:
쮿
SUSE Linux 10.0 mit KDE 3.4.2
쮿
Fedora Core Linux 4.0 mit KDE 3.4.0-6 Redhat
쮿
Debian GNU/Linux 3.1 (sarge) mit KDE 3.3.2
Obwohl Debian GNU/Linux und Fedora Core Linux standardmäßig die grafische Oberfläche GNOME vorschlagen, ist es kein Problem, dort auch KDE zu installie-
21
magnum
Vorwort
ren (umgekehrt können Sie auch GNOME als Oberfläche für SUSE Linux verwenden). Aus diesem Grund wird in diesem Buch auf die Beschreibung der Möglichkeiten mit GNOME verzichtet und durchgängig KDE als grafische Oberfläche verwendet. Die zusätzlichen Möglichkeiten von GNOME zu beschreiben hätte den Umfang des Buchs gesprengt. Welche Distribution sollen Sie nun verwenden? Wenn Sie bis jetzt noch keine Distribution der anderen vorziehen, sollten Sie die Entscheidung aufgrund Ihrer bisherigen Linux- und Unix-Erfahrung fällen. Ein noch unerfahrener Anwender wird sich wohl mit der Debian-Distribution etwas schwer tun, da diese noch stark auf die Befehlswelt aufbaut. Zum Einstieg ist eher SUSE Linux oder auch Fedora Core Linux zu empfehlen. Einem erfahrenen Anwender oder sogar Systemadministratoren wird aber die stabile Debian-Welt mit Sicherheit ein Anreiz sein. Sie besitzen bereits eine dieser Linux-Distributionen, die aber älter ist? Da Linux im Kern immer dasselbe System bleibt, das nur ständig erweitert wird, können Sie trotzdem dieses Buch verwenden. Die einzelnen Linux-Distributionen bringen zum Teil in einem sehr raschen Tempo neue Versionen heraus, so dass es kaum jemandem möglich ist, ständig die neuste zu installieren. Das ist aber auch nicht notwendig, denn die meisten Tools stehen in der Regel auch bei älteren Versionen zur Verfügung. Viele Versionssprünge enthalten nur kleinere Änderungen, die nicht auf den ersten Blick ersichtlich sind oder auf den einzelnen Anwender keine unmittelbare Auswirkung haben. Eine Ausnahme dazu bildet allerdings der Versionssprung 3.0 auf 3.1 von Debian GNU/Linux, der eine wesentlich einfachere und übersichtlichere Installation und einen Wechsel von KDE 2.2.2 auf KDE 3.3.2 enthielt. Trotzdem können alle Systemaufgaben auch mit Debian GNU/Linux 3.0 genauso wie mit 3.1 durchgeführt werden, auch wenn nicht alle grafischen Tools gleichermaßen vorhanden sind. Sie besitzen eine ganz andere Linux-Distribution? Auch Sie können das Buch verwenden. In diesem Buch werden zu 90 % für fast alle Linux-Systeme gängige Befehle und Tools beschrieben. Distributionsspezifische Befehle oder Tools, wie zum Beispiel YaST von SUSE Linux, werden durchgängig in dem Buch mit einem entsprechenden Symbol gekennzeichnet, so dass Sie wissen, dass es nicht für die anderen Distributionen gültig ist.
Die Zielgruppe und das Buch Dieses Buch ist gleichermaßen für Linux-Einsteiger als auch erfahrene LinuxAnwender, die ihre Kenntnisse vertiefen wollen, und Umsteiger von anderen Betriebssystemen gedacht. Es lässt sich sowohl im privaten als auch im Unternehmensbereich einsetzen, da es sehr viele verschiedene Themen aufgreift. Der Grundlagenteil ist in erster Linie für Linux-Einsteiger und -Umsteiger gedacht. Für erfahrene Linux-Anwender kann er aber durchaus dazu dienen, die Optionen des einen oder anderen Befehls nochmals genauer nachzulesen. Der zweite Teil, Systemverwaltung, geht zum Teil über die Bedürfnisse eines einfachen Benutzers hinaus. Einsteiger und Fortgeschrittene finden aber hier die Informationen, wie das System in den verschiedensten Bereichen den eigenen Bedürfnissen angepasst werden kann, zum Beispiel beim Bootverhalten, Einbinden von neuen Geräten usw. Auch das Verwalten von Prozessen, das Konfigurieren des Kernels, die Systemüberwachung und die Datensicherung sind spezielle Themen für einen Systemadministratoren.
22
Vorwort
Im dritten Teil ist speziell das Kapitel 19, Internetzugang, wieder ein Thema für Einsteiger und Umsteiger, das nicht nur zeigt, wie Sie ins Internet gelangen, sondern auch, welche Möglichkeiten dieses bietet. Die anderen Kapitel behandeln außer den Netzwerkgrundlagen in Kapitel 18 recht spezielle Themen, unter anderem, wie NFS-, Samba-, DNS- und NIS-Server und -Clients eingerichtet werden. Wie bereits erwähnt, beschreibt das Buch einerseits Befehle für Fortgeschrittene oder interessierte Einsteiger, bietet aber andererseits auch fast immer eine Möglichkeit an, eine Aufgabe mit grafischen Tools der KDE bzw. bei SUSE mit YaST durchzuführen. Trotzdem konnte in diesem Buch aufgrund des Umfangs nur ein kleiner Teil aller vorhandenen grafischen Programme beschrieben werden, so werden zum Beispiel in Kapitel 10, Multimedia, nur zwei Tools zum Abspielen von Audiodateien vorgestellt, obwohl es wesentlich mehr für KDE und natürlich unzählige mehr für die anderen grafischen Oberflächen, wie zum Beispiel GNOME usw., gibt. In Kapitel 19, Internet, werden auch nur ein E-Mail-Programm (KMail) und nur ein Webbrowser (Mozilla Firefox) vorgestellt, obwohl Linux sehr viel mehr kennt. Das Buch beschreibt auch nur die Tools für die beschriebenen Verwaltungs- und Systemaufgaben. Alle anderen Tools, wie zum Beispiel Office-Programme, Spiele, Grafikprogramme, hätten seinen Umfang gesprengt. Zu den meisten Themen gibt es eigene Bücher, zum Beispiel zu OpenOffice oder dem Grafikprogramm Gimp. Ebenso verhält es sich mit speziellen Administrationsaufgaben, wie zum Beispiel der Konfiguration eines Webservers, eines LDAP-Servers oder eines Mailservers: über jedes dieser Themen gibt es ganze Bücher, die das jeweilige Thema ausführlich behandeln.
Symbole helfen bei der Orientierung In diesem Buch finden Sie verschiedene Symbole, die Ihnen die Arbeit mit dem Buch erleichtern sollen. Dieses Symbol kennzeichnet Tipps und Tricks, die Ihnen ein besseres Arbeiten ermöglichen. Das kann eine versteckte Funktion sein oder ein anderer wissenswerter Kniff, der etwas aus der Reihe tanzt. Bei diesem Symbol erhalten Sie zusätzliche Informationen und wichtige Hinweise auf weitere Informationen zum Thema. Hinweis und Tipp können sich teilweise überschneiden. Bei diesem Symbol ist Vorsicht geboten! Hier finden Sie Hinweise auf Stolperstellen und Problemquellen.
23
magnum
Vorwort
Außerdem gibt es in diesem Buch Symbole zur Kennzeichnung distributionsspezifischer Informationen: Dieses Icon bezeichnet Red Hat / Fedora Core-spezifische Informationen.
Dieses Icon bezeichnet SUSE-spezifische Informationen.
Und dieses Icon bezeichnet Debian GNU/Linux-spezifische Informationen.
Die Autorin Ute Hertzog studierte Wirtschaftsinformatik und war nach dem Studienabschluss unter anderem mehrere Jahre als Systemadministratorin für Unix, VMS und Microsoft Windows NT tätig. Seit 1998 ist sie freiberuflich tätig als Buchautorin, technische Übersetzerin und EDV-Trainerin und -Beraterin mit den Schwerpunkten Linux, Unix, Microsoft Windows, Office-Programme und Internet/Webdesign. Seit mehreren Jahren hält sie auch Vorlesungen zu den Fächern Wirtschaftsinformatik und Internetpräsenz an verschiedenen Fachhochschulen. Im Jahre 2004 beendete sie ihr Aufbaustudium »Business Information Management« als Master of Science.
Schreiben Sie uns! Autor und Verlag sind immer bemüht, Ihnen, unseren Kunden und Lesern, die optimale Information zum Thema zu bieten. Scheuen Sie sich deshalb nicht, uns über Fehler und andere Ärgernisse zu informieren. Nur so können wir laufend an der Verbesserung unserer Bücher arbeiten. Aber auch Lob, Erfolgserlebnisse und Ihre Ergebnisse interessieren uns. Schreiben Sie uns unter [email protected] Ihre Mails werden sofort an die Autorin weitergeleitet! Ihr Markt+Technik-Buchlektorat Boris Karnikowski [email protected]
24
magnum
Teil 1 Grundlagen
1 Was ist Linux? »Wie ich vor einem Monat erwähnte, arbeite ich an einer freien Version von etwas Minix-ähnlichem für AT-386-Rechner. Es hat jetzt endlich den Punkt erreicht, wo es sogar brauchbar ist (oder auch nicht, je nachdem, was man braucht), und ich bin bereit, die Quelltexte zur Weiterverbreitung herauszugeben. Es ist lediglich Version 0.02 ... aber ich habe darauf erfolgreich bash, gcc, gnu-make, gnu-sed, compress, usw. laufen lassen.« – Linus Torvalds, 1991 (Zitatquelle: de.wikiquote.org) Das Betriebssystem Linux hat eine interessante Vergangenheit: Ein finnischer Student, Linus Torvalds, schrieb 1991 auf seinem Personal Computer mit einem 80386-Prozessor einen Terminalemulator unter Minix, um sich das Remote-Einwählen an den Unix-Rechnern seiner Universität zu erleichtern. Das Projekt wuchs, als Linus Torvalds darüber hinaus noch einen Zugriff auf das Minix-Dateisystem und sein Diskettenlaufwerk entwickelte. Aus diesen Aktivitäten entstand allmählich die Idee, ein vollständiges Betriebssystem zu programmieren.
1.1 Wie alles begann ... Linux ist ein scheinbar junges Betriebssystem, das Anfang der neunziger Jahre von Linus Torvalds entwickelt wurde. Da er mit seinem Betriebssystem das alte Betriebssystem Unix nachprogrammierte, reichen die Wurzeln des Betriebssystems sogar bis zum Anfang der siebziger Jahre zurück.
1.1.1
Am Anfang war Unix
Das Betriebssystem Unix wurde ursprünglich als Rechnerumgebung für die Forschung und Entwicklung der Computerwissenschaft entworfen. Heute sind weder Unix noch Linux irgendwelche Grenzen mehr gesetzt, beide sind in allen möglichen Bereichen vorzufinden: für CAD-, Buchhaltungs-, medizintechnische und Internetanwendungen und vieles mehr. Eine große Stärke sind die Maschinenunabhängigkeit und die Stabilität von Unix und Linux, während die anfänglich etwas kryptisch wirkende Befehlssyntax oft als Schwäche betrachtet wird. Diese Syntax ist aber durch die Entstehungsgeschichte von Unix geprägt, die Ende der sechziger Jahre in den AT&T Bell Laboratories begann. Bells Labs besaß zu dieser Zeit ein Multiuser-fähiges, interaktives Betriebssystem Multics, aus dem Ken Thompson 1969 das Betriebssystem Unix entwickelte, das zur Unterstützung eines Programmierteams im Bereich Forschung und Entwicklung gedacht war, aber zunächst als Dokumentaufbereitungssystem für das Patentwesen bei Bells Labs eingesetzt wurde. 1973 schrieb Dennis Ritchie das Unix-System in die Programmiersprache C um, wodurch Unix zu einem plattformunabhängigen Betriebssystem wurde. Diese Portabilität bedeutete, dass Unix auf allen Arten von Rechnern lief und kein so genanntes proprietäres Betriebssystem mehr war, das heißt, an eine bestimmte Hardware eines bestimmten Herstellers gebunden.
27
magnum
Wie alles begann ...
Mitte der siebziger Jahre hatte Unix innerhalb von AT&T eine große Akzeptanz und der Quellcode des Unix-Systems wurde an interessierte Dritte, speziell an akademische Institutionen, gegen eine geringe Gebühr lizenziert. Diese Bildungseinrichtungen, wie zum Beispiel die University of California in Berkeley (UCB), verwendeten Unix nicht nur, sondern entwickelten es weiter. Unix verbreitete sich auf diese Weise an vielen Institutionen, allerdings wurde es lange Zeit von der kommerziellen EDV-Welt nicht nur ignoriert, sondern sogar als nicht ernst zu nehmendes Akademiker-Betriebssystem betrachtet. Später jedoch wurden auch kommerzielle Unternehmen, wie zum Beispiel IBM, Hewlett Packard und Sun Microsystems, auf das Produkt aufmerksam und entwickelten ihre eigenen Unix-Betriebssysteme, zum größten Teil aus dem Quellcode von AT&T-Unix. AT&T hat Unix selbst zu Beginn nicht kommerziell zu vermarkten bzw. als zentrale Stelle für die Weiterentwicklung des Systems zu wirken versucht. Daher entwickelten sich die einzelnen Unix-Varianten zunächst auseinander, so dass sie teilweise untereinander inkompatibel wurden.
1.1.2
Die »Unix-Kriege«
Diese Inkompatibilität förderte nicht gerade das Ansehen von Unix am EDVMarkt. Es entstand der Bedarf, Unix zu standardisieren. Dies begründete sich vor allem darin, dass die Organisation X/Open Unix 1985 als Basis für Offene Systeme wählte. Bei diesem Versuch wollten verständlicherweise alle Unix-Hersteller die Hauptrolle spielen, so dass es in den achtziger Jahren darüber zu richtiggehenden »Unix-Kriegen« kam. Das Konzept der Offenen Systeme wurde 1984 von EDV-Herstellern entwickelt und bezeichnet Systeme, die gemeinsame Standards oder Spezifikationen besitzen. Daraus bildete sich die X/Open Company Ltd., die eine umfassende Beschreibung der Offenen Systeme definieren sollte. Die Unix-Hersteller bildeten dabei zwei Hauptfronten: Die eine Seite nannte sich Unix International (gegründet von AT&T und Sun), die andere konterte mit der Open Software Foundation (OSF). Die Allianzen unterstützten unterschiedliche Unix-Versionen, wobei die Mitglieder der Allianzen auch zum Teil die Fronten wechselten. Die Open Software Foundation (OSF) wurde 1985 von HP, IBM und DEC gegründet und sollte neue Industriestandards für Unix unabhängig von AT&T Unix System V entwickeln. Das Konsortium befürchtete, dass der POSIX-Standard AT&T zu stark bevorzugt würde und dass die beiden ab 1987 kooperierenden Unternehmen AT&T und Sun Microsystems damit Marktbeherrscher würden. Ziel der OSF war es, ein gemeinsames Unix unter dem Namen OSF/1 herauszubringen, das aber bis in die neunziger Jahre noch nicht fertig gestellt war. Mit Unix International (UI) reagierten die Befürworter von AT&T Unix System V auf die OSF. Dazu gehörten außer den Firmen AT&T und Sun Microsystems auch Olivetti, Unisys und andere. Dieses Konsortium veröffentlichte ständig Verbesserungen am System, dazu gehörte aber auch die Übernahme aller bedeutenden Neuerungen aus den Unix-Systemen BSD und Xenix. Auf diese Weise gab es immer weniger Differenzen zum Programmcode von OSF, die Version System V Release 4 enthielt bereits die meisten Eigenschaften dieser Unix-Variante.
28
Kapitel 1 · Was ist Linux?
1983 wurde X/Open gegründet, ursprünglich unter dem Namen Bison von mehreren europäischen Unternehmen, wie zum Beispiel Bull, Siemens und Olivetti. Sie hatten die Absicht, besser für die europäischen Interessen an Unix gegen die von US-Unternehmen einzutreten. Als später aber auch US-Unternehmen zu diesem Konsortium stießen, wurde der Name in X/Open umbenannt. 1995 führte schließlich X/Open die Schutzmarke Unix95 für Computersysteme ein. Das dazugehörende Schutzmarkenprogramm Single Unix Specification stellt sicher, dass die Produkte der Unix-Hersteller bestimmte Kriterien erfüllen. Im Jahre 1996 wurde The Open Group als Fusion von X/Open und OSF mit dem Ziel gebildet, neue Industriestandards für Unix zu bilden, unabhängig vom System V von AT&T. Sie führte schließlich 1998 die Schutzmarke Unix98 ein, die das Basissystem, Server und Workstation umfasst. Die Open Group betreut unter anderem die Standards Motif, CDE, Lightweight Directory Access Protocol (LDAP) und Linux Standard Base (LSB), Letzteres gemeinsam mit der Free Standards Group. Die diversen Gruppierungen sollten durch eine einheitliche Unix-Schnittstelle verhindert werden: die POSIX-Standardisierung vom IEEE, die 1988 unter POSIX.1 veröffentlicht wurde. POSIX (Portable Operating System Interface for UniX) ist eine Schnittstelle zwischen dem Betriebssystem Unix und Anwendungen, die von der IEEE standardisiert wurden. Alle heutigen Unix-Derivate befolgen diese Standards, die nun eine globale Industrienorm nach DIN/EN/ISO/IEC 9945 bilden. Dazu wurde die Benutzer- und Softwareschnittstelle des Betriebssystems in folgenden vier Teilen definiert: 1. Die Basisdefinitionen, die aus einer Liste der im Standard verwendeten Konventionen und Definitionen einschließlich einer Liste der bereitzustellenden C-Headerfiles besteht 2. Die Shell und Hilfsprogramme 3. Die Systemschnittstelle in Form einer Liste von zu unterstützenden C-Systemaufrufen 4. Erläuterungen zum Standard Die Korn-Shell ist übrigens die Standard-POSIX-Shell und Hilfsprogramme wie zum Beispiel awk und echo gehören auch zum POSIX-Standard.
29
magnum
Wie alles begann ...
1.1.3
Das GNU-Projekt
Linux und die dazugehörigen Komponenten können prinzipiell kostenlos aus dem Internet heruntergeladen werden (nähere Informationen dazu finden Sie im nächsten Abschnitt), da das Betriebssystem zum GNU-Projekt gehört. Allerdings kann dies sehr mühsam sein und erfordert in der Regel auch einiges an Fachwissen. GNU bedeutet »GNU is not Unix«. Die Begründer des GNU-Projekts vertreten den Standpunkt, dass Software kostenlos und für jeden frei zugänglich sein sollte. GNU-Software wird zu den Bedingungen der GPL (GNU Public License Agreement) vertrieben, was bedeutet, dass jeder das Recht hat, den Code zu kopieren, ändern und weiter zu vertreiben, allerdings immer unter den Bedingungen der Lizenz. Dadurch werden die Programme auch stets mit ihrem Quellcode herausgegeben. Den Wortlaut der GPL finden Sie auf den Seiten der Begründer des GNU-Projekts, der Free Software Foundation (http://www.fsf.org oder http://www.gnu.org). Zum Teil kommen in diesem Zusammenhang auch noch ähnliche Lizenzen zur Anwendung, wie zum Beispiel Larry Walls Artistic License (http://www.perl.com). Der Ausdruck GNU spiegelt den etwas skurrilen Humor der Open-SourceGemeinschaft wider, denn er definiert den Ausdruck rekursiv. Ein weiteres Beispiel für diese Art von Humor ist der Befehl less (vergleiche Kapitel 7), der ähnlich wie der Befehl more Dateiinhalte auflistet, aber dabei wesentlich mehr Funktionen aufweist. Ein gängiger Spruch der Linux-Gemeinde lautet hier: »less is more«.
Bild 1.1: Website des GNU-Projekts
30
Kapitel 1 · Was ist Linux?
1983 begann Richard Stallman, der über die Kommerzialisierung von Unix verärgert war, mit der Arbeit an einem eigenen Unix-ähnlichen Betriebssystem namens GNU und rief mit der Veröffentlichung des GNU-Manifests (http://www.gnu.org/ gnu/manifesto.html) 1985 eine immer stärker werdende Bewegung für freie Software ins Leben. Es entstand eine große Anzahl von frei verfügbaren Utilities und Programmen unter den Bedingungen der GPL, aber das Betriebssystem Unix selbst war noch kostenpflichtig, GNU sollte Unix-kompatibel sein, da Richard Stallman befürchtete, dass viele Unternehmen ein völlig neues Betriebssystem nicht akzeptieren würden. Außerdem bot sich die Unix-Architektur für seine Ideen hervorragend an, da Unix aus vielen kleinen, in der Regel voneinander unabhängig entwickelten Programmen besteht und viele Bestandteile des Betriebssystems bereits frei erhältlich waren, wie zum Beispiel das X-Window-System. Die Free Software Foundation (FSF) wurde 1985 von Richard Stallman als gemeinnützige Organisation gegründet. Sie bildet die rechtliche und finanzielle Basis für das GNU-Projekt. Unter der GPL veröffentlichte Software wird als »freie Software« verstanden. Um eine Software als »freie Software« zu bezeichnen, muss sie folgende Definition gemäß GNU (Quelle: http://www.gnu.org/philosophy/free-sw.de.html) erfüllen: »Freie Software bedeutet die Freiheit des Benutzers, die Software zu benutzen, zu kopieren, sie zu vertreiben, zu studieren, zu verändern und zu verbessern. Genauer gesagt, bezieht sich der Begriff »Freie Software« auf vier Arten von Freiheit, die der Benutzer der Software hat: –
Die Freiheit, das Programm für jeden Zweck zu benutzen (Freiheit 0).
–
Die Freiheit, zu verstehen, wie das Programm funktioniert und wie man es für seine Ansprüche anpassen kann (Freiheit 1). Der Zugang zum Quellcode ist dafür Voraussetzung.
–
Die Freiheit, Kopien weiterzuverbreiten, so dass man seinem Nächsten weiterhelfen kann (Freiheit 2).
–
Die Freiheit, das Programm zu verbessern und die Verbesserungen der Öffentlichkeit zur Verfügung zu stellen, damit die ganze Gemeinschaft davon profitieren kann (Freiheit 3). Der Zugang zum Quellcode ist dafür Voraussetzung.«
Diese Freiheiten mussten durch eine Lizenz sichergestellt werden, die im Gegensatz zu den üblichen Softwarelizenzen aber nicht das Verändern und die Herausgabe der Software ausdrücklich verbietet, sondern es explizit zulässt. Trotzdem sollte es nicht möglich sein, dass freie Software in kommerzielle Softwareprodukte integriert und anschließend mit einer nicht freien Lizenz weiter vertrieben wird. Stattdessen sollten alle aus der freien Software entstehenden Arbeiten, wie zum Beispiel auch Dokumentationen, ebenfalls derselben Lizenz unterliegen. Da diese Art von Lizenzierung das Gegenteil des bekannten Copyrights darstellt, wird sie häufig auch als Copyleft bezeichnet. Zu der unter der GPL veröffentlichten Software gehören unter anderem die Shell Bash, der Texteditor emacs, das Grafikprogramm GIMP, die grafischen Oberflächen KDE und GNOME und viele mehr.
31
magnum
Wie alles begann ...
1.1.4
Freie Software und Open Source
Der Begriff »Open Source« wurde erst im Jahr 1998 geprägt, als sich die Firma Netscape entschied, den Quellcode des Netscape Navigators freizugeben. Netscape wollte damit wieder mehr Marktanteile für ihre Browsersoftware gewinnen, die in den vorangegangenen Jahren immer mehr der Firma Microsoft zugeflossen waren. Im selben Jahr wurde die Open Source Initiative (OSI) von dem Entwickler des E-Mail-Weiterleitungsprogramms fetchmail Eric Raymond, dem Computerwissenschaftler Bruce Perens und dem Computerbuch-Verlagsgründer Tim O'Reilly gegründet, um die Vorteile der Open-Source-Entwicklung mit speziellen OpenSource-Lizenzen, zum Beispiel der Mozilla Public License, in der Wirtschaft bekannter zu machen. Die Definition von Open Source der OSI unterscheidet sich in ihrer grundsätzlichen Bedeutung nicht von der Definition Freier Software der FSF. »Freie Software« wird allerdings in der Regel automatisch mit dem Begriff »kostenlos« verbunden, vor allem dadurch, dass sie häufig auch kostenlos zur Verfügung gestellt wird. Gemeint war aber eine Freiheit im Sinne von »free speech, not free beer«. Der Begriff »Open Source« sollte dieses Problem lösen. Er erzeugt aber seinerseits wiederum eine Assoziation über die Verfügbarkeit des Quellcodes, ohne gleichzeitig zu verdeutlichen, dass auch die Freiheit, diesen zu benutzen, zu verändern und weiterzugeben, damit verbunden ist. Richard Stallman als Gründer des GNU-Projekts sieht den Unterschied zwischen Freier Software und Open Source folgendermaßen: »Der Begriff ‚Open Source’ wird von manchen Personen so verwendet, als meinen sie mehr oder weniger dasselbe wie freie Software. Ihre Kriterien sind aber weniger streng; sie haben einige Lizenzbeschränkungen akzeptiert, die wir als inakzeptabel ablehnten. Wir bevorzugen den Begriff ‚freie Software’.» Zu den bekanntesten Open-Source-Programmen gehören unter anderem die Browserprogramme Mozilla und Firefox, das E-Mail-Programm Thunderbird, das Office-Paket OpenOffice.org, die Datenbank MySQL und der Webserver Apache.
1.1.5
Linux und das GNU-Projekt
1987 entwickelte der in Amsterdam lehrende amerikanische Informatiker Professor Andrew S. Tanenbaum ein Unix-ähnliches Betriebssystem namens Minix. Es entstand zu Lehrzwecken, um den Studenten die Grundlagen eines Betriebssystems zu verdeutlichen, da die zunehmend restriktiveren Unix-Lizenzen von AT&T immer hinderlicher wurden. Minix selbst hatte nie große Bedeutung, brachte aber Linus Torvalds auf die Idee, Linux zu entwickeln. Im August 1991 teilte Linux Torvalds seinen Plan, ein Betriebssystem zu entwickeln, in einem Beitrag der Newsgroup comp.os.minix mit und stellte im September 1991 die Linux Version 0.01 auf einen öffentlich zugänglichen FTP-Server zum Herunterladen bereit. Der Quellcode für die erste Version umfasste weniger als 300 Kbyte, obwohl er bereits die Bourne-Again-Shell und verschiedene Tools, wie zum Beispiel einen GNU C-Compiler, enthielt. Anfang der neunziger Jahre umfasste das GNU-Projekt fast alles, was ein komplettes System benötigte, wie zum Beispiel die GNU Compiler Collection für diverse Programmiersprachen, den Editor emacs und viele andere Tools, der Kernel selbst jedoch fehlte noch. Die Entwicklung des Mikrokernels GNU Hurd wurde begonnen, konnte aber nicht im geplanten Zeitraum abgeschlossen werden. Daher traf
32
Kapitel 1 · Was ist Linux?
das GNU-Projekt 1992 die Entscheidung, bis zur Beendigung des Kernels GNU Hurd an dessen Stelle den Linux-Kernel einzusetzen. Das neue Unix-Betriebssystem wurde mit der Version 0.73 dem GNU-Projekt hinzugefügt. Auf diese Weise entstand das Betriebssystem GNU/Linux. Der Linux-Kernel 1.0 wurde als erste fehlerfreie Version, in der auch bereits das X-Window-System integriert und TCP/IP implementiert waren, Anfang 1994 an der Universität von Helsinki präsentiert. Mitte 1996 wurde die Kernel-Version 2.0 herausgegeben.
1.2 Linux-Distributionen Linux wird von vielen verschiedenen Institutionen und Unternehmen als Paket vertrieben. Der Umfang einer so genannten Distribution enthält den Linux-Kernel und verschiedene Zusatztools. Der Umfang der Zusatzsoftware variiert von Distribution zu Distribution sehr stark. Kommerzielle Linux-Distributionen enthalten in der Regel auch eine Auswahl an grafischen Oberflächen und eine große Anzahl verschiedenster Programme. Es gibt eine große Anzahl von Linux-Distributionen, die entweder aus dem Internet oder im Handel bezogen werden können. In diesem Abschnitt werden nur die im Moment bekanntesten in Bezug auf ihre wichtigsten Unterschiede beschrieben. In diesem Buch werden die Distributionen SUSE Linux 10, Debian GNU/Linux 3.1 und Fedora Core Linux 4.0 verwendet. Außer den in diesem Abschnitt beschriebenen Distributionen gibt es noch viele mehr, wie zum Beispiel die muLinux-Distribution, die auf eine einzige Diskette passt, oder MkLinux oder LinuxPPC, die auf PCs der Firma Apple laufen, sowie Yoper, Skolelinux, Ubuntu/Kubuntu, kmLinux usw.
1.2.1
SUSE Linux
Eine zurzeit in Deutschland weit verbreitete Distribution ist SUSE Linux. Die aktuelle Versionsnummer lautet 10.0. Zur Distribution gehören mehrere CDROMs und eine DVD sowie ein ausführliches Handbuch, alles in deutscher Sprache. SUSE besitzt ein auch für Neueinsteiger recht einfaches Installations- und Systemverwaltungstool mit dem Namen YAST (Yet another Setup Tool), das aber auch erfahrenen Systemadministratoren alle Wünsche erfüllt. 2004 wurde YaST unter die GPL gestellt.
Bild 1.2: Distribution SUSE Linux 10.0
33
magnum
Linux-Distributionen
Das Unternehmen S.u.S.E. LINUX (Gesellschaft für Software und Systementwicklung mbH) wurde 1992 in Fürth gegründet und zog 1998 nach Nürnberg um. Gleichzeitig wurde der Firmenname in SUSE geändert. Ende 2003 wurde das Unternehmen von der Firma Novell übernommen, die sich davon wieder eine größere Teilnahme am Betriebssystem-Markt versprach. Seit der Version 7.0 gibt es von SUSE Linux für Privatanwender die beiden Varianten Personal und Professional Version, Letztere enthält ein größeres Softwareangebot. Bei der Version 9.1 gab es parallel zur Installations-CD-ROM eine Live-CDROM, mit der das System ohne Installation getestet werden konnte. Die Professional Version enthält außerdem eine zusätzliche DVD mit Software für 64-Bit-Systeme. Die Personal Version gibt es ab Version 9.2 nicht mehr, stattdessen bietet SUSE eine kostenlose Live-CD-Version an. Mit der Veröffentlichung von SUSE Linux 10.0 lautet der Distributionsname für Privatanwender von »SUSE Linux Professional« wieder wie ursprünglich einfach nur »SUSE Linux«. Parallel zum Erscheinen der Version 10 hat Novell das openSUSE-Projekt begründet – ähnlich wie bei Red Hat / Fedora Core wird hier der unter GPL stehende Teil der SUSEDistribution im Internet entwickelt und zum freien Download angeboten. Für kommerzielle Kunden bietet SUSE das Produkt SUSE LINUX Enterprise Server (SLES) in der momentanen Version 9 für bis zu zwei CPUs an.
1.2.2
Debian GNU/Linux
Hinter der Distribution Debian GNU/Linux verbirgt sich kein kommerzielles Unternehmen wie bei den bisher vorgestellten Distributionen. Es ist ein Projekt von Freiwilligen, die daran unbezahlt in ihrer Freizeit arbeiten. Die aktuelle Versionsnummer ist 3.1, die Version wird auch Sarge genannt. Es ist die am weitesten verbreitete nicht kommerzielle Linux-Distribution, die außerdem ausschließlich aus freier Software besteht. Anstelle eines Unternehmens mit dem Namen »Debian« bieten daher auch verschiedene Firmen diese Distribution auf CD-ROM an. Dem Projektteam ist die Betonung der GNU-Komponente sehr wichtig. Diese Distribution ist für Anwender, die tief ins System einsteigen möchten, sehr geeignet, aber nicht für Anfänger, und wird in der Regel ohne gedrucktes Handbuch ausgeliefert. Allerdings liegen umfangreiche Dokumentationen in Dateiform vor, die installiert und offline gelesen werden können. Das Debian-Projekt wurde 1993 von Ian Murdock gegründet. Die Bezeichnung ist aus den Vornamen von Ian Murdock und seiner Frau Debra zusammengestellt. Heute wird das Projekt von über tausend Freiwilligen nach strengen, selbstverfassten Regeln verwaltet, zusammengestellt und ständig erweitert. Diese Richtlinien spiegeln sich auch in einer gut funktionierenden Organisationsstruktur und dem Debian-Gesellschaftsvertrag wider, der unter anderem die offizielle Open-SourceDefinition in Form der Debian Free Software Guidelines (DFSG) enthält. Mit Hilfe des speziellen Paketmanagementsystems APT lassen sich alte Debian-Versionen relativ einfach mit neueren Versionen aktualisieren bzw. Softwarepakete installieren. Sicherheits- und Softwareprobleme von Debian werden öffentlich diskutiert und schnellstmöglich bereinigt. Einen wichtigen Aspekt des Systems stellen die sicherheitsrelevanten Tools für die Systemverwaltung dar, wie zum Beispiel Firewall-Programme, Software zur Integritätsprüfung, allgemeine Prüftools, Paketsignierungs- und -prüfmechanismen.
34
Kapitel 1 · Was ist Linux?
Bild 1.3: Die deutsche Website des Projektteams der Debian GNU/Linux-Distribution
Es gibt viele Linux-Distributionen, die auf Debian aufsetzen, wie zum Beispiel Ubuntu Linux, Kubuntu, Xandros, Kanotix, Knoppix usw. Debian bietet immer drei verschiedene Varianten gleichzeitig an:
쮿
eine »stable version«, das ist die zuletzt veröffentlichte »stabile«, also lauffähige Version, mit sorgfältig getesteten Softwarepaketen
쮿
eine »unstable version«, an der ständig weiterentwickelt wird und die daher noch Fehler enthält
쮿
eine »testing version«, die Pakete enthält und nach ca. 10 Tagen aus der »unstable version« entsteht, wenn bei diesen Paketen keine relevanten Fehler aufgetaucht sind
Die Releasenamen »stable« und »unstable« beziehen sich auf die Stabilität der Softwareeigenschaften und des Archivs, das heißt der Paketabhängigkeiten, wobei aber auch die Stabilität der Software während der Laufzeit zum Teil darin enthalten ist. In das Archiv »unstable« werden häufig neue Pakete von den Entwicklern eingestellt, die Softwareänderungen enthalten, wogegen im Release »stable« keine zusätzlichen Pakete mehr zu den bereits im Release enthaltenen hinzugefügt oder entfernt werden. Ein Paket wird nur in das Release »stable« aufgenommen, wenn es keine kritischen Fehler mehr enthält und monatelang getestet wurde. Ein Softwarepaket durchläuft bei Debian meist alle drei Archive in der Reihenfolge »testing«, »unstable« und »stable« und ist dadurch gründlich getestet, bevor es in das sichere letzte Release »stable« aufgenommen wird. Ein Benutzer, der ein sehr sicheres System benötigt, das in der Regel ohne Probleme läuft, sollte daher das Release »stable« verwenden, in dem sich aber nicht die neueste Software befindet. Benutzer, für die Stabilität weniger Bedeutung als Aktualität hat, können die Releases »testing« oder »unstable« verwenden. Das Release »stable« kann auch automatisch upgedatet werden, ohne dass die Stabilität des Systems darunter leidet.
35
magnum
Linux-Distributionen
1.2.3
Fedora Core
Die Distribution Fedora Core (aktuelle Versionsnummer 4.0) hat sich aus Red Hat Linux entwickelt, als 2003 Red Hat seine Linux-Distribution für Privatkunden einstellte, aber als Community-Projekt weiterführen wollte. Nur Software mit vollständig freien Lizenzen darf in diesem Projekt verwendet werden.
Bild 1.4: Die Website des Fedora-Projekts
Das Installationstool der Distribution ist Anaconda und ermöglicht eine grafische, einfache Installation. Die Systemadministrationsarbeiten können mit diversen Programmen durchgeführt werden, deren Name mit system-config beginnt und die in der Regel auch mit einer grafischen Oberfläche gestartet werden können. Als Paketmanager wird RPM von Red Hat verwendet, aber auch APT-Quellen können ausgelesen werden.
1.2.4
Mandriva/Mandrake
Das französische Softwareunternehmen Mandriva, das früher Mandrakesoft hieß, veröffentlicht Mandriva Linux (ehemals Mandrake Linux), momentan in der Version 10.2 bzw. nach dem neuen Versionsnummernsystem 2005. Die Distribution wurde aus Red Hat Linux entwickelt, bietet eine einfache Installation und enthält sehr viele gängige Softwarepakete, wie zum Beispiel KDE, Mozilla, OpenOffice.org usw. Mandriva Linux verwendet KDE als Standardoberfläche und bietet eigene grafische Tools, die so genannten Drak-Tools, für die Systemverwaltung an. Das Programm urpmi wird zur Verwaltung von RPM-Softwarepaketen eingesetzt.
36
Kapitel 1 · Was ist Linux?
Bild 1.5: Die Website der Firma Mandriva
1.2.5
Knoppix
Die von Klaus Knopper entwickelte freie Linux-Distribution Knoppix kann direkt von der CD-ROM gestartet werden. Knoppix erkennt beim Starten automatisch fast jede von Linux unterstützte Hardware und bietet für alle anderen Fälle beim Booten spezielle Optionen an. Die Distribution basiert auf Debian GNU/Linux und enthält eine große Anzahl von Softwareprogrammen, wie zum Beispiel OpenOffice.org, KDE, Mozilla usw. Die aktuelle Versionsnummer lautet 4.0.2. Knoppix ist zwischenzeitlich auch auf einer DVD erhältlich.
Bild 1.6: Die Website von Knoppix
37
magnum
Linux-Distributionen
Einige weitere Distributionen haben die Techniken von Knoppix übernommen, wie zum Beispiel Morphix, Kanotix, Gnoppix (mit GNOME-Oberfläche) usw.
1.2.6
Slackware
Slackware wird als Großvater der Linux-Distributionen bezeichnet. Die Distribution wurde von Patrick Volkerding 1993 zum ersten Mal herausgegeben. Sie hat inzwischen (aktuelle Versionsnummer 10.2) auch den Umfang von mehreren CDROMs und erfreut sich eines Rufs von höchster Sicherheit und Systemstabilität. Ein erfahrener Benutzer, der keine grafischen Konfigurationstools benötigt, kann sich die Distribution gut seinen eigenen Bedürfnissen anpassen. Für Neueinsteiger ist daher Slackware wiederum nicht geeignet, sondern mehr für Insider, die keinen Schnickschnack, sondern nur ein stabiles Betriebssystem wünschen, und für Enthusiasten, die das Eingemachte von Linux kennen lernen wollen.
Bild 1.7: Slackware-Distribution
1.2.7
Red Hat Linux
Red Hat Enterprise Linux 4 ist die aktuellste Version dieser Distribution, die weltweit stark verbreitet und in den Vereinigten Staaten Marktführer ist. Red Hat Inc. wurde 1993 von Mark Ewing gegründet, fusionierte 1995 mit dem Unternehmen ACC von Bob Young und beschäftigt in ca. 22 Niederlassungen weltweit über 700 Personen.
Bild 1.8: Red Hat Linux-Distribution
Das Unternehmen Red Hat orientiert seine Linux-Distribution sehr stark kommerziell, was es mit seinem Börsengang im Jahre 1999 unterstrichen hat. Es werden auch hier mehrere CD-ROMs und ausführliche Handbücher mitgeliefert, und die Distribution bietet auch bereits während der Installation schon deutschsprachige Unterstützung. Im Jahr 2003 publizierte Red Hat, sich zukünftig nur noch auf das Firmenkundengeschäft zu konzentrieren, da dieses bisher den größten Umsatzanteil erbracht habe. Daher wurde das offene Softwareprojekt Fedora Core gegründet, das die Weiterentwicklung von Red Hat Linux übernahm. Für das Projektteam wurden von Red Hat bezahlte Softwareentwickler abgestellt.
38
Kapitel 1 · Was ist Linux?
Red Hat konzentriert sich im Firmenkundengeschäft stark auf Lösungen im Bereich Netzwerk-Infrastrukturen und bietet eine große Palette von Embedded Systems bis hin zu Webservern an. Das System wird mit dem grafischen Installationstool Anaconda ausgeliefert und verwendet für die Paketverwaltung das selbst entwickelte Red Hat Package Manager-Paketformat (RPM), das auch viele andere Distributionen übernommen haben.
1.3 Distributionsquellen Linux-Distributionen können zum Teil über das Internet heruntergeladen werden. Sie sind aber in der Regel immer über den Handel erhältlich. Die gängigen kommerziellen Varianten finden Sie nicht nur in einschlägigen EDV-Fachgeschäften, sondern auch in größeren Buchhandlungen. Die CD-ROMs einer Linux-Distribution beinhalten oft Tausende verschiedener Programmpakete, die vorsortiert sind und mit Hilfe eines speziellen Verwaltungsprogramms ausgewählt und installiert werden. In den Anfangszeiten von Linux war es noch erforderlich, die Programmquellen aus dem Internet herunterzuladen und sie auf dem eigenen Rechner zu kompilieren. Dies ist zwar auch heute noch möglich, wird aber wegen des großen Aufwands nur selten gemacht. Die meisten Distributionen bestehen aus mehreren hundert Mbyte, was lange Downloadzeiten erforderlich macht. Dazu kommt, dass der bei einigen Distributionen manchmal noch zusätzlich notwendige Kompiliervorgang auch Zeit und Fachwissen erfordert. Daher lohnt es sich in der Regel, eine Distribution im Handel zu erwerben. In der Regel erhalten Sie damit dann auch gleichzeitig ein mehr oder weniger umfangreiches Handbuch. Sollten Sie es trotzdem bevorzugen, Ihre Distribution aus dem Internet herunterzuladen, so finden Sie hier die wichtigsten Adressen: Distribution Website
Downloadadresse
SUSE Linux
http://www.novell.com/de-de/ linux/suse
http://www.novell.com/de-de/ products/linuxprofessional/downloads
Debian GNU/Linux
http://www.debian.org http://www.debian.de
http://www.debian.org/distrib/ftplist
Fedora Core
http://fedora.redhat.com
http://www.fedora.redhat.com/download
Mandriva/ Mandrake
http://www.mandrivalinux.com/de-de http://www.mandrivalinux.com/ de/ftp.php3
Knoppix
http://www.knopper.net/knoppix/
http://www.knopper.net/knoppix-mirrors/
Slackware
http://www.slackware.org
http://www.slackware.org/getslack
Red Hat Linux
http://www.redhat.com http://www.redhat.de
http://www.redhat.com/apps/download
Tab. 1.1: Websites und Downloadadressen der bekanntesten Distributionen
39
Welche Eigenschaften hat Linux?
magnum
1.4 Welche Eigenschaften hat Linux? Linux verfügt über alle wichtigen Eigenschaften, die für ein Betriebssystem wichtig sind. Darüber hinaus ist es ein sehr stabiles System, das durch jahrzehntelange Entwicklung ausgereift ist. Zu den wichtigsten Merkmalen von Linux gehören: Die Portabilität, wodurch das Betriebssystem sehr leicht an verschiedene Computersysteme anzupassen ist, was der Tatsache zuzuschreiben ist, dass der Großteil des Quellcodes in der Programmiersprache C vorliegt. Oft müssen nur kleine Änderungen vorgenommen werden, wenn das System auf einer neuen Hardwareplattform kompiliert wird. Die Multiuser-Fähigkeit bewirkt, dass mehrere Benutzer unabhängig voneinander und zur gleichen Zeit dasselbe Rechnersystem verwenden können. Dazu muss das System das Timesharing-Verfahren beherrschen. Die Multitasking-Fähigkeit bedeutet, dass Linux mehrere Tasks gleichzeitig bearbeiten kann, es werden also mehrere Programme oder Jobs eines Benutzers gleichzeitig ausgeführt. Beim Timesharing wird die gesamte Verarbeitungszeit der CPU in so genannte Zeitscheiben oder Slices aufgeteilt und mehreren Benutzern zugeordnet, wobei die Reihenfolge und Prioritäten der Tasks berücksichtigt werden. Mit Hilfe der virtuellen Speicherverwaltung können Prozesse seitenweise ausgelagert werden, wenn der Hauptspeicher nicht mehr ausreichend Platz hat, um alle zum Prozess notwendigen Teile zu speichern. Der zur vorübergehenden Auslagerung von Prozessen verwendete Bereich auf der Festplatte wird als Swap-Partition bezeichnet. Um die gespeicherten Daten zu organisieren, verwendet Linux eine hierarchische Dateistruktur, die auch als Verzeichnisbaum bezeichnet wird. Linux arbeitet mit einer einheitlichen Hardwareverwaltung, das heißt, es existieren einheitliche Schnittstellen zu Dateien, Geräten und Nachbarprozessen, da diese wie normale Dateien angesprochen werden. Gerätetreiber werden also wie Dateien betrachtet, was zur Folge hat, dass unter Linux theoretisch beliebig viele Geräte versorgt werden können, da das System praktisch unbegrenzt viele Dateien unterstützen kann. Die Grundlage der Netzwerkfähigkeit von Linux bilden die Protokolle TCP/IP (Transmission Control Protocol/Internet Protocol). Das System besitzt viele Funktionen, die in einem Netzwerk notwendig sind, darüber hinaus sind sowohl die notwendigen Client- als auch die Serverprogramme in Form von verschiedenen Protokollen vorhanden, wie zum Beispiel das Telnet-Protokoll, FTP (File Transfer Protocol), das NFS-Protokoll sowie die Dienste Internet und E-Mail. Das verteilte Dateisystem (Distributed File System) ist ebenfalls eine interessante Eigenschaft von Linux. Damit ist es möglich, Teile des Dateibaums auf verschiedene Festplattenlaufwerke in einem Rechner oder sogar mit Hilfe von NFS (Network File System) auf Festplatten von anderen Rechnern im Netzwerk aufzubringen. Da diese Teile aber einfach in den Verzeichnisbaum eingehängt werden, sieht der Benutzer nur die logische Dateistruktur, den Verzeichnisbaum. Ihm erscheint es, als ob sich alle Daten auf demselben lokalen Laufwerk befinden.
40
Kapitel 1 · Was ist Linux?
Die Arbeit eines Anwenders unter Linux wird von der Shell oder dem so genannten Kommandointerpreter bestimmt. Die Shell liest und überprüft die vom Benutzer eingegebenen Befehle und Aufträge und interpretiert sie dann als Anfragen des Benutzers an das Betriebssystem. Wird mit einer grafischen Oberfläche unter Linux gearbeitet, setzt auch hier die Shell die grafisch aktivierten Befehle um, oder der Anwender kann ein so genanntes Terminalfenster öffnen, um eine Shell direkt zu aktivieren. Die Möglichkeit der Hintergrundverarbeitung bietet den Anwendern eine größtmögliche Effizienz und Wirkungsbreite bei der Benutzung des Systems, indem gleichzeitig mehrere Prozesse zur Bearbeitung in den Hintergrund gestellt werden können. Da die Prozesse voneinander gekapselt laufen, beeinflussen sie sich in der Regel nicht im Falle von Fehlfunktionen. Redirektion oder Datenumlenkung bedeutet, dass die Ausgabe jedes Programms so manipuliert werden kann, dass sie zum Beispiel auf einen Drucker oder in eine Datei statt auf den Bildschirm geleitet werden kann. Mit Hilfe des Pipe-Mechanismus können Befehle so miteinander verbunden werden, dass die Ausgabe des vorangehenden Befehls zur Eingabe des nachfolgenden Befehls wird. Auf diese Weise können in vielen Fällen für neue Aufgaben die existierenden Programme oder Dienstprogramme einfach mit Pipes kombiniert werden, was die Entwicklung neuer Programme überflüssig machen kann. Unter Linux stehen Hunderte von Dienstprogrammen und Routinen zur Verfügung und stellen eine wirkungsvolle Sammlung von Werkzeugen für die Erledigung vieler Aufgaben dar. Darüber hinaus gibt es viele verschiedene Texteditoren, Textverarbeitungs- und Softwareentwicklungstools.
1.5 Linux-Komponenten Linux besteht aus einem Kernel, der die Hardware und Prozesse steuert, und einem Kommandointerpreter, auch Shell genannt, sowie einer Anzahl von Systemhilfsprogrammen. Um richtig komfortabel mit Linux arbeiten zu können, ist noch eine grafische Arbeitsumgebung notwendig, das so genannte X-Window-System. Darauf wird dann eine Benutzeroberfläche aufgesetzt, wie zum Beispiel KDE oder GNOME, die in der Regel mit einer großen Anzahl von Programmen für alle erdenklichen Zwecke installiert werden kann. Dazu gehört das Installations- und Verwaltungsprogramm des Herstellers, das dafür sorgt, dass die Installation einfach und übersichtlich durchzuführen ist. Aus all diesen Komponenten und diesem Zubehör setzt sich dann eine so genannte Linux-Distribution zusammen, also ein komplettes Linux-Paket eines Herstellers.
1.5.1
Der Kernel
Die innerste Schicht des Betriebssystems bildet der Kernel, der sich direkt über der Hardware befindet. Er hat die Aufgabe, die Hardware zu betreiben und zu nutzen. Im Kernel sind mit Ausnahme der Benutzerschnittstelle und einiger Dienstprogramme im Prinzip alle Betriebssystemaufgaben realisiert:
쮿
Die Kommunikation mit den Hardwarekomponenten des Rechners
쮿
Er stellt den Programmen die erforderlichen Hardwareressourcen zur Verfügung, um deren geregelten Ablauf zu realisieren.
41
magnum
Linux-Komponenten
쮿
Er kontrolliert die Kommunikation mit der Hardware, mit den Benutzern und von Programmen untereinander.
쮿
Er verwaltet die Daten des Systems und legt fest, in welcher Form und an welcher Stelle diese abgelegt werden.
쮿
Er sorgt für den Zugriffsschutz der Daten in der durch den Anwender festgelegten Form.
쮿
Er steuert den Multitasking- und Multiuser-Betrieb.
Die Bestandteile des Kernels müssen auf die jeweilige Systemhardware zugeschnitten sein, da er direkt mit der Hardware in Verbindung steht. Er umfasst eine große Anzahl von Funktionen, die der Benutzer aber nicht direkt verwenden kann, sondern die in Systemprogrammen eingebettet zur Verfügung stehen.
1.5.2
Die Shell
Die Shell dient dem Benutzer als Eingabemöglichkeit, um Anweisungen an das Betriebssystem zu geben. Dazu steht ein so genannter Kommandointerpreter mit einer einfachen textbasierenden Oberfläche zur Verfügung. Die vom Anwender eingegebenen Befehle werden an das Betriebssystem weitergeleitet, das bei Bedarf wiederum Rückmeldungen (zum Beispiel Fehlermeldungen) ausgibt. Der Kommandointerpreter wird als Shell bezeichnet, weil er wie eine Schale den Kernel umgibt. Die Shell hat folgende Aufgaben:
쮿
Sie ist eine wichtige Benutzerschnittstelle des Linux-Systems, indem sie die vom Benutzer eingegebenen Befehle einliest und als Anfragen an das System interpretiert.
쮿
Über die Benutzeroberfläche der Shell kann ein Anwender die Hardwareressourcen und die Betriebssystemleistungen des Kernels nutzen, ohne dafür eigene Programme erstellen zu müssen.
쮿
Die Standard-Shell bash ist Bestandteil jedes Linux-Systems, wobei sie in der Regel individuellen Bedürfnissen angepasst oder durch eine andere Shell ersetzt werden kann.
Die unterschiedlichen Shells werden in Kapitel 9 ausführlich behandelt. Wenn ein Anwender einen Befehl in der entsprechenden Form eingibt, kann er die Interaktivität der Shell nutzen, das heißt, bei einer Eingabe erhält er nach Beendigung des Befehls eine Rückmeldung. Die Befehle der Shell sind sehr mächtig, flexibel und umfangreich. Sie können auch miteinander verkettet werden, was besonders für Verwaltungsaufgaben und zur Durchführung komplexer Abläufe von großer Bedeutung ist. Ein Linux-System kann auch ohne grafische Oberfläche – nur mit der Shell – betrieben werden. Es ist möglich, die grafische Oberfläche bei Bedarf zu deaktivieren, wobei das System trotzdem noch vollständig administriert werden kann. Das ist zum Beispiel eine nützliche Eigenschaft bei Datenbank- oder Webservern, die in der Regel nur für andere Computer zur Verfügung stehen und bei denen die grafische Oberfläche nicht unnötigerweise Ressourcen verbrauchen soll.
42
Kapitel 1 · Was ist Linux?
Die Shell ist wiederum selbst auch nur ein Programm, das aufgerufen wird, und kann daher natürlich unterschiedlich umfangreich sein. Es gibt unter Linux mehrere Shells, die im Laufe der Unix-Historie entstanden sind und gegenüber ihrem Vorgänger jeweils um irgendwelche Funktionen erweitert wurden.
1.5.3
Das X-Window-System
Das X-Window-System wird auch als X Version 11 oder X11 oder X bezeichnet und besteht aus verschiedenen Protokollen, Computerprogrammen und Standards, um grafische Bildschirme anzusteuern und bei Unix- und Linux-Systemen eine grafische Oberfläche anzuzeigen. Die freien Protokolle und Standards werden von verschiedenen Projekten umgesetzt, wie zum Beispiel XOrg und XFree86. Entwickelt wurde X Mitte der achtziger Jahre in einer gemeinsamen Arbeit des MIT, der Digital Equipment Corporation und IBM. 1988 wurde das X-Konsortium gegründet, um die weitere nichtkommerzielle Entwicklung durchzuführen. 1994 wurde die Version X11R6 herausgegeben und anschließend die Entwicklung The Open Group übergeben, während XOrg 2004 die Standardisierung übernahm. Ein- und Ausgabegeräte, wie zum Beispiel Maus, Tastatur, Bildschirm und Grafikkarte, werden vom X-Server gesteuert, der häufig mit dem Kernel zusammenarbeitet. Während X ein Minimalsystem ist, das nur grundlegende Funktionen zur Verfügung stellt, wird das tatsächliche Verhalten und Design eines Fenstersystems von einem so genannten Windowmanager bereitgestellt, der als Client des X-Servers wie eine reguläre Anwendung läuft. Das X-Window-System basiert auf dem Client-Server-Modell, wobei der X-Server (der die grafischen Dienste den X-Clients anbietet und die Treiber für Grafikkarte, Tastatur, Maus enthält) auf dem lokalen System läuft, während der X-Client entweder lokal oder auf einem Remote-System laufen kann. Der X-Client verwendet die Dienste des X-Servers für die grafische Darstellung und besteht aus einem entsprechenden Anwendungsprogramm.
1.5.4
System- und Anwendungsprogramme
Neben dem Kernel und der Shell gibt es noch eine große Anzahl von Systemprogrammen und Anwendungs- bzw. Dienstprogrammen. Sie werden häufig auch nur als Kommandos oder Befehle bezeichnet. Zu diesen gehören:
쮿
Programme zur Datei- und Verzeichnismanipulation, wie sie in der Regel immer im Gesamtumfang eines Betriebssystems enthalten sind, wie zum Beispiel Programme zum Kopieren, Löschen, Umbenennen von Dateien, Erzeugen und Löschen von Inhaltsverzeichnissen usw.
쮿
Programme zur Textbearbeitung, wie zum Beispiel: – Fullscreen- oder Bildschirmeditoren (vi, emacs) – Stream-Editoren (sed)
쮿
Programme zur elektronischen Kommunikation, wie zum Beispiel E-Mail-Programme
쮿
Software zur Unterstützung von Softwareentwicklern, wie zum Beispiel: – C-Compiler – C-Bibliotheken
쮿
eine Vielzahl von weiteren Utilities, die unter der grafischen Oberfläche von Linux genutzt werden können
43
2 Installation und Updates »Zu einem guten Ende gehört auch ein guter Beginn.« – Konfuzius In diesem Kapitel werden zuerst einige allgemeine Überlegungen zur Installation getroffen. Anschließend erfahren Sie, wie die Installationen von SUSE Linux 10, Fedora Core Linux 4.0 und Debian GNU/Linux 3.1 ablaufen. Im zweiten Teil erfahren Sie, wie Sie zusätzliche Software für diese Distributionen installieren oder wieder entfernen.
2.1 Installationsvoraussetzungen Vor einigen Jahren warf genau diese Frage noch die meisten Probleme für LinuxEinsteiger auf. Inzwischen liefern die meisten Hardwarehersteller ihre Produkte mit Treibern für Linux aus, so dass die meisten neuen Geräte in der Regel problemlos unter Linux eingesetzt werden können. Auch die Linux-Distributionen selbst werden ständig verbessert, wodurch die Kompatibilität bedeutend größer und die Installation wesentlich einfacher geworden ist.
2.1.1
Hardwarevoraussetzungen für Linux
Linux stellt relativ geringe Grundanforderungen an die Hardware – das bezieht sich aber nur auf das ursprüngliche Linux ohne eine grafische Oberfläche. Das Betriebssystem Linux ohne grafische Oberfläche kann daher auch heute noch problemlos auf einem alten PC mit einem so genannten 80386er oder 80486er Prozessor betrieben werden, wobei aber wenigstens ein Disketten- und ein CD-ROMLaufwerk zur Verfügung stehen sollten. Mit dieser Grundausstattung könnten Sie ein wenig mit Linux auf einem alten ausgedienten Rechner ohne grafische Oberfläche herumexperimentieren. Falls Sie aber ein echtes Interesse daran haben, ab jetzt mit Linux richtig zu arbeiten, dann sollten Sie einen heute handelsüblichen Rechner verwenden, um einerseits Platz für alle angebotenen Programme zu haben, die Sie interessieren, und andererseits, um die grafische Oberfläche mit einer zufrieden stellenden Leistung verwenden zu können. Bevor Sie mit der Installation beginnen, sollten Sie noch einige grundsätzliche Überlegungen anstellen.
쮿
Soll Linux ab jetzt das einzige Betriebssystem auf Ihrem Rechner sein oder wollen Sie es zusätzlich zum vorhandenen Betriebssystem (zum Beispiel Microsoft Windows XP) installieren?
쮿
Im Falle, dass Sie Linux zusätzlich installieren möchten, sollten Sie feststellen, ob noch freie Partitionen oder ausreichend Festplattenplatz vorhanden ist oder nicht.
2.1.2
Linux als zweites Betriebssystem installieren
Wenn Sie bereits ein anderes Betriebssystem, wie zum Beispiel Microsoft Windows 2000 oder XP, auf dem PC laufen haben, kann Linux als zweites Betriebssystem problemlos zusätzlich installiert werden, vorausgesetzt, Ihre Festplatte ist groß genug. Dies dürfte aber bei den heutigen handelsüblichen PCs kein Problem sein, die in der Regel Festplatten mit mehr als 40 Gbyte haben.
45
magnum
Installation
Sollten Sie noch kein Betriebssystem installiert haben, aber später neben Linux ein Microsoft-Windows-Betriebssystem auf dem gleichen PC betreiben wollen, ist es sehr zu empfehlen, zuerst das Microsoft-Windows-System zu installieren. Wenn ein bereits installiertes Betriebssystem von Microsoft die ganze Festplatte einnimmt, ist das in der Regel auch kein Problem. Sie haben dann einmal die Möglichkeit, die Festplatte vor der Linux-Installation mit einem kommerziellen Programm wie zum Beispiel Partition Magic von der Firma Symantec/PowerQuest so zu partitionieren, dass es freien Festplattenplatz für Linux gibt. Alternativ können Sie das Partitionieren aber auch der Linux-Distribution während der Installation überlassen (vergleiche Abschnitt 2.2). In beiden Fällen sollten Sie aber sicherheitshalber die Ihnen wichtigen Daten der Microsoft-Windows-Partition sichern, falls ein Problem auftritt. Es gibt auch freie, nicht kommerzielle Tools, um die Festplatte zu partitionieren, wenn sich bereits ein Betriebssystem darauf befindet. Dazu gehört zum Beispiel fips (http://www.zdnet.de/downloads/prg/p/w/deP1PW-wc.html). Partitionen, die mit NTFS (dem Dateisystem von Microsoft Windows NT, 2000 und XP) formatiert sind, lassen sich mit freien Tools in der Regel nicht verkleinern.
2.2 Installation In den nächsten drei Abschnitten werden die Installationen zu den Distributionen SUSE Linux 10.0, Fedora Core Linux 4.0 und Debian GNU/Linux 3.1 beschrieben. Bei jeder Betriebssysteminstallation werden Sie in der Regel gefragt, wie Sie Ihre Festplatte partitionieren möchten, das heißt, in welche Bereiche diese aufgeteilt werden soll. Einzelheiten zum Partitionieren finden Sie in Kapitel 13. Wie komplex Ihre Partitionstabelle (das Ergebnis Ihrer Festplattenpartitionierung) wird, hängt vom Einsatzbereich des zu installierenden Rechners ab. Eine einfache Partitionstabelle für einen PC, der im Privatbereich eingesetzt wird, könnte zum Beispiel wie folgt aussehen: Partition
Größe
Mountpoint
primär
10 %, maximal 3 Gbyte des Festplattenplatzes
/
logisch
Größe des Hauptspeichers, mindestens 100 Mbyte
Swap-Partition
logisch
restlicher Festplattenplatz
/home
Tab. 2.1: Eine einfache Partitionstabelle
Eine komplexere Partitionstabelle, zum Beispiel für einen Server, könnte so aussehen: Partition
Größe
Mountpoint
primär
100 Mbyte des Festplattenplatzes
/boot
primär
500 Mbyte, maximal 1 Gbyte
/
Tab. 2.2: Eine komplexere Partitionstabelle
46
Kapitel 2 · Installation und Updates
Partition
Größe
Mountpoint
logisch
Größe des Hauptspeichers, mindestens 100 Mbyte
Swap-Partition
logisch
5 - 10 % des Festplattenplatzes, maximal 2 Gbyte
/usr
logisch
5 - 10 % des Festplattenplatzes, maximal 1 Gbyte
/var
logisch
restlicher Festplattenplatz
/home
Tab. 2.2: Eine komplexere Partitionstabelle (Forts.)
2.2.1
Installation von SUSE Linux 10.0
Schalten Sie Ihren Rechner ein und legen Sie die erste Installations-CD-ROM bzw. die DVD, wenn Sie ein DVD-Laufwerk besitzen, von SUSE Linux ein. Eventuell müssen Sie noch im BIOS einstellen, dass zuerst von der CD-ROM oder DVD und dann erst von der Festplatte gebootet werden soll. Die Installation von SUSE 10.0 läuft normalerweise grafisch ab. 1. Wählen Sie nach dem Begrüßungsbildschirm die Option INSTALLATION.
Bild 2.1: Startbildschirm der Installation von SUSE Linux
2. Zuerst werden Sie gebeten, die Sprache auszuwählen. Wählen Sie DEUTSCH und klicken Sie dann auf die Schaltfläche WEITER.
Bild 2.2: Sprache auswählen
47
magnum
Installation
3. Wenn Sie anschließend die Lizenzvereinbarung akzeptieren, folgt die Systemanalyse, und dann können Sie festlegen, ob die Installation eine NEUINSTALLATION oder ein UPDATE sein soll. Bei einer Erstinstallation müssen Sie NEUINSTALLATION wählen. 4. Im nächsten Fenster wählen Sie die Zeitzone, zum Beispiel die Region EUROPA und die Zeitzone DEUTSCHLAND, und überprüfen und korrigieren gegebenenfalls die angezeigte Uhrzeit und das Datum. 5. Im letzten Schritt des ersten Konfigurationsteils wählen Sie nun den Desktop: entweder KDE oder GNOME oder einen anderen Desktop. 6. Dann zeigt Ihnen SUSE Linux eine Zusammenfassung der Informationen über die Installation zu folgenden Punkten an. Die Übersicht ist ausführlicher, wenn Sie in die Registerkarte EXPERTENMODUS wechseln: –
Modus (Neuinstallation)
–
Tastatur belegen
–
Maus
–
Partitionierung
–
Software
–
Systemstart (Einstellung von GRUB)
–
Zeitzone
–
Sprache
Bild 2.3: Installationseinstellungen von SUSE Linux
Sie können nun nach Belieben auf einen dieser Punkte klicken und die Standardeinstellungen ändern, zum Beispiel: 7. Wenn Sie nicht den ganzen Festplattenplatz, der noch zur Verfügung steht, für SUSE Linux verwenden möchten, oder der zu verwendende Festplattenplatz noch zuerst eingerichtet werden muss, dann wählen Sie den Punkt PARTITIONIERUNG.
48
Kapitel 2 · Installation und Updates
Bild 2.4: Partitionierungsvorschlag bei der Installation
8. Sie können dann wählen, ob Sie den Vorschlag der Partitionierung annehmen, abändern oder nach eigenen Vorstellungen eine Partitionierung durchführen möchten. In unserem Beispiel wählten Sie die dritte Möglichkeit.
Bild 2.5: Partitionen anzeigen und bearbeiten
49
Installation
magnum
9. Nun werden alle Partitionen dieser Festplatte angezeigt. Achten Sie darauf, dass Sie keine Partition auswählen, die für ein anderes Betriebssystem verwendet wird. Wenn noch Platz auf der Festplatte ist, können Sie für SUSE Linux eine neue Partition mit der Option ANLEGEN erstellen. Anschließend müssen Sie noch die Größe in Zylinder oder Gbyte, den Mountpoint und das zu formatierende Dateisystem, zum Beispiel REISERFS, auswählen. Bestätigen Sie wieder mit WEITER. Sollte kein freier Festplattenplatz oder keine freie Partition vorhanden sein, können Sie auch eine bestehende Microsoft-Windows-Partition verkleinern. Sichern Sie zuvor aber unbedingt alle wichtigen Daten auf dieser Partition. Klicken Sie auf die Windows-Partition und dann auf GRÖSSE ÄNDERN. Geben Sie dazu entweder die gewünschten Werte in die entsprechenden Felder mit der Mbyte-Größe ein oder ziehen Sie an dem Scrollbalken:
Bild 2.6: Windows-Partitionsgröße ändern
10. Legen Sie dann noch unbedingt mit derselben Option ANLEGEN eine Partition für den Swap-Bereich an. Formatieren Sie diese als SWAP, als Größe genügen in der Regel 100 bis 200 Mbyte, wenn Sie keine spezielle Verwendung für den Swap planen. Eine so genannte Swap-Partition ist ein Bereich auf der Festplatte, der verwendet wird, um Daten aus dem Hauptspeicher auszulagern, falls der Hauptspeicher überlastet ist. Falls Sie vorhaben, Crashdumps zukünftig aufzubewahren und gegebenenfalls auszuwerten, oder einen Laptop konfigurieren, der in den Hibernation-Modus gefahren werden soll, empfiehlt es sich, die Swap-Partition so groß wie den Hauptspeicher einzurichten.
50
Kapitel 2 · Installation und Updates
Wenn Sie keine weiteren Einstellungen vornehmen wollen, können Sie die Standardvorgaben übernehmen und mit Weiter bestätigen. 11. Nun werden Sie gefragt, ob Sie das System wirklich installieren möchten. Erst wenn Sie dies bestätigen, werden Daten auf die Festplatte geschrieben. Bei der Standardinstallation dauert dieser Vorgang ca. 30 Minuten bis eine Stunde, je nachdem, ob Sie die Installations-DVD oder die CD-ROMs verwenden. 12. Nach der Installation müssen Sie noch das Passwort für den Superuser root festlegen:
Bild 2.7: root-Passwort hinterlegen
13. Als Nächstes wird Ihnen eine standardmäßige Netzwerkkonfiguration mit DHCP angeboten. Mit dem Protokoll DHCP (Dynamic Host Configuration Protocol) und einem DHCP-Server können IP-Adressen und verschiedene Konfigurationsparameter für das Netzwerk einem Rechner dynamisch bei Bedarf zugewiesen werden, um diesen zum Beispiel in ein lokales Netzwerk oder das Internet einzubinden. Mit Internet Protocol (IP)-Adressen werden Rechner in einem Netzwerk eindeutig adressiert.
51
magnum
Installation
Bild 2.8: Netzwerkkonfiguration einrichten
Sie können die Netzwerkkonfiguration überspringen oder unter folgenden Optionen wählen, um die Konfiguration einzurichten: –
Netzwerkschnittstellen
–
DSL-Verbindung
–
ISDN-Adapter
–
Modems
–
Proxy
–
Remote-Verwaltung über VNC
14. Wenn Sie kein DHCP verwenden, sollten Sie die Option NETZWERKSCHNITTSTELLEN anklicken und im anschließend geöffneten Fenster den Hostnamen und die statische IP-Adresse sowie gegebenenfalls die IP-Adressen von Router und Gateway hinterlegen. Vergessen Sie in diesem Fall auch nicht, die standardmäßigen Einträge für DHCP zu entfernen.
52
Kapitel 2 · Installation und Updates
Bild 2.9: Netzwerk einrichten
Bild 2.10: IP-Adresse angeben
53
Installation
Bild 2.11: Hostnamen und Nameserver konfigurieren
Bild 2.12: Router konfigurieren
54
magnum
Kapitel 2 · Installation und Updates
Nachdem Sie Ihre Eingaben bestätigt haben, wird die Netzwerkkonfiguration gespeichert. 15. Anschließend kann die Internetverbindung ausgetestet werden. Wenn der Test nicht erfolgreich ist, können Sie über die Schaltfläche ZURÜCK nochmals in die Netzwerkkonfiguration und diese ändern. Bei funktionierender Internetanbindung können Sie auch gleich eine Online-Aktualisierung durchführen. 16. Im nächsten Abschnitt werden Sie aufgefordert, einen Benutzer anzulegen. Geben Sie dazu den Vornamen, den Namen, den Anmelde- oder LoginNamen sowie zweimal das Passwort des neuen Benutzers ein.
Bild 2.13: Neuen Benutzer anlegen
55
magnum
Installation
Dazu müssen Sie auch die Art des Netzwerkclients angeben:
Bild 2.14: Authentifikationsmethode auswählen
Sie haben die Auswahl zwischen LDAP, NIS und Samba bzw. die Möglichkeit, eine lokale Authentifizierung über die Datei /etc/passwd zu wählen. 17. Es erscheint anschließend ein Fenster mit Hinweisen zur Version, das Sie einfach mit WEITER bestätigen. 18. Danach wird die Hardwarekonfiguration für folgende Geräte durchgeführt:
56
–
Grafikkarte
–
Drucker
–
Sound
–
TV-Karte
–
Bluetooth
Kapitel 2 · Installation und Updates
Bild 2.15: Anzeige der Hardwarekonfiguration
Wenn Ihre Geräte korrekt erkannt wurden, klicken Sie auf WEITER, andernfalls verwenden Sie die Schaltfläche ÄNDERN und richten die Geräte ein. 19. Anschließend können Sie die Installation mit der Schaltfläche BEENDEN abschließen. Das System startet eine neue Sitzung, an der Sie sich anmelden können.
2.2.2
Installation von Fedora Core 4.0
Schalten Sie Ihren Rechner ein und legen Sie die erste Installations-CD-ROM von Fedora Core Linux ein. Eventuell müssen Sie noch im BIOS einstellen, dass zuerst von der CD-ROM und dann erst von der Festplatte gebootet werden soll. Die Installation von Fedora Core 4.0 läuft normalerweise grafisch ab, wenn Ihre Grafikkarte erkannt wird. Alternativ können Sie am Boot-Prompt mit dem Befehl linux text eine ASCII-Installation starten. Die heute handelsüblichen, kostengünstigen Grafikkarten werden leider nicht immer erkannt. Dann bleibt die Installation hängen, nachdem Anaconda gestartet wurde. Es wird nur noch ein leerer Bildschirm angezeigt. In diesem Fall müssen Sie den Rechner neu starten und die ASCII-Installation verwenden.
57
magnum
Installation
1. Drücken Sie nach dem Begrüßungsbildschirm auf die Taste (¢), um eine grafische Installation durchzuführen.
Bild 2.16: Installationsbildschirm von Fedora Core Linux
2. Nun wird gemeldet, dass eine CD gefunden wurde und es möglich ist, diese zu testen. Um einen Abbruch wegen einer fehlerhaften CD zu vermeiden, können Sie mit der (ÿ_)-Taste auf OK springen und auf die Taste (¢) drücken, um die CD zu testen. Alternativ klicken Sie auf SKIP.
Bild 2.17: Möglichkeit, CD zu testen
Wenn Sie den Testmodus gewählt haben, erscheint nun ein weiteres Fenster MEDIA CHECK, in dem der Test durchgeführt wird, wenn Sie nun TEST wählen. Wenn Sie die CD wechseln möchten, verwenden Sie die Option EJECT CD. Am Schluss erscheint eine Meldung, dass der Test erfolgreich (PASS) war oder ein negatives Ergebnis brachte (FAIL). 3. Dann startet Anaconda, der Fedora Core System Installer. Anschließend werden Sie gebeten, die Sprache auszuwählen. Wählen Sie gegebenenfalls DEUTSCH und klicken Sie dann auf die Schaltfläche NEXT.
58
Kapitel 2 · Installation und Updates
Bild 2.18: Sprachauswahl
4. Anschließend können Sie die Tastatur auswählen. Klicken Sie dann wieder auf WEITER.
Bild 2.19: Tastaturauswahl
59
magnum
Installation
5. Wenn Sie bereits eine Fedora-Version auf dem Rechner installiert haben, können Sie nun zwischen den Optionen NEUINSTALLATION oder UPGRADE wählen. Dieses Fenster erscheint nicht, wenn noch keine Fedora-Installation auf Ihrem Rechner vorhanden ist. 6. Es folgt die Auswahl des Installationstyps. Sie können zwischen PERSONAL DESKTOP (mit grafischer Oberfläche, Internet-, Office- und Multimediaprogrammen), WORKSTATION (mit zusätzlicher Software für die Systemadministration und -entwicklung), SERVER (mit zusätzlichen Netzwerkservern und weiteren Administrationstools) und CUSTOM (um eine eigene Softwareauswahl zu treffen) wählen. Wenn Sie CUSTOM wählen, werden zur Softwareauswahl einige zusätzliche Fenster angezeigt. In unserem Beispiel führen wir eine CUSTOM-Installation durch. Klicken Sie dann auf WEITER.
Bild 2.20: Installationstyp auswählen
7. Im nächsten Fenster gibt Ihnen Fedora Core Linux die Wahlmöglichkeit zwischen einer automatischen oder manuellen Partitionierung (DISK DRUID). Die automatische Partitionierung fragt Sie, ob alle Linux-Partitionen oder alle Partitionen auf dem System gelöscht werden sollen oder ob alle Partitionen beibehalten werden und nur der vorhandene freie Festplattenplatz verwendet wird. Wenn Sie die manuelle Methode wählen, erhalten Sie Informationen über die Aufteilung der Festplatte in Partitionen und den freien Platz.
60
Kapitel 2 · Installation und Updates
Bild 2.21: Partitionierungsart wählen
8. Wählen Sie die Option LÖSCHEN, um eine Partition zu löschen (bedenken Sie aber, dass dabei alle Daten der Partition verloren gehen!), oder NEU, um vom restlichen Festplattenplatz Fedora Linux eine Partition zuzuteilen. Wählen Sie als Mountpoint den Schrägstrich / für das root-Verzeichnis (vergleiche Kapitel 13) und ein Dateisystem, zum Beispiel ext3, und schließlich noch die Größe für die Partition aus. Wenn Sie das Betriebssystem über mehrere Partitionen verteilen wollen, legen Sie weitere Partitionen an.
Bild 2.22: Manuelle Partitionierung
61
Installation
magnum
9. Legen Sie dann noch unbedingt mit derselben Option Anlegen eine Partition für den Swap-Bereich an. Formatieren Sie diese als Swap, als Größe genügen in der Regel 100 bis 200 Mbyte, wenn Sie keine spezielle Verwendung für den Swap-Bereich planen. Eine so genannte Swap-Partition ist ein Bereich auf der Festplatte, der verwendet wird, um Daten aus dem Hauptspeicher auszulagern, falls der Hauptspeicher überlastet ist. Falls Sie vorhaben, Crashdumps zukünftig aufzubewahren und gegebenenfalls auszuwerten, oder einen Laptop konfigurieren, der in den Hibernation-Modus gefahren werden soll, empfiehlt es sich, die Swap-Partition so groß wie den Hauptspeicher einzurichten. 10. Danach können Sie den Bootloader GRUB oder keinen Bootloader auswählen, spezielle Optionen dafür festlegen, gegebenenfalls mit der Schaltfläche HINZUFÜGEN weitere Betriebssysteme auf Ihrer Festplatte in das GRUB-Menü aufnehmen, ein GRUB-Boot-Passwort hinterlegen und entscheiden, wo GRUB installiert werden soll: in den Master Boot Record oder in den ersten Sektor der Bootpartition. Wenn Sie ein Passwort verwenden, sollten Sie sich dieses gut merken, sonst können Sie zukünftig Ihr System nicht mehr booten. In der Regel bietet es sich an, den Bootloader in den Master Boot Record zu installieren, wenn Sie keinen bestimmten Grund dafür haben, ihn auf die Bootpartition zu installieren.
Bild 2.23: Bootloader-Konfiguration
62
Kapitel 2 · Installation und Updates
11. Nun können Sie das Netzwerk konfigurieren. Wenn Sie kein DHCP verwenden, sollten Sie dort die statische IP-Adresse und die Subnet-Maske sowie gegebenenfalls die IP-Adressen von Router und Gateway hinterlegen. Vergessen Sie in diesem Fall auch nicht, den standardmäßigen Eintrag für DHCP zu entfernen. Mit dem Protokoll DHCP (Dynamic Host Configuration Protocol) und einem DHCP-Server können IP-Adressen und verschiedene Konfigurationsparameter für das Netzwerk einem Rechner dynamisch bei Bedarf zugewiesen werden, um diesen zum Beispiel in ein lokales Netzwerk oder das Internet einzubinden. Mit Internet Protocol (IP)-Adressen werden Rechner in einem Netzwerk eindeutig adressiert.
Bild 2.24: Netzwerkkonfiguration
12. Im nächsten Fenster können Sie den Rechnernamen eingeben oder ihn wieder automatisch über DHCP zuweisen lassen. 13. Danach werden Sie gefragt, ob Sie eine Firewall aktivieren wollen oder nicht. Es sind auch einige benutzerspezifische Definitionen zu den zulässigen Diensten möglich, wie zum Beispiel ssh oder http. In diesem Fenster können Sie auch Security Enhanced Linux (SELinux) aktivieren, das weitere Sicherheitseinstellungen bietet.
63
Installation
magnum
Bild 2.25: Firewall-Konfiguration
14. Dann wird Ihnen die Auswahl der Zeitzone angeboten. Wählen Sie für Deutschland EUROPA/BERLIN. 15. Im nächsten Fenster müssen Sie noch das Passwort für den Superuser root festlegen. 16. Als Nächstes werden Sie gefragt, ob Sie die standardmäßige Installation durchführen oder die Pakete selbst auswählen möchten. Wenn Sie Letzteres wählen, wird Ihnen die standardmäßige Auswahl der zu installierenden Software angezeigt und Sie können Paketgruppen hinzufügen oder entfernen.
Bild 2.26: Paketgruppen auswählen
64
Kapitel 2 · Installation und Updates
17. Nun werden die Abhängigkeiten zwischen den ausgewählten Paketgruppen geprüft und dann beginnt die eigentliche Installation, das heißt, die Pakete werden auf die Festplatte geschrieben. Sie müssen noch kurz die Meldung bestätigen, dass die Informationen zur Installation dauerhaft in der Datei /root/install.log gespeichert werden. 18. Nach Beendigung der Installation erfolgt ein Neustart und Sie können sich am System anmelden. Es folgt dann noch die Systemkonfiguration zu folgenden Punkten: 1. 2. 3. 4. 5. 6.
Einverständniserklärung mit den Lizenzbedingungen Einstellungsmöglichkeit von Datum und Uhrzeit Einstellungsmöglichkeit von Anzeige (Monitor): Farbtiefe und Auflösung Anlegen eines Systembenutzers oder Auswahl der Option Netzwerkanmeldung Einstellungsmöglichkeit und Test der Soundkarte Möglichkeit, weitere Software zu installieren
Dann ist das Setup beendet und Sie können sich am System anmelden.
2.2.3
Installation von Debian GNU/Linux 3.1
Schalten Sie Ihren Rechner ein und legen Sie die erste Installations-CD-ROM von Debian/GNU Linux ein. Eventuell müssen Sie noch im BIOS einstellen, dass zuerst von der CD-ROM und dann erst von der Festplatte gebootet werden soll. Die Installation von Debian Linux läuft in einem Textmodus ab. Sie können sich mit den Pfeiltasten oder der (ÿ_)-Taste in den Menüpunkten bewegen und zum Bestätigen auf die (¢)-Taste drücken. Wenn der zu installierende PC über einen Internetanschluss verfügt, müssen Sie nur die erste CD-ROM brennen und verwenden. Die fehlenden Pakete werden direkt aus einem Debian-Archiv im Internet bezogen. 1. Zuerst erscheint der Begrüßungsbildschirm von Debian. Drücken Sie auf die (¢)-Taste, um die Installation zu beginnen.
Bild 2.27: Debian GNU/Linux 3.1 Installationsbildschirm
65
Installation
magnum
2. Wählen Sie dann die Sprache und anschließend den Sprachraum.
Bild 2.28: Sprache wählen
3. Wählen Sie anschließend das Tastaturlayout.
Bild 2.29: Tastaturlayout wählen
Die Hardwareerkennung startet.
66
Kapitel 2 · Installation und Updates
4. Anschließend können Sie einige Angaben zur Netzwerkeinrichtung machen. Im ersten Schritt legen Sie den Rechnernamen fest. Dann werden Sie nach dem Domainnamen gefragt.
Bild 2.30: Netzwerk einrichten
5. Die nächste Einstellung betrifft die Festplattenpartitionierung. Sie haben die Auswahl, den größten unverbrauchten Speicherplatz zu benutzen oder das gesamte Laufwerk zu löschen oder die Partitionstabelle von Hand anzulegen.
Bild 2.31: Festplatte partitionieren
67
Installation
magnum
6. In unserem Beispiel wird die Partitionstabelle manuell bearbeitet. Die bisherige Partitionierung wird angezeigt und wiederum werden verschiedene Optionen angeboten. Wählen Sie den freien Speicherplatz, indem Sie mit der Pfeiltaste dorthin navigieren und dann auf (¢) drücken.
Bild 2.32: Freien Festplattenplatz verwenden
7. Wählen Sie nun die Eigenschaften für die Partition aus. Zu jeder Eigenschaft können Sie sich eine Optionsliste anzeigen lassen, wenn Sie auf die (¢)-Taste drücken, zum Beispiel für die Auswahl des Dateisystems der neuen Partition.
Bild 2.33: Neue Partition anlegen
68
Kapitel 2 · Installation und Updates
8. Wählen Sie eines der folgenden Dateisysteme (vergleiche Kapitel 13):
Bild 2.34: Dateisystem wählen
9. Die neue Partition wird anschließend angezeigt. Richten Sie auf dieselbe Weise mindestens noch eine Swap-Partition ein. Bestätigen Sie dann, dass Sie die Partitionstabelle so auf die Festplatte schreiben möchten. Eine so genannte Swap-Partition ist ein Bereich auf der Festplatte, der verwendet wird, um Daten aus dem Hauptspeicher auszulagern, falls dieser überlastet ist.
Falls Sie vorhaben, Crashdumps zukünftig aufzubewahren und gegebenenfalls auszuwerten, oder einen Laptop konfigurieren, der in den Hibernation-Modus gefahren werden soll, empfiehlt es sich, die Swap-Partition so groß wie den Hauptspeicher einzurichten. Ansonsten können Sie dem Swap-Bereich auch nur 100 oder 200 Mbyte zuweisen.
69
Installation
magnum
Bild 2.35: Partitionierung auf die Festplatte schreiben
10. Im nächsten Schritt wird das Grundsystem installiert. Sie können den zu installierenden Kernel auswählen:
Bild 2.36: Kernel auswählen
70
Kapitel 2 · Installation und Updates
11. Im letzten Schritt wird der Bootloader GRUB installiert. Er erkennt bereits auf der Festplatte vorhandene Betriebssysteme und integriert diese in sein Bootmenü. Daher können Sie ihn problemlos in den Master Boot Record installieren, wenn Sie keine anderen Konfigurationspläne haben.
Bild 2.37: Bootloader GRUB installieren
Damit ist die Installation abgeschlossen. Entfernen Sie die CD-ROM aus dem Laufwerk und drücken Sie auf die (¢)-Taste, damit das System neu gebootet wird. GRUB startet anschließend standardmäßig das neu installierte Debian GNU/Linux und schlägt Ihnen vor, das neue System gleich zu konfigurieren. Sie können die Konfiguration sofort oder später durchführen. 12. Wenn Sie die Konfiguration sofort durchführen, müssen Sie als Nächstes die Zeitzone konfigurieren. 13. Anschließend muss das root-Passwort eingegeben werden. 14. Im nächsten Schritt wird ein neuer Benutzer angelegt. 15. Danach startet die APT-Konfiguration. Sie legen fest, ob Ihre Installationsquelle eine CD-ROM, ein FTP- oder HTTP-Server oder ein Dateisystem bzw. eine von Ihnen manuell hinterlegte Quelle ist. Wenn Sie CD-ROM wählen, müssen Sie noch die Gerätedatei (in der Regel /dev/cdrom) für Ihr CD-ROMLaufwerk angeben. 16. Es folgt die Auswahl des Installationsumfangs. Wenn Sie eine manuelle Paketauswahl wünschen, werden die einzelnen Pakete angezeigt und können mit der Taste (g) installiert werden. Wenn Ihr PC bereits über eine Internetverbindung verfügt, werden die Pakete in der Regel direkt aus einem Debian-Archiv im Internet heruntergeladen.
71
Softwareupdates
magnum
2.3 Softwareupdates Jede Linux-Installation kann problemlos ohne Neuinstallation aktualisiert werden, wenn es eine neue Version der installierten Distribution gibt oder wenn Pakete der Distribution ergänzt oder aktualisiert werden. Dies kann mit der Installations-CD-ROM oder -DVD der neuen Distributionsversion durchgeführt werden. Wenn Sie mit dieser den Rechner mit dem bestehenden System booten, erhalten Sie bei allen hier vorgestellten Distributionen die Option »Update« statt »Neuinstallation« angeboten. Alternativ können Sie die neuesten ISO-Images der Distributionen von deren Websites downloaden, auf CD-ROM brennen und mit damit ein Update auf dieselbe Weise wie mit kommerziell erworbenen CD-ROMs durchführen. Darüber hinaus können Sie auch nur einzelne Softwarepakete downloaden und nachinstallieren, wie in Abschnitt 2.4 beschrieben. Wenn Sie eine Internetverbindung für Ihre Linux-Installation eingerichtet haben, gibt es noch eine weitere Möglichkeit für ein einfaches Update. SUSE Linux bietet mit YaST im Menü SOFTWARE die Option ONLINE-UPDATE an und Debian GNU/Linux 3.1 enthält das Tool aptitude, um schnell und problemlos aktuelle Software aus dem Debian-Archiv im Internet zu beziehen (vergleiche Abschnitt 2.5.1).
2.4 Softwarepakete installieren und deinstallieren Die meisten Linux-Distributionen bieten heute ihre komplette Software, einschließlich des Betriebssystems, in Form von Paketen an. Die Ausgabe von Programmen in so genannten Paketen erleichtert die Installation und Verwaltung der Programme erheblich. Ein Paket enthält wie ein Archiv alle zu installierenden Dateien und einige zusätzliche Informationen:
쮿
Informationen über das Softwarepaket
쮿
Informationen über Abhängigkeiten zu anderen Paketen, die dann gegebenenfalls auch installiert werden müssen
쮿
Informationen über den Dateityp, wie zum Beispiel Binärdatei, Konfigurationsdatei, Dokumentation usw.
쮿
Installations- und Deinstallationsskripte
Pakete unter Linux basieren in der Regel auf anderen Paketen, zum Beispiel auf Bibliotheken, die unter anderem gemeinsam genutzte Programmteile enthalten. Ein Installations- oder Paketverwaltungsprogramm berücksichtigt automatisch diese Abhängigkeiten, damit alle Pakete installiert werden, die ein neu zu installierendes Paket benötigt, um lauffähig zu sein. Die Paketverwaltung steuert sämtliche Software, die über Pakete installiert wurde, so dass diese auch wieder problemlos vollständig deinstalliert werden kann. Wenn Sie allerdings als fortgeschrittener Linux-Anwender eine andere Installationsart verwenden, wie zum Beispiel das Einspielen von tar-Archiven, übergehen Sie die Paketverwaltung und können diese auch nicht für die Deinstallation nutzen.
72
Kapitel 2 · Installation und Updates
Unter Linux hat sich das von Red Hat entwickelte rpm-Format als standardmäßiges Paketformat bei den meisten Distributionen etabliert, das heißt, diese verwenden auch den Red Hat Package Manager mit dem Befehl rpm zur Paketverwaltung. Allerdings sind trotzdem die Pakete der verschiedenen Distributionen nicht einfach untereinander austauschbar, da sie für die entsprechende Distribution angepasst wurden. Wenn Sie also Pakete für SUSE Linux installieren, sollten diese auch aus einer Quelle für SUSE-Linux-Software stammen, und wenn die Pakete für Fedora Core bestimmt sind, sollten Sie diese ebenfalls aus einer passenden Quelle beziehen. Debian GNU/Linux verwendet einen eigenen Paketmanager, der mit dem Befehl apt-get gesteuert wird (vergleiche Abschnitt 2.5). Sie können bei Fedora Core Linux 4.0 immer noch die rpm-Befehle verwenden oder alternativ den neuen Software-Installationsbefehl yum.
2.4.1
RPM-Pakete installieren
RPM-Pakete enthalten in der Regel zum einen ein Binärpaket mit den kompilierten Binärdateien und die für die Installation notwendigen Informationen und Konfigurationsdateien und zum anderen ein Quellpaket mit dem Quellcode der für die Erstellung des Binärpakets benötigten Dateien. Schon der Dateiname eines Pakets bietet aussagekräftige Informationen. Das Paket acl-2.2.7-5.i386.rpm bezeichnet das Programm acl mit der Versionsnummer 2.2.7 und der Releasenummer 5. Die Releasenummer wird oft nicht angegeben, sondern erst dann hochgezählt, wenn Fehler im RPM-Paket behoben, Änderungen durchgeführt oder Dokumentationsdateien hinzugefügt wurden. Die Angabe i386 besagt, dass dieses Paket Binärdateien für Intel-Prozessoren enthält. Wenn an dieser Stelle die Angabe src gemacht wird, handelt es sich um ein Paket mit Quellcodedateien. Außer den Binärdateien enthält ein Paket auch Informationen über eine kurze Paketbeschreibung, über die Versionsnummer, über die Einordnung in die Gruppenhierarchie, in der alle Pakete verwaltet werden, und die Abhängigkeit von anderen Paketen. Vor allem die letzte Angabe ist von Bedeutung, wenn das Paket die vorherige Installation anderer Pakete voraussetzt.
Der Befehl rpm Dieser Befehl ist ein umfangreicher Paketverwalter für Befehls lautet:
rpm-Pakete.
Die Syntax des
# rpm [-option(en)]
Die wichtigsten Optionen des Befehls sind: Option
Beschreibung
-a oder --all
Zeigt gemeinsam mit -q alle installierten Pakete an
-c oder --configfiles
Zeigt gemeinsam mit -q alle Konfigurationsdateien an
Tab. 2.3: Die Optionen des Befehls rpm
73
Softwarepakete installieren und deinstallieren
magnum
Option
Beschreibung
-d oder --docfiles
Zeigt gemeinsam mit -q alle Dokumentationsdateien an
-e oder --erase
Löscht installierte Pakete
-f datei oder --file datei
Zeigt gemeinsam mit -q das Paket an, das die angegebene Datei enthält
--force
Erlaubt, dass bereits vorhandene Pakete und Dateien ersetzt werden
-h oder --hash
Zeigt den Fortschritt der Installation mit Hilfe von Hashzeichen an
-i oder --install
Installiert Pakete
-i paket oder --install paket
Zeigt gemeinsam mit -q Informationen zum angegebenen Paket an
-l paket oder --list paket
Zeigt gemeinsam mit -q die im Paket enthaltenen Dateien an
--nodeps
Es wird keine Abhängigkeitsprüfung durchgeführt.
-p datei oder --package datei
Zeigt gemeinsam mit -q Informationen über die angegebene Paketdatei an
-q oder --query
Zeigt Informationen über Pakete an
--quiet
Die Ausgabe wird auf Fehlermeldungen beschränkt.
-R oder --requires
Zeigt gemeinsam mit -q Abhängigkeiten an
--test
Es wird nur getestet und nicht wirklich installiert.
-U oder --upgrade
Aktualisiert das Paket
-v
Liefert ausführliche Informationen
-V oder --verify
Überprüft, ob die Dateien mit den Paketangaben übereinstimmen
-vv
Liefert sehr ausführliche Informationen
Tab. 2.3: Die Optionen des Befehls rpm (Forts.)
Im nachfolgenden Beispiel wird ein neues Paket installiert. Wenn es Abhängigkeiten zu anderen Paketen gibt, erhalten Sie eine entsprechende Fehlermeldung: # rpm -ivh acl-2.2.7-5.i386.rpm acl ##################################################
Im nächsten Beispiel wird ein Paket aktualisiert. Ist das zu aktualisierende Paket auf dem Rechner noch nicht vorhanden, wird es neu installiert: # rpm -U acl-2.2.7-5.i386.rpm
Nun wird ein bereits installiertes Paket wieder entfernt. Dies ist nur möglich, wenn kein anderes Paket von diesem abhängig ist: # rpm -ev acl-2.2.7-5.i386.rpm
74
Kapitel 2 · Installation und Updates
Sie können bereits installierte und nicht installierte Pakete mit dem Befehl rpm -q abfragen. Im ersten Beispiel werden ausführliche Informationen zu einem installierten Paket abgefragt: # rpm -qi tftp-0.34-61 Name : tftp Relocations: (not relocateable) Version : 0.34 Vendor: SUSE Linux AG, Nuernberg, Germany Release : 61 Build Date: Tue Sep 23 19:33:06 2003 Install date: Sat Jan 17 20:43:20 2004 Build Host: gregory.suse.de ...
Wenn Sie Informationen über eine rpm-Datei benötigen, gehen Sie wie folgt vor: # rpm -qpi Name Version Release
jdk-1.3.1.i386.rpm : jdk Relocations: (not relocateable) : 1.3.1 Vendor: Sun Microsystems : fcs Build Date: Son 06 Mai 2001 12:46:01 CEST
Im nächsten Beispiel werden alle im Paket enthaltenen Dateien angezeigt: # rpm -qlp jdk-1.3.1.i386.rpm | less
Es ist auch möglich, alle Dokumentations- oder Konfigurationsdateien anzuzeigen: # rpm -qd at /usr/share/doc/packages/at/ChangeLog /usr/share/doc/packages/at/Copyright /usr/share/doc/packages/at/Problems ...
Es ist auch möglich, abzufragen, aus welchem Paket eine Datei stammt: # rpm -qf /usr/bin/passwd shadow-4.0.3-182
Eventuell erhalten Sie hier die Meldung, dass eine Datei nicht aus einem bestimmten Paket stammt: # rpm -qf /etc/group file /etc/group is not owned by any package
Im letzten Beispiel werden alle installierten Pakete angezeigt: # rpm -qa | more filesystem-9.0-6 sash-3.6-105 man-pages-1.60-18 yast2-trans-es-2.8.2-5 yast2-trans-ru-2.7.5-95 ...
2.4.2
Grafische Paketverwaltung mit KDE
KDE bietet das grafische Tool KPACKAGE zur Paketverwaltung an. Sie können es über das Hauptmenü SYSTEM - KONFIGURATION - KPACKAGE starten. Das Paket zeigt alle installierten Pakete alphabetisch nach Kategorien sortiert an. Wenn Sie auf der rechten Fensterhälfte ein Paket anklicken, werden auf der linken Seite Informationen zum Paket angezeigt.
75
Softwarepakete installieren und deinstallieren
magnum
Dieses Tool steht unter Fedora Core Linux 4.0 standardmäßig nicht zur Verfügung. Bei Debian GNU/Linux KDE 2.2.2 finden Sie das Paket im KDE-Menü unter SYSTEM - PACKAGE MANAGER.
Bild 2.38: KPACKAGE - KDE-Paketmanager
Ein markiertes Paket kann deinstalliert werden, indem Sie auf die Schaltfläche DEINSTALLIEREN klicken. Es öffnet sich das Deinstallationsfenster, in dem Sie noch einmal auf DEINSTALLIEREN klicken:
Bild 2.39: Ein Paket deinstallieren
76
Kapitel 2 · Installation und Updates
Das Paket enthält anschließend keine Liste mit installierten Dateien mehr. Mit der Taste (F5) können Sie die Ansicht aktualisieren, so dass das Paket nicht mehr angezeigt wird.
Bild 2.40: Ein deinstalliertes Paket
Wenn Sie ein Paket installieren, müssen Sie eventuell probieren, auf welcher Installations-CD sich das gewünschte Paket befindet. Legen Sie die CD oder DVD ein und klicken Sie auf GERÄTE und anschließend auf das verwendete Gerät. In diesem Beispiel wird das Paket supertux wieder installiert, es befindet sich auf der zweiten Installations-CD von SUSE.
Bild 2.41: Ein Paket installieren
77
Softwarepakete installieren und deinstallieren
magnum
Nach Auswahl des Pakets öffnet sich das Installationsfenster. Klicken Sie hier auf INSTALLIEREN. Das Programm zeigt an, wenn die Installation fertig ist.
Bild 2.42: Installationsfenster von KPACKAGE
Das installierte Paket wird wieder angezeigt und auch die dazugehörige Dateiliste kann wieder eingesehen werden:
Bild 2.43: Die Dateiliste des installierten Pakets anzeigen
78
Kapitel 2 · Installation und Updates
2.4.3
Grafische Paketverwaltung mit YaST
Die Paketverwaltung unter SUSE kann über das Yast2-Modul SOFTWARE und die Option SOFTWARE INSTALLIEREN ODER LÖSCHEN durchgeführt werden. An dieser Stelle ist es nicht nur möglich, Software zu installieren oder zu deinstallieren, sondern auch, ein Online-Update, ein System-Update und ein Patch-Update durchzuführen. Klicken Sie auf die Option SOFTWARE INSTALLIEREN ODER LÖSCHEN. Schalten Sie im Paketverwaltungsfenster dann den Filter von SUCHEN auf PAKETGRUPPEN um.
Bild 2.44: Paketgruppen anzeigen
Den Filter SUCHEN können Sie verwenden, um nach einem bestimmten Paket zu suchen. Der Filter PAKETGRUPPEN zeigt alle Pakete an, die installiert sind oder installiert werden können. In unserem Beispiel wollen wir das Paket qt3-devel installieren, das wir für die grafische Anzeige der Kernelkonfiguration (vergleiche Kapitel 16) benötigen. Es ist ein Entwicklertool, das Sie finden, wenn Sie im linken Fensterbereich auf ENTWICKLUNG klicken und dann im rechten Fensterbereich alphabetisch suchen. Aktivieren Sie dann das Kontrollkästchen und klicken Sie auf ÜBERNEHMEN:
79
Softwarepakete installieren und deinstallieren
magnum
Bild 2.45: Neues Paket installieren
Es werden vom Paketmanager immer die Abhängigkeiten geprüft, das heißt, ob das Paket überhaupt lauffähig ist, wenn bestimmte andere Pakete nicht installiert sind. Sie erhalten in diesem Fall folgende Meldung:
Bild 2.46: Information über Abhängigkeiten
Sie können hier die Pakete deaktivieren, die Sie nicht installieren wollen. Allerdings funktioniert dann auch das von Ihnen ausgewählte Paket nicht, da es ja von den angezeigten abhängig ist. Klicken Sie daher einfach auf FORTFAHREN, damit die Installation ordnungsgemäß durchgeführt werden kann. Sie werden dann aufgefordert, die SUSE-CD einzulegen, die das Paket enthält, und auf OK zu klicken:
80
Kapitel 2 · Installation und Updates
Bild 2.47: Aufforderung, CD einzulegen
Der Fortschritt der Paketinstallation wird angezeigt und Sie erhalten eine Meldung, wenn sie abgeschlossen ist.
Bild 2.48: Fortschrittsanzeige der Paketinstallation
Wenn Sie ein Paket mit YaST deinstallieren, dann suchen Sie es ebenfalls einfach aus der Paketliste aus und entfernen den Prüferhaken vor dem Paketnamen. Anschließend klicken Sie wieder auf ÜBERNEHMEN und das deaktivierte Paket wird entfernt.
81
Softwarepakete installieren und deinstallieren
2.4.4
magnum
Grafische Paketverwaltung mit Fedora Linux
Die Paketverwaltung unter Fedora Core Linux kann über das KDE-Menü SYSTEMEINSTELLUNGEN - HINZUFÜGEN/ENTFERNEN VON SOFTWARE durchgeführt werden:
Bild 2.49: Paket-Manager von Fedora Core Linux
Klicken Sie auf DETAILS neben einer Paketgruppe, um weitere Pakete auswählen zu können, zum Beispiel zu Netzwerkserver. Klicken Sie dann auf die zusätzlich zu installierenden Pakete, so dass das Häkchen erscheint, und anschließend auf SCHLIESSEN.
Bild 2.50: Weitere Pakete zur Installation auswählen
82
Kapitel 2 · Installation und Updates
Klicken Sie nun auf die Schaltfläche AKTUALISIERUNG. Die zu installierenden Pakete werden in eine Installationswarteschlange gestellt, und wenn Sie auf WEITER klicken, wird die Installation durchgeführt.
Bild 2.51: Installationsinformationen
Nach der Installation wird eine Erfolgsmeldung angezeigt. Klicken Sie auf OK, um die Installation zu beenden.
Bild 2.52: Installation beenden
2.5 Debians Paketverwaltung Debians Paketverwaltung bestand bis Debian Version 3.0 aus dem Befehl Seit der Version 3.1 gibt es das komfortablere Tool aptitude.
2.5.1
apt-get.
Der Befehl aptitude
Debian Linux hat zu seinem eigenen Befehl apt-get für die Paketverwaltung eine Benutzerschnittstelle aptitude geschaffen, mit der Sie Pakete auswählen, installieren und deinstallieren können. Das Tool sorgt auch dafür, dass die Abhängigkeiten der installierten Pakete korrekt behandelt werden. Es kann entweder auf der grafischen Oberfläche im Hauptmenü unter DEBIAN - APPS - SYSTEM - APTITUDE gestartet oder in der Befehlszeile eines Terminalfensters aufgerufen werden: # aptitude &
83
Debians Paketverwaltung
magnum
Sie sollten bei Debian grundsätzlich mit Hilfe des Paketmanagers Software nachinstallieren, weil es in diesem Fall keine Probleme mit Paketabhängigkeiten gibt. Bei herkömmlichen Downloads von Paketen müssen oft Abhängigkeiten manuell aufgelöst werden, was häufig sehr kompliziert ist. Damit
aptitude auf verschiedene Debian-Archive zugreift, pflegen Sie die Datei /etc/sources.list entsprechend. Zum Beispiel sollte grundsätzlich der Eintrag deb http://ftp.de.debian.org/debian stable main contrib non-free
darin enthalten sein, um Pakete mit aptitude aus den Archiven stable, main, contrib und non-free downloaden und installieren zu können. Wenn Sie die Datei /etc/sources.list geändert haben, rufen Sie apitude auf und wählen den Menüpunkt ACTIONS und anschließend die OPTION UPDATE PACKAGE list. Das Programm zeigt in der oberen Fensterhälfte die vorhandenen Pakete sortiert nach Kategorie und Status und unten die zum Paket gehörenden Informationen an. Mit der linken Maustaste können die Optionen der Menüleiste aktiviert werden:
Bild 2.53: Debians Pakettool aptitude
Wenn neue Pakete ins Sicherheitsarchiv eingestellt werden und Ihr Rechner eine Internetverbindung hat, werden diese Sicherheitsupdates in einer eigenen Kategorie aufgeführt und automatisch für die Installation ausgewählt. Ebenfalls eine eigene Kategorie bilden neue Pakete, die in das Debian-Archiv aufgenommen wurden. Eine weitere zusätzliche Kategorie können die aktualisierten Pakete bilden, die eine neuere Version im Debian-Archiv haben. Diese drei Kategorien werden angezeigt, wenn Sie eine Internetverbindung eingerichtet haben und den Menüpunkt AKTIONEN - PAKETE AKTUALISIEREN wählen oder auf die Taste (u) drücken.
84
Kapitel 2 · Installation und Updates
Installierte Pakete und nicht installierte Pakete bilden standardmäßig jeweils einen eigenen Kategoriepunkt. Virtuelle Pakete sind – wie der Name sagt – keine wirklichen Pakete, sondern Pakete, die von einem Paketsatz angeboten werden und in mehreren Paketen enthalten sein können, um Abhängigkeiten aufzulösen. Die Schnellauswahl oder so genannten Tasks dagegen sind Paketsammlungen, in denen spezielle Applikationen zusammengefasst wurden. Mit der Maus können Sie auch in der oberen Fensterhälfte die gewünschte Kategorie anklicken (bzw. alternativ mit der Pfeiltaste nach unten navigieren) und anschließend auf die Taste (¢) oder (Enter) drücken, um die Kategorie zu öffnen bzw. zu schließen. Wenn Sie eine Kategorie durch die Taste (¢) aufklappen, erhalten Sie den Inhalt der Kategorie. Die Unterpunkte können wiederum mit Hilfe der Taste (¢) erweitert bzw. wieder geschlossen werden:
Bild 2.54: Die Menüs von Debians Pakettool aptitude
Folgende Paketstatus sind möglich: Status
Beschreibung
B
Beschädigtes Paket
c
Entferntes, aber nicht vollständig gelöschtes Paket, das heißt, es sind zum Beispiel noch Einstellungen in Konfigurationsdateien vorhanden
C
Halb konfiguriertes Paket
E
Interner Fehler
H
Halb installiertes Paket
i
Installiertes Paket
Tab. 2.4: Die Status des Tools aptitude
85
Debians Paketverwaltung
Status
Beschreibung
p
Vollständig gelöschtes Paket
u
Entpacktes Paket
v
Virtuelles Paket
magnum
Tab. 2.4: Die Status des Tools aptitude (Forts.)
Mit Hilfe des Menüpunkts PAKET oder der Tastatur können Sie die Paketauswahl bearbeiten. Dazu navigieren Sie zuerst zum gewünschten Paket und wählen dann die entsprechende Aktion aus: Taste
Beschreibung
+
Paket für die Installation auswählen
-
Paket zum Löschen auswählen
_
Paket für das vollständige Löschen auswählen
=
Paket markieren, dass es auf »hold« gesetzt wird, das heißt, nicht durch ein automatisches Update geändert werden kann
:
Paket markieren, dass es für die aktuelle Sitzungsdauer auf »hold« gesetzt wird, das heißt, nicht durch ein automatisches Update geändert werden kann
C
Datei changelog zu einem Paket downloaden und anzeigen
g
Gewünschte Änderungen in einem Vorschaufenster anzeigen
L
Paket nochmals installieren
l
Paket und seine Abhängigkeiten sofort installieren, während alle anderen installierten Pakete in der Zeit auf »hold« gesetzt werden
R
Paket nochmals konfigurieren
Tab. 2.5: Die Aktionen des Tools aptitude
Die Installation oder Deinstallation können Sie schließlich über den Menüpunkt AKTIONEN - INSTALLIEREN/ENTFERNEN VON PAKETEN auslösen. Wenn Sie eine bestehende Internetverbindung haben, wird die Aktualisierung direkt mit Hilfe des Debian-Archivs durchgeführt:
86
Kapitel 2 · Installation und Updates
Bild 2.55: Pakete installieren mit Debians Pakettool aptitude
Zuvor werden Ihnen noch die abhängigen Pakete angezeigt, die gleichzeitig mitinstalliert werden müssen, damit das Paket ordnungsgemäß funktioniert:
Bild 2.56: Paketabhängigkeiten mit Debians Pakettool aptitude anzeigen
87
magnum
Debians Paketverwaltung
2.5.2
Der Befehl apt-get
Debian Linux hat einen eigenen Befehl für die Paketverwaltung. Die Syntax des Befehls lautet: # apt-get [-option(en)] [anweisung [paket]]
Die wichtigsten Anweisungen des Befehls sind: Option
Beschreibung
autoclean
Entfernt Pakete aus dem lokalen Aufbewahrungsort von abgerufenen Paketdateien, die nicht mehr aus dem Internet heruntergeladen werden können
check
Ist ein Diagnosetool, das den Paket-Cache aktualisiert und prüft, ob Abhängigkeiten unterbrochen wurden
clean
Entfernt Pakete aus dem lokalen Aufbewahrungsort von abgerufenen Paketdateien
install paket
Installiert die angegebenen Pakete
remove paket
Entfernt die angegebenen Pakete
source
Es werden Source-Pakete geholt.
update
Resynchronisiert die Paketindexdateien mit ihren Quellen
upgrade
Wird verwendet, um die neueste Version aller zuletzt installierter Pakete zu installieren
Tab. 2.6: Die Optionen des Befehls apt-get
Es gibt außerdem noch den Befehl apt-cache, ein APT-Paketbearbeitungstool, um den Cache zu bearbeiten. Außerdem kann parallel zu apt-get auch das Paketverwaltungstool dpkg verwendet werden. Die Konfiguration der Quellen für die Installation oder Aktualisierung wird mit Hilfe des Befehls apt-setup in der Datei /etc/apt/sources.list durchgeführt. Im ersten Beispiel wird nach Paketen gesucht, in deren Namen oder Beschreibung die Zeichenkette apache steht: # apt-cache search apache
In der Ausgabe steht am Anfang jeder Zeile der Paketname. Im nächsten Beispiel werden weitere Informationen zu dem Paket ausgegeben: # apt-cache show apache
Im folgenden Beispiel wird das Paket schließlich installiert: # apt-get install apache
Mit diesem Aufruf werden gleichzeitig alle Abhängigkeiten aufgelöst, das heißt, alle für das Paket apache notwendigen Pakete automatisch mitinstalliert. Eine Übersicht über alle installierten Pakete erhalten Sie mit folgendem Befehl: # dpkg -l
88
Kapitel 2 · Installation und Updates
Die zu einem Paket gehörigen Dateien können wie folgt angezeigt werden: # dpkg -L apache
Ein Paket kann mit diesem Befehl entfernt werden: # apt-get remove apache
Beim Entfernen eines Pakets werden keine Konfigurationsdateien gelöscht, so dass diese nachträglich wie im folgenden Beispiel entfernt werden müssen: # dpkg --purge apache
Wenn mit dem Befehl apt-setup FTP- oder HTTP-Quellen konfiguriert wurden, sollten die Paketlisten aktualisiert werden, wie in diesem Beispiel: # apt-get update
Im nächsten Beispiel wird nach dem Aktualisieren der Paketlisten nach aktualisierten Paketen gesucht und diese werden installiert: # apt-get upgrade
Dabei werden temporär Pakete gespeichert. Diese können wie im folgenden Beispiel wieder gelöscht werden: # apt-get clean
2.6 Quellcode kompilieren Alle Open-Source-Programme liegen auch als Quellcode vor. Quellcode zu kompilieren und installieren hat den Vorteil, dass das Programm flexibler in bereits bestehende Verzeichnis- und Bibliotheksstrukturen aufgenommen wird. Binärdateien benötigen dagegen häufig bestimmte Systembedingungen. Die Installation von Quellcode ist aber in der Regel schwieriger, da jeder Programmierer hier individuelle Vorgaben haben kann. Dieser Abschnitt erläutert eine Vorgehensweise, nach der in vielen Fällen vorgegangen werden kann. Lesen Sie grundsätzlich die Informationen in den Dateien INSTALL und README, bevor Sie mit dem Kompilieren und Installieren von Quellcode beginnen. Die Verwendung eines Paketmanagers hat aber gegenüber der Installation von Programmen aus dem Quellcode viele Vorteile. Die Installation von Quellcode hat einige Nachteile:
쮿
die Schwierigkeit, den Überblick über die installierten Programme und Versionen zu behalten
쮿
die Unmöglichkeit, die Zugehörigkeit einer Datei zu einem Programmpaket herauszufinden
쮿
die Aufwändigkeit von Aktualisierungen, da bei einer Installation mit dem Befehl make (vergleiche Abschnitt 2.3) auch bereits vorhandene Konfigurationsdateien überschrieben werden
쮿
das Fehlen von Informationen, welche Pakete und Bibliotheken für die Ausführung des Programms benötigt werden. Das bedeutet, es ist möglich, ein Paket zu installieren, ohne dass ein dafür benötigtes Paket auch installiert wurde.
89
Quellcode kompilieren
2.6.1
magnum
Komprimierte Quellcodedateien entpacken
Häufig werden die Quellcodedateien für eine Installation zusammen mit einer Datei Makefile und der Dokumentation in einem Verzeichnisbaum zusammengefasst und dieser wird archiviert und komprimiert. Ein typischer Archivierungsbefehl ist tar und zur Komprimierung wird häufig gzip verwendet (vergleiche Kapitel 7). Zum Entpacken und Dearchivieren gibt es verschiedene Möglichkeiten: $ gzip -d quelldatei.tar.gz ; tar xvf quelldatei.tar
oder: $ gunzip quelldatei.tar.gz ; tar xvf quelldatei.tar
oder: $ gzip -cd quelldateie.tar.gz | tar xv
oder: $ tar zxvf quelldatei.tar.gz
Unter Linux werden Programme in der Regel in C oder C++ entwickelt. Haben diese Programme einen größeren Umfang, kann es vorkommen, dass der Quellcode sich in verschiedenen Dateien befindet. Dann muss jede Datei mit der Endung .c individuell kompiliert werden. Durch das Kompilieren werden Objektdateien mit der Endung .o erzeugt, die anschließend mit dem Programm make zum ausführbaren Programm zusammengebunden werden.
Der Befehl configure Häufig enthält ein Quellcodepaket ein Skript mit dem Namen configure. Dieses überprüft das Zielsystem dahingehend, ob die für die Kompilierung notwendigen Voraussetzungen vorhanden sind, und erstellt dann eine angepasste Datei Makefile für die Konfiguration der Installation. Wenn das Skript auf Fehler stößt, zum Beispiel dass Bibliotheken fehlen, so erhalten Sie entsprechende Meldungen. In diesem Fall müssen die fehlenden Systemkomponenten zuerst nachinstalliert werden.
Der Befehl make Der Befehl make erhält aus einer für jedes Programm individuellen Konfigurationsdatei Makefile für den jeweiligen Kompiliervorgang von Objektdateien des Quellcodes seine Anweisungen, zum Beispiel welche Dateien kompiliert und zu einem Programm gelinkt werden sollen. Unter anderem vergleicht der Befehl die Änderungszeiten der Objekt- mit denen der Quellcodedateien und kompiliert nur die Objektdateien, die älter als ihre Quellcodedateien sind. Das heißt, bei kleinen Änderungen sind keine vollständigen Neukompilierungen notwendig, was Zeitersparnis bedeutet. In der Regel wird für ein Quellcodeprogramm ein bestimmter Verzeichnispfad für die ausführbaren Dateien definiert, meistens das Verzeichnis /usr/local/bin. In manchen Dateien Makefile wird ein Ziel mit der Bezeichnung install aufgeführt, das den Installationsort enthält. In diesem Fall kopiert der Befehl make install die entstandenen Dateien und weist ihnen die notwendigen Rechte zu.
90
Kapitel 2 · Installation und Updates
Es kann vorkommen, dass ein im Makefile angegebenes Installationsverzeichnis nicht mit dem Verzeichnisbaum einer Linux-Distribution übereinstimmt, was zu Problemen führt. Das kann zum Beispiel auch durch einen Versionswechsel entstehen, bei dem der Pfad des Standardinstallationsverzeichnisses geändert wurde. Eine alternative und effizientere Lösung ist, anstelle des Befehls make install den Befehl checkinstall make install zu verwenden. Die komplette Installation wird nun vom Tool installwatch überwacht und aus den installierten Dateien wird ein RPM-, Slackware- oder Debian-Paket erstellt und nochmals installiert, so dass ein Eintrag in der Paketverwaltung verzeichnet wird. Am Ende des Befehls checkinstall wird das Verzeichnis und der Dateiname angezeigt, unter dem das erzeugte Paket abgelegt wurde. Dieses kann dann zum Beispiel auch mit dem Befehl rpm oder einem grafischen Paketverwaltungstool installiert werden.
91
3 Die Befehlszeile und Hilfe verwenden »Mancher ertrinkt lieber, als dass er um Hilfe ruft.« – Wilhelm Busch Wenn Sie beim Eingeben von Linux eine bestimmte Syntax beachten, haben Sie in der Regel weniger Probleme mit Fehlermeldungen. Zu den häufigsten Fehlern beim Eingeben von Befehlen gehören einmal das Weglassen von Leerzeichen, außerdem die fehlende Unterscheidung bei der Eingabe von Groß- und Kleinbuchstaben und schließlich die Verwechslung des Schrägstrichs (»Slash«) zur Trennung von Verzeichnisnamen mit dem rückwärtigen Schrägstrich (»Backslash«). Dieses Kapitel beschreibt den Aufbau von Linux-Befehlen, um den häufigsten Fehlern vorzubeugen, und die Möglichkeiten, unter Linux Hilfe zu erhalten.
3.1 Aufbau von Linux-Befehlen Ein Befehl unter Linux wird an der Eingabeaufforderung hinter dem Promptzeichen eingegeben und hat in der Regel den folgenden Aufbau: $ befehlsname [-option(en)] [argument(e)]
Nicht jeder Befehl kennt Optionen und Argumente und diese müssen bei den meisten Befehlen nicht unbedingt verwendet werden. Das Promptzeichen zeigt an, dass das Betriebssystem auf eine Eingabe wartet, und kann vom Benutzer seinen Anforderungen gemäß eingerichtet werden. Standardmäßig ist das Promptzeichen unter Linux in der Regel das der BourneAgain-Shell (vergleiche Kapitel 9), und häufig wird der Name der Shell und ihre Versionsnummer gefolgt von einem Dollarzeichen angegeben, zum Beispiel bash_2.03$. Bei SUSE 10 besteht das Promptzeichen standardmäßig aus dem Benutzernamen, dem Rechnernamen und dem aktuellen Pfad gefolgt von einem Größerzeichen, zum Beispiel her@pc7linux:/etc>. Bei Fedora Core 4.0 besteht das Promptzeichen ebenfalls standardmäßig aus dem Benutzernamen, dem Rechnernamen und dem letzten Unterverzeichnis des aktuellen Pfads gefolgt von einem Dollarzeichen, zum Beispiel [her@pc7linux etc]$. Bei Debian 3.1 besteht das Promptzeichen wie bei SUSE Linux aus dem Benutzernamen, dem Rechnernamen und dem vollständigen aktuellen Pfad, aber wie bei Fedora gefolgt von einem Dollarzeichen, zum Beispiel her@pc7linux:/etc$. Unabhängig von der Shell und der Linux-Distribution wird dem Benutzer root aber immer als Promptzeichen das Hashzeichen # zugeordnet. Achten Sie bei den Beispielen in diesem Buch darauf, ob vor einem Befehl das Promptzeichen # steht. Das weist darauf hin, dass nur root den Befehl ausführen darf.
93
Optionen und Argumente
magnum
Die einfachste Form eines Befehls besteht immer nur in der Eingabe des Befehlsnamens wie beispielsweise beim nachfolgenden Befehl, der den Inhalt des aktuellen Verzeichnisses auflistet: $ ls
3.2 Optionen und Argumente Eine Option steuert, wie ein Befehl arbeiten soll und regelt Details der Verarbeitung. Ein Argument ist eine Angabe, »was« der Befehl bearbeiten soll. Einem Befehl können mehrere Optionen, aber auch mehrere Argumente mitgegeben werden. Ein Befehl, der in der Regel nur ein Argument verwendet, ist der Befehl cd zum Wechseln des Verzeichnisses. Im folgenden Beispiel wird in das Verzeichnis /etc gewechselt: $ cd /etc
Das Argument ist in diesem Beispiel das Verzeichnis, in das gewechselt werden soll. Der Befehl ls wird häufig mit einer oder mehreren Optionen verwendet. Die Optionen beeinflussen die Ausgabe oder Verarbeitung des Befehls und können in der Regel aneinandergereiht eingegeben werden. Im nachfolgenden Beispiel wird der Inhalt eines Verzeichnisses ausführlich (-l = long) und einschließlich der versteckten Dateien (-a = all) aufgelistet: $ ls –al
Versteckte Dateien in Linux sind in der Regel Konfigurationsdateien. Sie beginnen immer mit einem Punkt und werden normalerweise nicht angezeigt, wenn der Inhalt eines Verzeichnisses aufgelistet wird. Der Befehl ls kann sowohl mit Optionen als auch mit Argumenten verwendet werden. Das nachfolgende Beispiel erzeugt ein ausführliches Listing aller Dateien in den Verzeichnissen /etc und /sbin: $ ls –al /etc /sbin
Bei der Erzeugung von Dateien und Verzeichnissen sollten Sie daran denken, dass Linux Groß- und Kleinschreibung unterscheidet. Aus diesem Grund werden zum Beispiel die Dateien /home/her/bericht, /home/her/BERICHT und /home/her/Bericht etc. als separate Dateien betrachtet. Damit der Befehl Optionen und Argumente auseinander halten kann, werden Optionen in der Regel mit einem vorangestellten Minuszeichen (–) geschrieben. Werden mehrere Optionen verwendet, können häufig alle Optionen hinter einem Minuszeichen zusammengefasst werden. Um Probleme mit anderen Betriebssystemen, die die Groß- und Kleinschreibung nicht unterscheiden, bzw. um Verwirrung zu vermeiden, verwenden Sie am besten einfach immer die Kleinschreibung.
94
Kapitel 3 · Die Befehlszeile und Hilfe verwenden
Ein Dateiname setzt sich unter Linux aus dem Pfadnamen und dem eigentlichen Dateinamen zusammen: /home/her/bericht
Der erste Schrägstrich steht für das Verzeichnis /, während die anderen Schrägstriche Trennzeichen zwischen den einzelnen Verzeichnissen sind. Der eigentliche Dateiname in diesem Beispiel wäre bericht, der Pfadanteil /home/her. Sonderzeichen haben unter Linux oft eine spezielle Bedeutung und sollten daher vermieden werden. Die folgenden Zeichen . , _
können problemlos verwendet werden. Einen Bindestrich (-) sollten Sie nie am Anfang eines Dateinamens verwenden, da eine Eingabe dieses Dateinamens sonst standardmäßig als Option interpretiert würde. Außerdem sollten Sie die deutschen Sonderzeichen, wie zum Beispiel die Umlaute ä, ö, ü und das Zeichen ß, sowie Leerzeichen in Dateinamen vermeiden, da sich daraus in einem Netzwerk mit unterschiedlichen Sprach- und Zeichensatzeinstellungen Probleme ergeben können. Optionen sind unter Linux standardmäßig ein einzelner Buchstabe. Da manche Befehle aber sehr viele Optionen kennen, hat sich diese Schreibweise manchmal als schwer nachvollziehbar erwiesen. Alternativ wurde daher die Möglichkeit eingeführt, Optionen als ausgeschriebene Worte zu verwenden. Diese werden mit doppelten Minuszeichen eingeleitet. $ ls --all
3.3 Hilfe unter Linux In diesem Abschnitt erfahren Sie, wie Sie sich selbst unter Linux weiterhelfen können, wenn es Fragen oder Probleme gibt. Der erste Teil des Abschnitts zeigt Ihnen, wie Sie Hilfe zu Befehlen erhalten. Die grafischen Tools der Linux-Distributionen geben nicht nur zu den Befehlen, sondern auch zu Betriebssystemfragen, zum Beispiel zur Installation, und zu allen Programmen der grafischen Oberfläche eine ausführliche Hilfe. Eine letzte Möglichkeit ist, dass Sie sich an Dritte wenden, in Form von Mailinglisten oder Foren.
3.3.1
Hilfe-Befehle unter Linux
Der Befehl man Die zuvor genannten Möglichkeiten setzen eine grafische Oberfläche und gegebenenfalls einen installierten Browser, eventuell noch eine Internetanbindung voraus. Die Online-Hilfe, die so genannten Manual Pages, die Sie mit dem Befehl man erhalten, steht Ihnen unabhängig davon zur Verfügung, also auch ohne grafische Oberfläche. Der Befehl man ist unter Unix der originäre Hilfebefehl und bei den meisten LinuxDistributionen mit einer etwas verkürzten Ausgabe noch vorhanden.
95
magnum
Hilfe unter Linux
Sie geben dazu an der Befehlszeile einfach den Befehl man und dann den Suchbegriff ein. In erster Linie wird der Befehl verwendet, um die Hilfeseiten zu einem bestimmten Befehl auszugeben, es ist aber auch möglich, Hilfe zu Konfigurationsdateien, zu Systemaufrufen, C-Bibliotheksroutinen, Gerätedateien usw. zu erhalten. Die Befehlssyntax sieht folgendermaßen aus: $ man [-option(en)] befehl
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-a
Zeigt alle vorhandenen Manualseiten zum Suchbegriff an
-k suchbegriff
Sucht in der Kurzbeschreibung der Manual Pages nach dem angegebenen Stichwort
-r befehl
Durchsucht die vom angegebenen Befehl referenzierten Manual Pages und gibt die gefundenen Kurzbeschreibungen aus
Tab. 3.1: des Befehls man
Die Navigation in den Manual Pages erfolgt über bestimmte Tasten, entsprechend der Navigation des Befehls more, der in Kapitel 6 erläutert wird. Wenn Sie Hilfe zu dem Befehl uname suchen, geben Sie an der Befehlszeile man ein. Sie erhalten folgende Ausgabe:
uname
$ man uname Reformatting page. Please Wait... done User Commands uname(1) NAME uname - print name of current system SYNOPSIS uname [ -aimnprsvX ] uname [ -S system_name ] DESCRIPTION The uname utility prints information about the current system on the standard output. When options are specified, symbols representing one or more system characteristics will be written to the standard output. If no options are specified, uname prints the current operating system’s name. The options print selected information returned by uname(2), sysinfo(2), or both. ...
Wenn Sie sich in der Anzeige »bewegen« möchten, dann verwenden Sie folgende Tasten zur Navigation: Taste
Aktion
(Leertaste)
Auf die nächste Bildschirmseite der Online-Hilfe weiterblättern
(¢)-Taste
Zeilenweise durch die Online-Hilfe weiterblättern
Tab. 3.2: Navigationsmöglichkeiten in der Online-Hilfe
96
Kapitel 3 · Die Befehlszeile und Hilfe verwenden
Taste
Aktion
(b)
Eine Bildschirmseite zurückblättern (»backwards«)
(h)
Eine Hilfe zu allen Navigationsfunktionen anzeigen (»help«)
(/) suchmuster
Die Online-Hilfe vorwärts nach dem eingegebenen Suchmuster durchsuchen
(n)
Nach der nächsten Übereinstimmung mit dem Suchmuster suchen (»next«)
(q)
Den Befehl man beenden (»quit«)
Tab. 3.2: Navigationsmöglichkeiten in der Online-Hilfe (Forts.)
Die Ausgabe der Manual Pages erfolgt nach Name, Syntax, Beschreibung usw. gegliedert, so gibt es zum Beispiel am Anfang der Ausgabe einen Abschnitt NAME mit der Kurzbeschreibung, dann einen Abschnitt SYNOPSIS mit der Befehlssyntax, danach einen Abschnitt DESCRIPTION mit der ausführlichen Beschreibung usw. Wichtige Abschnitte sind der Abschnitt OPTIONS, der jede einzelne Option eines Befehls im Detail erklärt, und der Abschnitt SEE ALSO, der sich ganz unten in der Anzeige des Befehls man befindet und Querverweise zum gewählten Thema enthält. Hinter diesen Verweisen steht jeweils eine in Klammern geschriebene Nummer, die die Sektion der Online-Hilfe angibt, auf die Sie mit Hilfe der Option -s des Befehls man zugreifen können. Die Manual Pages sind in Sektionen aufgebaut, so enthält zum Beispiel bei SUSE Linux, Fedora Core Linux und Debian GNU/Linux die Sektion 1 Benutzerbefehle und die Sektion 5 verschiedene Dateiformate. Daher erhalten Sie mit dem Befehl $ man passwd
Informationen zum Befehl passwd und im Abschnitt SEE ALSO folgende Verweise: SEE ALSO finger(1), login(1), nispasswd(1), nistbladm(1), yppasswd(1), domainname(1M), eeprom(1M), id(1M), passmgmt(1M), pwconv(1M), su(1M), useradd(1M), userdel(1M), passwd(4) ...
Der Befehl $ man 5 passwd
dagegen gibt Informationen über die Datei /etc/passwd in Sektion 5 aus. Wenn Sie keine Sektionsnummer angeben, werden die Informationen der Sektion 1 ausgegeben. Bei anderen Unix- oder Linux-Systemen können die Sektionen der Manual Pages abweichend sein. Alle verwenden aber die Sektion 1 für Benutzerbefehle.
Die hier kurz erwähnten Befehle werden alle in den nachfolgenden Kapiteln noch ausführlich behandelt. Da der Name eines Befehls nicht immer bekannt ist, gibt es auch eine Möglichkeit, die Online-Hilfe nach Stichworten zu durchsuchen. Dazu geben Sie den Befehl man einfach mit der Option -k und dem Stichwort ein (vergleiche Befehl apropos), um eine Auflistung aller Befehle zu erhalten, die zum angegebenen Stichwort gefunden werden, zum Beispiel:
97
Hilfe unter Linux
magnum
$ man -k calendar iwidgets::calendar (n) [iwidgets_calendar] - Create and manipulate a monthly calendar iwidgets_calendar (n) - Create and manipulate a monthly calendar read-ical (1) - coverts information on your Palm handheld into an Icalformatted calendar. Note, this is not the same as the iCal calendar format. wmcalclock (1) - Dockable Calendar Clock $
Debian gibt eine Fehlermeldung mit dem Wortlaut »No manual entry for command« für Befehle aus, die eingebaute Shell-Befehle sind. In diesem Fall müssen Sie den Befehl man bash aufrufen und in den Manual Pages der Shell nach dem Befehl suchen. Fedora und SUSE geben dagegen bei einem man-Befehl für einen eingebauten Shell-Befehl automatisch die Man Pages der bash aus.
Der Befehl help Mit dem Befehl help erhalten Sie eine Online-Hilfe zu einem Befehl. Wenn es ein in die Shell fest eingebauter Befehl ist, ein so genannter Shell-Builtin, wie zum Beispiel cd, sieht die Syntax wie folgt aus: $ help [-s] befehl
Der Befehl help ist selbst ein eingebauter Befehl der Bourne-Again-Shell (vergleiche Kapitel 9). So kann zum Beispiel zum Befehl cd wie folgt Hilfe gesucht werden: $ help cd
Die Option -s verkürzt die Ausgabe. Wenn Sie Hilfe zu anderen Befehlen suchen, dann geben Sie zuerst den entsprechenden Befehl und anschließend --help ein. Die Befehlssyntax sieht folgendermaßen aus: $ befehl --help
Zum Beispiel Hilfe zum Befehl ls: $ ls --help
Der Befehl apropos Wenn Sie den Namen eines Befehls nicht kennen, durchsuchen Sie die Online-Hilfe nach Stichworten, zum Beispiel: $ apropos befehl
Die Namenszeilen aller Man Pages werden nach dem Stichwort durchsucht.
98
Kapitel 3 · Die Befehlszeile und Hilfe verwenden
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-d oder --debug
Gibt Debug-Informationen aus
-r oder --regex
Interpretiert jedes Schlüsselwort als regulären Ausdruck (vergleiche Kapitel 7, Befehl grep)
-w oder --wildcard
Interpretiert jedes Schlüsselwort als Muster, das Wildcards enthält (vergleiche Kapitel 9)
-e oder --exact
Jedes Schlüsselwort muss exakt mit dem Seitennamen übereinstimmen.
-M pfad oder --manpath=pfad
Definiert einen alternativen Satz von durch Strichpunkt getrennten Manual-Page-Hierarchien, die durchsucht werden sollen. Standardmäßig wird zur Suche der Inhalt der Umgebungsvariablen MANPATH verwendet.
Tab. 3.3: Die Optionen des Befehls apropos
Der nachfolgende Befehl sucht zum Beispiel Befehle, die das Thema Editieren betreffen: $ apropos edit pdbedit (8) - manage the SAM database Tk::ColorEditor (3pm) - a general purpose Tk widget Color Editor rvim (1) - Vi IMproved, a programmers text editor audacity (1) - Graphical cross-platform audio editor tcsh (1) - C shell with file name completion and command line editing psed (1) - a stream editor ...
Bei einigen Linux-Varianten, zum Beispiel Fedora Linux, funktioniert der Befehl apropos erst, wenn Sie zuvor als root den Befehl makewhatis gestartet haben. Damit werden die für den Befehl notwendigen Indexdatenbanken erstellt.
Der Befehl whatis Wenn Sie nur eine Kurzhilfe möchten, dann verwenden Sie den Befehl whatis. Die Syntax des Befehls lautet: $ whatis befehl
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-d oder --debug
Gibt Debug-Informationen aus
-r oder --regex
Interpretiert jedes Schlüsselwort als regulären Ausdruck (vergleiche Kapitel 7, Befehl grep)
-w oder --wildcard
Interpretiert jedes Schlüsselwort als Muster, das Wildcards enthält (vergleiche Kapitel 9)
-M pfad oder --manpath=pfad
Definiert einen alternativen Satz von durch Strichpunkt getrennten Manual-Page-Hierarchien, die durchsucht werden sollen. Standardmäßig wird zur Suche der Inhalt der Umgebungsvariablen MANPATH verwendet.
Tab. 3.4: Die Optionen des Befehls whatis
99
magnum
Hilfe unter Linux
Der nachfolgende Befehl gibt zum Beispiel eine Kurzbeschreibung zum Befehl aus:
ls
$ whatis ls
ls (1)
- list directory contents
Bei einigen Linux-Varianten, zum Beispiel Red Hat Linux, funktioniert der Befehl whatis erst, wenn Sie zuvor als root den Befehl makewhatis gestartet haben. Damit werden die für den Befehl notwendigen Indexdatenbanken erstellt.
3.3.2
Grafische Hilfe
Die grafische Hilfe wird von den grafischen Oberflächen, wie zum Beispiel KDE und GNOME, angeboten. In diese grafischen Oberflächen ist dann häufig noch eine distributionsspezifische Hilfe integriert, in die KDE unter SUSE zum Beispiel die SUSE-Hilfe. Unter Debian GNU/Linux finden Sie als grafische Hilfe nur die der jeweils installierten und verwendeten grafischen Oberfläche, also zum Beispiel die Hilfe von GNOME oder KDE. Sie können im Feld ADRESSE des KDE Konquerors auch einfach man:befehlsname oder info:befehlsname eingeben, um Hilfe zu Linux-Befehlen zu bekommen, zum Beispiel man:ls oder info:pwd.
SUSE-Linux-Hilfe SUSE Linux bietet eine sehr umfangreiche deutschsprachige Hilfe im Hauptmenü mit der Option SUSE-HILFE an. Die Hilfe kann auch über ein entsprechendes Symbol in der Programmleiste gestartet werden. Die Hilfe untergliedert sich in die Hauptbereiche:
100
쮿
Release-Notes
쮿
SUSE Linux-Administrationshandbuch (Installation, System, Dienste etc.)
쮿
SUSE Linux-Benutzerhandbuch (Desktopumgebung, Büroprogramme etc.)
쮿
Anwendungshandbücher (KDE-Einführung, Erklärung Hilfsprogramme etc.)
쮿
Administration (Man Pages, Hardwareerläuterungen etc.)
쮿
Entwicklung
쮿
Online-Ressourcen
Kapitel 3 · Die Befehlszeile und Hilfe verwenden
Bild 3.1: Die SUSE-Online-Hilfe
Das Benutzerhandbuch erläutert die KDE-Desktopumgebung, Büroprogramme und vieles mehr:
Bild 3.2: SUSE-Linux-Benutzerhandbuch
101
Hilfe unter Linux
magnum
Die Anwendungshandbücher enthalten eine KDE-Einführung und Erläuterungen zu vielen Hilfsprogrammen, wie zum Beispiel zum Suchen von Dateien usw.:
Bild 3.3: Die Anwendungshandbücher der SUSE-Hilfe
Der Administrationsteil enthält die Linux-Dokumentation, das heißt die Info- und die Man Pages, Hardwareerläuterungen usw.:
Bild 3.4: Das Administrationshandbuch mit den Man Pages
102
Kapitel 3 · Die Befehlszeile und Hilfe verwenden
Fedora-Core-Linux-Hilfe Die grafische Hilfe von Fedora Core Linux ist unter KDE entsprechend der Hilfe zu SUSE Linux aufgebaut. Sie bietet auch eine sehr umfangreiche deutschsprachige Hilfe zu KDE im Hauptmenü mit der Option HILFE an.
Bild 3.5: KDE-Hilfe von Fedora Core Linux
Die Hilfe zu Unix-Befehlen u. Ä. ist nur in englischer Sprache vorhanden:
Bild 3.6: Grafische Hilfe zu Unix-Befehlen
103
magnum
Hilfe unter Linux
Debian-Linux-Hilfe Die grafische Hilfe von Debian GNU/Linux ist unter KDE ebenfalls entsprechend der Hilfe zu SUSE Linux aufgebaut. Auch sie bietet eine sehr umfangreiche deutschsprachige Hilfe zu KDE im Hauptmenü mit der Option HILFE an.
Bild 3.7: Grafische Hilfe unter Debian GNU/Linux 3.1
3.3.3
Internet, Mailinglisten und Webforen
Wenn Sie mit diesen Hilfsmitteln nicht weiterkommen, gibt es auch die Möglichkeit, online Hilfe zu suchen. Nutzen Sie zunächst die online verfügbaren Dokumentationen oder verwenden Sie Suchmaschinen, wie zum Beispiel Google, um eine Antwort zu finden. Schließlich können Sie sich noch an Gleichgesinnte in Foren und Mailinglisten wenden. Auf folgenden Websites finden Sie Online-Dokumentationen. Diese Liste erhebt keinen Anspruch auf Vollständigkeit: Quelle
Inhalt
http://www.tldp.org/
Das Linux-Dokumentationsprojekt
http://portal.suse.de/sdb/de/ index.html
SUSE-Linux-Supportdatenbank
http://fedora.redhat.com/docs/
Fedora-Linux-Dokumentation
http://www.debian.org/doc/
Debian-Dokumentation
Tab. 3.5: Online-Dokumentationen zu Linux
104
Kapitel 3 · Die Befehlszeile und Hilfe verwenden
Quelle
Inhalt
http://www.linux.de/
Informationen über Linux, über den Bereich User Groups erhalten Sie Zugang zu vielen Linux-Mailinglisten in Deutschland
http://wiki.debian.net/
Von Benutzern zusammengestellte Informationen zu Debian
http://www.pro-linux.de/
Artikel, Berichte, Tipps zu Linux
http://www.selflinux.org/
Umfangreiches Tutorial zu Linux
http://www.debiananwenderhandbuch.de Anwenderhandbuch zu Debian von Frank Ronneberg http://www.linuxhaven.de/dlhp
Deutsches Linux-HOWTO-Projekt
http://www.linuxfibel.de/
Verschiedene Dokumentationen zu Linux
http://www.linux-ag.de/linux/LHB/
Leitfaden für die Linux-Systemverwaltung
Tab. 3.5: Online-Dokumentationen zu Linux (Forts.)
Mailinglisten finden Sie unter folgenden Links: Distributionsunabhängige Listen in ganz Deutschland: http://www.linux.de - User Groups
SUSE-Linux-Mailinglisten: http://www.suse.de/de/private/support/online_help/mailinglists
Debian-Linux-Mailinglisten: http://www.debian.org/MailingLists/subscribe
Red-Hat-Linux-Mailinglisten: http://www.redhat.com/mailman/listinfo
Fedora-Linux-Mailingliste: http://www.redhat.com/mailman/listinfo/fedora-list
Beachten Sie bitte die Regeln, die zu den jeweiligen Mailinglisten gelten. Allgemein gilt, dass Sie das Problem genau schildern und auch alle Schritte, die Sie schon zur Problemlösung unternommen haben. Wahren Sie einen höflichen Umgangston und denken Sie immer daran, dass die Mitglieder der Listen Ihnen freiwillig die eigene Zeit opfern.
105
4 Mit Dateien und Verzeichnissen arbeiten »Die Basis einer gesunden Ordnung ist ein großer Papierkorb.« – Kurt Tucholsky Linux besitzt sehr mächtige Befehle und Tools, um mit Dateien und Verzeichnissen zu arbeiten. Häufig können diese Befehle miteinander kombiniert werden, um das gewünschte Ergebnis zu optimieren. So kann zum Beispiel der Suchbefehl find mit dem Löschbefehl rm gekoppelt werden, um alle dem Suchmuster entsprechenden Dateien auf einmal zu entfernen. In diesem Kapitel finden Sie zunächst alle Befehle, die zur Datei- und Verzeichnismanipulation verwendet werden können, und anschließend werden für die häufigsten Befehle dieselben Möglichkeiten mit Hilfe der grafischen Oberfläche KDE aufgezeigt.
4.1 Dateien und Verzeichnisse bearbeiten In diesem Abschnitt lernen Sie Befehle kennen, um Dateien und Verzeichnisse zu erstellen, zu kopieren, umzubenennen, zu löschen und deren Inhalte anzuzeigen. Anschließend werden einige Befehle erläutert, um mehrere Dateien miteinander zu vergleichen und um die Dateiausgabe zu formatieren.
4.1.1
Verzeichnisse erstellen
Der Befehl mkdir Mit diesem Befehl erzeugen Sie neue Verzeichnisse: $ mkdir [-option(en)] verzeichnis(se)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-p oder --parents
Rekursives Anlegen von Verzeichnissen
-m rechte oder --mode=rechte
Angabe der Zugriffsrechte für das anzulegende Verzeichnis
-v
Ausgabe von jedem angelegten Verzeichnis
Tab. 4.1: Optionen des Befehls mkdir
Der folgende Befehl erzeugt das Verzeichnis projekt05 unterhalb des Verzeichnisses /. $ mkdir /projekt05
Ein neu angelegtes Verzeichnis hat immer automatisch zwei Unterverzeichnisse: die Verzeichnisse . (das für das aktuelle Verzeichnis steht) und .. (das für das übergeordnete Verzeichnis steht). Die Option –p legt im folgenden Beispiel sowohl das Unterverzeichnis protokolle als auch das Verzeichnis berichte an:
107
Dateien und Verzeichnisse bearbeiten
magnum
$ mkdir –p /projekt05/protokolle/berichte
Mit Hilfe der Option –m können Sie dem neu angelegten Verzeichnis die gewünschten Zugriffsrechte zuweisen. $ mkdir –m 755 /projekt05-neu
Mit diesem Befehl erhält der Besitzer das Schreib-, Lese- und Ausführrecht und die Gruppe und die Anderen das Lese- und Ausführrecht. Zugriffsrechte steuern, wer welche Befehle mit einer Datei oder einem Verzeichnis durchführen darf. Sie werden in Kapitel 8 ausführlich behandelt.
4.1.2
Dateien erstellen und aktualisieren
Dateien können unter Linux mit einem Editor oder Programm angelegt werden (vergleiche Abschnitt 4.1.12).
Der Befehl touch Alternativ ist es möglich, leere Dateien mit dem Befehl touch zu erzeugen oder das letzte Änderungs- oder Zugriffsdatum von bestehenden Dateien zu ändern. $ touch [-option(en)] [datum] datei(en)
Eine neue Datei wird mit folgendem Befehl angelegt: $ touch datei1
Die Datei dat1 darf vorher nicht existiert haben, sonst würde nur ihr letztes Änderungsdatum aktualisiert. Unter Linux werden sowohl das Erstellungs- oder das letzte Änderungsdatum als auch das Zugriffsdatum mitprotokolliert. Das Erstellungs- bzw. letzte Änderungsdatum erhalten Sie mit dem Befehl ls -l angezeigt, während der Befehl ls -lu das letzte Zugriffsdatum ausgibt. Das Zugriffsdatum wird geändert, wenn auf eine Datei oder ein Verzeichnis zugegriffen wurde, ohne dass eine Änderung erfolgte. Das ist zum Beispiel der Fall, wenn eine Datei mit dem Befehl more angezeigt wird. Der Befehl kennt folgende Optionen: Option
Bedeutung
-a oder --time=atime oder --time=access oder
Änderung des Datums des letzten Zugriffs
--time=use -c oder --no-create
Änderung nur bei bereits vorhandenen Dateien; es werden keine neuen Dateien erzeugt
-d zeit oder --date zeit
Änderung des Datums der letzten Änderung. zeit kann in verschiedenen Formaten verwendet werden und Monatsnamen, am- und pmFormate und weitere Angaben enthalten.
Tab. 4.2: Optionen des Befehls touch
108
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Option
Bedeutung
-m oder --time=mtime oder --time=modify
Änderung des Datums der letzten Änderung
-r datei oder --reference datei
Änderung des Datums mit Hilfe einer Referenzdatei. Das Datum der Referenzdatei wird übertragen.
-t zeit [--time=modify oder --time=mtime
Angabe des Änderungs- bzw. des Zugriffszeitpunkts (Schlüsselwort atime, access oder use) im Format [[CC]YY]MMDDhhmm[.SS]
oder --time=atime oder --time=access oder --time=use]
– – – – – – –
C = Jahrhundert Y = Jahr M = Monat D = Tag h = Stunde m = Minute S = Sekunde
Tab. 4.2: Optionen des Befehls touch (Forts.)
Das nachfolgende Beispiel zeigt, wie das Änderungsdatum einer Datei manipuliert wird: $ touch –t 03030101 dat1 $ ls –l dat1 -rw-r--r-- 1 root other 65 Mar 3 01:01
dat1
Der Befehl touch leert keine Dateien, die bereits angelegt sind. Dies können Sie mit dem Befehl cat (vergleiche Abschnitt 4.1.5) und der Ein- und Ausgabeumlenkung (vergleiche Kapitel 9) durchführen: cat < /dev/null > datei.
4.1.3
Verzeichnisse wechseln
Der Befehl cd Mit diesem Befehl können Sie in ein anderes Verzeichnis wechseln: $ cd [verzeichnis]
Im nachfolgenden Beispiel wird in das Verzeichnis /etc gewechselt: $ cd /etc
Wenn Sie den Befehl ohne Argument verwenden, wechseln Sie in Ihr Homeverzeichnis. Wenn Sie als root angemeldet sind, wechseln Sie in das Verzeichnis /root. Mit dem Befehl $ cd ..
wechseln Sie in das darüber liegende Verzeichnis. Sie können als Argument des Befehls entweder einen relativen oder einen absoluten Pfadnamen verwenden. Der relative Pfadname geht von dem Verzeichnis aus, in dem Sie sich im Moment befinden. Im nachfolgenden Beispiel wechseln Sie mit einer relativen Pfadangabe vom Verzeichnis /home/her/berichte in das Verzeichnis /home/her/grafik: $ cd ../bilder
109
Dateien und Verzeichnisse bearbeiten
magnum
Alternativ können Sie auch mit der absoluten Pfadangabe in das Verzeichnis wechseln, wobei der absolute Pfad in diesem Beispiel mehr Schreibaufwand erfordert: $ cd /home/her/bilder
Der absolute Pfad beginnt immer ab dem Wurzelverzeichnis / und ist völlig unabhängig von der aktuellen Position im Verzeichnisbaum. Der Befehl kennt folgende Optionen: Option
Bedeutung
-L
Erzwingt, dass symbolischen Links gefolgt wird
-P
Die physikalische Verzeichnisstruktur wird verwendet, anstatt symbolischen Links zu folgen.
Tab. 4.3: Optionen des Befehls cd
4.1.4
Verzeichnisse anzeigen
Der Befehl pwd Dieser Befehl gibt den Namen des Verzeichnisses aus, in dem sich der Benutzer im Moment befindet: $ pwd /usr/bin
Der Befehl ls Dieser Befehl listet den Inhalt von Verzeichnissen auf: $ ls [-option(en)] datei(en) | verzeichnis(se)
Wenn Sie kein Argument verwenden, wird der Inhalt des aktuellen Verzeichnisses angezeigt: $ ls –l total 8 -rw-r----drwxr-xr-x
1 root other 146 Jul 8 11:28 bericht 2 root other 512 Jul 8 11:28 seminar
Die Option –l bewirkt ein ausführliches Auflisten des Verzeichnisinhalts mit folgenden Informationen:
쮿
Das erste Zeichen der ersten Spalte gibt den Dateityp aus: d l b c p s
110
bedeutet, dass es sich um eine normale Datei handelt: entweder eine ASCII-Text-Datei oder eine Applikationsdatei oder eine binäre Datei. bedeutet, dass es sich um ein Verzeichnis handelt. bedeutet, dass es sich um einen symbolischen Link handelt (vergleiche Abschnitt 4.3.2). bedeutet, dass es sich um eine blockorientierte Gerätedatei handelt. bedeutet, dass es sich um eine zeichenorientierte Gerätedatei handelt. bedeutet, dass es sich um eine spezielle Named Pipe-Datei (FIFO) für die Interprozesskommunikation handelt. bedeutet, dass es sich um eine Socket-Datei für die Interprozesskommunikation handelt.
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Block- und zeichenorientierte Gerätedateien werden in Kapitel 13 ausführlich beschrieben.
쮿
Der restliche Teil der ersten Spalte enthält die Zugriffsberechtigungen. Diese werden in Kapitel 8 ausführlich behandelt.
쮿
Die dritte Spalte enthält den so genannten Link Counter. Dieser gibt bei Dateien die Anzahl der Hard Links (vergleiche Abschnitt 4.3.1) und bei Verzeichnissen die Anzahl der Unterverzeichnisse zurück.
쮿
Die vierte Spalte enthält den Besitzer der Datei.
쮿
Die fünfte Spalte gibt die Gruppe an, die Rechte an der Datei hat.
쮿
Die sechste Spalte enthält die Dateigröße in Bytes: Eine Datei belegt immer mindestens zwei Blöcke zu 512 Byte auf der Festplatte, auch wenn ihre tatsächlich angezeigte Größe kleiner ist, wie zum Beispiel bei der Datei obst. Die erste Ausgabe total 8 des Befehls ls –l zeigt die Anzahl der durch den Verzeichnisinhalt belegten Festplattenblöcke (zu 512 Byte) an (vergleiche Kapitel 13).
Gerätedateien zeigen anstelle einer Größe in Bytes zwei Zahlen an: die Major und Minor Device Number (vergleiche Kapitel 13).
쮿
Die nächsten Spalten zeigen das Datum und die Uhrzeit der Erstellung bzw. der letzten Änderung der Datei oder des Verzeichnisses an. Wenn die Datei älter als ein halbes Jahr ist, wird anstelle der Uhrzeit die Jahreszahl ausgegeben.
쮿
Die letzte Spalte enthält den Namen der Datei oder des Verzeichnisses.
Unter Linux wird alles als Datei betrachtet. Verzeichnisse, Gerätedateien, symbolische Links sind nur Sonderformen von Dateien. Selbst Prozesse werden im Verzeichnis /proc als Verzeichnisse oder Dateien dargestellt und teilweise auch dort verwaltet (vergleiche Kapitel 15). Weitere wichtige Optionen des Befehls ls sind: Option
Bedeutung
-1 oder --format= single-column
Formatierte Ausgabe: Jede Dateiname wird in einer eigenen Zeile angezeigt.
-a oder --all
Auch versteckte (mit einem Punkt beginnende) Dateien anzeigen
-A oder --almost-all
Auch versteckte Dateien anzeigen, mit Ausnahme der Verzeichnisse . und ..
--author
Den Autor der Datei ausgeben
-B oder --ignore-backups
Dateien, die mit dem Zeichen ~ enden, gelten als Backupdateien und werden nicht ausgegeben.
Tab. 4.4: Optionen des Befehls ls
111
Dateien und Verzeichnisse bearbeiten
Option
Bedeutung
-b oder --escape
Nicht druckbare Zeichen als Oktalzahl anzeigen. Verwendbar zum Beispiel bei Dateinamen, die mit Umlauten von Rechnern mit einem anderen Zeichensatz erzeugt wurden
--block-size=groesse
Blöcke einer bestimmten Größe anzeigen
-C oder --format=vertical
Mehrspaltige Ausgabe
-c oder --sort=status oder --time=status
Letzte Veränderung der Statusinformationen sortiert anzeigen (gemeinsam mit Option -lt). Statt des Schlüsselworts status kann auch das Schlüsselwort ctime verwendet werden.
--color=[wann]
Farbe zum Unterscheiden der Dateitypen zum Zeitpunkt wann verwenden; wann kann never (nie), always (immer) und auto (automatisch) sein.
-D oder --dired
Formatierte Ausgabe für den Modus dired des Editors emacs
-d oder --directory
Ausgabe des Inhalts von Unterverzeichnissen unterdrücken und symbolischen Links nicht folgen
-F oder --classify oder --indicator-style= classify
Kennung für den Dateityp hinter dem Dateinamen ausgeben: / steht für Verzeichnis, * für ausführbare Dateien, @ für symbolische Links, | für Pipe-Dateien und = für Socket-Dateien
-f
Ausgabe erfolgt nicht sortiert nach Dateinamen, sondern nach der physikalischen Position im Verzeichnis
--full-time
Vollständige Ausgabe der Zeiten anstatt der standardmäßigen Abkürzungen
-G oder --no-group
Keine Ausgabe des Gruppennamens
-H oder --dereference-command-line
In der Befehlszeile angegebene symbolische Links werden verfolgt.
--dereference-command-linesymlink-to-dir
In der Befehlszeile angegebene und auf Verzeichnis weisende symbolische Links werden verfolgt.
-h oder--human-readable
Datei- und Verzeichnisgrößen werden in lesbarem Format ausgegeben, zum Beispiel 2K, 3M oder 1G.
--si
Entspricht der Ausgabe von -h, verwendet aber den Teiler 1000 statt 1024
-I oder --ignore=muster
Keine Anzeige von Einträgen, die mit dem Muster muster übereinstimmen
-i oder --inode
Inode-Nummer anzeigen
-L oder --dereference
Anzeige der Eigenschaften der Originaldatei bei symbolischen Links
-l oder --format=long
Ausführliches Listing
-m oder --format=comma
Ausgabe von möglichst vielen Dateinamen in einer Zeile, durch Kommata getrennt
Tab. 4.4: Optionen des Befehls ls (Forts.)
112
magnum
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Option
Bedeutung
-n oder --numeric-uid-gid
Dieselbe Ausgabe wie -l, aber statt Benutzer- und Gruppennamen werden die numerischen UIDs und GIDs angezeigt
-N oder --literal
Anzeige von »rohen« Dateinamen, das heißt, Kontrollzeichen werden nicht besonders behandelt
-o
Dieselbe Ausgabe wie -l, aber keine Anzeige der Gruppe
-p oder --file-type oder --indicator-style=file-type
Kennung für den Dateityp hinter dem Dateinamen ausgeben: / steht für Verzeichnis, @ für symbolische Links, | für PipeDateien und = für Socket-Dateien
-q oder --hide-control-chars
Nicht darstellbare Zeichen werden durch ein Fragezeichen ? abgebildet.
--show-control-chars
Nicht darstellbare Zeichen werden angezeigt, wie sie sind (standardmäßige Vorgabe, wenn das Programm nicht ls ist und die Ausgabe auf ein Terminal erfolgt).
-Q oder --quote-name
Dateinamen werden in doppelte Hochkommata eingefasst und nicht darstellbare Zeichen werden als Oktalzahl dargestellt.
--quoting-style=wort
Es werden die durch wort spezifizierten Anführungszeichen verwendet, zum Beispiel literal, locale, shell, shell-always, c, escape usw.
-R
Den Inhalt von Unterverzeichnissen rekursiv anzeigen
-r oder --reverse
Anzeige mit umgekehrter Sortierreihenfolge
-S oder --sort=size
Ausgabe nach Dateigröße sortiert
-s oder --size
Die Größe der Dateien wird in Blöcken zu 512 Byte ausgegeben. Die Variable POSIXLY_CORRECT muss dann ebenfalls gesetzt sein.
-T oder --tabsize=spalten
Definiert alle Tabstopps auf die Zeichenanzahl von spalten anstelle des Vorgabewerts 8
--time-style=stil
Die Änderungs- bzw. Zugriffszeiten der aufgelisteten Dateien werden im angegebenen Stil stil angezeigt, zum Beispiel: full-iso, iso, locale, posix-iso, +FORMAT.
-t oder --sort=time
Sortierreihenfolge verändern: nicht alphabetisch sortieren, sondern nach Änderungsdatum
-U oder --sort=none
Die Sortierung wird wie bei der Option -f unterdrückt, die Ausgabe erfolgt aber im erweiterten Format.
-u oder --time=access oder --sort=access
Datum des letzten Zugriffs auf die Datei anzeigen, anstelle des Änderungsdatums (gemeinsam mit Option l). Anstelle des Schlüsselworts access kann auch das Schlüsselwort atime oder use verwendet werden.
-v oder --sort=version
Sortierung nach Version
-w oder --width=spalten
Verwendung der durch spalten spezifizierten Bildschirmbreite
Tab. 4.4: Optionen des Befehls ls (Forts.)
113
Dateien und Verzeichnisse bearbeiten
magnum
Option
Bedeutung
-X oder --sort=extension
Sortierung alphabetisch nach Dateinamenserweiterung
-x oder --format=across oder --format=horizontal
Dateinamen werden in Zeilen statt in Spalten angezeigt
Tab. 4.4: Optionen des Befehls ls (Forts.)
Ein Inode ist eine Datenstruktur, die sämtliche Informationen zu einer Datei oder einem Verzeichnis enthält.
Die von Ihnen am häufigsten verwendeten Optionen können Sie zu einem Alias zusammenfassen, um anschließend nur noch den kurzen Aliasbefehl eingeben zu müssen (vergleiche Kapitel 9), zum Beispiel: alias dir=’ls –la | more’.
Der Befehl lsattr Dieser Befehl gibt die erweiterten Attribute von Dateien auf einem Linux-Dateisystem ext2fs aus. Die Syntax des Befehls lautet: $ lsattr [-option] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-a
Listet alle Dateien in Verzeichnissen auf, einschließlich der mit einem Punkt beginnenden Dateien
-d
Listet Verzeichnisse wie normale Dateien auf, anstelle deren Inhalt auszugeben
-R
Listet Attribute von Verzeichnissen und deren Inhalte rekursiv auf
-v
Listet die Versions-/Generationsnummer von Dateien auf
Tab. 4.5: Optionen des Befehls lsattr
Im Beispiel wird der Inhalt des aktuellen Verzeichnisses mit der Generationsnummer der darin enthaltenen Dateien aufgelistet: $ lsattr -v
Die erweiterten Attribute wurden mit ext2fs eingeführt, um mehr Merkmale über Dateien speichern zu können, in Standardsystemen werden sie aber nicht benutzt.
114
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
4.1.5
Dateien anzeigen
Der Befehl cat Mit diesem Befehl können Sie sich den Inhalt von kleinen Dateien anzeigen lassen. Zur Anzeige von großen Dateien ist er nicht geeignet, da der Befehl die Datei auf einmal bis zum Ende ausgibt: $ cat [-option(en)] datei(en)
Zum Beispiel: $ cat prot10
Zusätzlich wird der Befehl verwendet, um während einer Batchverarbeitung durch ein Skript Dateien auszugeben, zum Beispiel auf eine Pipeline, und die Ausgabe weiter zu bearbeiten, zum Beispiel um Daten zu extrahieren oder umzusortieren. Der Befehl kennt folgende Optionen: Option
Bedeutung
-A oder --show-all
Anzeige aller Steuerzeichen und Ausgabe eines Dollarzeichens ($) am Ende jeder Zeile und von Tabulatoren als ^I (entspricht -vET)
-b oder --number-nonblank
Ausgabe der Zeilennummer am Anfang jeder nicht leeren Zeile
-e
Anzeige aller Steuerzeichen außer LF (Zeilenschaltung) und Tabulatoren und Ausgabe eines Dollarzeichens ($) am Ende jeder Zeile (entspricht -vE)
-E oder --show-ends
Ausgabe eines Dollarzeichens ($) am Ende jeder Zeile
-n oder --number
Ausgabe der Zeilennummer am Anfang jeder Zeile
-s oder --squeeze-blank Ausgabe zusätzlicher Leerzeilen wird unterdrückt -t
Anzeige aller Steuerzeichen außer LF (Zeilenschaltung) und Tabulatoren und Anzeige von Tabulatoren als ^I (entspricht -vT)
-T oder --show-tabs
Anzeige von Tabulatoren als ^I
-u
Wird ignoriert und ist nur aus Gründen der Abwärtskompatibilität mit Unix vorhanden
-v oder --show-nonprinting
Anzeige aller Steuerzeichen außer LF (Zeilenschaltung) und Tabulatoren
Tab. 4.6: Optionen des Befehls cat
Eine weitere wichtige Einsatzmöglichkeit des Befehls ist das Aneinanderketten von Dateien: $ cat prot1 prot2 prot3 > protgesamt
Hier werden die Dateien prot1, prot2 und prot3 auf die Datei protgesamt kopiert. $ cat protneu >> protgesamt
Hier wird die Datei protneu an die Datei protgesamt angehängt. $ cat > datneu
115
Dateien und Verzeichnisse bearbeiten
magnum
In diesem Beispiel wird eine neue Datei datneu aus der Standardeingabe erzeugt. Die Eingabe muss mit der Tastenkombination (Strg)+(D) beendet werden. Enthält eine Datei ein Zeichen (Ctrl)+(D) (Sonderzeichen für »End of file«), dann beendet cat bei diesem Zeichen die Dateiausgabe. Der Befehl cat ist deshalb nicht zum Ausgeben binärer Dateien geeignet.
Der Befehl more Dieser Befehl listet den Inhalt von Dateien bildschirmweise auf: $ more [-option(en)] datei(en)
Zum Beispiel: $ more prot1000 Protokoll der Besprechung vom 4.7.2003 Anwesende: ..... ---More---(15%)
Sie haben die Möglichkeit, den Befehl mit Hilfe von internen Befehlen, die auf viBefehlen basieren, zu steuern. Die Tabelle führt die wichtigsten internen Befehle auf: Eingabe
Funktion
(Leertaste)
Eine Bildschirmseite weiterblättern
(b) oder (Strg)+(b)
Eine Bildschirmseite zurückblättern
(¢)
Eine Zeile weiterblättern
(?) oder (h)
Hilfe anzeigen
(Q) oder (q) oder (Abbruch)
Den Befehl beenden
seitenzahl
Anzahl von Seiten (seitenzahl) weiterblättern
/suchbegriff
Nach Suchbegriff suchen und die dazugehörige Seite anzeigen
(f)
Eine Bildschirmseite überspringen
(s)
Eine Textzeile überspringen
(=)
Ausgabe der aktuellen Zeilennummer
(N)
Letzte Suche wiederholen
(.)
Letzten Befehl wiederholen
(V)
Aufruf des Editors vi in der Datei an der aktuellen Zeile
Tab. 4.7: Interne Befehle des Befehls more
116
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl kennt folgende Optionen: Option
Bedeutung
-num zahl
Stellt die Bildschirmgröße auf zahl Zeilen ein
-d oder Die Hinweise »Press space to continue, 'q' to quit« und »Press 'h' for --number-nonblank instructions« werden angezeigt und kein Warnton ertönt, wenn auf eine
falsche Taste gedrückt wird. -l
Normalerweise wird (Strg)+(L) (Seitenvorschub) als Spezialzeichen behandelt und es wird hinter jeder Zeile angehalten, die einen Seitenvorschub enthält. Diese Option verhindert dieses Verhalten.
-f
Zählen der Textzeilen anstelle der Bildschirmzeilen, das heißt, lange Zeilen werden nicht umbrochen
-p
Es wird nicht gescrollt, stattdessen wird der Bildschirm mit jeder Seite neu aufgebaut.
-c
Es wird nicht gescrollt, stattdessen wird die Anzeige von oben her erneuert und jede vorhandene Zeile überschrieben.
-s
Zeigt mehrere Leerzeilen als eine einzige an
-u
Unterdrückt das Unterstreichen von Zeichen
+/muster
Definiert eine Zeichenkette, die gesucht wird, bevor eine Datei angezeigt wird
+zahl
Anzeige wird ab der Zeile mit der Nummer zahl begonnen
Tab. 4.8: Optionen des Befehls more
Der Befehl less Dieser Befehl listet den Inhalt von Dateien ebenfalls bildschirmweise auf. Er kennt aber mehr Funktionen als der Befehl more: $ less [-option(en)] datei(en)
Zum Beispiel: $ less prot10 Protokoll der Besprechung vom 4.7.2003 Anwesende: ..... less prot10 1-32/128 (15%)
Sie haben die Möglichkeit, auch diesen Befehl mit Hilfe von internen Befehlen zu steuern. Viele der Befehle lassen sich auch mit Zahlen kombinieren, die dann für eine Zeilennummer, eine Datei usw. stehen. Die Tabelle führt die wichtigsten internen Befehle auf:
117
Dateien und Verzeichnisse bearbeiten
Eingabe
Funktion
(H) oder (h)
Hilfe anzeigen
(Q) oder (q) oder (Abbruch)
Den Befehl beenden
magnum
Befehle zum Navigieren (Leertaste) oder (Strg)+(V) oder (f) oder (Strg)+(F)
Um die spezifizierte Zeilenzahl weiterblättern, standardmäßig um eine Bildschirmseite
(b) oder (Strg)+(V) oder (ESC)+(v)
Eine Bildschirmseite oder spezifizierte Anzahl von Zeilen zurückblättern
(w)
Ein Fenster zurückblättern und zahl auf die Zeilenzahl des Fensters zurücksetzen
(ESC)+(Leertaste)
Ein Fenster weiterblättern, aber am Ende der Datei nicht anhalten
(d) oder (Strg)+(D)
Eine halbe Bildschirmseite weiterblättern und zahl auf die Zeilenzahl der halben Fensterhöhe zurücksetzen
(u) oder (Strg)+ (U)
Eine halbe Bildschirmseite zurückblättern und zahl auf die Zeilenzahl der halben Fensterhöhe zurücksetzen
zahl (z)
Wie bei der Leertaste, blättert aber um die gewünschte Zeilenzahl zahl weiter, die dann auch für die (Leertaste)-Taste gilt
(¢) oder (Strg)+ (E) oder (e) oder (j) oder (Strg)+ (N)
Eine Zeile oder spezifizierte Anzahl von Zeilen weiterblättern
(y) oder (Strg)+(Y) oder (k) oder (Strg)+(K) oder (Strg)+(P)
Eine Zeile oder spezifizierte Anzahl von Zeilen zurückblättern
(ESC)+(Æ)
Eine halbe Bildschirmbreite oder zahl Spalten nach links
(ESC)+(æ)
Eine halbe Bildschirmbreite oder zahl Spalten nach rechts
(F)
Unaufhörlich vorwärts blättern, zum Beispiel zum Anzeigen von Protokolldateien, die ständig um Einträge ergänzt werden; entspricht dem Befehl tail -f
(r) oder (Strg)+(R) oder (Strg)+(L)
Bildschirm neu aufbauen
(R)
Bildschirm neu aufbauen und gepufferte Eingabe löschen
Befehle zum Suchen (/)suchbegriff
Vorwärts nach Suchbegriff suchen
(?)suchbegriff
Rückwärts nach Suchbegriff suchen
(n)
Vorwärtssuche wiederholen
Tab. 4.9: Interne Befehle des Befehls less
118
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Eingabe
Funktion
(N)
Rückwärtssuche wiederholen
(ESC)+(n)
Vorwärtssuche über alle Dateien wiederholen
(ESC)+(N)
Rückwärtssuche über alle Dateien wiederholen
(ESC)+(u)
Markierung für gefundene Suchmuster aktivieren und deaktivieren Das Modifizieren von Suchmustern ist möglich durch: (ESC)+(N) oder (!) (Strg)+(E) oder (*) (Strg)+(F) oder (@) (Strg)+(K) (Strg)+(R)
nach nicht übereinstimmenden Zeilen suchen mehrere Dateien durchsuchen die Suche bei Verwendung von / bei der ersten und bei Verwendung von ? bei der letzten Datei beginnen Übereinstimmungen markieren, aber Position beibehalten keine regulären Ausdrücke verwenden
Befehle zum Springen zahl(g) oder (ESC)+(<) Springe auf die erste Zeile oder Zeile zahl zahl(G) oder (ESC)+(<) Springe auf die letzte Zeile oder Zeile zahl (p) %
Springe auf den Dateianfang oder auf zahl Prozent der Datei
(t)
Springe zur nächsten Markierung
(T)
Springe zur vorherigen Markierung
({) (() ([)
Suche schließendes Klammerelement } ) ]
(}) ()) (])
Suche öffnendes Klammerelement } ) ]
(ESC)+(Strg)+(F)
Entspricht der Suche nach }, fordert aber zwei Zeichen, auf die sich die Suche beziehen soll
(ESC)+(Strg)+(B)
Entspricht der Suche nach {, fordert aber zwei Zeichen, auf die sich die Suche beziehen soll
(m)buchstabe
Markiert die aktuelle Position mit dem angegebenen Kleinbuchstaben
(')buchstabe
Springt an die Position, die mit dem angegebenen Kleinbuchstaben markiert wurde
(»)
Springt auf die vorherige Position oder die letzte Datei
(')
Entspricht der Eingabe von (m), aber behält Position bei
Befehle, um Dateien zu bearbeiten (:e) dateiname
Datei dateiname in die Liste der zu bearbeitenden Dateien laden
(:n)
Nächste Datei in der Dateiliste lesen
(:p)
Vorherige Datei in der Dateiliste lesen
Tab. 4.9: Interne Befehle des Befehls less (Forts.)
119
Dateien und Verzeichnisse bearbeiten
magnum
Eingabe
Funktion
(:x)
Erste Datei in der Dateiliste lesen
(:d)
Aktuelle Datei aus der Dateiliste entfernen
(:f) oder (=) oder (Strg)+(G)
Ausgabe von Dateiname, Position in Dateiliste, Zeilennummer der ersten Bildschirmzeile, Zeilengesamtzahl, Zeichennummer des ersten Bildschirmzeichens und Zeichengesamtzahl
Weitere Befehle (!)befehl
Aufruf eines Shellbefehls, ohne die Anzeige zu beenden
(+)befehl
Befehl wird jedes Mal ausgeführt, wenn eine neue Datei geladen wird
(|)markierung befehl
Übergabe eines Dateiausschnitts von der ersten Bildschirmzeile bis zur Markierung an einen Befehl
Tab. 4.9: Interne Befehle des Befehls less (Forts.)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-? oder --help
Zeigt den Hilfebildschirm an
-a oder --search-skip-screen
Aktiviert die Suche bei Suchbefehlen ab der letzten angezeigten und nicht ab der zweiten angezeigten Zeile
-A oder --mouse-support
Funktioniert im Moment nur in einem xterm-Fenster und bewirkt, dass der Befehl Mausaktionen durchführt
-banzahl oder
Definiert die Anzahl des Pufferspeichers für jede Datei in Kilobyte. Standardmäßig werden 64 Kilobyte pro Datei verwendet.
-B oder --auto-buffers
Das automatische Belegen von Puffern für Daten aus einer Pipe wird dadurch verhindert.
-c oder --clear-screen
Baut beim Blättern den Bildschirm vollständig neu von oben nach unten auf
-C oder --CLEAR-SCREEN
Löscht beim Blättern zuerst den Bildschirm und baut ihn dann vollständig neu von oben nach unten auf
-d oder --dumb
Unterdrückt die Ausgabe von Fehlermeldungen des Terminals
-Dzeichencolor oder
Definiert die Farbe des angezeigten Textes, wobei zeichen folgende Werte annehmen kann:
--buffers=anzahl
--color=
zeichencolor
n = normal s = standout d = bold u = underlined k = blink
Tab. 4.10: Optionen des Befehls less
120
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Option
Bedeutung
-e oder --quit-at-eof
Der Befehl wird beendet, wenn zweimal EOF erreicht wurde.
-E oder --QUIT-AT-EOF
Der Befehl wird beendet, wenn EOF erreicht wurde.
-f oder --force
Erzwingt das Öffnen von Verzeichnissen und Gerätedateien und unterdrückt die Warnmeldung beim Öffnen einer Binärdatei
-F oder --quit-if-one-screen
Beendet den Befehl automatisch, wenn die vollständige Datei auf dem ersten Bildschirm angezeigt werden kann
-g oder --hilite-search
Nur die vom letzten Suchbefehl gefundene Übereinstimmung wird markiert und nicht alle passenden Textstellen
-G oder --HILITE-SEARCH
Das Markieren aller gefundenen Übereinstimmungen wird unterdrückt.
-hanzahl oder
Nicht mehr als anzahl Zeilen werden auf einmal zurückgeblättert.
--max-back-scroll=anzahl -i oder --ignore-case
Wenn das Suchmuster keine Großbuchstaben enthält, wird unabhängig von der Groß- und Kleinschreibung gesucht.
-I oder --IGNORE-CASE
Es wird generell unabhängig von der Groß- und Kleinschreibung gesucht.
-j= anzahl oder --jump-target=anzahl
Die Zielzeile einer Suche oder eines Sprungs wird auf der Bildschirmzeile mit der Nummer anzahl vom oberen Bildschirmrand aus positioniert.
-J oder --status-column
Gibt eine Statusspalte in der linken Bildschirmecke aus, die Zeilen anzeigt, die mit der aktuellen Suche übereinstimmen
-kdatei oder
--lesskey-file=datei
Eine Datei wird eingelesen, die eine spezielle Tastenbelegung spezifiziert.
-Kzeichensatz
Zwingt den Befehl, diesen Zeichensatz zu verwenden
-m oder --long-prompt
Anzeige eines dem Befehl more entsprechenden Prompts
-M oder --LONG-PROMPT
Anzeige eines ausführlicheren Prompts mit Prozentsatz, aktuellen Zeilennummern und Gesamtzeilenzahl
-n oder --line-numbers
Unterdrückt Zeilennummern
-N oder --LINE-NUMBERS
Ausgabe der aktuellen Zeilennummer vor jeder Zeile
-odatei oder --log-file=datei
Ausgabe von Informationen aus einer Pipe werden nach datei und an den Bildschirm geschrieben
-Odatei oder --LOGFILE=datei
Entspricht der Option -o, überschreibt aber bereits vorhandene Dateien ohne Rückfrage
-psuchmuster oder --pattern=suchmuster
Beim Starten des Befehls wird nach der ersten Übereinstimmung mit suchmuster gesucht.
-Pprompt oder
Definiert den Prompt: -m (kurzer Prompt), -M (langer Prompt) oder = (setzt den Prompt gleich der Angabe)
--prompt=prompt
Tab. 4.10: Optionen des Befehls less (Forts.)
121
Dateien und Verzeichnisse bearbeiten
Option
Bedeutung
-q oder --quiet oder --silent
Deaktiviert den Warnton, der ertönt, wenn versucht wird, vor den Dateianfang oder hinter das Dateiende zu blättern
-Q oder --QUIET oder --SILENT
Der Warnton wird generell unterdrückt.
-r oder --raw-control-chars
Steuerzeichen werden direkt angezeigt; dies kann zu Anzeigeproblemen führen.
-R oder --RAW-CONTROL-CHARs
Entspricht der Option -r, es wird aber versucht, die Anzeige so gut wie möglich darzustellen
-s oder --squeeze-blank-lines
Aufeinander folgende Leerzeilen werden als eine Zeile ausgegeben.
-S oder --chop-long-lines
Lange Zeilen werden abgeschnitten, anstatt diese zu umbrechen.
-ttag oder --tag=tag
Die Datei, die tag enthält, wird editiert; dazu wird die Datei
./tags verwendet.
--tag-file=datei
Anstatt die Datei ./tags zu verwenden, wird die angegebene Datei verwendet.
-u oder --underline-special
Backspaces und Zeilenrückläufe (carriage returns) werden als druckbare Zeichen interpretiert.
-U oder --UNDERLINE-SPECIAL
Backspaces und Zeilenrückläufe (carriage returns) werden als Steuerzeichen interpretiert.
-w oder --hilite-unread
Zeilen nach dem Dateiende werden als Leerzeilen anstatt mit einer Tilde (~) angezeigt.
-W oder --HILITE-UNREAD
Entspricht -w, aber markiert zeitweise die erste neue Zeile nach jedem Befehl, der mehr als eine Zeile weit springt
-XXX
Markiert Zeichen, die dazu verwendet werden, falsche Zeichen darzustellen. Standardmäßig werden solche Zeichen binär dargestellt
-xanzahl oder --tabs=anzahl
Definiert die Tabulatorstopps mit anzahl Zeichen; Standardwert ist 8
-X oder --no-init
Die Initialisierungs- und Deinitialisierungssequenzen von Termcap an das Terminal werden unterdrückt.
--no-keypad
Die Initialisierungs- und Deinitialisierungssequenzen der Tastatur an das Terminal werden unterdrückt.
-yanzahl oder --max-forwscroll=anzahl
Es wird nie mehr als anzahl Zeilen vorwärts geblättert.
-[z]anzahl oder --window=anzahl
Ändert die standardmäßige Scrollinggröße des Fensters auf anzahl Zeilen. Standard ist eine Bildschirmseite.
-Tdatei oder
Tab. 4.10: Optionen des Befehls less (Forts.)
122
magnum
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl head Dieser Befehl gibt standardmäßig die ersten 10 Zeilen einer Datei aus. $ head [-option(en)] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-canzahl oder --bytes=anzahl
Ausgabe der angegebenen Anzahl der ersten Bytes; nach anzahl kann ein b für Blöcke à 512 Byte, k für 1-Kilobyteoder m für 1-Megabyte-Blöcke verwendet werden
-anzahl oder nanzahl oder --lines=anzahl
Ausgabe der ersten anzahl Zeilen; Vorgabewert ist 10.
-q oder --quiet oder --silent
Keine Ausgabe von Dateinamen als Kopfzeile
-v oder --verbose
Immer Ausgabe einer Kopfzeile mit Dateinamen
Tab. 4.11: Optionen des Befehls head
Sie können zum Beispiel die Anzahl der auszugebenden Zeilen steuern, indem Sie diese als Option eingeben. Hier werden die ersten 12 Zeilen ausgegeben: $ head -12 protokoll_1000
Der Befehl tail Dieser Befehl gibt standardmäßig die letzten 10 Zeilen einer Datei aus. $ tail [-option(en)] datei
Der Befehl kennt folgende Optionen: Option
Bedeutung
-canzahl oder --bytes=anzahl
Ausgabe der angegebenen Anzahl der letzten Bytes; nach anzahl kann ein b für Blöcke à 512 Byte, k für 1-Kilobyte- oder m für 1-MegabyteBlöcke verwendet werden
-f oder -F oder --follow
Das Programm bricht die Ausgabe nicht am Dateiende ab, sondern zeigt ständig neue Einträge einer wachsenden Datei an, zum Beispiel einer Protokolldatei. Die Anzeige kann mit (Strg)+ (C) beendet werden.
--retry
Ständiger Versuch, eine Datei zu öffnen, die beim Starten noch nicht verfügbar ist, zum Beispiel um in einem Terminalfenster eine Protokolldatei auszugeben; nur mit der Option -f sinnvoll
-anzahl oder nanzahl oder --lines=anzahl
Ausgabe der letzten anzahl Zeilen; Vorgabewert ist 10
+anzahl oder +nanzahl
Ausgabe beginnt von der Zeile mit der Nummer anzahl vom Beginn der Datei an
Tab. 4.12: Optionen des Befehls tail
123
Dateien und Verzeichnisse bearbeiten
magnum
Option
Bedeutung
--max-unchangedstats=anzahl
Wenn eine Datei nach anzahl Iterationen (Vorgabewert ist 5) unverändert ist, kann sie mit --follow=name und dieser Option nochmals geöffnet werden, um festzustellen, ob sie gelöscht oder umbenannt wurde. Dies kann zum Beispiel der Fall bei rotierenden Protokolldateien sein, die im laufenden Betrieb umkopiert und umbenannt werden, ohne dass der Filehandle, unter dem sie mit dem Befehl tail geöffnet wurden, aktualisiert wird. In dem Fall würde der Befehl ständig auf die veraltete Protokolldatei zugreifen.
--pid=pid
Wird gemeinsam mit -f verwendet: Das Programm soll beendet werden, wenn der Prozess pid beendet wird
-q oder --quiet oder - Keine Ausgabe von Dateinamen als Kopfzeile -silent -s oder --sleep-inter- Wird gemeinsam mit -f verwendet: Das Programm soll zwischen den Versuchen, die Datei neu auszulesen, eine Pause von sek Sekunden vall=sek
machen (Vorgabe ist 1)
-v oder --verbose
Immer Ausgabe einer Kopfzeile mit Dateinamen
Tab. 4.12: Optionen des Befehls tail (Forts.)
Sie können die Anzahl der auszugebenden Zeilen steuern, indem Sie diese als Option eingeben. Hier werden die letzten 7 Zeilen ausgegeben: $ tail -7 protokoll_1000
Mit Hilfe der Option –f lassen sich Protokolldateien, deren neue Einträge am Ende eingefügt werden, sehr gut überwachen. Der Befehl endet mit dieser Option nicht am Dateiende, sondern wartet auf weitere, später angehängte Zeilen, die er dann anzeigt.
Der Befehl echo Mit Hilfe dieses Befehls kann ein in der Befehlszeile angegebener Text auf dem Bildschirm bzw. der Inhalt von Verzeichnissen ausgegeben werden. Die Syntax des Befehls lautet: $ echo [-option(en)] argumente
Wenn der Text Leerzeichen enthält, die für die Formatierung wichtig sind, ist es notwendig, den Text in Anführungszeichen («) oder Apostrophen (') zu fassen. Der Befehl wird häufig in Shellskripten angewandt, um mit einer Meldung den Stand der Bearbeitung anzuzeigen. Der Befehl kennt folgende Optionen:
124
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Option
Bedeutung
-e
Aktiviert die Interpretation der durch einen Backslash eingeleiteten EscapeSequenzen: \nnn Ausgabe des ASCII-Zeichens mit dem Oktalwert nnn \\ Backslash \a Signalton \b Backspace \c unterdrückt nachfolgende Zeilenschaltung \f Seitenvorschub \n Zeilenschaltung (Newline) \r Zeilenende (Carriage return) \t horizontaler Tabulator \v vertikaler Tabulator
-E
Die Interpretation der Escape-Sequenzen wird deaktiviert.
-n
Die abschließende Zeilenschaltung wird nicht ausgegeben.
Tab. 4.13: Optionen des Befehls echo
Es ist auch möglich, einen Text mit Hilfe der Ausgabeumlenkung in eine Datei zu schreiben, zum Beispiel: $ echo "Dies ist ein
Text\n" > dat.neu
Die Hochkommata werden auch als Quotierung bezeichnet, weil zwischen ihnen enthaltener Inhalt von der Shell auf eine bestimmte Weise gehandhabt wird (vergleiche Kapitel 9).
Der Befehl tac Dieser Befehl ist die umgekehrte Schreibweise des Befehls cat und listet die Zeilen einer Datei rückwärts auf. Der Befehl ist feldorientiert, wobei das standardmäßige Feldtrennzeichen das Zeilenende ist. Die Syntax des Befehls lautet: $ tac [-option(en)] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-b oder --before
Definiert, dass das Feldtrennzeichen vor anstelle nach dem Feld steht
-r oder --regex
Das Feldtrennzeichen wird als regulärer Ausdruck interpretiert.
-s trenn oder --separator=trenn
Das Feldtrennzeichen ist trenn anstelle des Zeilenendes
Tab. 4.14: Optionen des Befehls tac
125
magnum
Dateien und Verzeichnisse bearbeiten
Hier wird die Datei /etc/passwd zeilenweise rückwärts ausgegeben: $ tac /etc/passwd privoxy:x:102:503:Daemon user for privoxy:/var/lib/privoxy:/bin/false radiusd:x:101:502:Radius daemon:/var/lib/radiusd:/bin/false uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash news:x:9:13:News system:/etc/news:/bin/bash man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash ohauptmann:x:507:100::/home/ohauptmann:/bin/bash hpiffke:x:505:100::/home/hpiffke:/bin/bash ...
Der Befehl tee Dieser Befehl kann die Ausgabe eines Befehls zusätzlich zur Datenumlenkung speichern oder anzeigen. Er liest von der Standardeingabe ein, verdoppelt den Datenstrom und gibt ihn jeweils auf die Standardausgabe und in die angegebene Datei aus. Es kann also der in einer Pipeline verarbeitete Datenstrom abgegriffen werden, ohne dass die Pipeline unterbrochen wird. Die Syntax des Befehls lautet: $ tee [-option(en)] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-a oder --append
Die Dateien werden an die angegebene(n) Datei(en) angehängt, anstatt diese zu überschreiben.
-i oder --ignore-interrupts
Interrupt-Signale werden ignoriert.
Tab. 4.15: Optionen des Befehls tee
In diesem Beispiel wird die Ausgabe des Befehls ls auf ihre Zeilenanzahl überprüft und gleichzeitig in die Datei ls-liste geleitet: $ ls | tee ls-liste | wc-l
Wird die Datei verändert, dann ändert sich auch die Prüfsumme und gegebenenfalls die Größe in Blöcken.
4.1.6
Dateien und Verzeichnisse löschen
Der Befehl rmdir Mit diesem Befehl können Sie ein leeres Verzeichnis löschen: $ rmdir [-option(en)] verzeichnis(se)
Zum Beispiel: $ rmdir /projekt
Ist das Verzeichnis nicht leer, wird der Befehl nicht ausgeführt und Sie erhalten eine entsprechende Fehlermeldung: rmdir: "/projekt": Directory not empty
Verzeichnisse, die nicht leer sind, können Sie mit dem Befehl rm löschen.
126
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl kennt folgende Optionen: Option
Bedeutung
-ignore-fail-onnon-empty
Wenn das Verzeichnis nicht leer ist, wird die Fehlermeldung unterdrückt; nützlich für Stapelverarbeitungen.
-p oder --parents
Rekursives Entfernen von ineinander geschachtelten, leeren Verzeichnissen: Zuerst wird das unterste Verzeichnis entfernt, dann das darüber liegende usw. Der Befehl rmdir -p x/y/z bewirkt dasselbe wie rmdir x/y/z x/y x.
-v oder --verbose
Ausführliche Ausgabe für jedes bearbeitete Verzeichnis
Tab. 4.16: Optionen des Befehls rmdir
Der Befehl rm Mit diesem Befehl löschen Sie Dateien oder Verzeichnisse. $ rm [-option(en)] datei(en) | verzeichnis(se)
Im folgenden Beispiel werden mehrere Dateien mit diesem Befehl gelöscht: $ rm dat1 dat2 dat3
Der Befehl löscht die Dateien normalerweise sofort ohne Rückfrage. Unter Linux ist es standardmäßig nicht möglich, einen Löschvorgang wieder rückgängig zu machen. In diesem Fall könnten Sie nur noch auf die letzte Datensicherung zurückgreifen. Der Befehl kennt folgende Optionen: Option
Bedeutung
-d oder --directory
Entfernen eines Verzeichnisses, auch wenn es nicht leer ist (nur für den Benutzer root)
-f oder --force
Schreibgeschützte Dateien werden gelöscht, ohne eine weitere Bestätigung anzufordern.
-i oder --interactive
Vor jedem Löschen wird eine Bestätigung angefordert.
-r oder -R oder --recursive
Rekursives Löschen: Die Inhalte von Verzeichnissen und die Verzeichnisse selbst werden rekursiv entfernt.
-v oder --verbose
Ausführliche Ausgabe
Tab. 4.17: Optionen des Befehls rm
Wenn Sie den Befehl interaktiv starten, werden Sie vor dem Löschen jeder Datei und jedes Verzeichnisses noch einmal gefragt, ob Sie sicher sind: $ rm -i dat2000 rm: remove regular empty file dat2000? y
Der Befehl wird auch dazu verwendet, Verzeichnisse zu löschen, die nicht leer sind. Dazu verwenden Sie die Option –r: $ rm -r bericht04
127
Dateien und Verzeichnisse bearbeiten
magnum
Der gefährlichste Linux-Befehl überhaupt ist der Befehl rm –r * oder gar rm –rf *, denn er löscht rekursiv alles ab der Stelle im Verzeichnisbaum, an der Sie sich gerade befinden. Die Option -f bedeutet, dass auch schreibgeschützte Dateien ohne zusätzliche Bestätigung gelöscht werden sollen. Bevor Sie einen solchen Befehl absetzen, sollten Sie zumindest zuvor mit dem Befehl pwd überprüfen, in welchem Verzeichnis Sie sich befinden. Bei vielen Unix- und Linux-Distributionen ist bereits standardmäßig ein Alias angelegt (vergleiche Kapitel 9), der dem Befehl rm den Befehl rm -i zuordnet, so dass vor dem Löschen von Dateien eine entsprechende Bestätigung des Benutzers erforderlich wird. Ob das auch bei Ihrer Distribution der Fall ist, können Sie ermitteln, indem Sie einfach alias rm eingeben. Wenn nicht, legen Sie sich am besten in einer Initialisierungsdatei einen entsprechenden Alias an (vergleiche Kapitel 9).
4.1.7
Dateien und Verzeichnisse kopieren
Der Befehl cp Mit diesem Befehl können Sie Dateien und Verzeichnisse kopieren. $ cp [-option(en)] quelle(n) ziel
Es ist möglich, eine Datei auf eine andere Datei oder ein Verzeichnis auf ein anderes Verzeichnis oder eine oder mehrere Dateien in ein Verzeichnis zu kopieren. Der Befehl kennt folgende Optionen: Option
Bedeutung
-a oder --archive
Eigentümer, Rechte und Verzeichnisstruktur der Quelldateien werden beibehalten, wenn möglich. Die Option entspricht -dpR.
-b oder --backup
Erzeugen einer Sicherung der eventuell existierenden Zieldateien
-d oder -P oder --no-dereference oder --preserve=link
Symbolischen Links wird nicht gefolgt, das heißt, es wird nicht die Originaldatei, auf die der Link verweist, sondern nur der Link kopiert.
-f oder --force
Vorhandene Zieldateien werden ohne Warnung überschrieben.
-i oder --interactive
Vor jedem Überschreiben einer Datei wird eine Bestätigung angefordert.
-H
Symbolische Links werden aufgelöst, das heißt, es wird die Originaldatei und nicht der Link kopiert. Das ist das Standardverhalten, kann aber zur Dokumentation zum Beispiel in Stapelverarbeitungen ausdrücklich als Option angewiesen werden.
-l oder --link
Statt einer Kopie wird nur ein Hard Link für eine normale Datei erzeugt.
-L oder --dereference
Symbolischen Links wird immer gefolgt.
-p oder --preserve= mode, ownership, timestamps
Eigenschaften (Eigentümer, Gruppe, Zugriffsrechte und Datumsangaben) der Quelldatei beibehalten
Tab. 4.18: Optionen des Befehls cp
128
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Option
Bedeutung
--no-preserve=attribut
Angegebene Attribute (mode, ownership, timestamps) nicht beibehalten
--parents
Die Verzeichnisstruktur der Quelldatei bleibt erhalten, indem der vollständige Quellpfad der Dateien an das Zielverzeichnis gehängt bzw. dort angelegt wird.
-r oder -R oder --recursive
Rekursives Kopieren: Die Inhalte von Verzeichnissen werden rekursiv kopiert, also mit allen darunter liegenden Verzeichnissen.
--remove-destination
Jede bereits vorhandene Zieldatei wird erst gelöscht und dann erst überschrieben.
--reply=antwort
Nachfragen, wenn die Zieldatei schon existiert: yes (ja, immer), no (nein, nie) oder query (fragen)
-s oder --symbolic-link Statt Kopien werden symbolische Links erzeugt. -S oder --suffix=suffix
Festlegen der Endung, die beim Anlegen einer Sicherheitskopie dem Dateinamen angefügt wird. Die Vorgabe ist die Tilde (~).
--target-directory=dir
Alle Quelldateien und -verzeichnisse werden in das Verzeichnis dir verschoben.
-u oder --update
Die vorhandene Zieldatei wird nur dann überschrieben, wenn die Quelldatei dasselbe oder ein neueres Änderungsdatum besitzt.
-v oder --verbose
Ausführliche Ausgabe
-x oder --one-file-system
Unterverzeichnisse in anderen Dateisystemen werden ignoriert.
Tab. 4.18: Optionen des Befehls cp (Forts.)
Im nachfolgenden Beispiel wird die Datei prot1 auf die Datei prot1000 kopiert: $ cp prot1 prot99
Der Befehl überschreibt die Datei prot99, wenn sie bereits existiert. Bereits existierende Verzeichnisse werden durch den Befehl aber nicht überschrieben. Normalerweise werden die Informationsdaten beim Kopieren entsprechend dem kopierenden Benutzer gesetzt. Das heißt, er wird der Besitzer, seine primäre Gruppe (vergleiche Kapitel 8) erhält Gruppenbesitz und das Erstellungsdatum ist das aktuelle Datum. Mit folgendem Befehl können die originalen Dateiangaben erhalten bleiben: $ cp -p dat1 datneu
Sie können den Befehl auch interaktiv starten, dann werden Sie vor dem Überschreiben noch einmal gefragt, ob Sie sicher sind: $ cp -i prot1 prot1000 cp: overwrite prot1000? y
Der Befehl wird auch dazu verwendet, ganze Verzeichnisbäume zu kopieren, zum Beispiel den des Verzeichnisses bericht. Dazu verwenden Sie die Option –r: $ cp -r bericht bericht2001
129
magnum
Dateien und Verzeichnisse bearbeiten
Ist das Verzeichnis bericht2001 bereits vorhanden, wird das Verzeichnis bericht unterhalb des Verzeichnisses bericht2001 angelegt. Wenn nicht, wird das Verzeichnis bericht2001 mit dem Inhalt des Verzeichnisses bericht erzeugt. Der folgende Befehl $ cp --parents a/b/c/text1 dirneu
kopiert die Datei dirneu.
text1
mitsamt ihrem Verzeichnisbaum
a/b/c
in das Verzeichnis
Es ist auch möglich, mehrere Dateien in ein Verzeichnis zu kopieren: $ cp prot1 prot1000 bericht2001
In diesem Fall muss das Verzeichnis bericht2001 bereits existieren. Es ist allerdings nicht möglich, mehrere Dateien in eine Datei zu kopieren. Dazu müssen Sie den Befehl cat verwenden.
4.1.8
Dateien und Verzeichnisse verschieben und umbenennen
Der Befehl mv Mit diesem Befehl können Sie Dateien und Verzeichnisse umbenennen und/oder verschieben. $ mv [-option(en)] quelle(n) ziel
Der Befehl kennt folgende Optionen: Option
Bedeutung
-b oder --backup
Erzeugen einer Sicherung der existierenden Zieldateien
-f oder --force oder --reply=yes
Vorhandene Zieldateien werden ohne Warnung überschrieben.
-i oder --interactive oder --reply=query
Vor jedem Überschreiben einer Datei wird eine Bestätigung angefordert.
--reply=antwort
-S oder --suffix=suffix
Festlegen der Endung, die beim Anlegen einer Sicherheitskopie dem Dateinamen angefügt wird. Die Vorgabe ist die Tilde (~).
--target-directory=dir
Alle Quellargumente werden in das Verzeichnis dir verschoben.
-u oder --update
Die vorhandene Zieldatei wird nur dann überschrieben, wenn die Quelldatei dasselbe oder ein neueres Änderungsdatum besitzt.
-v oder --verbose
Ausführliche Ausgabe
-x oder --one-file-system
Unterverzeichnisse in anderen Dateisystemen werden ignoriert.
Tab. 4.19: Optionen des Befehls mv
130
Nachfragen, wenn die Zieldatei schon existiert: yes (ja, immer),
no (nein, nie) oder query (fragen)
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Im nachfolgenden Beispiel wird eine Datei umbenannt: $ mv prot1 prot1111
Der Befehl überschreibt die Datei prot1111, wenn sie bereits existiert. Sie können den Befehl auch interaktiv starten, dann werden Sie vor dem Überschreiben noch einmal gefragt, ob Sie sicher sind: $ mv -i prot1 prot1111 rm: overwrite prot1111? y
Sie können den Befehl auch verwenden, um eine Datei oder ein Verzeichnis zu verschieben: $ mv prot1111 bericht
Hier wurde die Datei prot1111 in das Verzeichnis bericht verschoben. Der Befehl wird auch dazu verwendet, ganze Verzeichnisbäume umzubenennen: $ mv bericht protokolle
Es ist auch möglich, gleichzeitig zu verschieben und umzubenennen: $ mv protokolle/prot1111 prot1
Die Datei prot1111 im Verzeichnis protokolle wird ins aktuelle Verzeichnis verschoben und dort prot1 genannt.
4.1.9
Dateien vergleichen
Der Befehl diff Dieser Befehl vergleicht den Inhalt von zwei Dateien und gibt alle unterschiedlichen Zeilen aus: $ diff [-option(en)] datei1 datei2
Der Befehl wird in der Regel dazu verwendet, um so genannte Patches (Softwareergänzungen oder -Fehlerbereinigungen) herzustellen, aus denen wiederum Dateien erzeugt werden können, die die Änderungen enthalten. Der Befehl kennt folgende Optionen: Option
Bedeutung
-a oder --text
Alle Dateien werden als Textdatei behandelt; auf diese Weise können auch Binärdateien mit dem Befehl verglichen werden.
-b oder --ignore-space-change Wiederholte Leerzeichen werden wie ein Leerzeichen behandelt. -B oder --ignore-blank-lines
Leerzeilen werden ignoriert.
-c oder --c zahl oder
Verändert das Format der Ausgabe der Zeilen: Diese werden in einem Zusammenhang von zahl Zeilen ausgegeben (Vorgabewert ist 3).
--context=[zahl] Tab. 4.20: Optionen des Befehls diff
131
Dateien und Verzeichnisse bearbeiten
Option
Bedeutung
-d oder --minimal
Versucht, unbedingt so wenig Unterschiede wie möglich zu finden
-e oder --ed
Ausgabe einer Befehlsfolge des Editors ed mit allen Änderungen
-E oder --ignore-tab-expansion
Änderungen aufgrund Tabulator-Erweiterungen werden ignoriert.
-F re oder --show-function-line=re
Zeigt die letzte Zeile mit einer Übereinstimmung mit dem regulären Ausdruck re
--from-file=datei1
Vergleicht datei1 mit allen Operanden, wobei datei1 ein Verzeichnis sein kann
--to-file=datei2
Vergleicht datei2 mit allen Operanden, wobei datei2 ein Verzeichnis sein kann
-i oder --ignore-case
Ignoriert Unterschiede in der Groß- und Kleinschreibung in den Dateien
-I re oder --ignore-matching-lines=re
Unterschiede in Zeilen mit einer Übereinstimmung mit dem regulären Ausdruck re werden ignoriert.
--ignore-file-name-case
Ignoriert die Schreibweise beim Vergleich von Dateinamen
-l oder --paginate
Die Ausgabe wird dem Befehl pr übergeben, der sie in Seiten unterteilt.
--left-column
Wenn die Option -y für das zweispaltige Format gewählt wurde, gibt diese Option bei gleichen Spalten nur die linke Spalte aus.
-n oder --rcs
Die Ausgabe erfolgt im RCS-Diff-Format.
-N oder --new-file
Behandelt nicht vorhandene Dateien als leere Dateien
--no-ignore-file-name-case
Berücksichtigt die Schreibweise beim Vergleich von Dateinamen
-normal
Die Ausgabe erfolgt als normale Diff-Datei.
-p oder --show-c-function
Zeigt, in welcher C-Funktion sich jede Änderung befindet
-q oder --brief
Kurzausgabe, die nur besagt, ob die Dateien sich unterscheiden
-r oder --recursive
Vergleicht alle gefundenen Unterverzeichnisse rekursiv
--strip-trailing-cr
Nachfolgende Zeilenschaltung bei der Eingabe ignorieren
--suppress-common-lines
Wenn die Option -y für das zweispaltige Format gewählt wurde, unterdrückt diese Option die Ausgabe gleicher Zeilen.
-s oder --report-identicalfiles
Gibt eine Nachricht aus, wenn zwei Dateien identisch sind
-S datei oder --starting-file=datei
Startet mit der angegebenen Datei datei beim Vergleich von Verzeichnissen
Tab. 4.20: Optionen des Befehls diff (Forts.)
132
magnum
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Option
Bedeutung
--speed-large-files
Es werden große Dateien und viele verstreute kleine Änderungen vorausgesetzt.
-t oder --expand-tabs
Wandelt Tabulatoren in Leerzeichen in der Ausgabe um
-T oder --initial-tab
Stellt einen Tabulator an den Zeilenanfang, um vorhandene Tabulatoren passend anzuordnen
-u oder -U zahl oder --unified=[zahl]
Diese Option ist eine einheitlichere Form der Option -c: Das Format der Ausgabe der Zeilen wird verändert und sie werden in einem einheitlichen Zusammenhang von zahl Zeilen ausgegeben (Vorgabewert ist 3).
--unidirectional-new-file
Behandelt eine nicht vorhandene erste Datei als leere Datei
-w oder --ignore-all-space
Ignoriert alle Leerzeichen
-W zahl oder --width=zahl
Diese Option gibt zusammen mit der Option -y für die zweispaltige Ausgabe an, wie breit die maximale Ausgabe in zahl ist. Vorgabe ist 130.
-x re oder --exclude=re
Schließt Dateien eines Verzeichnisses aus dem Vergleich aus, wenn es mit dem Ausdruck re übereinstimmt
-X datei oder --exclude-from=datei
Schließt Dateien eines Verzeichnisses aus dem Vergleich aus, wenn diese mit den Ausdrücken aus der Datei datei übereinstimmen
-y oder --side-by-side
Ausgabe in zwei Spalten
Tab. 4.20: Optionen des Befehls diff (Forts.)
Zum Beispiel: $ diff obst obst1 3a4 > pfirsich 7d7 < mandarinen
Es werden zuerst die Nummer der abweichenden Zeilen und dann deren Inhalt angezeigt. Die Zeilen aus der ersten Datei werden mit > und die aus der zweiten Datei mit < markiert. In diesem Beispiel weicht die vierte Zeile der zweiten Datei mit dem Eintrag pfirsich von der ersten Datei ab und die erste Datei hat in der siebten Zeile den abweichenden Eintrag mandarinen.
Der Befehl diff3 Dieser Befehl vergleicht den Inhalt von drei Dateien. Dazu wird die Grundversion einer Datei verwendet und mit den Änderungen der ersten Datei abgeglichen. Anschließend werden die Unterschiede zwischen diesen beiden Dateien mit der dritten Datei abgeglichen und alle unterschiedlichen Zeilen ausgegeben: $ diff3 [-option(en)] datei1 datei2 datei3
133
Dateien und Verzeichnisse bearbeiten
magnum
Der Befehl kennt folgende Optionen: Option
Bedeutung
-3 oder --easy-only
Ausgabe von nicht zusammengeführten und nicht überlappenden Änderungen
-a oder --text
Alle Dateien werden als Textdatei behandelt; auf diese Weise können auch Binärdateien mit dem Befehl verglichen werden.
-A oder --show-all
Ausgabe von allen Änderungen und Konflikten, die Letzteren werden in Klammern angezeigt.
--diff-program=programm
Verwenden eines Programms zum Vergleichen der Dateien
-e oder --ed
Ausgabe einer Befehlsfolge des Editors ed mit allen Änderungen
-E oder --show-overlap
Ausgabe einer Befehlsfolge des Editors ed mit allen Änderungen, die nicht zusammengeführt wurden, und Anzeige von überlappenden Änderungen in Klammern
-i oder --ignore-case
Hängt an die Ausgabe der Befehlsfolge des Editors ed zusätzlich die Befehle w (write) und q (quit) an, damit ed beim Verlassen gespeichert wird
-L datei oder --label= datei
Für die Ausgabe wird die Datei datei verwendet.
-m oder --merge
Das Ergebnis aller Änderungen wird in eine Datei ausgegeben.
-T oder --initial-tab
Stellt einen Tabulator an den Zeilenanfang, um vorhandene Tabulatoren passend anzuordnen
-x oder --overlap-only
Ausgabe einer Befehlsfolge des Editors ed mit allen überlappenden Änderungen
-X datei oder --exclude-from=datei
Entspricht der Option -x, aber Ausgabe von überlappenden Änderungen in Klammern
Tab. 4.21: Optionen des Befehls diff3
Zum Beispiel: $ diff eins zwei drei ==== 1:4,5c vier fünf 2:4,5c vier 5 3:4,5c 4 fünf
Es werden zuerst die Nummer der Dateien, dann die abweichenden Zeilen und schließlich deren Inhalt angezeigt. In diesem Beispiel weicht die fünfte Zeile der ersten Datei mit dem Eintrag fünf von der zweiten Datei ab und die vierte Zeile der ersten Datei von der dritten Datei mit dem Eintrag vier.
134
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Mit diff3 könnten verglichen werden: ein Ursprungsprogramm in einer Version X, eine kundenangepasste Kopie des Ursprungsprogramms und das neue Ursprungsprogramm in der Version X+1. Ergebnis wäre eine Liste aller Änderungen, die notwendig sind, um die kundenangepasste Kopie auf den Versionsstand X+1 anzuheben (soweit technisch ermittelbar).
Der Befehl cmp Dieser Befehl vergleicht zwei Dateien und bricht an der ersten Stelle ab, an der diese sich unterscheiden. $ cmp [-option(en)] datei1 datei2
Der Befehl kennt folgende Optionen: Option
Bedeutung
-b oder --print-bytes
Ausgabe der unterschiedlichen Bytes
-c oder --print-chars
Die sich unterscheidenden Bytes werden als Buchstaben ausgegeben.
-i zahl oder --ignore-initial=zahl
Die ersten zahl Bytes der Eingabe werden übersprungen.
Die ersten zahl Bytes der Eingabe von Datei1 (zahl vor dem Dop-i zahl:zahl oder --ignore-initial=zahl:zahl pelpunkt) und von Datei2 (zahl nach dem Doppelpunkt) werden übersprungen. -l oder --verbose
Ausgabe der Bytenummern (Position) und Werte (Inhalt) aller sich unterscheidenden Bytes
-n zahl oder --bytes=zahl
Es werden höchstens zahl Bytes verglichen.
-s oder --quiet oder --silent
Es erfolgt keine Ausgabe, sondern es wird nur ein Rückgabewert an das aufrufende Programm übergeben: 0 bedeutet, die Dateien sind gleich 1 bedeutet, die Dateien unterscheiden sich 2 bedeutet, ein Zugriff auf die Dateien ist nicht möglich
Tab. 4.22: Optionen des Befehls cmp $ cmp obst obst1 obst obst1 differ: char 21, line 4
Die Dateien unterscheiden sich ab dem 21. Byte in der vierten Zeile. $ cmp -c eins zwei eins zwei differ: byte 21, line 5 is 146 f 65 5
Die Dateien unterscheiden sich ab dem 21. Byte in der 5. Zeile. Bei der Datei eins lautet das Byte f und bei Datei zwei lautet es 5.
Der Befehl comm Dieser Befehl vergleicht zwei sortierte Dateien und zeigt gemeinsame Zeilen an sowie Zeilen, an denen diese sich unterscheiden. $ comm [-option] datei1 datei2
135
Dateien und Verzeichnisse bearbeiten
magnum
Der Befehl kennt folgende Optionen: Option
Bedeutung
-1
Zeilen unterdrücken, die nur in datei1 enthalten sind
-2
Zeilen unterdrücken, die nur in datei2 enthalten sind
-3
Zeilen unterdrücken, die in beiden Dateien enthalten sind
Tab. 4.23: Optionen des Befehls comm
Zum Beispiel: $ comm eins drei eins zwei drei 4 fünf vier 5
Die Dateien unterscheiden sich ab der dritten Zeile. Die Übereinstimmungen werden rechts ausgedruckt und die Unterscheidungen linksbündig bzw. mittig.
4.1.10
Dateiausgabe formatieren
Der Befehl groff Dieser Befehl ist ein so genanntes Frontend für das Dokumentenformatiersystem groff. Dieses ruft in der Regel troff mit einem Postprozessor für das angegebene Gerät auf. Die Syntax des Befehls lautet: $ groff [-option(en)] datei(en)
Die Befehle troff und nroff werden in ähnlicher Weise verwendet. Bei den meisten Linux-Distributionen wird der Befehl verwendet, um die Manual Pages zu formatieren. Der Befehl kennt folgende Optionen: Option
Bedeutung
-a
Erzeugt eine ASCII-Annäherung bei der Ausgabe
-b
Druckt mit jeder Warn- oder Fehlermeldung eine Rückverfolgung aus, um die Fehlerursache zu finden
-C
Aktiviert den Kompatibilitätsmodus
-dcs -dname=s
Weist c oder einem Namen die Zeichenkette s zu. Dabei muss c ein aus einem Buchstaben bestehender Name sein.
-e
Vorbearbeitung mit dem Befehl eqn
Tab. 4.24: Optionen des Befehls groff
136
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Option
Bedeutung
-E
Unterdrückt alle Fehlermeldungen von troff
-ffam
fam wird als standardmäßige Font-Familie verwendet.
-Fdir
Sucht im Verzeichnis oder dem Verzeichnispfad dir nach Unterverzeichnissen devname (der Name ist der Name des Geräts) und dort nach einer Datei DESC und Font-Dateien
-g
Vorbearbeitung mit dem Befehl grn
-G
Vorbearbeitung mit dem Befehl grap
-h
Hilfetext ausgeben
-i
Liest die Standardeingabe, nachdem alle angegebenen Eingabedateien bearbeitet wurden
-Idir
Diese Option kann verwendet werden, um ein Verzeichnis anzugeben, das nach Dateien durchsucht wird. Die Option setzt die Option -s voraus.
-l
Die Ausgabe wird an ein Spoolprogramm zum Druck versandt.
-Larg
Übergibt arg an das Spoolprogramm. Jedes Argument sollte mit einer eigenen Option -L übergeben werden.
-mname
Liest die Datei name.tmac ein und wenn diese nicht gefunden wird, stattdessen tmac.name
-Mdir
Sucht im Verzeichnis oder dem Verzeichnispfad dir nach Makrodateien
-N
Lässt keine Zeilenschaltungen bei Begrenzungszeichen von eqn zu
-olist
Gibt nur Seiten in einer Liste aus, die eine durch Kommata getrennte Liste von Seitenbereichen ist
-p
Vorbearbeitung mit dem Befehl pic
-Parg
Übergibt arg dem Postprozessor. Jedes Argument sollte mit einer eigenen Option -L übergeben werden.
-R
Vorbearbeitung mit dem Befehl refer. Es wird dabei kein Mechanismus für die Übergabe von Argumenten zur Verfügung gestellt.
-rcn -rname=n
Definiert das Zahlenregister c oder den Namen mit n, wobei c ein aus einem Zeichen bestehender Name sein muss. n kann jeder beliebiger numerischer Ausdruck von troff sein.
-s
Vorbearbeitung mit dem Befehl soelim
-S
Sicherer Modus. Übergibt die Option -S an das Programm pic und deaktiviert die folgenden troff-Anforderung: .open, .opena, .pso, .sy und .pi. Dieser Modus ist aus Sicherheitsgründen Standard.
-t
Vorbearbeitung mit dem Befehl tbl
-Tdev
Bereitet die Ausgabe für das Gerät dev vor. Standardgerät ist ps.
-U
Unsicherer Modus. Kehrt zum ehemaligen unsicheren Verhalten des Befehls zurück
Tab. 4.24: Optionen des Befehls groff (Forts.)
137
Dateien und Verzeichnisse bearbeiten
magnum
Option
Bedeutung
-v
Veranlasst, dass von groff aufgerufene Programme ihre Versionsnummer ausgeben
-V
Druckt die Pipeline an der Standardausgabe aus, anstatt sie auszuführen
-wname
Aktiviert einen Namen für eine Warnung
-Wname
Unterdrückt Namen für Warnungen
-X
Vorschau mit dem Programm gxditview, anstatt den normalen Postprozessor zu verwenden
-z
Unterdrückt die (formatierte) Ausgabe von troff. Nur Fehlermeldungen werden ausgegeben.
-Z
Die Ausgabe von troff wird nicht nachbearbeitet. Normalerweise startet troff automatisch den geeigneten Postprozessor.
Tab. 4.24: Optionen des Befehls groff (Forts.)
Verfügbare Geräte sind: Gerät
Bedeutung
ps
Für Postscript-Drucker und –Vorschau
dvi
Für TeX dvi-Format
X75
Für eine 75-dpi-X11-Vorschau
X100
Für eine 100-dpi-X11-Vorschau
ascii
Für schreibmaschinenähnliche Geräte
ascii8
Für schreibmaschinenähnliche Geräte. Im Gegensatz zu ascii ist dieses Gerät 8-Bitfähig. Dieses Gerät ist dafür vorgesehen, für andere Zeichensätze als ASCII oder ISO 8859-1 verwendet zu werden.
latin-1
Für schreibmaschinenähnliche Geräte, die den Zeichensatz ISO 8859-1 verwenden
utf8
Für schreibmaschinenähnliche Geräte, die den Zeichensatz ISO 10646 (Unicode) verwenden
cp1047
Für schreibmaschinenähnliche Geräte, die den Zeichensatz EBCDIC IBM cp1047 verwenden
nippon
Für schreibmaschinenähnliche Geräte, die den japanischen Zeichensatz EUC verwenden
lj4
Für HP LaserJet4-kompatible (PCL5-kompatible) Drucker
lbp
Für Canon CAPSL-Drucker (Laserdrucker der LBP-4- und LBP-8-Serie)
html
Erzeugung von HTML-Ausgabe
Tab. 4.25: Geräteoptionen des Befehls groff
138
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Um zum Beispiel die Man Page ls.1 auf der Standardausgabe mit dem Ausgabegerät ascii und dem Befehl less seitenweise auszugeben, kann der folgende Befehl verwendet werden: $ groff -m mandoc -Tascii ls.1 | less
Der Befehl col Dieser Befehl ist ein Filter, um Escape-Sequenzen und Zeilenschaltungen (LF) nachzubearbeiten, um die Ausgabe eines Befehls, zum Beispiel troff, leserlich darzustellen. Die Syntax des Befehls lautet: $ col [-option(en)]
Der Befehl kennt folgende Optionen: Option
Bedeutung
-b
Keine Ausgabe des Zeichens Backspace. Eine nützliche Option beim Drucken von Man Pages
-f
Halbzeilenvorschübe sind zugelassen.
-lnum
Mindestens num Zeilen werden gepuffert; standardmäßig werden 128 Zeilen gepuffert.
-p
Erzwingt, dass unbekannte Steuersequenzen unverändert durchgegeben werden. Standardmäßig filtert col alle ihm bekannten Steuersequenzen von der Eingabe.
-x
Standardmäßig wandelt col Leerzeichen in Tabulatoren um; diese Option unterdrückt die Umwandlung.
Tab. 4.26: Optionen des Befehls col
In diesem Beispiel wird die Ausgabe einer Man Page in der Datei ls.rtf gespeichert, wobei die Backspaces entfernt werden: $ man ls | col -b > ls.rtf
Der Befehl colcrt Dieser Befehl ist ein weiterer Filter, um Escape-Sequenzen und Zeilenschaltungen (LF) nachzubearbeiten, um die Ausgabe eines Befehls leserlich darzustellen. Die Syntax des Befehls lautet: $ colcrt [-option(en)] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-
Unterdrückt das Unterstreichen von Text
-2
Bei halben Zeilen wird die Ausgabe mit doppeltem Zeilenabstand formatiert.
Tab. 4.27: Optionen des Befehls colcrt
Zum Beispiel: $ colcrt -2 liste.rtf
139
magnum
Dateien und Verzeichnisse bearbeiten
Der Befehl colrm Dieser Befehl löscht die angegebenen Spalten einer Datei. Eine Spalte entspricht einem einzelnen Zeichen einer Zeile. Die Syntax des Befehls lautet: $ colrm [startspalte [endespalte]]
In diesem Beispiel wird die 5. bis 17. Spalte aus der Datei liste.txt entfernt: $ colrm 5 17 < liste.txt
Das Programm liest normalerweise von der Standardeingabe.
Der Befehl column Dieser Befehl formatiert die Zeilen der Eingabe in Spalten. Die Elemente füllen dabei zuerst die Ausgabezeilen auf. Die Syntax des Befehls lautet: $ column [-option(en)] datei
Der Befehl kennt folgende Optionen: Option
Bedeutung
-c columns
Die Gesamtbreite der Ausgabe wird auf die Breite der angegebenen Spalten formatiert.
-s char
Definiert ein Zeichen, das verwendet wird, um die Spalten für die Option -t zu trennen
-t
Legt die Anzahl der Spalten fest, die die Eingabe enthält und erzeugt eine Tabelle. Die Spalten werden standardmäßig durch Leerzeichen getrennt bzw. durch das mit der Option -s angegebene Zeichen.
-x
Füllt die Spalten vor den Reihen
Tab. 4.28: Optionen des Befehls column
Zum Beispiel wird die Datei liste so ausgegeben, dass der Buchstabe ; als Trennzeichen verwendet wird: $ column -t -s ";" < liste
Der Befehl cut Mit Hilfe dieses Befehls können Sie die Ausgabe einer Datei oder eines Datenstroms verändern, indem bestimmte Spalten oder Felder daraus extrahiert werden. Die Syntax des Befehls lautet: $ cut [-option(en)] datei
Der Befehl kennt folgende Optionen: Option
Bedeutung
-b oder --bytes=liste
Nur die angegebenen Bytes werden ausgegeben.
-c oder --characters=liste
Nur die angegebenen Spalten werden ausgegeben.
Tab. 4.29: Optionen des Befehls cut
140
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Option
Bedeutung
-dx oder --delimiter=x
Das Trennzeichen der Felder ist x.
-f oder --fields=liste
Nur die angegebenen Felder werden ausgegeben und der Tabulator ist das Feldtrennzeichen.
--output-delimiter=string
Verwendet string als Ausgabetrennzeichen; Standard ist, das Eingabetrennzeichen zu verwenden.
-s oder --only-delimited
Zeilen, die keine Trennzeichen enthalten, werden nicht ausgegeben.
Tab. 4.29: Optionen des Befehls cut (Forts.)
Es kann nur eine der Optionen -b, -c oder -f verwendet werden. Jede Listenangabe besteht aus einem Bereich oder mehreren durch Kommata getrennten Bereichen. Mögliche Bereiche sind: Bereich
Bedeutung
N
Das n-te Byte, Zeichen oder Feld; gezählt wird ab 1
N-
Vom n-ten Byte, Zeichen oder Feld an bis zum Ende der Zeile
N-M
Vom n-ten bis einschließlich zum m-ten Byte, Zeichen oder Feld
-M
Vom ersten bis einschließlich zum m-ten Byte, Zeichen oder Feld
Tab. 4.30: Bereiche des Befehls cut
Im folgenden Beispiel wird aus der Zeile der Zeitausgabe der Wochentag (Feld 1) und die Uhrzeit (Feld 4) extrahiert. Als Trennzeichen wird das Leerzeichen verwendet: $ date | cut -d' ' -f1,4 Fri 14:20:38
Im nächsten Beispiel werden die Zugriffsrechte und der dazugehörende Dateiname im Verzeichnis /home/her/briefe ausgegeben: $ ls -l /home/her/briefe total 8 drwxr-xr-x 2 her users drwxr-xr-x 2 her users -rw-r--r-- 1 her users $ ls -l /home/her/briefe | otal 8 rwxr-xr-x briefe rwxr-xr-x memos rw-r--r-- vorlage1
512 Nov 29 12:55 mai03 512 Nov 28 10:45 jun03 267 Oct 4 09:33 vorl cut -c2-11,55-
Der Befehl expand Dieser Befehl ersetzt die Tabulatoren der angegebenen Dateien mit Leerzeichen und gibt das Ergebnis an der Standardausgabe aus. Die Syntax des Befehls lautet: $ expand [-option(en)] datei(en)
141
Dateien und Verzeichnisse bearbeiten
magnum
Der Befehl kennt folgende Optionen: Option
Bedeutung
-i oder --initial
Konvertiert keine Tabulatoren, die nicht nach Leerzeichen kommen
-t oder --tabs=nr
Standardmäßig entspricht ein Tabulator 8 Leerzeichen. Mit dieser Option kann die Anzahl der Leerzeichen, die der Tabulator einnimmt, angegeben werden.
-t oder --tabs=list
Verwendet eine durch Kommata getrennte Liste für die genauen Tabulatorpositionen
Tab. 4.31: Optionen des Befehls expand
In diesem Beispiel werden die Tabulatoren der Datei liste.txt in Leerzeichen umgewandelt: $ expand liste.txt
Der Befehl fmt Dieser Befehl formatiert die Zeilen einer beliebigen Textdatei im Blocksatz in einer angegebenen Breite. Die Syntax des Befehls lautet: $ fmt [-option(en)] datei
Der Befehl kennt folgende Optionen: Option
Bedeutung
-c oder --crown-margin
Erhält die Einrückung der ersten beiden Zeilen eines Absatzes
-p oder --prefix=string
Formatiert nur Zeilen, die mit dem Präfix string beginnen
-s oder --split-only
Teilt lange Zeilen, aber entfernt keine Zeilenumbrüche
-t oder --tagged-paragraph
Entspricht -c, wenn die Einrückungen der ersten beiden Zeilen nicht gleich sind. Andernfalls wird die erste Zeile unterschiedlich von der zweiten eingerückt.
-u oder --uniform-spacing
Fügt ein Leerzeichen zwischen Worten und zwei Leerzeichen zwischen Sätzen ein
-w oder --width=nr
Angabe der maximalen Zeilenbreite. Standard sind 75 Spalten.
Tab. 4.32: Optionen des Befehls fmt
Im Beispiel wird die Datei liste so ausgegeben, dass die Spaltenbreite 65 Zeichen beträgt: $ fmt -w 65 liste
Der Befehl fold Dieser Befehl fügt Zeilenumbrüche einer Datei hinzu, so dass die angegebene Breite eingehalten wird, auch mitten in einem Wort. Die Syntax des Befehls lautet: $ fold [-option(en)] datei
142
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl kennt folgende Optionen: Option
Bedeutung
-b oder --bytes
Zählt Bytes anstelle von Spalten
-s oder --spaces
Führt den Umbruch nur bei Leerzeichen durch
-w oder --width=nr
Verwendet die angegebene Spaltenbreite anstelle des Standards von 80 Spalten
Tab. 4.33: Optionen des Befehls fold
Im Beispiel wird die Datei liste so ausgegeben, dass die Spaltenbreite 55 Zeichen beträgt: $ fold -w 55 liste
Der Befehl pr Dieser Befehl kann verwendet werden, um Dateien zum Drucken aufzubereiten. Er kann unter anderem eine Ausgabe mit Seitennummern, Datums- und Zeitangabe einschließlich einer Anzeige des Dateinamens erzeugen. Die Syntax des Befehls lautet: $ pr [-option(en)] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-n oder --columns=n
Die Ausgabe erfolgt n-spaltig nach unten, wenn nicht die Option -a verwendet wird.
+n[:m] oder --pages=n[:m]
Der Ausdruck beginnt auf Seite n und endet gegebenenfalls bei m.
-a oder --across
Die Spalten werden horizontal anstelle von vertikal aufgefüllt.
-c oder --show-control-chars
Steuerzeichen werden in die so genannte Caret-Notation (zum Beispiel ^D) und andere nicht druckbare Zeichen in die Oktalzahlnotation mit Backslash umgewandelt.
-d oder --double-space
Die Ausgabe erfolgt mit doppeltem Zeilenabstand.
-D oder --date-format=format
Das Format format wird für das Datum der Kopfzeile verwendet.
-e[char[:breite]] oder --expand-tabs [=char[:breite]]
Tabulatoren oder angegebene Tabulatorzeichen char werden in Leerzeichen mit der angegebenen Breite breite umgewandelt. Standardbreite ist 8.
-f oder -F oder --form-feed
Seiten werden durch Seitenvorschub anstelle von Zeilenschaltungen getrennt (bei der Option -F durch eine 3-zeilige Kopfzeile und ohne diese Option durch eine 5-zeilige Kopf- und Fußzeile).
-h "header" oder --header=header
Verwendet eine zentrierte Kopfzeile header anstelle des Dateinamens
Tab. 4.34: Optionen des Befehls pr
143
magnum
Dateien und Verzeichnisse bearbeiten
Option
Bedeutung
-i[char[:breite]] oder --output-tabs [=char[:breite]]
Leerzeichen werden in Tabulatoren oder alternative Tabulatorzeichen char mit der angegebenen Breite breite umgewandelt. Standardbreite ist 8.
-J oder --join-lines
Verbindet Zeilen und deaktiviert das Abschneiden von Zeilen mit der Option -W. Es gibt keine Anordnung in Spalten.
-ln oder --length=n
Die Seitenlänge beträgt n Zeilen (Standard sind 66).
-m oder --merge
Druckt alle Dateien parallel, jede in einer Spalte
-n[trenn[:n]] oder --number-lines[= trenn[:n]]
Fügt Zeilennummern hinzu und verwendet dabei entweder 5stellige Ziffern oder die mit n angegebenen Stellen. Wird ein Trennzeichen trenn angegeben, dann wird dieses anstelle eines Tabulators an die Zeilennummer angehängt.
-Nn oder --first-line-number=n Startet das Zählen mit der angegebenen Nummer n bei der
ersten Zeile der ersten gedruckten Seite
-on oder --indent=n
Den linken Rand um n Leerzeichen einrücken
-r oder --no-file-warnings
Unterdrückt eine Warnmeldung, wenn eine Datei nicht geöffnet werden kann
-s[char] oder --separator=[char]
Trennt Spalten mit Hilfe eines einzigen Zeichens, Standard ist das Tabulatorzeichen
-sstring oder --sepstring[=string]
Trennt Zeilen mit Hilfe einer Zeichenkette string, Standardtrennzeichen ist der Tabulator
-t oder --omit-header
Unterdrückt Kopf- und Fußzeilen
-T oder --omit-pagination
Unterdrückt Kopf- und Fußzeilen und Seitenvorschub
-V oder --show-nonprinting
Verwendet die Oktalzeichennotation mit Backslash zur Darstellung von nicht druckbaren Zeichen
-wn oder --width=n
Die Zeilenbreite beträgt n Zeichen (Standard sind 72).
-Wn oder --page-width=n
Die Zeilenbreite beträgt n Zeichen (Standard sind 72). Es werden Zeilen abgeschnitten, wenn nicht die Option -J verwendet wird.
Tab. 4.34: Optionen des Befehls pr (Forts.)
In diesem Beispiel wird der Inhalt der Datei liste ab Seite 3 aufgelistet: $ pr +3 liste
Im nächsten Beispiel wird der Inhalt der Datei liste mit einer Seitenlänge von 30 Zeilen und dem Titel »Bücherliste« ausgegeben: $ pr -h "Bücherliste" -l 30 liste
Im letzten Beispiel wird der Inhalt des aktuellen Verzeichnisses seitenweise, ohne Kopfzeile und in 3 Spalten aufgelistet: $ ls | pr -t -4 | more
144
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl printf Dieser Befehl lässt Texte in formatierter Format ausgeben. Die Syntax des Befehls lautet: $ printf format [strings]
Die angegebenen Zeichenketten strings werden in den angegebenen Formaten ausgegeben, für die so genannte Escape-Sequenzen verwendet werden. Die zu formatierende Zeichenkette sollte in Anführungszeichen stehen. Die Formate haben folgende Bedeutung: Format
Bedeutung
\"
Doppeltes Hochkomma (Anführungszeichen)
\nnn
Ausgabe des ASCII-Zeichens mit dem Oktalwert nnn
\\
Backslash
\a
Signalton
\b
Backspace
\c
Unterdrückt nachfolgende Zeilenschaltung
\f
Seitenvorschub
\n
Zeilenschaltung (Newline)
\r
Zeilenende (Carriage return)
\t
Horizontaler Tabulator
\v
Vertikaler Tabulator
Tab. 4.35: Formate des Befehls printf
Neben normalem Text können im Formatierungsstring auch Platzhalter angegeben werden, an deren Stelle nachfolgende Argumente (Zeichenketten, Zahlen) eingefügt werden. Die Platzhalter beginnen dabei mit einem Prozentzeichen (%) und können folgende Formatierungsoptionen enthalten. Platzhalter
Bedeutung
text
Ausgabe von text
%s
Platzhalter für eine Zeichenkette oder eine Zahl
%ms
Platzhalter für eine rechtsbündig ausgegebene Zeichenkette mit einer Breite von m Zeichen
%-ms
Platzhalter für eine linksbündig ausgegebene Zeichenkette mit einer Breite von m Zeichen
Tab. 4.36: Formate des Befehls printf
145
Dateien und Verzeichnisse bearbeiten
magnum
Platzhalter
Bedeutung
%m.ns
Platzhalter für eine Zeichenkette mit einer Breite von m Zeichen. Von der Zeichenkette selbst werden aber nur n Zeichen ausgegeben.
%m.nf
Platzhalter für eine Gleitkommazahl mit einer Breite von m Zeichen und n Nachkommastellen
Tab. 4.36: Formate des Befehls printf (Forts.)
In diesem Beispiel wird Text mit Hilfe von Escape-Sequenzen mehrzeilig und mit Tabulator ausgegeben: $ printf "Das ist eine Ausgabe\nauf 3\n\vZeilen\n" Das ist eine Ausgabe auf 3 Zeilen
Im nächsten Beispiel wird eine rechtsbündige Ausgabe mit einer Breite von 25 Zeichen erzeugt: $ printf "|%25s|\n" Bücherliste | Bücherliste|
Der Befehl sort Dieser Befehl sortiert alle Eingabezeilen gemäß dem ASCII-Code aufsteigend. Standardmäßig wird die ganze Zeile in den Sortiervorgang mit eingeschlossen, es kann aber auch nach bestimmten Spalten innerhalb der Datei sortiert werden. Die Syntax des Befehls lautet: $ sort [-option(en)] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-b oder --ignore-leading-blanks
Führende Leer- und Tabulatorzeichen werden ignoriert.
-c oder --check
Prüft, ob die Dateien bereits sortiert sind. In diesem Fall wird keine Ausgabe durchgeführt.
-d oder --dictionary-order
Die Sortierung berücksichtigt nur Zeichen, Ziffern und Leerzeichen (Sortierung in lexikalischer Ordnung).
-f oder --ignore-case
Groß-/Kleinschreibung wird ignoriert.
-g oder --general-numeric-sort
Vergleich erfolgt auf der Basis des allgemeinen numerischen Werts
-i oder --ignore-nonprinting
Es werden nur druckbare Zeichen berücksichtigt.
-k oder --key=pos1[,pos2]
Schlüssel beginnt bei pos1 und endet bei pos2. Die Nummerierung beginnt bei 1.
-m oder --merge
Fügt mehrere sortierte Dateien zusammen.
Tab. 4.37: Optionen des Befehls sort
146
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Option
Bedeutung
-M oder --month-sort
Die Sortierung erfolgt nach Monatskürzel in der Reihenfolge JAN < FEB < … < unbekannter Monatsname.
-n oder --numeric-sort
Numerisches Sortieren, das heißt, Zahlen werden nach ihrem Wert sortiert, nicht nach der Reihenfolge der Ziffern (vgl. 34 und 120)
-o oder --output=datei
Das Ergebnis der Sortierung wird in die Datei datei geschrieben, die mit der Eingabedatei identisch sein kann.
-r oder --reverse
Absteigendes Sortieren
-s oder --stable
Stabilisiert die Sortierung, indem es den letzten Vergleich deaktiviert
-S oder --buffer-size=n
Verwendet die Größe n als Hauptspeicherpuffer
-ttrenn oder --field-separator=trenn
Trennzeichen zwischen Feldern ist trenn
-T oder --temporary-directory=dir
Das Verzeichnis dir wird für temporäre Dateien verwendet anstelle von $TMPDIR oder /tmp.
-u oder --unique
Gleiche Eingabezeilen werden nur einmal (unique) ausgegeben.
-z oder --zero-terminated
Zeilen werden mit dem Bytewert 0 anstelle mit einer Zeilenschaltung beendet.
+n[-m]
Der Sortierschlüssel beginnt bei Feld n+1 und endet bei einschließlich m; wenn m nicht vorhanden ist, werden alle Zeichen bis zum Zeilenende zum Sortierschlüssel.
Tab. 4.37: Optionen des Befehls sort (Forts.)
Wenn der Befehl sort eine Zeile liest, wird diese in einzelne Felder aufgeteilt. Die Sortierschlüssel legen fest, nach welchem Feld sortiert wird. Der Standardwert ist das erste Feld und die Feldtrennzeichen sind standardmäßig Leerzeichen und Tabulatoren. Im ersten Beispiel werden alle Zeilen der Datei /etc/passwd nach dem Zeilenanfang sortiert und in die Datei passwd_sort geschrieben. Dabei wird die Groß- und Kleinschreibung ignoriert: $ sort -f /etc/passwd > passwd_neu; more passwd_neu adm:x:4:4:Admin:/var/adm: anna:x:107:1::/export/home/anna:/bin/sh berta:x:1000:1::/export/home/berta:/bin/sh bin:x:2:2::/usr/bin: daemon:x:1:1::/: her:x:101:1:Ute Hertzog:/export/home/her:/bin/bash lp:x:71:8:Line Printer Admin:/usr/spool/lp: ...
Im zweiten Beispiel wird der Inhalt der Datei /etc/passwd numerisch mit Hilfe des dritten Feldes, der Benutzer-ID, sortiert. Das Feldtrennzeichen ist der Doppelpunkt: $ sort +2n -t: /etc/passwd
147
Dateien und Verzeichnisse bearbeiten
magnum
Der Befehl tr Dieser Befehl kann Zeichen umwandeln oder löschen. Dies ist beim Austauschen von Dateien zwischen unterschiedlichen Betriebs- oder Programmsystemen oft nützlich, wenn die verwendeten Zeichensätze voneinander abweichen. Die Syntax des Befehls lautet: $ tr [-option(en)] [string1 [string2]]
Der Befehl kennt folgende Optionen: Option
Bedeutung
-c oder --complement
Verwendung des ersten Komplements von Zeichenkette string1
-d oder --delete
Alle Zeichen aus der Zeichenkette string1 werden gelöscht und nicht übersetzt.
-s oder --squeeze-repeats
Jede Eingabefolge von Zeichen, die in der Zeichenkette string1 enthalten sind und wiederholt werden, werden durch ein einzelnes Vorkommen dieses Zeichens ersetzt.
-t oder --truncate string1
Als Erstes wird die Zeichenkette string1 auf die Länge von string2 abgeschnitten.
Tab. 4.38: Optionen des Befehls tr
Der Befehl tr kennt ebenfalls interpretierte Escape-Sequenzen: Sequenz
Bedeutung
\nnn
Ausgabe des ASCII-Zeichens mit dem Oktalwert nnn
\\
Backslash
\a
Signalton
\b
Backspace
\c
Unterdrückt nachfolgende Zeilenschaltung
\f
Seitenvorschub
\n
Zeilenschaltung (Newline)
\r
Zeilenende (Carriage return)
\t
Horizontaler Tabulator
\v
Vertikaler Tabulator
char1-char2
Alle Zeichen von char1 bis char2 aufsteigend
[char*]
In Zeichenkette string2 Zeichen char bis zur Länge von Zeichenkette string1 kopieren
[char*anz]
Die Zeichen char werden anz Mal kopiert; bei der Zahl anz handelt es sich um eine Oktalzahl, wenn diese mit 0 beginnt.
Tab. 4.39: Sequenzen des Befehls tr
148
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Sequenz
Bedeutung
[:alnum]
Alle Buchstaben und Zahlen
[:alpha]
Alle Buchstaben
[:blank]
Alle Leerzeichen und horizontalen Tabulatoren
[:cntrl]
Alle Steuerzeichen
[:digit]
Alle Ziffern
[:lower]
Alle Kleinbuchstaben
[:print]
Alle druckbaren Zeichen mit Leerzeichen
[:punct]
Alle Satzzeichen
[:space]
Alle Leerzeichen und Tabulatoren, horizontal und vertikal
[:upper]
Alle Großbuchstaben
[:xdigit]
Alle hexadezimalen Ziffern
[=char=]
Alle Zeichen, die dem Zeichen char entsprechen
Tab. 4.39: Sequenzen des Befehls tr (Forts.)
Im ersten Beispiel werden alle Kleinbuchstaben der Datei liste in Großbuchstaben umgewandelt und das Ergebnis wird in der Datei liste-gross gespeichert: $ tr "[:lower]" "[:upper]" < liste > liste-gross
Im nächsten Beispiel werden alle CR-Zeichen (mit Oktalcode 15) aus der Datei dos.txt gelöscht und das Ergebnis in die Datei unix.txt gespeichert. Damit wurde ein DOS-Text mit den Zeilenendezeichen CR und LF in einen Unix-Text mit dem Zeilenendezeichen LF umgewandelt: $ tr -d '\015' < dos.txt > unix.txt
Der Befehl unexpand Dieser Befehl kann Zeichenketten, die aus mindestens zwei führenden Leerzeichen oder Tabulatoren bestehen, in Tabulatoren umwandeln. Die Syntax des Befehls lautet: $ unexpand [-option(en)] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-a oder --all
Konvertiert nicht nur die führenden, sondern alle Leerzeichen
--first-only
Konvertiert nur die führenden Leerzeichen; diese Option deaktiviert -a
-t n oder --tabs=n
Tabulatoren werden n Zeichen anstelle der standardmäßigen 8 zugewiesen.
-t list oder --tabs list Verwendet eine durch Kommata getrennte Liste als Tabulatorpositionen
Tab. 4.40: Optionen des Befehls unexpand
149
magnum
Dateien und Verzeichnisse bearbeiten
In diesem Beispiel werden alle führenden Leerzeichen in der Datei liste durch Tabulatoren ersetzt: $ unexpand liste
Der Befehl uniq Dieser Befehl entfernt doppelte und aufeinander folgende Zeilen aus der sortierten Datei datei1 und schreibt das Ergebnis auf die Standardausgabe oder in die Datei datei2. Die Syntax des Befehls lautet: $ uniq [-option(en)] [datei1 [datei2]]
Der Befehl kennt folgende Optionen: Option
Bedeutung
-c oder --count
Stellt jeder Zeile die Anzahl voran, wie oft sie vorkommt
-d oder --repeated
Druckt nur doppelt vorhandene Zeilen aus
-D oder --allrepeated[=methode]
Druckt alle doppelten Zeilen aus. Die Trennmethode methode kann die Werte none (Standardwert), prepend und separate annehmen. Die Begrenzung erfolgt durch Leerzeilen.
-n oder -f n oder --skip-fields=n Verhindert, dass die ersten n Felder verglichen werden -i oder --ignore-case
Ignoriert beim Vergleich eine unterschiedliche Schreibweise
+n oder -s n oder --skip-chars=n
Verhindert, dass die ersten n Zeichen verglichen werden
-u oder --unique
Gibt nur nicht doppelt vorhandene Zeilen aus
-w n oder --check-chars=n
Vergleicht nicht mehr als n Zeichen in jeder Zeile
Tab. 4.41: Optionen des Befehls uniq
Im folgenden Beispiel werden alle Namen in der Datei namensliste ausgegeben, die mehr als einmal vorkommen, und in die Datei d-namen eingetragen: $ sort namensliste | uniq -d > d-namen
4.1.11
Mit Dateien arbeiten
Der Befehl which Dieser Befehl zeigt an, in welchem Pfad sich ein Shellbefehl befindet: $ which [-option(en)] befehl
Es werden nur die Verzeichnisse durchsucht, die in der Variablen PATH hinterlegt sind. Variablen werden in Kapitel 9 ausführlich behandelt.
150
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl kennt folgende Optionen: Option
Bedeutung
-a oder --all
Ausgabe aller passenden Befehle, die mit Hilfe der Variablen PATH gefunden werden, und nicht nur des ersten
-i oder --read-alias
Liest Aliase von der Standardeingabe und gibt passende auf der Standardausgabe aus
-skip-dot
Überspringt Verzeichnisse in der Variablen PATH, die mit einem Punkt beginnen
--skip-tilde
Überspringt Verzeichnisse in der Variablen PATH, die mit einer Tilde beginnen bzw. sich im Homeverzeichnis befinden
-show-dot
Wenn ein Verzeichnis in der Variablen PATH mit einem Punkt beginnt und mit der Suche übereinstimmt, beginnt die Ausgabe des Befehlsnamens auch mit einem Punkt, zum Beispiel ./befehl.
--show-tilde
Wenn ein Verzeichnis mit dem Homeverzeichnis übereinstimmt, wird eine Tilde am Anfang des Dateinamens ausgegeben.
Tab. 4.42: Optionen des Befehls which
Zum Beispiel: $ which man /usr/bin/man
Der Befehl file Dieser Befehl versucht den Typ einer Datei zu ermitteln, indem der oberste Teil einer Datei mit Hilfe der Datei /etc/magic ausgewertet wird. $ file [-option(en)] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-b oder --brief
Die Dateinamen werden nicht vor den Ausgabezeilen aufgeführt (Kurzmodus).
-c oder --checking-printout
Das Format der magic-Datei wird überprüft; die Option kann mit -m verwendet werden, um eine neue magic-Datei zu prüfen, bevor sie angewandt wird.
-f oder --files-from datei
Der Befehl wird auf die Dateinamen angewandt, die in der Datei datei stehen.
-F string oder --separator string
Anstatt des Separators »:« wird der mit string angegebene Separator verwendet.
-i oder --mime
Ausgabe von Strings im Mime-Typ
-k oder --keep-going
Bei der ersten Übereinstimmung wird nicht angehalten.
-L oder --dereference
Symbolischen Links wird gefolgt.
Tab. 4.43: Optionen des Befehls file
151
magnum
Dateien und Verzeichnisse bearbeiten
Option
Bedeutung
-m liste oder --magic-file liste
Verwendet die Datei liste anstatt der Datei /etc/magic.
--n oder --no-buffer
Die Ausgabe wird nicht gepuffert.
-N oder --no-pad
Die Ausgabe wird nicht aufgefüllt.
-s oder --special-files Behandelt spezielle Dateien (block- und zeichenorientierte
Gerätedateien) als normale Dateien
-Z oder --uncompress
Versucht, aus komprimierten Dateien weitere Informationen zu erhalten
Tab. 4.43: Optionen des Befehls file (Forts.)
Zum Beispiel: $ file * poem: save: sammlung: testdatei: prot10: prog99: Linux 2.2.5,
ascii text Korn shell script text directory empty symbolic link ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/ dynamically linked (uses shared libs), not stripped
Das Ergebnis des Befehls stimmt nicht immer, da nur ein Teil der Datei ausgewertet wird.
Der Befehl wc Dieser Befehl zählt Zeilen, Worte, Zeichen und Bytes in einer Datei: $ wc [-option(en)] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-c oder --bytes
Anzahl der Bytes ausgeben
-l oder --lines
Anzahl der Zeilen ausgeben
-m oder --chars
Anzahl der Zeichen ausgeben
-w oder --words
Anzahl der Worte ausgeben
-L oder --max-line-length
Länge der längsten Zeile ausgeben
Tab. 4.44: Optionen des Befehls wc
Zum Beispiel: $ wc prot1000 17 39
108
prot1000
In dieser Ausgabe werden die Zeilen (17), Worte (39) und Bytes (108) für die Datei prot1000 angezeigt.
152
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl od Der Befehl konvertiert Daten in andere Darstellungsformen, zum Beispiel in die hexadezimale Darstellung: $ od [-option(en)] datei
Der Befehl kennt folgende Optionen: Option
Bedeutung
-A radix oder --addressradix=radix
Steuerung der Ausgabe von Datei-Offsets: d für dezimal, o für oktal, x für hexadezimal oder n für nichts
-j bytes oder --skip-bytes= bytes
Anzahl bytes der am Dateianfang zu übergehenden Eingabebytes
-N oder --read-bytes=bytes
Begrenzen der Ausgabe auf bytes Eingabebytes pro Datei
-s oder --strings[=bytes]
Ausgabe von Zeichenketten mit mindestens bytes alphanumerischen Zeichen
-t typ oder --format= typ
Wählen des Ausgabeformats typ: a= c= d[anzahl] = f[anzahl] = o[anzahl] = u[anzahl] = x[anzahl] =
benanntes Zeichen normales ASCII-Zeichen Dezimalzahl mit Vorzeichen, anzahl Bytes pro Zahl Fließkommazahl, anzahl Bytes pro Zahl Oktalzahl, anzahl Bytes pro Zahl Dezimalzahl ohne Vorzeichen, anzahl Bytes pro Zahl Hexadezimalzahl, anzahl Bytes pro Zahl
-v oder --output-duplicates
Anzeige der Zeilenunterdrückung nicht mit dem Zeichen *
-w oder --width[=bytes]
Ausgabe von Anzahl bytes pro ausgegebener Zeile
--traditional
Argumente in traditioneller Form werden angenommen.
Tab. 4.45: Optionen des Befehls od
Es kann auch eine ältere Syntax verwendet werden: $ od --traditional [datei] [[+]offset [[+]marke]]
Dabei ist marke die Pseudoadresse des ersten Bytes, das ausgegeben wird, und wird bei fortschreitender Ausgabe entsprechend erhöht. Das Präfix 0x oder 0X ist hexadezimal für offset und marke, das Suffix ».« bedeutet oktal und »b« (block) multipliziert mit 512. Werden traditionelle Formatangaben verwendet, so werden diese beim Mischen akkumuliert: Option
Bedeutung
-a oder -t a
Wählen von benannten Zeichen
-b oder -t oC
Wählen von Oktalbytes
Tab. 4.46: Traditionelle Optionen des Befehls od
153
Dateien und Verzeichnisse bearbeiten
magnum
Option
Bedeutung
-c oder -t c
Wählen von ASCII-Zeichen
-d oder -t u2
Wählen von dezimalen kurzen Zahlen ohne Vorzeichen
-f oder -t fF
Wählen von Fließkommazahlen
-h oder -t x2 oder -x
Wählen von hexadezimalen kurzen Zahlen
-i oder -t d2
Wählen von dezimalen kurzen Zahlen
-l oder -t d4
Wählen von dezimalen langen Zahlen
-o oder -t 02
Wählen von oktalen kurzen Zahlen
Tab. 4.46: Traditionelle Optionen des Befehls od (Forts.)
Zum Beispiel: $ od –t 0000000 66 0000020 72 0000040 ...
cx1 obst f e i g e \n z i t r o n e \n b i 65 69 67 65 0a 7a 69 74 72 6f 6e 65 0a 62 69 r n e \n m e l o n e \n a p f e l 6e 65 0a 6d 65 6c 6f 6e 65 0a 61 70 66 65 6c \n t r a u b e n \n m a n d a r i
Der Befehl basename Der Befehl gibt Dateinamen ohne die führenden Pfadangaben aus: $ basename datei [suffix]
Wird zusätzlich ein Suffix angegeben, wird dieses auch entfernt. Im folgenden Beispiel wird der Pfadanteil eines Dateinamens entfernt: $ basename /usr/lib/libjpeg.la libjpeg.la
In diesem Beispiel wird zusätzlich noch das Suffix entfernt: $ basename /usr/lib/libjpeg.la .la libjpeg
Der Befehl dirname Der Befehl gibt den Pfadanteil eines Dateinamens aus: $ dirname datei
Im folgenden Beispiel wird der Pfadanteil eines Dateinamens extrahiert: $ dirname /usr/lib/libjpeg.la /usr/lib
Der Befehl sum Dieser Befehl berechnet zu einer Datei eine Prüfsumme und die Anzahl von Blöcken und gibt diese Informationen aus. Diese Funktion ist nützlich, wenn Dateien übertragen wurden, um Übertragungsfehler festzustellen oder größere Dateien auf Gleichheit zu überprüfen. Die Syntax des Befehls lautet:
154
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
$ sum [-option(en)] datei
Der Befehl kennt folgende Optionen: Option
Bedeutung
-r
Deaktiviert die Option -s und verwendet den Prüfsummenalgorithmus von BSD-Unix mit 1 Kbyte großen Blöcken
-s oder --sysv
Verwendet den Prüfsummenalgorithmus von System V-Unix und 512 Byte große Blöcke
Tab. 4.47: Optionen des Befehls sum
Hier werden die Prüfsumme und Blockgröße der Datei liste ausgegeben: $ sum liste 47821 4
Wird die Datei verändert, dann ändert sich auch die Prüfsumme und gegebenenfalls die Größe in Blöcken.
Der Befehl md5sum Dieser Befehl berechnet zu jeder angegebenen Datei eine 128-Bit-Prüfsumme, die auch als »Fingerprint« oder »Message-digest« bezeichnet wird. Der Befehl kann auch entscheiden, ob eine Datei und Prüfsumme konsistent sind. Diese Funktion ist wiederum nützlich, wenn Dateien übertragen wurden, um Übertragungsfehler festzustellen oder größere Dateien auf Gleichheit zu überprüfen. Die Syntax des Befehls lautet: $ md5sum [-option(en)] datei
Der Befehl kennt folgende Optionen: Option
Bedeutung
-b oder --binary
Behandelt alle Eingabedateien als Binärdateien, was bei Unix-Systemen keine Auswirkung hat, da diese nicht zwischen Binär- und Textdateien unterscheiden. Bei Systemen, die eine unterschiedliche interne und externe Zeichendarstellung haben, ist die Option nützlich. Bei MS-DOS- und MSWindows-Systemen ist diese Option Standardvorgabe.
-c oder --check
Liest die Dateinamen und Prüfsummeninformationen aus der angegebenen Datei oder von der Standardeingabe und gibt an, ob jede genannte Datei und die entsprechende Prüfsummendaten konsistent sind.
--status
Diese Option ist nur sinnvoll, wenn Prüfsummen überprüft werden. Wenn alle aufgeführten Dateien lesbar und mit den dazugehörigen MD5Prüfsummen konsistent sind, wird ein erfolgreicher Returncode ausgegeben, ansonsten ein Statuswert, der auf einen Fehler hinweist.
-t oder --text
Behandelt alle Eingabedateien wie Textdateien. Diese Option ist das Gegenteil von --binary.
-w oder --warn
Beim Überprüfen von Prüfsummen wird bei unsauber formatierten MD5Prüfsummenzeilen eine Warnmeldung ausgegeben. Diese Option ist nur sinnvoll, wenn alle bis auf wenige Zeilen in der geprüften Ausgabe gültig sind.
Tab. 4.48: Optionen des Befehls md5sum
155
magnum
Dateien und Verzeichnisse bearbeiten
Hier werden die Prüfsumme und Blockgröße der Datei testdatei ausgegeben: $ md5sum testdatei 026d87ec8761e84c710dd8ab185ac466
testdatei
Wird die Datei verändert, dann ändert sich auch die Prüfsumme und gegebenenfalls die Größe in Blöcken.
Der Befehl whereis Dieser Befehl sucht die Binär-, Quell- oder Hilfe-Dateien für einen Befehl oder eine Datei. Die Syntax des Befehls lautet: $ whereis [-option(en)] datei
Der Befehl kennt folgende Optionen: Option
Bedeutung
-b
Suche nur nach Binärdateien
-m
Suche nur nach Einträgen in den Manual Pages
-s
Suche nur nach Quelldateien
-u
Suche nach ungewöhnlichen Einträgen. Eine Datei wird als ungewöhnlich bezeichnet, wenn sie keinen Eintrag des gewünschten Typs hat. Der Befehl whereis -m -u * sucht im aktuellen Verzeichnis nach allen Dateien, die nicht dokumentiert sind.
-B dir
Ändert oder begrenzt den Platz, an dem nach Binärdateien gesucht wird
-M dir
Ändert oder begrenzt den Platz, an dem nach Einträgen in den Manual Pages gesucht wird
-S dir
Ändert oder begrenzt den Platz, an dem nach Quelldateien gesucht wird
-f
Beendet die letzte Verzeichnisliste und signalisiert den Beginn von Dateinamen. Diese Option muss immer nach einer der Optionen -B, -M oder -S verwendet werden.
Tab. 4.49: Optionen des Befehls whereis
Im folgenden Beispiel wird nach dem Befehl ls gesucht: $ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz
Der Befehl xargs Dieser Befehl führt den angegebenen Befehl mit beliebigen Argumenten aus, wobei er aber die übrigen Argumente nicht direkt angibt, sondern von der Standardeingabe liest. Auf diese Weise werden die Argumente in mehreren Teilen an den Befehl gegeben, so dass der Befehl mehr Argumente als üblich verarbeiten kann. Die Argumente bestehen in der Regel aus Listen mit Dateinamen, die mit Hilfe des Befehls find oder ls über eine Pipe an den Befehl xargs übergeben werden. Die Syntax des Befehls lautet: $ xargs [-option(en)] befehl
156
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl kennt folgende Optionen: Option
Bedeutung
-0 oder --null
Eingabe-Dateinamen werden durch Null-Bytes anstelle von Leerzeichen beendet. Hochkommata und Backslash werden nicht besonders behandelt.
-e[string] oder --eof[=string]
Definiert EOF mit der angegebenen Zeichenkette string oder standardmäßig mit »_«
-i[string] oder --replace[=string]
Ersetzt die angegebene Zeichenkette string oder standardmäßig »{}« durch von der Standardeingabe gelesene Namen
-l[zeilen] oder --max-lines [=zeilen]
Höchstens zeilen nicht leere Eingabezeilen dürfen pro Befehlszeile auftreten. Standardmäßig ist dieser Wert 1.
-n args oder --max-args=args
Höchstens args Argumente pro Befehlszeile dürfen verwendet werden.
-p oder --interactive
Bei jeder Befehlsausführung wird der Benutzer nach einer Bestätigung mit y gefragt.
-P max oder --max-procs=max
Höchstens max Prozesse dürfen zu einem Zeitpunkt laufen, der Standardwert ist 1. 0 bedeutet, dass so viel wie möglich Prozesse gleichzeitig laufen.
-r oder --no-run-if-empty
Wenn die Standardeingabe nur aus Leerzeichen besteht, wird der Befehl nicht gestartet.
-s max oder --max-chars=max
Höchstens max Zeichen pro Befehlszeile dürfen verwendet werden.
-v oder --verbose
Die Befehlszeile wird an der Standardfehlerausgabe vor der Ausführung ausgegeben.
-x oder --exit
Beendet den Befehl, wenn die maximale Länge der Befehlszeile, wie von der Option -s festgelegt, überschritten wird
Tab. 4.50: Optionen des Befehls xargs
Im folgenden Beispiel werden alle Dateien des Verzeichnisses /home nach dem Muster Quote durchsucht und die Übereinstimmungen in die Datei ausgabe geschrieben: $ find /home -print | xargs grep Quote > ausgabe &
157
Dateien und Verzeichnisse bearbeiten
4.1.12
magnum
Dateien und Verzeichnisse mit dem Konqueror verwalten
Wenn Sie in der Programmleiste von KDE auf das Symbol klicken, wird das Dateiverwaltungssystem Konqueror mit der Ansicht Ihres Homeverzeichnisses gestartet:
Bild 4.1: Der Dateimanager und Webbrowser Konqueror
Eine Baumansicht erhalten Sie, wenn Sie auf das Symbol rand klicken:
am linken Fenster-
Bild 4.2: Baumansicht des Konquerors
Weitere Einstellungen, um die Ansicht zu verändern, können Sie im Menü ANSICHT durchführen, wie zum Beispiel die Änderung der Symbolgröße:
158
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Bild 4.3: Ansicht im Konqueror festlegen
Auch im Menü EINSTELLUNGEN können persönliche Anpassungen vorgenommen werden, zum Beispiel die Einrichtung des Konquerors:
Bild 4.4: Menü EXTRAS des Konquerors
Sie erhalten bei dieser Auswahl eine weitere Dialogbox, in der verschiedene Einstellungen zum Konqueror festgelegt werden können:
Bild 4.5: Den Konqueror einrichten
159
magnum
Dateien und Verzeichnisse bearbeiten
Darüber hinaus ist es möglich, die Art der Anzeige für Dateien und Verzeichnisse über die Symbolleiste zu steuern:
Bild 4.6: Ansichten der Dateien und Verzeichnisse auswählen
Die Text-Ansicht entspricht der Anzeige des Befehls ls
-l:
Bild 4.7: Die Text-Ansicht des Konquerors
Dateien und Verzeichnisse anlegen Wenn Sie mit der rechten Maustaste auf die leere Anzeigefläche des Verzeichnisses klicken, erhalten Sie ein Kontextmenü, mit dem Sie die Möglichkeit haben, neue Dateien, Verzeichnisse und Gerätedateien zu erstellen, zu kopieren und zu verschieben:
160
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Bild 4.8: des Konquerors
Wenn Sie die Option ORDNER wählen, müssen Sie nur noch den Namen des Verzeichnisses eingeben und mit OK bestätigen:
Bild 4.9: Verzeichnis im Konqueror anlegen
Wählen Sie die Option DATEI, dann müssen Sie detaillierte Angaben zum Dateityp machen, zum Beispiel TEXTDATEI:
Bild 4.10: Neue Datei im Konqueror anlegen
Anschließend muss wieder der Name der Datei eingegeben und bestätigt werden:
Bild 4.11: Neue Textdatei anlegen
Dateien und Verzeichnisse kopieren, verschieben und umbenennen Wenn Sie mit der rechten Maustaste auf einen Dateinamen im Konqueror klicken, erhalten Sie ein Kontextmenü, mit dessen Hilfe Sie die Datei kopieren, umbenennen, komprimieren, löschen usw. können. Alternativ können Sie die Datei auch mit der Maus markieren und das Menü BEARBEITEN des Konquerors verwenden:
161
Dateien und Verzeichnisse bearbeiten
magnum
Bild 4.12: Eine Datei im Konqueror bearbeiten
Wenn Sie eine Datei oder ein Verzeichnis kopieren, können Sie diese wieder mit Hilfe der rechten Maustaste in ein anderes Verzeichnis einfügen bzw. alternativ die Option KOPIEREN NACH verwenden:
Bild 4.13: Eine kopierte Datei einfügen
Wenn Sie mehrere Dateien auf einmal kopieren, löschen oder verschieben möchten, dann klicken Sie zuerst mit gedrückter (Strg)-Taste auf die erste Datei und markieren anschließend mit der Maus bei weiterhin gedrückter (Strg)-Taste die übrigen Dateien. Wenn die zu markierenden Dateien alle in einem Block zusammenstehen, können Sie auch nach dem Markieren der ersten Datei die Taste (ª) verwenden und dann auf die letzte Datei klicken. Die meisten Aktionen sind auch mit Hilfe von Tastaturkürzeln durchführbar. Eine Datei kann zum Beispiel mit (Strg)+(c) kopiert, mit (Strg)+(v) eingefügt und mit (Strg)+(x) ausgeschnitten werden. Weitere Tastenkombinationen können Sie den Menüs entnehmen, hinter den Optionen stehen häufig die entsprechenden Tastenkombinationen.
162
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Die rechte Maustaste auf ein Verzeichnis erzeugt ein ähnliches Kontextmenü, zusätzlich können Sie hier noch ein neues Verzeichnis im markierten Verzeichnis erstellen:
Bild 4.14: Ein Verzeichnis im Konqueror bearbeiten
Dateien und Verzeichnisse löschen Wenn Sie eine Datei oder ein Verzeichnis mit Hilfe des Kontextmenüs löschen (siehe Abbildung 4.15), werden Sie sicherheitshalber nochmals um Bestätigung gebeten, damit Sie nicht versehentlich die falsche Datei oder das falsche Verzeichnis löschen (siehe Abbildung 4.16):
Bild 4.15: Eine Datei oder ein Verzeichnis löschen
163
Editoren und Werkzeuge
magnum
Bild 4.16: Löschbestätigung des Konquerors
4.2 Editoren und Werkzeuge In diesem Abschnitt wird der klassische Unix- und Linux-Befehlszeileneditor vi vorgestellt. Anschließend werden Sie in die Grundlagen des Streameditors sed und des Befehls awk eingeführt.
4.2.1
Der Editor vi
Dieser Befehl ist ein sehr mächtiger konsolenorientierter Texteditor. Er steht normalerweise auf jedem Unix- und Linux-System zur Verfügung. An dieser Stelle sollen nur kurz die wichtigsten Funktionen des vi erläutert werden, da eine ausführliche Erklärung den Umfang des Buchs sprengen würde. Natürlich gibt es unzählige Texteditoren unter Unix und Linux, wie zum Beispiel emacs, joe, elvis oder den KDE-Editor kedit. Allerdings stehen diese in der Regel auf alten Unix- oder nicht vollständig installierten Linux-Systemen oder im Single-User-Modus nicht zur Verfügung. Besonders bei der Reparatur eines beschädigten Systems ist es in der Regel erforderlich, auf einen einfachen Editor zugreifen zu können. Der Texteditor vi kennt drei Betriebsmodi:
쮿
Befehlsmodus
쮿
Eingabemodus
쮿
Befehlszeilenmodus
Bild 4.17: Die Betriebsmodi des vi
164
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl wird folgendermaßen gestartet: $ vi dateiname
Wenn Sie beim Aufruf keinen Dateinamen angeben, müssen Sie der neu angelegten Datei vor dem Speichern einen Namen zuweisen. Standardmäßig befinden Sie sich jetzt im Befehlsmodus. Im Befehlsmodus werden aus Buchstabenkombinationen bestehende Befehle erwartet. Sie können im Befehlsmodus keinen Text eingeben. Mit den nachfolgenden Befehlen wechseln Sie in den Eingabemodus und können dann Text erfassen. Wenn Sie die Taste (Esc) drücken, gelangen Sie aus dem Eingabemodus wieder zurück in den Befehlsmodus. Die wichtigsten Befehle, um in den Eingabemodus zu gelangen, sind: Befehl
Funktion
a
Hinter dem Cursor einfügen
A
Am Zeilenende einfügen
i
Vor dem Cursor einfügen
I
Am Zeilenanfang einfügen
o
Eine Zeile oberhalb des Cursors einfügen
O
Eine Zeile unterhalb des Cursors einfügen
Tab. 4.51: Befehle, um Text hinzuzufügen
Die wichtigsten Befehle, um Text zu löschen, sind: Befehl
Funktion
x
Lösche ein Zeichen
dw
Lösche ein Wort
dd
Lösche eine Zeile
D
Lösche bis zum Zeilenende
d0
Lösche bis zum Zeilenanfang
dG
Lösche bis zum Dateiende
Tab. 4.52: Befehle, um Text zu löschen
165
Editoren und Werkzeuge
Die wichtigsten Befehle, um sich im Text zu bewegen, sind: Befehl
Funktion
j
Den Cursor nach unten bewegen (oder die Taste (¼))
k
Den Cursor nach oben bewegen
h
Den Cursor nach links bewegen
l
Den Cursor nach rechts bewegen
0
Sich an den Zeilenanfang bewegen
$
Sich ans Zeilenende bewegen
G
Sich ans Dateiende bewegen
w
Ein Wort vorwärts gehen
b
Ein Wort zurückgehen
Tab. 4.53: Befehle, um sich im Text zu bewegen
Die wichtigsten Befehle, um Text zu kopieren und einzufügen, sind: Befehl
Funktion
Y
Aktuelle Zeile in den Textpuffer schreiben
3Y
3 Zeilen in den Puffer schreiben
p
Unterhalb des Cursors einfügen
P
Oberhalb des Cursors einfügen
Tab. 4.54: Befehle, um Text zu kopieren und einzufügen
Die wichtigsten Befehle, um Text zu ändern und zu suchen, sind: Befehl
Funktion
cw
Ein Wort ändern
4cw
4 Worte ändern
C
Eine Zeile ändern
r
Ein Zeichen ersetzen
R
Eine Zeile überschreiben
Tab. 4.55: Befehle, um Text zu ändern und zu suchen
166
magnum
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Befehl
Funktion
u
Letzte Änderung rückgängig machen
.
Letzte Änderung wiederholen
n
Letzte Suche wiederholen
N
Letzte Suche in umgekehrter Richtung wiederholen
/ausdruck
Vorwärts nach ausdruck suchen
?ausdruck
Rückwärts nach ausdruck suchen
Tab. 4.55: Befehle, um Text zu ändern und zu suchen (Forts.)
Der Befehl vi kennt genau wie der Befehl grep oder der Befehl awk reguläre Ausdrücke (regular expressions). Mit deren Hilfe kann die Suche besser eingeschränkt werden. Sie können als ausdruck beim Suchen einen regulären Ausdruck verwenden. Die wichtigsten Befehle, um Text zu speichern und zu laden, sind: Befehl
Funktion
:w
Speichern
:w
datei
:w!
datei
Speichern unter dem Namen datei Speichern unter dem Namen datei erzwingen
:wq
Speichern und beenden (entspricht der Eingabe ZZ)
:q
Beenden, ohne zu speichern
:q!
Beenden erzwingen, ohne zu speichern
:e!
Aktuelle Datei neu laden
:e
datei
Die Datei datei zum Editieren laden
Tab. 4.56: Befehle, um Text zu speichern und zu laden
Der Befehl kennt sehr viele Einstellungen, mit deren Hilfe die Arbeit mit dem erleichtert werden kann:
vi
167
magnum
Editoren und Werkzeuge
Die wichtigsten Befehle, um Text zu speichern und zu laden, sind: Befehl
Funktion
:set nu
Zeilennummern anzeigen
:set nonu
Keine Zeilennummern anzeigen
:set all
Alle Einstellungen anzeigen
:set list
Unsichtbare Zeichen anzeigen
:set tabstop=4
Die Tabulatorweite auf 4 Zeichen setzen
:set wm=7
Die Zeilen um 7 Leerzeichen vom rechten Rand einrücken
:set autoindent
Automatische Einrückung aktivieren
Tab. 4.57: Die wichtigsten Einstellungen des vi
Wenn die Einstellungen dauerhaft erhalten bleiben sollen, dann sollten diese im Homeverzeichnis in eine Datei mit der Bezeichnung .exrc eingegeben werden. Diese Datei wird beim Aufruf des vi gelesen, sofern sie vorhanden ist.
4.2.2
Der Editor joe
Dieser Editor ist eine Alternative für diejenigen, denen vi zu kryptisch bleibt. Auch hier wird wieder nur kurz auf die wesentlichsten Merkmale des Editors eingegangen. Der Befehl wird folgendermaßen gestartet: $ joe dateiname
Wenn Sie beim Aufruf keinen Dateinamen angeben, müssen Sie der neu angelegten Datei vor dem Speichern einen Namen zuweisen. Mit diesem Editor können Sie dann einfach loslegen und Ihren Text erfassen und sich auf die bekannte Weise mit den Cursortasten im Text bewegen und den Text mit den Tasten (æ__) und (Entf) korrigieren. Tastaturbefehle werden immer mit der Taste (Strg) ausgelöst, bei manchen Tastaturbefehlen müssen Sie zuerst die Tastenkombination (Strg)+(k) eingeben, gefolgt von einem weiteren Buchstaben. Die Tastenkombination (Strg)+(k), dann (k) loslassen und (x) drücken, speichert und beendet zum Beispiel die Datei. Wenn Sie die Taste (Esc) drücken, gelangen Sie aus dem Eingabemodus wieder zurück in den Befehlsmodus.
168
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Die wichtigsten Tastaturbefehle des Editors sind: Befehl
Funktion
(Strg)+(k)+(x)
Datei speichern und beenden
(Strg)+(k)+(s)
Datei speichern
(Strg)+(k)+(d)
Datei speichern
(Strg)+(k)+(q)
Datei ohne Speichern beenden
Strg)+(k)+(h)
Hilfe anzeigen
(Strg)+(a)
An den Zeilenanfang springen
(Strg)+(e)
Ans Zeilenende springen
(Strg)+(p)
Eine Zeile nach oben gehen (oder Cursortaste nach oben verwenden)
(Strg)+(n)
Eine Zeile nach unten gehen (oder Cursortaste nach unten verwenden)
(Strg)+(f)
Ein Zeichen weitergehen (oder Cursortaste nach rechts verwenden)
(Strg)+(b)
Ein Zeichen zurückgehen (oder Cursortaste nach links verwenden)
(Strg)+(v)
Eine halbe Bildschirmseite nach unten springen (oder (Bild½)-Taste verwenden)
(Strg)+(u)
Eine halbe Bildschirmseite nach oben springen (oder (Bild¼)-Taste verwenden)
(Strg)+(k)+(u)
Zur ersten Zeile springen
(Strg)+(k)+(v)
Zur letzten Zeile springen
(Strg)+(h)
Zeichen links vom Cursor löschen (oder (æ__)-Taste verwenden)
(Strg)+(d)
Zeichen rechts vom Cursor löschen (oder (Entf)-Taste verwenden)
(Strg)+(y)
Ganze Zeile löschen
(Strg)+(j)
Restliche Zeile bis zum Ende löschen
(Strg)+(_)
Letzte Aktion rückgängig machen
(Strg+(k+(j
Formatiert einen Absatz, der durch je eine Leerzeile ober- und unterhalb gekennzeichnet ist, auf eine Breite von 70 Zeichen
(Strg)+(k)+(.)
Einen Absatz einrücken
(Strg)+(k)+(,)
Einrückung des Absatzes aufheben
(Strg)+(k)+(f)
Eingabe eines Suchbegriffs
Tab. 4.58: Tastaturbefehle des Editors joe
169
magnum
Editoren und Werkzeuge
Befehl
Funktion
(Strg)+(l)
Begriff weitersuchen
(Strg)+(k)+(l)
Eingabe der Zeilennummer, auf die gesprungen werden soll
(Strg)+(k)+(b)
Markieren des Anfangs eines Blocks
(Strg)+(k)+(k)
Markieren des Endes eines Blocks
(Strg)+(k)+(c)
Block an die Stelle kopieren, an der sich der Cursor befindet
(Strg)+(k)+(m)
Block an die Stelle verschieben, an der sich der Cursor befindet
(Strg)+(k)+(y)
Block löschen
(Strg)+(k)+(r)
Angabe einer Datei, die an der aktuellen Cursorposition eingefügt werden soll
(Strg)+(k)+(e)
Angabe einer Datei, die zusätzlich editiert werden soll
(Strg)+(k)+(n)
Zwischen zwei zu editierenden Dateien umschalten
(Strg)+(t)
Anzeige der Optionen; diese können mit den Pfeiltasten angesteuert und dort durch Drücken auf die (¢)-Taste ein- bzw. ausgeschaltet werden
(Strg)+(k)+(')
Ein Shellfenster im Editor öffnen
Tab. 4.58: Tastaturbefehle des Editors joe (Forts.)
Sollten bei Ihnen die Umlaute nicht im Editor angezeigt werden, starten Sie den Editor mit der Option -asis: joe -asis dateiname.
4.2.3
Der Streameditor sed
Das Programm bzw. der Streameditor sed kann dazu verwendet werden, Daten in Dateien zu editieren, ohne diese Dateien in einem interaktiven Editor wie zum Beispiel dem vi zu öffnen. Eine Datei kann dadurch direkt an der Befehlszeile geändert oder bearbeitet werden, wobei die Ausgabe standardmäßig am Bildschirm erfolgt. Auf diese Weise können ständig wiederkehrende Editieraufgaben schnell ausgeführt werden. Der Befehl kann generell auch dazu benutzt werden, die Ausgaben eines Programms zu bearbeiten und an ein anderes Programm weiterzugeben. Dieser Abschnitt ist eine Einführung in den Streameditor daher nur die wichtigsten Eigenschaften des Programms.
sed
und behandelt
Der Editor sed verändert den Inhalt der Quelldatei nicht, daher muss die Ausgabe, die gespeichert werden soll, in eine neue Datei umgelenkt werden. Der Editor lässt sich gut dazu verwenden, dieselben Änderungen rasch für mehrere Dateien vorzunehmen. Er wird auch in Skripten gerne verwendet, um Dateiinhalte einzulesen und zu bearbeiten. Die Syntax des Befehls lautet: $ sed [-option(en)] '[adresse] befehl' datei(en) [> neudatei]
170
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl sed wird häufig auch gemeinsam mit dem Pipe-Symbol verwendet, um die Ausgabe von Befehlen zu verändern, zum Beispiel: $ ls -l | sed (...)
Mit Hilfe von Optionen wird das Verhalten von folgende Optionen:
sed
gesteuert. Der Befehl kennt
Option
Beschreibung
-e skript oder --expression= skript
Ermöglicht, dass dieselbe Befehlszeile mehrfach mit verschiedenen Befehlen editiert wird
-f skript oder --file=skript Fügt die Inhalte der Skriptdatei den auszuführenden Befehlen hinzu -i[suffix] oder --in-place=[suffix]
Editiert Dateien direkt und erstellt eine Backupdatei, wenn ein Suffix angegeben wurde
-l zahl oder --line-length=zahl
Definiert die gewünschte Länge des Zeilenumbruchs
-n oder --quiet oder --silent
Unterdrückt die standardmäßige Ausgabe und gibt nur die Zeilen aus, die mit dem Befehl p angegeben wurden
-r oder --regexp-extended
Verwendet erweiterte reguläre Ausdrücke im Skript
-s oder --separate
Betrachtet Dateien einzeln anstatt als einen einzigen langen Datenstrom
-u oder --unbuffered
Lädt minimale Datenmengen aus den Eingabedateien und leert die Ausgabepuffer häufiger
Tab. 4.59: Die Optionen des Befehls sed
Ähnlich wie der Befehl grep verwendet der Streameditor um die Suche nach Mustern zu unterstützen. Zeichen Beschreibung
Beispiel
Resultat
sed
reguläre Ausdrücke,
^
Markiert den Zeilenanfang
’^mein’
Sucht alle Zeilen, die mit «mein» beginnen
$
Markiert das Zeilenende
’mein$’
Findet alle Zeilen, die mit »mein« enden
.
Steht für genau ein beliebiges Zeichen
’m..n’
Findet alle Zeilen, die ein »m«, dann zwei beliebige Zeichen enthalten und mit »n« enden
*
Das vorherige Zeichen darf beliebig oft oder gar nicht vorkommen.
’m[a-z]*’
Findet alle Zeilen, die das Zeichen m, gefolgt von (k)einem oder mehreren Kleinbuchstaben, enthalten, zum Beispiel m, mr, moor, mein usw.
[ ]
Eines der Zeichen aus dem Bereich muss an dieser Stelle vorkommen.
’[Mm]ein’
Findet alle Zeilen, die »Mein« oder »mein« enthalten
[^]
Keines der Zeichen aus dem ’[^a-l]ein’ Findet alle Zeilen, die nicht die ZeichenBereich (oder der Liste) darf folge »a« bis »l« und dann »ein« enthalan dieser Stelle vorkommen. ten
Tab. 4.60: Die Optionen des Befehls sed
171
magnum
Editoren und Werkzeuge
Befehlsübersicht für sed Die folgende Tabelle enthält alle Befehle, die für die Arbeit mit sed verwendet werden können: Befehl
Beschreibung
d
Löschen einer Zeile
p
Ausgeben einer Zeile. Ohne die Option n wird die Zeile doppelt angezeigt.
a\
Anhängen eines Textes nach der angegebenen Zeile und Ausgabe auf die Standardausgabe
text text
Einfügen eines Textes vor der angegebenen Zeile und Ausgabe auf die Standardausgabe
c\
Ändern der angegebenen Zeilen, indem diese durch den Text ersetzt werden
i\
text s/alt/neu/befehl
Ersetzen des Suchmusters alt durch neu. Mögliche Befehle sind: (Leertaste) nur erstes Auftreten des Suchmusters in einer Zeile ersetzen g jedes Auftreten des Suchmusters in der Zeile ersetzen
zahl
p w datei
angegebenes Auftreten des Suchmusters ersetzen Ausgabe der Zeile, wenn eine Ersetzung stattfindet Zeile in die angegebene Datei schreiben
Tab. 4.61: Die Befehle von sed
Zeilen löschen Der Befehl sed kann nach einem Muster innerhalb einer Datei suchen und alle Zeilen entfernen, die dieses Suchmuster enthalten. Anschließend werden die Ergebnisse am Bildschirm ausgegeben, wobei die Datei selbst unverändert bleibt. Die Syntax zum Löschen von Zeilen lautet: $ sed '/muster/d' datei
Im ersten Beispiel werden alle Zeilen aus der Datei Suchmuster root enthalten:
/etc/group
gelöscht, die das
$ sed ’/root/d’ /etc/group bin:x:1:bin,daemon daemon:x:2: sys:x:3: tty:x:5: disk:x:6: ...
Im nächsten Beispiel werden alle Zeilen der Ausgabe des Befehls das Suchmuster 3 enthalten:
ls
gelöscht, die
$ ls -l | sed ’/3/d’ insgesamt 10904 -rw-r--r-- 1 her users 26082 2004-04-12 18:51 aus -rw-r--r-- 1 her users 2 2000-07-14 14:19 bericht.txt -rw-r--r-- 1 her users 2551 2004-04-10 21:42 bun.jar -rw-r--r-- 1 her einkauf 0 2004-05-08 17:49 datei-neu
Der Befehl sed kann auch nur bestimmte Zeilen innerhalb einer Datei durchsuchen und alle diese Zeilen entfernen:
172
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Adresse
Beschreibung
sed 'x,yd' datei
Entfernt Zeile x bis Zeile y
sed 'xd' datei
Entfernt Zeile x
sed 'x,$d' datei
Entfernt Zeile x bis zur letzten Zeile
sed '$d' datei
Entfernt nur die letzte Zeile
Tab. 4.62: Die Adressierung von Zeilen des Befehls sed
Im folgenden Beispiel wird die Ausgabe des Befehls ls dem Befehl sed übergeben und aus der Ausgabe werden alle Zeilen ab Zeile 7 bis zur letzten Zeile entfernt. Das Ergebnis wird in eine neue Datei geschrieben: $ ls -l | sed ’7,$d’ > datei-neu
Zeilen ausgeben Mit Hilfe des Befehls p gibt sed alle Zeilen standardmäßig an der Standardausgabe aus. Dabei werden alle Zeilen mit dem Suchmuster doppelt angezeigt, und zwar zusätzlich zu allen anderen Zeilen der Datei. $ sed ’/muster/p’ datei
Um dieses Standardverhalten des Befehls sed im Zusammenhang mit dem Befehl p zu unterdrücken, wird die Option -n verwendet, zum Beispiel: $ sed -n ’/muster/p’ datei
In diesem Beispiel werden alle Zeilen der Datei /etc/group, die das Muster root enthalten, mit sed ausgegeben: $ sed -n '/root/p' /etc/group root:x:0: projekt-ag1:x:501:bmu,root einkauf:x:517:her,doo,root
Zeichenketten ersetzen Mit dem Befehl s ist es möglich, Zeichenketten zu ersetzen oder zu ergänzen, wobei das Ergebnis am Bildschirm ausgegeben wird. $ sed ’von,biss/alt/neu’ datei
Es ist möglich, von einer bestimmten Zeile bis zu einer anderen Zeile einen Ausdruck alt durch einen Ausdruck neu zu ersetzen. Im folgenden Beispiel wird die Zeichenkette EOL ans Ende jeder Zeile hinzugefügt und das Ergebnis an der Standardausgabe angezeigt: $ ls -l | sed ’s/$/ EOL/g’
Im nächsten Beispiel wird in der Datei /etc/passwd von Zeile 7 bis 15 der Buchstabe x durch den Großbuchstaben X ersetzt: $ sed '7,15s/x/X/' /etc/passwd
In diesem Beispiel wird nach einem oder mehreren Leerzeichen gesucht und die gefundenen Leerzeichen werden durch einen einzigen Doppelpunkt ersetzt: $ ls -l | sed ’s/ */:/g’
173
magnum
Editoren und Werkzeuge
Im folgenden Beispiel führt der Befehl sed mehrere Editierfunktionen in derselben Befehlszeile aus. Dazu wird die Option -e verwendet: $ ls -l | sed -e ’s/May/MAY/g’ -e ’s/Jun/JUNE/g’
In diesem Beispiel wird die Ausgabe des Befehls ls MAY und statt Jun JUNE ausgegeben wird. Im letzten Beispiel wird am Anfang der Datei am Ende der Text »Ende« ausgegeben:
-l so
verändert, dass statt May
/etc/passwd
der Text »Anfang« und
$ sed -e '1i\ $a\ <Ende>' /etc/passwd
Der Befehl sed kennt genau wie der Befehl grep oder der Befehl awk reguläre Ausdrücke (regular expressions). Mit deren Hilfe kann die Suche besser eingeschränkt werden. Sie können als Suchmuster einen regulären Ausdruck verwenden.
4.2.4
Der Befehl awk
Der Befehl awk ist ein Textbearbeitungsbefehl, mit dessen Hilfe Datenspalten manipuliert und Berichte erzeugt werden. Dazu durchsucht er eine Datei oder die Eingabe von der ersten bis zur letzten Zeile nach Zeilen, die mit einem bestimmten Suchmuster übereinstimmen, und führt für diese Zeilen die gewünschten Aktionen durch. Dieser Abschnitt stellt nur eine Einführung zum Befehl awk dar. Über dieses Programm und seine umfangreichen Einsatzmöglichkeiten wurden ausführliche Bücher verfasst. Zu den grundlegenden Anwendungsmöglichkeiten des Befehls gehören das Ändern von Datenformaten, das Umsortieren von Spalten und das Hinzufügen von Text. Genau wie der Befehl sed verändert awk die Originaldatei nicht, sondern nur deren Ausgabe. Der Befehl leitet seinen Namen aus den Anfangsbuchstaben der Nachnamen seiner Autoren ab: Alfred Aho, Peter Weinberger und Brian Kernighan. Ende der achtziger Jahre erschien eine neue Version von awk, die auf alten UnixSystemen den Namen nawk erhalten hat. In diesem Abschnitt wird nur die neuere Version erläutert. Es gibt auch eine GNU-Version von awk, die gawk genannt wird und auf dem neueren awk basiert und die unter Linux läuft. Unter SUSE Linux ist der Befehl awk zum Beispiel nur ein symbolischer Link auf den Befehl gawk. Der Befehl awk hat folgende Eigenschaften:
174
쮿
Die Eingabedaten werden automatisch in Zeilen und Felder gegliedert.
쮿
Der Befehl kennt arithmetische und String-Operatoren, Gleitpunkt- und String-Variablen sowie Schleifkonstrukte und Bedingungsabfragen.
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
쮿
Es ist möglich, innerhalb des Befehls Linux-Befehle auszuführen und die Resultate weiterzuverarbeiten.
Die Syntax des Befehls lautet: $ awk [-option(en)] '{ aktion }' datei
Die wichtigsten Optionen des Befehls sind: Option
Beschreibung
-f datei oder --file=datei
Die Befehle für awk werden aus einer Datei anstatt von der Standardeingabe gelesen.
-F trenner oder --fieldseparator=trenner
Verwendet das angegebene Feldtrennzeichen. Dies kann alternativ durch die Variable FS erfolgen.
-v var=wert oder --assign=var=wert
Weist einen Wert einer Variablen zu. Damit können Zuweisungen vor Ausführung des Skripts vorgenommen werden.
Tab. 4.63: Die Optionen des Befehls gawk bzw. awk
Der Befehl besteht aus seinem Befehlsnamen sowie Anweisungen, die in Apostrophzeichen und geschwungene Klammern eingefasst werden, und dem Namen der Eingabedatei. Wird keine Eingabedatei angegeben, dann wird die Eingabe der Standardeingabe verwendet.
Recordvariablen des Befehls awk Der Befehl awk kennt folgende Recordvariablen: Variable
Funktion
$0
Aktuelle Zeile
$1 - $n
Erstes bis ntes Feld
NF
Anzahl der Felder im aktuellen Datensatz
NR
Nummer des aktuellen Datensatzes bzw. Zeilennummer. Bei mehreren Dateien wird diese weitergezählt.
FNR
Nummer des aktuellen Datensatzes in der aktuellen Datei
FILENAME
Name der aktuell eingelesenen Datei
Tab. 4.64: Recordvariablen von awk
Im nächsten Beispiel wird die Ausgabe des Befehls ls -l dem Befehl awk übergeben. Der Befehl führt für jede übergebene Zeile die Aktion print aus, so dass die Ausgabe der Zeile am Bildschirm erfolgt. $ ls -l | awk ’{print $0}’ insgesamt 10904 drwxr-xr-x 3 her users drwxr-xr-x 2 her users ...
4096 2004-01-18 02:37 Desktop 4096 2003-01-06 16:20 Documents
175
magnum
Editoren und Werkzeuge
Das Ergebnis dieses Befehls entspricht ganz genau der Ausgabe des Befehls ls Die Umsetzung lässt sich mit Hilfe der folgenden Abbildung nachvollziehen:
-l.
Bild 4.18: Die Felder des Befehls awk
Der Befehl awk unterteilt die Eingabedatei bzw. die Übergabe von der Standardeingabe in Zeilen oder Records und diese wiederum in Felder oder Wörter. Er ordnet diese Zeilen und Felder automatisch so genannten Recordvariablen zu, die dann bei der Ausführung des Befehls verwendet und ausgegeben werden können. Standardmäßig werden Leerzeichen oder Tabulatorzeichen als Trennzeichen zwischen Feldern verwendet. Die den Feldern zugewiesenen Variablennamen bestehen aus einem Dollarzeichen ($) gefolgt von der Feldnummer, wobei von links nach rechts gezählt wird. Der Variablenname $1 enthält also den Inhalt von Feld 1 und die Variable $2 enthält den Inhalt von Feld 2 usw. Die vollständige Zeile erhält den Variablennamen $0. Im nächsten Beispiel werden die Variablennamen der Felder zusammen mit der Aktion »Ausgeben« verwendet, so dass der Befehl awk bestimmte Daten anzeigt, wie den Eigentümer, die Größe und den Namen einer Datei: $ ls -l | awk ’{print $3 $5 $9}’ her4096Desktop her4096Documents her34297abb2-4.png ...
Standardmäßig enthält eine Ausgabe keine Leerzeichen zwischen den drei Feldern. Daher werden im nächsten Beispiel bei der Ausgabe Leerzeichen zwischen die Felder gesetzt: $ ls -l | awk ’{print $3, $5, $9}’ her 4096 Desktop her 4096 Documents her 34297 abb2-4.png ...
Zwischen den Feldern stehen nun Leerzeichen in der Ausgabe, die Felder sind aber noch nicht exakt angeordnet. Dies kann mit Hilfe von Tabulatoren erreicht werden. Im folgenden Beispiel werden zwischen den Feldern in Anführungszeichen Tabulatoren eingegeben: $ ls -l | awk ’{print $3 " her 4096 Desktop her 4096 Documents her 4297 abb2-4.png$ ...
" $5 "
" $9}’
Statt des Tabulatorzeichens kann zwischen den Anführungszeichen auch die Angabe »\t« stehen.
176
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl awk kann Felder auch umsortieren, wenn das Datenformat geändert werden soll. Im nächsten Beispiel wird zuerst der Dateiname, dann die Dateigröße und schließlich der Dateibesitzer ausgegeben: $ ls -l | awk ’{print $9,$5,$3}’ Desktop 4096 her Documents 4096 her abb2-4.png 34297 her ...
Der Befehl awk kann sowohl die Felder neu anordnen als auch neuen Text zwischen die Felder hinzufügen. $ ls -l | awk '{print $9 " verwendet " $5 " Bytes"}' Desktop verwendet 4096 Bytes Documents verwendet 4096 Bytes abb2-4.png verwendet 34297 Bytes ...
Im folgenden Beispiel wird die Datei dat1 durchlaufen und pro Zeile werden die Anzahl der Worte und die Nummer der Zeile ausgegeben: $ cat dat1 Dies ist die erste Zeile und es gibt auch eine zweite Zeile $ awk '{ print "Dieser Text hat " NF " Worte in Zeile " NR }' dat1 Dieser Text hat 5 Worte in Zeile 1 Dieser Text hat 7 Worte in Zeile 2
Die Anweisungen BEGIN und END des Befehls awk Bei den Anweisungen BEGIN und END handelt es sich um fest definierte Vorgaben des Befehls awk. Ein awk-Befehl wird dadurch in drei Teile unterteilt, die aber nicht alle zwingend verwendet werden müssen:
쮿
Die Anweisung BEGIN bewirkt, dass ihre Aktionen vor dem Lesen des ersten Datensatzes ausgeführt werden.
쮿
Die Aktionen zwischen den Anweisungen Datensatz durchgeführt.
쮿
Die Anweisung END bewirkt, dass ihre Aktionen nach dem Lesen des letzten Datensatzes ausgeführt werden.
BEGIN
und
END
werden für jeden
In diesem Beispiel wird auf die Datei /etc/passwd zugegriffen. Das Feldtrennzeichen wird mit Hilfe der Variablen FS in der Anweisung BEGIN festgelegt: $ awk ' BEGIN { FS=":" } { print "Benutzer: " $1 ", Homeverzeichnis: " $6 } ' /etc/passwd Benutzer: root, Homeverzeichnis: /root Benutzer: bin, Homeverzeichnis: /bin Benutzer: daemon, Homeverzeichnis: /sbin Benutzer: lp, Homeverzeichnis: /var/spool/lpd ...
177
magnum
Editoren und Werkzeuge
Trennzeichen des Befehls awk Die Eingabe wird in Zeilen oder Records unterteilt, die durch ein so genanntes Zeilentrennzeichen oder Record-Separator RS getrennt sind. Standardmäßig ist RS das Zeichen New line, daher entspricht in der Regel eine Zeile einem Record. Jede Zeile besteht wiederum aus Feldern, die durch einen Field Separator FS voneinander getrennt sind. Standardmäßig sind Leerzeichen und Tabulatoren Feldtrennzeichen. Diese Vorgaben können mit Hilfe von Variablen geändert werden. Alternative Werte müssen den Variablen FS und RS in der Anweisung BEGIN zugeteilt werden, damit sie auch für den ersten Datensatz gelten. Die Variablen haben folgende Bedeutung: Variable
Funktion
FS
Feldtrennzeichen (field separator); kann auch mit der Option -F festgelegt werden
RS
Zeilentrennzeichen (record separator)
OFS
Ausgabefeld-Trennzeichen (output field separator)
ORS
Ausgabesatz-Trennzeichen (output record separator)
Tab. 4.65: Trennzeichen von awk
Strings des Befehls awk Strings werden in Hochkommata oder Anführungszeichen gefasst, um sie von Variablen abzugrenzen. Es ist möglich, innerhalb von Strings folgende EscapeSequenzen zu verwenden: Escape-Sequenz Funktion \a
Alarmton
\b
(æ__)
\f
Seitenvorschub (form feed)
\n
Neue Zeile (new line)
\r
Zeilenschaltung (carriage return)
\t
Horizontaler Tabulator
\v
Vertikaler Tabulator
\xzeichen
Zeichen mit Hexadezimalwert, zum Beispiel ist \x1B das ASCII-Zeichen (ESC)
\###
Zeichen mit Oktalwert ###, zum Beispiel ist \033 das ASCII-Zeichen (ESC)
\zeichen
Buchstäbliche Darstellung des Zeichens nach dem Backslash, auch wenn es sich um ein Metazeichen handelt
Tab. 4.66: Escape-Sequenzen von awk
178
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Im folgenden Beispiel werden zwischen den Feldern in Anführungszeichen Tabulatoren eingegeben: $ ls her her her ...
-l | awk ’{print $3 "\t" $5 "\t" $9}’ 4096 Desktop 4096 Documents 34297 abb2-4.png$
Reguläre Ausdrücke des Befehls awk Der Befehl awk verwendet wie sed reguläre Ausdrücke (regular expressions), allerdings in einer ausführlicheren Form. Außerdem werden diese immer in Schrägstriche einfasst. Es können folgende reguläre Ausdrücke verwendet werden: Ausdruck Beispiel
Bedeutung
.
/M...e/
Der Punkt steht für genau ein beliebiges Zeichen. Die Fundstellen für das Suchmuster im Beispiel könnten also Masse, Messe, Mette, Motte, Matte, Mitte, Miete usw. lauten.
*
/Mat.*/
Das vorangegangene Zeichen kann kein einziges Mal, einmal oder beliebig oft im Suchmuster vorkommen. Die Fundstellen für das Suchmuster im Beispiel könnten also Math, Matt, Matte, Mathematik, Mat usw. lauten.
[ ]
/M[oaei]tte/ Die eckigen Klammern stehen für genau ein beliebiges Zeichen, das
im Auswahlbereich der eckigen Klammern enthalten sein muss. Die Fundstellen für das Suchmuster im Beispiel müssen also Matte, Motte, Mette und Mitte lauten.
[^ ]
/M.[^es].e/
Die Zeichen des Auswahlbereichs in den eckigen Klammern, die wiederum für genau ein beliebiges Zeichen stehen, dürfen nicht vorkommen. Die Fundstellen für das Suchmuster im Beispiel könnten also Mette, Motte, Matte, Mitte, usw., aber nicht Masse, Messe, Miete usw. lauten.
^
/^Masse/
Die gefundene Zeile muss am Zeilenanfang das Suchmuster enthalten. Die Fundstellen für das Suchmuster im Beispiel müssen also am Anfang einer Zeile gesucht werden.
$
/Masse$/
Die gefundene Zeile muss am Zeilenende das Suchmuster enthalten. Die Fundstellen für das Suchmuster im Beispiel müssen also am Ende einer Zeile gesucht werden.
+
/M[as]+/
Der vorangegangene Ausdruck kann 1 bis n Mal wiederholt werden, zum Beispiel Mas, Masas, Masasas usw.
?
/M[as]?/
Der vorangegangene Ausdruck kann 0 bis 1 Mal wiederholt werden, zum Beispiel M oder Mas.
..|..
/root|her/
Darstellung einer ODER-Verknüpfung, zum Beispiel root oder her
(...)
/(+|-)?/
Gruppierung von mehreren Zeichen zu einem Ausdruck, zum Beispiel + oder – kann 0 oder 1 Mal vorkommen
\zeichen
\\
Maskierung von Metazeichen, zum Beispiel wird der Backslash als Backslash gelesen
Tab. 4.67: Reguläre Ausdrücke des Befehls awk
179
magnum
Editoren und Werkzeuge
Suchmuster für Records des Befehls awk Der Befehl awk kann Suchmuster auswerten, um bestimmte Zeilen anzusprechen. Dazu werden reguläre Ausdrücke und/oder Vergleiche verwendet. Die Syntax zum Verwenden dieser Suchmuster lautet: $ awk '... suchmuster { aktion(en) } suchmuster { aktion(en) } ...'
Genau wie bei dem Befehl erfolgen:
sed
kann die Adressierung über reguläre Ausdrücke
Ausdruck
Funktion
/reg-ausdr/
Alle Zeilen, die den angegebenen regulären Ausdruck enthalten
/reg-ausdr1/, /reg-ausdr2/
Von der ersten Zeile, die den ersten angegebenen regulären Ausdruck enthält, bis zur ersten Zeile, die den zweiten angegebenen regulären Ausdruck enthält. Dies kann auch mehrmals durchgeführt werden.
Tab. 4.68: Escape-Sequenzen von awk
Im folgenden Beispiel werden alle Dateien mit Namen und Größe ausgegeben, die Verzeichnisse sind, also den Buchstaben »d« am Anfang des Rechteblocks ausweisen: $ ls -l | awk '/^d/ { print $9, $5 }'
Es können nicht nur reguläre Ausdrücke, sondern auch Vergleichsoperatoren verwendet werden, um nur bestimmte Zeilen anzusprechen. Dazu gehören: Operator
Funktion
<
Kleiner als
>
Größer als
<=
Kleiner gleich als
>=
Größer gleich als
==
Gleich
!=
Ungleich
string ~ /reg-ausdr/
Der angegebene reguläre Ausdruck ist im angegebenen String enthalten.
string !~ /reg-ausdr/ Der angegebene reguläre Ausdruck ist im angegebenen String nicht enthalten. !
Der angegebene Vergleich wird negiert.
&&
Zwei oder mehr Vergleiche werden über eine UND-Verknüpfung verbunden.
||
Zwei oder mehr Vergleiche werden über eine ODER-Verknüpfung verbunden.
Tab. 4.69: Vergleichsoperatoren von awk
180
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Im nächsten Beispiel werden alle Zeilen komplett ausgegeben ab Zeile Nr. 4: $ ls -l | awk ' NR > 2 { print $0 } '
Hier wird nur die erste Zeile ausführlich ausgegeben: $ ls -l | awk ' NR == 1 { print $0 } '
Im folgenden Beispiel werden alle Zeilen ausgegeben, von der ersten Zeile an, die einen Kleinbuchstaben enthält, bis zur ersten Leerzeile: $ ls -l | awk ' /[a-z]/,/^$/ { print $0 } '
In diesem Beispiel werden alle Zeilen von der fünften bis zur 15. ausgegeben: $ ls -l | awk ' NR>=5 && NR<=15 { print $0 } '
Hier werden alle Zeilen ausgegeben, die mehr als zwei Felder aufweisen: $ ls -l | awk ' NF > 2 { print $0 } '
Nachfolgend werden alle Zeilen aufgelistet, deren drittes Feld den Text »her« enthält: $ ls -l | awk ' $1 == "her" { print $0 } '
Im nächsten Beispiel werden alle Zeilen aufgeführt, deren drittes Feld entweder den Text »her« oder »doo« enthält: $ ls -l | awk ' $3 ~ /her|doo/ { print $0 } '
Nun werden alle Zeilen ausgegeben, die im ersten Feld weder den Buchstaben »d« noch ein »b« oder »c« enthalten: $ ls -l | awk ' $1 !~ /[bcd]/ { print $0 } '
Das nächste Beispiel gibt alle Zeilen aus, die mehr als vier Felder enthalten, und zwar ab Zeile 4: $ ls -l | awk ' NF >= 4 && NR > 3 { print $0 } '
Das letzte Beispiel zeigt alle Zeilen an, die mehr als 4 Felder enthalten, und zwar ab Zeile 4, oder alle Zeilen, bei denen das neunte Feld ein Tabulatorzeichen enthält: $ ls -l | awk ' (NF >= 4 && NR > 3) || $9 ~ /\t/ { print $0 } '
4.2.5
Dateien mit Hilfe von Editoren in KDE erstellen
Die grafische Oberfläche KDE bietet sehr viele verschiedene Editoren zur Erzeugung und Bearbeitung von Texten an. Zum einen können Sie das Hauptmenü öffnen und über die Menüfolge BÜROPROGRAMME - TEXTVERARBEITUNG diverse Textverarbeitungssoftware öffnen, wie zum Beispiel OpenOffice.org Writer, oder über die Menüfolge DIENSTPROGRAMME - EDITOR einen der folgenden Editoren wählen:
Bild 4.19: Editoren im Hauptmenü
181
Editoren und Werkzeuge
magnum
Die Auswahl der Programme ist jeweils abhängig vom Installationsumfang (vergleiche Kapitel 5). Zu den bekanntesten Editoren gehören neben gedit noch kate, kedit und scite. Des Weiteren gibt es viele verschiedene Editoren für verschiedene Aufgaben, zum Beispiel kile für die Bearbeitung von LaTEX-Texten, oder für die XML-Codierung oder spezielle Editoren für die integrierte Entwicklungsumgebung (IDE = Integrated Development Environment). Solche Editoren unterstützen den Anwender dann zusätzlich durch das Hervorheben von bestimmten Syntaxmerkmalen (Schlüsselwörter und andere Sprachelemente), das so genannte Syntax-Highlighting. Die Textbearbeitung mit einem Editor erfolgt analog zur Textbearbeitung in einem anderen Betriebssystem:
Bild 4.20: Texteditor gedit
Anschließend muss die Datei mit Hilfe des Menüs DATEI - SPEICHERN oder des Symbols SPEICHERN abgespeichert werden, wenn sie aufbewahrt werden soll:
Bild 4.21: Datei speichern
182
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
4.3 Links Links sind Verweise auf Dateien und gegebenenfalls auf Verzeichnisse. Durch die Vergabe von Links ist es möglich, von verschiedenen Stellen im Verzeichnisbaum aus auf dieselbe Datei oder dasselbe Verzeichnis zuzugreifen, ohne eine redundante Kopie zu erstellen, die außerdem nochmals denselben Speicherplatz verbraucht. Links sind auch eine Möglichkeit, die Originaldatei vor versehentlichem Löschen durch den Benutzer zu schützen, indem diese an einer Stelle steht, die dem Benutzer nicht zugänglich ist.
4.3.1
Hard Links
Ein Hard Link vergibt einer Datei einen zweiten Namen, wobei diese nicht kopiert wird, sondern einfach ein weiterer logischer Verweis auf einen vorhandenen Dateieintrag erzeugt wird. Die logischen Dateinamen von Hard Links verweisen immer auf denselben Eintrag in der Inode-Tabelle (vergleiche Kapitel 13). Einen Hard Link erzeugen Sie mit folgendem Befehl: $ ln quelldatei zieldatei
Der Befehl ln kennt folgende Optionen: Option
Bedeutung
-b oder --backup
Erstellt eine Backupdatei von jeder eventuell vorhandenen Zieldatei
-d oder --F oder --directory
Kann feste Verknüpfungen auf Verzeichnisse erzeugen. Diese Option kann nur root ausführen und sollte vermieden werden, um die Konsistenz des Dateisystems nicht zu gefährden.
-f oder --force
Löscht vorhandene Zieldateien
-i oder --interactive
Fragt nach, ob vorhandene Zieldateien überschrieben werden sollen
-n oder --no-dereference
Behandelt einen symbolischen Link auf ein Verzeichnis, als handele es sich um eine normale Datei; das heißt, symbolische Verknüpfungen werden ersetzt
-s oder --symbolic
Erzeugen eines symbolischen Links
-S oder --suffix=suffix
Hängt das Suffix suffix an Sicherheitskopien anstelle der Standardvorgabe Tilde (~) an
--target-directory=dir
Legt das Verzeichnis fest, in welchem die Links erzeugt werden sollen
-v oder --verbose
Gibt den Namen jeder Datei vor dem Verlinken aus
Tab. 4.70: Optionen des Befehls ln
In diesem Beispiel wird für die Datei prot ein Hard Link mit dem Namen prot1 erzeugt: $ $ $ $
ln prot prot1 ls -l prot* -rw-r--r-- 2 root other 65 May 3 10:31 prot -rw-r--r-- 2 root other 65 May 3 10:31 prot1
183
magnum
Links
Die Einträge, die der Befehl ls –l für die beiden Dateien ausgibt, sind absolut identisch, bis auf den logischen Dateinamen. Da beide Dateinamen dieselbe InodeNummer haben, verweisen sie auch auf dieselben Dateiinformationen. Die zweite Spalte der Ausgabe enthält den so genannten Link Counter, der pro Hard Link um 1 erhöht wird. Existieren für eine Datei Hard Links, so ist es nicht mehr möglich, den ursprünglichen Verweis auf die Originaldatei zu erkennen. Alle logischen Dateinamen verweisen einfach auf denselben Inode-Eintrag. Wenn Sie einen Hard Link löschen, wird die Zahl des Link Counters herabgesetzt, bis nur noch ein einziger Dateiname mit dem Link Counter 1 übrig ist. Wenn Sie diesen löschen, entspricht dies dem Löschen der Datei: Dateieintrag und -name werden entfernt. Ein Hard Link kann nur innerhalb derselben Partition zugewiesen werden, da für jede Partition die Inode-Nummern und die Inode-Tabelle (vergleiche Kapitel 13) separat verwaltet werden. Daher ist es auch nicht möglich, den Befehl mv für einen Hard Link über Partitionen hinweg auszuführen. Eine weitere Einschränkung ist, dass Hard Links normalerweise nicht für Verzeichnisse angelegt werden können bzw. sollten.
4.3.2
Symbolische Links
Ein symbolischer Link ist eine Datei, die als Daten nur den Namen und den Pfad der Originaldatei speichert, auf die sie verweist. Ein symbolischer Link hat im Gegensatz zum Hard Link auch einen eigenen Inode-Eintrag. Einen symbolischen Link können Sie wie folgt erzeugen: $ $ $ $
ln -s prot prots ls -l prot* -rw--r—r-- 1 root other 65 May 3 10:31 prot lrwxrwxrxw 1 root other 65 May 27 12:52 prots prot
Wenn Sie einen Befehl für den symbolischen Link absetzen, wird in Wirklichkeit die Originaldatei verwendet. Sie können symbolische Links nicht nur über Partitionen hinweg, sondern auch für Verzeichnisse verwenden. Wenn Sie den Befehl cp oder chmod ausführen, kopieren bzw. verändern Sie die Rechte für die Originaldatei, nicht für den Link. Die Befehle ls, rm und mv zeigen, löschen und verschieben hingegen den symbolischen Link, nicht die Originaldatei. Wenn Sie einen symbolischen Link löschen, hat dies keine Auswirkungen auf die Originaldatei. Wenn Sie die Originaldatei löschen, zeigt der Link ins Leere. Bei einem symbolischen Link haben Sie nur pro forma alle Rechte. Tatsächlich gelten die Rechte der Originaldatei, wenn Sie auf die Datei eine Operation ausführen möchten. Die folgende Tabelle enthält die wichtigsten Unterschiede zwischen Hard Links und symbolischen Links.
184
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Merkmal
Hard Link
Symbolischer Link
Partitionsübergreifend nein
ja
Inode-Eintrag
wie Originaldatei
eigener Inode-Eintrag
Link Counter
wird erhöht
bleibt 1
Originaldatei
nicht mehr erkennbar
bleibt erkennbar
Quelldatei
muss existieren
muss nicht existieren (Verweis erfolgt ins Leere)
Linkdatei
darf nicht existieren
wird überschrieben, wenn sie existiert
Eigene Datenblöcke
nein
ja, mit Pfad-/Dateinamen der Originaldatei
Anwendbar auf
nur normale Dateien
normale Dateien, Verzeichnisse und Gerätedateien
Wesen
anderer Name für gleiche Datei eigene Datei, die als Verweis dient
Tab. 4.71: Vergleich Hard Links und symbolische Links
4.3.3
Verknüpfungen in KDE erstellen
Das Erstellen von Verknüpfungen in KDE entspricht dem Anlegen von symbolischen Links. Dazu ziehen Sie mit gedrückter linker Maustaste eine Datei oder ein Verzeichnis aus einem Verzeichnis des Konquerors in ein anderes Verzeichnis oder auf den Desktop, der selbst auch wiederum nur ein Verzeichnis darstellt. Wählen Sie aus dem anschließend angezeigten Menü die Option HIERMIT VERKNÜPFEN, um einen symbolischen Link anzulegen:
Bild 4.22: Verknüpfung erstellen
Das Symbol der Verknüpfung auf dem Desktop wird mit einem kleinen schwarzen Pfeil markiert:
Bild 4.23: Verknüpfungssymbol
185
Dateien und Dateiinhalte suchen
magnum
4.4 Dateien und Dateiinhalte suchen Im letzten Abschnitt werden zwei Befehle zum Suchen von Dateien bzw. Dateiinhalten vorgestellt. Der Befehl find kann nach Dateien suchen und kennt sehr viele verschiedene Möglichkeiten, um die Suche einzugrenzen. Der Befehl grep sucht nach bestimmten Mustern in Dateien, die mit Hilfe von regulären Ausdrücken verfeinert werden können.
4.4.1
Der Befehl find
Mit Hilfe dieses Befehls können Sie eine Datei im Verzeichnisbaum suchen, wobei Sie bestimmte Suchkriterien festlegen können. Der Befehl führt eine rekursive Suche durch und gibt die gefundenen Dateien am Bildschirm aus. Die Befehlssyntax lautet: $ find suchpfad –suchkriterium/en [aktion(en)]
Der Suchpfad kann ein relativer oder absoluter Pfad sein, die Suchkriterien sollen die Suche eingrenzen und die Aktionen werden mit den gefundenen Dateien ausgeführt. Wenn Sie die Suche im Verzeichnis / starten, kann sie recht lange dauern, da sie im Wurzelverzeichnis beginnt und standardmäßig sämtliche Verzeichnisse durchsucht, einschließlich aller zurzeit gemounteten Geräte wie zum Beispiel CD-ROMs. Ein solcher Befehl kann auch die Systemleistung stark in Anspruch nehmen. Die Suchkriterien sind normalerweise über eine UND-Verknüpfung miteinander verbunden. Wenn Sie eine ODER-Verknüpfung verwenden möchten, dann geben Sie die Option –o zwischen den beiden Suchkriterien ein, die Sie mit ODER verbinden möchten. Es gibt eine ganze Reihe von Suchkriterien, die verwendet werden können: Suchkriterium
Bedeutung
-amin [+/-]i
Auf die Datei wurde zuletzt vor genau i Minuten oder vor mehr als i Minuten (Pluszeichen) oder vor weniger als i Minuten (Minuszeichen) zuletzt zugegriffen.
-anewer datei
Auf die Datei wurde zuletzt vor einem kürzeren Zeitpunkt zugegriffen, als das Änderungsdatum der Datei datei lautete. Diese Option wird von der Option -follow nur dann beeinflusst, wenn sie an der Befehlszeile nach der Option -follow eingegeben wird.
-atime [+/-]i
Nach einem bestimmten Zugriffsdatum in i Tagen (i * 24 Stunden) suchen. Wenn das Pluszeichen verwendet wird, wird nach Dateien gesucht, auf die vor mehr als i * 24 h zuletzt zugegriffen wurde, bei einem Minuszeichen nach Dateien, auf die vor weniger als i * 24 h zuletzt zugegriffen wurde. Wird kein Minus- oder Pluszeichen verwendet, wird nach Dateien gesucht, auf die zuletzt vor genau i * 24 h zugegriffen wurde.
Tab. 4.72: Die wichtigsten Suchkriterien des Befehls find
186
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Suchkriterium
Bedeutung
-cmin [+/-]i
Die Datei wurde zuletzt vor genau i Minuten oder vor mehr als i Minuten (Pluszeichen) oder vor weniger als i Minuten (Minuszeichen) zuletzt verändert.
-cnewer datei
Die Datei wurde zuletzt vor einem kürzeren Zeitpunkt geändert, als das Änderungsdatum der Datei datei lautete. Diese Option wird von der Option -follow nur dann beeinflusst, wenn sie an der Befehlszeile nach der Option -follow eingegeben wird.
-ctime [+/-]i
Nach einem bestimmten Änderungsdatum in i Tagen (i * 24 Stunden) suchen. Wenn das Pluszeichen verwendet wird, wird nach Dateien gesucht, die vor mehr als i * 24 h zuletzt geändert wurden, bei einem Minuszeichen nach Dateien, die vor weniger als i * 24 h zuletzt geändert wurden. Wird kein Minus- oder Pluszeichen verwendet, wird nach Dateien gesucht, die zuletzt vor genau i * 24 h geändert wurden.
-daystart
Zeiten werden vom Beginn des aktuellen Tages an berechnet und nicht 24 Stunden zuvor.
-depth
Vor dem Verzeichnis selbst wird der Inhalt von jedem Verzeichnis durchsucht.
-empty
Die Datei ist leer und entweder ein Verzeichnis oder eine reguläre Datei.
-follow
Den symbolischen Links folgen
-fstype typ
Nur in bestimmten Dateisystemtypen suchen. Gültige Dateisystemtypen sind unter anderem: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Wenn Sie für die Ausgabe die Option -printf mit der Angabe %F verwenden, werden die Dateisystemtypen auch ausgegeben.
-gid nummer
Suche nach der GID einer bestimmten Gruppe
-group gruppe
Nach einer bestimmten Gruppe suchen
-ilname muster
Entspricht der Suche von -lname, jedoch keine Unterscheidung von Großund Kleinschreibung
-iname muster
Entspricht der Suche von -name, jedoch keine Unterscheidung von Großund Kleinschreibung
-inum inodenr
Nach bestimmten Inode-Nummern suchen
-ipath muster
Entspricht der Suche von -path, jedoch keine Unterscheidung von Großund Kleinschreibung
-iregex muster
Entspricht der Suche von -regex, jedoch keine Unterscheidung von Großund Kleinschreibung
-links i
Nur nach Dateien mit einer Anzahl i von Links suchen
-lname muster
Es wird nach symbolischen Links gesucht, die auf Dateien weisen, deren Name mit dem angegebenen Suchmuster übereinstimmt. Dabei kann das Suchmuster Metazeichen enthalten, aber die Zeichen »/« und ».« werden nicht speziell behandelt.
-maxdepth zahl
Die Suche wird in ihrer Tiefe auf die angegebene Anzahl von Unterverzeichnisebenen eingeschränkt.
Tab. 4.72: Die wichtigsten Suchkriterien des Befehls find (Forts.)
187
Dateien und Dateiinhalte suchen
magnum
Suchkriterium
Bedeutung
-mindepth zahl
Die Suche beginnt in ihrer Tiefe erst ab der angegebenen Anzahl von Unterverzeichnisebenen.
-mmin [+/-]i
Die Daten der Datei wurden zuletzt vor genau i Minuten oder vor mehr als i Minuten (Pluszeichen) oder vor weniger als i Minuten (Minuszeichen) zuletzt verändert.
-mtime [+/-]i
Nach einem bestimmten Änderungsdatum in i Tagen (i * 24 Stunden) suchen. Wenn das Pluszeichen verwendet wird, wird nach Dateien gesucht, die vor mehr als i * 24 h zuletzt geändert wurden, bei einem Minuszeichen nach Dateien, die vor weniger als i * 24 h zuletzt geändert wurden. Wird kein Minus- oder Pluszeichen verwendet, wird nach Dateien gesucht, die zuletzt vor genau i * 24 h geändert wurden.
-mount
Nur im angegebenen Dateisystem suchen
-name muster
Nach einem bestimmten Dateinamen suchen. Metazeichen können im Muster verwendet werden, müssen aber vor der Shell maskiert werden.
-newer datei
Nach Dateien suchen, die neuer sind als die angegebene Datei. Diese Option wird von der Option -follow nur dann beeinflusst, wenn sie an der Befehlszeile nach der Option -follow eingegeben wird.
-noleaf
Normalerweise enthält jedes Verzeichnis zwei Unterverzeichnisse weniger, als der Hard Link Counter anzeigt. Diese Hard Links stehen für das Verzeichnis selbst und dessen übergeordnetes Verzeichnis, die nicht durchsucht werden müssen. Diese Option unterdrückt diese Optimierung, was bei der Suche in Dateisystemen Sinn macht, die keine Unix- bzw. LinuxDateisysteme sind, zum Beispiel CD-ROM- und MS-DOS-Dateisysteme.
-nouser
Nach Dateien ohne Benutzer suchen, das heißt, deren Besitzer keine gültige UID im System hat
-nogroup
Nach Dateien ohne Gruppe suchen, das heißt, deren Gruppe keine gültige GID im System hat
-path muster
Suche nach Dateien, deren Name mit Muster übereinstimmt. Die Metazeichen »/« und ».« haben keine spezielle Bedeutung. Um einen ganzen Verzeichnisbaum zu ignorieren, kann die Option -prune verwendet werden, damit wird vermieden, dass jede Datei in diesem Verzeichnisbaum überprüft wird.
-perm rechte
Nach bestimmten Berechtigungen suchen: -perm rechte sucht nach Dateien mit Berechtigungsbits, die exakt den ange-
gebenen Rechten entsprechen (oktal oder symbolisch).
-perm -rechte sucht alle Dateien, bei denen alle angegebenen Berechtigungsbits gesetzt wurden. Die Angabe -perm -700 entspricht zum Beispiel -rwx??????, wobei das Fragezeichen für jeden beliebigen Modus stehen kann. -perm +rechte sucht alle Dateien, bei denen ein beliebiges der angegebenen
Berechtigungsbits gesetzt wurde.
-regex muster
Der Dateiname stimmt mit dem regulären Ausdruck muster überein. Die Übereinstimmung gilt für den gesamten Dateipfad und nicht nur für den Dateinamen. Um zum Beispiel eine Datei mit dem Namen ’./projekt2’ zu finden, kann der reguläre Ausdruck ’.*projekt.' oder ’.*p.*2’ verwendet werden, aber nicht ’p.*r2’.
Tab. 4.72: Die wichtigsten Suchkriterien des Befehls find (Forts.)
188
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Suchkriterium
Bedeutung
-size [+/-]i
Nach einer bestimmten Größe suchen. i steht für einen 512-Byte-Block. Wenn das Pluszeichen verwendet wird, wird nach Dateien gesucht, die größer sind, bei einem Minuszeichen nach Dateien, die kleiner sind. Wird kein Minus- oder Pluszeichen verwendet, wird nach Dateien gesucht, die genau i Blöcke groß sind. Soll nach einer Größe in Bytes gesucht werden, muss hinter der Größe ein c für die Byte-Angabe bzw. k für Kbyte stehen.
-type typ
Nach einem bestimmten Dateityp suchen, möglich sind: f für eine normale Datei d für ein Verzeichnis l für einen symbolischen Link c für eine zeichenorientierte Gerätedatei b für eine blockorientierte Gerätedatei p für eine Named Pipe-Datei (FIFO) s für eine Socket-Datei
-user benutzer
Nach einem bestimmten Benutzer suchen
-uid uid
Nach einer bestimmten UID eines Benutzer suchen
-used i
Auf die Datei wurde zuletzt nach i Tagen zugegriffen, nachdem sie zuletzt geändert wurde.
-xdev
Nur im angegebenen Dateisystem suchen
-xtype typ
Entspricht der Option -type, wenn die Datei kein symbolischer Link ist. Bei symbolischen Links überprüft die Option den Typ der Originaldatei im Gegensatz zu -type.
Tab. 4.72: Die wichtigsten Suchkriterien des Befehls find (Forts.)
Die Aktionen des Befehls sind: Aktion
Bedeutung
-print
Die gefundenen Dateien ausgeben. Dies ist die standardmäßige Aktion, die nicht unbedingt eingegeben werden muss. Nach jeder ausgegebenen gefundenen Datei erfolgt eine Zeilenschaltung.
-ls
Die gefundenen Dateien in Langform ausgeben
-exec befehl {} \; Den angegebenen Befehl für jede gefundene Datei ausführen. Dabei wird
jeder gefundene Dateiname in die geschweiften Klammern ersetzt. Wenn Sie einen Befehl zum Löschen der gefundenen Dateien verwenden, werden Ihnen die Dateien nicht mehr angezeigt, sondern sofort gelöscht, wenn sie mit den Suchkriterien übereinstimmen! -ok befehl {} \;
Den angegebenen Befehl für jede gefundene Datei ausführen. Sie werden allerdings bei bestimmten Befehlen gefragt, wie zum Beispiel dem Löschen, ob Sie die jeweils gefundene Datei wirklich löschen wollen.
-print0
Die gefundenen Dateien gefolgt von einem Null-Zeichen ausgeben. Auf diese Weise können Dateinamen, die Zeilenschaltungen enthalten, von Programmen korrekt interpretiert werden, die die Ausgabe des Befehls find bearbeiten.
Tab. 4.73: Die Aktionen des Befehls find
189
Dateien und Dateiinhalte suchen
magnum
Aktion
Bedeutung
-fls datei
Entspricht der Aktion -ls, schreibt das Ergebnis aber in die Datei datei. Wenn die Datei noch nicht existiert, wird sie erzeugt. Ist sie bereits vorhanden, dann wird sie überschrieben.
-fprint datei
Entspricht der Aktion -print, schreibt das Ergebnis aber in die Datei datei
-fprint0 datei
Entspricht der Aktion -print0, schreibt das Ergebnis aber in die Datei datei
-prune
Wenn die Option -depth nicht verwendet wird, wird nicht in das angegebene Verzeichnis und dessen Unterverzeichnissen verzweigt. Wird die Option -depth verwendet, dann hat diese Option jedoch keine Auswirkung.
-printf format
Gibt das Format format an der Standardausgabe aus und interpretiert dabei die Anweisungen, die mit »\« und »%« erfolgen. Feldbreite und sonstige Angaben können mit der C-Funktion des Befehls printf angegeben werden. Im Gegensatz zu diesem Befehl fügt die Option -printf allerdings keine neue Zeile am Ende der Zeichenkette hinzu. Die möglichen Anweisungen lauten: \a Alarmglocke \b Backspace \c Die Ausgabe wird sofort gestoppt und geleert. \f Seitenvorschub \n Zeilenschaltung \r Wagenrücklauf \t Horizontaler Tabulator \v Vertikaler Tabulator \\ Das Zeichen Backslash (\') Folgt dem Zeichen »\« irgendein Zeichen, das an dieser Stelle nicht gelistet wurde, wird der Backslash als normales Zeichen behandelt und gedruckt.%% Das Zeichen Prozent (%) %a Die letzte Zugriffszeit auf die Datei wird im Format der C-Funktion »ctime« zurückgegeben. %Azeit Die letzte Zugriffszeit der Datei im durch zeit spezifizierten Format, das entweder »@« ist oder eine Anweisung der C-Funktion »strftime«. Die möglichen Werte für zeit sind:
– @ Sekunden seit dem 1. Januar 1970, 00:00 GMT – Zeitfelder: – H Stunde (00 ... 23) – I Stunde (01 … 12) – k Stunde ( 0 … 23) – l Stunde ( 1 … 12) – M Minute (00 ... 59) – p AM oder PM – r Zeit, 12-Stunden-Format (hh:mm:ss [AP]M) – S Sekunde (00 ... 61) – T time, 24-Stunden-Format (hh:mm:ss) – X Zeitdarstellungsformat (H:M:S) – Z Zeitzone (zum Beispiel EDT) Tab. 4.73: Die Aktionen des Befehls find (Forts.)
190
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Aktion -printf format
(Forts.)
Bedeutung – – – – – – – – – – – – – – – –
Datumsfelder:
a Abgekürzter Wochentagname (Sun ... Sat) A Wochentagname (Sunday ... Saturday) b oder h Abgekürzter Monatsname (Jan ... Dec) B Monatsname (January ... December) c Datum und Uhrzeit (Sat Nov 04 12:02:33 EST 1989) d Tag des Monats (01 ... 31) D Datum (mm/dd/yy) j Tag des Jahres (001 ... 366) m Monat (01 ... 12) U Kalenderwoche, wobei die Woche mit dem Sonntag beginnt (00 … 53) w Tag der Woche (0 ... 6) W Kalenderwoche, wobei die Woche mit dem Montag beginnt (00 ... 53) x Datumsdarstellung (mm/dd/yy) y Jahresdarstellung zweistellig (00 … 99) Y Jahr (1970 ...)
– %b Dateigröße in 512-Byte-Blöcken (aufgerundet) – %c Das letzte Änderungsdatum der Datei im Format, wie es die C-Funktion »ctime« zurückgibt – %C format Das letzte Änderungsdatum der Datei im Format format (siehe %A) – %d Die Tiefe der Datei im Verzeichnisbaum; 0 bedeutet, dass die Datei ein Argument der Befehlszeile ist – %f Der Dateiname, bei dem alle vorangestellten Verzeichnisse entfernt wurden (nur das letzte Element) – %F Der Typ des Dateisystems, in dem sich die Datei befindet; dieser Wert kann mit der Option -fstype verwendet werden – %g Der Gruppenname der Datei bzw. die numerische Gruppen-Id, wenn die Gruppe keinen Namen hat – %G Die numerische Gruppen-ID der Datei – %h Die führenden Verzeichnisse im Dateinamen (alles außer dem letzten Element) – %H Befehlszeilenargument, unter dem die Datei gefunden wurde – %i Die Inode-Nummer der Datei (in dezimaler Notation) – %k Die Dateigröße in 1-Kilobyte-Blöcken (aufgerundet) – %l Die Originaldatei des symbolischen Links (eine leere Zeichenkette, wenn die Datei kein symbolischer Link ist) – %m Die Zugriffsbits der Datei (in oktaler Notation) – %n Anzahl der Hard Links der Datei – %p Der Dateiname %P Der Dateiname, wobei der Name des Befehlszeilenarguments gelöscht wird, unter dem die Datei gefunden wurde %s Dateigröße in Bytes %t Das Datum der letzten Dateiänderung in dem Format, wie es von der C-Funktion »ctime« zurückgegeben wird %T format Das letzte Änderungsdatum der Datei im Format format (entspricht %A) %u Der Name des Besitzers der Datei oder die numerische Benutzer-ID, wenn der Benutzer keinen Namen hat
%U Die numerische Benutzer-ID der Datei Wenn dem Zeichen »%« irgendein anderes Zeichen folgt, wird das Prozentzeichen ignoriert (aber das andere Zeichen gedruckt). -fprintf datei
Entspricht der Aktion -fprintf, schreibt das Ergebnis aber in die Datei datei
Tab. 4.73: Die Aktionen des Befehls find (Forts.)
191
magnum
Dateien und Dateiinhalte suchen
Im nachfolgenden Beispiel wird im Homeverzeichnis und in den darunter liegenden Verzeichnissen nach einer Datei mit dem Namen fa.txt gesucht und die gesuchte Datei in Langform ausgegeben: $ find ~ -name fa.txt –ls 661149 1 -rw-r—r-- 1 behoerden/text/fa.txt
her
buha
189 Jul 5 15:34 /export/home/her/
Das Zeichen ~ ist ein Platzhalter für das Homeverzeichnis. Im nachfolgenden Beispiel wird ab dem aktuellen Verzeichnis nach allen normalen Dateien der Benutzer her und olli gesucht, die zuletzt vor weniger als 7 Tagen geändert wurden, und diese werden ausgegeben: $ find . \( –user her –o –user olli \) –type f –mtime –7 –print /export/home/her/brief-lg.txt /export/home/her/mond.jpg /export/home/olli/dokument1
Bei mehreren Auswahlkriterien, die mit der Option –o verknüpft werden, müssen die umgebenden Klammern mit Hilfe des Backslashes maskiert werden, sonst würde die Shell versuchen, die Eingabe aufzulösen. Im nachfolgenden Beispiel wird ab dem Wurzelverzeichnis nach Dateien mit dem Namen core gesucht und die gefundenen Dateien werden sofort ohne Rückfrage gelöscht: $ find / -name core –exec rm {} \;
Mit dem nächsten Befehl wird im Verzeichnis arbeit und in den Unterverzeichnissen bis zu drei Ebenen tiefer nach allen leeren Dateien der Gruppe buha gesucht, und diese werden nach Rückfrage gelöscht: $ find /arbeit -size 0 -group buha -maxdepth 3–ok rm {} \;
Im nächsten Beispiel wird nur in Dateisystemen vom Typ nfs nach Dateien gesucht, die jünger als die Datei bericht2002.txt sind. Bei symbolischen Links wird die Originaldatei gesucht und die gefundenen Dateien werden ausgegeben: $ find / -fstype nfs -type f -newer bericht2002.txt -follow -print
4.4.2
Der Befehl grep
Dieser Befehl durchsucht Dateien nach Suchmustern. Die Syntax des Befehls lautet: $ grep [–Option(en)] suchmuster datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-a oder --text
Entspricht --binary-files=text
-A oder --after-context=zahl Anzeige von zahl Zeilen vom nachfolgenden Kontext
Tab. 4.74: Die Optionen des Befehls grep
192
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Option
Bedeutung
-b oder --byte-offset
Nummer des Plattenblocks ausgeben, in dem das Suchmuster steht
-B oder --before-context=zahl
Anzeige von zahl Zeilen vom vorausgehenden Kontext
--binary-files=typ
Annahme von Binärdateien mit Typ binary oder text oder without-match
-c oder --count
Anzahl der Zeilen ausgeben, die das Suchmuster enthalten
-C oder --context=zahl
Anzeige von zahl Zeilen vom Kontext
--color[=wenn] oder --colour=[wenn]
Markieren von übereinstimmenden Textteilen, wobei wenn always oder never oder auto sein kann
-d oder --directories =aktion
read oder recurse oder skip
-D oder --devices=aktion
Festlegen der Verarbeitung mit aktion read oder write von Gerätedateien, FIFOs und Sockets
-e oder --regexp=muster
muster wird als regulärer Ausdruck verwendet. Diese Option kann verwendet werden, wenn das Suchmuster mit einem Bindestrich beginnt.
-E oder --extended-regexp
Das Suchmuster ist ein erweiterter regulärer Ausdruck.
--exclude=muster
Überspringen von Dateien, die mit muster übereinstimmen
--exclude-from=datei
Überspringen von Dateien, die mit einem Suchmuster in datei übereinstimmen
-f oder --file=datei
Das Suchmuster wird aus datei gelesen.
-F oder --fixed-strings
Das Suchmuster besteht aus durch Zeilenschaltungen getrennten Zeichenketten.
-G oder --basic-regexp
Das Suchmuster ist ein regulärer standardmäßiger Ausdruck.
-h oder --no-filename
Keine Anzeige von Dateinamen. Wird nur eine Datei durchsucht, wird standardmäßig ebenfalls kein Dateiname angezeigt.
-H oder --with-filename
Anzeige des Dateinamens bei jeder Übereinstimmung
-i
Keine Unterscheidung von Groß- und Kleinschreibung
-I
Entspricht --binary-files=without-match
--include=muster
Untersuchung von Dateien, die mit muster übereinstimmen
Festlegen, mit welcher aktion Verzeichnisse verarbeitet werden:
-l oder --files-with-matches Nur Dateinamen mit Übereinstimmungen werden ausgegeben. -L oder --files-without-match
Nur Dateinamen ohne Übereinstimmung werden ausgegeben.
--line-buffered
Einzelne (ungepufferte) Ausgabe jeder Zeile
--label=text
Ausgabe von text als Dateiname für die Standardeingabe
Tab. 4.74: Die Optionen des Befehls grep (Forts.)
193
magnum
Dateien und Dateiinhalte suchen
Option
Bedeutung
-m oder --max-count=zahl
Abbruch nach zahl Übereinstimmungen
--mmap
Eingabe in den Speicher mappen, wenn möglich
-n oder --line-number
Zeilennummer ausgeben, die das Suchmuster enthält
-o oder --only-matching
Nur der mit dem Suchmuster übereinstimmende Teil der Zeile wird angezeigt.
-P oder --perl-regexp
Das Suchmuster ist ein regulärer, von Perl akzeptierter Ausdruck.
-q oder --quiet oder --silent
Unterdrücken der normalen Ausgabe
-R oder -r oder --recursive
Entspricht --directories= recurse, das heißt also einer rekursiven Suche, auch in den Unterverzeichnissen des angegebenen Verzeichnisses
-s oder --no-messages
Unterdrücken von Fehlermeldungen
-u oder --unix-byte-offsets
Offsets ausgeben, als würden Carriage Return-Zeichen fehlen (an MS-DOS angepasst)
-U oder --binary
Das Carriage Return-Zeichen am Zeilenende wird belassen (an MS-DOS angepasst).
-v oder --revert-match
Umgekehrt suchen: nur Zeilen ausgeben, die das Suchmuster nicht enthalten
-w oder --word-regexp
Das Suchmuster muss mit einem ganzen Wort übereinstimmen.
-x oder --line-regexp
Das Suchmuster muss mit einer ganzen Zeile übereinstimmen.
-z oder --null-data
Eine Zeile muss mit Null-Byte statt einer Zeilenschaltung enden.
-Z oder --null
Ausgabe eines Null-Bytes nach jedem Dateinamen
-zahl
Entspricht --context=ZAHL
Tab. 4.74: Die Optionen des Befehls grep (Forts.)
Es gibt zwei weitere Versionen des Befehls unter Linux: fgrep und egrep. Der Befehl fgrep kennt keine regulären Ausdrücke (siehe nächster Abschnitt), während egrep weitere reguläre Ausdrücke kennt. Anders ausgedrückt: egrep entspricht grep -E und fgrep entspricht grep -F. Im folgenden Beispiel wird nach dem Suchmuster Vielfalt in der Datei gesucht und die gefundene Zeile wird mit Zeilennummer ausgegeben.
prot1000
$ grep –n Vielfalt prot1000 19:eine grosse Vielfalt an verschiedenen Produkten bietet gerade
Im nächsten Beispiel wird die Zahl der Benutzer ausgegeben, die laut der Datei etc/passwd die bash verwenden:
$ grep –c /bin/bash /etc/passwd 17
194
/
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Der Befehl grep kann auch mit dem Befehl find kombiniert werden, wenn sich die Datei mit dem Suchmuster im Verzeichnisbaum unterhalb des aktuellen Verzeichnisses befindet. Im nachfolgenden Beispiel werden im Verzeichnis /etc und in den darunter liegenden Verzeichnissen Dateien gesucht, die das Suchmuster PASSREQ enthalten: $ find /etc –type f –exec grep –n PASSREQ {} /dev/null \;
Da der Befehl grep bei einigen Unix- und Linux-Varianten normalerweise keine Dateinamen ausgibt, wenn er nur eine Datei durchsucht, wird ihm in diesem Beispiel parallel die leere Datei /dev/null zum Durchsuchen »aufgezwungen«. Auf diese Weise erhalten Sie auch die Dateinamen mit den Fundstellen. Der Befehl grep unter SUSE Linux kennt aber für solche Zwecke die Option -H. Alternativ kann mit dem Befehl grep aber auch direkt rekursiv gesucht werden (allerdings bietet find insgesamt noch weitergehende Suchmöglichkeiten): $ grep –r Vielfalt ~/berichte
In diesem Fall wird im und unterhalb des Verzeichnisses berichte, das sich im Homeverzeichnis des Suchenden befindet, nach Dateien gesucht, die das Wort Vielfalt enthalten. Im letzten Beispiel wird mit dem Befehl Muster Bernd oder Brigitte gesucht:
egrep
in der Datei erzaehl.txt nach dem
$ egrep –n '(Bernd|Brigitte)' erzaehl.text
Reguläre Ausdrücke (regular expressions) Der Befehl grep lässt sich über reguläre Ausdrücke steuern, die im Suchmuster verwendet werden. Im nachfolgenden Beispiel werden alle Dateien des Verzeichnisses prog_sprachen nach einem Suchmuster durchsucht, das objektorientiert lautet und am Zeilenanfang steht: $ grep –in '^objektorientiert' ~/prog_sprachen/* kapitel1:1:Objektorientierte Programmiersprachen kapitel1:71:objektorientierte Sprachen haben bestimmte Merkmale, wie zum kapitel7:331:Objektorientiert Programmieren
Zu den wichtigsten regulären Ausdrücken gehören: Ausdruck Beispiel
Bedeutung
.
M...e
Der Punkt steht für genau ein beliebiges Zeichen. Die Fundstellen für das Suchmuster im Beispiel könnten also Masse, Messe, Mette, Motte, Matte, Mitte, Miete usw. lauten.
*
Mat.*
Das vor dem Stern stehende Zeichen kann kein einziges Mal, einmal oder beliebig oft im Suchmuster vorkommen. Die Fundstellen für das Suchmuster im Beispiel könnten also Math, Matt, Matte, Mathematik, Mat usw. lauten.
[ ]
M[oaei]tte Die eckigen Klammern stehen für genau ein beliebiges Zeichen, das im
Auswahlbereich der eckigen Klammern enthalten sein muss. Die Fundstellen für das Suchmuster im Beispiel müssen also Matte, Motte, Mette und Mitte lauten. Tab. 4.75: Reguläre Ausdrücke
195
Dateien und Dateiinhalte suchen
magnum
Ausdruck Beispiel
Bedeutung
[^ ]
M.[^es].e
Die Zeichen des Auswahlbereichs in den eckigen Klammern, die wiederum für genau ein beliebiges Zeichen stehen, dürfen nicht vorkommen. Die Fundstellen für das Suchmuster im Beispiel könnten also Mette, Motte, Matte, Mitte, usw., aber nicht Masse, Messe, Miete usw. lauten.
^
^Masse
Die gefundene Zeile muss am Zeilenanfang das Suchmuster enthalten. Die Fundstellen für das Suchmuster im Beispiel müssen also am Anfang einer Zeile gesucht werden.
$
Masse$
Die gefundene Zeile muss am Zeilenende das Suchmuster enthalten. Die Fundstellen für das Suchmuster im Beispiel müssen also am Ende einer Zeile gesucht werden.
Tab. 4.75: Reguläre Ausdrücke (Forts.)
Außer den Befehlen grep und egrep verwenden auch die Befehle und einige Texteditoren reguläre Ausdrücke.
4.4.3
vi, awk
und
sed
Dateien oder Verzeichnisse mit Hilfe von KDE suchen
KDE verfügt ebenfalls über eine recht gute Suchfunktion. Öffnen Sie dazu im Hauptmenü die Option DATEIEN SUCHEN:
Bild 4.24: Dateien mit KDE suchen
196
Kapitel 4 · Mit Dateien und Verzeichnissen arbeiten
Sie können in der ersten Registerkarte NAME/PFAD der nun angezeigten Dialogbox entweder nach dem Datei- oder Verzeichnisnamen suchen und gegebenenfalls angeben, in welchem Verzeichnispfad rekursiv gesucht werden soll:
Bild 4.25: Nach Datei- oder Verzeichnisnamen suchen
Die zweite Registerkarte INHALT bietet die Möglichkeiten, nach einem bestimmten Dateityp und nach enthaltenem Text zu suchen:
Bild 4.26: Nach Inhalten suchen
197
Dateien und Dateiinhalte suchen
magnum
Die dritte Registerkarte EIGENSCHAFTEN kann nach Dateien mit bestimmtem Erstellungs- bzw. Änderungsdatum oder einer bestimmten Größe oder bestimmten Dateizugriffsrechten suchen:
Bild 4.27: Nach bestimmten Eigenschaften suchen
198
5 Zugriffsschutz für Dateien und Verzeichnisse anwenden »Auf Rechte ist man nicht stolz, aber auf Vorrechte.« – Jean Paul Wenn Sie Ihre Dateien unter Linux wirkungsvoll vor Dritten schützen wollen, können Sie die Zugriffsrechte verwenden. Generell sind die Zugriffsrechte von Linux sehr einfach zu handhaben, da es grundsätzlich nur die drei Rechte Lesen, Schreiben und Ausführen gibt. Da diese nicht immer ausreichend sind, wurden vor einiger Zeit die Access Control Lists (ACLs) als Ergänzung implementiert. Darüber hinaus gibt es noch interessante Sonderzugriffsrechte, wie zum Beispiel das SetUID-Bit, die in diesem Kapitel ebenfalls ausführlich erklärt werden.
5.1 Zugriffs- und Besitzrechte Bei einem Multiuser-System wie Linux muss sichergestellt sein, dass jeder Benutzer individuellen Schutz für den Zugriff auf Dateien und Verzeichnisse hat. Diese so genannten Benutzerberechtigungen können dabei unterschieden werden in:
쮿
Superuser root, der keine Beschränkungen bezüglich der Zugriffsrechte auf Dateien und Verzeichnisse hat
쮿
Alle anderen Benutzer, für die jeweils die definierten Zugriffsrechte gelten
Die Verwaltung der Zugriffsrechte wird dadurch vereinfacht, dass Benutzer in verschiedene Gruppen zusammengefasst werden. Gruppen können unterschieden werden in:
쮿
Vom System vorgegebene Gruppen, wie zum Beispiel root, system, admin, lp usw.
쮿
Vom Superuser definierte Gruppen, wie zum Beispiel kurs, info, einkauf, verkauf usw.
Linux überprüft bei jedem Zugriff auf eine Datei oder ein Verzeichnis, ob die für diese Operation erforderlichen Rechte vorhanden sind, und erlaubt oder verweigert entsprechend den Rechten den Zugriff.
5.1.1
Grundlagen der Zugriffsberechtigungen
Benutzerkategorien Das Betriebssystem Linux verhindert mit zwei verschiedenen Methoden, dass nicht autorisierte Personen Zugang zum System und zu Daten erhalten. Dazu werden bei der Anmeldung eines Benutzers zunächst der Benutzername und das dazugehörige Passwort überprüft. Die dafür notwendigen Informationen entnimmt das standardmäßige Linux-System den Dateien /etc/passwd und /etc/shadow (vergleiche Kapitel 11). Es gibt speziell für Netzwerkumgebungen auch weitere Mechanismen, mit denen Benutzeranmeldungen überprüft werden können.
199
Zugriffs- und Besitzrechte
magnum
Wenn die Angaben zum Benutzernamen und Passwort mit denen in den beiden Dateien übereinstimmen, ist die Anmeldung des Benutzers erfolgreich. Die zweite Methode, um Daten vor unberechtigtem Zugriff zu schützen, ist die Vergabe von Zugriffsrechten. Mit ihnen lässt sich steuern, dass nur bestimmte Benutzer oder Gruppen von Benutzern auf bestimmte Dateien oder Verzeichnisse zugreifen. Mit Hilfe des Befehls ls –l können Sie die Rechte von Dateien und Verzeichnissen anzeigen. Dabei werden zuerst der Dateityp und dann die Zugriffsberechtigungen für drei verschiedene Benutzerkategorien angezeigt:
Bild 5.1: Benutzerkategorien
Der Dateityp und die drei Benutzerkategorien bedeuten:
Dateitypen Der Dateityp ist das erste Zeichen, das aufgelistet wird. Die Dateitypen unter Linux sind:
쮿
- bedeutet, dass es sich um eine normale Datei handelt: zum Beispiel entweder eine ASCII-Text-Datei oder eine Applikationsdatei oder eine binäre Datei.
쮿
d bedeutet,
dass es sich um ein Verzeichnis handelt.
쮿
l bedeutet,
dass es sich um einen symbolischen Link handelt.
쮿
b bedeutet,
dass es sich um eine blockorientierte Gerätedatei handelt.
쮿
c bedeutet,
dass es sich um eine zeichenorientierte Gerätedatei handelt.
쮿
p bedeutet, dass es sich um eine spezielle Named Pipe-Datei (FIFO) für die Interprozesskommunikation handelt.
쮿
s bedeutet, dass es sich um eine Socket-Datei für die Interprozesskommunikation handelt.
Benutzer (User) Die nächsten drei Zeichen legen die Rechte fest, die für den Besitzer der Datei gelten. Im Beispiel in der Abbildung hat die Besitzerin her sowohl Lese- (r = read) als auch Schreibrechte (w = write). Der Besitzer der Datei wird in der dritten Spalte der Ausgabe des Befehls ls –l angezeigt.
Gruppe (Group) Der zweite Abschnitt des Rechteblocks, der aus den nächsten drei Zeichen besteht, legt die Zugriffsrechte für die Gruppe fest. Für jeden Benutzer, der Mitglied in dieser Gruppe ist, gelten die definierten Rechte. In unserem Beispiel hat die Gruppe projekt1 das Leserecht für die Datei. Die Gruppe wird in der vierten Spalte der Ausgabe des Befehls ls –l angezeigt.
200
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
Jeder Benutzer unter Linux ist Mitglied in mindestens einer Gruppe. Beim Anlegen eines Benutzers wird dieser automatisch einer Gruppe zugeordnet. Diese Gruppe wird als die primäre Gruppe bezeichnet. Wird der Benutzer weiteren Gruppen zugeordnet, so handelt es sich dabei um Sekundärgruppen. Das Gruppenkonzept vereinfacht die Systemverwaltung, da mehrere Benutzer, für die dieselben Rechte gelten sollen, einfach zu einer Gruppe zusammengefasst werden können. Es erleichtert auch den Mitgliedern einer Gruppe, sich gegenseitig Zugriffsrechte auf die Dateien und Verzeichnisse einzuräumen. Wenn ein Benutzer eine Datei oder ein Verzeichnis erstellt, werden diese automatisch der primären Gruppe des Benutzers zugeordnet. Es ist allerdings möglich, die Gruppenzugehörigkeit einer Datei anschließend noch zu ändern (vergleiche Abschnitt 5.1.4).
Andere (Other) Der letzte aus drei Zeichen bestehende Teil des Rechteblocks enthält die Zugriffsrechte, die für die Anderen gelten, also alle Benutzer, die weder Besitzer noch Gruppenmitglied sind. In unserem Beispiel haben diese ebenfalls Leserecht.
5.1.2
Arten von Zugriffsrechten und ihre Bedeutung
Sobald eine Datei oder ein Verzeichnis erstellt wird, weist das Betriebssystem diesem automatisch vordefinierte Standardzugriffsrechte zu. Wie Sie diese steuern können, erfahren Sie in Abschnitt 5.1.4. Dadurch ist bereits mit Erstellen der Datei ein Schutz gewährleistet. Über die Zugriffsrechte kann bestimmt werden, welche Benutzerkategorie welche Aktionen bei einer Datei oder einem Verzeichnis durchführen kann. Diese Rechte werden über einzelne Buchstaben definiert, dabei bedeutet:
쮿
r
쮿
w (write)
쮿
x
(read) – lesen – schreiben
(execute) – ausführen
Die Zugriffsrechte haben bei Dateien und Verzeichnissen unterschiedliche Bedeutung: Zugriffsrecht
Bedeutung bei einer Datei
Bedeutung bei einem Verzeichnis
r (read)
Der Inhalt der Datei darf gelesen oder kopiert werden; mögliche Befehle more, cat, less, cp.
Der Inhalt des Verzeichnisses darf aufgelistet werden; möglicher Befehl ls.
w (write)
Der Inhalt der Datei darf verändert oder gelöscht werden; mögliche Befehle vi, kedit, mv, rm.
Dateien und Unterverzeichnisse dürfen hinzugefügt oder gelöscht werden; mögliche Befehle mkdir, rmdir, touch, rm.
x (execute) Die Datei darf ausgeführt werden
Es darf in das Verzeichnis gewechselt (möglicher Befehl cd) und ein ausführliches Auflisten der Dateien und Unterverzeichnissen durchgeführt werden, wenn gleichzeitig die Leserechte gesetzt wurden (möglicher Befehl ls -l).
(nur bei Shellskripten oder ausführbaren Programmen sinnvoll).
Tab. 5.1: Zugriffsrechte bei Dateien und Verzeichnissen
201
Zugriffs- und Besitzrechte
magnum
Wenn Sie jemandem Schreibrecht auf ein Verzeichnis einräumen, dann darf dieser Benutzer alle Dateien löschen, die sich im Verzeichnis befinden, unabhängig davon, ob er für diese Dateien die erforderlichen Rechte besitzt. Im folgenden Beispiel kann die Datei prog1 von ihrem Besitzer doo gelesen, geändert und ausgeführt werden, während die Gruppe projekt3 die Datei nur lesen und ausführen und die restlichen Benutzer am System diese nur ausführen dürfen. $ ls -l prog1 -rwxr-x--x 1 doo proj3 142 Jul 17 11:24 prog1
Im nächsten Beispiel darf der Benutzer doo den Inhalt des Verzeichnisses auflisten, dort Dateien und Unterverzeichnisse anlegen und löschen, während die Gruppe proj3 nur den Inhalt des Verzeichnisses – auch auf ausführliche Weise – auflisten und dorthin verzweigen darf. Die übrigen Benutzer dürfen weder ins Verzeichnis verzweigen, noch dessen Inhalt anzeigen. $ ls -ld dir3 drwxr-x--- 7 doo proj3 512 Jul 19 10:22 dir3
Durch die Option -d wird nicht der Inhalt des Verzeichnisses, sondern das Verzeichnis projekt3 selbst aufgelistet.
5.1.3
Überprüfen der Berechtigungen
Wenn ein Zugriff auf eine Datei (oder ein Verzeichnis) erfolgt, werden die Benutzer-Identifikationsnummer (UID) und die Gruppen-Identifikationsnummer (GID) des zugreifenden Benutzers mit den für die Datei hinterlegten Nummern verglichen. Die UID bestimmt den Benutzer, der die Datei erstellt hat, also den Besitzer. Die GID legt die Gruppe von Benutzern fest, die Rechte an der Datei haben. Mit dem Befehl ls –n können Sie die UID und die GID einer Datei oder eines Verzeichnisses ausgeben: $ ls -n dat1 -rw-r--r-- 1 4220 67 742 Jul 11 9:43 dat1
Wenn ein Benutzer auf eine Datei zugreifen möchte, wird seine UID mit der UID verglichen, die für die Datei gespeichert wurde. Sind diese identisch, dann gelten für den Benutzer die dem Besitzer zugewiesenen Rechte. Unterscheiden sich die UIDs, so wird die GID, die für die Datei gespeichert wurde, mit den GIDs, zu denen der Benutzer gehört, verglichen. Stimmt eine der GruppenIds des Benutzers mit der GID der Datei überein, so gelten für ihn die Rechte, die für die Gruppe hinterlegt wurden. Unterscheiden sich auch die GIDs, dann gelten für den Benutzer die Rechte der Anderen, die für die Datei zugewiesen wurden. Die UID und die GUID werden beim Erstellen eines neuen Benutzernamens bzw. einer neuen Gruppe beim Benutzer eingetragen. Typischerweise beginnen sie bei Linux-Systemen für den ersten Benutzer mit dem Wert 500 oder 1000 und werden mit jedem weiteren Benutzer um den Wert 1 erhöht. Für interne Prozesse werden ebenfalls Benutzer vergeben, diese internen Benutzer erhalten in der Regel eine UID unterhalb von 500 bzw. 1000.
202
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
Die nachfolgende Abbildung verdeutlicht nochmals die Überprüfung der Zugriffsrechte:
Bild 5.2: Überprüfung der Zugriffsberechtigungen
Die Zugriffsrechte sind disjunkt, das bedeutet, dass für den Besitzer einer Datei auch nur die Rechte des Besitzers und nicht die der Gruppe gelten. Genauso sind der Besitzer und die Gruppe aus der Kategorie ANDERE ausgeschlossen. Die Berechtigungen für Dateien und Verzeichnisse können nur vom Besitzer oder von root geändert werden.
5.1.4
Setzen von Zugriffsrechten
Der Befehl chmod Es gibt zwei verschiedene Möglichkeiten, um die Zugriffsrechte von Dateien oder Verzeichnissen zu ändern. Für beide Methoden wird der Befehl chmod verwendet. Die Syntax des Befehls lautet: $ chmod [-option] zugriffsrechte dateiname(n)
oder: $ chmod [-option] --reference=ref-datei dateiname(n)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-c oder --changes
Gibt eine Meldung aus, wenn eine Änderung durch den Befehl durchgeführt wurde
-f oder --silent oder --quiet
Die meisten Fehlermeldungen werden unterdrückt.
-R oder --recursive
Rekursives Ändern der Zugriffsrechte auch für alle Unterverzeichnisse und die darin enthaltenen Dateien
-v oder --verbose
Ausführliche Ausgabe für jede verarbeitete Datei
--reference=ref-datei
Anstelle von Werten für die Zugriffsrechte werden die Zugriffsrechte einer Referenzdatei verwendet.
Tab. 5.2: Optionen des Befehls chmod
203
Zugriffs- und Besitzrechte
magnum
Zum Beispiel ändert der Befehl $ chmod –R 755 projekt1
nicht nur die Zugriffsrechte für das Verzeichnis projekt1, sondern auch für alle in diesem Verzeichnis enthaltenen Verzeichnisse und Unterverzeichnisse rekursiv auf den Wert 755 (alle Rechte für den Besitzer, Lesen und Ausführen für die Gruppe und die Anderen). Beachten Sie, dass das Schreibrecht bei Verzeichnissen sehr weitgehende Rechte einräumt und die Rechte auf Dateien generell eine etwas andere Bedeutung haben als die gleichnamigen Rechte auf ein Verzeichnis. Das direkte Setzen von Zugriffsrechten auf Verzeichnisse und Dateien zugleich kann deshalb oft zu unerwarteten Ergebnissen führen.
Symbolische Methode Die symbolische Methode verwendet eine Kombination aus Buchstaben und Symbolen, um Rechte für eine Benutzerkategorie zu verändern. Es wird dabei angegeben, für welche Benutzerkategorie mit welcher Aktion welche Zugriffsrechte verändert werden. Mit dieser Methode werden die Zugriffsrechte in der Regel relativ gesetzt. Es gibt aber auch die Möglichkeit, diese mit Hilfe der Aktion »=« absolut zuzuweisen. Es gibt folgende Möglichkeiten, um die Zugriffsrechte mit der symbolischen Methode zu verändern:
Bild 5.3: Zugriffsrechte mit der symbolischen Methode zuweisen
Aus den drei Spalten werden die notwendigen Angaben entnommen, um Rechte zu ändern. Dabei ist es möglich, gleichzeitig verschiedene Rechte zu ändern. Die Kategorie »a« kann verwendet werden, um allen Kategorien gemeinsam ein Recht zuzuweisen oder zu entfernen. Im nachfolgenden Beispiel werden der Gruppe proj3 die Schreibrechte für die Datei prog1 zugewiesen: $ ls -l prog1 -rwxr-x--x 1 doo proj3 142 Jul 17 11:24 prog1 $ chmod g+w prog1 $ ls -l prog1 -rwxrwx--x 1 doo proj3 142 Jul 17 11:24 prog1
Im nächsten Beispiel wird das Ausführrecht für alle Benutzerkategorien entfernt und den Anderen ein Leserecht eingeräumt:
204
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
$ ls -l prog1 -rwxrwx--x 1 doo proj3 142 Jul 17 11:24 prog1 $ chmod a-x,o+r prog1 $ ls -l prog1 -rw-rw-r-- 1 doo proj3 142 Jul 17 11:24 prog1
Im letzten Beispiel werden der Gruppe und den Anderen alle Rechte genommen: $ ls -l prog1 -rw-rw-r-- 1 doo proj3 142 Jul 17 11:24 prog1 $ chmod g-rw,o-r prog1 $ ls -l prog1 -rw------- 1 doo proj3 142 Jul 17 11:24 prog1
Wenn Sie mehrere Rechte gleichzeitig ändern, achten Sie darauf, dass zwischen den einzelnen Aufzählungen kein Leerzeichen steht.
Oktalmethode Die Oktalmethode bietet die Möglichkeit, die Zugriffsrechte numerisch zu ändern. Jedem Zugriffsrecht ist eine Oktalzahl zugeordnet, die anstelle der symbolischen Methode verwendet werden kann. Mit der Oktalmethode werden die Rechte immer absolut zugewiesen, das heißt, es ist nicht möglich, einzelne Berechtigungen explizit zu ändern, sondern immer nur alle Rechte für alle Kategorien absolut. Die Rechte der Benutzerkategorien werden mit dreistelligen Oktalzahlen definiert, wobei die erste Zahl für die Zugriffsrechte des Benutzers, die zweite für die der Gruppe und die dritte für die der Anderen steht. Die Oktalzahlen für die Zugriffsrechte lauten: Zugriffsrecht
Kürzel
Oktalzahl
4
w
Leserecht
2
r
Schreibrecht
1
x
Ausführrecht
Tab. 5.3: Zugriffsrechte in Oktalziffern definiert
Wenn Sie also nach der Oktalmethode zum Beispiel das Leserecht setzen möchten, verwenden Sie die Ziffer 2. Möchten Sie das Ausführ- und Leserecht zuweisen, dann addieren Sie die oktalen Werte für beide Rechte zusammen, verwenden Sie also die 3 usw. Die nachfolgende Tabelle soll diese Kombination nochmals verdeutlichen: Wert
Zusammensetzung
Rechte
Bedeutung
0
0+0+0
---
Kein Zugriffsrecht
1
0+0+1
--x
Ausführrecht
Tab. 5.4: Zusammensetzung der Zugriffsrechte
205
magnum
Zugriffs- und Besitzrechte
Wert
Zusammensetzung
Rechte
Bedeutung
2
0+2+0
-w-
Schreibrecht
3
0+2+1
-wx
Schreib- und Ausführrecht
4
4+0+0
r--
Leserecht
5
4+0+1
r-x
Lese- und Ausführrecht
6
4+2+0
rw-
Lese- und Schreibrecht
7
4+2+1
rwx
Alle Rechte
Tab. 5.4: Zusammensetzung der Zugriffsrechte (Forts.)
Die Rechte für die drei Benutzerkategorien werden aus diesen Zahlen zusammengefügt, zum Beispiel bedeutet 777 Lese-, Schreib- und Ausführrecht für alle drei Benutzerkategorien, 644 Lese- und Schreibrecht für den Besitzer und Leserecht für die Gruppe und die Anderen. Im nachfolgenden Beispiel werden dem Besitzer alle und der Gruppe und den Anderen Leserechte für die Datei prog1 zugewiesen: $ ls -l prog1 -rw------- 1 doo proj3 142 Jul 17 11:24 prog1 $ chmod 744 prog1 $ ls -l prog1 -rwxr--r-- 1 doo proj3 142 Jul 17 11:24 prog1
Im nächsten Beispiel erhalten alle drei Benutzerkategorien das Lese- und Ausführrecht: $ ls -l prog1 -rwxr--r-- 1 doo proj3 142 Jul 17 11:24 prog1 $ chmod 555 prog1 $ ls -l prog1 -r-xr-xr-x 1 doo proj3 142 Jul 17 11:24 prog1
Im letzten Beispiel werden dem Besitzer das Lese- und Schreibrecht und der Gruppe das Leserecht zugewiesen. Die Anderen erhalten kein Zugriffsrecht auf die Datei: $ ls -l prog1 -r-xr-xr-x 1 doo proj3 142 Jul 17 11:24 prog1 $ chmod 640 prog1 $ ls -l prog1 -rw-r----- 1 doo proj3 142 Jul 17 11:24 prog1
Wenn nur eine Zahl beim Befehl chmod verwendet wird, dann gilt diese für die Benutzergruppe Andere. Daher entspricht der Befehl $ chmod 7 prog1 $ ls -l prog1 -------rwx 1 doo proj3 142 Jul 17 11:24 prog1
dem Befehl $ chmod 007 prog1
206
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
In diesem Fall haben die Anderen alle Zugriffsrechte für die Datei, die Gruppe und der Besitzer aber kein Zugriffsrecht. Sollte der Besitzer oder die Gruppe jedoch Schreibrecht für das Verzeichnis haben, in dem sich die Datei befindet, dann ist es trotzdem möglich, die Datei zu löschen oder zu verschieben. Es ist ihm aber nicht mehr möglich, den Dateiinhalt anzuzeigen oder die Datei zu kopieren. Diese Einstellung sollte natürlich vermieden werden. Gerade das Schreibrecht für Andere auf Dateien und Verzeichnisse sollte möglichst nicht vergeben werden, da es immer ein Sicherheitsrisiko darstellt, vor allem wenn es fremde oder sogar ungebetene Benutzer im System gibt.
Standardzugriffsrechte mit umask setzen Wenn ein Benutzer oder ein Prozess eine neue Datei oder ein neues Verzeichnis erzeugt, dann erhalten diese die Standardzugriffsrechte. Diese Standardeinstellung ist in der Shell fest einprogrammiert, kann aber mit Hilfe des Filters umask verändert und angezeigt werden. $ umask [-option] [zugriffsrechte]
Der Befehl kennt folgende Optionen: Option
Bedeutung
-S
Die Zugriffsberechtigungen werden nicht als Oktalzahl, sondern in der symbolischen Notation ausgegeben.
-p
Wird diese Option verwendet und die Zugriffsrechte weggelassen, erfolgt die Ausgabe in einer Form, die wiederum als Eingabe verwendet werden kann.
Tab. 5.5: Optionen des Befehls umask
Verwenden Sie diesen Befehl ohne eine Option, erhalten Sie den aktuellen Filter: $ umask 022
Der Wert wird je nach Shell mit führenden oder ohne führende Null(en) ausgegeben. So erhalten Sie in der Bourne-Shell zum Beispiel 0022, in der Korn-Shell 022 und in der C-Shell 22. Die erste Zahl definiert, welche Standardzugriffsberechtigungen der Besitzer hat, die zweite legt die der Gruppe und die letzte die Standardrechte für die Anderen fest. Die Voreinstellung in Linux lautet in der Regel 022. Die Definition des Filters erfolgt entweder systemweit durch einen Eintrag in der Datei /etc/login.defs oder in der Datei /etc/profile (vergleiche Kapitel 11). Jeder Benutzer kann allerdings diesen Wert individuell für sich in einer seiner Initialisierungsdateien einstellen, wie zum Beispiel in $HOME/.profile. Der Filter umask gibt an, welche Rechte einer Datei oder einem Verzeichnis nicht zugewiesen werden. Standardmäßig werden für eine neue erstellte Datei unter Linux die Berechtigungen 666 (rw-rw-rw-) und für ein Verzeichnis 777 (rwxrwxrwx) vergeben. Von diesen Standardvorgaben werden die durch umask definierten Berechti-
207
magnum
Zugriffs- und Besitzrechte
gungen weggenommen. Auf diese Weise erhalten neu angelegte Dateien und Verzeichnisse die durch den Systemadministrator oder Benutzer gewünschten Zugriffsrechte. Der Filter umask mit dem Wert 022 hat folgende Auswirkungen auf eine Datei: Symbolische Schreibweise
Oktale Bedeutung Schreibweise
rw-rw-rw-
666
Ursprünglich vom System vorgegebene Zugriffsrechte
----w--w-
022
Vom Filter umask nicht zugelassene Zugriffsrechte
rw-r--r--
644
Standardzugriffsrechte für eine neu erstellte Datei
Tab. 5.6: Standardzugriffsrechte für eine neu erstellte Datei
Der Besitzer besitzt für die Datei das Lese- und Schreibrecht, während die Gruppe und die Anderen nur das Leserecht besitzen. Obwohl der Wert von umask für den Besitzer 0 lautet, werden trotzdem für eine Datei keine Ausführrechte vergeben. Einerseits sind ausführbare Programme stets ein gewisses Sicherheitsrisiko in einem System und andererseits ist in der Regel nicht bereits vorher bekannt, ob eine Datei ausführbar sein wird oder nicht, daher wird keine Datei von vornherein auf ausführbar gesetzt. Wenn ein Benutzer ein Shellskript schreibt, muss er daher hinterher mit dem Befehl $ chmod u+x testscript1
die Ausführrechte für sich (und gegebenenfalls für die Gruppe und die Anderen) setzen. Der Filter umask mit dem Wert 022 hat folgende Auswirkungen auf ein Verzeichnis: Symbolische Schreibweise
Oktale Schreibweise
Bedeutung
rwxrwxrwx
777
Ursprünglich vom System vorgegebene Zugriffsrechte
----w--w-
022
Vom Filter umask nicht zugelassene Zugriffsrechte
rwxr-xr-x
755
Standardzugriffsrechte für ein neu erstelltes Verzeichnis
Tab. 5.7: Standardzugriffsrechte für ein neu erstelltes Verzeichnis
Der Besitzer besitzt für das Verzeichnis das Lese-, Schreib- und Ausführrecht, während die Gruppe und die Anderen nur das Lese- und Ausführrecht besitzen. Sie können den Filter verwenden:
umask
verändern, indem Sie den Befehl mit einem Oktalwert
$ umask 027 $ umask 027
Wenn Sie diesen Befehl an der Befehlszeile eingeben, ist er nur in der aktuellen Shell und ihren Subshells gültig. Das heißt, wenn Sie ein weiteres Terminalfenster öffnen oder sich abmelden und erneut anmelden, dann wird wieder der Wert für
208
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
umask verwendet,
der in einer der oben genannten Dateien definiert wurde. Soll der von Ihnen neu festgelegte Wert dauerhaft erhalten bleiben, muss er in einer dieser Dateien definiert werden.
Das Ändern des Werts auf kung:
027
hat auf eine neu erstellte Datei folgende Auswir-
Symbolische Schreibweise
Oktale Schreibweise
Bedeutung
rw-rw-rw-
666
Ursprünglich vom System vorgegebene Zugriffsrechte
----w-rwx
027
Vom Filter umask nicht zugelassene Zugriffsrechte
rw-r-----
640
Standardzugriffsrechte für eine neu erstellte Datei
Tab. 5.8: Standardzugriffsrechte für eine neu erstellte Datei
Der Besitzer besitzt für die Datei das Lese- und Schreibrecht, während die Gruppe nur das Leserecht besitzt. Die Anderen haben keinerlei Berechtigungen. Das Ändern des Werts auf 027 hat auf ein neu erstelltes Verzeichnis folgende Auswirkung: Symbolische Schreibweise
Oktale Schreibweise
Bedeutung
rwxrwxrwx
777
Ursprünglich vom System vorgegebene Zugriffsrechte
----w-rwx
027
Vom Filter umask nicht zugelassene Zugriffsrechte
rwxr-x---
750
Standardzugriffsrechte für ein neu erstelltes Verzeichnis
Tab. 5.9: Standardzugriffsrechte für ein neu erstelltes Verzeichnis
Der Besitzer besitzt für das Verzeichnis das Lese-, Schreib- und Ausführrecht, während die Gruppe nur das Lese- und Ausführrecht besitzt. Die Anderen haben keinerlei Berechtigungen. In der nachstehenden Tabelle finden Sie weitere Beispiele für mögliche Werte von umask:
Wert
Dateirechte
Verzeichnisrechte
Bedeutung
777
----------
d---------
Keine Zugriffsrechte für alle drei Benutzerkategorien – nicht sehr sinnvoll, auch der Besitzer kann seine Dateien nicht einmal ansehen.
277
-r--------
dr-x------
Diese Einstellung kann verhindern, dass der Besitzer ohne vorherigen Befehl chmod seine Dateien nicht verändern kann; vorausgesetzt, er hat nicht das Schreibrecht für das übergeordnete Verzeichnis.
077
-rw-------
drwx------
Der Besitzer hat alle Rechte, die Gruppe und die Anderen haben keine Rechte.
Tab. 5.10: Beispielwerte für umask
209
magnum
Spezielle Zugriffsrechte
Wert
Dateirechte
Verzeichnisrechte
Bedeutung
027
-rw-r-----
drwxr-x---
Der Besitzer hat Lese- und Schreibrecht für die Datei, alle Rechte für das Verzeichnis. Die Gruppe hat das Leserecht für die Datei und für das Verzeichnis auch das Ausführrecht. Die Anderen haben keine Rechte.
022
-rw-r—r--
drwxr-xr-x
Standardeinstellung: Der Besitzer hat Lese- und Schreibrecht für die Datei, alle Rechte für das Verzeichnis. Die Gruppe und die Anderen haben das Leserecht für die Datei und für das Verzeichnis auch das Ausführrecht.
002
-rw-rw-r--
drwxrwxr-x
Der Besitzer und die Gruppe haben Lese- und Schreibrecht für die Datei, alle Rechte für das Verzeichnis. Die Anderen haben das Leserecht für die Datei und für das Verzeichnis auch das Ausführrecht.
007
-rw-rw----
drwxrwx---
Der Besitzer und die Gruppe haben Lese- und Schreibrecht für die Datei, alle Rechte für das Verzeichnis. Die Anderen haben keine Rechte.
000
-rw-rw-rw-
drwxrwxrxw
Alle haben Lese- und Schreibrecht für die Datei und alle Rechte für das Verzeichnis. Eine sehr gefährliche Einstellung!
Tab. 5.10: Beispielwerte für umask (Forts.)
5.2 Spezielle Zugriffsrechte Neben den bereits vorgestellten Zugriffsrechten Lesen, Schreiben und Ausführen gibt es weitere spezielle Zugriffsrechte. Dazu gehören:
쮿
das SetUID-Zugriffsrecht für die vorübergehende Zuteilung einer anderen Benutzerkennung
쮿
das SetGID-Zugriffsrecht für die vorübergehende Zuteilung einer anderen Gruppenkennung
쮿
das Mandatory Locking-Zugriffsrecht für die obligatorische Gruppenzuweisung und Dateisperre für einfache Textdateien
쮿
das Sticky Bit-Zugriffsrecht für das dauerhafte Laden eines Programms in den Hauptspeicher und für die Steuerung des Löschens in gemeinsamen Verzeichnissen
5.2.1
Das SetUID-Zugriffsrecht
Wenn das SetUID-Bit (Set User Identification Bit) gesetzt ist, dann wird einem von einem beliebigen Benutzer gestarteten Programm vorübergehend die Identität des tatsächlichen Besitzers zugewiesen. Dadurch erhält der Anwender für die Zeit der Ausführung des Programms die Zugriffsrechte des Besitzers. Das SetUID-Bit kann mit Hilfe des Befehls ls –l angezeigt werden: $ ls –l /bin/su -r-sr-xr-x 1 root root 21112 May 1 21:24 /bin/su
210
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
Anstelle des Ausführrechts »x« für den Besitzer wird ein »s« angezeigt. Steht an dieser Stelle stattdessen ein großgeschriebenes »S«, dann wurde nur das SetUIDZugriffsrecht, aber nicht das Ausführrecht gesetzt, wodurch das Programm nicht ausführbar ist. Ein interessantes Beispiel für ein Programm mit gesetztem SetUID-Bit ist das Programm passwd, mit dessen Hilfe auch ein einfacher Anwender sein Passwort ändern kann. Dabei schreibt das Programm das neue Passwort in die Datei /etc/shadow zurück, die der Benutzer normalerweise nicht einmal lesen darf: $ ls –l /usr/bin/passwd /etc/shadow -rwsr-xr-x 3 root shadow 77204 May 1 21:24 /usr/bin/passwd -rw-r----- 1 root shadow 587 May 1 21:24 /etc/shadow
Während der Ausführung des Befehls passwd werden die Zugriffsrechte von root verwendet, da das SetUID-Bit gesetzt wurde. Aus Sicherheitsgründen kann das SetUID-Bit nur für binäre Programme und nicht für Shellskripte definiert werden. Wenn das Bit für Verzeichnisse oder normale Dateien gesetzt wird, hat es keinerlei Bedeutung. Da Programme mit SetUIDZugriffsrecht auch ein gewisses Sicherheitsrisiko bedeuten, sollte deren Verwendung eingeschränkt werden. Das SetUID-Bit kann entweder von root oder vom Besitzer mit Hilfe des Befehls chmod gesetzt werden. Dies ist mit der symbolischen oder der Oktalmethode möglich:
$ chmod u+s binärdatei
oder $ chmod 4555 binärdatei
Sie können nach Programmen mit SetUID-Bit zum Beispiel mit dem Befehl find
/
-perm –4000 suchen.
5.2.2
Das SetGID-Zugriffsrecht
Wenn das SetGID-Bit (Set Group Identification Bit) gesetzt ist, dann wird einem von einem beliebigen Benutzer gestarteten Programm vorübergehend die Gruppenzugehörigkeit der tatsächlichen Gruppe zugewiesen. Dadurch erhält der Anwender für die Zeit der Ausführung des Programms die Zugriffsrechte der Gruppe. Das SetGID-Bit kann mit Hilfe des Befehls ls –l angezeigt werden: $ ls –l /usr/bin/write -r-xr-sr-x 1 root tty 8280 May 1 21:24 /usr/bin/write
Anstelle des Ausführrechts »x« für die Gruppe wird ein »s« angezeigt. Steht an dieser Stelle stattdessen ein »l«, dann wurde nur das SetGID-Zugriffsrecht, aber nicht das Ausführrecht gesetzt. Das bedeutet, dass das Mandatory Locking-Zugriffsrecht für die obligatorische Gruppenzuweisung und Dateisperre gesetzt wurde. Dieses Zugriffsrecht wird im nächsten Abschnitt genauer erläutert. Mit dem Befehl write kann ein Benutzer einem anderen Benutzer eine Nachricht auf dessen Terminal schreiben. Mit den Rechten der Gruppe tty ist das möglich.
211
Spezielle Zugriffsrechte
magnum
Das SetUID-Bit kann entweder von root oder vom Besitzer mit Hilfe des Befehls chmod gesetzt werden. Dies ist mit der symbolischen oder der Oktalmethode möglich: $ chmod g+s binärdatei
oder $ chmod 2555 binärdatei
Aus Sicherheitsgründen kann auch das SetGID-Bit nur für binäre Programme und nicht für Shellskripte definiert werden. Wenn das Bit für Verzeichnisse gesetzt wird, hat es eine andere Bedeutung: Es findet dann eine obligatorische Gruppenzuweisung statt.
5.2.3
Das Zugriffsrecht für »Shared Directories« oder »Mandatory Locking-Bit«
Dieses Zugriffsrecht kann für ein Verzeichnis oder eine Datei gesetzt werden. Wird einem Verzeichnis das Mandatory Locking-Bit zugewiesen, das heißt, anstelle des Ausführrechts »x« für die Gruppe wird ein »s« angezeigt, dann wird die Gruppenzugehörigkeit dieses Verzeichnisses für alle darin neu erstellten Dateien und Verzeichnisse vererbt. Das heißt, eine darin neu erzeugte Datei oder ein Verzeichnis erhält nicht mehr die primäre Gruppenzugehörigkeit des Besitzers, sondern die des Verzeichnisses mit dem Mandatory Locking-Zugriffsrecht. Das bietet sich vor allem bei gemeinsam genutzten Verzeichnissen an, deren Benutzer zu verschiedenen primären Gruppen gehören, aber in diesem Verzeichnis sich gegenseitig über eine gemeinsame Gruppe bestimmte Gruppenzugriffsrechte einräumen möchten. $ ls –ld bau_proj drwxrwsr-x 5 braun bau 512 Jun 17 12:12 bau_proj $ id uid=324(olli) gid=82(projekt5) groups=82(projekt5),75(bau),1(other) $ touch bau_proj/proj33 $ ls –l bau_proj/proj33 -rw-r--r-- 1 olli bau 0 Jul 15 18:42 proj33
Die Gruppe bau hat Zugriffsrechte für das Verzeichnis bau_proj. Der Benutzer olli, dessen primäre Gruppe projekt5 ist, legt eine neue Datei proj33 in diesem Verzeichnis an. Die Gruppenzugehörigkeit der neuen Datei wird vom Verzeichnis vererbt und lautet bau. Das Mandatory Locking-Bit für ein Verzeichnis mit obligatorischer Gruppenzuweisung kann wiederum mit der symbolischen oder oktalen Methode zugewiesen werden. Dabei ist es möglich, den Befehl $ chmod g+s verzeichnis
zu verwenden, oder den Befehl: $ chmod 2555 verzeichnis
212
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
Wird einer Textdatei das Mandatory Locking-Bit zugewiesen, das heißt, anstelle des Ausführrechts »x« für die Gruppe wird ein »S« angezeigt, dann werden alle Zugriffe auf diese Datei vom System überprüft, unmittelbar bevor die Eingabeoder Ausgabeoperation durchgeführt wird. Ist das Mandatory Locking-Bit für eine Datei aktiv, weil sie von einem Prozess in Bearbeitung ist, dann bleibt sie für andere Prozesse während der Dauer des Zugriffs gesperrt. $ ls –l lockdat -r-xr-S--- 1 root ther 1228 Jun 21 8:22 lockdat
Das Mandatory Locking-Bit für eine Textdatei wird wie beim Verzeichnis zugewiesen, allerdings wird das Ausführrecht nicht gesetzt, zum Beispiel chmod 2600 oder chmod 2644. Das Mandatory Locking-Bit für eine Textdatei ist in der Praxis nicht üblich.
5.2.4
Das Sticky Bit-Zugriffsrecht
Auch dieses Zugriffsrecht kann für ein Verzeichnis oder eine Datei, das heißt ein Programm, gesetzt werden. Bei einem Programm sorgt das Betriebssystem dafür, dass dieses nach seiner Beendigung nicht wie üblich wieder aus dem Hauptspeicher entfernt wird. Vielmehr verbleibt es darin, bis der Rechner heruntergefahren wird. Diese Funktion wird heute in der Regel nicht mehr genutzt, war aber in früheren Zeiten wichtig, um ein Programm sofort wieder verfügbar zu haben, auch nachdem es schon beendet war. Das Sticky Bit kann mit Hilfe des Befehls ls –l angezeigt werden: $ ls –l sticky_prog -rwxr-xr-t 1 root other 2188 Jul 2 22:12 sticky_prog
Anstelle des Ausführrechts »x« für die Anderen wird ein »t« angezeigt. Steht an dieser Stelle stattdessen ein »T«, dann wurde nur das Sticky Bit-Zugriffsrecht, aber nicht das Ausführrecht gesetzt, wodurch die Ausführbarkeit des Programms fehlt. Auch das Sticky Bit wird mit Hilfe des Befehls chmod gesetzt: $ chmod 1555 binärdatei
Bei einem Verzeichnis regelt das Sticky Bit das Recht, Dateien oder Unterverzeichnisse darin zu löschen. Wenn alle Benutzerkategorien für ein Verzeichnis, wie zum Beispiel das Verzeichnis /tmp, Lese-, Schreib- und Ausführrecht haben, dann könnten sich die Benutzer gegenseitig die darin erstellten Dateien und Unterverzeichnisse löschen. Um das zu verhindern, wird das Sticky Bit gesetzt. Damit dürfen nur noch root, der Besitzer der zu löschenden Datei oder des zu löschenden Verzeichnisses und der Besitzer des Verzeichnisses den Inhalt dieses Verzeichnisses löschen: $ ls –ld /tmp drwxrwxrwt 5 root root 512 Jul 22 12:21 /tmp
Anstelle des Ausführrechts »x« für die Anderen wird ein »t« angezeigt. Steht an dieser Stelle stattdessen ein »T«, dann wurde nur das Sticky Bit-Zugriffsrecht, aber nicht das Ausführrecht gesetzt.
213
magnum
Spezielle Zugriffsrechte
$ id uid=324(olli) gid=82(projekt5) groups=82(projekt5),75(bau),1(other) $ cd /tmp $ touch testdatei $ ls -l testdatei -rw-r--r-- 1 olli projekt5 0 Mar 12 11:03 testdatei $ su - her $ id uid=325(her) gid=73(projekt3) groups=73(projekt3),1(other) $ cd /tmp $ rm testdatei rm: remove regular file testdatei (override protection)? Y rm: testdatei not removed: Permission denied
Hier versuchte die Benutzerin her eine Datei testdatei des Benutzers olli im Verzeichnis /tmp zu löschen. Dies gelingt ihr nicht, da sie weder root noch der Besitzer der Datei noch des Verzeichnisses ist. Die speziellen Zugriffsrechte, wie zum Beispiel SetUID- und SetGID-Bit, können auch gemeinsam gesetzt werden, dazu werden einfach ihre Oktalwerte aufaddiert und dann der Befehl chmod 6555 programm ausgeführt. Die nachfolgende Tabelle fasst die speziellen Rechte nochmals zusammen: Kategorie Spezielle Bits
Verzeichnis
Datei
Besitzer (User)
r-sr-xr-x
–
SetUID-Bit: Ausführung des Programms mit Zugriffsrechten des Besitzers; Setzen mit chmod 4555 programm
Gruppe (Group)
r-xr-sr-x
–
SetGID-Bit: Ausführung des Programms mit Zugriffsrechten der Gruppe; Setzen mit chmod 2555 programm
Gruppe (Group)
r-xr-sr-x oder
Mandatory Locking-Bit: obligatorische Gruppenzuweisung; Setzen zum Beispiel mit chmod 2555 verzeichnis
Mandatory Locking-Bit: obligatorische Dateisperre; Setzen zum Beispiel mit chmod 2644 datei
rw-r-Sr--
Andere (Other)
rwxrwxrwt
Sticky Bit: Programm verbleibt dauerSticky Bit: schränkt haft im RAM; Setzen mit chmod 1555 Löschrechte in Verzeichnissen ein; Setzen mit chmod programm 1777 verzeichnis
Tab. 5.11: Übersicht über die speziellen Bits in Linux
214
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
5.3 Datei- und Gruppenbesitz ändern In diesem Abschnitt werden unter anderem Befehle vorgestellt, mit denen Sie eine Datei oder ein Verzeichnis einem anderen Besitzer oder einer anderen Gruppe zuweisen können.
5.3.1
Der Befehl chattr
Außer dem Befehl chmod, den Sie bereits in Abschnitt 5.1.4 kennen gelernt haben, um die Zugriffsrechte zu ändern, gibt es noch den Befehl chattr, um erweiterte Dateiattribute in einem Linux-Dateisystem vom Typ ext2fs oder ext3fs zu ändern. $ chattr [-option(en)] datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-R
Rekursives Ändern der Zugriffsrechte auch für alle Unterverzeichnisse und die darin enthaltenen Dateien. Symbolische Links werden dabei nicht verfolgt.
-p
Ausführliche Ausgabe für jede verarbeitete Datei sowie Ausgabe der Programmversion
Tab. 5.12: Optionen des Befehls chattr
Das Format der symbolischen Methode ist +-=[ASacDdIijsTtu]. Dabei fügt der Operator »+« die ausgewählten Attribute den vorhandenen Dateiattributen hinzu, der Operator »-« entfernt diese und der Operator »=« setzt die ausgewählten Attribute absolut. Die möglichen Attribute bedeuten: Attribut
Bedeutung
a
Daten werden an die Datei nur angehängt (append only)
A
Keine Aktualisierung der Zugriffszeit (Atime)
c
Automatische Komprimierung der Datei; diese Option wird erst ab Kernelversion 2.5.19 unterstützt (compressed) – aber im Moment (Stand 10/2005) immer noch nicht ausgewertet
d
Bei einer Datensicherung mit dem Befehl dump wird die Datei nicht berücksichtigt.
D
Synchronisierung der Aktualisierung der Verzeichnisse
i
Keine Veränderungsmöglichkeit der Datei (immutable)
j
Eine Datei mit diesem Attribut schreibt alle ihre Daten in die Journaling-Datei des Dateisystems ext3fs, bevor diese in die Datei geschrieben werden, wenn das Dateisystem mit der Option »data=ordered« oder »data=writeback« gemountet wurde (vergleiche Kapitel 17). Nur der Superuser kann dieses Attribut setzen oder löschen.
s
Sicheres Löschen der Datei, das heißt, ihre Daten werden mit zufällig erzeugten Daten überschrieben (secure deletion)
Tab. 5.13: Attribute des Befehls chattr
215
Datei- und Gruppenbesitz ändern
magnum
Attribut
Bedeutung
S
Synchronisierung der Aktualisierungen mit den Daten der Festplatte
u
Ein Löschen der Datei ist nicht möglich (undeletable). Diese Option ist vorgesehen, um ein Wiederherstellen nach dem Löschen zu ermöglichen.
Tab. 5.13: Attribute des Befehls chattr (Forts.)
Zum Beispiel: $ chattr -V +A dat99 chattr 1.34 (25-Jul-2003) Flags of dat99 set as -------A-----
Mit diesem Befehl wurde eingestellt, dass bei einem Zugriff auf die Datei (zum Beispiel durch Lesen) die bisherige Zugriffszeit nicht aktualisiert werden soll. Das kann sinnvoll sein, wenn gewünscht wird, dass weniger Festplattenaktivität stattfinden soll.
5.3.2
Der Befehl chfn
Mit diesem Befehl können die Informationen in der Datei /etc/passwd (vergleiche Kapitel 11) geändert werden, die sich im Kommentarfeld befinden, das auch GECOS-Feld genannt wird. Die Syntax des Befehls lautet: $ chfn [-Option(en)] [benutzername]
Ohne Optionen werden die Änderungen interaktiv abgefragt. Um das komplette Kommentarfeld zu löschen, kann none verwendet werden. Der Befehl kennt zum Beispiel folgende Optionen. Die Optionen können sich aber von Distribution zu Distribution unterscheiden, daher sollten Sie sich bei Ihrer Distribution auf die Man Pages beziehen. Option
Bedeutung
-f name
Ändern des vollständigen Namens
-h tel-privat
Ändern der privaten Telefonnummer
-q oder --quiet
Keine Meldungen ausgeben
Tab. 5.14: Optionen des Befehls chfn
Im ersten Beispiel ändert root das Kommentarfeld der Benutzerin her: # grep Ute /etc/passwd her:x:500:100:Ute:/home/her:/bin/bash # chfn -f "Ute Hertzog" her Changing finger information for her. Finger information changed. # grep Ute /etc/passwd her:x:500:100:Ute Hertzog:/home/her:/bin/bash
216
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
In diesem Beispiel wird zunächst mit dem Suchbefehl grep (vergleiche Abschnitt 4.4.2) die Zeile aus der Datei /etc/passwd ausgelesen, die den Eintrag für die Benutzerin her enthält. Ihr Kommentarfeld lautet zunächst »Ute«. Mit Hilfe des Befehls chfn wird das Kommentarfeld auf »Ute Hertzog« umgeändert. Im zweiten Beispiel ändert die Benutzerin her den Eintrag für ihre geschäftliche Telefonnummer: $ chfn -p 99999 Andere Finger-Informationen für her. Password: Finger-Informationen geändert. $ grep Ute /etc/passwd her:x:500:100:Ute Hertzog,,99999:/home/her:/bin/bash
5.3.3
Der Befehl chown
Mit diesem Befehl kann der Besitzer einer Datei oder eines Verzeichnisses geändert werden. Die Syntax des Befehls lautet: $ chown [-Option(en)] besitzer datei(en)
Der neue Besitzer kann entweder mit seinem Benutzernamen oder seiner UID angegeben werden. Als Argument können Sie entweder einen oder mehrere Dateinamen angeben. Der Befehl kennt folgende Optionen: Option
Bedeutung
-c oder --changes
Gibt eine Meldung aus, wenn eine Änderung durch den Befehl durchgeführt wurde
--dereference
Anstatt des symbolischen Links selbst wird die Originaldatei verändert
-h oder --noderefence Der symbolische Link wird verändert und nicht die Originaldatei. -f oder --silent oder --quiet
Die meisten Fehlermeldungen werden unterdrückt.
-from=akt-besitzer:
Der Besitzer und/oder die Gruppe können nur geändert werden, wenn der aktuelle Besitzer und/oder die aktuelle Gruppe mit den angegebenen Besitzer bzw. der angegebenen Gruppe übereinstimmen. Es muss nur eine Angabe gemacht werden; in diesem Fall muss keine Übereinstimmung mit dem nicht spezifizierten Teil vorliegen.
-R oder --recursive
Rekursives Ändern von Besitzer und/oder Gruppe auch für alle Unterverzeichnisse und den darin enthaltenen Dateien
-v oder --verbose
Ausführliche Ausgabe für jede verarbeitete Datei
--reference=ref-datei
Anstelle von Werten für Eigentümer und/oder Gruppe werden die entsprechenden Werte der Referenzdatei verwendet.
akt-gruppe
Tab. 5.15: Optionen des Befehls chown
217
magnum
Datei- und Gruppenbesitz ändern
Wenn Sie den Besitz zum Beispiel rekursiv für ein ganzes Verzeichnis einschließlich der darunter liegenden Dateien und Unterverzeichnisse ändern möchten, dann geben Sie diesen Befehl ein: $ ls –ld testverz drwxr-xr-x 5 her projekt3 512 Jun 22 20:17 testverz $ chown –R olli testverz $ ls –ld testverz drwxr-xr-x 5 olli projekt3 512 Jun 22 20:17 testverz
Dem neuen Besitzer gehört nicht nur das Verzeichnis testverz, sondern auch alle Dateien und Unterverzeichnisse, die in diesem Verzeichnis liegen. Mit dem Befehl ändern:
chown
können Sie auch gleichzeitig den Besitzer und die Gruppe
$ ls –l projekt99 -rw-r--r-- 1 her projekt3 $ chown olli:projekt5 projekt99 $ ls –l projekt99 -rw-r--r-- 1 olli projekt5
745
Jun 29 12:27
projekt99
745
Jun 29 12:27
projekt99
Standardmäßig kann nur root den Befehl chown ausführen. Es ist allerdings möglich, die Gruppe einer Datei mit diesem Befehl zu ändern, wenn der ändernde Benutzer Mitglied der Gruppe der Datei ist.
5.3.4
Der Befehl chgrp
Mit diesem Befehl können Sie die zu einer Datei oder einem Verzeichnis gehörende Gruppe ändern. Die Syntax des Befehls lautet: $ chgrp [-option(en)] gruppe datei(en)
Der Befehl kennt folgende Optionen: Option
Bedeutung
-c oder --changes
Gibt eine Meldung aus, wenn eine Änderung durch den Befehl durchgeführt wurde
--dereference
Anstatt des symbolischen Links selbst wird die Originaldatei verändert.
-h oder --noderefence
Der symbolische Link wird verändert und nicht die Originaldatei. Diese Option steht nur auf Systemen zur Verfügung, die den Systemaufruf »chown« implementiert haben.
-f oder --silent oder --quiet Die meisten Fehlermeldungen werden unterdrückt. -R oder --recursive
Rekursives Ändern von Besitzer und/oder Gruppe auch für alle Unterverzeichnisse und den darin enthaltenen Dateien
-v oder --verbose
Ausführliche Ausgabe für jede verarbeitete Datei
--reference=ref-datei
Anstelle von Werten für die Gruppe werden die entsprechenden Werte der Referenzdatei verwendet.
Tab. 5.16: Optionen des Befehls chown
218
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
Die neue Gruppe kann entweder mit ihrem Gruppennamen oder ihrer GID angegeben werden. Als Argument können Sie einen oder mehrere Dateinamen angeben. Wenn Sie zum Beispiel die Gruppenzugehörigkeit rekursiv für ein ganzes Verzeichnis einschließlich der darunter liegenden Dateien und Unterverzeichnisse ändern möchten, dann verwenden Sie den Befehl wie folgt: $ ls –ld testverz drwxr-xr-x 5 olli proj3 512 Jun 22 20:17 testverz $ chgrp –R einkauf testverz $ ls –ld testverz drwxr-xr-x 5 olli einkauf 512 Jun 22 20:17 testverz
Die Gruppenzugriffsrechte für dieses Verzeichnis und alle Dateien und Unterverzeichnisse, die in diesem Verzeichnis liegen, gelten ab jetzt nicht mehr für die Gruppe proj3, sondern für die Gruppe einkauf. Dieser Befehl kann von jedem Benutzer ausgeführt werden. Allerdings kann ein Benutzer seinen Dateien oder Verzeichnissen nur eine neue Gruppe zuweisen, in der er selbst Mitglied ist. Dies wird anhand der Datei /etc/group überprüft (vergleiche Kapitel 11).
5.3.5
Der Befehl groups
Der Befehl groups zeigt an, zu welchen Gruppen ein Benutzer gehört. Wenn die Gruppen des aktuellen Benutzers angezeigt werden sollen, wird der Befehl ohne weitere Argumente eingegeben. $ groups einkauf proj3 other
Sollen die Gruppen eines anderen Benutzers angezeigt werden, dann wird dem Befehl der Benutzername übergeben: $ groups her proj3 verkauf staff
5.3.6
Der Befehl newgrp
Wenn ein Benutzer Mitglied in mehr als einer Gruppe ist, kann er auf diese Weise seine Gruppenidentität wechseln, das heißt, eine neue primäre Gruppe wählen. Er erhält dabei die neue effektive GID, zu der er wechselt. $ newgrp [-] gruppe
Ein Benutzer kann zudem in eine Gruppe wechseln, die ein Gruppenpasswort besitzt (vergleiche Kapitel 11), wenn er dieses kennt, ohne darin Mitglied zu sein. Wenn das optionale Flag - verwendet wird, wird die Umgebung des Benutzers so initialisiert, als hätte er sich neu angemeldet. Im anderen Fall bleibt die aktuelle Umgebung, einschließlich des aktuellen Arbeitsverzeichnisses, unverändert. Bei einem Aufruf ohne Argument oder mit einer nicht korrekten Gruppenzugehörigkeit wird eine neue Shell gestartet, aber die GID wird beibehalten. Bei einem Aufruf einer korrekten Gruppenzugehörigkeit wird eine neue Shell gestartet und eine neue effektive GID dem Benutzer zugewiesen. Wenn er nun neue Dateien oder Verzeichnisse anlegt, wird diese GID diesen zugewiesen:
219
magnum
Access Control Lists
$ ls –l projekt99 -rw-r--r-- 1 olli projekt5 745 Jun 29 12:27 projekt99 $ id uid=324(olli) gid=82(projekt5) groups=82(projekt5),73(neu),1(other) $ newgrp neu $ id uid=324(olli) gid=73(neu) groups=82(projekt5),73(neu),1(other) $ touch projekt100 $ ls –l projekt* -rw-r--r-- 1 olli neu 0 Jul 15 18:42 projekt100 -rw-r--r-- 1 olli projekt5 745 Jun 29 12:27 projekt99
Die neue effektive Gruppenzugehörigkeit bleibt so lange erhalten, bis die Shell beendet wird.
5.4 Access Control Lists Die ursprünglichen Möglichkeiten von Linux, Zugriffsrechte zu definieren, reichen manchmal nicht aus, um die Berechtigungen im gewünschten Umfang zuzuweisen. In diesem Fall bieten die Access Control Lists (ACLs) zusätzliche Möglichkeiten. Mit Hilfe von ACLs können Sie nicht nur für den Besitzer und die Gruppe einer Datei oder eines Verzeichnisses, sondern auch für weitere Benutzer oder Gruppen individuelle Berechtigungen definieren. Wenn der Benutzer doo zum Beispiel der Benutzerin her, die wie er in der Gruppe proj3 Mitglied ist, Schreibrechte für die Datei projektbericht01 geben möchte, konnte er traditionell nur der gesamten Gruppe Schreibrechte geben. Dies ist aber in der Regel nicht erwünscht. Mit ACLs ist es möglich, der Benutzerin her ein zusätzliches Schreibrecht zu geben, ohne dass deren Gruppe dieses auch erhält. Ein weiteres Beispiel ist, wenn die Benutzerin her eine Datei nicht nur für ihre primäre Gruppe projekt3, sondern auch für ihre sekundäre Gruppe einkauf lesbar machen möchte. Allerdings soll nicht jeder Systembenutzer die Datei lesen können, daher kann sie nicht einfach den Anderen das Leserecht einräumen. Mit Hilfe von ACLs lässt sich dieser Konflikt lösen. ACLs bilden also eine Erweiterung der Standardzugriffsrechte unter Linux. Sie werden mit einer Datei oder einem Verzeichnis gespeichert.
5.4.1
Der Befehl setfacl
ACLs werden mit dem Befehl setfacl zugewiesen. Die Syntax des Befehls lautet: $ setfacl –option(en) acl-einträge datei(en)
oder $ setfacl –option(en) acl-datei datei(en)
Bei einigen Linux-Distributionen sind ACLs standardmäßig bei den Dateisystemen ext2fs, ext3fs und reiserfs (vergleiche Kapitel 13) deaktiviert. Sie werden aktiviert, indem die Mountoption acl in die Dateisystemtabelle /etc/fstab für das entsprechende Dateisystem eingetragen wird (vergleiche Kapitel 13). Bei den Dateisystemen jfs und xfs ist diese Mountoption unbekannt und ACLs sind dort immer aktiv. Alternativ können Sie auch den Mountbefehl wie folgt absetzen: mount -o remount,acl /home.
220
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
Der Befehl kennt folgende Optionen, die gemeinsam mit ACL-Einträgen verwendet werden: Option
Bedeutung
-b oder --remove-all
Alle erweiterten ACL-Einträge löschen
-d oder --default
Default-ACLs definieren
-k oder --remove-default
Default-ACLs löschen
-L oder --logical
Beim Setzen von ACLs wird symbolischen Links gefolgt.
-m acl oder --modify=acl
ACL-Einträge erzeugen oder ändern
-M datei oder --modify-file=datei
Die zu ändernden ACL-Einträge werden aus der angegebenen Datei gelesen.
--mask
Die Maske mit den effektiven Rechten wird neu berechnet.
-n oder --no-mask
Die Maske mit den effektiven Rechten wird nicht neu berechnet.
-P oder --physical
Symbolischen Links wird beim Setzen von ACLs nicht gefolgt.
-R oder --recursive
Die ACLs werden rekursiv auch in Unterverzeichnissen zugewiesen.
--restore=datei
ACLs wiederherstellen (das Gegenteil von getfacl -R – vergleiche nächsten Abschnitt)
--set acl
Alle bisherigen ACL-Einträge löschen und komplett neu setzen
--set-file=datei
Die zu definierenden ACL-Einträge werden aus einer Datei gelesen.
--test
Testmodus, die ACLs werden nicht verändert.
-x acl oder --remove=acl
ACL-Eintrag oder -Einträge löschen
-X datei oder --remove-file=datei
Die zu löschenden ACL-Einträge werden aus einer Datei gelesen.
Tab. 5.17: Optionen des Befehls setfacl
ACL-Einträge bestehen aus 2 oder 3 durch Doppelpunkte getrennten Feldern. Zuerst wird der Eintragstyp angegeben, aus dem hervorgeht, was geändert wird: ein Eintrag für einen Benutzer, eine Gruppe, die Anderen oder die Maske. Anschließend kann der Name des Benutzers oder die UID bzw. der Gruppenname oder die GID eingegeben werden, sofern es sich um einen Benutzer- oder Gruppeneintrag handelt. Zuletzt werden die Berechtigungen für diesen Eintrag angegeben. Sie können mit der symbolischen oder der Oktalmethode gesetzt werden.
221
magnum
Access Control Lists
Folgende ACL-Einträge können verwendet werden: ACL-Eintrag
Bedeutung
u[ser]::rechte
Mit diesem ACL-Eintrag werden die Rechte des Besitzers definiert. Der Name oder die UID des Besitzers muss nicht angegeben werden.
g[roup]::rechte
Mit diesem ACL-Eintrag werden die Rechte der Gruppe definiert, die standardmäßig Zugriffsberechtigung auf die Datei oder das Verzeichnis hat. Der Name oder die GID der Gruppe muss nicht angegeben werden.
o[ther]:rechte
Mit diesem ACL-Eintrag werden die Rechte der Anderen für die Datei oder das Verzeichnis definiert.
u[ser]:UID:rechte
Mit diesem ACL-Eintrag werden die Rechte für einen bestimmten Benutzer gesetzt. Es ist möglich, die UID oder den Benutzernamen zu verwenden. Bei der Verwendung des Benutzernamens muss der Benutzer einen Eintrag in der Datei /etc/passwd haben.
u[ser]:name:rechte g[roup]:GID:rechte g[roup]:name:rechte m[ask]:rechte
Mit diesem ACL-Eintrag werden die Rechte für eine bestimmte Gruppe gesetzt. Es ist möglich, die GID oder den Gruppennamen zu verwenden. Bei der Verwendung des Gruppennamens muss die Gruppe einen Eintrag in der Datei /etc/group haben (vergleiche Kapitel 11). Mit diesem Eintrag wird die ACL-Maske gesetzt. Sie legt fest, welches die höchsten Zugriffsrechte für alle Benutzer und Gruppen sind, mit Ausnahme des Besitzers. Wenn Benutzer und Gruppen höhere Zugriffsrechte haben, können diese durch die Maske begrenzt werden. Die Maske bietet eine schnelle Möglichkeit, die Berechtigungen für alle Benutzer und Gruppen zu ändern.
Tab. 5.18: ACL-Einträge und ihre Bedeutung
Die Eintragstypen können abgekürzt werden, zum Beispiel u für user oder m für mask.
5.4.2
Der Befehl getfacl
Den Befehl getfacl verwenden Sie, um definierte ACL-Einträge anzusehen. Die Syntax des Befehls lautet: $ getfacl datei
Der Befehl kennt folgende Optionen: Option
Bedeutung
--access
Nur die ACL-Liste der Datei anzeigen
--all-effective
Alle effektiven Rechte anzeigen
--absolute-names
Keine führenden Schrägstriche in Pfadnamen entfernen
-d oder --default
Nur die Default-ACL-Liste anzeigen
-L oder --logical
Beim Setzen von ACLs wird symbolischen Links gefolgt.
--numeric
Die Benutzer- und Gruppen-IDs anstelle der Namen ausgeben
Tab. 5.19: Optionen des Befehls getfacl
222
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
Option
Bedeutung
--no-effective
Keine effektiven Rechte ausgeben
--omit-header
Die kommentierende Titelzeile nicht anzeigen
-P oder --physical
Symbolischen Links wird beim Setzen von ACLs nicht gefolgt.
-R oder --recursive
Die ACLs werden rekursiv auch in Unterverzeichnissen zugewiesen.
--skip-base
Dateien überspringen, die nur die Basiseinträge haben
--tabular
Ein tabellarisches Ausgabeformat verwenden
Tab. 5.19: Optionen des Befehls getfacl (Forts.)
Zum Beispiel: $ getfacl --all-effective testdatei # file: testdatei # owner: her # group: staff user::rwuser:doo:rw#effective:rwgroup::r-#effective:r-group:einkauf:rw- #effective:rwmask:rwother:r--
ACL-Einträge erkennen Sie auch mit Hilfe des Befehls ls –l. Hinter der Spalte mit den Zugriffsberechtigungen wird das Zeichen »+« angezeigt, wenn ACL-Einträge vorhanden sind: $ ls –l testdatei -rw-r--r--+ 1 her
5.4.3
staff
281
Jul 22 21:41
testdatei
ACL-Einträge erzeugen, ändern und löschen
Mit Hilfe des Befehls setfacl –m können Sie einen oder mehrere ACL-Einträge zu einer Datei hinzufügen oder verändern. Im folgenden Beispiel werden der Datei bericht0501 zwei ACL-Einträge hinzugefügt. Die Besitzerin her hat im Moment das Lese- und Schreibrecht und die Gruppe versand das Leserecht, die Anderen haben kein Zugriffsrecht. Der Benutzer doo erhält das Lese- und Schreibrecht. $ ls –l bericht0501 -rw-r----- 1 her versand 188 Jul 12 $ setfacl –m user:doo:rw bericht0501 $ ls –l bericht0501 -rw-rw----+ 1 her versand 188 Jul 12 $ getfacl --all-effective bericht0501 # file: bericht0501 # owner: her # group: versand user::rwuser:doo:rw#effective:rwgroup::r-#effective:r-mask:rwother:---
9:13
bericht0501
9:13
bericht0501
Der Benutzer doo erhält das Schreib- und Leserecht und die Maske erhält gleichzeitig einen höheren Wert, so dass sich auch die effektiven Rechte erhöhen.
223
Access Control Lists
magnum
Beachten Sie auch, dass der Befehl ls -l nun anstelle der Gruppenrechte die Maskenrechte anzeigt, um auf die maximal vergebenen Rechte hinzuweisen.
Wenn die Maske beim Setzen von ACL-Einträgen erhöht wurde und später die ACL-Einträge mit einem Schreib- oder Ausführrecht gelöscht werden, wird die Maske automatisch wieder auf das Leserecht zurückgesetzt. Es ist auch möglich, mehrere ACL-Einträge gleichzeitig zuzuweisen. Im folgenden Beispiel erhält der Benutzer san alle Rechte und die Gruppe einkauf das Lese- und Ausführrecht: $ ls –l print-skript -rwxr-x--- 1 her verkauf 1084 Jun 27 8:21 print-skript $ setfacl –m user:san:7,group:einkauf:5 print-skript $ ls –l printskript -rwxrwx---+ 1 her verkauf 1084 Jun 27 8:21 print-skript $ getfacl --all-effective print-skript # file: print-skript # owner: her # group: verkauf user::rwx user:san:rwx #effective:rwx group::r-#effective:r-group:einkauf:r-x #effective:r-x mask:rwx other:---
Verwenden Sie zur Trennung von mehreren ACL-Einträgen nur Kommata und keine Leerzeichen! Mit der Option –s können Sie einen vollständigen ACL-Eintrag setzen. Alle bisher definierten ACL-Einträge werden dabei überschrieben. Es ist notwendig, dass Sie bei dieser Option eine Angabe für jeden Eintrag definieren, auch für den Besitzer, die standardmäßige Gruppe und die Anderen: $ setfacl –-set u::7,g::4,o:0,u:doo:7,g:buha:5,m:5 testscript1 $ getfacl --all-effective testscript1 # file: testscript1 # owner: her # group: staff user::rwx user:doo:rwx #effective:r-x group::r-#effective:r-group:buha:r-x #effective:r-x mask:r-x other:---
In diesem Beispiel erhielt der Besitzer alle Rechte an seiner Skriptdatei. Die Standardgruppe staff, der Benutzer doo und die zusätzliche Gruppe buha erhielten das Lese- und Ausführrecht, und zwar effektiv, da die Maske gleichzeitig auf den Wert 5 (Lesen und Ausführen) erhöht wurde. Durch die Begrenzung der Maske auf das Schreib- und Ausführrecht hat der Benutzer doo zwar der Form halber, aber nicht effektiv das Schreibrecht. Die Anderen haben kein Zugriffsrecht auf die Datei. Mit der Option –x können Sie einen oder mehrere ACL-Einträge löschen:
224
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
$ setfacl –x g:buha testscript1 $ getfacl --all-effective testscript1 # file: testscript1 # owner: her # group: staff user::rwx user:doo:rwx #effective:r-x group::r-#effective:r-mask:r-x other:---
In diesem Beispiel wurde der ACL-Eintrag für die Gruppe buha gelöscht. Dabei genügt es, den Namen oder die GID der Gruppe anzugeben, der letzte Teil des ACL-Eintrags kann weggelassen werden. Wenn der letzte ACL-Eintrag für den Benutzer doo auch noch gelöscht wird, ist die Datei testscript1 wieder eine Datei mit den traditionellen Dateirechten: $ setfacl –x u:doo testscript1 $ getfacl --all-effective testscript1 # file: testscript1 # owner: her # group: staff user::rwx group::r-#effective:r-mask:r-other:---
Gleichzeitig wurde auch wieder die Maske auf das Leserecht zurückgesetzt.
5.5 Zugriffsrechte mit Hilfe von KDE einrichten Es ist auch möglich, dass Sie sich die Eigenschaften einer Datei im Konqueror anzeigen lassen und die Zugriffsrechte dort ändern. Zum Anzeigen genügt es bereits, den Mauszeiger auf die Datei zu positionieren:
Bild 5.4: Dateieigenschaften anzeigen lassen
225
Zugriffsrechte mit Hilfe von KDE einrichten
magnum
Zum Ändern klicken Sie mit der rechten Maustaste auf die Datei, die Sie bearbeiten möchten, und wählen im Kontextmenü die Option EIGENSCHAFTEN:
Bild 5.5: Dateirechte ändern
In der ersten Registerkarte ALLGEMEIN werden allgemeine Dateiinformationen angezeigt, wie zum Beispiel die Größe, das letzte Änderungsdatum und der Pfadname:
Bild 5.6: Anzeige der Dateieigenschaften
226
Kapitel 5 · Zugriffsschutz für Dateien und Verzeichnisse anwenden
In der zweiten Registerkarte BERECHTIGUNGEN können Sie die Dateizugriffsrechte für den Eigentümer, die Gruppe und die Anderen ändern, die Datei als ausführbar definieren und den Eigentümer festlegen:
Bild 5.7: Berechtigungen ändern
Der Besitzer wird im unteren Fensterbereich geändert:
Bild 5.8: Besitzer einer Datei ändern
227
Zugriffsrechte mit Hilfe von KDE einrichten
magnum
Wenn Sie auf ERWEITERTE BERECHTIGUNGEN klicken, können Sie die Zugriffsrechte für die drei Benutzerklassen nochmals bearbeiten und die Spezialbits aktivieren oder deaktivieren:
Bild 5.9: Spezielle Zugriffsrechte definieren
228
6 Grundlagen der Shells und Shellskriptprogrammierung »Und so sage ich zum letzten Male: Natur hat weder Kern noch Schale. Dich prüfe du nur allermeist, ob du Kern oder Schale seist!« – Johann Wolfgang von Goethe Selbst im Zeitalter der grafischen Oberflächen ist es immer noch sehr nützlich, sich auch auf der Ebene der Kommandozeile auszukennen, das heißt, die Möglichkeiten einer Shell zu nutzen. In diesem Kapitel werden die wichtigsten Funktionen einer Shell erklärt, wie zum Beispiel der Pipe-Mechanismus und die Umlenkung der Ein- und Ausgabe. Die Hauptkomponenten eines Linux-Systems sind der Kernel, der Kommandointerpreter bzw. die Shell sowie die Dienst- und alle anderen Linux-Programme. Der Kernel ist das eigentliche Betriebssystem, das die Hardware steuert und mittels Schnittstellen von der Shell oder Dienstprogrammen angesteuert werden kann. Eine Shell ist eine Benutzerschnittstelle und zugleich ein Benutzerprogramm, das über einen Befehl aufgerufen werden kann. Sie ist also nicht Bestandteil des Betriebssystems und kann durch beliebige andere Benutzerschnittstellen ersetzt werden. Die Shell wird beim Anmelden des Benutzers gestartet und bleibt so lange aktiv, bis der Benutzer seine Sitzung wieder beendet hat. Welche Shell für einen Anwender gestartet wird, entscheidet der Eintrag für den Benutzer in der Datei /etc/passwd (vergleiche Kapitel 11). Ein Benutzer kann aber über eine seiner Initialisierungsdateien oder durch Aufruf direkt an der Befehlszeile eine Shell seiner Wahl starten bzw. die Shell mit dem Befehl chsh (vergleiche Kapitel 11) ändern. Ihre Bezeichnung leitet sich daraus ab, dass sich die Shell wie eine Schale um den Kernel legt. Sie wird aber auch als Befehlsinterpreter bezeichnet, da sie auf die Befehle des Benutzers reagiert und diese ausführt. Die Shell bildet die Schnittstelle zwischen dem Benutzer und dem System. Sie besitzt auch fest eingebaute Befehle, wie zum Beispiel set oder if oder exit. Eine Shell ist zugleich eine Art Programmiersprache. Dazu werden die Shellbefehle in einer Textdatei hinterlegt, die hinterher die Ausführrechte erhält. Diese Shellskriptsprache bietet als Programmiersprache neben den Befehlen wichtige Programmierelemente, wie zum Beispiel Variablen, Wiederholungen, Schleifen, Funktionsaufrufe oder Bedingungsabfragen wie die if- oder case-Anweisung. Die Shell ist an sich interaktiv, so dass der Anwender sofort nach Eingabe eines Befehls eine entsprechende Rückmeldung erhalten kann, sofern der Befehl selbst mit interaktiven Optionen ausgeführt wird (zum Beispiel -i), ansonsten erhält der Benutzer nur dann eine Rückmeldung, wenn der Befehl nicht ausgeführt werden konnte. Dies ist zum Beispiel der Fall, wenn die Shell den Befehl nicht in einem der in der Variablen PATH (vergleiche Abschnitt 6.4) definierten Verzeichnisse findet oder eine Option oder ein Argument falsch eingegeben wurde. Die Befehle einer Shell sind flexibel und umfangreich und lassen sich auch miteinander zu mächtigen Befehlen verketten. Ein Linux-System kann sehr gut auch ohne grafische Oberfläche nur mit einer Shell vollständig administriert werden.
229
Arten von Shells
magnum
Eine Shell besitzt in der Regel folgende Eigenschaften:
쮿
Möglichkeiten zur interaktiven Verarbeitung
쮿
Hintergrundverarbeitung
쮿
Ein-/Ausgabeumlenkung
쮿
Pipe-Mechanismus (Hintereinanderschalten von Befehlen mit Datenübergabe)
쮿
Verwendung von Metazeichen (Wildcards)
쮿
Shellskriptprogrammierung
쮿
Shellvariablen, die das Verhalten der Shell und anderer Programme durch Daten steuern, die in Variablen gespeichert werden
쮿
Individuelle Konfiguration durch den Benutzer
Zu den Hauptaufgaben von Shells gehören:
쮿
Analyse der Befehlseingabe (Syntax)
쮿
Suche nach Befehlen im Verzeichnisbaum
쮿
Ersetzen von Sonderzeichen
쮿
Steuerung der Ein-/Ausgabe
쮿
Steuerung des Ablaufs des Befehls
쮿
Erzeugung von Vorder- und Hintergrundprozessen
쮿
Prüfung der Zugriffsberechtigungen
쮿
Erzeugen von Subshells (wiederholter Aufruf der Shell als eigenständiger Prozess)
6.1 Arten von Shells Da eine Shell auch nur ein aufrufbares Programm ist, sind die Shells unterschiedlich umfangreich, je nach Absicht der Entwickler. Die verschiedenen Shells, die Sie heute unter Linux verwenden können, sind zumeist im Laufe der Jahre unter Unix entstanden und dabei durch bestimmte Funktionalitäten ergänzt worden. Die Shells unterscheiden sich also hinsichtlich ihrer Funktionen. Einige Shells haben zum Beispiel keine History-Funktion (Auflisten vergangener Befehle). Die Befehle der verschiedenen Shells unterscheiden sich ebenfalls teilweise, was bei der Entwicklung von Shellskripten berücksichtigt werden muss. Die Shells verwenden zum Teil unterschiedliche Promptzeichen. Wenn Sie sich als Superuser root anmelden, haben Sie in der Regel unabhängig von der Shell das Hashzeichen # als Promptzeichen.
230
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Die folgende Tabelle listet einige der bekanntesten Shells auf. Shell und Aufruf
Beschreibung
Bourne-Shell – sh
Sie wurde nach ihrem Entwickler Steven Bourne benannt und ist die ursprüngliche Shell für Unix. Als älteste Shell hat sie den kleinsten Befehlsumfang und kennt keine History- und Aliasfunktionen. Ihr Promptzeichen ist standardmäßig das Dollarzeichen ($).
C-Shell – csh
Sie wurde von Bill Joy an der University of California in Berkeley gemeinsam mit der BSD-Linux-Variante entwickelt. Sie enthält die Alias- und History-Funktionen und einen Befehlszeileneditor. Ihr Promptzeichen ist das Prozentzeichen (%).
Korn-Shell – ksh
Diese von David Korn entwickelte Shell ist eine Weiterentwicklung der Bourne-Shell. Ihr Promptzeichen ist auch das Dollarzeichen. Sie enthält ähnliche Erweiterungen wie die C-Shell.
Bourne-Again-Shell – bash
Sie wurde von der Free Software Foundation als Bestandteil des GNU-Projekts entwickelt und ist die Standardshell unter Linux. Neben dem Befehlsumfang der Bourne-Shell enthält sie auch die Alias- und History-Funktionen und den Befehlszeileneditor.
T-Shell oder TC-Shell – tcsh
Sie ist eine erweiterte C-Shell, verfügt aber im Gegensatz zur C-Shell über einige zusätzliche nützliche Funktionen, wie zum Beispiel eine Syntaxkorrektur.
Public-DomainKorn-Shell – pdksh
Sie ist eine Implementierung der Korn-Shell, die das Unternehmen AT&T als »Public domain«-Version veröffentlicht hat. Sie ist der Korn-Shell sehr ähnlich, wobei ihr aber einige wichtige Funktionen fehlen, die der Korn-Shell als Shellskriptsprache zur Verfügung stehen.
Z-Shell – zsh
Sie ist mit der Korn-Shell am engsten verwandt, wobei sie aber auch viele Funktionen der Bourne-Again-Shell, der TC-Shell und der KornShell miteinander verbindet. Darüber hinaus verfügt sie noch über einige zusätzliche Eigenschaften.
Tab. 6.1: Arten von Shells
Darüber hinaus gibt es noch weitere Shells. So wird zum Beispiel die Remote-Shell (rsh) für Remote-Zugriffe auf andere Rechner verwendet und die Secure Shell (ssh), stellt ein sicheres Anmeldesystem als Ersatz für Remote-Anmeldungen über telnet, rlogin usw. dar (vergleiche Kapitel 18). Wenn eine Shell aufgerufen, also zum Beispiel bei der Anmeldung gestartet wird, dann wird sie zum Vaterprozess aller Prozesse, die anschließend vom Benutzer in dieser Shell aufgerufen werden. Aus einer Shell heraus ist es auch möglich, andere Shells zu starten. Dabei erzeugt der Systemaufruf fork einen Kindprozess für die gestartete Shell. Eine Shell lässt sich jederzeit durch den Befehl exit beenden.
231
Sonderzeichen der Shells
magnum
6.2 Sonderzeichen der Shells In diesem Abschnitt lernen Sie die Sonderzeichen der Shells kennen. Diese sollten einerseits in Datei- und Verzeichnisnamen gemieden werden, um Probleme beim Bearbeiten der Datei bzw. des Verzeichnisses zu vermeiden. Andererseits bieten diese so genannten Metazeichen die Möglichkeit, Wildcards für Datei- und Verzeichnisnamen zu verwenden oder Befehle miteinander zu verbinden, oder können in Shellskripten eingesetzt werden. Das Betriebssystem Unix und damit auch Linux besteht aus einer großen Anzahl verschiedener kleiner Tools, die sich miteinander kombinieren lassen. Dabei wird der Benutzer der Befehlszeile bzw. ein Shellskriptprogrammierer einerseits von Metazeichen unterstützt, die die Eingabe vereinfachen, wie zum Beispiel dem Stern oder dem Fragezeichen, und andererseits von Sonderzeichen, die aus zwei oder mehreren kleinen Befehlen ein mächtiges Tool basteln, wie zum Beispiel das Pipe-Zeichen.
6.2.1
Metazeichen
Metazeichen vereinfachen den Aufruf von Befehlen, die für viele Dateien oder Verzeichnisse gelten sollen. Dabei werden diese Metazeichen als Platzhalter für Dateinamen oder Teile von Dateinamen eingesetzt. Die Shell ersetzt Metazeichen noch vor Ausführung des Befehls, so dass dem Befehl selbst eine Liste aller Dateinamen übergeben wird, die nach der Auflösung der Metazeichen gefunden wurden, zum Beispiel: $ ls her her1 her2 her3 her4 her11 her12 her111 her99 herb herd $ ls her?
Das Fragezeichen ist ein Platzhalter für genau ein beliebiges Zeichen. Vor der Ausführung des Befehls ls sucht die Shell nach Dateien, die diesem Muster entsprechen, und übergibt sie dem Befehl, so dass dieser anschließend folgendermaßen ausgeführt wird: $ ls her1 her2 her3 her4 herb herd her1 her2 her3 her4 herb herd
Das Fragezeichen ? Das Fragezeichen steht für genau ein beliebiges Zeichen in einem Dateinamen, allerdings nicht für den Punkt am Anfang des Dateinamens einer versteckten Datei. Versteckte Dateien beginnen unter Linux immer mit einem Punkt, wie zum Beispiel .profile. Dabei handelt es sich in der Regel um Initialisierungs- oder Konfigurationsdateien. Versteckte Dateien und Verzeichnisse lassen sich mit dem Befehl ls –a anzeigen. Im nachfolgenden Beispiel steht das Fragezeichen für das vierte Zeichen eines Dateinamens: $ ls her her1 her2 her3 her4 her11 her12 her111 her99 herb herd $ ls her? her1 her2 her3 her4 herb herd
Es werden nur die Dateien aufgelistet, die mit »her« beginnen und an vierter Stelle ein beliebiges Zeichen besitzen.
232
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Der Stern * Der Stern steht für kein, ein oder mehrere beliebige Zeichen in einem Dateinamen, auch für Leerzeichen. Aber auch er kann nicht als Platzhalter für den Punkt am Anfang eines Dateinamens verwendet werden. Im nachfolgenden Beispiel steht der Stern für eine Zeichenfolge am Ende eines Dateinamens: $ ls her her1 her2 her3 her4 her11 her12 her111 her99 herb herd $ ls her* her her1 her2 her3 her4 her11 her12 her111 her99 herb herd
Es werden alle Dateien aufgelistet, die mit »her« beginnen und beliebig enden.
Die eckigen Klammern [ ] Die eckigen Klammern stehen für genau ein Zeichen in einem Dateinamen, das sich innerhalb der Klammern befindet. So steht der Auswahlbereich [cmx] für die Zeichen c oder m oder x. Der Auswahlbereich [L–O] umfasst die Zeichen L oder M oder N oder O (groß geschrieben!) und [6–9] bedeutet 6 oder 7 oder 8 oder 9. Im nachfolgenden Beispiel steht die Auswahl in den eckigen Klammern für eines der darin enthaltenen Zeichen am Ende eines Dateinamens: $ ls her[1–4] her1 her2 her3 her4
Es werden alle Dateien aufgelistet, die mit »her« beginnen und entweder mit 1 oder 2 oder 3 oder 4 enden. Das nächste Beispiel listet alle Dateien auf, die an der vierten und fünften Stelle jeweils das Zeichen 1 oder 9 haben und beliebig enden: $ ls her[19][19]* her11 her111 her99
Die eckigen Klammern mit vorangestelltem Ausrufezeichen definieren einen negierten Auswahlbereich. Dieser repräsentiert genau ein Zeichen, das nicht an der entsprechenden Stelle stehen darf. Es sind also alle Zeichen an der Stelle zugelassen, die nicht in den Klammern stehen, zum Beispiel: $ ls her[!1-4] herb herd
Die Shell sucht hier nach allen Dateien, die mit »her« beginnen und vier Zeichen lang sind. Das vierte Zeichen darf weder die Zahl 1 noch 2 noch 3 noch 4 sein. Bei der C- und TC-Shell wird der negierte Auswahlbereich nicht mit einem Ausrufezeichen (!) versehen, sondern mit dem Accent circonflexe ^, da das Ausrufezeichen bei diesen Shells bereits für den History-Mechanismus verwendet wird. Die Bourne-Again-Shell akzeptiert beides.
233
Sonderzeichen der Shells
magnum
Die geschweiften Klammern {} Die bisher vorgestellten Metazeichen beziehen sich alle auf Datei- oder Verzeichnisnamen, während in den geschweiften Klammern einfach alle einzusetzenden Möglichkeiten angegeben werden. Da die verschiedenen Möglichkeiten auch aus mehreren Zeichen bestehen können, wird zwischen diesen das Komma als Trennzeichen verwendet. Es können auch mehrere Klammern in einem Ausdruck angegeben werden, wodurch alle Möglichkeiten miteinander kombiniert werden können. Im nachfolgenden Beispiel wird die Auswahl in den geschweiften Klammern für jede Angabe aufgelöst: $ echo {anna,berta,caesar} anna berta caesar
Das nächste Beispiel listet alle Dateien auf, die an der vierten und fünften Stelle jeweils das Zeichen 1 oder 9 haben und beliebig enden: $ echo t{a,o}nne tanne tonne
Im nachfolgenden Beispiel wird die Auswahl von beiden geschweiften Klammern miteinander kombiniert: $ echo {eins,zwei,drei}{a,b,c} einsa einsb einsc zweia zweib zweic dreia dreib dreic
Auch beim Anlegen mehrerer Verzeichnisse untereinander können die geschweiften Klammern Schreibarbeit sparen, da die Möglichkeiten miteinander kombiniert werden: $ mkdir -p verz/{a,b}/{eins,zwei} $ ls -R verz verz: . .. a b test/a: . .. c d test/a/c: . .. test/a/d: . .. test/b: . .. c d test/b/c: . .. test/b/d: . ..
234
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Das Kommentarzeichen # Alle Zeichen, die einem Kommentarzeichen folgen, werden von der Shell nicht ausgewertet, sondern als Kommentar ignoriert. $ echo "Jetzt kommt ein Kommentar" #Ende Jetzt kommt ein Kommentar
Das Semikolon ; Sie können mehrere Befehle in einer Befehlszeile eingeben und durch den Strichpunkt voneinander trennen. In diesem Fall wird ein Befehl nach dem anderen ausgeführt, genau so, als wenn die (¢)-Taste nach einer Befehlseingabe betätigt wird. Die Befehle werden völlig unabhängig voneinander ausgeführt. Das Semikolon kommt vor allem in Shellskripten zum Einsatz. Im nachfolgenden Beispiel wird zuerst der Befehl cd setzt:
/etc,
dann der Befehl pwd abge-
$ cd /etc ; pwd /etc
Das Ampersand-Zeichen & Dieses Zeichen wird verwendet, um einen Prozess im Hintergrund zu starten, damit die Befehlszeile nicht blockiert wird. Im nachfolgenden Beispiel wird der Befehl find im Hintergrund ausgeführt, da er den gesamten Verzeichnisbaum nach Dateien mit dem Namen core durchsucht, was eine gewisse Zeit benötigt. Die Ausgabe wird in eine Datei core_liste und die Fehlerausgabe in eine Datei fehler_liste umgelenkt (vergleiche Abschnitt 6.2.2). Da der Befehl in den Hintergrund gestellt wird, steht der Eingabeprompt für weitere Eingaben zur Verfügung, während der Befehl arbeitet: $ find / -name core –ls > core_liste 2> fehler_liste &
Mit dem Befehl jobs können Sie sich anzeigen lassen, welche Jobs Sie im Hintergrund gestartet haben, und mit dem Befehl fg den zuletzt in den Hintergrund gestellten Job wieder in den Vordergrund bringen. Eine ausführliche Anleitung, wie Sie Hintergrundjobs steuern können, finden Sie in Kapitel 18 im Abschnitt »Jobkontrolle«.
Das doppelte Ampersand-Zeichen && In einem Shellskript kann mit Hilfe von zwei Ampersand-Zeichen eine UND-Verknüpfung programmiert werden. Die Zeile befehl1 && befehl2
bedeutet, dass der zweite Befehl nur ausgeführt wird, wenn der erste Befehl erfolgreich war, zum Beispiel kann in einem Shellskript mit der Anweisung cd verz && programm
gesteuert werden, dass ein Programm nicht gestartet wird, wenn ein bestimmtes Verzeichnis existiert.
235
Sonderzeichen der Shells
magnum
Die runden Klammern ( ) In runden Klammern aufgerufene Befehle werden in einer Subshell gestartet, also als eigenständiger Prozess abgearbeitet. Das gilt auch für Variablen, die innerhalb dieser Subshell deklariert und verwendet werden. Nach Beendigung der Subshell wird in die aktuelle Shell zurückgekehrt. Im nachfolgenden Beispiel wird in einer Subshell in das Verzeichnis /usr verzweigt und der Befehl pwd abgesetzt. Anschließend befindet sich der Anwender wieder in seiner aktuellen Shell: $ pwd /etc $ (cd /usr ; pwd) /usr $ pwd /etc
Auch die runden Klammern werden vor allem in Shellskripten verwendet.
Das Dollarzeichen $ Wird einem Variablennamen das Dollarzeichen vorangestellt, so wird nicht mehr der Name, sondern der Wert einer Variablen verwendet (vergleiche Abschnitt 6.4). Programme, wie zum Beispiel auch Betriebssysteme, verwenden Variablen. Diese enthalten Werte, die an bestimmten Stellen vom System abgefragt werden. Dies hat den Vorteil, dass der Wert nur an einer Stelle zugeordnet werden muss, aber von den verschiedensten Programmen abgerufen werden kann. Da dieser Wert bei Bedarf geändert werden kann, also variabel ist, spricht man von Variablen. Die Variable SHELL enthält zum Beispiel als Wert die verwendete Anmeldeshell. Im nachfolgenden Beispiel wird der Wert mit Hilfe des Befehls echo und einem vorangestellten Dollarzeichen ausgelesen: $ echo $SHELL /bin/ksh
Die Anmeldeshell ist in diesem Fall die Korn-Shell.
Der Backslash \ Mit dem Backslash können Sonderzeichen maskiert werden. Man nennt dies auch Quotierung. Damit wird dem Zeichen seine besondere Bedeutung genommen und es wird wie ein gewöhnliches Zeichen interpretiert. Wird zum Beispiel der Stern maskiert mit \*, dann hat er nur noch die Bedeutung des Zeichens * und gilt nicht mehr als Platzhalter für eine beliebige Menge von Zeichen. Im nachfolgenden Beispiel maskiert der Backslash das Dollarzeichen: $ echo $HOME /export/home/her $ echo \$HOME $HOME
Da das Dollarzeichen nun nur noch als Zeichen interpretiert wird, nicht mehr als Metazeichen, wird statt des Pfads des Homeverzeichnisses nur der Ausdruck $HOME ausgegeben.
236
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Die einfachen Hochkommata '…' Eine weitere Möglichkeit, um die Bedeutung von Metazeichen zu quotieren, besteht darin, das gesamte Argument in einfache Hochkommata zu setzen. Diese maskieren ohne Ausnahme alle Sonderzeichen: $ echo '$HOME' $HOME
Das Dollarzeichen innerhalb der Hochkommata hat keine Sonderbedeutung mehr, sondern wird als Dollarzeichen ausgegeben.
Die doppelten Hochkommata »…« Auch die doppelten Hochkommata lassen sich zur Quotierung von Metazeichen verwenden. Im nachfolgenden Beispiel wird ein Semikolon in einem Dateinamen mit Hilfe der Anführungszeichen quotiert: $ ls test.dat test;dat $ ls "test;dat" test;dat
Ohne die Quotierung würde das Semikolon als Befehlstrenner betrachtet werden und daher zu einer Fehlermeldung führen. Die doppelten Hochkommata quotieren allerdings nicht alle Sonderzeichen. Die drei Ausnahmen, die nicht maskiert werden, sind der Backslash (\), das Dollarzeichen ($) und die rückwärtigen Hochkommata (`...`) (siehe nächster Absatz): $ echo "$HOME" /export/home/her
Das Dollarzeichen innerhalb der doppelten Hochkommata behält seine Sonderbedeutung bei.
Die rückwärtigen Hochkommata `…` Diese Hochkommata dienen der Befehlssubstitution. Sie werden manchmal auch als Backquotes oder Backticks bezeichnet. Ein in rückwärtige Hochkommata gefasster Befehl wird ausgeführt und seine Ausgabe wird gegebenenfalls weiterverarbeitet. Im nachfolgenden Beispiel wird eine Befehlssubstitution mit dem Befehl date durchgeführt: $ echo date date $ echo `date` Thu Jul 2 12:32 MET DST 2001
Beim ersten Befehl wird nur die Zeichenfolge »date« zurückgegeben. Der zweite Befehl gibt die Zeichenfolge aus, die die Shell erhält, nachdem sie den Befehl date ausgeführt hat. Eine alternative Schreibweise für die Befehlssubstitution ist: $ echo $(date) Thu Jul 2 12:32 MET DST 2001
237
Sonderzeichen der Shells
magnum
Die Befehlssubstitution ermöglicht es, die Ergebnisse beliebig komplexer Befehle als Argument an einen anderen Befehl zu geben. Möglich sind auch Kombinationen wie befehl3 `befehl1 && befehl2`.
Das Tildezeichen ~ Das Tildezeichen ist eine Abkürzung für das Homeverzeichnis eines Benutzers, zum Beispiel: $ echo $HOME /export/home/her $ pwd /etc $ cd ~/protokoll/berichte/2001 ; pwd /export/home/her/protokoll/berichte/2001
Mit Hilfe des Tildezeichens erfolgt hier eine Verzweigung in ein Unterverzeichnis des Homeverzeichnisses. Das Tildezeichen lässt sich auch verwenden, um in ein bestimmtes Benutzerverzeichnis zu gelangen. Dabei wird dem Benutzernamen, dem das Benutzerverzeichnis gehört, das Tildezeichen vorangestellt: $ pwd /etc $ cd ~/olli ; pwd /export/home/olli
Das Tildezeichen wird von der Bourne-Shell nicht als Sonderzeichen erkannt.
Das Minuszeichen – Zum schnellen Wechseln zwischen zwei Verzeichnissen kann das Minuszeichen verwendet werden. Dabei wird auch automatisch das Verzeichnis angezeigt, in das gewechselt wurde: $ cd /etc ; pwd /etc $ cd /export/home/her/protokoll/berichte/2001 ; pwd /export/home/her/protokoll/berichte/2001 $ cd /etc $ cd /export/home/her/protokoll/berichte/2001
Das Minuszeichen wird nur von der Korn-Shell und der Bourne-Again-Shell verwendet.
Das Ausrufezeichen ! Das Ausrufezeichen wird in der C-Shell und in der Bourne-Again-Shell in Verbindung mit der History-Funktion verwendet.
238
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
6.2.2
Ein-/Ausgabeumlenkung
Die Shell liest die Befehlseingaben von der Tastatur ein und gibt die Befehlsausgaben am Bildschirm aus. Mit Hilfe der Umlenkungszeichen < und > können Befehlseingaben und -ausgaben umgelenkt werden. Durch die Eingabeumlenkung ist es zum Beispiel möglich, dass ein Befehl die erforderliche Eingabe aus einer Datei statt von der Tastatur liest. Durch die Ausgabeumlenkung dagegen lässt sich die Ausgabe von einer Befehlszeile in eine Datei umlenken oder an einen anderen Befehl mit Hilfe einer Pipe (vergleiche Abschnitt 6.2.3) senden. Technisch wird die Umlenkung dadurch realisiert, dass alle Ein- und Ausgaben über Kanäle an ein Programm gegeben bzw. von einem Programm ausgegeben werden. Das Programm selbst weiß in aller Regel nicht, ob und welches Gerät hinter den Kanälen steckt. Damit kann der Ausgabekanal eines Programms auf den Eingabekanal eines anderen Programms oder in eine Datei umgeleitet werden. Umgekehrt kann eine Datei als Eingabekanal definiert werden. Für die Kommunikation eines Programms sind unter Linux standardmäßig drei Kanäle festgelegt:
쮿
Die Standardeingabe (stdin) mit File Descriptor 0 (null)
쮿
Die Standardausgabe (stdout) mit File Descriptor 1
쮿
Die Standardfehlerausgabe (stderr) mit File Descriptor 2
File Descriptors oder Dateizeiger werden vom Betriebssystem für den Zugriff auf Dateien verwendet. Sie entsprechen den Kanalnummern bei der Ein-/Ausgabeumlenkung. Wenn ein Programm eine Datei lesen oder schreiben möchte, muss diese Datei geöffnet werden, wobei die Shell mit dieser Datei einen File Descriptor verknüpft. Die Ein- und Ausgabekanäle sind in praktischer Hinsicht also wie Dateien zu sehen. Mit Hilfe der Dateizeiger definiert die Shell, woher die Eingabe eines Befehls eingelesen wird und wohin die Ausgabe und Fehlermeldungen ausgegeben werden. Kanalbezeichnung
Abkürzung
Kanalnr.
Verwendete Sonderzeichen
Standardeingabe
stdin
0
0< oder <
Standardausgabe
stdout
1
1> oder >
Standardfehlerausgabe
stderr
2
2>
Standardausgabe + Standardfehlerausgabe
stdout + stderr
1 + 2
1> datei 2>&1
Tab. 6.2: Sonderzeichen der Datenumlenkung
Die C- und TC-Shell kennen die Standardfehlerausgabe nicht. In ihrem Fall erfolgt durch die Verwendung der Sonderzeichen >& eine gemeinsame Umlenkung von Standardausgabe und Fehlerausgabe in eine Datei.
239
Sonderzeichen der Shells
magnum
Befehle, die den Inhalt von Dateien bearbeiten, lesen in der Regel von der Standardeingabe und geben auf die Standardausgabe aus. Der Befehl cat zum Beispiel liest von der Standardeingabe und schreibt auf die Standardausgabe. Im folgenden Beispiel bildet die erste Zeile das Lesen von der Tastatur und die zweite Zeile das Schreiben auf den Bildschirm ab: $ cat Dies ist Dies ist Dies ist Dies ist ^D
die die die die
erste Zeile erste Zeile zweite Zeile zweite Zeile
Mit (Ctrl)+(d) wird die Eingabe abgebrochen. Die vorgegebene Einstellung von Standardeingabe, Standardausgabe und Standardfehlerausgabe lässt sich mit Hilfe der oben genannten Sonderzeichen ändern. Im nachfolgenden Beispiel wird die Standardeingabe umgelenkt. Der Befehl mailx liest normalerweise von der Standardeingabe, wenn ein Benutzer eine E-Mail verfasst. In diesem Beispiel wird dem Befehl aber die Eingabe aus der Datei protokoll vorgegeben, die E-Mail wird also mit dem Inhalt dieser Datei erstellt: $ mailx her@suso1 < protokoll
In dem Fall wird die Datei wie ein an die E-Mail angehängter Anhang an die Benutzerin her auf dem Rechner suso1 versandt. Die Befehlsausgabe kann ebenfalls in eine Datei umgelenkt werden. Existiert die Datei noch nicht, dann wird sie neu erzeugt. Ist sie bereits vorhanden, dann wird der Inhalt der Datei durch die Umlenkung überschrieben, wenn die Shelloption für den Überschreibschutz nicht aktiviert wurde (vergleiche Abschnitt 6.4). In diesem Beispiel wird der Inhalt eines Verzeichnisses ausgegeben und die Ausgabe in eine Datei umgelenkt: $ ls –l > dateiliste
Existiert die Datei dateiliste schon, wird sie in diesem Fall überschrieben, ansonsten neu angelegt. Eine Befehlsausgabe lässt sich auch ans Ende einer bereits bestehenden Datei anhängen. Im folgenden Beispiel wird der Satz »Ende der Liste« an diese Datei gehängt: $ echo "Ende der Liste" >> dateiliste
In einigen Shells, wie zum Beispiel der Bourne-, Korn- und Bourne-Again-Shell, ist eine getrennte Umlenkung von Ausgabe und Fehlerausgabe möglich. Das folgende Beispiel zeigt, wie die Ausgabe weiterhin an die Standardausgabe Bildschirm gesendet wird, während die Fehlerausgabe in eine Datei geleitet wird: $ ls /var /nix 2> /tmp/fehler X11R6 adm games lib log opt spool yp account cache heimdal lock mail run tmp $ cat /tmp/fehler /nix: No such file or directory
Es ist auch möglich, die Standardausgabe und die Standardfehlerausgabe in unterschiedliche Dateien umzulenken (nicht bei der C-Shell oder TC-Shell möglich): $ ls /var /nix > /tmp/ausgabe 2> /tmp/fehler
240
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Eine weitere Möglichkeit ist, beide Ausgaben in eine Datei zu lenken. Die Syntax bei der C- oder TC-Shell lautet dann: $ ls /var /nix >& /tmp/ausgabe
Bei den anderen in diesem Buch behandelten Shells lautet die Syntax für diesen Fall: $ ls /var /nix > /tmp/fehler 2>&1
Außer den drei Standardkanälen kennt die Shell noch andere Kanäle. Diese können beliebig verwendet werden, wovon meist in Shellskripten Gebrauch gemacht wird.
6.2.3
Pipe-Mechanismus
Mit Hilfe des Pipe-Mechanismus lassen sich auf effiziente Weise zwei Befehle miteinander verbinden. Eine Pipe wird durch das Zeichen | definiert und zwischen zwei Befehlen positioniert, wobei die Ausgabe des ersten Befehls direkt als Eingabe für den nachfolgenden Befehl dient. Die Syntax des Befehls lautet: $ befehl1 | befehl2 | befehl3
Befehle lassen sich theoretisch unbegrenzt über Pipes verketten, vorausgesetzt, der vorangehende Befehl schreibt seine Ausgabe auf die Standardausgabe und der nachfolgende Befehl liest seine Eingabe von der Standardeingabe. In diesem Beispiel wird die Ausgabe des Befehls ls –l /etc dem Befehl grep übergeben, der nach dem Muster rc sucht und dann die Namen aller Dateien ausgibt, die das Suchmuster enthalten: $ ls –l /etc | grep rc.d lrwxrwxrwx 1 root root 6 2004-01-17 13:50 rc.d -> init.d -rw-r--r-- 1 root root 611 2002-05-21 17:01 rc.d.README
Der nachfolgende Befehl gibt aus, wie viele Bourne-Again-Shells im System im Moment gestartet sind: $ ps -ef | grep bash | grep –v grep | wc –l 4
Der erste Befehl ps sendet eine Liste von allen aktiven Prozessen an den zweiten Befehl grep, der die Liste nach dem Muster bash durchsucht. Das Ergebnis wird dann dem dritten Befehl grep übergeben, der aus der Liste nur noch die Zeilen als Ausgabe weitergibt, die nicht das Muster grep enthalten (da der »grep bash«Befehl ebenfalls in der Prozessliste steht, muss er herausgerechnet werden). Der vierte Befehl wc zählt schließlich die Zeilen, die der dritte Befehl grep als Ausgabe übergab, und gibt die Anzahl der Zeilen aus, was gleichbedeutend mit der Anzahl der aktiven Bourne-Again-Shells ist. Zu den gebräuchlichsten Befehlen, die mit einer Pipe verkettet werden, gehören ls, ps, head, tail, more, cat, sort, lp, grep und wc.
241
magnum
Sonderzeichen der Shells
Das doppelte Pipe-Zeichen In einem Shellskript kann mit Hilfe von zwei Pipe-Zeichen eine ODER-Verknüpfung programmiert werden. Die Zeile befehl1 || befehl2
bedeutet, dass der zweite Befehl nur ausgeführt wird, wenn der erste Befehl nicht erfolgreich war. Im folgenden Beispiel ermittelt die if-Anweisung in einem Shellskript, ob ein Jahr ein Schaltjahr ist oder nicht: if (( (jahr % 400) == 0 )) || (( (jahr % 4 ) == 0 && ( jahr % 100 ) != 0 )) then print "Das Jahr ist ein Schaltjahr" else print "Das Jahr ist kein Schaltjahr" fi
Die Schaltjahrberechnung lautet: alle 4 Jahre ein Schaltjahr, alle vollen 100 Jahre nicht, aber alle vollen 400 Jahre jedoch wieder. In der if-Anweisung wird geprüft, ob ein Jahreswert durch 400 geteilt 0 ergibt (entspricht der Bedingung »alle 400 Jahre«) oder ob sich das Jahr durch 4 teilen lässt und 0 ergibt, aber gleichzeitig beim Teilen durch 100 ungleich 0 ist (entspricht der Bedingung »alle 4 Jahre, aber alle vollen 100 Jahre nicht«). Wenn eine der beiden Abfragen zutrifft, handelt es sich um ein Schaltjahr und eine entsprechende Meldung wird ausgegeben.
6.2.4
Gesamtüberblick über die Sonderzeichen
Die folgende Tabelle fasst zusammen, welche Sonderzeichen von welchen Shells verwendet werden: Sonderzeichen
Bourne-Shell
Korn-Shell/Bash C-Shell/TC-Shell
Fragezeichen ?
ja
ja
ja
Stern *
ja
ja
ja
Eckige Klammern [ ]
ja
ja
ja
Negierte eckige Klammern [! ]
ja
ja
nein
Kommentarzeichen #
ja
ja
ja
Semikolon ;
ja
ja
ja
Ampersand &
nein, nur mit jsh ja
ja
Runde Klammern ( )
ja
ja
ja
Dollarzeichen $
ja
ja
ja
Backslash \
ja
ja
ja
Einfache Hochkommata '...'
ja
ja
ja
Tab. 6.3: Welche Shell kennt welche Sonderzeichen?
242
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Sonderzeichen
Bourne-Shell
Korn-Shell/Bash C-Shell/TC-Shell
Doppelte Hochkommata »...«
ja
ja
ja
Rückwärtige Hochkommata `...`
ja
ja
ja
Tildezeichen ~
nein
ja
ja
Minuszeichen -
nein
ja
nein
Ausrufezeichen !
nein
nein
ja
Standardeingabeumlenkung <
ja
ja
ja
Standardausgabeumlenkung >
ja
ja
ja
Standardfehlerausgabeumlenkung 2> ja
ja
nein
Pipe-Mechanismus |
ja
ja
ja
Tab. 6.3: Welche Shell kennt welche Sonderzeichen? (Forts.)
Die nachfolgende Tabelle enthält Schreibweisen von Befehlen und deren Bedeutung: Schreibweise
Bedeutung
befehl &
Der Befehl wird im Hintergrund ausgeführt, die Befehlszeile wird nicht blockiert und kann weitergenutzt werden.
befehl1 ; befehl2
Mehrere Befehle werden in einer Befehlszeile hintereinander ausgeführt.
(befehl1 ; befehl2)
Die Befehle werden hintereinander in einer Subshell ausgeführt.
befehl1 | befehl2
Der erste Befehl übergibt mit Hilfe des Pipe-Symbols seine Ausgabe als Eingabe an den zweiten Befehl.
befehl1 `befehl2`
Beim zweiten Befehl wird eine Befehlssubstitution durchgeführt und seine Ausgabe wird dem ersten Befehl als Argument übergeben.
befehl1 $ (befehl2)
Beim zweiten Befehl wird eine Befehlssubstitution durchgeführt und seine Ausgabe dem ersten Befehl als Argument übergeben.
befehl1 && befehl2
Bei dieser UND-Verknüpfung wird der zweite Befehl nur ausgeführt, wenn der erste Befehl erfolgreich war.
befehl1 || befehl2
Bei dieser ODER-Verknüpfung wird der zweite Befehl nur ausgführt, wenn der erste Befehl fehlgeschlagen ist.
{ befehl1 ; befehl2 }
Die Befehle werden in der laufenden Shell ausgeführt.
Tab. 6.4: Schreibweise von Befehlen
243
Sonderzeichen der Shells
6.2.5
magnum
Funktionen
Funktionen sind eine Möglichkeit der Shellprogrammierung, um angepasste Befehle zu erzeugen. Eine Funktion ist eine Gruppe von Befehlen, die als eigenständige Routinen definiert sind. Bei Aliasen ist es nicht möglich, Argumente zu übergeben, das heißt, einem Alias für den Befehl ls -al kann zum Beispiel kein Argument für ein bestimmtes Verzeichnis mitgegeben werden, sondern es muss vor dem Aufruf des Befehls in das entsprechende Verzeichnis gewechselt werden. Einer Funktion hingegen können zum Beispiel ein oder mehrere Verzeichnisnamen als Argumente zur Verarbeitung übergeben werden. Eine Funktion wird in diesem Format definiert: function name { befehl; . . . befehl; }
In diesem Beispiel wird eine Funktion mit dem Namen proc erzeugt und anschließend aufgerufen. Die Funktion führt den Befehl ps -ef aus und übergibt dessen Ausgabe dem Befehl wc, um die Gesamtanzahl aller im Moment am System aktiven Prozesse anzuzeigen: $ function proc { ps -ef | wc -l; } $ proc 97 $
Im nächsten Beispiel wird eine Funktion mit dem Namen list erzeugt, die den Befehl ls ausführt und dessen Ausgabe dem Befehl wc übergibt, um die Gesamtanzahl aller Dateien und Unterverzeichnisse im aktuellen Verzeichnis anzuzeigen. $1 ist ein Platzhalter für das Argument, das der Funktion übergeben wird. $ function anzeigen { ls -al $1 | wc -l; } $ anzeigen /usr 195 $
Wurde ein Befehlsname sowohl für eine Funktion als auch für einen Alias verwendet, dann hat der Alias Vorrang. Mit folgendem Befehl wird eine Liste aller definierten Funktionen angezeigt: $ typeset -f
Funktionen können auch definiert werden, ohne den Ausdruck function im Befehl zu verwenden, zum Beispiel kann function proc { ps -ef | wc -l; } auch als proc () { who | wc -l; } definiert werden.
244
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
6.3 Die verschiedenen Shells In diesem Abschnitt wird vor allem die Bourne-Again-Shell beschrieben, wobei Abweichungen zur Bourne- und Korn-Shell kurz erwähnt werden und ein Unterabschnitt der C- und TC-Shell gewidmet wird, um die Unterschiede kurz herauszuarbeiten. Shells interpretieren sowohl die systemweiten als auch die standardmäßig für den Benutzer vorgegebenen Initialisierungsdateien, wie zum Beispiel /etc/profile oder /etc/.login (vergleiche Kapitel 11).
6.3.1
Die Bourne-Again-Shell
Die Bourne-Again-Shell ist als Befehl bash in einem Standard-Linux-System immer zu finden. Die Syntax des Befehls lautet: # bash [-option(en)]
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
- oder --
Alle nachfolgenden Strings sind für den Befehl Argumente und keine Optionen. (Hinter dem Bindestrich - bzw. den Bindestrichen -- ist mindestens ein Leerzeichen erforderlich, um das allein stehende - bzw. -von einer Option unterscheiden zu können, zum Beispiel das Löschen einer Datei mit dem Namen -file: rm -- -file.)
-c string
Sofortiges Ausführen der Befehle, die die Zeichenkette string enthält, in der zu startenden Shell
-i
Starten einer interaktiven Shell (mit Eingabeprompt)
--init-file datei Führt die Befehle der angegebenen Datei beim Starten der Shell oder --rcfile datei anstelle der standardmäßigen Datei ~/.bashrc aus -l oder --login
Die Shell verhält sich wie eine Anmeldeshell.
--noediting
Verwendet nicht die GNU-readline-Bibliothek beim Einlesen der Befehle, wenn die Shell interaktiv ist
--noprofile
Die Initialisierungsdateien /etc/profile, ~/.bash_profile, ~/.bash_login oder ~/.profile werden beim Starten der Shell nicht gelesen.
--norc
Die Initialisierungsdatei ~/.bash_profile wird beim Starten der Shell nicht gelesen.
--posix
Das Verhalten der Shell passt sich dem POSIX-Standard an.
-r oder --restricted
Die Shell wird eingeschränkt (restricted). Der Benutzer darf in diesem Fall nur noch sehr wenige Befehle ausführen.
-s
Einlesen der Befehle von der Standardeingabe. Mit dieser Option ist es möglich, beim Aufruf einer interaktiven Shell Positionsparameter zu setzen (vergleiche Abschnitt ).
-v oder --verbose
Ausführliche Ausgabe
-x
Gibt Befehle und deren Argumente so aus, wie sie in Ausführung gegeben wurden, also unter anderem mit aufgelösten Metazeichen
Tab. 6.5: Die Optionen des Befehls bash
245
Die verschiedenen Shells
magnum
Wurde einem Benutzer in der Datei /etc/passwd die Bourne-Again-Shell als Anmeldeshell zugewiesen (vergleiche Kapitel 11), dann wird zuerst die Datei /etc/profile als systemweite Initialisierungsdatei eingelesen. Dies gilt auch für die Korn- und Bourne-Shell. Nach dem Abarbeiten dieser Datei wird im Homeverzeichnis des Benutzers nach der Initialisierungsdatei .bash_profile gesucht und diese eingelesen. Entweder wird diese beim Neuanlegen eines Benutzers in dessen Verzeichnis kopiert oder sie kann manuell erstellt werden. Sie kann bestimmte Einstellungen für die Benutzerumgebung enthalten. Alternativ wird von der Bourne-Again-Shell die Initialisierungsdatei .profile im Homeverzeichnis eines Benutzers gelesen. In dieser Datei kann ein Benutzer jederzeit Ergänzungen vornehmen, um seine eigene Arbeitsumgebung anzupassen, zum Beispiel seine eigenen Variablen definieren oder den Filter umask neu setzen. Normalerweise werden in dieser Datei Umgebungsvariablen und Terminaleinstellungen definiert oder es wird der notwendige Befehl zum Starten einer Anwendung beim Anmelden festgelegt. Die Initialisierungsdatei .bash_profile wird nur einmal von der Anmeldeshell ausgeführt oder beim Aufrufen eines Konsolfensters gelesen und muss sich immer im Homeverzeichnis des Benutzers befinden. Änderungen der Datei werden normalerweise erst bei der nächsten Anmeldung aktiv. Diese Änderungen lassen sich aber auch sofort aktivieren, indem die Datei mit Hilfe des Punktbefehls ».« neu eingelesen wird: $ . ~/.bash_profile
Als nächste Initialisierungsdatei wird bei der Bourne-Again-Shell die Datei ~/.bashrc gelesen, sofern sie vorhanden ist. Ein Benutzer kann zum Beispiel folgende Einstellungen in der Datei definieren:
쮿
Festlegen der Promptzeichen mit Hilfe der Variablen PS1 und PS2
쮿
Aliasdefinitionen
쮿
Erstellung von Korn-Shell-Funktionen
쮿
Festlegen von Variablen für die History-Umgebung
쮿
Definieren von Korn-Shell-Optionen
쮿
Einlesen weiterer Initialisierungsdateien
Änderungen in dieser Initialisierungsdatei werden auch nur aktiv, wenn Sie sich das nächste Mal anmelden oder die Dateien mit dem Punkt-Befehl neu einlesen. Die Bourne-Shell kennt als Initialisierungsdatei eines Benutzers nur die .profile. Die Korn-Shell liest ebenfalls zuerst die ~/.profile auf Benutzerebene und wenn in dieser Datei die Zuweisung ENV=~/.kshrc steht, wird auch diese Datei gelesen. Anstelle des Namens .kshrc kann ein Benutzer auch einen beliebigen anderen Namen wählen und der Variablen ENV in der Datei ~/.profile zuweisen. Im Homeverzeichnis lässt sich bei der Bourne-Again-Shell auch eine Datei mit dem Namen .bash_logout erzeugen, um Aktionen für den Abmeldevorgang eines Benutzers zu definieren.
246
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Optionen der Bourne-Again-Shell Optionen sind Schalter, die das Verhalten der Shell steuern. Mit diesen Optionen können Sie das Verhalten der Bourne-Again- oder Korn-Shell steuern. Die Bourne-Shell kennt diese Optionen nicht. Die Werte der Optionen sind entweder on oder off. Mit dem Befehl set –o geben Sie die gesetzten Optionen aus: $ set –o allexport off braceexpand on emacs on errexit off hashall on histexpand on history on ignoreeof off interactive-comments keyword off monitor on noclobber off noexec off noglob off nolog off notify off nounset off onecmd off physical off posix off privileged off verbose off vi off xtrace off
on
Mit Hilfe des Befehls $ set -o option
aktivieren Sie eine Option, das heißt, Sie setzen diese auf on. Der Befehl $ set +o option
deaktiviert die Option, das heißt, Sie setzen diese auf off. Die folgende Tabelle erläutert die wichtigsten Optionen. Option
Beschreibung
allexport
Durch die Aktivierung dieser Option werden neu definierte Shellvariablen automatisch zu globalen Umgebungsvariablen.
emacs
Durch die Aktivierung dieser Option kann die Befehlszeile mit Hilfe der Funktionen des Editors emacs bearbeitet werden.
errexit
Durch die Aktivierung dieser Option wird die Shell bei der Rückgabe eines Statuswerts ungleich 0 beendet, also sobald ein Fehler auftritt.
Tab. 6.6: Optionen der Bourne-Again-Shell
247
magnum
Die verschiedenen Shells
Option
Beschreibung
history
Es wird eine Befehlshistorie in der Datei ~/.bash_history aufgezeichnet.
ignoreeof
Durch die Aktivierung dieser Option ist es nicht mehr möglich, eine Shell durch Betätigen von (Ctrl)+(d) zu beenden.
interactivecomments
Durch die Aktivierung dieser Option werden alle Zeichen, die dem Hashzeichen # folgen, als Kommentare behandelt.
keyword
Durch die Aktivierung dieser Option werden alle Variablen eines Befehls automatisch als Shellvariablen definiert.
markdirs
Durch die Aktivierung dieser Option werden alle Verzeichnisse bei der Ausgabe mit einem nachfolgenden Schrägstrich (/) gekennzeichnet, wenn der aufrufende Befehl ein Metazeichen beinhaltet, zum Beispiel ls *.
monitor
Durch die Aktivierung dieser Option werden beim Beenden von Hintergrundprozessen Meldungen ausgegeben.
noclobber
Durch die Aktivierung dieser Option wird verhindert, dass bei der Ausgabeumlenkung bereits bestehende Dateien überschrieben werden.
noexec
Durch die Aktivierung dieser Option werden Befehle nicht ausgeführt, sondern nur auf ihre Richtigkeit hin überprüft.
noglob
Durch die Aktivierung dieser Option wird verhindert, dass die Shell Dateinamen erzeugen kann, die Sonderzeichen enthalten.
nolog
Durch die Aktivierung dieser Option werden keine definierten Funktionen in der History-Liste gespeichert.
notify
Durch die Aktivierung dieser Option wird dem Benutzer angezeigt, dass ein Hintergrundprozess beendet wurde, ohne dass zuvor die (¢)-Taste an der Befehlszeile betätigt werden muss.
nounset
Durch die Aktivierung dieser Option wird ein Befehl abgebrochen, wenn er nicht existierende Variablen verwendet.
privileged
Durch die Aktivierung dieser Option wird verhindert, dass die Initialisierungsdateien (.profile und .kshrc) im Homeverzeichnis des Benutzers verwendet werden. Stattdessen wird die Datei /etc/suid_profile gelesen.
verbose
Durch die Aktivierung dieser Option wird jeder Befehl vor seiner Ausführung nochmals so angezeigt, wie er von der Shell gelesen wurde.
vi
Durch die Aktivierung dieser Option kann die Befehlszeile mit Hilfe der Funktionen des Editors vi bearbeitet werden.
xtrace
Durch die Aktivierung dieser Option wird jeder Befehl vor seiner Ausführung nochmals so angezeigt, wie er von der Shell interpretiert wird.
Tab. 6.6: Optionen der Bourne-Again-Shell (Forts.)
Die Optionen der Korn-Shell stimmen weitestgehend mit denen der BourneAgain-Shell überein. Im folgenden Beispiel werden Dateien bei der Ausgabeumlenkung durch die Verwendung der Shell-Option noclobber geschützt. Wenn die Standardausgabe in eine bereits vorhandene Datei umgelenkt wird, wird diese normalerweise überschrie-
248
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
ben, was zu Datenverlust führen kann. Wurde die Option noclobber aktiviert, dann lässt die Shell nicht zu, dass die Standardausgabe in eine bereits vorhandene Datei umgelenkt wird, und gibt eine Fehlermeldung aus. $ set -o noclobber $ set -o | grep noclobber noclobber on $ ls -l > dateiliste $ cat /etc/system > dateiliste -bash: dateiliste: cannot overwrite existing file
Sie deaktivieren die Option noclobber einmalig, indem Sie in der Befehlszeile statt > die Syntax >| verwenden. In diesem Fall wird trotz der aktivierten Option noclobber der Inhalt der Datei überschrieben. $ ls -al >| dateiliste
Um die Option noclobber dauerhaft zu deaktivieren, geben Sie folgenden Befehl ein: $ set +o noclobber
Integrierte Befehle der Bourne-Again-Shell Die nachfolgende Auflistung enthält nur einige der wichtigsten in die BourneAgain-Shell integrierte Befehle. Eine vollständige Liste mit ausführlichen Erläuterungen erhalten Sie mit dem Befehl man bash.
Der Befehl cd Mit diesem Befehl kann zwischen Verzeichnissen gewechselt werden (vergleiche Kapitel 7).
Der Befehl exec Wenn Sie dem Befehl exec einen Programmnamen als Argument übergeben, wird dieses Programm statt der aktuellen Shell ausgeführt. Das bedeutet, dass die Shell durch die Ausführung des Programms ersetzt wird. Wenn Sie zum Beispiel den Befehl ls aufrufen, dann wird von der Shell für die Ausführung des Befehls ls ein so genannter Kindprozess erzeugt. Wenn Sie aber den Befehl exec ls starten, ruft die Shell ls auf, ohne einen Kindprozess zu erzeugen, das heißt, die aufrufende Shell beendet sich selbst sofort wieder. Das spart zum einen Platz im Hauptspeicher und zum anderen wird verhindert, dass der aufgerufene Befehl mit der aufrufenden Shell gemeinsam beendet wird. Das soeben beschriebene Verhalten wird deutlich, wenn Sie in einem Terminalfenster folgendes Beispiel eingeben: $ exec less /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/bash daemon:x:2:2:Daemon:/sbin:/bin/bash ... q
Sobald Sie mit der Taste (q) den Befehl less beenden, wird auch das Terminalfenster geschlossen.
249
Die verschiedenen Shells
magnum
Der Befehl exit Dieser Befehl beendet die Shell.
Der Befehl hash Dieser Befehl gibt eine so genannte Hash-Tabelle aus. In dieser sind die absoluten Pfade für die Ausführung von Befehlen gespeichert, die entweder eingegeben oder über die Variable PATH gesucht wurden. Beim nächsten Aufruf eines Programms müssen auf diese Weise nicht wieder alle Verzeichnisse der Variablen PATH durchsucht werden, falls sich bereits ein entsprechender Eintrag in der Tabelle befindet. $ hash hits command 1 /bin/ps 2 /usr/bin/man
Die Spalte »hits« enthält die Anzahl der Aufrufe für den Befehl und die Spalte »commands« enthält den vollen Pfadnamen des Befehls. Die Hash-Tabelle kann durch Verwendung der Option –r neu aufgebaut werden. Sie wird außerdem gelöscht, wenn die Variable PATH verändert wird.
Der Befehl pwd Dieser Befehl gibt das aktuelle Verzeichnis aus.
Der Befehl trap Mit Hilfe des Befehls trap lassen sich an ein Shellskript gesandte Signale abfangen.
Der Befehl type Dieser Befehl gibt aus, wie ein Befehl von der Shell interpretiert wird (vergleiche Kapitel 7).
Der Befehl ulimit Mit Hilfe dieses Befehls können Benutzern Grenzen für den Verbrauch von Systemressourcen gesetzt werden.
Der Befehl umask Mit Hilfe dieses Befehls können die Standardzugriffsrechte gesetzt werden (vergleiche Kapitel 8).
Der Befehl command Der Befehl kann ein Programm, das als Argument übergeben wurde, ausführen, wobei nicht nach definierten Funktionen gesucht wird. Mit Hilfe der Option –p wird der Befehl mit einem Standardwert für PATH durchgeführt, um zu gewährleisten, dass alle Standardprogramme gefunden werden. Die Option –v gibt zusätzlich den Pfad an, der für den angegebenen Befehl verwendet wird. Die Option –V informiert darüber, wie die Shell den Befehl interpretiert: $ command –v more /usr/bin/more $ command –V ls more is a tracked alias for /usr/bin/ls
250
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Der Befehl fc Die Bourne-Again-Shell verwaltet mit diesem Befehl ihre History-Liste. Sie können die letzten 16 Befehle mit fc –l anzeigen lassen. Die Ausgabe erfolgt dann mit einer Nummer, die anzeigt, in welcher Reihenfolge die Befehle eingegeben wurden. $ fc –l 32fc -l 33cd /user 34pwd 35cd /usr 36pwd 37cd ...
Sie können aber auch die Nummern der aufzulistenden Befehle als Parameter übergeben: $ fc –l 33 41
Die Option –n unterdrückt die Ausgabe der Zeilennummer, während die Option –r die Liste in umgekehrter Reihenfolge ausgibt. Wenn Sie die Option –e verwenden, können Sie die History-Liste an der Befehlszeile mit dem Editor ed editieren. Alternativ können Sie mit der Option –e einen anderen Editor angeben, zum Beispiel den vi: $ fc –e /bin/vi 45
Der vi wird geöffnet und Sie können die angegebene Zeile darin editieren. Wenn Sie den vi beenden, wird der geänderte Befehl ausgeführt.
Der Befehl typeset Dieser Befehl zeigt die exportierten Variablen und deren Typ an. Die folgende Auflistung ist nur ein Ausschnitt der kompletten Ausgabe eines standardmäßigen Linux-Systems: $ typeset ACLOCAL_PATH=/opt/gnome/share/aclocal BASH=/bin/bash BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release"nux") BASH_VERSION='2.05b.0(1)-release' COLORTERM=1 COLUMNS=80 CPU=i686 CVS_RSH=ssh DEFAULT_WM=kde ...
Die Syntax des Befehls lautet: $ typeset [option] [variable] [wert]
Mit einem Pluszeichen (+) werden Optionen einer Variablen oder Funktion zugewiesen, mit einem Minuszeichen (–) werden sie wieder deaktiviert. Die Option –f zeigt die Funktionen zusammen mit dem Quellcode an. Die Funktion –x exportiert die Variablen oder Funktionen automatisch, sobald diese definiert werden.
251
Die verschiedenen Shells
magnum
Weitere Funktionen der Bourne-Again-Shell Die History-Funktion Diese Funktion ist vollständig in der Bourne-Again-Shell implementiert. Sie lässt sich über die Pfeiltasten aktivieren. Auf diese Weise kann der Benutzer bereits ausgeführte Befehle wiederholen, editieren oder ändern. Die bereits getätigten Befehle werden in der Datei ~/.bash_history gespeichert. Der Befehl history gibt standardmäßig die letzten 1000 gespeicherten Befehle aus. Der Name der History-Datei und ihre Größe, das heißt, auch die Anzahl der gespeicherten Befehle, lassen sich mit Hilfe der Variablen HISTFILE bzw. HISTSIZE ändern. Die History-Funktion der wesentlich älteren Korn-Shell ist leider nicht so komfortabel. Die History-Liste mit den zuletzt verwendeten Befehlen wird auch in Form einer Datei geführt, die standardmäßig .sh_history lautet. Bereits eingegebene Befehle können mit Hilfe eines Inline-Editors, wie zum Beispiel des vi, editiert und wiederholt werden. Dazu muss die Umgebungsvariable EDITOR oder bei der Korn-Shell alternativ die Variable VISUAL entsprechend definiert werden. Der Befehl history gibt standardmäßig die letzten 16 Befehle aus, wobei ein Befehl mittels seiner Zeilennummer wieder aufgerufen werden kann. Zum Beispiel zeigt der Befehl $ history -4
den letzten und die vier vorherigen Befehle an. Mit Hilfe des Befehls r können Sie einen bestimmten Befehl durch Aufruf seiner Nummer wiederholen: $ r 210
Die Dateiergänzungsfunktion Sie können sich in der Bourne-Again-Shell Schreibarbeit sparen, indem Sie den File Completion-Mechanismus bzw. die Dateiergänzungsfunktion verwenden. Mit ihrer Hilfe werden Namen von Dateien und Verzeichnissen im aktuellen Verzeichnis ergänzt. Dazu geben Sie einfach den Anfang eines Verzeichnis- oder Dateinamens ein und drücken dann auf die Taste (ÿ_). Wenn der angegebene Anfang eindeutig ist, wird der Name entsprechend ergänzt. Ist er nicht eindeutig, müssen Sie zweimal auf die Taste (ÿ_) drücken, um alle zutreffenden Dateinamen zu erhalten. Anschließend geben Sie so viele Zeichen ein, die notwendig sind, um den Dateinamen eindeutig zu identifizieren, und drücken dann wieder auf die Taste (ÿ_). Auf dieselbe Weise lassen sich am Anfang der Befehlszeile auch Befehlsnamen ergänzen.
252
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Auch die Korn-Shell kennt eine Dateiergänzungsfunktion, die allerdings etwas umständlicher zu handhaben ist. Zuerst einmal sollte der Variablen EDITOR der Befehl vi zugewiesen werden: $ EDITOR=/bin/vi
Nun ist es möglich, mit Hilfe der Tastenkombination (ESC)+(\) unvollständige Datei- und Verzeichnisnamen automatisch zu ergänzen. Geben Sie den Verzeichnisnamen teilweise ein, zum Beispiel: $ cd /ex
Betätigen Sie dann die Tastenkombination (ESC)+(\) und der Eintrag lautet anschließend: $ cd /export
Wenn Ihre Eingabe nicht eindeutig ist, wird der Pfad nicht ergänzt. Alternativ können Sie dann über die Tastenkombination (ESC)+(=) eine Auswahlliste der möglichen Verzeichnisnamen erhalten. Mit der Tastenkombination (ESC)+(*) können Sie alle möglichen Alternativen eines Datei- oder Verzeichnisnamens in einen Befehl einfügen, zum Beispiel: $ ls her1 her2 her3 her4 testdatei nocheinedatei letztedatei $ cp h
Betätigen Sie nun die Tastenkombination (ESC)+(*) und der Eintrag lautet anschließend: $ cp her1 her2 her3 her4
Sie können den Befehl dann zum Beispiel noch manuell ergänzen und aufrufen: $ cp her1 her2 her3 her4 /tmp
Die Alias-Funktion Ein Alias ist eine Abkürzung für einen Linux- oder Unix-Befehl und wird mit Hilfe des Befehls alias definiert, zum Beispiel: $ alias dir=’ls –l | more’ $ alias dir ls –l | more
Die Shell durchsucht vor der Ausführung eines Befehls eine Liste von Aliasen und ersetzt gegebenenfalls das erste Wort der Befehlszeile durch den Text des Alias. Vor und nach dem Gleichheitszeichen einer Alias-Definition dürfen keine Leerzeichen stehen. Die Alias-Zuweisung muss außerdem quotiert werden, wenn darin Sonder- oder Leerzeichen enthalten sind. Trennen Sie mehrere Alias-Definitionen durch Strichpunkte voneinander.
253
Die verschiedenen Shells
magnum
Die Bourne-Again- und die Korn-Shell enthalten bereits standardmäßig mehrere vordefinierte Aliase, die gemeinsam mit vom Benutzer definierten Aliasen mit dem Befehl alias angezeigt werden können. $ alias alias +='pushd .' alias -='popd' alias ..='cd ..' alias ...='cd ../..' ... alias l='ls -alF' alias la='ls -la' alias ll='ls -l' ...
Alias-Definitionen sind häufig Abkürzungen für lange Befehle. Sie können mit Hilfe von Aliasen aber auch interaktive Optionen bei Befehlen quasi standardmäßig aktivieren, wie zum Beispiel bei den Befehlen rm, cp und mv: $ alias rm="rm -i" $ rm her1 rm: remove her1: (yes/no)? n
In diesem Fall werden Sie von der Shell erst gefragt, bevor Sie eine vorhandene Datei löschen können. Eine Alias-Definition lässt sich einmalig deaktivieren, indem Sie vor den Alias einen Backslash (\) schreiben: $ rm her2 rm: remove her2 (yes/no)? n $ \rm her2 $ ls her2 her2: No such file oder directory
Mit Hilfe des Befehls unalias können Sie Aliase aus der Alias-Liste wieder löschen, zum Beispiel: $ unalias dir $ dir ksh: dir: not found
Alias-Definitionen müssen in Initialisierungsdateien hinterlegt werden, wie zum Beispiel die Dateien ~/.profile oder ~/.bash_profile, damit sie nach jedem Systemstart in der Shell bekannt sind.
Funktionen Mit Hilfe von Funktionen können Sie angepasste Befehle konstruieren, da im Gegensatz zu Aliasen die Übergabe von Argumenten möglich ist. Um den im vorherigen Abschnitt definierten Alias dir für ein bestimmtes Verzeichnis aufzurufen, mussten Sie zuvor in dieses Verzeichnis wechseln. Einer Funktion können dagegen ein oder mehrere Verzeichnisnamen als Argument(e) übergeben werden. Eine Funktion definieren Sie mit folgender Syntax: $ function name { befehl; . . . befehl; }
254
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Im folgenden Beispiel wird eine Funktion mit dem Namen anzahl erzeugt, die den Befehl ls aufruft und die Ausgabe dem Befehl wc übergibt, der die Gesamtanzahl aller Dateien und Unterverzeichnisse ausgibt. $1 ist der Parameter für das Argument, das der Funktion übergeben wird. $ function anzahl { ls -al $1 | wc -l; } $ anzahl /usr 51
Wenn Sie sowohl einen Alias als auch eine Funktion mit demselben Namen erstellt haben, dann wird die Alias-Definition vorrangig behandelt. Mit folgendem Befehl erhalten Sie eine Liste aller definierten Funktionen: $ typeset -f
Sie können Funktionen auch definieren, ohne den Begriff function im Befehl anzuwenden. Die obige Funktion ließe sich auch wie folgt definieren: anzahl () { who | wc -l; }. Sie können eine Funktion auch wieder löschen, indem Sie den folgenden Befehl verwenden: $ unset –f funktionsname
6.3.2
Die C- und TC-Shell
Die C-Shell erhielt ihren Namen aufgrund der Ähnlichkeit ihrer Shellprogrammierung mit der Programmiersprache C. Das Standardpromptzeichen ist das Prozentzeichen (%), wobei unter Linux vor dem Prozentzeichen in der Regel der Rechnername angezeigt wird. Auch in der C-Shell hat root das Hashzeichen als Prompt. Bei der C-Shell bleiben gestartete Hintergrundprozesse erhalten, auch wenn der Vaterprozess beendet wird, zum Beispiel durch das Abmelden eines Benutzers. Wenn sich ein Benutzer, dem in der Datei /etc/passwd die C-Shell zugewiesen wurde, am System anmeldet, dann wird zuerst die systemweite Initialisierungsdatei /etc/ .login gelesen. Die standardmäßig von Linux vorgegebene Datei /etc/.login ähnelt inhaltlich der Initialisierungsdatei /etc/profile der Bourne- und Korn-Shell. Dann wird die Initialisierungsdatei .cshrc gelesen, die sich ebenfalls im Homeverzeichnis des Benutzers befindet. Hier werden in der Regel Definitionen für Aliase und für den History-Mechanismus hinterlegt. Im Homeverzeichnis lässt sich auch eine Datei mit dem Namen .logout erzeugen, um Aktionen für den Abmeldevorgang eines Benutzers zu definieren.
255
Die verschiedenen Shells
magnum
Optionen der C-Shell und TC-Shell Sie können beim Aufrufen einer C-Shell das Verhalten mit Hilfe der folgenden Optionen festlegen: Option
Bedeutung
-e
Im Fehlerfall, das heißt, wenn ein Programm einen Returncode ungleich 0 zurückgibt, soll die Shell beendet werden
-f
Kein Lesen von .cshrc oder .login beim Starten der Shell
-n
Zur Syntaxüberprüfung von Skripten: Befehle werden nur gelesen, nicht ausgeführt
-v
Befehle werden vor ihrer Ausführung angezeigt, wobei nur History-Ersetzungen ausgeführt werden.
-V
Befehle werden vor ihrer Ausführung angezeigt, wobei nur History-Ersetzungen ausgeführt werden. Diese Anzeige wird schon vor dem Lesen von .cshrc aktiviert.
-x
Befehle werden vor ihrer Ausführung angezeigt und alle Ersetzungen werden dabei durchgeführt.
-X
Befehle werden vor ihrer Ausführung angezeigt und alle Ersetzungen werden dabei durchgeführt. Diese Anzeige wird schon vor dem Lesen von .cshrc aktiviert.
Tab. 6.7: Optionen der C-Shell
Die Optionen ignoreeof, noclobber, noglob, notify und verbose, die Sie bereits bei der Korn-Shell kennen gelernt haben, haben in der C-Shell dieselbe Bedeutung genau wie einige weitere Optionen der Korn-Shell. Sie werden auch mit dem Befehl set, aber mit einer anderen Syntax als bei der Korn-Shell aktiviert: suso1% set noclobber
Auch die Syntax, um einen durch noclobber aktivierten Überschreibschutz einmalig zu übergehen, lautet etwas anders: suso1% ls –al >! dateiliste
Integrierte Befehle der C- und TC-Shell Die C-Shell kennt auch die eingebauten Befehle login, exit und exec wie die Bourne-Again- und die Korn-Shell. Die folgende Auflistung weiterer in die C-Shell integrierter Befehle erhebt keinen Anspruch auf Vollständigkeit. hashstat
Dieser Befehl zeigt die Hash-Tabelle an (vergleiche Befehl hash der Bourne-Again-Shell). rehash
Mit diesem Befehl wird die Hash-Tabelle neu aufgebaut, zum Beispiel nach dem Verändern der Variablen path. unhash
Dieser Befehl schaltet die Hash-Funktion ab. logout
Dieser Befehl beendet die Anmeldeshell und zeigt eine neue Anmeldeaufforderung an.
256
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Weitere Funktionen der C- und TC-Shell Die History-Funktion Auch die C-Shell führt eine History-Liste mit den zuletzt verwendeten Befehlen. Aktiviert wird diese Funktion durch das Setzen der Variablen history mit einem numerischen Wert, der die Anzahl der zu speichernden Befehle bestimmt: suso1% set history=60
Der Befehl history gibt die History-Liste aus, wobei ein Befehl mittels seiner Zeilennummer, der ein Ausrufezeichen (!) vorangestellt wird, wieder aufgerufen werden kann: suso1% history 1 ls –a 2 cd /etc 3 pwd 4 vi /etc/passwd 5 cd /sbin suso1% !2 cd /etc
Es ist auch möglich, einen Befehl durch Angabe der ersten Zeichen erneut aufzurufen, zum Beispiel: suso1% !vi vi /etc/passwd
Der letzte Befehl lässt sich durch Eingabe von suso1% !! vi /etc/passwd
wiederholen.
Die Dateiergänzungsfunktion Sie können sich auch bei der C-Shell Schreibarbeit sparen, indem Sie die Dateiergänzungsfunktion bzw. den File Completion-Mechanismus verwenden. Mit ihrer Hilfe werden Namen von Dateien und Verzeichnissen im aktuellen Verzeichnis ergänzt. Dazu muss die Variable filec gesetzt werden: suso1% set filec
Mit Hilfe der Taste (ESC) lassen sich nun Datei- und Verzeichnisnamen ergänzen. Geben Sie den Verzeichnisnamen teilweise ein, zum Beispiel: suso1% cd /ex
Drücken Sie auf die Taste (ESC) und der Eintrag lautet anschließend: suso1% cd /export
Wenn Ihre Eingabe nicht eindeutig ist, wird der Pfad nicht ergänzt. Alternativ erhalten Sie über die Tastenkombination (Ctrl)+(d) eine Auswahlliste der möglichen Verzeichnisnamen.
257
magnum
Variable
Die Alias-Funktion Auch die C-Shell kennt Aliase als Abkürzung für einen Linux-Befehl und wird ebenfalls mit Hilfe des Befehls alias definiert, allerdings mit einer etwas anderen Syntax: suso1% alias dir ’ls –l | more’ suso1% alias dir suso1% dir='ls –l | more'
Die C-Shell durchsucht vor der Ausführung eines Befehls eine Liste von Aliasen und ersetzt gegebenenfalls das erste Wort der Befehlszeile durch den Text des Alias. Eine Alias-Definition kann auch in der C-Shell einmalig deaktiviert werden, indem Sie vor den Alias einen Backslash (\) schreiben: suso1% alias rm "rm –i" suso1% rm her2 rm: remove her2 (yes/no)? n suso1% \rm her2 suso1% ls her2 her2: No such file oder directory
Mit Hilfe des Befehls unalias können Sie Aliase aus der Alias-Liste wieder löschen, zum Beispiel: suso1% unalias dir suso1% dir dir: command not found
Alias-Definitionen sollten auch in der C- und TC-Shell in Initialisierungsdateien hinterlegt werden, damit sie nach jedem Systemstart in jeder Shell bekannt sind.
6.4 Variable Eine Variable ist ein festgelegter Name, der sich auf einen temporären Bereich im RAM bezieht und dem ein bestimmter Wert zugeordnet wurde. Mit Hilfe der in Variablen gespeicherten Informationen kann die Shell verändert werden. Diese Informationen sind auch für andere Prozesse notwendig, um ablaufen zu können. In diesem Abschnitt werden die Variablen der Bourne-Again-, Korn- und Bourne-Shell gemeinsam beschrieben, da es in diesem Bereich eine große Übereinstimmung bei diesen Shells gibt. Abweichungen zwischen den Shells werden angemerkt. Es gibt zwei Arten von Variablen, die vor allem eine unterschiedliche Bedeutung für die Shellprogrammierung haben:
258
쮿
Lokale Variablen, die nur in der Shell bekannt sind, in der sie erzeugt wurden. Sie werden nicht an von der Shell aufgerufene Prozesse oder an andere Shells übergeben.
쮿
Exportierte Variablen oder Umgebungsvariablen, die vom Elternprozess an den Kindprozess weitervererbt werden.
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
6.4.1
Shellvariable
Der in der Shell integrierte Befehl set zeigt alle definierten Variablen einer Shell an, also lokale und Umgebungsvariablen, und gibt deren Werte aus: $ set ACLOCAL_PATH=/opt/gnome/share/aclocal BASH=/bin/bash BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i586-suselinux") BASH_VERSION='2.05b.0(1)-release' COLORTERM=1 COLUMNS=80 CPU=i686 CVS_RSH=ssh DEFAULT_WM=kde DIRSTACK=() EUID=0 GNOMEDIR=/opt/gnome GNOME_PATH=:/opt/gnome:/usr GROUPS=() G_BROKEN_FILENAMES=1 HISTCONTROL=ignoreboth HISTFILE=/root/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 ...
Der Inhalt von Variablen kann mit einem der Variablen vorangestellten Dollarzeichen abgefragt und dann zum Beispiel mit Hilfe des Befehls echo ausgegeben werden: $ echo $USER her
Setzen und Löschen von Shellvariablen Eine Shellvariable lässt sich ganz einfach definieren, indem dem Variablennamen ein Wert zugewiesen wird. Im nachfolgenden Beispiel wird die Variable BER definiert, die als Wert den Pfadnamen eines Verzeichnisses enthält: $ BER=/export/home/her/protokolle/projekt1/berichte $ echo $BER /export/home/her/protokolle/projekt1/berichte $ set | grep BER BER=/export/home/her/protokolle/projekt1/berichte $ pwd /etc $ cd $BER ; pwd /export/home/her/protokolle/projekt1/berichte
Mit Hilfe dieser Variablen kann die Benutzerin her schneller in das entsprechende Unterverzeichnis wechseln. Verwenden Sie vor und nach dem Gleichheitszeichen (=) keine Leerzeichen! Groß- und Kleinschreibung werden unterschieden, die Variablen ber oder Ber oder BER bezeichnen also drei unterschiedliche Variablen!
259
magnum
Variable
Mit dem Befehl unset werden definierte Shellvariablen wieder gelöscht. Im folgenden Beispiel wird die Variable BER gelöscht: $ unset BER
Mit Hilfe des Befehls readonly wird eine Variable so definiert, dass sie nicht mehr verändert oder gelöscht werden kann, solange die Shell aktiv ist. Diese Eigenschaft wird aber nicht an Kindprozesse vererbt: $ readonly BER
Bei Bedarf lassen sich Variablen auch erweitern. Die Variable PATH wird zum Beispiel wie folgt um das Homeverzeichnis eines Benutzers ergänzt. $ echo $PATH /usr/bin:/usr/openwin:/bin/usr/ucb: $ PATH=$PATH:~ $ echo $PATH /usr/bin:/usr/openwin/bin:/usr/ucb:/home/her
Variablen exportieren Wenn eine Umgebungsvariable in einer Subshell verwendet werden soll, dann müssen Sie diese mit Hilfe des Befehls export zuerst exportieren. Dadurch wird eine gesetzte Variable der Shell als globale Umgebungsvariable an alle Folgeprozesse weitergegeben, zum Beispiel: $ PROG=/export/home/her/protokol/projekt1/programme $ echo $PROG /export/home/her/protokol/projekt1/programme $ sh $ echo $PROG $ exit $ export PROG $ bash $ echo $PROG /export/home/her/protokolle/projekt1/programme
Wenn Sie den Befehl ohne Argumente verwenden, wird eine Liste von allen exportierten Variablen angezeigt, zum Beispiel: $ export declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x ...
260
ACLOCAL_PATH="/opt/gnome/share/aclocal" COLORTERM="1" CPU="i686" CVS_RSH="ssh" GNOMEDIR="/opt/gnome" GNOME_PATH=":/opt/gnome:/usr" G_BROKEN_FILENAMES="1" HISTSIZE="1000" HOME="/home/her" HOST="pc7lsu" HOSTNAME="pc7lsu" HOSTTYPE="i386"
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Der Befehl env ohne Argumente zeigt alle Umgebungsvariablen an, die im Moment definiert sind, und wie sie an Folgeprozesse weitergegeben werden. Das Betriebssystem legt dabei alle wichtigen Standardvariablen der Shell automatisch als Umgebungsvariablen fest. Sie können mit Hilfe des Befehls Variablen für Folgeprozesse verändern. $ env LESSKEY=/etc/lesskey.bin MANPATH=/usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/man INFODIR=/usr/local/info:/usr/share/info:/usr/info NNTPSERVER=news HOSTNAME=pclsu7 XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB TERM=ansi SHELL=/bin/bash HOST=pclsu7 HISTSIZE=1000 PROFILEREAD=true GNOME_PATH=:/opt/gnome:/usr QTDIR=/usr/lib/qt3 USER=her ...
Die folgende Tabelle fasst alle Befehle zum Setzen, Löschen oder Anzeigen von Variablen nochmals zusammen: Lokale Variable
Exportierte Variable
Bedeutung
VAR=wert
export VAR=wert
Setzen einer Variablen
unset VAR
Löschen einer Variablen
---
set
Anzeige aller lokalen und Umgebungsvariablen
export
---
Anzeige aller exportierten Variablen
env
---
Anzeige aller Umgebungsvariablen
print $VAR oder echo $VAR
Anzeige des Variablenwerts
Tab. 6.8: Überblick über Befehle zum Arbeiten mit Variablen
In folgendem Beispiel wird der Wert der Variablen LANG zur Spracheinstellung für eine einzige Anwendung verändert. In diesem Fall wird die Ausgabe der Hilfe zum Befehl ls in englischer statt in voreingestellter deutscher Sprache ausgegeben: $ export LANG=en_US ; ls --help
6.4.2
Standardvariablen
Außer den Variablen, die ein Benutzer oder der Systemadministrator selbst festlegen kann, gibt es auch Shellvariablen, die bereits von vornherein für bestimmte Zwecke definiert sind. Teilweise lassen sich deren Werte von einem Benutzer verändern. Solche Variablen sind in der Bourne-Again-, Korn- und Bourne-Shell grundsätzlich groß geschrieben.
261
magnum
Variable
In der folgenden Tabelle werden die wichtigsten Standardvariablen der BourneAgain-, Korn- und Bourne-Shell beschrieben: Variable
Beschreibung
CDPATH
Diese Variable ist standardmäßig nicht definiert. Sie enthält alle Verzeichnisse, die vom Befehl cd nach einem Unterverzeichnis durchsucht werden sollen, wodurch die Pfadeingabe abgekürzt wird, denn in alle angegebenen Pfade kann direkt verzweigt werden. Wird diese Variable verwendet, muss unbedingt als Verzeichnis auch der Punkt (.) für das aktuelle Verzeichnis angegeben werden. Ansonsten funktioniert die Angabe von anderen relativen Pfaden nicht mehr.
EDITOR
Diese Variable definiert den Standardeditor der Shell. Bestimmte Programme, wie zum Beispiel Varianten des Befehls crontab, verwenden diese Variable, da sie einen Editor zur Ausführung benötigen.
HOME
Diese Variable enthält den Verzeichnispfad für das Homeverzeichnis des Benutzers, in das der Befehl cd wechselt, wenn er ohne Argument an der Befehlszeile eingegeben wird.
IFS
Diese Variable enthält das interne Feldtrennzeichen, das zum Erkennen von getrennten Worten verwendet wird. In der Regel ist ein solches Feldtrennzeichen das Leerzeichen oder ein Tabulatorzeichen oder der Zeilenumbruch oder ein Doppelpunkt.
LANG
Diese Variable wird zur Einstellung der Sprachumgebung verwendet. Gleichzeitig hat der Wert der Variablen Auswirkung auf Datums- und Zeitausgaben, Währungsangaben und Sortierreihenfolgen. Die Standardeinstellung ist C für USEnglisch. Die Einstellung für die deutsche Sprache lautet de.
LOGNAME
Diese Variable enthält den Anmeldenamen des Benutzers.
MAIL
Diese Variable setzt den Pfad für die Maildatei des Benutzers, die in der Regel /var/mail/benutzername lautet.
MAILCHECK
Diese Variable gibt in Sekunden an, wie oft die Mails für einen Benutzer abgefragt werden sollen. Lautet der Wert 0, dann wird nach jeder Befehlseingabe geprüft, ob neue E-Mails angekommen sind.
MAILPATH
Diese Variable ist eine Ergänzung zur Variablen MAIL und enthält eine Liste von Dateien, in die eingehende E-Mails abgelegt werden sollen. Die Eingabe erfolgt durch Kommata getrennt.
PATH
Diese Variable enthält eine durch Doppelpunkte getrennte Liste von Verzeichnisnamen, die durchsucht werden, wenn die Shell nach einem an der Befehlszeile angegebenen Befehl sucht. Diese Verzeichnisse werden dabei von links nach rechts durchsucht, um den auszuführenden Befehl zu finden. Der erste gefundene Befehl wird von der Shell ausgeführt.
PS1
Diese Variable enthält das primäre Promptzeichen der Shell, bei der Korn-Shell zum Beispiel das Dollarzeichen ($) für einen einfachen Benutzer und das Hashzeichen (#) für root. Sie kann aber jederzeit von einem Benutzer seinen Bedürfnissen entsprechend angepasst werden.
PS2
Diese Variable enthält das sekundäre Promptzeichen, in der Regel das Größerzeichen (>). Dieser Prompt wird von der Shell verwendet, wenn ein Befehl noch nicht abgeschlossen wurde, das heißt, sie wartet auf weitere Eingaben. Der Sekundärprompt kann durch (Ctrl)+(c) abgebrochen werden.
PWD
Diese Variable enthält das aktuelle Verzeichnis.
SHELL
Diese Variable enthält den Namen der Anmeldeshell, zum Beispiel /bin/bash.
Tab. 6.9: Wichtige Variablen der Bourne-Again-, Korn- und Bourne-Shell
262
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Variable
Beschreibung
TERM
Diese Variable enthält den Bildschirmtyp und wird von Programmen ausgewertet, die bildschirmorientiert arbeiten.
VISUAL
Diese Variable definiert ebenfalls den Standardeditor der Shell. Bestimmte Programme, wie zum Beispiel Varianten des Befehls crontab, verwenden diese Variable, da sie einen Editor zur Ausführung benötigen.
Tab. 6.9: Wichtige Variablen der Bourne-Again-, Korn- und Bourne-Shell (Forts.)
Einige der Variablen werden einmalig bei der Anmeldung des Benutzers definiert, wie zum Beispiel HOME und LOGNAME. Andere werden während der Arbeit am System automatisch von der Shell gesetzt, wie zum Beispiel PWD und PS1, und manche werden durch einen Benutzer oder eine Datei zugewiesen, wie zum Beispiel TERM. Die Shellvariablen der Korn-Shell werden auf genau dieselbe Weise wie bei der Bourne-Shell definiert, geändert, gelöscht und exportiert (vergleiche Abschnitt 6.4.1). Die Bourne-Again- und Korn-Shell kennen einige Standardvariablen mehr als die Bourne-Shell. Nachfolgend werden nur die Variablen vorgestellt, die in der BourneShell nicht bekannt sind: Variable
Beschreibung
COLUMNS
Diese Variable definiert die Breite der Befehlszeile für die Ausgabe, der Standardwert sind 80 Spalten.
HISTFILE
Diese Variable enthält den Namen der Datei, in der die History-Liste gespeichert wird. Standardmäßig heißt die Datei .sh_history.
HISTSIZE
Diese Variable definiert, wie viele Befehle in der History-Liste gespeichert werden sollen. Der Standardwert ist 128.
LINES
Diese Variable enthält die Zeilenlänge des Bildschirms, die standardmäßig 25 Zeilen beträgt.
OLDPWD
Diese Variable enthält den Namen des Verzeichnisses, in das vor dem aktuellen Verzeichnis verzweigt wurde.
PPID
Diese Variable enthält die Prozess-ID der übergeordneten Shell.
PS3
Die Variable PS3 enthält das Promptzeichen, das von der Shell-Anweisung select verwendet wird.
PS4
Die Variable PS4 enthält das Promptzeichen für die Shelloption –x und lautet standardmäßig »+«.
RANDOM
Diese Variable gibt eine Zufallszahl zwischen 0 und 32.767 aus.
SECONDS
Diese Variable enthält die Zeit in Sekunden, die vergangen ist, seit die Shell gestartet wurde.
TMOUT
Diese Variable enthält die Zeit in Sekunden, nach der ein automatisches Abmelden des Benutzers erfolgen soll, wenn dieser eine bestimmte Zeitspanne nicht mehr aktiv ist.
Tab. 6.10: Die Variablen der Bourne-Again- und Korn-Shell
263
magnum
Variable
6.4.3
Shellvariablen der C- und TC-Shell
Die C-Shell verwendet ebenfalls lokale und Umgebungsvariablen. Lokale Variablen werden dabei in der Regel klein- und Umgebungsvariablen großgeschrieben. Bestimmte lokale Variablen werden auch automatisch von der Shell zu Umgebungsvariablen umgesetzt. Werden die Umgebungsvariablen TERM oder PATH verändert, dann ändert sich automatisch auch der Wert der entsprechenden lokalen Variablen term oder path. Lokale Variablen werden mit dem Befehl set erzeugt, der ohne Optionen eine Liste von Variablen anzeigt: suso1% set path=($path /home/her) suso1% echo $path /usr/bin /usr/ucb /export/home/her suso1% set cwd/etc home/home/her path(/usr/bin /usr/ucb /home/her) promptsuso1% shell/bin/csh ...
Mit dem Befehl unset variable lässt sich eine lokale Variable wieder löschen. Umgebungsvariablen werden mit dem Befehl der entfernt:
setenv
erzeugt und mit
unsetenv
wie-
suso1% setenv BER / home/her/protokolle/bericht suso1% echo $BER /home/her/protokolle/bericht suso1% unsetenv suso1% echo $BER BER: Undefined variable
Beachten Sie die unterschiedliche Syntax von set und setenv. Der Befehl set verwendet ein Gleichheitszeichen, der Befehl setenv dagegen ein Leerzeichen, um eine Variable zu definieren. In der folgenden Tabelle sehen Sie einige weitere lokale Variablen der C-Shell. Variable
Bedeutung
cwd
Enthält das aktuelle Arbeitsverzeichnis
filec
Definiert den File-Completion-Mechanismus
home
Enthält das Homeverzeichnis des Benutzers
shell
Enthält die Anmeldeshell des Benutzers
term
Enthält den Terminaltyp
user
Enthält den aktuellen Benutzernamen
Tab. 6.11: Lokale Variablen der C-Shell
264
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
6.5 Grundlagen der Shellskriptprogrammierung Shellskripte werden häufig von Systemadministratoren erstellt oder verwaltet, um das Verhalten des Betriebssystems zu steuern oder zu ändern. Ein Shellskript ist eine reine ASCII-Datei, in der Befehle und Kommentare eingetragen sind. Kommentare beginnen mit dem Hashzeichen (#) und dokumentieren, was die jeweiligen Zeilen im Skript beim Ausführen bewirken. Das ausführende Shellprogramm wird in der ersten Zeile des Skripts festgelegt, bei einem Bourne-Shellskript zum Beispiel: #!/bin/sh
Wenn bei einem Shellskript nur normaler Textkommentar oder kein Kommentar in der obersten Zeile steht, wird die aufrufende Shell zur Ausführung des Skripts verwendet. Sie erzeugen ein Shellskript mit einem beliebigen Texteditor, zum Beispiel vi. Anschließend machen Sie die Datei ausführbar, indem Sie die Ausführrechte zuweisen. Sie starten das neue Skript durch Aufruf mit seinem Namen: $ vi testprog ... :wq $ chmod 755 testprog $ ./testprog
Sie sollten als Shellskriptnamen auf keinen Fall script oder test verwenden, da es unter Linux bereits Befehle mit diesem Namen gibt.
6.5.1
Variablen der Shellskriptprogrammierung
Shellskripte können Variablen auswerten. Variablen können in der Shell gesetzt oder beim Aufruf als Positionsparameter übergeben werden. Positionsparameter sind besondere, in die Shell integrierte Variablen, um einem Skript Argumente der Befehlszeile zu übergeben. Dabei wird jede Zeichenkette der Befehlszeile, die durch ein Leerzeichen getrennt hinter dem Skriptnamen steht, als Argument betrachtet, auf das man sich mit Hilfe von Positionsparametern beziehen kann, zum Beispiel: $ testprog argument1 argument2 argument3 ...
Bei Ausführung des Skripts testprog wird von der Shell das erste Argument der Befehlszeile automatisch dem Positionsparameter $1, das zweite Argument dem Positionsparameter $2 usw. übergeben. Die Bourne-Shell kennt die Positionsparameter $1 bis $9, ${10}, ${11} usw. (ab dem zehnten Positionsparameter müssen geschweifte Klammern verwendet werden) und der Name des Skripts wird mit der Variablen $0 abgerufen. Im nächsten Beispiel wird ein Shellskript mit dem Namen my.script erstellt, das an der Befehlszeile übergebene Parameter wieder ausgeben soll.
265
Grundlagen der Shellskriptprogrammierung
magnum
$ vi my.script #!/bin/sh echo Hier sind die gesetzten Positionsparameter: echo Der erste lautet: $1 echo Der zweite lautet: $2 echo Der dritte lautet: $3 echo Der vierte lautet: $4 echo Das Skript heisst: $0 :wq $ chmod 755 my.script
Wenn das neue Skript aufgerufen wird, erhalten Sie folgendes Ergebnis: $ ./my.script heute scheint die sonne Hier sind die gesetzten Positionsparameter: Der erste lautet: heute Der zweite lautet: scheint Der dritte lautet: die Der vierte lautet: sonne Das Skript heisst: my.script
Es gibt zwei weitere spezielle Variablen:
쮿
Die spezielle Variable $# enthält die Anzahl der Argumente der Befehlszeile, die in den Positionsparametern $1 bis $9 gespeichert sind.
쮿
Die spezielle Variable $@ gibt alle Werte der Positionsparameter auf einmal aus.
6.5.2
Bedingungsabfragen
Der Befehl if Die Shellskriptsprache kann auch Bedingungen abfragen und damit Aktionen ausführen, abhängig davon, ob eine Bedingung erfüllt ist oder nicht. Dazu wird der Befehl if verwendet. Die Syntax des Befehls lautet: if befehl1 then befehl2 befehl3 fi
Wird ein Programm beendet, dann gibt es einen Wert an die Shell zurück. Dieser Rückgabewert ist eine Integerzahl zwischen 0 und 255. Der Rückgabewert 0 (null) bedeutet, dass der Befehl erfolgreich ausgeführt wurde. Bei der Anweisung if heißt das Folgendes: Wenn befehl1 den Wert 0 zurückgibt, werden die Anweisungen ausgeführt, die zwischen then und fi stehen. Bei einem Rückgabewert größer 0 wurde die Bedingung nicht erfüllt und die Anweisungen zwischen then und fi werden übersprungen. Die Shellvariable $? enthält den Rückgabewert des zuletzt ausgeführten Befehls, zum Beispiel: $ ls –l /nix /nix: No such file or directory $ echo $? 1
266
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Der Befehl test Der Befehl test wird häufig gemeinsam mit if verwendet. Dieser in die Shell eingebaute Befehl prüft einen Ausdruck und gibt bei einem wahren Ergebnis den Wert 0 zurück. Bei einem falschen Ergebnis ist der Rückgabewert ungleich 0. Im folgenden Beispiel wird der Wert der Variablen TERM überprüft: if test "$TERM" = "vt100" then echo "Das Terminal heisst vt100" fi
Der Befehl test wird normalerweise in Shellskripten nicht ausgeschrieben, sondern in seiner Kurzschreibweise mit den eckigen Klammern verwendet, zum Beispiel: if [ "$TERM" = "vt100" ] then echo "Das Terminal heisst vt100" fi
Vor und nach den eckigen Klammern sowie den Vergleichsoperatoren muss jeweils ein Leerzeichen stehen. Der Befehl test kann nicht nur Zeichenketten vergleichen, sondern kennt viele spezielle Prüfoperatoren für Dateien, die mit der Syntax $ test option datei
verwendet werden. Zu den wichtigsten gehören: Operator
Abfrage
-b
Ist die Datei ein blockorientiertes Gerät?
-c
Ist die Datei ein zeichenorientiertes Gerät?
-d
Ist die Datei ein Verzeichnis?
-e
Ist die Datei vorhanden?
-f
Ist die Datei nur eine reguläre Datei?
-h
Ist die Datei ein symbolischer Link?
-p
Ist die Datei ein Named Pipe?
-r
Ist die Datei für den Benutzer lesbar?
-s
Ist die Datei größer als 0 Byte?
-w
Ist die Datei für den Benutzer schreibbar?
-x
Ist die Datei ausführbar?
Tab. 6.12: Die Operatoren des Befehls test
267
magnum
Grundlagen der Shellskriptprogrammierung
Im nächsten Beispiel wird mit Hilfe eines Dateioperators überprüft, ob eine ausführbare Datei vorliegt: $ vi exe_script #!/bin/sh if [ -x /export/home/her/pos_script ] then echo "Datei ist ein ausfuehrbares Skript!" echo $? fi :wq $ chmod 755 exe_script $ ./exe_script Datei ist ein ausfuehrbares Skript! 0
Darüber hinaus beherrscht der Befehl che. Die Syntax lautet hier:
test
auch noch umfangreiche Dateiverglei-
$ test datei1 option datei2
Zu den Möglichkeiten des Dateivergleichs gehören folgende Operatoren: Operator
Abfrage
( ausdruck )
Der Ausdruck ist wahr.
! ausdruck
Der Ausdruck ist falsch.
ausdr1 -a ausdr2
Sowohl Ausdruck1 als auch Ausdruck2 sind wahr.
ausdr1 -o ausdr2
Entweder Ausdruck1 oder Ausdruck2 ist wahr.
[-n] string
Die Zeichenkette ist nicht leer, also mindestens ein Zeichen lang.
-z string
Die Zeichenkette ist leer.
string1 = string2
Die Zeichenketten sind gleich.
string1 != string2
Die Zeichenketten sind nicht gleich.
zahl1 -eq zahl2
Zahl1 ist gleich Zahl2.
zahl1 -ge zahl2
Zahl1 ist größer oder gleich Zahl2.
zahl1 -gt zahl2
Zahl1 ist größer als Zahl2.
zahl1 -le zahl2
Zahl1 ist kleiner gleich Zahl2.
zahl1 -lt zahl2
Zahl1 ist kleiner als Zahl2.
zahl1 -ne zahl2
Zahl1 ist nicht gleich Zahl2.
datei1 -ef datei2
Datei1 und Datei2 haben dieselbe Gerätenummer und dieselbe Inode-Nummer.
datei1 -nt datei2
Datei1 ist jünger als Datei2.
datei1 -ot datei2
Datei1 ist älter als Datei2.
Tab. 6.13: Die Vergleichsoperatoren des Befehls test
268
Kapitel 6 · Grundlagen der Shells und Shellskriptprogrammierung
Bei den Vergleichen zahl option zahl können Sie auch die Länge von Zeichenketten vergleichen, indem Sie die Option -l string anstelle einer Zahl verwenden.
Der Befehl case Mit dem Befehl case lassen sich mehrere Bedingungen überprüfen. Die Syntax lautet: case wert in wert1 ) befehl befehl wert2 ) befehl befehl wert3 ) befehl befehl * ) befehl esac
;; ;; ;; ;;
Der Anweisung case wird ein Wert übergeben, der in einem Mustervergleich nacheinander mit den Werten wert1, wert2 usw. verglichen wird, bis eine Übereinstimmung vorliegt. Dann werden die diesem Wert zugeordneten Befehle ausgeführt, bis die beiden Strichpunkte erreicht sind. Anschließend erfolgt ein Sprung direkt auf die Zeile nach dem Abschlusselement esac. Stimmt kein Wert mit dem der Variablen überein, werden die Befehle nach dem Wert * ) aufgerufen. In diesem Beispiel wird der Befehl case verwendet: $ vi script.gruss #!/bin/sh stunde=‘date | cut -c12-13‘ echo $stunde case "$stunde" in 0? | 1[01]) echo "Guten Morgen." ;; 1[2-7]) echo "Guten Tag." ;; *) echo "Guten Abend." ;; esac :wq $ chmod 755 script.gruss $ ./script.gruss 16 Guten Tag. $
Der Befehl case wertet die Variable $stunde aus, die den Wert der aktuellen Zeit speichert. Diese wird vom Befehl date über seine Ausgabe an den Befehl cut übergeben, der die Uhrzeit aus dem 12. und 13. Zeichen extrahiert. Der Wert der caseVariablen $stunde wird mit jedem Wert im Skript verglichen und wenn eine Übereinstimmung gefunden wird, wird das Ergebnis am Bildschirm ausgegeben. Der erste überprüfte Wert stellt fest, ob der Wert von $stunde mit einer Stunde am Morgen übereinstimmt (zum Beispiel 1:00 h bis 11:00 h): 0? | 1[01] ).
269
Grundlagen der Shellskriptprogrammierung
magnum
쮿
0? steht für die Zahl 0 und das Wildcardsymbol ?, das ein Platzhalter für genau ein beliebiges Zeichen ist. Die möglichen Werte lauten daher: 01, 02, 03, 04, 05, 06, 07, 08, 09.
쮿
| ist eine ODER-Abfrage.
쮿
1[01] steht für die Zahl eins und die Wildcardzeichen, die sich in den eckigen Klammern ([ ]) befinden, stehen für genau ein beliebiges Zeichen aus diesem Bereich. Die möglichen Werte lauten hier 10 und 11.
Die zweite Prüfung stellt fest, ob der Wert der case-Variablen mit einer Stunde am Nachmittag übereinstimmt (zum Beispiel 12:00 h bis 17:00 h): 1[2-7] ). Die möglichen Werte lauten hier 12, 13, 14, 15, 16 und 17. Die dritte Prüfung stellt fest, ob der Wert der case-Variablen mit einer Stunde am Abend übereinstimmt (zum Beispiel 18:00 h bis 24:00 h): * ). Die möglichen Werte lauten hier 18, 19, 20, 21, 22, 23 und 24.
Der Befehl exit Mit Hilfe des Befehls exit können Sie die Ausführung eines Shellskripts sofort beenden und dabei gleichzeitig einen Rückgabewert zwischen 0 und 255 zuweisen. Die Syntax lautet: exit wert
Der Befehl lässt sich mehrmals in einem Skript verwenden, um dieses zu beenden, wenn eine bestimmte Bedingung eintritt. Da Sie unterschiedliche Argumente für jeden Befehl exit mitgeben können, lässt sich nach einem Abbruch feststellen, wo im Skript dieser Abbruch stattgefunden hat. Wenn das Skript erfolgreich abläuft, verwenden Sie einen exit-Wert von 0, ansonsten definieren Sie den Returncode mit einem Wert größer 0.
270
7 Multimedia »Die neuen Medien bringen viele neue Möglichkeiten, aber auch viele neue Dummheiten mit sich.« – Ernst Ferstl In diesem Kapitel wird zuerst beschrieben, wie die notwendigen Multimediageräte, wie zum Beispiel Soundkarte und CD-ROM- bzw. DVD-Geräte konfiguriert werden können. Dazu werden einige Begriffe im Bereich Audio erläutert und Tools vorgestellt, mit denen Sie Audiodateien abspielen können. Danach erfahren Sie, wie Sie Daten- und Audio-CD-ROMs brennen können. Bei Fedora Core Linux 4.0 gibt es unter KDE und GNOME einige der hier beschriebenen KDE-Programme, ein Teil muss aber manuell nachinstalliert werden. Auch das Brennen von CD-ROMs ist mit der Standard-KDE-Installation nicht möglich, sondern muss mit Hilfe der hier beschriebenen Befehle erfolgen, oder das gewünschte Brennprogramm muss nachinstalliert werden. Alle in diesem Kapitel vorgestellten KDE-Tools müssen Sie nicht unbedingt über das KDE-Hauptmenü starten. Wenn das entsprechende Tool installiert ist, können Sie es auch direkt in einem Terminalfenster mit seinem Namen aufrufen, zum Beispiel können Sie das CD-Spieler-Programm KSCD wie folgt starten: $ kscd &
7.1 Audio unter Linux Unter Linux gibt es viele verschiedene Tools, um Audiodateien abzuspielen. Bevor einige vorgestellt werden, sollen in diesem Abschnitt einige Begriffe geklärt werden.
7.1.1
Audiodateitypen
Um die Begriffe in den nachfolgenden Abschnitten zu klären, werden in diesem Abschnitt kurz auf die unterschiedlichen Audiodateitypen erläutert.
WAV-Dateien WAV bzw. WAVE ist das Audioformat von Microsoft Windows, das mit Windows 95 eingeführt wurde. Es hat sich recht schnell verbreitet, da es zu dieser Zeit wenig andere Formate gab. Da das Format unkomprimiert aufgezeichnet wird, benötigt eine aufgezeichnete Minute ungefähr 10 Mbyte Festplattenplatz. Das WAV-Format lässt sich zwar mit fast jedem Player abspielen, ist aber aufgrund der großen anfallenden Dateimenge ungünstig. Daher wird es in der Regel fast nur noch als Zwischenformat für die Erstellung von MP3- und OGG-VorbisDateien verwendet, die normalerweise nicht mehr ganz dieselbe Tonqualität aufweisen, aber eine sehr effiziente Komprimierung verwenden.
MP3-Dateien MP3 steht für MPEG 1 Audio Layer 3, ein vom Fraunhofer Institut entwickeltes Format, das Musikdateien effizient und ohne nennenswerten Qualitätsverlust
271
Soundkarte einrichten
magnum
komprimieren kann. Dazu werden einfach für das menschliche Gehör nicht mehr wahrnehmbare Tonbereiche und zum Teil auch hörbare Klangspitzen gelöscht. Eine im MP3-Format aufgezeichnete Minute benötigt noch ungefähr 1 Mbyte Festplattenplatz. Das führte dazu, dass sich Musiktauschbörsen besser entwickeln konnten, was schnell rechtliche Folgen hatte, zum Beispiel musste die größte Tauschbörse Napster aufgrund von Prozessen aufgeben. So wurde selbst für den privaten Verwendungszweck ab dem 13. September 2003 gesetzlich verboten, kopiergeschützte CDs zu »knacken« bzw. zu rippen. Kopiergeschützte CDs können auch oft nicht mehr von allen CD-Playern abgespielt werden. Für den Eigenbedarf ist es gesetzlich aber immer noch erlaubt, von nicht kopiergeschützten CDs MP3-Dateien zu erstellen. Musikstücke, die von den Künstlern selbst oder zu Werbezwecken zum Herunterladen angeboten werden, dürfen nach dem im Moment geltenden Gesetz ebenfalls angehört und abgespeichert werden. Als Rippen oder Grabben wird das Auslesen einer Musik-CD und Abspeichern auf einer Festplatte bezeichnet. Ein weiteres Problem mit MP3-Dateien besteht darin, dass der dafür verwendete Algorithmus des Fraunhofer Instituts patentiert ist, das heißt, ein Hersteller eines Encoders muss eine Lizenzgebühr dafür entrichten. Open-Source-Projekte können sich das nicht leisten und haben daher eigene Lösungen entwickelt. Als Encoden wird das Konvertieren einer WAV-Datei in ein Format wie zum Beispiel MP3- oder Ogg-Vorbis bezeichnet, um weniger Speicherplatz zu verbrauchen. Decoden ist der umgekehrte Weg und wird durchgeführt, wenn ein Programm Audio-CDs nur mit WAV-Dateien brennen kann.
OGG Vorbis Das Lizenzproblem führte dazu, dass Ogg Vorbis entwickelt wurde, das im Moment einzige freie (Public Domain) Audioformat, das den bereits beschriebenen Komprimierungsmechanismus nutzt und daher kleinere Dateien erzeugen kann. Die erzeugten Dateien sind häufig kleiner als die im MP3-Format bei meist besserer Qualität. Das Projekt OGG (http://www.vorbis.com) bietet nicht nur das Musikformat, sondern baut auch ein vollständiges freies Multimediasystem auf. Wenn Sie MP3-Dateien besitzen, können Sie diese mit Hilfe eines Konverters in das OGG-Vorbis-Format umwandeln. Die Dateien werden dabei zwar verkleinert, aber häufig wird durch das doppelte Encoden die Qualität auch ein wenig schlechter. Besser ist es in der Regel, von Anfang an mit dem OGG-Vorbis-Format zu arbeiten.
7.2 Soundkarte einrichten Wenn Sie Ihre im Rechner befindliche Soundkarte aktivieren möchten, müssen Sie sich unbedingt als Superuser root am System anmelden, da nur dieser die Installation neuer Geräte durchführen darf. In der Regel wird die Soundkarte von den heutigen Linux-Systemen automatisch erkannt. Sollte dies ausnahmsweise nicht der Fall sein, können Sie die Soundkarte entweder unter SUSE Linux mit dem Befehl alsaconf oder über die grafische Oberfläche aktivieren.
272
Kapitel 7 · Multimedia
Der Befehl steht standardmäßig unter Fedora Core Linux nicht zur Verfügung. Dort kann die Soundkarte mit dem Befehl alsactl konfiguriert werden, der die Konfigurationsdatei /etc/asound.state verwendet. Alternativ können Sie das Paket mit den Alsa-Tools unter http://download.fedora.redhat.com/pub/fedora/ linux/core/development/i386/Fedora/RPMS herunterladen. Da die Alsa-Tools distributionsunabhängig sind, können Sie diese auch von der Webseite des Alsa-Projekts beziehen: http://www.alsa-project.org/download.php.
7.2.1
Der Befehl alsaconf
Öffnen Sie unter SUSE Linux ein Terminalfenster und geben Sie dort den Befehl alsaconf ein:
Bild 7.1: Einstiegsfenster des Programms alsaconf
Ihre Soundkarte wird von alsaconf erkannt und angezeigt.
Bild 7.2: Anzeige der erkannten Soundkarte
273
Soundkarte einrichten
magnum
Bestätigen Sie diese Information mit der (¢)-Taste. Das Tool schlägt Ihnen nun vor, die Soundkarte in die Datei /etc/modeprobe.d/sound bzw. /etc/modprobe.conf einzutragen. Dieser Schritt bewirkt, dass Linux beim nächsten Start automatisch den passenden Treiber lädt.
Bild 7.3: Soundkarte in der Datei /etc/modules.conf eintragen
Bestätigen Sie diesen Vorschlag mit YES. Damit haben Sie Ihre Soundkarte dem Betriebssystem bekannt gemacht. Es folgt noch die Meldung, dass die Soundkarte nun von alsaconf einsatzbereit konfiguriert wird, sowie der Hinweis, dass Sie manuelle Einstellungen zur Lautstärke usw. mit Hilfe des Programms alsamixer oder gamix vornehmen können.
Bild 7.4: Abschlusskonfiguration der Soundkarte
Bestätigen Sie auch diese Meldung mit der Taste (¢). Das letzte Fenster des Programms bietet Ihnen die Möglichkeit, die Soundkarte gleich einmal zu testen.
274
Kapitel 7 · Multimedia
Bild 7.5: Soundkarte testen
Wählen Sie dazu die Option YES, woraufhin ein lang gezogener Klang ertönen sollte. Das Programm beendet sich schließlich mit der Meldung Now ALSA is ready to use.
7.2.2
Lautstärke bei der Soundkarte regeln?
Um die Lautstärke der Soundkarte zu regeln, gibt es mehrere Tools. An dieser Stelle werden nur einige vorgestellt.
Das Tool alsamixer Wenn Sie im Terminalfenster den Befehl alsamixer eingeben, starten Sie ein Programm, mit dem Sie die Lautstärkeregelung der Soundkarte einstellen können. Ein solches Programm sollte mindestens einmal verwendet werden, denn die Grundlautstärke steht oft standardmäßig auf 0.
Bild 7.6: Das Programm alsamixer
275
Soundkarte einrichten
magnum
Sie können mit den Cursortasten (æ) und (Æ) zwischen den verschiedenen Einstellungsmöglichkeiten wechseln und anschließend mit den Cursortasten (½) und (¼) die Lautstärke erhöhen oder leiser stellen. Die Einstellung wird in den Säulen oberhalb der Einstellungsmöglichkeiten angezeigt. Je höher die Anzeige in den Säulen ist, desto lauter ist der Kanal geschaltet. Durch Drücken auf die (ESC)-Taste können Sie das Programm beenden. Das Tool gibt es inzwischen auch in grafischer Ausführung. Öffnen Sie im Hauptmenü MULTIMEDIA - LAUTSTÄRKEREGLER - ALSAMIXERGUI:
Bild 7.7: Das Programm ALSAMIXERGUI
Dieses Programm ist unter Debian GNU/Linux 3.1 mit KDE 3.3.2 standardmäßig nicht installiert.
Das KDE-Tool Kmix Wenn Sie es bevorzugen, mit einem KDE-Tool diese Einstellungen durchzuführen, öffnen Sie im Hauptmenü MULTIMEDIA - LAUTSTÄRKEREGLER (KMIX):
Bild 7.8: Das Tool KMIX
Hier können Sie mit der Maus arbeiten. Die Symbole über den Spalten weisen auf das Aufnahme- oder Ausgabegerät hin, so wird zum Beispiel die Lautstärke für das Abspielen von CDs über die Säule mit dem CD-Symbol gesteuert. Mit dem Regler innerhalb einer Säule können Sie die Lautstärke erhöhen (nach oben ziehen) oder leiser stellen (nach unten ziehen). Es gibt außerdem noch eine Registerkarte EINGANG und eine Registerkarte SCHALTER, mit denen Sie weitere Einstellungen vornehmen können:
276
Kapitel 7 · Multimedia
Bild 7.9: Einstellungen unter KMIX
Das Tool KMIX bindet sich in die Kontrollleiste ein, um einen schnelleren Zugriff auf die Lautstärkeregelung zu bieten. Sie können mit der linken Maustaste die Lautstärke regeln und mit der rechten Maustaste das Programm starten. Wenn Sie das Tool aus der Kontrollleiste entfernen möchten, öffnen Sie das Menü EINSTELLUNGEN - KMIX EINRICHTEN und deaktivieren Sie die Option KMIX AN DIE KONTROLLLEISTE ANDOCKEN.
7.2.3
Soundkarte grafisch mit YaST konfigurieren
Normalerweise sollte Ihre Soundkarte auch bei SUSE Linux automatisch erkannt werden. Wenn das nicht der Fall ist oder Sie weitere Einstellungen zur Soundkarte vornehmen möchten, wie zum Beispiel die Lautstärke regeln, können Sie in YaST das Menü HARDWARE - SOUND verwenden. Entweder können Sie eine nicht erkannte Soundkarte mit Hilfe der Schaltfläche KONFIGURIEREN einrichten oder Sie können eine bereits konfigurierte Soundkarte mit der Schaltfläche ÄNDERN bearbeiten:
Bild 7.10: Soundkarte bearbeiten
277
Soundkarte einrichten
magnum
Wenn Sie auf KONFIGURIEREN klicken, um eine Soundkarte neu zu konfigurieren, stehen Ihnen dazu drei Optionen zur Auswahl:
Bild 7.11: Soundkarte neu konfigurieren
Wenn Sie stattdessen eine bestehende Soundkarte ändern, wird Ihnen zuerst die Liste der zur Verfügung stehenden Soundkarten angezeigt. Sie müssen die zu bearbeitende markieren und anschließend auf OPTIONEN klicken. Alternativ können Sie auch an dieser Stelle eine Soundkarte hinzufügen oder löschen:
Bild 7.12: Soundkarte bearbeiten
278
Kapitel 7 · Multimedia
Mit Hilfe der Schaltfläche OPTIONEN können Sie erweiterte Optionen zur Soundkarte einstellen:
Bild 7.13: Erweiterte Soundkartenoptionen einstellen
Die Schaltfläche LAUTSTÄRKE bietet Möglichkeiten, die Lautstärke der Soundkarte einzustellen und zu testen:
Bild 7.14: Lautstärke der Soundkarte einstellen
7.2.4
Soundkarte grafisch mit Fedora Linux konfigurieren
Normalerweise sollte Ihre Soundkarte auch bei Fedora Core Linux automatisch erkannt werden. Wenn das nicht der Fall ist, können Sie im Hauptmenü unter SYSTEMEINSTELLUNGEN - ERMITTLUNG DER SOUNDKARTE nach der Soundkarte suchen lassen und diese testen:
279
Soundkarte einrichten
magnum
Bild 7.15: Mit Fedora Linux Soundkarte suchen
7.2.5
Audio-CDs abspielen
Es ist sehr einfach, Audio-CDs unter Linux abzuspielen, wenn Sie eines der Tools im Menü MULTIMEDIA - CD-SPIELER, zum Beispiel CD-PLAYER, verwenden.
Das Tool CD-Player/CD-Spieler Das Programm sieht einem CD-Spieler nicht nur sehr ähnlich, sondern funktioniert auch genauso. Legen Sie die CD, die Sie anhören möchten, in das CD-ROM-Laufwerk ein und klicken Sie anschließend auf die Schaltfläche PLAY. Zu jeder Schaltfläche gibt es wieder eine Minihilfe, sobald Sie den Mauszeiger darauf stellen. Dieses Tool steht unter der von Fedora Core Linux 4.0 standardmäßig installierten KDE nicht zur Verfügung, wird aber unter GNOME angeboten.
Bild 7.16: Audio-CDs mit CD-Player anhören
Unter manchen Linux-Versionen kann es vorkommen, dass Sie bei den CD-SpielerTools Fehlermeldungen mit dem Inhalt bekommen, dass keine CD eingelegt sei. Es kann daran liegen, dass die Rechte für das CD-ROM-Gerät nicht für jeden gesetzt sind. Wechseln Sie mit dem Befehl su zum Benutzer root (alternativ können Sie natürlich auch sudo verwenden) und überprüfen Sie mit dem Befehl ls-l /dev/hdc (bzw. für Ihren CD-ROM-Gerätenamen), ob die Lese- und Schreibrechte auf 666 gesetzt sind (vergleiche Kapitel 9). Wenn nicht, verwenden Sie den Befehl chmod 666 /dev/hdc (bzw. den Gerätenamen Ihres CD-ROM-Geräts). Unter Debian sollte der Benutzer zur Gruppe cdrom gehören.
280
Kapitel 7 · Multimedia
Mit der Schaltfläche TITELEDITOR ÖFFNEN können Sie eine eigene Titelliste hinterlegen, wenn die CD nicht automatisch erkannt wird:
Bild 7.17: Titeleditor öffnen
Alternativ versucht das Programm aber immer, aus einer Datenbank Interpret und Titel anzubieten. Diese Datenbank ist bereits standardmäßig zentral für alle KDE-Programme im KDE-Kontrollzentrum im Abschnitt SOUND & MULTIMEDIA und dort unter CDDB-ABFRAGE hinterlegt. Das entsprechende Fenster öffnet sich automatisch und Sie können die entsprechende CD-Kennung auswählen:
Bild 7.18: Auswahl aus der Titel-Datenbank
281
Soundkarte einrichten
magnum
Anschließend werden Titel und Interpret angezeigt:
Bild 7.19: Übernahme der Auswahl von Titel und Interpret
Und die Daten aus der Datenbank werden automatisch in den Titeleditor übertragen:
Bild 7.20: Übernahme der Einzeltitel in den Titeleditor
Das Tool KsCD Ein weiteres Tool zum Abspielen von CDs im Menü MULTIMEDIA ist KSCD. Es ist genauso einfach zu bedienen:
Bild 7.21: Das Tool KSCD
Diese Tools stellen nur eine kleine Auswahl dar. Die meisten grafischen CD-Player funktionieren aber auf ähnliche Weise.
282
Kapitel 7 · Multimedia
Dieses Tool finden Sie unter SUSE Linux im Menü MULTIMEDIA unter dem Namen CD-SPIELER.
7.2.6
Audiodateien abspielen
Es gibt sehr viele KDE-Tools, mit denen Sie Audiodateien abspielen können. In diesem Abschnitt werden drei Tools vorgestellt. Es gibt aber weitere Audioplayer wie zum Beispiel KMID usw.
Das Tool Xmms Ein weiteres interessantes Tool zum Abspielen von Audiodateien ist XMMS. Bei SUSE Linux 10.0 können Sie das Paket mit Hilfe von YaST nachinstallieren (vergleiche Kapitel 5), da es in der standardmäßigen Paketauswahl nicht enthalten ist. Dieses Tool steht unter der von Fedora Core Linux 4.0 und Debian GNU/Linux 3.1 standardmäßig installierten KDE nicht zur Verfügung. Für Fedora Linux können Sie das Paket unter http://www.xmms.org/download.php downloaden. Bei Debian Linux ist das Paket im Moment nur im Archiv »unstable« unter http:// packages.debian.org/unstable/sound/xmms.html erhältlich.
Bild 7.22: Startfenster von XMMS
Die Programmoberfläche erinnert an einen CD-Player. Klicken Sie auf die Schaltfläche PL (Play List), um eine Liste der abzuspielenden Dateien zusammenzustellen.
Bild 7.23: Eine Play List erstellen
Sie können dazu entweder die Schaltfläche +FILE oder LOAD LIST verwenden, wenn Sie bereits eine Play List gespeichert haben. Alternativ können Sie per Drag&Drop aus dem Konqueror die abzuspielenden Dateien in die Play List in den Editorbereich ziehen. Klicken Sie auf einen Titel und anschließend auf die
283
Soundkarte einrichten
magnum
PLAY-Schaltfläche, um ihn abzuspielen. Dasselbe ist auch mit einem Doppelklick auf den Titel möglich:
Bild 7.24: Titel abspielen
Wenn Sie auf die Schaltfläche EQ (Equalizer) klicken, können Sie noch einige Feineinstellungen zum Abspielen vornehmen:
Bild 7.25: Equalizer verwenden
XMMS hat sehr viele Einstellungsmöglichkeiten. Eine Auswahlmöglichkeit erhalten Sie, wenn Sie mit der rechten Maustaste in das Startfenster klicken. Wenn Ihnen zum Beispiel das etwas schwer lesbare schwarze Design nicht zusagt, können Sie sich ein anderes über das Menü OPTIONS - PREFERENCES auswählen. Anschließend klicken Sie auf die Registerkarte VISUALIZATION PLUGINS und wählen dort ein anderes Design. Weitere Designs können Sie auch von der Website http://www.xmms.org/skins.php downloaden.
Das Tool amaroK Öffnen Sie bei SUSE Linux 10.0 das KDE-Hauptmenü und dann die Optionen MULTIMEDIA - AUDIO-WIEDERGABE (AMAROK).
Bild 7.26: Begrüßungsfenster von AMAROK
Dieses Tool steht unter der von Fedora Core Linux 4.0 und Debian GNU/Linux 3.1 standardmäßig installierten KDE nicht zur Verfügung. Für Fedora Linux können Sie das Paket unter http://download.fedora.redhat.com/pub/fedora/linux/extras/4/ i386 downloaden. Bei Debian Linux ist das Paket unter http://packages.debian. org/stable/kde/amarok erhältlich.
284
Kapitel 7 · Multimedia
Auch diese Programmoberfläche ist sehr anschaulich aufgebaut, und die Schaltflächen sind entsprechend grafisch dargestellt. Klicken Sie auf die Schaltfläche PL (Play List), um Dateien zu laden, die Sie abspielen möchten. Es ist auch möglich, per Drag&Drop aus dem Konqueror die abzuspielenden Dateien in die Play List in den Bereich TITEL zu ziehen. Im nun geöffneten Fenster klicken Sie auf HINZUFÜGEN, um über einen Datei-Browser die abzuspielenden Dateien auszuwählen:
Bild 7.27: Abzuspielende Dateien auswählen
Anschließend können Sie auf eine Datei doppelklicken, damit sie abgespielt wird:
Bild 7.28: Datei abspielen AMAROK
setzt sich in die Kontrollleiste, wenn Sie das Fenster schließen. Klicken Sie mit der rechten Maustaste auf das entsprechende Symbol und wählen Sie BEENDEN, um das Programm vollständig zu schließen.
Das Tool AlsaPlayer Mit dem Programm ALSAPLAYER können Sie ebenfalls MP3-Dateien abspielen. Bei SUSE Linux 10.0 können Sie das Paket mit Hilfe von YaST nachinstallieren (vergleiche Kapitel 5), da es in der standardmäßigen Paketauswahl nicht enthalten ist. Dieses Tool steht unter der von Fedora Core Linux 4.0 und Debian GNU/Linux 3.1 standardmäßig installierten KDE nicht zur Verfügung. Bei Debian Linux ist es unter http://packages.debian.org/stable/sound/alsaplayer erhältlich. Klicken Sie auf das Symbol , um die Liste der Dateien zu laden, die abgespielt werden sollen. Mit LOAD können Sie einen Datei-Browser öffnen, um die Dateien in die Liste zu laden:
285
Soundkarte einrichten
magnum
Bild 7.29: Das Tool ALSAPLAYER
Bild 7.30: Abzuspielende Dateien auswählen
7.2.7
Videodateien abspielen
Es gibt auch mehrere KDE-Tools, mit denen Sie Videodateien abspielen können. In diesem Abschnitt werden drei Tools vorgestellt.
Das Tool Kaffeine Öffnen Sie das KDE-Hauptmenü und dann die Optionen MULTIMEDIA - VIDEOWIEDERGABE und klicken Sie dann auf KAFFEINE. Es wird ein Begrüßungsbildschirm angezeigt. Klicken Sie auf DATEI - ÖFFNEN, um eine Videodatei abzuspielen: Dieses Tool steht unter der von Fedora Core Linux 4.0 und Debian GNU/Linux 3.1 standardmäßig installierten KDE nicht zur Verfügung. Für Fedora Linux können Sie das Paket unter http://sourceforge.net/projects/kaffeine downloaden. Bei Debian Linux ist es unter http://packages.debian.org/stable/kde/ kaffeine-mozilla erhältlich.
Bild 7.31: Videodatei abspielen
286
Kapitel 7 · Multimedia
Sie können auch eine Kaffeine-Stückliste zusammenstellen, wenn Sie immer wieder dieselben Dateien abspielen wollen. Wählen Sie dazu im Menü ANSICHT den Menüpunkt STÜCKLISTE und anschließend über DATEI - ÖFFNEN die entsprechenden Dateien aus:
Bild 7.32: Abzuspielende Videodateien auswählen
Das Tool RealPlayer Öffnen Sie das KDE-Hauptmenü und dann die Optionen MULTIMEDIA - VIDEOWIEDERGABE und klicken Sie auf REALPLAYER. Klicken Sie auf DATEI - ÖFFNEN, um eine Videodatei abzuspielen: Dieses Tool steht unter der von Fedora Core Linux 4.0 und Debian GNU/Linux 3.1 standardmäßig installierten KDE nicht zur Verfügung.
Bild 7.33: Videodatei abspielen
287
Soundkarte einrichten
magnum
Das Tool Noatun Mit dem Tool NOATUN können Sie ebenfalls Videodateien abspielen.
Bild 7.34: Noatun starten
Bei SUSE Linux 10.0 können Sie das Paket mit Hilfe von YaST nachinstallieren (vergleiche Kapitel 5), da es in der standardmäßigen Paketauswahl nicht enthalten ist. Dieses Tool steht unter der von Fedora Core Linux 4.0 und Debian GNU/Linux 3.1 standardmäßig installierten KDE nicht zur Verfügung. Bei Debian Linux ist das Paket unter http://packages.debian.org/stable/sound/noatun erhältlich. Klicken Sie auf DATEI - ÖFFNEN, um eine Videodatei abzuspielen:
Bild 7.35: Videodatei abspielen
288
Kapitel 7 · Multimedia
7.3 CDs brennen Zum Brennen von CDs können Sie entweder nur die Befehlszeile oder grafische Tools verwenden. In diesem Abschnitt werden zuerst die CD-Dateisysteme erläutert und dann die entsprechenden Linux-Befehle zum Brennen aufgezeigt. Schließlich werden noch grafische Tools vorgestellt.
7.3.1
Dateisysteme für CDs und DVDs
Es gibt mehrere Dateisysteme für CDs und DVDs:
쮿
ISO-9660: Dieses genormte Dateisystem kann plattformübergreifend verwendet werden, verfügt dadurch aber über geringere Funktionalität als die anderen Dateisysteme. So wird zum Beispiel noch die 8.3-Konvention von DOS für Dateinamen eingehalten und mehr als acht Verzeichnisebenen sind nicht möglich.
쮿
Joliet: Viele Softwareunternehmen erweiterten aufgrund der oben genannten Beschränkungen das ISO-9660-Dateisystem. Microsoft entwickelte das JolietDateisystem, bei dem Dateinamen bis zu 64 Zeichen lang sein können, aber gleichzeitig kann das Dateisystem nur von den Betriebssystemen DOS, Windows, MacOS und Linux gelesen werden.
쮿
Rock Ridge: Auch dieses Dateisystem, auch RRIP oder Rock Ridge Interchange Protocol genannt, stellt eine Erweiterung zu ISO-9660 dar. Verzeichnisebenen können unbegrenzt tief geschachtelt werden und Dateinamen bis zu 256 Zeichen lang sein, trotzdem ist das Dateisystem zu anderen Betriebssystemen kompatibel.
쮿
UDF: Dieses Format ist recht neu und wird auch Universal Disc Format genannt. Es kann für CDs, DVDs und Festplatten verwendet werden, trotzdem bleibt die Kompatibilität zu ISO-9660 erhalten.
7.3.2
CDs mit Linux-Befehlen erstellen
Mit drei Befehlen ist es möglich, Daten-CDs, Audio-CDs sowie eine Mischform aus beidem zu erzeugen. Nachfolgend werden Ihnen alle drei Möglichkeiten erläutert, wobei folgende Befehle verwendet werden: 1. Der Befehl mkisofs wird zum Erstellen von Imagefiles verwendet. Imagefiles »spiegeln« den Inhalt einer CD-ROM oder eines Teils der Festplatte auf eine Weise wider, dass dieser mit einem der nachfolgend erläuterten Befehle auf eine CD gebrannt werden kann. 2. Der Befehl cdparanoia wird zum Kopieren der Audiospuren einer CD in Audiodateien auf der Festplatte benutzt. Anschließend können die Audiodateien auf eine CD gebrannt werden. 3. Der Befehl cdrecord wird für den Brenn- oder Kopiervorgang selbst verwendet.
289
magnum
CDs brennen
Die folgenden Befehle können nur ausgeführt werden, wenn Ihr(e) CD-Laufwerk(e) ordnungsgemäß erkannt wurden. Die neueren Linux-Distributionen haben in der Regel damit kein Problem, bei älteren Versionen kann das daran liegen, dass die Hardware nicht korrekt angeschlossen ist. Diese älteren LinuxVersionen erwarten, dass die einzelnen Geräte am (E)IDE-Bus fortlaufend angeschlossen sind, das bedeutet, das erste Gerät ist Master am ersten Controller, das zweite dort Slave, das dritte Gerät Master am zweiten Controller und das vierte dort wieder Slave. Ein weiteres Problem könnte sein, dass ein Laufwerk falsch »gejumpert« und damit als Slave konfiguriert ist, aber als Master am zweiten Controller angeschlossen oder umgekehrt ist. Bei Nichterkennen des CD-Laufwerks sollten diese Einstellungen überprüft und eventuell korrigiert werden. Eine weitere Voraussetzung ist, dass die CD-Laufwerke vom System bereits in die Tabelle /etc/fstab eingetragen wurden, in der zu mountende Geräte hinterlegt werden (vergleiche Kapitel 13). Solche Einträge müssen bei älteren Linux-Versionen manuell durchgeführt werden, während neue Linux-Distributionen das automatisch bei der Hardwareerkennung durchführen. Ein automatischer Eintrag für CD- und/oder DVD-Laufwerke kann zum Beispiel folgendermaßen aussehen: # more /etc/fstab /dev/hda1 / ... /dev/cdrom /media/cdrom /dev/dvd /media/dvd /dev/cdrecorder /media/cdrecorder /dev/dvdrecorder /media/dvdrecorder
ext3 defaults
1 1
auto auto auto auto
0 0 0 0
ro,noauto,user ro,noauto,user ro,noauto,user ro,noauto,user
0 0 0 0
CD-Brenner testen Geben Sie in einem Terminalfenster folgenden Befehl ein, um die Konfiguration Ihres CD-Brenners zu ermitteln und die Abfragezeichenketten auszudrucken: # cdrecord -scanbus
scsibus0: 0,0,0 0,1,0 0,2,0 ...
0) 'TOSHIBA ' 'DVD-ROM SD-R5112' '1031' Removable CD-ROM 1) * 2) *
Mit dieser Information zu Ihrem CD-ROM-Gerät können Sie später mit dem Befehl cdrecord dev=0,0,0 das Gerät ansprechen. Beachten Sie, dass Sie die Angabe 0,0,0 durch die Werte ersetzen müssen, die Ihnen der Befehl cdrecord -scanbus ausgibt. Sollte bei Ihnen der oben genannte Befehl eine Ausgabe mit Meldung Ihrer SCSIGeräte zur Folge haben, dann legen Sie jetzt eine CD ein und geben Sie dann den nächsten Befehl ein, um das CD-Gerät zu mounten: # mount /media/cdrom
Sollten Sie einen abweichenden Namen für den Mountpoint Ihres CD-Brenners in der Datei /etc/fstab eingetragen haben, dann verwenden Sie diesen.
290
Kapitel 7 · Multimedia
Ein Imagefile für eine Daten-CD erzeugen Im nächsten Schritt erstellen Sie mit dem Befehl mkisofs ein Filesystem-Image bzw. Imagefile von einer Daten-CD-ROM. Imagefiles spiegeln den Inhalt einer CD oder eines Teils der Festplatte auf eine Weise wider, dass dieser mit dem Befehl cdrecord oder cdparanoia auf eine CD gebrannt werden kann. Die Syntax des Befehls lautet: # mkisofs [-option(en)] pfadangabe
Das CD-Image, das später gebrannt werden soll, wird mit dem Befehl erzeugt. Dazu kann man unter anderem folgende Optionen wählen: Option
Beschreibung
-a
Enthält alle Dateien des ISO-9660-Dateisystems. Normalerweise werden Dateien mit den Zeichen ~ oder # nicht mit eingeschlossen, da dies in der Regel temporäre Dateien unter Linux sind.
-abstract datei
Definiert den abstrakten Dateinamen
-A anwendung
Gibt eine Zeichenkette an, die in den Header des Volumes geschrieben werden kann, um die Anwendung auf der CD näher zu bezeichnen
-J
Erzeugen eines Joliet-Dateisystems mit langen Dateinamen für Windows 95
-l
Lange Dateinamen für das ISO-9660-Dateisystem zulassen. Normalerweise kennt ISO-9660 nur Dateinamen mit der Konvention 8.3-Stellen.
-log-file protokoll
Umlenken aller Fehlermeldungen, Warnungen und Informationen in die angegebene Protokolldatei
-o imagename
Angabe des Namens für die zu erstellende Image-Datei
-print-size
Ausgabe der geschätzten Dateisystemgröße und Beenden des Programms
-R
Erzeugen eines Rock Ridge-Dateisystems für Unix/Linux
-r
Erzeugen eines Rock Ridge-Dateisystems mit Besitzer root und Gruppe root sowie der Rechtemaske r--r--r-- für normale Dateien und r-xr -xr-x für ausführbare Dateien und Verzeichnisse
-V cdname
Angabe eines Namens für die CD
-v
Ausführliche Ausgabe
-x pfad
Schließt das angegebene Verzeichnis aus dem ISO-Image aus. Dabei muss der vollständige Pfadname angegeben werden. Es können bis zu 1000 Verzeichnisse ausgeschlossen werden.
Tab. 7.1: Die Optionen des Befehls mkisofs
In diesem Beispiel wird der Inhalt des Verzeichnisses /cdrom (also der Inhalt der gemounteten CD-ROM) in das Imagefile image.isofs übertragen. Genauso ist es aber auch möglich, den Inhalt eines Verzeichnisses der Festplatte zu übertragen, zum Beispiel /usr oder /home/her: # mkisofs -l -L -J -v -o /cdimage/image.isofs /cdrom
291
magnum
CDs brennen
Die Optionen haben hier folgende Bedeutung:
쮿
-l erlaubt die Erweiterung der Länge von Dateinamen, die bei Standard-UnixCD-ROMs normalerweise auf acht Stellen vor und drei Stellen nach dem Punkt beschränkt ist. Microsoft Windows und Unix haben diese Standardeinstellung erweitert. Diese Option lässt bis zu 30 Zeichen lange Dateinamen zu.
쮿
-L erlaubt führende Punkte in den Dateinamen. Dies ist wichtig, wenn CDROMs von Unix-Programmen kopiert werden, da unter Unix/Linux Systemund Konfigurationsdateien häufig mit einem Punkt beginnen.
쮿
-J muss verwendet werden, wenn es sich um eine Microsoft Windows-CDROM handelt oder lange Dateinamen unter Microsoft Windows lesbar sein sollen.
쮿
-v erzeugt eine ausführliche Ausgabe, das bedeutet, Sie erhalten ständig Rückmeldungen vom System während der Ausführung des Befehls.
쮿
-o definiert die Ausgabedatei, das heißt das Imagefile, zum Beispiel /cdimage/ image.isofs. Ohne diese Angabe würde die Standardausgabe der Bildschirm sein. Das Imagefile wird später auf CD-R gebrannt.
Anschließend kann der Inhalt des Imagefiles getestet werden, indem dieses zum Beispiel auf das Verzeichnis /mnt gemountet wird: # mount -o loop /cdimage/image.isofs /mnt
Überprüfen Sie dann mit dem Dateimanager oder dem Befehl ls den Inhalt des verwendeten Verzeichnisses. Er sollte mit dem Inhalt der eingelegten CD-ROM oder des auf der Festplatte ausgewählten Verzeichnisses übereinstimmen. Unmounten Sie anschließend das Verzeichnis wieder, um es wieder freizugeben: # umount /mnt
Audiodateien aus Audio-CD-Tracks erzeugen Der Befehl cdparanoia wird zum Kopieren der Audiospuren einer CD in Audiodateien auf der Festplatte benutzt. Anschließend können die Audiodateien auf eine CD gebrannt werden. Der Befehl sucht standardmäßig nach einem Gerät mit der Bezeichnung /dev/cdrom. Die Audiodateien werden in dem Verzeichnis erstellt, in dem sich der Benutzer bei Aufruf des Befehls befindet, man sollte also zuvor das gewünschte Verzeichnis anlegen und in dieses wechseln. Die Tracks auf der Audio-CD sind durchnummeriert und werden in dieser Reihenfolge auch vom Befehl cdparanoia verwendet. Der Befehl kann für jeden Track eine eigene Audiodatei erzeugen, deren Name aus den Teilen Tracknummer, Trackname und standardmäßig der Dateinamenserweiterung .wav zusammengesetzt wird. Es können aber auch andere Audioformate als WAV erzeugt werden. Auf einigen Linux-Systemen steht ein weiteres Grabber-Programm mit dem Namen dagrab zur Verfügung.
292
Kapitel 7 · Multimedia
Die Syntax des Befehls lautet: # cdparanoia [-option(en)] bereich [datei]
Der Befehl kennt unter anderem folgende Optionen: Option
Beschreibung
-B oder --batch
Der Befehl zerlegt die Ausgabe in mehrere Dateien ausgehend von den Trackbegrenzungen. Die Ausgabedateinamen beginnen mit track#.
-Q oder --query
Das CD-ROM-Laufwerk durchsuchen und den Inhalt ausgeben, anschließend den Befehl beenden
-q oder --quiet
Keine Ausgabe anzeigen
-s oder --search-for-drive
Erzwingt eine vollständige Suche nach einem CD-ROM-Laufwerk, auch wenn der Link /dev/cdrom bereits vorhanden ist
-v oder --verbose
Ausführliche Ausgabe
Tab. 7.2: Die Optionen des Befehls mdir
In diesem Beispiel wird der Trackname zztop.wav vergeben und von der AudioCD werden die zu kopierenden Tracks Nummer 2, 3 und 4 gewählt, außerdem wird dafür eine Datei mit der Bezeichnung zztop.wav erzeugt. Mit dem Befehl # cdparanoia -B 2-4 zztop.wav cdparanoia III release ... ... Rippling from sector 18530 (track 2 [0:00.00]) t0 sector 73906 (track 4 [4:52.26]) outputting to track02.zztop.wav (== PROGRESS == [ ...
werden drei Audiodateien aus den Tracks Nummer 2, 3 und 4 einer Audio-CD erzeugt. Sie können entweder eine Trackfolge, zum Beispiel 2–4 (Track 2 bis 4) oder 5–9 (Track 5 bis 9) oder einzelne Tracks, zum Beispiel 2 (nur Track 2) oder 7 (nur Track 7) für die Option -B verwenden. Wenn Sie keinen Bereich angeben können, starten Sie den Befehl einfach mehrmals mit der jeweiligen Tracknummer. Wenn Sie die komplette CD rippen möchten, dann geben Sie keine Tracknummern an.
Eine Daten-CD erzeugen Der Befehl cdrecord wird für den Brenn- oder Kopiervorgang selbst verwendet. Er kann Imagefiles oder Mediadateien auf CD oder DVD brennen. Die Syntax des Befehls lautet: # cdrecord [-option(en)] dev=gerät [track-option(en)] track1 ... trackn
293
magnum
CDs brennen
Der Befehl kennt unter anderem folgende Optionen: Option
Beschreibung
-audio
Alle nachfolgenden Dateien sind Audioformate und sollen als Audiospuren geschrieben werden.
blank=typ
Eine wieder beschreibbare CD leeren und das Programm beenden bzw. vor dem Beschreiben leeren. Mögliche Typen sind: all
die gesamte CD leeren. Diese Option benötigt relativ viel Zeit.
fast
die gesamte CD so schnell wie möglich leeren (nur die notwendigsten Bereiche)
track
einen Track leeren
unreserve
die Reservierung eines Tracks aufheben
trtail
das Ende eines Tracks leeren
unclose
die letzte Sitzung nicht beenden die letzte Sitzung leeren
session -data
Alle nachfolgend angegebenen Dateien sind Image-Dateien und werden im CD-ROM-Format geschrieben.
dev=ziel
Zielgerät für den CD-Recorder einstellen. Mit der Option scanbus können die möglichen Zielgeräte beauskunftet werden.
-eject
CD nach Fertigstellung auswerfen
-format
Eine beschreibbare CD bzw. DVD formatieren
-force
Bei bestimmten Fehlern wird erzwungen, dass der Befehl fortfährt. Diese Option sollte mit Vorsicht verwendet werden.
fs=zahl
Den Ring-Buffer auf zahl setzen
gracetime=zahl
Die Wartezeit einstellen, bevor der Schreibvorgang gestartet wird
-multi
Lässt zu, dass mehrere Sitzungen auf einer CD erzeugt werden
-nofix
Fixiert die CD nach dem Schreiben der Tracks nicht. Das ist nützlich, wenn mehrere Sessions bzw. Tracks auf die CD geschrieben werden sollen.
-pad
Wenn es sich bei dem Track um einen Datentrack handelt, werden 15 Sektoren mit Nulldaten hinter diesem angefügt.
-reset
Geräte zurücksetzen
-scanbus
Geräte überprüfen
speed=zahl
Angabe der Schreibgeschwindigkeit der CD
-v
Ausführlicher Modus, um den Fortschritt des Vorgangs zu verfolgen
Tab. 7.3: Die Optionen des Befehls cdrecord
Im folgenden Beispiel wird das CD-Writer-Gerät überprüft: # cdrecord -scanbus
294
Kapitel 7 · Multimedia
Im nächsten Beispiel wird das Imagefile, das mit dem Befehl mkisofs erzeugt wurde, auf eine leere CD geschrieben. Wenn eine bereits beschriebene CD-RW verwendet wird, die noch geleert werden soll, verwenden Sie zuvor folgenden Befehl: # cdrecord -v blank=fast dev=0,0,0
Ersetzen Sie die Angabe dev=0,0,0 durch die Werte, die Ihnen der Befehl cdrecord scanbus ausgibt.
Wenn dieser Befehl unterbrochen wird, dann kann sich das Gerät aufhängen und der Rechner muss neu gebootet werden! Sie können auch versuchen, das Gerät mit folgendem Befehl neu zu initialisieren, was allerdings nicht immer funktioniert: # cdrecord -reset dev=0,0,0
Anschließend wird das Imagefile auf die CD mit dem Befehl geschrieben: # cdrecord -v speed=16 fs=4m dev=0,0,0 -data /cdimage/image.isofs
Die Option speed gibt die Schreibgeschwindigkeit (hier vierfach) an, fs enthält den Pufferwert (hier 4 Mbyte), dev ist die notwendige Gerätebezeichnung und -data gibt an, dass »normale« Dateien/Verzeichnisse kopiert werden, und zwar aus dem Imagefile /cdimage/image.isofs. Das Programm gibt standardmäßig ständig aus, wie weit es mit dem Schreiben ist und wie weit der Puffer noch gefüllt ist. Ganz am Ende wird der kleinste Wert min fill ausgegeben. Wenn der Wert min fill kleiner als 20 % ist, ist der Puffer zu klein. Dann kann das Schreiben der CD-ROM kritisch werden und beim nächsten Mal sollte der Pufferwert unbedingt erhöht werden, zum Beispiel auf den Wert fs=8m. Das ist aber kein Problem mehr bei Brennern, die einen Buffer-Underrun-Schutz haben.
Eine Audio-CD erzeugen Zur Erstellung von Audio-CDs gehen Sie ähnlich vor. Hier verwenden Sie den Befehl wie folgt: # cdrecord -v speed=16 fs=4m dev=0,0,0 -audio -pad /cdimage/track*zztop.wav
Es werden die Optionen -audio und Audiodateien kopiert werden.
-pad
anstelle der Option
-data
verwendet, weil
Die Option -pad sorgt dafür, dass zwischen den einzelnen Tracks kleine Pausen entstehen. Wenn Sie mehrmals hintereinander Tracks auf eine Audio-CD brennen möchten, dann müssen Sie zusätzlich die Optionen -nofix und -multi aktivieren. Beim letzten Track müssen Sie die Option -fix verwenden, damit die AudioCD fixiert wird, ansonsten können CD-Player sie nicht abspielen.
295
magnum
CDs brennen
Eine Mischform aus Audio- und Daten-CD erzeugen Sie können mit diesen zusätzlichen Optionen eine Mischform von Audio- und Datendateien erzeugen, dabei müssen aber immer die Daten vor den Audiodateien auf die CD gebrannt werden. Verwenden Sie zuerst den Befehl: # cdrecord -v speed=4 fs=4m -nofix dev=0,0,0 -multi -data /cdimage/image.isofs
Die Option -nofix gibt die Anweisung, dass das Beschreiben der CD nicht mit diesem einen Befehl abgeschlossen werden soll, das heißt, die CD bleibt zum Beschreiben »offen«. Die Option -multi bedeutet, dass die CD auf mehrere Spuren ausgelegt werden soll. Anschließend können Sie nun Ihre Audiodateien auf die CD kopieren. Verwenden Sie dazu den Befehl: # cdrecord -v speed=4 fs=4m -nofix dev=0,0,0 -multi -audio -pad /cdimage/ track*zztop.wav
Sie können nun weitere Audiodateien hinzufügen. Die letzten kopieren Sie ohne die Option -nofix mit dem Befehl: # cdrecord -v speed=4 fs=4m dev=0,0,0 -multi -audio -pad /cdimage/track*iron.wav
Sollten Sie beim letzten Brennvorgang versehentlich die Option -nofix verwendet haben, dann schließen Sie die CD einfach mit dem Befehl: # cdrecord -fix dev=0,0,0
7.3.3
Das Programm K3b
Das Programm K3B ist ein Frontend für die Linux-Befehle zum Brennen von CDs, also in erster Linie für den Befehl cdrecord. Es kann Daten-CDs brennen, die entweder mit der Maus aus einzelnen Verzeichnissen oder Dateien in ein Projektverzeichnis gezogen werden oder eine vollständige CD auf eine neue CD (»on-the-fly«) brennen. Auch Audio-CDs können entweder »on-the-fly« (wenn zwei Geräte vorhanden sind) oder direkt von MP3-CDs, ohne dass ein De- und Encodieren notwendig wird, im WAV-Format kopiert werden. Dabei werden die meisten Optionen des Befehls mkisofs unterstützt, wie zum Beispiel Burn-Proof-Support und DVD-Ripping. Beim Verfahren »On-the-fly« wird eine Datei von der Original-CD im CD-Laufwerk direkt auf den Rohling im CD-Brenner geschrieben, ohne dass irgendwelche Daten auf der Festplatte zwischengespeichert werden. Dieses Tool steht unter der von Fedora Core Linux 4.0 und Debian GNU/Linux standardmäßig installierten KDE nicht zur Verfügung. Für Fedora Linux können Sie das Paket unter http://k3b.plainblack.com/download downloaden. Bei Debian Linux ist das Paket unter http://packages.debian.org/stable/otherosfs/ k3b erhältlich. Um mit K3B eine CD zu brennen, muss im ersten Schritt ein Projekt angelegt werden.
296
Kapitel 7 · Multimedia
Bild 7.36: Mit K3b CDs brennen
Mit DATEI - NEUES PROJEKT können folgende Projekte angelegt werden:
Bild 7.37: Neues Projekt anlegen
Ein angelegtes Projekt kann nur temporär oder dauerhaft verwendet werden. Wenn Sie es aufbewahren möchten, speichern Sie es über DATEI - SPEICHERN. Beim Beenden des Programms werden Sie aber auf jeden Fall gefragt, ob Sie das Projekt speichern oder verwerfen möchten.
Eine Daten-CD erzeugen Wenn Sie zwei CD-Laufwerke besitzen, zum Beispiel ein CD-Laufwerk und einen CD-Brenner, können Sie eine Daten-CD »on-the-fly« kopieren, ansonsten wird eine Image-Datei der CD auf die Festplatte zwischenkopiert. Das Menü EXTRAS CD bietet folgende Kopiermöglichkeiten an:
Bild 7.38: CD kopieren
297
CDs brennen
magnum
Wenn Sie CD KOPIEREN wählen, haben Sie weitere OPTIONEN. Im Fall von zwei CD-Geräten (was in unserem Beispiel nicht zutrifft, daher ist die Option deaktiviert), könnten Sie »on-the-fly« brennen. Sie können aber auch den Brennvorgang nur simulieren, nur eine Abbilddatei (Image-Datei) erstellen lassen und die Abbilddatei, die beim Brennvorgang mit nur einem Gerät erzeugt wird, entweder aufbewahren oder löschen. Ein ISO-Image oder Datei-Image ist ein Abbild einer CD, das genau dem CDInhalt entspricht. Wenn der Befehl cdrecord eine CD brennt, verwendet er immer ein solches Image, es sei denn, es stehen zwei Geräte für die »On-the-fly«Methode zur Verfügung. Es ist auch möglich, die Anzahl der Kopien zu wählen, die erzeugt werden sollen.
Bild 7.39: CD-Kopie erstellen
Das temporäre Verzeichnis sollte sich auf einer Partition befinden, auf der genügend Festplattenplatz zur Verfügung steht.
Wenn Sie für die Methode »On-the-fly« zwei Laufwerke besitzen, die beide am gleichen IDE-Kabel angeschlossen sind, kann es besser sein, trotzdem die Methode der Image-Datei auf der Festplatte zu wählen, denn bei »On-the-fly« laufen Sie immer Gefahr eines Buffer-Underruns. Das bedeutet, der Datenfluss vom Lese- zum Schreibgerät kann plötzlich abbrechen, wodurch der Brennvorgang misslingt. Viele CD-Brenner haben deshalb einen Extrapuffer eingerichtet, um dieses Problem zu meiden. Man spricht in diesem Fall zum Beispiel von BurnProof- oder JustLink-Support.
298
Kapitel 7 · Multimedia
Im Registerblatt FORTGESCHRITTEN gibt es einige Expertenoptionen, wie zum Beispiel TAO (Track-at-once). Diesen Modus sollte man bei Audio-CDs grundsätzlich anwenden, denn die Tracks werden dabei einzeln geschrieben und dazwischen wird eine Zwei-Sekunden-Pause eingebaut. Bei DAO (Disc-at-once) dagegen wird die ganze CD ohne Pausen beschrieben, das wäre zum Beispiel für Live-Konzertaufnahmen und Ähnliches angebracht. Eine exakte Kopie der CD erhält man auf jeden Fall mit der DAO-Methode. Das Klonen einer CD bietet ein ähnliches Fenster und erstellt ebenfalls eine CDKopie:
Bild 7.40: CD klonen
Eine weitere Option des Menüs EXTRAS - CD ist das Löschen einer CD-RW:
Bild 7.41: CD-RW löschen
299
magnum
CDs brennen
Für das folgende Brennbeispiel wurde die Option CD anschließend CD-KOPIEREN gestartet:
KOPIEREN
gewählt und
Bild 7.42: Kopiervorgang starten
Im ersten Schritt wird die Image-Datei erzeugt, dann folgt der eigentliche Brennvorgang. Dazwischen werden Sie aufgefordert, die Daten-CD gegen einen Rohling auszutauschen:
Bild 7.43: Rohling einlegen
Jetzt folgt der eigentliche Brennvorgang, dessen Fortschritt ständig angezeigt wird:
300
Kapitel 7 · Multimedia
Bild 7.44: Brennvorgang von K3B
Nach erfolgreichem Brennen erhalten Sie eine entsprechende Meldung und die CD wird ausgeworfen:
Bild 7.45: Erfolgreicher Brennvorgang
301
CDs brennen
magnum
Alternativ ist es möglich, einzelne Verzeichnisse und Dateien per Drag&Drop in den unteren Fensterbereich in ein neu angelegtes Projekt zu ziehen und anschließend auf das Menü PROJEKT - BRENNEN oder die entsprechende Schaltfläche zu klicken, um den Brennvorgang einzuleiten:
Bild 7.46: Einzelne Verzeichnisse und Dateien brennen
Die weitere Vorgehensweise entspricht dem Brennvorgang einer kompletten CD.
Eine Audio-CD erzeugen Eine Audio-CD kann ebenfalls entweder vollständig oder es können einzelne Titel kopiert werden. Wenn Sie zwei CD-Laufwerke besitzen, zum Beispiel ein CDLaufwerk und einen CD-Brenner, können Sie auch eine Audio-CD »on-the-fly« kopieren, ansonsten wird wieder eine Image-Datei der CD auf die Festplatte zwischenkopiert. Starten Sie den direkten Brennvorgang wieder über das Menü EXTRAS - CD - CD BRENNEN:
Bild 7.47: Komplette Audio-CD brennen
302
Kapitel 7 · Multimedia
Es wird ein Titel nach dem anderen eingelesen:
Bild 7.48: Titel einer Audio-CD einlesen
Sie können auch einzelne Titel, die Sie bereits abgespeichert haben, in einem Audioprojekt für eine neue CD zusammenstellen und dann den Menüeintrag PROJEKT - BRENNEN wählen oder auf die entsprechende Schaltfläche klicken, um den Brennvorgang einzuleiten:
Bild 7.49: Einzelne Titel zur Audio-CD zusammenstellen
303
CDs brennen
magnum
Es ist auch möglich, mit K3B die einzelnen Audiotracks anzeigen zu lassen. Dazu klicken Sie im rechten Fensterbereich ganz oben auf den Laufwerksnamen Ihres CD-Geräts, in unserem Beispiel Toshiba - BDV-ROM SD-R5112:
Bild 7.50: Die Tracks einer Audio-CD mit K3B anzeigen
Das Programm versucht aus der CDDB-Datenbank die Trackinformationen zu erhalten. Wenn Sie diese nicht verwenden oder im Moment nicht im Internet angemeldet sind, können Sie die einzelnen Tracks selbst benennen. Dazu klicken Sie auf das Symbol CDDB-INFO bearbeiten. Alternativ aktivieren Sie über das Menü EINSTELLUNGEN - K3B EINRICHTEN in der Rubrik CDDB im Registerblatt ENTFERNT die Option ENTFERNTE CDDB-ANFRAGEN AKTIVIEREN und klicken dann auf OK.
Bild 7.51: CDDB-Anfragen aktivieren
Anschließend klicken Sie auf das Symbol CDDB ABFRAGEN und die Liste wird aktualisiert, wenn Ihre CD in der Datenbank erfasst ist. Sollte der CDDB-Eintrag nicht ganz eindeutig sein, müssen Sie noch eine Auswahl treffen:
304
Kapitel 7 · Multimedia
Bild 7.52: Auswahl aus CDDB treffen
Dann wird die aktualisierte Liste endgültig angezeigt:
Bild 7.53: Aktualisierte Trackliste
Markieren Sie dann die Tracks, die Sie rippen möchten, indem Sie die rechte Maustaste verwenden oder die Kontrollkästchen an- bzw. abhaken. Klicken Sie dann auf das Zahnradsymbol AUSLESE STARTEN. Nun sollten Sie noch das Zielverzeichnis für die gerippten Tracks angeben und anschließend auf AUSLESE STARTEN klicken:
Bild 7.54: Die gewünschten Tracks rippen
305
magnum
CDs brennen
Die Audiotitel werden dann ins angegebene Verzeichnis ausgelesen und können anschließend für ein Audioprojekt, in dem Sie einzelne Tracks zusammenstellen, wie bereits beschrieben verwendet werden.
Bild 7.55: Digital-Audio auslesen
Wenn Ihnen K3b nicht zusagt, gibt es eine gute grafische Alternative, das Programm X-CD-Roast. Sie können es unter http://www.xcdroast.org downloaden.
7.3.4
Encoder-Programme der KDE
Das Programm grip Das grafische Programm GRIP ist ein einfaches Tool, mit dem Sie CDs rippen und im MP3- oder Ogg-Vorbis-Format encoden können. Legen Sie eine Audio-CD ein und rufen Sie GRIP auf. Wenn die CD in der CDDB enthalten ist, werden die einzelnen Tracks angezeigt. Die Anzeige lässt sich über die Schaltfläche SCHALTE CDEDITOR AN/AUS erweitern: Bei SUSE Linux 10.0 müssen Sie das Tool nachinstallieren (vergleiche Kapitel 5). Dieses Tool steht unter der von Fedora Core Linux 4.0 standardmäßig installierten KDE nicht zur Verfügung. Sie können es aber unter http://nostatic.org/grip/grip-download.shtml downloaden. Wechseln Sie dann auf das Registerblatt KONFIGURATION und überprüfen Sie dort die Einstellungen. In der Regel sind die Standardeinstellungen ausreichend. Wechseln Sie im Untermenü von KONFIGURATION in das Registerblatt RIP und überprüfen Sie, welchen Ripper Sie verwenden möchten:
306
Kapitel 7 · Multimedia
Bild 7.56: Anzeige der Tracks einer Audio-CD
Bild 7.57: Konfiguration des Rippers
307
magnum
CDs brennen
Hinter dem Rip-Dateiformat verbergen sich der Speicherort und der Name der gerippten Dateien. Die standardmäßigen Einstellungen haben folgende Bedeutung: %A
Interpret der CD
%a
Interpret des Stücks
%d
Name der CD
%i
Index der CD aus der CDDB
%n
Name des Stücks
%t
Positionsnummer des Stücks
%y
Erscheinungsjahr der CD
Wechseln Sie dann im Konfigurationsmenü zum Registerblatt KODIERE und überprüfen Sie dort ebenfalls die Einstellungen, wie zum Beispiel das Kodierprogramm oder das Dateiformat:
Bild 7.58: Kodiereinstellungen
Im Registerblatt DISCDB des Menüs KONFIGURATION ist die CDDB eingestellt, mit deren Hilfe der Interpret und die Titel der eingelegten Audio-CD gesucht werden:
308
Kapitel 7 · Multimedia
Bild 7.59: Einstellung der CDDB
Wechseln Sie dann im Hauptmenü auf die Registerkarte TRACKS zurück und markieren Sie die Tracks, die gerippt werden sollen. Klicken Sie dazu auf die Spaltenüberschrift RIP, um alle zu markieren, und anschließend auf die Haken der Tracks, die nicht gerippt werden sollen:
Bild 7.60: Tracks zum Rippen auswählen
309
CDs brennen
magnum
Wechseln Sie dann in das Registerblatt RIP und klicken Sie entweder auf RIPPE UND KODIERE, um MP3- oder Ogg-Vorbis-Dateien zu erzeugen, oder auf NUR RIPPEN, um nur die einzelnen Tracks als WAV-Dateien abzuspeichern, die dann zum Beispiel mit K3B gebrannt werden können.
Bild 7.61: Rippen und/oder Kodieren mit GRIP
Sollte Ihnen GRIP nicht zusagen, gibt es noch weitere Möglichkeiten zum Rippen und Encoden unter Linux. Dieselbe Funktionalität hat zum Beispiel das Programm RIPPERX, das unter http://sourceforge.net/projects/ripperx heruntergeladen werden kann. Weitere Encoder der Befehlszeile sind lame (»Lame Aint an MP3 Encoder«, erhältlich unter http://lame.sourceforge.net/download/download.html), und notlame, der auf lame basiert und unter http://users.rsise.anu.edu.au/~conrad/ not_lame zur Verfügung steht. Das Tool wurde entwickelt, weil lame zunächst durch die Verwendung von Codeteilen der ISO-Implementierung nicht mit Linux-Distributionen ausgeliefert werden durfte, allerdings steht inzwischen auch lame unter LGPL. Eine weitere Befehlszeilenalternative ist oggenc, das vom Ogg-Vorbis-Projekt entwickelt wurde und von dessen Website http://www.vorbis.com bezogen werden kann.
Das Programm KAudioCreator Das grafische Programm KAUDIOCREATOR ist ein weiteres einfaches Tool, mit dem Sie CDs rippen und im MP3- oder Ogg-Vorbis-Format encoden können. Legen Sie eine Audio-CD ein und starten Sie das Programm über das KDE-Menü MULTIMEDIA - CD/DVD-WERKZEUGE (KAUDIOCREATOR). Wenn die CD in der CDDB enthalten ist, werden die einzelnen Tracks angezeigt. Durch Anklicken wählen Sie die zu rippenden Titel aus. Klicken Sie dann auf die Schaltfläche AUSWAHL zum Auslesen und wählen Sie das gewünschte Format.
310
Kapitel 7 · Multimedia
Bild 7.62: Titel im KAUDIOCREATOR wählen
Sie erhalten eine Meldung, dass Sie in der Registerkarte AUFTRÄGE das Auslesen verfolgen können. Klicken Sie auf die Registerkarte AUFTRÄGE:
Bild 7.63: Das Auslesen verfolgen
311
CDs brennen
magnum
Im Menü EINSTELLUNGEN - KAUDIOCREATOR EINRICHTEN können Sie verschiedene Einstellungen vornehmen, zum Beispiel zur CDDB-Quelle oder den Pfad und Namen der ausgelesenen Dateien festlegen:
Bild 7.64: Einstellungen des KAUDIOCREATORS
312
magnum
Teil 2 Systemverwaltung
8 Benutzer und Gruppen verwalten »Der Anwender steht immer im Mittelpunkt – und da steht er jedem im Weg.« Verfasser unbekannt (Quelle: Entwickler Weisheit) Auch wenn Sie Linux nur privat anwenden, sollten Sie neben dem Systemadministrator bzw. Superuser root auch mindestens einen einfachen Benutzer angelegt haben. Melden Sie sich mit diesem Benutzernamen an, wenn Sie unter Linux arbeiten möchten, und verwenden Sie den Benutzer root wirklich nur für Systemtätigkeiten. Damit vermeiden Sie, dass Sie versehentlich das System verändern, zum Beispiel ungewollt wichtige Dateien löschen. Linux unterscheidet die verschiedenen Benutzer und kann damit bei Zugriffen auf Dateien u. Ä. sicherstellen, ob der Benutzer die entsprechenden Rechte besitzt. In diesem Kapitel werden Gruppen und Benutzer angelegt und wichtige Befehle im Bereich der Benutzerverwaltung vorgestellt, wie zum Beispiel sudo und su.
8.1 Gruppen verwalten Bevor ein Systemadministrator neue Benutzer anlegt, sollte er sich Gedanken über die Zusammenfassung der Benutzer in Gruppen machen, zum Beispiel alle Mitarbeiter einer Abteilung. Um die Systemverwaltung zu vereinfachen, werden jeweils aus mehreren Benutzern Gruppen gebildet. Dabei ist zu beachten, dass die Benutzer einer Gruppe zumeist gleiche Tätigkeiten ausführen bzw. zur selben Abteilung gehören und daher Zugriff auf dieselben Dateien und Verzeichnisse benötigen. Dies lässt sich dann über die Gruppenzugehörigkeit steuern. Unter Linux muss jeder Benutzer in mindestens einer Gruppe Mitglied sein. Beim Anlegen eines Benutzers wird dieser automatisch der so genannten primären Gruppe zugeordnet. Darüber hinaus kann er standardmäßig in beliebig vielen weiteren Gruppen, den so genannten Sekundärgruppen, Mitglied sein. Eine Gruppe besteht aus einem Gruppennamen und einer numerischen Gruppenidentifikationsnummer, der so genannten GID. Bei der Zugriffskontrolle wird die numerische GID überprüft, die Gruppennamen selbst werden im System immer in GIDs aufgelöst. Die Vergabe der Gruppennummern unterliegt einer Konvention, das heißt, GIDs mit Werten kleiner als 100 sind für Systemgruppen reserviert. Manche Linux-Distributionen reservieren für diesen Fall eventuell auch alle Gruppennummern kleiner als 500 oder 1000. Sie sollten daher Ihre Gruppen mit Nummern größer 1000 anlegen, wenn Sie zu anderen Linux-Systemen kompatibel sein möchten. Einige Linux-Distributionen, wie zum Beispiel Red Hat und Fedora Core Linux, legen automatisch beim Erstellen eines neuen Benutzers eine Gruppe an, deren Gruppennummer der Benutzernummer (UID) und deren Gruppenname dem Benutzernamen entspricht, und weisen diese Gruppe dem Benutzer als primäre Gruppe zu. Auch Debian verhält sich standardmäßig so. Diese Einstellung ist aber steuerbar durch die Variable USERGROUPS in der Datei /etc/adduser.conf.
315
magnum
Gruppen verwalten
Der zur Verfügung stehende Zahlenraum zum Anlegen von Gruppennummern liegt im Zahlenbereich zwischen 0 und 65536. Ab Kernel-Version 2.6 können aber sogar bis zu 4 Milliarden GIDs angelegt werden. Die folgenden Befehle, um Benutzer und Gruppen anzulegen, zu löschen und zu ändern, stehen in fast allen Linux- und Unix-Derivaten zur Verfügung. Debian GNU/Linux hat zusätzlich noch eigene Befehle für denselben Zweck, die so genannte adduser-Suite.
8.1.1
Gruppen anlegen mit dem Befehl groupadd
Eine neue Gruppe wird vom Benutzer root mit dem Befehl Syntax des Befehls lautet:
groupadd
angelegt. Die
# groupadd [-option(en)]
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-f
Wenn die Gruppe bereits besteht, wird standardmäßig eine Fehlermeldung ausgegeben. Diese Option unterdrückt die Fehlermeldung. Wenn die Option -g mit einer bereits vergebenen Gruppen-ID (GID) verwendet wird, wird durch -f die Option -g ignoriert und die nächste freie GID vergeben.
-g gid [-o] Weist der Gruppe die angegebene GID zu. Ist diese bereits vergeben, kann durch die zusätzliche Angabe der Option -o eine doppelte Zuweisung erzwungen werden. -r
Mit dieser Option wird eine Systemgruppe angelegt, die eine Gruppennummer kleiner als 500 erhält. Es wird die nächste freie Gruppennummer unter 500 vergeben, wenn nicht gleichzeitig die Option -g verwendet wird.
Tab. 8.1: Die Optionen des Befehls groupadd
In diesem Beispiel wird eine Gruppe einkauf angelegt: # groupadd einkauf
Dabei wurde der neuen Gruppe automatisch die nächste freie GID zugewiesen. Es ist aber auch möglich, diese manuell zuzuweisen: # groupadd –g 555 verkauf
Der Gruppenname und die GID müssen normalerweise eindeutig sein, trotzdem gibt es die Möglichkeit, eine mehrfache Vergabe der GID mit der Option –o zu erzwingen: # groupadd –g 555 -o vertrieb
Für Linux handelt es sich hierbei aber nur um eine einzige Gruppe, da das Betriebssystem intern nur die GID und nicht den Gruppennamen verwendet. Die Gruppen verkauf und vertrieb sind also nur Aliase zueinander. Da solche Konstellationen aber in der Regel schwer zu durchschauen sind, sollten sie nicht verwendet werden.
316
Kapitel 8 · Benutzer und Gruppen verwalten
8.1.2
Gruppen ändern mit dem Befehl groupmod
Mit dem Befehl groupmod ändern Sie eine bereits vorhandene Gruppe. Die Syntax des Befehls lautet: # groupmod [-option(en)]
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-g gid [-o]
Weist der Gruppe die angegebene GID zu. Ist diese bereits vergeben, kann durch die zusätzliche Angabe der Option -o eine doppelte Zuweisung erzwungen werden.
-n name
Mit dieser Option wird der Name einer Gruppe verändert.
Tab. 8.2: Die Optionen des Befehls groupmod
Im folgenden Beispiel wird die Gruppe einkauf in die Gruppe beschaff umbenannt: # groupmod –n beschaff einkauf
Die GID einer bereits bestehenden Gruppe lässt sich mit der Option –g verändern: # groupmod –g 666 beschaff
Dabei sollten Sie aber unbedingt beachten, dass Dateien und Verzeichnisse, denen diese Gruppe bereits zugeordnet wurde, nicht die neue GID erhalten. Der Befehl ls –l zeigt in solchen Fällen nur die GID an, weil kein Gruppenname mehr vorhanden ist. Solche Dateien können mit dem Befehl find und der Option -nogroup gesucht und mit chgrp der neuen GID zugewiesen werden. Auch bei diesem Befehl lässt sich die doppelte Vergabe einer GID erzwingen, zum Beispiel: # groupmod –g 666 -o buha
8.1.3
Gruppen löschen mit dem Befehl groupdel
Mit dem Befehl lautet:
groupdel
löschen Sie eine Gruppe wieder. Die Syntax des Befehls
# groupdel gruppe
In diesem Beispiel wird die Gruppe buha gelöscht: # groupdel buha
Die Gruppe wird unter Linux nicht gelöscht, wenn es sich um die primäre Gruppe eines Benutzers handelt. Das ist die Gruppe, die ihm als erste Gruppe zugewiesen wurde (vergleiche Abschnitt 8.2.2): # groupdel einkauf groupdel: cannot remove user's primary group.
317
magnum
Gruppen verwalten
8.1.4
Die Datei /etc/group
Die Informationen zu den im System vorhandenen Gruppen befinden sich in der Datei /etc/group: # cat /etc/group root:x:0: bin:x:1:bin,daemon daemon:x:2: sys:x:3: tty:x:5: disk:x:6: lp:x:7: ...
Die Datei enthält pro Zeile den Eintrag für eine Gruppe. Sie besteht aus vier durch Doppelpunkte getrennten Feldern mit folgendem Inhalt:
쮿
Das erste Feld enthält den Gruppennamen, der maximal acht Zeichen lang sein kann.
쮿
Im zweiten Feld steht das (verschlüsselte) Gruppenpasswort, wenn es keine Datei /etc/gshadow gibt (vergleiche nächster Abschnitt). Dieses Feld wird nur von wenigen Programmen ausgewertet, ist aber seit der Entstehung von Unix vorhanden. Das Gruppenpasswort wird zum Beispiel vom Befehl newgrp (vergleiche Kapitel 8) verwendet, der temporär die primäre Gruppe eines Benutzers ändert.
Bei vielen Linux- und Unix-Systemen gibt es standardmäßig keinen Befehl, um das verschlüsselte Gruppenpasswort zu füllen. In diesem Fall müssen Sie bei Bedarf erst einem Benutzer das gewünschte Passwort zuweisen, aus der Datei /etc/shadow (vergleiche nächster Abschnitt) das verschlüsselte Passwort kopieren und in das Gruppenpasswortfeld in der Datei /etc/group einfügen. Bei SUSE Linux können Sie das Gruppenpasswort mit Hilfe des grafischen Tools YaST eingeben. Bei Debian können Sie das Gruppenpasswort mit dem Befehl gpasswd -g erzeugen.
318
쮿
Das dritte Feld enthält die GID der Gruppe. Sie sollte eindeutig sein. Die Ziffern 0 bis 99 oder 0 bis 499 (je nach Linux- oder Unix-System) sind Systemgruppen vorbehalten. Weitere angelegte Benutzergruppen können standardmäßig von 100 bis 60.000 reichen.
쮿
Das letzte Feld enthält eine Liste von Benutzernamen, für die diese Gruppe die sekundäre Gruppe ist.
Kapitel 8 · Benutzer und Gruppen verwalten
8.1.5
Die Datei /etc/gshadow
In der Datei /etc/gshadow werden die verschlüsselten Passwörter und die Angaben zum Passwortablauf gespeichert: # cat /etc/gshadow at:*:root: audio:*:root:hugo1,her bin:*:root: cdrom:*:root: console:*:root: daemon:*:root: dba:*:root: ...
Die Datei enthält pro Zeile den Eintrag für eine Gruppe. Sie besteht aus drei durch Doppelpunkte getrennten Feldern mit folgendem Inhalt:
쮿
Das erste Feld enthält den Gruppennamen.
쮿
Das zweite Feld enthält ein verschlüsseltes Passwort oder das Zeichen *, wenn kein Passwort für eine Gruppe vergeben wurde: –
Das Ausrufezeichen (!) steht für »new group« und bedeutet, dass noch kein Gruppenpasswort vergeben wurde, wodurch Nichtmitglieder auch nicht in diese Gruppe wechseln können.
–
Kein Eintrag steht für »no password« und bedeutet, das Passwort wurde entfernt, wodurch Nichtmitglieder auch nicht in diese Gruppe wechseln können.
–
Ein Ausrufezeichen vor einem verschlüsselten Passwort bedeutet »locked group«, das Passwort wurde vorübergehend gesperrt, wodurch Nichtmitglieder im Moment nicht in diese Gruppe wechseln können.
쮿
Das dritte Feld enthält den Gruppenadministrator, der Gruppenmitglieder und das Gruppenpasswort verwalten kann.
쮿
Das vierte Feld enthält eine Liste von Benutzernamen, für die diese Gruppe die sekundäre Gruppe ist.
8.1.6
Weitere Befehle der Gruppenverwaltung
Die folgenden Befehle können im Bereich der Gruppenverwaltung verwendet werden.
Der Befehl groups Mit dem Befehl groups können Sie die Gruppen anzeigen lassen, in denen ein Benutzer Mitglied ist. Die Syntax des Befehls lautet: # groups [benutzer]
In diesem Beispiel werden die Gruppen der Benutzer her abgefragt: # groups her her : users uucp dialout audio video einkauf
319
magnum
Gruppen verwalten
Der Befehl grpck Dieser Befehl überprüft die Datei /etc/group auf Inkonsistenzen. Diese können zum Beispiel durch manuelles Editieren der Datei entstehen. Die Syntax des Befehls lautet: # grpck [-option]
Der Befehl überprüft folgende Punkte:
쮿
eine korrekte Anzahl von Feldern
쮿
eine eindeutige Vergabe von Gruppennamen
쮿
eine gültige Liste von Mitgliedern
Der Befehl kennt nur eine Option: Option
Beschreibung
-r
Die Datei /etc/group wird nur überprüft (read-only).
Tab. 8.3: Die Optionen des Befehls grpck
In diesem Beispiel wird bei der Überprüfung ein Fehler gefunden: # grpck shadow group projekt-ag1: no user fbern delete member `fbern'? n grpck: no changes
Diese Fehlermeldung ist relativ harmlos, da sie besagt, dass als Gruppenmitglied ein User fbern eingetragen ist, der in der Datei /etc/passwd nicht existiert. In diesem Fall wurde der Gruppeneintrag nicht gelöscht.
Der Befehl newgrp Mit diesem Befehl kann ein Benutzer seine aktuelle Gruppen-ID (GID) während einer Sitzung wechseln. Die Syntax des Befehls lautet: # newgrp [-] gruppe
Wenn das optionale Flag - verwendet wird, wird die Umgebung des Benutzers neu initialisiert, als ob er sich neu anmelden würde. Wird das Flag nicht verwendet, bleibt die aktuelle Umgebung einschließlich des aktuellen Arbeitsverzeichnisses unverändert. Der Befehl verlangt vom Benutzer ein Passwort, wenn er keines hat, aber der Gruppe eines zugewiesen wurde, oder wenn er kein Mitglied der Gruppe ist und die Gruppe ein zugewiesenes Passwort hat. Wenn es kein Gruppenpasswort gibt und der Benutzer kein Mitglied der Gruppe ist, wird ihm der Wechsel in die angegebene Gruppe verwehrt. In diesem Beispiel wechselt die Benutzerin her von ihrer Standardgruppe users in die Gruppe einkauf. Legt sie nun eine neue Datei an, erhält die Gruppe einkauf Rechte an der Datei anstelle ihrer primären Gruppe users: $ groups einkauf users uucp dialout audio video $ newgrp einkauf
320
Kapitel 8 · Benutzer und Gruppen verwalten
$ touch dat-neu $ ls -l dat-neu -rw-r--r-- 1 her einkauf 0 2004-05-08 17:49 dat-neu
Der Befehl sg Dieser Befehl funktioniert ähnlich wie der Befehl newgrp, aber er nimmt zusätzlich einen Befehl entgegen und wirkt nur für diesen einen Befehl. Ein Befehl, der aus mehreren Komponenten besteht, muss in Anführungszeichen eingegeben werden. Die Syntax des Befehls lautet: # sg [-] [gruppe befehl]
In einigen Linux-Systemen ist der Befehl Befehl newgrp.
sg
nur ein symbolischer Link auf den
Im folgenden Beispiel ist der aufrufende Benutzer kein Mitglied der Gruppe einkauf, aber er kennt das Gruppenpasswort und kann aus diesem Grund die Datei hinweis.txt lesen: $ groups buha users uucp dialout audio video $ ls -l /projekt/einkauf/hinweis.txt -rw-r--r-- 1 her einkauf 0 2004-05-08 19:49 hinweis.txt $ sg einkauf "more /projekt/einkauf/hinweis.txt" Kennwort: Diese Datei enthaelt Hinweise zum ...
Der Befehl gpasswd Mit diesem Befehl kann das Gruppenpasswort vergeben oder ein Administrator für die Gruppenselbstverwaltung angelegt werden. Die Syntax des Befehls lautet: # gpasswd [-option(en)] group
Sobald der Gruppenadministrator von root mit dem Befehl gpasswd wurde, kann er mit demselben Befehl gpasswd die Gruppe und damit und /etc/group bearbeiten.
-A angelegt /etc/gshadow
Der Befehl kennt folgende Optionen: Option
Beschreibung
-r
Die Datei /etc/group wird nur überprüft (read-only).
-A admin
Anlegen des Gruppenadministrators (kann nur von root verwendet werden)
-M user1,user2,…
Anlegen der Gruppenmitglieder (kann nur von root verwendet werden)
-a user
Hinzufügen des Benutzers user zur Gruppe
-r
Löschen des Gruppenpassworts, dadurch ist es für Nichtmitglieder der Gruppe nicht mehr möglich, mit Hilfe des Befehls newgrp in die Gruppe zu wechseln.
Tab. 8.4: Die Optionen des Befehls gpasswd
321
Benutzer verwalten
magnum
Bestimmte Linux-Distributionen verwenden die Datei /etc/gshadow nicht. Diese Distributionen kennen auch nur die Option -r für den Befehl gpasswd. Im folgenden Beispiel wird der Gruppenadministrator doo für die Gruppe entwicklung angelegt: # gpasswd -A doo entwicklung
Auf folgende Weise kann der Gruppenadministrator doo der Gruppe entwicklung einen Benutzer hinzufügen: # su - doo doo@linux3:~ > gpasswd -a per entwicklung Adding user per to group entwicklung
Der entsprechende Eintrag zur Gruppe in die Datei /etc/gshadow sieht wie folgt aus: # fgrep entwicklung /etc/gshadow entwicklung::doo:per
Dasselbe können Sie unter Debian GNU/Linux mit dem Befehl adduser benutzer gruppe ausführen.
8.2 Benutzer verwalten Jeder Benutzer unter Linux besitzt einen Anmeldenamen und eine dazugehörige numerische Benutzeridentifikationsnummer, die so genannte UID. Die UIDs werden im Zahlenbereich zwischen 0 und 65536 angelegt, ab Kernel-Version 2.6 sind aber bis zu 4 Milliarden UIDs möglich. Linux verwendet für die Zugriffskontrolle nur die UIDs. Bei der Ausgabe von Befehlen wird die UID meist wieder durch den Benutzernamen ersetzt, damit die Benutzer die Ausgabe einfacher interpretieren können. Neben den Benutzern, die sich am System anmelden können, gibt es eine Anzahl von Systemkonten. Mit diesen können bestimmte Programme gestartet werden oder sie sind aus Sicherheitsgründen die Besitzer von speziellen Dateien. Die UID 0 ist bei allen UNIX- und Linux-Systemen dem Superuser bzw. Systemadministrator root zugewiesen. Er hat das einzige Benutzerkonto ohne Zugriffsbeschränkungen. UIDs kleiner als 100 werden für Systemkonten verwendet, verschiedene LinuxDistributionen verwenden dazu auch die Zahlenbereiche kleiner 500 oder kleiner 1000. Die Systemkonten können bei jeder Linux-Distribution je nach Hersteller unterschiedlich lauten. Sie sollten Ihre Benutzer mit Nummern größer 1000 anlegen, wenn Sie zu anderen Linux-Systemen kompatibel sein möchten. Wenn Sie neue Benutzer anlegen, sollten Sie pro Benutzer folgende Informationen bereithalten:
쮿
322
Der Benutzer- oder Anmeldename, den Sie vergeben möchten, muss eindeutig sein und darf aus zwei bis acht Zahlen und Buchstaben bestehen. Das erste Zeichen muss ein Buchstabe und mindestens ein Zeichen muss ein Kleinbuchstabe sein. Als Sonderzeichen sind nur Unterstriche, Punkte und Bindestriche, aber keine Leerzeichen oder sonstigen Sonderzeichen zugelassen. Es ist empfehlenswert, Punkte und Umlaute zu vermeiden. Sie können den Benutzernamen aus dem Vor- oder Nachnamen oder einer Kombination aus beidem bilden. Es ist
Kapitel 8 · Benutzer und Gruppen verwalten
aber auch möglich, die Namensvorgabe nach eigenen Vorstellungen zu definieren, zum Beispiel durch Angabe der Abteilung und einer laufenden Nummer.
쮿
Das Passwort muss zunächst vom Administrator vorgegeben werden, um zu vermeiden, dass ein Benutzerkonto ohne Passwort am System existiert. Es sollte aber sofort nach dem ersten Anmelden vom Benutzer geändert werden.
쮿
Das Homeverzeichnis, in das der Benutzer nach der Anmeldung positioniert wird und in dem er Dateien und Verzeichnisse anlegen, ändern und löschen kann. Standardmäßig wird das Verzeichnis /home und darin ein Unterverzeichnis mit dem gleichen Namen wie der Benutzername vorgeschlagen.
쮿
Die Anmeldeshell des Benutzers, mit der er arbeiten soll, zum Beispiel die Bourne-Again- oder Korn-Shell. Davon hängt ab, welche systemweiten und benutzereigenen Initialisierungsdateien beim Anmelden oder Starten einer Shell gelesen werden.
8.2.1
Defaultwerte zum Anlegen von Benutzern
Sie legen einen neuen Benutzer mit dem Befehl useradd an. Bevor Sie damit beginnen, sollten Sie aber die Defaultwerte, mit denen ein neuer Benutzer angelegt wird, überprüfen und gegebenenfalls ändern, wenn Sie diese Vorgabewerte nicht überschreiben. Der folgende Befehl gibt die Defaultwerte aus: # useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel GROUPS=dialout,uucp,video,audio
Sie erhalten die Defaultwerte für die primäre Gruppe, in diesem Beispiel 100 (bei SUSE Linux die Gruppe users), das Basisverzeichnis für das Homeverzeichnis, in diesem Beispiel /home, das Verzeichnis, in dem sich die Vorlagedateien der benutzereigenen Initialisierungsdateien befinden, in diesem Beispiel /etc/skel, die Anmeldeshell, in diesem Beispiel /bin/bash, die Anzahl der Tage, an denen ein Konto inaktiv sein darf, bevor es automatisch gesperrt wird, in diesem Beispiel -1 (kein Wert), und das Ablaufdatum (EXPIRE), das in diesem Beispiel auch keinen Wert hat. Nach dem ersten Aufruf des Befehls wird eine entsprechende Datei /etc/default/ useradd angelegt, die von Hand editiert werden kann, um die Defaultwerte zu ändern. Diese Datei enthält die Vorgabewerte für das Anlegen von Benutzern, wie zum Beispiel das Homeverzeichnis, die Gruppe oder die Shell. Nach dem ersten Aufruf des Befehls wird eine entsprechende Datei /etc/default/useradd angelegt, die von Hand oder mit dem Befehl useradd -D editiert werden kann. # cat /etc/default/useradd GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel GROUPS=dialout,uucp,video,audiodefgroup=1 ...
323
magnum
Benutzer verwalten
Bei Debian Linux heißt diese Datei /etc/adduser.conf und enthält andere Variablen.
8.2.2
Benutzer anlegen mit dem Befehl useradd
Ein neuer Benutzer wird von root mit dem Befehl useradd angelegt. Die Syntax des Befehls lautet: # useradd [-option(en)] benutzer
Der Befehl kennt viele Optionen: Option
Beschreibung
-c kommentar oder --comment
Diese Option weist dem Benutzerkonto eine ausführliche Beschreibung zu.
-d verzeichnis oder --home
Diese Option weist dem Benutzerkonto explizit ein Homeverzeichnis zu.
-D oder --show-defaults Ausgabe der Defaultwerte -D binddn oder --binddn
Verwendet den Namen binddn, um sich an das LDAP Directory zu binden
-e jjjj-mm-tt oder --expire
Das Benutzerkonto erhält ein Ablaufdatum im angegebenen Format.
-f tage oder --inactive
Diese Option weist der Anzahl der inaktiven Tage einen Wert zu, bevor das Konto automatisch gesperrt wird.
-g gid oder --gid
Diese Option weist die primäre Gruppe zu.
-G gid,gid,... oder --groups
Diese Option weist die sekundären Gruppen zu. Die Gruppen werden durch Komma getrennt ohne Leerzeichen aufgelistet.
-k verzeichnis oder --skel
Diese Option bewirkt, dass die Initialisierungsdateien aus einem anderen Verzeichnis kopiert werden.
-m oder --create-home
Wenn das Homeverzeichnis noch nicht existiert, wird es angelegt.
-o oder --non-unique
Diese Option erzwingt die mehrfache Vergabe derselben UID.
-p password oder --password
Diese Option weist dem Benutzer ein verschlüsseltes Passwort zu.
-P pfad oder --path
Diese Option informiert den Befehl, dass die Dateien passwd und shadow sich nicht in /etc, sondern im angegebenen Pfad befinden.
-r oder --system
Diese Option erzeugt ein Systemkonto mit einer Benutzer-ID, die kleiner als 500 ist.
-s shell oder --shell
Diese Option weist dem Benutzerkonto eine bestimmte Shell zu.
--save-defaults
Diese Option speichert abgeänderte Defaultwerte ab.
--service service
Fügt das Konto einem speziellen Verzeichnisdienst hinzu. Der Standardwert ist files, aber auch ldap ist ein gültiger Wert.
-u
uid oder --uid
Diese Option weist dem Benutzerkonto eine bestimmte UID zu.
Tab. 8.5: Optionen des Befehls useradd
324
Kapitel 8 · Benutzer und Gruppen verwalten
Im nachfolgenden Beispiel wird der Benutzer hans einschließlich seines Homeverzeichnisses angelegt. Er erhält die C-Shell, die primäre Gruppe buha und die sekundären Gruppen einkauf und versand. Die Anzahl der inaktiven Tage wird auf 25 gesetzt: # useradd –m –g buha –G einkauf,versand –s /bin/csh –c "Hans Hansen, Raum 327" –f 25 hans
Im nächsten Beispiel wird die Benutzerin anna mit ihrem Homeverzeichnis angelegt. Sie erhält die Korn-Shell und die primäre Gruppe einkauf. Ihr Konto wird am 30.6.2007 ablaufen und ihr wird die UID 999 zugewiesen: # useradd –m –g einkauf –u 999 –s /bin/ksh –c "Anna Anders, Raum 217" –e 06/30/ 07 anna
Die einfachste Möglichkeit, einen Benutzer anzulegen, besteht darin, alle Defaultwerte zu übernehmen. Sie sollten allerdings die Option –m immer verwenden, damit der Benutzer auch ein Homeverzeichnis hat: # useradd –m berta
Im nächsten Beispiel wird der Defaultwert für die Shell eines neu angelegten Benutzers geändert. Zukünftig soll jeder neue Benutzer nicht mehr die BourneAgain-, sondern die Korn-Shell erhalten: # useradd --save-defaults -s /bin/ksh # useradd --show-defaults GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/ksh SKEL=/etc/skel GROUPS=dialout,uucp,video,audio
Wenn Sie die Option –m vergessen, dann gibt es Probleme bei der Anmeldung des Benutzers, weil kein Homeverzeichnis existiert. Sie müssen dann hinterher manuell den Befehl mkdir verwenden, um das Verzeichnis anzulegen, sowie die notwendigen Initialisierungsdateien in das Homeverzeichnis kopieren. Vergessen Sie anschließend nicht, mit dem Befehl chown dem entsprechenden Benutzer und seiner Gruppe den Besitz an seinem Homeverzeichnis und den darin enthaltenen Initialisierungsdateien zu übertragen, sonst kann er darin nicht arbeiten.
8.2.3
Passwortablauf mit dem Befehl passwd steuern
Im Gegensatz zu root muss sich ein Benutzer an bestimmte Regeln bei der Passwortvergabe halten: Das Passwort darf nicht zu kurz sein, es darf nicht mit dem Benutzernamen übereinstimmen, es muss aus mindestens zwei Buchstaben und einem Sonderzeichen oder einer Zahl bestehen. Bei einer Passwortänderung muss sich das neue Passwort vom alten in mindestens drei Zeichen unterscheiden. Standardmäßig ist für das Passwort unter Linux eine Länge von mindestens 5 Zeichen vorgegeben. Es sollten aber unbedingt 8 Zeichen verwendet werden, um den Passwortschutz zu verbessern. Mehr als 8 Zeichen bei einem Passwort werden im Standard-Linux nicht ausgewertet, sofern nicht die MD5- oder DES-Verschlüsselung der Passwörter aktiviert ist (vergleiche 8.5.3).
325
magnum
Benutzer verwalten
Sie können entweder den Befehl useradd -p oder den Befehl passwd verwenden, um das verschlüsselte Passwort eines Benutzers in die Datei /etc/shadow einzutragen. Die Syntax des Befehls lautet: # passwd [-option(en)] [benutzer]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-a
Diese Option gibt den Status der Passwörter aller Benutzerkonten aus, wenn sie gemeinsam mit –S verwendet wird.
-d user
Diese Option löscht das Passwort des Benutzers.
-D binddn
Verwendet den Namen binddn, um sich an das LDAP Directory zu binden
-e
Diese Option zwingt den Benutzer, das Passwort beim nächsten Anmelden zu ändern.
-f
Diese Option ändert die Information, die sich im Kommentarfeld befindet.
-g
Diese Option ändert das Passwort für die angegebene Gruppe. Sie kann nur von root oder einem Benutzer geändert werden, der Gruppenadministrator der angegebenen Gruppe ist.
-h
Diese Option ändert das Homeverzeichnis des angegebenen Benutzers.
-i tage
Diese Option definiert, wie viele Tage ein Konto inaktiv sein darf, bevor es automatisch gesperrt wird.
-k
Diese Option lässt das Ändern eines Passworts nur zu, wenn dieses abgelaufen ist.
-l
Diese Option sperrt das Konto eines Benutzers.
-n tage
Diese Option gibt an, wie viele Tage das Passwort mindestens gültig sein muss.
-q
Stiller Modus. Diese Option kann nur mit der Option -k zusammen verwendet werden.
-s
Diese Option ändert die Anmeldeshell eines Benutzers.
-S
Diese Option gibt Informationen über den Status des Passworts eines Benutzers aus. Dabei bedeutet L, das Konto ist gesperrt, NP, das Konto hat kein Passwort, und P, das Konto hat ein verwendbares Passwort.
-u
Diese Option entsperrt das angegebene Konto.
-w tage
Diese Option gibt an, wie viele Warntage vor dem Ablauf des Passworts bestehen.
-x tage
Diese Option gibt an, nach wie vielen Tagen das Passwort geändert werden muss.
Tab. 8.6: Optionen des Befehls passwd
Nachfolgend wird dem Benutzer hans ein Passwort zugewiesen: # passwd hans Changing password for hans New password: Re-enter new password: Password changed
326
Kapitel 8 · Benutzer und Gruppen verwalten
Nachfolgend wird der Status des Kontos der Benutzerin her ausgegeben: # passwd -S her her PS 01/06/2003 0 99999 7 -1
Zuerst wird der Anmeldename, dann der Status PS ausgegeben, der besagt, dass das Konto ein gültiges Passwort hat. Es folgen das letzte Änderungsdatum des Passworts, die Anzahl der Tage, bevor das Passwort wieder geändert werden darf, die Anzahl der Tage, wann das Passwort geändert werden muss, die Anzahl der Warntage, dass das Passwort abläuft (hier 7), und das Ablaufdatum des Passworts (hier -1, das heißt, es gibt kein Ablaufdatum).
8.2.4
Benutzer ändern mit dem Befehl usermod
Mit dem Befehl usermod ändern Sie einen bereits vorhandenen Benutzer. Die Syntax des Befehls lautet: # usermod [-option(en)] benutzer
Dieser Befehl hat fast dieselben Optionen wie der Befehl der Optionen –l und –m:
useradd,
mit Ausnahme
Option
Beschreibung
-c kommentar
Diese Option weist dem Benutzerkonto eine ausführliche Beschreibung zu.
-d verzeichnis
Diese Option weist dem Benutzerkonto explizit ein Homeverzeichnis zu.
-e jjjj-mm-tt
Das Benutzerkonto erhält ein Ablaufdatum im angegebenen Format.
-f tage
Diese Option weist der Anzahl der inaktiven Tage einen Wert zu, bevor das Konto automatisch gesperrt wird.
-g gid
Diese Option weist die primäre Gruppe zu.
-G gid,gid,...
Diese Option weist die sekundären Gruppen zu. Die Gruppen werden durch Komma getrennt ohne Leerzeichen aufgelistet.
-l neuername
Diese Option verändert den Anmeldenamen eines Benutzers.
-L
Sperrt das Passwort eines Benutzers. Vor das verschlüsselte Passwort wird ein Ausrufezeichen (!) gesetzt.
-m
Diese Option benennt das Homeverzeichnis des Benutzers in das mit der Option –d angegebene Verzeichnis um.
-o
Diese Option erzwingt die mehrfache Vergabe derselben UID.
-p password
Diese Option weist dem Benutzer ein verschlüsseltes Passwort zu.
-s shell
Diese Option weist dem Benutzerkonto eine bestimmte Shell zu.
-u uid
Diese Option weist dem Benutzerkonto eine bestimmte UID zu.
-U
Entsperrt das Passwort eines Benutzers. Das Ausrufezeichen (!) vor dem verschlüsselten Passwort wird entfernt.
Tab. 8.7: Optionen des Befehls usermod
327
magnum
Benutzer verwalten
In diesem Beispiel werden der Anmeldename und das Homeverzeichnis der Benutzerin berta in tina verändert: # usermod –d /home/tina –m –l tina berta
Im nächsten Beispiel erhält anna nun die Bourne-Again-Shell und die Anzahl der inaktiven Tage wird bei ihr auf 40 gesetzt: # usermod –s /bin/bash –f 40 anna
Mit der Option –u können Sie dem Benutzer eine neue UID zuweisen: # usermod –u 120 tina
Dabei sollten Sie aber unbedingt beachten, dass Dateien und Verzeichnisse, denen diese UID bereits zugeordnet wurde, nicht die neue UID erhalten. Der Befehl ls –l zeigt in solchen Fällen nur die UID an, weil kein Benutzername mehr vorhanden ist. Solche Dateien können mit dem Befehl find und der Option –nouser gesucht und mit dem Befehl chown auf die neue UID geändert werden. Auch bei diesem Befehl lässt sich die doppelte Vergabe der UID erzwingen, zum Beispiel: # usermod –u 100 -o otto
Vor diesem Gebrauch muss aber wieder ausdrücklich gewarnt werden, weil Benutzer mit derselben UID dieselben Zugriffsrechte unter Linux haben, ja sogar dieselben Benutzer für das System sind.
8.2.5
Benutzer löschen mit dem Befehl userdel
Sie können mit dem Befehl Befehls lautet:
userdel
einen Benutzer wieder löschen. Die Syntax des
# userdel [-option(en)] benutzer
Der Befehl kennt folgende Optionen: Option
Beschreibung
-D binddn oder --binddn
Verwendet den Namen binddn, um sich an das LDAP Directory zu binden
-f oder --force
Diese Option erzwingt das Löschen von Dateien, auch wenn diese nicht dem Eigentümer des Kontos gehören.
-P pfad oder --path
Diese Option informiert den Befehl, dass die Dateien passwd und shadow sich nicht in /etc, sondern im angegebenen Pfad befinden.
-r oder --remove-home
Diese Option löscht das komplette Home- und Mailverzeichnis des zu löschenden Benutzers.
--service service
Fügt das Konto einem speziellen Verzeichnisdienst hinzu. Der Standardwert ist files, aber auch ldap ist ein gültiger Wert.
Tab. 8.8: Optionen des Befehls userdel
328
Kapitel 8 · Benutzer und Gruppen verwalten
Im folgenden Beispiel wird die Benutzerin tina gelöscht: # userdel tina
Um gleichzeitig das Homeverzeichnis des Benutzers zu löschen, verwenden Sie die Option –r: # userdel –r tina
Vergewissern Sie sich aber zuvor, dass sich keine wichtigen Dateien mehr in dem zu löschenden Homeverzeichnis befinden. Alle anderen Dateien des Benutzers, wie zum Beispiel seine Mailbox, können Sie mit dem Befehl find und der Option -user benutzername suchen und löschen bzw. manuell löschen.
8.2.6
Die Datei /etc/passwd
Die Informationen zu den im System vorhandenen Benutzern befinden sich in der Datei /etc/passwd: # cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/bash daemon:x:2:2:Daemon:/sbin:/bin/bash lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash ...
Die Datei enthält pro Zeile den Eintrag für einen Benutzer. Sie besteht aus sieben durch Doppelpunkte getrennten Feldern mit folgendem Inhalt:
쮿
Das erste Feld enthält den Benutzernamen, der maximal acht Zeichen lang sein sollte.
쮿
Im zweiten Feld steht der Platzhalter für das verschlüsselte Passwort. Das verschlüsselte Passwort wird inzwischen aus Sicherheitsgründen in /etc/shadow (siehe nächster Abschnitt) gespeichert.
쮿
Das dritte Feld enthält die UID des Benutzers. Sie sollte unbedingt eindeutig sein. Die Werte 0 bis 499 sind Systemkonten vorbehalten. Weitere angelegte Benutzergruppen können von 500 bis 60.000 bzw. bis zu 4 Milliarden reichen.
쮿
Das vierte Feld nimmt die GID der primären Gruppe des Benutzers auf.
쮿
Das fünfte Feld kann einen Kommentar zur näheren Beschreibung des Benutzers enthalten (siehe Kapitel 8, Befehl chfn).
쮿
Im sechsten Feld steht das Homeverzeichnis des Benutzers, in dem er sich nach der Anmeldung befindet.
쮿
Das siebte Feld verweist auf die Anmeldeshell des Benutzers. Alternativ kann hier auch der Name eines Anwendungsprogramms stehen, mit dem der Benutzer arbeiten soll, zum Beispiel eine Buchhaltungs- oder PPS-Anwendung. Dieses wird dann anstelle der Shell gestartet. Auf diese Weise erhält der Benutzer in der Regel keine Shell, denn sobald er das Programm beendet, ist der Benutzer auch vom System abgemeldet.
329
magnum
Benutzer verwalten
Die Systemkonten sind virtuelle Benutzer, unter deren UIDs die Systemprozesse laufen. Dies wurde aus Sicherheitsgründen auf diese Weise implementiert. Bei älteren Linux- und Unix-Systemen wurden die meisten Prozesse unter dem Konto root gestartet, was bei Sicherheitslücken aber die Folge hatte, dass ein Hacker über den aufgebrochenen Dienst mit der UID von root arbeiten konnte. Durch die jetzige Einstellung kann ein Hacker bei einem Durchbruch nur mit einem Systemkonto mit eingeschränkten Rechten arbeiten.
8.2.7
Die Datei /etc/shadow
In der Datei /etc/shadow werden die verschlüsselten Passwörter und die Angaben zum Passwortablauf etc. gespeichert: # cat /etc/shadow adabas:*:8902:0:10000:::: amanda:*:8902:0:10000:::: at:*:8902:0:10000:::: bin:*:8902:0:10000:::: cyrus:*:8902:0:10000:::: daemon:*:8902:0:10000:::: ... oliver:zgg4f1jipNKAg:12563:7:90:4:-1:12783: ...
Die Datei enthält pro Zeile den Eintrag für einen Benutzer. Sie besteht aus neun durch Doppelpunkte getrennten Feldern mit folgendem Inhalt:
330
쮿
Das erste Feld enthält den Benutzernamen.
쮿
Das zweite Feld enthält ein 13 Zeichen langes verschlüsseltes Passwort oder das Zeichen ! für ein gesperrtes Konto oder * für Systemkonten, bei denen kein interaktives Anmelden möglich ist.
쮿
Das dritte Feld zeigt das Datum, an dem das Passwort zuletzt geändert wurde. Dieses Datum wird in Tagen ab dem 1.1.1970 gezählt.
쮿
Im vierten Feld steht die Anzahl der Tage, die vergehen müssen, bevor das Passwort wieder geändert werden darf.
쮿
Das fünfte Feld nennt die Anzahl der Tage, die vergehen müssen, bevor das Passwort verändert werden muss.
쮿
Das sechste Feld enthält die Anzahl der Tage, an denen der Benutzer gewarnt wird, dass sein Passwort abläuft.
쮿
Das siebte Feld gibt die Anzahl der Tage an, an denen das Password abgelaufen sein muss, bevor es gesperrt wird.
쮿
Das achte Feld enthält das Ablaufdatum des Kontos. Dieses Datum wird in Tagen ab dem 1.1.1970 gezählt.
쮿
Das letzte Feld ist zurzeit noch nicht belegt.
Kapitel 8 · Benutzer und Gruppen verwalten
Im Gegensatz zur Datei /etc/passwd, die von jedem gelesen werden darf, hat nur root das Schreibrecht und root und die Gruppe shadow haben das Leserecht für die Dateien /etc/shadow und /etc/gshadow. Dadurch, dass nicht einmal die verschlüsselten Passwörter gelesen werden dürfen, wird die Passwortsicherheit wesentlich erhöht. Da dem Befehl passwd das SETUID-Bit zugewiesen wurde (vergleiche Kapitel 8), ist es trotzdem möglich, dass ein Benutzer sein in der Datei /etc/shadow hinterlegtes Passwort ändert. Das bedeutet, dass dieser Befehl mit den Rechten seines Besitzers, nämlich root, ausgeführt wird, wodurch die einzelnen Benutzer die Möglichkeit haben, ihr Passwort zu ändern. Wenn Sie selbst Systemkonten einrichten müssen, mit den kein interaktives Anmelden möglich sein soll, dann verwenden Sie bei diesen Konten anstelle einer Shell den Befehl /bin/false. Damit wird das interaktive Anmelden verhindert, wenn es nicht schon zuvor am nicht vorhandenen Passwort scheitert.
8.2.8
Weitere Befehle der Benutzerverwaltung
Die in diesem Abschnitt vorgestellten Befehle sind nützlich, um Informationen über Benutzer anzuzeigen oder die Passwortdateien zu überprüfen oder den Benutzer zu wechseln.
Der Befehl pwconv Dieser Befehl aktualisiert die Datei /etc/shadow oder erzeugt sie, wenn sie noch nicht vorhanden ist. Dazu wird die Datei /etc/passwd als Basis verwendet:
쮿
Existiert die Datei /etc/shadow noch nicht, wird sie auf der Grundlage der Einträge der Datei /etc/passwd erzeugt.
쮿
Existiert die Datei /etc/shadow bereits, aber es fehlen Einträge aus der Datei /etc/passwd, dann werden diese entsprechend erzeugt.
쮿
Existiert die Datei /etc/shadow bereits, aber sie hat zusätzliche Einträge im Vergleich zur Datei /etc/passwd, dann werden diese gelöscht.
Der Befehl pwunconv Dieser Befehl erzeugt die Datei /etc/passwd aus den Dateien /etc/passwd shadow. Anschließend wird die Datei /etc/shadow gelöscht.
und
/etc/
Der Befehl grpconv Dieser Befehl aktualisiert die Datei /etc/gshadow oder erzeugt sie, wenn sie noch nicht vorhanden ist. Dazu wird die Datei /etc/group als Basis verwendet:
쮿
Existiert die Datei /etc/gshadow noch nicht, wird sie auf der Grundlage der Einträge der Datei /etc/group erzeugt.
쮿
Existiert die Datei /etc/gshadow bereits, aber es fehlen Einträge aus der Datei /etc/group, dann werden diese entsprechend erzeugt.
쮿
Existiert die Datei /etc/gshadow bereits, aber sie hat zusätzliche Einträge im Vergleich zur Datei /etc/group, dann werden diese gelöscht.
331
Benutzer verwalten
magnum
Der Befehl grpunconv Dieser Befehl erzeugt die Datei /etc/group aus den Dateien /etc/group und /etc/gshaAnschließend wird die Datei /etc/gshadow gelöscht.
dow.
Der Befehl pwck Dieser Befehl überprüft die Dateien /etc/passwd und /etc/shadow auf Inkonsistenzen. Diese können durch manuelles Editieren der Datei entstehen. Es wird geprüft, ob das Format der Dateien ordnungsgemäß ist und ob diese gültige Einträge in allen Feldern enthalten. Die Prüfungen stellen fest, ob jeder Eintrag:
쮿
die korrekte Anzahl von Feldern hat
쮿
einen eindeutigen Benutzernamen hat
쮿
eine gültige UID und GID besitzt
쮿
eine gültige primäre Gruppe besitzt
쮿
ein gültiges Homeverzeichnis hat
쮿
eine gültige Anmeldeshell hat
Die Syntax des Befehls lautet: # pwck [-sr] [passwd shadow]
Der Befehl kennt folgende Optionen: Option Beschreibung -r
Der Befehl wird im nur lesbaren Modus ausgeführt, was zu keinen Änderungen führt.
-s
Diese Option sortiert die aufgerufenen Dateien, wobei keine Prüfungen durchgeführt werden.
Tab. 8.9: Optionen des Befehls pwck
Im folgenden Beispiel wird die Benutzerin tina gelöscht: # pwck user postgres: directory /var/lib/pgsql does not exist user squid: directory /var/squid does not exist user fax: directory /var/spool/fax does not exist ...
Hier sind die Fehlermeldungen zum Beispiel relativ harmlos, da sie nur besagen, dass die Systemkonten kein eigenes Homeverzeichnis haben.
Der Befehl logname Dieser Befehl gibt den Anmeldenamen des aktuellen Benutzers zurück. Die Syntax des Befehls lautet: $ logname
Nachfolgend wird der Anmeldename der Benutzerin her ausgegeben: # logname her
332
Kapitel 8 · Benutzer und Gruppen verwalten
Der Befehl id Dieser Befehl zeigt die Benutzeridentifikation an, das heißt den Namen und die Nummer des Benutzers. Die Syntax des Befehls lautet: # id [-option(en)] [benutzer]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-a
Bei anderen Unix-Varianten bedeutet diese Option »alles ausgeben«. Hier ist sie nur noch aus Kompatibilitätsgründen vorhanden.
-g
oder --group
Gibt nur die effektive Gruppen-ID aus
-G
oder --groups
Gibt alle Gruppen-IDs aus
-n
oder --name
Gibt einen Namen anstelle der ID-Nummer aus
-r
oder --real
Gibt die reale ID anstatt der effektiven ID aus
-u
oder --user
Gibt nur die effektive Benutzer-ID aus
Tab. 8.10: Optionen des Befehls id
Im folgenden Beispiel werden die Angaben des aktuellen Benutzers ausgegeben: $ id uid=500(her) gid=100(users) groups=100(users), 14(uucp),15(shadow),16(dialout),17(audio),33(video),1001(einkauf)
Ein Benutzername kann als Argument des Befehls verwendet werden: $ id otto uid=501(otto) gid=100(users) groups=100(users),107(entw),v102(buha)
Der Befehl su Mit diesem Befehl ist es möglich, zwischen verschiedenen Benutzerkennungen zu wechseln. Die Syntax des Befehls lautet: # su [-option(en)] [benutzer]
Der Befehl kennt folgende Optionen: Option
Beschreibung
- oder -l oder --login
Die Shell, die gestartet wird, ist eine Anmeldeshell und liest sämtliche Konfigurationsdateien ein.
-c befehl oder --command
Übergibt der Shell einen einzelnen Befehl
-f oder --fast
Übergibt die Option -f der Shell (wird von der csh oder tcsh ausgewertet)
Tab. 8.11: Optionen des Befehls su
333
magnum
Benutzer verwalten
Option
Beschreibung
-m oder --preserve-environment oder -p
Setzt die Umgebungsvariablen nicht zurück.
-s shell oder --shell
Startet die angegebene Shell
Tab. 8.11: Optionen des Befehls su (Forts.)
Wenn die Option – verwendet wird, erhält man beim Ändern der Benutzerkennung auch gleichzeitig die Umgebung des neuen Benutzers, zum Beispiel: # su - her $ pwd / home/her $ id uid=101(her) gid=1(other) groups=1(other),101(einkauf) $ logname root
Die effektive UID lautet nun her, aber der Anmeldename bleibt root. In diesem Beispiel wird auch deutlich, dass root im Gegensatz zu jedem anderen Benutzer im System kein Passwort angeben muss, wenn er die Identität eines regulären Benutzers annimmt. Mit dem Befehl su wird eine neue Shell mit den Rechten des dabei verwendeten Benutzers gestartet, die mit dem Befehl exit wieder beendet wird. Im nächsten Beispiel wird von der Benutzerkennung her zur Benutzerkennung olli gewechselt: $ su olli Password: $ pwd / home/her $ id uid=111(olli) gid=1(other) groups=1(other),107(verkauf) $ logname root
Hier wird nach dem Passwort gefragt, weil der Wechsel von der Benutzerin her zu einem anderen Benutzer erfolgt. Außerdem wird durch den Wechsel der Benutzerkennung nicht in das entsprechende Homeverzeichnis gewechselt, weil die Option – nicht verwendet wurde. Über den Befehl exit gelangt man wieder zur vorherigen Kennung zurück: $ exit $ id uid=111(her) gid=1(other) groups=1(other),101(einkauf) $ exit # id uid=0(root) gid=1(other)
Wenn root den Befehl su verwendet, um zu einem einfachen Benutzer zu werden, wird er nicht nach einem Passwort gefragt.
334
Kapitel 8 · Benutzer und Gruppen verwalten
Der Befehl sudo Mit diesem Befehl ist es möglich, einen Befehl als anderer Benutzer oder Superuser auszuführen. Der Befehl entscheidet anhand der Datei /etc/sudoers, wer den Befehl ausführen darf oder nicht. Das ist nützlich, wenn Benutzer bestimmte systemnahe Befehle verwenden dürfen, aber deswegen nicht alle Privilegien von root erhalten sollen. Die Syntax des Befehls lautet: # sudo [-option(en)] befehl
Der Befehl kennt folgende Optionen: Option
Beschreibung
-a
Diese Option veranlasst, dass der angegebene Authentifizierungstyp, wie in der Datei /etc/login.conf definiert, verwendet wird, wenn der Benutzer überprüft wird.
-b
Diese Option veranlasst, dass der aufgerufene Befehl im Hintergrund abläuft.
-c
Diese Option veranlasst, dass der angegebene Befehl mit den begrenzten Ressourcen der angegebenen Klasse läuft. Klassen können entweder in der Datei /etc/login.conf definiert werden oder es wird das Zeichen »-« verwendet, um die Ressourcen des Benutzers zu verwenden, unter dem der Befehl läuft.
-H
Diese Option legt die Variable für die HOME-Umgebung auf das Homeverzeichnis des Zielbenutzers fest. Standardmäßig ist dies root.
-k
Diese Option macht den Zeitstempel des Benutzers ungültig, so dass dieser beim nächsten Aufruf des Befehls ein Passwort angeben muss.
-K
Diese Option entfernt den Zeitstempel des Benutzers endgültig.
-l
Diese Option listet die zulässigen (und verbotenen) Befehle für den Benutzer auf dem aktuellen Rechner auf.
-L
Diese Option listet die Parameter auf, die gesetzt werden dürfen, gemeinsam mit einer kurzen Beschreibung von jedem.
-p
Diese Option ermöglicht es, die standardmäßige Passwortaufforderung zu übergehen und ein eigenes Prompt zu verwenden. Es werden folgende Escape-Sequenzen unterstützt:
%h
stellt den Anmeldenamen des aufrufenden Benutzers dar stellt den Anmeldenamen des Benutzers dar, mit dem der Befehl gestartet wird (standardmäßig root) stellt den lokalen Rechnernamen ohne den Domänennamen dar
%H
stellt den lokalen Rechnernamen einschließlich des Domänennamens dar
%%
stellt ein Prozentzeichen (%) dar
%u %U
-P
Diese Option behält die Gruppen des Benutzers unverändert bei. Normalerweise initialisiert der Befehl die Gruppe mit der Liste von Gruppen, die dem Zielbenutzer zugewiesen wurden.
-s
Diese Option startet die Shell, die in der Umgebungsvariablen SHELL definiert wurde, oder wenn diese nicht existiert, die in der Datei /etc/passwd definierte Shell.
-S
Diese Option bewirkt, dass das Passwort von der Standardeingabe anstatt vom Terminalgerät gelesen wird.
Tab. 8.12: Optionen des Befehls sudo
335
magnum
Benutzer verwalten
Option
Beschreibung
-u
Diese Option veranlasst, dass der angegebene Befehl mit einem anderen Benutzer als root aufgerufen wird.
-v
Diese Option aktualisiert den Zeitstempel des Benutzers und fragt diesen nach seinem Passwort, wenn es notwendig ist. Damit kann der automatische Timeout von sudo um weitere 5 Minuten verlängert werden.
-V
Diese Option gibt die Versionsnummer aus und beendet den Befehl. Wenn der aufrufende Benutzer bereits root ist, gibt die Option eine Liste der Standards aus, mit denen der Befehl kompiliert wurde.
--
Dieses Flag verhindert, dass der Befehl weitere Befehlszeilenargumente bearbeitet.
Tab. 8.12: Optionen des Befehls sudo (Forts.)
Im ersten Beispiel mountet die Benutzerin her die Ressource dazu wurde ihr in der Datei /etc/sudoers eingeräumt:
/network.
Das Recht
$ sudo mount /network passwd: $ mount proc on /proc type proc (rw) devpts on /dev/pts type devpts (rw,mode=0620,gid=5) tmpfs on /dev/shm type tmpfs (rw) usbdevfs on /proc/bus/usb type usbdevfs (rw) pclsu3:/home/network on /network type nfs (rw,acl,bg,addr=192.186.175.88)
Im zweiten Fall versucht der Benutzer otto diese Ressource zu mounten, ohne die entsprechenden Berechtigungen zu haben: $ sudo mount /network passwd: otto1 is not in the sudoers file. This incident will be reported.
Im letzten Fall ist der Benutzer doo zwar in der Datei /etc/sudoers eingetragen, aber nicht mit den entsprechenden Berechtigungen: $ sudo mount /network passwd: $ mount Sorry, user doo is not allowed to execute '/bin/mount /network' as root on pc19lsu
Die Datei /etc/sudoers steuert das Verhalten des Befehls sudo mit Hilfe von Parametern. Sie könnte zum Beispiel wie folgt aussehen: # more /etc/sudoers # sudoers file. # # This file MUST be edited with the 'visudo' command as root. # # See the sudoers man page for the details on how to write a sudoers file. #... # User privilege specification root ALL=(ALL) ALL otto ALL=/usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel, /usr/bin/passwd doo ALL=/sbin/shutdown -h now %rootgrp ALL=(ALL) ALL %userslocalhost=/sbin/shutdown -h now ...
336
Kapitel 8 · Benutzer und Gruppen verwalten
Eine Zeile enthält einen Eintrag, der Rechte vergibt. Dieser besteht aus verschiedenen Angaben: dem Benutzer- oder Gruppennamen, zum Beispiel otto oder rootgrp, von welchem Rechner aus welche Kommandos ausgeführt werden dürfen, zum Beispiel localhost oder ALL für alle Rechner, und als welcher Benutzer etwas ausgeführt werden soll. Im obigen Beispiel darf der Benutzer otto auf allen Rechnern Benutzer anlegen, ändern, löschen und deren Passwörter ändern, die Gruppe rootgrp darf alles auf allen Rechnern ausführen und die Gruppe users darf den Rechner herunterfahren, wenn der entsprechende Benutzer der Gruppe direkt auf dem Rechner angemeldet ist. Die Datei sollte nicht direkt, sondern nur vom Benutzer root mit dem Befehl visudo editiert werden. Wenn ein Benutzer wissen möchte, welche Befehle er mit sudo ausführen darf, muss er nur den Aufruf von sudo -l ausführen.
Der Befehl chsh Mit diesem Befehl ist es möglich, die Anmeldeshell eines Benutzers in der Datei /etc/passwd zu ändern. Ein normaler Benutzer kann seine eigene Anmeldeshell ändern, root die von allen Benutzern. Außerdem muss die gewählte Shell in der Datei /etc/shells aufgeführt sein. Die Syntax des Befehls lautet: # chsh [-option(en)] benutzer
Der Befehl kennt folgende Optionen: Option
Beschreibung
-l
oder --list-shells
Anzeige der in der Datei /etc/shells aufgeführten Shell
-q
oder --quiet
Stiller Modus ohne Rückmeldungen
-s
shell oder --shell
Angabe der neuen Anmeldeshell
Tab. 8.13: Optionen des Befehls chsh
Im ersten Beispiel mountet die Benutzerin her die Ressource dazu wurde ihr in der Datei /etc/sudoers eingeräumt:
/network.
Das Recht
$ chsh Ändere Login-Shell für otto. passwd: Enter the new value, or press return for the default. Login Shell [/bin{bash]: /bin/csh Shell changed. $ grep otto /etc/passwd otto:x:501:100::/home/otto:/bin/csh
Der Befehl chpasswd Mit diesem Befehl ist es möglich, die Passwörter für Benutzer in einer Art Stapelverarbeitung zu ändern. Der Befehl liest eine Liste von Paaren bestehend aus Anmeldenamen und Passwort von der Standardeingabe oder aus einer Datei und aktualisiert mit diesen Informationen die Passwörter der angegebenen Benutzerkonten, die bereits vorhanden sein müssen. Das Datum der Passwortänderung wird aktualisiert. Die Eingabe muss folgendes Format haben:
337
magnum
Benutzer verwalten
benutzername:passwort
Die Syntax des Befehls lautet: # chpasswd [-option(en)] [datei]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-c des|md5|blowfish
Diese Option legt den Hash-Algorithmus fest, der zum Verschlüsseln der Passwörter verwendet werden soll.
-D
binddn oder --binddn Der angegebene Name wird verwendet, um sich an das LDAP Directory zu binden.
Die Passwörter liegen in verschlüsselter Form vor. Normalerweise liegen sie im einfachen Textformat vor.
-e
-P
pfad oder --path
Die Dateien passwd und shadow befinden sich im angegebenen Verzeichnis.
Tab. 8.14: Optionen des Befehls chpasswd
In diesem Beispiel werden hintereinander die Passwörter der Benutzer her, otto und hugo geändert und die Eingabe schließlich mit der Tastenkombination (Strg)+(d) beendet: $ chpasswd otto:l17zU3% hugo:eW91§lx7 (Strg)+(d)
Der Befehl chroot Mit diesem Befehl wird ein Verzeichnis zum fiktiven Wurzelverzeichnis / erklärt. Wird ein Befehl oder eine interaktive Shell mit diesem neuen Wurzelverzeichnis gestartet, dann kann es nicht mehr auf Dateien außerhalb des neuen Wurzelverzeichnisses zugreifen. Dies ist zum Beispiel sinnvoll, wenn von einer Rettungsdiskette aus in einem gemounteten System gearbeitet werden soll oder ein Webserver grundsätzlich nur auf einen abgegrenzten Dateibaum zugreifen darf. Im Prinzip wird auf diese Weise ein kritischer Befehl vom übrigen Dateisystem losgelöst verwendet, was die Sicherheit des Systems erhöht. Der Befehl kann nur von root aufgerufen werden. Die Syntax des Befehls lautet: # chroot neues-wurzelver befehl
Die Anwendung kann zum Beispiel sinnvoll sein, wenn man von einer Rettungsdiskette im gemounteten root-System arbeiten will: # mount /dev/hda3 /rootsystem # chroot /rootsystem /bin/bash -i
Der Benutzer arbeitet jetzt innerhalb des zu rettenden Systems und alle Pfadangaben stimmen exakt mit den Pfaden dieses Systems überein.
338
Kapitel 8 · Benutzer und Gruppen verwalten
In einem chroot-Verzeichnis müssen bestimmte Dateien unbedingt vorhanden sein, damit es funktionsfähig ist, zum Beispiel shlibs, /proc, /etc, Gerätedateien usw., je nach Anwendung. Es ist außerdem möglich, aus einer chroot-Umgebung »auszubrechen«, das heißt, sie sollte nicht als »sicheres Gefängnis« betrachtet werden.
Der Befehl chage Dieser Befehl stand ursprünglich unter Red Hat Linux zum Ändern des Passwortablaufs zur Verfügung. Inzwischen ist er aber auf vielen Linux-Systemen, zum Beispiel auch SUSE Linux und Debian GNU/Linux, implementiert. Die Syntax des Befehls lautet: # chage [-option(en)] [benutzer]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-m nummer
Setzt die minimale Gültigkeit des Passworts in Tagen
-M nummer
Setzt die maximale Gültigkeit des Passworts in Tagen
-W nummer
Warnt den Benutzer die angegebene Anzahl von Tagen, bevor das Passwort abläuft
-E datum
Definiert das Ablaufdatum im Format YYYY-MM-DD
-I inaktiv
Definiert die maximale inaktive Zeit nach einem Passwortablauf
-l
Gibt eine Übersicht über die für einen Benutzer eingestellten Werte zum Passwortablauf
Tab. 8.15: Optionen des Befehls chage
Wird der Benutzername ohne Option angewandt, können die Werte zum Passwortablauf interaktiv eingegeben werden. Im nachfolgenden Beispiel werden die Passwortablauf-Informationen zum Benutzer root ausgegeben: # chage -l root Minimum: Maximum: Warning: Inactive: Last Change: Password Expires: Password Inactive: Account Expires:
0 99999 7 -1 Dec 20, 1999 Never Never Never
339
Weitere Konfigurationsdateien der Benutzer- und Gruppenverwaltung
magnum
8.3 Weitere Konfigurationsdateien der Benutzerund Gruppenverwaltung 8.3.1
Die Datei /etc/login.defs
Diese Datei steuert das Verhalten des Systems bei der Anmeldung von Benutzern. Die Einträge sind alle optional, das heißt, nicht vorhandene bzw. auskommentierte Einträge gelten auch als nicht definiert. Hier wird ein kleiner Ausschnitt aus dieser Datei aufgelistet: # cat /etc/login.defs # /etc/login.defs - Configuration control definitions for pwdutils package. ... # Please read the manual page for more information (login.defs.5). # Should login be allowed if we can't cd to the home directory? # Default is yes. DEFAULT_HOME yes # The default PATH settings (used by login): ENV_PATH /usr/local/bin:/usr/bin:/bin # The default PATH settings for root (used by login): ENV_ROOTPATH /sbin:/bin:/usr/sbin:/usr/bin ...
Die Datei ist sehr gut kommentiert, so dass die Einträge relativ einfach erweitert werden können. In der folgenden Tabelle werden die wichtigsten Parameter erläutert: Parameter
Beschreibung
CHFN_AUTH
Wenn der Wert mit yes definiert ist, verlangen die Befehle chsh und chfn eine Passworteingabe.
CHFN_RESTRICT
Dieser Parameter legt fest, welche Einträge des Kommentarfelds in der Datei /etc/passwd von einem Benutzer mit dem Befehl chfn geändert werden dürfen.
CONSOLE
root darf sich nur an den hier aufgeführten Terminals anmelden.
DEFAULT_HOME
Dieser Parameter bestimmt, ob ein Benutzer sich anmelden darf, wenn sein Homeverzeichnis nicht zur Verfügung steht, zum Beispiel durch den Ausfall eines NFS-Servers.
ENVIRON_FILE
Dieser Parameter kann eine Datei enthalten, die einen Satz mit vordefinierten Umgebungsvariablen bereitstellt.
ENV_PATH
Mit diesem Parameter wird die Variable PATH zum ersten Mal belegt. Dieser Eintrag muss hinterlegt werden.
ENV_ROOTPATH
Erste Belegung der Variablen PATH für root
ERASECHAR
Angabe eines Zeichens, das zum Löschen in einem Terminal verwendet wird. Wird dieser Parameter nicht definiert, kann die Taste (æ__) zum Löschen verwendet werden.
FAILLOG_ENAB
Wird dieser Parameter mit yes belegt, werden nicht erfolgreiche Anmeldeversuche in der Datei /var/log/faillog mit protokolliert.
Tab. 8.16: Parameter der Konfigurationsdatei login.defs
340
Kapitel 8 · Benutzer und Gruppen verwalten
Parameter
Beschreibung
FAIL_DELAY
Angabe einer Zeit in Sekunden, die nach einem erfolglosen Anmeldeversuch gewartet wird, bevor der Anmeldeprompt wieder angeboten wird
GID_MIN, GID_MAX
Der minimale bzw. maximale Wert, den eine Gruppennummer erhalten kann, wenn sie automatisch durch den Befehl groupadd vergeben wird.
ISSUE_FILE
Dieser Parameter enthält den Namen der Datei, deren Inhalt vor der Anzeige des Anmeldeprompts ausgegeben werden kann.
LASTLOG_ENAB
Wenn dieser Parameter auf yes gesetzt wird, werden bei einem erfolgreichen Anmeldeversuch verschiedene Informationen ausgegeben, wie zum Beispiel Zeitpunkt der letzten Anmeldung.
LOGIN_RETRIES
Dieser Parameter enthält die Anzahl, wie viele erfolglose Anmeldeversuche erlaubt sind, bevor sich der Befehl login beendet.
LOGIN_TIMEOUT
Mit diesem Parameter wird die Anzahl in Sekunden definiert, die der Befehl login auf die Passworteingabe wartet.
MAIL_CHECK_ENAB
Dieser Parameter bewirkt, dass ein Benutzer nach der Anmeldung Informationen über den Mailboxstatus erhält.
MAIL_DIR
Dieser Parameter definiert das Verzeichnis mit den Mailboxen der Benutzer.
MAIL_FILE
Dieser Parameter verweist auf die Datei, die die Mailbox eines Benutzers enthält. Sie muss sich im Homeverzeichnis befinden, denn der Pfad zum Homeverzeichnis wird automatisch ergänzt.
MD5_CRYPT_ENAB
Ist dieser Parameter mit yes definiert, wird das Passwort nicht mit dem DES-, sondern mit dem MD5-Algorithmus verschlüsselt, wodurch Passwörter bis zu 256 Zeichen lang sein können.
MOTD_FILE
Dieser Parameter verweist auf den vollständigen Pfad zu der Datei, die die Tagesnachricht (»Message of the day«) enthält. Der Inhalt der Datei wird nach dem Anmelden angezeigt.
NOLOGINS_FILE
Dieser Parameter enthält die Angabe einer Datei. Wenn diese vorhanden ist, kann nur noch root sich am System anmelden. Alle anderen Benutzer werden mit dem Text der Datei abgewiesen.
PASS_CHANGE_TRIES
Dieser Parameter enthält die Anzahl der Versuche, die ein Benutzer zum Ändern des Passworts durchführen darf, bevor der Befehl passwd beendet wird.
PASS_MIN_DAYS, PASS_MAX_DAYS
Diese Parameter enthalten die Mindest- bzw. maximale Anzahl von Tagen, die zwischen zwei Änderungen des Passworts vergehen müssen bzw. dürfen.
PASS_MIN_LEN, PASS_MAX_LEN
Diese Parameter enthalten die Mindest- bzw. maximale Länge eines Passworts.
PASS_WARN_AGE
Dieser Parameter definiert, ab welcher Anzahl von Tagen ein Benutzer gewarnt wird, dass sein Passwort abläuft.
SULOG_FILE
Dieser Parameter gibt die Datei an, die alle Anmeldeversuche mit dem Befehl su protokolliert. Ist dieser Parameter nicht definiert, findet die Protokollierung nicht statt.
Tab. 8.16: Parameter der Konfigurationsdatei login.defs (Forts.)
341
Weitere Konfigurationsdateien der Benutzer- und Gruppenverwaltung
magnum
Parameter
Beschreibung
SYSLOG_SG_ENAB
Wenn dieser Parameter den Wert yes hat, werden alle Aufrufe des Befehls sg über den Systemdienst syslogd mit protokolliert.
SYSLOG_SU_ENAB
Wenn dieser Parameter den Wert yes hat, werden alle Aufrufe des Befehls su über den Systemdienst syslogd mit protokolliert.
UID_MIN, UID_MAX
Der minimale bzw. maximale Wert, den eine Benutzernummer erhalten kann, wenn sie automatisch durch den Befehl useradd vergeben wird.
ULIMIT
Dieser Parameter enthält den Wert, den die Größe einer Datei maximal einnehmen darf.
UMASK
Dieser Parameter enthält die Voreinstellung für die Berechtigungen von neu erstellten Dateien und Verzeichnissen.
Tab. 8.16: Parameter der Konfigurationsdatei login.defs (Forts.)
8.3.2
Die Datei /etc/securetty
Diese Datei steuert das Verhalten des Systems bei der Anmeldung von root. Es ist oft aus Sicherheitsgründen nicht erwünscht, dass root sich an jedem Terminal anmelden kann. Diese Datei enthält die »vertrauenswürdigen« Terminals, an denen root sich anmelden darf: # more /etc/securetty # This file contains the device names of tty lines (one per line, # without leading /dev/) on which root is allowed to login. tty1 tty2 tty3 tty4 ...
An allen anderen Terminals erhält root die Meldung, dass er zur Anmeldung keine Berechtigung habe. Die Standardeinstellung ermöglicht root nur eine Anmeldung an einem physikalischen Terminal. Ein Anmeldeversuch über das Netzwerk über Pseudoterminals würde abgewiesen werden.
8.3.3
Die Datei /etc/shells
Diese Datei legt fest, welche Shells von den Benutzern des Systems verwendet werden dürfen. Nach der Anmeldung am System erhält ein Benutzer zunächst seine Standardshell aus der Datei /etc/passwd, die er aber mit dem Befehl chsh ändern kann. Um zu gewährleisten, dass nur sichere und stabile Shellbefehle dazu verwendet werden, werden alle zulässigen Shells in der Datei /etc/shells aufgeführt. Der Befehl chsh liest diese Datei, bevor er die Shell eines Benutzers tatsächlich ändert. Diese Datei sieht unter SUSE Linux standardmäßig wie folgt aus: # more /etc/shells /bin/ash /bin/bash /bin/bash1 /bin/csh /bin/false /bin/ksh /bin/sh
342
Kapitel 8 · Benutzer und Gruppen verwalten
/bin/tcsh /bin/true /bin/zsh /usr/bin/csh /usr/bin/ksh /usr/bin/passwd /usr/bin/bash /usr/bin/rbash /usr/bin/tcsh /usr/bin/zsh
8.4 Initialisierungsdateien Initialisierungsdateien werden benötigt, um die Umgebung des Benutzers für ihn passend einzurichten. Die grafische Oberfläche KDE hat zum Beispiel eigene Initialisierungsdateien im versteckten Ordner .kde und die grafische Oberfläche GNOME einen versteckten Ordner .gnome, jeweils im Homeverzeichnis des Benutzers. Die verschiedenen Shells (vergleiche Kapitel 9) haben unterschiedliche Initialisierungsdateien. Datei
sh
ksh
bash
/etc/profile
x
x
x x
/etc/.login ~/.profile ~/.kshrc*
csh
x
x
x
x
~/.bash_profile
x
~/.bashrc
x
~/.bash_login
x
~/.bash_logout
x
~/.login
x
~/.cshrc
x
~/.logout
x
Tab. 8.17: Initialisierungsdateien der verschiedenen Shells
Einige Vorlagen der Initialisierungsdateien befinden sich standardmäßig im Verzeichnis /etc/skel und werden bei den meisten Systemen bei Verwendung des Befehls useradd oder der grafischen Tools zur Benutzerverwaltung automatisch in das Homeverzeichnis eines neu angelegten Benutzers kopiert.
343
Initialisierungsdateien
8.4.1
magnum
Die Datei /etc/profile
Diese Datei ist eine systemweite Initialisierungsdatei für alle Benutzer, denen entweder die Bourne- oder Korn- oder Bourne-Again-Shell zugewiesen wurde. In diese Datei kann root Systemeinstellungen aufnehmen, die für alle diese Benutzer gelten sollen. Im Folgenden ein Ausschnitt der Datei unter SUSE Linux: # more /etc/profile # /etc/profile for SUSE Linux # # PLEASE DO NOT CHANGE /etc/profile. There are chances that your changes # will be lost during system upgrades. Instead use /etc/profile.local for # your local settings, favourite global aliases, VISUAL and EDITOR # variables, etc ... # # Check which shell is reading this file # if test -f /proc/mounts ; then case "`/bin/ls -l /proc/$$/exe`" in */bash) is=bash ;; */rbash) is=bash ;; */ash) is=ash ;; */ksh) is=ksh ;; */zsh) is=zsh ;; */*) is=sh ;; esac else is=sh fi ...
Im Prinzip ist die Datei /etc/profile von jedem Administrator beliebig anpassbar. Die Firma SUSE Linux weist allerdings darauf hin, dass Sie diese Datei nicht editieren sollten, weil sie bei einem Update überschrieben werden könnte. Sie können aber diese Anpassungen in der Datei /etc/profile.local einstellen, die von der Datei /etc/profile gelesen wird. Die C-Shell liest bei einigen Linux- und Unix-Systemen zuerst die systemweite Konfigurationsdatei /etc/.login. Bei vielen Linux-Systemen werden von der Cund TC-Shell stattdessen die Dateien /etc/csh.cshrc und /etc/csh.login gelesen.
344
Kapitel 8 · Benutzer und Gruppen verwalten
8.4.2
Die Datei ~/.profile
Die Korn-Shell sucht nach Einlesen der systemweiten Initialisierungsdatei /etc/proim Homeverzeichnis des Benutzers nach einer Initialisierungsdatei mit dem Namen .profile. Wenn in dieser Datei eine weitere Datei mit Umgebungseinstellungen, die in der Regel .kshrc heißt, der Variablen ENV zugewiesen wurde, wird auch diese gelesen. Erst wenn alle in diesen Dateien enthaltenen Befehle ausgeführt wurden, erscheint das Promptzeichen der Shell auf dem Bildschirm und die KornShell wartet auf Befehle.
file
Die Datei .profile ist eine vom Benutzer erzeugte Initialisierungsdatei, die nur einmal von der Anmeldeshell ausgeführt wird und sich im Homeverzeichnis befindet. Mit Hilfe dieser Datei kann die Arbeitsumgebung angepasst und verändert werden. In der Regel werden in dieser Datei Umgebungsvariablen und Terminaleinstellungen definiert. Auch wenn eine Anwendung beim Anmelden gestartet werden soll, wird der entsprechende Befehl hier hinterlegt. Die Bourne-Again-Shell liest und verarbeitet nach der systemweiten Initialisierungsdatei /etc/profile beim Anmelden die Datei .bash_profile im Homeverzeichnis des Benutzers. Die Datei ~/.bashrc wird bei jedem neuen Aufruf einer Shell gelesen. Die Initialisierungdateien der Bourne-Again-Shell werden auf bestimmte Art ausgewertet. Es wird zwischen einer interaktiven und nicht interaktiven BourneAgain-Shell unterschieden. Eine interaktive Shell ist mit der Standardein- und Standardausgabe, also einer Konsole, verbunden. Beim Starten wertet die Bourne-Again-Shell den Rückgabewert des Befehls tty -s aus, um festzustellen, ob es sich um eine interaktive oder nicht interaktive Shell handelt. Bei einer Anmeldeshell wird zunächst die Initialisierungsdatei /etc/profile und dann entweder die Datei ~/.bash_profile oder ~/.bash_login oder ~/.profile gelesen, wenn eine davon vorhanden ist. Eine Shell, die keine Anmeldeshell ist, liest die Datei ~/.bashrc. Für eine nicht interaktive Bourne-Again-Shell, also zum Beispiel ein Shellskript, ist nur die Umgebungsvariable BASH_ENV von Bedeutung: Wenn diese eine Pfadangabe zu einer Datei enthält, wird diese gelesen und ausgeführt. Die Datei .bashrc bzw. .kshrc enthält in der Regel Variablen und Aliase der Shell. Häufig werden die folgenden Einstellungen in dieser Datei definiert:
쮿
Definitionen der Promptzeichen der Shell (PS1, PS2)
쮿
Alias-Definitionen
쮿
Shell-Funktionen
쮿
Angaben für die History-Variablen
쮿
Shell-Optionen
Wenn die Datei ~/.bash_profile nicht vorhanden ist, liest die Bourne-Again-Shell genau wie die Bourne- und Korn-Shell die Initialisierungsdatei .profile im Homeverzeichnis des Benutzers.
345
Grafische Benutzerverwaltung
magnum
Die Korn-Shell kann zusätzlich auch eine zweite Initialisierungsdatei des Benutzers interpretieren, die Datei ~/.kshrc in seinem Homeverzeichnis, wenn die Datei .profile eine Umgebungsvariable mit dem Namen ENV enthält. In diesem Fall wird als Nächstes die Datei ausgeführt, deren Name dieser Variablen zugeordnet ist, in der Regel lautet diese .kshrc. Die Dateien .bash_profile (für die Bourne-Again-Shell) und .profile (für die Bourne-, Korn- und gegebenenfalls die Bourne-Again-Shell) werden nur einmal von der Anmeldeshell oder beim Aufruf eines Konsolfensters ausgeführt. Die Dateien .bashrc (für die Bourne-Again-Shell) und .kshrc (für die Korn-Shell) werden jedes Mal ausgeführt, wenn eine Subshell der entsprechenden Shell gestartet wird. Sie enthalten in der Regel Definitionen von Variablen und Aliasen der Shell und Aktivierungen von Shell-Funktionen. Die C- und TC-Shell lesen statt der oben genannten Initialisierungsdateien die Dateien ~/.cshrc und ~/.login im Homeverzeichnis des Benutzers. Ist bei der TCShell anstelle der Datei ~/.cshrc die Datei ~/.tcshrc vorhanden, wird diese gelesen.
8.4.3
Initialisierungsdateien einlesen
Wenn Sie als Benutzer Ihre eigenen Initialisierungsdateien ändern, dann treten diese Änderungen in Kraft, wenn Sie sich das nächste Mal anmelden. Wenn Sie jedoch möchten, dass die durchgeführten Änderungen sofort wirksam werden, dann können Sie die Datei .profile bzw. .bashrc mit Hilfe des Punktbefehls (.) neu einlesen: $ . ~/.profile $ . ~/.bashrc
Alternativ und speziell bei der C- und TC-Shell lautet der Befehlsname um die Initialisierungsdateien neu einzulesen:
source,
% source ~/.cshrc % source ~/.login
8.5 Grafische Benutzerverwaltung In diesem Abschnitt erfahren Sie, wie Sie mit YaST oder KDE die Benutzer- und Gruppenverwaltung grafisch durchführen können. Dabei haben Sie fast alle Möglichkeiten, die Sie auch an der Befehlszeile haben.
8.5.1
KDE-Benutzerverwaltung
Die grafische Oberfläche KDE bietet eine eigene Benutzer- und Gruppenverwaltung mit dem Programm KUSER. Dieses Programm befindet sich oft im Hauptmenü unter der Option SYSTEM. Auch in KUSER kann man mit Hilfe von Registerkarten zwischen der Benutzer- und Gruppenverwaltung umschalten:
346
Kapitel 8 · Benutzer und Gruppen verwalten
Bild 8.1: Benutzerverwaltung mit KUser
Wenn Sie auf die Schaltfläche NEUER BENUTZER klicken, werden Sie aufgefordert, einen neuen Benutzernamen einzugeben:
Bild 8.2: Benutzernamen eingeben
Anschließend können Sie mit Hilfe von drei Registerkarten die Benutzereigenschaften definieren, wie zum Beispiel die UID, den vollständigen Namen, das Passwort usw.:
Bild 8.3: Benutzerinformationen hinterlegen
347
Grafische Benutzerverwaltung
magnum
Die mittlere Registerkarte bietet Möglichkeiten zur Passwortverwaltung des Benutzers, wie zum Beispiel die minimale und maximale Gültigkeit des Passworts, die Anzahl der Warntage vor Passwortablauf usw.:
Bild 8.4: Passworteinstellungen für einen Benutzer festlegen
In der letzten Registerkarte kann der Benutzer einer primären und mehreren sekundären Gruppen zugeordnet werden:
Bild 8.5: Gruppenzugehörigkeit festlegen
Die Änderung eines Benutzers erfolgt mit denselben Fenstern über die Schaltfläche BENUTZER ÄNDERN. Beim Löschen eines Benutzers mit Hilfe der Schaltfläche BENUTZER LÖSCHEN können Sie wählen, ob auch das Homeverzeichnis des Benutzers und dessen Postfach gelöscht werden sollen:
348
Kapitel 8 · Benutzer und Gruppen verwalten
Bild 8.6: Benutzer löschen
Beachten Sie, dass Sie alle anderen Dateien des Benutzers gegebenenfalls manuell löschen bzw. mit dem Befehl find suchen und löschen müssen. Durch Umschalten auf die Registerkarte GRUPPEN werden die Gruppen angezeigt:
Bild 8.7: Gruppen anzeigen
Wenn Sie auf die Schaltfläche GRUPPE ANLEGEN klicken, können Sie die GID, den Namen und die Mitglieder der Gruppe bearbeiten:
Bild 8.8: Gruppe anlegen
349
Grafische Benutzerverwaltung
magnum
Wenn Sie auf die Schaltfläche GRUPPE ÄNDERN klicken, können Sie die GID nicht mehr ändern, aber den Namen und die Mitglieder der Gruppe:
Bild 8.9: Gruppe ändern
Wenn Sie eine Gruppe markieren und die Schaltfläche GRUPPE LÖSCHEN wählen, erhalten Sie eine entsprechende Fehlermeldung, wenn die Gruppe noch Mitglieder hat:
Bild 8.10: Warnmeldung beim Löschen einer Gruppe
Wenn Sie eine Gruppe ohne Mitglieder löschen, erhalten Sie eine letzte Warnmeldung:
Bild 8.11: Warnmeldung beim Löschen einer Gruppe
8.5.2
Gruppenverwaltung mit YaST
Die grafische Benutzer- und Gruppenverwaltung wird durch ein einziges YastModul realisiert, zu dem es aber verschiedene Zugangsmöglichkeiten gibt, zum Beispiel für die Gruppenverwaltung über SICHERHEIT UND BENUTZER - GRUPPEN BEARBEITEN UND ANLEGEN. Die Gruppenverwaltung wird gestartet, Sie können aber jederzeit über die Auswahlmöglichkeiten BENUTZER und GRUPPEN zwischen diesen beiden wechseln:
350
Kapitel 8 · Benutzer und Gruppen verwalten
Bild 8.12: Gruppen in YaST anzeigen
Standardmäßig werden die lokalen Gruppen angezeigt. Über die Schaltfläche FILTER FESTLEGEN kann aber durch den benutzerdefinierten Filter die Anzeige von lokalen und Systemgruppen aktiviert werden:
Bild 8.13: Filter für die Gruppenanzeige aktivieren
Mit Hilfe der Schaltfläche HINZUFÜGEN können Sie eine neue Gruppe anlegen. Zuerst müssen Sie entscheiden, ob die neue Gruppe eine lokale oder eine Systemgruppe sein soll:
Bild 8.14: Gruppentyp wählen
351
Grafische Benutzerverwaltung
magnum
Im anschließend geöffneten Fenster können der Name und die GID der Gruppe, ein Gruppenpasswort (vergleiche Abschnitt 8.1.6) und Benutzer, die Mitglied der Gruppe sein sollen, ausgewählt werden:
Bild 8.15: Eine lokale Gruppe anlegen
Wenn Sie im Eingangsmenü der Gruppenverwaltungsfunktion auf die Schaltfläche BEARBEITEN klicken, können Sie dieselben Daten nochmals überarbeiten:
Bild 8.16: Gruppe bearbeiten
352
Kapitel 8 · Benutzer und Gruppen verwalten
Wenn Sie die Funktion LÖSCHEN wählen, erhalten Sie von YaST die Warnmeldung, dass die Gruppe nur gelöscht werden kann, wenn zuerst die Gruppenmitglieder gelöscht werden. Diese Meldung ist YaST-spezifisch und erscheint nicht beim Löschen an der Befehlszeile:
Bild 8.17: Warnmeldung beim Löschen einer Gruppe
Wenn die Gruppenmitglieder entfernt wurden, wird erst nach einer erneuten Rückfrage endgültig gelöscht:
Bild 8.18: Anforderung der Löschbestätigung
8.5.3
Benutzerverwaltung mit YaST
Wenn Sie im Eingangsmenü der Gruppenbearbeitung die Ansicht BENUTZER aktivieren, werden die lokalen Benutzer angezeigt. Die Ansicht SYSTEM- UND LOKALE BENUTZER kann mit Hilfe der Funktion FILTER FESTLEGEN aktiviert werden:
Bild 8.19: Benutzer anzeigen
353
Grafische Benutzerverwaltung
magnum
Beim Anlegen eines Benutzers können der vollständige Name, der Benutzername, das Passwort sowie Passwort- und Detaileinstellungen hinterlegt werden. In diesem Fenster ist es auch möglich, einen Benutzer zu deaktivieren bzw. wieder zu aktivieren:
Bild 8.20: Benutzer anlegen
Als Passwort sollte auf keinen Fall der Benutzername oder ein bekanntes Wort verwendet werden, daher erhalten Sie einen entsprechenden Warnhinweis. Obwohl Sie als root beim Anlegen der Benutzerpasswörter diese Warnungen ignorieren können, wird davon dringend abgeraten:
Bild 8.21: Sicheres Passwort wählen
Mit Hilfe der Schaltfläche PASSWORTEINSTELLUNGEN können Sie festlegen, wie viele Tage vor Passwortablauf eine Warnung erscheinen soll, wie viele Tage nach Passwortablauf noch eine Anmeldung möglich ist, wie lange das Passwort mindestens und wie lange höchstens gültig ist, und gegebenenfalls ein Ablaufdatum für das Passwort:
354
Kapitel 8 · Benutzer und Gruppen verwalten
Bild 8.22: Passworteinstellungen vornehmen
Die Schaltfläche DETAILS öffnet ein Dialogfenster, in dem weitere Eigenschaften zum Benutzerkonto hinterlegt werden können, wie zum Beispiel die UID, das Homeverzeichnis, die Anmeldeshell, die primäre und die sekundären Gruppen des Benutzers:
Bild 8.23: Benutzereigenschaften festlegen
355
Grafische Benutzerverwaltung
magnum
Die OPTIONEN FÜR EXPERTEN im ersten Fenster zur Benutzerverwaltung bieten folgende Möglichkeiten:
Bild 8.24: Optionen für Experten verwenden
Die Option STANDARDEINSTELLUNGEN FÜR NEUE BENUTZER legt dieselben Werte für einen neuen Benutzer fest wie der Befehl useradd -D. Dazu gehören die primäre und sekundären Gruppen, die Anmeldeshell, die Pfade für das Homeverzeichnis und das Verzeichnis mit den Vorlagen der Initialisierungsdateien, das Standardablaufdatum und die Anzahl der Tage nach Passwortablauf, an denen ein Benutzer sich noch anmelden kann:
Bild 8.25: Standardeinstellungen für neu anzulegende Benutzer
356
Kapitel 8 · Benutzer und Gruppen verwalten
Die Option PASSWORTVERSCHLÜSSELUNG bietet die Möglichkeit, einen Algorithmus für die Passwortverschlüsselung auszuwählen:
Bild 8.26: Passwortverschlüsselung wählen
Es gibt folgende Methoden für die Verschlüsselung des Passworts:
쮿
DES ist die Standardmethode unter Linux und funktioniert in allen Netzwerkumgebungen. Die Beschränkung ist aber, dass die Passwörter nicht mehr als acht Zeichen lang sein dürfen. Wenn die Kompatibilität zu anderen Systemen wichtig ist, sollte diese Verschlüsselung verwendet werden.
쮿
MD5 ermöglicht die Verwendung von längeren Passwörtern. Diese Methode unterstützen alle gängigen Linux-Distributionen, aber ältere Distributionen oder andere Systeme sind oft nicht MD5-kompatibel.
쮿
Blowfish ist MD5 ähnlich, verschlüsselt die Passwörter aber mit einem anderen Algorithmus, dessen Berechnung eine hohe CPU-Leistung benötigt. Dadurch ist das Knacken von Passwörtern unterstützt durch Wörterbücher schwieriger. Aber auch Blowfish wird nicht von allen Systemen unterstützt.
Diese Information wird bei SUSE Linux in der Datei /etc/default/passwd mit der Variablen CRYPT_FILES hinterlegt. Die Datei kann auch manuell editiert werden. Bei Fedora Core Linux kann die MD5-Verschlüsselung in der Datei /etc/pam.d/ passwd mit dem Eintrag password required md5 aktiviert werden. Die Aktivierung kann auch mit dem Tool /usr/bin/system-config-authentication durchgeführt werden. Unter Debian Linux ist es möglich, die MD5-Verschlüsselung durch den Eintrag der Datei /etc/login.defs zu aktivieren.
MD5_CRYPT_ENAB yes in
357
Grafische Benutzerverwaltung
magnum
Die Option AUTHENTIFIKATION UND BENUTZERQUELLEN bietet die Auswahl zwischen verschiedenen Zugriffsmöglichkeiten auf gemeinsam genutzte Ressourcen, wie zum Beispiel NIS, LDAP, Kerberos und Samba (vergleiche Kapitel 22):
Bild 8.27: Quellen für Benutzerdaten wählen
Die Option EINSTELLUNGEN FÜR DAS ANMELDEN UNTER KDM bietet die Möglichkeit bei privat genutzten Linux-Systemen, das System mit einer automatischen Anmeldung ohne Passwort für einen bestimmten Benutzer zu starten. Bei einem in einem Unternehmen genutzten Linux-Rechner sollte diese Option aus Sicherheitsgründen nicht verwendet werden:
Bild 8.28: Einstellungen für das Anmelden unter KDM
Die Option ÄNDERUNGEN NUN SCHREIBEN schreibt die durchgeführten Änderungen in die jeweiligen Konfigurationsdateien zurück:
358
Kapitel 8 · Benutzer und Gruppen verwalten
Bild 8.29: Änderungen der Benutzerkonfiguration speichern
8.5.4
Sicherheitseinstellungen mit YaST
Mit Hilfe des YAST-Moduls SICHERHEIT UND BENUTZER - EINSTELLUNGEN ZUR SICHERHEIT lassen sich verschiedene Einstellungen für die Systemsicherheit vornehmen, zum Beispiel für die Passwortsicherheit. Im ersten Fenster kann ein Sicherheitslevel oder eine benutzerdefinierte Einstellung gewählt werden:
Bild 8.30: Lokale Sicherheitskonfiguration einstellen
359
Grafische Benutzerverwaltung
magnum
Im nächsten Dialogfenster können Passworteinstellungen wie die Plausibilitätsprüfung von Passwörtern, die Verschlüsselungsmethode, die gewünschte Passwortlänge, die Warntage vor Passwortablauf sowie die maximale und minimale Gültigkeit des Passworts gewählt werden:
Bild 8.31: Passworteinstellungen vornehmen
Des Weiteren ist es möglich, Einstellungen für den Systemstart festzulegen, das heißt, was beim Betätigen der Tastenkombination (Strg)+(Alt)+(Del) passiert und wer das System herunterfahren darf:
Bild 8.32: Einstellungen für den Systemstart durchführen
Auch Einstellungen für das Anmelden am System können hier definiert werden, wie zum Beispiel wie viele Sekunden nach einer fehlerhaften Anmeldung gewartet
360
Kapitel 8 · Benutzer und Gruppen verwalten
wird (um das Ausprobieren von Passwörtern zu erschweren), ob diese fehlerhaften Versuche protokolliert werden usw.:
Bild 8.33: Einstellungen für das Anmelden festlegen
Die grafische Anmeldung von Remote sollten Sie aus Sicherheitsgründen nicht aktivieren! Die Erweiterung der Benutzerzahl bzw. die Reduzierung der Systembenutzerkennungen kann im folgenden Fenster durchgeführt werden. Die Systemkennungen werden nicht wirklich reduziert oder erweitert, sondern der Nummernkreis wird entsprechend umdefiniert. Darauf sollte aber verzichtet werden, wenn es für das System nicht unbedingt notwendig ist:
Bild 8.34: Nummernbereiche für UIDs und GIDs festlegen
361
Grafische Benutzerverwaltung
magnum
Schließlich gibt es im letzten Dialogfenster noch diverse Einstellungsmöglichkeiten zu Dateirechten, Aufrufmöglichkeiten für Skripte usw.:
Bild 8.35: Verschiedene Einstellungen für die Sicherheit durchführen
Die Einstellungen für die Rechte von bestimmten Systemdateien werden gemäß den Dateien /etc/permissions.secure oder /etc/permissions.easy definiert. Wenn SUSEconfig gestartet wird, werden die Dateirechte entsprechend den Einstellungen in diesen Dateien verwendet und versehentlich oder absichtlich fehlerhafte Rechte berichtigt. Die Einstellung EASY bedeutet, dass die meisten normalerweise nur für root lesbaren Systemdateien auch für andere Benutzer lesbar sind. SECURE heißt, dass bestimmte Systemdateien, wie zum Beispiel die Protokolldatei /var/log/messages, nur von root gelesen und einige Programme nur von root oder von Daemons gestartet werden können. PARANOID bedeutet, dass das System extrem sicher ist, zum Beispiel wird festgelegt, welche Benutzer X-Anwendungen (grafische Anwendungen und X-Window) und SetUID-Programme starten dürfen. Des Weiteren kann der Benutzer festgelegt werden, der das einmal täglich laufende Programm updatedb starten darf. Das Programm liest das vollständige Dateisystem und erstellt eine Datenbank für den Befehl locale. Mit dem Befehl locale können Sie die aktuelle Spracheinstellung ausgeben. Diese wird normalerweise während der Installation bei jeder der vorgestellten LinuxDistributionen ausgewählt. Die Sprache der grafischen Oberfläche KDE können Sie im KDE-Kontrollzentrum auswählen. Unter SUSE Linux können Sie die Sprache mit Hilfe von YaST im Menü System - Sprache wählen einstellen. Unter Debian GNU/Linux können Sie die Sprache nachträglich mit Hilfe von dpkg-reconfigure locales durchführen, die die Konfiguration in der Datei /etc/ locale.gen speichert. Die Einträge der Datei können auch manuell durchgeführt werden, wenn anschließend der Befehl locale.gen aufgerufen wird.
362
Kapitel 8 · Benutzer und Gruppen verwalten
Bei Fedora Core Linux kann die Sprache nach der Installation mit Hilfe der Datei /etc/sysconfig/i18n durchgeführt werden.
8.5.5
Fedora-Linux-Benutzerverwaltung
Fedora bietet unter der grafischen Oberfläche ebenfalls eine eigene Benutzer- und Gruppenverwaltung im Menü SYSTEMEINSTELLUNGEN - BENUTZER UND GRUPPEN an.
Bild 8.36: Fedora-Linux-Benutzerverwaltung
Mit BENUTZER HINZUFÜGEN können Sie einen neuen Benutzer anlegen. Fedora Core Linux schlägt vor, dass der Benutzer eine primäre Gruppe mit demselben Namen zugewiesen bekommt. Wenn Sie das nicht wünschen, können Sie die Option EINE PRIVATE GRUPPE FÜR DIESEN BENUTZER ERSTELLEN deaktivieren:
Bild 8.37: Neuen Benutzer anlegen
363
Grafische Benutzerverwaltung
magnum
Wenn Sie einen Benutzer markieren, können Sie ihn mit der Schaltfläche LÖSCHEN entfernen oder mit EIGENSCHAFTEN bearbeiten. Alternativ öffnet auch ein Doppelklick das Fenster BENUTZEREIGENSCHAFTEN. Hier können Sie zusätzlich zu den Benutzerdaten auch noch eine Befristung des Accounts aktivieren, Informationen zum Passwortablauf und die Zugehörigkeit zu anderen Gruppen definieren:
Bild 8.38: Benutzereigenschaften bearbeiten
Wenn Sie auf die Registerkarte GRUPPEN klicken, werden die Gruppen angezeigt.
Bild 8.39: Gruppen anzeigen
364
Kapitel 8 · Benutzer und Gruppen verwalten
Wenn Sie auf GRUPPE HINZUFÜGEN klicken, können Sie eine neue Gruppe anlegen:
Bild 8.40: Neue Gruppe anlegen
Wenn Sie eine Gruppe markieren, können Sie diese mit der Schaltfläche LÖSCHEN entfernen oder mit EIGENSCHAFTEN bearbeiten. Alternativ öffnet auch ein Doppelklick das Fenster GRUPPENEIGENSCHAFTEN. Hier können Sie zusätzlich zu den Gruppendaten auch noch weitere Mitglieder dieser Gruppe definieren:
Bild 8.41: Gruppeneigenschaften bearbeiten
365
9 Linux booten und herunterfahren »Das ist der Anfang vom Ende.« – William Shakespeare Ein Systemadministrator kann den Bootvorgang beeinflussen, indem er Run-Control-Skripte verändert, entfernt oder ergänzt (vergleiche Abschnitt 9.4.5). In diesem Kapitel wird zunächst der Bootvorgang erklärt, anschließend die Einflussmöglichkeiten des Administrators auf diesen Vorgang. Das Herunterfahren eines Linux-Systems ist bei privaten PCs oft auch einem einfachen Benutzer gestattet, bei einem Unternehmensrechner können die entsprechenden Befehle root vorbehalten bleiben.
9.1 Der Bootprozess Nach dem Einschalten eines Rechners laufen bestimmte Vorgänge ab, um das System zu starten und in einen funktionsfähigen und einsatzbereiten Zustand zu bringen. Dabei bildet das so genannte »Bootstrapping« oder auch kurz »Booten« das größte Problem, denn das Betriebssystem muss aktiviert werden, ohne dabei die Funktionen und Dienste des Betriebssystems selbst verwenden zu können. Diese Problematik wird dadurch gelöst, dass verschiedene Komponenten der Hardware, Firmware und Bootmanager zusammenwirken.
9.1.1
Der Power-on-self-Test (POST)
Wenn Sie das System einschalten, wird zuerst ein kurzer Hardwaretest vom BIOS gestartet. Diese Basisinitialisierung der Hardware (POST) wird von der im ROM des BIOS vorliegenden Firmware durchgeführt, indem die minimal notwendigen Hardwarekomponenten getestet, der Speicher eingebunden und verschiedene Hardwareeinstellungen initialisiert werden. Scheinen die Hardware und der Speicher in Ordnung zu sein, beginnt der automatische Bootvorgang, der in vier Hauptphasen abläuft.
9.1.2
Die BIOS-Phase
Diese Phase ist der hardwarenahe Teil des Bootens. Ein INTEL-Rechner ist mit einem BIOS und einem CMOS, das die Konfigurationsdaten enthält, ausgestattet. Aus dem CMOS werden die Angaben entnommen, in welcher Reihenfolge die Geräte auf ein bootfähiges System überprüft werden sollen. So kann zum Beispiel eingestellt werden, dass zuerst das CD-ROM-Laufwerk und dann erst die Festplatte durchsucht wird. Beim Starten eines Personalcomputers findet ein Selbsttest (Power-on-self-test) statt und anschließend wird die Partitionstabelle von den Festplatten in den Speicher gelesen. Er enthält die Aufteilung der Festplatte in Partitionen und die Information, welche Partition die aktive ist. Danach wird der Master Boot Record (MBR) gelesen, der in der Regel das Bootprogramm enthält. Dieser Bootmanager bietet eine Auswahl aus den Betriebssystemen, die sich auf den verschiedenen Partitionen der Festplatte befinden. Alternativ kann ein Bootloader statt im MBR der Festplatte auch in einen Bootsektor nur einer Partition geschrieben werden. Diese Methode kann sinnvoll sein, wenn mehrere Betriebssysteme auf einer Festplatte in unterschiedlichen Partitionen installiert wurden. Allerdings muss dann der MBR weiterhin von einem Boot-
367
magnum
Die Bootloader
manager belegt sein, denn von dort bootet der PC, und dieser Bootmanager muss Querverweise auf die Bootsektoren der Partitionen konfiguriert haben bzw. damit umgehen können. Bei diesem mehrstufigem Verfahren kann der Bootmanager im MBR ein anderer sein als der Bootmanager im Bootsektor der Festplatte. Wenn Sie zum Beispiel neben dem Linux noch eine Microsoft-Windows-Partition auf der Festplatte haben, dann wird der Bootmanager von Linux das MicrosoftWindows-System über den Bootsektor der Windows-Partition starten. Unter Linux gibt es zwei verbreitete Bootmanager oder so genannte Bootloader, zwischen denen bei den meisten Linux-Varianten während der Installation ausgewählt werden kann: LILO und GRUB. Jeder Bootloader hat seine eigene Konfigurationsdatei. GRUB ist der neuere von beiden und in einigen Punkten auch flexibler, zum Beispiel, wenn sich Ihre Partitionsdaten ändern. Wir empfehlen daher, GRUB als Bootloader zu verwenden. Überlegen Sie sich am besten vor der Installation, welchen Bootloader Sie bevorzugen. Ein späterer Wechsel oder Ändern der Konfiguration des Bootloaders ist mit den Befehlen grub oder lilo möglich (vergleiche Abschnitt 9.2). Bei SUSE Linux werden Sie dabei auch vom grafischen Tool YaST unterstützt.
9.1.3
Die Kernel-Initialisierungsphase
Nach der Auswahl des entsprechenden Betriebssystems, in unserem Fall Linux, wird dieses gestartet. Dazu sucht der Bootmanager auf der Festplatte nach der Datei mit dem Kernprogramm des Betriebssystems, im Linux Kernel genannt, und lädt und startet dieses Programm. Anschließend initialisiert sich der Kernel, gefolgt vom Laden der benötigten Kernel-Module. Der Kernel allokiert und initialisiert die benötigten Verwaltungsstrukturen und bringt das System in einen festgelegten Zustand, indem er den Prozess init startet. Dieser Prozess durchsucht die Datei /etc/inittab nach dem Default-Runlevel. Die zu diesem Runlevel gehörenden Run-Control-Skripte werden gelesen und starten ihrerseits weitere Prozesse. Damit wird jetzt das Gesamtsystem »Linux« gestartet und betriebsbereit gemacht. Nach Abschluss dieser Phase wird der Anmeldebildschirm oder die Anmeldeaufforderung angezeigt.
9.2 Die Bootloader Ein Bootloader lädt und startet den Kernel, der selbst wiederum direkt oder indirekt alle notwendigen Treiber integrieren muss, um auf die root-Partition zugreifen zu können. Bis zum Jahre 2003 war der am häufigsten unter Linux verwendete Bootloader der Linux Loader LILO, der aber in den vergangenen Jahren von GRUB (GRand Unified Bootloader) abgelöst und in vielen Linux-Distributionen zum standardmäßigen Bootmanager wurde, da er viel mehr Eigenschaften als LILO zur Verfügung stellt. Ein Wechsel von LILO nach GRUB und umgekehrt ist jederzeit möglich.
368
Kapitel 9 · Linux booten und herunterfahren
9.2.1
Der Bootloader lilo
Der Bootloader LILO kann für Multi-Boot-Systeme eingesetzt werden, wie zum Beispiel verschiedene Linux-Distributionen, DOS, OS/2 und Microsoft-WindowsSysteme. Beim Rechnerstart wird ein Boot-Prompt angezeigt, an dem das gewünschte System mit Hilfe der Taste (ÿ_) ausgewählt werden kann. LILO besteht aus zwei Teilen. Der erste Teil ist der so genannte First-Stage-Loader, der sich im Bootsektor einer Diskette, Festplatte oder Festplattenpartition befindet. Das Bootsektor-Programm lädt und startet mit Hilfe des BIOS den Second-Stage-Loader, der den Kernel lädt. Dazu liest es die notwendigen Sektoradressen aus der Datei /boot/map.
Bild 9.1: Der Bootloader LILO
Alle im Bootablauf eingesetzten Dateien und Programme sind für LILO eine willkürliche Ansammlung von Datensektoren. Das bedeutet, dass bei Veränderungen dieser Dateien, wie zum Beispiel beim Neukompilieren des Kernels oder Verschieben der entsprechenden Dateien im Dateisystem, LILO neu installiert werden muss.
Der Befehl lilo Dieser Befehl liest die Konfigurationsdatei /etc/lilo.conf, um Informationen über die zu startenden Kernel, Bildschirmeinstellungen, Bootplatte usw. zu erhalten, und konfiguriert mit diesen Daten den Bootloader lilo in den Master Boot Record hinein. Nach dem Lesen der Konfigurationsdatei werden vom Befehl die Informationen der Konfigurationsdatei in die physikalischen Festplattendaten codiert, das heißt, die Pfadangaben der Datei werden auf die physikalischem Blockadressen übersetzt. Diese Information ist beim Bootzeitpunkt sehr wichtig, weil es in diesem Moment noch kein aktives Dateisystem gibt, weshalb der Bootloader lilo nicht über Pfadangaben zu der Datei finden kann, sondern die direkten Blockadressen auf der Festplatte anspringt. Die notwendigen Informationen werden in einer Map-Datei hinterlegt. Verwechseln Sie den Befehl lilo nicht mit dem Bootloader lilo. Der Befehl dient lediglich zum Einrichten des Bootloaders, der Bootloader selbst ist ein kleines Maschinenprogramm, das direkt auf die Festplatte geschrieben wird.
369
magnum
Die Bootloader
Die Syntax des Befehls lautet: # lilo [-option(en)]
Um LILO zu installieren, genügt in der Regel ein Aufruf ohne Parameter, da alle wichtigen Konfigurationsdaten aus einer Konfigurationsdatei gelesen werden, in der Regel /etc/lilo.conf. Es können aber verschiedene Optionen verwendet werden. Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-A mastergerät [zahl]
Sucht nach der aktiven Partition auf dem angegebenen Mastergerät, zum Beispiel /dev/hda. Wenn eine Zahl zwischen 1 und 4 angegeben wird, wird die entsprechende Partition aktiviert.
-b bootgerät
Definiert das Bootgerät, zum Beispiel, wo der Bootloader installiert wird. Die Angabe -b /dev/hda legt den Master Boot Record fest und die Angabe -b /dev/ sdb5 bedeutet die erste erweiterte Partition auf der zweiten SCSI-Festplatte.
-B bitmapdatei
Definiert eine während des Bootens anzuzeigende Bitmapdatei
-c
Aktiviert die Komprimierung der Map, was das Booten etwas beschleunigt
-C datei
Angabe der Konfigurationsdatei, die der Befehl lilo verwendet. Standardmäßig ist das die Datei /etc/lilo.conf.
-d zeit
Definiert die Verzögerungszeit in Zehntelsekunden, bevor das erste Image automatisch gebootet wird
-D label
Verwendet den Kernel mit dem angegebenen Label anstelle des ersten Kernels in der Liste
-E datei.ext
Wenn es sich bei der Dateinamenserweiterung um .bmp handelt, wird die Datei als Bitmapgrafik in der Anweisung bitmap der Konfigurationsdatei verwendet. Wenn es sich bei der Dateinamenserweiterung um .dat handelt, wird die Datei als Konfigurationsdatei behandelt, die Parameter für eine Bitmapgrafik enthält.
-f tabelle
Definiert die Parameterdatei mit der Festplattengeometrie
-F
Überspringt die Bootsektorprüfung nach Dateisystemen
-g
Erzeugt geometrische Zylinder-/Kopf-/Sektor-Festplattenadressen und ist auf 1023 Zylinder beschränkt
-i bootloader
Definiert eine Datei, die als neuer Bootloader verwendet, also in den Bootsektor geschrieben wird.
-I label
Das Label des gestarteten Kernels kann nach dem Start in der Umgebungsvariablen BOOT_IMAGE gefunden werden oder in der Pseudodatei /proc/cmdline.
-l
Erzeugt 24-Bit lineare Sektoradressen anstelle von Zylinder-/Kopf-/SektorAdressen
-L
Erzeugt 32-Bit logische Blockadressen anstelle von Zylinder-/Kopf-/SektorAdressen und ermöglicht einen Zugriff auf alle Partitionen auf Festplatten mit mehr als 1024 Zylindern
-m map-datei
Verwendet die angegebene Map-Datei anstelle der Standard-Map
Tab. 9.1: Die Optionen des Befehls lilo
370
Kapitel 9 · Linux booten und herunterfahren
Option
Beschreibung
-M mastergerät [mbr-datei]
Installiert einen Master Boot Record auf dem als Mastergerät angegebenen Gerät und kann dabei die angegebene MBR-Datei verwenden
-p
Benötigt einen interaktiven Eintrag aller Passwörter, die als »« in der Konfigurationsdatei angegeben wurden
-P {fix| ignore}
Bereinigt oder ignoriert beschädigte Partitionstabellen, das heißt, Partitionstabellen mit linearen und Zylinder-/Kopf-/Sektor-Adressen, die nicht übereinstimmen.
-q
Listet die aktuell gemappten Dateien auf
-r rootverz
Ändert das Wurzelverzeichnis auf das angegebene Verzeichnis, das aber ein Verzeichnis /dev enthalten muss
-R befehlszeile
Diese Option definiert den Standardbefehl für den Bootloader, der beim nächsten Mal ausgeführt werden soll.
-s datei
Wenn lilo den Bootsektor überschreibt, bewahrt er die alten Inhalte in der Datei /boot/boot.gerät oder in der hier angegebenen Datei auf.
-S datei
Normalerweise überschreibt lilo eine bereits vorhandene Backupdatei nicht. Diese Option erlaubt das Überschreiben.
-t
Testmodus. Gibt zusammen mit -v detailliert aus, was bei einer reellen Durchführung geschehen würde.
-T option
Gibt eine der folgenden Systeminformationen aus: help
eine Liste von Diagnosemeldungen ChRul
eine Liste der Partitionstypen EBDA
eine Liste der Informationen des erweiterten BIOS-Datenbereichs geom
eine Liste der Gerätegeometrie für alle Laufwerke table= laufwerk
eine Liste der primären Partitionstabelle, zum Beispiel table=/dev/sda video
eine Liste der für den Bootloader verfügbaren Grafikmodi -u [gerät]
Deinstalliert lilo durch Zurückkopieren des gesicherten Bootsektorblocks und prüft den Zeitstempel
-U [gerät]
Deinstalliert lilo durch Zurückkopieren des gesicherten Bootsektorblocks, prüft den Zeitstempel aber nicht
-v
Ausführlicher Modus
-w
Unterdrückt Warnmeldungen
Tab. 9.1: Die Optionen des Befehls lilo (Forts.)
371
magnum
Die Bootloader
Im folgenden Beispiel wird
lilo im
Testmodus aufgerufen:
# lilo -t Added linux * Added failsafe Added windows Added memtest86 The boot sector and the map file have *NOT* been altered.
Die Datei /etc/lilo.conf Der Bootloader lilo verwendet die Konfigurationsdatei /etc/lilo.conf, die aus zwei Teilen besteht. Der erste globale Teil legt das generelle Verhalten von LILO fest. Dagegen sind im zweiten Teil, der mit dem Schlüsselwort image oder other beginnt, alle Betriebssysteme aufgelistet, die von LILO gestartet werden können. Diese Trennung muss aber nicht streng eingehalten werden. Die Datei kann zum Beispiel wie folgt aufgebaut sein: $ cat /etc/lilo.conf ... boot = /dev/hda change-rules reset read-only menu-scheme = Wg:kw:Wg:Wg lba32 prompt timeout = 80 message = /boot/message default = linux image = /boot/vmlinuz label = linux root = /dev/hda2 vga = 788 initrd = /boot/initrd image = /boot/vmlinuz.suse label = failsafe root = /dev/hda2 vga = 788 initrd = /boot/initrd.suse append = "ide=nodma apm=off acpi=off" optional other = /dev/hda1 label = windows image = /boot/memtest.bin label = memtest86
Diese Datei gibt verschiedene Parameter, wie zum Beispiel append, root oder vga, während des Bootens an den Kernel weiter. Dies ist sowohl im globalen Einführungsteil als auch in einem einzelnen Image-Abschnitt möglich.
372
Kapitel 9 · Linux booten und herunterfahren
Wenn die Konfigurationsdatei geändert wurde, muss der Befehl /sbin/lilo aufgerufen werden, damit die Änderungen dem lilo übergeben werden. Auch wenn die physische Position des Kernels auf der Festplatte sich geändert hat, also die KernelDatei nicht mehr an der exakt gleichen Position steht, zum Beispiel weil ein Partitionswechsel oder eine Verschiebung der Partition oder eine Kernel-Kompilierung stattgefunden hat, ist es notwendig, den Befehl aufzurufen, da sonst beim nächsten Start lilo die Kernel-Datei nicht mehr findet. Zu den wichtigsten Parametern gehören: Parameter
Beschreibung
boot=partition
Dieser Parameter definiert, auf welchem Medium der Bootsektor liegt. Dies kann zum Beispiel bei einem PC mit IDE-Festplatte das Gerät /dev/ hda sein. Ohne diese Angabe wird der Bootsektor auf die aktuelle rootPartition geschrieben.
default=name
Angabe des standardmäßig zu startenden Betriebssystems; ohne diese Angabe wird das Betriebssystem gestartet, das als Erstes in der Konfigurationsdatei aufgeführt ist.
delay=zeit
Angabe der Zeit in Zehntelsekunden, die gewartet wird, ob auf eine Taste zur Ausgabe des Boot-Prompts gedrückt wird. Nach dieser Zeit lädt LILO automatisch das erste hinterlegte Kernel-Image, wenn nicht der Parameter prompt verwendet wird.
image=kerneldatei
Zusammen mit den Parametern label und root bestimmt dieser Parameter die Kernel-Datei, die das Bootmenü anbietet. Jeder Kernel, das heißt also, jedes Betriebssystem muss einen eigenen Eintrag erhalten. Alle Einträge bis zur nächsten Angabe image oder bis zum Dateiende gelten für die vorangestellte Kernel-Datei. Es gibt folgende kernelspezifische Einträge: append=string
Angabe einer Zeichenkette, die bei jedem Start dieses Kernel-Images an die Befehlszeile angehängt wird.
label=name
Mit diesem Parameter kann der Text definiert werden, mit dem eines der zu bootenden Betriebssysteme im Auswahlmenü angezeigt wird.
read-only
Dieser Parameter legt fest, dass das root-Dateisystem nur lesbar gemountet wird. In der Regel wird dieses Dateisystem anschließend von einer anderen Startprozedur schreibbar gemountet.
root= rootfilesystem
Dieser Parameter muss hinter dem Parameter image stehen. Er definiert das root-Gerät für das Betriebssystem. Die Angabe current anstelle eines Gerätenamens bedeutet, dass die aktuelle root-Partition verwendet wird. Ohne diesen Eintrag wird die beim Übersetzen des Kernels definierte root-Partition verwendet.
vga=wert
Angabe des Textmodus, in dem der Kernel gestartet wird. normal bedeutet 80 x 25 Zeichen, extended 80 x 50 Zeichen und ask zeigt ein Menü mit den verfügbaren Videomodi an und lässt eine Auswahl daraus zu. Ohne diesen Eintrag wird mit dem in der Kernel-Datei festgelegten Videomodus gestartet, der sich mit dem Befehl rdev einstellen lässt.
Tab. 9.2: Die Bootparameter des Befehls lilo
373
magnum
Die Bootloader
Parameter
Beschreibung
install=bootsektor
Mit diesem Parameter wird die Datei bestimmt, die als Bootsektor installiert wird. Standardeinstellung ist /boot/boot.b.
loader=chainloader
In einer Sektion other kann mit der Angabe loader ein Programm angegeben werden, mit dessen Hilfe spezielle Einstellungen zum Umschalten der Betriebssysteme durchgeführt werden können. Standardmäßig wird chain.b verwendet, das die Steuerung an den sekundären Bootloader eines fremden Betriebssystems übergibt.
mandatory
Mit dieser Option gilt das Passwort des aktuellen Images auch für alle anderen Images.
map=datei
Mit diesem Parameter kann gesteuert werden, dass eine andere Map-Datei als die standardmäßige /boot/map verwendet wird.
message=datei
Angabe der Datei, die eine auszugebende Meldung enthält
other=gerät
Dieser Parameter funktioniert wie der Parameter image, wird aber für andere Betriebssysteme angewandt, wie zum Beispiel Microsoft Windows.
password
Mit Hilfe dieses Parameters kann der Zugriff auf ein Image beschränkt werden, indem für dieses ein eigenes Passwort definiert wird. In diesem Fall sollte /etc/lilo.conf nur für root les- und schreibbar sein.
prompt
Dieser Parameter bewirkt, dass dem Benutzer beim Starten des Systems ein Bootmenü zur Auswahl angeboten wird. Ohne diesen Parameter kann der Benutzer das Bootmenü mit Hilfe der Taste (ª), (Strg) oder (Alt) aufrufen.
restricted
Eine Passwortabfrage findet nur statt, wenn der Kernel mit weiteren Parametern aufgerufen wird.
table=gerät
Angabe der Festplatte, die die Partitionstabelle für ein fremdes Betriebssystem enthält
timeout=zeit
Dieser Parameter bestimmt, in welcher Zeitspanne (in Zehntelsekunden) der Benutzer das Betriebssystem auswählen kann, bevor die Standardeinstellung gewählt wird. Ohne diesen Parameter bootet LILO nicht weiter, wenn keine Auswahl erfolgt.
Tab. 9.2: Die Bootparameter des Befehls lilo (Forts.)
374
Kapitel 9 · Linux booten und herunterfahren
9.2.2
LILO-Konfiguration über YaST
Die LILO-Konfiguration kann bei SUSE Linux auch über YAST vorgenommen werden. Dazu muss im Menü SYSTEM die Option KONFIGURATION DES BOOTLOADERS gestartet werden. Im ersten Dialogfenster werden alle Konfigurationsmöglichkeiten angezeigt, die über die Schaltfläche BEARBEITEN geändert werden können:
Bild 9.2: Bootloader konfigurieren
Durch die Auswahl von BOOTLOADER-TYP aus der angezeigten Liste und anschließend der Schaltfläche BEARBEITEN kann zwischen den Bootloadern GRUB und LILO gewechselt werden:
Bild 9.3: Bootloader wählen
375
Die Bootloader
magnum
Anschließend können die einzelnen Einstellungen zum ausgewählten Bootloader über BEARBEITEN verändert werden, zum Beispiel der ORT DES BOOTLOADERS:
Bild 9.4: Ort des Bootloaders festlegen
Auch die Abschnitte der Konfigurationsdatei können Sie hier verwalten, wenn Sie die Option markieren und auf BEARBEITEN klicken:
Bild 9.5: Abschnittsverwaltung von LILO
376
Kapitel 9 · Linux booten und herunterfahren
Über die Schaltfläche KONFIGURATIONSDATEI BEARBEITEN lässt sich die Datei /etc/ lilo.conf editieren:
Bild 9.6: Editieren von /etc/lilo.conf
9.2.3
Der Bootloader GRUB
GRUB (GRand Unified Bootloader) übernimmt als Bootloader die Aufgabe, nach dem Einschalten des Rechners die Steuerung an den Kernel zu übergeben. Der Kernel initialisiert anschließend über entsprechende Treiber die weitere Hardware des Betriebssystems. GRUB kann viele unterschiedliche Betriebssysteme laden. Wenn ein Betriebssystem nicht direkt von GRUB unterstützt wird, ist es möglich, dieses von GRUB über einen so genannten »Chain-Bootloader« zu laden. Ab SUSE Linux 8.1 hat sich das Bootmanagerkonzept grundlegend geändert, so dass bei einer Neuinstallation nun als Bootloader GRUB anstelle von LILO installiert wird. Dies hat folgende Gründe:
쮿
GRUB kann bei Bedarf noch vor dem Booten eine betriebssystemähnliche Umgebung zur Verfügung stellen.
쮿
GRUB kann viele verschiedene Betriebssysteme booten, das heißt außer Linux noch Windows, OS/2, BeOS und einige Unix-Systeme.
쮿
GRUB greift direkt auf Dateisysteme zu, dadurch ist es nicht nötig, GRUB neu zu installieren, wenn die Bootloader-Konfiguration oder der Kernel geändert wird.
쮿
Es ist möglich, auf Daten noch vor dem Bootvorgang zuzugreifen.
377
Die Bootloader
magnum
쮿
GRUB kann bei Bedarf die zum Booten erforderlichen Dateien über das Netzwerk laden.
쮿
Bei Terminals ohne Bildschirm stellt GRUB eine Kontrolle über die serielle Leitung zur Verfügung.
Wie der Bootloader LILO besteht auch GRUB aus zwei Stufen: eine erste Stufe mit 512 Byte Größe, die in den MBR oder den Bootsektor einer Partition geschrieben wird, und eine größere zweite Stufe, die im Anschluss geladen wird und den eigentlichen Programmcode enthält. GRUB kann im Unterschied zu LILO mehrere Dateisysteme direkt unterstützen. Dazu gehören alle Dateisysteme, die unter Linux verwendet werden können, und das Dateisystem vfat. Da GRUB noch vor dem Booten auf das Dateisystem zugreift, muss GRUB nach einer Änderung seiner Konfigurationsdatei nicht neu installiert werden, sondern liest beim Booten den Dateiinhalt einfach neu ein. GRUB findet auch einen neu installierten Kernel (/boot/vmlinuz) selbständig. Die physikalische Lage des Kernels ist für GRUB nicht von Bedeutung, es müssen nur die Partition und der Pfad des zu bootenden Kernels in der Konfigurationsdatei korrekt angegeben werden. GRUB bietet außerdem die Möglichkeit, alle Bootparameter noch vor dem Booten zu editieren. Dies ist hilfreich, wenn die Konfigurationsdatei fehlerhaft editiert wurde. Die Bootbefehle können außerdem in eine Art Eingabeaufforderung eingegeben werden, wodurch auch Betriebssysteme gebootet werden können, für die es noch keinen Eintrag im Bootmenü gibt. Beim Booten des Rechners läuft GRUB in zwei Stufen ab: 1. Laden der ersten Stufe von GRUB: Die erste Stufe von GRUB befindet sich nach der Installation von Linux im MBR (Master Boot Record), im Bootsektor einer Festplattenpartition oder im Bootsektor einer Diskette. Sie muss sehr klein sein, da im MBR oder den Bootsektoren nur wenig Platz vorhanden ist. Die einzige Aufgabe dieser Stufe besteht darin, die zweite Stufe von GRUB zu laden. 2. Laden der zweiten Stufe von GRUB: Diese Stufe stellt die wichtigen Funktionen des Bootloaders bereit, wie zum Beispiel das Auswahlmenü. Die Datei der zweiten Stufe befindet sich in /boot/grub/ stage2. GRUB besitzt inzwischen – ganz genau genommen – sogar drei Stufen, da die Stufe 1.5 eingeführt wurde. Diese Stufe behebt das Problem, dass GRUB nach einem Verschieben oder Ändern der stage2-Datei nicht mehr booten konnte. Die Zwischenstufe 1.5 liegt auf den Sektoren zwischen dem MBR und dem ersten Sektor auf der ersten Partition und kann genau ein Dateisystem lesen, zurzeit die Dateisysteme FAT, Minix, ext2, reiserfs, jfs und xfs. Es gibt nun keine Probleme mehr bei veränderten oder verschobenen stage2-Dateien, denn in diesem Sektor befindet sich genau die Version, die das entsprechende Dateisystem auf der Partition unterstützt. Das bedeutet, dass Sie nicht einfach den MBR auf eine andere Festplatte oder Partition kopieren können, um diese GRUB-fähig zu machen, sondern stattdessen den Befehl grub-install verwenden müssen, damit die Stufe 1.5 nicht fehlt.
378
Kapitel 9 · Linux booten und herunterfahren
Der Befehl grub Dieser Befehl liest die drei Konfigurationsdateien /etc/grub.conf, device.map und menu.lst, um Bootloader-Informationen zu erhalten und den Bootloader grub zu installieren, also in den Bootsektor zu schreiben. Der Bootloader grub ist intelligent genug, um einige Dateisysteme wie ext3 direkt lesen zu können, und kann daher wichtige Angaben wie zum Beispiel die Lage des Kernels direkt in der logischen Pfadangabe des Dateisystems verarbeiten. Für diese Dateisysteme ist folglich keine Umsetzung in physikalische Blockadressen notwendig. Das hat den Vorteil, dass grub auch noch booten kann, wenn sich die physikalische Lage des Kernels verändert, zum Beispiel, weil er neu kompiliert wurde oder weil die Partitionen mit einem Partitionsmanager verschoben wurden. Die Syntax des Befehls lautet: # grub [-option(en)]
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
--batch
Aktiviert den Batchmodus für nicht interaktiven Gebrauch
--boot-drive=laufwerk
Definiert das Bootlaufwerk der zweiten Bootstufe, der Standard ist 0x0
--config-file=datei
Definiert die Konfigurationsdatei der zweiten Bootstufe, der Standard ist /boot/grub/menu.lst
--device-map=datei
Verwendet die angegebene Geräte-Map-Datei
--hold
Wartet, bis ein Debugger verwendet wird
--install-partition=part Definiert die Installationspartition der zweiten Bootstufe, der Standard ist 0x20000 --no-config-file
Verwendet die Konfigurationsdatei nicht
--no-floppy
Verwendet kein Diskettenlaufwerk
--preset-menu
Verwendet das voreingestellte Menü
--probe-second-floppy
Testet das zweite Diskettenlaufwerk
--read-only
Nur Lese-Modus; es wird nichts auf die Geräte geschrieben
--verbose
Ausführlicher Modus
Tab. 9.3: Die Optionen des Befehls grub
379
magnum
Die Bootloader
grub kann vor dem Booten an der Boot-Befehlszeile verschiedene Befehle verarbeiten. Zu den wichtigsten Befehlen gehören:
Parameter
Beschreibung
boot
Das Betriebssystem starten
bootp
Ein Netzwerkgerät via BOOTP initialisieren
blocklist
Eine Blocklistennotation einer Datei einholen
cat
Den Inhalt einer Datei anzeigen
chainloader
Einen weiteren Bootloader laden
cmp
Zwei Dateien vergleichen
color
Die Menü-Schnittstelle in Farbe darstellen
configfile
Eine Konfigurationsdatei laden
debug
Das Debugging-Flag aktivieren
device
Ein Gerät als Laufwerk angeben
dhcp
Ein Netzwerkgerät via DHCP initialisieren
find
Eine Datei suchen
fstest
Ein Dateisystem testen
geometry
Die Geometrie eines Laufwerks manipulieren
halt
Den Computer herunterfahren
hide
Eine Partition verstecken
ifconfig
Ein Netzwerkgerät manuell konfigurieren
install
GRUB installieren
ioprobe
Ein-/Ausgabeports testen, die für ein Gerät verwendet werden
kernel
Einen Kernel laden
lock
Einen Menüeintrag sperren
makeactive
Eine Partition aktivieren
map
Ein Gerät auf ein anderes mappen
module
Ein Modul laden
modulnounzip
Ein Modul laden, ohne es zu dekomprimieren
partnew
Eine primäre Partition einrichten
parttype
Den Typ einer Partition ändern
Tab. 9.4: Befehle des Bootloaders grub
380
Kapitel 9 · Linux booten und herunterfahren
Parameter
Beschreibung
password
Ein Passwort für die Menü-Schnittstelle festlegen
pause
Auf eine Tastatureingabe warten
quit
Das Programm beenden
rarp
Ein Netzwerkgerät via RARP initialisieren
reboot
Den Computer neu starten
read
Daten aus dem Speicher lesen
root
Das root-Gerät für GRUB einstellen
savedefault
Den aktuellen Eintrag als Standardeintrag speichern
serial
Ein serielles Gerät einrichten
setup
Die Installation von GRUB automatisch aufsetzen
terminal
Ein Terminal wählen
terminfo
Escape-Sequenzen für ein Terminal festlegen
tftpserver
Einen TFTP-Server festlegen
testload
Eine Datei laden, um ein Dateisystem zu testen
Tab. 9.4: Befehle des Bootloaders grub (Forts.)
Die Dateien des Bootloaders GRUB GRUB besitzt eine Konfigurationsdatei /boot/grub/menu.lst und die Datei /boot/grub/ in der die Massenspeichergeräte den BIOS-Gerätenamen zugeordnet sind, sowie die Datei /etc/grub.conf, die hauptsächlich von YAST benutzt wird.
device.map,
Wenn GRUB nach dem Booten auf dem Bildschirm erscheint, kann ein Menüpunkt ausgewählt werden, um das gewünschte Betriebssystem zu starten. Für Linux-Systeme ist es möglich, Bootparameter einzufügen. GRUB bietet außerdem die Möglichkeit, mit dem Drücken auf die Taste (ESC) den Auswahlbereich zu verlassen und anschließend einzelne Menüeinträge temporär zu editieren.
Die Konfigurationsdatei /boot/grub/menu.lst Nach der Installation ist die Datei /boot/grub/menu.lst die wichtigste Konfigurationsdatei von GRUB, denn sie enthält alle Informationen zu den Partitionen und Betriebssystemen, die mit GRUB gestartet werden können. GRUB verwendet allerdings eigene Bezeichnungen für Festplatten und Partitionen und nicht die unter Linux gewohnten Gerätenamen, wie zum Beispiel /dev/hda1. Das Diskettenlaufwerk heißt fd0 und die Festplatten heißen hdx. Die Partitionsbezeichnung wird durch Komma getrennt an diesen Namen angehängt: hd0,0 ist die erste Partition auf der ersten Festplatte.
381
magnum
Die Bootloader
Weitere Beispiele für Gerätenamen von GRUB sind: Gerät
Beschreibung
fd0
Diskettenlaufwerk
hd0
Erste Festplatte im System (Bootplatte)
hd1
Zweite Festplatte
hd0,0
Erste Partition der ersten Festplatte
hd0,1
Zweite Partition der ersten Festplatte
Tab. 9.5: Gerätenamen des Bootloaders grub
Bei der Nummerierung der Partitionen werden die vier primären Partitionen mit 0 bis 3 und die logischen Partitionen ab 4 nummeriert: Gerät
Beschreibung
hd0,0
Erste primäre Partition der ersten Festplatte
hd0,1
Zweite primäre Partition
hd0,2
Dritte primäre Partition
hd0,3
Vierte primäre, in der Regel erweiterte Partition
hd0,4
Erste logische Partition
hd0,5
Zweite logische Partition usw.
Tab. 9.6: Gerätenamen des Bootloaders grub
Bei der Bezeichnung der Festplatten unterscheidet GRUB nicht zwischen IDE, SCSI oder sonstigen Geräten. Alle Festplatten, die vom BIOS oder weiteren Controllern erkannt werden, werden einfach der Bootreihenfolge nach durchnummeriert. Das folgende Beispiel zeigt eine Konfigurationsdatei /boot/grub/menu.lst mit der Linux-Bootpartition /dev/hda5, der Root-Partition /dev/hda7 und einem WindowsBetriebssystem auf /dev/hda1: gfxmenu (hd0,4)/message color white/blue black/light-gray default 0 timeout 8 title linux kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 initrd (hd0,4)/initrd title windows root (hd0,0) makeactive chainloader +1 title floppy root (fd0) chainloader +1
382
Kapitel 9 · Linux booten und herunterfahren
title failsafe kernel (hd0,4)/vmlinuz.shipped root=/dev/hda7 ide=nodma apm=off acpi=off vga=normal nosmp maxcpus=0 3 initrd (hd0,4)/initrd.shipped
Die ersten beiden Zeilen betreffen die Konfiguration des Auswahlmenüs: Das Hintergrundbild mit der Bezeichnung message befindet sich auf /dev/hda5 und der Vordergrund soll weiß, der Hintergrund blau usw. sein. Der Eintrag default 0 bedeutet, dass der erste Menüeintrag title linux standardmäßig gebootet wird. Der Timeout für die Auswahl beträgt 8 Sekunden. Mit dem ersten Eintrag title linux wird Linux gebootet. Der Linux-Kernel liegt auf der ersten Festplatte in der ersten logischen Partition hd0,4 und heißt vmlinuz. Auch initrd befindet sich auf der ersten Festplatte in der ersten logischen Partition. Mit dem zweiten Abschnitt wird Microsoft Windows von der ersten Partition der ersten Festplatte hd0,0 gestartet. Die Option makeactive bedeutet, dass Windows nur von einer sichtbaren aktiven Partition gestartet werden kann. Durch den Eintrag chainloader +1 wird der erste Sektor der angegebenen Partition ausgelesen und ausgeführt. Mit Hilfe des nächsten Abschnitts kann ein Betriebssystem von einer Diskette gestartet werden, ohne dass das BIOS geändert werden muss. Im letzten Abschnitt kann Linux im »failsafe«-Modus gestartet werden. Bei den meisten aktuellen Linux-Distributionen wird die Datei menu.lst automatisch erzeugt. Die Datei enthält Kommentare, in denen die automatisch generierten Einträge detaillierter konfiguriert werden können.
Die Map-Datei /boot/grub/device.map Die Datei /boot/grub/device.map ist die zweite wichtige Konfigurationsdatei für GRUB, die aber in der Regel nur bei Bootproblemen manuell editiert werden muss. In einem System, in dem sich Festplatten an unterschiedlichen Controllern befinden, zum Beispiel IDE- und SCSI-Platten, muss GRUB durch Berechnung die Bootreihenfolge ermitteln, ob von IDE- oder SCSI-Festplatte gebootet wird. Das Ergebnis schreibt GRUB in die Datei /boot/grub/device.map. Diese kann zum Beispiel wie folgt aussehen, wenn im BIOS IDE vor SCSI in der Bootreihenfolge definiert wurde: (fd0) (hd0) (hd1) (hd2) (hd3)
/dev/fd0 /dev/hda /dev/hdb /dev/sda /dev/sdb
Sollte es notwendig sein, die Datei zu ändern, muss anschließend folgender Befehl gestartet werden, um GRUB neu zu installieren: # grub --batch --device-map=/boot/grub/device.map < /etc/grub.conf
Die Option --device-map bedeutet, dass GRUB die vorhandene Map-Datei liest.
383
magnum
Die Bootloader
Die Datei /etc/grub.conf Der Bootloader grub verwendet die Konfigurationsdatei kann zum Beispiel wie folgt aufgebaut sein:
/etc/grub.conf.
Die Datei
$ cat /etc/grub.conf root (hd0,1) install --stage2=/boot/grub/stage2 /boot/grub/stage1 d (hd0) /boot/grub/stage2 0x8000 (hd0,1)/boot/grub/menu.lst quit
Der Eintrag root mountet die Partition, auf der sich die GRUB-Dateien befinden. Der Befehl install installiert GRUB, in diesem Fall wird die Datei stage1 in den MBR der ersten Festplatte installiert: d (hd0). Die Datei stage2 wird in die Speicheradresse 0x8000 geladen: /grub/stage2 0x8000. Der Eintrag (hd0,1)/boot/grub/menu.lst gibt an, wo sich die Menüdatei befindet.
9.2.4
GRUB-Konfiguration über YaST
Die GRUB-Konfiguration kann bei SUSE Linux auch über YAST vorgenommen werden. Dazu muss im Menü SYSTEM die Option KONFIGURATION DES BOOTLOADERS gestartet werden. Im ersten Dialogfenster werden alle Konfigurationsmöglichkeiten angezeigt, die über die Schaltfläche BEARBEITEN geändert werden können:
Bild 9.7: Bootloader konfigurieren
Durch die Auswahl von BOOTLOADER-TYP aus der angezeigten Liste und anschließend der Schaltfläche BEARBEITEN kann zwischen den Bootloadern GRUB und LILO gewechselt werden. Anschließend können die einzelnen Einstellungen zum ausgewählten Bootloader über BEARBEITEN verändert werden, zum Beispiel der ORT DES BOOTLOADERS.
384
Kapitel 9 · Linux booten und herunterfahren
Über die Schaltfläche KONFIGURATIONSDATEI BEARBEITEN lassen sich die Dateien von GRUB editieren, zum Beispiel /boot/grub/device.map:
Bild 9.8: Editieren der GRUB-Datei /boot/grub/device.map
Auch die Dateien /boot/grub/menu.lst und über das Pulldown-Menü editieren:
/etc/grub.conf
lassen sich nach Auswahl
Bild 9.9: Editieren der GRUB-Datei /etc/grub.conf
385
Bootsektor sichern und wiederherstellen
magnum
Mit Hilfe der Schaltfläche HINZUFÜGEN lassen sich Bootoptionen konfigurieren:
Bild 9.10: Bootoptionen konfigurieren
9.3 Bootsektor sichern und wiederherstellen Sie können den Master Boot Record (MBR) jederzeit sichern und diese Sicherung bei einem defekten MBR verwenden, um den Bootsektor wiederherzustellen. Die Sicherung muss allerdings auf einem anderen Datenträger stattfinden, denn bei beschädigtem MBR ist es in der Regel nicht mehr möglich, die betroffene Festplatte zu booten. In diesem Beispiel wird er auf einen USB-Stick gesichert (Sie sollten den Gerätenamen des USB-Sticks durch den Gerätenamen ersetzen, den Ihr System für den USB-Stick verwendet): # dd if=/dev/hda of=/dev/sda1/hda.mbr bs=512 count=1
Der Befehl dd wird ausführlich in Kapitel 17 beschrieben. Sollte Ihr MBR tatsächlich defekt sein, können Sie nun zum Beispiel mit einer KNOPPIX-CD-ROM booten (siehe Anweisungen im nächsten Abschnitt) und die Sicherung des MBRs wie folgt zurückspielen: $ dd if=/dev/sda1/hda.mbr of=/dev/hda bs=512 count=1
Wenn Sie keine Sicherung des Bootsektors haben, ist es eventuell trotzdem möglich, mit Knoppix und dem Programm testdisk einen funktionsfähigen MBR zu erzeugen. Gehen Sie wie folgt vor: Legen Sie die KNOPPIX-CD-ROM in das Laufwerk und vergewissern Sie sich, dass Ihre BIOS-Einstellung ein Booten von CD-ROM ermöglicht. Öffnen Sie ein Terminalfenster, sobald die grafische Oberfläche von KDE gestartet ist. Geben Sie den Befehl sudo
testdisk ein.
Wählen Sie mit den Pfeiltasten die Festplatte mit dem MBR aus (in der Regel /dev/ hda) und den Menüpunkt MBRCODE. Das Programm überschreibt damit den Sektor Ihrer Festplatte, der zum Booten der Betriebssysteme notwendig ist. Sie sollten
386
Kapitel 9 · Linux booten und herunterfahren
die Option nur dann anwenden, wenn Ihr System überhaupt nicht mehr bootet und Sie keine andere Möglichkeit mehr haben. Das Programm versucht zu booten, was es im Bootsektor der ersten Partition der Festplatte vorfindet. Wenn dies nicht gelingt, wird ein kleines Menü mit den Optionen 1234F angezeigt. Sie können nun eine der Zahlen eingeben und das Programm versucht, von möglichen Bootsektoren zu booten, die es im 1., 2., 3. oder 4. Partitionstabelleneintrag im MBR findet. Mit der Taste (f) können Sie versuchen, von der Diskette zu booten. Häufig ist es mit einer dieser Optionen möglich, das ursprüngliche Betriebssystem der Festplatte wieder zu starten. Hinterher sollten Sie mit Hilfe Ihres Bootmanagers den MBR wieder so herstellen, wie er vor der Umstellung des Programms testdisk eingerichtet war. Das Programm testdisk ist wirklich nur für extreme Notfälle gedacht und sollte mit Sorgfalt verwendet werden. Mit Hilfe des Programms ist es auch möglich, die komplette Festplatte zu löschen! Eine ausführliche Beschreibung der OpenSource-Software finden Sie unter http://www.cgsecurity.org.
9.4 Die Runlevel von Linux Ein Runlevel ist ein Systemzustand unter Linux, der definiert, welche Dienste und Ressourcen im System zur Verfügung stehen. Er definiert eine Anzahl von Prozessen, die beim Booten gestartet werden. Sie können den Standard-Runlevel zum Starten des Systems mit Hilfe der Datei /etc/inittab definieren oder mit Hilfe des Befehls init oder anderer Befehle manuell in verschiedene Runlevel wechseln. Bevor Sie den Runlevel des Systems verändern, sollten Sie unbedingt weitere am System arbeitende Benutzer benachrichtigen, um Datenverlust zu vermeiden. Den aktiven Runlevel können Sie mit Hilfe des Befehls runlevel feststellen: # runlevel N 5
Der erste Wert gibt den vorherigen Runlevel aus, in unserem Fall N für keinen. Der zweite Wert zeigt den aktuellen Runlevel an, in unserem Fall 5. Alternativ können Sie den aktiven Runlevel auch mit Hilfe des Befehls ermitteln: # runlevel . run-level 3
runlevel
Jun 30 17:58 last=S
Die erste Spalte gibt den aktiven Runlevel aus, gefolgt vom Datum und der Uhrzeit der letzten Änderung des Runlevels. Die letzte Spalte enthält den Runlevel, in dem sich das System vor dem aktiven Runlevel befand. Als Bezeichnung für einen Runlevel wird eine Zahl oder ein Buchstabe verwendet. Das System befindet sich grundsätzlich in einem der definierten Runlevel. Die definierten Runlevel lassen sich auch durch einen Blick in die Datei /etc/inittab ermitteln.
387
Die Runlevel von Linux
magnum
Unter SUSE erhalten Sie folgende Information: # The default runlevel is defined here id:5:initdefault: ... # runlevel 0 is System halt (Do not use this for initdefault!) # runlevel 1 is Single user mode # runlevel 2 is Local multiuser without remote network (e.g. NFS) # runlevel 3 is Full multiuser with network # runlevel 4 is Not used # runlevel 5 is Full multiuser with network and xdm # runlevel 6 is System reboot (Do not use this for initdefault!)
Die erste Zeile bedeutet, dass der Standard-Runlevel unter SUSE Linux 9.0 der Runlevel 5 ist.
9.4.1
Überblick über die Runlevel von SUSE Linux 10.0
Runlevel 0 (System-Halt-Runlevel) In diesem Runlevel wird Linux heruntergefahren und der Rechner ausgeschaltet, das heißt, softwaremäßig das Netzteil des Rechners ausgeschaltet, sofern dies unterstützt wird und im Kernel ACPI (Advanced Configuration and Power Interface) oder APM (Advanced Power Management) aktiviert ist. Alle laufenden Prozesse werden ordnungsgemäß beendet.
Runlevel 1 oder S oder s (Single-User- oder AdministrationsRunlevel) In diesem Runlevel ist nur ein einzelner Benutzer, nämlich root, zugelassen. Es laufen nur noch die notwendigsten Prozesse, so dass in diesem Zustand Sicherungen oder Wiederherstellungen von Daten, Überprüfungen des Dateisystems, Installationen von Softwarepaketen oder andere Wartungsarbeiten durchgeführt werden können. Alternativ können auch die Buchstaben S oder s verwendet werden, um mit dem Befehl init in den Single-User-Runlevel zu gelangen.
Runlevel 2 (lokaler Multi-User-Runlevel ohne Netzwerkbetrieb) In diesem Runlevel ist die Mehrbenutzerumgebung aktiviert, das heißt, autorisierte Anwender sind im System lokal zugelassen. Die grafische Oberfläche steht noch nicht zur Verfügung, aber das System hat die volle Multi-User- und Multitaskingfähigkeit. Es ist möglich, Dateisysteme lokal zu mounten, aber es können keine Dateisysteme remote gemountet werden.
Runlevel 3 (vollständiger Multi-User-Runlevel mit Netzwerkbetrieb) Dieser Runlevel bietet die volle Funktionalität eines Linux-Systems ohne grafische Oberfläche. Er ergänzt die Funktionen des Runlevels 2 um die Prozesse und Daemons, die für die Netzwerkunterstützung notwendig sind.
388
Kapitel 9 · Linux booten und herunterfahren
Runlevel 4 (benutzerdefinierter Runlevel) Dieser Runlevel wird von Linux im Moment nicht verwendet und könnte daher durch den Systemadministrator zum Beispiel für den zusätzlichen Start einer Datenbank definiert werden.
Runlevel 5 (vollständiger Multi-User-Runlevel mit Netzwerkbetrieb und grafischer Oberfläche) Dieser Runlevel entspricht dem Runlevel 3, allerdings wird zusätzlich die grafische Oberfläche gestartet. Standard-Runlevel unter SUSE Linux.
Runlevel 6 (Reboot-Runlevel) Das System wird vollständig angehalten und heruntergefahren. Anschließend erfolgt ein Neustart, wobei die Einstellungen der Datei /etc/inittab verwendet werden. In der Regel wird also in den Default-Runlevel 5 gefahren.
Runlevel a, b, c (spezielle Runlevel) In die Datei /etc/inittab lassen sich zusätzliche Zeilen eintragen, die die Runlevel a, b oder c verwenden. Auf diese Weise könnten mit Hilfe des Befehls diese Zeilen eingelesen und zusätzliche Hintergrundprozesse im System gestartet werden, zum Beispiel um eine Schnittstelle zu überwachen. Diese Zeilen werden allerdings nicht separat, sondern zusätzlich zum bereits aktivierten Runlevel abgearbeitet.
Runlevel q, Q (Einlesen der Datei /etc/inittab) Mit Hilfe des Befehls init q oder init Q lässt sich die Datei /etc/inittab erneut einlesen, während das System bereits aktiv ist. Dadurch könnten die Änderungen in dieser Datei verarbeitet werden, ohne dass das System neu gestartet werden muss.
Runlevel u, U (erneutes Ausführen von init) Diese Option führt dazu, dass der Befehl init sich selbst nochmals ausführt und dabei den Runlevel beibehält. Die Einträge in der Datei /etc/inittab werden nicht erneut geprüft. Diese Anforderung funktioniert nur, wenn der aktuelle Runlevel 1, 2, 3, 4, 5, s oder S ist, ansonsten wird sie ignoriert.
9.4.2
Überblick über die Runlevel von Debian GNU/Linux 3.1
Runlevel 0 (System-Halt-Runlevel) und Runlevel 1 oder S oder s (Single-User- oder Administrations-Runlevel) Diese Runlevel entsprechen in ihrer Bedeutung den Runleveln wie bei SUSE Linux.
Runlevel 2–5 (Multi-User-Runlevel) In diesem Runlevel ist die Mehrbenutzerumgebung aktiviert, das heißt, autorisierte Anwender arbeiten im System. Standard-Runlevel bei Debian GNU/Linux ist Runlevel 2.
389
magnum
Die Runlevel von Linux
Runlevel 6 (Reboot-Runlevel), Runlevel a, b, c (spezielle Runlevel), Runlevel q, Q (Einlesen der Datei /etc/inittab) und Runlevel u, U (erneutes Ausführen von init) Diese Runlevel entsprechen in ihrer Bedeutung denselben Runleveln wie bei SUSE Linux.
9.4.3
Überblick über die Runlevel von Fedora Core Linux 4.0
Runlevel 0 (System-Halt-Runlevel) und Runlevel 1 oder S oder s (Single-User- oder Administrations-Runlevel) Diese Runlevel entsprechen in ihrer Bedeutung den Runleveln wie bei SUSE Linux.
Runlevel 2–5 (Multi-User-Runlevel) Diese Runlevel für die Mehrbenutzerumgebung entsprechen wiederum den Runleveln von SUSE Linux. Standard-Runlevel bei Fedora Core Linux ist ebenfalls Runlevel 5.
Runlevel 6 (Reboot-Runlevel), Runlevel a, b, c (spezielle Runlevel), Runlevel q, Q (Einlesen der Datei /etc/inittab) und Runlevel u, U (erneutes Ausführen von init) Diese Runlevel entsprechen in ihrer Bedeutung denselben Runleveln wie bei SUSE Linux.
9.4.4
Die Datei /etc/inittab
Diese Datei enthält die Konfiguration der Runlevel und sie wird beim Systemstart vom Befehl init ausgewertet. Durch die Angaben in dieser Datei wird festgelegt, welche Befehle für welche Runlevel wie gestartet werden sollen. Die Datei /etc/inittab besteht pro Zeile aus folgenden fünf Spalten, wobei die ersten vier Einträge durch Doppelpunkt und die letzte Spalte durch Leerzeichen voneinander getrennt sind. Die folgenden Ausschnitte der Datei stammen aus SUSE Linux, sehen aber bei den anderen Distributionen ähnlich aus: $ cat /etc/inittab ... # The default runlevel is defined here id:5:initdefault: # First script to be executed, if not booting in emergency (-b) mode si:I:bootwait:/etc/init.d/boot # # # # # # # #
390
/etc/init.d/rc runlevel 0 is runlevel 1 is runlevel 2 is runlevel 3 is runlevel 4 is runlevel 5 is runlevel 6 is
takes care of runlevel handling System halt (Do not use this for initdefault!) Single user mode Local multiuser without remote network (e.g. NFS) Full multiuser with network Not used Full multiuser with network and xdm System reboot (Do not use this for initdefault!)
Kapitel 9 · Linux booten und herunterfahren
l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 #l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 # what to do in single-user mode ls:S:wait:/etc/init.d/rc S ~~:S:respawn:/sbin/sulogin # what to do when CTRL-ALT-DEL is pressed ca::ctrlaltdel:/sbin/shutdown -r -t 4 now # special keyboard request (Alt-UpArrow) # look into the kbd-0.90 docs for this kb::kbrequest:/bin/echo "Keyboard Request -- edit /etc/inittab to let this work." # what to do when power fails/returns pf::powerwait:/etc/init.d/powerfail start pn::powerfailnow:/etc/init.d/powerfail now #pn::powerfail:/etc/init.d/powerfail now po::powerokwait:/etc/init.d/powerfail stop # for ARGO UPS sh:12345:powerfail:/sbin/shutdown -h now THE POWER IS FAILING # getty-programs for the normal runlevels # :::<process> # The "id" field MUST be the same as the last # characters of the device (after "tty"). 1:2345:respawn:/sbin/mingetty --noclear tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 ...
Die Spalten haben folgende Bedeutung: Nr.
Spalte
Bedeutung
1
Id
Der ein- oder zweistellige, selbstgewählte Identifier des Eintrags
2
Runlevel
Ein oder mehrere Runlevel, für die der Eintrag gilt und ausgeführt wird
3
Aktion
Die Art, wie der nachfolgende Befehl bearbeitet werden soll
4
Befehl
Der Befehl oder das Skript, das ausgeführt werden soll
5
Ein-/Ausgabeumlenkung des Befehls
Anweisung zur Umlenkung der Ein- oder Ausgabe des Befehls
Tab. 9.7: Aufbau der Datei /etc/inittab
391
magnum
Die Runlevel von Linux
Die folgende Tabelle listet die möglichen Aktionen auf, die der init-Prozess durch Lesen der Datei /etc/inittab ausführen kann: Aktion
Bedeutung
boot
Diese Zeile wird nur während des Bootvorgangs gelesen und vor allen anderen Zeilen ausgeführt. Es wird nicht gewartet, bis die gestarteten Prozesse beendet sind.
bootwait
Mit Hilfe dieser Zeile wird das Betriebssystem hochgefahren. Sie wird vor allen anderen Zeilen ausgeführt und es wird gewartet, bis die gestarteten Prozesse beendet sind.
ctrlaltdel
Mit Hilfe dieser Aktion wird festgelegt, was nach der Tastenkombination (Strg)+(Alt)+(Entf) durchgeführt wird.
initdefault
Diese Zeile enthält den Standard-Runlevel des Systems. Ist sie nicht vorhanden, wird beim Booten eine Eingabe verlangt. Ist sie vorhanden, aber leer, wird der Systemstart abgebrochen.
kbrequest
Der Prozess wird ausgeführt, wenn init von der Tastatureingabe ein Signal empfängt, dass eine spezielle Tasteneingabe getätigt wurde.
off
Keine Bedeutung bei Linux-Systemen (existiert aus Kompatibilitätsgründen zu Unix-Systemen)
once
Der angegebene Prozess wird nur gestartet, falls er noch nicht aktiviert ist. Es wird nicht gewartet, bis er beendet ist.
ondemand
Diese Aktion sorgt dafür, dass Prozesse in bestimmten Runleveln weiterlaufen.
powerfail
Wenn der Rechner eine Meldung von der USV erhält, dass ein Stromausfall aufgetreten ist, wird dieser Prozess gestartet.
powerfailnow
Dieser Prozess wird ausgeführt, wenn init informiert wird, dass die Batterie der externen USV fast leer ist und der Strom ausgefallen ist.
powerokwait
Dieser Prozess wird ausgeführt, sobald der Befehl init informiert wird, dass der Strom wiederhergestellt wurde.
powerwait
Der Prozess wird ausgeführt, wenn ein Stromausfall eintritt. Dies wird dem Befehl init von der USV mitgeteilt. init wartet, bis der Prozess beendet ist, bevor die Aktion durchgeführt wird.
respawn
Der Prozess wird gestartet, wenn er noch nicht aktiviert ist. Falls er abbricht bzw. endet, wird er erneut gestartet.
sysinit
Der Prozess wird ausgeführt, bevor auf die Konsole zugegriffen und eine Anmeldung durchgeführt werden kann. Es wird gewartet, bis der Prozess beendet ist, bevor die Datei weiter abgearbeitet wird. Zeilen mit solchen Aktionen werden für die Systeminitialisierung verwendet und vor den Einträgen boot und bootwait ausgeführt.
wait
Der Prozess wird gestartet und es wird gewartet, bis er beendet ist.
Tab. 9.8: Die Aktionen der Datei /etc/inittab
392
Kapitel 9 · Linux booten und herunterfahren
9.4.5
Die Run-Control-Skripte
In diesem Abschnitt werden die Run-Control-Skripte genauer betrachtet.
Das Skript /etc/init.d/rc Es gibt unter Linux eine große Anzahl von Run-Control- oder so genannten rcSkripten, um Prozesse für die Runlevel zu starten oder zu stoppen. Für jeden Runlevel kann das Skript rc im Verzeichnis /etc/init.d mit einer dem Runlevel entsprechenden Nummer gestartet werden. Das Skript enthält Variablendeklarationen, die Prüfung von Bedingungen und Aufrufe von weiteren Skripten. Diese Skripte wiederum starten und stoppen Prozesse für den entsprechenden Runlevel. Dieses Skript liegt bei Fedora Linux im Verzeichnis /etc/rc.d. Ein symbolischer Link auf dieses Skript befindet sich im Verzeichnis /etc.
Die Verzeichnisse /etc/init.d/rc?.d bzw. /etc/rc?.d Das Fragezeichen im Namen des Run-Control-Unterverzeichnisses bedeutet, dass an dieser Stelle ein beliebiges Zeichen stehen kann, zum Beispiel die Ziffern 0 bis 6 oder das Zeichen 0 oder 1 oder S. Diese Verzeichnisse werden nicht einheitlich bei allen Distributionen behandelt, daher wird in diesem Abschnitt die Schreibweise /etc/[init.d/]rc?.d verwendet. SUSE Linux verwendet die Verzeichnisse schen Link /etc/rc.d nach /etc/init.d.
/etc/init.d/rc?.d
und einen symboli-
Fedora Core Linux und Debian GNU/Linux verwenden stattdessen /etc/rc?.d. Im Verzeichnis /etc finden Sie symbolische Links auf diese Verzeichnisse, die in das Verzeichnis /etc/rc.d verweisen. Für jeden Runlevel gibt es ein entsprechendes Unterverzeichnis im Verzeichnis /etc [/init.d]. Nachfolgend sehen Sie einige Skripte im Unterverzeichnis /etc/[init.d/] rc2.d, mit denen die Dienste und Ressourcen im Runlevel 2 gestartet bzw. beendet werden: # ls /etc/[init.d/]rc2.d . K09fbset .. K09rpmconfigcheck K01splash_late K13splash_early K03cron K14resmgr K05atd K15hotplug K07hwscan K16syslog K08cups K17network K08splash K21isdn K09alsasound K21random
S01isdn S01random S05network S06syslog S07hotplug S08resmgr S09splash_early S13alsasound S13fbset
S13rpmconfigcheck S14cups S14kbd S14splash S15hwscan S17atd S19cron S21splash_late
393
magnum
Die Runlevel von Linux
Es handelt sich hierbei um Start- und Stoppskripte. Startskripte beginnen mit einem S und starten einen Prozess, Stoppskripte beginnen mit einem K (für Kill) und beenden einen Prozess. Die Skripte werden in der Reihenfolge ausgeführt, wie sie mit dem Befehl ls angezeigt werden. Bei einem Systemstart werden die mit einem S beginnenden Skripte in der Reihenfolge der beiden Ziffern nach dem S ausgeführt, beim Herunterfahren des Systems dagegen alle mit einem K beginnenden Skripte, wobei die beiden dem K folgenden Ziffern die Reihenfolge festlegen. Der erste Buchstabe des Namens legt also fest, ob es sich um ein Stop- oder Startskript handelt, die nächsten beiden Ziffern bestimmen die Reihenfolge der Ausführung. Damit nicht das gleiche Skript immer in alle /etc/[init.d/]rc?.d-Verzeichnisse kopiert werden muss, werden alle Skripte mit einem Standardnamen wie zum Beispiel cups im Verzeichnis /etc/init.d abgelegt und in den Runlevel-bezogenen Verzeichnissen /etc/[init.d/]rc?.d nur Links auf das Standardskript nach der Konvention S99Skriptname bzw. K99Skriptname eingerichtet. Beim Eintreten in einen Runlevel wird dieses Skript dann mit der Option »start« bzw. beim Verlassen eines Runlevels mit der Option »stop« gerufen. Das Skript muss in diesem Fall also in der Lage sein, diese beiden Optionen zu verarbeiten. Die Distributionen SUSE Linux und Debian Linux stellen ein Vorgabeskript im Verzeichnis /etc/init.d/skeleton bereit.
Alle Skripte in den Verzeichnissen /etc/[init.d/]rc?.d sind symbolische Links auf Skripte im Verzeichnis /etc/init.d.
Wenn Sie nicht möchten, dass ein bestimmtes Skript in einem der Run-ControlUnterverzeichnisse ausgeführt wird, dann benennen Sie das Skript einfach um, indem Sie aus dem ersten Buchstaben einen Kleinbuchstaben machen. Auf diese Weise bleiben alle Informationen zum deaktivierten Skript erhalten, aber es wird nicht mehr ausgeführt, wenn in den entsprechenden Runlevel gefahren wird.
Das Verzeichnis /etc/init.d In diesem Verzeichnis befinden sich die ursprünglichen Run-Control-Skripte, für die in den Run-Control-Unterverzeichnissen /etc/rc?.d entsprechende Hard Links erstellt wurden. # ls /etc/init.d ... acct esound acpid fam alsasound fbset apache fbset.rpmsave atalk fetchmail atd gpm autofs halt bgpd halt.local boot hotplug ...
394
ntop nwe openct ospf6d ospfd pcscd plpnfsd plpprintd portmap
saslauthd sendmail setserial single skeleton slurpd smb smbfs smpppd
Kapitel 9 · Linux booten und herunterfahren
Diese Vorgehensweise mit Hilfe von symbolischen Links bietet zwei Vorteile: Ein Run-Control-Skript wird immer nur an einer Stelle gepflegt und in den notwendigen Verzeichnissen wird ein entsprechender symbolischer Link dazu erstellt, so dass kein redundanter Datenbestand entsteht. Der zweite Vorteil besteht darin, dass alle Skripte von root im Verzeichnis /etc/init.d manuell ausgeführt werden können. Wenn Sie zum Beispiel den NFS-Daemon manuell erneut starten möchten, verwenden Sie folgenden Befehl: # /etc/init.d/nfs restart Remove Net File System (NFS) Importing Net File System (NFS)
done done
Bei Debian Linux heißt dieses Run-Control-Skript nfs-common.
Aufbau eines Run-Control-Skripts Am Beispiel des Run-Control-Skripts /etc/init.d/nfs werden nachfolgend die Möglichkeiten zur Steuerung der Runlevel aufgezeigt. Das Skript startet bzw. beendet den NFS-Dienst (vergleiche Kapitel 20): #! /bin/bash ... # /etc/init.d/nfs ### BEGIN INIT INFO # Provides: nfs # Required-Start: $network $portmap # Required-Stop: # Default-Start: 3 5 # Default-Stop: # Description: Imports remote Network File Systems (NFS) ### END INIT INFO ... case "$1" in start|reload) echo -n "Importing Net File System (NFS)" if test "$nfs" = yes ; then # Mount all auto NFS devices (-> nfs(5) and mount(8) ) ... # mount -at nfs rc_status sleep 1 # # generate new list of available shared libraries # ldconfig -X 2>/dev/null rc_status -v else rc_status -u fi ;; stop) echo -n "Remove Net File System (NFS)" if test "$nfs" = "yes" ; then # # Unmount in background because during long timeouts # umount -at nfs & sleep 2 rc_status -v
395
magnum
Die Runlevel von Linux
else rc_status -u fi ;; restart|force-reload) ## Stop the service and regardless of whether it was ## running or not, start it again. $0 stop $0 start rc_status ;; status) echo -n "Checking for mounted nfs shares (from /etc/fstab):" if test "$nfs" = "yes" ; then while read where what type options rest ; do case "$where" in \#*|"") ;; *) case "$options" in *noauto*) ;; *) if test "$type" = "nfs" ; then grep -q "$where $what nfs" /proc/mounts || rc_failed 3 fi ;; esac esac done < /etc/fstab else rc_failed 3 fi rc_status -v ;; try-restart|condrestart) $0 status if test $? = 0; then $0 restart else rc_reset fi rc_status ;; *) echo "Usage: $0 {start|stop|status|reload|force-reload|restart|try-restart}" exit 1 esac rc_exit
Dieses Beispiel zeigt, dass ein Run-Control-Skript mit verschiedenen Argumenten aufgerufen werden kann: Argument
Bedeutung
start
Dienst starten
stop
Dienst anhalten
restart
Dienst anhalten und wieder starten (start und stop)
Tab. 9.9: Bedeutung der Argumente der Run-Control-Skripte
396
Kapitel 9 · Linux booten und herunterfahren
Argument
Bedeutung
reload
Konfiguration des Dienstes neu einlesen
status
Informationen über den Zustand des Dienstes ausgeben
Tab. 9.9: Bedeutung der Argumente der Run-Control-Skripte (Forts.)
Dienste mit dem Befehl insserv integrieren und entfernen Ab SUSE 7.0 gibt es den Befehl insserv, um Dienste einfacher in den Bootablauf integrieren bzw. entfernen zu können. Mit Hilfe dieses Befehls können entsprechend vorbereitete Run-Control-Skripte in die jeweiligen zugeordneten Runlevel eingehängt bzw. mit der Option –r auch wieder entfernt werden. Der Befehl ist unter Debian GNU/Linux und Fedora Core Linux nicht implementiert. Unter Debian GNU/Linux gibt es zu diesem Zweck den Befehl update-rc.d. Die Syntax des Befehls lautet: # insserv [-r] dienst
Das verwendete Basisskript mit dem Namen dienst muss sich dazu im Verzeichnis /etc/init.d befinden. Im Run-Control-Skript muss es außerdem einen Absatz mit Kommentaren geben, die Informationen für die Konfiguration enthalten. Im folgenden Beispiel wird der entsprechende Informationsblock des Run-Control-Skripts /etc/init.d/cups angezeigt, das für den Druckdienst gestartet wird: #! /bin/sh # /etc/init.d/cupsd # System startup script for the CUPS printer daemon ### BEGIN INIT INFO # Provides: cupsd # Required-Start: $local_fs $remote_fs $syslog # Required-Stop: $remote_fs $syslog # X-UnitedLinux-Should-Start: hotplug named portmap ptal slpd printbill # X-UnitedLinux-Should-Stop: portmap # Default-Start: 2 3 5 # Default-Stop: 0 1 6 # Description: Start CUPS printer daemon ### END INIT INFO
Die Parameter Default-Start bzw. Default-Stop definieren die Runlevel, in denen mit Hilfe der Start- und Stoppskripte (Sxxdienst bzw. Kxxdienst) das Basisskript eingehängt werden soll. Die Position im Bootablauf, das heißt, die Nummer der Start- und Stoppskripte, steuern die Zeilen Required-Start und Required-Stop. Die notwendigen Dienste können entweder direkt oder indirekt über eine Variable, wie zum Beispiel $local_fs, festgelegt werden. Die Variablen werden dabei in der Datei /etc/insserv.conf definiert. Im Folgenden ein Auszug zu /etc/insserv.conf:
397
magnum
Die Runlevel von Linux
... # # All local filesystems are mounted (done during boot phase) # $local_fsboot.localfs # # Low level networking (ethernet card) # $networknetwork +pcmcia +hotplug # # Named is operational $named+named +dnsmasq +lwresd $network ...
Dienste mit dem Befehl chkconfig integrieren und entfernen Der Befehl chkconfig kann ebenfalls Dienste aktivieren und deaktivieren. Sie können mit ihm die Runlevel-Links für das Booten setzen. Der Befehl wird als Frontend zum Befehl insserv betrachtet. Die Syntax des Befehls lautet: # chkconfig [-option]
Der Befehl ist unter Debian GNU/Linux nicht implementiert. Unter Debian GNU/Linux gibt es zu diesem Zweck den Befehl update-rc.d. Der Befehl kennt sechs verschiedene Modi, die als Option gesetzt werden können:
쮿
Terse-List-Modus
쮿
Set-Modus
쮿
Edit-Modus
쮿
List-Modus
쮿
Add-Modus
쮿
Delete-Modus
Die letzten drei Modi wurden aus Kompatibilitätsgründen hinzugefügt. Argument
Bedeutung
-a oder -add name(n)
Dienst aktivieren
-c oder -check name [status]
Status eines Diensts überprüfen. Wenn der Returncode 0 zurückgegeben wird, ist der Dienst in allen angegebenen Runlevel aktiviert, sonst wird Returncode 1 ausgegeben. Wenn nur der Dienstname angegeben wird, erfolgt die Prüfung nur für den aktuellen Runlevel.
-d oder -del name(n)
Dienst deaktivieren
-e oder -edit [name(n)]
Dieser Modus schreibt den Status aller angegebenen Dienste (oder aller bekannten Dienste, wenn keiner angegeben wird) in eine temporäre Datei, startet einen Editor und konfiguriert alle Dienste neu, so dass sie die Status der geänderten temporären Datei wiedergeben.
Tab. 9.10: Optionen des Befehls chkconfig
398
Kapitel 9 · Linux booten und herunterfahren
Argument
Bedeutung
-l oder Dieser Modus gibt für jeden angegebenen Dienst eine Zeile aus, die -list [--deps] [name (n)] aus dem Dienstnamen und den Runlevel 0 bis 6, jeweils mit Angabe on oder off, besteht. Wenn die Option --deps verwendet wird, wer-
den die Namen der Dienste, die vor diesem Dienst gestartet werden müssen, an jede Zeile gehängt. -s oder set [name state]
Dieser Modus konfiguriert, auf welchem Runlevel ein Dienst gestartet wird. Die Argumente müssen der Dienstname und der neue Status sein. Sie können on und off als spezielle Status verwenden, um die standardmäßigen Runlevel auszuwählen oder einen Dienst vollständig zu deaktivieren. Mit inetd oder xinetd können Sie einen Dienst konfigurieren, der von den Daemonen inetd/xinetd verwaltet wird. Wenn keine Dienste angegeben werden, liest der Befehl die Zeilen von der Standardeingabe.
-t oder -terse [name(n)]
Dieser Modus listet den Status des angegebenen Diensts auf oder alle bekannten Dienste, wenn kein Name angegeben wird. Jede Zeile enthält einen Dienstnamen und die Runlevel, für die der Dienst im Moment konfiguriert ist.
Tab. 9.10: Optionen des Befehls chkconfig (Forts.)
Ohne Argument gibt der Befehl eine Liste aller Dienste und ihres Status aus: # chkconfig Makefile SUSEfirewall2_final SUSEfirewall2_init SUSEfirewall2_setup acct acpid alsasound apache2 atalk atd autofs ...
off on on on off off on off off off off
Im nächsten Beispiel werden der Dienst cron und seine Status in den einzelnen Runlevel überprüft: # chkconfig -l cron cron 0:off
1:off
2:on
3:on
4:off
5:on
6:off
Der Dienst cron wird deaktiviert und gleich darauf wieder aktiviert: # chkconfig -d cron cron 0:off # chkconfig -a cron cron 0:off
1:off
2:off
3:off
4:off
5:off
6:off
1:off
2:on
3:on
4:off
5:on
6:off
399
Die Runlevel von Linux
magnum
Ein neues Run-Control-Skript erstellen und einbinden Wenn Sie neue Dienste oder weitere Prozesse in einem Runlevel starten möchten, erstellen Sie einfach ein neues Run-Control-Skript und erzeugen zu diesem die entsprechenden symbolischen Links in den Run-Control-Verzeichnissen. Im folgenden Beispiel erstellen Sie ein Skript dbservice, mit dem im Runlevel 2 ein Datenbankdienst gestartet wird, der im Runlevel 3 gestoppt wird. 1. Im ersten Schritt erstellen Sie das Run-Control-Skript im Verzeichnis /etc/ init.d. Häufig ist es möglich, ein ähnliches Skript zu kopieren und zu verändern, zum Beispiel das Vorgabeskript skeleton: # cp /etc/init.d/skeleton /etc/init.d/dbservice # vi /etc/init.d/dbservice
2. Im zweiten Schritt machen Sie das Run-Control-Skript zu einem ausführbaren Programm, indem Sie die Rechte ändern. Außerdem übertragen Sie den Besitz an der Datei dem Benutzer root und der Gruppe root: # chmod 744 /etc/init.d/dbservice # chown root:sys /etc/init.d/dbservice
3. Im dritten Schritt sollten Sie testen, ob das Skript wie gewünscht arbeitet. Dazu rufen Sie es jeweils mit dem Parameter start und stop auf: # /etc/init.d/dbservice start # /etc/init.d/dbservice stop
4. Im vierten Schritt müssen Sie sich überlegen, in welchem Runlevel der Dienst gestartet und in welchem er gestoppt werden soll. Gleichzeitig sollten Sie sich Gedanken darüber machen, an welcher Stelle das Skript gestartet oder gestoppt werden soll, das heißt, ob zuvor bereits andere Dienste laufen oder beendet werden sollten. In unserem Beispiel verwenden wir zum Starten Runlevel 2 und die laufende Nummer 95 und zum Beenden Runlevel 3 und die laufende Nummer 10. An dieser Stelle erzeugen Sie die entsprechenden symbolischen Links: # cd /etc/init.d # ln -s dbservice /etc/rc3.d/S95dbservice # ln -s dbservice /etc/rc2.d/K10dbservice
Gegebenenfalls erstellen Sie für weitere Runlevel weitere symbolische Links zum neu angelegten Run-Control-Skript.
9.4.6
Run-Control-Skripte mit YaST bearbeiten
Das Programm YAST unter SUSE Linux bietet eine grafische Bearbeitung der Runlevel über die Menüfolge SYSTEM - RUNLEVEL EDITOR an. Die Dienste der Runlevel können im einfachen Modus über entsprechende Schaltflächen aktiviert oder deaktiviert werden:
400
Kapitel 9 · Linux booten und herunterfahren
Bild 9.11: Runlevel-Dienste aktivieren oder deaktivieren
Im Expertenmodus ist es möglich, den Standard-Runlevel über ein PulldownMenü einzustellen, die Dienste den einzelnen Runleveln zuzuordnen bzw. zu starten, anzuhalten und zu aktualisieren und einzelne oder alle Dienste zu aktivieren bzw. zu deaktivieren:
Bild 9.12: Runlevel-Editor im Expertenmodus verwenden
401
Die Runlevel von Linux
9.4.7
magnum
Run-Control-Skripte mit KDE SysV-Init-Editor bearbeiten
Auch KDE bietet ein Programm, SYSV-INIT-EDITOR, um Run-Control-Skripte grafisch zu starten oder anzuhalten. Es ist bei SUSE Linux im Hauptmenü unter SYSTEM - DIENSTKONFIGURATION zu finden:
Bild 9.13: Runlevel und Run-Control-Skripte mit SysV-Init-Editor bearbeiten
Wenn Sie die grafische Oberfläche KDE mit Debian GNU/Linux verwenden, finden Sie das Programm unter SYSTEM - SYSV-INIT-EDITOR.
Fedora Core Linux hat dieses Tool in seiner KDE-Standardkonfiguration nicht enthalten. Sie können den zu bearbeitenden Dienst entweder im entsprechenden Runlevel auswählen oder im linken Fensterbereich unter VERFÜGBARE SYSTEMDIENSTE und mit Doppelklick zum Bearbeiten öffnen:
402
Kapitel 9 · Linux booten und herunterfahren
Bild 9.14: cron-Dienst mit SysV-Init-Editor bearbeiten
In unserem Beispiel wurde der cron-Dienst ausgewählt. In der ersten Registerkarte finden Sie allgemeine Angaben zum Dienst, zum Beispiel wann er zuletzt geändert wurde, wo das Skript steht etc. In der zweiten Registerkarte werden die Berechtigungen angezeigt:
Bild 9.15: Berechtigungen des cron-Daemon
403
Die Runlevel von Linux
magnum
In der dritten Registerkarte SYSTEMDIENST kann der Dienst gestartet, gestoppt oder neu gestartet werden.
Bild 9.16: cron-Daemon starten oder stoppen
In der vorliegenden Version von SYSV-INIT-EDITOR war es nicht möglich, die Aktion BEARBEITEN zu aktivieren.
9.4.8
Run-Control-Skripte mit Fedora Linux grafisch bearbeiten
Auch Fedora Core Linux bietet ein Programm, um Run-Control-Skripte grafisch zu starten oder anzuhalten. Es ist im Hauptmenü unter SYSTEMEINSTELLUNGEN SERVEREINSTELLUNGEN - DIENSTE zu finden:
Bild 9.17: Dienste mit Fedora grafisch verwalten
404
Kapitel 9 · Linux booten und herunterfahren
9.5 Das System herunterfahren Es gibt mehrere Befehle, um das System in einen anderen Runlevel zu bringen oder herunterzufahren. Vor einem Herunterfahren des Systems sollte sich der Systemadministrator vergewissern, dass er auf dem richtigen System angemeldet ist und die Anwender entsprechend informiert wurden, um Datenverluste zu verhindern. Er sollte sich auch darüber im Klaren sein, dass ein Server mit entsprechenden Funktionen (zum Beispiel Mail- oder Printserver) seine Aufgaben für die Clients nicht mehr ausführen kann. Auf einem Multi-User-System sollte es nur dem Systemadministrator möglich sein, das System herunterzufahren. Eine Ausnahme bilden Workstations, an denen nur einzelne Benutzer tätig sind, und eventuell Standalone-Server. Die Rechte zum Herunterfahren sind in der Gruppe shutdown enthalten. Die Befehle reboot, poweroff und swsusp sind nur Links auf /sbin/halt, das heißt, es wird im Hintergrund das gleiche Programm aufgerufen. Laut Manual ruft der Befehl halt nach dem Ablegen der Notiz in /var/log/wtmp in allen Runleveln außer 0 und 6 wiederum den Befehl shutdown auf.
9.5.1
Der Befehl shutdown
Dieser Befehl ruft das Programm init auf und ermöglicht es, die Benutzer am System über das bevorstehende Herunterfahren zu informieren. Der Befehl benötigt eine Zeit, zu der heruntergefahren werden soll. Die Syntax des Befehls lautet: # shutdown [-option(en)] [-t zeit] zeit [nachricht]
Der Befehl kennt verschiedene Optionen: Option Beschreibung -a
Die Datei /etc/shutdown.allow wird verwendet. Damit wird überprüft, ob ein berechtigter Benutzer im Moment angemeldet ist. Wenn ja, wird das System heruntergefahren.
-c
Beendet einen bereits gestarteten Shutdown.
-f
Der Befehl fsck wird beim Neustart übersprungen.
-F
Der Befehl fsck wird beim Neustart erzwungen.
-h
Nach dem Herunterfahren wird das System ausgeschaltet.
-k
Das System wird nicht wirklich heruntergefahren, sondern es wird nur eine Nachricht an die Benutzer gesandt.
-r
Nach dem Herunterfahren wird das System neu gestartet.
-t zeit
Es wird zeit Sekunden gewartet, bevor den Prozessen das Signal zum Beenden gesandt wird und das System in einen anderen Runlevel wechselt.
zeit
Kann im Format hh:mm (Stunden und Minuten) oder +m (Minuten ab jetzt) erfolgen oder mit der Angabe now
Tab. 9.11: Die Optionen des Befehls shutdown
405
magnum
Das System herunterfahren
Das nachfolgende Beispiel zeigt einen Shutdown ohne besondere Benachrichtigung der Benutzer und mit nachfolgendem Neustart: # shutdown -r now
Im nächsten Beispiel soll ein Shutdown mit anschließendem Ausschalten des Rechners nach 5 Minuten stattfinden, wobei die Benutzer am System entsprechend informiert werden: # shutdown -h +5 "Das System wird in 5 Minuten heruntergefahren"
9.5.2
Der Befehl init
Dieser Befehl init oder telinit wechselt in die verschiedenen Runlevel. Er liest die Datei /etc/inittab, um die erforderlichen Run-Control-Skripte auszuführen. Das System wird damit ordnungsgemäß heruntergefahren, ausgeschaltet oder neu gestartet. Es ist nicht möglich, den Benutzern am System eine Warnmeldung zukommen zu lassen oder eine zeitliche Verzögerung einzustellen. Die Syntax des Befehls lautet: # init [-option(en)] runlevel-nr
Die Bedeutung der Runlevel-Nummer wurde bereits im vorherigen Abschnitt »Runlevel« erläutert. Der Befehl kennt folgende Optionen: Option
Beschreibung
-s oder -S oder single
Verzweigt in den Single-User-Modus
1-5
Verzweigt in den angegebenen Runlevel
-a oder auto
Der LILO-Bootloader fügt der Befehlszeile das Wort »auto« hinzu, wenn er den Kernel mit der standardmäßigen Befehlszeile bootet. Daraufhin wird die Variable AUTOBOOT auf Ja gesetzt.
-b oder emergency
Bootet direkt in eine Single-User-Shell, ohne irgendwelche StartupSkripte aufzurufen
Tab. 9.12: Die Optionen des Befehls init
Mit diesem Befehl können Sie das System neu starten: # init 6
Mit diesem Befehl wird das System heruntergefahren und ausgeschaltet: # init 0
406
Kapitel 9 · Linux booten und herunterfahren
9.5.3
Der Befehl halt
Dieser Befehl fährt das System sofort herunter. Es ist nicht möglich, den Benutzern am System eine Warnmeldung mitzugeben oder eine zeitliche Verzögerung einzustellen. Die Syntax des Befehls lautet: # halt [-option(en)]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-d
Die Information des Neustarts oder Anhaltens des Systems wird nicht in die Datei /var/log/wtmp geschrieben. Die Option -n verwendet diese Option standardmäßig.
-f
Erzwingt das Anhalten oder den Neustart des Systems, ohne den Befehl shutdown aufzurufen
-i
Fährt zuerst alle Netzwerkschnittstellen herunter, bevor es anhält oder neu bootet
-n
Vor dem Neustarten oder Anhalten des Systems keine Synchronisation durchführen
-p
Beim Anhalten des Systems wird der Befehl poweroff durchgeführt.
-w
Startet das System nicht tatsächlich neu oder hält es an, sondern schreibt nur die Informationen in die Datei /var/log/wtmp
Tab. 9.13: Die Optionen des Befehls halt
9.5.4
Der Befehl poweroff
Dieser Befehl fährt das System sofort herunter und schaltet es aus, vorausgesetzt, die Hardware kann softwaremäßig deaktiviert werden und im Kernel sind die Optionen ACPI oder APM aktiviert. Es ist auch nicht möglich, den Benutzern am System eine Warnmeldung mitzugeben oder eine zeitliche Verzögerung einzustellen. Die Syntax des Befehls lautet: # poweroff [-option(en)]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-d
Die Information des Neustarts oder Anhaltens des Systems wird nicht in die Datei /var/log/wtmp geschrieben. Die Option -n verwendet diese Option standardmäßig.
-f
Erzwingt das Anhalten oder den Neustart des Systems, ohne den Befehl shutdown aufzurufen
-i
Fährt zuerst alle Netzwerkschnittstellen herunter, bevor es anhält oder neu bootet
-n
Vor dem Neustarten oder Anhalten des Systems keine Synchronisation durchführen
-w
Startet das System nicht tatsächlich neu oder hält es an, sondern schreibt nur die Informationen in die Datei /var/log/wtmp
Tab. 9.14: Die Optionen des Befehls poweroff
407
magnum
Das System herunterfahren
9.5.5
Der Befehl reboot
Dieser Befehl fährt das System sofort herunter und bringt es anschließend in den Default-Runlevel. Es ist nicht möglich, den Benutzern am System eine Warnmeldung mitzugeben oder eine zeitliche Verzögerung einzustellen. Die Syntax des Befehls lautet: # reboot [-option(en)]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-d
Die Information des Neustarts oder Anhaltens des Systems wird nicht in die Datei /var/log/wtmp geschrieben. Die Option -n verwendet diese Option standardmäßig.
-f
Erzwingt das Anhalten oder den Neustart des Systems, ohne den Befehl shutdown aufzurufen
-i
Fährt zuerst alle Netzwerkschnittstellen herunter, bevor es anhält oder neu bootet
-n
Vor dem Neustarten oder Anhalten des Systems keine Synchronisation durchführen
-w
Startet das System nicht tatsächlich neu oder hält es an, sondern schreibt nur die Informationen in die Datei /var/log/wtmp
Tab. 9.15: Die Optionen des Befehls reboot
9.5.6
Der Befehl swsusp
Dieser Befehl fährt das System sofort herunter. Es ist nicht möglich, den Benutzern am System eine Warnmeldung mitzugeben oder eine zeitliche Verzögerung einzustellen. Die Syntax des Befehls lautet: # swsusp [-option(en)]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-d
Die Information des Neustarts oder Anhaltens des Systems wird nicht in die Datei /var/log/wtmp geschrieben. Die Option -n verwendet diese Option standardmäßig.
-w
Startet das System nicht tatsächlich neu oder hält es an, sondern schreibt nur die Informationen in die Datei /var/log/wtmp
Tab. 9.16: Die Optionen des Befehls swsusp
Unter Debian Linux und Fedora Linux gibt es den Befehl nicht.
408
swsusp
standardmäßig
10 Geräteverwaltung »Mit stumpfem Gerät macht die Arbeit keinen Spaß.« – Sprichwort Das Dateisystem unter Linux führt einen großen Teil der Kommunikation zwischen Prozessen und dem Kernel und dem Zugriff auf Peripheriegeräte durch. Neben den gewöhnlichen Dateien und Verzeichnissen gibt es dafür die so genannten Spezialdateien, wie zum Beispiel Gerätedateien. Die Verwendung des Dateisystems für diesen Zweck hat einmal den Vorteil, dass das Dateisystem immer verfügbar ist, zum anderen bietet das einheitliche Konzept die Möglichkeit, dass alle lokalen Prozesse als auch der Kernel auf das Dateisystem unter Verwendung der Zugriffsrechte auf der Grundlage der normalen Dateirechte zugreifen können. In diesem Kapitel liegt der Schwerpunkt vor allem auf den Themen Verwaltung von Gerätedateien und des Dateisystems.
10.1 Festplatten verwalten Bei jedem Betriebssystem besteht die Festplattenverwaltung aus mehreren verschiedenen Aufgaben, die sich unter Linux in vier Bereiche unterteilen lassen:
쮿
Festplatten in das System einbinden: Dazu gehört das physikalische Anschließen von neuen Festplatten an den Rechner und das anschließende Einbinden in das Betriebssystem, damit die Festplatten erkannt und angesprochen werden können.
쮿
Festplatten partitionieren: Durch das Partitionieren werden die vorhandenen Festplatten in getrennte Bereiche aufgeteilt, die unabhängig voneinander verwendet werden und daher auch unterschiedliche Betriebssysteme aufnehmen können.
쮿
Dateisysteme anlegen: Um Dateien auf die Partition einer Festplatte schreiben und dort verwalten zu können, muss sich auf dieser ein Dateisystem befinden, das die physikalische Organisation der Daten verwaltet.
쮿
Partitionen mounten: Enthält eine Partition ein Linux-kompatibles Dateisystem, ist es möglich, diese in den Verzeichnisbaum der root-Partition durch einen Mountvorgang einzubinden.
Bei der Installation werden diese Teilschritte im Hintergrund automatisch ausgeführt.
409
magnum
Festplatten verwalten
10.1.1
Gerätedateien
Gerätedateien verwenden das Dateisystem nicht in seiner Funktion als Speichermedium, sondern sie haben entweder keine Dateilänge oder immer eine Länge von 0 Byte unabhängig von der Art des Zugriffs. Auch das Schreiben von Daten in eine Spezialdatei vergrößert diese nicht und die Daten werden nicht auf die Festplatte geschrieben. Eine Gerätedatei ist ein Verweis in den Kernel über das Dateisystem. Über diesen wird einem Prozess die Möglichkeit gegeben, auf Daten von anderen Prozessen oder auf externe Geräte zuzugreifen. Gerätetreiber bilden die Schnittstelle zwischen dem Betriebssystem und der Hardware, indem sie zwischen diesen Daten übertragen. Für diesen Zweck werden vom Kernel Systemaufrufe, wie zum Beispiel read(), open(), write() usw., verwendet. Ein Programm oder ein Anwender kommuniziert dabei nicht direkt über diese Gerätetreiber mit der Hardware, sondern verwendet Gerätedateien, die auch Device oder Special Files genannt werden. Daher muss jedes angeschlossene Gerät unter Linux eine Gerätedatei besitzen. Jede Gerätedatei wiederum kann mit unterschiedlichen Namen angesprochen werden. Abstrakt betrachtet wird die Hardware wie eine geöffnete Datei angesprochen, die vom Kernel mit einem entsprechenden Gerätetreiber verbunden wird.
10.1.2
Gerätenamen
Geräte mit ihren Namen befinden sich im Verzeichnis /dev und sind in der Regel einfach zu merkende Namen, mit deren Hilfe Sie teilweise auch selbst direkt auf ein Gerät zugreifen können: # ls –l /dev | more ... brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root brw-rw---- 1 root ...
disk disk disk disk disk disk disk disk disk disk disk disk disk
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1 10 11 12 13 14 15 16 17 18 19 2 20
Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep
23 23 23 23 23 23 23 23 23 23 23 23 23
2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003
hda1 hda10 hda11 hda12 hda13 hda14 hda15 hda16 hda17 hda18 hda19 hda2 hda20
In der ersten Spalte steht entweder der Buchstabe b für eine blockorientierte Gerätedatei oder der Buchstabe c für eine zeichenorientierte (character oriented) Gerätedatei. Bei einem blockorientierten Zugriff auf ein Gerät erfolgt die Ein- bzw. Ausgabe auf Datenblock-Ebene. Im Hauptspeicher werden dazu so lange Daten gesammelt, bis diese wieder in Form eines vollständigen Datenblocks übertragen werden können. Diese Zugriffsart wird bei Festplatten, CD-ROMs oder Disketten verwendet und von den Linux-Dateisystemen unterstützt. Beim zeichenorientierten Zugriff, der auch als Raw-Zugriff bezeichnet wird, wird ein ungepufferter Datentransfer durchgeführt, das heißt, bei jedem Schreib- und Lesevorgang werden Daten übertragen. Unter Linux erfolgt im Gegensatz zu traditionellen Unix-Systemen der Zugriff entweder nur blockorientiert oder nur zei-
410
Kapitel 10 · Geräteverwaltung
chenorientiert. Ein zeichenorientierter Zugriff wird bei Terminals, Tastatureingaben und Bandlaufwerken verwendet. Die fünfte Spalte, die normalerweise die Dateigröße anzeigt, enthält bei Gerätedateien zwei durch Komma getrennte Zahlen. Dabei handelt es sich um die Majorund Minor-Device-Number. Die Device-Nummern legen den Gerätetreiber im Kernel fest und bilden damit eine Art von »Dateiinhalt«. Für den Zugriff auf verschiedene Gerätetreiber, wie zum Beispiel Festplatten oder Terminals, gibt es im LinuxKernel eine so genannte Treibertabelle. Mit Hilfe der Major-Device-Number wird auf einen Treiber in der Treibertabelle Bezug genommen, das heißt, die MajorDevice-Number entspricht dabei der Position des Treibers innerhalb der Tabelle. In der Regel verwaltet ein Treiber mehrere Geräte, zum Beispiel ein Treiber für eine IDE-Festplatte, daher muss mit Hilfe der Minor-Device-Number zusätzlich das physikalische Gerät angegeben werden. Wenn ein Gerät in logische Einheiten unterteilt werden kann, wie zum Beispiel eine Festplatte in verschiedene Partitionen oder wenn es verschiedene Zugriffsarten kennt, dann wird dies ebenfalls über die Minor-Device-Number geregelt. Ein Gerätename einer Festplattenpartition besteht immer aus drei Teilen, zum Beispiel /dev/hda1:
쮿
hd ist die Bezeichnung für Festplatten, wobei eine IDE-Festplatte die Bezeichnung hd = »hard disk« und eine SCSI-Festplatte die Bezeichnung sd = »scsi disk« trägt.
IDE(Intelligent Drive Electronics oder Integrated Device Equipment)-Controller und -Festplatten sind preisgünstiger als SCSI(Small Computer Systems Interface)-Controller und -Festplatten, aber gleichzeitig weniger flexibel. Sie werden aber häufig bei Personalcomputern verwendet. Ein neuer für den Datenaustausch zwischen Festplatte und Prozessor entwickelter Datenbus ist Serial ATA (SATA), der sich aus dem IDE-Standard gebildet hat und im Kernel 2.6 als SCSI emuliert wird. Die Daten werden seriell, also Bit für Bit übertragen, wodurch eine höhere Geschwindigkeit erreicht wird. Außerdem ermöglicht SATA eine einfachere Kabelführung und den Austausch von Datenträgern im laufenden Betrieb.
쮿
a ist die Festplattennummer. Die erste IDE-Festplatte am System heißt hda, die zweite hdb usw. Die erste SCSI-Festplatte am System heißt sda, die zweite sdb usw.
쮿
1 ist die Partitionsnummer. Das Betriebssystem Linux kann auf verschiedene Partitionen aufgebracht werden. Auf IDE-Platten gibt es maximal vier primäre Partitionen oder drei primäre und eine erweiterte Partition, wobei die erweiterte Partition wiederum in mehrere logische Partitionen unterteilt werden kann. Insbesondere bei großen Festplatten kann es sinnvoll sein, die Platte in mehrere Partitionen zu teilen und die unterschiedlichen Bereiche des LinuxSystems in unterschiedliche Partitionen zu legen (Anwenderbereiche, Systembereiche) und diese getrennt zu sichern. Die Partitionsnummern werden von 1 aufwärts gezählt.
Weitere Gerätenamen sind zum Beispiel /dev/fd0 für das erste Diskettenlaufwerk am System (floppy disk 0) oder /dev/usb0 als Bezeichnung für das erste USB-Gerät.
411
magnum
Festplatten verwalten
Standardmäßig sind in Linux-Systemen bereits Gerätedateien für eine Vielzahl von Standardgeräten eingerichtet. Die nachfolgende Tabelle enthält eine Auswahl möglicher Gerätedateien: Name
Beschreibung
/dev/hd…
IDE-Laufwerke, wie zum Beispiel Festplatten, CD-ROM, DVD
/dev/sd…
SCSI-Laufwerke
/dev/scd…
SCSI-CD-ROM oder DVD-Laufwerke
/dev/ht…
IDE-Streamer
/dev/st…
SCSI-Streamer
/dev/fd…
Diskettenlaufwerke
/dev/tty…
Terminals (Textmodus)
/dev/ttyp…
Virtuelle Terminals unter X (Slave)
/dev/ptyp…
Virtuelle Terminals unter X (Master)
/dev/pts/…
Virtuelle Terminals gemäß Unix98-Spezifikation
/dev/ttyS…
Serielle Schnittstellen
/dev/lp…
Parallele Schnittstellen
/dev/psaux
PS/2-Maus
/dev/usb/…
USB-Geräte
Tab. 10.1: Gerätedateinamen
Es gibt in der Regel symbolische Links auf spezielle Geräte, die vereinfachte Namen haben. Dies ist aber bei den verschiedenen Linux-Distributionen nicht einheitlich geregelt: Link
Gerät
/dev/cdrom
Verweis auf das Gerät CD-ROM oder DVD
/dev/dvd
Verweis auf das Gerät CD-ROM oder DVD
/dev/mouse
Verweis auf das Gerät Maus
/dev/modem
Verweis auf das Gerät Modem
/dev/ftape
Verweis auf Floppy-Streamer
/dev/tape
Verweis auf SCSI/IDE-Streamer
Tab. 10.2: Symbolische Links auf Gerätedateinamen
412
Kapitel 10 · Geräteverwaltung
Gerätedateien für Festplattenlaufwerke Unter Linux wird bei der Namensgebung zwischen der Anschlussart von Festplatten unterschieden, das heißt zwischen SCSI- und IDE-Platten. Alle SCSI-Gerätedateien beginnen mit den Zeichen sd gefolgt von der Platten- und der Partitionsnummer: /dev/sd<Partitionsnummer>
Die Plattennummer wird den einzelnen Festplatten nach der SCSI-ID in aufsteigender Reihenfolge mit Hilfe von Kleinbuchstaben zugeordnet. Generell sind immer Gerätedateien für 16 SCSI-Festplatten bereits vorhanden und 128 SCSI-Festplatten sind möglich: /dev/sda
die gesamte 1. SCSI-Festplatte
/dev/sdb
die gesamte 2. SCSI-Festplatte usw.
/dev/sdz
die gesamte 26. SCSI-Festplatte
/dev/sdaa
die gesamte 27. SCSI-Festplatte usw.
/dev/sddx
die gesamte 128. SCSI-Festplatte
Die Partitionsnummern werden in Zahlen angegeben. Bei SCSI-Festplatten sind insgesamt 15 Partitionen möglich, davon vier primäre Partitionen (davon wiederum eine erweiterte Partition) und maximal 11 logische Laufwerke bzw. Partitionen: /dev/sd..1
die 1. primäre Partition (zum Beispiel /dev/sda1 die erste primäre Partition der ersten SCSI-Festplatte)
/dev/sd..2
die 2. primäre Partition
/dev/sd..3
die 3. primäre Partition
/dev/sd..4
die 4. primäre Partition
/dev/sd..5
die 1. logische Partition
/dev/sd..6
die 2. logische Partition usw.
/dev/sd..15
die 11. logische Partition
Je nach Einteilung der Partitionen können bei den Partitionsnummern einer Platte Lücken vorhanden sein, das heißt, es ist nicht zwingend erforderlich, aufeinander folgende Partitionsnummern zu verwenden. Alle IDE-Gerätedateien beginnen mit den Zeichen hd gefolgt von der Platten- und der Partitionsnummer: /dev/hd<Partitionsnummer>
Die Plattennummer wird der Reihe nach den möglichen Geräten an den IDE-Controllern zugeordnet, das heißt, zuerst immer die Master-Drive, dann die SlaveDrive. Bei dieser Vergabe können Lücken entstehen, aber in der Regel sind die Gerätedateien für 8 IDE-Festplatten vorhanden, prinzipiell wären 18 IDE-Festplatten möglich: /dev/hda
die gesamte Master-Festplatte am 1. IDE-Controller
/dev/hdb
die gesamte Slave-Festplatte am 1. IDE-Controller
413
magnum
Festplatten verwalten
/dev/hdc
die gesamte Master-Festplatte am 2. IDE-Controller
/dev/hdd
die gesamte Slave-Festplatte am 2. IDE-Controller usw.
/dev/hdh
die gesamte Slave-Festplatte am 4. IDE-Controller
Auch bei IDE-Festplatten werden für die Partitionsnummern Zahlen verwendet. Bei IDE-Festplatten sind insgesamt 63 Partitionen möglich, davon 4 primäre Partitionen (davon eine erweiterte Partition) und maximal 59 logische Laufwerke bzw. Partitionen: /dev/hd..1
die 1. primäre Partition
/dev/hd..2
die 2. primäre Partition
/dev/hd..3
die 3. primäre Partition
/dev/hd..4
die 4. primäre Partition
/dev/hd..5
die 1. logische Partition
/dev/hd..6
die 2. logische Partition usw.
/dev/hd..63
die 59. logische Partition
Abhängig von der Partitionseinteilung bei den Partitionsnummern können auch hier Lücken entstehen.
Gerätedateien für CD-ROM- und DVD-Laufwerke Auch beim Zugriff auf CD-ROM- und DVD-Laufwerke wird zwischen der Anschlussart IDE/ATAPI und SCSI unterschieden. Die SCSI-CD-ROM-Gerätedateien beginnen mit den Buchstaben der CD-ROM-Nummer:
scd
gefolgt von
/dev/scd
Den CD-ROM Laufwerken wird über Zahlen in aufsteigender Reihenfolge anhand der SCSI-ID die Laufwerksnummer zugeordnet, beginnend mit 0. In der Regel sind die Gerätedateien für maximal 8 CD-ROM-Laufwerke vorhanden: /dev/scd0
Das 1. SCSI CD-ROM-Gerät
/dev/scd1
Das 2. SCSI CD-ROM-Gerät usw.
/dev/scd7
Das 8. SCSI CD-ROM-Gerät
Bei IDE- bzw. ATAPI-CD-ROM-Laufwerken wird entsprechend dem Zugriff auf IDE-Festplatten vorgegangen. Gängige Gerätedateien für ATAPI-CD-ROM-Laufwerke als Slave am ersten Controller oder als Master am zweiten Controller sind daher: /dev/hdb
CD-ROM als Slave am 1. IDE-Controller
/dev/hdc
CD-ROM als Master am 2. IDE-Controller
In der Regel gibt es bei allen Distributionen einen symbolischer Link der auf das erste CD-ROM-Gerät am System verweist.
414
/dev/cdrom,
Kapitel 10 · Geräteverwaltung
Gerätedateien für Diskettenlaufwerke Bei Linux wird das Diskettenformat, zum Beispiel 720 Kbyte, 1,44 Mbyte oder 2,88 Mbyte, vom Diskettencontroller überprüft, wodurch der Zugriff vereinfacht wird. Die Diskettenlaufwerke werden über die Buchstaben fd gefolgt von der Laufwerksnummer angesprochen. /dev/fd
In der Regel gibt es Gerätedateien für zwei Diskettenlaufwerke, bis zu 8 Laufwerke sind möglich. /dev/fd0
das 1. Diskettenlaufwerk
/dev/fd1
das 2. Diskettenlaufwerk usw.
Sollte der Treiber ausnahmsweise mit dem Medium nicht zurechtkommen, ist es auch möglich, das Diskettenlaufwerk mit der genauen Bezeichnung anzugeben, zum Beispiel: /dev/fd0 /dev/fd0D360 /dev/fd0D720 /dev/fd0H1440 /dev/fd0H360 /dev/fd0H720 /dev/fd0d360 /dev/fd0h1200 /dev/fd0h360 /dev/fd0h720
Gerätedateien für Bandlaufwerke Bei Bandlaufwerken spielt bei der Namensgebung ebenfalls die Anschlussart eine Rolle, außerdem gibt es meist eine Zugriffsmöglichkeit mit und eine ohne automatisches Zurückspulen. Die SCSI-Streamer-Gerätedateien beginnen mit den Buchstaben st bei zurückspulenden Geräten bzw. nst bei nicht zurückspulenden Geräten, gefolgt von der Streamernummer: /dev/(n)st<Streamernummer>
Den Streamern wird mit Hilfe von Zahlen in aufsteigender Reihenfolge anhand der SCSI-ID eine Nummer zugeordnet, beginnend mit 0. In der Regel gibt es maximal 8 Streamer: /dev/st0
1. Streamer, Band wird automatisch zurückgespult
/dev/nst0
2. Streamer, Band wird nicht zurückgespult usw.
Auf IDE-Streamer kann mit den Buchstaben Kürzeln ht bei zurückspulenden Geräten bzw. nht bei nicht zurückspulenden Geräten zugegriffen werden. Im Moment wird nur ein Streamer unterstützt, so dass die Streamernummer immer 0 ist: /dev/(n)ht0
415
magnum
Festplatten verwalten
Damit gibt es genau zwei Gerätedateien für IDE-Streamer: /dev/ht0
IDE-Streamer, Band wird automatisch zurückgespult
/dev/nht0
IDE-Streamer, Band wird nicht zurückgespult
Für Streamer, die an den Floppy-Controller, eine parallele Schnittstelle oder über eigene Interface-Karten angeschlossen werden, gibt es darüber hinaus noch weitere individuelle Gerätedateien.
10.1.3
Gerätedateien mit dem Befehl mknod erzeugen
Mit diesem Befehl können Sie block- oder zeichenorientierte Gerätedateien erzeugen. Die Syntax des Befehls lautet: # mknod [-option] name typ [major minor]
Sowohl die Major-Gerätenummer major als auch die Minor-Gerätenummer minor müssen angegeben werden, wenn der Typ entweder b, c oder u ist, und sie müssen weggelassen werden, wenn der Typ p ist. Beginnen major oder minor mit 0x oder 0X, werden sie als hexadezimale Zahl interpretiert. Beginnen sie dagegen mit 0, werden sie als Oktalzahl und in allen anderen Fällen als Dezimalzahl interpretiert. Es gibt folgende Gerätetypen: Gerätetyp
Beschreibung
b
Erzeugt ein blockorientiertes (gepuffertes) Gerät
c oder u
Erzeugt ein zeichenorientiertes (ungepuffertes) Gerät
-p
Erzeugt eine FIFO-Datei (eine Pipe für die Interprozesskommunikation)
Tab. 10.3: Die Gerätetypen des Befehls mknod
Der Befehl kennt folgende Option: Option
Beschreibung
-m oder -mode=modi
Setzt die Dateizugriffsrechte, wie beim Befehl chmod
Tab. 10.4: Die Option des Befehls mknod
Im Beispiel wird eine FIFO-Gerätedatei fifotest mit den Rechten rw-r--r-- angelegt: # mknod -m 644 fifotest p # ls -l fifotest prw-r--r-- 1 root root
0 Apr 25 17:23 fifotest
Wenn neue Treiber in Linux eingebunden werden, dann korrespondieren diese mit neuen major-Nummern und es werden in der Regel neue Gerätedateien mit dieser major-Nummer angelegt.
416
Kapitel 10 · Geräteverwaltung
10.1.4
Gerätedateien mit dem Befehl MAKEDEV erzeugen
Mit diesem im Verzeichnis /dev befindlichen Shellskript können Sie ebenfalls Gerätedateien anlegen. Dabei geben Sie nur das Gerät an und das Skript ermittelt die Major- und Minor-Gerätenummern. Die Syntax des Befehls lautet: # cd /dev ; ./MAKEDEV [-option(en)] gerät
Unter SUSE Linux 10.0 ist dieses Skript standardmäßig nicht installiert. Der Befehl kennt folgende Optionen: Option
Beschreibung
-d
Löscht die Gerätedateien
-n
Aktualisiert die Gerätedateien nicht wirklich, sondern gibt nur aus, was durchgeführt wird
-v
Ausführliche Ausgabe
Tab. 10.5: Die Optionen des Skripts MAKEDEV
Die folgende Liste enthält nur eine kleine Angabe von Gerätedateitypen, die das Skript erzeugen kann: Gerätetyp
Beschreibung
std
Erzeugt Standardgerätedateien, mem zum Beispiel für Zugriff auf physikalischen Speicher, port für Zugriff auf Ein-/Ausgabe-Ports usw.
console
Erzeugt Gerätedateien für virtuelle Konsolen, tty-Gerätedateien
pty
Erzeugt Gerätedateien für Pseudoterminals
usb
Erzeugt einen Ordner für USB-Gerätedateien und die darin befindlichen Gerätedateien, zum Beispiel lp für den Drucker, mouse für die Maus usw.
fd
Erzeugt Gerätedateien für Diskettenlaufwerke
Tab. 10.6: Die Gerätetypen des Skripts MAKEDEV
In diesem Beispiel werden Gerätedateien für Pseudoterminals erzeugt: # cd /dev ; ./MAKEDEV -v pty create ptyp0c 2 0 root:tty 0666 create ttyp0c 3 0 root:tty 0666 create ptyp1c 2 1 root:tty 0666 create ttyp1c 3 1 root:tty 0666 create ptyp2c 2 2 root:tty 0666 create ttyp2c 3 2 root:tty 0666 ...
417
magnum
Festplatten verwalten
10.1.5
PCI-Geräte mit dem Befehl lspci anzeigen
Der Befehl lspci listet alle PCI-Geräte auf. Das Tool zeigt Informationen über alle PCI-Busse des Systems und alle damit verbundenen Geräte an. Die Syntax des Befehls lautet: # lspci [-option(en)]
Der Befehl kennt unter anderem folgende Optionen: Option
Beschreibung
-b
Buszentrierte Sicht mit Anzeige aller IRQ-Nummern und -Adressen, wie sie von den PCI-Buskarten und nicht vom Kernel gesehen werden
-d [hersteller]: [gerät]
Zeigt nur die Geräte mit dem angegebenen Hersteller oder der Geräte-ID an. Jeder Wert kann weggelassen oder mit dem Zeichen * für einen beliebigen Wert gesetzt werden.
-i [datei]
Verwendet die angegebene Datei als PCI-ID-Datenbank anstelle von /usr/share/pci.ids
-n
Anzeige des PCI-Herstellers und -Gerätecodes als Zahlen
-p [verzeichnis]
Verwendet das angegebene Verzeichnis für die PCI-Bus-Informationen anstelle von /proc/bus/pci
-s [bus:][slot] [.func]
Nur die Geräte, die mit bus, slot und func festgelegt sind, werden angezeigt. Jede Komponente der Geräteadresse kann weggelassen oder mit dem Zeichen * für einen beliebigen Wert gesetzt werden.
-t
Anzeige eines baumartigen Diagramms, das alle Busse, Brigdes, Geräte und Verbindungen enthält
-v
Ausführliche Ausgabe
-vv
Sehr ausführliche Ausgabe
-x
Anzeige des hexadezimalen Dumps der ersten 65 Kbyte des PCIKonfigurationsbereichs (Standardheader)
-xxx
Anzeige des hexadezimalen Dumps des ganzen PCI-Konfigurationsbereichs
Tab. 10.7: Die Optionen des Befehls lspci
Im folgenden Beispiel werden alle PCI-Informationen ausgegeben: # lspci 00:00.0 Host bridge: VIA Technologies, Inc. VT8375 [KM266/KL266] Host Bridge 00:01.0 PCI bridge: VIA Technologies, Inc. VT8633 [Apollo Pro266 AGP] 00:10.0 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.1 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.2 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82) 00:11.0 ISA bridge: VIA Technologies, Inc. VT8235 ISA Bridge 00:11.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT8233/A/C/ VT8235 PIPC Bus Master IDE (rev 06) 00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235 AC97 Audio
418
Kapitel 10 · Geräteverwaltung
Controller (rev 50) 00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74) 01:00.0 VGA compatible controller: S3 Inc. VT8375 [ProSavage8 KM266/KL266]
10.1.6
USB-Geräte mit dem Befehl lsusb anzeigen
Der Befehl lsusb listet alle USB-Geräte auf. Das Tool zeigt Informationen über alle USB-Busse des Systems und alle damit verbundenen Geräte an. Die Syntax des Befehls lautet: # lspci [-option(en)]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-D gerät
Überprüft nicht das Verzeichnis /proc/bus/usb, sondern nur die Informationen über das angegebene Gerät, zum Beispiel /proc/bus/usb/001/001
-d hersteller: [produkt]
Zeigt nur die Geräte mit dem angegebenen Hersteller oder der ProduktID an. Jeder Wert kann weggelassen oder mit dem Zeichen * für einen beliebigen Wert gesetzt werden.
-p [verzeichnis]
Verwendet das angegebene Verzeichnis für die USB-Bus-Informationen anstelle von /proc/bus/usb
-s [bus:][gerätenr]
Nur die Geräte, die mit bus und gerätenr festgelegt sind, werden angezeigt. Jede Komponente der Geräteadresse kann weggelassen werden.
-t
Anzeige eines baumartigen Diagramms
-v
Ausführliche Ausgabe
-vv
Sehr ausführliche Ausgabe
Tab. 10.8: Die Optionen des Befehls lspci
Im folgenden Beispiel werden alle USB-Informationen in Baumstruktur ausgegeben: # lsusb Bus# 4 `-Dev# Bus# 3 `-Dev# Bus# 2 `-Dev# Bus# 1 `-Dev#
-t 1 Vendor 0x0000 Product 0x0000 1 Vendor 0x0000 Product 0x0000 1 Vendor 0x0000 Product 0x0000 1 Vendor 0x0000 Product 0x0000
Auch KDE bietet ein Tool zum Anzeigen der USB-Geräte an. Sie können es über das Hauptmenü SYSTEM - ÜBERWACHUNG - USBVIEW starten:
419
Festplatten verwalten
magnum
Bild 10.1: Grafische Überwachung der USB-Geräte mit KDE
Dieses Tool ist unter Debian GNU/Linux standardmäßig nicht enthalten.
10.1.7
Festplattenanalyse mit den Smartmontools
Mit den Smartmontools können Sie die Zuverlässigkeit von neueren ATA- und SCSIFestplatten und -bandlaufwerken überwachen (ab ATA 3 und SCSI 3). Dazu wird auf so genannte SMART-Informationen von modernen Speichermedien zugegriffen, die durch eine Überwachungstechnologie für die oben genannten Geräte erzeugt werden. SMART ist die Abkürzung für »Self-Monitoring, Analysis and Reporting Technology« und protokolliert nicht nur ständig Messwert und Fehler für die Geräte mit, sondern besitzt auch Funktionen, um die Geräte zu testen. Die Smartmontools bestehen aus dem Befehl smartctl zur Programmsteuerung und Festplattenanalyse, dem Daemon smartd für die ständige, im Hintergrund ausgeführte Geräteüberwachung und der Konfigurationsdatei /etc/smartd.conf. Unter Debian GNU/Linux finden Sie die Konfigurationsdatei unter /etc/default/ smartmontools.
Die Syntax des Befehls smartctl lautet: # smartctl [-option(en)] [gerätename]
Zu den wichtigsten Optionen des Befehls gehören: Option
Beschreibung
-A
Anzeige der Werte aller Attribute
-a
Ausgabe aller SMART-Informationen
-c
Ausgabe der SMART-Methoden, die das Gerät kann, und der benötigten Zeit
Tab. 10.9: Die Optionen des Befehls smartctlb
420
Kapitel 10 · Geräteverwaltung
Option
Beschreibung
-d typ
Angabe des Gerätetyps
-H
Ausgabe des Gesundheitszustands (»Health-Status«) des Geräts
-i
Ausgabe der Informationen zur Gerätemodellnummer, seriellen Nummer, Firmware-Version und ATA-Standardversions- und Revisionsinformationen.
-l typ
Ausgabe von Protokollmeldungen. Es gibt verschiedene Protokolltypen, zum Beispiel selftest [scsi], error [scsi] usw.
-t long
Selbsttest starten
Tab. 10.9: Die Optionen des Befehls smartctlb (Forts.)
Im folgenden Beispiel werden die Informationen einer IDE-Festplatte ausgelesen: # smartctl -i /dev/hda smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF INFORMATION SECTION === Device Model: WDC WD400EB-00CPF0 Serial Number: WD-WCAAT4284064 Firmware Version: 06.04G06 User Capacity: 40,020,664,320 bytes Device is: In smartctl database [for details use: -P show] ATA Version is: 5 ATA Standard is: Exact ATA specification draft version not indicated Local Time is: Wed Nov 9 14:56:23 2005 CET SMART support is: Available - device has SMART capability. SMART support is: Enabled
Im zweiten Beispiel wird ein ausführlicher Test für dieselbe Festplatte gestartet: # smartctl -t long /dev/hda smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === Sending command: "Execute SMART Extended self-test routine immediately in offline mode". Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful. Testing has begun. Please wait 30 minutes for test to complete. Test will complete after Wed Nov 9 15:28:13 2005 Use smartctl -X to abort test.
Im nächsten Beispiel werden die Informationen aus dem Testprotokoll ausgelesen: # smartctl -l selftest /dev/hda smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF READ SMART DATA SECTION === SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Extended offline Completed without error 00% 701 -
421
magnum
Festplatten verwalten
Wenn Sie anstelle einer manuellen Abfrage, wie sie in diesen Beispielen durchgeführt wurde, eine automatische Abfrage durch den smartd bevorzugen, integrieren Sie am besten Start- und Stopskripte zum Booten und Herunterfahren des Daemons. Die Smartmontools enthalten außer den Programmen /usr/sbin/ smartctl und /usr/sbin/smartd auch ein Shellskript smartd, das meist in das Verzeichnis /etc/[rc.d/]init.d eingebunden wird. Mit dem Befehl chkconfig --add smartd können Sie die notwendigen Links für die unterschiedlichen Runlevel erzeugen. Die Konfiguration von smartd kann mit Hilfe der Konfigurationsdatei / etc/smartd.conf durchgeführt werden. Die Anweisung DEVICESCAN bedeutet, dass die Überwachung für alle vorhandenen Geräte durchgeführt werden soll, standardmäßig alle 30 Minuten.
10.1.8
DMA-Modus von IDE-Festplatten
Wenn der DMA-Modus (Direkt Memory Access) aktiviert ist, findet eine effizientere Datenübertragung zwischen IDE-Festplatten und Hauptspeicher statt, denn die Daten werden über einen DMA-Kanal übertragen, so dass die CPU nicht Byte für Byte kopieren muss. Der DMA-Modus ist bei einigen Linux-Distributionen und Kernel-Versionen bereits automatisch aktiv. Wenn dies nicht der Fall ist, kann die DMA-Konfiguration mit dem Befehl hdparm eingerichtet bzw. ausgegeben werden. Die Syntax des Befehls lautet: hdparm [-option(en)] [gerätename]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-i
Die von der Festplatte unterstützten DMA-Modi ausgeben
-d1
DMA-Modus aktivieren
-d0
DMA-Modus deaktivieren
-tT
Die Datenübertragungsrate zwischen Festplatte und Rechner ermitteln
Tab. 10.10: Die Optionen des Befehls hdparm
Ohne Angabe einer Option werden die aktiven Festplattenparameter ausgegeben: # hdparm /dev/had /dev/hda: multcount = 16 (on) I/O support = 1 (32-bit) unmaskirq = 1 (on) using_dma = 1 (on) keepsettings = 0 (off) nowerr = 0 (off) readonly = 0 (off) readahead = 8 (on) geometry = 7476/255/63, sectors = 120103200, start = 0
422
Kapitel 10 · Geräteverwaltung
Im folgenden Beispiel werden die von der Festplatte unterstützten Modi aufgelistet: # hdparm -i /dev/hda /dev/hda: Model=IC35L060AVVA07-0, FwRev=VA3OA52A, SerialNo=VNC302A3C3G7SA Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=52 BuffType=DualPortCache, BuffSize=1863kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=-66060037, LBA=yes, LBAsects=120103200 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5 AdvancedPM=yes: disabled (255) Drive Supports : ATA/ATAPI-5 T13 1321D revision 1 : ATA-2 ATA-3 ATA-4 ATA-5 Kernel Drive Geometry LogicalCHS=7476/255/63 PhysicalCHS=119150/16/63
Im nächsten Beispiel wird die Übertragungsgeschwindigkeit einmal mit und einmal ohne den DMA-Modus gemessen: # hdparm -d0 /dev/hda /dev/hda: setting using_dma to 0 (off) using_dma = 0 (off) # hdparm -Tt /dev/hda /dev/hda: Timing buffer-cache reads: Timing buffered disk reads: # hdparm -d1 /dev/hda /dev/hda: setting using_dma to 1 (on) using_dma = 1 (on) # hdparm -Tt /dev/had /dev/hda: Timing buffer-cache reads: Timing buffered disk reads:
10.1.9
128 MB in 0.78 seconds =164.10 MB/sec 64 MB in 9.55 seconds = 6.70 MB/sec
128 MB in 0.75 seconds =170.67 MB/sec 64 MB in 1.41 seconds = 45.39 MB/sec
DMA-Modus von IDE-Festplatten mit YaST aktivieren
Das Menü zur Einstellung des DMA-Modus befindet sich unter HARDWARE - IDE DMA-MODUS. Hier können Sie den DMA-Modus für IDE-Geräte konfigurieren: Das Setzen der DMA-Einstellungen mit SUSE Linux erfolgt mit dem Skript /etc/ init.d/boot.idedma, das die Einstellungen der Datei /etc/sysconfig/ide verwendet: # more /etc/sysconfig/ide ## Path: Hardware/IDE ## Description: IDE device settings ## Type: string ## Default: "" ## ServiceRestart: boot.idedma # # Force DMA mode for selected device. Use pairs <device>: separated # by space - dma_mode can be "on" (enable default DMA mode), "off" (disable DMA # mode) or any mode supported by hdparm (e.g. "mdma2", "udma5", ...) # Example: "/dev/hdc:off /dev/hdd:udma2" # DEVICES_FORCE_IDE_DMA="/dev/hda:on"
423
Der Verzeichnisbaum von Linux
magnum
Bild 10.2: DMA-Modus mit YAST aktivieren
10.2 Der Verzeichnisbaum von Linux Dieser Abschnitt erläutert den Inhalt der wichtigsten Verzeichnisse des Betriebssystems Linux. Die Aufzählung erhebt keinen Anspruch auf Vollständigkeit. Verzeichnis
Bedeutung
/ (root)
root-Verzeichnis
/bin
Enthält die Befehle für alle Benutzer, die beim Systemstart notwendig sind, bevor das Verzeichnis /usr gemountet wird
/boot
Enthält den Linux-Kernel und die zum Booten benötigten Dateien
/dev
Enthält die Gerätedateien
/etc
Enthält Systemkonfigurationsdateien, wie zum Beispiel passwd, shadow
/home
Enthält die Benutzerverzeichnisse
/lost+found
Enthält die vom Programm fsck gefundenen und nicht zuordenbaren Dateien, wenn Probleme mit dem Dateisystem aufgetreten sind
Tab. 10.11: Die wichtigsten Verzeichnisse des Betriebssystems Linux
424
Kapitel 10 · Geräteverwaltung
Verzeichnis
Bedeutung
/media
Externe Geräte, wie zum Beispiel Diskette, CD-ROM und DVD werden in entsprechende Unterverzeichnisse dieses Verzeichnisses gemountet. Die Unterverzeichnisse cdrom, floppy etc. sind in der Regel schon erstellt. Einige Distributionen besitzen noch symbolische Links von /cdrom zum Beispiel auf /media/cdrom oder /floppy auf /media/floppy usw.
/mnt
Ein leeres Verzeichnis, das jederzeit als Mountpoint verwendet werden kann
/opt
Enthält optionale Software, wie zum Beispiel StarOffice, Netscape usw. Welche Softwarepakete hier abgelegt werden, ist distributionsabhängig.
/proc
Enthält laufende Prozesse und ist ein spezielles Dateisystem (vgl. Abschnitt 10.4.3)
/root
Arbeitsverzeichnis für den Benutzer root
/sbin
Enthält die Systemstartbefehle, wie zum Beispiel init
/srv
Dieses Verzeichnis ist für Beispielumgebungen für Web- und FTP-Server vorgesehen. SUSE Linux liefert hier zwei Unterverzeichnisse www und ftp, bei Debian GNU/Linux und Fedora Core ist es ein leeres Verzeichnis.
/sys
Enthält ab Version 2.6 Systeminformationen des Kernels
/tmp
Enthält temporäre Dateien und ist bei älteren Linux- und vielen Unix-Systemen ein eigenes Dateisystem, dessen Inhalt beim Neustarten des Systems gelöscht wird. Bei manchen Distributionen, wie zum Beispiel Debian GNU/ Linux wird das Verzeichnis unabhängig, ob es ein eigenes Dateisystem hat oder nicht, bei jedem Neustart gelöscht.
/usr
Enthält die Unix-Systemsoftware (unix system resources), zum Beispiel Benutzerbefehle, die Manual Pages und Programme und Dateien, um die grafische Oberfläche zu betreiben
/var
Enthält Dateien variierenden Inhalts, wie zum Beispiel Protokolle, Spooldateien usw.
Tab. 10.11: Die wichtigsten Verzeichnisse des Betriebssystems Linux (Forts.)
Der Verzeichnis- oder Dateibaum unter Linux ist die logische Ablage der Dateien und Verzeichnisse des Betriebssystems und gleichzeitig die, die der Benutzer sieht. Die physikalische Ablage der Daten wird durch die Dateisysteme selbst geregelt.
425
Festplatten partitionieren
magnum
10.3 Festplatten partitionieren Eine PC-Festplatte kann in bis zu vier primäre Partitionen aufgeteilt werden. Eine dieser vier Partitionen kann dazu verwendet werden, um eine so genannte erweiterte oder extended-Partition anzulegen. Das Betriebssystem Linux kann im Gegensatz zu anderen Betriebssystemen nicht nur auf einer primären, sondern auch auf einer erweiterten Partition installiert werden. Dabei ist es möglich, die verwendete Partition in weitere Linux-Partitionen zu unterteilen, in denen sich nach der Installation dann die verschiedenen Teile des Betriebssystems befinden. Teile des Betriebssystems Linux können aus Sicherheits- oder Datensicherungsgründen auf mehrere Partitionen aufgeteilt werden, zum Beispiel können sich die zum Booten und Betreiben des Systems notwendigen Teile in einer root-Partition / und die Benutzerdaten auf einer /home-Partition befinden. Eine Partitionierungsmöglichkeit wäre: Bezeichnung
Erklärung
/
root-Partition mit den wichtigsten Systemdateien
swap
Swap-Partition
/var
Variable Dateien, zum Beispiel Spooldateien, Maildateien etc.
/usr
Systemprogramme
/opt
Optionale Software
/home
Benutzerverzeichnisse
Tab. 10.12: Mögliche Partitionierung einer Festplatte
Bereits bei der Installation eines Betriebssystems muss die Aufteilung der Festplatten gut geplant werden, denn es ist nur mit großem Aufwand möglich, die Konfiguration später nochmals zu ändern. Sie sollten auf jeden Fall eine Swap-Partition als Auslagerungsbereich einplanen (vergleiche Abschnitt 10.5). Eine Aufteilung des Betriebssystems in mehrere Partitionen ist dann sinnvoll, wenn diese für bestimmte Aufgaben verwendet werden sollen, zum Beispiel das Verzeichnis /home auf einem Fileserver oder das Verzeichnis /var auf einem Druckserver. Das vereinfacht im ersten Beispiel die physikalische Datensicherung und verhindert im zweiten Beispiel, dass durch eine Partition, die große Dateien in /var spoolt und dadurch voll wird, nicht das ganze System voll wird. Partitionen sollten nie zu klein angelegt werden, denn um eine Partition zu ändern, müssen die Daten gesichert, die Partition neu eingerichtet und dann die Daten wieder zurückgesichert werden. Mit Programmen wie dem Logical Volume Manager können mehrere Festplattenpartitionen zu einem logischen Bereich zusammengefasst werden. Auf diese Weise lassen sich Partitionen vergrößern und müssen dafür nicht neu angelegt werden.
426
Kapitel 10 · Geräteverwaltung
Wenn Linux auf einer PC-Hardware installiert wird, gelten zusätzlich zu den Linux-Partitionen auch die auf PC-Systemen gängigen Partitionstypen:
쮿
Primäre Partition: Auf einer PC-Festplatte können bis zu vier primäre Partitionen oder drei primäre und eine erweiterte Partition angelegt werden. Die aktive primäre Partition muss ein Betriebssystem enthalten.
쮿
Erweiterte Partition und logische Partitionen: Auf jeder Festplatte kann eine erweiterte Partition angelegt werden, die in mehrere Bereiche unterteilt werden kann, die so genannten logischen Laufwerke.
Für Linux können Sie auf einem PC-System sowohl eine primäre als auch die erweiterte Partition mit den logischen Laufwerken verwenden. Das Betriebssystem Linux kann sogar in eine erweiterte Partition installiert werden. Die Daten selbst werden aber in den Partitionsbereichen mit eigenen Dateisystemen verwaltet.
10.3.1
Der Befehl fdisk
Dieser Befehl kann Partitionstabellen ausgeben, erstellen, verändern und die aktiven Partitionen bestimmen. Die Syntax des Befehls lautet: # fdisk [-option(en)] gerät
oder, um die Größe von Partitionen in Blöcken zu ermitteln: # fdisk -s partition
Der Befehl kann mit verschiedenen Optionen gestartet werden: Option
Beschreibung
-b sektorgröße
Definiert die Sektorgröße der Festplatte. Gültige Werte sind 512, 1024 oder 2048. Die neueren Kernel kennen die Sektorgröße. Diese Option muss nur bei alten Kernels verwendet werden.
-C zylinder
Definiert die Anzahl der Zylinder der Festplatte
-H köpfe
Definiert die Anzahl der Köpfe der Festplatte (nicht die physikalische Anzahl, sondern die für Partitionstabellen verwendete Zahl). Die Werte 255 und 16 werden empfohlen.
-l
Listet die Partitionstabellen für spezielle Geräte auf und beendet das Programm. Wenn keine Gerätenamen angegeben werden, werden die in /proc/ partitions verwendet, sofern sie vorhanden sind.
-S sektoren
Definiert die Anzahl von Sektoren pro Spur auf der Festplatte (nicht die physikalische Anzahl, sondern die für Partitionstabellen verwendete Zahl). Der Wert 63 wird empfohlen.
-s partition
Die Größe der Partition in Blöcken wird an der Standardausgabe angezeigt.
-u
Beim Auflisten von Partitionstabellen werden Sektoren anstelle von Zylindern angezeigt. Das ist bei modernen Festplatten ein geeigneterer Wert.
Tab. 10.13: Die Optionen des Befehls fdisk
427
magnum
Festplatten partitionieren
Wenn Sie das Programm starten, werden mehrere Menüpunkte zur Auswahl angeboten: Option Beschreibung a
Das Bootflag umschalten, das heißt, die aktuelle Partition bootbar oder nicht bootbar definieren
b
Das BSD-Festplattenlabel editieren
c
Das DOS-Kompatibilitätsflag umschalten
d
Die aktuelle Partition löschen
l
Bekannte Partitionstypen auflisten
m
Dieses Menü ausgeben
n
Eine neue Partition hinzufügen
o
Eine neue leere DOS-Partitionstabelle erzeugen
p
Die Partitionstabelle ausgeben
q
Programm beenden, ohne zu speichern
s
Ein neues leeres Sun-Festplattenlabel anlegen
t
Die ID des aktuellen Partitionssystems ändern
u
Ändern der Anzeige-/Eintragseinheiten (Zylinder, Sektoren)
v
Die Partitionstabelle auf Fehler überprüfen
w
Partitionstabelle auf die Festplatte zurückschreiben und Programm beenden
x
Zusatzfunktionen für Experten: b c d e f g h m p q r s v w
den Anfang der Daten in eine Partition verschieben die Anzahl der Zylinder ändern die Rohdaten in die Partitionstabelle ausgeben die erweiterten Partitionen auflisten die Partitionsreihenfolge festlegen eine IRIX-(SGI-)Partitionstabelle erstellen die Anzahl der Köpfe ändern dieses Menü ausgeben die Partitionstabelle ausgeben Programm beenden, ohne zu speichern zum Hauptmenü zurückkehren die Anzahl der Sektoren/Spuren ändern die Partitionstabelle auf Fehler überprüfen Partitionstabelle auf die Festplatte zurückschreiben und Programm beenden
Tab. 10.14: Die Menüpunkte des Befehls fdisk
428
Kapitel 10 · Geräteverwaltung
Im ersten Beispiel wird die Partitionstabelle für die Festplatte /dev/hda ausgegeben: # fdisk /dev/hda The number of cylinders for this disk is set to 2434. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/hda: 20.0 GB, 20020396032 bytes 255 heads, 63 sectors/track, 2434 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot /dev/hda1 * /dev/hda2
Start 1 65
End Blocks Id System 64 514048+ 82 Linux swap 2434 19037025 83 Linux
Sie sollten mit dem Befehl fdisk sehr vorsichtig umgehen, da Sie bei falscher Handhabung Ihre Partitionstabelle zerstören und damit nicht mehr auf die Daten zugreifen können. Im nächsten Beispiel werden eine primäre und eine sekundäre Partition auf einer zweiten IDE-Fesplatte /dev/hdb neu eingerichtet: # fdisk /dev/hdb Device contains neither a valid DOS partition table, nor Sun or SGI disklabel Building a new DOS disklabel. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. The number of cylinders for this disk is set to 1218. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): n Command action e extended p primary partition (1-4) p
Partition number (1-4): 1 First cylinder (1-1218, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1218, default 1218): 200M Command (m for help): p Disk /dev/hdb: 275 heads, 65 sectors, 1218 cylinders Units = cylinders of 16365 * 512 bytes Device Boot Start End Blocks Id System /dev/hdb1 1 105 823218+ 83 Linux Command (m for help): n Command action e extended p primary partition (1-4) e
429
magnum
Festplatten partitionieren
Partition number (1-4): 2 First cylinder (106-1218, default 106): Using default value 106 Last cylinder or +size or +sizeM or +sizeK (101-1218, default 1218): Using default value 1218 Command (m for help): p Disk /dev/sdb: 275 heads, 65 sectors, 1218 cylinders Units = cylinders of 16365 * 512 bytes Device Boot /dev/hdb1 /dev/hdb2
Start 1 106
End 105 1218
Blocks Id System 823218+ 83 Linux 8981695 5 Extended
Im folgenden Beispiel wird in der erweiterten Partition eine Swap-Partition angelegt: Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l
First cylinder (365-1218, default 365): Using default value 365 Last cylinder or +size or +sizeM or +sizeK (365-1218, default 1218): +800M Command (m for help): t Partition number (1-6): 6 Hex code (type L to list codes): 82 Changed system type of partition 6 to 82 (Linux swap) Command (m for help): p Disk /dev/sdb: 275 heads, 65 sectors, 1218 cylinders Units = cylinders of 16365 * 512 bytes Device Boot /dev/hdb1 /dev/hdb2 /dev/hdb5
Start 1 106 107
End 105 1218 187
Blocks Id System 823218+ 83 Linux 8981695 5 Extended 524042+ 82 Linux swap
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: If you have created or modified any DOS 6.x partitions, please see the fdisk manual page for additional information. Syncing disks.
Wenn Sie Änderungen an der Festplattenpartition mit fdisk vorgenommen haben, müssen Sie anschließend das System neu booten, damit diese wirksam werden.
10.3.2
Der Befehl cfdisk
Dieser Befehl kann ebenfalls eine Festplatte partitionieren. Zulässige Geräte sind / und /dev/sdd. Die Darstellung des Befehls unterscheidet sich von der des Befehls fdisk. dev/hda, /dev/hdb, /dev/sda, /dev/sdb, /dev/sdc
430
Kapitel 10 · Geräteverwaltung
Dieser Befehl steht unter Fedora Core Linux nicht zur Verfügung. Die Syntax des Befehls lautet: # cfdisk [-option(en)] gerät
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-a
Markieren der aktuellen Partition mit einem Cursor anstelle einer inversen Hervorhebung
-c cylinder
Angabe der Anzahl der Zylinder
-g
Es wird nicht die Festplattengeometrie des Festplattentreibers verwendet, sondern versucht, die Geometrie aus der Partitionstabelle zu ermitteln.
-h köpfe
Angabe der Anzahl der Köpfe
-P format
Die Partitionstabelle wird im angegebenen Format angezeigt. Mögliche Formate sind r, s oder t (siehe Befehl p in der nächsten Tabelle).
-s sektoren
Angabe der Sektoren pro Spur
-z
Mit einer leeren Partitionstabelle beginnen
Tab. 10.15: Die Optionen des Befehls cfdisk
Der Befehl verwendet folgende Befehle: Option
Beschreibung
b
Umschalten des Bootflags der aktuellen Partition, das heißt, ob die aktuelle Partition bootbar ist oder nicht
d
Löschen der aktuellen Partition. Dies wandelt die Partition in freien Festplattenplatz um.
g
Ändern der Festplattengeometrie: Zylinder, Köpfe oder Sektoren pro Spur
h
Das Hilfemenü anzeigen
m
Die maximale Ausnutzung des Festplattenplatzes der aktuellen Partition gewährleisten
n
Eine neue Partition anlegen, wobei Sie weitere Einstellungsmöglichkeiten beantworten müssen
p
Die Partitionstabelle anzeigen. Dabei können folgende Partitionsformate gewählt werden: r s t
q
Rohdatenformat Partitionstabelle im Format der Sektorenreihenfolge Partitionstabelle im Rohformat
Programm beenden, ohne die Änderungen zu speichern
Tab. 10.16: Die Menüpunkte des Befehls cfdisk
431
Festplatten partitionieren
magnum
Option
Beschreibung
t
Ändern des Dateisystemtyps. Standardmäßig werden neue Partitionen als LinuxPartitionen angelegt.
u
Die Einheiten der Partitionsgröße ändern. Es können Mbyte, Sektoren und Zylinder gewählt werden.
W
Schreibt die Partitionstabelle auf die Festplatte, wodurch die Änderungen gespeichert werden
Pfeiltasten Bewegen den Cursor zur vorherigen oder nächsten Partition Tab. 10.16: Die Menüpunkte des Befehls cfdisk (Forts.)
Im folgenden Beispiel wird die Partitionstabelle für das Gerät /dev/hda2 ausgegeben: # fdisk /dev/hda2 cfdisk 2.11z Disk Drive: /dev/hda2 Size: 19493913600 bytes, 19.4 GB Heads: 255 Sectors per Track: 63 Cylinders: 2370 Name Flagsart Type FS Type [Label] Size (MB) Pri/Log Free Space 19493.92
10.3.3
Grafische Hardware-Informationen mit YaST
Mit YAST ist es auch möglich, sich Informationen zur Hardware anzeigen zu lassen. Über das Menü HARDWARE - HARDWARE-INFORMATIONEN können Sie Informationen zur vorhandenen Hardware auflisten, zum Beispiel:
Bild 10.3: Hardware-Informationen zur Festplatte
432
Kapitel 10 · Geräteverwaltung
10.3.4
Grafische Hardware-Informationen mit Fedora
Auch Fedora Core Linux kann Informationen zur Hardware grafisch anzeigen. Über das Menü SYSTEMVERWALTUNG - HARDWARE-BROWSER können Sie Informationen zur vorhandenen Hardware auflisten:
Bild 10.4: Hardware-Browser von Fedora Core Linux
Eine etwas andere grafische Darstellung der Hardware-Informationen erhalten Sie unter Fedora Core Linux über das Menü SYSTEMVERWALTUNG - INFOZENTRUM:
Bild 10.5: Hardware-Infozentrum unter Fedora Core Linux
433
Festplatten partitionieren
10.3.5
magnum
Grafische Festplattenpartitionierung mit YaST
Das YAST-Modul für die Partitionierung von Festplatten befindet sich im Menü SYSTEM - PARTITIONIEREN. Es erscheint zuerst eine Warnung, da das Partitionieren der Festplatten zu Datenverlust führen kann:
Bild 10.6: Warnmeldung vor dem Partitionieren von Festplatten
Diese Warnmeldung sollte unbedingt beachtet werden, um sich vor Datenverlust zu schützen. Wenn Sie sicher sind, dass Sie die Festplatte problemlos partitionieren können, klicken Sie auf JA. Das nächste Fenster listet die vorhandenen Festplatten auf. Die Aufgaben Anlegen, Bearbeiten und Löschen können an dieser Stelle dialogorientiert durchgeführt werden:
Bild 10.7: Festplatten mit YAST partitionieren
In diesem Beispiel wird eine erweiterte Partition neu angelegt. Zuerst müssen Sie den Partitionstyp auswählen:
434
Kapitel 10 · Geräteverwaltung
Bild 10.8: Partitionstyp wählen
Anschließend können Sie die Partition Ihren Wünschen entsprechend anlegen. Sie können entscheiden, ob die Partition formatiert werden soll, welches Dateisystem aufgebracht wird, wie groß sie ist, in welches Verzeichnis sie gemountet wird und ob weitere Mountoptionen in der Datei /etc/fstab hinterlegt werden sollen:
Bild 10.9: Partition anlegen
Wenn Sie die Schaltfläche FSTAB-OPTIONEN anklicken, können Sie zusätzliche Mountoptionen in die Datei /etc/fstab eintragen:
Bild 10.10: Mountoptionen in /etc/fstab eintragen
435
magnum
Dateisystem verwalten
10.4 Dateisystem verwalten Ein Dateisystem regelt die Ablage von Daten auf dem physikalischen Datenträger. Während ein Benutzer seine Dateien und Verzeichnisse mit logischen Namen versieht, um sie wieder zu erkennen und einzuordnen, organisiert im Hintergrund das Dateisystem die tatsächliche Ablage über ein ausgeklügeltes Nummernsystem. Nachdem eine Festplatte partitioniert wurde, müssen auf den einzelnen Partitionen Dateisysteme aufgebracht werden, damit das Betriebssystem diese verwalten kann. Wenn auf das Dateisystem zugegriffen wird, werden aus Gründen der Performance die Schreibvorgänge zuerst im Hauptspeicher zwischengespeichert (»Caching«) und dann ungefähr alle 30 Sekunden mit der Festplatte synchronisiert. Daher ist es notwendig, ein Betriebssystem, das diesen Mechanismus verwendet, wie zum Beispiel Linux, ordentlich herunterzufahren. Bei einem Systemabsturz kann dies auch zu einem Datenverlust führen. Modernere Dateisysteme verwenden daher den so genannten Journaling-Mechanismus, bei dem die Meta- bzw. Strukturinformationen des Dateisystems ständig auf der Festplatte in den freien Datenblöcken mitprotokolliert werden. Wurde das System nicht ordnungsgemäß heruntergefahren, zum Beispiel durch einen Systemabsturz, kann trotzdem schnell wieder ein konsistenter Zustand des Dateisystems hergestellt werden, indem die protokollierten Transaktionen beim Hochfahren des Systems nachvollzogen werden. Damit werden auch langwierige Dateisystemüberprüfungen überflüssig.
10.4.1
Lokale Dateisysteme
Lokale Dateisysteme sind alle Dateisysteme, die auf Datenträgern abgelegt sind, die sich in direkt am System angeschlossenen Geräten befinden. Zu den Linux-Dateisystemen und den mit dem Dateisystem von Linux kompatiblen plattenbasierten Dateisystemen gehören: Dateisystem
Beschreibung
ext2
Es ist das ursprüngliche Standarddateisystem für die meisten Linux-Distributionen. Vom Aufbau ähnelt es dem BSD Fast-File-System. Bei älteren Kerneln und 32-Bit-CPUs gibt es eine Beschränkung der maximalen Dateigröße auf 2 Gbyte. Diese Bibliotheks- bzw. Kernel-Limitierung wurde mit der Einführung des Large File Support (LFS) ab Kernel 2.4 aufgehoben.
reiserfs
Ein neueres Dateisystem mit zusätzlichen Optionen, das zunehmend unter Linux Verwendung findet und nach seinem Entwickler Hans Reiser benannt wurde. Auch die Firma SUSE hat zur Entwicklung mit beigetragen und das Dateisystem ab 2000 mit ausgeliefert und bevorzugt verwendet. Seit dem Kernel 2.4 ist das Dateisystem fester Bestandteil von Linux und steht auf allen Linux-Distributionen zur Verfügung.
ext3
Das verbesserte Standarddateisystem für Linux ist der Nachfolger von ext2. Der grundsätzliche Aufbau von ext2 blieb dabei unverändert, es wurde um den Journaling-Mechanismus erweitert. Seit der Kernel-Version 2.4 ist es Bestandteil des Standardlieferumfangs.
Tab. 10.17: Plattenbasierte Dateisysteme – kompatibel mit Linux
436
Kapitel 10 · Geräteverwaltung
Dateisystem
Beschreibung
hpfs/hfs
Das High Performance Filesystem, das vom Betriebssystem OS/2 von IBM verwendet wird, ist unter Linux wie (v)fat benutzbar, bietet aber keine vollständige Unix-Semantik.
jfs
Ein weiteres Dateisystem für Linux-Distributionen, das wie ext3 und reiserfs den Journaling-Mechanismus für eine schnelle Wiederherstellung des Dateisystems verwendet. Es wurde ursprünglich als Dateisystem für OS/2-Server von IBM entwickelt und anschließend auch auf Linux portiert.
xfs
Die Firma SGI entwickelte dieses Dateisystem als Hochverfügbarkeitsdateisystem für ihr UNIX-Derivat IRIX. Anschließend wurde es auch auf Linux portiert. Es ist gut für die Verwaltung von sehr großen Datenmengen geeignet und unterstützt ebenfalls die Journaling-Funktionalität.
ntfs
Das New Technology Filesystem, das unter Windows NT, Windows 2000 und Windows XP verwendet wird. Die Linux-Dateisysteme können darauf lesend zugreifen. Im Moment wird daran gearbeitet, mit den entsprechenden Rechten auch schreibend auf ntfs zugreifen zu können.
iso9660
Das Dateisystem für CD-ROMs, das herstellerübergreifend genormt ist
dos oder fat oder vfat
Das PC-Dateisystem ist eine Implementierung unter Unix des FAT32-Filesystems von DOS. Damit kann unter Linux auf DOS-formatierte Dateisysteme, zum Beispiel Disketten, zugegriffen werden.
udfs
Das Universal Disk Format Filesystem, das für optische Speichermedien wie DVDs und CD-ROMs verwendet wird.
ufs
Das Standard Unix Filesystem, das unter Linux auf dem BSD-Fast-File-System basiert. Je nach Hersteller ist es nur lesbar oder les- und beschreibbar.
vxfs
Das Veritas Filesystem des Veritas Volume Managers, ein Drittherstellerprodukt, das oft optional zusammen mit Linux eingesetzt wird.
Tab. 10.17: Plattenbasierte Dateisysteme – kompatibel mit Linux (Forts.)
Das Nachfolgedateisystem von reiserfs mit dem Namen reiser4 wurde bereits entwickelt, ist aber im Moment noch nicht in den Kernel integriert (Stand November/ 2005), seine Aufnahme wurde aber bereits vom Autoren des Dateisystems beantragt.
10.4.2
Netzwerk- oder verteilte Dateisysteme
Verteilte Dateisysteme basieren auf einem Netzwerk. Zu den weit verbreiteten gehören nfs (Network Filesystem) und smbfs (Samba-Filesystem). Sie erlauben es den Benutzern, Dateien auf verschiedene Systeme im Netzwerk zu verteilen, wodurch Ressourcen von bestimmten Rechnern im Netz für andere Systeme zur Verfügung gestellt werden. Beide werden ausführlich in Kapitel 20 erläutert.
437
magnum
Dateisystem verwalten
10.4.3
Pseudodateisysteme
Pseudodateisysteme sind spezielle Dateisysteme, die sich zum Teil nur im RAM befinden und unter anderem Zugriff auf Kernel-Informationen bieten. Zu den Pseudodateisystemen gehören: Dateisystem Beschreibung autofs
Das Automounter Filesystem ist für das automatische Mounten von Dateisystemen erforderlich.
procfs
Das Prozess-Filesystem für die Verwaltung der Prozesse in einem System ist ein virtuelles Dateisystem, das sich nur im RAM befindet und keinen Festplattenplatz belegt. Dieses Dateisystem wird standardmäßig während des Bootens in den Verzeichnisbaum von Linux eingehängt. Die Prozesse werden mit ihrer PID als Verzeichnisse mit Besitzer und Gruppe im Verzeichnis /proc aufgelistet. In den jeweiligen Prozessverzeichnissen befinden sich Pseudodateien für den Zugriff auf die Prozess-ID und für die Prozessverwaltung. Das Verzeichnis /proc wird in der Regel mit Hilfe der Befehle ps, kill usw. verwaltet (vergleiche Kapitel 15).
swap
Das Swap-Filesystem wird vom Kernel für die Verwaltung der Swap-Partition verwendet. Es ist möglich, im laufenden Betrieb neue Swap-Dateien hinzuzufügen (vergleich Abschnitt 10.5).
sysfs
Ab dem Kernel Version 2.6 gibt es das sysfs-Dateisystem, das die Geräte und Busse eines Systems in einer Dateisystemhierarchie aufführt, auf die der Benutzer zugreifen kann. Auf diese Weise kann er zum Beispiel geräte- und treiberspezifische Optionen verwenden, die vorher in /proc verwaltet wurden. Das Dateisystem sysfs wird in das Verzeichnis /sys gemountet und enthält wiederum Verzeichnisse, um Geräte zu organisieren.
tmpfs
Das temporäre Filesystem befindet sich ebenfalls im RAM, wobei Linux erweiterte Möglichkeiten zu einer RAM-Disk bietet, wie sie in anderen Systemen genannt wird. Das temporäre Dateisystem unter Linux wächst dynamisch mit den Kapazitätsanforderungen, ist aber maximal auf die halbe Größe des RAMs begrenzt. Wird der notwendige Platz zu groß für den RAM-Speicher, dann werden Teile des tmpfs auf den Swap-Bereich auf der Festplatte ausgelagert. Dieses Dateisystem ist auf /dev/shm gemountet, bei neueren Linux-Systemen kann dieses Dateisystem auch für das Verzeichnis /tmp verwendet werden. Der Inhalt dieses Verzeichnisses wird bei einem Neustart des Systems gelöscht.
Tab. 10.18: Pseudodateisysteme
10.4.4
Der Aufbau von ext2
In diesem Abschnitt wird die Beschreibung des Aufbaus von den Aufbau eines Linux-Dateisystems verwendet.
ext2
als Beispiel für
Bevor das Betriebssystem Linux eine Partition verwenden kann, muss darauf ein Dateisystem, wie zum Beispiel ext2 oder ext3, erzeugt werden. Das Dateisystem ext2 konnte ursprünglich eine Datei bis zu 2 Gbyte Größe enthalten. Seit SUSE 7.0 gibt es den so genannten »Large File Support« (LFS) für 64-BitBetriebssysteme, der eine Dateigröße von bis zu 16 Gbyte unterstützt. Fedora Core Linux unterstützt LFS ebenfalls, da Red Hat Linux es ab Version 7.1 unterstützt. Debian GNU/Linux enthält LFS standardmäßig mit der neuen Version, die unter dem Codenamen etch veröffentlicht wird.
438
Kapitel 10 · Geräteverwaltung
Die Dateiinformationen des Systems werden durch Inodes verwaltet, die auch die Adressen der Datenblöcke einer Datei speichern. Standardmäßig wird bei einem neu angelegten Dateisystem ext2 ein Inode pro zwei Kilobyte Festplattenplatz zugewiesen. Diese Größe lässt sich allerdings mit Hilfe des Befehls mke2fs steuern, der das Dateisystem erzeugt (vergleiche Abschnitt 10.4.8). Der Zugriff auf eine Festplatte lässt sich dadurch beschleunigen, dass die Zylinder einer Partition in Gruppen aufgeteilt werden, wobei eine Zylindergruppe standardmäßig aus 16 Zylindern besteht. Dieses Dateisystem umfasst folgende Komponenten:
쮿
Plattenlabel
쮿
Bootblock
쮿
Superblock und Backup-Superblöcke
쮿
Zylindergruppe mit –
Zylindergruppenblöcken
–
Inode-Tabelle
–
Datenblöcken
Bild 10.11: Der Aufbau des Dateisystems ext2
439
Dateisystem verwalten
magnum
Der Bootblock Im ersten Block einer Festplatte befindet sich der Bootblock mit dem bootstrap-Programm, dem primären Bootloader (vergleiche Kapitel 12). Der Bootblock gehört nicht zum Dateisystem selbst, wird hier aber der Vollständigkeit halber beschrieben.
Der Superblock Der Superblock enthält Informationen über das Dateisystem und befindet sich in den nächsten 16 Sektoren der Festplatte. Zu den gespeicherten Informationen gehören:
쮿
Anzahl und Größe der Zylindergruppen
쮿
Datenblock- und Fragmentgröße
쮿
Anzahl der freien und belegten Datenblöcke
쮿
Maximale Zahl von Dateien (Inode-Anzahl)
쮿
Belegte Inodes
쮿
Namen der Mountverzeichnisse
쮿
Informationen über die Hardware (entsprechend dem VTOC)
쮿
Zustand des Dateisystems
Die Daten des Superblocks werden im laufenden Betrieb ständig aktualisiert, wozu eine Kopie in den Hauptspeicher geladen und verändert wird. Ein Systemausfall vor der Aktualisierung des Superblocks auf der Festplatte führt zu einer automatischen Überprüfung des Dateisystems durch den Befehl fsck (vergleiche Abschnitt 10.4.11). Dasselbe geschieht, wenn ein Dateisystem nicht sauber mit dem Befehl umount ungemountet wurde. Da der Superblock selbst auch beschädigt werden könnte, werden Kopien von ihm auf der Festplatte abgelegt, die so genannten Backup-Superblöcke, die sich am Anfang von jeder Zylindergruppe befinden. Der erste Backup-Superblock beginnt also bei Sektor 32, wo auch die erste Zylindergruppe beginnt.
Zylindergruppen Partitionen werden in Zylindergruppen unterteilt, um den Zugriff auf die Festplatte zu beschleunigen. Dateien werden vom Dateisystem, so weit möglich, immer innerhalb einer Zylindergruppe gespeichert und eine Fragmentierung von Dateien wird vermindert. Am Anfang jeder Zylindergruppe befindet sich ein Backup-Superblock. Anschließend folgt der Zylindergruppenblock, der die notwendigen Informationen für die Zylindergruppe enthält, wie zum Beispiel:
쮿
Anzahl der Zylinder
쮿
Anzahl der freien und belegten Inodes
쮿
Anzahl der freien und belegten Datenblöcke
쮿
Anzahl der Verzeichnisse
Des Weiteren enthält eine Zylindergruppe eine Inode-Tabelle und die Datenblöcke, in denen die Daten selbst gespeichert sind.
440
Kapitel 10 · Geräteverwaltung
Inodes Die Inode-Tabelle verwaltet die Inodes der Zylindergruppe. Ein Inode beschreibt eine Datei und ihre Datenblöcke und enthält folgende Informationen:
쮿
Dateityp
쮿
Zugriffsrechte
쮿
Linkzähler
쮿
Besitzer der Datei (UID)
쮿
Gruppenzugehörigkeit der Datei (GID)
쮿
Dateigröße
쮿
Letztes Änderungsdatum
쮿
Letztes Zugriffsdatum
쮿
Anzahl der Datenblöcke und Adressverweise auf die verwendeten Datenblöcke
Es gibt zwölf direkte Zeiger, die direkt auf einen Datenblock verweisen. Ein Datenblock hat standardmäßig die Größe eines Kbytes unter Linux. Damit können standardmäßig 12 * 1 Kbyte = 12 Kbyte Daten gespeichert werden. Ein einfach indirekter Zeiger zeigt auf einen Dateisystemblock, der wiederum auf 256 weitere Adressen von 1 Kbyte großen Datenblöcken verweist. Damit können standardmäßig 256 * 1 Kbyte = 256 Kbyte Daten gespeichert werden. Es gibt einen zweifach indirekten Zeiger, der auf einen Dateisystemblock mit zwei einfach indirekten Zeigern zeigt, die wiederum jeweils auf 256 weitere Adressen von 1 Kbyte großen Datenblöcken verweisen. Damit können standardmäßig 256 * 256 * 1 Kbyte = 64 Mbyte Daten gespeichert werden. Ein dreifach indirekter Zeiger zeigt auf einen Dateisystemblock, der auf zwei zweifach indirekte Zeiger verweist. Damit können theoretisch bis zu 256 * 256 * 256 * 1 Kbyte = 16,6 Gbyte Daten gespeichert werden.
441
Dateisystem verwalten
magnum
Bild 10.12: Inode-Tabelle von ext2
Unter Linux können Datenblöcke auch einen höheren Wert als 1.024 Byte annehmen, zum Beispiel 2 Kbyte oder 4 Kbyte. Dies lässt sich beim Anlegen des Dateisystems steuern (vergleiche Abschnitt 10.4.8). Die maximale theoretische Dateigröße ist bei größeren Datenblöcken auch entsprechend größer, nämlich 256 Gbyte bei einer Blockgröße von 2 Kbyte und 4.100 Gbyte bei einer Blockgröße von 4 Kbyte.
442
Kapitel 10 · Geräteverwaltung
Datenblöcke Die Datenblöcke enthalten die tatsächlichen Daten der Dateien, zum Beispiel ASCII-Text, Anwendungsdaten oder binäre Daten.
10.4.5
Das Dateisystem ext3
Das Dateisystem ext3 basiert in unveränderter Form auf der Struktur von ext2 und besitzt damit dieselben Vor- und Nachteile. Es wurde lediglich um die JournalingFunktionalität erweitert. Das Journal protokolliert alle im Moment bearbeiteten Dateien, damit nach einem Systemabsturz oder Ähnlichem beim Neustart nur noch diese Dateien auf Inkonsistenzen hin überprüft werden müssen. Des Weiteren wurde das transaktionsbasierte Modell verwendet, nach dem eine Datei so lange gültig bleibt, bis die Bearbeitung einer neueren Version ganz abgeschlossen ist. Dadurch kann nur im Moment des Abspeicherns ein Fehler auftreten. Jedes ext2-Dateisystem kann problemlos in ein ext3-System konvertiert werden und umgekehrt. Das heißt, auch bereits bestehende Dateisysteme können ohne Neuinstallation den Journaling-Mechanismus zugewiesen bekommen. Journaling bedeutet, dass Änderungen im Dateisystem mitprotokolliert werden, wobei allerdings die Änderungen an den Metadaten, das heißt die Informationen zu einer Datei, und die Dateninhalte unterschiedlich behandelt werden. Das Dateisystem ext3 unterstützt drei verschiedene Journaling-Modi:
쮿
journal: Dieser Modus protokolliert Änderungen an Metadaten und Dateien, was sehr sicher, aber auch sehr langsam ist.
쮿
ordered:
쮿
writeback:
Dieser Modus protokolliert Änderungen an Metadaten und geänderte Dateien, deren Metadaten davon betroffen sind, werden zuvor gesichert. Dadurch ist zwar immer die Dateisystemkonsistenz gewährleistet, aber es besteht kein absoluter Schutz vor Verlust von Änderungen in Dateien.
Dieser Modus protokolliert nur die Änderungen an Metadaten, während die Änderungen an den Dateien nur mit den Standardverfahren ungefähr alle 30 Sekunden auf die Festplatte geschrieben werden. Dies kann zu einem inkonsistenten Zustand führen: Wenn zum Beispiel eine Datei neue Datenblöcke belegen will, wird dies in den Metadaten entsprechend eingetragen, während die Blöcke aber erst nach der nächsten Synchronisation tatsächlich mit ihren Daten beschrieben werden.
Mit folgendem Befehl ist es möglich, den gewünschten Journaling-Modus zu aktivieren (vergleiche Abschnitt 10.4.10): # mount -t ext3 -o data=writeback /dev/hda2 /daten
443
magnum
Dateisystem verwalten
10.4.6
Das Dateisystem reiserfs
Dieses Dateisystem unterscheidet sich von traditionellen BSD-basierten Dateisystemen, wie zum Beispiel ext2 oder ext3, durch den Einsatz von Baumstrukturen. Das Dateisystem reiserfs speichert die Daten in einem so genannten B-Baum, wobei ein Element des Baumes Knoten genannt wird. Von einem Knoten aus können alle weiteren Knoten erreicht werden. Ein Teilbaum wird aus den Knoten unterhalb eines bestimmten Knotens gebildet. Diese Strukturen werden dynamisch erzeugt und können jederzeit in der Größe angepasst werden, sie unterliegt keiner maximalen Dateianzahl wie ext2 oder ext3. Außerdem skaliert das Dateisystem reiserfs besser und flexibler als ein traditionelles BSD-Dateisystem. Auch das Durchsuchen des Dateisystems geht schneller als bei einer linearen Suche, denn innerhalb eines Baums kann auch bei vielen Dateien in einem Verzeichnis durch wenige Vergleiche nach einem bestimmten Kriterium gesucht werden. Ein Nachteil ist allerdings der höhere Verwaltungsaufwand und die wesentlich komplexere Programmlogik.
10.4.7
Die verschiedenen Dateitypen
Die unterschiedlichen Dateitypen haben verschiedene Informationen in ihren Inodes und Datenblöcken hinterlegt: Typ
Verwendung
Gespeicherte Daten
-
Normale Datei;
Text Binärdaten Grafiken Anwendungsdaten Datenbankdaten
Erstellen mit Texteditoren, Compiler, Anwendungen, Datenbankanwendungen, Befehlen (zum Beispiel touch) d
Verzeichnis; Erstellen mit dem Befehl mkdir
Verzeichnisinformationen: Datei- und Unterverzeichnisnamen und Inode-Nummern
l
Symbolischer Link; Erstellen mit dem Befehl ln –s
Pfadname auf Originaldatei
-
Hard Link – ein weiterer Dateiname für eine bereits vorhandene Datei; Erstellen mit dem Befehl ln
Text Binärdaten Grafiken Anwendungsdaten Datenbankdaten
c
Zeichenorientierte Gerätedatei; Erstellen mit dem Befehl mknod
–
b
Blockorientierte Gerätedatei; Erstellen mit dem Befehl mknod
–
Tab. 10.19: Die verschiedenen Dateitypen eines Linux-Systems
444
Kapitel 10 · Geräteverwaltung
Die meisten in dem Inode zu einer Datei gespeicherten Informationen können mit dem Befehl ls -l ausgegeben werden: $ cd /home/her $ ls -l total 4 drwxr-xr-x 3 her einkauf drwxr-xr-x 5 her einkauf -rw-r--r-- 1 her einkauf drwxr-xr-x 2 her einkauf lrwxrwxrwx 1 her einkauf $ cd /dev $ ls -l total 1 drwxr-xr-x 3 her einkauf drwxr-xr-x 5 her einkauf ... crw-rw---- 1 root video ... brw------- 1 root disk b--------- 1 root root ...
144 128 1031 48 22
Nov Nov Nov Nov Nov
9 9 9 9 9
18:20 18:17 18:18 18:18 18:20
. .. bericht12 finanzamt prot5 -> /einkauf/protokoll-05
144 Nov 9 18:20 . 128 Nov 9 18:17 .. 29,
0 Nov 9 09:15 fb0
2, 0 Nov 9 09:15 fd0 2, 84 Nov 9 09:15 fd0u1040
Es werden der Dateityp, die Zugriffsrechte, der Linkzähler, der Besitzer und die Gruppe, die Dateigröße, das letzte Änderungsdatum und der Dateiname ausgegeben. Bei block- und zeichenorientierten Gerätedateien werden anstelle der Dateigröße die Major- und Minor-Gerätenummer ausgegeben. Das letzte Zugriffsdatum auf eine Datei oder ein Verzeichnis, das ebenfalls in der Inode-Tabelle gespeichert wird, lässt sich mit ls -u ausgeben.
10.4.8
Dateisysteme anlegen
Der Befehl mkfs Mit Hilfe dieses Befehls können neue Dateisysteme auf einem Gerät angelegt werden. Er sollte in der Regel von root verwendet werden, damit andere auch Zugriff auf die Gerätedatei haben. mkfs legt die Struktur des mit der Option -t angegebenen Dateisystems an, wie zum Beispiel Superblock, Backup-Superblöcke, Zylindergruppen usw. Der Befehl ist nur ein Frontend-Programm für die Erstellung des angegebenen Dateisystems. So wird zum Beispiel bei der Angabe -t ext2 dieselbe Routine wie beim Befehl mke2fs verwendet. In der Regel ruft mkfs immer andere Befehle auf, die für das mit -t festgelegte Dateisystem programmiert wurden, dazu gehören unter anderem mkfs.ext2, mkfs.msdos, mkfs.ext3 und mkfs.minix. Die Syntax des Befehls lautet: # mkfs [-option(en)] [dateisystem-optionen] gerätedatei [blöcke]
Für diesen Vorgang darf der verwendete Datenträger nicht gemountet sein.
445
magnum
Dateisystem verwalten
Der Befehl kennt folgende Optionen: Option
Beschreibung
-V
Erzeugt eine ausführliche Ausgabe einschließlich aller Dateisystembefehle, die ausgeführt werden
dateisystem-optionen Übergabe von Dateisystemoptionen der Backend-Befehle; die meisten Backend-Befehle unterstützen diese Optionen: -c Das Gerät wird vor dem Anlegen des Dateisystems auf defekte Blöcke überprüft. -l datei liest die Liste der defekten Blöcke aus datei -v ausführliche Ausgabe -t dateisystemtyp
Gibt den anzulegenden Dateisystemtyp an. Ohne Angabe wird standardmäßig das Dateisystem ext2 verwendet.
Tab. 10.20: Die Optionen des Befehls mkfs
Im nachfolgenden Beispiel wird ein neues ext2-Dateisystem auf der vierten Partition der ersten Festplatte mit einer vorgegebenen Blockgröße erstellt: # mkfs -t ext2 /dev/hda4 1388890
In der Regel ist es heute nicht mehr notwendig, die Blockgröße anzugeben, da die Anzahl der Blöcke automatisch berechnet wird.
Der Befehl mke2fs oder mkfs.ext2 oder mkfs.ext3 Mit diesen Befehlen können Sie ein Gerät als ext2- oder ext3-Dateisystem formatieren. Die Syntax des Befehls lautet: # mke2fs [-option(en)] gerät [blöcke]
oder # mkfs.ext2 [-option(en)] gerät [blöcke]
oder # mkfs.ext3 [-option(en)] gerät [blöcke]
Die Angabe der Blöcke ist optional. Werden sie nicht angegeben, berechnet der Befehl die Blöcke automatisch. Die Verwendung des neueren Dateisystems ext3 oder reiserfs ist dem Dateisystem ext2 aufgrund der bereits beschriebenen Verbesserungen vorzuziehen!
446
Kapitel 10 · Geräteverwaltung
Der Befehl kennt folgende Optionen: Option
Beschreibung
-b
Definiert die Blockgröße in Bytes. Gültige Blockgrößen sind 1.024, 2.048 und 4.096 Byte pro Block. Wird die Option weggelassen, wird die Blockgröße heuristisch auf der Basis der Dateisystemgröße und der erwarteten Verwendung des Dateisystems bestimmt.
blocksize
-c
Überprüft das Gerät auf defekte Blöcke, bevor das Dateisystem angelegt wird
-f fragmentgröße
Definiert die Größe der Fragmente in Blöcken
-F
Erzwingt die Durchführung des Befehls, auch wenn das angegebene Gerät kein blockorientiertes Gerät ist oder gemountet zu sein scheint
-g
Definiert die Anzahl der Blöcke in einer Blockgruppe. Es gibt in der Regel keinen Grund, diesen Parameter zu verwenden, da der Standard für das Dateisystem optimal ist. Die Option wird von Entwicklern verwendet, die Testfälle bearbeiten.
blocks-pro-gruppe
-i
bytes-pro-inode
Definiert den Wert Bytes/Inode, das heißt, es wird ein Inode für jedes byte-pro-inode Byte Plattenplatz angelegt. Je größer der Wert ist, desto weniger Inodes werden angelegt. Dieser Wert darf nicht kleiner als die Blockgröße des Dateisystems sein, da sonst zu viele Inodes erstellt werden. Dieser Wert kann nach der Erstellung des Dateisystems nicht mehr geändert werden.
-j
Erzeugt das Dateisystem mit einem ext3-Journal. Wenn die Option -J nicht angegeben wird, werden Standardjournalparameter verwendet, um ein Journal von geeigneter Größe zu erstellen (abhängig von der Größe des Dateisystems). Diese Option kann nur bei einem Kernel verwendet werden, der ext3 unterstützt.
-J
Erzeugt das ext3-Journal mit Hilfe der angegebenen Optionen, die als eine durch Kommata getrennte Liste übergeben werden. Folgende Journaloptionen werden unterstützt:
journaloption
-size= größe
Erzeugt ein internes Journal (das innerhalb des Dateisystems gespeichert wird) mit der angegebenen Größe (in Megabyte). Die Größe muss mindestens 1.024 Dateisystemblöcke umfassen (das heißt, 1 Mbyte bei der Verwendung von 1-Kbyte-Blöcken und 4 Mbyte bei 4-Kbyte-Blöcken) und darf nicht größer als 102.400 Dateisystemblöcke sein. -device= Weist dem Dateisystem ein blockorientiertes externes-journal Gerät für das Journal zu, das sich außerhalb des eigenen Dateisystems befindet. Das externe Journal muss zuvor mit folgendem Befehl angelegt werden: # mke2fs -O journalgerät externes-journal Das externe Journal muss außerdem mit derselben Blockgröße wie das neue Dateisystem erstellt werden. -l datei
Die defekten Blöcke werden aus der angegebenen Datei gelesen.
-L label
Legt das Label für das Dateisystem fest
-m
reserve-blöcke
Definiert den Prozentsatz der Dateisystemblöcke, die für den Superuser reserviert werden. Der Standardwert beträgt 5 %.
-M dir
Weist dem Dateisystem das zuletzt gemountete Verzeichnis zu
Tab. 10.21: Die Optionen des Befehls mke2fs
447
magnum
Dateisystem verwalten
Option
Beschreibung
-n
Mit dieser Option wird nicht tatsächlich ein Dateisystem angelegt, sondern nur angezeigt, wie das Anlegen durchgeführt würde.
-N
Diese Option überschreibt die Standardberechnung der Inode-Anzahl, die für das Dateisystem reserviert wird. Die Standardberechnung basiert auf der Anzahl der Blöcke und dem Wert Bytes pro Inode.
anzahl-inodes -o
creator-os -O [^]eigenschaft,…
Überschreibt den Standardwert des Felds »Creator OS« des Dateisystems. Normalerweise wird dieses Feld auf das native Betriebssystem des Befehls mke2fs festgelegt. Erzeugt das Dateisystem mit den angegebenen Eigenschaften. Standardmäßig aktivierte Eigenschaften können deaktiviert werden, indem ihnen als Präfix das Zeichen ^ vorangestellt wird. Die Eigenschaften sparse_super und filetype sind standardmäßig ab Linux 2.2 aktiviert. Folgende Eigenschaften werden unterstützt: dir_index filetype has_journal journal_dev sparse_super
verwendet verteilte B-Trees, um die Suchgeschwindigkeit in großen Verzeichnissen zu beschleunigen speichert Dateitypinformationen in Verzeichniseinträgen erzeugt ein ext3-Journal (entspricht der Option –j) erzeugt ein externes ext3-Journal auf dem angegebenen Dateisystem anstelle eines ext2-Dateisystems erzeugt ein Dateisystem mit weniger Backup-Superblocks (spart Platz auf großen Dateisystemen)
-q
Ausführung ohne Ausgabe. Nützliche Option, wenn der Befehl mke2fs in einem Skript verwendet wird
-r revision
Legt die Dateisystemrevision für das neue Dateisystem fest. KernelVersionen bis 1.2 unterstützen nur Revision-0-Dateisysteme. Der Standard ist, Revision-1-Dateisysteme zu erzeugen.
-R raid
Legt RAID-bezogene Optionen für das Dateisystem fest. RAID-Optionen werden als eine durch Kommata getrennte Liste angegeben. Folgende Option wird unterstützt: stride =stripe-größe konfiguriert das Dateisystem für einen RAID-Array
mit der in Blöcken angegebenen Stripe-Größe
-S
Schreibt nur den Superblock und Gruppenbezeichner. Diese Option ist nützlich, wenn sowohl Superblock als auch alle Backup-Superblöcke beschädigt sind. Damit werden Superblock und Gruppenbezeichner neu initialisiert, wobei die Inode-Tabelle und die Block- und Inode-Bitmaps nicht verändert werden. Nach dieser Option sollte sofort das Programm e2fsck gestartet werden.
-T fs-typ
Definiert die Verwendung des Dateisystems, damit die Dateisystemparameter optimal eingestellt werden können. Unterstützte Dateisystemtypen sind: news largefile largefile4
-v
ein Inode pro 4 Kbyte Block ein Inode pro Mbyte ein Inode pro 4 Mbyte
Ausführliche Informationen werden bei der Ausführung angezeigt.
Tab. 10.21: Die Optionen des Befehls mke2fs (Forts.) Im Beispiel wird ein neues ext3-Dateisystem auf dem Gerät /dev/hda2 angelegt: # mke2fs -j /dev/hda2
448
Kapitel 10 · Geräteverwaltung
Der Befehl tune2fs Bei einem ungemounteten Dateisystem lässt sich der Befehl verwenden, um die Leistung sowie die Parameter der Festplatte zu ändern. Die Syntax des Befehls lautet: # mke2fs [-option(en)] gerät
Der Befehl kennt folgende Optionen: Option
Beschreibung
-c max-zähler
Definiert die maximale Anzahl von Mountvorgängen zwischen zwei Dateisystemüberprüfungen. Wenn der Wert 0 ist, ignorieren der Befehl und der Kernel, wie oft das Filesystem gemountet wurde.
-C mount-zahl
Legt fest, wie oft das Dateisystem gemountet wurde. Diese Option kann in Verbindung mit -c verwendet werden, um ein Überprüfen des Dateisystems beim nächsten Systemstart zu erzwingen.
-e
Ändert das Verhalten des Kernels, wenn Fehler entdeckt werden. In allen Fällen wird ein Dateisystemfehler den Befehl dazu veranlassen, das Dateisystem beim nächsten Start zu überprüfen. Es gibt folgende Fehlerverhalten: continue mit der normalen Ausführung fortfahre remount-ro mountet das Dateisystem erneut, aber nur lesbar panic verursacht eine Kernel-Panic-Meldung
fehler-verhalten
-f
Erzwingt, dass der Befehl vollständig durchgeführt wird, auch wenn Fehler auftreten. Diese Option kann beim Entfernen der Eigenschaft has_journal von einem Dateisystem mit einem externen Journal sehr nützlich sein, wenn das externe Journal nicht verfügbar ist. Es sollte dabei aber beachtet werden, dass es zu extremen Datenverlusten und einem korrupten Dateisystem führen kann, wenn ein externes Journal von einem nicht sauber ungemounteten Dateisystem entfernt wird, bevor das externe Journal wieder eingespielt wird.
-g group
Legt die Gruppe fest, die reservierte Dateisystemblöcke verwenden darf. Die Eingabe kann mit dem Gruppennamen oder der GID erfolgen.
-i intervall [d|w|m]
Legt die maximale Zeitspanne in Tagen, Wochen oder Monaten zwischen zwei Dateisystemüberprüfungen fest. Der nachfolgende Buchstabe d oder keine Angabe eines nachfolgenden Buchstabens stehen für Tage, w für Wochen und m für Monate. Der Wert 0 deaktiviert das zeitabhängige Überprüfen.
-j
Fügt ein ext3-Journal dem Dateisystem hinzu. Wird die Option -J nicht verwendet, werden die standardmäßigen Journalparameter angewandt, um ein Journal mit geeigneter Größe zu erzeugen.
-J
Erzeugt das ext3-Journal mit Hilfe der angegebenen Optionen, die als eine durch Kommata getrennte Liste übergeben werden. Folgende Journaloptionen werden unterstützt:
journaloption
-size= größe
-device=
Erzeugt ein internes Journal (das innerhalb des Dateisystems gespeichert wird) mit der angegebenen Größe (in Megabyte). Die Größe muss mindestens 1.024 Dateisystemblöcke umfassen (das heißt, 1 Mbyte bei der Verwendung von 1-KbyteBlöcken und 4 Mbyte bei 4-Kbyte-Blöcken) und darf nicht größer als 102.400 Dateisystemblöcke sein. Es muss ausreichend freier Speicherplatz im Dateisystem vorhanden sein, um ein Journal der gewünschten Größe zu erzeugen. externes-journalWeist dem Dateisystem ein blockorientiertes Gerät für das Journal zu, das sich außerhalb des eigenen Dateisystems befindet. Das externe Journal muss zuvor mit folgendem Befehl angelegt werden: # mke2fs -O journalgerät externes-journal
Tab. 10.22: Die Optionen des Befehls tune2fs
449
magnum
Dateisystem verwalten
Option
Beschreibung
-l
Listet die Inhalte des Superblocks des Dateisystems auf
-L label
Legt das Label für das Dateisystem fest. Es kann eine Länge von 16 Zeichen haben, werden mehr Zeichen verwendet, werden diese abgeschnitten und es wird eine Warnmeldung ausgegeben.
-m
reserve-blöcke
Definiert den Prozentsatz der Dateisystemblöcke, die für den Superuser reserviert werden
-M dir
Weist dem Dateisystem das zuletzt gemountete Verzeichnis zu
-n
Mit dieser Option werden die Parameter der Festplatte nicht tatsächlich geändert, sondern nur angezeigt, wie die Änderung durchgeführt wird.
-o [^]
Definiert oder entfernt die standardmäßigen Mountoptionen in Dateisystemen. Standardmountoptionen können durch Mountoptionen überschrieben werden, die entweder in der Datei /etc/fstab eingetragen oder an der Befehlszeile mit dem Befehl mount angegeben werden. Ältere Kernel (vor 2.4.20) unterstützen diese Eigenschaft nicht.
mount-option
Mehrere Mountoptionen können gleichzeitig mit einer durch Kommata getrennten Liste angegeben werden. Mountoptionen, die als Präfix das Zeichen ^ haben, werden im Superblock des Dateisystems entfernt, und die Optionen ohne dieses Präfix oder mit einem vorangestellten Zeichen + werden dem Dateisystem hinzugefügt. Die folgenden Mountoptionen können definiert oder entfernt werden: aktiviert den Debugging-Code für das Dateisystem emuliert ein BSD-Verhalten beim Erzeugen von neuen Dateien: Diese erhalten die GID des Verzeichnisses, in dem sie erzeugt werden. Dieses Verhalten wird bei System V-Systemen nur durch das setgid-Bit erzeugt (vergleiche Kapitel 8). user_xattr aktiviert benutzerspezifische erweiterte Attribute acl aktiviert die POSIX Access Control-Listen uid16 deaktiviert 32 Bit lange UIDs und GIDs. Diese Option ist zur Kompatibilität mit älteren Kerneln von Bedeutung. journal_data Wenn das Dateisystem mit aktiviertem JournalingMechanismus gemountet ist, werden alle Daten (und nicht nur Metadaten) in das Journal eingestellt, bevor sie in das Hauptdateisystem geschrieben werden. journal_data_ordered Wenn das Dateisystem mit aktiviertem JournalingMechanismus gemountet ist, wird erzwungen, dass alle Daten direkt auf das Hauptdateisystem geschrieben werden, bevor deren Metadaten in das Journal eingetragen werden. journal_data_writeback Wenn das Dateisystem mit aktiviertem JournalingMechanismus gemountet ist, können Daten in das Hauptdateisystem geschrieben werden, nachdem deren Metadaten in das Journal eingetragen wurden. Dies kann den Durchsatz verbessern, aber es können nach einem Systemabsturz und einer Journal-Wiederherstellung auch alte Daten wieder auftauchen. debug bsdgroups
Tab. 10.22: Die Optionen des Befehls tune2fs (Forts.)
450
Kapitel 10 · Geräteverwaltung
Option
Beschreibung
-O [^]eigenschaft,…
Aktiviert oder entfernt im Dateisystem die angegebenen Eigenschaften. Es können mehrere Eigenschaften in einer durch Kommata getrennten Liste übergeben werden. Standardmäßig aktivierte Eigenschaften können deaktiviert werden, indem ihnen als Präfix das Zeichen ^ vorangestellt wird. Folgende Eigenschaften können zugewiesen oder entfernt werden: verwendet zerlegte verteilte B-Trees, um die Suchgeschwindigkeit in großen Verzeichnissen zu beschleunigen filetype speichert Dateitypinformationen in Verzeichnis-einträgen has_journal verwendet ein Journal, um die Dateisystemkonsistenz auch nach unsauberem Herunterfahren des Systems zu gewährleisten (entspricht der Option -j) sparse_super erzeugt ein Dateisystem mit weniger Backup-Superblocks (spart Platz auf großen Dateisystemen) Die Eigenschaften werden standardmäßig erst ab Linux 2.2 unterstützt. Wenn die Optionen sparse_super oder filetype aktiviert oder deaktiviert werden, muss der Befehl e2fsck aufgerufen werden, damit das Dateisystem in einen konstanten Zustand gelangt. dir_index
-r reserve-blocks Stellt die Anzahl der reservierten Blöcke des Dateisystems ein -s [0|1]
-T letzteprüfung
-u benutzer
Aktiviert oder deaktiviert die Option sparse_super. Die aktivierte Option spart Festplattenplatz auf sehr großen Dateisystemen (entspricht -O sparse_super). Stellt die Zeit ein, zu der das Dateisystem zum letzten Mal durch den Befehl
e2fsck überprüft wurde. Das Format entspricht dem internationalen
Datumsformat mit einer optionalen Zeitangabe: YYYYMMDD [[HHMM]SS].
Definiert den Benutzer, der die reservierten Blöcke des Dateisystems verwenden darf. Die Angabe kann mit dem Benutzernamen oder der UID erfolgen.
Tab. 10.22: Die Optionen des Befehls tune2fs (Forts.)
Der nachfolgende Befehl stellt den Prozentsatz des reservierten Dateisystems auf 7 % ein und erlaubt die Verwendung des reservierten Bereichs der Gruppe admin für das Gerät /dev/hda3: # tune2fs –m 7 -g admin /dev/hda3
Im nächsten Beispiel wird das Verhalten des Kernels im Fehlerfall für das Dateisystem /dev/hda1 neu eingestellt: # tune2fs –e continue /dev/hda1
Im nächsten Beispiel wird ein delt:
ext2-Dateisystem
in ein
ext3-Dateisystem
umgewan-
# tune2fs –j /dev/hda1 Creating journal inode: done This filesystem will be automatically checked every 30 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
451
magnum
Dateisystem verwalten
Der Befehl mkreiserfs Das Dateisystem reiserfs kann mit dem Befehl mkreiserfs erstellt werden. Die Syntax lautet: mkreiserfs [-option(en)] gerät
Der Befehl kennt folgende Optionen: Option
Beschreibung
-b oder --block-size N
N ist die Blockgröße Bytes. Im Moment ist nur 4096 möglich.
-d
Diese Option veranlasst mkreiserfs während des Anlegens des Dateisystems, Debug-Informationen auszugeben.
-f
Dies zwingt mkreiserfs, auch dann fortzufahren, wenn ein Gerät entweder die ganze Festplatte oder noch gemountet oder kein blockorientiertes Gerät ist. Wird es mehr als einmal angegeben, werden keine Bestätigungen mehr verlangt.
--format FORMAT
FORMAT legt das Format für das neue Dateisystem fest. Es kann 3.5 und 3.6 gewählt werden, Wird kein Format angegeben, wird 3.6 verwendet, wenn die Kernel-Version 2.4 oder höher ist.
-h oder --hash HASH
HASH ist der Name der Hash-Funktionsdatei, nach der in Verzeichnissen sortiert wird. Möglich sind r5, rupasoy und tea. r5 ist Standard.
-j oder --journal-device FILE
FILE ist der Name des blockorientierten Geräts, auf dem das Dateisystem das Journal ablegen soll.
-l label oder --label label
Vergibt für das Dateisystem ein Label mit maximal 16 Zeichen
-o oder --journal-offset N
N ist der Startwert, an dem das Journal beginnt, wenn es sich auf einem separaten Gerät befindet. Standard ist 0.
-q oder --quiet
Es werden keine Meldungen ausgegeben.
-s oder --journal-size N
N ist die Größe des Journals in Blöcken. Wenn das Journal sich auf einem separaten Gerät befindet, entspricht seine Größe standardmäßig der Anzahl der Blöcke des Geräts. Befindet es sich im Hostgerät, ist die standardmäßige Größe 8.193 und die maximale Größe ist 32.749 bei einer Blockgröße von 4 Kbyte.
-t oder --transaction-max-size N
N ist die maximale Transaktionsgröße des Journals. Der Standard und maximale Wert sind 1.024 Blöcke. Es sollte kleiner als die halbe Größe des Journals sein. Wird es falsch eingestellt, dann wird es automatisch korrigiert.
-u oder --uuid UUID
Definiert die universelle, eindeutige ID (UUID) des Dateisystems auf UUID
Tab. 10.23: Die Optionen des Befehls mkreiserfs
452
Kapitel 10 · Geräteverwaltung
Im folgenden Beispiel wird das Dateisystem reiserfs auf /dev/hda7 angelegt: # mkreiserfs /dev/hda7 ... Format 3.6 with standard journal Count of blocks on the device: 1411297 Number of blocks consumed by mkreiserfs formatting process: 8352 Blocksize: 4096 Hash function used to sort names: "r5" Journal Size 8193 blocks (first block 18) Journal Max transaction length 1024 inode generation number: 0 UUID: c59697c6-310e-4ef1-9452-5b47fcae9275 ATTENTION: YOU SHOULD REBOOT AFTER FDISK! ALL DATA WILL BE LOST ON '/dev/hda5'! Continue (y/n):y Initializing journal - 0%....20%....40%....60%....80%....100% Syncing..ok Please visit www.namesys.com for information about ReiserFS sponsors
10.4.9
Dateisystemgröße verändern
Die Größe eines Dateisystems kann nur im Rahmen des verfügbaren Festplattenplatzes geändert werden. Die Vorgehensweise dazu ist: Vorgang
1. Schritt
2. Schritt
Vergrößern
Partition vergrößern; dies ist nur Dateisystem an die neue Größe anpassen; möglich, wenn direkt hinter der dazu wird der entsprechende Befehl ohne Partition noch freier Platz ist oder Parameter aufgerufen. das Dateisystem auf einem Logical Volume liegt.
Verkleinern
Partitionsgröße an die neue DateisystemDateisystem verkleinern; dazu wird der entsprechende Befehl mit größe anpassen; dabei darf die Partition Größenangabe aufgerufen. nicht kleiner als das Dateisystem sein.
Tab. 10.24: Dateisystemgröße verändern
Die Dateisystemgröße kann mit den hier vorgestellten Befehlen nur bei nicht aktiven Dateisystemen geändert werden. Für gemountete Dateisysteme kann der Befehl ext2online verwendet werden, der aber nicht standardmäßig auf jedem Linux-System vorhanden ist. Physikalische Festplatten können zu einer so genannten Volume Group zusammengefasst werden, um daraus dynamisch Partitionen oder so genannte Logical Volumes anzulegen, auf denen wieder Dateisysteme angelegt werden. Dieser Vorgang wird auch als Logical Volume Management (LVM) bezeichnet.
453
magnum
Dateisystem verwalten
Der Befehl resize2fs Bei den Dateisystemen ext2 und ext3 kann der Befehl um die Größe zu verändern. Die Syntax ist wie folgt:
resize2fs
verwendet werden,
resize2fs gerät [größe-in-blöcken]
Die Angabe der Größe in Blöcken ist nur bei einer Verkleinerung notwendig. Im folgenden Beispiel wird die Partition /dev/hda3 mit dem Befehl fdisk vergrößert und anschließend das Dateisystem mit dem Befehl resize2fs angepasst: # fdisk /dev/hda ... Command (m for help): p Disk /dev/hda: 265 heads, 66 Units = cylinders of 16365 * Device Boot Start /dev/hda1 * 1 /dev/hda2 51 /dev/hda3 182
sectors, 7876 cylinders 512 bytes End Blocks Id System 50 401593+ 83 Linux 181 1052257+ 82 Linux swap 1787 12490445 83 Linux
Command (m for help): d Partition number (1-5): 5 Command (m for help): n First cylinder (1788-7876, default 1788): Using default value 1788 Last cylinder or +size or +sizeM or +sizeK (1788-7876, default 7876): 4200 Command (m for help): p Disk /dev/hda: 265 heads, 65 Units = cylinders of 16365 * Device Boot Start /dev/hda1 * 1 /dev/hda2 51 /dev/hda3 182
sectors, 7876 cylinders 512 bytes End Blocks Id System 50 401593+ 83 Linux 181 1052257+ 82 Linux swap 4200 17490445 83 Linux
Command (m for help): w The partition table has been altered! ...
Nach dem Verändern der Partitionstabelle muss das System zuerst neu gebootet werden. # resize2fs /dev/hda3 resize2fs 1.26 (3-Feb-2002) The filesystem on /dev/hda3 is now 17490445 blocks long.
Der Befehl resize_reiserfs Mit diesem Befehl kann die Größe eines Dateisystems reiserfs verändert werden. Die Syntax ist wie folgt: resize_reiserfs [ -s [+|–]größe-in-bytes[K|M|G] ] gerät
Auch in diesem muss nur bei einer Verkleinerung eine neue Größe mit Hilfe der Option -s in Kbyte, Mbyte oder Gbyte festgelegt werden. Im folgenden Beispiel wird das Dateisystem an eine bereits vergrößerte Partition angepasst:
454
Kapitel 10 · Geräteverwaltung
# resize_reiserfs /dev/hda7 resize_reiserfs 3.x.1b (2002) ReiserFS report: blocksize 4096 block count 8347500 (3382685) free blocks 8269043 (3291981) bitmap block count 276 (98) Syncing..done
Der Befehl guessfstype Dieser Befehl gibt den Dateisystemtyp eines Geräts zurück. Die Syntax des Befehls lautet: # guessfstype gerät
Dies ist ein Befehl, der nur unter SUSE Linux implementiert ist. In diesem Beispiel wird der Dateisystemtyp des Dateisystems /dev/hda2 ausgegeben: # guessfstype /dev/hda2 /dev/hda2 *appears* to be: reiserfs
10.4.10 Dateisysteme einbinden Nachdem ein Dateisystem angelegt wurde, kann das Betriebssystem noch nicht darauf zugreifen, da es noch nicht im Verzeichnisbaum eingebunden ist. Um ein neues Dateisystem zu verwenden, muss es im letzten Schritt noch gemountet werden. Mounten bedeutet, dass die Dateien und Verzeichnisses eines Gerätes, zum Beispiel einer anderen Festplattenpartition, mit dem Gerät, auf dem sich das rootVerzeichnis befindet, verbunden werden. Die folgende Abbildung zeigt zwei Festplattenpartitionen mit unterschiedlichen Verzeichnissen und Dateien:
und
/dev/hdb4
Die Verzeichnisse und Dateien von /dev/hdb4 sollen unter das Verzeichnis /dev/hda2 eingehängt werden. Dies geschieht mit dem Befehl:
/home von
/dev/hda2
Bild 10.13: Zwei Dateisysteme mit Dateien und Verzeichnissen
# mount /dev/hdb4 /home
455
Dateisystem verwalten
magnum
Anschließend sieht der Verzeichnisbaum aus Benutzersicht folgendermaßen aus:
Bild 10.14: Ein Dateisystem mounten
Der Befehl mount Mit Hilfe dieses Befehls kann root Dateisysteme in den Verzeichnisbaum einhängen, damit Benutzer sie verwenden können. Alle gemounteten Dateisysteme werden in die Datei /etc/mtab eingetragen. Die Syntax des Befehls lautet: # mount [-optionen] gerät mountpoint
Das Verzeichnis, das als Mountpoint dient, muss bereits angelegt sein. Es sollte leer sein, denn sobald es als Mountpoint verwendet wird, ist sein früherer Inhalt nicht mehr sichtbar. Dateisysteme mit einem Eintrag in /etc/fstab können einfach durch Angabe des Namens des Mountpoints oder der Ressource gemountet werden. Der Befehl kennt folgende Optionen: Option
Erklärung
-a
Alle Dateisysteme mit einem Eintrag in der Datei /etc/fstab werden gemountet, mit Ausnahme der Dateisysteme mit der Option noauto.
--bind
Mountet eine Ressource an einer anderen Stelle erneut ein, so dass der Inhalt der Ressource in zwei unterschiedlichen Verzeichnissen zugleich zur Verfügung steht. Die Syntax lautet: # mount --bind verz_alt verz_neu
-F
(In Verbindung mit -a) Initiiert parallele Ausführung des Mountens für jedes Gerät. Dadurch werden die Mountvorgänge auf verschiedenen Geräten oder verschiedenen NFS-Servern parallel durchgeführt. Dies hat Geschwindigkeitsvorteile, da auch NFS-Timeouts parallel laufen.
-f
Simuliert einen Mountvorgang, wodurch in Verbindung mit der Option -v die Geräte und das Mountverzeichnis überprüft werden können
-l
Fügt die Labels von ext2, ext3 und XFS der Mountausgabe hinzu
Tab. 10.25: Die Optionen des Befehls mount
456
Kapitel 10 · Geräteverwaltung
Option
Erklärung
-L label
Mountet die Partition mit dem angegebenen Label
--move
Verschiebt eine gemountete Ressource in ein anderes Verzeichnis. Die Syntax lautet: # mount --move verz_alt verz_neu
-n
Mountet, ohne einen Eintrag in der Datei /etc/mtab zu hinterlegen. Dies ist zum Beispiel notwendig, wenn /etc ein nur lesbares Dateisystem ist.
Definiert Mountoptionen, die durch Kommata getrennt angegeben werden müssen optionen (siehe nächste Tabelle) -o
Wird in Verbindung mit der Option -a verwendet, um die Anzahl der Dateisysteme, optionen die gemountet werden, zu begrenzen. So werden durch den Befehl -O
# mount -a -O no_netdev
zum Beispiel alle Dateisysteme gemountet, außer denen, die als Mountoption _netdev in der Datei /etc/fstab angegeben haben. -r
Das Dateisystem wird als nur lesbar (read-only) gemountet (entspricht der Option -o ro)
-s
Toleriert ungenaue oder unzutreffende Mountoptionen anstatt abzubrechen. Diese Angabe führt dazu, dass Mountoptionen ignoriert werden, die nicht von einem Dateisystemtyp unterstützt werden. Die Option wird nicht von allen Dateisystemen unterstützt. Sie soll in erster Linie den Automounter von Linux unterstützen, der auf autofs basiert.
-t typ
Definiert den Typ des zu mountenden Dateisystems. Unterstützte Dateisysteme sind im Moment: adfs, affs, autofs, coda, cramfs, devpts, efs, ext, ext2, ext3, hfs, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, nfsd, ntfs, proc, qnx4, ramfs, reiserfs, romfs, smbfs, sysv (entspricht coherent und xenix, die aber zukünftig nicht mehr zur Verfügung stehen), tmpfs, udf, ufs, usbfs, umsdos, vfat, xfs, xiafs.
-v
Ausführliche Anzeige aller Informationen
-V
Anzeige des Befehls, aber keine wirkliche Durchführung
-w
Das Dateisystem wird als beschreib- und lesbar (read/write) gemountet, was der Standard ist (entspricht der Option -o rw).
Tab. 10.25: Die Optionen des Befehls mount (Forts.)
Es gibt sehr viele verschiedene Mountoptionen, die Dateisystemen zugewiesen werden können: Option
Beschreibung
async
Alle Ein- und Ausgabeoperationen des Dateisystems sollen asynchron ausgeführt werden.
atime
Protokolliert das letzte Zugriffsdatum auf Dateien und Verzeichnisse in der InodeTabelle mit (Standardeinstellung)
auto
Kann mit der Option -a gemountet werden
defaults
Verwendung der Standardoptionen rw, suid, dev, exec, auto, nouser und async
dev
Interpretiert alle zeichen- oder blockorientierten Gerätedateien im Dateisystem
Tab. 10.26: Mögliche Mountoptionen
457
Dateisystem verwalten
Option
Beschreibung
dirsync
Alle Verzeichnisaktualisierungen innerhalb des Dateisystems werden synchron durchgeführt.
_netdev
Das Dateisystem befindet sich auf einem Gerät, das Netzwerkzugriff erfordert (diese Option wird verwendet, um das System davon abzuhalten, diese Dateisysteme zu mounten, bevor das Netzwerk auf dem System eingerichtet ist).
noatime
Verhindert, dass das Datum des letzten Zugriffs auf Dateien und Verzeichnisse in der Inode-Tabelle mitprotokolliert wird, wodurch die Performance etwas erhöht wird. Diese Einstellung kann bei Dateisystemen verwendet werden, wo das Zugriffsdatum nicht von Bedeutung ist. Sie spart außerdem Strom.
noauto
Kann nur explizit gemountet werden (das heißt, die Option -a kann das Dateisystem nicht mounten)
nodev
Interpretiert keine zeichen- oder blockorientierten Gerätedateien im Dateisystem
noexec
Lässt nicht zu, dass irgendwelche Binärdateien im gemounteten Dateisystem ausgeführt werden. Diese Option kann für einen Server nützlich sein, für den Dateisysteme gemountet sind, die Binärdateien enthalten, die nicht für seine Hardwarearchitektur lauffähig sind.
intr
Lässt Interrupts mit der Tastenkombination (Ctrl)+(C) zu, mit deren Hilfe auch Prozesse beendet werden können, die auf gesperrte Dateisysteme zugreifen (Standardeinstellung)
nosuid
Verhindert die Ausführung von Programmen mit SetUID- oder SetGID-Bit
nouser
Lässt nicht zu, dass ein normaler Benutzer (das heißt, nicht root), das Dateisystem mountet. Dies ist eine Standardeinstellung.
remount
Versucht, ein bereits gemountetes Dateisystem erneut zu mounten. Diese Option wird in der Regel verwendet, um die Mountoptionen eines Dateisystems zu ändern, zum Beispiel, um ein nur lesbares Dateisystem in ein beschreibbares System zu ändern. Die Option verändert weder das Gerät noch den Mountpoint.
ro
Mountet das Dateisystem nur mit Lesezugriff (read-only)
rw
Mountet das Dateisystem mit Lese- und Schreibzugriff (read-write)
suid
Lässt die Ausführung von Programmen mit SetUID- oder SetGID-Bit zu
sync
Alle Ein- und Ausgabeoperationen des Dateisystems sollen synchron ausgeführt werden.
user
Erlaubt einem normalen Anwender, das Dateisystem zu mounten. Der Name des mountenden Benutzers wird in die Tabelle mtab geschrieben, damit er das Dateisystem auch wieder unmounten kann. Diese Option setzt die Optionen noexec, nosuid und nodev voraus (solange diese nicht von nachfolgenden Optionen überschrieben werden, wie zum Beispiel user, exec, dev, suid).
users
Erlaubt jedem normalen Anwender, das Dateisystem zu mounten und zu unmounten. Diese Option setzt zugleich die Optionen noexec, nosuid und nodev voraus (solange diese nicht von nachfolgenden Optionen überschrieben werden, wie zum Beispiel user, exec, dev, suid).
Tab. 10.26: Mögliche Mountoptionen (Forts.)
458
magnum
Kapitel 10 · Geräteverwaltung
Wird der Befehl systeme an:
mount
ohne Optionen verwendet, zeigt er alle gemounteten Datei-
# mount /dev/hda2 on / type ext3 (rw,acl) proc on /proc type proc (rw) devpts on /dev/pts type devpts (rw,mode=0620,gid=5) tmpfs on /dev/shm type tmpfs (rw) usbdevfs on /proc/bus/usb type usbdevfs (rw) pc3lsu:/home/networkdata on /networkdata type nfs (rw,acl,bg,addr=192.162.168.54)
Mit dem folgenden Befehl wird das Dateisystem /dev/sda2 mit den Optionen den Mountpoint /export/home gemountet:
noa-
time und nosuid unter
# mount –o noatime,nosuid /dev/sda2 /export/home
Wenn ein zu mountendes Dateisystem bereits einen Eintrag in der Datei /etc/fstab besitzt, genügt es, wenn an der Befehlszeile entweder nur der Name des Dateisystems oder des Mountpoints genannt wird. Die fehlenden Angaben werden dann der Datei entnommen. Im nachfolgenden Beispiel wird das Dateisystem /opt, das bereits einen Eintrag in der Datei /etc/fstab hat, mit den Optionen suid und nouser gemountet: # mount –o nouser,suid /opt
Eine DOS-formatierte Diskette kann mit folgendem Befehl manuell gemountet werden: # mount –t msdos /dev/fd0 /floppy
Der folgende Befehl mountet alle Dateisysteme, die in der Datei tragen sind, mit Ausnahme derer vom Typ msdos und ext:
/etc/fstab
einge-
# mount -a -t nomsdos,ext
Die Optionen -t und -O wirken kumulativ, daher mountet der nächste Befehl nur alle ext2-Dateisysteme mit der Option _netdev und nicht alle Dateisysteme, die entweder vom Typ ext2 sind oder die Option _netdev zugewiesen haben: # mount -a -t ext2 -O _netdev
Eine CD-ROM kann manuell auf folgende Weise gemountet werden: # mount –t iso9660 –o ro /dev/cdrom /cdrom
Die Datei /etc/fstab Die Datei /etc/fstab enthält alle Dateisysteme, die immer wieder, in der Regel beim Booten des Systems, gemountet werden sollen. Dabei können gleichzeitig die gewünschten Mountoptionen bestimmt werden: # cat /etc/fstab /dev/hda2 / /dev/cdrom /media/cdrom devpts /dev/pts /dev/fd0 /media/floppy proc /proc usbdevfs /proc/bus/usb /dev/hda1 swap pcl3:/network /network
ext3 auto devpts auto proc usbdevfs swap nfs
usrquota,acl,defaults ro,noauto,user,exec defaults noauto,user,sync defaults noauto pri=42 acl,defaults,bg
1 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
459
Dateisystem verwalten
magnum
Neben den regulären Dateisystemen und den Swap-Bereichen finden sich hier meist auch Einträge zum Prozessdateisystem /proc, dem Dateisystem usbdevfs für Zugriffe auf USB-Geräte und die Unix98-konformen Terminals /dev/pts. Ab der Kernel-Version 2.6 ist auch das Dateisystem sysfs eingetragen. Dabei handelt es sich um ein virtuelles Dateisystem, eine Ergänzung zum Dateisystem /proc auf der Basis des neuen Treibermodells LDM (Linux Device Model). Jeder Mounteintrag steht in einer eigenen Zeile mit sechs Feldern, die durch mindestens ein Leerzeichen getrennt sein müssen.
쮿
Feld 1: Name der zu mountenden Ressource
쮿
Feld 2: Angabe des Mountpoints
쮿
Feld 3: Dateisystemtyp (zum Beispiel ext3, nfs oder proc)
쮿
Feld 4: Mountoptionen (siehe Befehl mount)
쮿
Feld 5: Eine Nummer, die festlegt, ob das Dateisystem bei einer Datensicherung mit dem Befehl dump gesichert werden soll
쮿
Feld 6: Eine Nummer, die festlegt, in welcher Reihenfolge der Befehl Dateisysteme prüfen soll
fsck
die
Besonders bei USB-Geräten, bei denen die Gerätebezeichnung einmal /dev/sda und einmal /dev/sdb usw. lautet, kann ein Dateisystemlabel nützlich sein, das in der Spalte »Mountoptionen« oder beim Befehl mount mit LABEL=label angegeben wird.
Die Datei /etc/mtab Alle aktuell gemounteten Dateisysteme werden in diese Datei einschließlich ihrer Optionen automatisch von Linux eingetragen. Wird ein Dateisystem ungemountet, erfolgt eine automatische Löschung des entsprechenden Eintrags. Die Tabelle sollte auf keinen Fall von Hand bearbeitet werden. Der Aufbau der Tabelle sieht folgendermaßen aus: # cat /etc/mtab /dev/hda2 / ext3 rw,usrquota,acl 0 0 proc /proc proc rw 0 0 devpts /dev/pts devpts rw,mode=0620,gid=5 0 0 tmpfs /dev/shm tmpfs rw 0 0 usbdevfs /proc/bus/usb usbdevfs rw 0 0 pclsu3:/home/network /network nfs rw,acl,bg,addr=192.165.171.44 0 0
Die Tabelle listet die Bezeichnung der gemounteten Ressource auf, anschließend das Verzeichnis bzw. den Mountpoint, an dem das Dateisystem eingehängt wurde, und den Dateisystemtyp (ext3, proc, nfs usw.). Es folgen die Mountoptionen und eine Nummer, die festlegt, ob das Dateisystem bei einer Datensicherung mit dem Befehl dump gesichert werden soll, sowie eine Nummer, die festlegt, in welcher Reihenfolge der Befehl fsck die Dateisysteme prüfen soll. Eine etwas übersichtlichere Ausgabe des Inhalts der Datei /etc/mtab erhalten Sie, wenn Sie den Befehl mount ohne Option verwenden.
460
Kapitel 10 · Geräteverwaltung
Der Befehl umount Der Befehl umount wird verwendet, um Dateisysteme zu unmounten, das heißt, aus dem Verzeichnisbaum wieder auszuhängen. Gleichzeitig wird der Eintrag in der Datei /etc/mtab gelöscht. Für bestimmte Verwaltungstätigkeiten ist es unbedingt erforderlich, das Dateisystem zuvor zu unmounten, wie zum Beispiel bei der Durchführung des Befehls fsck. Sie können dem Befehl entweder den Namen des Dateisystems oder des Mountpoints als Argument übergeben. Die Syntax des Befehls lautet: # umount [-option(en)] gerät | mountpoint
Der Befehl kennt folgende Optionen: Option
Erklärung
-a
Alle Dateisysteme mit einem Eintrag in der Datei /etc/mtab werden ungemountet (ab Version 2.7 des Befehls wird das Dateisystem proc nicht ungemountet).
-d
Falls es sich bei dem ungemounteten Gerät um ein Loop-Device handelt, soll auch dieses Loop-Device freigegeben werden.
-f
Erzwingt das Unmounten trotz der Fehlermeldung »Device busy«. Dies kann im Fall eines nicht erreichbaren NFS-Dateisystems nützlich sein. Die Option wird erst ab Kernel-Version 2.1.116 unterstützt.
-l
»Gemütliches Unmounten« (lazy umount). Hängt das Dateisystem sofort aus der Verzeichnishierarchie aus und bereinigt alle Bezüge auf das Dateisystem, sobald es nicht mehr verwendet wird. Die Option wird erst ab Kernel-Version 2.4.11 unterstützt.
-n
Unmountet, ohne die Datei /etc/mtab zu verwenden
Bewirkt, dass die Aktionen nur für Dateisysteme vorgenommen werden, denen optionen die angegebenen Optionen in der Datei /etc/fstab zugewiesen wurden. Mehrere Aktionen können in einer durch Kommata getrennten Liste übergeben werden. Eine Option mit einem Präfix no bezeichnet die Optionen, für die keine Aktionen vorgenommen werden. -O
-r
Im Fall, dass das Unmounten fehlschlägt, wird versucht, das Dateisystem als nur lesbar (read-only) zu mounten.
-t typ
Bewirkt, dass die Aktionen nur für Dateisysteme des angegebenen Typs durchgeführt werden. Mehrere Dateisystemtypen können in einer durch Kommata getrennten Liste übergeben werden. Erhält die Dateisystemliste ein vorangestelltes no, werden die Aktionen nur für die Dateisystemtypen durchgeführt, die nicht angegeben werden.
-v
Ausführliche Anzeige aller Informationen
Tab. 10.27: Die Optionen des Befehls umount
Ein Loop-Device ist eine Einrichtung, mit der es möglich ist, eine Datei wie ein Gerät zu verwenden. Aus Benutzersicht scheint es, als würde auf ein Gerät und nicht auf eine Datei zugegriffen werden. Dies kann zum Beispiel bei einem CD-Server eingesetzt werden: Dazu kann der Inhalt einer CD-ROM mit Hilfe des Befehls dd beispielsweise in eine Datei cdinhalt1.iso geschrieben und anschließend die Datei auf die Gerätedatei /dev/loop0 gemountet werden.
461
magnum
Dateisystem verwalten
In diesem Beispiel wird das Dateisystem ungemountet, das unter dem Mountpoint /home eingebunden wurde, wobei für den Fall, dass der Versuch, unzumounten, fehlschlägt, das Dateisystem nur noch lesbar gemountet wird: # umount -r /home
Ein Dateisystem, das gerade von einem Benutzer oder einem Prozess verwendet wird, kann nicht mit diesem Befehl ungemountet werden: # umount /opt umount: /opt: device is busy
Sie können nun mit Hilfe des Befehls fuser, der auch in diesem Abschnitt erläutert wird, feststellen, welche Prozesse oder Benutzer noch auf dem Dateisystem aktiv sind, und gegebenenfalls das Unmounten mit der Option –f erzwingen: # umount -f /opt
Der Befehl fuser Dieser Befehl stellt fest, welche Benutzer oder Prozesse noch auf einem Dateisystem, das ungemountet werden soll, aktiv sind. Die Syntax des Befehls lautet: # fuser [-option(en)] [ datei(en) | dateisystem(e) ]
Der Befehl gibt die Prozess-IDs von allen Prozessen aus, die die angegebenen Dateien oder Dateisysteme verwenden. Dabei wird an jede Prozess-ID ein Buchstabe angehängt, der die Zugriffsart bezeichnet. Die Kennzeichen der Ausgabe haben folgende Bedeutung: Kennzeichen
Erklärung
c
Der Prozess verwendet die Datei als aktuelles Verzeichnis.
e
Der Prozess führt die Datei aus.
f
Der Prozess hat die Datei geöffnet.
m
Der Prozess verwendet die Datei als dynamische Bibliothek.
r
Die Datei ist das Wurzelverzeichnis des Prozesses.
Tab. 10.28: Die Kennzeichen der Ausgabe des Befehls fuser
Der Befehl kennt folgende Optionen: Option
Beschreibung
-a
Zeigt alle an der Befehlszeile angegebenen Dateien, auch wenn kein Prozess auf diese zugreift
-i
Bittet den Benutzer um Bestätigung, bevor ein Prozess beendet wird. Diese Option ist nur gemeinsam mit der Option -k gültig.
-k
Sendet das KILL-Signal an jeden Prozess, um alle Prozesse abzubrechen
-l
Listet alle bekannten Signalnamen auf
Tab. 10.29: Die Optionen des Befehls fuser
462
Kapitel 10 · Geräteverwaltung
-m
Das Argument gibt eine Datei auf einem gemounteten Dateisystem oder ein blockorientiertes Gerät an, das gemountet ist. Alle Prozesse, die auf Dateien dieses Dateisystems zugreifen, werden aufgelistet.
-s
Stiller Modus
-signal
Verwendet anstelle des KILL-Signals das angegebene Signal, um Prozesse zu beenden. Signale können entweder mit dem Namen angegeben werden, zum Beispiel -QUIT, oder mit ihrer Nummer, zum Beispiel -2.
-u
Der Name des Benutzers des Prozesses wird an jede Prozess-ID angehängt.
-v
Ausführlicher Modus
-
Setzt alle Optionen auf ihre Standardwerte zurück
Tab. 10.29: Die Optionen des Befehls fuser (Forts.)
Die Ausgabe des Befehls kann zum Beispiel folgendermaßen aussehen: # fuser –vu /projektdaten USER PID ACCESS COMMAND /projektdaten: her 783 c bash
10.4.11 Dateisysteme überprüfen Mit den nachfolgenden Befehlen können Dateisysteme auf ihre Konsistenz überprüft werden:
Der Befehl fsck Der Befehl fsck ist ein interaktives Programm, das Dateisysteme auf Inkonsistenzen überprüft und zu reparieren versucht. Dateisystemfehler können durch Stromausfall oder Systemabstürze usw. entstehen. Die Syntax des Befehls lautet: # fsck [-option(en)] [dateisystem(e) ]
Der Rückgabewert des Befehls ist die Summe der folgenden Zustände: Zustand
Beschreibung
0
Keine Fehler
1
Fehler wurden gefunden und bereinigt.
2
Das System sollte neu gestartet werden.
4
Fehler wurden gefunden, aber nicht bereinigt.
8
Auftreten eines internen Fehlers
16
Auftreten eines Anwendungs- oder Syntaxfehlers
32
Der Befehl wurde auf Anforderung des Benutzers abgebrochen.
128
Auftreten eines Fehlers im Zusammenhang mit einer dynamischen Bibliothek
Tab. 10.30: Zustände des Befehls fsck
463
Dateisystem verwalten
magnum
Der Befehl ist nur ein Frontend für die verschiedenen Überprüfungsroutinen, die unter Linux zur Verfügung stehen. Normalerweise muss root während der Ausführung bestätigen, ob Korrekturen durchgeführt werden sollen. Der Befehl fsck ist in der Lage, die am häufigsten auftretenden Festplattenprobleme zu lösen, wobei die Korrekturen aber manchmal zum Datenverlust im Dateisystem führen. Vor der Ausführung des Befehls sollten Sie die zu prüfenden Dateisysteme unbedingt unmounten. Der Befehl kennt folgende Optionen: Option
Beschreibung
-a
Repariert das Dateisystem automatisch ohne Rückfragen
-A
Überprüft alle in der Datei /etc/fstab angegebenen Dateisysteme in einem Durchlauf
-C
Zeigt Fortschrittsleisten bei den Dateisystemprüfprogrammen an, die dies unterstützen
-N
Es erfolgt keine normale Ausführung, sondern nur eine Anzeige, was durchgeführt werden würde.
-P
Wenn die Option -A verwendet wird, wird das root-Dateisystem parallel mit den anderen Dateisystemen überprüft. Das ist keine sichere Option, da dies zu einem inkonsistenten root-Dateisystem führen kann. Diese Option wurde für Systemadministratoren zur Verfügung gestellt, die das root-Dateisystem nicht in kleinere und kompakte Dateisysteme aufteilen möchten.
-R
Wenn das root-Dateisystem bereits beschreib- und lesbar gemountet ist, sorgt diese Option dafür, dass dieses übersprungen wird, wenn die Option -A verwendet wird.
-s
Serieller Modus des Befehls: Die Überprüfungen finden nacheinander und nicht parallel statt
-t typ
Angabe des Dateisystemtyps, der überprüft werden soll
-r
Interaktives Reparieren des Dateisystems: root wird um Bestätigung gebeten, wenn Reparaturen notwendig sind
--
Übergabe von Parametern an das dateisystemspezifische Programm
Tab. 10.31: Die Optionen des Befehls fsck
Der Befehl kann bei einem ungemounteten Dateisystem zum Beispiel wie folgt verwendet werden: # fsck –r /dev/hda3
Der Befehl e2fsck oder fsck.ext2 Dieser Befehl ist ein interaktives Programm, das ext2-Dateisysteme auf Inkonsistenzen überprüft und zu reparieren versucht. Der Rückgabewert des Befehls besteht aus der Summe derselben Zustände wie der Befehl fsck. Die Syntax des Befehls lautet: # e2fsck [-option(en)] [ dateisystem(e) ]
Der Befehl kennt folgende Optionen:
464
Kapitel 10 · Geräteverwaltung
Option
Beschreibung
-a
Diese Option entspricht der Option -p; sie ist nur aus Gründen der Abwärtskompatibilität vorhanden.
-b
Verwendet einen alternativen Backup-Superblock anstelle des originalen Superblocks. Diese Option ist nützlich, wenn der Superblock beschädigt ist. Die Blocknummern von Backup-Superblocks können mit Hilfe des Befehls mke2fs -n ermittelt werden.
superblock
-B
blockgröße
In der Regel sucht der Befehl nach einem Superblock, wobei die Blockgröße unterschiedlich sein kann. Wird die Blockgröße angegeben, versucht der Befehl, den Superblock nur an dieser bestimmten Blockgröße zu finden.
c
Mit dieser Option versucht der Befehl, defekte Blöcke im Dateisystem zu finden und zu markieren.
-C
Bei Verwendung dieser Option sendet der Befehl Informationen über die Fertigstellung des Prüflaufs an den angegebenen File Descriptor (Dateizeiger). Wurde dieser mit 0 angegeben, gibt der Befehl (an einer Grafikkonsole oder einem -terminal) eine Anzeige aus, wie weit der Prüflauf abgearbeitet ist.
fd
-d
Ausgabe von Debugging-Informationen
-D
Optimiert die Verzeichnisse im Dateisystem durch erneute Indizierung oder durch Sortierung und Komprimierung
-E
Definition von erweiterten Optionen. Im Moment wird nur folgende Option unterstützt:
optionen
ea_ver= ext-attr-ver
geht davon aus, dass das Format von erweiterten Attributblöcken im Dateisystem der angegebenen Versionsnummer entspricht, die 1 oder 2 sein kann
-f
Erzwingt ein Überprüfen des Dateisystems, auch wenn es in Ordnung zu sein scheint
-F
Leert den Geräte-Buffercache des Dateisystems vor der Überprüfung
-j
Definiert den Pfadnamen, unter dem das externe Journal des Dateisystems sich befindet
ext-journal -l
datei -L
datei
Fügt die in der Datei angegebenen Blocknummern der Liste mit den defekten Blocknummern hinzu Weist die in der Datei angegebene Liste von Blöcken der Liste defekter Blöcke des Dateisystems zu
-n
Öffnet das Dateisystem nur lesbar und setzt die Antwort »no« für alle Fragen voraus
-p
Stiller Modus. Das Dateisystem wird ohne Rückfragen repariert.
-t
Ausgabe der Zeitstatistiken des Befehls
-v
Ausführlicher Modus
-y
Alle Rückfragen werden automatisch mit »yes« beantwortet.
Tab. 10.32: Die Optionen des Befehls e2fsck
465
magnum
Dateisystem verwalten
Alternativ können Sie den Befehl dumpe2fs verwenden, um die Backup-Superblocks zu ermitteln, wenn Ihnen die ursprünglichen mke2fs-Optionen nicht mehr bekannt sind. Der Befehl kann zum Beispiel wie folgt verwendet werden, um alle Rückfragen automatisch mit Ja zu beantworten: # e2fsck –y /dev/hda2
Der Befehl reiserfsck Manchmal muss auch ein Dateisystem reiserfs überprüft werden. Dazu wird der Befehl reiserfsck verwendet, der folgende Syntax besitzt: reiserfsck [-option(en)] gerät
Die wichtigsten Optionen des Befehls sind: Option
Beschreibung
-a oder -p
Diese Optionen bewirken, dass weitere Informationen über das angegebene Dateisystem ausgegeben werden, prüfen, ob die Fehlermarken im Superblock gesetzt sind, und führen einige einfache Prüfungen durch.
--check
Das Dateisystem wird auf Inkonsistenzen überprüft und ein Bericht wird ausgegeben, aber es wird nichts repariert.
--clean-attributes
Diese Option bereinigt reservierte Felder im Bereich Stat-Data.
--fix-fixable
Leicht zu korrigierende Fehler werden repariert. Normalerweise wird diese Option benötigt, wenn die Option --check folgende Meldung ausgibt: »corruption that can be fixed with --fix-fixable«.
-j gerät oder -journal gerät
Diese Option liefert den Gerätenamen des aktuellen Dateisystemjournals und ist notwendig, wenn das Journal sich auf einem separaten Gerät befindet.
-l datei oder --logfile datei
Diese Option gibt einen Bericht über jede Inkonsistenz in die angegebene Datei aus, anstatt auf die Standardausgabe.
-n oder --nolog
Diese Option verhindert, dass vom Befehl reiserfsck irgendeine Inkonsistenz gemeldet wird.
-q oder --quiet
Diese Option verhindert, dass vom Befehl reiserfsck der Fortschritt der Prüfung gemeldet wird.
--rebuild-sb
Der Superblock wird repariert. Normalerweise wird diese Option benötigt, wenn die Option --check folgende Meldung ausgibt: »read_super_block: can't find a reiserfs file system«.
--rebuild-tree
Die vollständige Dateisystem-Baumstruktur wird neu aufgebaut. Normalerweise wird diese Option benötigt, wenn die Option --check folgende Meldung ausgibt: »corruption that can be fixed only during --rebuild-tree«.
Tab. 10.33: Die Optionen des Befehls reiserfsck
466
Kapitel 10 · Geräteverwaltung
Option
Beschreibung
-y oder --yes
Diese Option verhindert, dass Sie um Bestätigung gebeten werden, wenn der Befehl auf weitere Anweisungen wartet. Es wird dann automatisch mit Ja geantwortet.
-z oder --adjust-size
Diese Option korrigiert Dateigrößen, die größer als der Startpunkt des letzten entdeckten Byte sind. Dies bedeutet, dass die Lücken am Ende der Dateien entfernt werden.
Tab. 10.33: Die Optionen des Befehls reiserfsck (Forts.)
Es gibt darüber hinaus noch einige Expertenoptionen, die aber nur mit äußerster Vorsicht angewendet werden sollten. Sie können mit man reiserfsck ausgegeben werden. In diesem Beispiel wird eine Überprüfung eines Dateisystems reiserfs für das Dateisystem /dev/hda8 durchgeführt: # reiserfsck /dev/hda8 reiserfsck 3.x.1b (2002) Will read-only check consistency of the filesystem on /dev/hda8 Will put log info to 'stdout' Do you want to run this program?[N/Yes] (note need to type Yes):Yes ########### reiserfsck --check started at Sat Jun 11 22:18:10 2005 ########### Replaying journal.. 0 transactions replayed Checking S+tree..ok Comparing bitmaps..ok Checking Semantic tree... ok No corruptions found There are on the filesystem: Leaves 794 Internal nodes 8 Directories 981 Other files 8526 Data block pointers 2385 (zero of them 12) Safe links 0 ########### reiserfsck finished at Sat Jun 11 22:19:37 2005 ###########
Der Befehl dumpe2fs Dieser Befehl gibt Informationen über das Dateisystem aus. Er zeigt Superblockund Blockgruppen- Informationen an. Die Syntax des Befehls lautet: # dumpe2fs [-option(en)] gerät
467
Dateisystem verwalten
magnum
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-b
Zeigt die Blöcke an, die als defekt im Dateisystem markiert wurden
-f
Zwingt den Befehl, ein Dateisystem auch dann anzuzeigen, wenn es Dateisystemflags besitzt, die der Befehl nicht versteht
-h
Zeigt nur die Superblock- und keine detaillierten Blockgruppen-Informationen an
-i
Zeigt die Dateisystemdaten aus einer Image-Datei an, die durch den Befehl e2image erzeugt wurde
-ob
superblock
Verwendet den angegebenen Block als Superblock beim Überprüfen des Dateisystems
-oB
Verwendet Blöcke der angegebenen Größe beim Prüfen des Dateisystems
blockgröße -x
Gibt die detaillierten Nummern der Blockgruppen-Informationen im Hexadezimalformat aus
Tab. 10.34: Die Optionen des Befehls dumpefs
Im folgenden Beispiel werden nur die Informationen des Superblocks für das Gerät /dev/hda2 ausgegeben: # dumpe2fs -h /dev/hda2 dumpe2fs 1.34 (25-Jul-2003) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: 5e4c1223-5903-415b-bf28-85d91cb648cf Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr filetype needs_recovery sparse_super Default mount options: (none) Filesystem state: clean Errors behavior: Panic Filesystem OS type: Linux Inode count: 2382720 Block count: 4759256 Reserved block count: 237962 Free blocks: 3128770 Free inodes: 2092015 First block: 0 Block size: 4096 Fragment size: 4096 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 16320 Inode blocks per group: 510 Last mount time: Tue May 11 09:37:43 2004 Last write time: Tue May 11 09:37:43 2004 Mount count: 8 Maximum mount count: 21 Last checked: Sun May 9 18:05:05 2004 Check interval: 15552000 (6 months) Next check after: Fri Nov 5 17:05:05 2004 Reserved blocks uid: 0 (user root
468
Kapitel 10 · Geräteverwaltung
Reserved blocks gid: First inode: Inode size: Journal inode:
0 (group root) 11 128 8
Der Befehl badblocks Dieser Befehl durchsucht ein Gerät (eine Partition in der Regel) nach defekten Blöcken. Die Syntax des Befehls lautet: # badblocks [-option(en)] gerät [letzter-block] [erster-block]
Die Angabe letzter-block benennt den letzten zu prüfenden Block, wobei standardmäßig der letzte Block des Geräts verwendet wird. Die Angabe erster-block ist ebenfalls optional und legt den Block fest, bei dem die Prüfung beginnen soll. Standardmäßig ist es der erste Block auf dem Gerät. Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-b
Gibt die Größe der Blöcke in Bytes an
-c blockzahl
Gibt die Anzahl der Blöcke an, die gleichzeitig überprüft werden sollen. Standardmäßig sind dies 16. Wenn Sie diese Zahl erhöhen, wird die Effizienz des Befehls gesteigert, aber auch entsprechend mehr Hauptspeicher verwendet.
-f
Normalerweise weigert sich der Befehl, einen Test lesend-schreibend oder anders als im nicht destruktiven Modus auf ein gemountetes Gerät durchzuführen. Denn dies könnte ein Dateisystem zum Absturz bringen oder beschädigen. Mit dieser Option kann der Befehl aber dazu gezwungen werden. Die Verwendung dieser Option wird nicht empfohlen, sie kann unter Umständen das Dateisystem zerstören!
-i inputdatei
Listet bereits als defekt bekannte Blöcke aus der angegebenen Datei oder bei Eingabe des Zeichens »-« von der Standardeingabe auf. Diese Blöcke werden dann beim Testen einfach übersprungen und sie werden auch nicht als defekt ausgegeben.
-o outputdatei
Diese Option schreibt die Liste der defekten Blöcke in die angegebene Datei.
-p anzahl
Wiederholt das Scannen der Festplatte, bis es keine neuen Blöcke mehr in den mit anzahl angegebenen aufeinander folgenden Scanvorgängen findet. Standardmäßig findet nur ein Scanvorgang statt.
-t muster
Definiert ein Testmuster, das aus den Blöcken gelesen und in diese geschrieben werden soll.
-n
Verwendet einen nicht destruktiven Lese-Schreib-Modus. Standardmäßig wird nur ein nicht destruktiver Lesemodus durchgeführt. Diese Option kann nicht gemeinsam mit der Option -w verwendet werden.
-s
Zeigt den Fortschritt des Scanvorgangs an, indem die Blocknummern nach der Überprüfung ausgegeben werden
-v
Ausführlicher Modus
-w
Verwendet den Schreibmodus-Test. Es wird nach defekten Blöcken gescannt, indem Muster in jeden Block des Geräts geschrieben werden und anschließend jeder Block gelesen wird. Danach werden die Ergebnisse verglichen, um festzustellen, ob ein Block defekt ist.
Tab. 10.35: Die Optionen des Befehls badblocks
469
magnum
Dateisystem verwalten
Im folgenden Beispiel wird eine Überprüfung mit ausführlicher Ausgabe für das Gerät /dev/hda2 durchgeführt: # badblocks -v /dev/hda2 Checking blocks 0 to 19037025 Checking for bad blocks (read-only test): 1502640/ 19037025 2427824/ 19037025
788352/ 19037025
Der Befehl debugfs Dieser Befehl kann ein ext2-Dateisystem debuggen. Die Syntax des Befehls lautet: # debugfs [-option(en)] [gerät]
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-b
Erzwingt die Verwendung der angegebenen Blockgröße für das Dateisystem, anstatt wie standardmäßig die korrekte Blockgröße automatisch zu ermitteln
blockgröße -c
Legt fest, dass das Dateisystem in einem Modus geöffnet wird, in dem die Inodeund Gruppe-Bitmaps anfänglich nicht gelesen werden. Dies kann bei Dateisystemen nützlich sein, die ziemlich beschädigt sind, setzt allerdings voraus, dass das Dateisystem nur lesbar geöffnet wird.
-f
Veranlasst den Befehl debugfs, die Befehle aus der angegebenen Datei zu lesen und auszuführen
datei -i
Legt fest, dass das Gerät eine ext2-Image-Datei enthält, die vom Befehl e2image angelegt wurde. Da eine solche Image-Datei weniger Komponenten als ein ext2Dateisystem hat, funktionieren viele Befehle von debugfs nicht.
-R
Veranlasst den Befehl, die einzelnen Befehlsanforderungen auszuführen und sich dann zu beenden
request superblock
Veranlasst, dass der Superblock des Dateisystems aus der angegebenen Blocknummer gelesen wird, anstatt die standardmäßige Nummer zu verwenden (1). Diese Option muss gemeinsam mit der Option -b verwendet werden.
-w
Legt fest, dass das Dateisystem im beschreib- und lesbaren Modus geöffnet wird
-s
Tab. 10.36: Die Optionen des Befehls debugfs
Der Befehl kann mit folgenden Befehlen angewandt werden: Option
Beschreibung
bmap datei log_block
Gibt die physikalische Blocknummer entsprechend der angegebenen logischen Blocknummer in dem Inode aus
cat datei
Gibt den Inhalt dem Inode an die Standardausgabe aus
cd verzeichnis
Ändert das aktuelle Arbeitsverzeichnis entsprechend der Angabe ab
chroot verzeichnis
Ändert das root-Verzeichnis entsprechend des angegebenen Verzeichnisses ab
Tab. 10.37: Die Menüpunkte des Befehls debugfs
470
Kapitel 10 · Geräteverwaltung
Option
Beschreibung
close
Schließt das aktuell geöffnete Dateisystem
clri datei
Löscht den Inhalt des Inodes der angegebenen Datei
dump datei ausgabe_datei
Die Inhalte des Inodes der angegebenen Datei werden in die Ausgabedatei geschrieben.
expand_dir verzeichnis
Expandiert das Verzeichnis
feature [fs_option]
Aktiviert oder deaktiviert verschiedene Dateisystemoptionen im Superblock
find_free_block [zähler [ziel]]
Sucht den ersten freien Block und allokiert diesen, das Zählen beginnt nach dem angegebenen Zielblock
find_free_inode [verzeichnis [modi]]
Findet und allokiert eines freien Inodes. Mit Hilfe des Verzeichnisses kann die Inode-Nummer angegeben des Verzeichnisses werden, in dem sich der Inode befindet. Das Argument modi gibt die Berechtigungen des neuen Inodes an.
freeb block [zähler]
Markiert den angegebenen Block als nicht allokiert. Wenn das Argument zähler angegeben wird, dann wird die angegebene Anzahl von Blöcken als nicht allokiert markiert.
freei datei
Gibt den Inode der angegebenen Datei frei
icheck block block …
Gibt eine Liste der Inodes aus, die einen der angegebenen Blöcke verwenden
imap datei
Gibt aus, wo in der Inode-Tabelle sich die Inode-Datenstruktur der angegebenen Datei befindet
initialize
gerät blockgröße
Erzeugt ein ext2-Dateisystem auf dem angegebenen Gerät mit der entsprechenden Blockgröße
kill_file datei
Entfernt den Inode und Datenblöcke der angegebenen Datei
lcd verzeichnis
Wechselt vom aktuellen Verzeichnis des Prozesses debugfs in das Verzeichnis des nativen Dateisystems
ln datei zieldatei
Erzeugt einen Link
logdump [-option(en)]
Gibt die Inhalte des ext3-Journals aus
ls verzeichnis
Gibt eine Liste der Dateien im angegebenen Verzeichnis aus. Mögliche Optionen sind -l (ausführliches Listing) und -d (Auflisten von gelöschten Einträgen im Verzeichnis).
modify_inode datei
Ändern des Inhalts der Inode-Struktur der angegebenen Datei
mkdir verzeichnis
Anlegen eines Verzeichnisses
mknod datei [p|[c|b] major minor]
Erzeugt eine spezielle Gerätedatei (Named Pipe, block- oder zeichenorientiertes Gerät). Handelt es sich dabei um eine block- oder zeichenorientierte Gerätedatei, müssen als Optionen die Major- und Minor-Gerätenummer angegeben werden.
ncheck inum …
Zur angegebenen Liste von Inode-Nummern wird eine Liste von Pfadnamen ausgegeben.
Tab. 10.37: Die Menüpunkte des Befehls debugfs (Forts.)
471
magnum
Dateisystem verwalten
Option
Beschreibung
open [-option(en)] gerät Öffnet ein Dateisystem für die Bearbeitung. Dabei können die Optionen des Befehls debugfs verwendet werden. pwd
Ausgabe des aktuellen Verzeichnisses
quit
Beenden des Befehls
rdump verzeichnis ziel
Gibt ein Verzeichnis und dessen Inhalt rekursiv in das angegebene Ziel aus, das ein vorhandenes Verzeichnis im nativen Dateisystem sein muss.
rm datei
Entfernt die angegebene Datei
rmdir verzeichnis
Entfernt das angegebene Verzeichnis
setb block [zähler]
Markiert den angegebenen Block als allokiert. Wenn der Zähler angegeben wird, dann wird die entsprechende Anzahl von Blöcken allokiert.
seti datei
Markiert die angegebene Datei als belegt
set_super_value
Setzt das angegebene Feld des Superblocks auf den angegebenen Wert. Die Liste aller Felder des Superblocks ist mit dem Befehl set_super_value -l erhältlich.
feld wert show_super_stats [-h]
Listet den Inhalt des Superblocks und der Gruppenblock-Deskriptoren auf. Die Option -h bewirkt, dass nur der Inhalt des Superblocks angezeigt wird.
stat datei
Zeigt die Inhalte der Inode-Struktur der angegebenen Datei an
testb block [zähler]
Testet, ob der angegebene Block als allokiert markiert ist. Wird das Argument zähler angegeben, wird die entsprechende Anzahl von Blocks geprüft.
testi datei
Testet, ob der Inode der angegebenen Datei als allokiert markiert ist
unlink datei
Entfernt den durch die Datei angegebenen Link zu einem Inode
write datei zieldatei
Erzeugt eine Datei im Dateisystem mit dem Namen zieldatei und kopiert die Inhalte der Datei datei in diese Datei
Tab. 10.37: Die Menüpunkte des Befehls debugfs (Forts.)
Im folgenden Beispiel wird der Befehl debugfs für das Gerät /dev/hda2 gestartet und nach dem nächsten freien Inode gesucht: # debugfs /dev/hda2 debugfs 1.34 (25-Jul-2003) debugfs: find_free_inode Free inode found: 16
Im nächsten Beispiel wird die Liste aller Felder des Superblocks ausgegeben: debugfs: set_super_value -l Superblock fields supported by command: inodes_count blocks_count r_blocks_count
472
the set_super_value unsigned integer unsigned integer unsigned integer
Kapitel 10 · Geräteverwaltung
free_blocks_count free_inodes_count first_data_block log_block_size log_frag_size blocks_per_group
unsigned unsigned unsigned unsigned integer unsigned
integer integer integer integer integer
...
Im letzten Beispiel wird der Inhalt des Superblocks ausgegeben: debugfs: show_super_stats Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: 5e4c1223-5903-415b-bf28-85d91cb648cf Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr filetype needs_recovery sparse_super Default mount options: (none) Filesystem state: clean Errors behavior: Panic Filesystem OS type: Linux Inode count: 2382720 Block count: 4759256 Reserved block count: 237962 Free blocks: 3129884 Free inodes: 2092343 First block: 0 Block size: 4096 Fragment size: 4096 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 16320 Inode blocks per group: 510 Last mount time: Fri Apr 30 16:07:14 2004 Last mount time: Fri Apr 30 16:07:14 2004 Last write time: Fri Apr 30 21:37:58 2004 Mount count: 16 Maximum mount count: 21 Last checked: Tue Apr 27 10:10:33 2004 Check interval: 15552000 (6 months) Next check after: Sun Oct 24 10:10:33 2004 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128 Journal inode: 8 Directories: 20863 Group 0: block bitmap at 3, inode bitmap at 4, inode table at 5 5822 free blocks, 16301 free inodes, 2 used directories Group 1: block bitmap at 32771, inode bitmap at 32772, inode table at 32773 22819 free blocks, 14287 free inodes, 129 used directories Group 2: block bitmap at 65536, inode bitmap at 65537, inode table at 65541 28013 free blocks, 14618 free inodes, 209 used directories ...
473
magnum
Dateisystem verwalten
10.4.12 Informationen zu Dateisystemen ausgeben In diesem Abschnitt werden Befehle vorgestellt, die verschiedene Informationen zu Dateisystemen geben können.
Der Befehl df Sie können den Befehl df verwenden, um den freien Speicherplatz von Dateisystemen anzuzeigen. Die Syntax des Befehls lautet: # df [-option(en)] [ dateisystem(e) ]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-a oder --all
Schließt Dateisysteme mit ein, die 0 Blöcke Kapazität haben, das heißt leer sind
-b oder --block-size=größe Verwendet Blöcke der angegebenen Größe -h oder --human-readable
Ausgabe der Größen in einem von Menschen lesbaren Format, zum Beispiel 1K, 2M, 3G
-H oder --si
Entspricht -h, aber verwendet 1000 anstelle von 1024
-i oder --inodes
Listet Inode-Informationen auf anstelle der Verwendung von Blöcken
-k oder --block-size=1K
Blockgröße ist ein Kbyte
-l oder --local
Anzeige nur der lokalen Dateisysteme und nicht der NFS-Dateisysteme
--no-sync
Ruft vor der Abfrage der Information nicht den Befehl sync auf
-P oder --portability
Verwendet das POSIX-Ausgabeformat (genau eine Zeile pro Dateisystem)
--sync
Ruft vor der Abfrage der Information den Befehl sync auf
-t oder --type=typ
Gibt nur die Dateisysteme des angegebenen Typs aus
-T oder --print-type
Ausgabe des Dateisystemtyps
-x oder --exclude-type=typ Gibt nur die Dateisysteme aus, die nicht zum angegebenen Typ
gehören
Tab. 10.38: Optionen des Befehls df
Im nachfolgenden Beispiel wird der Befehl df bare Anzeige zu erhalten: # df -h FilesystemSizeUsedAvailUse% Mounted on /dev/hda218G6.0G12G35%/ tmpfs121M0121M0%/dev/shm pclsu:/home/data25G12G12G49%/data
474
–h verwendet,
um eine einfacher les-
Kapitel 10 · Geräteverwaltung
Der Befehl du Dieser Befehl gibt aus, wie viel Festplattenplatz von Verzeichnissen und/oder Dateien belegt wird. Die Syntax des Befehls lautet: # du [-option(en)] [ datei(en) ]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-a oder --all
Anzeige des verbrauchten Festplattenplatzes auch für die einzelnen Dateien, nicht nur summarisch für Verzeichnisse
--apparent-size
Gibt die offensichtliche Größe anstelle des verbrauchten Festplattenplatzes aus. Diese ist in der Regel kleiner, kann aber zum Beispiel bei der Verwendung von indirekten Blöcken oder interner Fragmentierung größer sein.
-B oder --block-size=größe
Verwendet Blöcke der angegebenen Größe
-b oder --bytes
Entspricht der Kombination der Optionen --apparent-size -block-size=1
-c oder --total
Gibt am Schluss zusätzlich eine Gesamtsumme aus
-D oder --dereference-args
Symbolische Links von Dateien werden aufgelöst
--exclude=muster
Schließt Dateien aus, die mit dem angegebenen Muster übereinstimmen
-h oder --human-readable
Gibt die Größen in für Menschen lesbarem Format an, zum Beispiel 1K, 2M, 3G
-H der --si
Entspricht der Option -h, verwendet aber 1000 statt 1024
-k
Anzeige in Kilobyte
-L oder --dereference
Alle symbolischen Links werden aufgelöst.
--max-depth=n
Gibt die Summe für ein Verzeichnis nur aus, wenn es n oder weniger Level unter dem an der Befehlszeile angegebenen Verzeichnis liegt
-S oder --separate-dirs
Enthält keine Größe von untergeordneten Verzeichnissen
-s oder --summarize
Ausgabe der Summe für jedes Argument
-x oder --one-file-system
Ignoriert Verzeichnisse von anderen Dateisystemen
Tab. 10.39: Optionen des Befehls df
Im nachfolgenden Beispiel wird der verbrauchte Festplattenplatz des Verzeichnisses /etc in Mbyte als Summe ermittelt: # du –sh /etc 77M /etc
475
Swapping unter Linux
magnum
Der Befehl sync Normalerweise werden die noch nicht auf die Festplatte zurückgeschriebenen Schreiboperationen in bestimmten Zeitabständen durch den Prozess pdflush aus dem Zwischenspeicher auf die Platte geschrieben. Dies lässt sich aber auch manuell mit Hilfe des Befehls sync durchführen.
10.4.13 Grafische Systemverwaltung mit KDE KDE bietet ein grafisches Frontend zum Befehl df an. Das Programm befindet sich im Hauptmenü unter SYSTEM - DATEISYSTEM - KDISKFREE:
Bild 10.15: Festplattenbelegung mit KDiskFree anzeigen
10.5 Swapping unter Linux In diesem Abschnitt erfahren Sie, wie Sie Swap-Partitionen und Swap-Dateien unter Linux einrichten, anzeigen und wieder löschen können.
10.5.1
Swapping und Paging
Gestartete Programme werden als Prozesse in den realen Speicher geladen, das heißt den Haupt- oder RAM-Speicher. Alle Prozesse im Hauptspeicher werden in so genannte Seiten oder Pages unterteilt, die nach Bedarf ein- oder ausgelagert werden können. Wird der Speicherplatz des RAM zu klein, dann beginnt Linux damit, alle Seiten von Prozessen, die im Moment nicht zur Verarbeitung eines Prozesses notwendig sind, in den virtuellen Speicherbereich, den so genannten Swap Space oder Swap-Bereich, auszulagern. Auf diese Weise wird der Arbeitsspeicher virtuell vergrößert, indem die im Moment nicht benötigten Daten ausgelagert werden. Unter Linux befindet sich dieser Auslagerungsbereich in der Regel auf der Festplatte als eigene Partition, der so genannten Swap-Partition. Auf diese Weise können wesentlich mehr Programme im RAM ablaufen, als ursprünglich durch die Hauptspeichergröße möglich ist.
476
Kapitel 10 · Geräteverwaltung
Der Swap Space sollte mindestens so groß wie der Hauptspeicher sein, damit er im Falle eines Systemabsturzes ein Speicherabbild des RAM, einen so genannten Crashdump, aufnehmen kann. Bei sehr speicherintensiven Anwendungen sollte der Swap Space entsprechend vergrößert werden. Eine Swap-Datei wird auch als Auslagerungsdatei bezeichnet.
Ist das System sehr stark belastet, wird nicht mehr das soeben beschriebene PagingVerfahren angewandt, sondern es kommt zum Swapping, das heißt, statt einzelner Pages werden ganze Prozesse vorübergehend in den Swap-Bereich ausgelagert. Die Größe einer Swap-Partition wird normalerweise bei der Installation festgelegt, es ist aber auch möglich, später weitere Swap-Bereiche oder im Notfall auch SwapDateien hinzuzufügen. Swap-Partitionen sollten in die Datei /etc/fstab eingetragen werden, damit sie automatisch bei jedem Bootvorgang erkannt werden. Wenn Sie Ihrem System eine weitere Swap-Partition hinzufügen möchten, müssen Sie dazu eine Partition auf einer Ihrer Festplatten einrichten und dann einen entsprechenden Eintrag in der Datei /etc/fstab vornehmen, zum Beispiel: # cat /etc/vfstab ... /dev/hda5 swap ...
10.5.2
swap
pri=42 0 0...
Der Befehl mkswap
Mit Hilfe des Befehls mkswap können Sie Swap-Bereiche oder -Dateien erstellen. Anschließend müssen Sie den Befehl swapon verwenden, um den Swap-Bereich zu aktivieren. Die Syntax des Befehls lautet: # mkswap [-option(en)] gerät | datei
Der Befehl kennt folgende Optionen: Option
Beschreibung
-c
Überprüft das Gerät auf defekte Blöcke (sofern es sich um ein blockorientiertes Gerät handelt), bevor der Swap-Bereich angelegt wird. Werden defekte Blöcke gefunden, dann werden die entsprechenden Blockzähler ausgegeben.
-f
Erzwingt das Anlegen des Swap-Bereichs, auch wenn der Befehl nicht ordnungsgemäß ist. Dadurch kann ein Swap-Bereich erzeugt werden, der größer als die Datei oder Partition ist, in der er sich befindet.
-p größe
Angabe der zu verwendenden Größe der Seiten (Pages), typische Werte sind 4096 oder 8192
Tab. 10.40: Die Optionen des Befehls mkswap
477
magnum
Swapping unter Linux
Zur Einrichtung einer zusätzlichen Swap-Partition gehen Sie wie folgt vor, wenn Sie den Bereich gleichzeitig auf defekte Blöcke testen möchten: # mkswap -c /dev/hda7
Um eine Swap-Datei einzurichten, müssen Sie zuerst die Datei in der benötigten Größe anlegen, bevor Sie sie mit dem Befehl mkswap initialisieren, zum Beispiel: # dd if=/dev/zero of=/space/swapdatei bs=1024 count=30000
Initialisieren Sie dann die Datei als Swap-Datei: # mkswap /space/swapdatei
10.5.3
Der Befehl swapon
Mit Hilfe des Befehls swapon können Sie bereits vorhandene Swap-Bereiche oder Dateien aktivieren oder anzeigen lassen. Die Syntax des Befehls lautet: # swapon [-option(en)] spezialdatei
Der Befehl kennt folgende Optionen: Option
Beschreibung
-a
Alle als Swap gekennzeichneten Geräte in der Datei /etc/fstab werden aktiviert. Geräte, die bereits als Swap aktiv sind, werden ohne Rückmeldung übersprungen.
-e
Diese Option überspringt Geräte ohne Rückmeldung, die nicht vorhanden sind.
-p priorität
Definiert die Priorität für den Befehl swapon. Diese Option steht erst ab Kernel 1.3.2 zur Verfügung. Die Priorität ist ein Wert zwischen 0 und 32.767. In der Datei /etc/fstab kann im Optionsfeld eines Swap-Geräts ein Eintrag pri=wert hinterlegt werden, der beim Aufruf von swapon -a verwendet wird.
-s
Ausgabe von Informationen zum Swap pro Gerät. Diese Option entspricht dem Befehl cat /proc/swaps und ist erst ab der Kernel-Version 2.1.25 verfügbar.
Tab. 10.41: Die Optionen des Befehls swap
Im folgenden Beispiel wird die im letzten Abschnitt angelegte Swap-Datei aktiviert: # swapon /swapdatei
Der nachfolgende Befehl zeigt die Informationen zu den Swap-Bereichen an: # swapon -s Filename /dev/hda1 /swapdatei
478
Type partition file
Size Used 514040 3212 29288 0
Priority 42 -1
Kapitel 10 · Geräteverwaltung
10.5.4
Der Befehl swapoff
Mit Hilfe des Befehls swap können Sie bereits vorhandene Swap-Bereiche oder -Dateien wieder deaktivieren. Die Syntax des Befehls lautet: # swapoff [-a] [spezialdatei]
Der Befehl kennt folgende Option: Option
Beschreibung
-a
Deaktivieren aller in /etc/fstab oder /proc/swaps vorhandenen Swap-Partitionen oder -Dateien
Tab. 10.42: Die Option des Befehls swapoff
Der nachfolgende Befehl deaktiviert die im vorherigen Abschnitt aktivierte SwapDatei: # swapoff /swapfile
Sie sollten in diesem Fall auch anschließend die Swap-Datei wieder löschen, wenn sie nicht mehr benötigt wird: # rm /swapdatei
10.5.5
Der Befehl free
Der Befehl free zeigt die Speicherauslastung einschließlich der Ausnutzung des Swap-Bereichs an. Die Syntax des Befehls lautet: free [-option(en)]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-b
Zeigt die Speichermenge in Byte an
-k
Zeigt die Speichermenge in Kbyte an
-m
Zeigt die Speichermenge in Mbyte an
-o
Deaktiviert die Anzeige der Zeile »buffer adjusted«
-s sekunde
Aktualisiert die Ausgabe im angegebenen Sekundenintervall
-t
Gibt die Gesamtsummen aus
Tab. 10.43: Die Optionen des Befehls free
479
magnum
Swapping unter Linux
In diesem Beispiel wird die Speicherauslastung in Mbyte einschließlich der Gesamtsumme ausgegeben: $ free -tm total Mem: 218 -/+ buffers/cache: Swap: 517 Total: 735
10.5.6
used 189 100 1 190
free 28 117 516 545
shared 0
buffers 12
cached 75
Swap-Konfiguration mit YaST
Die Swap-Konfiguration unter SUSE wird mit Hilfe des YAST-Moduls für die Partitionierung durchgeführt. Öffnen Sie das Menü HARDWARE - PARTITIONIEREN. Zuerst erscheint eine Warnmeldung, da das Partitionieren der Festplatten zu Datenverlust führen kann. Diese Warnmeldung sollten Sie unbedingt beachten, um sich vor Datenverlust zu schützen. Wenn Sie sicher sind, dass Sie die Festplatte problemlos partitionieren können, klicken Sie auf JA. Das nächste Fenster listet die vorhandenen Festplatten auf. Die Aufgaben Anlegen, Bearbeiten und Löschen können an dieser Stelle dialogorientiert durchgeführt werden: Wählen Sie einen freien Festplattenbereich, um eine Swap-Partition anzulegen, und anschließend den Partitionstyp aus (primäre oder logische Partition):
Bild 10.16: Swap-Partition mit YAST anlegen
Wählen Sie als Dateisystem SWAP aus und legen Sie die Größe fest. Sobald Sie diese Auswahl getroffen haben, wird auch SWAP als Mountpoint hinterlegt. Ein neu angelegter Swap-Bereich wird dabei automatisch in /etc/fstab aufgenommen. Allerdings besteht zurzeit keine Möglichkeit, die Priorität (und damit die parallele Nutzung) von Swap-Bereichen über die grafische Oberfläche zu definieren.
480
Kapitel 10 · Geräteverwaltung
10.6 Mit Disketten arbeiten Dieser Abschnitt gibt Ihnen einen Überblick über die Möglichkeiten, unter Linux mit Disketten zu arbeiten.
10.6.1
Der Befehl fdformat
Dieser Befehl formatiert eine Diskette im Low-Level-Format. Die Syntax des Befehls lautet: # fdformat [-n] gerät
Zu den formatierbaren Geräten gehören die nachfolgend aufgeführten Geräte. Bei der Gerätedatei für Disketten ist die Major-Gerätenummer in der Regel 2 und die Minor-Gerätenummer wie folgt: /dev/fd0d360 /dev/fd0h1200 /dev/fd0D360 /dev/fd0H360 /dev/fd0D720
(minor (minor (minor (minor (minor
= = = = =
4) 8) 12) 12) 16)
/dev/fd1D720 /dev/fd1H720 /dev/fd1h360 /dev/fd1h720 /dev/fd1H1440
(minor (minor (minor (minor (minor
= = = = =
17) 17) 21) 25) 29)
...
Diese Gerätedateien sind für Disketten unterschiedlicher Speicherkapazität. /dev/ Disketten mit einer Kapazität von 360 Kbyte, /dev/fd1H1440 Disketten vom Typ High Density und einer Speicherkapazität von 1,44 Mbyte usw. Die generischen Gerätenamen /dev/fd0 und /dev/fd1 können mit diesem Befehl nicht verwendet werden, wenn ein nicht standardmäßiges Format verwendet wird.
fd0d360 bezeichnet
Der Befehl kennt folgende Option: Option
Beschreibung
-n
Auf die abschließende Überprüfung des Geräts wird verzichtet.
Tab. 10.44: Die Option des Befehls fdformat
Im folgenden Beispiel wird eine Diskette mit Hilfe des Gerätenamens /dev/fd0 formatiert: # fdformat /dev/fd0 Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB. Formating ... c12 71
10.6.2
Der Befehl setfdprm
Mit diesem Befehl können Parameter zur Konfiguration des Diskettenlaufwerks eingestellt und gleichzeitig in der Datei /etc/fdprm hinterlegt werden. Die Syntax des Befehls lautet: # setfdprm [-option] gerät [name]
481
magnum
Mit Disketten arbeiten
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-c gerät
Löscht die Parameter des angegebenen Diskettenlaufwerks
-f gerät
Deaktiviert die Formatmeldungen für das angegebene, automatisch konfigurierte Diskettenlaufwerk
-p gerät name
Ein neuer Parametersatz wird dauerhaft für das angegebene Diskettenlaufwerk unter dem spezifizierten Namen aus der Datei /etc/fdprm gelesen. Alternativ ist es möglich, diese Parameter direkt über die Befehlszeile einzugeben.
-y gerät
Aktiviert die Formatmeldungen für das angegebene, automatisch konfigurierte Diskettenlaufwerk
Tab. 10.45: Die Optionen des Befehls setfdprm
Im folgenden Beispiel werden die Formatmeldungen für das Gerät viert:
/dev/fd0
akti-
# setfdprm -y /dev/fd0
10.6.3
Grafische Diskettenverwaltung mit KDE
KDE bietet ein grafisches Frontend zum Befehl fdformat an. Das Programm befindet sich im Hauptmenü unter SYSTEM - DATEISYSTEM - KFLOPPY:
Bild 10.17: Mit KFloppy Disketten formatieren
482
Kapitel 10 · Geräteverwaltung
10.6.4
Die Mtools
Der Umgang mit Disketten oder ZIP-Laufwerken, die FAT32-formatiert sind, kann unter Linux mit den Mtools gesteuert werden. Diese Disketten sind dann auch auf DOS- oder Windows-Systemen beschreib- und lesbar. Die Mtools sind eine Sammlung von Befehlen, die DOS-Befehlen angepasst wurden, um Umsteigern von DOS auf Linux den Umgang mit Disketten zu erleichtern. So können Sie bei den Mtools auch die unter Linux nicht gebräuchlichen Laufwerksbuchstaben verwenden. Das Diskettenlaufwerk muss auch nicht mit einem Linux-Befehl gemountet werden, um die Tools anzuwenden. In diesem Abschnitt werden die gebräuchlichsten Tools behandelt.
Der Befehl mcopy Mit diesem Befehl können Dateien und Verzeichnisse auf eine Diskette geschrieben werden. Er entspricht dem Linux-Befehl cp bzw. dem DOS-Befehl copy. Die Syntax des Befehls lautet: # mcopy [-option(en)] quelldatei zieldatei
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-a
Übertragung einer von DOS stammenden ASCII-Textdatei. Der Befehl übersetzt die Zeichen Carriage Return/Line Feed in Line Feed.
-b
Batch-Modus. Optimierung für große, rekursive Kopien, aber unsicher, falls während des Kopiervorgangs ein Absturz erfolgt.
-m
Bewahrt die Änderungszeit der kopierten Dateien auf
-n
Keine Bestätigung wird angefragt, wenn bereits vorhandene Linux-Dateien durch das Kopieren überschrieben werden.
-p
Bewahrt die Attribute der kopierten Dateien auf
-Q
Beim Kopieren von mehreren Dateien wird unterbrochen, sobald ein Kopiervorgang misslingt, zum Beispiel, wenn nicht genügend Platz auf dem Datenträger vorhanden ist.
-s
Rekursives Kopieren: Auch untergeordneteVerzeichnisse und deren Inhalte werden kopiert
-t
Übertragung einer Textdatei unter Berücksichtigung der Umwandlung der Zeichen Carriage Return/Line Feed nach Line Feed, wenn das Kopieren von DOS nach Linux erfolgt, und umgekehrt.
-T
Übertragung einer ASCII-Textdatei mit Zeichensatzkonvertierung. Im Unterschied zur Option -a werden auch PC-8-Zeichen in ISO-8859-1 übersetzt, so weit möglich.
-v
Ausführliche Ausgabe des Namens jeder kopierten Datei
Tab. 10.46: Die Optionen des Befehls mcopy
483
magnum
Mit Disketten arbeiten
Im folgenden Beispiel wird die Datei /root/test100 auf die DOS-formatierte Diskette kopiert: # mcopy -t /root/test100 a:
Der Befehl mdir Mit diesem Befehl kann der Inhalt einer Diskette oder eines Verzeichnisses auf der Diskette aufgelistet werden. Er entspricht dem Linux-Befehl ls bzw. dem DOSBefehl dir. Die Syntax des Befehls lautet: # mdir [-option(en)] verzeichnis(se)
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-/
Rekursive Ausgabe
-a
Auch versteckte Dateien werden ausgegeben.
-b
Übersichtliche Ausgabe. Jeder Verzeichnis- oder Dateiname wird in eine einzelne Zeile ausgegeben.
-f
Schnelle Ausgabe, ermittelt keinen freien Speicherplatz
Tab. 10.47: Die Optionen des Befehls mdir
Im folgenden Beispiel wird der Inhalt einer Diskette aufgelistet: # mdir a: Volume in drive A has no label Volume Serial Number is 042C-796B Directory for A:/ test100 1 file 161 bytes 1 457 152 bytes free
Der Befehl mdel Mit diesem Befehl können Dateien auf der Diskette gelöscht werden. Er entspricht dem Linux-Befehl rm bzw. dem DOS-Befehl del. Die Syntax des Befehls lautet: # mdel [-v] datei
Der Befehl kennt folgende Option: Option
Beschreibung
-v
Ausführlicher Modus
Tab. 10.48: Die Option des Befehls mdel
Im folgenden Beispiel wird die Datei test100 auf der DOS-formatierten Diskette gelöscht: # mdel -v a:/test100 Removing A:/test100
484
Kapitel 10 · Geräteverwaltung
Der Befehl mdeltree Mit diesem Befehl können DOS-Verzeichnisse gelöscht werden. Er entspricht dem Linux-Befehl rm -r bzw. dem DOS-Befehl del. Die Syntax des Befehls lautet: # mdeltreee [-v] verzeichnis
Der Befehl kennt folgende Option: Option
Beschreibung
-v
Ausführlicher Modus
Tab. 10.49: Die Option des Befehls mdeltree
Im folgenden Beispiel wird das Verzeichnis projekt100 auf einer DOS-formatierten Diskette gelöscht: # mdeltree -v a:/projekt100 Removing A:/projekt100
Der Befehl mformat Mit diesem Befehl kann eine Diskette mit dem FAT-Dateisystem (nach DOS-/Windows-Standard) formatiert werden. Die Syntax des Befehls lautet: # mformat [-option(en)] laufwerk
Die wichtigsten Optionen des Befehls lauten: Option
Beschreibung
-1
Formatiert eine einzige Seite (single-sided)
-2
Mit dieser Option können die Sektoren größer angelegt werden (2m-Format)
-4
Formatiert eine 360 Kbyte double-sided Diskette
-8
Formatiert eine Diskette mit 8 Sektoren pro Spur
-f
Definiert die Größe des DOS-Dateisystems, das formatiert wird. 1440 bedeutet zum Beispiel 1.440 Kbyte, double-sided, 18 Sektoren pro Spur, 80 Zylinder.
-F
Formatiert die Partition mit FAT32
-h
Die Anzahl der Köpfe
-L
Definiert die Länge des FAT-Dateisystems
-n
Definiert die Anzahl der Sektoren pro Spur
-S
Gibt den Größencode an
-t
Definiert die Anzahl von Spuren
-v
Definiert das Volume Label, das aus bis zu 11 Zeichen bestehen kann
-x
Formatiert die Diskette im XDF-Format
Tab. 10.50: Die Optionen des Befehls mformat
485
Monitor und Grafikkarte einrichten
magnum
Im folgenden Beispiel wird eine Diskette mit FAT32 formatiert: # mformat -F a:
Der Befehl mmd Mit diesem Befehl können DOS-Verzeichnisse erstellt werden. Er entspricht dem Linux-Befehl mkdir bzw. dem DOS-Befehl md. Die Syntax des Befehls lautet: # mmd verzeichnis
Im folgenden Beispiel wird das Verzeichnis projekt100 auf einer DOS-formatierten Diskette erstellt: # mmd a:/projekt100
Der Befehl rmd Mit diesem Befehl können DOS-Verzeichnisse gelöscht werden. Er entspricht dem Linux-Befehl rmdir bzw. dem DOS-Befehl rd. Die Syntax des Befehls lautet: # rmd [-v] verzeichnis
Der Befehl kennt folgende Option: Option
Beschreibung
-v
Ausführlicher Modus
Tab. 10.51: Die Option des Befehls mrd
Im folgenden Beispiel wird das Verzeichnis projekt100 auf einer DOS-formatierten Diskette gelöscht: # rmd -v a:/projekt100 Removing A:/projekt100
10.7 Monitor und Grafikkarte einrichten Dieser Abschnitt zeigt Ihnen, wie Sie Monitor und Grafikkarte mit Hilfe des Befehls xf86config oder über die grafische Oberfläche mit SAX einrichten können. SAX kann auch verwendet werden, wenn Sie noch keine grafische Oberfläche installiert haben.
10.7.1
Der Befehl xf86config
Der Befehl xf86config bietet eine Möglichkeit, um die Maus, die Tastatur, den Monitor und die Grafikkarte zu konfigurieren. Dieser Befehl steht unter Fedora Core Linux nicht zur Verfügung. Sie können alternativ X verwenden. Die Möglichkeiten von X werden ausführlich in den Man Pages beschrieben, siehe man X und siehe man Xserver. Der Befehl wird wie folgt aufgerufen: # /usr/X11/bin/xf86config
486
Kapitel 10 · Geräteverwaltung
Die Konfigurationsdaten werden in die Datei /etc/X11/XF86Config eingetragen. Normalerweise werden die Grafikkarte und der Monitor schon bei der Installation erkannt und korrekt konfiguriert. Sollte dies fehlschlagen, können Sie alternativ zum Befehl xf86config bei SUSE Linux das Programm SAX verwenden, das eine grafische Konfiguration durchführt. Alternativ können auch die Befehle xf86cfg oder XFree86 verwendet werden. Der Befehl läuft in mehreren Schritten ab und Sie sollten sich vor dem Starten die Daten zu Ihrer Maus, Ihrer Tastatur, Ihrer Grafikkarte und Ihrem Monitor zurechtlegen. Nach den Fragen zur Maus und Tastatur werden die Spezifikationen zum Monitor abgefragt. Sie erhalten folgende Information: The two critical parameters are the vertical refresh rate, which is the rate at which the whole screen is refreshed, and most importantly the horizontal sync rate, which is the rate at which scanlines are displayed.
Diese Meldung weist Sie außerdem darauf hin, dass Sie im Zweifelsfall Einblick in das Handbuch Ihres Monitors nehmen sollen. Sie können auch die MonitorDatenbank /usr/X11R6/lib/X11/doc/Monitors einsehen, ob Ihr Monitor dort überhaupt vorhanden ist. Zuerst müssen Sie den horizontalen Synchronisationsbereich Ihres Monitors festlegen. Dabei kann entweder ein vordefinierter Bereich ausgewählt werden oder Sie definieren einen speziellen Bereich. Sie werden darauf hingewiesen, dass Sie auf keinen Fall einen Monitortyp auswählen, dessen horizontaler Synchronisationsbereich außerhalb der Möglichkeiten des Bildschirms liegt. Das gilt aber nur für ältere Monitore – im Zweifelsfall können Sie aber eine »konservativere« Einstellung wählen. Eine Liste wie die folgende wird angezeigt: hsync in kHz; monitor type with characteristic modes 1 31.5; Standard VGA, 640x480 @ 60 Hz 2 31.5 - 35.1; Super VGA, 800x600 @ 56 Hz 3 31.5, 35.5; 8514 Compatible, 1024x768 @ 87 Hz interlaced (no 800x600) 4 31.5, 35.15, 35.5; Super VGA, 1024x768 @ 87 Hz interlaced, 800x600 @ 56 Hz 5 31.5 - 37.9; Extended Super VGA, 800x600 @ 60 Hz, 640x480 @ 72 Hz 6 31.5 - 48.5; Non-Interlaced SVGA, 1024x768 @ 60 Hz, 800x600 @ 72 Hz 7 31.5 - 57.0; High Frequency SVGA, 1024x768 @ 70 Hz 8 31.5 - 64.3; Monitor that can do 1280x1024 @ 60 Hz 9 31.5 - 79.0; Monitor that can do 1280x1024 @ 74 Hz 10 31.5 - 82.0; Monitor that can do 1280x1024 @ 76 Hz 11 Enter your own horizontal sync range
Anschließend müssen Sie den vertikalen Synchronisationsbereich Ihres Monitors festlegen. Dabei kann wiederum entweder ein vordefinierter Bereich ausgewählt werden oder Sie definieren einen speziellen Bereich.
487
Monitor und Grafikkarte einrichten
magnum
For interlaced modes, the number that counts is the high one (e.g. 87 Hz rather than 43 Hz). 1 50-70 2 50-90 3 50-100 4 40-150 5 Enter your own vertical sync range
Anschließend werden Sie aufgefordert, einen Hersteller- oder Modellnamen als identifizierende Bezeichnung einzugeben. Im nächsten Schritt werden die spezifischen Einstellungen der Grafikkarte konfiguriert, die aus einer Datenbank mit Grafikkartendefinitionen ausgewählt werden können. Da Karten desselben Modells Abweichungen aufweisen können, zum Beispiel in Bezug auf den Taktgeber, werden Sie nach Ihrer Auswahl nach weiteren Kartenkomponenten gefragt. Sie sollten auf keinen Fall eine Karte aus der Datenbank wählen, die der Ihren ähnelt, wenn Sie nicht die exakte Kartenbezeichnung in der Datenbank finden: Do you want to look at the card database? 0 * Generic VESA compatible 1 * Generic VGA compatible 2 * Unsupported VGA compatible 3 ** 3DLabs, TI (generic) [glint] 4 ** 3Dfx (generic) [tdfx] 5 ** ATI (generic) [ati] 6 ** ATI Radeon (generic) [radeon] 7 ** ATI Rage 128 based (generic) [r128] 8 ** Alliance Pro Motion (generic) [apm] 9 ** Ark Logic (generic) [ark] 10 ** Chips and Technologies (generic) [chips] 11 ** Cirrus Logic (generic) [cirrus] 12 ** Cyrix MediaGX (generic) [cyrix] 13 ** DEC TGA (generic) [tga] 14 ** Intel i740 (generic) [i740] 15 ** Intel i810 (generic) [i810] 16 ** Linux framebuffer (generic) [fbdev] 17 ** Matrox Graphics (generic) [mga] Enter a number to choose the corresponding card definition. Press enter for the next page, q to continue configuration. Your selected card definition: Identifier: ** S3 Savage (generic) [savage] Chipset: Driver: savage
Nach dieser Auswahl müssen Sie weitere Informationen zu Ihrer Grafikkarte bereitstellen, und zwar zu deren Speicherausstattung: How 1 2 3 4 5 6 7 8 9
488
much video memory do you have on your video card: 256K 512K 1024K 2048K 4096K 8192K 16384K 32768K 65536K
Kapitel 10 · Geräteverwaltung
10 131072K 11 262144K 12 Other Enter your choice:
Danach müssen Sie einen Hersteller- oder Modellnamen als identifizierende Zeichenkette für die Grafikkarte eingeben. Im nächsten Schritt muss die Auflösung festgelegt werden. Hier haben Sie die Möglichkeit, die vordefinierten Modi zu übernehmen oder zu ändern: Currently it is set to: "1280x1024" "1024x768" "800x600" "640x480" for 8-bit "1024x768" "800x600" "640x480" for 16-bit "800x600" "640x480" for 24-bit Modes that cannot be supported due to monitor or clock constraints will be automatically skipped by the server. 1 Change the modes for 8-bit (256 colors) 2 Change the modes for 16-bit (32K/64K colors) 3 Change the modes for 24-bit (24-bit color) 4 The modes are OK, continue. Enter your choice:
Nach dieser Aktion können Sie die Auflösung aus der nachfolgenden Liste auswählen: Select modes from the following list: 1 "640x400" 2 "640x480" 3 "800x600" 4 "1024x768" 5 "1280x1024" 6 "320x200" 7 "320x240" 8 "400x300" 9 "1152x864" a "1600x1200" b "1800x1400" c "512x384" d "1400x1050" Please type the digits corresponding to the modes that you want to select. For example, 432 selects "1024x768" "800x600" "640x480", with a default mode of 1024x768.
Anschließend folgt die Information, dass Sie einen virtuellen Desktop so einrichten können, dass der Bildschirmbereich über die physikalischen Abmessungen hinausgeht. Sie müssen sich mit y oder n gegen oder für diesen vergrößerten virtuellen Desktop entscheiden: Please answer the following question with either 'y' or 'n'. Do you want a virtual screen that is larger than the physical screen?
Danach wählen Sie, welche Farbtiefe Sie standardmäßig verwenden möchten: Please specify which color depth you want to use by default: 1 1 bit (monochrome) 2 4 bits (16 colors) 3 8 bits (256 colors) 4 16 bits (65536 colors) 5 24 bits (16 million colors) Enter a number to choose the default depth.
489
Monitor und Grafikkarte einrichten
magnum
Schließlich werden Sie informiert, dass die Konfigurationsdatei XF86Config nun geschrieben wird. Sie sollten unbedingt verhindern, dass Sie mit dem Befehl xf86config diese Datei versehentlich abändern. Shall I write it to /etc/X11/XF86Config?
Nachdem die Datei abgespeichert wurde, sollten Sie die grafische Oberfläche mit dem Befehl startx starten können. Sollte es beim Starten Probleme geben, können Sie mit der Tastenkombination (Strg)+(Alt)+(+)oder mit (Strg)+(Alt)+(-) die Grafikauflösung erhöhen oder vermindern. Wenn dies auch nicht möglich ist, können Sie die grafische Oberfläche mit der Tastenkombination (Strg)+(Alt)+(æ__) abbrechen und den Befehl xf86config erneut durchführen. Unter Debian GNU/Linux 3.1 können Sie den Befehl dpkg-reconfigure xserverxfree86 verwenden. Die neue Version mit dem Codenamen etch bzw. die Version »unstable« mit dem Codenamen sid verwendet den Befehl dpkg-reconfigure xserver-xorg.
10.7.2
Die Datei /etc/X11/XF86Config
Diese Datei ist die wichtigste Konfigurationsdatei für den X-Server. In der Regel sollte sie mit Hilfe von grafischen Tools oder Befehlen bearbeitet und nur in äußersten Notfällen manuell editiert werden: # # # # # #
more /etc/X11/XF86Config SaX generated XFree86 config file Created on: 2003-04-13. Version: 4.3 Automatically generated by [ISaX] (4.3) PLEASE DO NOT EDIT THIS FILE!
Section "Files" FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/local" FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled" ...
Seit XFree86 Version 4 ist die Namensgebung leider nicht bei allen Distributionen einheitlich; manchmal nennt sich die Datei nun auch XF86Config-4. Die Datei ist in einzelne Sektionen aufgeteilt: Sektion
Beschreibung
Files
Diese Sektion enthält Variablen mit Pfadangaben, in denen der Server nach Dateien sucht.
Modules
Diese Sektion enthält Module, die für den X-Server dynamisch nachladbare Erweiterungen sind. Damit können verschiedene Geräte unterstützt werden.
Tab. 10.52: Sektionen der Konfigurationsdatei XF86Config
490
Kapitel 10 · Geräteverwaltung
Sektion
Beschreibung
ServerFlags
Diese Sektion enthält verschiedene Optionen für die Arbeit des X-Servers, zum Beispiel ist es hier möglich, die Tastenkombination (Strg)+(Alt)+(æ__) zum Beenden des X-Servers zu deaktivieren.
Keyboard
Diese Sektion steuert in erster Linie die Tastaturbelegung.
Pointer
Diese Sektion enthält Informationen über die Maus, zum Beispiel die Anzahl der unterstützten Tasten usw.
Monitor
Diese Sektion dient der Einstellung des Bildschirms.
Device
Diese Sektion konfiguriert eine Grafikkarte. Jede Grafikkarte belegt eine eigene Sektion Device.
Screen
Diese Sektion ordnet Grafikkarte, Monitor und X-Server den unterstützten Auflösungen zu.
Tab. 10.52: Sektionen der Konfigurationsdatei XF86Config (Forts.)
10.7.3
Der Befehl vidmode
Der Befehl vidmode kann dazu verwendet werden, den Videomodus in einem bootfähigen Image zu definieren. Im Gegensatz zum zuvor vorgestellten Befehl xf86config nehmen Sie also keine Einstellungen in der Datei XF86Config vor, sondern setzen Kernel-Parameter. Ohne Argumente erfolgt eine Ausgabe des aktuellen Modus, der ein 1 Byte großer Wert ist und sich im Kernel an Position 506 befindet. Auch diese Position kann verändert werden. Wird sie weggelassen an der Befehlszeile, wird der Standard 506 verwendet. Die Syntax des Befehls lautet: # vidmode [option] image [modus [position]]
Der Befehl kennt folgende Modi: Modus
Beschreibung
-3
Der Benutzer wird nach dem Modus gefragt.
-2
Erweiteter VGA-Modus
-1
Normaler VGA-Modus
n bzw. 0 - 3
Entspricht einer Eingabe von n am Eingabeprompt beim Booten
Tab. 10.53: Die Optionen des Befehls vidmode
Der Befehl rdev -v ist ein Synonym für vidmode. Der Befehl ist nicht notwendig, wenn der Bootmanager LILO verwendet wird, da in diesem Fall der Videomodus auch während des Systemstarts an der Eingabeaufforderung von LILO eingegeben werden kann. Im nachfolgenden Beispiel wird der Modus auf -2 verändert und anschließend ausgegeben: # vidmode /boot/vmlinuz -2 # vidmode /boot/vmlinuz 65534
491
Monitor und Grafikkarte einrichten
10.7.4
magnum
Monitor und Grafikkarte mit YaST und SaX2 einrichten
Um den Monitor und die Grafikkarte einzurichten, können Sie unter SUSE Linux auch YAST verwenden. Wählen Sie dazu die Menüfolge HARDWARE - GRAFIKKARTE UND MONITOR. Im ersten Fenster können Sie entscheiden, ob Sie mit der grafischen Oberfläche oder nur im Textmodus arbeiten möchten:
Bild 10.18: Bildschirmeinstellungen mit YAST
Wenn Sie die Option GRAFISCHE OBERFLÄCHE aktiviert lassen, können Sie mit der Schaltfläche ÄNDERN in das Programm SAX2 verzweigen und dort Einstellungen zu folgenden Punkten durchführen:
쮿
Anzeige (Monitor und Grafikkarte)
쮿
Multihead (Anschluss mehrerer Bildschirme)
쮿
Eingabegeräte (Maus, Tastatur, Grafiktablett, Touchscreen)
쮿
Zugriffskontrolle (VNC und AccessX)
Wenn Sie keine grafische Oberfläche installiert haben oder sich Ihre grafische Oberfläche aufgrund von Problemen mit Grafikkarte oder Monitor nicht starten lässt, können Sie SAX2 auch direkt an der Befehlszeile als root mit sax2 aufrufen.
492
Kapitel 10 · Geräteverwaltung
Die Auswahl ANZEIGE ist wieder in mehrere Punkte unterteilt:
Bild 10.19: Anzeige mit SaX2 einstellen
Wenn Sie auf MONITOR klicken, wird die aktuelle Monitorkonfiguration angezeigt:
Bild 10.20: Aktuelle Monitorkonfiguration mit SaX2
493
Monitor und Grafikkarte einrichten
magnum
Die Konfiguration kann über die Schaltfläche KONFIGURATION ÄNDERN verändert werden:
Bild 10.21: Aktuelle Monitorkonfiguration mit SaX2 ändern
Klicken Sie im nächsten Fenster auf EIGENSCHAFTEN, um die Monitoreinstellungen zu verändern. Im ersten Registerblatt können Sie den Monitortyp und die Auflösung auswählen:
Bild 10.22: Monitortyp mit SaX2 ändern
494
Kapitel 10 · Geräteverwaltung
Wenn Sie Ihre Hardware nicht kennen, können Sie einfach VESA GENERISCH verwenden. Im Registerblatt FREQUENZEN können Sie die Frequenzbereiche Ihres Monitors einstellen. Beachten Sie dabei den Warnhinweis:
Bild 10.23: Frequenzbereich mit SaX2 ändern
Im letzten Registerblatt können Sie zum Beispiel die Bildschirmgröße und DPMS (Display Powermanagement Signaling), einen Standard für Grafikkarten und Monitore zur Aktivierung des Powermanagements, einstellen:
Bild 10.24: Bildschirmgröße in SaX2 einstellen
495
Monitor und Grafikkarte einrichten
magnum
Wenn Sie auf OK und anschließend auf FERTIG klicken, kommen Sie ins Auswahlmenü zurück. Die Auswahl der Grafikkarte zeigt die aktuelle Konfiguration an:
Bild 10.25: Aktuelle Grafikkartenkonfiguration
Diese kann wieder über die Schaltfläche KONFIGURATION ÄNDERN und anschließend EIGENSCHAFTEN verändert werden. Sie können auf der linken Seite den Hersteller und auf der rechten Seite den Typ Ihrer Grafikkarte auswählen:
Bild 10.26: Grafikkartenkonfiguration mit SaX2 ändern
496
Kapitel 10 · Geräteverwaltung
Im Registerblatt ERWEITERT können Sie noch einige Feineinstellungen zur Grafikkarte festlegen, zum Beispiel die Bildschirmrotation:
Bild 10.27: Grafikkarte mit SaX2 einstellen
Wenn Sie auf OK und anschließend auf FERTIG klicken, kommen Sie ins Auswahlmenü zurück. Eine weitere Einstellungsmöglichkeit betrifft die Farben und Auflösung:
Bild 10.28: Aktuelle Oberflächenkonfiguration mit SaX2 anzeigen
497
magnum
Monitor und Grafikkarte einrichten
Klicken Sie auf die Schaltfläche KONFIGURATION EIGENSCHAFTEN, um die Farbtiefe zu ändern:
ÄNDERN
und anschließend auf
Bild 10.29: Farbtiefe mit SaX2 ändern
Die Auflösung können Sie in der nächsten Registerkarte einstellen:
Bild 10.30: Auflösung mit SaX2 ändern
498
Kapitel 10 · Geräteverwaltung
In der Registerkarte ERWEITERT können Sie eine benutzerdefinierte Auflösung einrichten:
Bild 10.31: Benutzerdefinierte Auflösung mit SaX2 einstellen
Klicken Sie auf OK und anschließend auf FERTIG, um ins Auswahlmenü zurückzukehren. Die nächste Einstellung ist die virtuelle Auflösung:
Bild 10.32: Virtuelle Auflösung mit SaX2 einstellen
499
Monitor und Grafikkarte einrichten
magnum
Der X-Server kennt zwei Auflösungsarten: die physische Auflösung, die tatsächlich vom Bildschirm dargestellt werden kann, und die virtuelle Auflösung, bei der nur ein Ausschnitt in der Größe der gewählten physischen Auflösung angezeigt wird. Um den gesamten Bildschirm zu sehen, kann man mit der Maus über den Bildschirmrand hinausnavigieren, wobei der Ausschnitt automatisch in die entsprechende Richtung verschoben wird. Im Hauptmenü können Sie als Nächstes die 3D-Beschleunigung konfigurieren, wenn Sie eine entsprechende Grafikkarte besitzen.
Bild 10.33: 3D-Beschleunigung mit SaX3 aktivieren
Der letzte Punkt des Anzeigemenüs betrifft die Einstellung von Bildlage und -größe:
Bild 10.34: Geometrieparameter mit SaX2 einstellen
500
Kapitel 10 · Geräteverwaltung
Wenn Sie auf KONFIGURATION ÄNDERN klicken, erscheint das Unterprogramm XFINE2, mit dem Sie die Bildschirmgeometrie ändern können. Klicken Sie auf die entsprechenden Pfeile, um Ihre Bildschirmanzeige zu zentrieren:
Bild 10.35: Bildschirmgeometrie ändern
In der zweiten Registerkarte können Sie die Größe ändern. Verwenden Sie dazu wieder den Pfeil in die gewünschte Richtung, um die Bildschirmdarstellung zu vergrößern oder zu verkleinern:
Bild 10.36: Bildschirmgröße ändern
Der zweite Teil von SaX2 betrifft Multihead-Einstellungen. Dieses Menü können Sie verwenden, wenn Sie zwei oder mehr Bildschirme an Ihr Linux-System anschließen:
501
Monitor und Grafikkarte einrichten
magnum
Bild 10.37: Multihead mit SaX2 konfigurieren
Sie sollten sehr vorsichtig mit den Monitor- und Grafikkarteneinstellungen mit SaX2 umgehen. Bei falschen Einstellungen kann die grafische Oberfläche nicht mehr gestartet werden. In diesem Fall können Sie als root an der Befehlszeile mit dem Befehl init 3 in den Runlevel 3 verzweigen und anschließend den Befehl sax2 starten. In der Regel bringt SAX2 die Einstellungen selbständig wieder in Ordnung. Alternativ können Sie die korrekten Werte auswählen. Der dritte Abschnitt von SAX2 wird in 10.9.3 besprochen. Der letzte Abschnitt ZUGRIFFSKONTROLLE von SaX2 bietet die Möglichkeit, die VNC-Konfiguration oder AccessX-Konfiguration einzustellen:
Bild 10.38: Zugriffskontrolle von SaX2
502
Kapitel 10 · Geräteverwaltung
Alternativ können Sie Maus, Tastatur und Joystick direkt in YAST im Menü HARDWARE mit den Optionen MAUSMODELL WÄHLEN, TASTATURBELEGUNG AUSWÄHLEN und JOYSTICK konfigurieren. Der erste Menüpunkt enthält die VNC-Konfiguration. VNC bedeutet Virtual Network Computing und ermöglicht es Ihnen, einen PC fernzusteuern, zu überwachen und zu warten:
Bild 10.39: VNC-Konfiguration mit SaX2 aktivieren
Die zweite Option betrifft die AccessX-Konfiguration. Wenn Sie Ihren Rechner ohne Maus bedienen möchten und AccessX aktivieren, ist es möglich, den Mauszeiger auf Ihrem Bildschirm mit dem Nummerntastenblock Ihrer Tastatur zu steuern.
Bild 10.40: AccessX-Konfiguration aktivieren
503
magnum
Terminal einstellen
Die Taste (÷) aktiviert zum Beispiel die linke Maustaste, (×) die mittlere Maustaste und (–) die rechte Maustaste. Weitere Informationen dazu finden Sie im KDEHardware-Hilfezentrum. Wenn Sie SaX2 beenden, erhalten Sie folgende Meldung:
Bild 10.41: SaX2 beenden
Sie können die Konfiguration zuerst testen, bevor Sie sie speichern. Sollte diese nicht wie erwartet funktionieren, dann verwenden Sie ABBRECHEN, um die Änderungen zu verwerfen.
10.8 Terminal einstellen Die Befehle dieses Abschnitts werden in der Regel nur noch benötigt, wenn Sie sich über eine einfache Terminalsitzung remote auf einem Linux- oder Unix-Rechner anmelden und im Terminalfenster bestimmte Tasten, wie zum Beispiel (æ__), nicht richtig funktionieren.
10.8.1
Der Befehl tty
Dieser Befehl gibt den Terminal- bzw. Leitungsnamen des angeschlossenen Terminals aus. $ tty /dev/pts/3
10.8.2
Der Befehl stty
Dieser Befehl kann Terminaleinstellungen anzeigen und ändern. Es kann zum Beispiel vorkommen, dass in einer Terminalsitzung die Taste (æ__) nicht richtig funktioniert – dies lässt sich mit dem Befehl stty beheben. Die Syntax des Befehls lautet: # stty [-option(en)]
504
Kapitel 10 · Geräteverwaltung
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-a oder --all
Gibt alle aktuellen Einstellungen des Terminals in menschlich lesbarer Form aus
-g oder --save Gibt alle aktuellen Einstellungen in einer von stty lesbaren Form aus -F gerät oder --file
Öffnet und verwendet das angegebene Gerät anstelle der Standardeingabe
Tab. 10.54: Die Optionen des Befehls stty
Im folgenden Beispiel werden alle Terminaleinstellungen ausgegeben: # stty -a speed 9600 baud; rows 25; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Im nächsten Beispiel wird dem Löschen von Zeichen die Taste (æ__) zugewiesen. Beachten Sie, dass das Zeichen »^« durch das gleichzeitige Drücken auf die Taste (Strg) entsteht: # stty erase ^H
Denselben Effekt erreichen Sie auch durch diese Eingabe: # stty erase ^?
10.9 Tastatur einrichten In diesem Abschnitt lernen Sie, wie Sie mit Befehlen oder der grafischen Oberfläche die Tastatur einrichten können. Ein weiterer Befehl, xf86config, wurde bereits in Abschnitt 10.7.1 vorgestellt.
10.9.1
Der Befehl kbd_mode
Mit diesem Befehl kann der aktuelle Tastaturmodus ausgegeben oder eingestellt werden. Die Syntax des Befehls lautet: # kbd_mode [-option]
505
magnum
Tastatur einrichten
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-a
Setzt den Modus auf XLATE, das entspricht dem ASCII-Modus
-k
Setzt den Modus auf MEDIUMRAW, das entspricht dem Tastaturcode-Modus
-s
Setzt den Modus auf RAW, das entspricht dem Scancode-Modus
-u
Setzt den Modus auf UNICODE, das entspricht dem UTF-8-Modus
Tab. 10.55: Die Optionen des Befehls kbd_mode
Im folgenden Beispiel wird der aktuelle Tastaturmodus zuerst ausgegeben und dann neu eingestellt: # kbd_mode The keyboard is in the default (ASCII) mode # kbd_mode -u # kbd_mode The keyboard is in Unicode (UTF-8) mode
Sie sollten diesen Befehl mit äußerster Sorgfalt anwenden, denn er kann unter einem X-System das System unbenutzbar machen! Wenn Sie eine grafische Oberfläche wie zum Beispiel KDE nutzen, sollten Sie diese Einstellungen besser dort vornehmen, das heißt zum Beispiel im KDE-Kontrollzentrum.
10.9.2
Der Befehl kbdrate
Dieser Befehl stellt die Wiederholungsrate und Verzögerungszeit der Tastatur ein. Die Verzögerungszeit ist die Zeitspanne, die auf eine Taste gedrückt werden muss, bevor sie wiederholt wird. Verwenden Sie den Befehl ohne Optionen, dann wird die Wiederholungsrate auf 10,9 Zeichen pro Sekunden und die Verzögerungszeit auf 250 Millisekunden eingestellt. Die Syntax des Befehls lautet: # kbdrate [-option(en)]
Der Befehl kennt verschiedene Optionen: Option
Beschreibung
-d zeit
Ändert die Verzögerungszeit auf die in Millisekunden angegebene Zeit. Der zulässige Wert für INTEL-Systeme liegt zwischen 250 und 1000 Millisekunden, in Abstufungen von 250 Millisekunden.
-r rate
Ändert die Wiederholungsrate auf die angegebene Zeitspanne. Bei INTEL-Systemen liegt der zulässige Wert zwischen 2.0 und 30.0 Zeichen pro Sekunde. Es sind nur bestimmte Werte möglich, daher wählt der Befehl den nächstmöglichen Wert in Bezug auf den Eingabewert. Die vorgegebenen Werte sind: 2.0, 2.1, 2.3, 2.5, 2.7, 3.0, 3.3, 3.7, 4.0, 4.3, 4.6, 5.0, 5.5, 6.0, 6.7, 7.5, 8.0, 8.6, 9.2, 10.0, 10.9, 12.0, 13.3, 15.0, 16.0, 17.1, 18.5, 20.0, 21.8, 24.0, 26.7, 30.0 in Zeichen pro Sekunde.
-s
Stiller Modus; es werden keine Meldungen ausgegeben.
Tab. 10.56: Die Optionen des Befehls kbdrate
506
Kapitel 10 · Geräteverwaltung
Im folgenden Beispiel werden die Verzögerungszeit auf 15 Zeichen pro Sekunden und die Wiederholrate auf 510 Millisekunden eingestellt. Da nur die Werte 250, 500, 750 und 1000 Millisekunden gültige Werte sind, wird 510 automatisch auf den nächsthöheren Wert 750 Millisekunden gesetzt: # kbdrate -r 15 -d 510 Typematic Rate set to 15.0 cps (delay = 750 ms)
Im nächsten Beispiel werden die Verzögerungszeit und die Wiederholrate auf die Standardwerte gesetzt: # kbdrate Typematic Rate set to 10.9 cps (delay = 250 ms)
10.9.3
Maus und Tastatur mit YaST und SaX2 einrichten
Um Maus und Tastatur einzurichten, können Sie unter SUSE Linux auch YAST verwenden. Wählen Sie dazu die Menüfolge HARDWARE - GRAFIKKARTE UND MONITOR. Der dritte Abschnitt bietet Ihnen die Möglichkeit, verschiedene Eingabegeräte zu konfigurieren, zum Beispiel die Maus:
Bild 10.42: Eingabegeräte mit SaX2 konfigurieren
507
Tastatur einrichten
Zuerst wird Ihnen die aktuelle Mauskonfiguration angezeigt:
Bild 10.43: Mauskonfiguration mit SaX2 anzeigen
Über KONFIGURATION ÄNDERN kann diese verändert werden:
Bild 10.44: Mauskonfiguration mit SaX2 ändern
508
magnum
Kapitel 10 · Geräteverwaltung
Wählen Sie EIGENSCHAFTEN, um den Maustyp oder Anschluss zu ändern. In der ersten Registerkarte können Sie auf der linken Seite den Hersteller und anschließend rechts den Produkttyp auswählen:
Bild 10.45: Hersteller und Maustyp mit SaX2 auswählen
In der Registerkarte ANSCHLUSS können Sie den Gerätenamen auswählen, an dem die Maus angeschlossen ist:
Bild 10.46: Mausanschluss mit SaX2 auswählen
509
Tastatur einrichten
magnum
In der letzten Registerkarte können Sie die Radunterstützung aktivieren:
Bild 10.47: Radunterstützung der Maus aktivieren
Klicken Sie auf OK und anschließend auf FERTIG, um ins Auswahlmenü zurückzukehren. Die nächste Einstellung betrifft die Tastatur:
Bild 10.48: Aktuelle Tastatureinstellung mit SaX2 anzeigen
510
Kapitel 10 · Geräteverwaltung
Über die Schaltfläche KONFIGURATION ÄNDERN können Sie die Tastatureinstellungen bearbeiten, zum Beispiel zusätzliche Tastaturbelegungen einstellen oder das Layout ändern:
Bild 10.49: Tastatureinstellungen mit SaX2 bearbeiten
Über die Schaltfläche OPTIONEN kommen Sie in ein Untermenü, in dem Sie Tastenkombinationen bestimmten Aktionen zuordnen können:
Bild 10.50: Tastenzuordnungen festlegen
511
Systemkonfiguration mit SUSE Linux
magnum
10.10 Systemkonfiguration mit SUSE Linux SUSE Linux bietet ein spezielles Programm, SuSEconfig, an, um das System zu konfigurieren. Dazu werden Variablen verwendet, die in den verschiedenen Dateien des Verzeichnisses /etc/sysconfig gesetzt wurden. Das Programm verwendet spezielle Skripte in /sbin/conf.d, um die verschiedenen Subsysteme zu konfigurieren. Die Variablen in /etc/sysconfig/postfix werden zum Beispiel vom Skript /sbin/conf.d/ SuSEconfig.postfix ausgewertet. SuSEconfig ist ein Backend zu YAST und aktiviert die von YAST durchgeführten Änderungen. Die Syntax lautet: # SuSEconfig [-optionen(en)]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-module modul
Startet SuSEconfig mit dem Konfigurationsmodul für ein bestimmtes Subsystem anstatt für alle Module
-nomodule
Führt die Subsystem-spezifischen Module nicht aus
-nonewpackage
Überspringt Konfigurationsmodule, die nur laufen, wenn ein Paket neu installiert wurde
-quick
Baut Kernel-Modulabhängigkeiten nicht neu auf. Diese Option wird auch von der Option -module verwendet.
-verbose
Ausführlicher Modus
Tab. 10.57: Die Optionen des Befehls SuSEconfig
Der Befehl SuSEconfig hat folgende Ausgabe: # SuSEconfig Starting SuSEconfig, the SuSE Configuration Tool... Running in full featured mode. Reading /etc/sysconfig and updating the system... Executing /sbin/conf.d/SuSEconfig.apache2... Looking for multi-processing modules (MPM)... 1 MPM installed (prefork) APACHE_MPM is unset (/etc/sysconfig/apache2), picked "prefork" create symbolic link `/usr/sbin/httpd2' to `/usr/sbin/httpd2-prefork' create symbolic link `/usr/share/apache2/build/config_vars.mk' to `config_vars.mkprefork' Executing /sbin/conf.d/SuSEconfig.automake... Executing /sbin/conf.d/SuSEconfig.fonts... Creating cache files for Xft ...................... Creating fonts.{scale,dir} files ........... Executing /sbin/conf.d/SuSEconfig.gnome-print... Executing /sbin/conf.d/SuSEconfig.gnome-vfs2... Executing /sbin/conf.d/SuSEconfig.groff... ... Executing /sbin/conf.d/SuSEconfig.xdm... Executing /sbin/conf.d/SuSEconfig.xpdf... Executing /sbin/conf.d/SuSEconfig.zmessages... Finished.
512
Kapitel 10 · Geräteverwaltung
10.11 Systemkonfiguration mit Debian GNU/Linux Auch Debian GNU/Linux besitzt ein spezielles Programm, base-config, um das System zu konfigurieren. Es läuft normalerweise nach der Installation, kann aber jederzeit später nochmals gestartet werden. Die Syntax lautet: # base-config
Es beinhaltet die Konfiguration der Grafikkarte, des Window-Managers, von ISDN, der Zeitzone und der Locale-Einstellungen, des Webbrowsers Mozillas, des Samba-Servers, des X-Servers und des News-Servers über das Programm Leafnode.
513
11 Drucker verwalten »Ich will keine Zensur, weil ich nicht für Dummheiten verantwortlich sein will, die man drucken darf.« – Napoleon I. Bonaparte (Quelle: zu Fouché) Gerade im Bereich des Druckens hat sich unter Linux in den vergangenen Jahren sehr viel getan. Dank eines neuen Drucksystems, CUPS (Common Unix Printing System), ist es heute sehr viel einfacher, Drucker anzuschließen. In diesem Kapitel wird nicht nur CUPS ausführlich erläutert, sondern der Vollständigkeit halber auch kurz auf die älteren Drucksysteme eingegangen.
11.1 Drucksysteme unter Linux In einem Mehrbenutzersystem müssen Druckaufträge verschiedener Anwender zentral koordiniert werden. Zur Druckerverwaltung gehört nicht nur die Ansteuerung von Druckern, sondern auch das Aufbereiten der Druckaufträge und das Verwalten der Warteschlangen für jeden Drucker. Ein Druckverwaltungssystem besteht in der Regel aus folgenden Teilen:
쮿
Benutzerbefehle Befehle, um einen Druckauftrag zu starten, zu verfolgen und zu löschen.
쮿
Administrationsbefehle Befehle, um das Druckersystem zu verwalten, zum Beispiel Drucker einrichten, starten und anhalten.
쮿
Druckerdefinitionen Dateien mit Beschreibungen der verschiedenen Drucker, einschließlich Skripten, um die Druckausgabe für einen speziellen Druckertyp vorzubereiten.
쮿
Druckerwarteschlangen und Spoolverzeichnisse Warteschlangen, um Druckaufträge einzustellen, und Verzeichnisse, um die Druckdateien zwischenzulagern, bis der Drucker bereit ist.
쮿
Drucker-Daemons Serverprozesse, die Druckaufträge entgegennehmen, in die Spoolverzeichnisse einstellen und der Reihe nach aus der Warteschlange an den Drucker weiterleiten.
Die Druckerverwaltung kann wie in Bild 11.1 dargestellt werden. Bei der Druckerverwaltung gibt es unter Linux verschiedene Ansätze. Zwei der am weitesten verbreiteten Drucksysteme haben sich aus der Unix-Historie heraus entwickelt:
쮿
Das BSD-Drucksystem oder Berkeley Line Printer Daemon-System (»lpd«)
쮿
Das System V-Drucksystem oder AT&T Line Printer-System
Diese Drucksysteme entstanden in den siebziger Jahren und wurden auf die damaligen Druckanforderungen ausgelegt, also für Zeilen- bzw. Nadeldrucker.
515
Drucksysteme unter Linux
magnum
Bild 11.1: Druckerverwaltung unter Linux
Zu diesen beiden Systemen kamen im Laufe der Zeit weitere Drucksysteme dazu, wie zum Beispiel LPRng, Palladin und PLP, wobei sich aber an den grundlegenden Funktionen relativ wenig geändert hat. Die System V-Lösung wurde unter Linux nicht verwendet, aber das BSD-Drucksystem gab es in zwei verschiedenen Implementierungen:
쮿
BSD-LPD Die klassische BSD-Druckerverwaltung, die von der University of Berkeley zunächst für BSD-Unix entwickelt wurde, wird auch oft als LPD, Berkeley LPR oder RPM lprold bezeichnet und war früher Standard unter Linux. Die Befehle dieser Druckerverwaltung wurden auch von anderen Drucksystemen übernommen.
쮿
LPRng LPRng (Line Printer next generation) ist eine vollständige Neuimplementierung des BSD-LPD-Drucksystems. Es bietet weitestgehende Kompatibilität und erweiterte Konfigurationsmöglichkeiten.
Die alten Drucksysteme erwiesen sich aufgrund der begrenzten Funktionalitäten in einigen Punkten als problematisch, worauf Unix-Hersteller eigene Erweiterungen in die Programme integrierten, was das Problem aber nicht grundsätzlich beseitigte. Seit dem Jahr 2000 wird immer häufiger eine weitere Drucksoftware mit der Bezeichnung CUPS (Common UNIX Printing System) in der Unix- und Linux-Welt eingesetzt. Sie basiert auf dem BSD-System und wird genau wie Linux unter der GPL (GNU General Public License) vertrieben, das heißt, sie ist frei verfügbar.
516
Kapitel 11 · Drucker verwalten
Unter den verschiedenen SUSE-Versionen werden standardmäßig folgende Drucksysteme verwendet:
쮿
seit Version 9.0: CUPS (alternativ LPRng)
쮿
Version 8.0: LPRng (alternativ CUPS)
쮿
Version 7.3: LPRng (alternativ CUPS)
쮿
Version 7.2: BSD-LPD (alternativ CUPS)
쮿
bis Version 7.1: BSD-LPD
11.2 BSD-LPD- und LPRng-Druckerverwaltung Die BSD-LPD-Druckerverwaltung weist folgende Funktionalitäten auf:
쮿
Jeder Drucker hat eine eigene lokale Warteschlange, die den Namen des Druckers trägt und über diesen gesteuert werden kann.
쮿
Die Druckerwarteschlangen und die Drucker können aktiviert und deaktiviert werden.
쮿
Die Drucker können mit Hilfe von Filtern gesteuert werden.
쮿
Der Druck-Daemon ist der Prozess lpd (line printer daemon).
쮿
Als Konfigurationsdatei wird die Datei /etc/printcap verwendet.
쮿
Mit der BSD-Druckerverwaltung kann über das Netzwerk gedruckt werden. Der Zugriff auf Remote-Drucker wird über die Datei /etc/hosts.lpd gesteuert.
Die Neuimplementierung LPRng hat folgende zusätzliche Leistungsmerkmale:
쮿
Aus mehreren Druckern können Druckerklassen gebildet werden.
쮿
Die Steuerung der Zugriffsrechte wird flexibler gehandhabt, die Zugriffsregelung auf Remote-Drucker erfolgt mit der Datei /etc/lpd.perms.
쮿
Es gibt eine weitere globale Konfigurationsdatei /etc/lpd.conf.
11.2.1
Der Daemon lpd
Dieser Daemon ist der »ältere« Druck-Daemon, der sich noch auf einigen LinuxDistributionen und vielen Unix-Systemen findet. Mit dem Run Control-Skript /etc/init.d/lpd lässt sich das Drucksystem anhalten und neu starten, wenn es Probleme mit dem Drucken gibt.
11.2.2
Die Konfigurationsdatei /etc/printcap
Ein Drucker der BSD-LPD-Druckerverwaltung wird in der Datei /etc/printcap eingetragen. Diese enthält die lokale oder Netzwerk-Druckerkonfiguration, die Definition von Protokolldateien usw., aber keine Informationen über die Druckerauflösung oder die Druckersprache (zum Beispiel Postscript). Sie hat folgende Syntax: druckername : xx=string : xx#nummer : xx : ... :
517
magnum
BSD-LPD- und LPRng-Druckerverwaltung
Eine Druckerdefinition beginnt mit dem Druckernamen, gefolgt von einzelnen Definitionsfeldern, die durch Doppelpunkte getrennt sind. Das erste Definitionsfeld enthält eine zweistellige Printcap-Variable (xx), von denen es drei verschiedene Typen gibt:
쮿
String: xx=string Der Variablen wird ein Text zugewiesen, in der Regel ein Dateipfad.
쮿
Integer: xx#nummer Der Variablen wird ein Integerwert zugewiesen.
쮿
Bool: xx Wenn die Variable xx in der Druckerbeschreibung vorhanden ist, hat sie den Wert TRUE, und wenn nicht, den Wert FALSE. FALSE kann auch in der Schreibweise xx@ angegeben werden.
Die Schreibweise xx=nummer hat übrigens weder eine Auswirkung noch erzeugt sie eine Fehlermeldung.
Eine Druckerdefinition passt in der Regel nicht in eine einzige Zeile. Daher wird sie durch einen Backslash (\) auf mehrere Zeilen umbrochen. Zu den wichtigsten Variablen von /etc/printcap gehören: Variable
Beispiel
Bedeutung
printer [|alias|...]
lp|hp1|HP1|HPLaser1:
Druckername, mehrere Namen werden durch »|« getrennt. Standarddrucker ist lp.
sd
sd=/var/spool/lpd/HPLaser1
Spoolverzeichnis, das Kopien der Druckaufträge enthält
lp
lp=/dev/lp0
Gerätename eines lokal angeschlossenen Druckers
if
if=/var/lpd/HPLaser1/filter
Input-Filter, um eine zu druckende Datei für einen bestimmten Drucker aufzubereiten
lf
lf=/var/lpd/druck.err
Fehlerprotokolldatei, um Fehlermeldungen von Filterprogrammen zu speichern
rm
rm=server.mein.netz
Remote-Host, an dem ein Drucker angeschlossen ist
rp
rp=BrotherLaser
Remote-Druckername
mx
mx#0
Maximale Dateigröße eines Druckauftrags (0 heißt keine Beschränkung)
sh
sh
Bannerseiten nicht drucken
Tab. 11.1: Variablen von /etc/printcap
518
Kapitel 11 · Drucker verwalten
Im folgenden Beispiel ist ein HP-Laserdrucker lokal angeschlossen, der auch als Standarddrucker verwendet wird: lp|hp|laser|HP1200:\ :sd=/var/spool/lpd/HP1200:\ :mx#0:\ :sh:\ :lp=/dev/lp0:\ :if=/var/spool/lpd/HP1200/filter:
Das nächste Beispiel zeigt einen Netzwerkdrucker: laser|postscript|PostScript|Brother:\ :sd=/var/spool/lpd/remoteBrother:\ :mx#0:\ :sh:\ :rm=server.mein.nw:\ :rp=pslaser:\ :lp=:
11.2.3
Im Netzwerk drucken
Beim Drucken im Netzwerk wird nicht nur die lokale Konfigurationsdatei /etc/ sondern auch ein Eintrag in der Datei /etc/hosts.lpd (beim BSDLPD-Drucksystem) bzw. /etc/lpd.perms beim LPRng-System, damit das lokale System Druckerlaubnis auf dem Remote-Rechner erhält.
printcap benötigt,
Der Eintrag in /etc/printcap im lokalen System kann wie folgt aussehen: laser|postscript|PostScript|Brother:\ :sd=/var/spool/lpd/remoteBrother:\ :mx#0:\ :sh:\ :rm=server.mein.nw:\ :rp=pslaser:\ :lp=:
Auf dem Remote-Rechner könnte folgender Eintrag in /etc/printcap hinterlegt werden: lp|laser|brother:\ :sd=/var/spool/lpd/brother:\ :mx#0:\ :sh:\ :lp=/dev/lp0:\ :if=/var/spool/lpd/brother/filter:
Folgender Eintrag in /etc/hosts.lpd für das BSD-LPD-Drucksystem ist notwendig: server.mein.nw
Beim LPRng-System kann ein entsprechender Eintrag in der Datei /etc/lpd.perms hinterlegt werden, standardmäßig ist ein allgemeiner Zugriff auf den Netzwerkdrucker erlaubt. Es gibt aber sehr viele verschiedene Einstellungen, zum Beispiel die Einschränkung des Zugriffs auf ein Teilnetz: REJECT SERVICE=X NOT REMOTEIP=195.123.121.0/255.255.255.0
519
BSD-LPD- und LPRng-Druckerverwaltung
11.2.4
magnum
Druckertreiberfilter
Filterprogramme werden verwendet, um Dateien für einen bestimmten Drucker aufzubereiten. Sie können für jeden einzelnen Drucker mit der Variablen if= in /etc/printcap hinterlegt werden. Das Standardausgabeformat für Drucker auf Unix-Systemen ist die Seitenbeschreibungssprache PostScript. Inzwischen können viele Programme Dokumente in PostScript erzeugen und sie anschließend direkt auf einen PostScript-Drucker ausgeben, ohne dass sie zuvor von einem Filter umgewandelt werden müssen. Auch für nicht PostScript-fähige Drucker gibt es unter Linux eine Lösung, um PostScript-Dokumente auszugeben. GhostScript (gs) wandelt das PostScript-Dokument in ein Grafikformat um, das für verschiedene Drucker aufbereitet werden kann. In der Regel ist es dafür nicht notwendig, den Befehl gs direkt zu verwenden, denn die meisten Linux-Distributionen besitzen komfortable Filtersysteme, die automatisch die Konvertierung mit GhostScript durchführen. Bei älteren Linux-Versionen, zum Beispiel SUSE Linux bis Version 7.3, wurde apsfilter verwendet, das für jeden Drucker automatisch drei Druckernamen installiert:
쮿
: automatische Formaterkennung und Konvertierung der Druckdateien
쮿
-ascii: Ausdruck als ASCII-Text
쮿
-raw: keine Vorbearbeitung, sondern direktes Ausdrucken der Druckdaten
Ein typischer Eintrag kann zum Beispiel wie folgt aussehen: ### BEGIN apsfilter: ### hp1200 a4 mono 300 ### # Warning: Configured for apsfilter, do not edit the labels! # apsfilter setup Mon Jul 31 18:41:32 CEST 2005 hp1200-ascii|lp5|hp1200-a4-ascii-mono-300|Hp1200 a4 ascii mono 300:\ :lp=/dev/lp0:\ :sd=/var/spool/lpd/hp1200-a4-ascii-mono-300:\ ... # hp1200|lp6|hp1200-a4-auto-mono-300|hp1200 a4 auto mono 300:\ :lp=/dev/lp0:\ :sd=/var/spool/lpd/hp1200-a4-auto-mono-300:\ ... # hp1200-raw|lp7|hp1200-a4-raw|hp1200 a4 raw:\ :lp=/dev/lp0:\ :sd=/var/spool/lpd/hp1200-a4-raw:\ ... # ### END apsfilter: ### cdj550 a4 mono 300 ###
Es gibt mehrere Konfigurationsdateien, um apsfilter zu konfigurieren. Für die globale Konfiguration wird /etc/apsfilterrc verwendet und /etc/apsfilterrc., um einen speziellen Druckertyp zu konfigurieren. Ab SUSE Linux Version 8.0 wird lpdfilter verwendet, das SUSE selbst entwickelt hat. Es muss nicht mehr manuell nachbearbeitet werden und ist in der Konfiguration von YaST integriert.
520
Kapitel 11 · Drucker verwalten
11.2.5
Druckerverwaltung mit lpc
Das Programm lpc (line printer control) kann jeden in /etc/printcap eingetragenen Drucker verwalten, das heißt, anhalten und wieder aktivieren, die Warteschlange bearbeiten und Statusinformationen anzeigen. Der Befehl kann entweder mit Optionen direkt an der Befehlszeile oder im interaktiven Modus durch Aufruf von lpc verwendet werden. Die Syntax des Befehls lautet: lpc [option [argumente ...]
Der Befehl kennt folgende Optionen: Option
Beschreibung
help [befehl]
Listet alle lpc-Befehle auf oder eine Kurzinformation zu befehl
status printer/all
Zeigt den aktuellen Status des Druckers an
topq printer jobid topq printer user
Verschiebt den Druckauftrag jobid oder alle Druckaufträge eines Benutzers user an den Anfang der Druckerwarteschlange
enable printer/all disable printer/all
Aktiviert (enable) bzw. deaktiviert (disable) eine oder alle Warteschlangen, druckt aber die noch anstehenden Aufträge aus. Neue Druckaufträge können weiterhin in die Warteschlange gestellt werden.
start printer/all stop printer/all
Aktiviert (start) bzw. deaktiviert (stop) das Drucken auf einem oder allen Druckern. Neue Druckaufträge können weiterhin in die Warteschlange gestellt werden.
up printer/all down printer/all
Aktiviert (up) bzw. deaktiviert (down) eine Warteschlange und den dazugehörigen Drucker. Wird bei längerer Ausfallzeit eines Druckers empfohlen
mesg printer text
Setzt die Statusmeldung für einen Drucker
Tab. 11.2: Optionen des Befehls lpr
Im folgenden Beispiel werden Statusinformationen zum Drucker ausgegeben: # lpc lpc> status all Printer Printing Spooling Jobs Server Subserver Redirect hp2@pc3 enabled enabled 0 none none br17@pc5 enabled enabled 0 none none
Im nächsten Beispiel wird der Drucker hp2 deaktiviert: lpc> down hp2@pc3 Printer: hp2@pc3 [email protected]: disabled and stopped lpc> status all Printer Printing Spooling Jobs Server Subserver Redirect br17@pc5 enabled enabled 0 none none hp2@pc3 disabled disabled 0 none none
521
Das neue Drucksystem CUPS
magnum
11.3 Das neue Drucksystem CUPS Zuerst fand CUPS bei vielen Benutzern, die sich zu Hause mit Linux beschäftigten, großen Anklang, das System ist aber überhaupt nicht auf einen Einzelplatz beschränkt, sondern bietet vor allem im UNIX- oder Linux-Netzwerk große Vorteile. Ein PC, auf dem CUPS zur Verfügung steht, kann auch drucken, wenn darauf keine eigenen Druckertreiber installiert und konfiguriert sind. Das System soll das alte LPD-Drucksystem ablösen. CUPS wurde von dem Unternehmen Easy Software Products (ESP) entwickelt, das CUPS auch als kommerzielle Software unter dem Namen ESP PrintPro verkauft. Das System CUPS behebt viele Schwächen der bisherigen Drucksysteme, zum Beispiel kann es:
쮿
Benutzer über Passwörter oder Zertifikate authentifizieren
쮿
die zu druckenden Daten bei der Übertragung zwischen zwei Rechnern oder zum Drucker verschlüsseln
쮿
alle im Netz zur Verfügung stehenden Drucker jedem Clientrechner beim Booten oder Anmelden mitteilen
CUPS bezieht die wichtigsten Funktionen des LPD-Drucksystems ein, wodurch die Druckfunktionen von alten Anwendungen, Programmen und Shellskripten weiterhin genutzt werden können. CUPS orientierte sich beim Drucken unter Unix und Linux an den Betriebssystemen Microsoft Windows und MacOS, was bedeutet, dass für eine CUPS-fähige Anwendung kein eigener Druckertreiber mehr notwendig ist, sondern diese einfach die CUPS-Bibliothek verwendet. Die besonderen Eigenschaften eines Druckers werden mit auf dem Druckserver vorliegenden PPD-Dateien (PostScript Printer Description-Dateien) umgesetzt, was auch bei nicht PostScriptfähigen Druckern funktioniert. Damit setzt CUPS bei Beschreibungsdateien auf Standards. Die Input- bzw. Dokumentfilter basieren auf MIME-Dateitypen und die eigentlichen Druckerbeschreibungen werden durch PPD-Dateien, ein Dateiformat von Adobe, umgesetzt. Die BSD- und System-V-Druckbefehle lpr und lp verwendet CUPS weiterhin, so dass ein Anwender sich nicht umstellen muss. CUPS verfügt allerdings zusätzlich über eigene Befehle. Da GhostScript in CUPS komplett integriert ist, können druckerrelevante Funktionen wesentlich besser unterstützt werden. Wenn ein Benutzer einen Druckbefehl absetzt, muss er allerdings angeben, ob eine schon vorhandene Druckdatei von CUPS gefiltert und an bestimmte Druckereigenschaften angepasst oder unverändert an den Drucker weitergeleitet werden soll. Sollte die Filterfunktion nicht benötigt werden, muss die Option -l an den Befehl lpr und die Option -o raw an den Befehl lp gehängt werden. Das Filtern ist immer dann sinnvoll, wenn zum Beispiel eine Textdatei auf einem PostScript-Drucker ausgegeben werden soll, ohne diese zuerst manuell konvertieren zu müssen. Wird keine Option verwendet, dann wird automatisch gefiltert, zum Beispiel: $ lpr -P ps-drucker bericht.txt
Wenn in diesem Beispiel das Filtern mit der entsprechenden Option unterdrückt wird, ist das Ergebnis ein leeres, ausgedrucktes Blatt: $ lpr -l -P ps-drucker bericht.txt
522
Kapitel 11 · Drucker verwalten
CUPS verwendet eine so genannte Client-Server-Architektur. Jeder Rechner mit einem lokal installierten Treiber und einem direkt angeschlossenen Drucker ist bei CUPS ein Server. Die Treiberfunktionalität von CUPS liegt darin, dass ein Druckauftrag mit Hilfe von Filtern und Druckerbeschreibungsdateien (PPDs) überarbeitet wird, so dass das Druckformat für den entsprechenden Drucker passend ist. Jeder CUPS-Server kann die lokal installierten Drucker Clients, das heißt anderen Rechnern im Netzwerk, verfügbar machen. Die Befehle zum Drucken und Einrichten eines Druckers werden in den Abschnitten Drucker auf der Befehlszeile einrichten und Dateien drucken ausführlich beschrieben.
11.3.1
Das Verzeichnis /etc/cups
Die Konfigurationsdateien für den Druckdienst CUPS befinden sich im Verzeichnis /etc/cups. In der Regel ist es nicht nötig, diese Dateien zu verändern. Im gegebenen Fall ist es aber am einfachsten, ein grafisches Tool dazu zu verwenden, wie zum Beispiel die Webschnittstelle oder YAST von SUSE Linux oder das Druckerkonfigurationstool von Fedora. Bei CUPS existiert die Datei /etc/printcap zwar noch, aber sie ist nicht mehr die zentrale Konfigurationsdatei, sondern enthält nur noch die Namen der bekannten Drucker und ansonsten keine weiteren Einträge. Stattdessen ist die Konfiguration über verschiedene Dateien im Verzeichnis /etc/cups verteilt: Datei
Beschreibung
cups.conf
Zentrale Konfigurationsdatei, die Pfade, Protokollierung, Ports, Zugriffsrechte usw. enthält
ppds.dat
Datenbank mit allen PPD-Definitionen
ppd/.ppd
PPD-Konfiguration für einen eingerichteten Drucker
printers.conf
Globale Definitionen aller Drucker
mime.types
Liste aller Dokumenttypen, die von CUPS automatisch in PostScript konvertiert werden können
mime.convs
Definition der Filterprogramme, die die verschiedenen Dokumenttypen nach PostScript wandeln
Tab. 11.3: Konfigurationsdateien von CUPS
11.3.2
MIME-Types
CUPS verwendet MIME-Types, um Dateiformate zu bestimmen für die Weiterverarbeitung zu kennzeichnen. MIME (Multipurpose Internet Mail Extension) ist ein so genannter RFC-Standard, um Dateitypen und -formate darzustellen. Ursprünglich wurden MIMETypes entwickelt, um per E-Mail auch andere als das ursprüngliche ASCII-Format austauschen zu können. Sie können bei der Internetorganisation IANA registriert und veröffentlicht werden und sind daher eindeutig.
523
magnum
Das neue Drucksystem CUPS
Ein MIME-Type wird im Schema Hauptkategorie/Nebenkategorie festgelegt; mit CUPS arbeiten zum Beispiel folgende MIME-Types zusammen:
쮿
text/plain –
쮿
text/html –
쮿
application/pdf –
쮿
image/gif –
eine Textdatei
eine HTML-Datei eine PDF-Datei
eine GIF-Format-Grafik
Bei CUPS werden in der Datei /etc/cups/mime.types Regeln festgelegt, nach denen unbekannte Formate in die MIME-Types-Kategorien eingeordnet werden. Wenn beim Drucken nur unleserliche Zeichen erscheinen, kann es daran liegen, dass die automatische Erkennung der MIME-Types nicht erfolgreich war.
11.3.3
Die Datei /etc/cups/cupsd.conf
Die Datei /etc/cups/cupsd.conf enthält verschiedene Einträge zur globalen Druckerkonfiguration für den Serverbetrieb und die Datei /etc/cups/client.conf die für den Clientbetrieb. Diese Datei sollte auf dem Server umbenannt werden, wenn es Probleme gibt, denn der Server liest auch diese Datei aus. Die Datei /etc/cups/cupsd.conf ist in verschiedene Abschnitte eingeteilt, in denen die Serveridentität und -optionen, Verschlüsselung, Filter-, Netzwerk- und Browsing-Optionen sowie Angaben zu Aktualisierungen, Sicherheitsoptionen und Administrationsverzeichnissen eingestellt werden können. # more /etc/cups/cupsd.conf ... # Sample configuration file for the Common UNIX Printing System (CUPS) scheduler. ######## Server Identity ... #ServerName myhost.domain.com ... ######## Server Options ... #AccessLog /var/log/cups/access_log ... # Classification: the classification level of the server. ... #Classification classified #Classification confidential ... # LogLevel: controls the number of messages logged to the ErrorLog file and can be one of the following: # debug2 Log everything. # debug Log almost everything. ... LogLevel info # Printcap: the name of the printcap file. # Default is /etc/printcap. Printcap /etc/cups/printcap ... # User/Group: the user and group the server runs under. ... User lp Group lp RunAsUser Yes
524
Kapitel 11 · Drucker verwalten
# Ports/addresses that we listen to. The default port 631 is ... Port 631 # BrowseAllow: specifies an address mask to allow for incoming browser packets. The default is to allow packets from all addresses. ... BrowseAllow @LOCAL BrowseDeny All ... Browsing On Order Deny,Allow Deny From All Allow From 127.0.0.1 Allow From @LOCAL ... AuthType BasicDigest AuthClass Group AuthGroupName sys ... # End of "$Id: cupsd.conf.in,v 1.13 2003/04/10 20:14:04 mike Exp $".
Die Drucker selbst werden mit verschiedenen Dateien konfiguriert, die Datei /etc/ enthält zum Beispiel allgemeine Informationen zu allen Warteschlangen und die Datei /etc/cups/lpoptions diverse globale Druckoptionen, die auch durch den Befehl lpadmin eingestellt werden können.
cups/printers.conf
11.3.4
Der Daemon cupsd
Die Grundlage der CUPS-Software ist der CUPS-Daemon cupsd, der alle Druckabläufe steuert. Er nimmt lokale und Remote-Druckaufträge entgegen, speichert diese zwischen und veranlasst gegebenenfalls, dass die Aufträge gefiltert werden, reiht diese anschließend in die entsprechenden Warteschlangen ein und sendet schließlich den fertigen Druckauftrag zum gewünschten Drucker. Dazu sind in der Regel auch herkömmliche Drucksysteme in der Lage, aber CUPS bietet zusätzlich folgende neue Eigenschaften:
쮿
CUPS unterstützt das Internet Printing Protocol (IPP) und eine dazugehörige Webschnittstelle, so dass von jedem Browser aus auf Druck- und Verwaltungsfunktionen zugegriffen werden kann.
쮿
CUPS ermöglicht, dass Clients auf die auf dem Server eingerichteten Ausgabegeräte drucken, ohne dass diese Clients selbst einen Drucker einrichten müssen.
쮿
CUPS ist abwärtskompatibel und multiprotokollfähig, das heißt, es kann auch Clients unterstützen, die noch mit Microsoft Windows über Samba oder mit älteren UNIX-/Linux-Drucksystemen, wie zum Beispiel LPD, oder mit dem Apple MacOS-System NetATalk funktionieren.
Das Run Control-Skript für cupsd heißt /etc/init.d/cups. Mit diesem kann der Druck-Daemon auch direkt gestartet oder gestoppt werden, zum Beispiel: # /etc/init.d/cups start
525
Das neue Drucksystem CUPS
magnum
Bei Debian GNU/Linux heißt das Skript /etc/init.d/cupsys.
11.3.5
Druckerverwaltung über Webserver
CUPS ist am einfachsten und am unabhängigsten vom Linux-Derivat über den in CUPS eingebauten HTTP-Server zu verwalten, der über Port 631 erreichbar ist. Da das IPP (Internet Printing Protocol) auf HTTP 1.1 basiert, ähnelt die CUPS-Konfigurationsdatei /etc/cups/cupsd.conf der des Apache-Webservers. Es gibt viele verschiedene Einstellungsmöglichkeiten, wie zum Beispiel Servername, Name und Pfad der Protokolldateien, verwendeter Serverport, Absicherung mit Passwörtern usw. Um die Datei grafisch zu konfigurieren, geben Sie im Adressfeld eines Webservers (zum Beispiel Konqueror oder Mozilla) ein: http://localhost:631
Bild 11.2: CUPS über einen Webbrowser verwalten
Über diese grafische Schnittstelle können Drucker auf einfache Weise hinzugefügt, geändert oder gelöscht werden. Es ist auch möglich, Druckaufträge zu verwalten, alte Druckaufträge anzuzeigen und Druckerklassen anzulegen, zu ändern und zu löschen. In unserem Beispiel legen wir einen Drucker neu an. Klicken Sie auf EINRICHTUNGSAUFGABEN. Sie müssen sich autorisieren, bevor Sie Drucker einrichten dürfen:
526
Kapitel 11 · Drucker verwalten
Bild 11.3: Für das Drucksystem autorisieren
Bei einigen Distributionen ist root standardmäßig kein zulässiger CUPS-Administrator. Wenn Sie dort CUPS mit dem root-Account verwalten wollen, müssen Sie zuvor noch ein CUPS-spezifisches Passwort für root in die Datei /etc/cups/ passwd.md5 mit folgendem Befehl eintragen: # lppasswd -g sys -a root
Nun öffnet sich das Fenster EINRICHTUNGSAUFGABEN/ADMIN. Klicken Sie hier auf DRUCKER HINZUFÜGEN, um einen neuen Drucker einzurichten:
Bild 11.4: Einrichtungsaufgabe der CUPS-Webbrowser-Schnittstelle
Geben Sie den Namen, Standort und die Beschreibung des Druckers ein und klicken Sie auf WEITER:
527
Das neue Drucksystem CUPS
magnum
Bild 11.5: Name des neuen Druckers hinterlegen
Wählen Sie dann das Gerät für den neu hinzuzufügenden Drucker, das heißt, die serielle, parallele oder USB-Schnittstelle usw.:
Bild 11.6: Schnittstelle für den Drucker wählen
528
Kapitel 11 · Drucker verwalten
Im nächsten Schritt wählen Sie den Hersteller:
Bild 11.7: Druckerhersteller wählen
Im letzten Schritt suchen Sie das passende Druckermodell aus:
Bild 11.8: Druckermodell auswählen
Wenn Sie nun auf WEITER klicken, erhalten Sie die Meldung, dass der Drucker hinzugefügt wurde.
529
Das neue Drucksystem CUPS
magnum
Neue PPD-Dateien (PostScript Printer Description) können in /usr/share/ppd platziert werden und stehen nach einem Neustart von cupsd zur Verfügung.
11.3.6
KDE-Druckerverwaltung
Ab KDE 2.2 sind die Möglichkeiten beim Ausdruck bzw. beim Einrichten mit Hilfe der KDE-Druckerverwaltung wesentlich komfortabler geworden. Im Hauptmenü bei KDE von SUSE Linux finden Sie unter DIENSTPROGRAMME - DRUCKEN DRUCKERVERWALTUNG folgendes Tool: Bei Debian GNU/Linux finden Sie unter KDE 3.3.2 das Programm unter EINSTELLUNGEN - ANGESCHLOSSENE DRUCKER.
Dieses KDE-Tool ist unter Fedora Core Linux 4.0 standardmäßig nicht installiert.
Bild 11.9: KDE-Druckerverwaltungstool
Über die Registerkarte PROFILE kann die Schaltfläche EINSTELLUNGEN aktiviert werden, um grundsätzliche Einstellungen zum Drucker durchzuführen:
530
Kapitel 11 · Drucker verwalten
Bild 11.10: Drucker mit KDE einrichten
11.3.7
Grafische Druckerverwaltung mit YaST und CUPS
Installation lokaler Drucker Die Konfiguration von lokalen Druckern wird am einfachsten über das YASTModul für die automatische Druckererkennung vorgenommen. Dazu wählen Sie das Menü HARDWARE - DRUCKER. Nach einer kurzen Überprüfung werden die erkannten Drucker aufgelistet bzw. können mit der Schaltfläche KONFIGURIEREN eingerichtet werden:
Bild 11.11: Drucker mit YAST konfigurieren
531
Das neue Drucksystem CUPS
magnum
Im ersten Schritt wird der Druckertyp ausgewählt:
Bild 11.12: Druckertyp auswählen
In unserem Beispiel wählen Sie einen am Parallelport angeschlossenen Drucker und klicken auf WEITER. Der Anschluss kann dann im Detail konfiguriert oder getestet werden:
Bild 11.13: Parallelport testen
532
Kapitel 11 · Drucker verwalten
Klicken Sie dann auf WEITER. Der Name der Warteschlange ist gleichzeitig der Druckername im System:
Bild 11.14: Den Druckernamen eingeben
Wenn Sie auf WEITER klicken, können Sie im nächsten Schritt das Druckermodell wählen, um die richtigen Treiber bereitzustellen:
Bild 11.15: Druckermodell wählen
533
Das neue Drucksystem CUPS
magnum
Anschließend wird der neu eingerichtete Drucker angezeigt:
Bild 11.16: Anzeige des neu eingerichteten Druckers
Mit der Schaltfläche ÄNDERN kann nochmals die Liste der von CUPS verwalteten Drucker angezeigt und geändert werden:
Bild 11.17: Eingerichteten Drucker ändern
534
Kapitel 11 · Drucker verwalten
Mit der Schaltfläche BEARBEITEN können die Einstellungen zum Drucker verändert werden, zum Beispiel im Fenster BESCHRÄNKUNGEN:
Bild 11.18: Drucker nur für bestimmte Benutzer zulassen
Auch der Druckerstatus und die Möglichkeit, Bannerseiten am Beginn oder Ende jeden Druckauftrags auszugeben, können hier definiert werden:
Bild 11.19: Druckerstatus festlegen
Schließlich sind noch Konfigurationsoptionen, wie zum Beispiel im Querformat zu drucken, möglich:
535
Das neue Drucksystem CUPS
magnum
Bild 11.20: Konfigurationsoptionen festlegen
Abschließend wird durch BEENDEN die Konfiguration gespeichert und der Druckdienst mit den neuen Daten gestartet.
Zugriff auf Netzwerkdrucker Der Zugriff auf Netzwerkdrucker wird mit demselben YAST-Menü eingerichtet. Wählen Sie HARDWARE - DRUCKER: Drucken über SMB-Netzwerkserver
Aktivieren Sie wieder die Schaltfläche KONFIGURIEREN und wählen Sie dann den Druckertyp, zum Beispiel CUPS-NETZWERKSERVER, SMB-NETZWERKSERVER usw.:
Bild 11.21: Samba-Netzwerkdrucker installieren
536
Kapitel 11 · Drucker verwalten
In diesem Beispiel wird ein Drucker über einen Samba-Netzwerkserver eingerichtet. Sie müssen den Namen des Druckservers, die entfernte Warteschlange und die Arbeitsgruppe angeben:
Bild 11.22: Informationen zum Samba-Drucker hinterlegen
Die weiteren Schritte sind mit denen identisch, die bei der Installation eines lokalen Druckers beschrieben wurden:
쮿
Der Name der Warteschlange, das heißt der Druckername im System, und eine ausführliche Beschreibung zum Drucker müssen angegeben werden.
쮿
Der Druckerhersteller und das Druckermodell müssen gewählt werden.
쮿
Die Konfiguration kann noch überarbeitet werden.
Drucken über CUPS-Netzwerkserver
Auch das Drucken über einen CUPS-Netzwerkserver erfolgt über das YAST-Menü HARDWARE - DRUCKER und die anschließende Auswahl der Schaltfläche KONFIGURIEREN:
Bild 11.23: CUPS-Netzwerkserver einrichten
537
Das neue Drucksystem CUPS
magnum
Anschließend müssen Sie die Verbindungsart wählen, in diesem Beispiel CUPS NUR CLIENT:
Bild 11.24: Verbindungsart wählen
Sie erhalten in diesem Fall noch folgenden Warnhinweis, den Sie bestätigen müssen:
Bild 11.25: Warnhinweis für die Clientkonfiguration
Im nächsten Fenster ist es möglich, über die Schaltfläche LOOKUP nach einem CUPS-Server im Netzwerk zu suchen. Ist ein solcher vorhanden, wird er im Feld SERVERNAME angezeigt:
Bild 11.26: CUPS-Server suchen
538
Kapitel 11 · Drucker verwalten
Nach der Bestätigung mit OK wird der Drucker in der Konfiguration angezeigt:
Bild 11.27: Konfigurierte Drucker anzeigen
11.3.8
Grafische Druckerverwaltung bei Fedora
Auch Fedora Core Linux bietet ein recht einfaches grafisches Tool, um Drucker zu installieren und zu verwalten. Dazu wählen Sie das Menü SYSTEMEINSTELLUNGEN - DRUCKEREINRICHTUNG:
Bild 11.28: Grafische Druckerkonfiguration unter Fedora Core Linux
Klicken Sie auf NEU, um einen neuen Drucker zu konfigurieren:
Bild 11.29: Neuen Drucker konfigurieren
539
Das neue Drucksystem CUPS
magnum
Geben Sie den Namen des Druckers und eventuell eine Beschreibung ein:
Bild 11.30: Druckernamen eingeben
Wählen Sie im nächsten Fenster den Warteschlangentyp aus, das heißt, ob der Drucker ein lokaler Drucker ist, über einen Windows-Druckserver erreichbar oder ein Netzwerkdrucker mit JetDirect-Schnittstelle ist usw.:
Bild 11.31: Warteschlangentyp auswählen
In unserem Beispiel wurde LOKAL-VERBUNDEN gewählt. Nun muss das Druckermodell ausgewählt werden:
Bild 11.32: Druckermodell auswählen
540
Kapitel 11 · Drucker verwalten
Im letzten Fenster wird schließlich angezeigt, dass der Drucker erfolgreich installiert wird. Klicken Sie auf ABGESCHLOSSEN, um die Installation zu beenden:
Bild 11.33: Druckerwarteschlange wird erstellt
Mit der Schaltfläche BEARBEITEN kann die Druckerkonfiguration des markierten Druckers geändert, mit LÖSCHEN der Drucker entfernt werden. Wenn Sie auf STANDARD klicken, wird der markierte Drucker zum Standarddrucker.
Bild 11.34: Druckerkonfiguration – Anzeige der vorhandenen Drucker
Wenn Sie das Menü AKTION - WARTESCHLANGE BEARBEITEN wählen, haben Sie ebenfalls die Möglichkeit, die Druckerkonfiguration nochmals zu überarbeiten:
Bild 11.35: Druckerkonfiguration bearbeiten
541
Drucker auf der Befehlszeile einrichten
magnum
11.4 Drucker auf der Befehlszeile einrichten Einen Drucker auf der Befehlszeile einzurichten, ist recht mühsam. Der Vollständigkeit halber werden hier aber nochmals alle Befehle zusammengefasst.
Der Befehl lpadmin Mit Hilfe dieses allgemeinen Druckbefehls können Drucker und Druckerklassen installiert, konfiguriert und deinstalliert werden. Der Befehl ist sowohl bei älteren Drucksystemen als auch bei CUPS bekannt. Unter Unix und Linux kann ein einfacher Benutzer keinen Drucker installieren oder verwalten. Diese Aufgabe ist root oder einer ausgewählten Gruppe von Administratoren vorbehalten. Ein Benutzer kann nur drucken, die Druckerwarteschlange einsehen und seine eigenen Druckaufträge löschen. Die Syntax des Befehls lautet: $ lpadmin [–option(en)] [-d drucker | -p option(en) | -x drucker]
Der Befehl kennt folgende Optionen: Option
Beschreibung
-c klasse
Konfiguration einer Druckerklasse bzw. Hinzufügen eines Druckers zu einer Druckerklasse. Eine Druckerklasse ist ein Pool von gleichartigen Druckern, von denen der nächste freie Drucker die nächste anstehende Druckanforderung entgegennimmt. Dabei werden die Drucker in der Reihenfolge abgefragt, in der sie der Klasse hinzugefügt wurden, weshalb die leistungsfähigsten zuerst zugeordnet werden sollten.
-d drucker
Angabe des Zieldruckers
-D kommentar
Definition eines Kommentars für einen neu konfigurierten Drucker
-E
Aktiviert den Drucker und nimmt Druckaufträge entgegen. Diese Option entspricht der Eingabe der Befehle accept und enable für den Drucker. Wenn diese Option vor den Optionen -d, -p oder -x angegeben wird, wird eine Verschlüsselung bei der Verbindung mit dem Server erzwungen.
-h server
Angabe des Servernamens
-i interface
Definition eines Interface-Programms im System V-Stil für den neu konfigurierten Drucker. Diese Option kann nicht mit der Option -P verwendet werden (PPD-Datei).
-L lokation
Definition eines Kommentars für den Drucker, der die Lokation des Druckers angibt
-m modell
Legt ein standardmäßiges System V-Interface-Programm oder eine PPD-Datei aus dem Verzeichnis model fest
-p option
Angabe von Druckeroptionen
Tab. 11.4: Die Optionen des Befehls lpadmin
542
Kapitel 11 · Drucker verwalten
Option -o option
Beschreibung Definition von folgenden Optionen: name=wert
Definiert eine PPD- oder Serveroption für den Drucker. PPD-Optionen können mit der Option -l mit dem Befehl lpoptions aufgelistet werden. job-k-limit=wert Definiert das Limit in Kbyte für Quoten pro Benutzer. Der Wert ist eine ganze Zahl in Kbyte. job-page-limit=wert Definiert das Seitenlimit für Quoten pro Benutzer. Der Wert ist eine ganze Zahl für die zu druckenden Seiten. job-quota-period=wert Definiert die Berechnungsperiode für Quoten pro Benutzer. Der Wert ist eine ganze Zahl in Sekunden. 86.400 Sekunden sind ein Tag. protocol=name Definiert den binären Protokolltyp für die Netzwerkverbindung: none, bcp oder tbcp. None ist Standard. -P ppd-datei
Definiert eine Postscript Printer Description-Datei, um den Drucker zu verwenden. Wird die Definition verwendet, überschreibt sie die Option -i.
-r klasse
Entfernt den angegebenen Drucker aus der angegebenen Klasse. Wenn die Klasse leer ist, wird sie entfernt.
-u allow
Definition der zugelassenen (allow) oder nicht zugelassenen (deny) Benutzer eines Druckers. Namen, die mit dem Zeichen @ beginnen, sind Gruppen. Die beiden Optionen -u allow:all und -u deny:none deaktivieren die Benutzerkontrolle.
benutzer,benutzer, @gruppe -u deny benutzer,
benutzer,@gruppe -v geräte-uri
Definition der Gerätedatei-URI der Druckerwarteschlange. Wenn diese URI ein Dateiname ist, wird er automatisch in die Form file:/datei/name konvertiert.
-x drucker
Deinstallation einer Druckerkonfiguration
Tab. 11.4: Die Optionen des Befehls lpadmin (Forts.)
Im nächsten Beispiel wird ein Drucker mit der Bezeichnung hp1200 an die lokale Druckerwarteschlange angeschlossen. Der Druckertyp und der Dateityp sind PostScript: # lpadmin -E –i postscript –D "HP-Drucker" –d hp1200
Im folgenden Beispiel sollen nur die Benutzer her und doo auf den Drucker brother3050 drucken dürfen: # lpadmin –d brother3050 –u allow: her,doo
Mit folgendem B