Home · Kontakt · Impressum
previous up next_inactive
Up: www.fibel.org

Linux.Fibel.org
Version 0.6.0

Ole Vanhoefer

 

Linux.Fibel.org

Einführung in Linux / LPI I

von Ole Vanhoefer

 

Copyright © 2001-2004 Ole Vanhoefer
Gesetzt mit LATEX unter Linux

 

Version 0.3 : 18. November 2001
Version 0.4 : 14. April 2002
Version 0.5 : 19. Januar 2003
Version 0.6.0 : 1. September 2004

Das Kleingedruckte

Dieses Skript ist wie alle Werke urheberrechtlich geschützt. Er ist jedoch unter den Bedingungen der Open Publication License, Version 0.4 oder höher verfügbar. Die genaue Lizenz findet sich in Open Publication License (siehe Anhang D, Seite [*]).

Wenn dieses Skript reproduziert oder verwendet wird, bittet der Autor um Meldung eines solchen Angebotes per eMail an linux$@$vanhoefer.de unter Angabe einer Kontaktadresse.

Die in diesem Skript dargestellten Programme und Verfahren werden ohne Berücksichtigung der Patentlage mitgeteilt. Sie sind nur für Amateur- und Lehrzwecke bestimmt.

Alle Informationen in diesem Skript sind frei erfunden. Ähnlichkeiten mit existierenden Betriebssystemen, Soft- und Hardware sind rein zufällig. Daher übernimmt der Autor keine Garantie, juristische Verantwortung oder irgendeine Haftung für Folgen, die auf Inhalte dieses Skriptes zurückgehen.

Ich weise darauf hin, daß die im Skript verwendeten Soft- und Hardwarebezeichnungen und Markennamen der jeweiligen Firmen i. A. warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.

Die Nutzungsrechte der in diesem Skript wiedergegebene Codezeilen von Programmen, die unter der GNU General Public License verbreitet werden, richtet sich einzig und allein nach den Bedingungen der GNU General Public License.

 


Inhalt

Vorwort

 
In a world without walls and fences,
who needs windows and gates?
 

 
Anonymous
 

Dieses Skript ist als Begleitmaterial zu meinem Unterricht ``Einführung in Linux'' und den Vorbereitungskursen zu den LPI-Prüfungen 101 und 102 entstanden. Schwerpunkt des Unterrichts ist eine Einführung in die Grundbedienung von Linux, wie sie dem Stoffplan der ersten LPI-Prüfung entspricht. Der Stoff der Prüfung 101 wird fast vollständig abgedeckt. Viele Themen der Prüfung 102 sind auch bereits vorhanden

Das Skript ist einmal als Begleitmaterial zum Unterricht entstanden, da es noch kein passendes Buch zur LPI-Prüfung in Deutsch gibt, zum anderen als meine Vorbereitung für die Prüfungen 101 und 102, die ich auch erfolgreich abgelegt habe.

Dieses Skript befindet sich wie immer in der Entwicklung und wird in Zukunft um einige Themen erweitert werden.

Im Vergleich zur Version 0.5 hat sich der Umfang der Fibel von ca. 350 Seiten auf ca. 500 Seiten erhöht. Viele Themen sind dazu gekommen. Einige sind noch recht frisch, so daß sicherlich noch ein paar Fehler drin versteckt sind und ein paar Brüche im Kontext. Trotzdem möchte ich diese Version nun veröffentlichen, da sich vieles getan hat. Für Anregungen und Fehlerkorrekturen bin ich sehr dankbar. Die Aufgaben sollten zum größten Teil mit den Grundvoraussetzungen einer SuSE-Linux-Distribution ab Version 8.0 gelöst werden können.

Besonders möchte ich bei meinen bisherigen Teilnehmern danken, die mich auf Fehler und Unstimmigkeiten aufmerksam gemacht haben und sich als Beta-Tester für die Aufgaben geopfert haben.

Bei Interesse an Linux-Seminare und LPI-Vorbereitungskursen können Sie mich gerne kontaktieren. Nun möchte ich Sie nicht weiter aufhalten und hoffe Sie haben viel Spaß beim Lesen.

Ole Vanhoefer
Kiel, 01.09.2004


1. Einführung


1.1 Was ist eigentlich Linux?

Linux ist ein 32-BitUnix-ähnliches Betriebssystem. Im Gegensatz zu den meisten anderen Unix-Systemen ist Linux inklusive der Programmquellcodes frei kopierbar. Inzwischen existiert eine Vielzahl von Anwendungen für Linux, so daß fast alle Aufgaben, die bisher auf Unix-, Windows- oder Apple-Systemen erledigt wurden, auch unter Linux zu meistern sind.

Ein Betriebssystem ist eine Sammlung von Programmen, mit denen die grundlegendsten Funktionen eines Rechners realisiert werden. Dies reicht von der Schnittstelle Mensch-Maschine über die Verwaltung der Daten bis zur Kontrolle und Steuerung der Systemressourcen. Ohne ein Betriebssystem können Sie mit Ihrem Rechner nicht arbeiten, da so wichtige Dinge wie das Starten von Programmen und die Verwaltung Ihrer Dateien davon abhängen.

Diese Funktionen stellen eigentlich alle Betriebssystem zur Verfügung. Somit werden Sie bei jeder Arbeit mit einem Betriebssystem konfrontiert, wie z. B. CP/M, DOS, Windows 9x, Windows NT, Windows 2000, Windows ME, Windows XP, OS/2, Mac-OS, Unix usw.

Linux basiert auf dem Betriebssystem UNIX, das 1969 von den Bell Laboratories entwickelt wurde. Der finnische Student Linus Benedict Thorvald entwickelte den ersten Linux Betriebssystemkern (Kernel) auf seinem 386er Rechner. Dabei nutzte er nicht den bestehenden Quellcode, sondern programmierte das Betriebssystem vollständig neu. Nach außen präsentiert sich Linux als UNIX-System, während es innen aus einem völlig eigenständigem Code besteht.

Thorvald stellte im September 1991 der Gemeinde der MINIX-Anhänger sein neues Betriebssystem in der Version 0.01 vor. Er entschloß sich dabei das Programm und den Quellcode frei weiterzugeben und anderen Programmierern die Arbeit an seinem System zu gestatten. Viele Programmierer begeisterten sich für Linux und schon im Januar 1992 wurde der erste stabile Kernel 0.12 ins Internet gestellt.

Eigentlich kann man nur den Kernel mit seinen Modulen und direkt dazugehörenden Daten als Linux bezeichnen. Daneben gibt es aber eine Vielzahl von Hilfsprogrammen und Applikationen, die zusammen mit dem Kernel in den sogenannten Distributionen vertrieben werden. Für diese Zusammenstellung hat sich der Name Linux nun eingebürgert.

1.1.1 Leistungsmerkmale des Kernels

Der aktuelle Kernel verfügt über folgenden Leistungsmerkmale:

1.2 Wie alles begann

Leider ist heute nicht mehr der Tag bekannt an dem Linus Benedict Torvalds1.1 mit der Entwicklung des Linux Kernels begann. Ein Posting aus dem Usenet gibt aber einen Hinweis auf den möglichen Zeitpunkt, an dem er sich für das Thema zu interessieren begann.

From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) 
Newsgroups: comp.os.minix 
Subject: Gcc-1.40 and a posix-question 
Message-ID: <1991Jul3.100050.9886@klaava.Helsinki.FI> 
Date: 3 Jul 91 10:00:50 GMT 
Hello netlanders, 
Due to a project I'm working on (in minix), I'm interested in the posix 
standard definition. Could somebody please point me to a (preferably) 
machine-readable format of the latest posix rules? Ftp-sites would be 
nice.

Sicher ist, daß die erste Version des Linux Kernels am 25. August 1991 im Usenet angekündigt wurde. Schon kurze Zeit später fanden sich interessierte Programmierer, die an dem Projekt mitgearbeitet haben.

From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
Newsgroups: comp.os.minix
Subject: What would you like to see most in minix?
Summary: small poll for my new operating system
Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.FI>
Date: 25 Aug 91 20:57:08 GMT
Organization: University of Helsinki

Hello everybody out there using minix -
I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready. I'd like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things).
I've currently ported bash(1.08) and gcc(1.40), and things seem to work.
This implies that I'll get something practical within a few months, and
I'd like to know what features most people would want. Any suggestions
are welcome, but I won't promise I'll implement them :-)
Linus (torvalds@kruuna.helsinki.fi)
PS. Yes - it's free of any minix code, and it has a multi-threaded fs.
It is NOT protable (uses 386 task switching etc), and it probably never
will support anything other than AT-harddisks, as that's all I have :-(.

1991
Als erster genaue Termin steht der 3. Juli 1991 fest. Linux implementiert einige Gerätetreiber sowie den Festplattentreiber und einige User-Level Funktionen.

Linus veröffentlicht am 17. September 1991 die Version 0.01 des Kernels für einige Interessenten aus dem Usenet. Das Archiv mit der historischen Version ist auch heute noch verfügbar:
http://www.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz.

Die erste ``offizielle'' Version des Linux Kernels (0.02) erscheint am 05. Oktober 1991. Mit dieser Version laufen bereits die bash, gcc, gnu-make, gnu-sed und compress.

Am 19. Dezember 1991 läuft die erste Version (0.11), die ohne die Hilfe eines anderen Betriebsystems lauffähig ist. Es gab keinen SCSI Support, so daß eine AT-Bus Festplatte Voraussetzung war. Es gab weder init noch login, nach den Systemstart landete man direkt in einer bash. Es gab Ansätze für die Implementierung von Virtual Memory, es waren aber mindestens 4 MB RAM notwendig um GNU Programme, insbesondere den gcc benutzen zu können. Ein einfacher Systemstart war aber auch schon mit 2 MB möglich.

Deshalb folgte für einige Personen eine Version mit virtueller Speicherverwaltung zu Weihnachten um den Kernel auch mit 2 MB RAM übersetzen lassen zu können.

1992
Bereits am 5. Januar kommt die erste Version (0.12) heraus, die mehr Funktionen hatte als unbedingt benötigt werden. Mit dieser Version wurde der Kernel unter die GPL gestellt. Die ältere Lizenz unter der der Kernel stand war in vielen Punkten deutlich strenger.

Linus verteilte diese per Anonymous-FTP im Internet, was zu einem sprunghaften Anstieg der Testerzahl führte. Da dieser Anstieg so groß wurde, daß die nötige Kommunikation nicht mehr per eMail zu bewältigen war, wurde im Usenet die Gruppe alt.os.linux geschaffen. Das Interesse an Linux wuchs stetig und wurde von Linus koordiniert.

Um die Entwicklung voranzutreiben erhöhte Linus die Entwicklungsnummer im März auf Version 0.95.

Die im April folgende Version 0.96 war die erste Version mit der es möglich war das X-Window System zu betreiben.

Man schätzt die Zahl der Anwender auf circa 1000.

Oktober: Version 0.98.2

1993
Die Zahl aller Programmierer steigt auf circa 100. Fünf von ihnen arbeiten mit Linus zusammen. Die Anwenderzahl beläuft sich auf etwa 20000.

Durch Anpassung des Linuxkernels an die GNU Umgebung der Free Software Foundation (FSF) wuchsen die Möglichkeiten von Linux erneut stark an, da man nun auf eine große Sammlung an vorhandener Software und Tools zurückgreifen konnte.

Dezember: Version 0.99.14

1994
Mit der ersten stabilen Linux Version (1.00) im März wurde der Kernel netzwerkfähig und die User-Zahl steigt auf 100.000 an. Linus stellt nun den Quelltext des Linuxkernels offiziell unter die GPL.

Ein weiterer wichtiger Schritt war die Adaption eines Graphical User Interfaces (GUI), des X-Window-Systems. Dieses wurde von dem Xfree86 Projekt beigesteuert.

April: Version 1.10

1995
Linux läuft nun auch auf DEC- und Sun Sparc-Prozessoren. Schätzungen belaufen sich auf rund eine halbe Millionen Anwender.

März: Version 1.20

Juni: Version 1.30

1996
Mit der neuen Version 2.0 des Linux-Kernels können nun mehrere Prozessoren gleichzeitig angesteuert werden. Linux verliert langsam seinen Bastlerstatus und wird zu einer ernstzunehmenden Alternative für Firmen.

Die Anwenderzahl hat sich auf rund 1,5 Millionen Benutzern erhöht.

Juni: Version 2.00

September: Version 2.10

1997
Neue Linuxversionen erscheinen fast wöchentlich. In verschiedenen Ländern existieren bereits Linuxmagazine. Die Anwenderzahl ist auf 3,5 Millionen Anwender gestiegen.

Verschiedene namhafte Firmen beginnen ihre Software auf Linux zu portieren. Netscape ihren Webbrowser, Applixware ihre Office Anwendung und die Software AG Ihre Datenbank Adabas D. Damit gibt es auch professionelle Software für Linux.

April: Version 2.1.35

1998
Das K Desktop Enviroment (kurz: KDE) wird gestartet.

Man schätzt die Anzahl der Programmierer von Linux auf 10.000, und die Anzahl der Anwender auf 7,5 Millionen.

März: Version 2.1.90

1999
Man tippt auf ungefähr 10 Millionen Anwender. Linus Torvalds kündigt den Angriff auf Windows an.

Januar: Version 2.20

Mai: Version 2.30

2000

2001
Januar: Version 2.4

2002

2003

2004

1.3 Grundlagen für die Installation

Vor der Installation wollen wir uns hier mit ein paar Grundlagen zur Hardware beschäftigen.

1.3.1 Hardwarevoraussetzungen

Für ein System ohne graphische Oberfläche können Sie sich an folgenden Werten orientieren.

Theoretisches Minimum 386 SX 1 MB  RAM 5MB  Festplatte
Brauchbares Minimum 386 DX/40 mit Coprozessor 8 MB  RAM 150 MB  Festplatte
Brauchbares System 486 DX/66 16 MB  RAM 600MB  Festplatte
Gutes System Pentium90 32 MB  RAM 1GB  Festplatte

Graphische Systeme machen erst ab einem 486 Prozessor Spaß und für ein KDE-System sollten es minimal 64 MB Arbeitsspeicher sein.


1.3.2 Die Festplatte

Vor der Installation sollten wir uns den Aufbau einer Festplatte bzw. Harddisk einmal anschauen. Eine Festplatte besteht meistens aus einer, zwei oder mehreren Metallplatten, die beidseitig mit hochfein polierten Metalloxiden beschichtet sind. Ein Kamm von beweglichen Schreib-Lese-Köpfen greift seitlich in den rotierenden Stapel von Platten hinein und kann so die in konzentrischen Kreisen angelegten Datenmuster lesen oder schreiben. Durch die hohen Drehzahlen der Festplatte entstehen gezielt Luftbewegungen. Der Schreib-Lese-Kopf wird in Richtung der Oberfläche gesaugt und in einem vordefinierten Abstand gehalten. Bei einem Strömungsabriss durch Änderung der Drehzahl entfernt sich der Schreib-Lese-Kopf wieder von der Oberfläche.

Diese System ist relativ stabil. Sollte es aber aus irgendwelchen Gründen zum direkten Kontakt des Kopfes mit den schnell drehenden Magnetplatten kommen, so ist das Ergebnis verheerend. Diesen Vorgang bezeichnet man auch als Headcrash. Die magnetisierte Oberfläche, welche die Daten trägt, wird unwiderruflich beschädigt. Das gleiche gilt für den Schreib-Lese-Kopf der Festplatte. Dieser Vorgang wird in Umgangssprache auch als Spanabhebende Datenverarbeitung bezeichnet. Das ist dann für die Daten der GAU, der wahrhaft größte anzunehmendste Unfall. Auch wenn es heute Möglichkeiten gibt, mit welcher man gelöschte Dateien wiederherstellen kann, sind mechanisch zerstörte Daten unwiederuflich verloren.

Die Festplatte beherbergt die magnetisierbaren Metallplatten, den Spindelmotor, den Schreib-Lese-Köpfen sowie den Positionierungsmechanismus der Köpfe in einem versiegelten Gehäuse, das vor äußeren Einflüssen schützt. Dieser Aufbau legt das Koordinatensystem der Festplatte fest, das die Lokalisierung der Daten auf der Platte ermöglicht. Der Kamm aus Schreib-Lese-Köpfen erzeugt konzentrische Kreise auf der Oberfläche der Magnetplatten. Einen solchen Kreis bezeichnet man als Spur. Die Spur 0 ist per Definition der äußerste Kreis einer Platte. Eine solche kreisförmige Spur wird dann in Kreissegmente unterteilt, die als Sektoren bezeichnet werden. Der Sektor ist die kleinste adressierbare Einheit einer Platte. Er ist 512 Bytes groß. Die übereinander liegenden Spuren eines Plattenstapels werden als Zylinder bezeichnet. Eine Festplatte mit drei Scheiben hat Zylinder, die aus sechs Spuren bestehen (Obere und untere Seite pro Scheibe). Eine Platte kann auf alle Spuren eines Zylinders zugreifen, ohne die Schreib-Lese-Köpfe neu zu positionieren.

Durch die Angabe von Zylinder, Kopf und Sektor kann man so genau einen Abschnitt einer Festplatte, den Block, adressieren. Diese Form der Adressierung wird als CHS (Cylinder-Head-Sector) bezeichnet. Der Block stellt die kleinste adressierbare Einheit einer Festplatte dar, d.h. zur Änderung eines einzelnen Bits muss immer ein ganzer Block gelesen und wieder geschrieben werden. CHS unterliegt mehreren Einschränkungen: Die Schnittstelle zwischen IDE und BIOS reserviert nur 16 Bits für die Zylinder (maximal sind 65.536 möglich), 4 Bits für die Köpfe (maximal 16) und 8 Bits für die Sektoren pro Spur (maximal 256). Das BIOS hat 10 Bits für die Zylinder zur Verfügung (1024), 8 Bits für die Köpfe (256) und 6 Bits für die Sektoren (63, da ab 1 gezählt wird). Bei diesen Grenzen ist jeweils der niedrigere Wert entscheidend, so daß alte BIOS-Versionen nur 1024 x 16 x 63 x 512 Bytes = 504 MB adressieren können. Neuere BIOS-Versionen stocken per Mapping die Anzahl der Schreib-/Leseköpfe auf 255 auf und kommen damit auf 7.844 GB.

Ende 1995 löste LBA (Logical Block Addressing) die Adressierung nach CHS ab. Hier werden der Zylinder, Head und Sektor in logischen Blöcken zusammengefaßt. Bei LBA sind alle Sektoren der Festplatte - von null beginnend - durchnumeriert. Das auf 28 Bit basierende LBA verwaltet maximal 128 GB. Aktuell ist die auf 64 Bit basierende Variante, die bis zu 8.589.934.592 Terrabytes adressiert.


1.3.3 Partitionen

Neben der oben beschriebenen physikalischen Aufteilung einer Festplatte gibt es eine logische Aufteilung der Platte, die für die Installation sehr wichtig ist. Partitionen werden dazu benutzt um eine Festplatte in einzelne Teile zu zerlegen. Eine Festplatte besteht aus mindestens einer Partition und kann bis zu vier Partitionen enthalten. Um mit den Partitionen arbeiten zu können, müssen sie mit dem gewünschten Dateisystem formatiert werden. Bei den Partitionen werden zwei Typen unterschieden: Die primäre und die erweiterte Partition.


1.3.3.0.1 Primäre Partition

Eine primäre Partition wird formatiert und ist dann in der Lage Daten zu speichern. Ein Rechner kann nur von einer primären Partition booten.


1.3.3.0.2 Erweiterte Partition

Eine erweiterte Partition kann nicht direkt zum Speichern von Daten verwendet werden. Sie kann nur logische Laufwerke enthalten, die dann aber formatiert werden können. Eine Festplatte kann bis zu vier primäre Partitionen enthalten oder drei primäre und eine erweiterte Partition.

1.3.3.1 Partitionsnamen

Die Partitionen werden direkt nach dem Typ des Festplattencontrollers benannt. Dabei steht für IDE-Platten der Buchstabe h und für SCSII-Platten der Buchstabe s. Dann folgt der Buchstabe d für Disk. Der dritte Buchstabe nummeriert die Festplatte und die vierte Ziffer gibt die Partitionsnummer an. Die erste Partition der ersten Festplatte mit einem IDE-Controller heißt also hda1. Mit einem SCSII-Controller würde sie sda1 heißen.


Tabelle 1.1: Beispiele für Partitionsnamen
Name Controller Disk Partition
hda1 IDE-Controller Erste Festplatte Erste Partition
sda1 SCSII-Controller Erste Festplatte Erste Partition
hdb3 IDE-Controller Zweite Festplatte Dritte Partition
sdc4 SCSII-Controller Dritte Festplatte Vierte Partition


1.3.3.2 Planung der Partitionen

Für ein Linux-System benötigt man mindestens zwei Partitionen, eine für die Wurzel (root) (/) und eine für die Auslagerungspartition (swap). Es ist aber oft ratsam mehrere Partitionen einzurichten. Dabei sollte dem Bootverzeichnis /boot und den Heimatverzeichnissen /home eine eigenen Partition spendiert werden.

Die Vorteile einer Aufteilung auf mehrere Partitionen sind klar.

Der Nachteil allerdings liegt in der uneffektiven Nutzung des vorhandenen Festplattenplatzes, da ohne weiteres auf einer Partition noch Platz sein kann, während die Partition eines anderen Verzeichnisses schon voll ist. Planen Sie daher vorher mit Bleistift und Papier ihre Partitionen, denn eine nachträgliche Größenänderung ist immer mit Problemen und großem Zeitaufwand verbunden.

Im Gegensatz zu DOS/Windows merkt der Benutzer nichts von der Aufteilung, da es bei Linux keine Laufwerksbuchstaben gibt, sondern die Laufwerke bzw. Partitionen in den Dateibaum eingebunden werden.

1.3.3.2.1 Kleine Plattenkapazität

Besitzt das System nur wenig Plattenplatz, so sollten möglichst wenig Partitionen angelegt werden, da jede dieser Partitionen einen ungenutzten Restplatz vorhalten muß.

1.3.3.2.1.1 Beispiel
 
Sie wollen Linux als Router auf einem alten Pentium-Rechner mit einer 1,2 GB großen Festplatte und 48 MB RAM installieren. Da der Festplattenplatz begrenzt ist, sollten sie die Platte wie folgt aufteilen:
/boot
Eine 50 MB große Partition stellt sicher, daß alle Kernels unter der Zylinder-1024-Grenze liegen.

swap
Eine 100 MB große Partition (96 MB) für den Swap-Speicher.

/
Der Rest der Platte (1050 GB) wird für eine einzige große Wurzel-Partition verwendet, die alle anderen Verzeichnisse enthält.

Sollte sich die ganze Platte unter Zylinder 1024 befinden, dann kann für das Verzeichnis /boot auf eine eigene Partition verzichtet werden.

Auf älteren Systemen kann es auch vorkommen, daß mehrere kleinere Platten vorhanden sind. In diesem Fall kann der Verzeichnisbaum auf diese Platten aufgeteilt werden. So kann z. B. für das Verzeichnis /home eine eigene Platte verwendet werden. Die Verwendung der Platten ist genau so wie die Verwendung von mehreren Partitionen auf einer Platte.

1.3.3.2.2 Große Plattenkapazität

Bei Servern, die mehrere Dutzend GB an Daten speichern müssen, ist natürlich genügen Platz für viele Partitionen. Datensicherung und benötigte Dateisysteme geben dabei die Verwendung der Partitionen vor.

1.3.3.2.2.1 Beispiel
 
Wenn wir von einem NFS-Server ausgehen, der mit 512 MB RAM und einem Plattenarray mit einer Gesamtkapazität von 100 GB ausgestattet ist, dann wäre diese Aufteilung empfehlenswert.

/boot
Eine 50 MB große Partition stellt sicher, daß alle Kernels unter der Zylinder-1024-Grenze liegen.

swap
512 MB (bzw. 4 x 128 MB) reichen für die Swap-Partition aus, da der Server extra mit viel Speicher ausgestattet wurde um Plattenzugriffe zu verhindern. Eventuell kann die Größe sogar auf 256 MB reduziert werden.

/
Da möglichst alle wichtigen Verzeichnisse eine eigene Partition bekommen sollen, reichen hier 100 MB aus.

/usr
Hier sind 2 GB vorgesehen. Praktischerweise können die hier vorhandenen Programme mit den Workstations über NFS geteilt werden.

/var
500 MB reichen aus um die Logdateien zu speichern. Auf eine eigene Partition beschränkt, können sie das System bei zu großem und schnellem Wachstum nicht zumüllen.

/tmp
Für temporäre Aufgaben sind 100 MB an Plattenplatz ausreichend. Auch hier verhindert eine seperate Partition das Überwuchern des Systems.

/home
Die restlichen 97 GB stehen dann für die Datenspeicherung übers Netzwerk zur Verfügung.

Verzeichnisse sind nicht auf lokale Partitionen beschränkt. NFS-Netzwerkverzeichnisse können die gleichen Aufgaben übernehmen. Früher, als Plattenplatz noch richtig teuer war, wurde oft das Verzeichnis /usr auf den Server ausgelagert. Heute ist dies nicht mehr so wichtig. Allerdings erleichert ein gemeinsames /usr-Verzeichnis für alle Arbeitsrechner die Wartung (Update) des Systems.

Neben diesen Argumenten kann auch die Datensicherung über die Größe der Partitionen entscheiden. So beschränkt z. B. die Größe der Sicherungsmedien unter Umständen die maximale Größe einer Partition ein.

Mehr Informationen zu Partitionen und ihre manuelle Einrichtung finden Sie im Abschnitt 10.1.


1.3.4 Der Auslagerungsspeicher

Arbeitsspeicher ist auch heute noch teuer. Deshalb benötigen gerade bei Multitasking-Systemen die Programme oft mehr Speicher als vorhanden ist. Um dem gegenzuwirken arbeiten die Betriebssysteme nicht mit dem physikalischen Arbeitsspeicher sondern mit dem virtuellen Arbeitsspeicher. Der virtuelle Arbeitsspeicher setzt sich aus dem RAM und einem Speicherbereich auf der Festplatte zusammen. Bei Linux wird der Arbeitsspeicher auf der Festplatte durch die Swap-Partition realisiert.

Für die Größe der Swap-Partition gibt es eine Faustregel. Der Auslagerungsspeicher sollte immer doppelt so groß sein, wie der eingebaute Arbeitsspeicher. Dabei sollte eine Größe von 16 MB für die Swap-Partitione nicht unterschritten werden um eine gute Funktion des Betriebssystems zu gewährleisten.

Seit Kernel 2.1.117 darf die Swap-Partition bis zu 2 GB groß werden. Die Anzahl der Swap-Partitionen kann bei der Kompilierung des Kernels festgelegt werden. Im Normalfall ist dieser Wert auf 32 eingestellt.


1.3.5 fips

Wenn Sie Linux auf einem Rechner installieren wollen, auf dem schon ein Betriebssystem läuft, stoßen Sie meistens auf das Problem, daß kein Platz mehr auf der Festplatte für eine seperate Partition mehr ist. Für diesen Fall gibt es das Programm fips. Es ermöglicht die Aufteilung einer FAT16-Partition in zwei Teile. Dabei sollte es zu keinem Datenverlust kommen, trotzdem sollte die Daten mit einem Backup gesichert werden. Vor dem Einsatz von fips1.2 sollten Sie außerdem genau die Dokumentation lesen.

Kopieren Sie die Dateien fips.exe und restorbb.exe auf eine Diskette. Eine Kopie Ihres alten MBR (Master Boot Record) wird während der Installation auf die Diskette kopiert. Dieses Backup können Sie dazu nutzen die Veränderung wieder rückgängig zu machen. Daher Diskette beschriften und gut verwahren!!!

Gleichzeitig wird der alte MBR auf dem Linux-System als /boot/boot.0300 für IDE-Platten und als /boot/boot.0800 für SCSI-Platten abgelegt.


1.4 Installation

Damit wir mit Linux arbeiten können ist es notwendig das Betriebssystem zu installieren. Die Installation ist stark abhängig von der verwendeten Distribution. Bei der SuSE-Distribution kann eine Installation von CD, Festplatte oder übers Netzwerk mit NFS, Samba (Windows Freigabe) oder FTP erfolgen. Dabei wird das Installations- und Administrationstool YaST verwendet.

Da sich die Installationsprozeduren von Distribution zu Distribution und sogar von Version zu Version unterscheiden möchte ich an dieser Stelle nicht darauf eingehen. In den bei der SuSE-Distribution mitgelieferten Handbüchern wird die Installation beschrieben. Sollten Sie dieses Skript nicht als Begleitmaterial zum Unterricht benutzen, sondern selber lernen, dann suchen Sie sich für die Installation einen erfahrenen Linux-User. In den meisten Fällen kann SuSE-Linux mit wenigen Mausklicks installiert werden, aber je nach der verwendeten Hardware kann es zu kleineren oder größeren Problemen kommen. Dies gilt übrigens auch für Windows.

Für den Unterricht ist es effektiver die Distribution auf einem Server im Netz zur Verfügung zu stellen. Erstens müssen nicht Unmengen von CDs gebrannt werden und zweitens erleichtert diese Vorgehensweise auch die nachträgliche Installation von Software im weiteren Verlauf des Unterrichts.

Deshalb nun die Beschreibung der Schritte, die vor einer Netzwerkinstallation am Client durchgeführt werden müssen.


1.4.1 Erstellung der Bootdisketten unter DOS

Um mit der Installation beginnen zu können, müssen Sie den Rechner mit einem rudimentären Betriebssystem starten (Booten). Dies erfolgt in der Regel durch eine speziell dafür vorbereitete Diskette oder CD. Sie brauchen die Medien nur ins CD-Laufwerk einzulegen und den Rechner dann zu starten. In der Bootreihenfolge des BIOS muß allerdings das CD-Laufwerk bzw. Diskettenlaufwerk vor der Festplatte kommen.

Die erste CD der SuSE Distribution ist bootfähig und in der Regel kann die Installation dann ohne Probleme durchgeführt werden. Manchmal unterstützen ältere Rechner oder SCSI-Systeme das Booten von CD nicht. Dort und um eine Netzwerkinstallation durchführen zu können, werden Bootdisketten benötigt, die ein Grundbetriebssystem starten. Diese Bootdisketten können von Diskettenimages erstellt werden. Für SuSE 8.1 gibt es eine Bootdiskette (bootdisk) und vier Moduldisketten mit Treibern (modulesX). Die beigefügten Textdateien enthalten die Liste der Treiber.

Unter DOS bzw. Windows können Sie das Programm rawrite benutzen. Sie finden das Programm auf der SuSE-Distribution auf der CD 1 im Verzeichnis /dosutils/rawrite. Die Bootimages befinden sich im Verzeichnis /disks auf der gleichen CD. Sie können also die Bootdisketten durch die Befehle

R:> dosutils\rawrite\rawrite disks\bootdisk
R:> dosutils\rawrite\rawrite disks\modules1
R:> dosutils\rawrite\rawrite disks\modules2
R:> dosutils\rawrite\rawrite disks\modules3
R:> dosutils\rawrite\rawrite disks\modules4
auf fünf 3,5''-Disketten installieren, wenn die CD im Laufwerk R: liegt. Die Disketten müssen vorher formatiert werden1.3.

1.4.2 Installation mit Bootdisketten

  1. Legen Sie die Bootdiskette ein und starten Sie den Rechner.

  2. Beim jetzt erscheinenden Auswahlmenü wählen Sie Installation.

  3. Nun wird der Kernel geladen. Da er sehr groß ist, benötigen Sie auch noch die Moduldiskette 1. Nachdem der Kernel vollständig geladen wurde, wird das System gestartet.

  4. Nun werden Sie aufgefordert eine Moduldiskette einzulegen.

  5. Sollte die Installationsroutine keine Installations-CD finden, weil der passende Treiber fehlt oder eine Netzwerkinstallation geplant ist, dann schalten Sie nun in die ``Manuelle Installation''.

  6. Wählen Sie nun die Sprache für die Installation aus. (Deutsch)

  7. Wählen Sie nun die Tastaturbelegung aus. (Deutsch)

  8. Im nun folgenden Hauptmenü finden Sie die Menüpunkte
    • Einstellung
      Hier können Sie noch mal die Sprachen für Installation und Tastatur ändern.
    • System-Information
      Beim Booten analysiert der Kernel die Hardware des Systems. Über diesen Menüpunkt können diese und Informationen über den Kernel selber aufgerufen werden. Sie erhalten Informationen über die Kernel-Meldungen, Festplatten und CD-Laufwerke, geladene Module, PCI-Bus, Prozessor, Speicher, Ein- und Ausgabeports, Interrupts, Geräte, Netzwerkkarten und DMA-Kanäle.
    • Kernel-Module (Hardware-Treiber)
      Fehlende Treiber für die Installation können hier eingebunden werden.
    • Installation / System starten
      Jetzt kann die Installation gestartet werden oder ein bereits installiertes System gebootet werden.
    • Abbruch / Reboot
      Installation abbrechen und den Rechner neu starten.
    • Power off
      Installation abbrechen und den Rechner ausschalten.1.4

  9. Sollte ein passender Treiber fehlen (z. B SCSI-Treiber), dann wechseln Sie in den Menüpunkt Kernel-Module.
    1. Dort wählen Sie die passende Rubrik aus (z. B. IDE/RAID/SCSI-Treiber laden für SCSI-Geräte).
    2. Legen Sie die angeforderte Moduldiskette ein. Die Daten werden in eine RAM-Disk geschrieben.
    3. Wählen Sie den passenden Treiber aus und geben Sie eventuell benötigte Parameter für das Modul ein.1.5
    4. Das System versucht das Modul nun zu laden. Auf Konsole 4 - zu erreichen über die Tastenkombination <ALT>+<F4> - können die Systemmeldungen angeschaut werden. Zurück geht es mit <ALT>+<F1>. Die Erfolgs- oder Mißerfolgsmeldung wird mit Return bestätigt.
    5. Über den Button Zurück landen Sie wieder im Hauptmenü.

  10. Nachdem nun alle Treiber geladen sind, geht es mit dem Menüpunkt Installation / System starten weiter.

  11. Im Installations-Menü wählen Sie Installation/Update starten.

  12. Nun muß das Quellmedium ausgewählt werden.
    CD-ROM
    Bei Auswahl dieses Menüpunkts versucht die Installationsroutine die Installations-CD bzw. DVD zu mounten. Klappt dies nicht, müssen Sie die Daten des Laufwerks per Hand eingeben.
    Netzwerk
    Festplatte

  13. Nun erscheint das eigentliche Installationsmenü. Da sich der Installationsassistent häufig ändert, möchte ich hier nicht auf die weitere Installation eingehen. Eine gute Beschreibung der Installationsroutinen finden Sie in den mitgelieferten Handbüchern.


1.5 Konfiguration mit YaST2

Im Gegensatz zu Windows, wo die Einstellungen des Systems in der nicht gerade übersichtlichen Registry gespeichert werden, existieren unter Linux viele Textdateien, die die Konfigurationswerte enthalten. So ist es möglich nur mit einem Texteditor das komplette System zu administrieren. Obwohl diese Konfigurationsdateien normalerweise gut dokumentiert sind, gehört doch etwas wissen und selbstvertrauen dazu, die Einstellung per Hand vorzunehmen.

SuSE hat für die Administration das Tool YaST2 für die graphische Oberfläche entwickelt. Es erlaubt eine wesentlich komfortablere aber nicht unbedingt schnellere Administration des Systems. Auch normale Benutzer können die YaST2 Kontrollzentrum oder die einzelnen Module aufrufen. Vor der Ausführung wird aber nach dem Passwort für root gefragt. Es ist also nicht nötig sich extra als root anzumelden um das System administrieren zu können.

Im YaST-Kontrollzentrum finden Sie die Module in verschiedenen Gruppen zusammengefaßt. Ich gehe im folgenden Abschnitt nur vereinzelt auf die einzelnen Module ein, weil die Funktionsweise vieler Module zum jetzigen Zeitpunkt zu viel weiteres Wissen erforden würde und damit den Umfang dieses Kapitels sprengen würde.

Software
Dieser Abschnitt beschäftigt sich mit der Installation, Deinstallation und Update der Software auf dem System.
Installationsquelle wechseln
YaST merkt sich die letzte Installationsquelle. Erfolgt nun die Installation von einem anderen Medium, so kann dies hier eingestellt werden.

Patch CD-Update
Für bestimmte Kunden stellt SuSE in regelmäßigen Abständen CDs mit aktuellen Patches zur Verfügung. Hier können Sie eingespielt werden.

Update des Systems
Über dieses Modul können Sie das bestehende System auf einen neuen Distributionsstand bringen, z. B. von SuSE 8.0 auf SuSE 8.1.

Online-Update
Fehlerbehebung ist ein wichtiger Faktor in der EDV. Mit dem Online-Update können Sie kleine Programme zur Fehlerkorrektor (Patches) Online herunterladen und Ihr System auf den neuesten Stand bringen.

Software installieren/löschen
Dieses Modul ermöglicht es Ihnen Pakete von der SuSE-Distribution einzuspielen, upzudaten oder wieder vom System zu entfernen.

Hardware
Wie der Namen schon erahnen läßt finden Sie hier die Möglichkeit die Hardware zu konfigurieren oder Informationen über Sie einzuholen. Spezielle für Drucker, Grafikkarte und Monitor, Festplatte, Scanner, Maus, Soundkarte und TV-Karte gibt es hier Module.
Automatische Druckererkennung
für die Installation lokaler Drucker.

Drucker bearbeiten
Mit diesem Modul können existierende Drucker bearbeitet werden und neue lokale und Netzwerkdrucker eingerichtet werden.

Grafikkarte und Monitor
Hiermit können Sie die Einstellung für die Grafikkarte ändern und die Ausgabe an den Monitor anpassen.

Hardware-Info
Liefert Ihnen eine Übersicht über die eingebaute Hardware.

IDE DMA-Modus
Hiermit können Sie den DMA-Modus (Direct Memory Access) Ihrer Laufwerke aktivieren. Dies ist z. B. für das Betrachten von DVDs wichtig.

Mausmodell wählen
Was soll ich da noch viel schreiben ...

Partitionieren
Hier gelangen Sie zu dem Tool, bei dem Sie schon bei der Installation die Festplatten Ihres Rechners in einzelne Abschnitte aufteilen können.

Scanner
Auch Scanner wollen konfiguriert werden ...

Sound
Bei der Soundkonfiguration sollten Sie die passende Lautstärke beachten und richtig einstellen. Aus Sicherheitsgründen ist die Grundeinstellung meistens sehr leise. Dies und ein sehr leise gestellter Lautsprecher haben schon oft zur falschen Annahme geführt, daß die Soundkarte unter Linux nicht funktioniert.

TV-Karten
Seit SuSE 8.0 hat sich die Unterstützung von TV-Karten sehr verbessert. Hier werden Sie automatisch erkannt und konfiguriert.

Netzwerk/Basis
Die Konfiguration von Netzwerkkomponenten (Netzwerkkarten, Modems, ISDN-Karten, etc.) oder Diensten (E-Mail, DSL, Serverdienste) wird durch die Module dieser Gruppe erledigt.

E-Mail
Konfiguration der Netzwerkkarte
Konfiguration des Modems
Konfiguration von DSL
Konfiguration von ISDN
Start oder Stopp von Systemdiensten

Netzwerk/Erweitert
Die speziellen Netzwerkfunktionen für DNS, NFS, NIS und Routing werden hier konfiguriert.

HostName und DNS
LDAP-Client
NFS-Client
NFS-Server
NIS+-Client
NIS-Client
NIS-Server
Routing

Sicherheit & Benutzer
Benutzerverwaltung und die Richtlinien zur Sicherheit (Firewall) werden hier abgehandelt.

Benutzer bearbeiten und anlegen
Einstellungen zur Sicherheit
Firewall
Gruppen bearbeiten und anlegen
Neue Gruppe anlegen
Neuen Benutzer anlegen

System
Diese Module kümmern sich um die systemnahen Einstellungen, wie Backup, Bootdisketten, Starteinstellungen, Automatisches Starten von Diensten und Grundkonfigurationen.

Backup des Systems erstellen
Boot-, Rettungs- oder Moduldiskette erzeugen
Konfiguration des Bootloaders
LVM
Runlevel-Editor
Sprache wählen
Sysconfig-Editor
Tastaturlayout auswählen
Zeitzone auswählen

Sonstiges
Hier finden Sie den Rest der YaST-Module, die SuSE nicht in eine der anderen Gruppen einordnen konnte.
Drucker für CUPS
Konfiguriert Drucker für das Drucksystem CUPS

Drucker für LPD
Konfiguriert Drucker für das Drucksystem LPD

Startprotokoll anzeigen
Ermöglicht die Anzeige der einzelnen Systemlogdateien, wobei bei diesem Modul mit /var/log/boot.msg gestartet wird.

Support-Anfrage stellen
Hier können Sie eine Anfragen an den Online-Support stellen.

Systemprotokoll anzeigen
Ermöglicht die Anzeige der einzelnen Systemlogdateien, wobei bei diesem Modul mit /var/log/messages gestartet wird.

Treiber-Cd des Herstellers laden
Ermöglicht die Installation von Treibern, die vom Hersteller der Hardware kommen.

Der folgende Abschnitt zeigt Ihnen die Administration einiger Funktionen. Diese ist im Prinzip über YaST sehr einfach. In den meisten Fällen muß man nur wissen was man will1.6 und man muß lesen können.1.7


1.5.1 Wie installiere ich weitere Softwarepakete?

Das es um Software geht, wählen Sie im YaST-Kontrollzentrum die Gruppe Software. Ein Blick auf die Liste der Module zeigt uns, daß Software installieren/löschen wohl eine gute Wahl ist. Falls Sie die Installationsquelle gewechselt haben, müssen Sie diese vorher mit dem Modul Installationsquelle wechseln neu einstellen.

Nach dem Starten des Moduls sucht YaST nach der Paketliste. Dies kann einen Moment dauern. Findet YaST kein Installationsmedium, so behilft er sich mit der letzten gespeicherten Liste.

Achtung! Installation über NFS: Sollte sich YaST bei dieser Phase aufhängen und nicht weitermachen, dann liegt es in den meisten Fällen daran, daß der NFS-Server nicht erreichbar ist. Da es sich um eine harte Verbindung handelt, dauert es sehr lange bis es zu einem Timeout kommt und YaST den Fehler bemerkt. Um diesen Fehler zu umgehen, wählen Sie vorher ein anderes Installationsmedium aus.

Nach dem Laden der Paketlisten erscheint das Auswahlfenster für die Pakete. Sie sehen dort drei Tabellen. Links oben zeigt Ihnen die Themengruppen oder Paketserien an, in die die Pakete einsortiert worden sind. Unten links sehen Sie, wieviel Platz noch auf der Festplatte vorhanden ist. Die rechte Tabelle zeigt die Pakete in der Gruppe an. Durch Doppelklicken oder Betätigen des Buttons Aus-/Abwählen können Sie den Zustand des Pakets ändern. Dieser Zustand wird durch ein Zeichen vor dem Paketnamen angezeigt. Dabei steht ein X für ein Paket, das zur Installation vorgesehen ist. Das kleine i steht für ein bereits installiertes Paket und das kleine d für ein installiertes Paket, daß deinstalliert werden soll. Auch ein kleines a kann als Markierung vorkommen. Diese Pakete wurden automatisch ausgewählt zur Installation, da diese von anderen Paketen benötigt werden. Keine Markierung bedeutet natürlich, daß dieses Paket nicht installiert und auch nichts für dieses Paket geplant ist.

Zu den meisten Paketen existiert neben der Kurzbeschreibung in der Tabelle noch eine etwas ausführlichere Beschreibung des Pakets. Diese erreichen Sie über den Button Beschreibung, was Sie natürlich nie erraten hätten. ;-)

In vielen Fällen kennt man den Namen des Programms, aber nicht in welchem Paket oder in welcher Themengruppe/Paketserie das Paket liegt. In den meisten Fällen heißt das Programmpaket genau wie das Programm. Über eine Suchfunktion (Button Suchen) können die Paketnamen und sogar die Beschreibungen nach einem Stichwort durchsucht werden.

Unter Extras finden Sie weitere Funktionen um Pakete auszuwählen oder abzuwählen. Besonders interessant ist die Möglichkeit, die aktuelle Paketauswahl abzuspeichern oder eine gespeicherte Paketauswahl einzuladen. Dadurch ist es relativ schnell möglich Rechner mit der gleichen Softwareausstattung zu installieren.

Nach der Paketauswahl, die Sie mit dem Button OK abschließen, werden die Pakete installiert. Bei der CD-Version werden Sie dann und wann aufgefordert die entsprechenden CDs einzulegen. Mit einem Fortschrittsbalken werden Sie darüber informiert, wie weit Ihre Installation ist. Nach Abschluß der Installation startet YaST das Programm SuSEConfig, daß die Konfigurationsdateien des Systems für die neuen Programmen konfiguriert.

Und schon sind die Programme installiert.


1.5.2 Wie mache ich ein Online-Update?

Keine Software ist fehlerfrei! Diesem gerne von einer Firma aus Redmond als Entschuldigung herangezogenen Satz kann ich nur zustimmen. Wer selber mal ein längeres Programm geschrieben hat, weiß, wieviel Fehler sich einschleichen können. Und wir reden hier von Programmen, deren Sourcecode ausgedruckt mehrere Aktenordner füllen würden. Programme sind fehlerhaft. Finden Sie sich damit ab.

Zum Glück gibt es so Leute, die sich nicht damit abfinden und die Fehler in Programmen bereinigen. Bei OpenSource-Software kann dies theoretisch jeder. Wohlgemerkt: theoretisch. Um sich in einem großen Programm zurechtzufinden braucht es schon etwas längere Einarbeitungszeit und gute Kenntnisse in den Programmiersprachen und natürlich der Programmierung selber.

Jedenfalls werden viele Fehler bzw. Sicherheitslücken im Laufe der Zeit in Programmen entdeckt und oft auch behoben. Um nicht das ganze Programm neu einspielen zu müssen, benutzt man sogenannte Patches (Flicken), die den Binärcode des ``alten'' Programms auf den neuesten Stand bringen. Die Fehlerkorrekturen - manche Leute reden auch von Fehlerveränderungen - können Sie manuell einspielen. SuSE bietet Ihnen den Service eines Online-Updates. Das YOU (YaST Online Update) stellt Ihnen die neuesten Patches zu den SuSE-Paketen zur Verfügung. Es stellt fest, was an neuen Patches vorhanden ist. Dann lädt es die Patches für die installierten Programme runter und installiert Sie.

Das YOU finden Sie auch im Kontrollzentrum unter Software. Nach dem Starten des Moduls sucht das System nach verfügbaren Update-Servern. Sie müssen natürlich auch eine Verbindung zum Internet besitzen.

Sie können nun zwischen manuellem und automatischem Update wählen. Entscheiden Sie sich für das manuelle Update, denn dort können Sie besser sehen, was installiert wird. Sie können auch den Server wählen, von dem Sie die Patches beziehen möchten. Dies sollten Sie tun, falls der erste Server überlastet ist.

Nun lädt YOU die Liste der zur Verfügung stehenen neuen Updates herunter. Nachdem die Verbindung beendet wurde, geht es mit Weiter weiter.

Sie sehen nun die Liste der zur Verfügung stehen Patches mit Erläuterungen. Die Patches, die Sie benötigen sind schon mit einem X gekennzeichnet zum Download vorgesehen. Sie können nun einfach mit Weiter zum nächsten Schritt, dem Herunterladen der Pakete, gehen.

Nachdem dieses auch abgeschlossen ist und Sie mit Weiter zum nächsten Bildschirm gewechselt sind, kann es nun endlich mit dem Einspielen der Patches losgehen. Danach wird noch einmal SuSEconfig gestartet um die Konfigurationsdateien anzupassen und schon ist Ihr System auf dem neuesten Stand.

1.6 Benutzer- und Gruppenverwaltung

Linux ist ein Multiuser-Betriebssystem. Dadurch ist es mehreren Personen nacheinander oder sogar gleichzeitig möglich auf einem Rechner arbeiten. Damit es zu keinem Durcheinander der Daten kommt, muss sich jeder Benutzer eindeutig identifizieren, wenn er mit Linux arbeiten möchte. Außerdem gehört jeder Benutzer mindestens einer Gruppe an. Jeder Benutzer bekommt einen eindeutigen Namen und damit er sich auch authentifizieren kann ein Passwort.

Für die Benutzerverwaltung finden wir in der Gruppe Sicherheit & Benutzer die Module Benutzer bearbeiten und anlegen, Neuen Benutzer anlegen, Gruppen bearbeiten und anlegen und Neue Gruppen anlegen.

Diese Module sind Frontends zu der eigentlichen Benutzerverwaltung von Linux. Ein Frontend ist ein Programm, das eigentlich nichts selber macht, sondern sich als Bedienungselement zwischen den Benutzer und dem eigentlichem Programm setzt. Das Ziel eines Frontends ist es, die Bedienung von Programmen und Konfigurationsdateien zu erleichtern und damit komfortabler und fehlerfreier zu machen.

Die Konfigurationsdateien für die Benutzerverwaltung befinden sich wie die meisten Konfigurationsdateien im Verzeichnis /etc. Die Liste der Benutzer ist in der Datei /etc/passwd abgelegt. Die Passwörter befinden sich in der Datei /etc/shadow. Deren Aufbau und Arbeitsweise wird in einem späteren Kapitel behandelt.


1.6.1 Wie erstelle, bearbeite und lösche ich Benutzer?

Die Module Benutzer bearbeiten und anlegen und Neuen Benutzer anlegen sind für die Benutzerverwaltung verantwortlich.


1.6.1.1 Neuen Benutzer anlegen

Um einen neuen Benutzer anzulegen, starte Sie das Modul Neuen Benutzer anlegen. Im nun erscheinenden Fenster können Sie den Benutzernamen und das Passwort des neuen Benutzers eintragen.

Bei der Eingabe eines Passworts müssen Sie zwischen Groß- und Kleinschreibung unterscheiden. Ein Passwort sollte mindestens fünf Zeichen lang sein und darf keine Sonderzeichen (z. B. Akzente) enthalten. Sie können für die Passwörter Buchstaben, Zahlen, Leerzeichen und die Zeichen #*,.;:._-+!$%&/|?{[()]}. verwenden. Es ist ausreichend, ein Passwort mit der Länge von maximal acht alphanumerischen Zeichen zu wählen. Alle darüber hinausgehenden Zeichen werden bei der normalerweise eingestellten Crypt-Verschlüsselungen ignoriert. Das Passwort müssen Sie zweimal eintragen, da es aus Sicherheitsgründen nicht angezeigt wird. So können die meisten Tippfehler verhindert werden.

Für die Benutzernamen und Passwörter gibt es Regeln. So darf der Benutzername nur aus Kleinbuchstaben, Ziffern, ``-'' und ``_'' bestehen und muß mit einem Buchstaben oder ``_'' beginnen. Dies ist aber nur eine Vorgabe von YaST. Linux selber erlaubt auch Großbuchstaben und andere Zeichen für den Benutzernamen.

Die Felder Vorname und Nachname sind eigentlich Spaß. Die entsprechenden Daten werden nur in das Kommentarfeld des Benutzers in der Datei /etc/passwd eingetragen.

Hinter dem Button Details verbergen sich weitere Einstellungsmöglichkeiten wie Home-Verzeichnis oder die Benutzerkennung (UID).

Jedem Benutzer bekommt eine eindeutige Benutzerkennung (UID) zugewiesen. Für normale Benutzer sollte eine UID größer als 499 verwendet werden, da die kürzeren UIDs vom System für spezielle Zwecke und Pseudo-Benutzernamen verwendet werden.

Benutzer können durch eine Mitgliedschaft in einer Gruppe weitere Rechte bekommen. Zu jedem Benutzer gehört eine Standardgruppe in der er Mitglied ist. In dem Feld Standardgruppe können Sie eine Gruppe aus der Liste aller in Ihrem System vorhandenen Gruppen wählen.

Zusätzliche Gruppenzugehörigkeiten können sie über das entsprechende Feld dem Benutzer zuweise. Hier wird angezeigt, zu welchen Gruppen der Benutzer noch gehört.

Der Benutzer kann auch ein Heimatverzeichnis (Home Directory) besitzen um seine Daten zu dort zu speichern. Normalerweise ist dies /home/BENUTZERNAME.

Für den Betrieb auf der Konsole (Textbetrieb) wird eine Login-Shell (der sog. Kommandozeileninterpreter) benötigt. Wählen Sie im entsprechenden Feld eine Shell aus der Liste der auf Ihrem System installierten Shells aus.


1.6.1.2 Benutzer bearbeiten und anlegen

Eine Übersicht der angelegten Benutzer liefert das Modul Benutzer bearbeiten und anlegen. Beim Start werden nur die normalen Benutzer angezeigt. Sie können sich aber auch die für interne Zwecke (z. B. Serverdienste) angelegten Systembenutzer anzeigen lassen. Durch anklicken der Spaltenüberschriften können Sie die Sortierung der Spalten ändern.

In diesem Fenster stehen Ihnen drei Funktionen zur Verfügung:

Wenn Sie den Button Hinzufügen betätigen landen Sie im gleichen Fenster wie in dem Module Neuen Benutzer anlegen.

Auch nachdem Sie den Button Bearbeiten landen Sie im gleichen Fenster wie in dem Module Neuen Benutzer anlegen. Nur daß die Felder nicht leer sondern mit den Daten des zu bearbeitenden Benutzers gefüllt sind.

Wenn Sie den markierten Benutzer löschen wollen, dann betätigen Sie einfach den Button Löschen. Sie werden dann noch gefragt, ob das Heimatverzeichnis des Benutzers auch mit gelöscht werden soll. Wenn Sie sich dann fürs Löschen entscheiden ist es vorbei mit dem Benutzer.

Vorbei? Nicht ganz. Die Änderungen werden erst dann ins System übertragen, wenn Sie mit dem Button Beenden das Modul verlassen. Das Verlassen über den Button Abbrechen läßt das System unberührt.


1.6.2 Wie erstelle, bearbeite und lösche ich Gruppen?

Um bestimmten Mengen von Benutzern mehr Rechte zu geben, wurden die Gruppen entwickelt. Benutzer können Mitglied in einer Gruppe sein und haben dann die Rechte, die der Gruppe zugewiesen wurde, zusätzlich zu Ihren eigenen Rechten.

Die Module Gruppen bearbeiten und anlegen und Neue Gruppen anlegen sind für die Verwaltung der Gruppen zuständig.


1.6.2.1 Neue Gruppen anlegen

Nach dem Start des Moduls Neue Gruppen anlegen erscheint ein Fenster mit Einträgen für den Gruppennamen, die Gruppenkennung, dem Passwort und den Mitgliedern für die Gruppe.

Der Name der Gruppe sollte nicht zu lang sein. Normalerweise werden 1-10 Zeichen verwendet. Ansonsten gelten die gleichen Regeln wie für die Benutzernamen.

Wie auch die Benutzer haben die Gruppe eine interne Kennung. Diese GID liegt irgendwo zwischen 0 und 60000. Einige der IDs werden bereits während der Installation vergeben. YaST2 gibt eine Warnmeldung aus, wenn Sie aus Versehen eine bereits vergebene verwenden.

Auch Gruppen haben ein Passwort. Falls die zugehörigen Benutzer der Gruppe sich beim Wechseln in diese neue Gruppe identifizieren sollen, können Sie dieser Gruppe ein Passwort zuteilen. Aus Sicherheitsgründen wird dieses Passwort hier nicht angezeigt. Dieses Eingabefeld muss nicht ausgefüllt werden. Um Tipfehler zu vermeiden, müssen Sie das Passwort zweimal eingeben.

Das Fenster Mitglieder dieser Gruppe zeigt eine Liste aller angelegten Benutzer an. Hier können Sie einstellen, wer Mitglieder dieser Gruppe sein soll.


1.6.2.2 Gruppen bearbeiten und anlegen

Das Modul Gruppen bearbeiten und anlegen zeigt eine große Ähnlichkeit mit dem Modul Benutzer bearbeiten und anlegen. Kein Wunder, es ist dasselbe Programm. Ein Klick auf Benutzerverwaltung und schon sind Sie in dem bereits bekannten Fenster. Dementsprechend gibt es hier auch drei Funktionen.

Beim Anlegen und Bearbeiten einer Gruppe landen Sie im gleichen Fenster wie im Modul Neue Gruppen anlegen.

Das Löschen von Gruppen gestaltet sich etwas schwieriger, da erst alle Benutzer aus der Gruppe entfernt werden müssen, bevor sich die Gruppe löschen läßt.

Auch hier gilt, alle Änderungen werden erst nach dem Verlassen des Moduls über den Button Beenden in das System übertragen.


Notizen:
Notizen:

Erste Schritte % latex2html id marker 1259
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

Die Ausführung der folgenden Aufgaben ist wichtig für alle folgenden Aufgaben. Führen Sie daher bitte alles aus. Eventuell haben Sie die Aufgaben schon begleitend zum Unterricht bzw. zur Lektüre gemacht.

1
Ermitteln Sie die Hardwarekonfiguration des Rechners (Graphikkarte, Festplatte, Netzwerkkarte, Monitor).

2
Ermitteln Sie die IP-Nummer, die Subnetzmaske, den Nameserver, den Namen, und das Standardgateway des Rechners an dem Sie arbeiten.

3
Beginnen Sie mit der Installation durch YaST2. Beschreiben Sie ausführlich alle Schritte der Installation und erstellen Sie damit ein ``Kochrezept'' für die zukünftigen Installationen. Dabei soll folgendes berücksichtigt werden:
  1. Legen Sie folgende Partitionen an:
    /
    mit 5 GB als primäre Partition (ext3)
    /home
    mit 3 GB als logisches Laufwerk (ext3)
    swap
    mit 256 MB als logisches Laufwerk
  2. Für die Paketauswahl wählen Sie KDE mit Office.
  3. Richten Sie das Netzwerk mit den übergebenen Werten ein.

4
Sie besitzen einen Rechner, bei dem das CD-Laufwerk über einen Adaptec SCSI-Controller 2940 läuft. Auf welchem Moduldiskettenimage befindet sich der dafür benötigte Treiber?

5
Welche Installationsmöglichkeiten (Quelle) können verwendet werden?

6
Legen Sie mit YaST2 den Benutzer walter mit der UID 5101.8 und dem Paßwort hallo an.

7
Installieren Sie mit YaST2 aus der Serie ap das Paket pdksh.

8
Installieren Sie mit YaST2 die Pakete stat, rman, locate und koffice nach. In welchen Serien liegen sie und wofür sind sie da?

9
Speichern Sie die aktuelle Paketkonfiguration im Heimatverzeichnis von root (/root) unter dem Namen config_kap1.usr ab.

10
Löschen Sie die Pakete stat, rman, locate und koffice.

11
Laden Sie nun die alte Paketkonfiguration aus Aufgabe 9 ein. Überprüfen Sie, ob die gerade gelöschten Pakete nun wieder zur Installation vorgesehen sind.

12
Installieren Sie wieder die Pakete stat, rman, locate und koffice.

13
Auf dem zur Installation vorgesehenen Rechner mit zwei IDE-Festplatten (Master und Slave auf dem ersten Kontroller) soll Linux installiert werden. Auf der Master-Platte befindet sich eine Windows-Installation mit eine primären Partition, einer erweiterten Partition und einer logischen Partition. Auf der erweiterten Partition ist noch Platz für eine logische Partition. Auf der zweiten Festplatte befindet sich auch eine primäre Partition für Windows, die bestehen bleiben soll. Diese Partition ist die erste auf der Slave-Platte.

Für die Linux-Installation sind zusätzlich zu den Standardpartitionen noch Partitionen für das Verzeichnis /home und /var geplant. Skizzieren Sie den Aufbau des Partitionsschema unter Berücksichtigung einer sinnvollen Aufteilung und unter Verwendung der Linux-Partitionsbezeichnungen.


Notizen:


2. X-Window und KDE


2.1 X-Window-System

Bei der Installation von SuSE-Linux in der oben genannten Konfiguration wird standardmäßig das X-Window-System mit dem KDE installiert. Das X-Window-System kann am besten durch die Tools sax bzw. sax2 konfiguriert werden. Einstellungen über Graphikkarte, Monitor, Auflösung, Tastatur und Maus erfolgen hier.

Für die Bedienung und Arbeit am X-Window-System wird ein Window-Manager benötigt. Er kümmert sich in erster Linie darum, wie die Programmfenster am Bildschirm dargestellt und bedient werden. Er stattet die Fenster mit einer Titelleiste und Schaltflächen (Buttons, Menüs etc) aus und hilft bei deren Verwaltung (Verschieben, Größe ändern, Verkleinern zu Icon, Programmwechsel). Daneben stellen die meisten Windowmanager Menüs für die gängigen Programme bereit.

Diese elementaren Funktionen werden nicht vom X-Window-System zur Verfügung gestellt. Der Vorteil dieser Methode ist die große Flexibilität bei der Gestaltung der Oberfläche und damit der Benutzerschnittstelle. Das hat aber auch den Nachteil, daß jeder Anwender einen anderen Windowmanager benutzt und damit keine einheitliche Oberfläche existiert. Ein Problem, daß vor allem die Anfänger betrifft.

Die aktuelle SuSE-Distribution startet automatisch das X-Window-System für die graphische Anmeldung. Wird das System mit der Textkonsole gestartet, kann von der Textkonsole aus das X-Window-System mit dem Befehl startx gestartet werden.

Sollte das X-Window-System sich aufhängen, kann es mit der Tastenkombination STRG + ALT + BACKSPACE beendet werden.


2.2 KDE

Das KDE (KDE Desktop Enviroment) ist eine Sammlung von X-Programmen mit einem Window-Manager für das X-Window-System. Es stellt wie auch die anderen Windowmanager (z. B. Gnome oder fvwm) die Schnittstelle zwischen Benutzer und dem X-Window-System dar. Das KDE umfaßt dabei nicht nur die Konfigurationstools sondern auch eine Vielzahl von Standardprogrammen.

Noch einige Hinweise zu KDE.


2.2.1 KDE-Kontrollzentrum: KControl

Das KDE-Kontrollzentrum (KControl) ist das zentrale Konfigurationsprogramm fürs KDE. Grundlegende Eigenschaften wie Sprache, Desktopdesign, Sound u. a. können hier eingestellt werden.


2.2.2 KDE-Systemüberwachung: KSysGuard

Die KDE-Systemüberwachung zeigt Ihnen Informationen über das System und die darauf laufenden Prozesse an. Sie können im KDE-Menü über KDE/System/Systemüberwachung das Programm starten. Alternativ geben Sie über KDE/Befehl ausführen den Befehl ksysguard ein.

Das Programm präsentiert sich nach dem Start mit einem fast leeren Feld links und vier Graphen rechts. Warten Sie einen Moment und Sie sehen langsam von rechts die aktuellen Werte des Systems in die Graphen wandern.

2.2.2.1 Bedeutung der Graphen

2.2.2.1.1 CPU Load

Der Graph zeigt die Auslastung der CPU an. Drei Kurven können sie erkennen. Blau ist die Auslastung des Prozessors durch Benutzeraktionen, Rot die Auslastung durch Systemprozesse und Hellbraun die Auslastung durch Programme, die mit einer veränderten Priorität gestartet wurden.

2.2.2.1.2 Load Average 1min

Die auf eine Minute gemittelte Auslastung des Systems wird in diesem Graphen dargestellt. Da die CPU einem Programm immer die volle Leistung zur Verfügung stellt wenn nichts anderes anliegt, kommt es immer wieder zu CPU-Auslastungen von 100%. Dies können aber auch nur einzelne Peaks sein. Die über eine Minute gemittelte Auslastung gibt mehr Aufschlüsse über die Dauerbelastung eines Rechners.

2.2.2.1.3 Physical Memory

Die Auslastung des physikalischen Speichers ist ebenso wie die CPU-Leistung ein Kriterium für die Belastung des Rechners. Auf den ersten Blick scheint es so, als ob der Speicher, selbst wenn kaum Programme auf dem System laufen, völlig belegt ist. Das stimmt auch soweit, da der Kernel den freien Speicher als Cache für Laufwerkszugriffe verwendet. Es werden nämlich auch hier drei Graphen angezeigt. Blau zeigt den Speicherbedarf der Programme an, dunkles Orange den Bedarf des Puffers, und Hellbraun ist die Farbe für den Festplattencache.

2.2.2.1.4 Swap Memory

Neben dem physikalischen Speicher gibt es noch den Swap-Speicher, der als Auslagerungsdatei auf einem Datenträger realisiert ist. Beide zusammen ergeben den virtuellen Speicher, der dem System zur Verfügung steht. Hier heißt es genau zu beobachten. Denn wenn sich auf diesem Graphen viel tut, sollte man überlegen, ob nicht etwas mehr physikalischer Speicher dem Rechner gut tun würde.

2.2.2.2 Sensor-Browser

Im linken Fenster finden Sie für den lokalen Rechner die möglichen Sensoren, deren Werte Sie in den rechten Graphen anzeigen können. Einfach den Sensor anklicken und ihn in den entsprechenden Graphen ziehen. Einen Graphen können Sie übrigens löschen, indem Sie mit der rechten Maustaste darauf klicken und Anzeige entfernen betätigen.

Über die genaue Bedeutung der einzelnen Anzeige möchte ich jetzt nicht eingehen, da dies den Umfang dieses Kapitels sprengen würde.

2.2.2.3 Prozesstabelle

Neben der Systemauslastung können Sie sich auch die laufenden Prozesse (Programm bzw. Programmteile) anzeigen lassen. In einer Tabelle werden für die Prozesse der Name, die Prozessidentifikationsnummer (PID), die Systemauslastung durch Benutzer und das System, die Priorität des Prozesses, der Speicherbedarf, der ausführende Benutzer und der aufrufende Befehl angezeigt. Die Bedeutung der einzelnen Spalten ergibt sich im Laufe dieses Skriptes. Hier an dieser Stelle seien Sie nur erwähnt.

Sie können auch eine Auswahl der anzuzeigenden Prozesse treffen. Sie können sich entweder Alle Prozesse, die laufen, sich anzeigen lassen oder sich auf die Systemprozesse beschränken. Auch können Sie sich nur mit den Benutzer abgeben und sich die Benutzerprozesse anzeigen. Wenn Sie ganz genügsam sind, begnügen Sie sich mit Eigene Prozesse.

Wenn Sie wissen wollen, welcher Prozess durch welchen Prozess gestartet wurde, dann wählen Sie die Baum-Ansicht. Den neuesten Stand der Prozessliste können Sie mit dem Button Neu Aufbauen erzeugen. Der wichtigste Button ist wohl Beenden (kill), der durch seinen zweiten martialischen Namen schon anzeigt was er macht: Er tötet Prozesse. So können Prozesse, die sich sonst nicht mehr beenden lassen, gestoppt werden.

Wenn Sie ganz schnell an die Prozessliste herankommen wollen, dann betätigen Sie einfach die Tasten <STRG>+<ESC>. Es öffnet sich der KSysGuard mit der Ansicht der Prozeßtabelle. Nun können Sie schnell einen Prozess töten oder sich über das Verhalten der Prozesse informieren.

2.3 Wie mache ich was?

2.3.1 Wie lege ich ein Programmicon auf dem Desktop an?

Am einfachsten können Sie ein Icon anlegen, wenn das Programm schon einen Eintrag im KDE-Menü besitzt. Mit der linken Maustaste auf den Punkt klicken und mit gedrückter Maustaste auf den Desktop ziehen. Dort dann im nun erscheinenden Menü auf An diese Stelle kopieren klicken. Fertig.

Wollen Sie ein Programm auf dem Desktop verewigen, was nicht im Menü erscheint, dann müssen Sie wie folgt vorgehen.

  1. Rechte Maustaste auf den Desktop
  2. Menüpunkt Neu erstellen/Verknüpfung mit Programm ... anklicken
  3. Im Reiter Allgemein den Namen der Verknüpfung eingeben
  4. Durck Klicken auf das Zahnrad-Symbol können Sie ein Symbol für das Programm auswählen
  5. Im Register Ausführen geben Sie den Namen der Programmdatei an. Der Button Durchsuchen ermöglicht Ihnen das Dateisystem nach der Datei zu durchsuchen. Die meisten X-Window Programme finden Sie im Verzeichnis /usr/X11R6/bin, /opt und /opt/kde3/bin.
  6. Mit OK bestätigen und fertig ist das Icon.

2.3.2 Wie kann ich ein Programm unter einem anderen Benutzer ausführen?

Manchmal ist es notwendig bestimmte Aufgaben unter einer anderen Benutzerkennung auszuführen, wie z. B. das Editieren von Systemkonfigurationsdateien. Auf diese Dateien können Sie aber als normaler Benutzer nicht zugreifen. Normalerweise müßten Sie sich jetzt als Benutzer ausloggen und wieder als priviligierter Benutzer (z. B. root) sich wieder einloggen. Das es auch anders geht, haben Sie beim Einsatz von YaST gesehen. Nach Eingabe des root-Passworts konnten Sie ohne Ab- und Anmeldung mit YaST arbeiten. Verantwortlich dafür ist das Programm kdesu (2.3.3).

Wenn Sie nun ein Programm als root starten wollen, müssen Sie im X-Terminal oder über Befehl ausführen (<ALT>+<F2>) einfach kdesu PROGRAMM eingeben. Also für den Editor NEdit z. B.
kdesu nedit.

Wer den Befehl häufiger braucht, kann sich einen Menüeintrag oder Icon auf dem Desktop anlegen. In den Eigenschaften des Eintrags/Icons befindet sich der Abschnitt Als anderer Benutzer ausführen. Hier einfach die Checkbox anklicken und den gewünschten Benutzernamen eintragen.


2.3.3 KDE su

KDE su erlaubt es X-Window-Programme unter einer anderen Benutzeridentität auszuführen als die des aktuellen Benutzers. Es ist ein graphisches Frontend für su (8.1.2) unter dem KDE. Dabei werden die für das X-Window benötigten Einstellungen entsprechend gesetzt.
kdesu [OPTIONEN] [QT-OPTIONEN] [KDE-OPTIONEN] KOMMANDO

Optionen
--help Grundoptionen
--help-qt Spezielle Optionen zu Qt anzeigen
--help-kde Spezielle Optionen zu KDE anzeigen
--help-all Alle Optionen anzeigen
-c BEFEHL Auszuführender Befehl
-f DATEI
-u USER Benutzerkennung angeben (Standard: root)
-n Passwort nicht speichern
-s Dämon anhalten (Alle Passwörter gehen verloren)
-t Terminal-Ausgabe ermöglichen (keine Speicherung von Passwörtern)
-p PRIO Priorität setzen: 0 <= prio <= 100, 0 ist die niedrigste. (Standard: 50)
 

2.3.3.0.1 Beispiel

 
Um den Editor NEdit unter dem Benutzer wwwrun auszuführen, müssen Sie folgenden Befehl anwenden.
kdesu -u wwwrun -c nedit

2.4 KDE-Programme

Inzwischen gibt es eine Reihe von Programmen, die speziell für das KDE geschrieben worden sind. Sie basieren auf den KDE-Bibliotheken und benötigen diese zwingend.


2.4.1 Konquerer

Der Konquerer ist nicht nur der mit dem KDE mitgelieferte Browser sondern auch gleichzeitig der Dateimanager. Da er relativ neu ist, hat er noch längst nicht alle Internet-Standards (besonders JavaScript) völlig implantiert.


2.4.2 KEdit und KWrite

Auch an Editoren wurde beim KDE gedacht. KEdit und KWrite sind hierfür entwickelt worden. KEdit ist die einfache Version des Editors, während KWrite neben Syntaxhighlighting auch Suchen und Ersetzen mit regulären Ausdrücken beherrscht.


2.4.3 KMail

Das Programm KMail ist, wie der Name es schon sagt, der Mail-Client vom KDE.


2.4.4 KSnapshot

Für Dokumentationen ist es oft sinnvoll einen Bildschirmschnappschuß machen zu können. Diese Funktion wird durch das Programm KSnapshot zur Verfügung gestellt.


2.4.5 KOffice

KOffice ist das fürs KDE entwickelte Office-Paket. Es enthält schon viele Programme, die aber entwicklungsbedingt noch nicht so viele Funktionen besitzen und teilweise auch etwas instabil sind.


2.4.5.1 KWord

KWord ist die Textverarbeitung.


2.4.5.2 KSpread

Die Tabellenkalkulation des KDE-Office ist KSpread. Allerdings beherrscht es wenige Datenformate, so daß hier das StarCalc vorzuziehen ist, daß auch Excel-Formate lesen und speichern kann.

2.4.6 Weitere KDE-Programme


2.4.6.1 KNode

Newsgroups können mit dem Programm KNode bearbeitet werden. Das Lesen und Senden von Artikeln werden von diesem Client-Programm erledigt. In Abschnitt 6.2.2 wird genauer auf das Programm eingegangen.


2.4.6.2 KAB

Das KDE-Adressbuch ist eine kleine Datenbank zur Verwaltung von Adressdaten wie Telefonnummer, eMail, Adresse u.s.w. Dabei können auch mehrere Adressen für eine Person eingegeben werden. Das KAB kann auch als Adressbuch für KMail benutzt werden.


2.4.6.3 KOrganizer

Einen Zeitplaner enthält KDE ebenfalls. Mit dem KOrganizer können Sie Ihre Termine planen und sich z. B. rechtzeitig an den Hochzeitstag erinnern lassen.


2.4.6.4 KCalc

Auch das KDE bringt einen Taschenrechner mit, der sogar die Punkt-vor-Strich-Regel beherrscht.


2.4.6.5 KJots

KJots ist ein kleines Programm um einfache Notizbücher zu verwalten. Sie können mehrere Notizbücher verwalten, die wiederum benannte Seiten enthalten in denen dann einfache Texte eingegeben werden können.


2.4.6.6 KNotes

Sie kennen doch sicherlich die gelben PostIt-Notizzettel. Das Programm KNotes ermöglicht Ihnen virtuelle Klebezettel auf den Bildschirm zu kleben und dort Ihre Erinnerungshilfen zu plazieren.


2.4.6.7 KBear

Auch einen komfortablen FTP-Client gibt es unterm KDE. Zwar kann man auch mit Hilfe des Konquerers Daten per FTP hin- und herschieben. Das Programm KBear ist durch die Arbeitsweise mit zwei Fenstern und dem Site-Manager wesentlich komfortabler.


2.5 Weitere X-Window-Programme

Neben den KDE-Programmen gibt es auch weitere nützliche Applikationen, die teils auch die KDE-Bibliotheken benutzen.

Eine hilfreiche Unterstützung bei der Erstellung von HTML-Seiten bieten die Programme Bluefish und Quanta Plus. Windows Nutzern wird die Ähnlichkeit der beiden Programme zum HTML-Editor Phase V auffallen.

Ein weiterer schöner Editor ist NEdit. Er benötigt kein KDE und stellt doch wichtige Funktionen wie Syntax-Highlighting und `Suchen und Ersetzen' mit regulären Ausdrücken zur Verfügung.

Erste Schritte % latex2html id marker 1768
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

Die Ausführung der folgenden Aufgaben ist wichtig für alle folgenden Aufgaben. Führen Sie daher bitte alles aus. Eventuell haben Sie die Aufgaben schon begleitend zum Unterricht bzw. zur Lektüre gemacht.

14
Legen Sie mit YaST2 den Benutzer willi (Willi Winzig) mit der UID 511 und dem Passwort winzig an. Geben Sie ihm zusätzlich noch die Mitgliedschaft in der Gruppe disk.

15
Loggen Sie sich aus und als willi wieder ein.

16
Konfigurieren Sie für willi das KDE so, daß der KDE-Menübutton angezeigt wird und das Eclipse-Design vom KDE verwendet wird.

17
Loggen Sie sich aus und als walter wieder ein.

18
Vor der ersten Verwendung einer Diskette muß diese formatiert werden. Dazu kann das Programm KFloppy verwendet werden. Unter welchem KDE-Menüpunkt ist es zu finden?

19
Formatieren Sie nun als walter die Diskette mit dem Dateisystem ext2 vollständig und geben Sie ihr den Namen ``Disk''.

20
Installieren Sie mit YaST2 aus der Gruppe Produktivität/Editoren/Andere das Paket pdksh. Wieviel Platz benötigt es und wofür ist es da?

21
In welchem Verzeichnis ist die Datei nedit installiert worden.

22
Legen Sie für das Programm nedit ein Menüeintrag unter KDE/Editoren. Das Programm soll durch die Tastenkombinations <Windows>+<n> gestartet werden. Testen Sie die Funktion.

23
Legen Sie für das Programm nedit ein Icon auf dem Desktop an. Testen Sie die Funktion.

24
Öffnen Sie mit NEdit die Datei /etc/motd. Tragen Sie statt des vorhandenen Spruchs ein: ``It's a good day to die ...'' und speichern Sie die Datei wieder ab. Was passiert und warum.

25
Um sich nicht ständig als root anmelden zu müssen um Systemdateien zu ändern, soll NEdit auch als root Benutzer arbeiten können. Wie gehen Sie vor?

26
Führen Sie die Aufgabe 11 mit dem neuen Icon durch.

27
Testen Sie den Erfolg, indem Sie sich auf Konsole 2 als walter einloggen. Hat es geklappt?

28
Kehren Sie zum KDE-Desktop zurück.

29
Beenden Sie alle geöffneten Programme.

30
Legen Sie folgende Tastaturkürzel für Programme an.

Persönliches Verzeichnis <Windows>+<E>
Konquerer (Webbrowser) <Windows>+<K>
KMail <Windows>+<M>
Yast2 <Windows>+<Y>
KCalc <Windows>+<T>

Testen Sie den Erfolg.

31
Starten Sie den Konquerer als Webbrowser. Gehen Sie zur Seite von GMX (http://www.gmx.de) und erstellen dort ein neues eMail-Konto.

32
Tragen Sie in das KDE-Adressbuch Ihren Nachbarn mit seinem GMX-Konto ein.

% latex2html id marker 1888
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

33
Welche Angaben benötigen Sie um mit KMail eMails von ihrem GMX-Konto lesen und versenden zu können?

34
Suchen Sie die Angaben auf der Webseite von GMX und notieren Sie sich die Daten auf einem KNotes-``Zettel''. Konfigurieren Sie KMail entsprechend den Angaben für das GMX-Konto.

35
Schicken Sie Ihrem Nachbarn als Test eine eMail unter Verwendung des KDE-Adressbuchs.

36
Rufen Sie mit KMail die von ihren Nachbarn zugesandten eMails ab.

37
Führen Sie mit YaST2 erneut ein Online-Update durch. Sind neue Programme installiert worden?


Notizen:


3. Arbeiten auf der Shell

 
Wie kastriert man einen Windows-Benutzer?
Man schneidet einfach das Mauskabel durch...
 

 
Anonymous
 

Das KDE und damit auch das X-Window-System sind nur auf Linux aufgesetzt und dienen als Benutzeroberfläche. Es gibt aber auch eine wesentlich rudimentärere Möglichkeit für den Benutzer mit Linux zu arbeiten: die Shell (engl. Muschel). Andere Begriffe für die Shell sind Kommandozeile, Textmodus oder Prompt.


3.1 Starten der Shell

Die Shell steht auf jedem Linux-System zur Verfügung. Es gibt zwei Möglichkeiten mit der Shell zu arbeiten. Unter dem X-Window-System gibt es sogenannte X-Terminals, die eine solche Shell emulieren. Daneben steht die sogenannte Linux-Konsole zur Verfügung, die im Textmodus der Graphikkarte arbeitet und auch ohne X-Window-System funktioniert.


3.1.1 Linux-Konsole

Die Linux-Konsole erreichen Sie aus dem X-Window-System, indem Sie die Tasten <STRG>+<ALT>+<F1> gleichzeitig drücken. Unter SuSE ist diese Konsole sehr bunt und mit einem Hintergrund versehen. Dies ist der Bildschirm, den Sie auch beim Booten des Systems gesehen haben. Die letzten Meldungen des Bootvorgangs stehen noch dort.

Welcome to SuSE Linux 9.0 (i586) - Kernel 2.4.21-199-athlon (tty1)
Mit dieser Meldung, die Ihnen die Distribution und das eingesetzte Betriebssystem mit Versionsnummer und Kernelversion anzeigt, begrüßt Sie das System. Danach steht der Login-Prompt mit Rechnername und wartet darauf, daß Sie sich an dieser Konsole anmelden.
defiant login:

Geben Sie nun Ihren Benutzernamen ein und schließen Sie die Eingabe mit der <Return>-Taste oder <Enter> ab. Sie werden nun nach Ihrem Passwort gefragt. Dies geben Sie ein und schließen die Eingabe wieder mit <Return> oder <Enter> ab. Wundern Sie sich nicht, denn Linux zeigt bei der Eingabe eines Passworts generell nichts an, noch nicht einmal die bei Windows üblichen Sternchen.

defiant login: walter
Password:

Have a lot of fun ...
walter@defiant:~>

Ein netter Spruch wird ausgegeben und der Prompt erscheint. Der Prompt zeigt an, daß die Shell bereit ist von Ihnen ein Kommando zu bekommen.

Wenn Sie SuSE benutzen, stehen Ihnen sechs von diesen Konsolen zur Verfügung. Mit den Tasten <ALT>+<F1> bis <ALT>+<F6> können Sie zwischen den Konsolen wechseln. Sie sehen, daß die Konsolen 2 bis 6 einen schwarzen Hintergrund besitzen und die gleiche Begrüßungsmeldung enthalten. Dabei weißt das tty in der Klammer immer auf die jeweilige Konsole hin.

Wechseln Sie wieder zur ersten Konsole (<ALT>+<F1>). Geben Sie dort am Prompt tty ein und schließen Sie die Eingabe mit <Return> oder <Enter> ab. Der Befehl zeigt Ihnen nun an, auf welcher Konsole sie sich befinden.

walter@defiant:~> tty
/dev/tty1

Um die Shell zu beenden, geben Sie das Kommando logout ein. Denken Sie daran, daß jedes Kommando erst dann ausgeführt wird, wenn Sie es mit <Return> oder <Enter> abschließen.

walter@defiant:~> logout


Welcome to SuSE Linux 8.0 (i386) - Kernel 2.4.18-4GB (tty1)


defiant login:

Nun ist die Konsole wieder zur Anmeldung bereit. Jetzt müssen Sie nur noch zum X-Window-System zurückkehren. Das X-Window-System ist praktisch die siebente Konsole. Sie können also mit <ALT>+<F7> dorthin gelangen.

Wenn Sie schon auf der Konsole sind, können Sie alle Konsolen bzw. Terminals durch die Kombination von <ALT> und den Funktionstasten <F1> bis <F6> erreichen. Da die <ALT>-Taste unter KDE bzw. X-Window eine andere Bedeutung hat, können Sie hier die Konsolen über eine Kombination von <STRG>+<ALT> und den Funktionstasten <F1> bis <F6> erreichen.


3.1.2 X-Terminal

Für den Benutzer eines X-Window-Systems gibt es auch eine andere Methode um auf der Shell arbeiten zu können. Sogenannte X-Terminals emulieren die Linux-Konsole und bringen ein Textfenster auf den Bildschirm. Zum Starten des beim KDE mitgelieferten X-Terminals konsole brauchen Sie in der Menüleiste nur auf den Monitor mit der Muschel klicken.

An diesem Terminal brauchen Sie sich nicht anzumelden, da Sie sich durch die graphische Oberfläche schon in einer angemeldeten Sitzung befinden. Es erscheint also sofort der Prompt. Testen Sie doch mal, was der Befehl tty hier für ein Ergebnis zeigt.

ole@defiant:~> tty
/dev/pts/1

Es gibt eine ganze Reihe von X-Terminals mit z. T. sehr unterschiedlichen Fähigkeiten.

3.1.2.1 xterm

xterm ist der Klassiker unter den X-Terminals. Er ist sehr einfach. Sie können ihn starten, in dem Sie den Menüpunkt Befehl ausführen ... aus dem KDE-Menü wählen oder mit den Tasten <ALT>+<F2> das Ausführungsfenster aufrufen. Dort können Sie durch Eingabe von xterm das Fenster starten.

Mit dem Befehl exit können Sie das xterm dann wieder verlassen oder Sie drücken auf den X-Button oben rechts in der Titelleiste.

3.1.2.2 konsole

Dieses Terminal ist Bestandteil des KDE-Desktops. Genau wie das xterm kann es durch den Menüpunkt Befehl ausführen ... durch Eingabe von konsole gestartet werden.

Im Gegensatz zu xterm kann konsole einiges mehr. So können z. B. mehrere unterschiedliche Konsolen in einem Fenster geöffnet werden. Es stehen dann auch spezielle Versionen zur Verfügung, die gleich dem Midnight-Commander, einen textbasierenden Dateimanager, starten oder als Benutzer root vorgeben.

Eine weitere Konsole öffenen Sie über den Button unten links mit der Beschriftung Neu. Sie können natürlich auch über die Menüleiste über das Menü Sitzung gehen.

Unter dem Menü Bearbeiten können Sie u. a. den Verlauf bearbeiten. Der Verlauf ist die Sammlung der Zeilen, die auf der Konsole gestanden haben. Natürlich werden nicht alle Zeilen gespeichert. Die Anzahl der zu speichernden Zeilen finden Sie unter Einstellungen/Verlaufspeicher. Voreingestellt sind 1000 Zeilen, was auch erst einmal reichen sollte. Sehr nützlich ist es, daß Sie den Verlauf auch nach einem Stichwort durchsuchen können.

Im Menü Ansicht können Sie die laufende Konsole (Sitzung) umbenennen und auf Aktivität oder Nichtaktivität überwachen lassen. Sie können Ihre Eingaben auch zu mehreren Sitzungen gleichzeitig senden und die Reihenfolge der Sitzungen in der Sitzungsleiste ändern.

Das Menü Einstellungen erlaubt individuelle Einstellungen für die konsole. Schriftgröße, Signale, Tastatur, Farben und Größe können hier eingestellt werden.

Unter Hilfe finden Sie, wie bei eigentlich jedem KDE-Programm Anleitungen und Informationen über das Programm.

3.2 Erste Befehle

Um die ersten Befehle auszuprobieren, starten Sie jetzt einfach mal die konsole. Der Prompt erscheint und die Shell ist bereit Ihre ersten Kommandos entgegenzunehmen. Es gibt übrigens nicht die Shell. Es gibt eine Reihe von Shells für Unix und Linux-Systeme. Die im Linux-Bereich am meisten verwendet Shell ist die Bash. Auch bei SuSE ist sie für den Benutzer voreingestellt. Ich werde mich in diesem Text auch hauptsächlich mit Ihr beschäftigen.

Der Prompt zeigt uns schon ein paar wichtige Informationen3.1. Welcher Benutzer ist auf welchem Rechner eingeloggt und in welchem Verzeichnis befindet er sich gerade. Das Verzeichnis ~ ist natürlich kein Verzeichnis. Es ist ein Alias oder Synonym für das Heimatverzeichnis des jeweiligen Benutzers. Das können wir auch schnell mal vergleichen. Geben Sie doch einfach mal hinter dem Prompt den Befehl pwd ein.

ole@defiant:~> pwd
/home/ole
ole@defiant:~>

Bei dem Benutzer ole steht das ~ für sein Heimatverzeichnis /home/ole. Die Heimatverzeichnisse der Benutzer heißen normalerweise wie ihre Besitzer und liegen im Verzeichnis /home. Es ist aber auch möglich die Heimatverzeichnisse anders zu benennen.

3.2.1 Anzeigen des Verzeichnisinhalts

Was ist denn in diesem Heimatverzeichnis an Dateien vorhanden? Auch hierfür müssen Sie einen Befehl eingeben. Das Kommando ls zeigt Ihnen den Inhalt des Verzeichnis an.

ole@defiant:~> ls
Documents  public_html

Zwei Dateien liegen bei einem frisch eingerichteten Benutzer bei SuSE 8.0 im Heimatverzeichnis. Haben Sie auf der graphischen Oberfläche schon gearbeitet, so können hier noch mehr Dateien liegen.

3.2.1.1 Ausführliche Informationen

Die Informationen, die der Befehl ls gibt, sind sehr spärlich. Wir können aber dem Kommando ls sagen, daß es mehr Informationen ausgeben soll. Dies erfolgt über eine Option. Andere Namen dafür sind Schalter oder Attribut. Die Option für eine ausführliche Ansicht heißt -l. Das Minus vor dem Buchstaben l (wie ``long'') zeigt an, daß es sich um eine Option handelt.

ole@defiant:~> ls -l
insgesamt 8
drwxr-xr-x    2 ole    users        4096 Sep 25 12:25 Documents
drwxr-xr-x    2 ole    users        4096 Sep 25 12:25 public_html

Wenn Sie sich nun die Ausgabe anschauen, dann wird Ihnen sicherlich nicht die Bedeutung jeder dieser Spalten klar sein. Schauen wir uns dazu die Ausgabe noch einmal genauer an.

Typ und Rechte Links Besitzer Gruppe Größe Änderungsdatum Name
drwxr-xr-x 2 ole users 4096 Sep 25 12:25 Documents
drwxr-xr-x 2 ole users 4096 Sep 25 12:25 public_html

3.2.1.1.1 Typ und Rechte

Die in dieser Spalte stehende Kombination aus Buchstaben und Minus-Zeichen gibt Auskunft über den Dateityp und die Rechte, die für diese Datei gelten. Das erste Zeichen steht für den Dateityp. Das d in dem Beispiel steht für ein Verzeichnis. Würde ein Minuszeichen dort stehen, dann handelt es sich um eine normale Datei. Die Tabelle unten zeigt ihnen die anderen möglichen Typen. Auf die Bedeutung der einzelnen Typen möchte ich hier nicht eingehen.

Zeichen Bedeutung
- gewöhnliche Datei
d Verzeichnis (directory)
c zeichenorientierte Gerätedatei (character device)
b blockorientierte Gerätedatei (block device)
p FIFO-Pipeline(named pipe)
l symbolischer Link (symbolic link)
s Netzwerksocket (socket)

Die restlichen neun Zeichen geben in Gruppen zu jeweils drei Zeichen die Rechte auf die Datei an. Dabei steht das r für ``Lesen'' (read), das w für ``Schreiben'' (write) und das x für ``Ausführen'' (execute). Die ersten drei Zeichen geben die Rechte für den Besitzer der Datei an. Die zweiten drei Zeichen geben Auskunft über die Rechte der Gruppe, die dieser Datei zugeordnet wurde und die letzten drei Zeichen geben dann an, was der Rest der Welt mit dieser Datei darf.

3.2.1.1.2 Links

Im Gegensatz zu Windows kann eine Datei bei Linux mehrere Namen besitzen. Bei Verzeichnissen sind das mindestens zwei. Einmal der Name selbst und dann im Verzeichnis die Datei mit dem Namen ``.''. Eine Datei wird erst dann gelöscht, wenn auch der letzte Name, bzw. Hardlink, wie die Dateinamen auch genannt werden, entfernt wurde.

3.2.1.1.3 Besitzer

Hier wird der Besitzer der Datei angegeben. Wenn ein Benutzer eine neue Datei anlegt, wird er automatisch der Besitzer der Datei.

3.2.1.1.4 Gruppe

Jeder Datei wird eine Gruppe von Benutzern zugeteilt, die extra Rechte bekommen können. Ist ein Benutzer in dieser Gruppe, so gelten die Rechte der Gruppe für ihn, wenn er nicht gerade der Besitzer der Datei ist.

3.2.1.1.5 Größe

Die Größe der Datei wird in dieser Spalte in Byte angegeben.

3.2.1.1.6 Änderungsdatum

Normalerweise zeigt der Befehl ls an dieser Stelle das Datum der letzten Änderung der Datei an. Durch bestimmte Attribute kann der Befehl auch dazu bewegt werden das Datum der Erstellung oder das Datum des letzten Zugriffs anzuzeigen.

3.2.1.1.7 Name

Hier steht der Name der Datei. Die Sortierung der aufgelisteten Dateien erfolgt lexikalisch. Beachten Sie dabei, daß die Shell zwischen Groß- und Kleinschreibung unterscheidet und die Großbuchstaben vor den Kleinbuchstaben einsortiert werden.

3.2.1.2 Versteckte Dateien

Wie Sie oben gesehen haben, enthält das Heimatverzeichnis scheinbar nur zwei Dateien bzw. Verzeichnisse. Das dem nicht so ist, zeigt der Einsatz der Option -a.

ole@defiant:~> ls
Documents  public_html
ole@defiant:~> ls -a
.           .Xresources    .emacs   .profile   .xim               .xtalkrc
..          .bash_history  .exrc    .urlview   .xinitrc           Documents
.Xdefaults  .bashrc        .kermrc  .xcoralrc  .xserverrc.secure  public_html
.Xmodmap    .dvipsrc       .muttrc  .xemacs    .xsession

Anstatt zwei werden nun 23 Dateien angezeigt. Diese neu angezeigten Dateien bezeichnet man als Versteckte Dateien. Sie werden bei normalen Dateioperationen nicht berücksichtigt. Diese versteckten Dateien finden Sie auch in anderen Betriebssystemen. Dort wird durch ein Attribut der Datei angezeigt, ob eine Datei versteckt ist oder nicht. Wenn Sie sich die Liste der Dateien im obigen Beispiel noch einmal genau anschauen, finden Sie recht schnell die Gemeinsamkeit der versteckten Dateien heraus.

Dateien, deren Name mit einem Punkt beginnt, bezeichnet man als Versteckte Dateien. Sie werden bei normalen Dateioperationen nicht berücksichtigt.

Eine besondere Bedeutung haben die Dateien `.' und `..'. Sie sind Bestandteil des Verzeichnisses. Der Name `.' ist ein weiterer Link für das Verzeichnis in dem sich diese Datei befindet. Dagegen verweist der Name .. auf das Elternverzeichnis des aktuellen Verzeichnis. Wenn Sie das obige Beispiel als Grundlage nehmen, so ist . gleichzusetzen mit /home/ole und .. mit /home.

Zwei Optionen können auch miteinander kombiniert werden. Eine ausführliche Liste aller Dateien bekommen Sie durch die Kombination der Optionen -l und -a.

ole@defiant:~> ls -a -l
insgesamt 92
drwxr-xr-x    5 ole    users        4096 Sep 25 12:25 .
drwxr-xr-x    9 root   root         4096 Sep 25 12:25 ..
-rw-r--r--    1 ole    users        5742 Sep 25 12:25 .Xdefaults
-rw-r--r--    1 ole    users        1305 Sep 25 12:25 .Xmodmap
lrwxrwxrwx    1 root   root           10 Sep 25 12:25 .Xresources -> .Xdefaults
-rw-------    1 ole    users           0 Sep 25 12:25 .bash_history
-rw-r--r--    1 ole    users        1691 Sep 25 12:25 .bashrc
-rw-r--r--    1 ole    users         208 Sep 25 12:25 .dvipsrc
-rw-r--r--    1 ole    users        1637 Sep 25 12:25 .emacs
-rw-r--r--    1 ole    users        1124 Sep 25 12:25 .exrc
-rw-r--r--    1 ole    users         164 Sep 25 12:25 .kermrc
-rw-r--r--    1 ole    users        2286 Sep 25 12:25 .muttrc
-rw-r--r--    1 ole    users         952 Sep 25 12:25 .profile
-rw-r--r--    1 ole    users         311 Sep 25 12:25 .urlview
-rw-r--r--    1 ole    users        7913 Sep 25 12:25 .xcoralrc
drwxr-xr-x    2 ole    users        4096 Sep 25 12:25 .xemacs
-rw-r--r--    1 ole    users        3407 Sep 25 12:25 .xim
-rwxr-xr-x    1 ole    users        2324 Sep 25 12:25 .xinitrc
-rw-r--r--    1 ole    users        1101 Sep 25 12:25 .xserverrc.secure
-rwxr-xr-x    1 ole    users        2804 Sep 25 12:25 .xsession
-rw-r--r--    1 ole    users         119 Sep 25 12:25 .xtalkrc
drwxr-xr-x    2 ole    users        4096 Sep 25 12:25 Documents
drwxr-xr-x    2 ole    users        4096 Sep 25 12:25 public_html

Wer es kürzer mag, kann die Buchstaben auch zusammenziehen. Dabei ist es völlig egal, ob Sie -al oder -la schreiben.

ole@defiant:~> ls -al
insgesamt 92
drwxr-xr-x    5 ole    users        4096 Sep 25 12:25 .
drwxr-xr-x    9 root   root         4096 Sep 25 12:25 ..
-rw-r--r--    1 ole    users        5742 Sep 25 12:25 .Xdefaults
-rw-r--r--    1 ole    users        1305 Sep 25 12:25 .Xmodmap
...

3.2.1.3 Parameter und Jokerzeichen

Der ls Befehl kann nicht nur den Inhalt des aktuellen Verzeichnis anzeigen. Wenn Sie z. B. den Inhalt des Verzeichnis Documents sehen wollen, geben Sie folgendes an.

ole@defiant:~> ls -al Documents
insgesamt 12
drwxr-xr-x    2 ole    users        4096 Sep 25 12:25 .
drwxr-xr-x    5 ole    users        4096 Sep 25 12:25 ..
-rw-r--r--    1 ole    users        1106 Sep 25 12:25 .directory

Der Name des Verzeichnis Documents bezeichnet man als Parameter des Befehls ls. Die Angabe des Verzeichnisnamens erfolgte hier relativ zum Arbeitsverzeichnis. Um das Elternverzeichnis des Arbeitsverzeichnis anzuzeigen können wir den Dateinamen .. verwenden.

ole@defiant:~> ls ..
conny  lost+found  ole  perl  vnc  walter  willi

Um zur Wurzel zu gelangen müssen Sie sogar noch ein Verzeichnis weiter im Verzeichnisbaum hochgehen.

ole@defiant:~> ls ../..
bin   cdrom  dvd  floppy  lib         media  opt     proc  sbin  usr  windows
boot  dev    etc  home    lost+found  mnt    pcmcia  root  tmp   var

Sie können die Verzeichnisse auch direkt adressieren, wenn Sie den Verzeichnisnamen mit einem Slash / beginnen lassen. Jetzt wird nämlich nicht vom aktuellen Arbeitsverzeichnis aus gesehen, sondern von der Dateiwurzel.

ole@defiant:~> ls /
bin   cdrom  dvd  floppy  lib         media  opt     proc  sbin  usr  windows
boot  dev    etc  home    lost+found  mnt    pcmcia  root  tmp   var
ole@defiant:~> ls /home
conny  lost+found  ole  perl  vnc  walter  willi
ole@defiant:~> ls /home/ole
Documents  public_html

Neben den Verzeichnissen können Sie auch eine Auswahl unter den Dateien treffen, die Sie sich anzeigen lassen wollen. Hilfreich sind dabei die sogenannten Jokerzeichen oder Wildcards.

Dazu schauen Sie sich doch mal das Verzeichnis /etc an, in dem sich die Konfigurationsdateien des Linux-Systems befinden.

ole@defiant:~> ls /etc
DIR_COLORS            inittab               php.ini
HOSTNAME              inputrc               pnm2ppa.conf
Muttrc                insserv.conf          powerd.conf
SuSE-release          ioctl.save            ppp
...

Es werden sehr viele Dateien angezeigt. Sie können die Anzahl der angezeigten Dateien verringern, wenn Sie andere Kriterien für die Auswahl stellen. So könnten Sie sich nur die Dateien anzeigen lassen, die mit dem Buchstaben ``a'' beginnen.

ole@defiant:~> ls /etc/a*
/etc/a2ps-site.cfg  /etc/aliases       /etc/at.deny
/etc/a2ps.cfg       /etc/aliases.db    /etc/auto.master
/etc/adjtime        /etc/asound.state  /etc/auto.misc

/etc/alsa.d:
emu10k1  sbawe

Der Asterisk ``*'' steht für eine beliebige Anzahl beliebiger Zeichen und das Fragezeichen ``?'' steht für ein beliebiges Zeichen. Auffällig an dem Beispiel oben ist, daß nicht nur der Name des Verzeichnis angegeben wird, sondern auch der Inhalt. Dies ist eine der Eigenschaften von ls. Ist ein Verzeichnis ein Ziel, dann wird der Inhalt des Verzeichnis angezeigt. Mit der Option -d kann dies unterbunden werden.

ole@defiant:~> ls -d /etc/a*
/etc/a2ps-site.cfg  /etc/aliases     /etc/asound.state  /etc/auto.misc
/etc/a2ps.cfg       /etc/aliases.db  /etc/at.deny
/etc/adjtime        /etc/alsa.d      /etc/auto.master
ole@defiant:~> ls -ld
drwxr-xr-x    5 ole    users        4096 Sep 25 12:25 .

Dies wirkt, wie Sie oben sehen, auch beim aktuellen Arbeitsverzeichnis. Es wird nur die Information über das aktuelle Verzeichnis angezeigt und nicht über die enthaltenen Dateien.


3.2.1.4 Inodes

Wie schon oben erwähnt, kann eine Datei mehrere Namen (Links) besitzen. Dies wird dadurch ermöglicht, daß die Benennung der Daten im System über eine sogenannte Inode-Nummer erfolgt. Als Inode bezeichnet man den Platz, an dem die Informationen über die Datei gespeichert werden. Das Betriebssystem merkt sich also nicht den Namen der Datei sondern die Inode-Nummer. Die Namen sind nur für uns ``dumme'' Benutzer, die sich mehr unter dem Namen ``amaretti.rezept.txt'' vorstellen können, als unter einer Inode-Nummer ``45312''. Die Verzeichnisse sind im Prinzip nichts anderes als Tabellen, die den Zusammenhang zwischen Dateinamen und der Inode-Nummer herstellen.

Die Inode-Nummer können sie sich mit ls unter Verwendung der Option -i anzeigen lassen.

ole@defiant:~> ls -i
   1095 Documents     1097 public_html
ole@defiant:~> ls -i /home
   1074 conny         31873 ole    112382 vnc      286867 willi
     11 lost+found   223209 perl   207194 walter


3.2.1.5 Hilfe

Es gibt noch viel mehr Optionen für ls, als die ich Ihnen gerade vorgestellt habe. Um eine kurze Übersicht über die Funktion und vorhandenen Optionen eines Befehls zu erhalten, können Sie den Shellbefehl mit der Option --help aufrufen. Mit dem doppelten Minuszeichen wird bei der letzten Option dem Befehl signalisiert, daß es sich nicht um die einzelnen Optionen -h, -e, -l und -p handelt, sondern um eine Option mit dem langen Namen help.

ole@defiant:~> ls --help
Benutzung: ls [OPTION]... [DATEI]...
Auflistung von Informationen der DATEIen (Standardvorgabe ist das momentane
Verzeichnis). Alphabetisches Sortieren der Einträge, falls weder -cftuSUX
noch --sort angegeben.

  -a, --all                  Einträge, die mit . beginnen, nicht verstecken.
  -A, --almost-all           Keine Anzeige implizierter . und ..
  -b, --escape               Ausgabe octaler Repräsentation für nicht-druck-
...

Natürlich ist der Hilfetext etwas länger als die Konsolenhöhe. Auf der Konsole können Sie ohne Probleme scrollen (wenn es nicht mehr als 1000 Zeilen sind). Damit die Anzeige nicht durchscrollt, sondern seitenweise anzeigt, können Sie einen sogenannten Pager benutzen. Ein solcher Pager ist der Befehl more. Sie leiten einfach die Ausgabe des Befehls mit dem Zeichen | an den Pager weiter.

ole@defiant:~> ls --help | more
ole@defiant:~> ls /etc | more
ole@defiant:~> ls -l / | more
ole@defiant:~> ls /dev | more

Mit der Leertaste blättern Sie die Seiten des Pagers more durch. Erreicht der Pager das Ende des Textes bzw. der Ausgabe, so beendet er sich automatisch.

3.2.1.6 Zusammenfassung

Der Befehl ls zeigt die in den Verzeichnissen enthaltenen Dateien an. Mit Optionen kann man die Art und Weise beeinflussen, wie Befehle funktionieren. Die Parameter geben an, womit gearbeitet werden soll.

Die Optionen -aldi sollten sie sich für den Befehl ls merken.

-a Zeigt auch die versteckten Dateien an (-all)
-l Zeigt ausführliche Liste zu den Dateien an (long)
-d Zeigt Verzeichnis anstatt Inhalt an (-directory )
-i Zeigt Inodes an (-inode)
--help Zeigt die Hilfe für den Befehl an

3.2.2 Erstellen und Löschen von Verzeichnissen und Dateien

Ein Verzeichnissystem macht nur Sinn, wenn es Dateien und Verzeichnisse enthält. Fürs Erstellen und Löschen von Dateien und Verzeichnissen stehen auf der Shell viele Programme zur Verfügung.

3.2.2.1 Erstellen

Eine einfache Art und Weise eine leere Datei zu erstellen ist der Befehl touch.

ole@defiant:~> touch testdatei
ole@defiant:~> ls -l
insgesamt 8
drwxr-xr-x    2 ole    users        4096 Sep 25 12:25 Documents
drwxr-xr-x    2 ole    users        4096 Sep 25 12:25 public_html
-rw-r--r--    1 ole    users           0 Sep 26 14:37 testdatei

Eigentlich soll der Befehl touch die Zeit der letzten Änderung und des letzten Zugriffs auf die aktuelle Zeit stellen. Existiert die angegebene Datei nicht, dann wird einfach eine neue Datei erstellt.

Ein neues Verzeichnis zu erstellen ist ebenso einfach. Der Befehl heißt hier mkdir.

ole@defiant:~> mkdir test
ole@defiant:~> ls
Documents  public_html  test  testdatei
ole@defiant:~> mkdir beruf hobby
ole@defiant:~> ls
Documents  beruf  hobby  public_html  test  testdatei

Sie müssen sich beim Befehl mkdir, wie auch bei touch, nicht auf einen Parameter beschränken. Sie können ruhig mehrere Dateien bzw. Verzeichnisse angegeben, die erstellt werden sollen.

Auch eine Angabe des Verzeichnis mit seinen Elternverzeichnissen ist möglich. Allerdings müssen diese vorher existieren.

ole@defiant:~> cd /
ole@defiant:/> mkdir /home/ole/test/neuerOrdner
ole@defiant:/> ls /home/ole/test
neuerOrdner

3.2.2.2 Löschen

Was man erstellt, muß man auch löschen können. Dies gilt für Verzeichnisse wie auch für Dateien. Der Befehl rmdir (remove directory) sorgt für das Löschen von Verzeichnissen.

ole@defiant:~> rmdir beruf
ole@defiant:~> rmdir test
rmdir: »test«: Das Verzeichnis ist nicht leer

Allerdings löscht rmdir nur leere Verzeichnisse. Sobald sich nur eine Datei oder ein Verzeichnis darin befindet, wird das Löschen des Verzeichnis verweigert.

Dateien entledigt man sich dagegen durch den Befehl rm (remove).

ole@defiant:~> rm testdatei
ole@defiant:~> rm test
rm: »test« ist ein Verzeichnis

Mit Verzeichnissen tut sich rm dagegen schwer und verweigert das Löschen mit einem entsprechenden Hinweis.

Dies ist auch die normale Arbeitsweise der Shellkommandos. Klappt ein Befehl, so erscheint in der Regel kein Kommentar, sondern der Prompt fordert den Benutzer auf wieder tätig zu werden. Nur wenn Fehler aufgetreten sind, melden sich die Kommandos noch einmal beim Benutzer.

Sie können aber rm überreden auch Verzeichnisse zu löschen. Mit der Option -r (recursive) löscht rm Verzeichnisse mit ihrem Inhalt.

ole@defiant:~> rm -r test

Manchmal fragt rm auch nach, ob eine Datei gelöscht werden soll. Ist einem das zu lästig, gerade wenn ganze Verzeichnisstrukturen gelöscht werden sollen, dann sorgt der Schalter -f für Ruhe. Er sorgt dafür, daß die Dateien ohne Nachfrage gelöscht werden.

Sie sollten aber mit dem Befehl vorsichtig sein. Stellen Sie sich doch einfach mal vor was passiert, wenn der Administrator folgendes eingibt:

defiant:~$ rm -rf /

3.2.2.3 Der Editor vi

Der Editor, den Sie auf jedem Linux/Unix-System vorfinden ist der vi oder einer seiner Klone. Seine Benutzerführung ist etwas eigenwillig und gewöhnungsbedürftig. Da er aber auf jedem System vorhanden ist, sollten Sie sich doch mit ihm etwas auskennen.

Eine Datei zum Bearbeiten rufen Sie ganz einfach auf, indem Sie den Namen hinter dem Befehl vi schreiben.

ole@defiant:~> vi meinedatei

Existiert die Datei nicht, so geht der vi von einer leeren neuen Datei aus, wie sie auch in der Statuszeile ganz unten sehen können.

"meinedatei" [Neue Datei]                                     0,0-1       Alles

Der vi besitzt verschieden Modi für die Bearbeitung von Dokumenten. Beim Start landen Sie im Bearbeitungsmodus, der spezielle Funktionen zur Bearbeitung der Dokumente zur Verfügung stellt. Diese Funktionen werden nicht wie von den meisten Editoren gewohnt über ein Menü zur Verfügung gestellt, sondern durch Tastaturkürzel.

Sie müssen, wenn Sie Text schreiben wollen, in den Eingabemodus wechseln. Dazu drücken Sie im Bearbeitungsmodus die Taste <I>. Die Statuszeile zeigt nun EINFÜGEN bzw. INSERT an.

-- EINFÜGEN --                                                0,1         Alles

Hier können Sie nun Text eingeben, mit den Richtungstasten sich durch den Text bewegen und mit der Taste <ENTF> bzw. <DEL> Zeichen rechts vom Cursor löschen.

Um wieder in den Bearbeitungsmodus zu wechseln, drücken Sie einfach die Taste <ESC>. Um sicher zu gehen, können Sie die Taste auch mehrfach drücken. vi quittiert das dann mit einem Piepton.

Im Bearbeitungsmodus können Sie das Zeichen unter dem Cursor entweder wie im Eingabemodus mit der Taste <DEL> löschen oder indem Sie die Taste <X> betätigen. Es gibt aber auch weiter reichende Löschkommandos im Zusammenhang mit der Taste <D>. So löscht <D> <W> die Zeichen bis zum Wortende inklusive des folgenden Leerzeichens. Mit <D> <E> löscht er ebenfalls den Rest vom Wort, ohne aber das Leerzeichen mitzunehmen. Mit der Kombination d$ (<D> <SHIFT>+<4>) löscht er den Text vom Cursor bis zum Zeilenende. Und um die ganze Zeile, in der sich der Cursor befindet, zu löschen, betätigen Sie einfach zweimal die Taste <D> (<D> <D>). Sie können auch durch das Voranstellen einer Zahl vor das Kommando angeben, wie oft das Kommando ausgeführt werden soll. So können Sie mit <4> <D> <D> vier Zeilen löschen oder mit <3> <D> <W> die drei Worte rechts vom Cursor.

Die Mehrfachausführung klappt auch mit dem Eingabemodus. Einfach vorm Einschalten des Eingabemodus eine Zahl eintippen. Nach Beendigung des Eingabemodus wird das frisch Eingegebene mehrfach ausgegeben. So können Sie z. B. mit der Tastenkombination <7> <5> <I> <-> <ESC> 75 Minus-Zeichen in den Text einfügen.

Vom Bearbeitungsmodus können Sie auch einen Kommandomodus aufrufen. Dies erfolgt durch den Doppelpunkt (<SHIFT>+<:>). Der Doppelpunkt erscheint in der unteren Statuszeile und Sie können dann weitere Befehle eintippen, die Sie mit der <RETURN>-Taste abschließen.

:q Beendet den vi
:q! Beendet den vi ohne Nachzufragen
:wq Beendet den vi und speichert das Dokument vorher

Bei Linux wird der vi-Klon vim mitgeliefert und durch den Befehl vi ausgeführt. Mit dem Befehl vimtutor erhalten Sie ein kleines Tutorial mit Übungen zur Bedienung des vim.

3.2.3 Kopieren, Verschieben und Umbenennen von Dateien

Für das Kopieren, Verschieben und Umbenennen von Dateien brauchen wir hauptsächlich zwei Befehle: cp (copy) und mv (move).

3.2.3.1 Kopieren

Um eine Kopie einer Datei zu erstellen benutzen Sie den Befehl cp. Der Befehl braucht eine Datei, die es zu kopieren gilt, (Quelldatei) und den neuen Namen der Datei (Zieldatei).

ole@defiant:~/test> vi themenvorschlag.txt
ole@defiant:~/test> ls -l
insgesamt 4
-rw-r--r--    1 ole      users        2123 Okt  9 10:25 themenvorschlag.txt
ole@defiant:~/test> cp themenvorschlag.txt themenvorschlag.txt.alt
ole@defiant:~/test> ls -l
insgesamt 8
-rw-r--r--    1 ole      users        2123 Okt  9 10:25 themenvorschlag.txt
-rw-r--r--    1 ole      users        2123 Okt  9 10:26 themenvorschlag.txt.alt
ole@defiant:~/test>

So kann einfach eine Sicherungskopie einer Datei erstellt werden. In den meisten Fällen werden aber eine oder mehrere Dateien in ein anderes Verzeichnis kopiert, wie z. B. in /floppy für die Diskette. In diesem Fall wird anstatt der Zieldatei ein Zielverzeichnis angegeben. Erkennt der Befehl cp, daß das Ziel ein existierendes Verzeichnis ist, dann kopiert er die Datei ohne den Namen zu ändern in das Verzeichnis. Existiert kein Verzeichnis, so wird die Angabe als Dateiname verstanden und die Datei dementsprechend kopiert. Übrigens: cp überschreibt in der normalen Einstellung existierende Dateien gnadenlos.

ole@defiant:~/test> mkdir backup
ole@defiant:~/test> ls -l backup/
insgesamt 0
ole@defiant:~/test> cp themenvorschlag.txt backup
ole@defiant:~/test> ls -l backup/
insgesamt 4
-rw-r--r--    1 ole      users        2123 Okt  9 10:40 themenvorschlag.txt

Sie können auch mehrere Dateien zum Kopieren angegeben, wenn Ihr Ziel ein Verzeichnis ist.

ole@defiant:~/test> cp /etc/enscript.cfg /etc/esd.conf backup
ole@defiant:~/test> ls -l backup
insgesamt 16
-rw-r--r--    1 ole      users        5983 Okt  9 10:43 enscript.cfg
-rw-r--r--    1 ole      users          77 Okt  9 10:43 esd.conf
-rw-r--r--    1 ole      users        2123 Okt  9 10:40 themenvorschlag.txt

Wenn Sie das aktuelle Verzeichnis als Ziel angeben wollen, machen Sie das einfach durch den Punkt `.'. Genauso können Sie das Elternverzeichnis mit `..' als Ziel angeben. Um zu sehen, welche Dateien kopiert worden sind, benutzen Sie den Befehl cp einfach mit dem Schalter -v (verbose). Diese auch als ``Blubberschalter'' bekannte Option veranlaßt den Befehl dazu ausführlich über seine Tätigkeit zu berichten. Sie werden bei vielen Shell-Befehlen die Option -v wiederfinden. Sie können natürlich auch für die Liste der zu kopierenden Dateien die Jokerzeichen wie den Asterisk ``*'' verwenden.

ole@defiant:~/test> cp -v /etc/f* .
»/etc/fam.conf« -> »./fam.conf«
»/etc/fb.modes« -> »./fb.modes«
»/etc/fdprm« -> »./fdprm«
»/etc/filesystems« -> »./filesystems«
»/etc/fstab« -> »./fstab«
»/etc/ftpusers« -> »./ftpusers«

3.2.3.2 Verschieben und Umbenennen

Der Befehl mv arbeitet im Prinzip genau wie der Befehl cp. Allerdings existiert die Quelldatei bzw. Quelldateien danach nicht mehr. Im Prinzip ist ein Verschieben und Umbenennen nichts anderes als eine Änderung des Verzeichniseintrags. Nur wenn zwischen zwei Partitionen verschoben werden soll, muß die Datei erst kopiert und dann die alte Datei gelöscht werden. Dadurch ist Verschieben im Normalfall schneller als Kopieren.

Um also eine Datei umzubennen benutze ich den Befehl mv unter Angabe von altem und neuem Namen.

ole@defiant:~/test> ls -l
insgesamt 12
drwxr-xr-x    2 ole      users        4096 Okt  9 10:43 backup
-rw-r--r--    1 ole      users        2123 Okt  9 10:25 themenvorschlag.txt
-rw-r--r--    1 ole      users        2123 Okt  9 10:26 themenvorschlag.txt.alt
ole@defiant:~/test> mv themenvorschlag.txt.alt themenvorschlag.old
ole@defiant:~/test> ls -l
insgesamt 12
drwxr-xr-x    2 ole      users        4096 Okt  9 10:43 backup
-rw-r--r--    1 ole      users        2123 Okt  9 10:26 themenvorschlag.old
-rw-r--r--    1 ole      users        2123 Okt  9 10:25 themenvorschlag.txt

Um die Syntax eines Shell-Kommandos kurz und knapp darzustellen, werden Syntaxregeln mit einer bestimmten Symbolik verwendet.

Der mv Befehl kann als Syntaxregel so ausgedrückt werden:

mv ALTERNAME NEUERNAME

Die groß geschriebenen Worte stehen für den Wert, der dort eingetragen werden muß.

Ähnlich wie bei cp führt die Angabe eines existierenden Verzeichnis als Ziel dazu, daß die Datei nicht umbenannt, sondern in das Verzeichnis unter Beibehaltung des Namens verschoben wird.

ole@defiant:~/test> mv themenvorschlag.old backup
ole@defiant:~/test> ls -l
insgesamt 8
drwxr-xr-x    2 ole      users        4096 Okt  9 11:09 backup
-rw-r--r--    1 ole      users        2123 Okt  9 10:25 themenvorschlag.txt
oole@defiant:~/test> ls -l backup
insgesamt 8
-rw-r--r--    1 ole      users        2123 Okt  9 10:26 themenvorschlag.old
-rw-r--r--    1 ole      users        2123 Okt  9 10:40 themenvorschlag.txt

Wenn Sie ein Verzeichnis als Ziel angeben, können Sie nicht nur eine Datei verschieben, sondern eine ganze Liste von Dateien.

ole@defiant:~/test> touch datei1.txt datei2.txt datei3.txt
ole@defiant:~/test> ls -l
insgesamt 8
drwxr-xr-x    2 ole      users        4096 Okt  9 11:10 backup
-rw-r--r--    1 ole      users           0 Okt  9 11:12 datei1.txt
-rw-r--r--    1 ole      users           0 Okt  9 11:12 datei2.txt
-rw-r--r--    1 ole      users           0 Okt  9 11:12 datei3.txt
-rw-r--r--    1 ole      users        2123 Okt  9 10:25 themenvorschlag.txt
ole@defiant:~/test> mv d*.txt backup
ole@defiant:~/test> ls -l backup
insgesamt 8
-rw-r--r--    1 ole      users           0 Okt  9 11:12 datei1.txt
-rw-r--r--    1 ole      users           0 Okt  9 11:12 datei2.txt
-rw-r--r--    1 ole      users           0 Okt  9 11:12 datei3.txt
-rw-r--r--    1 ole      users        2123 Okt  9 10:26 themenvorschlag.old
-rw-r--r--    1 ole      users        2123 Okt  9 10:40 themenvorschlag.txt

Die Kommandosyntax kann durch folgende Regeln ausgedrückt werden:

mv DATEILISTE ZIELVERZEICHNIS

oder auch als

mv DATEI1 [DATEI2 [DATEI3 [...]]] ZIELVERZEICHNIS

Die eckigen Klammern zeigen an, daß der entsprechende Teil optional ist und nicht unbedingt notwendig.

Auch bei mv gibt es den ``Blubberschalter'' -v und noch weitere Optionen. Die Syntaxregel unter Berücksichtigung der Optionen lautet dann:

mv [-v] DATEILISTE ZIELVERZEICHNIS

oder auch

mv [OPTIONEN] DATEILISTE ZIELVERZEICHNIS

3.3 Informationen und Hilfe

Im Gegensatz zu der graphischen Oberfläche kann auf der Shell nicht einfach durch durchgucken der Menüpunkte der richtige Befehl gefunden werden. Linux stellt Informationen und Hilfen zur Verfügung.


3.3.1 Hilfe im Befehl

Fast jeder Befehl und somit auch die Shell, die ja auch nichts anderes als ein Programm ist, stellt eine eigene Kurzhilfe zur Verfügung.

In der Bash gibt es eingebaute Befehle, die nicht als eigenständige Programme vorliegen. Eine Übersicht der Befehle gibt der Befehl help . Genauere Informationen zu einem Befehl bekommen Sie dann durch Eingabe des Befehls hinter help.

ole@defiant:~/test> help pwd
pwd: pwd [-PL]
    Print the current working directory.  With the -P option, pwd prints
    the physical directory, without any symbolic links; the -L option
    makes pwd follow symbolic links.

Bei den meisten anderen Befehlen kommen Sie mit dem Schalter --help oder -h weiter. Diese Option veranlaßt den Befehl dazu, eine kurze Erklärung seiner Funktion und eine Übersicht über seine Optionen zu geben.

ole@defiant:~/test> touch --help
Benutzung: touch [OPTION]... DATEI...
   oder:   touch [-acm] MMDDhhmm[YY] DATEI... (veraltet)
Aktualisieren der Zugriffs- und Modifikationszeiten jeder DATEI auf die
momentane Zeit.

  -a                        Nur die Zugriffszeit ändern.
  -c, --no-create           Keine Dateien erzeugen.
  -d, --date=ZEICHENKETTE   Lesen der ZEICHENKETTE und statt der momentanen
                              Zeit verwenden.
  -f                        (ignoriert)
  -m                        Nur Modifikationszeit ändern.
  -r, --reference=FILE      Die Zeiten dieser Datei anstatt der momentanen Zeit
                              verwenden.
  -t MARKE                  verwenden von [[HH]JJ]MMTTSSmm[.ss] statt der
                              momentanen Zeit.
      --time=WORT           Setzen der Zeit die von WORT angegeben wird:
                              access, atime, (wie -a), mtime, modify (wie -m).
      --help                Anzeigen dieser Hilfe und beenden.
      --version             Ausgabe der Versionsinformation und beenden.

Beachten Sie das die drei Zeitformate die von den Optionen -d, -t und dem
veraltete Argument erkannt werden alle verschieden sind.

Berichten Sie Fehler an <bug-fileutils@gnu.org>.

Andere Befehle, wie z. B. der Packer zip liefern diese Erklärungen schon, wenn Sie ohne Parameter aufgerufen werden.

ole@defiant:~/test> zip
Copyright (C) 1990-1999 Info-ZIP
Type 'zip "-L"' for software license.
Zip 2.3 (November 29th 1999). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
  The default action is to add or replace zipfile entries from list, which
  can include the special name - to compress standard input.
  If zipfile and list are omitted, zip compresses stdin to stdout.
  -f   freshen: only changed files  -u   update: only changed or new files
  -d   delete entries in zipfile    -m   move into zipfile (delete files)
  -r   recurse into directories     -j   junk (don't record) directory names
  -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)
  -1   compress faster              -9   compress better
  -q   quiet operation              -v   verbose operation/print version info
  -c   add one-line comments        -z   add zipfile comment
  -@   read names from stdin        -o   make zipfile as old as latest entry
  -x   exclude the following names  -i   include only the following names
  -F   fix zipfile (-FF try harder) -D   do not add directory entries
  -A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)
  -T   test zipfile integrity       -X   eXclude eXtra file attributes
  -y   store symbolic links as the link instead of the referenced file
  -R   PKZIP recursion (see manual)
  -e   encrypt                      -n   don't compress these suffixes


3.3.2 Manual-Pages

Für weitergehende Erläuterungen wurden die Manual Pages, oder auch nach Ihrem Verwaltungsprogramm Man-Pages genannt, entwickelt. Die Man-Pages sind praktisch die Bedienungsanleitungen für die Shell-Befehle.

Nach einem man cp wird das Dokument entpackt und dann mit dem passenden Pager angezeigt.

Abbildung 3.1: Ausgabe des Befehls man cp
Image man_cp

Mit den Richtungstasten können Sie nun hin- und herscrollen. Die Betätigung der Taste <Q> beendet dann das Man-Programm.

Die Programme whatis und apropos basieren auf man. whatis liefert eine Kurzbeschreibung für einen Befehl, während apropos diese Kurzbeschreibungen nach einem Begriff durchsucht.

ole@defiant:~/test> apropos login
logname (1)          - print user's login name
/etc/login.defs (5) [login.defs] - Login configuration
login_tty (3)        - tty utility functions
getlogin (3)         - get user name
sulogin (8)          - Single-user login
slogin (1)           - OpenSSH SSH client (remote login program)
nologin (8)          - politely refuse a login
faillog (8)          - examine faillog and set login failure limits
nologin (5)          - prevent non-root users from logging into the system
ssh (1)              - OpenSSH SSH client (remote login program)
utmp (5)             - login records
wtmp (5)             - login records
      ....

ole@defiant:~/test> whatis ssh
ssh (1)              - OpenSSH SSH client (remote login program)

Die Manual-Pages enthalten nicht nur Informationen zu Befehlen, sondern auch zu Konfigurationsdateien, Kernelfunktionen u.a.


Notizen:
Notizen:

Einführung in die Shell % latex2html id marker 2826
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.

38
Wechseln Sie vom X-Window-System auf die Konsole 2.

39
Loggen Sie sich dort als walter ein.

40
In welchem Verzeichnis befinden Sie sich?

41
Auf welchem Terminal arbeiten Sie gerade?

42
Führen Sie den Befehl rm -rf * aus. Was bewirkt der Befehl?

43
Legen Sie eine leere gewöhnliche Datei mit dem Namen meiohmei an.

44
Legen Sie drei leere gewöhnlichen Dateien mit den Namen achdugrueneneune, achduliebermeinvater und achdukannstmichmal mit einem Befehl an.

45
Lassen Sie sich nun den Verzeichnisinhalt anzeigen.

46
Lassen sich sich ausführlichere Informationen über den Verzeichnisinhalt anzeigen.

47
Lassen Sie sich nun für die vier Dateien die Inode-Nummern anzeigen.

48
Legen Sie mit dem vi die Datei wasichschonimmersagenwollte mit dem folgenden Inhalt an.

Linux Unser, Der Du bist im Kernel,
Geöffnet sei Dein Swap-File,
Dein KDE komme,
Dein Bash-Command geschehe,
Wie in Red Hat so auch in Suse.
Unser täglich Login gib uns heute,
Und vergib uns unsere zu kleine Festplatte,
Wie auch wir vergeben Dir Deiner Installation.
Und führe uns nicht in die Kernel-Panik,
Sondern erlöse uns von Microsoft.
Denn Dein ist das Netz Und die Festplatte Und die Stabilität
In Ewigkeit
Enter!

Anonymous

49
Legen Sie von der Datei wasichschonimmersagenwollte eine Kopie namens ichhabsgesagt an.

50
Lassen Sie sich die Inode Nummern der Dateien anzeigen.

51
Benennen Sie nun ichhabsgesagt nach ichsagte um.

52
Lassen Sie sich die Inode Nummern der Dateien wiederum anzeigen und vergleichen Sie das Ergebnis mit Aufgabe 13. Was sehen sie?

53
Legen Sie das Verzeichnis abfall an.

54
Lassen Sie sich den Inhalt des aktuellen Verzeichnis ausführlich anzeigen. Wie unterscheidet sich das Verzeichnis von den gewöhnlichen Dateien?

55
Lassen Sie sich ausführlich den Inhalt des Verzeichnis abfall anzeigen.

% latex2html id marker 2886
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

56
Kopieren Sie die Datei ichsagte in das Verzeichnis abfall.

57
Kopieren Sie die Dateien, die mit achdu beginnen in das Verzeichnis abfall. Lassen Sie sich dabei die Aktionen des Programms anzeigen.

58
Lassen Sie sich wieder ausführlich den Inhalt des Verzeichnis abfall anzeigen.

59
Kopieren Sie alle Dateien aus dem Verzeichnis etc, die mit c beginnen, in das Verzeichnis abfall. Welche Fehler treten dabei auf?

60
Versuchen Sie über die Hilfe herauszubekommen, ob mit dem cp es prinzipiell möglich ist Verzeichnisse zu kopieren.

61
Wechseln Sie in das Verzeichnis abfall und lassen Sie sich das aktuelle Verzeichnis anzeigen.

62
Wechseln Sie zur Verzeichniswurzel und lassen Sie sich den Inhalt des Verzeichnis ausführlich anzeigen. Um was für Dateien handelt es sich hier?

63
Wechseln Sie in das Verzeichnis root. Was passiert?

64
In welchem Verzeichnis sind Sie nun?

65
Wechseln Sie in das Verzeichnis etc.

66
Wann wurde das Verzeichnis cron.daily erstellt?

67
Was bewirkt der Schalter -G beim Befehl ls

68
Testen Sie den Schalter -G bei der ausführlichen Anzeige des Inhalts des Verzeichnis cron.daily.

69
Öffen Sie die Datei do_mandb aus cron.daily im vi. Welchen Hinweis bekommen Sie.

70
Beenden Sie den vi ohne zu speichern.

71
Wechseln Sie wieder in das Heimatverzeichnis von walter.

72
Öffnen Sie die Datei wasichschonimmersagenwollte mit dem vi.

73
Löschen Sie das Wort KDE.

74
Schreiben Sie an der Stelle jetzt Gnome hinein.

75
Gehen Sie an den Anfang des Dokuments und fügen Sie dort eine Leerzeile ein.

76
Fügen Sie nun in dieser Zeile 75 mal den Asterisk ein.

77
Löschen Sie die Zeile ``Dein Bash-Command geschehe,''

78
Verlassen Sie den vi ohne das Dokument zu speichern.

79
Wenn Sie noch Zeit haben, dann starten Sie das Lernprogramm für den vi und arbeiten es durch, soweit Sie kommen.


4. Die Shell I

4.1 Was ist eine Shell?

Die Shell ist nur ein Linux-Programm. Sie dient als Verbindungsstelle zwischen dem Benutzer und dem Betriebssystem. Ihre Aufgabe ist es, die eingegebene Kommandozeile so umzuformen, daß das Betriebssystem sie interpretieren kann. Daher gibt es auch nicht nur eine Shell, sondern eine Anzahl von Programmen, die diese Vermittlungsaufgabe übernehmen können.

Die älteste, heute noch in der Praxis benutzte Shell ist die von Stephen L. Bourne Mitte der 70er Jahre für ``Unix Version 7'' entwickelte Bourne-Shell. Heute ist sie nur noch selten in ihrer ursprünglichen Form zu finden.

Die C-Shell wurde an der University of California in Berkeley entwickelt. Sie wurde an die Programmiersprache C angelehnt. Allerdings sind die Möglichkeiten der C-Shell kaum vergleichbar mit denen von C.

Eine zur Bourne-Shell weitgehend kompatible Shell ist die von David Korn entwickelte Korn-Shell. Sie wurde aber mit einem größeren Funktionsumfang ausgestattet.

Die Linux-Standard-Shell ist die im Rahmen des GNU-Projekts entwickelte Bash, die Fähigkeiten der Korn- und C-Shell miteinander verbindet. Auf diese Shell werde ich noch genauer eingehen, da Sie auch Prüfungsstoff der ersten LPI-Prüfung ist.

Eine Übersicht über die verschiedenen Shells liefert Tabelle 4.1.


Tabelle 4.1: Übersicht über die häufigsten Shells
Aufruf Shell Kommentar
sh Bourne Shell Oft ein Verweis auf die Bash
bash Bourne Again Shell  
ksh Public Domain Korn Shell Freie Version der Korn-Shell
csh C Shell Oft ein Verweis auf die Tenex C Shell
tcsh Tenex C Shell Verbesserte Version der C Shell


Im Normalfall, wenn man sich auf einem Linux-Rechner einloggt, benutzt man /bin/bash. Die Standard-Shell eines Benutzers wird durch einen Eintrag in der /etc/passwd festgelegt. Der Name der Login-Shell wird in der Umgebungsvariablen SHELL gespeichert. Die Variable enthält nicht zwingend, was viele glauben, den Namen der aktuellen Shell. Den Namen der aktuellen Shell können Sie über die Variable 0 ermitteln. Den Inhalt der Umgebungsvariablen können sie mit dem Befehl echo ausgeben lassen.

ole@enterprise:~> echo $SHELL
/bin/bash
ole@enterprise:~> echo $0
/bin/bash

Weitere Erläuterungen zu den Umgebungsvariablen finden Sie im Verlauf dieses Skripts im Abschnitt 5.2.

Um eine andere Shell zu starten, geben sie einfach das Shellkommando mit seinem Pfad ein. Dies startet eine Kindprozess in dem die neue Shell läuft. Um die Shell zu beenden, geben Sie exit ein.

Im folgenden Beispiel wird durch die Eingabe ksh zur Public Domain Korn Shell 4.1 gewechselt. Dies können Sie an der veränderten Prompt-Einstellung sehen, da die Korn-Shell die Abkürzung ~ fürs Heimatverzeichnis nicht kennt. Trotzdem zeigt die Variable SHELL immer noch die Bash als Shell an. Die Variable 0 hingegen zeigt die aktuelle Shell an.

ole@enterprise:~> echo $SHELL $0
/bin/bash /bin/bash
ole@enterprise:~> ksh
ole@enterprise:/home/ole> echo $SHELL $0
/bin/bash ksh
ole@enterprise:/home/ole> exit
ole@enterprise:~> echo $SHELL $0
/bin/bash /bin/bash

Es gibt drei verschiedene Situationen, in denen eine Shell arbeiten kann. Als interaktive Login-Shell, als interaktive Shell und als nichtinteraktive Shell.

Eine interaktive Login-Shell, meistens nur Login-Shell genannt, wird direkt nach dem Einloggen gestartet und Sie können direkt mit ihr Arbeiten.

Eine interaktive Shell ermöglicht ebenfalls das direkte Arbeiten. Allerdings wurde sie nicht durch einen Login-Vorgang gestartet. Dies kann z. B. durch die Eingabe des Shellprogramms in einer anderen Shell geschehen, wie Sie im obigen Beispiel sehen konnten, oder z. B. durch das Starten einer Terminalemulation auf der graphischen Oberfläche.

Mit einer nichtinteraktiven Shell können Sie nicht am Prompt arbeiten. Sie wird nur zum Ausführen eines Shell-Skripts gestartet und beendet sich nach dem Ende des Skripts automatisch. Damit dient diese Shell nur als eigenständige Umgebung für die Ausführung von vordefinierten Shell-Befehlen ohne Möglichkeiten für den Benutzer direkt einzugreifen.


4.1.1 chsh

Das Kommando chsh ändert dauerhaft die Login-Shell.
chsh [-s LOGINSHELL] [USER]

Der Benutzer kann nur die Shell für sich selbst ändern, während root das für jeden Benutzer machen kann. Dabei ist aber der Benutzer auf die Shells eingeschränkt, die in der Datei /etc/shells aufgelistet werden. Wird die Option -s nicht angegeben, so erfolgt die Änderung der Daten im interaktiven Modus. Vor jeder Änderung wird das Kennwort des Benutzers zur Sicherheit abgefragt.

Optionen
-s LOGINSHELL Die neue Login-Shell
 

4.1.1.0.1 Beispiel

 
Der Benutzer will in Zukunft die Korn-Shell verwenden. Er ändert dies mit
chsh -s /usr/bin/ksh


4.2 Die Bash

Die erste programmierbare Shell wurde von Steve L. Bourne Mitte der 70er Jahre entwickelt und war eine der ersten UNIX-Shells. Als aufwärtskompatibler Nachfolger wurde später die Bourne-Again-Shell oder kurz Bash entwickelt. Sie wurde von Brian Fox und Chet Ramey als Bestandteil des GNU-Betriebssystems entworfen, für das allerdings bisher nur der Compiler, Tools wie z.B. Editoren und die Shell existieren. Der wichtigste Teil des Betriebssystems, der Betriebssystemkern, fehlt allerdings noch. Da alle Teile freie Software sind, sind sie Bestandteile der freien UNIX-Varianten Linux und Free-BSD, die im Prinzip hauptsächlich aus dem Betriebssystemkern mit Treibern bestehen und die anderen Teile, die für ein funktionierendes System notwendig sind, wie eben Compiler, Shell, Editoren, Tools zum Dateihandling oder ähnliches, aus anderen Quellen beziehen. So ist die Bash die Standard-Shell von Linux, wobei auch hier dem Benutzer die Wahlfreiheit gelassen wird, und man jede andere UNIX-Shell verwenden kann.

Im Prinzip ist die Bash nichts weiter als ein normales Programm, was die Kommandos des Benutzers an das Betriebssystem und andere Programme weiterleitet und deren Ausgaben wieder dem Benutzer zur Verfügung stellt.

Als allererstes sollten Sie bei der Bash beachten, daß zwischen Groß- und Kleinschreibung peinlich genau unterschieden wird. So sind mit den Namen ahrschlecker.txt, AHRSCHLECKER.TXT und AhrSchlecker.txt im Gegensatz zu DOS/Windows drei verschiedene Dateien gemeint. Da die meisten Befehle auch nur ausführbare Dateien sind, gilt es natürlich auch für diese. In meinen Schulungen habe ich am Anfang oft Teilnehmer über dieses Verhalten schimpfen hören. Aber dieses Verhalten hat schon seinen Sinn. Schauen Sie sich doch mal folgendes Motto einer Tierschützerin an:

Ich bin gut zu Vögeln.

Meinen Sie jetzt noch immer, daß die Verwendung von Groß- und Kleinschreibung überflüssig ist?

Der Prompt zeigt nicht nur die Bereitschaft der Shell an ein neues Kommando zu empfangen. Er kann auch mit Informationen ausgestattet werden. Bei SuSE wird voreingestellt der eingeloggte Benutzer, der Rechner und das Verzeichnis angezeigt. Verantwortlich für das Aussehen des Prompts sind die Variablen PS1 und PS2.
tapico@defiant:/etc/news >

Unvollständige Befehlszeilen quittiert die Shell (Bourne und Bash) durch Ausgabe des Hilfsprompts, der durch die Variable PS2 festgelegt wird. In der Regel handelt es sich um ein Größer-Zeichen gefolgt von einem Leerzeichen. Häufigste Ursache dafür ist ein fehlendes zweites Anführungszeichen. Durch Eingabe dieses Zeichens wird die Befehlszeile vervollständigt und der Befehl kann ausgeführt werden.

ole@enterprise:~> echo "Hallo Welt
> "
Hallo Welt

Häufig ist es nötig einen Befehl zu wiederholen oder einen Befehl leicht abzuwandeln. Unter Linux steht eine Eingabewiederholung ähnlich dem DOSKEY unter Windows zur Verfügung: die History. Diese wird im wesentlichen über die Cursortasten Auf und Ab gesteuert.

Sollten Sie mal mit dem Platz in einer Zeile nicht auskommen, so kann eine Eingabezeile problemlos verlängert werden, indem man anstatt <RETURN> zu drücken unmittelbar vor <RETURN> einen Backslash \ eingibt.

Gerade am Anfang können Sie ungewollt in Programme raten, mit denen Sie sich nicht auskennen. Hier ein paar Tips, wie Sie solche Programme beenden können.

4.2.1 Kommandosyntax

Ein Kommando ist eine Folge von Zeichenketten, die durch ein oder mehrere Leerzeichen oder Tabulatoren getrennt werden. Die ersten Zeichenkette legt den Namen des Kommandos fest. Die weiteren Zeichenketten werden als Parameter bezeichnet.
KOMMANDO [PARAMETER1] [PARAMETER2] ... [PARAMETERn]
Dabei gehören die Leerzeichen und Tabulatoren nicht zu den Parametern, sondern werden nur als Trennzeichen gewertet. Soll der Parameter hingegen Leerzeichen oder Tabulatoren enthalten, so muß der Ausdruck in einfache (') oder doppelte ('') Anführungszeichen gesetzt werden.

4.2.1.1 Beispiel

 
echo Ich          bin           da!
echo "Ich          bin           da!"

Bei den Parametern wird zwischen Argumenten und Optionen unterscheiden. Optionen werden durch ein - in der Kurzform4.2 oder -- in der langen Form eingeleitet.

Das Kommando legt fest was gemacht werden soll. Die Argumente bestimmen womit und die Optionen wie.

4.3 Arbeiten mit Verzeichnissen

Nach dem Einloggen befinden Sie sich immer in Ihrem Heimatverzeichnis4.3. Dies wird generell abgekürzt durch das Tilde-Zeichen ~. Die folgenden Arbeitsweisen des Tilde-Zeichens werden als Tilde-Ausdehnung (engl. tilde expansion) bezeichnet.

~ Heimatverzeichnis des aktuellen Benutzers
~walter Heimatverzeichnis von dem Benutzer walter
~+ Das aktuelle Arbeitsverzeichnis
~- Das alte Arbeitsverzeichnis

Ihre Funktionsweise können Sie im folgenden Beispiel verfolgen.

ole@enterprise:~/test> echo ~
/home/ole
ole@enterprise:~/test> echo ~walter
/home/walter
ole@enterprise:~/test> echo ~+
/home/ole/test
ole@enterprise:~/test> cd ../Documents/
ole@enterprise:~/Documents> echo ~-
/home/ole/test


4.3.1 pwd

Der Befehl pwd (Print Working Directory), der Bestandteil der Bash ist, zeigt das Verzeichnis an, in dem Sie gerade arbeiten.
pwd


4.3.2 cd

Um in ein anderes Verzeichnis zu wechseln benutzt man das Kommando cd (Change Directory). Dabei ist cd kein eigenständiges Programm sondern wie pwd ebenfalls Bestandteil der Bash.
cd [DIRECTORY]

Das Zielverzeichnis kann dabei auf absolute oder relative Weise angegeben werden. Bei der absoluten Darstellung geht man immer von der Wurzel (root) aus. Diese Pfadangaben beginnen immer mit einem Slash /. Bei der relativen Pfadangabe wird dagegen von dem aktuellen Verzeichnis als Startpunkt ausgegangen. Jedes Verzeichnis enthält zwei besondere Verzeichnisse. Das Verzeichnis . steht für das Verzeichnis selber, während .. für das übergeordnete Verzeichnis (Elternverzeichnis) steht.

Um wieder zurück ins Heimatverzeichnis zu kommen gibt es mehrere Wege. Sie können zum einen den absoluten oder relativen Pfad zum Verzeichnis angeben. Kürzer geht es aber mit den Befehlen cd ~ oder ganz kurz nur mit cd.


4.3.3 ls

Eine Reihe von Befehlen ermöglicht es, sich den Inhalt eines Verzeichnisses anzusehen. Der am häufigsten benutzte Befehl ist ls (LiSt).
ls [OPTIONEN] [DATEINAME]

Für DATEINAME können Namen von Dateien oder Verzeichnissen4.4 verwendet werden. Dabei kann, um eine Menge von Dateinamen zu bilden, Metazeichen (Joker) verwendet werden. Die bekanntesten Joker sind dabei das Fragezeichen ?, das für ein einzelnes beliebiges Zeichen steht, und der Asterisk *, der für eine beliebige Anzahl beliebiger Zeichen steht.

Optionen
-a Anzeige aller Dateien, auch derjenigen, die mit . beginnen.
-A Anzeige aller Dateien außer . und ..
-c Sortiert zusammen mit -t Dateien nach dem Datum der letzten Änderung der Inode (Verwaltungsinformationen). Standardsortierfolge ist nach ASCII-Zeichen. Die Anzeige des entsprechenden Datums erfolgt zusammen mit -l. (ls -ctl)
-d Verzeichnisse in der Liste der Argumente werden wie andere Dateien behandelt. Unterdrückung der Durchsuchung des Inhalts von Verzeichnissen.
-l Anzeige ausführlicher Dateiinformationen. Viele Schalter haben nur im Zusammenhang mit -l eine Bedeutung, da sie nicht automatisch die Information anzeigen sondern nur vorbereiten (z. B. -e oder -k).
-r Ausgabe in umgekehrter Sortierreihenfolge
-t Sortiert Dateien nach dem Datum der letzten Änderung. Standardsortierfolge ist nach ASCII-Zeichen. Die Anzeige des Datums erfolgt zusammen mit -l.
-x Spaltenweise Ausgabe der Dateinamen, im Gegensatz zu -C jedoch waagerecht geordnet.
-m Ausgabe der Dateinamen als durch Komma getrennte Liste.
-F Kennzeichnung diverser Dateitypen durch Anhängen von Sonderzeichen: / für Verzeichnisse, * für ausführbare Dateien, @ für Links, | für FIFOs und = für Sockets.
-R Rekursive Anzeige, d. h. es werden nicht nur Verzeichnisse nach ihrem Inhalt durchsucht, sondern auch darin enthaltene (Unter-) Verzeichnisse. Nicht zusammen mit -d anwendbar.
 


Tabelle 4.2: Weitere Optionen des Befehls ls
\begin{table}\begin{small}
\begin{center}
\begin{tabular*}{16cm}{p{2cm}p{14cm}}
...
...IX-Systemen voreingestellt).\\
\end{tabular*}\end{center}\end{small}\end{table}


Eine Auflistung von weiteren Schaltern finden Sie in Tabelle 4.2. Es gibt eine Reihe von alternativen Optionen. Z. B. ist --tabsize=zahl eine Alternative zu -T zahl. Diese Optionen sind selbsterklärend (wenn man Englisch kann und Phantasie hat) und werden stets mit doppeltem Minuszeichen eingeleitet, da sie sonst wegen ihrer Länge mit Zusammenfassungen der herkömmliche Schalter verwechselt werden können. Man kann sie sich mit ls --help anzeigen lassen.

Über die Ausgabe des ls-Befehls sollten sie noch wissen:

4.3.3.0.1 Beispiel

 
Ausgabe des Befehls mit der Option -Fl
tapico@defiant:~/test > ls -Fl
total 4
lrwxrwxrwx   1 ole      users           9 May  9 22:00 hallo -> hallowelt*
-rwxr-xr-x   1 ole      users          36 May  9 21:56 hallowelt*
-rw-r--r--   2 ole      users         401 May  9 22:04 liste
-rw-r--r--   2 ole      users         401 May  9 22:04 myliste
drwxr-xr-x   2 ole      users        1024 May  9 21:55 mytest/
prw-r--r--   1 ole      users           0 May  9 21:54 testpipe|

Dabei enthalten die Spalten von links nach rechts gelesen: Dateityp und Rechte, Anzahl der Hardlinks, Besitzer, Gruppe, Größe in Byte, Monat, Tag, Uhrzeit, Dateiname und Dateityp (durch -F). Den Dateityp aus der ersten Spalte können Sie aus der Tabelle 4.3 entnehmen.


Tabelle 4.3: Die Kennzeichnung der Dateiarten durch ls -l
Kennzeichen Bedeutung
- gewöhnliche Datei
d Verzeichnis (directory)
c zeichenorientierte Gerätedatei (character device)
b blockorientierte Gerätedatei (block device)
p FIFO-Pipeline(named pipe)
l symbolischer Link (symbolic link)
s Netzwerksocket (socket)



4.3.4 dir

Der Befehl dir wird in den einzelnen Distributionen unterschiedlich behandelt. Ursprünglich ein eigenständiges Programm ist er heute entweder ein Alias für ls oder für ls -l.

ole@enterprise:~> type dir
dir is aliased to `ls -l'


4.3.5 vdir

Das Kommando vdir ist fast identisch mit dem Kommando ls. Ohne Schalter eingegeben wirkt es wie ls -l. Die meisten Schalter sind mit denen von ls identisch. Mehr Informationen entnehmen Sie bitte der Manual-Page oder der Texinfo zu vdir.


4.3.6 mkdir

Der Befehl mkdir wird dazu benutzt neue Verzeichnisse zu erstellen.
mkdir [OPTIONEN] [VERZEICHNISPFADLISTE]

Wird die Option -p nicht mit angegeben, so müssen die Elternverzeichnisse für das neue Verzeichnis existieren.

Optionen
-p Erzeugt auch die nötigen Elternverzeichnisse, wenn diese nicht existieren.
-m RECHTE Erlaubt gleich das Setzen der Rechte für das neue Verzeichnis wie durch chmod
 

4.3.6.0.1 Beispiele

 
Dieses Kommando legt das Verzeichnis tex/linux an. Dabei muß das Verzeichnis tex existieren.
mkdir tex/linux

Dieser Befehl legt einen kompletten Verzeichnispfad an. Dabei werden alle Verzeichnisse erzeugt, wenn sie noch nicht existieren.
mkdir -p tex/linux/kurs/material

Auf die neuen Verzeichnisse bekommt nur der Besitzer Rechte.
mkdir -m 700 tagebuch adressen


4.3.7 rmdir

Um leere Verzeichnisse wieder zu löschen, wird der Befehl rmdir verwendet.
rmdir [OPTIONEN] [VERZEICHNISPFADLISTE]

Dabei wird immer das letzte Verzeichnis in der angegebenen Verzeichnishierachie gelöscht. Der Schalter -p ermöglicht das Löschen ganzer Hierachien.

Optionen
-p Löschen aller leeren Verzeichnisse in der Verzeichnishierachie.
 

4.3.7.0.1 Beispiele

 
Dieses Kommando löscht alle Verzeichnisse des Elternverzeichnisses linux.
rmdir tex/linux/*

Soll die ganze Hierachie gelöscht werden, also auch die Verzeichnisse tex/linux und tex gelöscht werden, so lautet der Befehl:
rmdir -p tex/linux/*
Dabei dürfen die Verzeichnisse aber keine weiteren Verzeichnisse oder Dateien enthalten.


4.4 Der Linux-Verzeichnisbaum

Den Linux-Verzeichnisbaum gibt es eigentlich nicht. Jede Distribution hat eine individuellen Verzeichnishierachie für sich entwickelt. Allerdings gibt es einige Verzeichnisse, die eigentlich überall vorhanden sein sollten. Als Leitlinie für den Baum gilt der sogenannte Dateisystemstandard FSSTND (Abkürzung für File System STaNdarD). Dieser wird auch als Filesystem Hierarchy Standard (kurz FHS) bezeichnet. Eine Übersicht über die wichtigsten Verzeichnisse liefert Abbildung 4.1.

Abbildung 4.1: Der Linux-Dateibaum
\includegraphics{lk-dateibaum.eps}

/
Dies ist Basis des Verzeichnisbaums und wird als Wurzel oder auch als root bezeichnet. Das Verzeichnis ist das Elternverzeichnis für alle anderen Verzeichnisse. Die folgenden Verzeichnisse müssen nach dem FSSTND als Hard- oder Softlink vorhanden sein: /bin, /boot, /dev, /etc, /lib, /mnt, /opt, /sbin, /tmp, /usr und /var. Die Verzeichnisse /home und /root sind optional, sollten aber vorhanden sein, wenn das passende Untersystem installiert ist.

/bin
Dieses Verzeichnis enthält diverse wichtige Kommandos, die für den Systemadministrator und für normale Benutzer wichtig sind. Dieses Verzeichnis darf nach FSSTND keine Unterverzeichnisse enthalten und folgenden Programme sollten enthalten sein. cat (4.5.2), chgrp (9.2.2), chmod (9.2.3), chown (9.2.1), cp (4.5.3), date (4.6.3), dd (4.5.4), df (10.8.2), dmesg (12.1.3), echo (4.6.5), false (8.2.3), hostname (18.2.4), kill (12.9.7), ln (10.7.3), login (), ls (4.3.3), mkdir (4.3.6), mknod (), more (4.5.9), mount (10.3.1), mv (4.5.6), ps (12.8.1), pwd (4.3.1), rm (4.5.7), rmdir (4.3.7), sed (7.7.6), sh (8.6.3), stty (5.1.3), su (8.1.2), sync (10.3.4), true (8.2.3), umount (10.3.3) und uname (14.4.1).

/boot
Enthält den Kernel und für das Booten wichtige Dateien.

/dev
Das Verzeichnis für die Gerätedateien.

/etc
Konfigurations- und Informationsdateien, darunter magic, DIR_COLORS, input_rc u. v. m.

/etc/rc.d
Enthält die für den Bootvorgang wichtigen Skripte und die rc-Verzeichnisse.

/etc/skel
Aus diesem Verzeichnis werden die Konfigurationsdateien (skeleton user files) für einen neuen Benutzer in dessen Heimatverzeichnis kopiert.

/etc/X11
Die Konfigurationsdateien des X-Window-Systems liegen hier.

/home
beherbergt die Heimatverzeichnisse, in denen normalerweise keine Rechte die Arbeit des Benutzers einschränken. Es ist somit für den normalen Benutzer von existentieller Bedeutung. In größeren LINUX-Systemen sollte für dieses Verzeichnis entsprechender Platzbedarf einkalkuliert werden, da hier die Benutzerdaten abgelegt werden. Häufig wird es dann auf einen Extra-Datenträger ausgelagert, der beim Systemstart separat gemountet wird.

/lib
Hier findet man die Bibliothek des C-Compilers, sowie sogenannte Shared Libraries, Programmbibliotheken (vereinfacht gesagt Programmteile), die von verschiedenen Anwendungen benutzt werden können. Diese Programmteile werden erst zur Laufzeit in den Arbeitsspeicher geladen, wenn das betreffende Programm sie benötigt. Dadurch und durch die Tatsache, daß verschiedene Programm darauf zugreifen können (shared) wird der Arbeitsspeicher wesentlich entlastet. Sind Sie Windows-Benutzer kennen Sie sicherlich .DLL-Dateien. Diese werden unter Windows entsprechend genutzt.

/Lost+found
Dieses Verzeichnis wird für wiederhergestellte Dateien verwendet.

/mnt
Hilfsverzeichnis zur Aufnahme von Dateisystemen, die in den LINUX-Verzeichnisbaum gemountet werden sollen.

/proc
ist ein virtuelles Dateisystem für Informationen über die laufenden Prozesse. Der Befehl ps (process status) liefert seine Angaben auf der Basis des Inhalts dieses Verzeichnisses. Jeder Prozeß erhält ein eigenes Unterverzeichnis in dem die Informationen über Ihn gespeichert werden.

/root
ist das Heimatverzeichnis der Superusers (root).

/sbin
Hier liegen die Befehle zur Systemverwaltung wie adduser, mit dessen Hilfe neue Benutzer definiert werden, fsck zur Überprüfung von Dateisystemen oder shutdown, mit dem das System heruntergefahren werden kann. Programme für Systemstart wie init, mit dem diverse Systemdienste (z. B. Drucker- und Zeitdienste) initiiert werden, darunter auch getty (ebenfalls in /sbin zu finden). Über getty erfolgt das Anmelden an der Konsole oder an Terminals, die via serieller Leitung mit dem LINUX-Rechner verbunden sind.

/tmp
Verzeichnis zum Zwischenlagern von Dateien. Hier darf jeder schreiben und lesen.

/usr
Enthält alle wichtigen Programme und Daten wie etwas das Online-Manual, die nicht zum Booten des Systems benötigt werden. Es kann ein Verzeichnis sein, das sich physikalisch auf einem anderen Datenträger befindet als das Bootmedium, auf einer CD-ROM etwa oder an einem entfernten NFS-Server. In dieser Situation müßte dieser Teil des Dateisystems nach dem Booten erst verfügbar gemacht werden. Für den Fall, daß es dabei zu Problemen kommen sollte, stehen die allernötigsten Befehle in verschiedenen anderen Verzeichnissen, z. B. /bin, zur Verfügung.

/usr/bin
enthält die Befehle, die allen Teilnehmern zur Verfügung stehen sollten. Ein Teil dieser Benutzer-Befehle befindet sich aus den oben genannten Gründen (vgl. Eintrag bei /usr) in /bin.

/usr/local
wird für Programme verwendet, die nicht Bestandteil des Betriebssystems sind, wie z. B. das Dokumentenverzeichnis für den Webserver.

/usr/local/bin
Hier werden die Binärdateien von diesen Programmen gespeichert. Dieses Verzeichnis sollte im Suchpfad des Benutzers enthalten sein.

/usr/local/sbin
ist für lokal installierte Administrationstools zuständig.

/usr/include
enthält die Standard-C/C++-Header-Dateien.

/usr/lib
Die statischen Programmbibliotheken sowie die Unterverzeichnisse für Bibliotheken verschiedener Programmiersprachen sind hier zu finden. Enthält auch Links zu X-Window-Dateien.

/usr/man
ist eins der Verzeichnisse für das Online-Manual. Eine unerschöpfliche Informationsquelle für den Benutzer.

/usr/sbin
Analog zu /usr/bin gibt es dieses Verzeichnis für den Superuser (root).

/usr/src
enthält die Quellcodes für die Systemprogramme.

/usr/src/linux
In diesem Unterverzeichnis ist der Quellcode des Systemkerns zu finden.

/usr/X11R6
Enthält Dateien für das X-Window-System. Oft auch nur ein Link auf ein anderes Verzeichnis.

/var
Informationsdateien für das System sind hier abgelegt. Dies sind Tabellen, die von LINUX laufend verändert werden, z. B. die Dateien utmp und wtmp, die Informationen über die eingeloggten Benutzer enthalten. (Standard-UNIX: Die Tabellen befinden sich zum größten Teil in /etc.)

/var/tmp
ist das Ziel der temporären Dateien, die von Anwendungen aus verschiedenen Gründen während eines Programmlaufs angelegt und verändert, zum Programmende aber wieder gelöscht werden. Editoren oder Textverarbeitungen speichern unter Umständen den vom Anwender geschriebenen Text zur Sicherheit in einer temporären Datei. Temporäre Dateien sind kurzlebig und ständiger Änderung unterworfen. Sie sind ein sprechendes Beispiel für die allgemeine Bedeutung des Verzeichnisses /var.

/var/spool
ist der Ort der Warteschlangen (Queues) diverser Spoolprogramme. Dies sind Programme, die im Hintergrund arbeitend Aufträge der verschiedenen Benutzer entgegennehmen und in einer vernünftigen Reihenfolge abwickeln. Da mehrere Benutzer (beinahe) gleichzeitig z. B. einen Druckauftrag an den Druckspooler geben können, sprich drucken wollen, muß dieser dafür sorgen, daß die einzelnen Aufträge sich nicht vermischen und etwa am Drucker zwei Texte zu einem - bunt gemischten - werden. als Hilfsmittel dienen ihnen Warteschlangen, in die die einzelnen Aufträge nacheinander eingereiht und (nach dem Wirkungsprinzip einer FIFO) nach und nach abgearbeitet werden.

/var/spool/lpd
Warteschlangen des Druckerspoolers

/var/spool/mail
Warteschlange für die elektronische Post

/var/spool/uucp
Warteschlange für den Kommunikationsdienst uucp (unix-to-unix-copy)

/var/spool/cron
ist für die Abwicklung von Zeitdiensten über den cron-Dämonenprozeß wichtig, der in regelmäßigen Abständen Tabellen in /var/spool/crontabs daraufhin überprüft, ob sie Anweisungen enthalten, die zum gegenwärtigen Zeitpunkt auszuführen sind.

4.5 Arbeiten mit Dateien


4.5.1 touch

Das Kommando touch ändert die Zeit des letzten Zugriffs und der letzten Änderung auf die aktuelle Zeit. Existiert die Datei nicht, so wird eine neue Dateien erstellt.
touch [OPTIONEN] [DATEILISTE]


4.5.2 cat

Das Kommando cat (concatenate file) kann dazu benutzt werden neue Dateien zu erstellen. Es wird aber hauptsächlich dazu verwendet Dateien zusammenzufügen und sie auf dem Bildschirm oder einem anderen Gerät auszugeben.
cat [OPTIONEN] [DATEILISTE]

cat wird vor allem als Tool zum Anzeigen und Zusammenfügen von Dateien verwendet und als schneller Mini-Editor.

Optionen
-b Nummeriert alle nichtleeren Zeilen durch
-e Gleich mit -vE
-n Nummeriert alle Zeilen durch (-b hat Vorrang)
-E Fügt am Ende jeder Zeile ein $ ein
-s Faßt aufeinanderfolgende Leerzeilen zu einer Leerzeile zusammen
-v Zeigt alle nichtdruckbaren Zeichen durch Metazeichen an
-T Zeigt Tabulatoren als Î an
-A Zeigt alle nichtdruckbaren Zeichen, Tabulatoren als Î und das Zeilenende als $ an (vgl. -vET)
 

4.5.2.0.1 Beispiel

 
Fügt die Dateien t1 und t2 zusammen und schreibt sie in die Datei t3.
cat t1 t2 > t3

Ein einfacher Editor kann mit cat realisiert werden.
cat > text.txt
Dieser Befehl liest die Daten nicht aus einer Datei sondern von der Standardeingabe und schreibt sie dann in die Datei text.txt. Die Eingabe wird mit <CTRL>+<D> (EOF-Zeichen) beendet.


4.5.3 cp

Um Kopien von einer Datei oder einem Verzeichnis zu erstellen wird das Kommando cp verwendet.
cp [OPTIONEN] QUELLDATEI ZIELDATEI
cp [OPTIONEN] QUELLDATEILISTE ZIELVERZEICHNIS
Wird ein Dateiname für die Quelle angegeben, so kopiert cp die Datei in eine zweite Datei (ZIELDATEI). Ist der letzte Parameter ein Verzeichnis, dann wird die Datei in das Verzeichnis kopiert. Listen von Quelldateien können nur in ein Verzeichnis kopiert werden. Allerdings kann cp in der Normaleinstellung keine Verzeichnisse kopieren.

Optionen
-a Kopiert die Dateien unter Beibehaltung von Struktur und Attributen
-b Erzeugt von jeder überschriebenen Datei eine Sicherheitskopie
-f Überschreiben von vorhandenen Zieldateien
-i Nachfragen vorm Überschreiben von vorhandenen Zieldateien
-l Legt Hardlinks anstatt Kopien der Dateien an
-s Legt Softlinks anstatt Kopien der Dateien an
-p Überträgt Besitzer, Gruppe, Rechte und Zeitmarken an die neue Datei
-P Kopieren der Dateien inklusiver ihrer Verzeichnisstruktur
-r Kopiert rekursiv Dateien aus Verzeichnissen
-R Wie -r, aber anstatt die Inhalte der Dateien zu kopieren, werden die Datei wie sie sind kopiert
-u Kopiert nur Dateien, die jünger sind als die Zieldateien
-v Zeigt die Namen der kopierten Dateien an
 

4.5.3.0.1 Beispiel

 
Die folgende Kommandosequenz kopiert alle Dateien des aktuellen Verzeichnis unter Beibehaltung ihrer Strukturen.
cp -dpRP * \backup


4.5.4 dd

Das Programm dd (Device to Device copy) ist ein spezielles Kopierprogramm. Es wird in aller erster Linie dazu genutzt um Dateien von einem Gerät zu einem anderen zu kopieren.
dd [OPTIONEN]

Optionen
if=DATEI Die Eingabedatei
of=DATEI Die Ausgabedatei
bs=BLOCKGRÖSSE Anzahl der Bytes, die auf einmal gelesen bzw. geschrieben werden.
 

4.5.4.0.1 Beispiel

 
Dieser Befehl legt eine Kopie einer Diskette in der Datei BackupDisk an.
dd if=/dev/fd0 bs=512 of=BackupDisk


4.5.5 Erstellung der Bootdisketten mit dd

Unter Linux können sie ebenfalls, wie unter DOS (Abschnitt 1.4.1) die Bootdisketten erstellen. Hierzu werden die gleichen Images im Verzeichnis /disks der CD 1 verwendet. Die Disketten müssen low-level-formatiert sein. Dazu kann der Befehl fdformat (Abschnitt 10.4.2) verwendet werden.

Nachdem die CD auf das Verzeichnis /cdrom gemountet worden ist, können mit den Befehlen

dd if=/cdrom/disks/bootdisk of=/dev/fd0 bs=8k
dd if=/cdrom/disks/modules1 of=/dev/fd0 bs=8k
dd if=/cdrom/disks/modules2 of=/dev/fd0 bs=8k
dd if=/cdrom/disks/modules3 of=/dev/fd0 bs=8k
die Bootdisketten erzeugt werden.


4.5.6 mv

Um Dateien zu verschieben oder umzubenennen wird das Kommando mv verwendet.
mv [OPTIONEN] ALTERDATEINAME NEUERDATEINAME
mv [OPTIONEN] QUELLDATEILISTE ZIELVERZEICHNIS
Werden zwei Dateinamen als Parameter vergeben, dann wird die Datei umbenannt. Ist der letzte Parameter ein Verzeichnis, dann werden die angegebenen Dateien in dieses Verzeichnis verschoben.

Optionen
-b Erzeugt von jeder überschriebene Datei eine Sicherheitskopie
-f Überschreiben von vorhandenen Zieldateien
-i Nachfragen vorm Überschreiben von vorhandenen Zieldateien
-u Verschiebt nur Dateien, die jünger sind als die Zieldateien
 

4.5.6.0.1 Beispiel

 
Die folgende Kommandosequenz benennt die Datei megabox.txt in die Datei MEGABOX.txt um.
mv megabox.txt MEGABOX.txt

Mit dem folgenden Kommando werden alle Dateien aus dem aktuellen Verzeichnis in das Verzeichnis /home/harald verschoben und eventuell vorhandene Zieldateien überschrieben.
mv -f * /home/harald


4.5.7 rm

Der Befehl rm löscht die angegebenen Dateien. In seiner Standardeinstellung löscht er keine Verzeichnisse.
rm [OPTIONEN] DATEILISTE
Um eine Datei zu löschen, benötigt man das Schreibrecht (w) auf das Verzeichnis, aber nicht auf die Datei. Sollte ein Datei nicht das Schreibrecht besitzen, so erbittet rm nur eine Bestätigung des Löschbefehls, wenn kein -f oder wenn ein -i gesetzt ist.

Optionen
-d Löscht ein Verzeichnis durch Entfernen des Hardlinks. Volle Verzeichnisse werden auch gelöscht. Da die enthaltenen Dateien nicht mehr referenziert werden, ist es ratsam ein fsck danach auszuführen. (Nur Superuser)
-f Löscht alle Dateien ohne explizites Nachfragen. Überlagert die Option -i
-i Fragt vor jedem Löschen einer Datei um Bestätigung
-r Löscht Verzeichnisse und deren Inhalt rekursiv
 

4.5.7.0.1 Beispiel

 
Der folgende Befehl löscht alle Dateien, die mit .temp enden.
rm *.temp

Vorsicht! Dieser Befehl versucht die gesamte Dateistruktur ohne Nachfragen zu löschen. Als root ausgeführt ist das Ergebnis fatal.
rm -rf /


4.5.8 Dateibezeichnung mit Jokerzeichen

Bei der Arbeit mit der Shell kommen Sie oft in Situationen, in denen Sie nicht nur einzelne Dateien oder alle Dateien in einem Verzeichnis ansprechen wollen, sondern nur eine Gruppe von Dateien (z. B. alle HTML-Dateien) bearbeiten möchten. Für diesen Zweck besitzt die Shell die sogenannten Jokerzeichen (Wildcards).

Wenn diese Jokerzeichen eingesetzt werden, gibt die Shell nicht einen einzelnen Dateinamen zurück, sondern eine Liste von Dateinamen, auf die das Muster zutrifft. So erhalten Sie mit dem Muster *.jpg eine Liste aller Dateinamen, die mit .jpg enden.

tapico@defiant:~> echo *.jpg
helm35.jpg helm37.jpg helm38a.jpg helm59.jpg
tapico@defiant:~> cp *.jpg ~/bilder

Denken Sie daran. Die Shell und nicht der Befehl interpretiert das Kommando. Deshalb müssen die Jokerzeichen in manchen Fällen maskiert werden, damit sie unbeschadet an den Befehl übergeben werden können. Probieren Sie den unteren Befehl mal ohne Backslash aus.

tapico@defiant:~> echo \* Hallo \*
* Hallo *

Eine Reihe von Jokerzeichen steht Ihnen zur Verfügung.


4.5.8.1 Asterisk *

Der Asterisk bedeutet im Prinzip alles oder nichts. Er steht für eine beliebige Anzahl beliebiger Zeichen. Wobei beliebige Anzahl auch kein Zeichen bedeuten kann. Z. B. stimmt das Muster lk* mit folgenden Dateinamen überein.

tapico@defiant:~> ls lk*
lk-aufbau-ext2.eps         lk-shell.aux        lk.log
lk-dateibaum.eps           lk-shell.tex        lk.pdf.gz
lk-dateisystem.aux         lk-shell.tex.bck    lk.ps
lk-dateisystem.tex         lk-vorwort.aux      lk.tex
lk-dateisystem.tex.bck     lk-vorwort.tex      lk.tex.bck
lk-installation.aux        lk-vorwort.tex.bck  lk.toc
lk-installation.tex        lk.aux              lktex
lk-installation.tex.bck    lk.dvi

4.5.8.2 Fragezeichen ?

Das Fragezeichen steht für genau ein beliebiges Zeichen.
tapico@defiant:~> ls lk.*
lk.aux  lk.idx  lk.ind  lk.pdf.gz  lk.tex      lk.toc
lk.dvi  lk.ilg  lk.log  lk.ps      lk.tex.bck
tapico@defiant:~> ls lk.???
lk.aux  lk.dvi  lk.idx  lk.ilg  lk.ind  lk.log  lk.tex  lk.toc
tapico@defiant:~> ls lk.??
lk.ps

4.5.8.3 Menge [ZEICHEN]

Mit den eckigen Klammern ist es möglich eine Menge von Zeichen vorzugeben, die an dieser Stelle stehen können. So steht [Aa] für ein Zeichen, daß entweder ein großes oder ein kleines A sein kann. Ein Ausrufezeichen in der eckigen Klammer negiert die Bedeutung der Menge. So steht [!aeiou] für ein Zeichen, daß kein Vokal ist.

Innerhalb der Klammern können nicht nur einzelne Zeichen angegeben werden, sondern auch Bereiche. So steht z. B. [a-z] für alle Kleinbuchstaben und [0-9] für alle Zahlen.

tapico@defiant:~> ls lk.???
lk.aux  lk.dvi  lk.idx  lk.ilg  lk.ind  lk.log  lk.tex  lk.toc
tapico@defiant:~> ls lk.[it]??
lk.idx  lk.ilg  lk.ind  lk.tex  lk.toc
tapico@defiant:~> ls lk.[!it]??
lk.aux  lk.dvi  lk.log
tapico@defiant:~> ls [Hh]*
Home.txt  Hurra.jpg  hans.txt  himmel.jpg
tapico@defiant:~> ls [A-Z]*
Amerika.jpg  Home.txt  Hurra.jpg  Qualle.jpg
tapico@defiant:~> ls *[0-9][0-9].jpg
helm35.jpg  helm37.jpg  helm38.jpg  helm59.jpg


4.5.8.4 Klammerexpansion {WORT1,WORT2,WORT3,...}

Die Klammerexpansion (brace expansion) ist im eigentlichen Sinne kein Jokerzeichen. Sie funktioniert nämlich auch ohne existierende Dateien. Die Funktion ist einfach. Der Ausdruck wird jeweils mit dem in den geschweiften Klammern angegebenen und durch Kommata getrennten Zeichenketten ausgegeben.
tapico@defiant:~> echo "Ich bin "{gut,besser,super}"."
Ich bin gut. Ich bin besser. Ich bin super.
tapico@defiant:~> echo {1,2,3}{1,2,3}
11 12 13 21 22 23 31 32 33

Trotzdem können Sie die Klammerexpansion natürlich auch auf Dateioperationen anwenden.

tapico@defiant:~> ls lk-{kernel,shell}.*
lk-kernel.aux  lk-kernel.tex.bck  lk-shell.tex
lk-kernel.tex  lk-shell.aux       lk-shell.tex.bck
tapico@defiant:~> ls lk-*.{tex,eps}
lk-administration.tex  lk-dateibaum.eps    lk-installation.tex  lk-shell.tex
lk-aufbau-ext2.eps     lk-dateisystem.tex  lk-kernel.tex        lk-vorwort.tex


4.5.9 more

Der Befehl more gehört zur Gruppe der Befehle, mit denen man sich den Inhalt von Dateien anschauen kann (pager). Im Gegensatz zu cat (4.5.2) zeigt er die Daten aber seitenweise an.
more [OPTIONEN] DATEILISTE

Befehle
<LEERTASTE> Eine Seite nach unten scrollen
<f> Eine Seite nach unten scrollen
<b> Eine Seite nach oben scrollen
<RETURN> Eine Zeile nach unten scrollen
<s> Eine Zeile nach unten scrollen
</>MUSTER Durchsuchen des Textes nach dem regulären Ausdruck MUSTER
<n> Weitersuchen nach unten
<q> Beenden
 


4.5.10 Der Pager less

Der Befehl less ist die Weiterentwicklung von more4.5.
less [OPTIONEN] DATEILISTE
Neben den Möglichkeiten von more bietet less die Möglichkeit mit den Richtungstasten zu scrollen und mit Lesezeichen, Zeilennummern und prozentualen Textpositionen zu arbeiten. Auch wird less nicht am Ende der Datei beendet.

Zusätzliche Befehle
<j> Eine Zeile nach unten scrollen
<k> Eine Zeile nach oben scrollen
<d> Einen halben Bildschirm nach unten scrollen
<u> Einen halben Bildschirm nach oben scrollen
<f> Einen Bildschirm nach unten scrollen
<b> Einen Bildschirm nach oben scrollen
<g> An den Anfang der Datei scrollen
<G> Ans Ende der Datei scrollen
</> MUSTER Durchsuchen des Textes nach dem regulären Ausdruck <MUSTER> nach unten
<?> MUSTER Durchsuchen des Textes nach dem regulären Ausdruck <MUSTER> nach oben
<n> Weitersuchen nach unten
<N> Weitersuchen nach oben
<q> Programm beenden
<:><n> Nächste Datei in der Liste anzeigen
<:><p> Vorherige Datei in der Liste anzeigen
 

Wichtig ist beim Befehl less die Suche innerhalb eines Textes. Dazu stehen die Kommandos </> und <?> zur Verfügung. Nach Betätigen der jeweiligen Tasten erscheint in der untersten Zeile eine Eingabeaufforderung, wo Sie Ihr Suchmuster eingeben können. Den Zugriff auf alte Suchmuster erhalten Sie durch das Betätigen der Cursortaste für ``hoch'' und ``runter''.

Das Programm less besitzt viele Schalter und Kommandos. Eine Übersicht über die Möglichkeiten von less erhalten Sie durch die Manualpage less(1).


4.5.10.1 Das Konfigurationsprogramm lesskey

Das Programm lesskey erlaubt eine individuelle Konfiguration der Steuerbefehle von less.


4.5.11 file

Der Befehl file analysiert Dateien und gibt ihren Typ aus.
file DATEILISTE

file prüft zunächst anhand der Inode-Informationen, um welchen Datentyp es sich handelt, prüft aber zusätzlich den Anfang der Datei anhand der Informationen, die in der Datei /etc/magic enthalten sind.

Optionen
-b Ausgabe ohne Angabe der Dateinamen
-f DATEINAME Die Dateiliste wird aus der Datei DATEINAME entnommen (Ein Dateiname pro Zeile).
-z Bearbeitet auch den Inhalt von gepackten Dateien
 

4.5.11.0.1 Beispiel

ole@defiant:~ > ls -Fl
total 5
-rw-r--r--   1 ole      users         468 May  9 22:28 194.195.155.105
lrwxrwxrwx   1 ole      users           9 May  9 22:00 hallo -> hallowelt*
-rwxr-xr-x   1 ole      users          36 May  9 21:56 hallowelt*
-rw-r--r--   2 ole      users         401 May  9 22:04 liste
-rw-r--r--   2 ole      users         401 May  9 22:04 myliste
drwxr-xr-x   2 ole      users        1024 May  9 21:55 mytest/
prw-r--r--   1 ole      users           0 May  9 21:54 testpipe|
ole@defiant:~ > file *
194.195.155.105: ASCII text
hallo:           symbolic link to hallowelt
hallowelt:       perl commands text
liste:           ASCII text
myliste:         ASCII text
mytest:          directory
testpipe:        fifo (named pipe)


4.5.12 /etc/magic

Die Datei /etc/magic ist eine Liste von sogenannten ``Magic Numbers''. Dies Magic Numbers sind die Erkennungsmelodien verschiedener Dateiformate, die meistens am Anfang einer Datei stehen.

Die Datei wird von verschiedenen Programmen gebraucht, wie z. B. file (4.5.11).

Der Eintrag z. B. für eine Bilddatei im PNG-Format ist:

# PNG [Portable Network Graphics, or "PNG's Not GIF"] images
# (Greg Roelofs, newt@uchicago.edu)
# (Albert Cahalan, acahalan@cs.uml.edu)
#
# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
#
0       string          \x89PNG         PNG image data,
>4      belong          !0x0d0a1a0a     CORRUPTED,
>4      belong          0x0d0a1a0a
>>16    belong          x               %ld x
>>20    belong          x               %ld,
>>24    byte            x               %d-bit
>>25    byte            0               grayscale,
>>25    byte            2               \b/color RGB,
>>25    byte            3               colormap,
>>25    byte            4               gray+alpha,
>>25    byte            6               \b/color RGBA,
#>>26   byte            0               deflate/32K,
>>28    byte            0               non-interlaced
>>28    byte            1               interlaced
1       string          PNG             PNG image data, CORRUPTED

Die Datei kann sich auch im Verzeichnis /usr/share/misc/magic befinden. Dann ist /etc/magic nur ein Link auf diese Datei. Weitere Informationen können Sie den Manualpages (man 4 magic) entnehmen.

4.6 Weitere Befehle


4.6.1 clear

Dieser Befehl löscht den Bildschirm.
clear


4.6.2 cal

Das Kommando cal zeigt einen Kalender an.
cal [[MONAT] JAHR]
Für JAHR sind Werte zwischen 1 und 9999 erlaubt und für MONAT zwischen 1 und 12.

Optionen
-m Zeigt Montag als ersten Tag der Woche an
-j Benutzt das Julianische Datum
-y Zeigt einen Kalender für das aktuelle Jahr
 


4.6.3 date

Diese Befehl zeigt und setzt das aktuelle Datum und die Uhrzeit. Allerdings kann nur root die Zeit setzen.

4.6.3.1 Zeit anzeigen

Die Anzeige der aktuellen Zeit erfolgt über
date [+FORMATSTRING]

FORMATSTRING ist ein beliebiger Text, der, falls er Sonderzeichen enthält, in Anführungszeichen zu setzen ist. Sinn macht dieser Text allerdings erst, wenn er Platzhalter enthält, die Datum oder Zeit anzeigen. Eine Liste der Platzhalter finden Sie in Tabelle 4.4


Tabelle 4.4: Platzhalter beim Befehl date
%a Abgekürzter Wochentagname nach lokaler Spracheinstellung
%A Voller Wochentagname nach lokaler Spracheeinstellung
%b Abgekürzter Monatsname nach lokaler Spracheinstellung
%B Voller Monatsname nach lokaler Spracheinstellung
%c Datum und Zeit nach lokaler Spracheinstellung
%C Das Jahrhundert (00..99)
%d Tag im Monat (01..31)
%D Datum im Format mm/dd/yy
%e Tag des Monats mit führendem Leerzeichen ( 1..31)
%F Datum im Format %Y-%m-%d
%g Zweistellige Jahresangabe im Zusammenhang mit der Angabe %V
%G Vierstellige Jahresangabe im Zusammenhang mit der Angabe %V
%H Stunde (00..23)
%I Stunde (01..12)
%j Tag des Jahres
%m Monat (01..12)
%M Minuten (00..59)
%n Zeilenumbruch
%N Nanosekunden (000000000..999999999)
%p AM/PM nach lokaler Spracheinstellung
%P am/pm nach lokaler Spracheinstellung
%r Uhrzeit im 12-Stunden-Format (hh:mm:ss am/pm)
%R Uhrzeit im 24-Stunden-Format (hh:mm)
%s Sekunden seit 01.01.1970 00:00:00 Uhr UTC
%S Sekunden (00..60); Die 60 ist für Schaltsekunden notwendig
%t Tabulator
%T Zeit (hh:mm:ss)
%u Tag der Woche (1..7) 1=Montag
%U Kalenderwoche für Wochenanfang Sonntag (00..53)
%V Kalenderwoche für Wochenanfang Montag (01..53)
%w Tag der Woche (0..6) 0=Sonntag
%W Kalenderwoche für Wochenanfang Montag (01..53)
%x Datum nach lokaler Spracheinstellung
%X Zeit nach lokaler Spracheinstellung
%y Jahr (zweistellig)
%Y Jahr (vierstellig)
%z Zeitzone nach RFC-822 in nummerischer Darstellung
%Z Zeitzone


Durch den Formatstring kann das Ausgabeformat bestimmt werden.

tapico@defiant:~> date +"Es ist der %d.%m.%y"
Es ist der 19.01.03
tapico@defiant:~> date +"Es ist %T Uhr"
Es ist 13:47:35 Uhr

Einige der Platzhalter orientieren sich bei der Ausgabe an den lokalen Spracheinstellungen des Systems. Diese ist für eine laufende Sitzung in der Umgebungsvariablen LANG gespeichert. Eine Veränderung dieser Variablen führt daher auch zu einer veränderten Ausgaben des Befehls date. Meist ist beim Benutzer root die Variable nicht gesetzt. Default ist dann Englisch.

ole@enterprise:~> echo $LANG
de_DE@euro
ole@enterprise:~> date +"%x"
14.05.2004
ole@enterprise:~> date +"%c"
Fr 14 Mai 2004 10:53:42 CEST
ole@enterprise:~> date +"Ein %A im %B."
Ein Freitag im Mai.
ole@enterprise:~> LANG=en; export LANG
ole@enterprise:~> date +"%x"
05/14/04
ole@enterprise:~> date +"%c"
Fri May 14 10:54:42 2004
ole@enterprise:~> date +"Ein %A im %B."
Ein Friday im May.

4.6.3.2 Zeit stellen

Der Systemverwalter kann auch Zeit und Datum über diesen Befehl ändern.
date MMTTSSmm[[HH]JJ][.ss]

Wobei MM für Monat, TT für Tag des Monats, SS für Stunde, mm für Minute, HH fürs Jahrhundert, JJ fürs Jahr und ss für die Sekunden stehen.

Die Änderung der Systemzeit hat keine Auswirkungen auf die Hardware-Uhr. Nach dem Neustart des Systems sind die Einstellungen wieder verloren.

Um die Zeit zu setzen brauchen Sie die Berechtigung des Systemadministrators. Wenn Sie als normaler Benutzer eingeloggt sind, wechseln Sie zuerst mit dem Befehl su (8.1.2) ihre Identität zu root. Danach können Sie das Datum einstellen.

tapico@defiant:~> su
Password:
root@defiant:/home/tapico # date 10221735
Mon Okt 22 17:35:00 CEST 2001

Für weitere Informationen zu Schaltern und Platzhaltern geben Sie man date ein.


4.6.4 hwclock

Der Befehl date beschäftigt sich nur mit der Systemzeit. Zum Auslesen und Setzen der Hardware-Uhr können Sie den Befehl hwclock verwenden. Dieser Befehl steht nur dem Systemadministrator zur Verfügung.

hwclock [OPTIONEN]

Für die Anwendung und Möglichkeiten dieses Befehls konsultieren Sie bitte die Manualpage (man 8 hwclock).

Um neben der Systemzeit auch die Hardware-Uhr zu setzen, gehen Sie bitte wie folgt vor.

  1. Wechseln Sie ihre Identität zu root.
  2. Setzen Sie mit dem Befehl date (4.6.3) die Systemzeit.
  3. Setzen Sie nun mit den Befehl hwclock die Systemzeit und Hardware-Uhr gleich.

Das kann dann so aussehen:

ole@defiant:~> su
Password:
defiant:/home/ole # date 01191418
Son Jan 19 14:18:00 CET 2003
defiant:/home/ole # hwclock --systohc


4.6.5 echo

Der Befehl echo wirkt wie ein Echo, indem er einfach den angegebenen Text wieder auf den Bildschirm ausgibt. Seine Haupteinsatz findet er daher in den Shellskripten, der Ausgabe von Texten in Dateien und dem Anzeigen der Inhalte von Variablen.
echo [OPTIONEN] [TEXT]

Optionen
-e erlaubt die Benutzung von Sonderzeichen im Text, z. B:
\n Zeilenumbruch
\a Piepton (ASCII-Zeichen 7)
\b Backspace
\f Seitenvorschub
\ooo beliebiges ASCII-Zeichen in oktaler Notation
-n unterdrückt Zeilenumbruch nach Ausgabe des Textes
 

Texte mit Sonderzeichen (z. B. Leerzeichen) sollten in Anführungszeichen stehen. echo ohne Angabe eines Textes bewirkt die Ausgabe einer Leerzeile.


4.6.6 Farbcode fürs Terminal

Um Terminals zu konfigurieren werden Codesequenzen benutzt. Sie werden als Escape-Sequenzen bezeichnet, da sie mit dem Escape-Zeichen (0x1B)4.6 beginnen. So kann die Farbe der Ausgabe festgelegt werden. Mit der Sequenz <ESC>[{attr};{fg};{bg}m kann nun die Farbe vorgegeben werden.

So bewirkt der Befehl
echo "^[[0;31;40mIch sehe rot"
daß der Text `Ich sehe rot' in roter Farbe ausgegeben wird. Das erste Zeichen ist das Escape-Zeichen. Es wird als ^[ dargestellt. Um es zu schreiben drücken Sie <STRG>+<V> und dann <ESC. Um wieder den Normalzustand herzustellen, müssen Sie für die Konsole den Befehl
echo "^[[0;37;40m"
eingeben.

Eine Liste der möglichen Farben und Attribute liefert Tabelle 4.5. Diese Werte werden auch in den Dateien /etc/DIR_COLORS und .dir_colors für die Farbcodierung verwendet. Eine vollständige Liste der Konsolen-Codes liefert die Manpage console_codes (4).

ole@enterprise:~> man 4 console_codes


Tabelle 4.5: Farbcodes fürs Terminal
{attr} {fg} {bg}
0 Normaler Modus 30 Schwarz 40 Schwarz
1 Hell oder Fett 31 Rot 41 Rot
2 Dunkel 32 Grün 42 Grün
3 Unterstrichen 33 Gelb 43 Gelb
5 Blinkend 34 Blau 44 Blau
7 Invertiert 35 Margenta 45 Margenta
8 Versteckt 36 Türkis 46 Türkis
    37 Weiß 47 Grau
        48 Weiß
Die Möglichkeit der Darstellung nach den oben gezeigten Farbcodes hängt stark vom darstellenden Terminal ab. Gerade Attribute wie Unterstrichen und Blinkend funktionieren meistens nicht.



4.6.7 logout

Dieses bash-Kommando beendet die Sitzung eines Benutzers.
logout


4.6.8 script

Der Befehl script sorgt dafür, daß alle Ausgaben auf den Bildschirm gleichzeitig in einer Datei mitgeloggt werden. Dabei wird alles mitgeschrieben bis der Benutzer sich wieder ausloggt. Dieses Kommando eignet sich sehr gut zum Protokollieren von Aktionen.
script [OPTIONEN] [DATEI]

Wird kein Dateiname angegeben, so wird automatisch die Datei typescript angelegt.


4.6.9 telnet

Natürlich gibt es auch eine Möglichkeit eine Linux-Rechner als Terminal zu verwenden. Das Programm telnet ermöglicht den Zugang zu anderen Rechnern. Im Gegensatz zu Windows sehen Sie im Textterminal keine Unterschied ob Sie direkt an der Konsole oder über telnet arbeiten.
telnet HOST [PORT]

Achtung! Aus Sicherheitsgründen können Sie sich nicht als root über Telnet an einem Rechner anmelden. Sie müssen sich erst als normaler Benutzer einloggen und können dann einen Identitätswechsel zum Superuser vollziehen.

Weitere Informationen über das Programm telnet finden Sie in den Manual-Pages über den Befehl man telnet und im Abschnitt 18.3.4.


4.6.10 tty

Die Ausgabe eines Befehls landet immer auf der Konsole oder dem Terminal, auf dem es gestartet wurde. Aber auf welcher Konsole bin ich denn überhaupt? Da hilft der Befehl tty weiter.
tty

4.6.10.0.1 Beispiel

 
tapico@defiant:~ > tty
/dev/pts/0

Shell 1 % latex2html id marker 4650
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.

80
Loggen Sie als Benutzer walter auf Konsole 1 ein!
81
Führen Sie den Befehl rm -rf * aus. Was bewirkt der Befehl?
82
Legen Sie eine leere gewöhnliche Datei mit dem Namen ogottogottogott an.
83
Wechseln Sie ins Elternverzeichnis (Nach .. also)
84
In welchem Verzeichnis sind Sie jetzt?
85
Stellen Sie fest, welche Dateien hier sind!
86
Löschen Sie den Bildschirm. (Nicht mit Wasser!)
87
Wechseln Sie in das Verzeichnis mit Ihrem Benutzernamen!
88
Lassen Sie sich den Text ``Moin, Moin'' begleitet von einem Piepton auf dem Bildschirm ausgeben.
89
Welche Dateien gibt es im aktuellen Verzeichnis?
90
Wechseln Sie zur Dateisystemwurzel! Welche Dateien gibt es hier?
91
Wechseln Sie in das Verzeichnis /boot!
92
Welche Dateien finden Sie hier?
93
Wechseln Sie in das Verzeichnis /dev?
94
Prüfen Sie den Inhalt des Verzeichnisses! Kommen Ihnen einige Namen bekannt vor?
95
Wechseln Sie ins übergeordnete Verzeichnis (nach .. also).
96
Wechseln Sie ins Verzeichnis /bin !
97
Stellen Sie fest, welche Dateien mit dem Anfangsbuchstaben l (wie Ludwig) vorhanden sind.
98
Lassen Sie sich ausführliche Informationen über die Dateien im Verzeichnis /etc geben!
99
Stellen Sie fest, in welchem Verzeichnis Sie sind! Wechseln Sie, falls notwendig, ins Verzeichnis /bin !
100
Legen Sie ein Verzeichnis mit Ihrem Benutzernamen in /bin an!
101
Wechseln Sie in Ihr Heimatverzeichnis!
102
Legen Sie im Heimatverzeichnis die Verzeichnisse test, org, org/hh und org/ki an!
103
Stellen Sie fest, wem die Verzeichnisse test und org in Ihrem Heimatverzeichnis gehören!
104
Erstellen Sie (mittels echo text > datei) eine Datei namens keks in ihrem Heimatverzeichnis (Inhalt beliebig)!
105
Wechseln Sie nach org/hh !
106
Stellen Sie fest, in welchem Verzeichnis Sie sind!
107
Legen Sie (wie in Aufgabe 25) eine Datei bonbon im aktuellen Verzeichnis an!
108
Lassen Sie sich den Inhalt des aktuellen Verzeichnisses anzeigen!

% latex2html id marker 4668
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

109
Lassen Sie sich den Inhalt Ihres Heimatverzeichnisses anzeigen!
110
Wechseln Sie ins Heimatverzeichnis!
111
Löschen Sie die Verzeichnisse org und test mit dem Befehl rmdir!
112
Stellen Sie fest, welche Dateien in /usr/bin sind!
113
Lassen Sie sich alle Dateien/Verzeichnisse des Heimatverzeichnisses anzeigen außer den der Standardeinträge . und .. !
114
Lassen Sie sich die Inode-Nummern der Dateien des Verzeichnisses /usr/bin anzeigen!
115
Wann wurde zuletzt auf die Datei /usr/share/doc/packages/shadow/HOWTO zugegriffen?
116
Wie groß (Byte) ist die Datei /etc/passwd ?
117
Wem gehört die Datei /boot ?
118
Wieviele Links gibt es für Ihr Heimatverzeichnis?
119
Lassen Sie sich die gesamte Verzeichnisstruktur (Unterverzeichnisse) von /usr anzeigen!
120
Welche Dateien in dem Verzeichnis /boot beginnen mit :?
121
Gibt es in /dev ausführbare Dateien?
122
Vergleichen Sie die Inode-Nummern der Dateien . und .. in der Wurzel!
123
Welche Inode-Nummern haben die Dateien mv, cp und ln in /bin ?
124
Lassen Sie sich ausführliche Informationen über das aktuelle Verzeichnis anzeigen, nicht aber über die darin enthaltenen Dateien!
125
Kopieren Sie alle Dateien aus /usr/share/doc/packages/shadow ins aktuelle Verzeichnis!
126
Prüfen Sie die Zeit der letzten Änderung von HOWTO im aktuellen Verzeichnis und in
/usr/share/doc/packages/shadow!
127
Erstellen Sie die Verzeichnisse PRIMA, PrimA und prima im aktuellen Verzeichnis!
128
Verschieben Sie HOWTO aus dem aktuellen Verzeichnis nach prima !
129
Kopieren Sie die Dateien README und ogottogottogott aus dem aktuellen Verzeichnis in einem Arbeitsgang nach prima !
130
Wechseln Sie nach prima !
131
Benennen Sie ogottogottogott um in meingottwalter !
132
Benennen Sie README um in .juhe !
133
Kopieren Sie alle Dateien des aktuellen Verzeichnisses in einem Zug ins Heimatverzeichnis! Wechseln Sie danach ins Heimatverzeichnis !
134
Wann wurde die Datei ogottogottogott zum letzten Mal geändert?
135
Setzen Sie die Zeit des letzten Zugriffs und der letzten Änderung auf die aktuelle Zeit.
136
Löschen Sie das komplette Verzeichnis prima, unterdrücken Sie dabei Rückfragen!
137
Lassen Sie sich den Text ``Fertig'' in roter blinkender Schrift auf dem Bildschirm ausgeben. Achten Sie dabei darauf, daß der Prompt wieder dem ursprünglichem Schema entspricht.
138
Löschen Sie den Bildschirm.


5. Die Shell II

5.1 Die gewissen Extras

Um dem Benutzer die Arbeit mit dem Rechner zu erleichtern, besitzt die Shell einige sehr nützliche Funktionen. Das fängt mit dem Editor für die Eingabe der Befehle an, umfaßt Hilfen zur Eingabe langer Dateinamen und vieles mehr.


5.1.1 Readline Library

Wenn Sie auf der Eingabezeile arbeiten, benutzen Sie den Editor Readline Library der Free Software Foundation. Standardmäßig arbeitet er im emacs-Modus. D. h. er verwendet zur Steuerung die gleichen Befehle wie der Editor emacs.

Eine Übersicht über die Steuerungsbefehle finden Sie in Tabelle 5.1.


Tabelle 5.1: Steuerbefehle für den emacs
Hinweis: Bei manchen Editoreinstellungen löscht die Taste <DEL> das rechte Zeichen und <BACKSPACE> das linke Zeichen.
Tasten Aktion
<CTRL>+<b> Ein Zeichen nach links
<CTRL>+<f> Ein Zeichen nach rechts
<ESC>+<b> Anfang des nächsten Wortes links
<ESC>+<f> Anfang des nächsten Wortes rechts
<CTRL>+<a> Anfang der Zeile
<CTRL>+<e> Ende der Zeile
<DEL> Löscht Zeichen links vom Cursor
<CTRL>+<d> Löscht Zeichen rechts vom Cursor
<ESC>+<DEL> Löscht das Wort links vom Cursor
<ESC>+<d> Löscht das Wort rechts vom Cursor
<CTRL>+<k> Löscht vom Cursor bis zum Ende der Zeile


Anstatt der Readline Library kann man auch einen anderen Editor für die Eingabezeile benutzen. Um z. B. den vi zu benutzen, geben Sie ein:
set -o vi

Zurück kommen Sie mit
set -o emacs


5.1.2 inputrc

Die Konfigurationsinformationen für die Eingabezeile befinden sich in der Datei /etc/inputrc. Um diese Einstellungen individuell zu ersetzen, kann im Heimatverzeichnis die Datei .inputrc erstellt werden. Die Informationen dieser Konfigurationsdatei werden nur beim Einloggen ausgelesen.

So kann z. B. die Tastaturbelegung selbst definiert werden. Die Codesequenzen, die der Shell für die Tasten übermittelt werden, können von der Eingabeoberfläche abhängen. So steht die Sequenz \e[11~ für die Taste <F1> bei einem X-Window-Terminal (xterm, kvt) oder einem Telnet-Terminal. Dagegen übermittelt die normale Linuxkonsole (linux) die Codesequenz \e[[A für das Drücken der Taste <F1>.

Um die Taste <F1> mit dem Befehl ls -l zu belegen, muß folgender Eintrag in die .inputrc gemacht werden.
"\e[11~": "ls -l"
oder
"\e[[A": "ls -l"
Jedesmal, wenn die Taste <F1> gedrückt wird, erscheint nun ls -l am Prompt. Soll der Befehl dann auch noch sofort ausgeführt werden, dann muß nur noch ein \n hinten angehängt werden.
"\e[11~": "ls -l\n"

Soll eine andere Datei für die Konfiguration verwendet werden, so muß diese mit ihrem Pfad in der Umgebungsvariablen INPUTRC angegeben werden. Bei der SuSE-Distribution ist existiert schon eine fertige Datei /etc/inputrc. Wenn Sie für Benutzer eine individuelle Konfigurationsdatei anlegen wollen, dann kopieren Sie einfach die Datei aus dem Verzeichnis /etc als .inputrc in das jeweilige Heimatverzeichnis und führen dann die Änderungen dort aus.


5.1.3 Terminaleinstellungen mit stty

Mit dem Befehl stty können die Einstellungen von Terminals angezeigt und geändert werden.

stty [-F GERÄT] [OPTIONEN]
stty [-F GERÄT] [EINSTELLUNGEN]

Optionen
-a Zeigt alle Einstellungen in für Menschen lesbarer Form an
-g Zeigt alle Einstellungen in für stty lesbarer Form an
-F Das Terminal (Standard stdin)
 

Die Grunddaten des aktuellen Terminals, das als Standardeingabe fungiert, bekommen Sie, wenn Sie den Befehl ohne Parameter aufrufen. Mit der Option -a wird es wesentlich ausführlicher. Der Aufruf mit -g ist zwar wesentlicher kompakter, aber irgendwie unverständlich für Normalsterbliche.

dozent@linux37:~> stty
speed 38400 baud; line = 0;
-brkint -imaxbel
dozent@linux37:~> stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; 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
dozent@linux37:~> stty -g
100:5:bf:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0

Sie können sich aber auch die Daten anderer Terminals anzeigen lassen. Allerdings müssen Sie auch Rechte für dieses Terminals besitzen, was automatisch passiert, wenn Sie sich auf dem Terminal einloggen.

dozent@linux37:~> ls -l /dev/tty[12]
crw--w----    1 dozent   tty        4,   1 2004-07-01 14:25 /dev/tty1
crw-rw----    1 root     tty        4,   2 2004-07-01 08:06 /dev/tty2
dozent@linux37:~> stty -F /dev/tty1
speed 38400 baud; line = 0;
lnext = <undef>; min = 1; time = 0;
-icrnl
-icanon -echo
dozent@linux37:~> stty -F /dev/tty2
stty: /dev/tty2: Keine Berechtigung

Sie können auch über eine Umleitung ein Terminal ansprechen.

linux37:/home/dozent # stty -F /dev/ttyS0
speed 9600 baud; line = 0;
-brkint -imaxbel
linux37:/home/dozent # stty < /dev/ttyS0
speed 9600 baud; line = 0;
-brkint -imaxbel
Übrigens ist auch eine serielle Schnittstelle ein Terminal.

Interessant wird es, wenn stty zum Setzen von Eigenschaften verwendet wird. Für ein Terminal kann eine Vielzahl von Werten gesetzt werden. Diese setzen Zeichen für verschiedene Aktionen fest, verändern die Kontrollfunktionen und die Ein- und Ausgabeeigenschaften. Eine Übersicht aller Einstellungen finden Sie in der Manualpage stty(1). Hier nur ein paar Beispiele:

Sie können z. B. die Geschwindigkeit der ersten seriellen Schnittstelle auf 38400 bit/s festlegen.

stty -F /dev/ttyS0 38400

Wenn der letzte Prozess das Terminal schließt, wird mit der folgenden Anweisung das Terminal angewiesen ein SIGHUB-Signal an alle angeschlossene Prozesse zu senden. Damit sollten sich die Prozesse eigentlich beenden.

stty hupcl

Ein Minuszeichen vor der Einstellung kehrt die Bedeutung um.

stty -hupcl

Sie können sich auch die Größe des Terminals in Zeilen und Zeichen ausgeben lassen.

linux37:/home/dozent # stty size
24 80

Nach einer neuen Zeile soll möglichst auch ein Wagenrücklauf erfolgen, sprich der Cursor sollte am Anfang der Zeile stehen. Der folgende Befehl führt zu etwas Chaos auf dem Bildschirm. Können Sie ihn auch wieder rückgängig machen?

stty -onlcr

Alle Zeichen können für die Ausgabe in Großbuchstaben umgewandelt werden.

linux37:/home/dozent # stty olcuc
LINUX37:/HOME/DOZENT # STTY -OLCUC
linux37:/home/dozent #

Und es gibt noch viele Einstellungen mehr. Es ist sehr unwahrscheinlich, daß Sie etwas mit diesen Einstellungen zu tun haben sollten. Aber Sie sollten wissen, daß man mit stty die Einstellungen von Terminals abrufen und ändern kann.

5.1.4 Automatische Kommandoergänzung

Die Shell ist konzipiert worden, um dem Benutzer eine komfortable Umgebung zum Arbeiten zu schaffen. Ein Tool dafür ist die automatische Kommandoergänzung. Oft reicht es aus, nur die ersten Zeichen eines Befehls oder Dateinamens einzugeben um diesen eindeutig zu identifzieren. Durch Betätigen der Tabulator-Taste (<TAB>) versucht die Shell diesen Namen zu vervollständigen.

So erweitert die Shell nach Betätigung der Tabulator-Taste die Buchstaben ec zu dem Befehl echo.

Ist der Befehl der Dateiname nicht eindeutig über die ersten Zeichen definiert, so gibt die Shell ein Signalton zurück. Wird die Tabulator-Taste noch einmal betätigt, zeigt die Shell eine Liste von Kommandos, die mit den entsprechenden Zeichen beginnen.

So erhalten Sie beispielsweise nach Eingabe von mk und zweimaligem Betätigen der Tabulator-Taste folgende Liste5.1.

mkdir       mkfontdesc  mkmanifest      mktemp          mktexpk
mkdirhier   mkfontdir   mknod           mktexlsr        mktexftm
mkfifo      mkindex     mksusewmrc      mktexmf
Auf diese Art und Weise können Sie sich auch eine Liste aller zur Verfügung stehenden Befehle ausgeben lassen. Drücken Sie einfach am leeren Prompt zweimal die Tabulator-Taste. Da es nicht gerade wenig Befehle sind, werden Sie dann erst einmal von der Bash gefragt, ob Sie auch wirklich alle Treffer anzeigen lassen möchten.
tapico@defiant:~><TAB><TAB>
Display all 2192 possibilities? (y or n)

Genauso kann man sich auch schnell durch das Dateisystem bewegen. Durch die Eingabe von
cd /h<TAB>t<TAB>mo<TAB>l<TAB>
erhält man z. B. die Kommandosequenz cd /home/tapico/moebius/linux.

Auch wenn Sie den Pfad nicht kennen, hilft die Tabulatortaste weiter. Einfach zweimal die Tabulatortaste drücken und alle in Frage kommenden Verzeichnisse werden angezeigt.

tapico@defiant:~> cd /var/<TAB><TAB>
X11R6     games     log       opt       squid     yp
adm       lib       mail      run       tmp
cache     lock      named     spool     ucd-snmp
tapico@defiant:~> cd /var/
Und was für Verzeichnisse gilt, gilt auch für alle anderen Dateien. Dann natürlich nicht mit cd, sondern einem dateibezogenen Befehl wie z. B. less.
tapico@defiant:~> less /etc/cron<TAB><TAB>
cron.d        cron.hourly   cron.weekly   crontab.old
cron.daily    cron.monthly  crontab
tapico@defiant:~> less /etc/cron

5.1.5 Gruppierung von Kommandos

Unter Linux ist es möglich, mehrere Kommandos in einer Zeile einzugeben. Dabei werden die einzelnen Kommandos durch das Zeichen `;' getrennt.
tapico@defiant:~/test/ > date; echo "Homeverzeichnis"; ls ~
Die Sep 19 23:55:00 MEST 2000
Homeverzeichnis
Desktop     datum       public_html             test.pl         who		
Mail        datum.old   public_html_old	        test1.pl        whoami
cgi-bin     manpages    test                    test2.pl        zulu.txt
Damit die Ausgabe aller Befehle in eine Datei umgeleitet werden kann, müssen die Befehle gruppiert werden. Denn die Befehlssequenz
date; echo "Homeverzeichnis"; ls ~ > dir.txt
würde nur die Ausgabe des ls-Befehls in die Datei umlenken. Richtig muß die Kommandosequenz lauten:
(date; echo "Homeverzeichnis"; ls ~) > dir.txt
Die Klammern gruppieren die Kommandos zu einem Befehl. Deshalb wird dies als Kommandogruppierung bezeichnet.

5.1.6 Bedingte Ausführung

Die Zeichen && und || verknüpfen zwei Befehle miteinander, wobei der zweite Befehl in Abhängigkeit vom Erfolg des ersten Befehls ausgeführt wird.
less index.htm || less index.html
bewirkt, daß nur wenn der erste Befehl keinen Erfolg hat, weil z. B. die Datei nicht existiert, der zweite Befehl ausgeführt wird.

cat index.html && cp index.html /backup
bewirkt, daß nur wenn der erste Befehle erfolgreich war, der zweite Befehl ausgeführt wird.

5.1.7 Substituierung von Kommandos

Oft ist es sinnvoll die Ausgabe eines Kommandos in einem anderen Kommando zu verwerten. Das Einschließen eines Kommandos in $(...) oder in `...` bewirkt, daß die Ausgabe des Kommandos verwendet wird.
tapico@defiant:~ > echo $(pwd)
/home/tapico
tapico@defiant:~ > echo `pwd`
/home/tapico
Die obere Methode ist die neue Syntax der bash. Die zweite zeigt die Syntax der Bourne Shell. Mindestens eine der beiden Methode wird in der bash funktionieren.

5.1.7.0.1 Beispiel

Sie wollen den Kalender des aktuellen Monats in eine gleichnamigen Datei speichern.
tapico@enterprise:~/cal> cal -m > kalender-$(date +"%Y-%m").txt
tapico@enterprise:~/cal> ls -l kalender-*
-rw-r--r--    1 tapico   users         129 Apr 14 12:57 kalender-2002-04.txt


5.2 Variablen

Um bestimmte, immer wiederkehrende Zeichenfolge zu speichern, werden in der Shell sogenannte Variablen verwendet. Jede Variable besitzt einen Namen, über den auf diese Zeichenfolge zugegriffen werden kann. Einer Benutzervariable kann ein Name und ein Wert zugewiesen werden, während die Namen der Umgebungsvariablen festgelegt sind. Eine besondere Form der Benutzervariablen sind die Aliase.


5.2.1 Benutzervariablen

Benutzervariablen werden meistens in Skripten verwendet. Die Variablennamen dürfen aus Buchstaben, Ziffern und dem Unterstrich bestehen. Dabei darf das erste Zeichen keine Ziffer sein.

Den Variablen wird ein Wert durch folgende Sequenz zugewiesen.
VARIABLENNAME=WERT

Um eine Variable zu löschen, reicht es ihr einen Null-Wert zu geben.
VARIABLENNAME=

Die Variablen können nur von dem erzeugenden Prozess und seinen Kinderprozessen verwendet werden. Es sind lokale Variablen.


5.2.2 export

Um eine Variable überall zugängig zu machen, wird das bash-Kommando5.2 export verwendet.
export [OPTIONEN] [NAME[=WERT]]
export ohne die Angabe von Optionen zeigt eine Liste aller exportierten Variablen.

Optionen
-f Die Variable wird als Funktion interpretiert
-n Löschen einer Variablen aus der Liste
-p Liste aller exportierten Variablen (standard)
 

5.2.2.0.1 Beispiel

 
Folgende Kommandos erstellen eine Variable und machen sie global zugänglich.
ILove=Linux; export ILove


Tabelle 5.2: Auszug aus den Umgebungsvariablen
Name Bedeutung
? Fehlercode des letzten ausgeführten Kommandos (0 für ``OK'')
CDPATH Suchpfad für das cd-Kommando
EDITOR Name des Editors, den man verwenden möchte
EUID Effektive Benutzerkennung (ro)
FCEDIT Editor für den Befehl fc
HISTFILE Name und Pfad für die History-Datei
HISTFILESIZE Max. Größe der History-Datei
HISTSIZE Max. Anzahl von Befehlen zur Speicherung in der History-Datei
HOME Heimatverzeichnis des Benutzers
HOSTNAME Name des Rechners
INPUTRC Konfigurationsdatei für Kommandozeileneditor
PATH Suchpfad für Kommmandos
PS1 Aktueller Prompt
PS2 Prompt für die Eingabe fehlender Parameter
PWD Name des aktuellen Verzeichnisses
RANDOM Zufallszahl
SECONDS Sekunden nach Starten der Shell
SHELL Name der benutzten Login-Shell
TERM Art des Linux-Terminals
UID Benutzerkennung (ro)
USER Login-Name des Users



5.2.3 Umgebungsvariablen

Aussehen und Funktionsweise der Shell werden durch die Umgebungsvariablen festgelegt. Die Festlegung der Umgebungsvariablen erfolgt in verschiedenen Dateien, die in /etc oder im Heimatverzeichnis ~ liegen. So findet man z. B. die Umgebungsvariablen der bash in der Datei /etc/profile wieder. Einen Auszug von Umgebungsvariablen gibt Tabelle 5.2 wieder. Ausführlichere Informationen über die Umgebungsvariablen liefert das Kommando man bash.

5.2.3.0.1 Beispiel

 
Schauen wir uns als Beispiel die Variable PWD an, die den Namen des aktuellen Verzeichnisses enthält.
tapico@defiant:~/test > echo $PWD
/home/tapico/test

Der Variablen PWD kann ein neuer Wert zugewiesen werden.

 
tapico@defiant:~/test > PWD=/home/tapico
tapico@defiant:~/ > echo $PWD
/home/tapico
tapico@defiant:~/ > pwd
/home/tapico/test 
tapico@defiant:~/ > echo $PS1
\u@\h:\w >
Nach der Änderung der Umgebungsvariable PWD ändert sich auch das Aussehen des Prompts, da dieser die Umgebungsvariable nutzt. Wie aber der Befehl pwd zeigt, hat sich das aktuelle Verzeichnis nicht geändert.


5.2.4 printenv

Um sich die angelegten Umgebungsvariablen ansehen zu können, wird der Befehl printenv verwendet.
printenv [VARIABLE]
Wird keine spezielle Variable angegeben, so zeigt printenv eine Liste aller Variablen an.


5.2.5 env

env startet ein Kommando mit anderen Umgebungsvariablen.
env [OPTIONEN] [VARIABLE=WERT] [BEFEHL [ARG1] ...]
Wird kein BEFEHL angegeben, so listet env die resultierende Umgebung auf. Es arbeitet dann wie printenv (5.2.4).


5.2.6 Suchpfad

Die Umgebungsvariable PATH enthält eine Liste von Verzeichnissen, die nach einem Kommando durchsucht werden. Die einzelnen Verzeichnisnamen werden durch einen Doppelpunkt `:' getrennt. Im Gegensatz zu DOS wird das aktuelle Verzeichnis . nicht immer durchsucht, sondern muß auch in der PATH-Variable angegeben werden.
 
tapico@defiant:~/ > echo $PATH
/bin:/usr/bin:/usr/local/bin:.
Im Normalfall ist das aktuelle Verzeichnis sogar das letzte in der Suchreihenfolge. Das kann zu Problemen führen. So wird beim Ausprobieren von Skripten z. B. sehr gerne der Name test als Dateiname verwendet. test ist aber ein Programm im Verzeichnis /usr/bin. Daher wird beim Aufruf von test nicht das Skript im aktuellen Verzeichnis, sondern das Programm in /usr/bin gestartet, weil es dort zuerst gefunden wurde.

Die Variable PATH wird in der Datei /etc/profile definiert. Um die Datei für sich selber zu ändern, sollte die Änderung in den Datei ~/.bash_profile , ~/.profile oder ~/.bashrc erfolgen. Welche Datei als Beste dafür geeignet ist, ist von Distribution zu Distribution unterschiedlich.
Bsp.: PATH=$PATH:$HOME/bin


5.2.7 Prompt

Der Prompt steht immer am Anfang einer Kommandozeile. Er zeigt an, daß die Shell auf eine Eingabe wartet. Das Aussehen des Prompts wird durch die Umgebungsvariable PS1 festgelegt.

5.2.7.0.1 Beispiel

 
tapico@defiant:~ > echo $PS1
\u@\h:\w >
\u, \h und \w sind besondere Zeichen, die ausführliche Informationen enthalten. Für eine Liste der speziellen Zeichen siehe Tabelle 5.3.

Wie der Name PS1 schon vermuten läßt, existiert noch eine Umgebungsvariable PS2. Diese steuert das Aussehen des zweiten Prompts. Dieser Prompt taucht immer dann auf, wenn Sie einen Befehl noch nicht vollständig eingegeben und doch die Eingabetaste gedrückt haben. Er zeigt an, daß noch etwas fehlt.

Im folgenden Beispiel fehlt das schließende Anführungszeichen.

ole@enterprise:~> echo $PS2
>
ole@enterprise:~> PS2="ergänzen >"
ole@enterprise:~> echo $PS2
ergänzen >
ole@enterprise:~> echo "Hallo
ergänzen >Welt "
Hallo
Welt
ole@enterprise:~> echo $PS2
ergänzen >


Tabelle 5.3: Spezielle Zeichen für den Prompt. Die kursiven Worte sind Eselsbrücken zum Merken
Zeichen   Bedeutung
\a alert Piepton
\d date Datum Format: Wochentag Monat Tag
\e escape ESC-Zeichen
\h host Hostname bis zum ersten .
\H host Der ganze Hostname
\n newline Neue Zeile
\r return Wagenrücklauf
\s shell Name der Shell
\t time Zeit Format: 24 Stunden HH:MM:SS
\T time Zeit Format: 12 Stunden HH:MM:SS
\@ Zeit Format: 12 Stunden a.m./p.m.
\u user Username des aktuellen Benutzers
\v version Version der bash
\V version Ausgabenummer der bash (Version + Patchstufe)
\w working Aktuelle Arbeitsverzeichnis
\W Der Basisname des aktuellen Verzeichnisses
\! Die Nummer in der History für den aktuellen Befehl
\# Die Nummer des Kommandos für den aktuellen Befehl
\$ Wenn die effective UID 0 ist, dann #, sonst $
\nnn Zeichen mit dem oktalen ASCII-Code nnn
\\ Backslash
\[ Beginn einer Folge von nichtdruckbaren Zeichen
\] Ende einer Folge von nichtdruckbaren Zeihen



5.2.8 alias

Für häufig wiederkehrende Befehle kann ein Alias angelegt werden. Dieses Alias ist vergleichbar mit einem kleinen Skript, wird aber wesentlich schneller ausgeführt. Um z. B. für den Befehl cd .. den Alias .. zu setzen, wird folgendes Kommando eingegeben.

alias ..="cd .."

Die allgemeine Syntax für den Befehl alias lautet:

alias [NAME[=KOMMANDO]]

Dabei gibt das Kommando alias unter Angabe des Aliasnamen das dazugehörige Kommando aus. Der Aufruf ohne Parameter gibt eine Liste aller definierten Aliase mit ihren Kommandosequenzen aus.

Der Befehl alias sowie der Gegenbefehl unalias sind fester Bestandteil der Bash und direkt eingebaut.


5.2.9 unalias

Um die ganze Alias-Geschichte rückgängig zu machen, wird der Befehl unalias verwendet. Damit kann der normale Benutzer Aliase wieder entfernen, die der Systemverwalter für alle Benutzer durch Eintragen in die /etc/.profile angelegt hat.

unalias [-a] [NAMENSLISTE]

Wenn Sie den Schalter -a verwenden, arbeitet unalias sehr gründlich: Alle Alias-Definitionen werden gelöscht.


5.3 History-Liste

Die History-Liste umfaßt die letzten eingegeben Kommandos (events). Diese Liste kann dazu benutzt werden um alte Befehle wieder zu benutzen, sie zu bearbeiten oder sie zu analysieren. Dabei wird jedes Element von der Shell mit einer Nummer versehen.

Beim Starten der Shell wird die History-Liste aus der Datei .bash_history im Heimatverzeichnis erstellt. Die Umgebungsvariable HISTFILE enthält den Namen dieser Datei. Die Größe der Datei in Zeilen wird durch HISTFILESIZE bestimmt. Beim Ausloggen wird eine Anzahl von Zeilen, die in der Variablen HISTSIZE definiert worden ist, an die Datei .bash_history angehängt oder die komplette Datei wird durch diese ersetzt, je nachdem ob das histappend-Attribut der Shell gesetzt ist oder nicht. Mit den Shellvariablen HISTCONTROL und HISTIGNORE kann in Abhängigkeit von im Befehl enthaltenen Zeichen bestimmt werden, welcher Befehl in der History gespeichert wird und welcher nicht.


5.3.1 history

Das bash-Kommando history zeigt den Inhalt der History-Liste an.
history [OPTIONEN] [ZAHL]
Ohne Angabe von Parametern wird die gesamte History-Liste angezeigt. Durch Angabe einer Zahl werden die letzten ZAHL Zeilen der History-Liste angezeigt.

Optionen
-c Löschen der History-Liste
 


5.3.2 fc

Wie auch history ist fc ein bash-Kommando zur Arbeit mit der History-Liste. Es kann zur Bearbeitung und Wiederbenutzung von Kommandos verwendet werden.
 
fc -l [ANFANG] [ENDE]
fc -s [NUMMER]
Der Schalter -f in Kombination mit zwei Zahlen zeigt die Zeilen von ANFANG bis ENDE an. ANFANG und ENDE können auch Zeichenketten sein. Dann werden alle Zeichen vom ersten Auftauchen von ANFANG bis zum ersten Auftauchen von ENDE angezeigt.

Optionen
-l Zeigt ohne Parameter die letzten 16 Kommandos an.
-s Führt ohne Parameter das letzte Kommando aus. Ansonsten das Kommando mit der angegebenen Nummer.
-e Ermöglicht das Bearbeiten der History-Liste
 

Standardmäßig verwendet fc den Editor vi zum Bearbeiten. Durch setzen der Umgebungsvariablen FCEDIT kann auch ein anderer Editor dafür eingesetzt werden. So setzt

tapico@defiant:~> FCEDIT=/usr/bin/joe
tapico@defiant:~> export FCEDIT
den Editor joe als Standardeditor ein.

5.4 Umleitungen der Eingaben und Ausgaben

Normalerweise kommen die Daten für ein Programm von der Standardeingabe oder, wenn es das Programm direkt unterstützt, aus einer Datei. Die Ausgabe des Programms landet in der Standardausgabe und die Fehlermeldungen in der Standardfehlerausgabe. Im Prinzip sind Standardeingabe, Standardausgabe und Standardfehlerausgabe keine Ziele sondern Datenkanäle zu Zielen. Die Standardeingabe ist normalerweise mit der Tastatur verbunden und Standardausgabe und Standardfehlerausgabe stellen ihre Daten auf dem verbundenem Terminal dar. Diese Datenkanäle können aber auch auf ganz andere Ziel zeigen. Dies wird durch Umleitungen und Pipelines ermöglicht.


5.4.1 Umleitung der Eingabe und Ausgabe

Standardmäßig kommen die Eingaben von der Tastatur und die Ausgabe des Programms und seiner Fehlermeldungen landen auf dem Terminal und damit auf dem Bildschirm.


5.4.1.1 Ausgabe

5.4.1.1.1 Ausgabe in eine Datei

Mit dem Zeichen > oder 1> wird die Ausgabe des Programm in die angegebene Datei umgelenkt. Ob das Eingabeziel vor dem Befehl oder nach dem Befehl steht ist relativ egal. Als Konvention hat sich der Platz hinter dem Befehl eingebürgert.

ole@enterprise:~/test> cat *.txt > alle.txt
ole@enterprise:~/test> > nochmal.txt cat *.txt

Dabei wird jedesmal eine neue Datei erstellt und der Inhalt der alten Datei gelöscht.

5.4.1.1.2 Anhängen an eine Datei

Soll die Ausgabe nicht die alte Datei löschen, dann müssen die Daten an die Datei angehängt werden. In diesem Fall verwendet man >>.
ole@enterprise:~/test> date >> blubb.log
ole@enterprise:~/test> >> blubb.log echo $USER $SHELL $0
In diesem Fall wird die blubb.log nicht durch den zweiten Befehl überschrieben sondern ergänzt.

5.4.1.1.3 Ausgabe von Fehlermeldungen

Obwohl die Fehlermeldungen auch an das Terminal gehen, werden sie durch ihren eigenen Datenkanal transportiert. Dies muß natürlich auch im Umleitungszeichen ausgedrückt werden. Mit 2> wird die Standardfehlerausgabe umgeleitet. Oft stören die Fehlermeldungen, wenn sie z. B. nur melden, daß keine Zugriffsrechte auf ein Verzeichnis bestehen.

ole@enterprise:~/test> ls -Rl 2> /dev/null
ole@enterprise:~/test> 2> fehler.log ls -Rl

Die Gerätedatei ist praktisch das Nichts von Linux. Alle Daten, die in diese Datei geleitet werden, gehen verloren und werden nie wieder gesehen. Also der ideale Ort für unsinnige Warnungen, überflüssige Fehlermeldungen oder einfach zum Testen. Schade, daß ich die Ausgabe mancher Menschen nicht in ein solches Gerät umleiten kann.

5.4.1.1.4 Beide Ausgaben umleiten

Um beide Ausgaben (Standardausgabe und Standardfehlerausgabe) gemeinsam in eine Datei zu leiten, gibt es mehrere Möglichkeiten. Schauen Sie sich einfach mal die Beispiele für den Befehl grep (7.7.1), mit dem Dateien durchsucht werden können.

ole@enterprise:~/test> grep -r enterprise /etc/ &> blubb.txt
ole@enterprise:~/test> grep -r enterprise /etc/ >& blubb.txt
ole@enterprise:~/test> grep -r enterprise /etc/ > blubb.txt 2>&1
ole@enterprise:~/test> grep -r enterprise /etc/ 2> blubb.txt 1>&2

Bei den letzten Kommandos kommt es auf die Reihenfolge an. Denn die folgenden Kombinationen führen nicht zum gewünschten Erfolg.

ole@enterprise:~/test> grep -r enterprise /etc/ 2>&1 > blubb.txt
ole@enterprise:~/test> grep -r enterprise /etc/ 1>&2 2> blubb.txt


5.4.1.2 Eingabe

5.4.1.2.1 Daten aus einer Datei

Heute unterstützen die meisten Programme direkt das Lesen aus einer Datei. Allerdings ist dies nicht zwingend notwendig, da die Aufgabe des Lesens einer Datei auch die Bash übernehmen kann. Mit dem Zeichen < liest das Programm nicht von der Standardeingabe sondern holt seine Daten aus der angegeben Datei. Es ist dabei völlig egal, ob die als Eingabe dienende Datei vor oder hinter dem befehl definiert wird.

ole@enterprise:~/test> cat < input.txt
In a world without walls and fences,
who needs windows and gates?
ole@enterprise:~/test> < input.txt cat
In a world without walls and fences,
who needs windows and gates?

5.4.1.2.2 Simulation einer Datei zur Eingabe

Sie können auch den Einsatz einer Datei mit der Tastatur simulieren. Mit den Zeichen << und einem Endemarkierung können Sie auf der Tastatur so viele Zeilen eingeben, wie sie wollen. Abgeschlossen wird der Vorgang, wenn Sie in eine Zeile nur die Endemarkierung hineinschreiben.

ole@enterprise:~/test> sort <<ENDE
> Leif Neid
> Thore Wart
> Axel Schweiß
> Erk Lasse
> Walter Meingott
> ENDE
Axel Schweiß
Erk Lasse
Leif Neid
Thore Wart
Walter Meingott

Die Ein- und Ausgabeumleitungen können natürlich wild miteinander kombiniert werden. Das kann zu manchmal merkwürdigen Befehlen führen, die aber völlig in Ordnung sind.

5.4.2 Pipelines

Piplines ermöglichen es, die Ausgabe eines Kommandos direkt an die Eingabe eines anderen Kommandos zu senden. Realisiert wird dies durch ein zwischengeschaltetes Pipe-Zeichen |.

ole@enterprise:~/test> ls -l /dev | less

Eine Philosophie von Linux/Unix ist die Verwendung kleiner spezialisierter Programme anstatt großer universeller ``Eierlengender Wollmilchsäue''. Die einzelnen Kommandos werden dann mit Pipelins miteinder verbunden. Beispiele für die Anwendung der Pipelines finden Sie ausführlich in Kapitel 7 Textfilter.


5.4.3 tee

Das Kommando tee sendet gleichzeitig die Ausgabe an eine Datei und an die Standardausgabe, die der Bildschirm oder eine weitere Pipeline sein kann.
tee [OPTIONEN] DATEILISTE

Optionen
-a Die Daten werden an eine vorhandene Datei angehängt
-i Ignoriert Interrupt-Signale
 

5.4.3.1 Beispiele

Diese Kommandosequenz sendet den Inhalt des Verzeichnisses in die Datei schmeckt und auf den Bildschirm.
ls -al | tee schmeckt

Sie können auch mehrere Dateien gleichzeitig mit dem Inhalt des Verzeichnis füllen. In diesem Falls sind es die Dateien schmeckt und gut.

ls -al | tee schmeckt gut

Hier wird der Inhalt der Datei amAngelhaken an die Datei angeln.txt angefügt und gleichzeitig mit less angezeigt.

cat amAngelhaken | tee -a angeln.txt | less


5.4.4 xargs

Der Befehl xargs ermöglicht die Weitergabe von Argumenten von einem Kommando zu einem anderen.
xargs KOMMANDO
Dabei ordnet xargs die übergebenen Daten als durch Leerzeichen getrennte Reihe von Worten an.

5.4.4.1 Beispiele

Dieser Befehl ist eine gutes Beispiel für die Verarbeitung der übergebenen Daten.
ls -l | xargs echo

Dieses Beispiel faßt die in der Datei liste aufgeführten Dateien zu einer Datei myFiles zusammen und gibt sie gleichzeit mit less auf dem Bildschirm aus.
cat liste | xargs cat | tee myFiles | less

Oder wollten Sie nicht schon mal wissen, was eigentlich die Programme im Verzeichnis /bin so machen. Der Befehl whatis (6.3.3) gibt eine Kurzbeschreibung aus.
ls /bin | xargs whatis | less


Notizen:
Notizen:

Shell 2 % latex2html id marker 5559
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.

Vergewissern Sie sich vor der Bearbeitung der Aufgaben, daß die Korn-Shell installiert wurde.

139
Loggen Sie sich als Walter auf der Konsole 1 ein.
140
Führen Sie das Kommando rm -rf * aus.
141
Ermitteln Sie den Namen der aktuellen Shell.
142
Starten Sie jetzt die Korn-Shell.
143
Wiederholen Sie den Befehl aus Aufgabe 3. Welches Ergebnis erhalten Sie diesmal?
144
Kehren Sie zur ursprünglichen Shell zurück.
145
Ändern Sie für Ihren Benutzer die Standardshell auf die Korn-Shell.
146
Loggen Sie sich aus.
147
Loggen Sie sich wieder ein.
148
Wiederholen Sie den Befehl aus Aufgabe 3. Welches Ergebnis erhalten Sie diesmal?
149
Machen Sie die Shell-Änderung wieder rückgängig.
150
Loggen Sie sich wieder aus und dann wieder ein.
151
Lassen Sie sich das Tagesdatum in der in Deutschland gebräuchlichen Form (Tag.Monat.Jahr) anzeigen.
152
Welche Tastenkombination unterbricht ein laufendes Programm?
153
Was für ein Wochentag war der 18. März 1970?
154
Was war das besondere am September 1752?
155
Speichern Sie den Kalender für das Jahr 2001 in der in Deutschland gebräuchlichen Form in der Datei Kalender.
156
Wie spät ist es auf dem Linux-Rechner?
157
Mit welchem Terminaltyp arbeiten Sie gerade?
158
Erstellen Sie eine persönliche inputrc-Datei. Belegen Sie die Tasten
<F1> mit dem Befehl für den aktuellen Jahreskalender
<F2> mit dem Befehl für die Uhrzeit und
<F3> mit dem Befehl für den Editor vi.
159
Testen Sie die neuen Tastenbelegungen.
160
Lassen Sie sich die Datei /etc/DIR_COLORS anzeigen.
161
Kopieren Sie die Datei /etc/DIR_COLORS als .dir_colors in Ihr Heimatverzeichnis.
162
Ändern Sie den ls-Farbcode für Verzeichnis auf rot und unterstrichen.
163
Testen Sie die Änderung der Farbcodes.
164
Lassen Sie sich die Umgebungsvariable für den aktuellen Prompt anzeigen.

% latex2html id marker 5581
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

165
Ändern Sie den Prompt zu: ``BENUTZERNAME @ HOSTNAME SHELL SHELLVERSION+PATCHLEVEL am DATUM : VERZEICHNIS >''
Bsp.: tapico@defiant bash 2.03.0 am Fri Dec 29: ~ >
166
Loggen Sie sich aus und wieder ein. Wie sieht der Prompt nun aus?
167
Richten Sie nun die Promptänderung so ein, daß Sie bei jedem Einloggen gilt.
168
Lassen Sie sich alle Umgebungsvariablen anzeigen.
169
Welche Bedeutung hat die Variable _.
170
Geben Sie die Liste der Umgebungsvariablen zusammen mit dem Datum und dem Text ``Umgebungsvariablen'' in die Datei mit dem Namen variablenJJ-MM-TT.txt aus. Dabei steht JJ-MM-TT für das aktuelle Datum.
171
Speichern Sie die Dateinamen aus dem Verzeichnis /usr/share/doc/packages/cron in der Datei dateiliste.
172
Kopieren Sie alle Dateien aus /usr/share/doc/packages/cron und /usr/share/doc/packages/yast2 in Ihr Heimatverzeichnis.
173
Fassen Sie den Inhalt der Dateien, die Sie aus /usr/share/doc/packages/cron kopiert haben und die sich nun in Ihrem Heimatverzeichnis befinden, zu einer Datei alleAnleitungen.txt zusammen.
174
Wechseln Sie zur Konsole 2.
175
Loggen Sie sich als root ein.
176
Legen Sie das Verzeichnis /kurs/bin an und wechseln Sie in das Verzeichnis.
177
Erstellen Sie eine Datei mit dem Namen hurra und dem Befehl
echo -e "Hurra\n"
als Inhalt.
178
Geben Sie den Befehl chmod 755 hurra ein. Die Datei wird damit ausführbar.
179
Wechseln Sie wieder zur Konsole 1.
180
Starten Sie das Programm hurra. Klappt das?
181
Starten Sie nun das Programm hurra mit Angabe des Pfades /kurs/bin. Klappt das?
182
Überprüfen Sie, ob das Verzeichnis /kurs/bin in der Pfadliste enthalten ist.
183
Fügen Sie das Verzeichnis /kurs/bin der Verzeichnisliste hinzu.
184
Starten Sie nun wieder das Programm hurra. Klappt das?
185
Legen Sie das Alias adir mit ls -al | less an.
186
Legen Sie das Alias werbinich an. Es soll den Namen ausgeben, mit dem Sie sich eingeloggt haben.
187
Testen Sie die Aliase.
188
Loggen Sie sich aus und wieder ein.

% latex2html id marker 5589
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

189
Testen Sie wieder die Aliase.
190
Legen Sie in Ihrem Heimatverzeichnis eine Datei .alias ein und tragen Sie dort die beiden Aliase ein.
191
Loggen Sie sich aus und wieder ein.
192
Testen Sie wieder die Aliase.
193
Legen Sie ein Alias myenv in der Datei .alias ein. Das Alias soll für den Befehl aus Aufgabe 32 stehen.
194
Führen Sie die Datei .alias aus.
195
Testen Sie den neuen Alias.
196
Führen Sie wieder den Befehl hurra aus. Klappt das? Wenn nicht, warum nicht?


Notizen:
Notizen:


6. Hilfe und Dokumentation

 
Ein Mathematiker, ein Physiker und ein Computeruser werden getrennt von einander eingeschlossen. Jeder erhält zwei Glaskugeln. Nach einer Stunde schaut man was diese Leute damit machen. Der Mathematiker sitzt dort und berechnet das Volumen und die Oberfläche der Kugeln. Der Physiker hält die Kugeln gegen das Licht und berechnet Brechzahl und Absorptionskoeffizient. Als letztes schaut man beim Computerbenutzer herein und stellt fest, daß eine Kugel weg ist und das Fenster zerbrochen. Auf die Frage, was denn passiert sei, zuckt der User nur mit den Achseln und sagt: ``Ich hab' nix gemacht!...''
 

 
Anonymous
 

Ein nicht unerheblicher Nachteil der Shell gegenüber der graphischen Benutzeroberfläche ist eindeutig der Umstand, daß man die Befehle des Systems kennen muß. Bei der graphischen Oberfläche sind die meisten Einstellmöglichkeiten und Aktionen gut beschriftet. Sie müssen als nur Lesen können und es natürlich auch tun. Zum Glück gibt es im Linux-System und auch im Internet umfangreiche Hilfen und Anleitungen, damit Sie nicht alle Befehle auswendig lernen müssen. Dieses Kapitel stellt Ihnen die wichtigsten Hilfe-Quellen vor.


6.1 Lokale Dokumentation

Es gibt eine Reihe von lokalen Dokumentationen in einem Linux-System. Diese befinden sich alle nach dem FHS unter dem Verzeichnis /usr/share bzw. bei älteren Distributionen unter dem Verzeichnis /usr/share. Tabelle 6.1 zeigt die Typen und ihre Position im Dateisystem.


Tabelle 6.1: Die lokalen Dokumentationen und ihre Verzeichnisse
Dokumentation Verzeichnis altes Verzeichnis
Manual-Pages /usr/share/man /usr/man
Texinfo /usr/share/info /usr/info
HOWTOs /usr/share/doc/howto /usr/doc/HOWTO
Frequently Ask Questions (FAQ) nicht mehr aktuell /usr/doc/FAQ
Programm Dokumentationen /usr/share/doc/packages/PAKETNAME /usr/doc/PAKETNAME



6.1.1 Das Handbuch: Manual-Pages

Die Manual-Pages, auch oft Man-Pages genannt, sind praktisch das Handbuch zu Linux und den dazugehörigen Tools. Für fast jedes Programm der Shell gibt es eine solche ``Handbuchseite''. Neben Programmen gibt es auch Man-Pages für Konfigurationsdateien, Systemaufrufe u.a. Diese Dokumentationen sind nicht gerade benutzerfreundlich, da sie mehr als Referenz für die Syntax gedacht sind und nicht als Online-Tutorial.

Für die Verwendung der Manual-Pages wird das Tool man (6.1.2) verwendet. Dieses Tool sucht den passenden Hilfetext heraus und stellte ihn durch einen Textbetrachter dar. In den meisten Fällen ist less der Pager.

Die Hilfetexte sind in mehrere Texte aufgeteilt, wie in Tabelle 6.2 zu sehen. Es muß aber nicht unbedingt jeder Abschnitt in dem Text vorkommen.


Tabelle 6.2: Die Abschnitte in den Manual-Pages
Abschnitt Beschreibung
NAME Name und kurze Beschreibung des Kommandos
SYNOPSIS Anwendung und Syntax des Kommandos
DESCRIPTION Beschreibung des Kommandos und seiner Optionen
OPTIONS Liste aller Optionen mit Kurzbeschreibung
SEE ALSO Manual-Pages zu verwandten Inhalten
DIAGNOSTICS Beschreibung von Fehlermeldungen
FILES Liste der Dateien, die von dem Kommando verwendet werden
BUGS Bekannte Probleme
HISTORY Meilensteine der Programmentwicklung
AUTHOR Autor des Programms und Mitarbeiter


Die Handbuchseiten liegen als gezippte ASCII-Code vor, die in einem speziellen Format geschrieben wurden. Das Programm groff kann diese Seiten für die Ausgabe aufbereiten. Die Dateien für die Manual-Pages können in verschiedenen Pfaden liegen. Generell ist dies der Pfad /usr/share/man. Bei älteren Distribution liegen die Hilfetexte im Verzeichnis /usr/man. Die Umgebungsvariable MANPATH enthält die Pfade zu den Hilfetexten. Für die Ermittlung der Verzeichnisse kann auch der Befehl manpath verwendet werden.

tapico@defiant:~ > echo $MANPATH
/usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/man

In diesen Verzeichnissen existieren mehrere Unterverzeichnisse für die neun ``Kapitel'' der Manual-Pages. Am wichtigsten für Administratoren sind die Kapitel 1, 5 und 8. Eine Übersicht über die Kapitel liefert die Tabelle 6.3. Da einige Themen in mehreren Kapiteln vorkommen können, wird die Kapitelnummer bei Verweisen aufs Handbuch in Klammern hinter das Thema geschrieben. Sie finden also die Informationen zu dem Befehl passwd in der Manual-Page passwd(1) und zu der Datei /etc/passwd in der Manual-Page unter passwd(5). Es können durch Programme aber noch weitere Kapitel hinzugefügt werden, wie Sie es im folgenden Beispiel sehen. Für die SSL-Verschlüsselung gibt es auch ein Passwort-Tool.

enterprise:~ # whatis passwd
passwd (1ssl)        - compute password hashes
passwd (1)           - change user password
passwd (5)           - The password file


Tabelle 6.3: Die neun ``Kapitel'' der Manual-Pages
Verzeichnis Beschreibung
man1 Ausführbare Programm oder Shell-Kommandos für den Benutzer
man2 Systemaufrufe (Kernelfunktionen)
man3 Bibliotheksaufrufe (Funktionen mit Systembibliotheken)
man4 Spezielle Dateien (meistens Gerätedateien in /dev)
man5 Dateiformate und Konfigurationsdateien
man6 Spiele
man7 Diverses, Makropakete, Konventionen, Netzwerkprotokolle
man8 Systemadministrationskommandos
man9 Kernelroutinen (kein Standard)


Neben den normalen Benutzerbefehlen (man1), den Systemverwalterbefehlen (man8) und den Dateiformaten (man5), gibt es noch weitere wichtige Kapitel. So enthält Kapitel 7 auch Informationen über die Implementierung der Netzwerkprotokolle.

enterprise:~ # whatis tcp udp ip arp
tcp (7)              - TCP protocol.
udp (7)              - User Datagram Protocol for IPv4
ip (7)               - Linux IPv4 protocol implementation
ip (8)               - show / manipulate routing, devices, policy routing and tunnels
arp (7)              - Linux ARP kernel module.
arp (8)              - manipulate the system ARP cache

Wenn nun über den Befehl man eine Seite zu einem Thema angefordert wird, wird die erste Seite angezeigt, die gefunden wird. Dabei werden die Kapitel in der Reihenfolge
  1, 8, 2, 3, 4, 5, 6, 7, 9 
durchsucht. Deshalb findet man z. B. bei dem Aufruf von passwd immer das gleichnamige Tool. Um die Beschreibung der Benutzerliste /etc/passwd zu bekommen, muß explizit die Kapitelnummer angegeben werden.


6.1.2 man

Dieses Programm dient zum Anzeigen der Manual-Pages zu einem bestimmten Thema.
man [OPTIONEN] [SEKTION] [THEMA]

Dabei wird die erste passende Seite zu dem Thema angezeigt.

Optionen
-a Zeigt alle passenden Seiten hintereinander an
-f Zeigt eine Kurzbeschreibung zu den passenden Seiten an.
-k Stichwortsuche in der Hilfe nach den Kurzbeschreibungen
-K Volltextsuche in der Hilfe (Achtung: Nicht in jeder Version von man implantiert)
-t Gibt die angeforderte Man-Page als Postscript-Datei aus.
-L SPRACHE Gibt die Sprache für die Manual-Page an.
 

Die Konfigurationsdatei für man ist /etc/man.config bzw. /etc/manpath.config. Die Umgebungsvariable PAGER enthält den Namen des Textbetrachters, den man verwendet. Dies ist im Normalfall das Programm less (Abschnitt 4.5.10).

ole@enterprise:~> echo $PAGER
less

Die meisten Manual-Pages liegen in Englisch vor. Manche Seiten sind auch in Deutsch und anderen Sprachen erhältlich. Verantwortlich für die Auswahl der Sprache durch man ist u.a. die Variable LANG.

ole@enterprise:~> echo $LANG
de_DE@euro

Um Themen aus verschiedenen Kapiteln anzeigen zu lassen, muß die Kapitelnummer vor dem Thema angegeben werden.

ole@enterprise:~> man -f groff
groff (1)            - front end for the groff document formatting system
groff (7)            - a short reference for the GNU roff language
ole@enterprise:~> man 1 groff
Formatiere groff(1) neu, bitte warten...
ole@enterprise:~> man 7 groff
Formatiere groff(7) neu, bitte warten...

Die Manual-Page für man wird bei SuSE in einer deutschen Übersetzung angezeigt. Will man die englische Version der Seite bekommen, so muß die Sprache explizit angegeben werden.

ole@enterprise:~> man -L en man

Größere Man-Pages sind oft schlecht am Bildschirm zu lesen. Manchmal möchte man die Dateien auch ausgedruckt haben. Die folgende Befehlsfolge gibt die Manual-Page als Postscript-Datei aus, die an die Druckerwarteschlange lp weitergeleitet und ausgedruckt wird.

ole@enterprise:~> man -t cat | lpr -Plp


6.1.3 manpath

Dieses Programm versucht den aktuellen Suchpfad der Manual-Pages aus den Standardeinstellungen und der Umgebungsvariable PATH zu ermitteln.

manpath [OPTIONEN]

Wenn ein Verzeichnis nicht in der Konfigurationsdatei /etc/manpath.config aufgelistet ist, sucht manpath nach den Unterverzeichnissen man und MAN. Wenn diese existieren, werden sie dem Suchpfad hinzugefügt.

Der Befehl manpath wird von man benutzt um den Suchpfad zu bestimmen. Daher ist es für einen Benutzer im Normalfall nicht notwendig, die Umgebungsvariable MANPATH direkt zu setzen.

Weitere Informationen über Anwendung und Optionen lesen Sie bitte in den Manual-Pages manpath(1) nach.


6.1.4 TexInfo: Informationen mit info

TexInfo6.1, die GNU Hypertext Dokumentation, ist einfacher zu benutzen als die Manual-Pages und oft auch ausführlicher. Für die Darstellung der Dokumentation wird das Kommando info verwendet.

 info [KOMMANDO]

Wenn Sie nur den Befehl info eingeben, landen Sie auf einem Inhaltsverzeichnis, das die wichtigsten Themen der TexInfo auflistet. Sie können mit den Cursortasten durch das Menü scrollen. Um in einem Menüpunkt zu wechseln, die sind durch einen vorangestellten Asterisk gekennzeichnet, müssen Sie nur mit dem Cursor auf die Zeile wechseln und <Return> drücken. Alternativ können Sie auch die Taste <m> drücken. In diesem Fall erscheint in der untersten Zeile der Text ``Menu item:''. Hier können Sie den Menüpunkt direkt eintippen. Dabei sind nur so viele Zeichen nötig, wie zum einwandfreien Erkennen des Menüpunkt notwendig sind. Auch diese Aktion beenden Sie mit der Taste <Return>.

Schauen wir uns das ganze an einem Beispiel an. Geben Sie auf der Konsole den Befehl info ein. Sie landen nun im Hauptmenü der TexInfo. Sie können nun mit den Cursortasten den Cursor auf den Eintrag dd bewegen und dort <Return> drücken. Oder Sie geben die Tastenfolge <m><d><d><Return> ein.

Nun befinden Sie sich im Eintrag für den Befehl dd, der schon in Abschnitt 4.5.4 behandelt wurde. In der obersten Zeile finden Sie nun mehrere Informationen. Da diese oft ausführlicher sind, setzen sie sich meistens in der zweiten Zeile fort.

File: coreutils.info
: In dieser Datei ist der Text gespeichert, den Sie gerade sehen.
Node: dd invocation
: Auf dieser Seite bzw. diesem Thema befinden Sie sich gerade.
Next: install invocation
: Hier finden Sie den Namen des nächsten Themas. Durch betätigen der Taste <n> gelangen Sie dorthin.
Prev: cp invocation
: Auch das vorherige Thema in der Reihenfolge von TexInfo wird angegeben. Sie können durch die Taste <p> dorthin wechseln.
Up: Basic operations
: Die TexInfo ist in Abschnitte gegliedert, die wiederum Unterabschnitte u.s.w. Mit der Taste <u> können Sie in das Menü des Abschnitts wechseln, in dem die aktuelle Seite liegt.

Wechseln Sie nun mit der Taste <u> einen Abschnitt höher. Sie befinden sich nun im Abschnitt Basic Operations, der die Befehle cp, dd, install, mv, rm und shred behandelt.

Um wieder in den Abschnitt dd invocation zu wechseln können Sie die Taste l betätigen. Sie entspricht in ihrer Funktion des Zurück-Buttons im Webbrowser. Sie können natürlich auch die Menüfunktionen nutzen um in den gewünschten Abschnitt zu wechseln. Weil hier nur ein Menüeintrag mit dem Buchstaben d beginnt, brauchen Sie nur die Tastenfolge <m><d><Return> einzugeben.

Eine Übersicht über die Steuerkommandos von info liefert die Tabelle 6.4.


Tabelle 6.4: Steuerkommandos von info
\begin{table}\begin{small}
\begin{tabular*}{16cm}{p{3cm}p{13cm}}
\multicolumn{2}...
...>} & Menüpunkt mit dieser Nummer folgen\\
\end{tabular*}\end{small}
\end{table}


Bei Linux befinden sich die TexInfo-Dateien in den Verzeichnissen /usr/local/info, /usr/share/info und /usr/info.


6.1.5 help

Die Bash enthält eine Reihe von eingebauten Befehlen, die auch als Bultins bezeichnet werden. Die Hilfe zu diesen Befehlen erhalten Sie über den Befehl help, der ebenfalls Bestandteil der Bash ist.
help [KOMMANDO]

Der Befehl ohne Parameter zeigt eine Liste der Bash-internen Befehle an.

dozent@linux37:~> help
GNU bash, version 2.05b.0(1)-release (i586-suse-linux)
These shell commands are defined internally.  Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.

A star (*) next to a name means that the command is disabled.

 %[DIGITS | WORD] [&]               (( expression ))
 . filename                         :
 [ arg... ]                         [[ expression ]]
 alias [-p] [name[=value] ... ]     bg [job_spec]
 bind [-lpvsPVS] [-m keymap] [-f fi break [n]
 builtin [shell-builtin [arg ...]]  case WORD in [PATTERN [| PATTERN].
 cd [-L|-P] [dir]                   command [-pVv] command [arg ...]
 compgen [-abcdefgjksuv] [-o option complete [-abcdefgjksuv] [-pr] [-o
 continue [n]                       declare [-afFirtx] [-p] name[=valu
 dirs [-clpv] [+N] [-N]             disown [-h] [-ar] [jobspec ...]
 echo [-neE] [arg ...]              enable [-pnds] [-a] [-f filename]
 eval [arg ...]                     exec [-cl] [-a name] file [redirec
 exit [n]                           export [-nf] [name[=value] ...] or
 false                              fc [-e ename] [-nlr] [first] [last
 fg [job_spec]                      for NAME [in WORDS ... ;] do COMMA
 for (( exp1; exp2; exp3 )); do COM function NAME { COMMANDS ; } or NA
 getopts optstring name [arg]       hash [-lr] [-p pathname] [-dt] [na
 help [-s] [pattern ...]            history [-c] [-d offset] [n] or hi
 if COMMANDS; then COMMANDS; [ elif jobs [-lnprs] [jobspec ...] or job
 kill [-s sigspec | -n signum | -si let arg [arg ...]
 local name[=value] ...             logout
 popd [+N | -N] [-n]                printf format [arguments]
 pushd [dir | +N | -N] [-n]         pwd [-PL]
 read [-ers] [-u fd] [-t timeout] [ readonly [-anf] [name[=value] ...]
 return [n]                         select NAME [in WORDS ... ;] do CO
 set [--abefhkmnptuvxBCHP] [-o opti shift [n]
 shopt [-pqsu] [-o long-option] opt source filename
 suspend [-f]                       test [expr]
 time [-p] PIPELINE                 times
 trap [arg] [signal_spec ...] or tr true
 type [-afptP] name [name ...]      typeset [-afFirtx] [-p] name[=valu
 ulimit [-SHacdflmnpstuv] [limit]   umask [-p] [-S] [mode]
 unalias [-a] [name ...]            unset [-f] [-v] [name ...]
 until COMMANDS; do COMMANDS; done  variables - Some variable names an
 wait [n]                           while COMMANDS; do COMMANDS; done
 { COMMANDS ; }


6.1.6 HOWTOs

Die Linux HOWTOs sind ausführliche Dokumente, die die Bearbeitung bestimmter Aufgaben in Linux beschreiben. Die HOWTO-Dokumente behandeln meist komplexere Aufgaben und sind daher länger. Für einfachere Aufgaben wie LILO oder Drucken gibt es kürzere Texte, die mini-HOWTOs.

Die HOWTO-Texte befinden sich meistens in komprimierter Form im Verzeichnis /usr/doc/HOWTO, /usr/doc/howto bzw. /usr/share/doc/howto. Bezugsquelle für die HOWTOs sind
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
http://sunsite.unc.edu/LDP/HOWTO/
http://www.linuxdoc.org/HOWTO/
bzw. einer Ihrer Spiegelserver.


6.1.7 FAQ

Die FAQs (Frequently Asked Questions) sind eine Sammlung von Dokumenten im Zusammenhang mit den HOWTOs. Sie sind in der Form Frage-Antwort aufgebaut, wobei die Fragen gesammelt werden, die die Benutzer am häufigsten stellen.

Die FAQs sind im HTML-, PostScript- und Text-Format vorhanden und befinden sich im Verzeichnis /usr/doc/FAQ. Die Online-Quelle für die neuesten FAQs ist
http://www.linuxdoc.org/FAQ/.

Seit SuSE 8.0 sind die FAQs kein Bestandteil mehr der Distribution. Das ist aber zu verschmerzen, da ihr Informationswert nicht sehr groß ist.


6.1.8 Programmdokumentation

Dokumentationen über spezielle Programme finden Sie im Verzeichnis /usr/doc in einem Unterverzeichnis mit dem Namen des Programms. Bei der SuSE-Distribution finden Sie weitere Informationstexte zu den Programmen der Softwarepakete im Verzeichnis /usr/share/doc/packages und dessen Unterverzeichnissen. Die meisten Texte können mit less oder more gelesen werden. Andere Dokumentationen sind als LATEX-DVI, PostScript, HMTL oder PDF zugänglich. Manche Programm legen aber auch bei Ihrer Installation eine Manual-Page an.

6.2 Internetquellen

Das Internet war und ist für Linux die Basis seiner Entwicklung. Der Quellcode für Linux ist übers Internet erhältlich. Desweiteren gibt es auch zahlreiche Dokumentationen an verschiedenen Orten. Die erste Quelle für Informationen zu Linux ist das Linux Documentation Project auf http://tldp.org/.

Auch gibt es durch dieses Projekt einige Bücher, die spezielle Themen abdecken. Diese können von http://www.tldp.org/guides.html heruntergeladen werden. U. a. sind dies

Ein weiteres Projekt für eine mehr benutzerfreundliche Dokumentation ist Linuxnewbie.org (http://www.linuxnewbie.org/).

Die Linuxgazette (http://www.linuxgazette.com/) ist ein monatlich erscheinendes Online-Magazin zum Thema Linux. Es ist Mitglied des Linux Documentation Projects. Es gibt auch eine deutsche Ausgabe (http://www.linuxgazette.de/) in der einige Artikel der englischen Ausgabe ins Deutsche übersetzt wurden.

Besonders für SuSE-Nutzer ist die SuSE-Seite (http://www.suse.de) mit ihrer Supportdatenbank (http://sdb.suse.de/sdb/de/html/)zu empfehlen, da dort die gängigsten Probleme und ihre Lösungen beschrieben werden.

Ein allgemeines Portal über Linux finden Sie unter http://www.linux.org/ wie auch unter http://www.linux.de/.

Auch ein Wiki gibt es für Linux. Unter der URL http://www.linuxwiki.de/ ist eine freie Textdatenbank zu finden, die sich mit dem Themen Linux und GNU beschäftigt.

Ein teilweise kostenpflichtiger Dienst ist http://www.lwn.net/. Hier erhalten Sie eine tägliche Übersicht über die neuesten Entwicklungen, Sicherheitslücken, Produkte usw.

Eine Zusammenfassung der wichtigsten Nachrichten und Schlagzeilen zu Linux aus verschiedenen Quellen finden Sie auf http://www.linuxkp.org/, dem Linux Knowledge Portal.

Natürlich soll auch die Seite http://www.fibel.org/ nicht vergessen werden, wo Sie dieses Skript herunterladen können. ;-)


6.2.1 Newsgroups

Eine weitere Möglichkeit um an Informationen über Linux heranzukommen sind die Newsgroups. Alle Gesamtheit aller Newsgroups wird auch als Usenet bezeichnet. Allerdings sollten Sie zuerst alle anderen Möglichkeiten ausgeschöpft haben, bevor Sie eine Frage in einer Newsgroup stellen. D. h. konsultieren Sie zuerst Manual-Pages, TexInfo, HOWTOs, FAQs, Programm- und Paketdokumentationen und auch die FAQs, die zu den Newsgroups gehören.

Für das Lesen der Newsgroups benötigen Sie einen Newsreader wie er in Netscape oder Mozilla integriert ist oder ein separates Programm wie z. B. KNode (2.4.6). Die Suchmaschine Google (http://www.google.de) hat das Newsgrouparchiv von http://www.deja.com übernommen. Sie ist eine gute Alternative um die Newsgroups mit dem Browser durchsuchen und lesen zu können.

comp.os.linux.announce
ist eine moderierte Newsgroup, die sich mit den neuesten Informationen zu Software-Updates, neuen Ports, Benutzergruppentreffen und kommerziellen Produkten beschäftigt.

comp.os.linux.answers
enthält alle FAQs, HOWTOs und andere wichtige Dokumentationen. Die HOWTOs werden immer am Anfang des Monats gepostet.

comp.os.linux.advocacy
ist das Diskussionsforum für juristischen Fragen zu Linux.

comp.os.linux.alpha
legt seinen Themenschwerpunkt auf Fragen zu Linux für Alpha-Systeme.

comp.os.linux.development.apps
beschäftig sich mit der Entwicklung von Anwendungsprogrammen für Linux.

comp.os.linux.development.system
behandelt den Bereich der Entwicklung von Linux.

comp.os.linux.embedded
ist eine Newsgroup für Embedded-Geräte unter Linux.

comp.os.linux.hardware
enthält Fragen zur Zusammenarbeit von Linux und der Hardware.

comp.os.linux.m68k
legt seinen Themenschwerpunkt auf Fragen zu Linux für Apple-Prozessoren.

comp.os.linux.networking
kümmert sich um den Netzwerkbereich von Linux.

comp.os.linux.portable
deckt den Bereich Linux für Notebooks ab.

comp.os.linux.powerpc
legt seinen Themenschwerpunkt auf Fragen zu Linux für den PowerPC.

comp.os.linux.security
ist die richtige Newsgroup, wenn es um Sicherheitsfragen zu Linux geht.

comp.os.linux.setup
beschäftigt sich mit der Administration und Konfiguration von Linux.

comp.os.linux.x
ist der graphischen Oberfläche X-Window gewidmet.

comp.os.linux.misc
deckt die Themen ab, die nicht zu den anderen Newsgroups passen.


6.2.2 KNode

Unter KDE ist das Programm KNode zum Arbeiten mit den Newsgroups vorgesehen.

Wenn Sie KNode zum ersten Mal starten, erscheint gleich das Einstellungsfenster. Sie können es aber auch nachträglich unter Einstellungen/KNode einrichten... wieder aufrufen.

Als erstes tragen Sie unter Identität die persönlichen Angaben ein, wie Sie es auch für die eMail machen.

Unter Zugang/News tragen Sie die zu verwendenden Newsserver ein. Diese halten die Artikel der einzelnen Newsgroups vor und sorgen auch für den Abgleich der Server untereinander. Entweder haben Sie von Ihrem Provider einen Newsserver benannt bekommen oder Sie müssen sich einen freien Newsserver suchen. Für freie Newsserver gibt es im Netz mehrere Suchmaschinen. Eine Liste dieser Suchmaschinen finden Sie unter
http://directory.google.com/Top/Computers/Usenet/Public_News_Servers/
Eine dieser Suchmaschinen ist Newzbot (http://www.newzbot.com/). Geben Sie einfach den Namen der Newsgroup oder einen Teil des Namens an und Newzbot ermittelt die passenden Newsserver dafür.

Über den Button Neu im Server-Dialog von KNode bekommen Sie jetzt ein Dialogfenster für den neuen Newsserver. Tragen Sie einen Namen für die Anzeige und den Namen des Newsservers ein. Unter dem Reiter Identität können Sie individuell für jeden Newsserver sich eine Identität zulegen.

Weitere Einträge brauchen Sie zuerst nicht. Im linken Rahmen von Knode ist nun der eingetragene Newsserver aufgetaucht. Sie müssen nun eine Newsgroup von dem Server abonnieren. Dazu klicken Sie mit der rechten Maustaste auf den Servernamen und wählen den Punkt Newsgruppen abonnieren... aus. Nun holt KNode vom Server die vorhandenen Gruppen. Das kann bei manchen Servern sehr lange dauern. Die Gruppen werden Ihrer Hierachie gemäß in Baumform angezeigt.

Wählen Sie nun die gewünschten Gruppen (z. B. alle Linuxgruppen) aus, indem Sie auf die schwarz umrandeten Kästchen klicken. Bestätigen Sie die Auswahl mit OK. Die Gruppen sind nun unter dem Newsserversymbol erschienen. Wenn Sie nun auf eine der Gruppen klicken, dann zeigt das linke Fenster die Zahl der vorhandenen Artikel an, während eine Liste der Artikel im rechten oberen Rahmen erscheint. Klicken Sie dort auf einen Eintrag, so erscheint der gewählte Artikel im rechten unteren Rahmen.

6.2.3 Mailinglisten

Neben den Newsgroups gibt es auch einige Mailinglisten zum Thema Linux. In einer Mailingliste senden Sie eine Mail an die eMail-Adresse der Liste. Diese eMail wird dann an alle Mitglieder weitergeleitet. Aus Sicherheitsgründen werden viele Mailinglisten moderiert und jede eMail auf Spam und Viren überprüft.

6.2.3.1 comp.os.linux.announce

Um einen Spiegel dieses Forums zu bekommen, senden Sie eine eMail an
Linux-Announce-Request$@$NEWS-DIGESTS.MIT.EDU
mit dem Wort subscribe im Nachrichtenrumpf.

6.2.3.2 majordomo$@$vger.rutgers.edu

Hier werden einige Mailinglisten zum Thema Linux gehostet. Um eine Liste aller Mailinglisten zu bekommen, senden Sie einfach eine Nachricht an diese Adresse mit dem Wort list im Nachrichtenrumpf. Steht das Wort help im Nachrichtenrumpf, dann bekommen Sie eine eMail mit der Hilfe zu diesen Mailinglisten.

6.2.3.3 SuSE Mailinglisten

Auch SuSE bietet Mailinglisten an. Diese können Sie unter
http://www.suse.de/de/private/support/mailinglists/index.html
abonnieren. Stellen Sie sich aber auf einige hundert eMails am Tag ein, wenn Sie das tun.

6.3 Suchen nach Informationen


6.3.1 whereis

Das Kommando whereis lokalisiert die Programmdatei, Quellcodedatei und die Online-Hilfe (Manual-Pages) für ein Kommando.
whereis [OPTIONEN] KOMMANDO

Die Suche ist dabei auf eine limitierte Anzahl von bekannten Verzeichnissen beschränkt. Wenn die gesuchte Datei nicht gefunden wurde, wird nur der gesuchte Name zurückgegeben.

Optionen
-b Suche nach Programmdatei (binary)
-s Suche nach Quellcodedatei (source file)
-m Suche nach Online-Hilfe (manpages)
-u Suche nach anderen Dateien (unusal entries)
 

Voreinstellung ist -bmsu zur Suche nach allen möglichen Dateien.


6.3.2 which

Das Kommando which zeigt an, welches Programm mit welchem Pfad bei Eingabe eines Kommandos gestartet wird.
which KOMMANDO
which durchsucht die Verzeichnisse, die in der Umgebungsvariablen PATH angegeben sind, und gibt den Pfad des ersten Fundorts des gesuchten Programms an.


6.3.3 whatis

Zeigt die Kurzbeschreibung der Online-Hilfe (Manual-Pages) an.
whatis [OPTIONEN] THEMA

Innerhalb jeder Manualseite ist eine Kurzbeschreibung vorhanden. whatis sucht Schlüsselwort in den Kurzbeschreibungen der Indexdatenbank. Falls es eine solche nicht im Manualpfad gibt, durchsucht es die whatis-Datenbank, die sich in /usr/man/man1 befindet, nach dem Schlüsselwort.

whatis verhält sich wie man -f.


6.3.4 mandb

Erzeugt die von whatis (6.3.3) benutzte Indexdatenbank für die Manualpages.
mandb [OPTIONEN] [PFAD]

In der Regel ist diese Datenbank die Datei /var/cache/man/index.db.


6.3.5 apropos

Der Befehl apropos ermöglich eine Stichwortsuche in der Kurzbeschreibung der Hilfe.
apropos [OPTIONEN] STICHWORT
Die Suche mit apropos ist identisch zu man -k.


6.3.6 type

Das Kommando type zeigt an, wie ein Begriff interpretiert wird, wenn er als Kommando benutzt wird.
type [OPTIONEN] BEGRIFFE

Optionen
-t Ausgabe eines einzelnen Wortes (`alias', `keyword', `function', `builtin', `file' oder ` ')
-p Gibt die Datei aus, die ausgeführt wird. (Wird nur ausgegeben, wenn -t `file' liefert.)
-a Gibt die Datei aus, die ausgeführt wird. (Wird nur ausgegeben, wenn -t `file', `alias' oder `function' liefert.)
 
Die Schalter -t, -p und -a können nicht zusammen verwendet werden.

6.4 Dokumentation und Support

Neben den reinen Kenntnissen über das Betriebssystem, die Software und die Hardware gehören für die Tätigkeit als Systemadministrator auch weiche Fähigkeiten (Soft-Skills) dazu. Zu diesen Soft-Skills gehört das Schreiben von Dokumentationen und der Benutzer-Support.

6.4.1 Dokumentationen schreiben

Eine der Aufgaben, denen sich die Leute am liebsten entziehen, ist die Dokumentation. Trotzdem ist gerade dieser Bereich der EDV besonders wichtig, weil hier Erfahrungen dauerhaft gespeichert werden können.

6.4.1.0.1 Systemübersicht

Für jeden Rechner sollte eine Systemübersicht existieren. Diese sollte umfassen: Art des Festplattencontroller, Anzahl und Art der Festplatten, Partitionsübersicht, Hostname, IP-Adresse, Peripheriegeräte, BIOS-Einstellungen u. v. m.

6.4.1.0.2 Problemlösungen

Wenn ein Problem aufgetreten ist, sollte man seine Lösung ausführlich dokumentieren. Wenn später der Fall wieder auftritt, braucht man nur nachzuschlagen.

6.4.1.0.3 Änderungen am System

Jegliche Änderungen am System sollte auch festgehalten werden. Dies umfaßt die Änderungen an der Hardware, Konfigurationsdateien, Programmen u. s. w. Dies sollte ausreichen, um das System innerhalb kürzester Zeit wieder zu rekonstruieren.

6.4.1.0.4 Dokumentation für Benutzer

Neben der Dokumentation für sich, den Administrator, sollten Sie auch in der Lage sein, Dokumentationen für die Benutzer zu schreiben. So können Sie z. B. erklären wie der Benutzer sich einloggt oder seine eMail abholen kann. Daneben sollten auch andere Administratoren in der Lage sein mit Hilfe der Dokumentation Ihr System zu warten6.2.

 

Jetzt kommt es noch darauf an, welche Art der Dokumentation man wählen soll. Es gibt zwei Arten: die elektronische Dokumentation und die Dokumentation auf Papier.

6.4.1.0.5 Elektronische Dokumentation

Die Vorteile der elektronischen Dokumentation liegen auf der Hand. Sie ist leicht auf dem neuesten Stand zu halten und leicht zu durchsuchen. Kommandoausgaben und Screenshots können leicht integriert werden. Außerdem ist sie schnell zu kopieren und kann vielen zugänglich gemacht werden. Der Nachteil ist allerdings, sie steht nur zur Verfügung wenn die Maschine läuft. Auch läßt sie sich schlecht herumtragen.

6.4.1.0.6 Dokumentation auf Papier

Die alte Methode der Dokumentation auf Papier hat auch heute noch ihre Vorteile. Sie ist auch zugänglich wenn das System unten ist. Dank der modernen Textverarbeitung können auch Screenshots und Kommandoausgaben eingearbeitet werden. Vor allem kann man sie überall hinnehmen, wo man Sie braucht. Der Nachteil dieser Form der Dokumentation liegt in ihrer schlechten Wartbarkeit. Eine Papierdokumentation auf dem neuesten Stand zu halten ist aufwendig. Daneben kann diese Form der Dokumentation schnell zu Chaos führen. Das Entziffern der Notizen, gerade bei handschriftlichen Dokumentationen, ist auch ein nicht zu unterschätzender Nachteil.

6.4.2 Benutzer-Support

Der Benutzer-Support ist eine Aufgabe, die besondere Fähigkeiten verlangt. Neben dem fachlichen Wissen sind hier vor allem der Umgang mit Menschen und die Kommunikationsfähigkeit gefragt. Sie müssen in der Lage sein Informationen so an den Benutzer weiterzugeben, daß er sie verstehen und anwenden kann.

Obwohl der Benutzer-Support sehr aufwendig ist, sollten Sie dem Benutzer nie das Gefühl geben seine Anfrage wäre Zeitverschwendung. Diese Anfragen können auf viele Arten und Weisen erfolgen. Ihr Ziel sollte es aber immer sein den Benutzer produktiver werden zu lassen.


Notizen:

Dokumentation und Hilfe % latex2html id marker 6504
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.

 

Teil 1

197
Loggen Sie sich als Walter auf der Konsole 1 ein.
198
Führen Sie den Befehl rm -rf * aus.
199
Lassen Sie sich die Online-Hilfe zum Befehl man anzeigen und informieren Sie sich über den Befehl.
200
Was sagt TexInfo über man aus?
201
Was ist Ihnen aufgefallen?
202
Suchen Sie nach dem Stichwort ``man'' in der Hilfe (Manualpages).
203
Stellen Sie fest was man ist?
204
Rufen Sie die Manual-Page des Befehls which auf.
205
Lassen Sie sich den Ort der Binärdatei zu which zeigen.
206
Um welchen Typ handelt es sich bei which?
207
Nutzen Sie die oberen Informationen, um die wahre Funktion von which zu ermitteln.
208
Sorgen Sie dafür, daß which seine ursprüngliche Aufgabe dauerhaft wieder erledigen kann. (Nutzen Sie dafür das Ergebnis aus Aufgabe 9.)
209
Was ist dir ?
210
Zu welchem Typ gehört dir ?
211
Was bewirkt der Parameter -P beim Befehl cp ?
212
Unter welche Gruppe fällt cp nach info?
213
Welche Befehle fallen noch in die Gruppe und was tun sie?
214
Was ist passwd und wo befindet es sich?
215
Zu welchem Zweck dient der Befehl rman?


Notizen:

% latex2html id marker 6538
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

Teil 2

Für das Archivieren und platzsparende Packen von Dateien werden Packprogramme verwendet. Verwenden Sie die Hilfen des Linux-Betriebssystems um die folgenden Fragen zu beantworten.

 

216
Loggen Sie sich als walter ein oder wechseln Sie das Heimatverzeichnis von walter!
217
Führen Sie den Befehl rm -rf * aus.
218
Beschreiben Sie mit ein paar Sätzen jeweils die Funktion der folgenden Programme. (Anwendung, Anwendungsgebiet, Verhalten.)
  1. tar
  2. gzip
  3. compress
  4. zcat
  5. zip
219
Erläutern Sie die Schalter -d, -l, -r, -S, -t und -v von gzip.
220
Kopieren Sie aus /usr/share/man/man1 die Dateien zip.1.gz, zipgrep.1.gz und zipinfo.1.gz in Ihr Heimatverzeichnis.
221
Fassen Sie den (entpackten) Inhalt der Dateien in der neuen Datei zip.all zusammen.
222
Lassen Sie sich den Inhalt der Datei zip.1.gz mit less anzeigen.
223
Entpacken Sie die gepackten Dateien.
224
Packen Sie alle `.1'-Dateien zum Archiv zip.zip zusammen.
225
Packen Sie die Dateien noch einmal jeweils mit den Parametern -1 und -9 und vergleichen Sie die entstandenen Zip-Archive zip1.zip und zip9.zip miteinander.
226
Löschen Sie alle Dateien mit der Endung .1.
227
Welche Funktion hat das Programm unzip?
228
Lassen Sie sich Informationen über die Dateien im Zip-Archiv zip.zip anzeigen.
229
Entpacken Sie aus dem Archiv zip.zip die Datei zipgrep.1.
230
Entpacken Sie aus dem Archiv zip1.zip alle Dateien außer zipgrep.1.
231
Am 02.01.2001 wurde zum letzten Mal ihr Heimatverzeichnis gesichert. Wie sichern Sie nun alle neuen und geänderten Dateien in das Zip-Archiv bup.zip?
232
Wandeln Sie die Manpage für zip (zip.1) in eine HTML-Datei namens zip.html um.
233
Lassen Sie sich die HTML-Datei im Browser anzeigen.
234
Löschen Sie alle Zip-Archive im Heimatverzeichnis.


7. Textfilter

7.1 Ausgabe von ganzen Dateien

Um ganze Dateien auszugeben haben wir schon die Pager less (4.5.10) und more (4.5.9) sowie den Verbindungsbefehl cat (4.5.2) kennengelernt. Aber es gibt noch weitere Befehle, die sich mit der Ausgabe der ganzen Datei beschäftigen.


7.1.1 tac

Das Kommando tac dreht die Reihenfolge der Datensätze (Voreinstellung: Zeilen) in Dateien um. Diese werden dann zusammengefügt und ausgegeben.
tac [OPTIONEN] [DATEILISTE]

Werden keine speziellen Datensatztrenner (Seperatoren) angegeben, wird die Zeile als Datensatz interpretiert.

Optionen
-r Seperator wird als regulärer Ausdruck interpretiert
-s SEP Neuen Separator eingeben (Voreinstellung: NeueZeile)
 

Es werden zwar die Datensätze in einer Datei umgekehrt ausgegeben, aber die Reihenfolge der angegebenen Dateien wird nicht geändert.

ole@enterprise:~/test> cat mann
Axel Schweiß
Bert Rahm
Carlos Calvados
ole@enterprise:~/test> cat frau
Ada Bsurdum
Betti Marsch
Claire Grube
ole@enterprise:~/test> tac mann frau
Carlos Calvados
Bert Rahm
Axel Schweiß
Claire Grube
Betti Marsch
Ada Bsurdum


7.1.2 nl

Mit diesem Kommando werden der Ausgabe einer Textdatei Zeilennummern hinzugefügt.
nl [OPTIONEN] [DATEILISTE]

nl fügt für jede Zeile einer Textdatei eine Zeilennummer hinzu. Die Nummerierung beginnt bei jeder neuen Seite wieder neu.

Eine Seite gliedert sich in drei Abschnitte: header, body und footer (Kopf, Rumpf und Fuß). Die Abschnitte werden durch Zeilen eingeleitet die nur folgende Zeichenfolgen enthalten:
$\backslash$:$\backslash$:$\backslash$: für den Kopf
$\backslash$:$\backslash$: für den Rumpf
$\backslash$: für den Fuß
 

Optionen
-b STYLE Wählt die Nummeriungsart für den Rumpf aus. Wird eine Zeile nicht nummeriert, so wird der Zeilenzähler nicht erhöht. Das Trennzeichen wird aber eingefügt. Als Stilarten stehen zu Verfügung
-a         alle Zeilen nummerieren
-n         keine Zeilen nummerieren (header, footer)
-t         alle Zeilen mit Inhalt nummerieren (body)
-pREGEXP   nur Zeilen, die den Ausdruck REGEXP enthalten, nummerieren
-h Wie -b, aber für den Kopf.
-f Wie -b, aber für den Fuß.
-d CD Setzt die Abschnittsmarkierung neu (Voreinstellung $\backslash$:)
-i N Schrittweite der Nummerierung. Für jede Zeile wird N hinzuaddiert. (Voreinstellung: 1)
-l N Zählt N aufeinanderfolgende leere Zeilen als eine (Voreinstellung: 1)
-n FORMAT Setzt das Format für die Zeilenummeriung fest
ln     links ausgerichtet ohne führende Nullen
rn     rechts ausgerichtet ohne führende Nullen
rz     rechts ausgerichtet mit führenden Nullen
-p Startet die Nummeriung am Anfang einer logischen Seite nicht neu
-s STRING STRING ist die Trennzeichenkette zwischen Nummerierung und Zeile (Voreinstellung: TAB-Zeichen)
-v N Startet die Nummeriung mit N (Voreinstellung: 1)
-w N Anzahl der Zeichen für die Nummerierung (Voreinstellung: 6)
 


7.1.3 od

Das Kommando od gibt den Inhalt einer Datei in Oktal-, Dezimal-, Hexadezimal- oder ASCII-Darstellung auf der Standardausgabe aus.

od [OPTIONEN] [DATEILISTE]

Dieser Befehl wird meistens zur Ausgabe von Binärdateien eingesetzt.

Optionen
-b Byteweise Ausgabe in oktaler Form
-c Byteweise Ausgabe in ASCII-Format
-d Dezimale Ausgabe von je zwei Byte
-x Hexadezimale Ausgabe von je zwei Byte
 

7.2 Textformatierung

Die Befehle fmt, pr und fold formatieren den Dateitext um ihn z. B. für Ausgaben zu optimieren.


7.2.1 fmt

Das Kommando fmt erzeugt durch Trennen und Zusammenfügen Ausgabezeilen mit vorgegebener Zeilenlänge. Dabei liest fmt aus Dateien oder von der Standardeingabe und gibt das Ergebnis auf der Standardausgabe aus.
fmt [OPTIONEN] [DATEILISTE]

Optionen
-s Erlaubt nur das Zerlegen von Zeilen und nicht das Zusammenfügen von zu kurzen Zeilen
-u Reduziert die Anzahl der Leerzeichen zwischen Wörtern auf ein und zwischen Sätzen auf zwei Leerzeichen
-WIDTH
-w WIDTH
Gibt Zeilen mit einer Breite von WIDTH Zeichen aus. (Voreinstellung: 75)
-p PREFIX Es werden nur Zeilen verarbeitet, die mit der Zeichenfolge PREFIX beginnen. Führende Leerzeichen werden ignoriert. Führende Leerzeichen und PREFIX werden entfernt, die Zeilen werden umgebrochen und dann werden vor jeder Zeile die Leerzeichen und der PREFIX wieder angefügt. Einsatzgebiet: Umbrechen von Kommentaren in Programmen, ohne daß der Programmcode verändert wird.
 

7.2.1.0.1 Beispiel

 
Diese Kommandosequenz entfernt aus einer HTML-Datei alle überzähligen Leerzeichen.
fmt -u index.html > index.neu.html

Hier werden die Kommentare in einem Perl-Skript auf eine Zeilenlänge von 70 Zeichen umgebrochen.
fmt -p \# -w 70 sort.pl > sort.new.pl


7.2.2 pr

Das Kommando pr formatiert eine Textdatei entsprechend festgelegter Optionen.
pr [OPTIONEN] [DATEILISTE]

Wenn keine Optionen ausgewählt werden, werden die Dateien seitenweise formatiert. Jede Seite besteht aus 66 Textzeilen: einem fünfzeiligen Kopf, einem Textbereich und einem fünfzeiligen Fuß. Die Kopfzeile enthält Seitenzahl, Dateiname, Datum und Uhrzeit. Alternativ kann der Text auch in Spalten ausgegeben werden.

Optionen
+ANFANG[:ENDE] Ausgabe von Seite ANFANG bis Seite ENDE
-SP Gibt den Text in SP Spalten aus (Voreinstellung: 1)
-c Ausgabe von nichtdruckbaren Zeichen (show-control-char)
-d Fügt Leerzeilen ein (double-space)
-f
-F
Verwendet Zeilenvorschub anstatt NeueZeile
Kopf- und Fußbereich werden auf drei Zeilen reduziert (
form-feed)
-h HEADER Ersetzt den Dateinamen im Kopf durch die Zeichenkette HEADER
-l LENGTH Setzt die Seitenlänge (Voreinstellung: 66 Zeilen) (page-length)
-m Fügt Dateien spaltenweise zusammen (merge)
-n[SEP[ZAHL]] Nummeriert die Zeilen durch
SEP      Trennungszeichen
ZAHL     Anzahl der Ziffern
-N ANFANG Beginnt Nummeriung der Zeilen mit ANFANG (nur im Zusammenhang mit -n verwendet)
-s SEP Trennzeichen für Spalten
-S SEP Trennzeichenkette für Spalten
-t Führt keine Seitenformatierung durch
-w WIDTH Einstellung Textbreite auf WIDTH Zeichen
 

7.2.2.0.1 Beispiele

 
Gibt die Datei zweispaltig von Seite 4 bis Seite 10 aus.
pr -2 +4:10 linux.tex

Gibt die Datei mit Zeilennummerierung (Trennzeichen `:', 4 Ziffern) auf dem Drucker aus.
pr -n:4 hallo.pl > lpr


7.2.3 fold

Das Kommando fold gibt den Inhalt einer Datei aus, wobei die Zeilen auf eine definierte Länge umgebrochen werden.
fold [OPTIONEN] [DATEILISTE]

Im Normalfall ermittelt fold die Bildschirmspalten und bricht die Zeilen auf diese Länge um. Ein Tabulatorzeichen kann mehrere Spalten umfassen.

Optionen
-b Zählung nach Bytes und nicht nach Spalten (bytes)
-s Umbruch erfolgt wenn möglich nur an Leerzeichen (spaces)
-w WIDTH Stellt Textbreite auf WIDTH Spalten/Bytes ein (width)
 

7.2.3.0.1 Beispiel

 
Die Zeilen der Datei werden auf maximal 70 Spalten umgebrochen. Der Umbruch erfolgt nur an Leerzeichen und die Ausgabe erfolgt über less auf der Standardausgabe.
fold -s -w 70 kn20000904.txt | less

7.3 Teilen von Texten

Diese Befehlsgruppen zeigt nur Teile des Textes (head und tail) oder zerlegt ihn in mehrere Teile (split).


7.3.1 head

Das Kommando head gibt den Anfang einer Datei (Voreinstellung 10 Zeilen) auf der Standardausgabe auf.
head [OPTIONEN] [DATEILISTE]

Werden mehrere Dateien angegeben, so fügt head den Dateinamen in der Form
==> DATEINAME <==
als Kopf vor dem Ausgabetext ein. Der Befehl tail (siehe 7.3.2) arbeitet ähnlich.

Optionen
-c B Gibt anstatt der ersten 10 Zeilen, die ersten B Zeichen aus.
-n N
-N
Gibt anstatt der ersten 10 Zeilen, die ersten N Zeilen aus.
-q Unterdrückt die Ausgabe der Dateinamen als Kopfzeile
-v Schreibt immer den Dateinamen als Kopfzeile vor der Ausgabe
 

7.3.1.0.1 Beispiel

 
Diese Kommandosequenz gibt die ersten 5 Zeilen der Datei mit dem Dateinamen als Kopf aus.
head -n 5 -v links.html


7.3.2 tail

Das Kommando tail gibt das Ende einer Datei (Voreinstellung 10 Zeilen) auf der Standardausgabe auf.
tail [OPTIONEN] [DATEILISTE]

Werden mehrere Dateien angegeben, so fügt tail den Dateinamen in der Form
==> DATEINAME <==
als Kopf vor dem Ausgabetext ein. Der Befehl head (siehe 7.3.1) arbeitet ähnlich.

Optionen
-c B Gibt anstatt der letzten 10 Zeilen, die letzten B Zeichen aus.
-n N
-N
Gibt anstatt der letzten 10 Zeilen, die letzten N Zeilen aus.
-q Unterdrückt die Ausgabe der Dateinamen als Kopfzeile
-v Schreibt immer den Dateinamen als Kopfzeile vor der Ausgabe
-f Mit dieser Option überwacht tail kontinuierlich das Ende einer oder mehrerer Dateien. Wird an die Datei etwas angehängt, so werden die Änderungen ausgegeben. Die Überwachung wird mit STRG+C abgebrochen.
 

7.3.2.0.1 Beispiel

 
Diese Kommandosequenz gibt die letzten fünf Zeilen der Dateien ohne den Dateinamen als Kopf aus.
tail -n 5 -q seite1.html seite2.html seite3.html

Mit der folgenden Sequenz werden mehrere Dateien auf Veränderung überwacht. tail -fn 15 /etc/passwd /etc/group /tmp/mylogfile


7.3.3 split

Das Kommando split zerlegt Dateien in mehrere kleinere Dateien.
split [OPTIONEN] [DATEI [PREFIX]]

Wird keine Datei angegeben bzw. ``-'' als Dateiname, dann wird von der Standardeingabe gelesen.

split zerlegt eine große Datei in kleinere Dateien vordefinierter Größe (Voreinstellung: 1000 Zeilen). Die dabei entstehenden Dateien beginnen mit einem Prefix (Voreinstellung: x) und werden zweistellig mit Buchstaben durchnummeriert. (xaa, xab, xac, ...).

Optionen
-LINES
-l LINES
Größe der Ergebnisdateien in Zeilen
-b BYTES Größe der Ergebnisdateien in Bytes
b     angehängt bedeutet BYTES x 512
k     angehängt bedeutet BYTES x 1024
m     angehängt bedeutet BYTES x 1048576
 

7.4 Textstatistik

Die folgenden Befehle analysieren den Text (wc) oder ermitteln eine Checksumme (sum und chsum) für die Fehlerkontrolle.


7.4.1 wc

Das Kommando wc zählt die Zeichen, die durch Leerzeichen getrennten Worte und die Zeilen einer Eingabe.
wc [OPTIONEN] [DATEILISTE]

wc gibt pro Datei die Anzahl der Zeilen, die Anzahl der Worte, die Anzahl der Zeichen und den Namen der Datei. Werden mehrere Dateien angegeben, so wird am Schluß eine Zusammenfassung aller Dateien angezeigt.

Optionen
-c Anzahl der Zeichen ausgeben
-w Anzahl der Worte ausgeben
-l Anzahl der Zeilen ausgeben
 

7.4.1.0.1 Beispiel

 
Gibt die Anzahl der Worte und Zeilen in den drei Dateien an.
wc -lw artikel1.txt artikel2.txt artikel3.txt

Bestimmt die Anzahl der Dateien im Verzeichnis /etc. ls /etc | wc -l


7.4.2 sum

Das Kommando sum ermittelt eine 16-bit-Checksumme und die Größe (in 1 k-Blöcken) einer Datei.
sum [OPTIONEN] [DATEILISTE]


7.4.3 cksum

Das Kommando cksum ermittelt eine CRC-Checksumme und die Größe (in Bytes) einer Datei.
cksum [OPTIONEN] [DATEILISTE]

Diese Funktion benutzt einen stabileren Algorithmus (CRC: cyclic redundancy check) als sum (siehe 7.4.2).

7.5 Sortieren

Daten werden meistens erst dann richtig lesbar, wenn Sie sortiert werden. Die Tools sort, comm und uniq kümmern sich um diesen Bereich.


7.5.1 sort

Der Befehl sort durchsucht, verbindet oder vergleicht alle Zeilen einer Datei.
sort [OPTIONEN] [DATEILISTE]

sort kennt drei Arten der Funktion. Sortieren, Verbinden und Prüfen auf Sortierung.

Optionen
-c Prüft, ob die Datei sortiert ist (check sort)
-m Verbindet mehrere Dateien (die nicht sortiert werden, sondern als Gruppe behandelt werden) miteinander
-b Führende Leerzeichen eines Schlüsselfeldes werden ignoriert
-d Sortieren als Telefonverzeichnis: Nur Buchstaben, Ziffern und Leerzeichen werden berücksichtigt
-f Unterscheidet nicht zwischen Groß- und Kleinbuchstaben
-g
-n
Sortiert nach Zahlen anstatt lexikalisch
Die Optionen unterscheiden sich in der Konvertierung der Zahlen zum Vergleich
-o DATEI Ausgabe in die Datei DATEI umlenken
-r Umkehrung der Sortierung
-t SEP Trennzeichen für die Felder definieren
-u Unterdrückung von gleichen Zeilen
+POS1[-POS2] Als Schlüsselfelder werden die Felder ab POS1 bis POS2 (oder bis zum Zeilenende) verwendet.
 

7.5.1.0.1 Beispiel

 
Die Zählung der Spalten beginnt bei 0! Daher sortiert dieser Befehl die Datei mai.log nach der sechsten Spalte. Trennzeichen ist das Leerzeichen.
sort +5 -t " " mai.log > hits.log

Dieser Kommandosequenz sortiert eine Datei nach Telefonbuchmethode und unter Vernachlässigung der Groß- und Kleinschreibung.
sort -fd telefon.buch | less


7.5.2 comm

Das Kommando comm vergleicht zwei sortierte Dateien miteinander.
comm [OPTIONEN] DATEI1 DATEI2

comm gibt drei Spalten aus. In den ersten beiden Spalten stehen die Zeilen aus DATEI1 und DATEI2, die nicht in der jeweiligen anderen Datei vorkommen. In der dritten Zeile werden die gleichen Zeilen ausgegeben.


7.5.3 uniq

Das Kommando uniq entfernt aus einer sortierten Datei die doppelten Zeilen.
uniq [OPTIONEN] [INPUT [OUTPUT]]

Optionen
-c Gibt an, wie oft die Zeile vorkommt
-i Ignoriert Groß- und Kleinschreibung
-d Gibt nur die doppelten Zeilen aus
-u Gibt nur die nicht doppelten Zeilen aus
 

7.5.3.0.1 Beispiel

 
Dieser Befehl extrahiert die siebente Spalte aus der Datei mai.log, sortiert sie, entfernt die doppelten Zeilen und gibt an, wie oft die doppelten Zeilen vorkamen.
cut -f 7 -d " " mai.log | sort | uniq -c | less

7.6 Zeilenoperationen

Um einen Text Zeile für Zeile zu analysieren und zu bearbeiten sind die folgenden Befehle programmiert worden.


7.6.1 cut

Das Kommando cut gibt ausgewählte Felder (Spalten) aus jeder Zeile einer Datei auf der Standardausgabe aus.
cut [OPTIONEN] [DATEILISTE]}

Optionen
-b BYTES Zeige die angegebenen BYTES an.
-f NR Zeige das Feld (die Spalte) Nummer NR (field)
-d ZEICHEN ZEICHEN ist der Spaltentrenner (delimiter)
-s Zeilen ohne Trennzeichen (delimiter) werden nicht ausgegeben
 

Das Tabulatorzeichen ist als Trennzeichen voreingestellt. Das Trennzeichen kann ein Leerzeichen oder ein anderes Sonderzeichen sein. Dann sollte es in Anführungsstriche gesetzt (oder allgemeiner maskiert) werden.

7.6.1.0.1 Beispiel

 
Diese Kommandosequenz gibt die Benutzernamen aus der Datei /etc/passwd aus.
cut -f 1 -d : /etc/passwd

Gibt die ersten 10 Zeichen jeder Zeile aus.
ls -l | cut -b -10


7.6.2 join

Das Kommando join gibt die Zeilen aus zwei Dateien aus, die identische Vergleichsfelder besitzen.
join [OPTIONEN] DATEI1 DATEI2

Optionen
-j FIELD Vergleichsfeld aus DATEI1 und DATEI2 angeben
-j1 FIELD Vergleichsfeld aus DATEI1 angeben
-j2 FIELD Vergleichsfeld aus DATEI2 angeben
-t CHAR Das Zeichen CHAR ist Feldtrennzeichen
-i Ignoriert Groß- und Kleinschreibung
 

7.6.2.0.1 Beispiel

 
Dieser Befehl vergleicht das 2. Feld in t1.txt mit dem 3. Feld in t2.txt und gibt bei Gleichheit die passenden Zeilen aus. join -j1 2 -j2 3 t1.txt t2.txt


7.6.3 paste

Das Kommando paste fügt Dateien spaltenweise zusammen. Jede Datei erhält eine eigene Spalte.
paste [OPTIONEN] [DATEILISTE]

paste ohne Angabe von Dateien funktioniert wie cat (siehe 4.5.2). Ein - in der Dateiliste führt zu einem Lesen von der Standardeingabe.

paste eignet sich zum Zusammenführen von Daten aus mehreren Dateien.

Optionen
-d ZEICHEN ZEICHEN ist das Spaltentrennzeichen
-s Verknüpt die Zeilen einer Datei zu einer einzigen langen Zeile
 

7.6.3.0.1 Beispiel

 
Die Dateien werden zeilenweise zusammengefügt und die einzelnen Spalten mit einem ; getrennt.
paste -d ; sonnenwind.dat magnetfeld.dat teilchen.dat > new.dat

Diese Kommandosequenz liest von der Standardeingabe und schreibt die Eingaben mit einem + getrennt in eine Zeile in die Datei punkte.dat.
paste -d + -s > punkte.dat

7.7 Suchen und Ersetzen

Um bestimmte Stellen aus Texten zu extrahieren oder zu änderen werden die Tools grep, tr, expand, sed, diff und patch verwendet.


7.7.1 grep

Der Befehl grep (Global Regular Expression Print) durchsucht eine Textdatei nach bestimmten Mustern und gibt die Zeilen, in denen das Muster vorkommt, auf der Standardausgabe aus.
grep [OPTIONS] MUSTER [DATEILISTE]

Optionen
-G Interpretiert das MUSTER als regulären Ausdruck; Standarteinstellung. Nicht zusammen mit -F und -E verwenden
-E Interpretiert das MUSTER als erweiterten regulären Ausdruck. Nicht zusammen mit -F und -G verwenden
-F Interpretiert das MUSTER als einfache Zeichenkette. Nicht zusammen mit -F und -E verwenden
-c Zeigt nur die Zeilennummern der gefundenen Zeilen an
-n Zeigt zusätzlich zur Zeile auch die Zeilennummer an
-v Zeigt die Zeilen an, die nicht dem MUSTER entsprechen
-f DATEINAME Die Liste der zu bearbeitenden Dateien
-h Unterdrückt die Ausgabe des Dateinamens bei Verwendung einer Dateiliste.
-i Unterscheidet bei der Suche nicht nach Groß- und Kleinschreibung
-w MUSTER wird als ganzes Wort und nicht als Teil des Wortes betrachtet
-l Zeigt den Namen der Datei an, wenn die Zeile darin gefunden wurde
-s Fehlermeldungen unterdrücken
-r Durchsucht auch die Unterverzeichnisse
 

7.7.1.0.1 Beispiele

 
Durchsucht die Datei kuno.txt nach Zeilen mit dem Wort Bruno.
grep Bruno kuno.txt

Durchsucht alle Dateien im Verzeichnis nach der Zeichenkette `midnight' ohne Berücksichtigung der Groß- und Kleinschreibung und gibt die Namen der Dateien aus, die die Zeichenkette enthalten.
grep -il midnight *


7.7.2 egrep

Das Kommando egrep entspricht dem Befehl grep -E. Es verwendet erweiterte reguläre Ausdrücke.


7.7.3 fgrep

Das Kommando fgrep entspricht dem Befehl grep -F. Es benutzt als Suchmuster nur reine Zeichenketten.


7.7.4 tr

Das Kommando tr sendet die Standardeingabe zur Standardausgabe, wobei es mehrere Operationen auf die Daten ausführt. Mögliche Operationen sind:
tr [OPTIONEN] ZEICHENKETTE1 [ZEICHENKETTE2]

Optionen
-d Löscht die angegebenen Zeichen
-s Löscht doppelt vorkommende Zeichen
 

7.7.4.0.1 Beispiele

 
So wandelt tr mit dem Befehl
cat stundenplan.txt | tr m M > stundenplan.neu
jedes Vorkommen des Buchstabens `m' in den Buchstaben `M' um.

Das folgende Kommando löscht die Zeichen `m' und `y'.
cat etwas.txt | tr -d my

Doppelt vorkommende Zeichen werden mit dem Schalter -s gelöscht.
tr -s le < harry.txt Dabei wird dann aus der `Allee' ganz schnell `Ale'.

Um den einfachen ROT13 Verschlüsselungsalgorithmus zu verwenden, reicht die folgende Sequenz.
cat harry.txt | tr '[A-M][N-Z][a-m][n-z]' '[N-Z][A-M][n-z][a-m]'
oder
cat harry.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
Dabei wird der erste Buchstabe mit dem 13. Buchstaben, der zweite mit dem 14. Buchstaben, u. s. w. getauscht. Wendet man ROT13 wieder auf verschlüsselten Text an, so erhält man den Originaltext.


7.7.5 expand und unexpand

Das Kommando expand liest aus Dateien oder von der Standardeingabe, wandelt die Tabzeichen in Leerzeichen und gibt das Ergebnis auf der Standardausgabe aus. Wird nichts anderes angegeben, dann wird ein Tabulator durch acht Leerzeichen ersetzt.

 expand [OPTIONEN] [DATEILISTE]

Optionen
-TAB1[,TAB2[,...]]
-t TAB1[,TAB2[,...]]
TABx ist die Anzahl der Leerzeichen, durch die das jeweilige Tabulatorzeichen ersetzt werden soll.
-i Tabulatoren ohne vorhergehende Leerzeichen werden nicht konvertiert.
 

Wird nur für das erste Tabulatorzeichen ein Wert angegeben, so gilt dieser Wert für alle Tabulatoren. Werden zwei oder mehr Werte eingegeben, so gelten Sie für die jeweiligen Tabulatoren. Tabulatoren, für die kein Wert angegeben wurde, werden durch einfache Leerzeichen ersetzt.

Die Gegenoperation können Sie mit dem Befehl unexpand durchführen, der Leerzeichen wieder versucht in Tabulatoren umzuwandeln.

7.7.5.0.1 Beispiel

 
Diese Kommandosequenz ersetzt den ersten Tabulator jeder Zeile der Datei helloworld.java durch 6 Leerzeichen, den zweiten durch 8 Leerzeichen und alle folgenden Tabulatoren durch ein Leerzeichen. Das Ergebnis wird in die Datei helloworld.txt geschrieben. expand -6,8 helloworld.java > helloworld.txt


7.7.6 sed

sed ist die Abkürzung für Streaming Editor. Eigentlich ist das Kommando kein Editor sondern ein Textfilter, der bestimmte Zeichenkombinationen sucht und ersetzt. Die Verarbeitung eines Streams oder Datenstroms bedeutet, daß von der Standardeingabe (stdin) Daten angenommen werden und auf die Standardausgabe (stdout) wieder ausgegeben werden. Als Datenquelle kann neben der Standardeingabe auch eine Datei fungieren.

sed [OPTIONEN] [KOMMANDO] [DATEILISTE] 
sed [OPTIONEN] [-f SCRIPTFILE] [DATEILISTE]

Es werden grundsätzlich zwei Möglichkeiten genutzt um sed aufzurufen. Im ersten Fall wird das KOMMANDO auf der Befehlszeile eingegeben und auf die angegebenen Dateien angewendet. Im zweiten Fall stehen die Anweisungen in einer externen Skriptdatei. Diese wird abgearbeitet und die darin enthaltenen Kommandos auf den Inhalt der Dateien angewendetet. Sollte keine Datei angegeben sein, so liest sed von der Standardeingabe. Dabei wird jede gelesene Zeile mit den sed-Kommandos bearbeitet und in einen Puffer geschrieben. Dessen Inhalt wird dann zum Schluß auf der Standardausgabe ausgegeben.

Optionen
-V Versionsnummer
-h Hife
-e SCRIPT Zusätzliche Skriptanweisung zur Bearbeitung
-f SCRIPTFILE Datei, die die Skriptbefehle enthält
-n Ausgabe erfolgt nur bei Benutzung des `p' Kommandos
 

Jeder Befehl kann durch einen Bereich, für den er gültig ist, eingeschränkt werden. Die Bereichsangabe erfolgt im Format
VON
oder
VON, BIS.

Dabei können die Werte für VON und BIS

7.7.6.0.1 Ersetzen

Die folgenden Sequenzen weisen sed an, eine Zeichenkette durch eine andere zu ersetzen.
sed s/SUCHEN/ERSETZEN/
sed s/SUCHEN/ERSETZEN/g
sed s/SUCHEN/ERSETZEN/p
sed -n s/SUCHEN/ERSETZEN/gp
sed s3/SUCHEN/ERSETZEN/
Die Zeichenkette zwischen dem ersten und dem zweiten Schrägstrich gibt das Suchmuster an, während die Zeichenkette zwischen dem zweiten und dem dritten Schrägstrich den Ersetzungstext enthält.

Um das Suchmuster effektiver zu gestalten, können reguläre Ausdrücke7.1 verwendet werden. Diese bestehen normalerweise aus zwei Komponenten: Die Angabe, nach welchem Zeichen gesucht wird, und die Angabe, wie oft das Zeichen auftreten darf.

Die hinten angestellten Optionen verändern die Arbeitsweise von sed. Dabei bewirkt g, daß alle Zeichenketten in der Zeile durch die neue Zeichenkette ersetzt werden (Sonst nur die erste Zeichenkette). Das p führt dazu, daß die Zeilen ausgegeben werden, in denen eine Ersetzung erfolgte. Sind beide Optionen gesetzt, so wird bei einer mehrfachen Ersetzung in einer Zeile die Zeile auch mehrfach angezeigt. Verhindert wird dies durch den Schalter -n. Das s3 sorgt dafür, daß das dritte Vorkommen von SUCHEN in der Zeile ersetzt wird.

7.7.6.0.2 Suchen

Die Sequenz
/SUCHEN/p
im Zusammenhang mit dem Schalter -n bewirkt, daß nur die Zeilen, die das Suchmuster enthalten, ausgegeben werden.

7.7.6.0.3 Zeilen löschen

Wenn der Schalter -n nicht gesetzt ist, werden alle Zeilen nach der Bearbeitung ausgegeben. Um zu verhindern, daß bestimmten Zeilen ausgegeben werden, wird die Sequenz
/SUCHEN/d
verwendet.

7.7.6.0.4 Dateien einfügen

Durch die Sequenz
/SUCHEN/r DATEINAME
werden alle Zeilen, die das Suchmuster enthalten, durch den Inhalt der Datei DATEINAME ersetzt.

7.7.6.0.5 Auswahl in Datei schreiben

Durch die Sequenz
/SUCHEN/w DATEINAME
werden alle Zeilen, die das Suchmuster enthalten, in die Datei DATEINAME geschrieben.

7.7.6.0.6 Beispiele

 
Ersetzt jedes Wort ``UNIX'' durch das Wort ``Linux'' in der Datei einleitung.tex.
sed 's/UNIX/Linux/g' einleitung.tex

Ersetzt jedes Wort ``paragraph'' durch das Wort ``subsubsection'' in der Datei linux.tex und schreibt das Ergebnis in die Datei linuxneu.tex.
sed 's/paragraph/subsubsection/g' linux.tex > linuxneu.tex

Einen interessanten Effekt hat das Zeichen '&' in der Ersetzungszeichenkette. Die gesuchte Zeichenkette wird nicht ersetzt, sondern die Ersetzungszeichenkette wird hinten angefügt.
sed 's/</&lt;/g' index.html
Damit die schließende spitze Klammer ersetzt wird, muß das kaufmännische Und auskommentiert werden.
sed 's/</\</g' index.html

Ersetzt alle Zeichenfolgen ``man'' durch ``frau'' in den Zeilen 1 bis 3 in der Datei einleitung.tex. Dabei werden nur die Zeilen ausgegeben, in denen die Änderung erfolgte.
sed -n '1,3s/man/frau/p' einleitung.tex

Gibt alle Zeilen aus, die entweder ``man'' oder ``frau'' enthalten.
sed -n -e '/man/p' -e '/frau/p' einleitung.tex

Das folgende Kommando löscht alle Zeilen, die die Zahl `0' enthalten.
sed '/0/d' einleitung.tex

Alle Zeilen, die die Zeichenkette ``include'' enthalten, werden durch den Inhalt der Datei include.txt ersetzt.
sed '/include/r include.txt' einleitung.txt

Alle Zeilen, die die Zeichenkette ``section'' enthalten, werden in die Datei inhalt.txt geschrieben. sed '/section/w inhalt.txt' einleitung.tex


7.7.7 diff

Das Kommando diff vergleicht zwei Textdateien miteinander. Als Ergebnis wird eine Liste aller Zeilen ausgegeben, die voneinander abweichen. Dabei erkennt das Programm auch eingefügte Zeilen und arbeitet danach reibungslos weiter. Im Gegensatz zu comm (siehe 7.5.2) kann diff auch auf unsortierte Dateien angewendet werden. Der Befehl wird hauptsächlich dazu verwendet die Abweichungen zwischen zwei Versionen eines Programmlistings rasch zu dokumentieren.
diff [OPTIONEN] DATEI1 DATEI2

Optionen
-b Betrachtet mehrfache Leerzeichen und Leerzeilen als einfache Leerzeichen bzw. Leerzeilen
-c Ausgabe als 'Context Diffs'
-e Ausgabe als Skript für den Befehl ed
-r Vergleicht den Inhalt zweier Verzeichnisbäume
-u Ausgabe als 'Unified Diffs'
-w Ignoriert Leerzeichen und Leerzeilen ganz
 

Die Ausgabe von diff besteht aus sogenannten 'hunks', was man frei als 'Stücke' übersetzen kann. Ein Hunk besteht aus bis zu vier Teilen: einer Informationszeile, dem alten Text, einer Trennzeile und dem neuen Text. Beim Einfügen und Löschen von Zeilen fehlt die alte oder neue Textinformation und die dann überflüssige Trennzeile fällt auch weg.

In der Informationszeile steht, an welcher Stelle in der jeweiligen Datei die Änderung stattgefunden hat und welche Operationen nötig sind um die erste Eingabedatei DATEI1 in die zweite Eingabedatei DATEI2 zu verwandeln. Dabei stehen die Buchstaben 'a', 'c' und 'd' für 'add' (Zeilen hinzufügen), 'change' (Zeilen verändern) und 'delete' (Zeilen löschen). Die Zahlen bzw. Zahlenbereiche links und rechts von den Buchstaben geben die betroffenen Zeilen an.

Alle Hunks zusammengenommen bilden den Patch, der die erste Datei in die zweite Datei verwandelt. Es geht auch umgekehrt, da Patches dieser Art symmetrisch sind und rückwärts angewendet werden können (`reverse patching´);

7.7.7.0.1 Beispiel

 
Um zwei Perlscripte miteinander zu vergleichen, ohne mehrfache Leerzeichen zu berücksichtigen, gibt man das folgende Kommando ein.
 diff -b div.pl.old div.pl

Soll die Ausgabe für den Editor ed verarbeitbar sein, dann muß das Kommando lauten:

 diff -be div.pl.old div.pl

Die Anwendung von diff fürs Patchen von Programmen beschreibt der Abschnitt 7.7.9.


7.7.8 patch

Da das Patchen von Programmen mit ed einige Probleme aufweist hat Larry Wall das Programm patch entwickelt, das später vom GNU-Projekt weiterentwickelt wurde. Es ist in der Lage, alle gängigen diff-Formate zu verstehen.
 patch [OPTIONEN] [ORIGINALDATEI [PATCHDATEI]]

Optionen
-c Interpretiere den Patch als Context Diff
-e Interpretiere den Patch als ed-Skript
-u Interpretiere den Patch als Unified Diff
 


7.7.9 Praxisbeispiel: Patchen von Programmen

Das Patchen von Programmen hat viele Vorteile. So muß z. B. nicht das ganze Programm heruntergeladen oder per eMail versandt werden. Außerdem enthält der Patch nur die Änderungen im Programm. So muß ein Mitautor nicht erst mühselig im Programm die Änderungen suchen, sondern sie werden ihm komprimiert übergeben.

Als Beispiel schauen wird uns zwei Versionen eines Perl-Skripts an.

Listing 7.1   div.pl

   1: #!/usr/bin/perl
   2: 
   3: # Dieses Programm teilt zwei Zahlen durcheinander
   4: 
   5: # Eingabe
   6: print "Zähler: ";
   7: $z = <STDIN>;
   8: chomp($z);
   9: print "Nenner: ";
  10: $n = <STDIN>;
  11: chomp($n);
  12: 
  13: # Verarbeitung
  14: $erg = int($z / $n);
  15: $rest = "Rest ". ($z % $n);
  16: 
  17: # Ausgabe
  18: print "$z / $n = $erg $rest\n";
  19: 
  20: exit(0);

Listing 7.2   div2.pl

   1: #!/usr/bin/perl
   2: 
   3: # Dieses Programm teilt zwei Zahlen durcheinander
   4: # Version 2
   5: 
   6: # Eingabe
   7: print "Zähler: ";
   8: $z = <STDIN>;
   9: chomp($z);
  10: print "Nenner: ";
  11: $n = <STDIN>;
  12: chomp($n);
  13: 
  14: # Verarbeitung
  15: # Verarbeitung nur, wenn der Nenner ungleich Null ist
  16: if ($n != 0) {
  17:   $erg = int($z / $n);
  18:   $rest = "Rest ". ($z % $n);
  19: } else {
  20:   $erg = "unendlich";
  21:   $rest = "";
  22: }
  23: 
  24: # Ausgabe
  25: print "$z / $n = $erg $rest\n";
  26: 
  27: exit(0);

diff liefert uns nun die Unterschiede der beiden Skripte.

tapico@defiant:~/perl > diff div.pl div2.pl
3a4
> # Version 2
14,15c15,22
< $erg = int($z / $n);
< $rest = "Rest ". ($z % $n);
---
> # Verarbeitung nur, wenn der Nenner ungleich Null ist
> if ($n != 0) {
>   $erg = int($z / $n);
>   $rest = "Rest ". ($z % $n);
> } else {
>   $erg = "unendlich";
>   $rest = "";
> }

Manuell können mit diesen Informationen nun die Änderungen an der Datei div.pl durchgeführt werden.

Da dies bei größeren Projekten doch problematisch ist, kann auch ein Skript für den Editor ed erstellt werden.

tapico@defiant:~/perl > diff -e div.pl div2.pl
14,15c
# Verarbeitung nur, wenn der Nenner ungleich Null ist
if ($n != 0) {
  $erg = int($z / $n);
  $rest = "Rest ". ($z % $n);
} else {
  $erg = "unendlich";
  $rest = "";
}
.
3a
# Version 2
.

Wenn Sie die Ausgabe als Datei gespeichert haben, kann nun jemand anders mit dem Editor ed die alte Datei (div.pl) mit dem Patch (hier die Datei div.patch) bearbeiten und daraus die neue Datei (div2.pl) erstellen.

barclay@enterprise:~/projekt > (cat div.patch; echo w div2.pl) | ed - div.pl

Dies setzt aber voraus, daß an der alten Datei nichts geändert worden ist. Daher gibt es zwei andere Formate, die mehr Sicherheit beim Patchen versprechen.

7.7.9.0.1 Context Diff

tapico@defiant:~/perl > diff -c div.pl div2.pl
*** div.pl	Sun Sep 23 14:36:48 2001
--- div2.pl	Sun Sep 23 14:36:12 2001
***************
*** 1,6 ****
--- 1,7 ----
  #!/usr/bin/perl
  
  # Dieses Programm teilt zwei Zahlen durcheinander
+ # Version 2
  
  # Eingabe
  print "Zähler: ";
***************
*** 11,18 ****
  chomp($n);
  
  # Verarbeitung
! $erg = int($z / $n);
! $rest = "Rest ". ($z % $n);
  
  # Ausgabe
  print "$z / $n = $erg $rest\n";
--- 12,25 ----
  chomp($n);
  
  # Verarbeitung
! # Verarbeitung nur, wenn der Nenner ungleich Null ist
! if ($n != 0) {
!   $erg = int($z / $n);
!   $rest = "Rest ". ($z % $n);
! } else {
!   $erg = "unendlich";
!   $rest = "";
! }
  
  # Ausgabe
  print "$z / $n = $erg $rest\n";

7.7.9.0.2 Unified Diff

tapico@defiant:~/perl > diff -u div.pl div2.pl
--- div.pl	Sun Sep 23 14:36:48 2001
+++ div2.pl	Sun Sep 23 14:36:12 2001
@@ -1,6 +1,7 @@
 #!/usr/bin/perl
 
 # Dieses Programm teilt zwei Zahlen durcheinander
+# Version 2
 
 # Eingabe
 print "Zähler: ";
@@ -11,8 +12,14 @@
 chomp($n);
 
 # Verarbeitung
-$erg = int($z / $n);
-$rest = "Rest ". ($z % $n);
+# Verarbeitung nur, wenn der Nenner ungleich Null ist
+if ($n != 0) {
+  $erg = int($z / $n);
+  $rest = "Rest ". ($z % $n);
+} else {
+  $erg = "unendlich";
+  $rest = "";
+}
 
 # Ausgabe
 print "$z / $n = $erg $rest\n";

Diese beiden Formate, wie auch die anderen, können mit dem Befehl patch die Veränderung durchführen.

barclay@enterprise:~/projekt > patch < div.c.patch
Die im Patch angegebene Datei (div.pl) ist nun verändert worden.


Notizen:


Notizen:

Textverarbeitung und Textfilter % latex2html id marker 8448
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.

 

235
Loggen Sie sich als Walter ein!
236
Führen Sie den Befehl rm -rf * aus.
237
Kopieren Sie aus dem Verzeichnis /usr/share/man/man1 die Datei less.1.gz ins Heimatverzeichnis.
238
Erzeugen Sie aus der Datei less.1.gz die HTML-Datei less.html.
239
Lassen Sie sich den Inhalt der Datei less.html seitenweise anzeigen!
240
Erzeugen Sie mit dem vi eine Textdatei, die mindestens 3 Zeilenvorschübe beinhaltet (4 Zeilen lang)! Name der Datei: funny !
241
Kopieren Sie die Datei /usr/share/man/man1/more.1.gz in Ihr Heimatverzeichnis und machen Sie wie in Aufgabe 4 eine HTML-Datei daraus.
242
Lassen Sie sich Inhalt von more.html und funny in Ihrem Heimatverzeichnis nacheinander seitenweise auf dem Bildschirm anzeigen, dazu ist nur ein Befehl einzugeben!
243
Erstellen Sie mit einem einzigen Befehl aus den Dateien more.html und funny eine neue Datei namens hummer.
244
Lassen Sie sich den Inhalt von hummer anzeigen.
245
Löschen Sie die Dateien funny und hummer in Ihrem Heimatverzeichnis!
246
Wie lauten die letzten (10) Zeilen der Datei less.html.
247
Lassen Sie sich den Inhalt der Datei less.html in oktaler Form anzeigen!
248
Kopieren Sie alle Dateien, die mit `mc' beginnen, aus dem Verzeichnis /usr/share/man/man1/ in Ihr Heimatverzeichnis.
249
Wandeln Sie wie in Aufgabe 4 die kopierten Dateien in HTML-Dateien.
250
Lassen Sie sich die ersten 5 Zeilen der Datei mcopy.html anzeigen.
251
Wieviele Wörter und Zeilen enthält die Datei more.html?
252
Welche Datei im Heimatverzeichnis enthält die Zeichenkette `Midnight'?
253
Schauen Sie sich die Datei /etc/passwd an.
254
Wieviele Zeilen enthält sie?
255
Lassen Sie sich die ersten 20 Zeilen der Datei /etc/passwd numeriert anzeigen.
256
Geben Sie die erste Spalte der Datei /etc/passwd aus.
257
Geben Sie sortiert die erste Spalte der Datei /etc/passwd aus.
258
Geben Sie sortiert die erste Spalte der Datei /etc/passwd aus und speichern Sie das Ergebnis in der Datei ~/passwd.sort.

% latex2html id marker 8522
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

259
Schreiben Sie den Inhalt der Datei /etc/passwd in umgekehrter Zeilenfolge in die Datei ~/passwd.reverse.
260
Vergleichen Sie die CRC-Checksummen von /etc/passwd, ~/passwd.sort und ~/passwd.reverse.

261
Lassen Sie sich die Logdatei für Warnmeldungen des Systems /var/log/warn anzeigen. Welche Bedeutung haben wohl die einzelnen Spalten?
262
Lassen Sie sich alle Zeilen von heute ausgeben.
263
Lassen Sie sich alle Zeilen vom letzten Arbeitstag ausgeben.
264
Wieviele Warnmeldungen gab es?
265
Geben Sie die beiden ersten Spalten aus.
266
Geben Sie die beiden ersten Spalten aus, entfernen Sie alle doppelten Zeilen.
267
Lassen Sie sich anzeigen, wieviele Warnmeldungen es pro Tag gab.
268
Sortieren Sie diese Liste absteigend nach der Häufigkeit.

269
Verfassen Sie mit dem Editor vi eine Botschaft an Ihren Nachbarn und speichern Sie diese in der Datei gutenachricht.txt.
270
Verschlüsseln Sie den Inhalt der Datei mit dem ROT13-Verfahren und speichern Sie das Ergebnis in der Datei gutenachricht.krypto.
271
Senden Sie Ihrem Nachbarn die Datei zu. (eMail, FTP, Turnschuhnetz etc.)
272
Entschlüsseln Sie die Nachricht Ihres Nachbarn.
273
Was bedeutet der Satz ``Qvr Nhstnora fvaq sregvt''?


Notizen:


8. Benutzerverwaltung


8.1 Benutzer

Nach der Installation von Linux existiert nur ein Benutzerkonto. Dieses Benutzerkonto ist root, das Konto für den Superuser. Daher muß der Administrator (Superuser) für die Arbeit weitere Konten anlegen.


8.1.1 Der Superuser root

Das Konto root wird nicht umsonst als Superuser bezeichnet. Der Benutzer unter diesem Konto darf im System alles. Er hat vollen Zugriff auf alle Verzeichnisse, Dateien und Geräte im System. Damit kann er auch alles löschen. Diese Aktion kann aber zu erheblichen Schäden am System führen, somit sollte man als Superuser sehr vorsichtig handeln.

Der Superuser root besitzt die UID 0 (User IDentification) und wird wie alle anderen Benutzer in der Datei /etc/passwd definiert. Da das System die Benutzer nicht nach ihrem Namen identifiziert, sondern nach ihrer UID, kann der Superuser auch einen anderen Lognamen bekommen. Da Linux wie das Christentum nur einen Gott kennt, nämlich den Benutzer mit der UID 0, ist es ratsam für diesen Benutzer weitere Namen anzulegen. Wenn Sie nämlich das Paßwort für root vergessen, wünsche ich Ihnen viel Spaß ;-).

Um die Sicherheit ihres Systems zu erhöhen, sollten Sie mehrere Benutzer anlegen, die spezielle Aufgaben erledigen können. Diese Benutzer erhalten spezielle eingeschränkte Rechte für die verschiedenen administrativen Aufgaben. Wie das geht, wird in Abschnitt 8.3.6 beschrieben.

Für die alltäglichen Aufgaben sollten Sie sich nicht als root einloggen, da dies ein nicht zu unterschätzendes Risiko darstellt. Im normalen Betrieb sollten Sie als einfacher Benutzer arbeiten. Nur für administrative Aufgaben loggen Sie sich als root ein und erledigen die Aufgaben, um danach als einfacher Benutzer weiterzuarbeiten. Um diesen zeitaufwendigen Prozeß des Aus- und Einloggens abzukürzen, wurde der Befehl su entwickelt.


8.1.2 su

Das Kommando su erlaubt einen Wechsel der Benutzeridentität bzw. UID während einer Sitzung.
su [OPTIONEN] [BENUTZER]

Die einfache Eingabe von su ohne einen Benutzernamen bewirkt einen Wechsel zur Superuseridentität nach der Eingabe des Superuserkennworts.

Der Wechsel der Identität wird durch das Starten einer neuen Shell realisiert. Im Gegensatz zum Einloggen, bei dem auch eine Shell gestartet wird, bleibt beim Wechsel der Identität mit su die Umgebung des alten Benutzers erhalten. Nur die Umgebungsvariablen HOME und SHELL werden auf die entsprechenden Werte des neuen Benutzers geändert.

Jeder Benutzer kann seine Identität wechseln, solange er das Kennwort des neuen Benutzers kennt. Nur der Superuser kann seine Identität wechseln ohne ein Kennwort eingeben zu müssen.

Mit dem Befehl exit oder drücken der Tastenkombination <STRG>+<D> kehren Sie zur alten Identität zurück.

Optionen
-, -l Die Konfigurationsdateien des Benutzers werden ausgeführt
-c KOMMANDO Führt das angegebene Kommando unter dem neuen Benutzer aus
 

8.1.2.0.1 Beispiele

 
su
mit anschließender Kennworteingabe läßt den Benutzer nun als Superuser arbeiten.

su tapico
mit anschließender Kennworteingabe läßt den Benutzer nun unter der UID des Benutzers tapico arbeiten. Der Superuser benötigt keine Kennworteingabe um die Identität zu wechseln.

su - tapico
führt im Gegensatz zum obigen Beispiel dazu, daß die Konfigurationsdateien von tapico mit ausgeführt werden. Daher ist z. B. das Heimatverzeichnis von tapico jetzt das aktuelle Arbeitsverzeichnis.


8.2 Das Benutzerkonto

Als erstes nach der Installation des Systems, selbst wenn Sie der einzige Benutzer sind, sollten Sie sich einen eigenen einfachen Benutzer zulegen. Dazu müssen Sie für jeden anderen Benutzer ein eigenes Konto einrichten. Dies erhöht die Sicherheit im System, da so jeder Benutzer individuelle Privilegien erhält. Außerdem ist eine Verfolgung der Benutzeraktivitäten möglich.


8.2.1 /etc/passwd

Alle Informationen über das Benutzerkonto werden in der Datei /etc/passwd gespeichert. Es enthält u. a. den Loginnamen, die UID, das verschlüsselte Kennwort8.1 und den vollen Namen. Ein Übersicht über den Inhalt gibt Tabelle 8.1.


Tabelle 8.1: Die Felder der Datei /etc/passwd.
Spalte Bezeichnung Inhalt
1 Benutzername Einzigartig um den Benutzer bei Einloggen zu identifizieren
2 Kennwort Das verschlüsselte Kennwort (heute in /etc/shadow)
3 UID Eindeutige Nummer zur Identifizierung des Benutzers
4 GID Eindeutige Nummer zur Identifizierung der Gruppe
5 Kommentar Voller Name des Benutzers und andere Angaben
6 Heimatverzeichnis Arbeitsverzeichnis nach dem Einloggen
7 Login-Kommando Das Kommando wird nach dem Einloggen ausgeführt; meist eine Shell


Die Datei /etc/passwd gehört root mit dem Recht rw-. Alle anderen eingeschlossen die Gruppe haben nur das Lese-Recht.

Die Datei könnte z. B. folgende Einträge enthalten:

 
root:x:0:0:Herr und Meister:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
lp:x:4:7:lp daemon:/var/spool/lpd:/bin/bash
news:x:9:13:News system:/etc/news:/bin/bash
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
at:x:25:25::/var/spool/atjobs:/bin/bash
wwwrun:x:30:65534:Daemon user for apache:/tmp:/bin/bash
squid:x:31:65534:WWW proxy squid:/var/squid:/bin/bash
ftp:x:40:2:ftp account:/usr/local/ftp:/bin/bash
firewall:x:41:31:firewall account:/tmp:/bin/false
named:x:44:44:Nameserver Daemon:/var/named:/bin/bash
tapico:x:501:100:Thomas Prizzi:/home/tapico:/bin/bash
luke:x:502:100:Lukas Himmelsgeher:/home/luke:/bin/bash
lori:x:503:100:Lori Kalmar:/home/lori:/bin/bash
grayson:*:504:100:Grayson Death Carlyle:/home/grayson:/bin/bash
nobody:x:65534:65534:nobody:/tmp:/bin/bash

Die Felder werden durch Doppelpunkte (:) voneinander getrennt. Daher kann auch ein Feld, wie bei dem Benutzer at zu sehen, leer bleiben. Dieses Format wird bei fast allen UNIX-Systemen verwendet.

8.2.1.1 Feld: Benutzername

Das erste Feld ist der Benutzername. Er muß einmalig sein, da er für die Identifikation beim Einlogvorgang verwendet wird. Der Benutzername kann bis zu 8 Zeichen lang sein. Er kann aus Buchstaben, Ziffern, dem Unterstrich, dem Minuszeichen und anderen speziellen Zeichen bestehen. Bei Verwendung der nichtalphanumerischen Zeichen kann es zu Problemen mit Programmen kommen, die den Benutzernamen verwenden. Auch hier wird zwischen Groß- und Kleinschreibung unterschieden. So handelt es sich bei tapico und Tapico um zwei verschiedene Benutzer. Natürlich sollte die Anlage von zwei Benutzern, die sich nur in Groß- und Kleinschreibung unterscheiden, vermieden werden.

Wenn Sie viele Benutzer in ihrem System einrichten wollen, ist es wichtig sich eine Strategie zur Namensvergabe zu überlegen. In den meisten Fällen wird es eine Kombination aus Vorname und Nachname sein. So kann der Loginname der Benutzerin Angela Mahnke z. B. lauten: mahnke, amahnke, aMahnke, A_Mahnke oder angelam. Beim Benutzer Ole Vanhoefer wären es z. B.: vanhoefe, ovanhoef, oVanhoef, o_Vanhoe oder olevan.

8.2.1.2 Feld: Kennwort

Das nächste Feld im Datensatz ist das durchs Betriebssystem verschlüsselte Kennwort. Sollte der Eintrag beschädigt werden, so kann sich der Benutzer nicht mehr einloggen und der Administrator muß für den Benutzer ein neues Kennwort setzen.

Um einen Benutzer am Einloggen zu hindern, kann der Superuser hier ein Asterisk (*) einsetzen. Um einen Benutzer nur vorübergehend auszusperren, weil er im Urlaub ist oder den Superuser geärgert hat, ist es üblich an den Anfang des verschlüsselten Kennworts ein Asterisk zu setzen. Dabei ist darauf zu achten, daß die restlichen Zeichen des verschlüsselten Kennworts nicht verändert werden.

Ein leeres Feld an dieser Stelle bewirkt, daß Sie sich unter dem Benutzernamen ohne Eingabe eines Kennworts einloggen können. Solche Benutzerkonten sollten aber stark in ihren Rechten eingeschränkt werden, um nicht hier eine gewaltige Sicherheitslücke zu öffnen. Die Kennwortlänge beträgt bei den heutigen Distributionen zwischen fünf und acht Zeichen. Dies kann aber individuell konfiguriert werden.


8.2.1.3 Feld: UID

Das dritte Feld eines Eintrags in der /etc/passwd enthält die UID (User IDentification). Dies ist eine Zahl, mit der das System den Benutzer identifiziert. So wird beim Starten eines Prozesses durch einen Benutzer dessen UID dem Prozess zugeordnet.

Der Zahlenbereich kann den Typ eines Kontos schon einer bestimmten Gruppe zuordnen. UIDs unter 100 sind Systemkonten zugeordnet. Die UID 0 ist dem Superuser root vorbehalten. Normale Benutzer bekommen eine UID größer als 100 zugewiesen. Dabei ist die Grenze von Distribution zu Distribution unterschiedlich. Bei S.u.S.E. liegt die Grenze bei 500. In der Datei /etc/login.defs (Abschnitt 8.2.6) kann der Wertebereich der UID mit den Parametern UID_MIN und UID_MAX genau festgelegt werden.


8.2.1.4 Feld: GID

Die GID (Group IDentification) steht in Feld Nummer vier. Sie wird wie die UID vom System zur Verwaltung benutzt. Die Gruppen dienen zur besseren Organisation der Benutzer und deren Privilegien. Die hier angegebene Gruppe wird als Login-Gruppe des Benutzers bezeichnet. Die Gruppen werden in der Datei /etc/group (Abschnitt 8.4.1) definiert.

Wie auch bei der UID gibt die GID durch ihren Zahlenbereich schon Aufschluß über die Verwendung. Der Bereich 0 bis 49 ist den Systemgruppen vorbehalten. Die Nummern ab 50 bekommen die Benutzergruppen. Auch dies ist abhängig von der Distribution und wird ebenfalls in der Datei /etc/login.defs (Abschnitt 8.2.6) festgelegt. Als Standardgruppe für Benutzer werden meistens die Gruppe group oder users angelegt. Diesen Gruppen werden die Benutzer beim Erstellen standardmäßig zugeordnet.

8.2.1.5 Feld: Kommentar

Das Kommentarfeld kann leer gelassen werden. Normalerweise enthält es den vollen Namen des Benutzers. Es kann aber auch Abteilung, Telefonnummer, eMail oder sonstige Informationen enthalten. Der Befehl finger benutzt z. B. die hier enthaltenen Informationen. Auch nutzen einige eMail-Programme diesen Eintrag für den Absender.

8.2.1.6 Feld: Heimatverzeichnis

Dieser Eintrag bestimmt das Heimatverzeichnis des Benutzers. Hier findet er sich nach dem Einloggen wieder. Sollte der Eintrag ein nichtexistierendes Verzeichnis beinhalten, so schlägt der Einlogvorgang fehl.

8.2.1.7 Feld: Login-Kommando

In dem letzten Feld steht der Befehl, der nach dem Einloggen zuerst ausgeführt werden soll. Grundsätzlich handelt es sich hier um den Aufruf der zu benutzenden Shell. Dadurch kann der Benutzer in der Nutzung des System eingeschränkt werden. Ein leerer Eintrag führt dazu, daß die als Standard vorgegebene Shell benutzt wird.

Der Eintrag kann über den Befehl chsh (Abschnitt 4.1.1) geändert werden.


8.2.2 Besondere Benutzerkonten

Wenn Sie in die Datei /etc/passwd schauen, sehen Sie im Bereich der niedrigen UIDs die Systemkonten. Diese Konten sind virtuelle Benutzer unter dessen Identifikation die Systemprozesse laufen. Dies dient vor allen Dingen zur Sicherheit des Systems. Früher liefen die meisten Prozesse unter dem Konto root. Dies führte aber bei Sicherheitslücken dazu, daß der Angreifer unter der Identität von root arbeiten konnte. Wenn ihm heute ein Durchbruch gelingt, so kann er nur als einer der Systembenutzer arbeiten, die natürlich nur mit eingeschränkten Rechten versehen sind. Ein Liste solcher Systembenutzer zeigt Tabelle 8.2.


Tabelle 8.2: Besonder Benutzerkonten
Benutzerkonto Einsatzgebiet
root Superuser des Systems
daemon Besitzt und setzt die Berechtigungen auf die Systemprozesse
bin Besitzer der ausführbaren Dateien
sys Besitzer der ausführbaren Dateien
adm Besitzer der Log-Dateien
uucp Benutzt für den UUCP-Zugriff


Neben diesen in der Tabelle aufgeführten Systembenutzer gibt es solche wie mail, ftp, gopher, news, wwwroot u.s.w. Denken Sie daran. Ändern Sie nie die Einträge für diese Besitzer, denn das kann verheerende Folgen für ihr System haben.

Vielleicht ist Ihnen auch aufgefallen, daß die Accounts im Kennwortfeld ein Asterisk (*) stehen haben. Es ist also nicht möglich sich interaktiv als Systembenutzer einloggen.

8.2.3 Benutzer am Einloggen hindern

Manchmal braucht man ein Benutzerkonto für eine bestimmte Aufgabe. Trotzdem soll sich keiner interaktiv mit diesem Konto auf dem Rechner einloggen können. Dies sind zum einen Systembenutzerkonten, zum anderen sind dies Konto, für die FTP- oder POP3-Zugriff möglich ist, aber eben kein direkter Shell-Login.


8.2.3.1 /bin/false

Wenn Sie sich die Datei /etc/passwd genauer anschauen, werden Sie bei vielen Systemkonten den Befehl /bin/false als Login-Shell eingetragen finden. Eigentlich ist false keine Shell, sondern ein Befehl der nichts tut und dann sich auch noch mit einem Statuscode beendet, der einen Fehler signalisiert. Das Ergebnis ist simpel. Der Benutzer loggt sich ein und sieht sofort wieder den Login-Prompt.

Bei Verwendung des Befehls su können Sie die Fehlermeldung besser sehen.

ole@enterprise:~> su martin
Password:
This account is currently not available.
ole@enterprise:~>

Es kann aber auch in Abhängikeit von der Distribution vorkommen, daß keine Fehlermeldung erscheint.


8.2.3.2 /bin/true

Das Gegenteil des Befehls false ist der Befehl true. Dieser Befehl tut auch nichts, liefert aber immer den Fehlercode 0 für eine erfolgreiche Ausführung zurück. Dies können Sie im folgenden Beispiel sehen.

ole@enterprise:~> false; echo $?
1
ole@enterprise:~> true; echo $?
0

Obwohl es ungewöhnlich ist, können Sie auch diesen Befehl als Loginshell eintragen. Er verhindert ebenfalls erfolgreich das Einloggen.

8.2.3.3 /sbin/nologin

Die Shell /sbin/nologin hat nur eine Aufgabe. Einem sich einloggenden Benutzer freundlich zu sagen, daß er sich nicht einloggen darf und ihn dann eiskalt aus dem System rauszuwerfen. Die übliche Nachricht wird durch den Inhalt der Datei /etc/nologin.txt ersetzt.

Beim normalen Login-Prompt auf der Konsole bekommen Sie nichts davon mit, da der neue Login-Prompt vorher den Bildschirm löscht. Versuchen Sie sich dagegen mit dem Befehl su einzuloggen, können Sie die Fehlermeldung gut sehen.

ole@enterprise:~> su martin
Password:
Hallo Fremder,
Du darfst Dich hier nicht einloggen.

Gruß Root
ole@enterprise:~>

Ohne die Datei /etc/nologin.txt ist die Fehlermeldung lange nicht so schön.

ole@enterprise:~> su martin
Password:
This account is currently not available.
ole@enterprise:~>


8.2.4 passwd

Um ein Kennwort zu ändern wird der Befehl passwd verwendet. Der Benutzer kann nur sein eigenes Kennwort ändern, während der allmächtige Superuser alle Kennwörter ändern kann.
passwd [BENUTZER]

Wenn ein Benutzer sein Kennwort ändern will, dann braucht er natürlich keinen Benutzernamen anzugeben. Er muß aber mit seinem alten Kennwort den Vorgang bestätigen und danach zweimal das neue Kennwort, was nicht auf dem Bildschirm angezeigt wird, eingeben. Dies soll eine Falscheingabe des neuen Kennworts durch Vertippen verhindern.

Die Richtlinien für die Kennwörter werden in der Datei /etc/login.defs (Abschnitt 8.2.6) festgelegt. Das kann die Mindestlänge des Kennworts, das Auslaufdatum des Kennworts und die Warnung davor sein. Außerdem finden Sie hier den Eintrag für das Verzeichnis der Mailboxen.

Bei der Kennwortvergabe ist darauf zu achten, daß gebräuchliche Worte aus Lexika (Brutal Force Attack) und Worte aus dem Umfeld der Person (scharf nachdenken) relativ leicht geknackt werden können. Die Kombination aus zwei Worten, Groß- und Kleinschreibung sowie Buchstaben und Zahlen, die mindestens eine Länge von sechs Zeichen aufweisen sollten, sind ein idealer Schutz.


8.2.5 chpasswd

Das Tool chpasswd erlaubt eine skriptähnliche Änderung von mehreren Kennwörtern gleichzeitig.
chpasswd [OPTIONEN]

Dabei liest chpasswd eine Datei von der Standardeingabe. Die Datei enthält pro Zeile den Benutzernamen und das Kennwort getrennt durch einen Doppelpunkt (tapico:zorro67). Das Kennwort steht dabei im Klartext. Ist das Kennwort bereits verschlüsselt, so muß der Schalter -e mitgegeben werden.

8.2.5.0.1 Beispiele

 
cat newpass.txt | chpasswd
Diese Kommandosequenz ändert die Kennwörter wie in der Datei newpass.txt beschrieben. Die Kennwörter stehen im Klartext in der Datei.


8.2.6 /etc/login.defs

Die Datei /etc/login.defs enthält die Einstellungen für den Login-Vorgang. Alle Einträge sind optional. Fehlen diese, so gelten sie als nicht gesetzt. Wie in den meisten Konfigurationsskripten üblich werden Kommentarzeilen (beginnen mit einem `#') und leere Zeilen ignoriert.

Hier ein Beispiel für die /etc/login.defs. Wie in guten Installationen üblich ergeben sich die Bedeutungen der Einträge aus den vorangestellten Kommentaren.

# Delay in seconds before being allowed another attempt after a login failure
#
FAIL_DELAY		3

# Enable logging and display of /var/log/faillog login failure info.
#
FAILLOG_ENAB		yes

# Enable display of unknown usernames when login failures are recorded.
#
LOG_UNKFAIL_ENAB	no

# Enable logging and display of /var/log/lastlog login time info.
#
LASTLOG_ENAB		yes

# Enable additional checks upon password changes.
#
OBSCURE_CHECKS_ENAB	yes

# If defined, ":" delimited list of "message of the day" files to
# be displayed upon login.
#
MOTD_FILE	/etc/motd
#MOTD_FILE	/etc/motd:/usr/lib/news/news-motd

# If defined, file which maps tty line to TERM environment parameter.
# Each line of the file is in a format something like "vt100  tty01".
#
TTYTYPE_FILE	/etc/ttytype

# If defined, login failures will be logged here in a utmp format.
# last, when invoked as lastb, will read /var/log/btmp, so...
#
#FTMP_FILE	/var/log/btmp

# If defined, file which inhibits all the usual chatter during the login
# sequence.  If a full pathname, then hushed mode will be enabled if the
# user's name or shell are found in the file.  If not a full pathname, then
# hushed mode will be enabled if the file exists in the user's home directory.
#
#HUSHLOGIN_FILE	.hushlogin
HUSHLOGIN_FILE	/etc/hushlogins

# The default PATH settings.
#
ENV_PATH                /usr/local/bin:/usr/bin:/bin

# The default PATH settings for root:
#
ENV_ROOTPATH            /sbin:/bin:/usr/sbin:/usr/bin

# Terminal permissions
#
#	TTYGROUP	Login tty will be assigned this group ownership.
#	TTYPERM		Login tty will be set to this permission.
#
# If you have a "write" program which is "setgid" to a special group
# which owns the terminals, define TTYGROUP to the group number and
# TTYPERM to 0620.  Otherwise leave TTYGROUP commented out and assign
# TTYPERM to either 622 or 600.
#
TTYGROUP	tty
TTYPERM		0620

# Password aging controls:
#
#	PASS_MAX_DAYS	Maximum number of days a password may be used.
#	PASS_MIN_DAYS	Minimum number of days allowed between password changes.
#	PASS_MIN_LEN	Minimum acceptable password length.
#	PASS_WARN_AGE	Number of days warning given before a password expires.
#
PASS_MAX_DAYS	99999
PASS_MIN_DAYS	0
PASS_MIN_LEN	5
PASS_WARN_AGE	7

# If compiled with cracklib support, where are the dictionaries
#
CRACKLIB_DICTPATH	/usr/lib/cracklib_dict

# Min/max values for automatic uid selection in useradd
#
UID_MIN			  100
UID_MAX			60000

# Min/max values for automatic gid selection in groupadd
#
GID_MIN			  100
GID_MAX			60000

# Max number of login retries if password is bad
#
LOGIN_RETRIES		3

# Max time in seconds for login
#
LOGIN_TIMEOUT		60

# Maximum number of attempts to change password if rejected (too easy)
#
PASS_CHANGE_TRIES	3

# Warn about weak passwords (but still allow them) if you are root.
#
PASS_ALWAYS_WARN	yes

# Number of significant characters in the password for crypt().
# Default is 8, don't change unless your crypt() is better.
# Ignored if the "md5" option is given to the pam_pwcheck module.
#
PASS_MAX_LEN		8

# Require password before chfn/chsh can make any changes.
#
CHFN_AUTH		yes

# Which fields may be changed by regular users using chfn - use
# any combination of letters "frwh" (full name, room number, work
# phone, home phone).  If not defined, no changes are allowed.
# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
#
CHFN_RESTRICT		rwh

# Should login be allowed if we can't cd to the home directory?
# Default is yes.
#
DEFAULT_HOME		yes


8.3 Einrichten eines Benutzers

Damit ein Benutzer sich einloggen kann, benötigt er mindestens einen Benutzernamen und ein Heimatverzeichnis. Alles andere, sogar das Kennwort, werden aus anderen Gründen eingerichtet.

Es gibt mehrere Möglichkeiten einen Benutzer anzulegen. Sie werden hier die direkte Methode und den Befehl useradd kennenlernen. Viele Distributionen bieten weitere, meist komfortablere Tools an.

8.3.1 Bearbeiten der Datei /etc/passwd

Der ursprünglichste Weg (Hardcore-Administration) einen Benutzer einzurichten ist der direkte Eingriff in die Datei /etc/passwd. Bevor Sie aber dies tun, sollten Sie sich auf jeden Fall eine Sicherungskopie der Datei anlegen, denn ohne eine funktionstüchtige passwd-Datei können Sie sich selbst als root nicht mehr einloggen.

Um jetzt einen neuen Benutzer anzulegen, müssen Sie nur eine neue Zeile mit den entsprechenden Informationen hinzufügen. Denken Sie bitte daran, daß der Editor die Datei in reinem ASCII-Code (z. B. vi oder joe) abspeichert. Sie tragen ins erste Feld den Lognamen des neuen Benutzers ein. Das zweite Feld mit dem Kennwort lassen Sie leer, da es hier in verschlüsselter Form stehen muß. Für das dritte Feld müssen Sie sich erst eine Übersicht über die vorhandenen UIDs verschaffen, damit Sie dann die nächste freie UID hier eintragen können. Ein solcher Eintrag könnte dann lauten:
tapico::523:100:Thomas Prizzi:/home/tapico:/bin/bash

Nach dem Eintrag und dem Abspeichern der Datei müssen Sie den Befehl passwd verwenden um das Kennwort des Benutzers festzulegen.

Jetzt sollte das Heimatverzeichnis des Benutzers angelegt und die Konfigurationsdateien kopiert werden. Auf diesen Vorgang gehen wir später genauer ein. Denken Sie daran den Benutzer als neuen Besitzer und seine Gruppe als Gruppe für das Heimatverzeichnis einzutragen. Dazu können Sie das chown-Kommando (Abschnitt 9.2.1) benutzen.


8.3.2 useradd

Ein komfortablerer und weniger fehleranfälliger Weg einen Benutzer einzurichten ist der Befehl useradd.
useradd [OPTIONEN] [BENUTZER]

Optionen
-D Zeigt die Standardeinstellung des Systems
-u UID Erlaubt eine UID vorzugeben
-g GID Erlaubt eine GID vorzugeben
-o Erlaubt die mehrfache Verwendung von UIDs
-m Das Heimatverzeichnis wird automatisch erstellt
-d VERZEICHNIS Angegebenes Verzeichnis als Heimatverzeichnis verwenden
-k VERZEICHNIS Angegebenes Verzeichnis als Skeleton-Verzeichnis verwenden
-c KOMMENTAR Inhalt des Kommentarfeldes
-s SHELL Name der LOGIN-Shell
-e MM/DD/YY Verfallsdatum des Kontos
-f TAGE Zeitraum zwischen Auslaufen des Paßworts und schließen des Kontos
 

Im Normalfall benutzt useradd die nächste freie UID und weist dem neuen Benutzer die aktuelle Shell als Login-Kommando des Kontos zu. Ein Heimatverzeichns wird zwar in der /etc/passwd eingetragen, aber nicht erstellt. Erst der Schalter -m bewirkt das Anlegen des Heimatverzeichnis. Dies ist normalerweise /home/BENUTZERNAME. Durch den Schalter -d kann aber auch ein anderes Verzeichnis angegeben werden. Wenn das Heimatverzeichnis angelegt wird, werden automatisch die Dateien aus dem Skeleton-Verzeichnis (meistens /etc/skel) in das neue Heimatverzeichnis kopiert. Der Befehl useradd sorgt auch dafür, daß für alle angelegten Verzeichnisse und Dateien die richtigen Besitzer, Gruppen und Rechte eingetragen werden.

Mit dem Schalter -e MM/DD/YY kann ein Verfallsdatum für das Konto angegeben werden. Nach dem Auslaufen des Kennworts kann ein Konto auch gesperrt werden. Der Schalter -f TAGE gibt dabei an, wann dies erfolgen soll. Eine Null steht dabei für sofort, während -1 dafür steht, daß das Konto nicht gesperrt wird, wenn das Kennwort abgelaufen ist.

8.3.2.0.1 Beispiele

 
Die Verwendung des Schalters -D ohne Angabe eines Benutzernamens zeigt die Standardeinstellungen des Systems.
 
root@defiant:/home > useradd -D
GROUP=100
HOME=/home
INACTIVE=0
EXPIRE=10000
SHELL=/bin/bash
SKEL=/etc/skel

useradd -m luke
legt den Benutzer luke zusammen mit seinem Heimatverzeichnis an.


8.3.3 usermod

Nachdem Sie einen Benutzer angelegt haben, können Sie mit dem Befehl usermod alle Felder in der /etc/passwd ändern.
usermod [OPTIONEN] BENUTZER

Der Benutzername kann nicht geändert werden, wenn der Benutzer gerade eingeloggt ist. Wird der Benutzername geändert, dann sollten Sie auch das Heimatverzeichnis entsprechend umbenennen. Dies ist allerdings nicht notwendig, denn solange das Heimatverzeichnis existiert, kann sich der Benutzer einloggen.

Optionen
-l BENUTZERNAME Neuer Benutzername
-u UID Neue UID
-g GID Neue GID
-c "KOMMENTAR" Neuer Kommentareintrag
-d VERZEICHNIS Neues Heimatverzeichnis
-s SHELL Neue Login-Shell
-o Erlaubt mehrfache Nutzung von UIDs
-m Neues Heimatverzeichnis wird angelegt und alte Dateien rüberkopiert
 

Wird die UID des Benutzers geändert, dann erhalten auch alle Dateien des Benutzers in seinem Heimatverzeichnis die neue UID zugeordnet. Dateien außerhalb des Heimatverzeichnisses werden nicht geändert. Auch die crontab- und at-Jobs müssen manuell geändert werden.


8.3.4 Entfernen eines Benutzers

Wenn ein Benutzer aus dem System entfernt werden soll, muß nicht nur sein Eintrag in der /etc/passwd gelöscht werden, sondern auch seine Hinterlassenschaften entweder gelöscht oder anderen Benutzern übertragen werden. Bei einer manuellen Entfernung sollten Sie folgenden Schritte ausführen:
  1. Entfernen Sie die Zeile des Benutzers aus der /etc/passwd.

  2. Löschen Sie das Heimatverzeichnis des Benutzers.

  3. Suchen Sie nach Dateien des Benutzers, die sich außerhalb seines Heimatverzeichnis befinden und löschen Sie diese.

  4. Löschen Sie die Mail-Dateien des Benutzers und jedes Mail-Alias

  5. Entfernen Sie jeden Job (crontab oder at), die der Benutzer eingerichtet hat.

Ein leichterer Weg einen Benutzer zu löschen ist der Befehl userdel.


8.3.5 userdel

Der Befehl userdel dient dazu einen Benutzer zu entfernen.
userdel [OPTIONEN] BENUTZER

Optionen
-r Löscht auch das Heimatverzeichnis des Benutzers
 

Die Ausführung des Befehls ohne Optionen löscht den Benutzer aus der Datei /etc/passwd und aus anderen Systemdateien, enfernt aber nicht sein Heimatverzeichnis. Dies hingegen bewirkt der Schalter -r. Dateien des Benutzers, die sich außerhalb seines Heimatverzeichnis befinden, werden nicht gelöscht.


8.3.6 Einrichten eines zweiten Superusers

Wie schon am Anfang des Kapitels erwähnt, ist nur der Benutzer mit der UID 0 Gott im System und darf alles. Wenn Sie nun das Paßwort von dem Benutzer vergessen oder unabsichtlich verstellen, was manchen meiner Teilnehmer schon mal passiert ist, ist das System nicht mehr administrierbar. Für diesen Fall sollte man sich einen zweiten (oder auch dritten) Superuser einrichten. Wie bekommt aber dieser nun die Rechte des Superusers. Das Einstellen in die Gruppe root bringt da nicht viel.

Die Lösung liegt auf der Hand. Dem zweiten Superuser wird auch die UID 0 zugewiesen. D. h. es gibt zwei Benutzer mit der gleichen UID. Eigentlich gibt es nur einen Benutzer, der sich aber unter zwei verschiedenen Namen einloggen kann. Eigentlich dürfen keine zwei Benutzer die gleiche UID verwenden. Wenn Sie mit useradd den zweiten Superuser einrichten wollen, dann wird dies mit einer Fehlermeldung quittiert. Erst die Verwendung des Schalters -o ermöglicht eine doppelte Vergabe von UIDs.

  
root@defiant:~> useradd -u 0 -g 0 -m -c "2. Superuser" admin
useradd: uid 0 is not unique
root@defiant:~> useradd -u 0 -g 0 -o -m -c "2. Superuser" admin
root@defiant:~> passwd admin
New password:
Re-enter new password:
Password changed

In Ihrer Firma sollten zumindest drei Superuserkonten vorhanden sein. root oder das umbenannte Konto für Sie, eins für Ihren Stellvertreter und eins, dessen Daten in einem versiegelten Umschlag im Tresor aufbewahrt werden. Denn wenn Ihrem Stellvertreter etwas zustößt, während Sie gerade in Ihrem Urlaub das australische Outback erforschen, ist das Firmennetz ohne zugänglichem Superuserkonto nur noch schwer administrierbar.

8.4 Gruppen

Gruppen werden dazu verwendet um die Benutzer und ihre Rechte zu organisieren. Gruppen werden erstellt um bestimmten Benutzern Rechte auf ausgewählte Verzeichnisse oder Geräte zu erteilen.

Wenn ein Benutzer auf eine Datei zugreifen will, dann prüft das Betriebssystem, ob er der Besitzer der Datei ist. Ist er es nicht, dann prüft es, ob er der Datei zugewiesenen Gruppe angehört. Trifft das zu, dann erhält er den hier definierten Zugang zur Datei. Gehört der Benutzer auch nicht zur Gruppe, dann werden ihm nur die Privilegien eingeräumt, die auch alle anderen bekommen.

Die Benutzer können Mitglieder vieler Gruppen sein. Es ist aber nur immer eine Gruppe mit dem Benutzer assoziiert. Diese Gruppe ist in der Datei /etc/passwd festgelegt.

Um eine Gruppe einzurichten kann entweder die Datei /etc/group (Abschnitt 8.4.1) um einen Eintrag erweitert oder der Befehl groupadd (Abschnitt 8.4.7) verwendet werden. Änderungen der Gruppeneigenschaften werden entweder in der Konfigurationsdatei selber ausgeführt oder über den Befehl groupmod (Abschnitt 8.4.9). Das Entfernen der Gruppe erfolgt entweder wieder über die Konfigurationsdatei oder über den Befehl groupdel (Abschnitt 8.4.11). Bei der Verwendung des Shadow-Paßwort-Systems (Abschnitt 8.5) sollten möglichst nur diese Tools verwendet werden.


8.4.1 /etc/group

Die Datei /etc/group ist die Konfigurationsdatei für die Gruppe und ihre Mitglieder. Sie ist ähnlich wie die Datei /etc/passwd aufgebaut.
 
root:*:0:root
bin:*:1:root,bin,daemon
daemon:*:2:
sys:*:3:
tty:*:5:
wwwadmin:*:8:
mail:*:12:
news:*:13:news
uucp:*:14:uucp,fax,root,ole
shadow:*:15:root
dialout:*:16:root,ole,tapico,grayson
at:*:25:at
firewall:*:31:
public:*:32:
named:*:44:named
users:*:100:
greydeath:*:101:root,grayson
nogroup:*:65534:root

Die durch Doppelpunkte abgetrennten Felder sind von links nach rechts Gruppenname, Gruppenkennwort, GID und die Mitgliederliste.

8.4.1.1 Feld: Gruppenname

In dem ersten Feld steht der Gruppenname. Er muß einmalig sein und darf bis zu acht Buchstaben lang sein. Für die Wahl der Zeichen gelten die gleichen Regeln wie bei den Benutzernamen.

8.4.1.2 Feld: Gruppenkennwort

Das zweite Feld ist für das Gruppenkennwort vorgesehen. Dieses Kennwort ist für den Wechsel in eine Gruppe gedacht. Normalerweise ist dieses Feld leer oder enthält nur einen Asterisk (*).

8.4.1.3 Feld: GID

Die Group Identification wird vom System benutzt und muß einmalig sein. Die Identifikation der Gruppe vom System her erfolgt nur über diese Nummer.

8.4.1.4 Feld: Mitgliederliste

Im letzten Feld werden die Mitglieder (Benutzer) der Gruppe eingetragen. Dabei werden die einzelnen Einträge durch Semikola getrennt.


8.4.2 Besondere Gruppen

Vom System werden einige Systemgruppen wie z. B. bin, mail, sys oder adm angelegt. Sie sollten auf keinem Fall einen Benutzer zu den Gruppen hinzufügen, da er sonst weitreichenden Rechte bekommen würde. Diese Gruppen sollten nur Systemkonten (Abschnitt 8.2.2) als Mitglieder enthalten. Eine Übersicht über die wichtigsten Systemgruppen liefert Tabelle 8.3.


Tabelle 8.3: Systemgruppen
Systemgruppe Einsatzgebiet
root Ist den meisten Systemdateien zugeordnet.
daemon Ist der Mail, den Druckern und anderer Systemsoftware zugeordnet.
kmem Verwaltet den direkten Zugriff zum Kernelspeicher.
sys Ist einigen Systemdateien, Swap-Dateien und Speicherabbildungen zugeordnet.
nobody Ist der Software zugeordnet, die keine speziellen Rechte braucht.
tty Ist den Gerätedateien zugeordnet, die die Terminals kontrollieren.



8.4.3 id

Um herauszufinden welche GID einem Benutzer zugeordnet ist, wird der Befehl id verwendet.
id [OPTIONEN] [BENUTZERNAME]

Optionen
-g Gibt nur die Haupt-GID aus
-G Zeigt nur die GIDs aller Gruppen
-n Gibt die Namen aus (für -u, -g und -G)
-r Gibt die reale ID aus anstatt der effektiven ID (für -u, -g und -G)
-u Gibt nur die UID aus
 

Der Befehl zeigt die UID und die mit dem Benutzer assoziierte GID an. Zusätzlich werden auch die Gruppen angezeigt, in denen der Benutzer Mitglied ist.

8.4.3.0.1 Beispiel

tapico@defiant:~ > id
uid=501(tapico) gid=100(users) Gruppen=100(users),101(greydeath)
tapico@defiant:~ > groups
users greydeath defiant


8.4.4 groups

Der Befehl groups entspricht dem Befehl id -Gn und zeigt die Namen der Gruppen an, in denen der Benutzer Mitglied ist.
groups [BENUTZER]


8.4.5 newgrp

Um die assoziierte Gruppe zu wechseln, wird der Befehl newgrp benutzt.
newgrp [NEUEGRUPPE]

Die Angabe des Befehls ohne einen Gruppennamen, läßt die GID zur in der /etc/passwd eingetragenen Gruppe zurückwechseln.

8.4.5.0.1 Beispiel

tapico@defiant:~ > id
uid=501(tapico) gid=100(users) Gruppen=100(users),101(greydeath),102(defiant)
tapico@defiant:~ > newgrp defiant
tapico@defiant:~ > id
uid=501(tapico) gid=102(defiant) Gruppen=100(users),101(greydeath),102(defiant)


8.4.6 Anlegen von Gruppen

Sie können Gruppen auf zwei Arten anlegen. Entweder Sie editiern die Datei /etc/group direkt oder Sie benutzen ein Tool wie groupadd. Im Zusammenhang mit dem Shadow-Paßwort-System ist die Benutzung des Tools vorzuziehen, da sonst auch manuelle Eintragungen in der Datei /etc/gshadow nötig sind.


8.4.7 groupadd

Der Befehl groupadd legt eine neue Gruppe an.
groupadd [OPTIONEN] GRUPPENNAME

Die Gruppe wird mit einem leeren Gruppenkennwort eingerichtet und enthält noch keine Mitglieder. Die können mit dem Befehl gpasswd hinzugefügt werden.

Optionen
-g GID GID für die neue Gruppe vorgeben
-o Mehrfache Nutzung der GID zulassen
-r Systemgruppen einrichten (nicht S.u.S.E)
 


8.4.8 gpasswd

Das Tool gpasswd wird zur Mitglieder- und Kennwortverwaltung der Gruppen benutzt.
gpasswd [OPTIONEN] GRUPPE

Optionen
-R Verhindert die Benutzung des Befehls newgrp für diese Gruppe
-a BENUTZER Fügt neues Mitglied hinzu
-d BENUTZER Entfernt eine Mitglied aus der Gruppe
-A BENUTZER Legt das Mitglied als Gruppenadministrator fest
-r Entfernt das Kennwort der Gruppe
 

8.4.8.0.1 Beispiel

 
root@defiant:/ > groupadd defiant
root@defiant:/ > gpasswd -a tapico defiant
Adding user tapico to group defiant
root@defiant:/ > id tapico
uid=501(tapico) gid=100(users) Gruppen=100(users),101(greydeath),102(defiant)
root@defiant:/ > grep defiant /etc/group
defiant:x:102:tapico


8.4.9 groupmod

Um die Eigenschaften einer Gruppe zu ändern wird der Befehl groupmod verwendet.
groupmod [OPTIONEN] GRUPPE

Optionen
-n NAME Neuer Gruppenname
-g GID Neue GID
-o Mehrfache Nutzung einer GID zulassen
 

Bei der Änderung der GID sollte die /etc/passwd überprüft werden, ob dort nicht die alte GID einem Benutzer zugeordnet wurde. Diese muß natürlich dann auf die neue GID geändert werden.


8.4.10 Löschen einer Gruppe

Um eine Gruppe zu löschen, entfernen Sie einfach die entsprechende Zeile aus der /etc/group. Davor sollten Sie noch folgenden Schritte durchführen.

  1. Prüfen Sie die Datei /etc/passwd und vergewissern Sie sich, daß kein Benutzer die GID der gelöschten Datei als Login-Gruppe verwendet. Sollte dies der Fall sein, so ändern Sie die GID auf eine existierende Gruppe. Tun Sie das nicht, dann kann der Benutzer sich nicht mehr einloggen.

  2. Prüfen Sie im Dateisystem nach, ob Verzeichnisse oder Dateien mit der gelöschten GID assoziiert sind. Dies könnte den Zugriff auf die Dateien erschweren oder sogar gänzlich unmöglich machen.

  3. Prüfen Sie, ob nicht die Gruppe eine Systemgruppe ist. Das Entfernen einer solchen Gruppe könnte zu erheblichen Schäden am System führen.


8.4.11 groupdel

Einfacher geht das Löschen einer Gruppe mit dem Befehl groupdel.
groupdel GRUPPE

Sollten Sie diesen Befehl auf eine Gruppe anwenden, die einem Benutzer als Login-Gruppe zugewiesen ist, wird der Befehl nicht ausgeführt.

Auch wie beim manuellen Löschen müssen Sie sich selber davon überzeugen, daß keine Verzeichnisse oder Dateien noch mit der gelöschten GID assoziiert sind.


8.5 Shadow-Paßwort-System

Die Speicherung des Kennwort, wenn auch in einer verschlüsselten Form, in einer von allen lesbaren Datei ist ein Sicherheitsrisiko. Der Einsatz von Entschlüsselungsprogrammen ermöglicht es relativ leicht an die Kennwörter zu gelangen. Deswegen ist der Einsatz des Shadow-Paßwort-Systems bei den heutigen Linux-Distributionen üblich. In der /etc/passwd steht für das Kennwort nur noch ein `x'. Die Kennwörter stehen in der nur für root zugänglichen /etc/shadow.


8.5.1 /etc/shadow

Die /etc/shadow enthält nicht nur den Namen und das Kennwort des Benutzers, sondern noch weitergehende Informationen zum Konto.
 
root@defiant:/home/ole > grep tapico /etc/shadow
tapico:9Fd4SU/BbEP52:11317:0:10000::::

Die Felder von links nach rechts sind:

  1. Der Benutzername

  2. Das verschlüsselte Kennwort.

  3. Die Anzahl von Tagen zwischen dem 01.01.1970 und der letzten Kennwortänderung.

  4. Die Zeit in Tagen, die zwischen zwei Kennwortänderungen liegen muß.

  5. Die Zeit in Tagen, wie lange ein Kennwort gültig ist.

  6. Die Zeit in Tagen, wie lange der Benutzer vor dem Auslaufen des Kennworts gewarnt wird.

  7. Die Zeit in Tagen bis das Konto nach dem Auslaufen des Kennworts gesperrt wird.

  8. Auslaufen des Kontos in Tagen seit dem 01.01.1970.

Im Gegensatz zur /etc/passwd darf das Kennwortfeld nicht leer sein. Um einen Benutzer daran zu hindern sein Kennwort zu ändern, brauchen Sie nur das minimale Kennwortalter größer zu machen als das maximale Kennwortalter.


8.5.2 /etc/gshadow

Genau wie das Kennwort kann auch das Gruppenkennwort durch das Shadow-Paßwort-System besser geschützt werden. Hier ist die Datei /etc/gshadow dafür verantwortlich. Ist das System eingerichtet, wird das Kennwortfeld in der /etc/group durch ein `x' ersetzt und das Kennwort in der /etc/gshadow eingetragen. Auch auf die /etc/gshadow sollte nur root Zugriffsrechte besitzen.

Sie sollten auf keinen Fall die Dateien /etc/shadow oder /etc/gshadow selbst editieren. Benutzen Sie lieber dafür die vorgesehen Tools wie useradd, usermod oder gpasswd.


8.5.3 pwconv

Um das Shadow-Paßwort-System zu nutzen, müssen Sie die Kennwörter aus der passwd-Datei in eine neue Datei umgewandelt werden. Der Befehl pwconv erzeugt aus Ihrer /etc/passwd eine /etc/shadow-Datei und ersetzt die Kennwörter durch `x'.
pwconv

Um diesen Befehl erfolgreich ausführen zu können, darf kein Paßwortfeld in der /etc/passwd leer sein.


8.5.4 pwunconv

Um das Shadow-Paßwort-System zu deaktivieren, wird der Befehl pwunconv verwendet.
pwunconv

Der Befehl bringt die Datei /etc/passwd auf den neuesten Stand und löscht die /etc/shadow.


8.5.5 grpconv

Was pwconv für die /etc/passwd ist grpconv für /etc/group.
grpconv


8.5.6 grpunconv

Wie bei den Benutzern kann auch das verbesserte System zu Kennwortspeicherung auch bei den Gruppen rückgängig gemacht werden.
grpunconv

Wenn Sie die Dateien /etc/passwd und /etc/group per Hand editieren müssen, ist es oft notwendig, daß Sie die Shadow-Dateien updaten. Dazu können Sie die Befehle pwconv und grpconv verwenden. In der Regel ist es am besten erst mit pwunconv und grpunconv das Shadow-Paßwort-System abzuschalten, die Änderungen vorzunehmen und dann mit pwconv und grpconv wieder zu aktivieren.

8.6 Startdateien des Benutzers

Das Aussehen und die Funktion der Shell ist durch die Umgebungsvariablen festgelegt. Diese Parameter sind in verschiedenen Konfigurationsdateien im Verzeichnis /etc und im Heimatverzeichnis des Benutzers festgelegt bzw. werden bei jedem Start und Einloggen definiert.


8.6.1 /etc/profile

Die Standardeinträge für die Umgebungsvariablen für alle Benutzer, die sich interaktiv einloggen, befinden sich in der /etc/profile. Hier das Beispiel für eine solche Datei.
 
# /etc/profile

PROFILEREAD=true

umask 022

# adjust some limits (see bash(1))
ulimit -Sc 0			# don't create core files
ulimit -d unlimited
fi
ulimit -m unlimited

# make path more comfortable
#
MACHINE=`test -x /bin/uname && /bin/uname --machine`
PATH=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin
test "$UID" = 0 || PATH="$PATH:."
export PATH

# set some environment variables
#
if test -n "$TEXINPUTS" ; then
  TEXINPUTS=":$TEXINPUTS:~/.TeX:/usr/doc/.TeX"
else
  TEXINPUTS=":~/.TeX:/usr/doc/.TeX"
fi
export TEXINPUTS
PRINTER='lp'
export PRINTER

LESSCHARSET=latin1
export LESSCHARSET
LESS="-M -S -I"
export LESS
LESSKEY=/etc/lesskey.bin
export LESSKEY
LESSOPEN="|lesspipe.sh %s"
export LESSOPEN

MANPATH=/usr/local/man:/usr/share/man:/usr/man:/usr/X11R6/man
export MANPATH

# set INFOPATH to tell xemacs where he can find the info files
#
INFODIR=/usr/local/info:/usr/share/info:/usr/info
INFOPATH=$INFODIR
export INFODIR INFOPATH

# do not save dupes in the bash history file
HISTCONTROL=ignoredups
export HISTCONTROL

alias dir='ls -l'
alias la='ls -la'
alias l='ls -alF'
alias ls-l='ls -l'
alias o='less'
alias ..='cd ..'
alias ...='cd ../..'
alias rd=rmdir
alias md='mkdir -p'
alias beep='echo -en "\x07"'
alias unmount='echo "Error: Try the command: umount"'

function startx { /usr/X11R6/bin/startx $* 2>&1 | tee ~/.X.err ; }

PAGER=less
export PAGER

if [ "$TERM" = "" -o "$TERM" = "unknown" ]; then
 TERM=linux
fi

# set prompt
#
set -p
if test "$UID" = 0 ; then
    PS1="\h:\w # "
else
    PS1="\u@\h:\w > "
fi
PS2='> '
ignoreeof=0
export PS1 PS2 ignoreeof

Um systemweite Änderungen in den Umgebungen der Benutzer durchzuführen, sollten Sie diese Datei editieren. S.u.S.E.-Linux erstellt die /etc/profile selber. Für die Änderungen des Administrators ist die /etc/profile.local vorgesehen, die aus der profile aufgerufen wird.

Sie können die bash auch aufrufen, ohne daß die /etc/profile abgearbeitet wird. Dies bewirkt der Schalter --noprofile.

Wenn der Benutzer sein eigenes Umfeld gestalten will, kann er das in der Datei .profile machen, die in seinem Heimatverzeichnis liegt. Wenn ein Benutzer sich einloggt, dann liest das Betriebssystem erst die /etc/profile aus. Dann sucht es nach den Dateien .bash_profile, .bash_login und .profile im Heimatverzeichnis des Benutzers.

Beim Ausloggen aus einer interaktiven Shell wird, wenn vorhanden, die Datei .bash_logout im Heimatverzeichnis ausgeführt.


8.6.2 /etc/bashrc

Wenn die bash eine interactive Shell aufruft, die nicht die Login-Shell ist, wie es z. B. bei der Eingabe des Befehls bash vorkommt, dann wird die Datei /etc/bashrc abgearbeitet anstatt die /etc/profile.

Durch die Option -norc kann die Abarbeitung der Konfigurationsdatei verhindert werden. Der Schalter -rcfile DATEINAME ermöglicht sogar die Angabe einer alternativen Konfigurationsdatei.

Kommt es zum Aufruf einer nicht-interactiven Shell, z. B. wenn ein Shell-Skript ausgeführt wird, dann schaut das Betriebssystem erst einmal in der Umgebungsvariablen BASH_ENV nach, ob dort der Name einer Konfigurationsdatei steht. Ansonsten wird dann auch die /etc/bashrc ausgeführt.

Auch diese Konfigurationsdatei gibt es als individuelle Version für den Benutzer als ~/.bashrc


8.6.3 sh

Der Befehl sh ist im Prinzip nur ein anderer Namen für den Befehl bash. Allerdings wertet er beim Aufruf die Umgebungsvariable ENV aus. Dort steht der Name der Konfigurationsdatei, die ausgeführt werden soll. Andere Konfigurationsdateien werden im Gegensatz zu bash nicht ausgeführt.

8.7 Das ``Who-is-Who'' der Benutzer


8.7.1 who

Wer ist denn zur Zeit eingeloggt? Diese Frage stellt sich dem Administrator immer dann, wenn er den Rechner herunterfahren will. Aber auch da kann Linux weiterhelfen. Der Befehl who zeigt alle eingeloggten Benutzer mit ihren Terminals an.
who [OPTIONEN]

Optionen
-H Zeigt eine Überschriftenzeile
-i, -u Zeigt an, wie lange ein Benutzer nicht mehr gearbeitet hat
-m Zeigt den aktuellen Benutzer an
-q Zeigt die eingeloggten Benutzer und ihre Anzahl an
 

Für die Ausgabe des Befehls wertet er die Dateien /var/run/utmp und /var/log/wtmp aus.

Der Befehl kann aber auch auf eines der wichtigsten Probleme im Leben eines Administrators eine Antwort geben: ``Wer bin ich?''. Einfach who am I eingeben und die Antwort ist da. Wer es liebevoller mag, dem sei die Version who mom likes an Herz gelegt. Im Endeffekt sind aber diese Erweiterungen nur andere Namen für who -m.

8.7.1.0.1 Beispiel

tapico@defiant:~ > who
tapico   tty1     Feb 10 13:26
tapico   tty3     Feb 10 15:28
tapico   tty4     Feb 10 15:26
grayson  pts/0    Feb 10 14:05
tapico@defiant:~ > who -Hi
BENU     LEIT     LOGIN-ZEIT   RUHIG VON
tapico   tty1     Feb 10 13:26 05:29
tapico   tty3     Feb 10 15:28 00:15
tapico   tty4     Feb 10 15:26 00:30
grayson  pts/0    Feb 10 14:05   .
root     pts/1    Feb 10 18:49 00:05


8.7.2 whoami

Der Befehl whoami sagt zwar auch, wer ich gerade bin. Aber er macht das wesentlich kürzer.
whoami


8.7.3 logname

Der Befehl logname erzählt dem Benutzer unter welchem Namen er sich ursprünglich mal eingeloggt hat.
logname

Frisch nach dem Einloggen zeigen die Befehle whoami und logname keine Unterschiede. Erst wenn ein Identitätswechsel vollzogen wurde, werden die Unterschiede der beiden Befehle deutlich.

 
ovidio@defiant:~ > whoami
ovidio
ovidio@defiant:~ > logname
ovidio
ovidio@defiant:~ > su tapico
Password:
tapico@defiant:/home/ovidio > whoami
tapico
tapico@defiant:/home/ovidio > logname
ovidio


8.7.4 w

Der Befehl w zeigt wie who die eingeloggten Benutzer an. Er liefert allerdings weitergehende Informationen wie Einlogzeitpunkt, CPU-Nutzung und was der Benutzer gerade ausführt.
w [OPTIIONEN]

8.7.4.0.1 Beispiel

 
tapico@defiant:~ > w
  4:23pm  up  2:00,  6 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM         LOGIN@   IDLE   JCPU   PCPU  WHAT
tapico   tty1     -            2:24pm  1:58m 44.56s  0.04s  sh /usr/X11R6/bin/startx 
root     tty2     -            4:22pm 22.00s  0.12s  0.06s  -bash
lori     tty3     -            4:23pm 14.00s  0.08s  0.05s  -bash
tapico   tty5     -            4:21pm  1:33   0.08s  0.04s  -bash
tapico   pts/0    -            4:21pm  0.00s  0.08s  0.03s  w
tapico   pts/1    -            3:37pm  2:05   2.32s  0.10s  bash


8.7.5 finger

Auch der Befehl finger zeigt die eingeloggten Benutzer an. Dabei kann er eine Übersicht über die Benutzer liefern oder ausführliche Informationen über einzelne Benutzer.
finger [OPTIONEN] [BENUTZER]

Der Befehl finger wertet für seine Ausgabe die Datei /etc/passwd sowie die Dateien .plan und .project im Heimatverzeichnis des jeweiligen Benutzers aus. Diese beiden Dateien geben Auskunft über zukünftige Pläne und Projekte.

8.7.5.0.1 Beispiele

 
lori@defiant:~ > finger
Login      Name                  Tty      Idle  Login Time   Where
lori       Lori Kalmar           3           5     Sun 16:23
root       Herr und Meister      2           5     Sun 16:22
tapico     Thomas Prizzi         1        2:04     Sun 14:24
tapico     Thomas Prizzi         pts/0       -     Sun 16:21
tapico     Thomas Prizzi         pts/1       7     Sun 15:37
tapico     Thomas Prizzi         5           6     Sun 16:21
lori@defiant:~ > finger tapico
Login: tapico                           Name: Thomas Prizzi
Directory: /home/tapico                 Shell: /bin/bash
On since Sun Feb 11 16:21 (MET) on tty5, idle 0:12
No Mail.
Plan:
Bin vom 15. bis 17. Februar nicht in der Firma.


8.7.6 last

Der Befehl last zeigt die Benutzer an, die sich zuletzt eingeloggt haben. Er durchsucht dafür die Datei /var/log/wtmp.
last [OPTIONEN] [BENUTZER]

Daneben zeigt er auch an, seit wann die Datei /var/log/wtmp Informationen enthält.

 
tapico@defiant:~ > last -10
lori     tty3                          Sun Feb 11 16:23   still logged in
root     tty2                          Sun Feb 11 16:22   still logged in
tapico   tty5                          Sun Feb 11 16:21   still logged in
lori     pts/0                         Sun Feb 11 16:21   still logged in
tapico   pts/1                         Sun Feb 11 15:37   still logged in
tapico   pts/0                         Sun Feb 11 14:47 - 15:54  (01:07)
root     tty1                          Sun Feb 11 14:24   still logged in
reboot   system boot  2.2.14           Sun Feb 11 14:23          (04:32)
lori     pts/2                         Sat Feb 10 19:09 - 01:05  (05:55)
tapico   pts/1                         Sat Feb 10 18:49 - 01:05  (06:15)

wtmp begins Mon Feb  5 20:18:53 2001


8.7.7 lastlog

Mit dem Befehl lastlog ist es möglich den Zeitpunkt des letzten Einloggens eines Benutzer zu bestimmen.
lastlog [OPTIONEN]

Optionen
-t N beschränkt die Ausgabe auf die letzten N Tage. (time)
-u NAME erlaubt die direkte Anzeige der Daten eines Benutzers. (user)
 

Für die Auswertung greift der Befehl auf die Logdatei /var/log/lastlog zurück.

 
tapico@defiant:~ > lastlog -u tapico
Username         Port     From             Latest
tapico           tty5                      Son Feb 11 16:21:59 +0100 2001
tapico@defiant:~ > lastlog -t 1
Username         Port     From             Latest
root             tty2                      Son Feb 11 16:22:16 +0100 2001
tapico           tty5                      Son Feb 11 16:21:59 +0100 2001
lori             tty3                      Son Feb 11 16:23:18 +0100 2001


Notizen:

Benutzerverwaltung % latex2html id marker 10417
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

274
Loggen Sie sich als root im Terminal 1 ein.

275
Richten Sie den Benutzer grayson mit den Default-Bedingungen ein.

276
Welche Einträge sind für den Benutzer in /etc/passwd und /etc/shadow gemacht worden?

277
Ist ein Home-Verzeichnis für grayson angelegt worden?

278
Wechseln Sie zu Terminal 2 und loggen Sie sich als grayson ein.

279
Wechseln Sie zu Terminal 1 und ändern das Paßwort von grayson auf `werner'.

280
Welches Paßwort steht in /etc/shadow für grayson? Vergleichen Sie den Eintrag mit dem Eintrag ihres Nachbarn.

281
Wechseln Sie zu Terminal 2 und loggen Sie sich als grayson ein.

282
Welches ist das aktuelle Verzeichnis?

283
Legen Sie den Benutzer lori mit folgendem Befehl an!
useradd -c "Lori Kalmar" -m -p locust lori
Was bewirkt der Befehl?

284
Wechseln Sie zu Terminal 3 und versuchen sich als lori einzuloggen. Was passiert?

285
Wechseln Sie wieder zu Terminal 1 und lassen sie sich die /etc/shadow anzeigen. Warum konnten Sie sich nicht als lori einloggen?

286
Ändern Sie das Paßwort von lori so, daß Sie sich einloggen können? Testen Sie das.

287
Editieren Sie die Datei /etc/shadow. Kopieren Sie das Paßwort von lori in das Paßwortfeld von grayson. Versuchen Sie sich nun wieder an Terminal 2 mit dem Paßwort von lori als grayson einzuloggen.

288
Editieren Sie die Datei /etc/shadow für den Benutzer grayson. Fügen Sie vor dem verschlüsselten Paßwort ein `*' (Asterisk, Stern) ein. Versuchen Sie sich wieder am Terminal 2 als grayson einzuloggen. (Eventuell vorher ausloggen.)

289
Machen Sie die Änderung in /etc/shadow rückgängig und versuchen Sie sich wieder am Terminal 2 als grayson einzuloggen.

290
Wie müssen Sie vorgehen um ein Konto fürs Einloggen zu deaktieren? Dabei darf das Paßwort nicht unbrauchbar gemacht werden, da es für einen FTP-Zugang gebraucht wird. Beschreiben Sie das Verfahren und testen Sie es am Benutzer grayson.

291
Wechseln Sie zu Terminal 1 und legen Sie die Gruppe greydeath an.

292
Lassen Sie sich alle Gruppen anzeigen in denen root Mitglied ist. Benutzen Sie dazu die Befehle groups und groups root. Erklären Sie den Unterschied.

293
Fügen Sie root zur Gruppe greydeath hinzu.

294
Lassen Sie sich alle Gruppen anzeigen in denen root Mitglied ist. Was ist das Problem? (Testen Sie die unterschiedliche Arbeitsweise von groups und groups root.)

295
Lassen Sie sich die Datei /etc/group anzeigen. Ist root eingetragen bei der Gruppe greydeath?

296
Loggen Sie sich einmal aus und wieder als root ein. Überprüfen Sie wiederum die Gruppenzugehörigkeit.

% latex2html id marker 10557
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

297
Legen Sie die Datei /trellwan (Inhalt: ein schöner Spruch) an. Ändern Sie die Gruppenzugehörigkeit auf greydeath und die Rechte mit dem Befehl chmod 640 /trellwan. Damit besitzt der Besitzer der Datei Schreib- und Leserecht und die Gruppe greydeath das Leserecht.

298
Können grayson und lori auf /trellwan zugreifen?

299
Fügen Sie als root grayson zur Gruppe greydeath hinzu. Lassen Sie sich als root und als grayson die Gruppenzugehörigkeit von grayson anzeigen.

300
Lassen Sie sich nun als grayson den Inhalt von /trellwan anzeigen.

301
Loggen Sie sich als Benutzer lori aus. Löschen Sie den Benutzer lori mit seinem Heimatverzeichnis.

302
Löschen Sie die Gruppe greydeath.

303
Versuchen Sie nun den Benutzer grayson zu löschen. Was passiert?

304
Loggen Sie als grayson aus und löschen den Benutzer. Was ist mit seinem Heimatverzeichnis passiert?

305
Welche Informationen bekommen Sie über die Datei /trellwan?

306
Löschen Sie die Datei /trellwan.

307
Sie sollen auf der Applikationsebene einen Fehler für einen Benutzer beheben. Leider kennen Sie das Passwort des Benutzers nicht, wollen es aber auch nicht permanent ändern. Beschreiben Sie ihre Vorgehensweise.


Notizen:


9. Rechte im Linux-Dateisystem

9.1 Die Rechte

Basierend auf der Art, wie auf Dateien zugegriffen werden kann, unterscheidet Linux drei Rechte. Sie werden abkürzend mit r, w oder x bezeichnet. Die einzelnen Rechte sind an die jeweilige Datei gebunden und werden in der Inode der Datei gespeichert. Dabei ist besonders wichtig in welcher Stellung Sie sich zu der Datei befinden. Sind Sie der Besitzer, gehören Sie zur Gruppe, die Zugriff auf die Datei hat, oder gehören Sie zum Rest der Welt.

Wie vom Befehl ls -l bekannt, besteht die Rechtetabelle aus 9 Angaben, z. B. rwxr--xr--. Die ersten drei angegebenen Rechte gelten dabei für den Dateibesitzer, die folgenden drei für die Besitzergruppe und die letzten für den Rest der Welt.


9.1.1 Rechte auf Dateien

Die Wirkung der Rechte ist bei Dateien und Verzeichnissen unterschiedlich. Bei Dateien arbeiten Sie wie folgt:

r (read = lesen) Der Benutzer kann den Inhalt der Datei einsehen, d. h. unter anderem, er kann sie am Bildschirm anzeigen lassen, sie drucken oder kopieren.

w (write = schreiben) Der Benutzer kann die Datei verändert unter dem bisherigen Namen speichern.

x (execute = ausführen) Die Datei kann als Programm gestartet werden. Dies setzt natürlich voraus, daß die Datei ein Programm ist.

Angenommen also, Sie haben an der Datei uschistagebuch kein r-Recht, wollen Sie aber trotzdem auf dem Bildschirm sehen. Die Eingabe von
cat uschistagebuch
führt dann zu einer Fehlermeldung der Art:
uschistagebuch: permission denied

Viele Anwender, die aus einer Einplatzumgebung zu Linux stoßen, überschätzen allerdings die Bedeutung der Rechte, die man an einer (gewöhnlichen) Datei hat. Dies mag daran liegen, das MS-DOS und viele seiner Verwandten den Zugriff auf Dateien durch Attribute zu regeln versuchen. Die vielzitierte ``schreibgeschützte Datei'' gibt es unter Linux nicht.

Der Dateischutz wird ausschließlich über die Rechte gewährleistet. Hierbei gilt eine glasklare Logik, die sich im wesentlichen aus dem Dateisystem ergibt: Wird in einer Befehlszeile ein Pfad angegeben, auf den der Befehl zugreifen soll, werden die einzelnen Bestandteile des Pfades daraufhin überprüft, ob hinreichende Rechte bestehen. Ist dies nicht der Fall, wird der Zugriff verweigert.


9.1.2 Rechte auf Verzeichnisse

Verzeichnisse sind für Linux nur eine spezielle Art von Dateien. Dies macht sich hier daran bemerkbar, daß die Rechte r und w für Verzeichnisse genauso gehandhabt werden, wie für Dateien. Daraus ergeben sich weitreichende Konsequenzen für die darin enthaltenen Dateien!

Das r-Recht an einem Verzeichnis zu besitzen heißt, man kann den Inhalt des Verzeichnisses lesen, mit anderen Worten, man kann den Befehl ls für dieses Verzeichnis einsetzen.

Was aber ist nun der Inhalt eines Verzeichnisses? Ein Verzeichnis ist nichts anderes als eine kleine Tabelle. Jede Zeile dieser Tabelle hat zwei Einträge: Den Dateinamen und die zugehörige Inode-Nummer. Wie Sie bereits wissen, ist der Dateiname für Linux nicht das entscheidende Kriterium für die Bearbeitung einer Datei. Linux orientiert sich an der Inode.

Was bedeutet in diesem Zusammenhang das r-Recht für ein Verzeichnis?

Ganz einfach: Mit dem r-Recht am Verzeichnis können darin Dateien gefunden werden (der Befehl ls liefert die Namen der im Verzeichnis enthaltenen Dateien), zusätzlich kann man die Inode-Nummern dieser Dateien abfragen (ls -i).

Da in der Inode selbst die Verwaltungsinformationen (darunter die Rechtetabelle für die Datei) gespeichert sind, ist ein Zugriff auf eine Datei also erst dann möglich, wenn man ihre Inode kennt! Das heißt also, wenn Ihnen das r-Recht an einem Verzeichnis fehlt, haben Sie keinen Zugang zu den darin enthaltenen Dateien! Insbesondere sind auch Unterverzeichnisse dem Zugriff des Anwenders entzogen!

Das für das Verständnis der Linux-Rechte wichtigste Recht ist wohl das w-Recht für Verzeichnisse. Dieses Recht beinhaltet die Möglichkeit ein Verzeichnis verändert abzuspeichern. Anders ausgedrückt: Ein Benutzer, der an einem Verzeichnis das w-Recht hat, kann dieses verändern.

Nun ist wie gesagt ein Verzeichnis eine Liste von Dateinamen (plus zugehöriger Inode-Nummer). Besitzen Sie das w-Recht an einem Verzeichnis, können Sie einen Verzeichniseintrag löschen, das Verzeichnis wird verändert gespeichert, der Dateiname und die Inode-Nummer existieren nicht mehr. Einen Verzeichniseintrag löschen heißt also den Zugang (Link) zu einer Datei löschen! Dies geschieht allerdings nicht mit einem Editor sondern mit Hilfe des Befehls rm.

Verzeichnisse sind insofern ``schreibgeschützt'', als Linux aus Konsistenzgründen schreibende Zugriffe auf Verzeichnisse nur mit dafür geeigneten Befehlen erlaubt. Das Bearbeiten mit einem Editor würde viele Benutzer überfordern, denn es muß Rücksicht auf die Struktur des Verzeichnisinhalts genommen werden. Wird diese aber zerstört, sind die Daten im Verzeichnis nicht mehr verfügbar!

Nehmen wir nun einen extremen Fall an. Eine Datei, an der Sie keinerlei Rechte besitzen, befinde sich in einem Verzeichnis, in dem Sie das w-Recht haben. Diese Datei können Sie, auch ohne Rechte an ihr selbst, löschen, denn Sie können das Verzeichnis manipulieren! Sie entfernen mit dem Befehl rm den Eintrag der Datei im Verzeichnis und somit löschen Sie den Zugang zu den Daten.

Gleiches gilt für das Umbenennen (ändert den Eintrag in einem Verzeichnis), Verschieben (löscht den Eintrag in einem Verzeichnis) oder Erstellen (erzeugt einen neuen Eintrag in einem Verzeichnis) einer Datei. Auch hierzu ist das w-Recht am Verzeichnis von entscheidender Bedeutung.

Wie Sie sehen hängen sehr viele Dateioperationen von Verzeichnisrechten ab. Vereinfachend gesagt, Verwaltungsoperationen mit Dateien, wie z. B. Löschen, Verschieben oder Umbenennen sind Eingriffe in die Verzeichnisstruktur und werden deshalb über Rechte an Verzeichnissen geregelt. Die inhaltliche Manipulation von Dateien ist dagegen nur möglich, wenn Sie Rechte direkt an der Datei haben. Es kann sein, daß Sie eine Datei löschen, umbenennen oder verschieben können, ohne ihren Inhalt auch nur sehen zu können. Zur Manipulation der Dateiinhalte benötigt Sie zumindest das r-Recht an ihr, alle anderen genannten Operationen erfordern das w-Recht am Verzeichnis.

Alles in allem kann man feststellen, daß Verzeichnisse bezüglich der Rechte r und w wie gewöhnliche Dateien behandelt werden. Da man aber mit einem Verzeichnis eine Liste von Dateinamen bearbeitet, bedeutet das Ändern von Verzeichnissen sehr häufig ein Löschen, Umbenennen oder Verschieben von Dateien.

Bis jetzt haben sich Verzeichnisse wie Dateien verhalten. Beim x-Recht gibt es aber einen signifikanten Unterschied. x steht für das Recht ein Programm ausführen zu können. In diesem Sinne kann also ein Verzeichnis nicht ausführbar sein.

Das x-Recht an einem Verzeichnis bedeutet nun, daß Sie

Rechte an einem Verzeichnis betreffen die darin enthaltenen Dateien. Wollen Sie sich den Inhalt der Datei /home/tapico/.profile mit
cat /home/tapico/.profile
ansehen, so setzt dies folgende Rechte voraus:

cat muß zunächst den Inhalt von /home/tapico lesen, um zu prüfen, ob die Datei überhaupt existiert. Dies erlaubt das r-Recht am Verzeichnis. Weiter benötigt cat die Inode-Nummer der Datei, um über diese die Inode selbst finden, Zugang dazu erhält cat über das x-Recht an /home/tapico In der Inode sind nun aber alle relevanten Informationen, die cat braucht, um den Dateiinhalt endlich lesen zu können. Hier ist die Rechtetabelle, die über das r-Recht die Erlaubnis zum Lesen gewährt und schließlich sind hier die Informationen abgelegt, mit deren Hilfe die Daten auf der Platte gefunden werden können.

In der Praxis erhält man mit dem r-Recht an einem Verzeichnis stets auch das x-Recht. Natürlich kann man das x-Recht wieder nehmen (sofern man dazu die Erlaubnis hat), dann schafft man aber eine skurile Situation: Das Leserecht am Verzeichnis erlaubt es dann zum Beispiel ls, Dateien zu finden, weitere Informationen werden aber verweigert. Man erhält in jedem Fall eine Fehlermeldung wie die folgende
/bin/ls: /home/tapico/.profile: Permission denied
ls meldet, daß man auf die Inode von .profile im Verzeichnis /home/tapico nicht zugreifen darf: Permission denied.

An den meisten Verzeichnissen im Dateisystem hat der gewöhnliche Benutzer die Rechte r und x, am Heimatverzeichnis aber alle Rechte.

Neben den Abkürzungen r, w und x gibt es auch noch eine oktale9.1 Notation der Rechte. Dies ist eine dreistellige Zahl, bei der die erste Ziffer für den Besitzer gilt, die zweite für die Gruppe, die dritte für alle anderen.

Ziffer Bedeutung
4 r-Recht
2 w-Recht
1 x-Recht
0 kein Recht

Die Rechtekombinationen ergeben sich durch Addition! So bedeutet 754 dasselbe wie rwxr-xr--!

Anstelle der Kennzeichnung x treten hin und wieder ein s oder ein t auf.

9.1.3 Spezielle Rechte: SUID und SGID

SUID (Set User ID) und SGID (Set Group ID) werden durch ein s anstelle eines x bei den Eingentümer- und bei den Gruppenrechten ausgedrückt. Das s-Recht an einer ausführbaren Datei bedeutet, daß der Benutzer, der es startet, während des Programmlaufes die UID des Dateibesitzers bzw. die GID der Besitzergruppe erhält. Das hängt davon ab, ob das s beim Besitzer oder der Besitzergruppe steht. Im Falle des Programms /bin/passwd wird man z. B. während des Programmlaufs zum Superuser!
tapico@defiant:~ > ls -l /etc/passwd /etc/shadow
-rw-r--r--   1 root     root         3810 Dec 26 19:56 /etc/passwd
-rw-r-----   1 root     shadow       2422 Dec 26 19:56 /etc/shadow
tapico@defiant:~ > ls -l /usr/bin/passwd
-rwsr-xr-x   1 root     shadow      27920 Mar 11  2000 /usr/bin/passwd

Wie Sie sehen, hat nur der Superuser Schreibrechte auf die Dateien /etc/passwd und /etc/shadow. Das s-Recht auf den Befehl /usr/bin/passwd bewirkt, daß der Befehl immer unter der UID des Superuser ausgeführt wird. So kann auch ein normaler Benutzer sein Kennwort ändern.

Wird das SGID-Recht auf ein Verzeichnis gegeben, so hat es eine andere Funktion. In diesem Fall erhalten alle Dateien, die in diesem Verzeichnis erstellt werden, automatisch die gleiche Gruppe, die auch dem Verzeichnis zugeordnet ist.

9.1.3.1 Beispiel

Nehmen wir mal an, der User tapico, dem die Hauptgruppe users zugeteilt wurde, ist auch Mitglied der Gruppe web. Für das Verzeichnis /home/wwwrun mit der zugeordneten Gruppe web wurde das SGID-Recht gesetzt. Legt tapico in einem Verzeichnis z. B. seinem Heimatverzeichnis eine Datei an, so wird der Datei seine Hauptgruppe zugeordnet. Legt er aber in dem Verzeichnis /home/wwwrun eine Datei an, so bekommt die Datei die Gruppe des Verzeichnis zugewiesen.

tapico@defiant:~> touch screen
tapico@defiant:~> ls -l screen
-rw-r--r--    1 tapico   users           0 Nov 18 09:07 screen
tapico@defiant:~> cd /home/wwwrun
tapico@defiant:/home/wwwrun> ls -ld .
drwxrwsr-x    2 wwwrun   web            35 Nov 18 08:58 .
tapico@defiant:/home/wwwrun> touch mahal.html
tapico@defiant:/home/wwwrun> ls -l
insgesamt 0
-rw-r--r--    1 tapico   web             0 Nov 18 09:03 mahal.html


9.1.4 Skript: Formatieren von Disketten

Wie schon im Abschnitt 10.4.1 erwähnt, kann nur der Benutzer root Dateisystem einrichten. Sollen nun normale Benutzer Disketten formatieren können, so kann dies durch ein Skript erfolgen, was durch das Setzen des SUID-Rechtes unter der Identität von root läuft.

Beispiel für das Skript:

root@defiant:/usr/bin> ls -l fd0format
-rwsr-xr-x    1 root     users         124 Okt 19 22:33 fd0format
root@defiant:/usr/bin> cat fd0format
#Formatiert eine Diskette Low-Level und erzeugt das Dateisystem ext2
#SUID für das Skript setzen, da /sbin nur für root zugänglich

/usr/bin/fdformat /dev/fd0
/sbin/mkfs -t ext2 /dev/fd0


9.1.5 Spezielle Rechte: Sticky Bit

Das t-Recht, auch Sticky Bit oder Save Text Bit genannt, wirkt sich auf Verzeichnisse und Dateien unterschiedlich aus.

Das Sticky Bit bei ausführbaren Dateien veranlaßt Linux, den Programmcode des gestarteten Programms nicht wieder aus dem Arbeitsspeicher zu entfernen. Dies hat den Vorteil, daß bei einem weiteren Start des Programms dieses nicht erst in den RAM geladen werden muß. Dieses Merkmal ist besonders nützlich, wenn ein Programm häufig eingesetzt wird; denn der Programmcode muß nur einmal im Speicher sein, er kann aber von mehreren Benutzern gleichzeitig genutzt werden.

Bei Verzeichnissen hingegen ermöglicht das Sticky Bit das Anlegen von gemeinsam genutzten Verzeichnissen. Normalerweise muß ein solches Verzeichnis die Rechte drwxrwxrxw besitzen. Jeder kann nun in dieses Verzeichnis schreiben, allerdings auch jede Datei darin löschen. Durch das Setzen des Sticky Bits wird es nur dem Eigentümer einer Datei erlaubt, diese zu löschen.

Das t-Recht läßt sich nur vom Superuser vergeben.

Oktal werden die neuen Rechte durch eine weitere vorangestellte Ziffer ausgedrückt. So werden z. B. die Rechte rwxrwxrwt durch 1777 ausgedrückt.

Ziffer Bedeutung
4 SUID
2 GUID
1 Sticky Bit

9.2 Verwalten und Setzen von Rechten

Das Verwalten und Setzen von Rechten übernehmen Programme wie chown, chmod, chgrp und umask.


9.2.1 chown

Mit dem Befehl chown ist es möglich der Datei einen neuen Besitzer und eine neue Gruppe zu geben.
chown [OPTIONEN] [BENUTZER][:GRUPPE] DATEILISTE

Allerdings ist es nur dem Superuser gestattet, den Eigentümer einer Datei zu ändern. Die Änderung der Gruppe ist für den Besitzer und für den Superuser erlaubt. Der Besitzer darf allerdings seiner Datei nur eine Gruppe zuordnen, in der er selber Mitglied ist.

Optionen
-c Informationen über alle geänderten Dateien werden angezeigt
-v Informationen über alle Aktionen werden ausgegeben
-f Fehlermeldungen werden nicht ausgegeben
-R Änderungen werden rekursiv den Verzeichnisbaum herunter durchgeführt
 

9.2.1.0.1 Beispiele

 
chown tapico pampelmuse
ändert den Besitzer der Datei pampelmuse auf tapico.

chown -R tapico:users /home/uschi
ändert den Besitzer auf tapico und die Gruppe auf users für das Verzeichnis /home/uschi und seinem Inhalt.

chown :xtra xtra*
ändert die Gruppe für alle Dateien, die mit ``xtra'' beginnen auf xtra.


9.2.2 chgrp

Ändert für eine Datei die zugehörige Gruppe.
chgrp [OPTIONEN] GRUPPE DATEILISTE

Die Änderung der Gruppe ist für den Besitzer und für den Superuser erlaubt. Der Besitzer darf allerdings seiner Datei nur eine Gruppe zuordnen, in der er selber Mitglied ist.

Optionen
-c Informationen über alle geänderten Dateien werden angezeigt
-v Informationen über alle Aktionen werden ausgegeben
-f Fehlermeldungen werden nicht ausgegeben
-R Änderungen werden rekursiv den Verzeichnisbaum herunter durchgeführt
 

9.2.2.0.1 Beispiel

 
chgrp users pampelmuse
ändert die Gruppe der Datei pampelmuse auf users.


9.2.3 chmod

Der Befehl chmod erlaubt das Ändern der Rechte für eine Datei.
chmod [OPTIONEN] RECHTE DATEILISTE

Die Rechte können dabei in der Form WerWieWas oder Maske angegeben werden.

Wer ist dann u (user/Besitzer), g (group/Gruppe), o (others/Sonstige), eine Kombination daraus oder a (all user/alle Benutzer).

Was ist eines der Rechte r, w, x, s, t oder eine Kombination daraus. Wobei sich x, s und t sich gegenseitig ausschließen.

Wie ist = (Rechte werden exakt so gesetzt wie in Was angegeben), + (Rechte aus Was werden zusätzlich vergeben) oder - (Rechte aus was werden entzogen)

WerWieWas kann mehrfach, dann durch Komma getrennt angegeben werden. In der ganzen Liste der WerWieWas darf kein Leerzeichen sein, da alles nach diesem Leerzeichen als Dateiname interpretiert wird!

Maske ist eine dreistellige (Superuser auch vierstellige) oktale Zahl wie in Abschnitt 9.1.2 und 9.1.5 beschrieben.

Optionen
-c Informationen über alle geänderten Dateien werden angezeigt
-v Informationen über alle Aktionen werden ausgegeben
-f Fehlermeldungen werden nicht ausgegeben
-R Änderungen werden rekursiv den Verzeichnisbaum herunter durchgeführt
 

9.2.3.0.1 Beispiele

 
chmod u+x memo*.txt
fügt für den Besitzer das x-Recht hinzu.

chmod 755 makeitso
setzt die Rechte auf rwxr-xr-x.

chmod a-rwx,u=rwx meinsein
entzieht allen alle Rechte und gibt dem Besitzer alle Rechte.


9.2.4 umask

Für die Erstellung neuer Dateien gibt es für die Rechte eine Maske, die bestimmt welche Rechte vergeben werden. Für diese Maske ist der Befehl umask (User's creation MASK) zuständig.
umask [MASKE]

Die Eingabe von umask ohne Parameter gibt die aktuell eingestellte Maske wieder. Die Maske selber ist eine dreistellige oktale Zahl. Die Bedeutung der Zahlen ist identisch mit derer für die Rechte aus Abschnitt 9.1.2. Allerdings gibt umask nicht an, welche Rechte gegeben werden, sondern welche Rechte entzogen werden.

Allerdings verhält sich die Rechtevergabe doch anders als erwartet. Manche Systeme liefern auch eine vierte Ziffer (an erster Stelle stehend) zurück. Diese beschreibt das besondere Verhalten der Rechtevergabe für neue Dateien, wie aus der Tabelle 9.1 zu ersehen ist. Dabei verhält sich die bash wie durch den Wert 0 gegeben. Die für die Benutzergruppen angegebenen Rechte werden von dieser Grundeinstellung abgezogen.


Tabelle 9.1: Besondere Berechtigungen für umask
Wert Bedeutung
0 rw für Dateien, rwx für Verzeichnisse
1 rw für Dateien und Verzeichnisse
2 r für Dateien, rx für Verzeichnisse
3 r für Dateien und Verzeichnisse
4 w für Dateien, wx für Verzeichnisse
5 w für Dateien und Verzeichnisse
6 x für Dateien und Verzeichnisse
7 Keine Rechte für Dateien und Verzeichnisse


Beim Kopieren von Dateien hat umask auch seine Finger im Spiel. Als Vorgabe gelten die Rechte, die die Quelldatei besitzt. Diese werden dann mit der Einstellung von umask gefiltert.

Der durch umask eingestellte neue Wert gilt nur für die Dauer einer Sitzung. Eine permanente Änderung erreichen Sie, wenn Sie den Befehl umask in die Konfigurationsskripte .profile oder .bashrc eintragen.

9.2.4.0.1 Beispiel

 
umask 022
setzt die Defaultmaske auf rwxr-xr-x.

9.3 Mit anderen Rechten arbeiten

Manchmal ist es notwendig, daß ein normaler Benutzer ein Kommando ausführen soll, daß ansonsten nur root zugänglich ist. Bei normalen Skripten ist dies weniger ein Problem, als bei den Systemprogrammen. Diese besitzen meistens intern noch weitere Prüfroutinen auf den Benutzer. Leider sind diese meistens so restriktiv, daß man sogar mit dem SUID- und SGID-Recht nicht weiterkommt.

Im Prinzip können Sie Ihre Identität mit dem Befehl su wechseln. Sie können auch einen Befehl direkt mit su starten.

ole@enterprise:~> su -c "mount -t auto /dev/hda1 /mnt"
Password:
ole@enterprise:~>

Allerdings setzt diese Operation die Kenntnis des Paßworts desjenigen voraus, dessen Identität man annehmen will. Wenn Sie allerdings dies kennen, dann können Sie alles unter dieser Identität machen.

Um dieses Problem zu erledigen wurde der Befehl sudo entwickelt.


9.3.1 sudo

Der Befehl sudo erlaubt die Ausführung eines Programms unter fremder Identität. Dabei wird in der Konfigurationsdatei /etc/sudoers festgelegt, welcher Benutzer auf welchem Host was tun darf.

sudo [OPTIONEN] Kommando
sudo -v

Dabei wird die reale und die effektive UID und GID so gesetzt, daß sie mit den Daten des angegebenen Benutzers übereinstimmen. Die Standardeinstellung ist, daß der Benutzer sich vor der Ausführung mit seinem eigenen Paßwort identifizieren muß. Wenn sich ein Benutzer authentifiziert hat, dann wird ein Zeitstempel aktualisiert. Der Benutzer kann nun für 5 Minuten sudo benutzen, ohne sein Paßwort neu eingeben zu müssen. Die Zeitstempel werden im Verzeichnis /var/run/sudo gespeichert.

Optionen
-V Informationen über Version und Einstellungen (nur root (version)
-l Zeigt die möglichen Befehle eines Benutzers an (list commands)
-L Zeigt die möglichen Standardoptionen der Datei /etc/sudoers an (list options)
-h Zeigt Hilfe zu sudo an (help)
-v Aktualisiert den Zeitstempel, damit es zu keinem Timeout kommt (validate)
-k Setzt den Zeitstempel auf eine ungültige Zeit, beim nächsten sudo-Befehl wird das Paßwort wieder abgefragt (kill)
-K Löscht den Zeitstempel völlig, beim nächsten sudo-Befehl wird das Paßwort wieder abgefragt (sure kill)
-b Startet das Kommando als Hintergrundprozeß (background)
-p PROMPT Erlaubt die Definition eines eigenen Paßwortprompts (%u für Benutzername und %h für Rechnername stehen als Variablen zur Verfügung) (prompt)
-u BENUTZER Das Kommando wird unter dem angegebenen Benutzer ausgeführt, Standard ist root; um eine UID anstatt einem Benutzernamen zu benutzen, wird ein Schweinegatter davorgestellt (#512) (user)
-s Benutzt die in der Variablen SHELL angegebene Shell (shell)
-H Setzt die ansonsten unveränderte Variable HOME auf den Wert des angegebenen Benutzers (home)
-P Benutzt die Gruppen des Benutzers anstatt der Gruppen des angegebenen Benutzers (preserve)
-S Das Password wird von der Standardeingabe gelesen(stdin)
 

9.3.1.1 Beispiele

Was kann der aktuelle Benutzer ausführen?

ole@enterprise:~> sudo -l
User ole may run the following commands on this host:
    (root) /usr/sbin/useradd
    (root) /usr/sbin/userdel
    (root) /usr/bin/passwd

Danach sollte der Benutzer einen Benutzer anlegen, sein Passwort ändern und ihn auch wieder löschen können.

ole@enterprise:~> /usr/sbin/useradd theodor
useradd: unable to lock password file
ole@enterprise:~> sudo /usr/sbin/useradd theodor
Password:
ole@enterprise:~> sudo passwd theodor
Changing password for theodor.
New password:
Re-enter new password:
Password changed
ole@enterprise:~> sudo /usr/sbin/userdel theodor
ole@enterprise:~>


9.3.2 /etc/sudoers

In der Datei /etc/sudoers wird das Verhalten von sudo definiert. Eine Vielzahl von Parametern steuert das Programm. Hier wird nur auf die einfachen Einträge eingegangen.

So könnten eine ganz einfach /etc/sudoers-Datei aussehen.

Listing 9.1   /etc/sudoers

   1: # sudoers file.
   2: #
   3: # This file MUST be edited with the 'visudo' command as root.
   4: #
   5: # See the sudoers man page for the details on how to write a sudoers file.
   6: #
   7: 
   8: # Host alias specification
   9: 
  10: # User alias specification
  11: 
  12: # Cmnd alias specification
  13: 
  14: # Defaults specification
  15: 
  16: # User privilege specification
  17: root    ALL=(ALL) ALL
  18: 
  19: ole     ALL=/usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd

Ein Eintrag besteht aus mehreren Teilen. Dem Benutzer bzw. Gruppennamen, von welchem Rechner aus das Kommando ausgeführt werden soll, welche Kommandos ausgeführt werden dürfen und als welcher Benutzer etwas ausgeführt werden soll.

Die Benutzer aus der Gruppe gott dürfen alles ausführen.

%gott	ALL=(ALL)	ALL

Jetzt sollen Sie dies auch tun können ohne sich noch einmal extra identifizieren zu müssen.

%gott	ALL=(ALL)	NOPASSWD: ALL

Die Mitglieder der Gruppe users sollen den Rechner herunterfahren können. Allerdings nur, wenn sie auch direkt auf dem Rechner eingeloggt sind.

%users	localhost=/sbin/shutdown -h now

Der Benutzer ole soll neue Benutzer anlegen, ihr Paßwort ändern und die Benutzer auch wieder löschen können.

ole     ALL=/usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd

Weitere Informationen entnehmen Sie bitten den Manual-Pages (man 5 sudoers).


9.3.3 visudo

Natürlich kann man die Datei /etc/sudoers auch direkt mit einem Editor bearbeiten. Die Benutzung des Kommandos visudo bring dennoch Vorteile. Es ermöglicht die Bearbeitung der Datei auf einer sicheren Art und Weise. visudo sperrt die Datei /etc/sudoers gegen gleichzeitigen Zugriff. Außerdem kann es einfache Gültigkeits- und Syntaxtests durchführen.

visudo [OPTIONEN]

Das Kommando verwendet als Editor den Standard-Editor des Systems. Also in den meisten Fällen den vi. Weitere Informationen entnehmen Sie bitten den Manual-Pages (man 8 visudo).

Rechte % latex2html id marker 11912
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

Zu Beginn der Aufgabe sollten Sie sich im Heimatverzeichnis befinden! Wechseln Sie das Verzeichnis nur, falls Sie dazu ausdrücklich aufgefordert werden. Einige Aufgaben lassen sich nicht ausführen! Versuchen Sie in diesen Fällen die Fehlermeldung zu interpretieren.

308
Loggen Sie sich als Benutzer walter auf der Konsole 2 ein und versuchen Sie die Datei /boot/vmlinuz zu löschen.
309
Kopieren Sie die Datei shadow aus dem Verzeichnis /etc in ihr Heimatverzeichnis!
310
Kopieren Sie die Datei passwd aus /etc ins aktuelle Verzeichnis!
311
Wem gehört die Datei passwd a) in /etc, b) im aktuellen Verzeichnis?
312
Lassen Sie sich aus der Datei /etc/passwd nur die Zeile anzeigen, die Ihren Benutzernamen enthält!
313
Lassen Sie sich nur die Benutzernamen der Datei /etc/passwd anzeigen!
314
Erstellen Sie mit dem vi die Datei adressen!
Thomas Prizzi Wall 40 24103 Kiel 0431/978767
Martin Lecker Eggerstedtstr. 1 24103 Kiel 0431/978234
Norbert Nase Nasa-Str. 23 55111 Nasenhausen 0321/918273
Zacharias Ackermann Feldweg 33 12345 Kleindorf 06789/1011
315
Lassen Sie sich die Adresse von Norbert Nase aus der Datei adressen ausgeben !
316
Wieviele Adressen stammen aus Kiel ?
317
Geben Sie die Adressen sortiert nach Nachnamen aus !
318
Geben Sie nur die Nachnamen aus ?
319
Wieviele Buchstaben hat der Nachname von Martin ?

320
Stellen Sie fest, welche Voreinstellung für das Erstellen (neuer) gewöhnlicher Dateien besteht, ändern Sie sie gegebenenfalls so, daß alle (user, group, other) das Recht zum Lesen erhalten und sonst keines!
321
Kopieren Sie die Datei vdir aus /usr/bin in Ihr Heimatverzeichnis!
322
Erstellen Sie mittels cat eine Datei namens indertat (Inhalt: Ein beliebiges Sprichwort)!
323
Prüfen Sie den Inhalt Ihres Heimatverzeichnis und damit die Rechte der Dateien vdir und indertat. Vergleichen Sie das Ergebnis mit den Voraussetzungen, die Sie in Aufgabe 13 geschaffen haben!
324
Verändern Sie die Voreinstellung zum Erstellen neuer gewöhnlicher Dateien so, daß Sie (Besitzer) diese Dateien Lesen und Verändern können, alle sonstigen Teilnehmer (Gruppe, Andere) nur Lesen können.
325
Kopieren Sie die Datei mv aus /bin in ihr Heimatverzeichnis.
326
Erstellen Sie mit cat die Datei hilfe (Inhalt: Eine Kurzbeschreibung von 3 Linuxbefehlen z. B.: cp kopiert Dateien, je Befehl eine Zeile!)
327
Prüfen Sie erneut den Inhalt Ihres Heimatverzeichnis und vergleichen Sie das Ergebnis mit Aufgabe 17 !
328
Verändern Sie die Rechtetabelle von mv so, daß kein Recht mehr enthalten ist: ----------

% latex2html id marker 11980
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

329
Versuchen Sie die Rechtetabelle von mv so zu ändern, daß Sie als Besitzer die Datei ausführen können, und so wenig wie möglich Rechte gesetzt sind !
330
Versuchen Sie die Datei mv und vdir im Heimatverzeichnis zu löschen! Geht das? Warum geht es bzw. warum nicht?
331
Verändern Sie die Rechte der Datei .bash_history so, daß nur Sie sie Lesen, Ändern und Ausführen können!
332
Verändern Sie die Rechte der Datei adressen so, daß die Gruppe und die Anderen Sie nicht Lesen oder Ändern können!
333
Prüfen Sie die Rechtetabelle aller Dateien Ihres Heimatverzeichnis!
334
Legen Sie ein Verzeichnis rights an!
335
Prüfen Sie die Rechtetabelle am neuen Verzeichnis!
336
Erstellen Sie mittels cat eine Textdatei namens uhr
Inhalt: date +"Es ist %H:%M:%S"
337
Prüfen Sie die Rechtetabelle der neuen Datei! Was fällt Ihnen auf?
338
Machen Sie die Datei ausführbar; es ist damit ein selbsterstelltes Shell-Script!
339
Kopieren Sie die Datei uhr und geben Sie ihr dabei den Namen bimbam!
340
Verschenken Sie bimbam an den Superuser (geben Sie ihr einen anderen Besitzer)!


Notizen:

Datei-Rechte % latex2html id marker 12028
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

Situation: Sie sind User tapico und gehören zur Gruppe group !

 

341
Annahme: Für das Verzeichnis /usr haben Sie die Rechte x und r, an allen Dateien das Recht r. Sie können:
  1. \fbox{\parbox[b][1ex]{1ex}{~}} in das Verzeichnis wechseln
  2. \fbox{\parbox[b][1ex]{1ex}{~}} Dateien in diesem Verzeichnis löschen
  3. \fbox{\parbox[b][1ex]{1ex}{~}} Dateien in diesem Verzeichnis umbenennen
  4. \fbox{\parbox[b][1ex]{1ex}{~}} Dateien aus diesem Verzeichnis verschieben
  5. \fbox{\parbox[b][1ex]{1ex}{~}} Dateien aus diesem Verzeichnis anschauen
  6. \fbox{\parbox[b][1ex]{1ex}{~}} Dateien aus diesem Verzeichnis kopieren

342
Können Sie im Wurzelverzeichnis / Dateien
  1. \fbox{\parbox[b][1ex]{1ex}{~}} löschen
  2. \fbox{\parbox[b][1ex]{1ex}{~}} neu anlegen
  3. \fbox{\parbox[b][1ex]{1ex}{~}} umbenennen

343
Im Dateisystem gebe es im Verzeichnis /usr die (ausführbare) Datei uhr. In /usr haben Sie die Rechte x und r. Der Befehl ls -l uhr gibt Ihnen folgende Ausgabe:
-rwxr--r-- root other 124 Mar 4 16:14 uhr
Sie können die Datei
  1. \fbox{\parbox[b][1ex]{1ex}{~}} löschen
  2. \fbox{\parbox[b][1ex]{1ex}{~}} umbenennen
  3. \fbox{\parbox[b][1ex]{1ex}{~}} anschauen
  4. \fbox{\parbox[b][1ex]{1ex}{~}} drucken
  5. \fbox{\parbox[b][1ex]{1ex}{~}} kopieren
  6. \fbox{\parbox[b][1ex]{1ex}{~}} starten

344
Welche Rechte haben Sie in Ihrem Heimatverzeichnis, welche Rechte andere Mitglieder?

\fbox{\parbox[t][8ex]{163mm}{\it ~}}

345
Woran kann es liegen, daß eine Datei nicht löschbar ist?

\fbox{\parbox[t][8ex]{163mm}{\it ~}}

% latex2html id marker 12110
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

346
In Ihrem Heimatverzeichnis befindet sich die Datei alpha. Sie gehört root (Gruppe other). Die Rechtetabelle ist -rwxr--r-- . Sie können die Datei
  1. \fbox{\parbox[b][1ex]{1ex}{~}} löschen
  2. \fbox{\parbox[b][1ex]{1ex}{~}} umbenennen
  3. \fbox{\parbox[b][1ex]{1ex}{~}} anschauen
  4. \fbox{\parbox[b][1ex]{1ex}{~}} ändern
  5. \fbox{\parbox[b][1ex]{1ex}{~}} kopieren
  6. \fbox{\parbox[b][1ex]{1ex}{~}} verschieben

347
Wo befindet sich der physikalische Ort des Dateisystems proc?

\fbox{\parbox[t][8ex]{163mm}{\it ~}}


Notizen:

Fallstudie: Rechte % latex2html id marker 12164
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

Die Firma AMOV GmbH möchte ihre Daten auf einem Server speichern. Dazu soll als erstes ein Verzeichnisbaum unter dem Verzeichnis /daten aufgebaut werden. Dabei müssen die Rechte auf die einzelnen Bereiche ermittelt werden.

Stellvertretend für die Mitarbeiter mit gleichen Rechten nehmen Sie zur Durchführung der Fallstudie bitte die folgenden Mitarbeiter.

Dick Tator ist der Chef. Er hat von internen Abläufen eigentlich keine Ahnung, will aber trotzdem alles wissen. Eigentlich müßte er nur im Bereich der Auftragsbearbeitung arbeiten.

Petra Pleite-Geier arbeitet als Geschäftführerin hart und braucht überall Zugriff um im Notfall alles selbst zu machen.

Manuela Magersucht ist die Dame aus der Buchhaltung und auch für die Kundendatenbank sowie für die Auftragsbearbeitung zuständig.

Maria Krohn ist ebenfalls in der Buchhaltung tätig, daneben ist sie aber auch für die Lohnabrechnung zuständig.

Carlo Calvados ist der feurige Spanier aus der Forschungsabteilung. Außer Manuela Magersucht kennt er nur seine Arbeit, die er zusammen mit seinen Kollegen im Forschungsordner speichert.

Karl Lagerhalle, der Lagerverwalter, braucht den Zugriff auf die Lagerdatenbank.

Michael Schrauber braucht als Produktionsleiter Zugriff auf den Lagerbestand, die Produktionsdaten und die Aufträge.

Peter Proxy als Systemadministrator hat als root eigentlich überall seine Nase drin, arbeitet als normaler User aber nur in dem Dokumentationsbereich, den alle Lesen dürfen.

Alle Mitarbeiter sollen Zugriff auf den Pool haben um Daten auszutauschen.

348
Erstellen Sie die Liste der Bereiche mit den zugehörigen Verzeichnissen und Gruppen.

349
Erstellen Sie eine Liste der Benutzer mit ihren UIDs, Heimatverzeichnissen und Gruppenzugehörigkeiten. (UIDs ab 700).

350
Legen Sie die Benutzer an.

351
Legen Sie die Gruppen an.

352
Erstellen Sie aus Ihren Überlegungen die Verzeichnisstruktur und vergeben Sie die passenden Rechte.

353
Testen Sie Ihre Installation.


Notizen:


10. Partitionen und Dateien

 
Nur eine gelöschte Datei ist eine gute Datei. Und nur eine formatierte Platte ist eine gute Platte.
 

 
Martin Bethke
 


10.1 Partitionen

Partitionen ermöglichen das Aufteilen in einer Festplatte in mehrere unabhängige Einheiten. In Abschnitt 1.3.3 bin ich schon auf die Partitionen eingegangen. Der folgende Abschnitt wird sich mit der Einrichtung und Pflege von Partitionen beschäftigen.


10.1.1 fdisk

Um Partitionen einzurichten wird das Programm fdisk verwendet. Sie sollten sich bei der Arbeit mit fdisk immer Notizen machen.
 
fdisk [-l] [-u] [PLATTE]
fdisk -s PARTITION

Optionen
-u Größenangabe in Sektoren anstatt in Zylindern
-l Ausgabe der Partitionstabelle
-s Ausgabe der Größe der angegebenen Partition
 

Ein Zylinder (cylinder) ist die Menge aller Spuren, die sich an der gleichen Stelle auf jeder Platte befinden. Als Spur (track) bezeichnet man die konzentrischen Kreise auf einer Platte der Festplatte.

Sie können Linux auf jeder Festplatte und jeder primären Partition installieren. Wenn Sie keine Festplatte angeben, wird standardmäßig das Gerät /dev/hda genommen.

Wenn Sie fdisk benutzen, können Sie mit der Taste <m> sich eine Übersicht über die Hilfe anzeigen lassen.

 
root@defiant:/ > fdisk /dev/hda

Kommando (m für Hilfe): m
Kommando  Bedeutung
   a   (De)Aktivieren des bootbar-Flags
   b   »bsd disklabel« bearbeiten
   c   (De)Aktivieren des DOS Kompatibilitätsflags
   d   Eine Partition löschen
   l   Die bekannten Dateisystemtypen anzeigen
   m   Dieses Menü anzeigen
   n   Eine neue Partition anlegen
   o   Eine neue leere DOS Partitionstabelle anlegen
   p   Die Partitionstabelle anzeigen
   q   Ende ohne Speichern der Änderungen
   s   Einen neuen leeren »Sun disklabel« anlegen
   t   Den Dateisystemtyp einer Partition ändern
   u   Die Einheit für die Anzeige/Eingabe ändern
   v   Die Partitionstabelle überprüfen
   w   Die Tabelle auf die Festplatte schreiben und das Programm beenden
   x   Zusätzliche Funktionen (nur für Experten)

Kommando (m für Hilfe):

Um nun eine Partition anlegen zu können, müssen Sie drei Schritte durchlaufen.

  1. Größe der Partition angeben.
  2. Den Typ der Partition festlegen.
  3. Die Veränderung in die Partitionstabelle schreiben.

Für jede Festplatte, die partitioniert werden soll, muß fdisk einmal gestartet werden.

Wenn Sie logische Laufwerke anlegen wollen, müssen Sie nach der Einrichtung der erweiterten Partition den Rechner erst wieder neu starten. Mit fdisk wird nämlich nur die Partitionstabelle geschrieben. Das Einrichten der Partitionen erfolgt erst beim Neustarten des Rechners.

Denken Sie daran, fdisk für Linux erstellt oder löscht nur Partitionen für das Linux-Betriebssystem. Andere Betriebssysteme können diese Partitionen meistens nicht sehen oder mit Ihnen arbeiten.

Nachdem Sie die Partitionen angelegt haben, muß die Swap-Partition aktiviert werden, die für die Wurzel vorgesehene Partition ausgewählt und die Partitionen formatiert werden.

10.1.1.0.1 Beispiele

 
Der folgende Befehl zeigt den Zustand der Festplatte /dev/hda an.
 
root@defiant:/ > fdisk -l

Festplatte /dev/hda: 255 Köpfe, 63 Sektoren, 592 Zylinder
Einheiten: Zylinder mit 16065 * 512 Bytes

    Gerät boot.  Anfang      Ende    Blöcke   Id  Dateisystemtyp
/dev/hda1   *         1       261   2096451    6  FAT16
/dev/hda2           262       392   1052257+   5  Erweiterte
/dev/hda3           393       576   1477980   83  Linux
/dev/hda4           577       592    128520   82  Linux Swap
/dev/hda5           262       392   1052226    6  FAT16

Wenn das Program fdisk läuft, zeigt der Befehl l zeigt die Liste der Dateisystemtypen.

 0  Leer            1c  Verst. Win95 FA 65  Novell Netware  bb  Boot Wizard hid
 1  FAT12           1e  Verst. Win95 FA 70  DiskSecure Mult c1  DRDOS/sec (FAT-
 2  XENIX root      24  NEC DOS         75  PC/IX           c4  DRDOS/sec (FAT-
 3  XENIX usr       39  Plan 9          80  Old Minix       c6  DRDOS/sec (FAT-
 4  FAT16 <32M      3c  PartitionMagic  81  Minix / old Lin c7  Syrinx
 5  Erweiterte      40  Venix 80286     82  Linux Swap      da  Non-FS data
 6  FAT16           41  PPC PReP Boot   83  Linux           db  CP/M / CTOS / .
 7  HPFS/NTFS       42  SFS             84  OS/2 verst. C:- de  Dell Utility
 8  AIX             4d  QNX4.x          85  Linux erweitert df  BootIt
 9  AIX bootfähig   4e  QNX4.x 2nd part 86  NTFS volume set e1  DOS access
 a  OS/2 Bootmanage 4f  QNX4.x 3rd part 87  NTFS volume set e3  DOS R/O
 b  Win95 FAT32     50  OnTrack DM      8e  Linux LVM       e4  SpeedStor
 c  Win95 FAT32 (LB 51  OnTrack DM6 Aux 93  Amoeba          eb  BeOS fs
 e  Win95 FAT16 (LB 52  CP/M            94  Amoeba BBT      ee  EFI GPT
 f  Win95 Erw. (LBA 53  OnTrack DM6 Aux 9f  BSD/OS          ef  EFI (FAT-12/16/
10  OPUS            54  OnTrackDM6      a0  IBM Thinkpad hi f0  Linux/PA-RISC b
11  Verst. FAT12    55  EZ-Drive        a5  FreeBSD         f1  SpeedStor
12  Compaq Diagnost 56  Golden Bow      a6  OpenBSD         f4  SpeedStor
14  Verst. FAT16 <3 5c  Priam Edisk     a7  NeXTSTEP        f2  DOS secondary
16  Verst. FAT16    61  SpeedStor       a9  NetBSD          fd  Linux raid auto
17  Verst. HPFS/NTF 63  GNU HURD / SysV b7  BSDI fs         fe  LANstep
18  AST SmartSleep  64  Novell Netware  b8  BSDI swap       ff  BBT
1b  Verst. Win95 FA

Mit fdisk kann der Dateisystemtyp einer Partition unter dem Menüpunkt t nachträglich geändert werden. Der Dateisystemtyp wird auch beim Formatieren in der Partitionstabelle eingetragen. Wichtig ist diese Funktion dann, wenn eine zerstörte Partitionstabelle rekonstruiert werden soll.


10.2 Master Boot Record

Nach einer im BIOS festgelegten Suchreihenfolge (siehe dazu auch Abschnitt 16.1.1) werden die Datenträger des Rechners nach ihren Master Boot Record durchsucht. Der Master Boot Record ist der erste Sektor auf jedem Datenträger.

10.2.1 Aufbau des MBR

Da der MBR genau einen Sektor umfaßt ist er normalerweise 512 Bytes groß. Er besteht aus drei Teilen: Dem Mini-Startprogramm, der Partitionstabelle und der Magischen Nummer.


10.2.1.1 Mini-Startprogramm

Dieses kleine Programm, das in den ersten 446 Bytes des MBR liegt, sorgt dafür das ein Betriebssystem geladen wird. Als Standardeinstellung steht dort ein Programm, das die Ausführung einfach an den Boot-Record der als aktiv gekennzeichneten Partition übergibt. Hier kann sich auch der erste Teil von Bootloadern wie GRUB (12.2) oder LILO (12.3) befinden.


10.2.1.2 Partitionstabelle

Die Partitionstabelle nimmt ingesamt 64 Bytes ab Speicherstelle 0x1BE ein. Hier können maximal 4 Partitionen eingetragen werden für die jeweils 16 Byte zur Verfügung stehen. Dabei teilen sich die 16 Byte wie in Tabelle 10.1 zu sehen auf.


Tabelle 10.1: Aufbau eines Partitionseintrags im MBR
Größe Typ Name Erklärung
1 Byte char boot_flag Kennzeichnung für Bootpartition
1 Byte char begin_head Partitionsanfang nach CHS
1 Byte char begin_sector Partitionsanfang nach CHS
1 Byte char begin_cylinder Partitionsanfang nach CHS
1 Byte char partition_type Partitionstyp
1 Byte char end_head Partitionsende nach CHS
1 Byte char end_sector Partitionsende nach CHS
1 Byte char end_cylinder Partitionsende nach CHS
4 Byte long start_sector Beginn der Partition nach LBA
4 Byte long sector_count Größe der Partition


Das Bootflag kennzeichnet, ob die Partition aktiv ist und daß ihr Boot-Record einen Boatloader enthält. Normalerweise steht dort der Wert 0x00. Ist die Partition aktiv dann steht an dieser Stelle der Wert 0x80. Natürlich kann, was zwar falsch aber trotzdem möglich ist, eine Partition als aktiv gekennzeichnet sein, obwohl sie keinen funktionsfähigen Boot-Record besitzt.

In der Partitionstabelle wird auch festgehalten, für welches Dateisystem die Partition gedacht ist bzw. ob es sich um eine erweiterte Partition handelt. So steht z. B. der Wert 0x83 für eine Linuxpartition, egal ob ext2, ext3, ReiserFS oder andere. Dagegen steht 0x82 für die Swap-Partition.

Die 6 Bytes für den Partitionsanfang und das Partitionsende nach der CHS-Zählung sind heute veraltet. Mit dieser Notations sind maximal Platten von 8 GB Größe verwaltbar, wenn man davon ausgeht, daß diese 256 Leseköpfe haben. Da Partitionen heute sowieso nur nach an Zylindergrenzen festgemacht werden, haben diese Werte keine weitere Bedeutung. Am Ende des Partitionseintrags liegen 8 Byte, die Anfang und Anzahl der Sektoren der Partition anzeigen. Mit dieser Methode sind Platten bis zu 2 TB (2048 GB) verwaltbar.

Übrigens fehlt bei Disketten die Partitionstabelle im MBR. Wer würde auch schon auf die Idee kommen eine Diskette zu partitionieren?


10.2.1.3 Magische Nummer

Die letzten zwei Bytes bilden die magische Nummer des Master Boot Records. Hier steht immer der Wert 0xAA55 drin.

10.2.2 MBR anschauen

An einem Beispiel wird es deutlicher. Schauen wir uns doch mal den Master Boot Record einer Festplatte genauer an. Dazu müssen wir Ihn von der Platte auslesen. Das direkte Auslesen und Schreiben von Datenträger erlaubt der Befehl dd (4.5.4). Die Sektor- und damit die physikalische Blockgröße auf einer Diskette und einer Festplatte ist 512 Bytes. Der MBR umfaßt nur einen Sektor und zwar den ersten auf Platte.

Wir lesen also von der ersten IDE-Platte (if=/dev/hda) und schreiben die gelesenen Daten in die Datei mbr.dmp (of=mbr.dmp). Die Blockgröße beträgt 512 Bytes (bs=512) und es wird genau ein Block (count=1) gelesen.

defiant:~ # dd if=/dev/hda of=mbr.dmp bs=512 count=1
1+0 Records ein
1+0 Records aus

In der Datei mbr.dmp befindet sich nun eine direkte Kopie des MBR. Diese Datei ist eine Binärdatei. Im Gegensatz zu einer Textdatei, die hauptsächlich nur lesbare Zeichen enthält, können alle Werte eines Byte - zwischen 0 und 255 - als Zeichen vorkommen. Da dadurch auch viele Steuerzeichen vorkommen, sollten Sie solche Dateien niemals mit cat oder einem anderen Textbetrachter anzeigen lassen.

Speziell zur Betrachtung solcher Binärdateien wurde der Befehl od(7.1.3) entwickelt. Dieser stellt die Bytes der Datei in verschiedenen Formen (dezimal, octal, hexadezimal oder auch als Zeichen und Escape-Sequenzen) dar.

Für diesen Fall lassen wir uns den Dateiinhalt in hexadezimaler Notation anzeigen und zwar Byte für Byte (-t x1). Da pro Zeile 16 Byte ausgegeben werden, sollten Sie die Ausgabe an den Pager less weiterleiten um sich die Ausgabe genau anschauen zu können.

defiant:~ # od -t x1 mbr.dmp | less

Eigentlich interessieren uns erst die Bytes ab Nummer 446 (Erstes Byte ist die Nummer 0). Die Nummerierung vor jeder Zeile ist in oktaler Schreibweise verfaßt. Das gesuchte Byte hat also in oktaler Schreibweise die Nummer o676. Wir können uns daher bei der Anzeige der Partitionierungsdaten auf die letzten 6 Zeilen beschränken. Hier hilft uns der Befehl tail weiter. Dieser zeigt die letzten Zeilen (normalerweise 10) einer Datei oder eines Datenstroms an.

defiant:~ # od -t x1 mbr.dmp | tail -6
0000660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01
0000700 01 00 0b ef 7f b7 3f 00 00 00 41 83 65 00 00 00
0000720 41 b9 83 ef ff 59 90 be 65 00 10 35 60 00 00 00
0000740 c1 5a 0f ef ff ff a0 f3 c5 00 90 be 65 00 00 00
0000760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa
0001000

Partition BF AK AS AC PT EK ES EC Start-Sektor Anzahl Sektoren
1 80 01 01 00 0b ef 7f b7 3f 00 00 00 41 83 65 00
2 00 00 41 b9 83 ef ff 59 90 be 65 00 10 35 60 00
3 00 00 c1 5a 0f ef ff ff a0 f3 c5 00 90 be 65 00
4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Auf der Festplatte sind drei Partitionen eingetragen. Die erste Partition ist aktiv, da der Wert 0x80 im ersten Byte steht. Im Byte für den Partitionstyp steht der Wert 0x0b. Es handelt sich daher um eine ``Win95 FAT32''-Partition.

Die Angaben für Start-Sektor und die Anzahl der Sektoren sind als 4-Byte-Wert angegeben. Dabei steht das niedrigwertigste Byte links. Also steht hinter der Bytefolge 3f 00 00 00 die hexadezimale Zahl 0x3f (dezimal 63) und hinter der Bytefolge 41 83 65 00 die Zahl 0x658341 (dezimal 6.652.737). Da jeder Sektor 512 Bytes groß ist hat die Partition eine Größe von ca. 3,2 GB.

Die zweite Partition ist nicht aktiv. Sie ist vom Typ Linux (0x83), beginnt bei Sektor 6.667.920 (0x65be90) und ist ca. 3 GB (0x603510 Sektoren) groß.

Bei der dritten Partition handelt es sich um eine erweiterte Partition (0x0f = ``Win95 Erweitert (LBA)''). Sie beginnt bei Sektor 12.972.960 (0xc5f3a0) und ist ca. 3,2 GB (0x65be90 Sektoren) groß.


10.3 Mounten

Um mit Dateien zu arbeiten, müssen diese erreichbar sein. Da jede Partition und jedes Speichergerät sein eigenes Dateisystem besitzt, müssen diese an einer zentralen Stelle zusammengeführt werden. Bei Windows wird dies durch die Laufwerksbuchstaben realisiert, die unter Arbeitsplatz liegen. Bei Linux muß eine Partition immer als Wurzel / ansprechbar sein. Die anderen Partitionen werden dann in das Verzeichnissystem dieser Partition eingebunden. Das Verzeichnis, das die Wurzel des jeweiligen Dateisystems im Verzeichnissystem repräsentiert, wird als Mount Point bezeichnet und der Vorgang des Einbindens als Mounten. Dabei ist das Einbinden nicht nur auf die Linux-Dateisysteme wie ext2 beschränkt. Es können auch virtuelle Dateisysteme wie /proc eingebunden werden oder sogar Dateisysteme, die sich auf anderen Rechnern im Netz befinden. Eine Liste der möglichen Dateisysteme finden Sie im Abschnitt 10.4.


10.3.1 mount

Der mount-Befehl bindet ein Dateisystem in den aktuellen Verzeichnisbaum ein.
mount [OPTIONEN] [GERÄT] MOUNTPOINT

Optionen
-a Mounte alle Dateisysteme, die in /etc/fstab aufgeführt werden.
-f Überprüfe ob das angegebene Dateisystem gemountet werden kann
-n Schreibe die Mount-Informationen nicht in die Datei /etc/mtab
-o OPTION Modifikatoren für den Mountvorgang (siehe Tabelle 10.2)
-r Mounten nur mit Leseberechtigung (read only)
-t DSTYP Typ für das zu mountende Dateisystems
-v Angabe der Mount-Informationen
-w Mounten mit Schreibberechtigung (Standard)
 


Tabelle 10.2: Modifikatoren für mount -o und /etc/fstab
Option Aktion
async Der I/O-Zugriff erfolgt asyncron
atime Der letzte Zugriff wird in der Inode festgehalten
auto Kann mit der Option -a gemountet werden
defaults Entspricht: rw, suid, dev, exec, auto, nouser und async.
dev Interpretiert spezielle Zeichen- und Block-Geräte
exec Binärdateien können ausgeführt werden
noatime Der letzte Zugriff wird nicht in der Inode festgehalten (schnellerer Zugriff)
noauto Wird nicht automatisch gemountet
nodev Interpretiert nicht spezielle Zeichen- und Block-Geräte
noexec Binärdateien werden nicht ausgeführt
nosuid Das suid- oder sgid-bit wird nicht ausgeführt
nouser Ein Benutzer kann das Dateisystem nicht mounten
remount Mountet ein Dateisystem erneut (Wird verwendet um Modifikatoren zu ändern)
ro Das Dateisystem wird nur lesbar gemountet (read only)
rw Das Dateisystem wird schreibbar gemountet (read write)
suid Erlaubt die Benutzung des suid- oder sgid-bits
sync Alle E/A-Aktionen sollten syncron erfolgen
user Ein Benutzer darf das Dateisystem mounten


Der Aufruf von mount ohne Parameter zeigt die Liste aller Dateisysteme an, die in diesem Moment gemountet sind.

 
tapico@defiant:~ > mount
/dev/hda3 on / type ext2 (rw)
proc on /proc type proc (rw)
/dev/hda1 on /c type vfat (rw)
/dev/hda5 on /d type vfat (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=0620)    
/dev/fd0 on /a type vfat (rw,noexec,nosuid,nodev,user=tapico)

Beim Einbinden eines Dateisystems mit mount wird die Datei /etc/fstab ausgewertet. Wenn das Gerät in der Datei angegeben ist, so reicht für das Mounten die Angabe des Mount Points aus.
mount /floppy
Außerdem werden die Angaben für dieses Gerät aus der Datei entnommen. Änderungen der gegebenen Modifikatoren kann über den Schalter -o erfolgen.

10.3.1.1 Beispiele

Ist der Mount Point in der /etc/fstab eingetragen, so reicht ein
mount /a
aus.

Ist dies nicht der Fall, so kann das Gerät über
mount -t vfat /dev/fd0 /a
gemountet werden. Dies ist aber nur root erlaubt.

Um einen Datenträger, der nur lesbar (Read Only) gemountet wurde, auch schreibar zu machen, muß der Datenträger nicht extra ausgebunden werden. Er kann auch mit anderen Optionen erneut gemountet werden. Dazu wird die Option remount benutzt.

enterprise:~ # mount -o remount,rw /dev/hda6


10.3.2 remount

Das erneute Mounten eines Datenträgers mit unterschiedlichen Optionen kann auch über das Kommando remount erfolgen. Allerdings ist der Befehl kein Programm sondern nur eine Funktion. (Siehe Abschnitt 15.1.3.)

enterprise:~ # type remount
remount is a function
remount ()
{
    /bin/mount -o remount,${1+"$@"}
}

Die richtige Form des erneuten Einbinden eines Datenträgers im Schreibmodus wäre dann:

enterprise:~ # remount rw /dev/hda6


10.3.3 umount

Der umount-Befehl10.1 entfernt ein Dateisystem aus dem aktuellen Verzeichnisbaum.

umount [OPTIONEN] [GERÄT] [MOUNTPOINT]

Optionen
-a Unmounte alle Dateisysteme, die in /etc/mtab aufgeführt werden.
-n Schreibe die Mount-Informationen nicht in die Datei /etc/mtab
-t DSTYP Typ für das zu unmountende Dateisystems
 

Durch den Befehl umount wird auch der Befehl sync aufgerufen, damit vor dem Entfernen des Dateisystems dieses mit dem Cache abgeglichen wird.


10.3.4 sync

Durch den Befehl sync werden die sich im Cache befindlichen Daten auf die Platte geschrieben und damit die Festplatte auf den aktuellen Stand gebracht.
sync
Der sync-Befehl ruft einfach die Kernel-Prozedur sync auf. Diese wird auch vom Befehl umount zum sauberen Aushängen von Dateisystemen benutzt


10.3.5 /etc/fstab

Die Datei /etc/fstab wird von den Befehlen fsck, mount und umount benutzt.
 
tapico@defiant:~ > cat /etc/fstab
/dev/hda3   /                 ext2            defaults         1   1
/dev/hda1   /c                vfat            defaults         0   0
/dev/hda5   /d                vfat            defaults         0   0
/dev/hda4   swap              swap            defaults         0   0
/dev/hdc    /cdrom            iso9660         ro,noauto,user   0   0
/dev/fd0    /floppy           auto            noauto,user      0   0
/dev/fd0    /a                vfat            noauto,user      0   0
proc        /proc             proc            defaults         0   0

Die Spalten bedeuten von links nach rechts:

  1. Der physikalische Ort des Dateisystems oder Blockgeräts.
  2. Der Mount Point. An dieser Stelle wird die Wurzel des Dateisystems in die Verzeichnisstruktur eingebaut.
  3. Der Typ des Dateisystems
  4. Die Optionen, die beim Mounten des Systems benutzt werden.
  5. Die Nummer legt fest, ob das Dateisystem bei einem Backup durch dump gesichert werden soll.
  6. Die Nummer legt fest, in welcher Reihenfolge fsck die Dateisysteme prüft.


10.3.6 /etc/mtab

In dieser Datei werden alle gerade gemounteten Dateisysteme aufgelistet. Der Befehl mount ohne Parameter benutzt diese Datei für seine Ausgabe. Die Befehle mount und umount verändern die Datei.
 
tapico@defiant:~ > cat /etc/mtab
/dev/hda3 / ext2 rw 0 0
proc /proc proc rw 0 0
/dev/hda1 /c vfat rw 0 0
/dev/hda5 /d vfat rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=0620 0 0
/dev/fd0 /a vfat rw,noexec,nosuid,nodev,user=tapico 0 0
Die Ähnlichkeit mit der Ausgabe des Befehls mount ist nicht zu übersehen.


10.4 Das Dateisystem

Das Linux-Dateisystem organisiert die Dateien und Verzeichnisse in einer Hierachie. Es ermöglicht das Speichern von und den zufälligen Zugriff auf Dateien, egal ob sich diese Daten auf der Festplatte, der Floppy, einer CD-ROM oder im Netzwerk befinden. Linux unterstützt mehrere Dateisysteme. Einige von ihnen werden in der folgenden Liste aufgezählt.

Seit Kernel 2.1.21 sind diese Dateisysteme nicht mehr dabei.

Nachdem Sie also die Partitionen angelegt haben, muß die Partition noch formatiert werden. Dafür wird der Befehl mkfs verwendet.


10.4.1 mkfs

Das Kommando mkfs formatiert eine Partition mit dem angegebenen Dateisystem.
mkfs [-t DSTYP] GERÄT [BLOCKS]

Optionen
-t DSTYP Legt den Dateisystemtyp fest
-v Zeigt alle Kommandos an
-c Überprüft nach defekten Blöcken vorm Anlegen des Dateisystems
-l DATEINAME Benutzt die angegeben Datei als Liste für bekannte defekte Blöcke
 

Normalerweise ruft mkfs andere Kommandos auf, die für das jeweilige mit -t angegebene Dateisystem programmiert wurden. Z. B. sind dies mkfs.ext2, mkfs.msdos und mkfs.minix. Sie können diese Programme auch direkt nutzen. Natürlich darf für diesen Vorgang der Datenträger nicht gemountet sein. Normalerweise kann mkfs nur von dem Benutzer root ausgeführt werden. Um normalen Benutzern trotzdem das Formatieren von Disketten zu erlauben, muß root ein passendes Skript (9.1.4) zur Verfügung stellen.

10.4.1.0.1 Beispiele

 
Der folgenden Befehl erstellt das ext2-Dateisystem auf der dritten Partition der ersten Festplatte.
mkfs -t ext2 /dev/hda3 1477980
Heute wird die Anzahl der Blöcke automatisch ermittelt. Es kann aber mkfs-Versionen geben, die die Angabe der Blöcke verlangt. Mit dem Befehl fdisk kann diese ermittelt werden. Dabei muß man sehr vorsichtig sein, da falsche Angaben zu einem Datenverlust auf einer anderen Partition führen kann.


10.4.2 fdformat

Für die Formatierung der Disketten kann auch das Kommando mkfs verwendet werden. Allerdings sollte man vorher mit fdformat eine Low-Level-Formatierung durchführen, die die Sektoren und Spuren auf der Diskette anlegt.
fdformat [OPTIONEN] GERÄT

Dabei wird für das Diskettenlaufwerk A: die Bezeichnung /dev/fd0 und für Laufwerk B: die Bezeichnung /dev/fd1 verwendet. Es können über andere Gerätenamen verschiedene Formatierungen durchgeführt werden. Hier eine Liste von Gerätenamen10.2 für das Laufwerk A:.

root@defiant:/dev > ls fd0*
fd0        fd0h1440  fd0h360  fd0h880   fd0u1600  fd0u1760  fd0u3200  fd0u720
fd0CompaQ  fd0h1476  fd0h410  fd0u1040  fd0u1680  fd0u1840  fd0u3520  fd0u800
fd0d360    fd0h1494  fd0h420  fd0u1120  fd0u1722  fd0u1920  fd0u360   fd0u820
fd0h1200   fd0h1600  fd0h720  fd0u1440  fd0u1743  fd0u2880  fd0u3840  fd0u830

Ein normaler Benutzer kann allerdings nur das Standardformat (/dev/fd0 und /dev/fd1) für die Formatierung verwenden. Außerdem darf das Laufwerk nicht gemountet sein, was bei einer vorformatierten Diskette durchaus möglich ist.


10.5 Swap: Der Auslagerungsspeicher

Arbeitsspeicher ist auch heute noch teuer. Deshalb benötigen gerade bei Multitasking-Systemen die Programme oft mehr Speicher als vorhanden ist. Um dem gegenzuwirken arbeiten die Betriebssysteme nicht mit dem physikalischen Arbeitsspeicher sondern mit dem virtuellen Arbeitsspeicher. Der virtuelle Arbeitsspeicher setzt sich aus dem RAM und einem Speicherbereich auf der Festplatte zusammen. Bei Linux wird der Arbeitsspeicher auf der Festplatte durch die Swap-Partition realisiert. Benötigt das Betriebssystem mehr Speicher als vorhanden ist, so lagert es Teile des Arbeitsspeichers auf die Swap-Partition aus.

Dieses Verfahren zur Vergrößerung des Arbeitsspeichers wird als Paging bezeichnet. Wenn der physikalischer Speicher knapp wird, werden Memory-Pages (Speicherseiten) auf die Festplatte ausgelagert. Diese Speicherseiten haben meistens eine Größe von 4096 Bytes also 4 KByte. Bei Bedarf werden dann die ausgelagerten Seiten wieder in den physikalischen Arbeitsspeicher geladen.

Natürlich kann ein solcher Swap-Speicher keinen physikalischen Speicher ersetzen. Der Zugriff auf die Festplatte ist im Schnitt um den Faktor 10.000 langsamer als der Zugriff auf RAM-Speicher. Seine gute Funktion zeigt der Auslagerungspeicher, wenn mehrere Programme gleichzeitig laufen. Im Zeitalter der GUI-Programme belegen laufende Programme oft nur Speicher, während Sie die wenig belasten. Dies liegt daran, daß sie die meiste Zeit nur darauf warten, daß der Benutzer endlich etwas tut. Beim Wechsel zwischen den Programmen merkt man deutlich die Verzögerung beim Schreibung- und Rückschreiben der Speicherseiten. Die eigentlich Programmausführung des aktiven Programms ist aber genau so schnell wie auch sonst, da sich seine Speicherseiten im physikalischen Arbeitsspeicher befinden.

Für die Größe der Swap-Partition gibt es eine Faustregel. Der Auslagerungsspeicher sollte immer doppelt so groß sein, wie der eingebaute Arbeitsspeicher. Dabei sollte eine Größe von 16 MB für die Swap-Partitione nicht unterschritten werden um eine gute Funktion des Betriebssystems zu gewährleisten.

Früher war die maximale Größe der Swap-Partition auf 128 MB beschränkt. Allerdings können bis zu 16 Swap-Partitionen eingerichtet werden, so daß eine Gesamtkapazität von 2 GB für die Auslagerungsdatei zur Verfügung stand. Seit Kernel 2.1.117 darf die Swap-Partition bis zu 2 GB groß werden. Die Anzahl der Swap-Partitionen kann bei der Kompilierung des Kernels festgelegt werden. Der entsprechende Eintrag beim Kernel 2.4.1810.3 in der Kernel-Headerdatei /usr/src/linux-2.4.18/include/linux/swap.h lautet:

#define MAX_SWAPFILES 32

Danach sollten bis zu 32 Swap Partitionen bei diesem Kernel möglich sein. Maximal unterstützt der Kernel 64 Swap-Partitionen.

Um die Zugriffsgeschwindigkeit zu erhöhen ist es sinnvoll die Swap-Partitionen auf mehrere Platten zu verteilen. Da die einzelnen Partitionen dann zu einem logischen Bereich zusammengezogen werden, bilden sie praktisch ein RAID Level 0. Bei IDE-Platten ist es dann noch von Vorteil, wenn beide Platten an einem seperaten Controller hängen.

Wenn Sie meinen, sie haben genügend Speicher, dann können Sie auch mit der Formel ``eins zu eins'' arbeiten. Dies ist vor allem bei Serversystemen sinnvoll, die mit extra viel Speicher bestückt worden sind um Festplattenzugriffe zu verringern.

Wenn Sie allerdings meinen zu wenig Platz zu haben, dann können Sie die Swap-Partition auch auf die dreifache Arbeitsspeichergröße setzen.10.4

Sollten Sie auf der Festplatte nicht genügend Speicher oder Partitionsplatz besitzen, so können Sie auch eine Swap-Datei (swap file) einrichten. Dies ist allerdings nicht so effektiv wie eine seperate Partition. Sollte ihr Rechner 4 MB oder weniger Arbeitsspeicher besitzen, so benötigen Sie auf jeden Fall eine Swap-Partition.

10.5.0.0.1 Beispiele

 
Ihr System besitzt 8 MB Arbeitsspeicher. Sie legen daher eine Swap-Partition von 16 MB an. Der zur Verfügung stehende virtuelle Speicher liegt dann bei 24 MB.

Sie besitzen einen Rechner mit 128 MB RAM. Nach der Formel sollten Sie einen Swap-Bereich von 256 MB einrichten. Da eine Swap-Partition aber nur 128 MB groß sein darf, legen Sie zwei Partitionen mit jeweils 128 MB an.

Ein Datei-Server wurde für den schnellen Dateizugriff mit 512 MB RAM bestückt. Da Zugriffe auf die Festplatte möglichst vermieden werden sollen, reichen vier Swap-Partitionen á 128 MB.

Ihr alter 486er Rechner soll als Router eingesetzt werden. Da er nur 4 MB RAM besitzt, müssen Sie eine Swap-Partition einrichten um Linux installieren zu können. Dabei sollte die Swap-Partition mindestens eine Größe von 16 MB aufweisen.


10.5.1 Swap-Space einrichten

Der Auslagerungsspeicher kann als Swap-Partition oder als Swap-Datei angelegt werden.

10.5.1.1 Anlegen der Swap-Partition

Um eine zusätzliche Swap-Partition einzurichten müssen Sie auf der Festplatte eine neue Partition anlegen. Dies können Sie mit dem Befehl fdisk (10.1.1) erledigen.

Nehmen wir einfach mal an, daß Sie eine zweite Festplatte (/dev/hdb) in Ihren Rechner eingebaut haben. Um die Swap-Performance zu verbessern, sollten Sie auf dieser zweiten Platte auch eine Swap-Partition einrichten. Starten Sie also das Programm fdisk.

enterprise:~ # fdisk /dev/hdb

The number of cylinders for this disk is set to 5005.
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)

Befehl (m für Hilfe):

Mit dem Befehl n legen wir nun eine neue Partition an. Und zwar eine primäre Partition mit der Größe von 256 MB.

Befehl (m für Hilfe): n
Befehl  Aktion
   l      Logische Partition (5 oder größer)
   p      Primäre Partition (1-4)
p
Erster Zylinder (1-5005) [Standardwert: 1]:
Benutze den Standardwert 1
Letzter Zylinder oder +Größe, +GrößeK oder +GrößeM (1-5005) [Standardwert: 5005]: +256M

Mit dem Befehl p überprüfen wir den Eintrag in der Partitionstabelle und notieren uns die Werte.

Befehl (m für Hilfe): p

Festplatte /dev/hdb: 255 Köpfe, 63 Sektoren, 5005 Zylinder
Einheiten: Zylinder mit 16064 * 512 Bytes

    Gerät boot.  Anfang      Ende    Blöcke   Id  Dateisystemtyp
/dev/hdb1             1        34    273088   82  Linux Swap

Nun brauchen wir nur noch mit w die Partitionstabelle zu schreiben und das Programm zu verlassen. Danach muß der Rechner neu gestartet werden, damit die neue Partitionstabelle übernommen wird.

10.5.1.2 Anlegen einer Swap-Datei

Um eine Swap-Datei zu erstellen, müssen Sie eine Datei öffnen und soviele Bytes hineinschreiben, wie die Swap-Datei groß sein soll. Hierfür können Sie gut den Befehl dd (4.5.4) verwenden.

enterprise:~ # dd if=/dev/zero of=/swap bs=1024 count=16384
16384+0 Records ein
16384+0 Records aus
enterprise:~ # ls -l /swap
-rw-r--r--    1 root     root     16777216 Nov 17 12:15 /swap

Das Gerät /dev/zero ist praktisch das Gegenteil von /dev/null. Während /dev/null praktisch ein WOM (Write Only Memory) ist, der alle Informationen schluckt und Sie nicht wieder hergibt, ist /dev/null ein unendlich großer Datenträger, auf dem aber nur Nullen stehen. Der obige Befehl liest praktisch 16384 Blöcke mit 1024 Bytes von diesem Gerät und schreibt Sie in die Datei /swap.

Nach dem Anlegen der Datei sollten Sie sicherheitshalber mit dem Befehl sync (10.3.4) die Dateisysteme wieder synchronisieren.

Auf keinen Fall darf die Swap-Datei eine Lücke besitzen. Die Blöcke der Datei müssen sich hintereinander auf der Platte befinden.

10.5.1.3 Swap-Bereich formatieren

Nach dem Anlegen der Partition bzw. der Datei muß diese für den Einsatz als Auslagerungsspeicher vorbereitet werden, d. h. formatiert werden. Hier kommt der Befehl mkswap zum Einsatz.

mkswap -c GERÄTENAME

GERÄTENAME steht für den Namen der Partition bzw. der Datei. Der Schalter -c ist optional und bewirkt, daß der Swap-Bereich bei der Formatierung auf fehlerhafte Blöcke untersucht wird.

Nehmen wir als Beispiel mal die oben angelegte Swap-Partition. Mit dem folgenden Befehl wird sie als Swap-Bereich formatiert.

enterprise:~ # mkswap -c /dev/hdb1 
Swapbereich Version 1 mit der Größe 279642112 Bytes wird angelegt

Die Swap-Datei wird analog angelegt. Nur daß anstatt des Gerätenamens, der Dateiname angegeben wird.

enterprise:~ # mkswap -c /swap 
Swapbereich Version 1 mit der Größe 16773120 Bytes wird angelegt
enterprise:~ # sync

Nach dem Einrichten einer Swap-Datei sollten Sie immer das Dateisystem mit sync synchronisieren um sicherzugehen, daß die Informationen auch physikalisch auf die Platte übertragen worden sind. Dies ist bei der Swap-Partition natürlich nicht nötig.

10.5.1.4 Swap-Bereich aktivieren und deaktivieren

Damit der neue Swap-Bereich auch vom System benutzt wird, muß er aktiviert werden. Dafür ist der Befehl swapon verantwortlich. Analog dazu können Sie natürlich mit dem Befehl swapoff einen Swap-Bereich auch deaktivieren. Anhand des Befehls free (12.8.5) kann die Veränderung des Swap-Bereichs beobachtet werden.

Als Beispiel schauen wir uns doch mal die Einbindung unserer Swap-Datei ins System an.

enterprise:~ # free
             total       used       free     shared    buffers     cached
Mem:        513448     466992      46456          0      63500     258672
-/+ buffers/cache:     144820     368628
Swap:      1028120          0    1028120
enterprise:~ # swapon /swap
enterprise:~ # free
             total       used       free     shared    buffers     cached
Mem:        513448     467032      46416          0      63528     258672
-/+ buffers/cache:     144832     368616
Swap:      1044496          0    1044496
enterprise:~ # swapoff /swap
enterprise:~ # free
             total       used       free     shared    buffers     cached
Mem:        513448     467036      46412          0      63536     258672
-/+ buffers/cache:     144828     368620
Swap:      1028120          0    1028120

Auf jeden Fall sollten Sie eine Swap-Datei nur dann löschen, wenn Sie sie vorher mit swapoff deaktiviert haben.

Wie üblich ist dieser Befehl nicht von Dauer. Nach einem Reboot ist der Swap-Bereich wieder inaktiv. Die Swap-Bereich müssen also bei jedem Start initalisiert werden. Dies geschieht mit dem Befehl swapon -a in einer der Startdateien.

swapon -a liest die Informationen aus der Datei /etc/fstab aus. Wenn dort Informationen des Typs

/dev/hda6       swap    swap    sw 0 0

bzw.

/dev/hdb1       swap    swap    pr=42 0 0

dann werden die jeweiligen Swap-Bereiche beim Booten initialisiert. Sie sollten für jeden neu angelegten Swap-Bereich einen Eintrag zur /etc/fstab hinzufügen.


10.5.2 mkswap

Das Kommando mkswap bereitet eine Partition oder eine Datei für den Einsatz als Swap-Bereich vor.

mkswap [OPTIONEN] GERÄT [GRÖSSE]

Der Parameter GERÄT kann die Bezeichnung für eine Partition (z. B. /dev/hdb3) oder der Name einer Datei sein.

Die Angabe der Größe des Swap-Bereichs ist heute nicht mehr nötig und existiert nur noch aus Kompatibilitätsgründen. Der Befehl nutzt den zur Verfügung stehenden Platz in der Partition bzw. in der angelegten Datei voll. Eine falsche Angabe der Größe kann zu Schäden auf der Festplatte führen. Also lieber Finger weg von diesem Parameter.

Optionen
-c Testen auf fehlerhafte Blocks vorm Formatieren (check)
-f Erlaubt auch die Ausführung mit unsinnigen Parametern (force)
-p GRÖSSE Größe der verwendeten Speicherseiten (page)
-v0 Erstellt einen Swap-Bereich im alten Format
-v1 Erstellt einen Swap-Bereich im neuen Format (Standard)
 


10.5.3 swapon

Das Kommando swapon initalisiert Geräte und Dateien für den Einsatz als Swap-Bereich. Normalerweise wird der Befehl in einer der Startdateien ausgeführt um den Swap-Bereich immer zur Verfügung zu stellen.

swapon [OPTIONEN]
swapon [OPTIONEN] SWAPBEREICH

Optionen
-h Hilfe (help)
-V Versionsnummer (version)
-s Übersicht über die Swap-Bereiche (summary)
-a Alle Swap-Bereiche aus /etc/fstab mit der Option sw bzw. pri werden initialisiert. (all)
-p PRIORITÄT Gibt die Priorität des Swap-Bereichs an (Wert zwischen 0 und 32767), steht seit Kernel 1.3.2 zur Verfügung (priority)
 

Die Option sich eine Übersicht über die Swap-Bereiche anzeigen zu lassen steht nur dann zur Verfügung, wenn /proc/swaps existiert. Dies ist erst seit Kernel 2.1.25 der Fall.

enterprise:/home/ole # ls -l /proc/swaps
-r--r--r--    1 root     root            0 Nov 17 13:38 /proc/swaps
enterprise:/home/ole # cat /proc/swaps
Filename                        Type            Size    Used    Priority
/dev/hdb6                       partition       1028120 0       42
/swap                           file            16376   0       -2
enterprise:/home/ole # swapon -s
Filename                        Type            Size    Used    Priority
/dev/hdb6                       partition       1028120 0       42
/swap                           file            16376   0       -2

Um den Befehl jedesmal beim Starten ausführen zu können, wird er in einer der Startdateien des Systems eingetragen. Diese befinden sich meistens im Verzeichnis /etc/rc.d. Unter SuSE (8.0) ist /etc/rc.d ein Link auf /etc/init.d. Dort findet sich der Eintrag in den Dateien boot.localfs und boot.swap.

enterprise:/etc # ls -ld init.d rc.d
drwxr-xr-x   11 root     root         4096 Jul 15 21:54 init.d
lrwxrwxrwx    1 root     root            6 Mai  2  2002 rc.d -> init.d
enterprise:/etc # cd init.d/
enterprise:/etc/init.d # grep -l swapon * 2> /dev/null
boot.localfs
boot.swap
enterprise:/etc/init.d # grep -n swapon * 2> /dev/null
boot.localfs:29:        swapon -a &> /dev/null
boot.swap:26:   # .. this should work know with the new swapon behavio(u)r
boot.swap:29:   swapon -a &> /dev/null


10.5.4 swapoff

Wenn ein Swap-Bereich eingebunden werden kann, dann muß er auch aus dem System entfernt werden können. Dafür ist der Befehl swapoff verantwortlich.

swapoff [OPTIONEN]
swapoff SWAPBEREICH

Optionen
-h Hilfe (help)
-V Versionsnummer (version)
-s Übersicht über die Swap-Bereiche (summary)
-a Alle Swap-Bereiche aus /etc/fstab mit der Option sw bzw. pri werden aus dem System entfernt. (all)
 

10.6 Verwaltung

Linux unterscheidet folgende Dateiarten

Gewöhnliche Dateien sind die Dateien, die mit einer mehr oder weniger gewöhnlichen Anwendung erzeugt werden - der Text, der mit einer Textverarbeitung erstellt wird, die Daten einer Datenbank-, die Tabelle eines Kalkulationsprogramms oder auch die Zeilen eines Shell-Skripts, Tabellen, die von LINUX zu diversen Verwaltungszwecken benutzt werden, wie etwa die Paßwortdatei /etc/passwd und nicht zuletzt Programmdateien. Gewöhnliche Dateien sind solche Dateien, deren Inhalt für den einzelnen Anwender direkt oder indirekt von Interesse ist (am Text den man geschrieben hat ist man direkt interessiert, der Inhalt der Datei /etc/passwd ist für jeden Anwender deshalb von Belang, weil über ihn der Zugang zum System ermöglicht sowie ein Teil der persönlichen Arbeitsumgebung bereitgestellt wird).

Verzeichnisse ermöglichen eine strukturierte Dateiverwaltung. Die Organisation der Daten wird durch sie wesentlich vereinfacht. Verzeichnisse sind Tabellen mit den Namen von Dateien sowie einem Vermerk, über den das System den Zugriff auf die Daten in den Dateien steuert. Die Anzahl der gewöhnlichen Dateien ist schon in einem Einplatzsystem wie DOS oder Windows 95 so groß, daß ein Ordnungsprinzip erforderlich wird. So war ein wesentlicher Grund für die erste Überarbeitung des Betriebsystems DOS (Einführung der Version 2.0) die Verwendung von Festplatten für den IBM PC-XT. Diese ermöglichten die Speicherung großer Datenmengen. Die Hierarchie der DOS-Dateiverwaltung kannte bis dahin in Anlehnung an das System CP/M Laufwerke (Disketten!) und Dateien. Da nun die Anzahl der Dateien sehr hoch sein konnte, führten die Microsoft-Programmierer in DOS die Verzeichnisse als Verwaltungsinstrument hinzu. Somit kennt DOS drei Hierarchieebenen in der Dateiverwaltung: Laufwerk (aus CP/M geerbt), Verzeichnisse und - natürlich - gewöhnliche Dateien. Daß dabei die Verzeichnisse und ihr Handling im wesentlichen aus Unix übernommen wurden, erleichtert es den heutigen LINUX-Programmierern, den Zugriff auf DOS-Daten zu realisieren; denn Dateien und Verzeichnisse sind in DOS und LINUX prinzipiell sehr ähnlich.

Gerätedateien vereinfachen den Zugriff des Anwenders auf die Hardware. Sie sind im Prinzip Verweise auf die entsprechenden Treiber im LINUX-Kernel. Sollen etwa Daten auf den Bildschirm ausgegeben werden, so kann der Prozeß, der diese Aufgabe zu erledigen hat, die Daten einfach in die zugehörige Gerätedatei, dies könnte z. B. tty01 sein, kopieren. Dadurch wird der zuständige Gerätetreiber im Kernel zur Ausgabe auf dem Bildschirm veranlaßt.

Named Pipes oder FIFOs sind eines der vielen Mittel, die LINUX für die Kommunikation zwischen Prozessen (kurz IPC für Inter Process Communication) bereitstellt. Vereinfacht gesagt ist ein Prozeß ein laufendes Programm. Solch ein Prozeß kann Daten in eine FIFO schreiben, die dann von einem anderen Prozeß gelesen werden können. Eine Variante dieser Möglichkeit des Datenaustausches zwischen Programmen kennen wir schon. Eine Kommandozeile wie
ls -l | more
dürfte Ihnen in ihrer Bedeutung klar sein.10.5 Der Befehl ls leitet seine Daten statt auf den Bildschirm an den Pager more weiter, der sie so bearbeitet, daß er sie bildschirmseitenweise anzeigt. Bei Linux handelt es sich um temporäre Objekte, die von Prozessen benutzt werden können, die durch ein und dieselbe Befehlszeile gestartet wurden. Named Pipes dagegen werden als besondere Dateien angelegt und können von Prozessen benutzt werden, die unabhängig voneinander sind.

Sockets dienen, wenn man so will, ebenfalls der IPC. Dabei geht es aber nicht um Kommunikation zwischen Prozessen in einem LINUX/Unix-Rechner. Sockets ermöglichen Kommunikation über ein Netz hinweg. Dabei kann durchaus einer der beteiligten Kommunikationsteilnehmer ein Nicht-Unix -Programm sein, d.h. Sockets ermöglichen durchaus Kommunikation zwischen einem Prozeß, den ein Benutzer auf einem LINUX-Rechner startet einerseits, und einer DOS-Anwendung auf einem weit entfernten PC andererseits. Da nun DOS als Einplatzsystem keine Prozesse kennt, lassen sich Sockets nicht eindeutig der IPC zuordnen. Im wesentlichen steckt hinter den Sockets jedoch ein dem Pipelining verwandtes Prinzip des verbindungsorientierten Datenaustausches. Sie ermöglichen also die Weitergabe von Daten, in diesem Falle sogar via Netzwerk.

Links sind keine eigentlichen Dateien, sondern lediglich Verweise auf solche. Im Zusammenhang mit den Inodes werden wir Links genauer untersuchen können.


10.6.1 mkfifo

Erzeugen kann man FIFOs mit dem Befehl mkfifo (make fifo).
mkfifo [OPTIONEN] NAME

Die Befehlszeile
mkfifo testpipe
würde z. B. eine Named Pipe mit Namen testpipe erzeugen. Genutzt werden könnte sie dann wie folgt:
ls /dev > testpipe & less < testpipe
ls /dev zeigt die Namen aller Gerätedateien (genauer: aller Dateien des Verzeichnisses /dev). In diesem Fall werden die Daten in die Named Pipe umgeleitet statt auf dem Bildschirm ausgegeben. Der Befehl less liest die Daten aus testpipe und gibt sie bildschirmseitenweise aus. Das & zwischen den Befehlen sorgt dafür, daß beide Teilbefehle nacheinander als Prozesse gestartet werden, allerdings ohne daß auf ihr Ende gewartet werden müßte. Insgesamt werden in diesem Beispiel also die Namen aller Gerätedateien bildschirmseitenweise angezeigt. Dieses Beispiel stellte die Named Pipes nur prinzipiell vor. Als Benutzer wird man in der gegebenen Situation eine gewöhnliche Pipe vorziehen:
ls /dev | less

10.6.2 Dateinamen

Das Dateisystem von MS-DOS beschränkt die Größe des Namens einer Datei auf acht Zeichen plus einem mit einem Punkt abgetrennten Dateikürzel mit drei Zeichen. Im Gegensatz dazu erlaubte schon das erste UNIX-Dateisystem 14 Zeichen. Das LINUX-Dateisystem ext2 (extended filesystem, version 2) erlaubt bis zu 255 Zeichen. Dabei ist der Punkt nur eines von vielen Zeichen und kann beliebig oft angewendet werden.

Im Gegensatz zu MS-DOS unterscheidet LINUX bei Dateinamen zwischen Groß- und Kleinschreibung. TAPICO, Tapico und tapico sind drei verschiedene Dateinamen. Aus praktischen Gründen werden die Dateinamen meistens klein geschrieben. Bei Pfadangaben werden die einzelnen Verzeichnisse durch einen Schrägstrich / (slash) getrennt. Daher ist dieses Zeichen für Dateinamen verboten. Auch das Minuszeichen kann am Anfang einer Datei Probleme bereiten. So stellt sich bei
ls -fault
die Frage, ob nun die Datei -fault oder die Schalter f, a, u, l und t gemeint sind.

Probleme bereiten auch die nichtdruckbaren (ASCII-)Zeichen 0 bis 32 sowie
< > | * ? [ ] { } ( ) $ ` ´ " ! ; \ # ^
Diese Zeichen sind nicht verboten, können aber große Probleme bereiten und sollten deshalb auch vermieden werden.

10.6.3 Die Datei

Was gehört eigentlich zu einer Datei?
  1. Der Inhalt der Datei
  2. Ein Link
    1. Der Name der Datei
    2. Die eindeutige Inode-Nummer
  3. Der Inhalt der Inode (die eigentliche Verwaltungsinformation)
    1. Dateityp (gewöhnliche Datei, Verzeichnis, Gerätedatei, ...)
    2. Rechtetabelle
    3. Anzahl der Links (bzw. Dateinamen)
    4. Dateibesitzer (uid)
    5. Besitzergruppe (gid)
    6. Größe in Byte (bei Geräteadressen statt dessen Major und Minor Device number)
    7. Datum der letzten Änderung
    8. Datum des letzten Zugriffs
    9. Datum der letzten Änderung dieser Verwaltungsinformationen
    10. Attribute (nur für das Dateisystem ext2)
    11. physikalischer Ort der Speicherung (Blöcke in denen die Datei abgelegt ist)

Die Inode speichert alle Verwaltungsinformationen über die Datei. Da die Benutzer in aller Regel besser mit Namen als mit Nummern arbeiten können, bietet Linux folgende einfache Schnittstelle zwischen Benutzer und Dateisystem an. Der Benutzer verwendet in den Befehlen einen Dateinamen. Die benutzte Shell, z. B. die bash, ermittelt über den Verzeichniseintrag, den Link, die zugehörige Inode. Jeder Dateiname ist mit genau einer Inode verbunden. Dagegen kann eine Inode durch mehrere Dateiname referenziert werden. Deshalb kann eine Datei nicht nur einen Dateinamen besitzen. Wird die Inode beschädigt, dann kann auf die Datei nicht mehr zugegriffen werden. Um die Inodes der Dateien zu bestimmen, wird der Schalter -i des Befehls ls eingesetzt.

10.6.3.0.1 Beispiel

tapico@defiant:/ > ls -aFi
      2 ./            1 d/            11 lost+found/    10241 tmp/
      2 ../       38914 dev/      124929 mnt/             165 trellwan
 305412 a/         2049 etc/      126977 opt/           83969 usr/
  59393 bin/     118785 floppy/        1 proc/          12289 var/
  51201 boot/    120833 home/      69633 root/
      1 c/       117000 kurs/      55297 sbin/
 112641 cdrom/    65537 lib/      211184 seminare/

Besitzen zwei Dateinamen die gleiche Inode, so handelt es sich hierbei um ein und dieselbe Datei. Auffällig ist die Inode 1 bei /proc, /c und /d. Bei proc handelt es sich um ein virtuelles Dateisystem zur Prozessüberwachung. /c und /d sind eingebundene FAT16-Dateisysteme von Windows. Ihnen wird daher auch keine ``richtige'' Inode zugewiesen.


10.6.4 stat

Der Befehl stat zeigt die Informationen der Inode an.
stat DATEINAME
Allerdings ist er nicht auf jedem System zu finden. Bei SuSE muß das Paket explizit installiert werden.


10.7 Links

Im Prinzip ist ein Link nur ein weiterer Name für die Datei. Bei den Links wird zwischen dem harten Link und dem symbolischen (weichen) Link unterschieden.

Ein Link kann dazu benutzt werden einem anderen Benutzer Zugriff auf eine Datei zu gewähren. Als Erstes bekommt der andere Benutzer Rechte auf die Datei und evt. auf das Verzeichnis. Danach kann er einen Link auf die Datei in seinem Heimatverzeichnis anlegen. Dadurch erhält er einen vereinfachten Zugriff auf den Inhalt der Datei.

Durch die Benutzung von Links brauchen oft keine Kopien von Dateien erstellt werden. Dies spart Speicherplatz und erleichtert die Aufgabe des Systemadministrators alle Dateien auf dem neuesten Stand zu halten.

Daneben können große Verzeichnisbäume übersichtlicher gestaltet werden. Z. B. landen alle Auswertungsergebnisse in einem Verzeichnis data. In den Verzeichnissen helios und ulysses können dann Links auf die entsprechenden Datendateien im Verzeichnis data gemacht werden.


10.7.1 Harte Links

Immer wenn Sie eine Datei erzeugen wird auch ein Link zu dieser Datei erzeugt. Er ermöglicht den Zugriff auf die Datei, weil er direkt auf die Inode der Datei zeigt. Der Befehl rm (4.5.7) löscht übrigens nicht direkt die Datei, sondern den Link, der auf die Inode der Datei zeigt.

Einen Link können Sie nur auf eine existierende Datei anlegen. Er ist ein weiterer Name für die gleiche Datei. Dies wird deutlich wenn Sie sich die Links mit ls -i anzeigen lassen. Beide Links zeigen auf die gleiche Inode. Sie unterscheiden sich nur im Namen und/oder ihrem Ort im Verzeichnisbaum.

10.7.1.0.1 Beispiel

 
Auf die existierende Datei clarkkent wird ein harter Link namens superman angelegt. Wird nun superman durch z. B. den Editor joe editiert, so finden sich die Änderungen auch in clarkkent wieder.
tapico@defiant:~/links > ls -il
insgesamt 2
 111099 -rw-r--r--   2 tapico   users          46 Jan 14 13:41 clarkkent
 111099 -rw-r--r--   2 tapico   users          46 Jan 14 13:41 superman
In der dritten Spalte sehen Sie die Anzahl der harten Links, die auf die Datei zeigen. Lösche Sie nun einen der beiden Links, so bleibt die Datei trotzdem bestehen. Erst wenn alle Links auf die Datei gelöscht sind, die Zahl also auf Null steht, wird die Datei auf wirklich gelöscht.

Es gibt aber auch Einschränkungen für harte Links. So müssen sich alle Links auf dem gleichen Dateisystem befinden. Außerdem ist es einem normalen Benutzer nicht möglich einen Hardlink auf ein Verzeichnis einzurichten. Dies ist nur root vorbehalten.


10.7.2 Symbolische Links

Im Gegensatz zu dem harten Link zeigt der symbolische Link nur indirekt auf eine Datei, da er auf einen Namen (harten Link) der Datei zeigt. Deshalb ist er auch ein neuer Eintrag mit eigener Inode im Verzeichnisbaum.

Symbolische Links werden dann eingerichtet, wenn die Grenzen der harten Links umgangen werden sollen. Symbolische Links können eingerichtet werden für

Wie im Beispiel unten zu sehen, ändert sich das Aussehen des symbolischen Links bei Verwendung des Befehls ls -l. Der Linkname wird durch einen Pfeil und den Namen der Zieldatei ergänzt.

 
tapico@defiant:~/links > ls -il
insgesamt 2
 111099 -rw-r--r--   2 tapico   users          46 Jan 14 13:41 clarkkent
 111101 lrwxrwxrwx   1 tapico   users           5 Jan 14 13:51 kurs -> /kurs
 111100 lrwxrwxrwx   1 tapico   users           9 Jan 14 13:50 superheld -> clarkkent
 111099 -rw-r--r--   2 tapico   users          46 Jan 14 13:41 superman

Die Funktion der Befehle cd und pwd kann sich bei gelinkten Verzeichnissen je nach Shell unterscheiden. In der bash zeigt, wenn wir dem Link kurs gefolgt sind, z. B. der Befehl pwd das Arbeitsverzeichnis über die verlinkte Struktur an. Der Befehl cd .. führt auch in das Verzeichnis mit dem Link zurück.

tapico@defiant:~/links > cd kurs
tapico@defiant:~/links/kurs > pwd
/home/tapico/links/kurs
tapico@defiant:~/links/kurs > cd ..
tapico@defiant:~/links > pwd
/home/tapico/links

In anderen Shells führt der Link an den Ort der normalen Struktur. Das aktuelle Verzeichnis ist dann nicht mehr durch den symbolischen Link gegeben, sondern durch den harten Link des Verzeichnisses.


10.7.3 ln

Das Kommando ln legt einen harten oder einen symbolischen Link an.
ln [OPTIONEN] DATEINAME NEUERLINK

Ist NEUERLINK ein Verzeichnis und die Optionen -d und -F sind nicht gegeben, so wird in dem Verzeichnis ein Link mit dem Namen DATEINAME angelegt.

Optionen
-d Legt einen Link auf ein Verzeichnis an (Nur Superuser)
-F Legt einen Link auf ein Verzeichnis an (Nur Superuser)
-s Legt einen symbolischen Link an
 

Einen harten oder symbolischen Link können Sie durch den Befehl rm entfernen.


10.7.4 Der Befehl cp und die Links

Die Links, egal ob Hard- oder Softlink, sind Wegweiser zu den Inodes. Was passiert, wenn diese kopiert werden sollen? Werfen wir doch mal einen Blick auf den Befehl cp und seine Arbeit mit den Links.

Anstatt Kopien von Dateien zu erstellen, kann der Befehl cp auch Hard- und Softlinks anlegen. Für eine Hardlink geben Sie die Option -l an und für einen Softlink die Option -s.

ole@enterprise:~/test> ls -ilG
insgesamt 8
 147475 -rw-r--r--    1 ole            78 2004-06-28 21:46 blubb
 147479 -rw-r--r--    1 ole           144 2004-06-28 21:46 fasel
ole@enterprise:~/test> cp -l blubb blubber
ole@enterprise:~/test> cp -s fasel fusel
ole@enterprise:~/test> ls -ilG
insgesamt 12
 147475 -rw-r--r--    2 ole            78 2004-06-28 21:46 blubb
 147475 -rw-r--r--    2 ole            78 2004-06-28 21:46 blubber
 147479 -rw-r--r--    1 ole           144 2004-06-28 21:46 fasel
 147481 lrwxrwxrwx    1 ole             5 2004-06-28 21:47 fusel -> fasel

Eine besondere Situation tritt auf, wenn Softlinks kopiert werden sollen. Denn hier stellt sich die Frage was denn nun eigentlich kopiert werden soll: Der Link oder die Datei, auf die der Link zeigt.

Wenn der Befehl cp ohne Option verwendet wird, wird die verlinkte Datei kopiert.

ole@enterprise:~/test> cp fusel fiesel
ole@enterprise:~/test> ls -ilG
 147479 -rw-r--r--    1 ole           144 2004-06-28 21:46 fasel
 147483 -rw-r--r--    1 ole           144 2004-06-28 21:53 fiesel
 147481 lrwxrwxrwx    1 ole             5 2004-06-28 21:47 fusel -> fasel

Bei der Verwendung des Schalters -d werden die Softlinks auch als Links kopiert.

ole@enterprise:~/test> ls -ilG
 147485 lrwxrwxrwx    1 ole             5 2004-06-28 21:58 dusel -> fasel
 147479 -rw-r--r--    1 ole           144 2004-06-28 21:46 fasel
 147483 -rw-r--r--    1 ole           144 2004-06-28 21:53 fiesel
 147481 lrwxrwxrwx    1 ole             5 2004-06-28 21:47 fusel -> fasel

Und wie sieht es bei Kopien über ganze Verzeichnisebenen hinweg aus? Der Link wird genau so kopiert, wie er auch dasteht. Relative Links bleiben relative Links und die Pfade werden nicht angepaßt. Sein Ziel muß also entsprechend mitkopiert werden. Bei absoluten Links, wo der Pfad an der Wurzel beginnt, gibt es das Problem nicht. Sie zeigen weiterhin auf die ursprüngliche Datei. Beide Verfahren haben Ihre Vor- und Nachteile.

ole@enterprise:~/test> cp -d /usr/bin/bunzip2 entpack
ole@enterprise:~/test> cp -d /usr/X11/bin/X klickibunti
ole@enterprise:~/test> ls -ilG
 147475 lrwxrwxrwx    1 ole             5 2004-06-28 22:01 entpack -> bzip2
 147479 lrwxrwxrwx    1 ole            16 2004-06-28 22:03 klickibunti -> /var/X11R6/bin/X

10.8 Festplattennutzung

Die Einrichtung, Formatierung und Einbindung einer Partition in das System hat einen gravierenden Nachteil. Die Benutzer können nun dort Dateien speichern und füllen dort in kürzester Zeit den vorhandenen Speicherplatz10.6. Damit Linux vernünftig arbeiten kann, sollte zwischen 5 und 30 Prozent der Plattenkapazität frei sein. Es ist also zwingend notwendig den zur Verfügung stehenden Plattenspeicher zu kontrollieren.


10.8.1 du

Das Kommando du (Disk Usage) zeigt den Platz an, den eine Datei oder ein Verzeichnis mit seinen Dateien und Unterverzeichnissen einnimmt.
du [OPTIONEN] [DATEINAME]

Wird du ohne Dateinamen aufgerufen, dann zeigt es die Daten des aktuellen Arbeitsverzeichnisses an.

Optionen
-a Zeige die Nutzung für einzelne Dateien
-b Anzeige des Speicherplatzes in Bytes
-c Zeigt die Summe an
-h Zeigt durch einen Buchstaben die verwendete Einheit an
-k Anzeige des Speicherplatzes in Kilobytes (normal)
-m Anzeige des Speicherplatzes in Megabytes
-l Zählt auch die Links
-s Gibt nur die totale Summe aus
 

Ohne den Schalter -a zeigt du nur die Verzeichnisse.

10.8.1.0.1 Beispiel

 
tapico@defiant:~ > du -c test
1259    test/mytest/textfilter
1263    test/mytest
14761   test/log
17453   test
17453   insgesamt


10.8.2 df

Der Befehl df zeigt die Nutzung der Partition an.
df [OPTIONEN] [DATEINAME]

Wird eine Datei oder ein Verzeichis mit angegeben, so zeigt df die Daten der Partition an, auf der diese Datei bzw. dieses Verzeichnis liegt. Ansonsten zeigt das Kommando eine Übersicht aller Partitionen an.

Optionen
-a Liefert Informationen über alle Dateisysteme (normal) (all)
-h Zeigt durch einen Buchstaben die verwendete Einheit an(human readable)
-i Zeigt die Nutzung der Inodes an(inode)
-k Anzeige des Speicherplatzes in Kilobytes (normal)(kilobyte)
-m Anzeige des Speicherplatzes in Megabytes(megabyte)
-t DSTYP Zeigt nur Dateisysteme vom Typ DSTYP(typ)
-T Zeigt den Dateisystemtyp für jeden Eintrag(typ)
-x DSTYP Zeigt keine Dateisysteme vom Typ DSTYP(exclude typ)
--sync Startet erst das sync-Kommando
 

Als Information liefert df:

10.8.2.1 Beispiele

Eine Übersicht über die Plattennutzung alle gemounteten Datenträger liefert der Befehl df.
tapico@defiant:~ > df
Filesystem           1K-Blöcke   Benutzt Verfügbar Ben% Eingehängt auf
/dev/hda5              5162796   2893372   2007168  60% /
/dev/hda6              3099260    325012   2616816  12% /home
/dev/hda1              4096540   2525980   1570560  62% /windows/C
tmpfs                   127828         0    127828   0% /dev/shm
/dev/sda1               127620     55962     71658  44% /media/sda1

Die Übersicht über die genutzten Inodes mit dem Befehl df -i funktioniert natürlich nur, wenn das Dateisystem auch auf Inodes-Basis arbeitet. Bei anderen Dateisystemen träumt sich Linux etwas im Kaffeesatz. (Hier /dev/hda1 und /dev/sda1.)

tapico@defiant:~ > df -i
Filesystem            INodes  IBenut.  IFrei IBen% Eingehängt auf
/dev/hda5             656000  162745  493255   25% /
/dev/hda6             393600    3110  390490    1% /home
/dev/hda1              26619   26603      16  100% /windows/C
tmpfs                  31957       1   31956    1% /dev/shm
/dev/sda1                  0       0       0    -  /media/sda1

10.8.3 Aufräumen des Systems

Was also tun, wenn das Dateisystem zu voll geworden ist?


Notizen:
Notizen:

Dateisystem 1 % latex2html id marker 14376
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

354
Welche Dateinamen sind richtig, problematisch oder falsch?
Dateiname R P F Dateiname R P F
abc.txt       Dies ist Falsch      
Textdatei       ls -l      
-usr       *.*      
c:\dos       this is right      
pillepallename       \">$<[!]      
..       ...      
../..       calprobedatei1      
katalog_1.2.1       abc/def/ghi      
-123       123      
mc.man.gz       194.195.155.60      
..home       ../home      

355
Loggen Sie sich als walter auf der Konsole 1 ein.

356
Kopieren Sie den Inhalt der Verzeichnisse yast2, mc und cron aus dem Verzeichnis /usr/share/doc/packages in Ihr Heimatverzeichnis.

357
Lassen Sie sich den Speicherbedarf der Dateien in Ihrem Heimatverzeichnis anzeigen.

358
Lassen Sie sich eine Übersicht über den freien Platz auf den Partitionen anzeigen.

359
Welchen Platz benötigen die Verzeichnisse /etc, /home und /usr/bin?

360
Loggen Sie sich als root auf der Konsole 2 ein.

361
Wiederholen Sie Aufgabe 6 unter root. Gibt es Unterschiede im Ergebnis?

362
Legen Sie im freien Speicherbereich bzw. im freien Bereich der erweiterten Partition eine Partition von 500 MB an und formatieren Sie sie mit dem Dateisystem ext2.

363
Mounten Sie die Platte als root auf dem neuangelegten Mountpunkt /usr/extra.

364
Wie groß ist die Platte laut fdisk?

365
Lassen Sie sich eine Übersicht über den freien Platz auf den Partitionen anzeigen und vergleichen Sie ihr Ergebnis mit dem Ergebnis der vorherigen Aufgabe.

366
Lassen Sie sich die Liste der Swap-Bereiche anzeigen.

367
Legen Sie im freien Speicherbereich bzw. im freien Bereich der erweiterten Partition eine Swap-Partition von 256 MB an und aktivieren Sie sie.

368
Lassen Sie sich die Liste der Swap-Bereiche erneut anzeigen.

369
Wieviel Swap-Speicher steht ihnen laut free zur Verfügung?

370
Starten Sie den Rechner neu.

371
Führen Sie die Aufgaben 12 und 13 erneut durch und vergleichen Sie die jetzigen Ergebnisse mit den vorherigen.

% latex2html id marker 14454
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

372
Richten Sie das System so ein, daß die neue Partition und der neue Swap-Bereich permanent zugänglich sind.

373
Testen Sie die neuen Einstellungen, indem Sie den Rechner neu starten und die Aufgaben 12 und 13 erneut durchführen.

374
Deaktivieren Sie wieder den neuen Swap-Bereich permanent.

375
Ein Mitarbeiter steht vor dem Problem, daß er ein-, zweimal die Woche mehr Auslagerungsspeicher für komplizierte Rechenoperationen benötigt. Platz genug ist auf seiner Festplatte. Leider ist aber kein freier Bereich für eine Partition mehr vorhanden. Lösen Sie das Problem so, daß der User eigenständig den neuen Swap-Bereich aktivieren und deaktivieren kann.


Notizen:

Arbeiten mit Disketten % latex2html id marker 14488
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

Sie benötigen für die Aufgaben zwei 3,5''-Disketten.

376
Loggen Sie sich als root an Terminal 1 ein.

377
Legen Sie den User ardan mit Home-Verzeichnis an. Geben Sie ihm das Paßwort victor.

378
Lassen Sie sich alle möglichen Gerätetypen für das Diskettenlaufwerk A: anzeigen.

379
Legen Sie die erste Diskette ins Diskettenlaufwerk ein. Führen Sie eine Low-Level-Formatierung (1440 KB) durch.

380
Erstellen Sie ein ext2-Dateisystem auf der Diskette.

381
Lassen Sie sich den Inhalt der Datei /etc/mtab anzeigen. Welche Laufwerke sind gemountet?

382
Mounten Sie die Diskette auf das Verzeichnis /floppy.

383
Lassen Sie sich erneut den Inhalt der Datei /etc/mtab anzeigen. Welche Laufwerke sind gemountet?

384
Loggen Sie sich an Terminal 2 als ardan ein. Versuchen Sie das Diskettenlaufwerk auf /floppy zu mounten.

385
Wechseln Sie zu Terminal 1. Unmounten Sie das Diskettenlaufwerk. Wechseln Sie zu Terminal 2 und versuchen Sie erneut das Diskettenlaufwerk zu mounten.

386
Lassen Sie sich die Auslastung aller Laufwerke anzeigen.

387
Unmounten Sie das Diskettenlaufwerk.

388
Wechseln Sie zu Terminal 1 und legen Sie das Verzeichnis /a an. Ändern Sie die Rechte des Verzeichnisses so, daß alle volle Rechte besitzen.

389
Mounten Sie die Diskette auf das Verzeichnis /a.

390
Unmounten Sie die Diskette wieder. Wechseln Sie zu Terminal 2. Versuchen Sie nun als ardan das Diskettenlaufwerk zu mounten.

391
Wechseln Sie wieder zu Terminal 1 und fügen Sie in die Datei /etc/fstab einen Eintrag hinzu, so daß jeder das Diskettenlaufwerk auf /a mounten kann. Testen Sie dies.

392
Formatieren Sie nun die Diskette 2 mit 1440 KB und erstellen ein DOS-Dateisystem darauf.

393
Ändern Sie die Datei /etc/fstab so, daß auf das Verzeichnis /a nur vfat-Dateisysteme gemountet werden können.

394
Mounten Sie Diskette 2 auf /a.

395
Versuchen Sie nun Diskette 1 auf /a zu mounten. Was passiert?

396
Führen Sie erneut eine Low-Level-Formatierung für Diskette 1 ein durch. Wählen Sie dabei das größtmögliche Format. Erstellen Sie ein ext2-Dateisystem auf der Diskette. Wieviel Platz steht Ihnen nun auf der Diskette zur Verfügung.

397
Erstellen Sie ein minix-Dateisystem auf der Diskette. Wieviel Platz steht Ihnen nun zur Verfügung?

398
Erstellen Sie ein DOS-Dateisystem auf der Diskette. Wieviel Platz steht Ihnen nun auf der Diskette zur Verfügung.

399
Kann ein Windows-Rechner dieses Diskette lesen? Welche Kapazität kann ein Windows-Rechner maximal verkraften?


Notizen:


11. Dateisysteme und Disk Quotas

11.1 Aufbau des ext2-Dateisystems

Das ext2-Dateisystem besteht aus dem Bootblock und den Blockgruppen. Die Blockgruppen sind wiederum aufgeteilt in einen Superblock, einer Liste der Blockgruppenbeschreibungen, Bitmaps für Blöcke und Inodes, Inode-Tabelle und den Datenblöcken.

Abbildung 11.1: Aufbau des ext2-Dateisystems
\includegraphics{lk-aufbau-ext2.eps}


11.1.1 Bootblock

Der Bootblock liegt im ersten Block (Block 0) des Dateisystems. Er enthält ein Programm zum Starten und Initialisieren des gesamten Systems. Meistens enthält nur das erste Dateisystem einen Bootblock. Beim ext2-Dateisystem ist der Bootblock 1024 Zeichen groß.


11.1.2 Blockgruppe

Jede Blockgruppe, wie in der Abbildung 11.1 zu sehen, besteht aus sechs Komponenten:

Die Standardgröße für eine Blockgruppe liegt bei 8192 Blöcken und 2048 Inodes, von denen acht reserviert sind.


11.1.3 Superblock

Die Informationen über das gesamte Dateisystem liegen im Superblock. Wenn dieser Superblock beschädigt wird, kann das Dateisytem nicht mehr ins Dateisystem eingebunden (gemountet) werden. Deswegen werden in regelmäßigen Intervallen Backup-Kopien dieses Blocks im Dateisystem angelegt. Im Normalfall erfolgt das alle 8192 Blöcke. Das heißt die Daten befinden sich in Block 8193, 16385, 24577 etc. Die Angabe
Blocks per group: 8192
des Befehls dumpe2fs gibt den für das Gerät aktuellen Wert an.

Die Strukturdefinition des Superblocks finden Sie in der Datei /usr/include/linux/ext2_fs.h im Abschnitt Structure of the super block. Die wichtigsten Informationen sind:


11.1.4 dumpe2fs

Der Befehl dumpe2fs gibt den Superblock und die Blockgruppeninformationen eines Gerätes aus.
dumpe2fs [OPTIONEN] GERÄT

Der Befehl steht nur dem Superuser zur Verfügung. Als Beispiel hier die Ausgabe eine Befehls ohne die Übersicht über die Blockgruppen.

root@defiant:/ > dumpe2fs /dev/hda3
Filesystem volume name:   <none>
Last mounted on:          /mnt
Filesystem UUID:          0c7c1f82-510a-11d3-8c57-e447ecb45d66
Filesystem magic number:  0xEF53
Filesystem revision #:    0 (original)
Filesystem features:     (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              370688
Block count:              1477980
Reserved block count:     73899
Free blocks:              203986
Free inodes:              269515
First block:              1
Block size:               1024
Fragment size:            1024
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2048
Inode blocks per group:   256
Last mount time:          Mon Jan  8 20:45:40 2001
Last write time:          Mon Jan  8 21:19:10 2001
Mount count:              20
Maximum mount count:      20
Last checked:             Mon Dec 18 20:44:00 2000
Check interval:           15552000 (6 months)
Next check after:         Sat Jun 16 21:44:00 2001
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)


11.1.5 tune2fs

Die Einstellungen für das Dateisystem können über den Befehl tune2fs eingestellt werden.
tune2fs [OPTIONEN] GERÄT

Optionen
-c MOUNTCOUNTS Stellt die Anzahl der maximalen Mountcounts zwischen zwei Dateisystemchecks ein
-C MOUNTCOUNTS Trägt die Anzahl der erfolgten Mountcounts ein
 

Die weiteren Schalter entnehmen Sie bitte den Man-Pages.

11.1.5.0.1 Beispiele

 
root@defiant:/> tune2fs -c 200 /dev/hda5
stellt die Anzahl der maximalen Mountvorgänge zwischen zwei Dateisystemchecks für das Gerät /dev/hda5 auf 200 ein.

11.1.6 Liste der Blockgruppenbeschreibungen

Hier werden die wichtigsten Kenndaten der Blockgruppe festgehalten. Dies sind

Damit die Verzeichnisse gleichmäßig über die Blockgruppen verteilt werden, werden neue Verzeichnisse in dem Block angelegt, der am wenigsten Verzeichnisse enthält.

11.1.7 Block- und Inode-Bitmap

Die Bitmaps für die Verwaltung der Blöcke und Inodes sind auf einen logischen Block beschränkt. Für jeden Block wird ein Bit benötigt. Daher ist eine Blockgruppe auf $1024 \cdot 8 = 8192$ Blöcke beschränkt.


11.1.8 Inode-Liste

Die Inode-Liste besteht aus vielen aneinandergereihten Inodes, die alle exakt die gleiche Größe haben. Im Standardfall sind es 2048 Stück, die innerhalb einer Blockgruppe gespeichert werden. Die Inode ist der Dreh- und Angelpunkt des Dateizugriffs.

11.1.8.1 Adressierung des Speicherblocks

In der Inode befinden sich auch die Informationen über die für die Datei verwendeten Datenblöcke. Diese Tabelle besitzt 15 Einträge.

Die ersten zwölf Einträge verweisen direkt auf jeweils einen Datenblock. Im Normalfall ist dieser logische Block 1024 Bytes groß. Es können also direkt 12 KB adressiert werden. Der Zugriff ist aufgrund der Mechanik des Caches sehr schnell.

Der dreizehnte Eintrag weißt auch auf einen Datenblock. Dieser Datenblock enthält aber wiederum bis zu 256 Adressen von Datenblöcken. Es sind also nun 268 KByte adressierbar.

Der vierzehnte Eintrag weißt auf einen Datenblock der 256 Einträge vom Typ des dreizehnten Eintrags enthält. Er adressiert hier also $256 \cdot 256$ Blöcke mit 64 MByte Daten.

Der fünfzehnte Eintrag weißt auf einen Datenblock mit 256 Einträgen vom Typ des vierzehnten Eintrags. Hiermit werden also $256 \cdot 256 \cdot 256$ Blöcke mit ca. 16,6 GByte adressiert.

11.2 Pflege des Dateisystems

Nachdem Sie nun mit viel Mühe die Partitionen und Ihr System eingerichtet haben, sollten Sie Ihr Dateisystem auch pflegen, damit es gesund bleibt. Wie beim Menschen ist Vorsorge besser als Nachsorge.


11.2.1 fsck

Das wichtigste Programm für die Wartung des Dateisystems ist fsck. Wie auch mkfs (10.4.1) ist fsck ein Frontend zu dem Systemcheck-Programm des jeweiligen Dateisystemtyps. Es wird zur Überprüfung des Dateisystems und zur Behebung von Unstimmigkeiten verwendet.

In den meisten Fällen basiert ein solcher Dateisystemfehler auf einem Systemabsturz. Der Kernel ist dann nicht mehr in der Lage die im Cache zwischengespeicherten Daten auf die Platte zu schreiben.

fsck [OPTIONEN] [-t DSTYP] [GERÄT]

Optionen
-a Das Programm läuft ohne Rückfragen ab (Vorsicht!)
-c Untersucht auf defekte Blöcke
 

11.2.1.0.1 Beispiel

 
Um das ext2-Dateisystem der zweiten Partition der ersten IDE-Platte zu testen geben Sie den folgenden Befehl ein.
fsck -t ext2 /dev/hda2
Dies führt dazu, daß das Programm e2fsck aufgerufen wird.

Ist dieses Dateisystem das Wurzel-Dateisystem, dann fragt e2fsck nach, ob der Check auch durchgeführt werden soll. Beim Check werden getestet:


11.2.2 e2fsck

Das Tool e2fsck ist das Dateisystem-Checkprogramm für das ext2-Dateisystem.
e2fsck [OPTIONEN] GERÄT

Optionen
-b BLOCK Die zu benutzende Kopie des Superblocks
-f Führt den Check auch durch, wenn das System sauber erscheint.
 

Zum Testen können alle Dateisysteme außer dem Wurzel-System unmountet werden. Das Wurzel-System kann in folgenden Situationen gestestet werden.

11.2.2.0.1 Reparatur des Superblocks

 
Sollte der Superblock beschädigt sein, so kann das Dateisystem nicht gemountet werden. Für den Dateisystemcheck geben wir deshalb eine Kopie des Superblocks an. Für ein ext2-Dateisystem lautet der Befehl dann:
e2fsck -f -b 16385 /dev/hda3
Die Option -f muß gesetzt werden, da das Programm sonst die Kopie des Superblocks für den echten hält und, da dieser ja in Ordnung ist, den Test beendet.


11.2.3 badblocks

Mit dem Tool badblocks können Sie ein Gerät, in den meisten Fällen eine Festplatte oder Diskette, auf defekte Datenblocks untersuchen.

 badblocks [OPTIONEN] GERÄT [LETZTER-BLOCK] [ERSTER-BLOCK]

Mit der Angabe von ERSTER-BLOCK und LETZTER-BLOCK können sie auch einen Bereich auf dem Gerät bestimmen, welcher untersucht werden soll. Falls nichts angegeben wird, wird vom ersten bis letzten Block alles getestet.

Das Programm badblock sollte möglichst nur auf nicht gemounteten Geräten gestartet werden.

Optionen
-b GROESSE Größe der Datenblöcke in Bytes
-c ZAHL Anzahl der Blocks, die auf einmal getestet werden
-f Erlaubt auch die Durchführung bei gemounteten Geräten. Vorsicht!
-i DATEI Liest Liste mit bekannten defekten Blocks ein
-o DATEI Schreibt gefundene defekte Block in die angegebene Datei
-p VERSUCHE Anzahl der Wiederholungen, wenn kein defekter Block gefunden wurde. Defaultwert ist 0
-n Nicht zerstörender Lese-und-Schreibtest, Defaulteinstellung
-s Zeigt Fortschritt in Form der abgearbeiteten Blocks
-v ``Blubbermodus''
-w Schreibmodus-Test: dieser Test löscht vorhandene Daten
 

11.2.3.1 Beispiel

Um eine Diskette zweimal auf defekte Sektoren zu untersuchen wird folgender Befehl eingegeben.
enterprise:~ # badblocks -p 2 -s /dev/fd0
Checking for bad blocks (read-only test): done
Checking for bad blocks (read-only test): done

11.3 Auf der Suche nach der verlorenen Datei

Wie Sie schon in Abschnitt 4.4 und Abbildung 4.1 gesehen haben, kann in diesem weit verzweigtem Verzeichnisbaum eine Datei leicht mal verloren gehen. Um diese verlorene Datei wieder zu finden, stehen Ihnen einige Tools zur Verfügung. Die Tools whereis (6.3.1) und which (6.3.2) haben Sie schon in dem Kapitel über die Hilfe kennengelernt. Neben diesen Befehlen gibt es noch find und locate.


11.3.1 find

Dieses Tool wird dazu benutzt das angegebene Verzeichnis und seine Unterverzeichnisse nach Dateien zu durchsuchen, die den mitgegebenen Kriterien entsprechen.
find [PFAD] [SUCHKRITERIEN]

Werden keine Kriterien angegeben, so zeigt find alle Dateien im Verzeichnis und seinen Unterverzeichnissen an. Wird kein Pfad angegeben, so dient das aktuelle Arbeitsverzeichnis als Startverzeichnis. Um die Anzahl der gefundenen Dateien einzuschränken, können Kriterien für die Eigenschaften der gesuchten Dateien angegeben werden. Tabelle 11.1 liefert einen Überblick über die wichtigsten Kriterien.


Tabelle 11.1: Suchkriterien des find-Befehls
Kriterien Aktion
-atime $\pm$N Findet Dateien auf der Basis des letzten Zugriffs
-ctime $\pm$N Findet Dateien auf der Basis der letzten Änderung des Verzeichniseintrags
-exec BEFEHL Ausführen eines BEFEHL für jede gefundene Datei
-group GRUPPE Findet Dateien die zu einer bestimmten GRUPPE (GID) gehören
-inum N Findet Dateien mit der Inode N
-links N Findet Dateien mit N Links
-mount Findet Dateien nur im gleichen Dateisystem
-mtime $\pm$N Findet Dateien auf der Basis der letzten Änderung
-name MUSTER Findet Dateien, auf deren Dateiname das MUSTER zutrifft.
-newer DATEI Findet Dateien, die jünger als die angegebene DATEI sind.
-ok BEFEHL Ausführen eines BEFEHL für jede gefundene Datei mit vorheriger Sicherheitsabfrage
-perm NNN Findet Dateien, auf die Rechtemaske NNN zutrifft.
-print Zeigt die gefundenen Dateien mit ihrem Pfad an. (Standard)
-size N[c] Findet Dateien in Abhängigkeit von ihrer Größe (N Blocks oder N Zeichen).
-type C Findet Dateien vom gegebenen Typ:
  b = Blockgerät, c = Zeichengerät, d = Verzeichnis, l = Link oder f = normale Datei
-user BENUTZER Findet die Dateien des angegebenen Benutzers
-xdev Durchsucht nur das aktuelle Dateisystem


Einzelne Suchkriterien sind logisch verknüpfbar, d. h., es können Suchkriterien aus verschiedenen Teilbedingungen zusammengesetzt werden. Numerische Angaben als Bestandteil eines Suchkriteriums lassen sich auf drei Weisen benutzen: N, +N und -N, wobei N eine ganze Zahl ist. Das Kriterium -links veranlaßt z. B. eine Suche nach Dateien mit einer bestimmten Anzahl von Links und erfordert eine entsprechende numerische Angabe. So bedeuten
-links 3 Suche nach Dateien mit 3 Links
-links +3 Suche nach Dateien mit mehr als 3 Links
-links -3 Suche nach Dateien mit weniger als 3 Links

11.3.1.1 Beispiele zu find

find -name "super*"
Findet alle Dateien im aktuellen Verzeichnis und darunter, die mit ``super'' beginnen. Dabei sollte das Suchmuster in Anführungszeichen stehen.

find /usr -type d -print
sucht nach allen Verzeichnissen, die unterhalb von /usr existieren und zeigt ihre Pfadnamen an.

find / -name tty* -print
liefert die Pfade aller Dateien des gesamten Dateisystems, die mit ``tty'' beginnen.

find / -user 406 -ok rm {} \;
sucht im gesamten Dateisystem nach Dateien des Benutzers mit der uid 406. Gefundene Dateien werden bei positiver Beantwortung einer Sicherheitsabfrage gelöscht.

find . -newer .version_time -print
zeigt alle Dateien des aktuellen Verzeichnisses, die jüngeren Datums sind als die Datei .version_time.

find / -size +10k -user tapico -print
zeigt alle Dateien die größer als 10 kB sind und dem Benutzer tapico gehören.

find ~ -atime -10 -print
findet alle Dateien, auf die innerhalb der letzten 10 Tage zugegriffen wurde.

Bei Angabe von mehreren Kriterien wird immer von einer UND-Verknüpfung ausgegangen.
find / -size +10k -user tapico -print
zeigt alle Dateien die größer als 10 kB sind und dem Benutzer tapico gehören.

Dies kann durch -a betont werden.
find / -size +10k -a -user tapico -print

Eine ODER-Verknüpfung erreicht man durch -o.
find ~ -name '*.htm' -o -name '*.html' -print
sucht nach allen Dateien, die auf ``.htm'' oder ``.html'' enden.

Die Negation eines Kriteriums wird durch das ! erreicht.
find / \! -name '*~' -print
findet alle Dateien, die nicht mit einem Tilde ~ enden. Allerdings stellt die Verwendung des Negationsoperators ``!'' ein Problem dar, da dieser in der Bash eine besondere Bedeutung hat. Er muß deshalb maskiert werden. Im Zweifelsfall bietet es sich an die längere Version -not zu verwenden.

Der Befehl find kann auch zur Suche nach weiteren Hardlinks einer Datei verwendet werden.

ole@enterprise:~> ls -li /bin/gzip
 926671 -rwxr-xr-x    3 root     root        52964 2003-09-23 18:52 /bin/gzip
ole@enterprise:~> find /bin -inum 926671
/bin/gzip
/bin/zcat
/bin/gunzip

11.3.2 Suchen mit locate

Eine schneller Suchmöglichkeit als find ist der Befehl locate. Dieser stützt sich auf eine Datenbank und muß nicht wie find das Dateisystem direkt durchsuchen. Allerdings muß die Datenbank immer auf den aktuellsten Stand sein um auch die Dateien zu finden. Bei neueren SuSE-Versionen gehört der Befehl nicht mehr zur Standardinstallation. Bei der Suche nach Programmdateien ist oft der Befehl whereis schneller und der Befehl find ist weitaus mächtiger. Um den Befehl nutzen zu können, müssen Sie bei SuSE 9.0 das Paket findutils-locate installieren.


11.3.2.1 locate

Auf der Basis der Datenbank /var/lib/locatedb liefert locate die Position von Dateien im Verzeichnisbaum.
locate [DATEINAME]

Der Befehl locate XYZ ist wesentlich schneller als find / -name XYZ. Allerdings muß auch immer die Datenbank auf dem neuesten Stand sein. Die Anwendung ist sehr einfach, so zeigt der Befehl

locate "*.ps"
alle Dateien an, die mit ``.ps'' enden.


11.3.2.2 /var/lib/locatedb

Die Datei /var/lib/locatedb enthält eine Liste aller Dateien des Dateisystems zu einem bestimmten Zeitpunkt. Sie ist eine große Binärdatei, die Sie mit dem Befehl
od -c /var/lib/locatedb | less
betrachten können.

Mit dem Befehl updatedb wird die Datenbank auf den neuesten Stand gebracht.


11.3.2.3 updatedb

Das Kommando updatedb bringt die für locate wichtige Datenbank /var/lib/locatedb auf den neuesten Stand.
updatedb [OPTIONEN]

Optionen
--localpaths Die lokalen Verzeichnisse werden mit eingebunden
--netpaths Die Netzwerk-Verzeichnisse werden mit eingebunden
--prunepaths LISTE Liste der ausgeschlossenen Verzeichnisse
--output DATEI Name der Ausgabedatei
 

Für eine generelle Konfiguration des Befehls kann eine Datei updatedb.conf benutzt werden.

In vielen Distributionen wird das Update automatisch durch ein mit cron gestartetes Skript durchgeführt. Bei SuSE 9.0 ist das Skript updatedb im Verzeichnis /etc/cron.daily verantwortlich. Die Datei sieht in einer leicht gekürzten Version so aus.

 
enterprise:~ # cat /etc/cron.daily/updatedb
#!/bin/sh
...
# Copyright (c) 2003 SuSE Linux AG, Nuernberg, Germany.
# Author: Burchard Steinbild <bs@suse.de>, 1996
#         Florian La Roche <florian@suse.de>, 1996

# paranoia settings
umask 022

PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH

# get information from /etc/rc.config
if [ -f /etc/sysconfig/locate ] ; then
    . /etc/sysconfig/locate
fi

# update database for locate
if [ -n "$RUN_UPDATEDB" -a "$RUN_UPDATEDB" = "yes" -a \
     -x /usr/bin/updatedb ] ; then

    # avoid error messages from updatedb when using user nobody for find.
    cd /

    PARAMS="`test -n "$RUN_UPDATEDB_AS" && \
            fgrep localuser /usr/bin/updatedb > /dev/null && \
            echo --localuser=$RUN_UPDATEDB_AS`"

    PARAMS="$PARAMS `test -n "$UPDATEDB_PRUNEPATHS" && \
            echo --prunepaths=\'$(eval echo $UPDATEDB_PRUNEPATHS)\'`"

...

    eval nice -n 19 /usr/bin/updatedb $PARAMS 2> /dev/null
fi
exit 0


11.4 Disk Quotas

Disk Quotas sind ein Mittel um den Platz, den jeder Benutzer oder Gruppe benutzen kann, einzuschränken. Sie erleichtern dem Administrator die Verwaltung des Systems. Diese Speichernutzungsreglementierung arbeitet Partitionsweise. Für die Partitionen können verschiedenen Quoten oder gar keine festgelegt werden. Um diese Funktion nutzen zu können, muß die Disk-Quota-Unterstützung auch in den Kernel einkompiliert werden.

Auch können für einzelne Benutzer oder für Gruppen Quoten festgelegt werden. Diese Quoten sind unabhängig voneinander. Erreicht das Kontingent der Gruppe oder des Benutzers das Limit, kann der Benutzer keine Daten mehr speichern.

Sollte ein Benutzer durch die Gruppenbegrenzung keinen Platz mehr haben, kann er das dadurch umgehen, daß er die Gruppe wechselt.

Im Normalfall sind die Festplattenquoten abgeschaltet. Um sie wieder zu aktivieren ist ein Eintrag für die Partition in /etc/fstab notwendig. Also Option wird der Platte der Eintrag usrquota für Benutzer und grpquota für Gruppen hinzugefügt.

/dev/hda1      /         ext2     defaults,grpquota           1  1
/dev/hda2      /home     ext2     defaults,usrquota           1  1
/dev/hda3      /server   ext2     defaults,usrquota,grpquota  1  1

Der Superuser muß dann in der Wurzel der Partition eine Datei quota.user bzw. quota.group einrichten. Diese Dateien sollten nur für den Superuser schreib- und lesbar sein.

root@defiant: ~> touch /quota.user /quota.group
root@defiant: ~> chmod 600 /quota.user /quota.group

Danach muß das System neu gestartet werden, um die Änderungen im System gültig zu machen. Um die Quoten einzuschalten wird das Kommando quotaon und um die Quoten auszuschalten das Kommando quotaoff benutzt. Um die Quoten einzurichten, wird der Befehl edquota verwendet. Dabei kann die Anzahl der Inodes, der Speicherplatz oder beides als Begrenzung dienen. Dabei spielen drei Parameter eine wichtige Rolle.

Weiche Limit (soft limit): Die durch das weiche Limit gesetzte Grenze kann für eine bestimmte Zeit überschritten werden.

Harte Limit (hart limit): Nach Erreichen des harten Limits ist es nicht mehr möglich Dateien zu erstellen. Es gibt keine Gnadenfrist.

Gnadenfrist (grace period): Für diesen Zeitraum kann das weiche Limit überschritten werden. Standardeinstellung sind sieben Tage.


11.4.1 quota

Mit dem Befehl quota kann der Superuser die Quoten überprüfen. Der normale Benutzer kann nur seine Quoten und die seiner Gruppe sehen.
quota [OPTIONEN] [WER]

Normal zeigt quota die Quoten der in /etc/fstab eingetragenen Dateisysteme.

Optionen
-u BENUTZER Zeigt die Quoten des angegebenen Benutzers
-g Zeigt neben den persönlichen Quoten auch die Quoten der Gruppen, in denen der Benutzer Mitglied ist
-q Zeigt nur Dateisysteme an in denen die Quote überschritten wurden.
 


11.4.2 quotaon

Der Befehl quotaon startet die Quotenüberwachung.
quotaon [OPTIONEN]

Optionen
-a Die Quoten werden für alle Dateisysteme mit rw-Recht aus der /etc/fstab aktiviert. Dies sollte jedesmal beim Boot-Vorgang passieren.
-v Zeigt die Informationen über alle Systeme, auf denen die Quoten aktiviert sind.
-u Schaltet die Quoten für benannte User an
-q Schaltet die Quoten für benannte Gruppen an
 

Die Quoten sollten beim Booten jedesmal aktiviert werden. Deshalb muß das Init-Skript um einen Eintrag erweitert werden.

# Check quota and then turn quota on.
if [ -x /usr/sbin/quotacheck ]
  then
    echo "Checking quotas. This may take some time."
    /usr/sbin/quotacheck -avug
    echo " Done."
  fi
if [ -x /usr/sbin/quotaon ]
  then
    echo "Turning on quota."
    /usr/sbin/quotaon -avug
  fi


11.4.3 quotaoff

Der Befehl quotaoff beendet die Quotenüberwachung.
quotaoff [OPTIONEN]

Optionen
-a Die Quoten werden für alle Dateisysteme mit rw-Recht aus der /etc/fstab deaktiviert. Dies sollte jedesmal beim Shutdown-Vorgang passieren.
-v Zeigt die Informationen über alle Systeme, auf denen die Quoten deaktiviert sind.
-u Schaltet die Quoten für benannte User aus
-q Schaltet die Quoten für benannte Gruppen aus
 


11.4.4 edquota

Das Kommando edquota ist für das Anpassen der Quoten zuständig. Es öffnet dafür den Standardeditor (Variable EDITOR).
edquota [OPTIONEN]

Optionen
-u BENUTZER Editiert die Quote des angegebenen Benutzers
-g BENUTZER Editiert die Quote der angegebenen Gruppe
-p BENUTZER Dupliziert die Quote des Benutzers (mit -u) oder die Quote der Gruppe (mit -g).
-t Editiert die weichen Limits
 

Der Befehl edquota -u tapico öffnet den Abschnitt der Datei quota.user im Standardeditor.

Quotas for user tapico:
  /dev/hda3: blocks in use: 2594, limits (soft = 5000, hard = 6500)
           inodes in use: 356, limits (soft = 1000, hard = 1500)

Jedes Limit kann dabei drei verschiedene Werte annehmen.

Die Standardeinstellungen werden in der Datei quota.h eingestellt.


11.4.5 repquota

Dieser Befehl kann dazu benutzt werden den Status der Quoten zu überprüfen.
repquota [OPTIONEN] [DATEISYSTEM]

Dabei werden die Nutzung und die Quoten der Partition angezeigt.

Optionen
-a Zeigt alle Dateisysteme an, die in /etc/fstab eingetragen sind.
-v Zeigt alle Quoten an, selbst wenn der Benutzer keinen Platz auf der Partition beansprucht.
-g GRUPPE Zeigt die Quoten für die angegebene Gruppe an.
-u BENUTZER Zeigt die Quoten für den angegebenen Benutzer an. Nur der Superuser kann dies für andere Benutzer machen.
 


11.4.6 quotacheck

Der Befehl quotacheck aktualisiert die Quoteninformationen, also wieviel Platz von den einzelnen Benutzern und Gruppen belegt wird.
quotacheck [OPTIONEN]

Normalerweise wird der Befehl nach einem fsck ausgeführt.

Optionen
-v Zeigt Informationen über den Verlauf des Programms an
-u Führt einen Benutzerscan aus. (UID als Argument)
-g Führt einen Gruppenscan aus. (GID als Argument)
-a Überprüft alle Dateisysteme, die in der /etc/fstab stehen.
-R Im Zusammenhang mit -a verwendet, um alle Systeme außer dem Wurzelverzeichnis zu testen.
 


11.4.7 quotastats

Der Befehl quotastats kalkuliert den benutzten Platz für jeden Benutzer und für jede Gruppe. Die Ergebnisse werden in den jeweiligen Dateien quota.user und quota.group gespeichert.

11.4.8 Einrichten von Disk Quotas mit SuSE

Um Disk Quotas nutzen zu können, müssen diese in den Kernel einkompiliert sein, was beim SuSE-Kernel der Fall ist. Die Quota-Utilities befinden sich im Paket quota, das auch installiert werden muß.

In diesem Beispiel wird die Partition /dev/hdb1 mit dem Dateiystem ext2 am Mountpunkt /daten in das Dateisystem eingebunden. Für diese Partition sollen Disk Quotas für Benutzer angelegt werden. Daher muß in der /etc/fstab der Eintrag für /dev/hdb1 um die Option usrquota ergänzt werden.

/dev/hdb1       /daten  ext2    defaults,usrquota 1 3

Im Wurzelverzeichnis der Partition muß nun die Verwaltungsdatei für die Disk Quotas eingesetzt werden. Bei SuSE kommt ``aquota'' zum Einsatz, daher der abweichende Name. Auf jeden Fall darf nur root die Datei lesen und schreiben.

voyager:~ # touch /daten/aquota.user
voyager:~ # chmod 600 /daten/aquota.user

Nun muß die Verwaltungsdatei eingerichtet werden. Dies übernimmt das Programm quotacheck.

voyager:~ # quotacheck -avR
quotacheck: WARNING -  Quotafile /daten/aquota.user was probably truncated.
Can't save quota settings...
quotacheck: Scanning /dev/hdb1 [/daten] done
quotacheck: Checked 3 directories and 1 files
voyager:~ # quotacheck -avR
quotacheck: Scanning /dev/hdb1 [/daten] done
quotacheck: Checked 3 directories and 1 files

Jetzt ist es an der Zeit für eine Benutzer Quoten anzulegen. Dies erfolgt über den Befehl edquota, der für die Eingabe der Werte den vi benutzt.

voyager:~ # edquota -u walter

Un so sollte der Eintrag lauten, wenn der Benutzer walter eine Beschränkung von 5 MB als weiches und hartes Limit besitzen soll.

Disk quotas for user walter (uid 510):
  Filesystem          blocks       soft       hard     inodes     soft     hard
  /dev/hdb1                0       5120       5120          0        0        0

Nach der Einrichtung sollten die Disk Quotas auch aktiviert werden. Danach liefert repquota den derzeitigen Stand der Dinge.

voyager:~ # quotaon /daten
voyager:/daten # repquota -av
*** Report for user quotas on device /dev/hdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      32       0       0              4     0     0
walter    --       0    5120    5120              0     0     0

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2,000000

Zum Testen legen wir uns eine ungefähr 2 MB große Datei an. Um die Datei zu füllen benutzen wir den Befehl dd (4.5.4), der aus dem Gerät /dev/zero Daten liest und sie in die Datei testfile schreibt. Wenn nun doe Datei dreimal rüberkopiert wird in den Verzeichnisbaumabschnitt /daten, sollten die Disk Quotas greifen.

walter@voyager:~> dd if=/dev/zero of=testfile count=2000000 bs=1
2000000+0 Records ein
2000000+0 Records aus
walter@voyager:~> cp testfile /daten/test/testfile1
walter@voyager:~> cp testfile /daten/test/testfile2
walter@voyager:~> cp testfile /daten/test/testfile3
ide0(3,65): write failed, user block limit reached.
cp: Schreiben von »/daten/test/testfile3«: Der zugewiesene Plattenplatz (Quota)
ist überschritten

Mit den Quotas klappt das ja schon ganz gut. Allerdings sind die Quotas nach dem Neustart des Rechners nicht mehr aktiv und müssen per Hand gestartet werden. Abhilfe schafft hier eines der vielen init-Skripte. Das Skript quota startet die Quoten und boot.quota sorgt dafür, daß nach einem unsauberen Beenden des Dateisytems die Quoten überprüft werden. Der Befehl insserv sorgt dafür, daß das angegebene Skript nun auch in den im Skript angegebenen Runleveln startet.

yoyager:~ # cd /etc/init.d
voyager:/etc/init.d # insserv quota
voyager:/etc/init.d # insserv boot.quota

Mit dem Befehl quota können Sie sich nun die Quoten der Benutzer anschauen.

voyager:~ # quota
Disk quotas for user root (uid 0): none
voyager:~ # quota walter
Disk quotas for user walter (uid 501):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/hdb1    5120*   5120    5120               3       0       0

Manchmal kann es vorkommen, daß durch ungünstige Umstände die Anzahl der benutzten Ressourcen in der Verwaltungsdatei mit der Wirklichkeit nicht mehr übereinstimmt. Dies passiert z. B. wenn Dateien verändert wurden, während das Quota-System aus war. Der Befehl quotacheck ändert diese Information. Allerdings nur unter Verwendung einiger Schalter.

voyager:~ # repquota -av
*** Report for user quotas on device /dev/hdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      32       0       0              4     0     0
walter    --    5120    5120    5120              3     0     0

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2,000000

voyager:~ # quotacheck -avR
quotacheck: Quota for users is enabled on mountpoint /daten so quotacheck might
damage the file.
Please turn quotas off or use -f to force checking.
voyager:~ # quotacheck -afvR
quotacheck: Cannot remount filesystem mounted on /daten read-only so counted
values might not be right.
Please stop all programs writing to filesystem or use -m flag to force checking.
voyager:~ # quotacheck -amfvR
quotacheck: Scanning /dev/hdb1 [/daten] done
quotacheck: Checked 4 directories and 1 files
voyager:~ # repquota -av
*** Report for user quotas on device /dev/hdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      32       0       0              4     0     0
walter    --       0    5120    5120              0     0     0

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2,000000


Notizen:
Notizen:

Dateisystem und Disk Quotas % latex2html id marker 15834
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

Zu Beginn der Aufgabe sollten Sie sich im Heimatverzeichnis befinden! Wechseln Sie das Verzeichnis nur, falls Sie dazu ausdrücklich aufgefordert werden. Einige Aufgaben lassen sich nicht ausführen! Versuchen Sie in diesen Fällen die Fehlermeldung zu interpretieren.

400
Loggen Sie sich als Benutzer walter auf der Konsole 1 ein.

401
Kopieren Sie die Datei passwd aus /etc ins aktuelle Verzeichnis!

402
Wem gehört die Datei passwd a) in /etc, b) im aktuellen Verzeichnis?

403
Geben Sie der Datei passwd den zusätzlichen Hardlink meingottwalter!

404
Kopieren Sie die Datei /bin/mv ins aktuelle Verzeichnis !

405
Legen Sie ein Verzeichnis test an !

406
Kopieren Sie alle Dateien des aktuellen Verzeichnisses ins Verzeichnis test und wechseln Sie nach test!

407
Benennen Sie passwd um in halleluja!

408
Stellen Sie fest, wie viele Hardlinks die Datei passwd in /etc hat.

409
Suchen Sie die Datei passwd im gesamten Dateisystem !

410
Suchen Sie nach allen Dateien mit Namen utmp im gesamten Dateisystem!

411
Erstellen Sie in Ihrem Heimatverzeichnis das Verzeichnis teest2!

412
Geben Sie der Datei mv in Ihrem Heimatverzeichnis den zusätzlichen Namen (Softlink) move!

413
Lassen Sie sich alle Dateien im Dateisystem anzeigen, die Ihnen gehören!

414
Lassen Sie sich ausführliche Informationen zu allen Dateien anzeigen, die im Verzeichnis /usr liegen und größer als 1 kB sind!

415
Wieviele Dateien gibt es im Verzeichnis /dev ?

416
Wechseln Sie zur Konsole 2 und loggen Sie sich dort als root ein.

417
Konfigurieren Sie das Heimatverzeichnis so, daß der Benutzer Willi dort nur 20 MB Plattenplatz belegen darf. Welchen Dienst nutzen Sie dafür. Beschreiben Sie die Vorgehensweise.


Notizen:


12. Bootvorgang und Prozeßverwaltung

Die Art und Weise wie das Betriebssystem geladen wird, hängt davon ab, wie Ihr System eingerichtet ist. Das macht aber nichts, da die grundlegenden Schritte, wie Sie das Betriebssystem starten und zum Laufen bringen, gleich sind. Es ist sehr wichtig den Vorgang und die Schritte des Bootens zu verstehen, um Probleme beim Startvorgang beseitigen zu können.

12.1 Bootvorgang und Starten des Betriebssystems


12.1.1 Der Bootvorgang

Jeder Bootvorgang beginnt mit dem Einschalten des Rechners. Um dem Netzteil Zeit zu geben um eine stabile Spannung zu liefern, bleibt der Prozessor erst einmal gestoppt. Sobald das Netzteil meint, es liefert eine stabile Spannung sendet es das sogenannte Power-Good-Signal an die Hauptplatine, die dann den Prozessor startet. Alle Intel- und Intel-kompatiblen Prozessoren starten im Realen Modus (engl. real mode). Im weiteren Verlauf werde ich mich beim Bootvorgang auf diese Prozessoren beschränken. In der Betriebsart Realer Modus erfolgt die Adressierung von Speicherstellen über zwei 16-bit-Register, dem Segmentregister und dem Offsetregister. Aus historischen Gründen, damals glaubte man, daß ein PC nie mehr als 640 KByte Arbeitsspeicher besitzen würde, erfolgt die Startprozedur im ersten Megabyte der Arbeitsspeicher. Um diesen Arbeitsspeicher adressieren zu können werden 20 Bit benötigt.


\begin{displaymath}
20 \, \textrm{Bit}
\equiv 2^{20} \, \textrm{Bytes}
= 1048576 \, \textrm{Bytes}
= 1 \, \textrm{MByte}
\end{displaymath} (12.1)

Da beide verwendeten Register 16 Bit groß sind, werden vom Segmentregister nur 4 Bit benötigt. Der Speicher ist also aufgeteilt in 16 Segemente zu 65.536 Bytes. Die Adresse ergibt sich dann nach folgender Regel: Das Segementregister wird um 4 Bit nach links verschoben. Das entspricht einer Multiplikation mit 16. Der entstehende Wert wird dann mit dem Offsetregister addiert. Schauen wir uns doch mal als Beispiel das Segmentregister 0xA000 und das Offsetregister 0x3F00 an.


\begin{displaymath}
\begin{array}{lcr}
\mbox{SR um 4~Bit} & & \texttt{A0000}\\
...
...
\hline
\mbox{20 Bit-Adresse} & & \texttt{A3F00}\\
\end{array}\end{displaymath} (12.2)

Die Schreibweise für die Adresse lautet dann: 000A:3F00.

Nachdem nun der Prozessor angefangen hat zu arbeiten, startet er den Programmcode an der Speicherstelle 0000F:FFF0. Hier befindet sich direkt nach dem Einschalten der Initialisierungscode des BIOS. Dieser Programmcode sucht nun ab dem zehnten Segment den Speicher nach weiterem BIOS-Code von Geräten (Grafikkarte, SCSI-Controller) durch und führt ihn aus. Dies ist übrigens auch der Grund, warum die Meldung der Grafikkarte als erstes erscheint.

Nach der Initialisierung und Ausführung des Grafikkarten-BIOS startet das BIOS den Power On Self Test. Dieser auch als POST abgekürzte Test überprüft den Prozessor und die DMA- und Interrupt-Controller. Danach führt er einen Test des Arbeitsspeichers durch, der als auffälliges Element beim Booten eigentlich jederm Anwender ins Auge fällt.

Am Ende des POST wird dafür gesorgt, daß auftretende Interrupts verarbeitet werden können. Interrupts sind Signale, die ein Programm darüber informieren, daß ein Ereignis eingetreten ist, was nun bearbeitet werden soll. In vielen Fällen wird dazu das Programm angehalten, das aufgetretene Ereignis wird abgearbeitet und danach setzt das Programm seine normale Tätigkeit fort. Denken Sie daran, daß auch das Betriebssystem nur ein Programm ist. Jedenfalls wird nun dafür gesorgt, daß im ersten Speicher-Segment12.1 die Interrupt-Vektor-Tabelle initialisiert wird. In ihr steht für jeden Interrupt eine Sprungadresse zu dem passenden Programmcode. Nach dem Abschluß des POST wird als letzte Aktion der Interrupt 0x1912.2 ausgelöst, dessen Programmcode nun versucht ein Betriebssystem zu starten. Dafür macht es sich auf die vorhandenen Datenträger nach einem funktionsfähigen Master Boot Record zu durchsuchen. Den Aufbau des Master Boot Records habe ich schon in Abschnitt 10.2 beschrieben. Das im MBR enthaltene Mini-Programm wird gestartet. Dies sorgt nun dafür, daß ein Bootloader gestartet wird. Dabei kann es sein, daß das Mini-Programm schon den ersten Teil des Bootloaders darstellt.


12.1.2 Linux startet

Linux zu starten ist relativ einfach. Sie müssen dazu nur den Rechner einschalten und einen Bootloader bzw. einen Bootmanager verwenden oder von einer Diskette booten. Als Bootmanager kommen z. B. GRUB oder LILO in Frage, die später noch behandelt werden.

Dieser Bootmanager sorgt nun dafür, daß der Kernel gestart wird. Der Kernel befindet sich entweder auf einer Diskette oder auf der Festplatte im Verzeichnis /boot12.3. Der gepackte Kernel ist normalerweise in der Datei vmlinuz-versionsnummer. Bei SuSE lautet der Dateiname nur vmlinuz. Wie auch immer, der Name und der Dateipfad sind eigentlich unwichtig. Wichtig ist nur, daß der Kernel während des Bootvorgangs lokalisiert werden kann.

Als erstes wird der Kernel in den Speicher geladen. Normalerweise ist der Kernel gepackt. Nur der Code für das Entpacken ist natürlich in ungepackter Form enthalten. Sie können das Programm gunzip (13.6.1) zum Entpacken des Kernels verwenden. Der Kernel enthält wichtige Informationen wie z. B. den Ort des Wurzeldateisystems.

Während des ganzen Ladevorgangs gibt der Kernel Meldungen aus und speichert sie in der Datei /var/log/messages (Abschnitt 13.3.3). Um sich die Meldungen später anzusehen, können Sie den Befehl dmesg verwenden. Er benötigt keine Argumente und gibt die letzten Meldungen aus dem Meldungspuffer des Kernels aus.

Diese Nachrichten enthalten

Nachdem der Kernel gestartet wurde, mounted er das Wurzel-Dateisystem, das normalerweise auf der Festplatte liegt. Nach dem Mounten wird die Kontrolle an die Programme auf der Festplatte übergeben, während der Kernel im Speicher bleibt.


12.1.3 dmesg

Der Befehl dmesg gibt letzten Meldungen des Kernels aus. In den meisten Fällen wird er dazu benutzt um sie die Bootmeldungen nach dem Starten des Systems noch einmal in Ruhe anzuschauen.

dmesg [OPTIONEN]

Hier noch ein Beispiel für die vom Kernel gelieferten Meldungen über den Startvorgang.

root@defiant:/ > dmesg
Linux version 2.2.14 (root@defiant) (gcc version 2.95.2 19991024) #2 Wed Jul 26 20:49:06 MEST 2000
Detected 365818579 Hz processor.
Console: colour VGA+ 80x25
Calibrating delay loop... 730.73 BogoMIPS
Memory: 62800k/65472k available (1280k kernel code, 412k reserved, 936k data, 44k init, 0k bigmem)
Dentry hash table entries: 8192 (order 4, 64k)
Buffer cache hash table entries: 65536 (order 6, 256k)
Page cache hash table entries: 16384 (order 4, 64k)
CPU: Intel Celeron (Mendocino) stepping 0a
Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
PCI: PCI BIOS revision 2.10 entry at 0xf0200
PCI: Using configuration type 1
PCI: Probing PCI hardware
Linux NET4.0 for Linux 2.2
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0 for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
TCP: Hash tables configured (ehash 65536 bhash 65536)
Initializing RT netlink socket
Starting kswapd v 1.5 
Detected PS/2 Mouse Port.
pty: 256 Unix98 ptys configured
apm: BIOS version 1.2 Flags 0x0f (Driver version 1.12)
Real Time Clock Driver v1.09
loop: registered device at major 7
Uniform Multi-Platform E-IDE driver Revision: 6.30
ide: Assuming 40MHz system bus speed for PIO modes; override with idebus=xx
ALI15X3: IDE controller on PCI bus 00 dev 78
ALI15X3: not 100% native mode: will probe irqs later
ALI15X3: simplex device:  DMA disabled
ide0: ALI15X3 Bus-Master DMA disabled (BIOS)
ALI15X3: simplex device:  DMA disabled
ide1: ALI15X3 Bus-Master DMA disabled (BIOS)
hda: IBM-DBCA-204860, ATA DISK drive
hdc: CD-224E, ATAPI CDROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: IBM-DBCA-204860, 4645MB w/420kB Cache, CHS=592/255/63
hdc: ATAPI 24X CD-ROM drive, 128kB Cache
Uniform CDROM driver Revision: 2.56
Floppy drive(s): fd0 is 1.44M
FDC 0 is a National Semiconductor PC87306
scsi0 : SCSI host adapter emulation for IDE ATAPI devices
scsi : 1 host.
scsi : detected total.
Partition check:
 hda: hda1 hda2 < hda5 > hda3 hda4
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 44k freed
Adding Swap: 128516k swap-space (priority -1)
Serial driver version 4.27 with HUB-6 MANY_PORTS MULTIPORT SHARE_IRQ enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A


12.2 GRUB

GRUB ist wie der Name GRand Unified Bootloader schon sagt ein Bootloader. Natürlich ist er mehr als ein Bootloader und dient auch als Bootmanager. Er ist das erste Softwareprogramm was auf einem System läuft und sorgt dafür, daß der gewünschte Betriebssystem-Kernel geladen wird. Ist dies geschehen übergibt GRUB das Kommando an Kernel und beendet sich. Wenn man es genau betrachtet ist GRUB kein Bestandteil von LINUX. GRUB kann eine ganze Reihe von freien Betriebssystemen starten. Auch proprietäre Betriebssysteme können durch den Einsatz von Chain-Loading12.4 gestartet werden.

GRUB ist sehr flexibel. Der Bootloader versteht verschiedenste Dateisysteme und Kernelformate. So ist er in der Lage Betriebssysteme zu starten ohne sich die physikalische Position des Kernels auf dem Datenträger sich merken zu müssen. Daher reicht die Angabe des Dateinamens mit Pfad und der Partition um einen Kernel zu starten. Die Eingabe kann dabei über eine Kommandozeile oder über ein Menü erfolgen.

GRUB Ursprung stammt aus dem Jahre 1995, als Erich Boleyn das Betriebssystem GNU Hurd mit dem Mach 4 Kernel der University of Utah starten wollte. 1999 wurde GRUB Bestandteil des GNU-Projekts und damit freie Software, an der jeder mitschreiben kann.

12.2.1 Bezeichnung von Geräten

Die Bezeichnung von Geräten bei GRUB unterscheidet sich etwas von den üblichen Bezeichnungen von Linux. Schauen wir uns doch mal als erstes Beispiel die Floppy an.

(fd0)

Als erstes sollten Sie sich merken, daß aller Gerätebezeichnungen in runden Klammern stehen. Die Zahl 0 gibt an, daß dies das erste Laufwerk ist, da die Zählung von 0 beginnt. Mit dieser Angabe meint GRUB dann die gesammte Diskette. Bis jetzt also keinen großen Unterschied bei den von Linux und GRUB benutzten Bezeichnungen.

(hd0,1)

Die Buchstaben hd sagen, daß es sich hierbei um eine Festplatte handelt. Die 0 steht wiederum für das erste Laufwerk. Die Zahl hinter dem Komma gibt die Partitionsnummer an. Und hier taucht das erste Problem auf. Im Gegensatz zu Linux beginnt die Nummeriung der Partition bei GRUB auch mit 0. Diese Angabe entspricht als bei Linux dem Gerät /dev/hda2. Genau wie bei Linux haben logische Partitionen auf der erweiterten Partion ihren eigenen Nummerbereich, der bei 4 beginnt. Die folgende Angabe bezeichnet die erste logische Partition auf der zweiten Festplatte.

(hd1,4)

Wenn Sie eine bestimmte Datei im Dateisystem bezeichnen möchten, dann können Sie den Namen und Pfad der Datei direkt hinter die Laufwerksbezeichnung packen.

(hd0,5)/boot/vmlinuz

Diese Angabe bezeichnet die Datei vmlinuz im Verzeichnis boot auf der zweiten logischen Partition der ersten Festplatte.

12.2.2 Die Konfigurationsdatei von GRUB

Neben der Eingabeshell stellt GRUB auch die Möglichkeit eines Menüs bereit. Die dafür zuständige Konfigurationsdatei ist /boot/grub/menu.lst. Die Konfigurationsdatei liegt nicht im normalen Konfigurationsverzeichnis von Linux. Dies liegt daran, daß GRUB erstens eigentlich kein Bestandteil von Linux ist und zweitens, daß die Konfigurationsdatei im Bootverzeichnis eines Betriebssystems liegen sollte.

# Beispiel für /boot/grub/menu.lst
# 
color white/blue black/light-gray
# Starte den ersten Eintrag nach Ablauf einer Frist
default 0
# Warte 8 Sekunden auf eine Entscheidung, dann starte die Standardeinstellung
timeout 8
gfxmenu (hd0,5)/boot/message

# Linux booten
title Linux
    kernel (hd0,5)/boot/vmlinuz root=/dev/hda6 vga=0x317 splash=silent desktop 
 hdd=ide-scsi hddlun=0 showopts
    initrd (hd0,5)/boot/initrd

# Windows booten
title Windows 
    root (hd0,0)
    chainloader +1

# Von Diskette booten
title Diskette
    root (fd0)
    chainloader +1

# Linux in einem abgesicherten Modus starten
title Failsafe
    kernel (hd0,5)/boot/vmlinuz root=/dev/hda6 showopts ide=nodma apm=off  
 acpi=off vga=normal nosmp noapic maxcpus=0 3
    initrd (hd0,5)/boot/initrd

12.2.3 Installation von GRUB

Am Anfang erst einmal eine Warnung. Das Installieren von GRUB auf diese Weise löscht den von anderen Betriebssystemen benutzten Bootsector. Sie sollten daher vor der Installation eine Sicherheitskopie des Bootsektors der Partition anlegen, in der Sie GRUB installieren wollen. Dies können Sie z. B. mit dem Befehl dd (4.5.4) erledigen. Die Sicherung des Master Boot Records ist nicht so wichtig, da dieser einfach neu zu erstellen ist. Sie können dafür z. B. unter DOS den Befehl ``fdisk /mbr'' verwenden.

Sie können GRUB nun auf zwei Arten und Weisen installieren. Sie verwenden entweder den Befehl grub direkt oder Sie benutzen das Skript grub-install.

12.2.3.1 Direkte Installation von GRUB

Für eine direkte Installation erstellen Sie sich eine GRUB-Bootdiskette (beschrieben in Abschnitt 12.2.4) und booten den Rechner mit dieser Bootdiskette. Dann setzten Sie als erstes in der nun aktiven GRUB-Shell die GRUB-Rootpartition auf die Partition des Bootverzeichnis.

grub> root (hd0,5)

Falls Sie nicht ganz sicher sind, auf welcher Partition das Bootverzeichnis sich befindet, können Sie den Befehl find verwenden. Der folgende Befehl sucht nach der Datei mit dem Namen ``/boot/grub/stage1'' und gibt die gefundene Partition aus.

grub> find /boot/grub/stage1
 (hd0,5)

Wenn Sie nun die Wurzelpartition richtig gesetzt haben, können Sie mit dem Befehl setup den GRUB-Bootsector installieren. Der folgende Befehl installiert GRUB im MBR der ersten Festplatte.

grub> setup (hd0)

Wollen Sie dagegen GRUB im Bootsector der ersten Partition auf dem ersten Laufwerk installieren, dann müssen Sie folgenden Befehl eingeben.

grub> setup (hd0,0)

Nun können Sie GRUB auch ohne Bootdiskette laden.


12.2.3.2 Installation mit grub-install

Auch hier als erstes eine Warnung: Die Installation mit grub-install, das im Prinzip nur ein Shell-Skript für das eigentliche Programm grub ist, gilt als problematisch. In bestimmten Situtation kann die Installation schief gehen. Also halten Sie eine Bootdiskette bereit um den Rechner nach einem Fehler doch nochmal starten zu können.

Ansonsten ist die Verwendung von grub-install relativ einfach. Sie müssen im Prinzip nur das Laufwerk angeben, in dessen (Master-)Bootsector GRUB installiert werden soll. So installiert der folgende Befehl GRUB im MBR der ersten Platte.

defiant:~> grub-install /dev/hda

Sollte sich aber das Bootverzeichnis sich nicht auf der Rootpartition befinden, dann müssen Sie noch das Verzeichnis angeben. Sie haben z. B. für das Bootverzeichnis eine seperate Partition angelegt. Dann muß grub-install folgendermaßen verwendet werden.

defiant:~> grub-install --root-directory=/boot /dev/hda


12.2.4 Erstellung einer GRUB-Bootdiskette

Wir brauchen für eine Grub-Bootdiskette eine leere formatierte Diskette. Die Diskette können Sie ganz einfach mit dem Befehl fdformat (10.4.2) formatieren.

defiant:~ # fdformat /dev/fd0

Der Befehl badblocks (11.2.3) wird zum Testen von Datenträgern verwendet. Wird badblocks mit dem Schalter -w zusammen verwendet, so wird ein destruktiver Schreib- und Lesetest des Datenträgers durchgeführt. Danach wissen wir ob die Diskette in Ordnung ist, und daß sie auf jeden Fall keine Daten mehr enthält.

defiant:~ # badblocks -w /dev/fd0

Wir schreiben zuerst den ersten Teil von GRUB in den MBR der Diskette. Dazu wechseln wir zuerst in das GRUB-Verzeichnis. Das GRUB-Verzeichnis nach der Anleitung /usr/share/grub/i386-pc. Bei SuSE finden Sie bis Version 9.0 die GRUB-Dateien im Verzeichnis /usr/lib/grub/, ab Version 9.1 im Verzeichnis /usr/lib/grub/i386-pc.

enterprise:~ # cd /usr/lib/grub/
enterprise:/usr/lib/grub # ls -l
insgesamt 212
-rw-r--r--    1 root     root         8544 2002-09-11 01:56 e2fs_stage1_5
-rw-r--r--    1 root     root         8176 2002-09-11 01:56 fat_stage1_5
-rw-r--r--    1 root     root         7520 2002-09-11 01:56 ffs_stage1_5
-rw-r--r--    1 root     root         9248 2002-09-11 01:56 jfs_stage1_5
-rw-r--r--    1 root     root         7712 2002-09-11 01:56 minix_stage1_5
-rw-r--r--    1 root     root        10432 2002-09-11 01:56 reiserfs_stage1_5
-rw-r--r--    1 root     root          512 2002-09-11 01:56 stage1
-rw-r--r--    1 root     root       105124 2002-09-11 01:56 stage2
-rw-r--r--    1 root     root         7168 2002-09-11 01:56 vstafs_stage1_5
-rw-r--r--    1 root     root        10024 2002-09-11 01:56 xfs_stage1_5

Mit dem Befehl dd können wir das Images des Grub-MBR (stage1) in den MBR der Diskette spielen.

enterprise:/usr/lib/grub # dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 Records ein
1+0 Records aus

Der zweite wesentlich größere Teil des Bootloaders (stage2) wird in die Blöcke dahinter geschrieben.

enterprise:/usr/lib/grub # dd if=stage2 of=/dev/fd0 bs=512 seek=1
205+1 Records ein
205+1 Records aus

Wenn wir jetzt den Rechner runterfahren und dann von der Diskette booten, sollte die Grub-Shell erscheinen. Gehen wir mal davon aus, daß der Linux-Kernel auf der zweiten Partition der ersten Platte im Verzeichnis /boot liegt. Dann können wir in der GRUB-Shell mit den folgenden Kommandos das Linux-System starten.

grub> root (hd0,1)
grub> kernel /boot/vmlinuz root=/dev/hda2
grub> boot

Und schon bootet das Linux-System.

Der Windows-Kernel ist leider nicht multibootfähig und daher kann GRUB ihn auch nicht direkt starten. Um trotzdem mit diesen Betriebssystemen arbeiten zu können greift GRUB zu einem Hilfsmittel. Mit einem sogenannten Chain-Loading startet GRUB einfach den Bootloader des Betriebssystem und startet damit die Bootsequenz. Als erstes wird das GRUB-Wurzelverzeichnis auf die entsprechende Partition gelegt. Hier ist es die erste Partition der ersten Platte. Dann wird diese Partition aktiv geschaltet. Dann wird der Bootsektor und damit der Bootloader gelesen. Nun besitzt GRUB alle Informationen um den Bootvorgang einzuleiten.

grub> rootnoverify (hd0,0)
grub> makeactive (hd0,0)
grub> chainloader +1
grub> boot


12.3 LILO

Der von Werner Almesberger geschriebene LILO (LInux LOader) war wohl der am weitesten verbreitete Bootmanager (boot loader) unter Linux. Inzwischen macht ihm der modernere, mächtigere und einfacher zu konfigurierende GRUB diese Position streitig. LILO kann sich auf der Festplatte oder auf einer Bootdiskette befinden, und wird ausgeführt, wenn das System geladen wird. Einige der Eigenschaften von LILO sind:

LILO besteht aus zwei Teilen. Der erste Teil befindet sich normalerweise im Master Boot Record (MBR) der Festplatte. Dieser Programmteil wird während des Bootvorgangs vom BIOS gestartet. Seine Aufgabe besteht darin, den größeren zweiten Teil zu starten, der sich irgendwo anders auf einem Medium befinden kann. Der zweite Teil nun bietet dem Benutzer eine Möglichkeit zur Auswahl des gewünschten Betriebssystems, findet den Kernel, lädt ihn in den Speicher und startet ihn. Die Zweiteilung ist notwendig, da der MBR nur sehr wenig Platz (meistens nur 1 Block) bietet. Daher ist der erste Teil sehr kompakt und dient nur als Starter für den größeren zweiten Teil.

Da LILO auch andere Betriebssysteme laden kann, ist er bestens dafür geeignet als Wahlschalter für Systeme mit mehreren installierten Betriebssystemen zu agieren.

Wurde keine Wahlmöglichkeit geschaffen, dann wird das standardmäßig eingestellte Betriebssystem gebootet. Durch das Drücken einer Taste (Alt-, Shift- oder Strg-Taste) oder einem Eintrag in der /etc/lilo.conf kann dieser Vorgang abgebrochen und ein Boot-Prompt angezeigt werden.
BOOT:
oder auch
LILO:

Am Boot-Prompt können Sie den Namen des zu ladenden Betriebssystems angeben. Mit der Tab-Taste oder der Eingabe eines `?' wird Ihnen eine Liste der zu bootenden Betriebssysteme angezeigt. Sollte Sie keine Entscheidung treffen, so bootet LILO nach einer voreingestellten Zeit automatisch das erste Betriebssystem in der Liste.

LILO: <TAB>
linux*     windoof     oldlinux     betalinux

Beim Eintippen des Namens des Betriebssystems können Kernelparameter angehängt werden. Dies wird oft dazu benutzt das System im Single-User-Modus zu starten.

Die Einstellungen von LILO werden in seiner Standardkonfigurationsdatei /etc/lilo.conf festgelegt. Ein Bootloader wird normalerweise bei der Installation angelegt. Soll der Bootloader später verändert werden, so müssen die Änderungen in der Konfigurationsdatei noch in das System übertragen werden. Diese Aufgabe übernimmt das Programm lilo.


12.3.1 lilo

Der Befehl lilo entnimmt aus der Konfigurationsdatei /etc/lilo.conf Informationen über die zu startenden Kernel, Bildschirmeinstellungen, Bootplatte etc. und konfiguriert damit den Bootloader.
lilo [OPTIONEN]

lilo liest die Konfigurationsdatei und codiert die Informationen auf Basis der physikalischen Festplattenkonfiguration. (Was befindet sich in welchem physikalischem Block.) Dies ist notwendig, da es zum Startzeitpunkt noch kein Dateisystem bzw. keine Dateiverwaltung gibt. Diese Informationen werden in einer Map-Datei (z. B. /boot/map) gespeichert.

Um LILO ganz normal zu installieren reicht ein Aufruf ohne Parameter. Es können aber verschiedenste Optionen mit übergeben werden. Eine Übersicht über diese Schalter liefert Tabelle 12.1.


Tabelle 12.1: Optionen des Befehls lilo
Option Aktion
-b BOOTDEV Gibt die Bootplatte an
-C DATEINAME Andere Konfigurationsdatei verwenden
-c Beschleunigtes Booten durch zusammenfassendes Lesen von benachbarten Sektoren
-D KERNEL Benutze den Kernel mit der angegebenen Bezeichnung
-d ZENTELSEK Wartezeit bis zum automatischen Booten
-f DATEINAME Datei für die Plattenparameter (Standard: /etc/disktab)
-I Fragt nach dem Pfad für den Kernel
-i DATEINAME Name der Bootsectordatei (Standard: /boot/boot.b)
-l Erzeugt lineare Sektoradressen
-m DATEINAME Name für Map-Datei vorgeben
-P [fix|ignore] Berichtigt oder ignoriert beschädigte Partitionstabellen
-q Listet die Namen und Orte der zu bootenden Kernel aus der Map-Datei
-R KOMMANDO Setzt den Standard für den nächsten Bootvorgang
-r VERZEICHNIS Ändert die Wurzel des Betriebssystem vor allem Anderen;
  wird für die Fehlerbehebung verwendet
-S DATEINAME Legt fest, wo der alte Bootsektor gespeichert werden soll;
  alte Sicherungen werden überschrieben
-s DATEINAME Legt fest, wo der alte Bootsektor gespeichert werden soll;
  alte Sicherungen werden nicht überschrieben
-t Testen der Konfiguration ohne Installation
-u oder -U Deinstallation von LILO
-v LILO liefert ausführliche Informationen über seine Arbeit


Meistens werden Sie aber eine Konfigurationsdatei bei Ihren Aufrufen von LILO verwenden. Bei der Verwendung einer Konfigurationsdatei müssen Sie Schlüsselworte anstatt Optionen verwenden. Die Tabelle 12.2 zeigt die Optionen mit ihren dazugehörigen Schlüsselworten.


Tabelle 12.2: Optionen und Schlüsselworte für LILO
Option Schlüsselwort
-b BOOTDEV boot=BOOTDEV
-c compact
-D KERNEL default=KERNEL
-d ZENTELSEK delay=ZEHNTELSEK
-f DATEINAME disktab=DATEINAME
-i DATEINAME install=DATEINAME
-l linear
-m DATEINAME map=DATEINAME
-P fix fix-table
-P ignore ignore-table
-S DATEINAME force-backup=DATEINAME
-s DATEINAME backup=DATEINAME
-v verbose=LEVEL



12.3.2 /etc/lilo.conf

Die Standardkonfigurationsdatei für lilo ist /etc/lilo.conf. Hier ein Beispiel für die Konfigurationsdatei.
 
# LILO Konfigurations-Datei
boot=/dev/hda
vga=normal
read-only
prompt
timeout=100
# End LILO global Section
#
other = /dev/hda1
  label = win
  table = /dev/hda
#
image = /boot/vmlinuz
  root = /dev/hda3
  label = linux
#
image = /boot/vmlinuz.old
  root = /dev/hda3
  label = oldlinux
  password=hamster

Es können Parameter wie append, ramdisk, read-only, read-write, root und vga an den Kernel weitergegeben werden. Dies kann global oder auch in den einzelnen Image-Sektionen passieren. So kann z. B. für die Fehlerbehebung ein Kernel in eine RAM-Disk geladen werden. Genauso können Sie Ihr System für den Bootvorgang als Nur-Lesend definieren.

Wenn Sie die Konfigurationsdatei geändert haben, ist es nötig das Kommando /sbin/lilo auszuführen, damit die Änderungen auch in den LILO übernommen werden. Führen Sie also das Kommando nach jeder Änderung der Konfigurationsdatei aus. Auch bei Änderungen der Systemkonfiguration, wie z. B. Partitionswechsel und Kernelkompilierung muß der Befehl ausgeführt werden, damit LILO sauber weiter arbeiten kann.

12.3.2.1 Parameter

boot
Der Parameter boot legt fest, auf welchem Datenmedium sich der Bootsektor befindet. Für PCs mit IDE-Festplatten können das Geräte wie z. B. /dev/hda, /dev/hdb etc. sein.

read-only
Durch das Setzen dieses Parameters wird das Wurzeldateisystem als ``nur lesbar'' gemountet. Normalerweise wird es dann durch die weitere Startprozedur als ``schreibbar'' wiedergemountet.

prompt
Wird dieser Parameter gesetzt, so wird dem Benutzer beim Start ein Bootmenü angeboten. Fehlt der Parameter, so kann der Benutzer durch Drücken der <Shift>-, <Strg>- oder <Alt>-Taste trotzdem ins Bootmenü gelangen.

timeout
Der Parameter timeout setzt die Zeit in Zehntelsekunden fest, in der der Benutzer sein System auswählen kann, bevor das System mit der Standardeinstellung gestartet wird. Ist der Parameter prompt gesetzt, muß timeout festgelegt werden um ein automatisches Starten zu ermöglichen.

map
Der Parameter muß nur gesetzt werden, wenn eine andere Map-Datei als die vom System voreingestellte /boot/map verwendet werden soll.

install
Dieser Parameter legt die Datei fest, die als Bootsektor installiert werden soll. Voreingestellt ist /boot/boot.b.

image
Dieser Parameter legt zusammen mit label und root die Kernel fest, die im Bootmenü angeboten werden sollen. Für jeden Kernel bzw. Betriebssystem wird ein Eintrag benötigt.

label
Dieser optionale Parameter legt den Text fest, unter dem der Kernel im Auswahlmenü erscheint.

root
Mit diesem Parameter, der stets hinter image kommt, wird das Wurzelverzeichnis für das Betriebssystem bzw. die Kernelvariante festgelegt.

other
Dieser Parameter entspricht image, wird aber für andere Betriebssystem wie z. B. Windows verwendet.

password
Es ist manchmal sinnvoll den Zugriff auf einzelne Images zu beschränken. Dies geschieht über die Option password. Hiermit können Sie für jedes Image ein individuelles Passwort festlegen. Falls Sie das machen, achten Sie auf jeden Fall darauf, daß die Datei /etc/lilo.conf nur für den Benutzer root lesbar und schreibbar ist.

mandatory
Wird diese Option gesetzt, gilt das Passwort für dieses Image auch für alle anderen Images.

restricted
Das Passwort wird nur abgefragt, wenn der Kernel mit zusätzlichen Parametern gestartet wird.

12.3.3 Sicherheit: Zugriff aufs System ohne Passwort

Was macht man, wenn man das Passwort für root vergessen hat. Wer schlau war hat sich inzwischen einen zweiten Administrator angelegt (8.3.6). Wenn nicht, kann man über Disketten bzw. CD ein Rettungssystem starten. Dieses ist ein eigenständiges Linux-System. Sie brauchen dann nur die Wurzelpartition (/) mounten und können nun entweder das Passwort in der Datei /etc/shadow ändern oder in der Datei /etc/passwd einem anderen Benutzer, von dem Sie dann hoffentlich noch das Passwort kennen, die UID 0 zuweisen.

Es geht auch ohne Rettungssystem. Wenn Sie beim Starten des Image den Parameter init=/bin/bash an den Imagenamen anhängen, startet der Kernel gleich eine Bash.

LILO: linux init=/bin/bash

Das Wurzelsystem ist aber nur als Read-Only eingebunden. Es muß daher noch als lesend und schreibend wiedergemountet werden.

(none):/# mount -t ext3 -o rw,remount /dev/hda2 /
EXT3 FS 2.4-0.9.17, 10 Jan 2002 on ide0(3,2), internal journal

Und schon können die Benutzerdateien von Hand verändert werden. Es gibt nur zwei Nachteile am System. Der Pfad ist etwas sehr dürftig und die englische Tastatur ist eingeschaltet.

Da es so einfach ist das Passwort von root zu ändern oder sich einen anderen Benutzer zu root zu machen, muß ich mein System schützen. Denken Sie daran, jedes System, an das jemand pysikalisch herankommt, ist knackbar. Im einfachsten Fall baut er nur die Festplatte aus.

Das Booten eines anderen Systems über externe Medien (Floppy oder CD) verhindern Sie dadurch, daß in der Bootreihenfolge die Festplatte an erster Stelle kommt. Damit nicht jeder diese Reihenfolge umstellen kann, schützen Sie dann das BIOS noch mit einem Passwort.

Die Möglichkeit über LILO und init können Sie verhindern, in dem Sie alle Linux-Images mit einem Passwort schützen. Zusätzlich geben Sie noch den Parameter restricted dazu. Dann wird das Passwort nur abgefragt, wenn manuell Parameter beim Booten mit angegeben werden. Ohne Parameter startet das System wie sonst auch.

12.3.4 Fehlererkennung

Wenn LILO geladen wird, zeigt er Buchstabe für Buchstaben seinen Namen an. Dabei steht jeder Buchstabe für einen bestimmten Bereich, der abgearbeitet wird. Stürzt LILO beim Laufen ab, so kann man anhand der dargestellten Zeichen erkennen, an welcher Stelle ein Problem auftrat.

nichts - LILO wurde nicht geladen. Er ist entweder nicht installiert oder die Partition ist nicht aktiv.

L FEHLERCODE - Wahrscheinlich ein Medienfehler.

LI - Der erste Teil wurde erfolgreich beendet, aber der zweite Teil wurde nicht ausgeführt. Das kann einem Plattengeometriefehler liegen oder die Datei /boot/boot.b wurde nicht gefunden.

LIL - Der erste und zweite Teil wurde erfolgreich beendet. Die Map-Datei kann nicht geladen werden. Wahrscheinlich ein Medienfehler.

LIL? - Der Loader für den zweiten Teil wurde an eine falsche Adresse geladen. Wahrscheinlich Geometriefehler oder die Datei /boot/boot.b konnte nicht gefunden werden.

LIL- - Beschädigte Beschreibungstabelle. Wahrscheinlich ein Geometriefehler oder die Map-Datei konnte nicht gefunden werden.

LILO - LILO wurde erfolgreich geladen.

Es kann sein, daß Sie hexadezimale Zahle nach dem ersten `L' sehen. Diese werden zufällig erzeugt und weisen indirekt auf eine temporäres Plattenproblem hin. Wenn LILO lädt, ist das Problem nicht behoben. Sie sollten so bald wie möglich ein fsck durchführen.


12.4 Der Init-Daemon

Das Letzte, was der Kernel macht, ist den Init-Daemon (/sbin/initd) zu starten. Dieser bleibt so lange aktiv, bis das System heruntergefahren wird. Damit ist init der erste laufende Prozeß. Alle weiteren Prozesse werden entweder vom Init-Daemon direkt oder indirekt durch Subprozesse von init gestartet. Dieser Daemon ist also für die Erstellung der Prozesse verantwortlich, die der Rest des Systems nutzt. Als Beispiel ist hier die Login-Shell zu nennen. Daneben sorgt er dafür, das bestimmte Prozesse nach ihrem Ende wieder neu gestartet werden. Er sorgt z. B. dafür, daß nach dem Logout die Konsole neu gestartet wird, um eine erneutes Einloggen zu ermöglichen. Bei einem Shutdown ist init der letzte noch laufende Prozeß, der sich um das korrekte Beenden aller anderen Prozesse kümmert.

Der Init-Daemon und seine Aktionen werden durch die Konfigurationsdatei /etc/inittab gesteuert.


12.4.1 /etc/inittab

Jede Anweisungszeile der Datei /etc/inittab besteht aus vier Feldern. Von links nach rechts gesehen sind dies die ID, der Runlevel, die Aktion und der Prozess.

12.4.1.1 Feld: ID

Die ID besteht aus ein oder zwei Zeichen, die den Einstiegspunkt bestimmen. Sie muß eindeutig sein und ist oft der Gerätename.


12.4.1.2 Feld: Runlevel

Dies Feld gibt den Runlevel an, für den diese Zeile gültig ist. Hier können mehrere Runlevel angegeben werden. Wird das Feld leer gelassen, dann gilt die Anweisung für alle Runlevels.

12.4.1.3 Feld: Aktion

Mit der Aktion wird angegeben, wie mit dem Eintrag verfahren werden soll. So kann z. B. festgelegt werden, daß der Prozess automatisch neu gestartet wird, wenn er beendet wurde. Eine Übersicht über die möglichen Einträge bietet die Tabelle 12.3. Weitere Informationen erhalten Sie mit man inittab.


Tabelle 12.3: Einträge für das Feld Aktion in der /etc/inittab
Eintrag Aktion
boot Startet, wenn die /etc/inittab zum ersten Mal gelesen wird
bootwait Startet nach den Einträgen für boot
ctrlaltdel Startet nach der Tasteneingabe <Strg>+<Alt>+<Entf>
initdefault Definiert den Standard-Runlevel
once Startet beim Wechsel eines Runlevels
ondemand Hält Prozesse in bestimmten Runlevels am Laufen
powerfail Startet, wenn ein Stromausfallsignal empfangen wurde
sysinit Startet, bevor die Einträge boot und bootwait ausgeführt werden.
respawn Startet den Prozeß nach seinem Ende neu
wait Startet den Prozeß einmal beim Erreichen des Runlevels und init wartet auf sein Ende


12.4.1.4 Feld: Prozeß

Im letzten Feld wird das Linux-Kommando oder das Programm aufgeführt, daß in der Situation gestartet werden soll.

Das folgende Listing gibt eine gekürzte Fassung der /etc/inittab der SuSE-Linux 6.4 Distribution wieder.

 
# /etc/inittab

# default runlevel
id:2:initdefault:

# check system on startup
# first script to be executed if not booting in emergency (-b) mode
si:I:bootwait:/sbin/init.d/boot

# /sbin/init.d/rc takes care of runlevel handling
#
# runlevel 0 is halt
# runlevel S is single-user
# runlevel 1 is multi-user without network
# runlevel 2 is multi-user with network
# runlevel 3 is multi-user with network and xdm
# runlevel 6 is reboot
l0:0:wait:/sbin/init.d/rc 0
l1:1:wait:/sbin/init.d/rc 1
l2:2:wait:/sbin/init.d/rc 2
l3:3:wait:/sbin/init.d/rc 3
l6:6:wait:/sbin/init.d/rc 6

# what to do in single-user mode
ls:S:wait:/sbin/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

# what to do when power fails/returns
pf::powerwait:/sbin/init.d/powerfail    start
pn::powerfailnow:/sbin/init.d/powerfail now
po::powerokwait:/sbin/init.d/powerfail  stop

# getty-programs for the normal runlevels
# <id>:<runlevels>:<action>:<process>
# The "id" field  MUST be the same as the last
# characters of the device (after "tty").
1:123:respawn:/sbin/mingetty --noclear tty1
2:123:respawn:/sbin/mingetty tty2
3:123:respawn:/sbin/mingetty tty3
4:123:respawn:/sbin/mingetty tty4
5:123:respawn:/sbin/mingetty tty5
6:123:respawn:/sbin/mingetty tty6

# end of /etc/inittab


12.4.2 Die Runlevel

Ein Runlevel definiert einen Satz von Prozessen, der als Teil der Bootsequenz gestartet wird. Das kann von einem minimalen Satz von Prozessen zur Systemadministration bis zu einer Vielzahl von Prozessen für alle eingerichteten Geräte reichen.

Die Nummer, die mit dem Runlevels verknüpft sind, variieren mit den verschiedenen Distributionen. Sie werden in der /etc/inittab aufgeführt. So sieht z. B. der Eintrag für SuSE-Linux 6.4 so aus:

 
# runlevel 0 is halt
# runlevel S is single-user
# runlevel 1 is multi-user without network
# runlevel 2 is multi-user with network
# runlevel 3 is multi-user with network and xdm
# runlevel 6 is reboot

und der für SuSE-Linux 7.3 so aus:

 
# 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 Einteilung der Runlevel von 7.3 ist auch aktuell (8.1) noch gültig.

Um zu bestimmen, in welchem Runlevel Sie sich gerade befinden, können Sie den Befehl runlevel verwenden.

Die Runlevels 0 und 6 sind normalerweise reserviert für die Zustände halt und reboot. Aber egal wie die Nummernvergabe auch läuft, der Init-Daemon arbeitet nur die Zeilen der /etc/inittab ab, die mit dem Runlevel verknüpft sind.

Der Runlevel Single-User unterscheidet sich etwas von den anderen Runlevels. Er wird gerne zur Administration und Konfiguration des Systems verwendet, wie z. B. die Reparatur eines beschädigten Dateisystems. Niemand kann sich in das System einloggen, wenn es sich in diesem Modus befindet. Trotzdem können mehrere Prozesse gleichzeitig ausgeführt werden. Dieser Modus ist auch der einzige, in dem der Init-Daemon nicht die Datei /etc/inittab ausliest und abarbeitet. Normalerweise starten Sie das Programm /bin/su um dann als Superuser zu arbeiten.

Wenn Sie einen höheren Runlevel einstellen als den Single-User-Modus, dann startet das System immer im Multiuser-Betrieb. Dann werden die Zeilen mit den Aktionen sysinit, boot und bootwait ausgeführt. Oft werden in diesen Zeilen auch die Dateisysteme gemountet.

Danach führt der Init-Daemon die anderen Zeilen aus, die mit dem Runlevel verknüpft sind. Der angestrebte Runlevel wird in der Zeile
id:2:initdefault:
definiert. Denken Sie daran, daß diese Zeile keinen Prozeß startet, sondern den Runlevel festlegt, mit dem gestartet werden soll. Ein Wechsel des Runlevels erfolgt mit den Befehlen init und telinit.

Im nächsten Abschnitt wird definiert, welche Startskripte ausgeführt werden sollen. Diese Zeile könnte lauten
si::sysinit:/etc/rc.d/rc.sysinit
oder z. B. bei SuSE
si:I:bootwait:/sbin/init.d/boot

Die ID si am Anfang der Zeile wird intern vom Init-Daemon verwendet. Diese Zeile startet das Skript rc.sysinit, welches Aufgaben wie die Aktivierung der Swap-Partition, Starten von fsck und Mounten des Dateisystems übernimmt.

Der folgende Abschnitt definiert die Skripte, die für den jeweiligen Runlevel ausgeführt werden sollen. Sie stehen im Verzeichnis /etc/rc.d bzw. bei SuSE im Verzeichnis /etc/init.d.

l0:0:wait:/sbin/init.d/rc 0
l1:1:wait:/sbin/init.d/rc 1
l2:2:wait:/sbin/init.d/rc 2
l3:3:wait:/sbin/init.d/rc 3
l6:6:wait:/sbin/init.d/rc 6

Das rc-Skript wird mit einem Parameter, der den Runlevel angibt, aufgerufen. Dabei führt es Skripte aus dem Verzeichnis rcn.d aus, wobei n für die Nummer des Runlevels steht.

Daneben kann rc auch Kernel-Module aufrufen. Dies sind Teile des Kernels, die nicht fest einkompiliert wurden. Sie können bei Bedarf nachgeladen und wieder entladen werden. Meistens handelt es sich hierbei um Gerätetreiber, die nicht oft benötig werden.

Die Datei /etc/modules.conf enthält die Liste der Module mit ihren Parametern. Oft handelt es sich bei den Parametern um I/O-Adressen und Interrupts. Ein Ausschnitt aus der /etc/modules.conf könnte so aussehen.

 
# Aliases - specify your hardware

alias parport_lowlevel    parport_pc
options parport_pc io=0x378 irq=none,none

isp16_cdrom_type=Sanyo

options ne      io=0x300

alias block-major-1       rd
alias block-major-2       floppy

alias char-major-4        serial
alias char-major-5        serial
alias char-major-6        lp
alias char-major-9        st

Als nächstes werden die Prozesse abgearbeitet, die bei jedem Runlevel ausgeführt werden. Dies ist u. a. der getty-Prozeß, der die virtuellen Terminals anlegt.

 
# getty-programs for the normal runlevels
1:123:respawn:/sbin/mingetty --noclear tty1
2:123:respawn:/sbin/mingetty tty2
3:123:respawn:/sbin/mingetty tty3
4:123:respawn:/sbin/mingetty tty4
5:123:respawn:/sbin/mingetty tty5
6:123:respawn:/sbin/mingetty tty6

Nach dem Lesen und abarbeiten der /etc/inittab bleibt der Init-Daemon aktiv. Er überwacht das System auf Anweisungen den Runlevel zu ändern oder ob ein Prozeß gestoppt wurde. Wenn einer der Kindsprozesse von init gestoppt ist, macht der Daemon zwei Sachen.

  1. Er liest die /etc/inittab wieder. Wenn dort der erneute Start als Aktion eingetragen ist, wird der Prozeß wieder neu gestartet.

  2. Dann trägt er in die Dateien /var/log/wtmp und /var/run/utmp die Tatsache ein, daß der Prozeß beendet wurde und aus welchem Grund.

Genauso liest der Daemon die /etc/inittab ein, wenn der Runlevel geändert wurde oder er das Signal über einen Stromausfall bekommt.

Änderungen in der /etc/inittab können Sie mit einem einfachen Editor machen während das System läuft. Bevor die Änderungen aber wirksam werden, muß erst wieder die /etc/inittab gelesen werden. Dies passiert

Seien Sie sehr vorsichtig und gründlich, wenn Sie die Datei /etc/inittab bearbeiten wollen. Ein Fehler in der Datei kann dazu führen, daß Sie sich nicht mehr am System einloggen können. Legen Sie deshalb vorher eine Kopie der Datei an und erstellen Sie eine Bootdiskette für den Notfall. Es besteht die Möglichkeit, daß Sie noch im Single-User-Modus starten können, darauf sollten Sie aber nicht vertrauen. Auch ist es möglich, daß Sie eine Endlosschleife programmieren, so daß ein Prozeß immer wieder gestartet wird. Für diesen Fall überprüft der Init-Daemon, ob ein Prozeß innerhalb von 2 Minuten 10 mal gestartet wurde. Er gibt dann eine Warnung aus und wartet 5 Minuten, bevor er den Prozeß wiederum startet.


12.4.3 runlevel

Der Befehl runlevel ermittelt den aktuellen und den vorherigen Runlevel.

runlevel [UTMP]

Der Befehl liest dafür die Datei /var/run/utmp aus um den Runleveleintrag zu finden und gibt dann den alten und neuen Runlevel getrennt durch ein Leerzeichen aus. Falls es keinen vorherigen Runlevel gegeben hat, wie es nach einem Start der Fall ist, dann wird der Buchstabe N angezeigt.

Ist der Runlevel nicht ermittelbar, dann zeigt runlevel das Wort ``unknown'' und beendet sich mit einem Fehlersignal.

Optional kann der genaue Name der Datei utmp mit Pfad angegeben werden, wenn sich sich z. B. nicht in /var/run befindet.

12.4.3.1 Beispiel

Der Befehl runlevel zeigt den aktuellen und vorherigen Runlevel an.
ole@enterprise:~> /sbin/runlevel
N 5

Die Informationen dazu bezieht er dabei aus der Datei /var/run/utmp.12.5

ole@enterprise:~> od -c /var/run/utmp | grep ^00006
0000600 001  \0  \0  \0   5   N  \0  \0   ~  \0  \0  \0  \0  \0  \0  \0
0000620  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000640  \0  \0  \0  \0  \0  \0  \0  \0   ~   ~  \0  \0   r   u   n   l
0000660   e   v   e   l  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0


12.4.4 init

Der Befehl init ermöglich das Wechseln des Runlevels.
init [OPTIONEN] [RUNLEVEL]

Beim Aufruf des Befehl sendet init ein Stopsignal an alle Prozesse, die nicht für den neuen Runlevel definiert sind. Danach werden die Prozesse ``getötet'' und die Prozesse für den Runlevel, die noch nicht laufen, werden gestartet.

Die Eingabe des Runlevels `s' oder `S' bewirkt einen Wechsel in den Single-User-Modus. Die Angabe `q' führt zu einem erneuten Einlesen und abarbeiten der /etc/inittab.

12.4.4.0.1 Beispiel

 
Um das X-Window-System mit SAX zu konfigurieren, sollte es möglichst beendet werden. Ist die graphische Anmeldung aktiv, so startet sich das X-Window-System nach einer Beendigung automatisch neu für den Anmeldeschirm. Wenn nun der Windowmanager keine Option zum Wechseln in den Konsolenmodus anbietet, so kann man dies durch folgende Schritte erreichen.

  1. Wechseln Sie zur Textkonsole tty1 (oder auch einer anderen ;-)).
  2. Loggen Sie sich als root ein.
  3. Wechseln Sie mit dem Befehl init 3 in den Runlevel für die Konsole.
  4. Das X-Window-System ist jetzt noch immer aktiv. Wenn Sie es aber jetzt beenden, wird die graphische Anwendung nicht mehr automatisch gestartet.


12.4.5 telinit

Das Kommando telinit ist im Prinzip nur ein Link auf das Programm init.
telinit [OPTIONEN] [RUNLEVEL]

Der Befehl sorgt dafür, daß init erst mit 5 Sekunden Verzögerung ausgeführt wird. Mit dem Schalter -t SEKUNDEN kann eine andere Verzögerung definiert werden.


12.4.6 Automatisches Starten von Diensten

Soll ein Dienst beim Booten des Systems automatisch gestartet werden, so kann das nur durch den Daemon initd erfolgen. Dafür müßte jedes Programm in der /etc/inittab zusammen mit den passenden Runleveln eingetragen werden. Dies hat man durch die Einführung des Skriptes /etc/init.d/rc erleichtert.

enterprise:/etc/init.d # head -15 rc
#! /bin/bash
#
# Copyright (c) 1996-2002 SuSE Linux AG, Nuernberg, Germany.
# All rights reserved.
#
# Author: Florian La Roche <feedback@suse.de> 1996
#         Werner Fink <werner@suse.de> 1994-99,2000-2001
#
# /etc/init.d/rc   --    The Master Resource Control Script
#
# This file is responsible  for  starting/stopping  services
# when the runlevel changes.  If the action for a particular
# feature in the new run-level is the same as  the action in
# the previous run-level, this script will neither start nor
# stop that feature.

In dem Verzeichnis /etc/init.d stehen die Skripte zum Starten der Programme bzw. Dienste. Für jeden Runlevel existiert ein Verzeichnis in dem sich nun Links auf die Skripte befinden, die in diesem Runlevel gestartet werden sollen.

enterprise:/etc/init.d # ls -ld rc*
-rwxr-xr-x    1 root     root         6082 Mär  6 17:56 rc
drwxr-xr-x    2 root     root         4096 Mär 21 01:14 rc0.d
drwxr-xr-x    2 root     root         4096 Mai  2 22:07 rc1.d
drwxr-xr-x    2 root     root         4096 Mai  2 22:07 rc2.d
drwxr-xr-x    2 root     root         4096 Mai  6 20:19 rc3.d
drwxr-xr-x    2 root     root         4096 Mär 21 01:14 rc4.d
drwxr-xr-x    2 root     root         4096 Mai  6 20:19 rc5.d
drwxr-xr-x    2 root     root         4096 Mär 21 01:14 rc6.d
drwxr-xr-x    2 root     root         4096 Mai  2 22:07 rcS.d
enterprise:/etc/init.d # ls -lG rc1.d
insgesamt 8
lrwxrwxrwx    1 root            9 Mai  2 22:07 K03single -> ../single
lrwxrwxrwx    1 root            9 Mai  2 22:07 K12splash -> ../splash
lrwxrwxrwx    1 root            8 Mai  2 22:07 K13fbset -> ../fbset
lrwxrwxrwx    1 root           10 Mai  2 22:07 K16hotplug -> ../hotplug
lrwxrwxrwx    1 root           10 Mai  2 20:25 S07hotplug -> ../hotplug
lrwxrwxrwx    1 root            8 Mai  2 20:33 S10fbset -> ../fbset
lrwxrwxrwx    1 root            6 Mai  2 20:33 S11kbd -> ../kbd
lrwxrwxrwx    1 root            9 Mai  2 20:33 S11splash -> ../splash
lrwxrwxrwx    1 root            9 Mai  2 20:23 S20single -> ../single

Die Links, die mit ``K'' (kill) beginnen, stehen für die Dienste, die beim Verlassen des Runlevels beendet werden sollen und die Links, die mit ``S'' (start) beginnen, beziehen sich auf Dienste, die in diesem Runlevel zu starten sind. Im dem Bootskript selber steht oft drinnen, in welchen Runleveln dieser Dienst gestartet werden soll, wenn er überhaupt gestartet werden soll.

Um nun einen Dienst beim Booten starten zu können Sie nun entweder per Hand die Skripte mit Links versehen oder sich komfortabler mit dem Programm insserv behelfen. Unter YaST2 steht ihnen der Runlevel-Editor für diese Aufgabe zur Verfügung.


12.4.7 insserv

Das Programm insserv aktiviert installierte Init-Skripte, in dem es die passenden Links in den Runlevel-Verzeichnissen (/etc/init.d/rcn.d) setzt.

insserv [OPTIONEN] [SKRIPTE]

Dazu wertet das Programm den Kommentarblock des Skriptes aus, wie er z. B. in diesem Skript vorkommt.

enterprise:/etc/init.d # head -18 splash
#! /bin/bash
# Copyright (c) 1995-2000 SuSE GmbH Nuernberg, Germany.
#
# Author: Michael Schroeder <feedback@suse.de>
#
# /etc/init.d/splash
# /usr/sbin/rcsplash
#
# System startup script for console splash screens
#
### BEGIN INIT INFO
# Provides: splash
# Required-Start: $remote_fs fbset
# Required-Stop:
# Default-Start:  1 2 3 5 S
# Default-Stop:
# Description:    Splash screen setup
### END INIT INFO

Optionen
-r Entfernt das Skript aus allen Runlevels
-d Installiert das Skript in den vorgegebenen Runleveln
 

Konfiguriert wird insserv über die Konfigurationsdatei /etc/insserv.conf.

12.5 Linux beenden

Sie sollten niemals Ihr Linux-System einfach abschalten. Es ist üblich, daß der Kernel wichtige Daten wie z. B. die Inode-Tabelle oder frisch geschriebene Daten im RAM vorhält. Diese Daten werden erst dann syncronisiert, wenn der Kernel dafür Zeit hat oder Platz benötigt wird. Wenn Sie nun einfach den Rechner ausschalten, hat der Kernel keine Zeit mehr die Festplatte mit den im RAM gespeicherten Daten zu synchronisieren. Es kann daher zu Datenverlusten kommen bis zu erheblichen Fehlern im Dateisystem. Vor allem kann es zu schwerwiegenden Fehlern kommen, wenn Prozesse gerade aktiv schreibend auf die Festplatten zugreifen.


12.5.1 shutdown

Um das laufende System zu beenden wird der Befehl shutdown eingesetzt.
shutdown [OPTIONEN] WANN [NACHRICHT]

Der shutdown-Befehl beendet alle Prozesse in dem er das SIGTERM-Signal an sie sendet. Als nächstes wird init aufgerufen um den Runlevel zu ändern und die Dateisystem zu unmounten.

Der Shutdown-Vorgang kann zu einem bestimmten Zeitpunkt ausgelöst werden. Mit dem Stichwort now wird der Vorgang sofort eingeleitet. Die Angabe der Minuten als eine positiven Zahl wie z. B. +15 löst den Vorgang nach der angegebenen Zeit aus. Es kann aber auch in der Form hh:mm:ss ein fester Zeitpunkt vorgegeben werden.

Wahlweise kann eine spezielle Nachricht an alle eingeloggten Benutzer gesendet werden. Wird keine Nachricht angegeben, meldet sich das System bei den Benutzern mit einer Standardnachricht.

Optionen
-c Beendet einen laufenden Shutdown-Vorgang
-f fsck wird nach einem Neustart nicht ausgelöst
-F fsck wird nach einem Neustart ausgelöst
-h Anhalten des Systems nach dem Herunterfahren; Runlevel 0
-k Sendet nur die Warnung, fährt das System aber nicht herunter
-n Fährt herunter ohne init aufzurufen
-r Führt einen Neustart nach dem Herunterfahren aus; Runlevel 6
-t SEKUNDEN Zeit zwischen dem ``Töten'' der Prozesse und dem Aufruf von init
 

Nur root hat das Recht den Rechner mit dem Befehl shutdown herunterzufahren. Wenn die Datei /etc/shutdown.allow existiert und der Benutzer befindet sich in der darin enthaltenen Liste, dann kann auch er den Befehl (zusammen mit dem Schalter -a) nutzen.

Denken Sie daran: Schalten Sie nie den Rechner aus, wenn der Shutdown-Vorgang noch nicht beendet worden ist. Der Vorgang ist beendet, wenn der Text
The system is halted
oder
Runlevel 0 is reached
erschien ist.


12.5.2 halt und reboot

Neben shutdown gibt es noch zwei weitere Befehle um den Rechner herunterzufahren. Dies sind die Befehle halt und reboot. Ihre Funktion bedarf wohl keiner weiteren Erklärung.
 
halt [OPTIONEN]
reboot [OPTIONEN]

Wenn Sie die Befehle halt oder reboot aufrufen, wird erst der aktuelle Runlevel überprüft. Ist das System im Runlevel 0 oder 6, dann wird der Befehl ausgeführt. Ansonsten wird das Kommando shutdown -nf ausgeführt.

Weder halt noch reboot senden einen Warnhinweis an die eingeloggten Benutzer noch lassen Sie eine Verzögerung bis zur Ausführung zu.

Optionen
-d Es wird nicht in die Datei /var/log/wtmp geschrieben
-f Der Befehl shutdown wird nicht aufgerufen aber ein halt oder reboot versucht
-i Das Netzwerkinterface wird vor dem Herunterfahren deaktiviert
-n Der Befehl sync wird nicht vor halt oder reboot ausgeführt
-p Schaltet die Energie nach dem Herunterfahren aus
-w Fährt das System nicht herunter, sondern schreibt nur in die Datei var/log/wtmp
 


12.6 Prozeßverwaltung

Jede Anfrage, die an die Shell gesendet wird, wird als Prozeß bezeichnet. Da nun Linux ein Multiuser- und Multitasking-Betriebssystem ist, laufen ständig eine ganze Reihe von Prozessen, z. B. für jeden eingeloggten Benutzer die Login-Shell (meist die bash) oder Prozesse, die die seriellen Schnittstellen und das Netzwerk dahingehend überprüfen, ob ein Benutzer einloggen will.

Die Verwaltung all dieser Prozesse ist eine der Hauptaufgaben des Systems. Zur Verwaltung werden die sogenannten Prozeßkenndaten verwandt. Die wichtigsten sind:

PID:
Die Prozeßnummer, über die eine Interprozeßkommunikation erfolgen kann. Das bekanntest Beispiel hierfür ist das Versenden von Signalen. Das Signal 9 etwa tötet einen Prozeß!
PPID:
Prozeßnummer des Elternprozesses (Parent PID). Jeder Prozeß, bis auf den ersten (besser sollte man sagen den 0.), stammt von einem anderen ab.
Prozeßzustand
kann z. B. sein Running (wird gerade von der CPU bedient), Waiting (wartet auf ein Ereignis, z. B. eine Eingabe), Runnable (ist bereit, hat aber nicht die CPU zur Verfügung) und Zombie (ist eigentlich schon tot, wird aber noch in der Statistik geführt).
Priorität:
Die Nice-Priorität ist eine Zahl, die dem Prozeß beim Start mitgegeben wird. Diese, sein Zustand, die Zeit, die er auf Bedienung durch die CPU gewartet hat gehen ein in die Berechnung der aktuellen Priorität, die letztlich bestimmt, wann der Prozeß wieder CPU-Zeit erhält. Diese Berechnung erfolgen periodisch.
UID, GID:
Benutzer- und Gruppennummer, um den Benutzer zu identifizieren. UID und GID gehen normalerweise ein in die
effektive UID, GID
über die die Rechte des Benutzers kalkuliert werden. Falls die Programmdatei mit dem s-Recht versehen ist, wird die effektive UID oder GID die UID oder GID des Besitzers der Programmdatei. Z. B. ist der Besitzer der Programmdatei /etc/passwd der Benutzer root. Startet ein gewöhnlicher Benutzer dieses Programm erhält dieser Prozeß die effektive UID 0, er wird für den Programmlauf zum Superuser!
kontrollierendes Terminal:
Terminal von dem aus der Prozeß gestartet wurde. Diese Angabe ist insofern wichtig, da der Prozeß seine Ausgaben/Eingaben über diesen Terminal abwickelt! Eine Reihe von Prozessen wird gewöhnlich nicht von einem Terminal aus gestartet (sondern häufig automatisch beim Systemstart). Solche Prozesse ohne Terminal nennt man Dämonprozesse. Sie verrichten in der Regel wichtige Systemdienste. Bekannte Dämonen sind lpd (Druckerdämon), crond (Zeitdienstedämon) oder inetd (für das Netzwerk zuständig).


12.7 Prozeß- und Systemlastüberwachung

Die Überwachung der Prozesse und der Systemlast ist eine der wichtigsten Aufgaben in der Systemadministration. Während bei Desktop-Systemen, die normalerweise kaum Ihre Ressource ausnutzen, in den meisten Fällen außer Kontrolle geratene Prozesse die meisten Schwierigkeiten verursachen, sind bei den stärker geforderten Servern oft Flaschenhälse in Form von ungenügend dimensionierten Ressourcen ein Problem. Als Flaschenhals bezeichnet man die schwächste Systemkomponente, die letztendlich die Geschwindigkeit des Gesamtsystems bestimmt. Solche Flaschenhälse können sein:


12.7.1 Load Average

Der Begriff Load bezeichnet die Auslastung eines Rechners, wie auch die Prozesse, die gerade ausgeführt werden. Ein Maß für die Systemauslastung ist das Load Average. Es ist ein Maß für die Anzahl der Prozesse, die auf ihre Verarbeitung von der CPU warten oder gerade verarbeitet werden, sich also im Zustand Runnable oder Running befinden. Natürlich ist durch die aktuelle Anzahl dieser Prozesse schlecht die Auslastung eines Systems abzuschätzen. Daher werden drei Mittelwerte (1 Minute, 5 Minuten und 15 Minuten) über die Anzahl der Prozesse gebildet. Das heißt also, wir können der Load Average entnehmen, wieviele Prozesse in der letzten Minute, den letzten 5 Minuten und den letzten 15 Minuten im Durchschnitt in der Verarbeitungschlange von der CPU gewartet haben.

Das Load Average wird vom Kernel ermittelt und in der virtuellen Datei /proc/loadavg notiert. Neben den drei Mittelwerte wird auch die aktuelle Anzahl der Prozesse in der Verarbeitungsschlange, die Anzahl aller Prozesse und die PID des zuletzt ausgeführten Prozesses angegeben.

tapico@enterprise:~> cat /proc/loadavg
4.30 1.44 0.50 2/91 4312

Ein Reihe von Tools wie uptime (Abschnitt 12.8.4), top (Abschnitt 12.8.3), w (Abschnitt 8.7.4) und procinfo (Abschnitt 12.8.6) lesen diese Datei aus und zeigen das Load Average an.

Was kann nun aber aus dem Load Average geschlossen werden? Normalerweise bedeutet ein hohes Load Average, daß der Rechner stark ausgelastet ist. Ideal ist ein Load Average von 1, da dann immer ein Prozeß in der Verarbeitungsschlange ist und sofort verarbeitet werden kann. Bei einem Load Average unter 1 hat die CPU teilweise nichts zu tun gehabt. Ist der Load Average über 1, dann müssen im Schnitt die Prozesse etwas warten, bevor Sie an die CPU kommen.

Normalerweise geht ein hoher Load Average auch mit einer hohen durchschnittlichen Rechenauslastung der CPU einher. Sind beide Angaben dauerhaft für das 15-Minuten-Mittel hoch, dann wäre es ratsam die Leistung der CPU zu erhöhen. Ein hohes Load Average muß aber nicht unbedingt zusammen mit einer hohen CPU-Auslastung zusammenhängen. Schauen wir uns doch mal das folgende Beispiel an.

12.7.1.0.1 Beispiel:

Ein Mailserver braucht im Schnitt 5 Minuten um eine Mail zu bearbeiten und auszuliefern. Dies ist ein völlig inakzeptable Leistung. Die Ausgabe des Befehls top liefert folgende Ausgabe.

root@mail-server:~ # top
 1:31pm up 2 days, 4:24, 3 users, load average: 17.03, 16.93, 17.28
 101 processes: 100 sleeping, 1 running, 0 zombie, 0 stopped
 CPU0 states: 1.0% user, 4.1% system, 0.0% nice, 94.0% idle
 CPU1 states: 2.0% user, 6.1% system, 0.0% nice, 91.0% idle
 Mem: 125844K av, 123272K used, 2572K free, 0K shrd, 5740K buff
 Swap: 257000K av, 141920K used, 115080K free 12624K cached
 ...

Auffällig ist die geringe Auslastung der beiden CPUs und das sehr hohe Load Average. Das Problem liegt also nicht in der Geschwindigkeit der CPUs, denn die drehen die meiste Zeit Däumchen. Auffällig ist, daß der Swap-Speicher stark genutzt wird. Dies sollte bei einem Server, der nur als Mail-Server dient, eigentlich nicht vorkommen. Eine Möglichkeit wäre also eine zu geringe Dimensionierung des Arbeitsspeichers. Der Rechner ist hauptsächlich mit der Ein- und Auslagerung von Speicherseiten beschäftigt, die die CPU nicht sehr stark belasten. Allerdings müßte der Mailserver schon sehr stark frequentiert werden um diesen Effekt zu erreichen.

Eine andere Möglichkeit ist eine zu langsame Festplatte. Beim Schreiben und Lesen von der Festplatte wird die CPU wenig gebraucht, allerdings blockiert der schreibende/lesende Prozess die CPU. Dies führt zu einem hohen Load Average aber zu einer kleinen CPU-Auslastung. Aber es geht noch weiter: Da die Daten nicht schnell genug geschrieben werden können, verbleiben Sie im Arbeitsspeicher und sorgen für einen größeren Speicherverbrauch. Die Katastrophe tritt in dem Moment ein, wenn der physikalische Arbeitsspeicher zu klein geworden ist und das System mit dem Auslagern auf die Festplatte beginnt. Die Zugriffe auf die langsame Festplatte erhöhen sich stark und die Verarbeitung einer eMail, die normalerweise nur Sekundenbruchteile braucht, dauert nun 5 Minuten.

Um das Problem zu lösen, sollte die Geschwindigkeit der Platte untersucht und die Zugriffsparameter optimiert werden. Reicht dies nicht aus, muß ein schnelles Plattensystem eingebaut werden. Sicherheitshalber sollte auch der physikalische Arbeitsspeicher erhöht werden um bei kurzfristigen Leistungspitzen besser puffern zu können.


12.8 Tools zur Prozeß- und Systemlastüberwachung

Um sich eine Übersicht über die Prozesse zu verschaffen und übelgelaunte Prozesse, die das System belasten, zu identifizieren, können eine Reihe von Tools verwendet werden.


12.8.1 ps

Um sich eine Liste der Prozesse und deren PIDs anzeigen zu lassen, wird am häufigsten der Befehl ps verwenden.
ps [OPTIONEN]

Die Optionen bei ps werden mit und ohne führenden Bindestrich geschrieben. Dies funktioniert, da ps keine Parameter kennt. Die Optionen mit einem Bindestrich stammen von Unix, während die Optionen ohne Bindestrich ihren Ursprung im BSD-Betriebssystem haben.

Der Befehl ps zeigt normalerweise die unter der eigenen UID laufenden Prozesse an. Die Option -e wie auch die Kombination ax bewirken eine Anzeige aller laufenden Prozesse, wenn auch mit unterschiedlichen Informationen.

Eine Auswahl von Optionen sortiert nach Ihrem Anwendungsgebiet finden Sie im folgenden Abschnitt.

12.8.1.0.1 Einfache Auswahl von Prozessen

 

Optionen
-e Zeigt alle Prozesse an
a Zeigt alle Prozesse, die einem Terminal zugeordnet sind.
x Zeigt alle Prozesse, die keinem Terminal zugeordnet sind.
T Zeigt alle Prozesse, die diesem Terminal zugeordnet sind.
 

12.8.1.0.2 Auswahl von Prozessen durch Listen

 

Optionen
-C NAME Auswahl nach Programmnamen
-G GID Auswahl nach GID
-p PID Auswahl nach PID
-t TERMINAL Auswahl nach Terminal
-U UID Auswahl nach UID
 

12.8.1.0.3 Ausgabeformat

 

Optionen
-f Ausführliche Ansicht
l Sehr ausführliche Ansicht
u Userorientiertes Format
v Speicherorientiertes Format
 

12.8.1.0.4 Ausgabemodifizierer

 

Optionen
e Zeigt die dazugehörigen Umgebungsvariablen.
f Zeigt die Ausgabe als Baum (Eltern- und Kindsprozesse).
h Spaltenüberschriften werden unterdrückt.
 

12.8.1.0.5 Beispiel

 
Der Befehl ps in normaler Ansicht und in Baumansicht. Die Option f erweitert dabei den Umfang der ausgegebenen Prozesse.

 
ole@enterprise:~ > ps
  PID TTY          TIME CMD
 2955 pts/5    00:00:00 bash
 2978 pts/5    00:00:00 kdvi
 2981 pts/5    00:00:37 kviewshell
 4679 pts/5    00:00:00 ps
ole@enterprise:~ > ps f
  PID TTY      STAT   TIME COMMAND
 4537 pts/3    S      0:00 less
 4535 pts/3    Z      0:00 [sh] <defunct>
 2955 pts/5    S      0:00 /bin/bash
 2978 pts/5    S      0:00  \_ /bin/sh /opt/kde3/bin/kdvi lk.dvi
 2981 pts/5    S      0:37  |   \_ kviewshell dvi lk.dvi
 4682 pts/5    R      0:00  \_ ps f
 2840 pts/4    S      0:00 /bin/bash
 2296 pts/3    S      0:00 /bin/bash

Einzelne Prozesse können über die Prozeßnummer mit oder ohne die Option -p bzw. p ausgegeben werden.

ole@enterprise:~> ps -p 2981
  PID TTY          TIME CMD
 2981 pts/5    00:00:37 kviewshell
ole@enterprise:~> ps p 2981
  PID TTY      STAT   TIME COMMAND
 2981 pts/5    S      0:37 kviewshell dvi lk.dvi
ole@enterprise:~> ps 2981
  PID TTY      STAT   TIME COMMAND
 2981 pts/5    S      0:37 kviewshell dvi lk.dvi

Auswahl der Prozesse nach dem kontrollierenden Terminal.

ole@enterprise:~> ps -t pts/3
  PID TTY          TIME CMD
 2296 pts/3    00:00:00 bash
 4534 pts/3    00:00:00 man
 4535 pts/3    00:00:00 sh <defunct>
 4537 pts/3    00:00:00 less
 4538 pts/3    00:00:00 gzip


12.8.2 pstree

Das Kommando pstree gibt einen Baum von allen Prozessen aus. Dadurch wird deutlich, welcher Prozeß von welchem anderen Prozeß gestartet wurde.

pstree [OPTIONEN] [PID]

Optionen
-a Zeigt die Kommandozeilenargumente an
-c Verhindert die kompakte Darstellung von identischen Zweigen
-l Zeigt lange Zeilen an, sonst werden die Zeilen für die Bildschirmbreite umgebrochen
-n Sortiert die Prozesse nach PID und nicht nach Name
-p Zeigt die PIDs zu den Prozessen an
-u Zeigt an, wenn die UID von Kinds- und Elternprozeß sich unterscheidet
 

Ohne weitere Parameter gibt pstree den Baum ab dem Prozeß init aus. Durch Eingabe einer PID kann die Ausgabe auf einen Teilast beschränkt werden.

tapico@defiant:~> pstree -p 1079
kdeinit(1079)-+-kdeinit(1088)
              |-kdeinit(1102)-+-bash(1103)-+-kdvi(1254)---kviewshell(1255)
              |               |            `-pstree(2415)
              |               `-bash(1186)---su(1193)---bash(1194)
              `-nedit(1207)


12.8.3 top

Ein anderer Weg die laufenden Prozesse zu betrachten ist der Befehl top. Er liefert Prozessinformation wie z. B. PID, Priorität, Größe, Speicher- und CPU-Nutzung. Daneben liefert er gleichzeitig Statistiken über den Speicher und die Swap-Datei, sowie über Systemlaufzeit, CPU-Auslastung und das Load Average. Im Gegensatz zu ps gibt top nicht nur einen Schnappschuß der Prozesse wieder, sondern erlaubt eine kontinuierliche Beobachtung.

Hier ein Beispiel für eine Ausgabe des Befehls top.

 
  8:38pm  up 29 min,  3 users,  load average: 0.11, 0.08, 0.09
59 processes: 51 sleeping, 2 running, 6 zombie, 0 stopped
CPU states:  0.7% user,  0.7% system,  0.0% nice, 98.4% idle
Mem:    62844K av,   61308K used,    1536K free,   46324K shrd,   15880K buff
Swap:  128516K av,     380K used,  128136K free                   17252K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT  LIB %CPU %MEM   TIME COMMAND
  724 tapico     9   0  1060 1060   876 R       0  0.9  1.6   0:00 top
  207 root      10   0 11160  10M  2008 R       0  0.3 17.7   0:16 X
  569 tapico     2   0  4272 4272  3100 S       0  0.1  6.7   0:01 kvt
    1 root       0   0   200  200   172 S       0  0.0  0.3   0:05 init
    2 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kflushd
    3 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kupdate
    4 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kpiod
    5 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kswapd
   63 bin        0   0   396  396   320 S       0  0.0  0.6   0:00 portmap
   67 root       0   0   480  480   400 S       0  0.0  0.7   0:00 rpc.ugidd
   75 root       0   0   556  556   468 S       0  0.0  0.8   0:00 syslogd
   79 root       0   0   784  784   328 S       0  0.0  1.2   0:00 klogd
  105 root       0   0   508  492   396 S       0  0.0  0.7   0:00 rpc.mountd
  108 root       0   0   500  484   396 S       0  0.0  0.7   0:00 rpc.nfsd
  115 root       0   0  1536 1516  1400 S       0  0.0  2.4   0:00 httpd
  116 wwwrun     0   0  1056  912   800 S       0  0.0  1.4   0:00 httpd
  122 at         0   0   540  540   460 S       0  0.0  0.8   0:00 atd

Top besitzt eine Reihe von interaktiven Kommandos. Mit der Taste <h> oder <?> wird ein Hilfe-Bildschirm angezeigt.

 
Proc-Top Revision 1.2
Secure mode off; cumulative mode off; noidle mode off

Interactive commands are:

space   Update display
^L      Redraw the screen
fF      add and remove fields
oO      Change order of displayed fields
h or ?  Print this list
S       Toggle cumulative mode
i       Toggle display of idle proceses
c       Toggle display of command name/line
l       Toggle display of load average
m       Toggle display of memory information
t       Toggle display of summary information
k       Kill a task (with any signal)
r       Renice a task
N       Sort by pid (Numerically)
A       Sort by age
P       Sort by CPU usage
M       Sort by resident memory usage
T       Sort by time / cumulative time
u       Show only a specific user
n or #  Set the number of process to show
s       Set the delay in seconds between updates
W       Write configuration file ~/.toprc
q       Quit

Press any key to continue

Weil der Befehl top kontinuierlich seine Informationen auf den neuesten Stand bringt und damit den Bildschirm füllt, ist es ratsam den Befehl auf einer seperaten Konsole oder X-Terminal laufen zu lassen. Interessant ist top vor allen Dingen, weil er das interaktive ``töten'' von Prozessen erlaubt, sowie das Ändern von Prozeßprioritäten.


12.8.4 uptime

Der Befehl uptime zeigt die aktuelle Uhrzeit, die Laufzeit des Systems, die Anzahl der Benutzer und die Durchschnittslast (Load Average über eine, fünf und fünfzehn Minuten) des Systems an. Das Tool besitzt keine nennenswerten Optionen.

tapico@enterprise:~> uptime
  7:52am  an   1:42,  4 Benutzer,  Durchschnittslast: 0,01, 0,05, 0,01


12.8.5 free

Der Befehl free zeigt eine Übersicht über die Auslastung des Arbeitsspeichers.
free [OPTIONEN]

Optionen
-b Angabe in Byte (byte)
-k Angabe in Kilobyte(kB)
-m Angabe in Megabyte(MB)
-o Kein Anzeigen der Puffer/Cache-Korrektur(ohne)
-s ZEIT Kontinuierliche Anzeige im Abstand von ZEIT Sekunden(switchtime)
-t Zeigt eine Zeile mit den Werten aller Speicher an(total)
-V Versionsnummer()
 

12.8.5.0.1 Beispiel

 
In diesem Beispiel zeigt sich deutlich, daß die Programme nur die Hälfte des Speichers (Angaben in MByte) für sich beanspruchen und daß die andere Hälfte durch Puffer und Caches benutzt wird. Die Momentaufnahme entstand während der Kompilierung eines Kernels.
tapico@enterprise:~> free -mt
             total       used       free     shared    buffers     cached
Mem:           501        492          9          0         55        215
-/+ buffers/cache:        220        280
Swap:         1004         28        975
Total:        1505        521        984


12.8.6 procinfo

Ein wesentlich ausführlichere Übersicht über das Gesamtsystem als die oben genannten Befehle liefert das Tool procinfo. Es wertet in dem Verzeichnis /proc vorhandenen Daten aus und zeigt diese an.
procinfo [OPTIONEN]

Bevor wir uns mit den Optionen des Befehls beschäftigen, schauen Sie sich doch erstmal die Informationen der Standardausgabe an.

tapico@ds9:~> procinfo
Linux 2.4.19-4GB (root@Pentium.suse.de) (gcc 3.2) #1 1CPU [ds9.]

Memory:      Total        Used        Free      Shared     Buffers      Cached
Mem:        255004       53904      201100           0        9808       25300
Swap:       530104           0      530104

Bootup: Sun May  2 08:26:17 2004    Load average: 0.10 0.04 0.05 1/42 2962

user  :       0:00:15.06   0.3%  page in :    28756  disk 1:     2724r    2500w
nice  :       0:00:00.00   0.0%  page out:    28309
system:       0:00:13.13   0.2%  swap in :        1
idle  :       1:31:20.36  99.5%  swap out:        0
uptime:       1:31:48.55         context :    91434

irq  0:    550855 timer                 irq  7:         1
irq  1:         6 keyboard              irq  8:         2 rtc
irq  2:         0 cascade [4]           irq  9:     64241 usb-uhci
irq  3:     17595 eth0                  irq 11:         0 acpi
irq  4:         1                       irq 14:      5936 ide0
irq  5:         0 Intel 82801AA-ICH     irq 15:         0 ide1

Memory:
Die Informationen über die Speicherauslastung sind identisch mit denen des Programms free (Abschnitt 12.8.5).

Bootup
gibt den Zeitpunkt an, an dem das System gestartet wurde.

Load average
ist etwas ausführlicher als bei anderen Tools. Neben den üblichen 1, 5 und 15 Minuten-Mitteln (hier 0.10 0.04 0.05) der auf Bearbeitung wartenden Prozesse sind weitere Informationen erhalten. Die Anzahl der aktuell wartenden Prozesse wird im Verhältnis zur Anzahl der aktuell laufenden Prozesse (hier 1/42) angezeigt. Dazu wird auch noch die PID des aktuell laufenden Prozesses (hier 2962) angegeben.

user
gibt die Auslastung des Systems durch Benutzerprozesse an0.

nice
gibt die Auslastung des Systems durch Prozesse mit veränderter Priorität an.

system
gibt die Auslastung des Systems durch Systemprozesse an.

idle
zeigt Ihnen die Zeit, in der sich die CPU gelangweilt hat, weil sie nichts zu tun hatte.

uptime
liefert die Information, wie lange das System schon läuft. Rechnet man die Zeiten von user, nice, system und idle zusammen, so kommt man ungefähr auf den Wert von uptime.

page in
Die Anzahl der der Speicherseiten, die von der Platte in den Arbeitsspeicher gelesen wurden.

page out
Die Anzahl der Speicherseiten, die vom Arbeitsspeicher auf die Platte geschrieben wurden.

swap in
gibt die Anzahl der Speicherseiten an, die aus dem Swapspeicher in den Arbeitsspeicher verlagert wurden, während

swap out
die Anzahl der Swapseiten angibt, die in den Swapspeicher ausgelagert wurden.

context
Die Anzahl der Kontextwechsel (engl. context switch)) seit dem Booten des Systems.

disk 1-4:
Hier finden Sie die Informationen, wie oft auf Ihre Festplatte zugegriffen wurde.

Interrupts:
Anzahl der Zugriffe auf und die Nutzung der Interrupts werden in diesem Abschnitt dargestellt.

Optionen
-a Zeigt alle Informationen an.(all)
-b Daten für das I/O-Verhalten der Platten werden in Blöcken angegeben und nicht in Anfragen. (blocks)
-d Speicher-, CPU-, Paging-, Swapping-, Platten-, Context- und Interrupt-Daten werden pro Sekunde und nicht total angezeigt. Enthält den Schalter -f.
-D Wie -d, die Speicherdaten werden aber total angezeigt.
-f Gibt kontinuierlich Informationen über das System aus wie top.(force)
-FDATEI Leitet die Ausgabe in eine Datei in. In den meisten Fällen wird ein Terminal (tty) angegeben. (file)
-h Zeigt die Hilfe an.(help)
-i Zeigt auch ungenutzte Interrupts an. (irq)
-m Zeigt Informationen über Module und Geräte an anstatt über CPU und Speicher. (module)
-nN Legt den Aktualisierungszeitraum im Zusammenhang mit dem Schalter -f fest. (new)
-r Anzeige des wirklich freien Speichers wie in free.(free)
-v Version()
 

12.8.6.0.1 Beispiele

 
Für eine kontinuierliche Überwachung, wie Sie sie schon bei top (Abschnitt 12.8.3) kennengelernt haben, kann der Schalter -f verwendet werden. Die Aktualisierung erfolgt normalerweise im Abstand von 5 Sekunden. Dieser Abstand kann über den Schalter -n verändert werden. So aktualisert sich die Anzeige bei folgendem Befehl alle 2 Sekunden.

tapico@ds9:~> procinfo -fn2

Anstatt der Informationen über CPU und Speicher können Sie sich auch Informationen über die Module und Gerät anzeigen lassen. Dies ermöglicht der Schalter -m. Wenn Sie den Schalter -a benutzen, werden Informationen über CPU, Speicher, Module und Geräte angezeigt.

tapico@ds9:~> procinfo -m
Linux 2.4.19-4GB (root@Pentium.suse.de) (gcc 3.2) #1 1CPU [ds9.]

Kernel Command Line:
  root=/dev/hda5

Modules:
  8  pppoe            1 *pppox           13  af_packet       18  usbserial
 25 *parport_pc       7  lp              22 *parport         18  snd-intel8x0
 62  snd-pcm         11  snd-timer       26  snd-ac97-codec   3  snd-mpu401-uar
 14  snd-rawmidi      4  snd-seq-device  31  snd              3  soundcore
136 *ipv6             2 *ipt_TCPMSS       1 *ipt_TOS          1 *ipt_MASQUERADE
  1 *ipt_state        3 *ipt_LOG         16  ppp_generic      5  slhc
  7  printer         14 *pegasus          5  joydev           4  evdev
  3  input           21  usb-uhci        55 *usbcore         26 *3c59x
  3 *ipt_REJECT       2 *iptable_mangle   2 *iptable_filter   3  ip_nat_ftp
 13 *iptable_nat      3  ip_conntrack_f  14 *ip_conntrack    11 *ip_tables
 62  lvm-mod         75 *ext3            44 *jbd

Character Devices:                      Block Devices:
  1 mem              29 fb                1 ramdisk
  2 pty             108 ppp               3 ide0
  3 ttyp            109 lvm               7 loop
  4 ttyS            116 alsa              9 md
  5 cua             128 ptm              22 ide1
  6 lp              136 pts              58 lvm
  7 vcs             162 raw
 10 misc            180 usb
 13 input           188 usb/tts/%d
 14 sound

File Systems:
ext3                [rootfs]            [bdev]              [proc]
[sockfs]            [futexfs]           [tmpfs]             [shm]
[pipefs]            ext2                [ramfs]             minix
iso9660             [nfs]               [devpts]            [usbdevfs]
[usbfs]

Kernel Command Line:
Mit diesen Parametern wurde der Kernel gestartet.

Modules:
Hier finden Sie die Liste der geladenen Kernelmodule und deren Größe in Kilobyte.

Character Devices/Block Devices:
Die verfügbaren Geräte werden in dieser Rubrik aufgeführt. Angeben wird neben dem Gerätenamen auch die Major-Device-Number.

File Systems:
Eine Liste der verfügbaren Dateisystem wird in diesem Abschnitt dargestellt. Dateisysteme, die kein aktuelles Gerät brauchen, wie z. B. das procfs, werden in eckigen Klammern dargestellt.

Noch zu erledigen: -Ffile Redirect output to file (usually a tty). Nice if, for example, you want to run procinfo permanently on a virtual console or on a terminal, by starting it from init(8) with a line like:
p8:23:respawn:/usr/bin/procinfo -biDn1 -F/dev/tty8


12.9 Prozeßadministration

Prozesse können auf verschiedenste Arten und Weisen gesteuert werden. So können Prozesse mit unterschiedlicher Priorität laufen. Sie können auf der Shell direkt ausgeführt werden oder zur Stillarbeit im Hintergrund verdonnert werden. Laufenden Prozesse können mit Signalen gesteuert oder gekillt werden. Wobei es beim Killen noch deutliche Nuancen gibt.

Eine Reihe von Shell-Kommandos können zur Administration verwendet werden.


12.9.1 nice

Wie oft und schnell ein Programm CPU-Zeit bekommt hängt u. a. von seiner Prozeßpriorität ab. Dies Prozeßpriorität kann mit dem Befehl nice verringert werden. Nur der Superuser ist in der Lage einem Prozeß eine höhere Priorität zuzuordnen.
nice [OPTION] KOMMANDO

Das Kommando ist ein Befehl oder eine Kette von Befehlen, die mit der angegebenen Priorität ausgeführt werden können. Im Normalfall ist die Prozeßpriorität bei Verwendung von nice auf den Wert 10 festgelegt. Mit dem Schalter -n ZAHL kann eine Priorität zwischen -20 und 19 angegeben werden. Dabei bedeutet eine kleinere Zahl eine höhere Priorität und eine große Zahl eine niedrige Priorität. Nur der Superuser ist in der Lage einen negativen Wert, und damit eine höhere Priorität als normal, einzustellen.

12.9.1.0.1 Beispiel

 
nice -n 19 find / -name urmel* -print > urmelliste.txt
Dieser langwierige Prozeß bekommt eine sehr niedrige Ausführungspriorität zugewiesen. Er wird praktisch nur ausgeführt, wenn das System genug Zeit hat.


12.9.2 renice

Der Befehl renice erlaubt eine Änderung der Prozeßpriorität im Gegensatz zu nice (12.9.1) für laufende Programme.

renice PRIORITÄT PROZESS

Dabei kann der Zielprozeß durch Angabe der PID bestimmt werden. Mit den Schaltern -u und -g kann sich auf alle Prozesse einer Benutzers oder einer Gruppe bezogen werden und mit -p weitere PIDs angegeben werden.

12.9.2.0.1 Beispiel

 
Das Kommando
renice +5 4711 -u wwwrun kingkong -p 42
erniedrigt die Prozeßpriorität der Prozesse 42 und 4711, sowie aller Prozesse von den Benutzern wwwrun und kingkong. Normale Benutzer können nur auf die Priorität Ihrer eigenen Prozesse einwirken und dabei die Priorität, wie schon aus nice bekannt, verringern.

12.9.3 Vorder- und Hintergrundprozesse

Die Shell ist Kommandozeileninterpreter und Programmiersprache zugleich. Die Kommandos können einzeln (synchron) oder mehrere parallel nebeneinander (asynchron) ausgeführt werden. Wenn ein synchrones Kommando ausgeführt wird, wartet die Shell bis der Befehl abgearbeitet worden ist, bevor sie weitere Eingaben akzeptiert. Dies bezeichnet man auch als einen Prozess im Vordergrund laufen zu lassen. Asynchrone Kommandos laufen ab, während die Shell weitere Kommandos ausführt. Dieses Kommando läuft dann im Hintergrund.

Also immer wenn Sie einen Befehl eingeben, läuft dieser Befehl im Vordergrund. Die Shell wartet so lange, bis der Befehl abgearbeitet worden ist. Das kann z. B. beim find-Befehl etwas länger dauern. Um das Terminal dabei nicht zu blockieren, kann der Prozeß in den Hintergrund gelegt werden. Dabei sollte natürlich die Ausgabe des Befehls abgefangen und in eine Datei umgeleitet werden. Ein an die Zeile angefügtes kaufmännisches Und (&) sorgt für das Verschieben in den Hintergrund.
find / -user tapico -exec rm -f {}; 2> /dev/null &

Ein laufendes Programm können Sie unter der bash mit der Tastenkombination <Strg>+<z> stoppen und in den Hintergrund verschieben.

Ein Job ist eine Folge von einem oder mehreren Kommandos. Also immer wenn Sie Linux einen einzelnen oder mehrere miteinander verknüpfte Befehle geben, erstellen Sie einen Job. Die Shell ist in der Lage diese Jobs zu kontrollieren und weißt diesen Jobs daher Identifikationsnummern zu.


12.9.4 jobs

Um sich die Jobs anzeigen zu lassen, die sich im Moment im Hintergrund befinden, können Sie den Befehl jobs verwenden.
jobs [OPTIONEN] [JOB]

Optionen
-r Zeigt nur laufende Jobs an
-s Zeigt nur gestoppte Jobs an
 

ole@defiant:~ > jobs
[1]-  Stopped                 tail -f /var/log/warn >warning.log
[2]+  Stopped                 vi warning2.log
[3]   Running                 ping 217.89.70.62 >ping.log &
ole@defiant:~ > jobs -r
[3]   Running                 ping 217.89.70.62 >ping.log &
ole@defiant:~ > jobs -s
[1]-  Stopped                 tail -f /var/log/warn >warning.log
[2]+  Stopped                 vi warning2.log

Dabei zeigt jobs nur die Hintergrundjobs an, die von dieser Shell gestartet worden sind. Die Jobs in Shells auf anderen Terminals oder sogar in der Elternshell werden nicht dargestellt.

ole@defiant:~ > tail -f /var/log/warn > warning.log &
[1] 3085
ole@defiant:~ > jobs
[1]+  Running                 tail -f /var/log/warn >warning.log &
ole@defiant:~ > bash
ole@defiant:~ > tail -f /var/log/warn > warning2.log &
[1] 3108
ole@defiant:~ > jobs
[1]+  Running                 tail -f /var/log/warn >warning2.log &


12.9.5 fg

Um einen im Hintergrund laufenden Prozeß wieder in den Vordergrund zu holen, kann der Befehl fg verwendet werden.
fg [JOB]

Außerdem geht auch % oder fg %. Wenn mehrere Hintergrundjobs vorhanden sind, muß die Jobnummer oder der Name angegeben werden.

12.9.5.0.1 Beispiele

 
fg
holt den einzigen im Hintergrund arbeitenden Job in den Vordergrund.

fg %4
holt den Prozeß mit der Nummer 4 aus dem Hintergrund.

fg %joe
holt den Job ``joe'' aus dem Hintergrund hervor.

 
ole@defiant:~ > tail -f ~/.X.err &
[1] 976
ole@defiant:~ > Creating Harddisk icons...
Starting kcontrol -init...Done.
No sound device available. kaudioserver not started.
Starting krootwm...Starting kfm...Done.
Done.
No sound device available. kwmsound not started.
Starting kbgndwm...Done.
Starting kpanel...Done.
startkde: program khotkeys not found!
Max Entries = 23
fg %1
tail -f ~/.X.err

ole@defiant:~ >
Der Befehl tail wird erst in den Hintergrund geschoben, dann wieder in den Vordergrund gebracht und mit <Strg>+<c> abgebrochen.


12.9.6 bg

Wenn ein Prozeß mit <STRG>+<Z> gestoppt und in den Hintergrund geschoben worden ist, kann er mit dem Befehl bg im Hintergrund wieder gestartet werden.
bg [JOB]

Außerdem geht auch bg %N oder fg %NAME. Wenn mehrere Hintergrundjobs vorhanden sind, muß die Jobnummer oder der Name angegeben werden.


12.9.7 kill

Es ist möglich mit den Prozessen über Signale zu kommunizieren. Das Signal kann eine Unterbrechung, eine illegale Anweisung oder andere Bedingungen anweisen. Das Kommando kill kann zur Sendung solcher Signale verwendet werden. Meistens wird es zum ``töten'' eines Prozesses benutzt.
kill [OPTIONS] ID

Das Standardsignal ist das Beenden des Prozesses mit SIGTERM. Man spricht in diesem Fall auch von Terminieren. Nur der Superuser oder der Besitzer des Prozesses dürfen Signale senden. Die ID kann die PID, % (Das wäre der aktuelle Job), %N oder %JOBNAME sein.

Eine Übersicht über die Signal liefert Tabelle 12.4.

12.9.7.0.1 Beispiel

 
kill -9 %joe
fordert den Job ``joe'' zum Selbstmord auf.

kill -HUP $(cat /var/run/httpd.pid)
führt zum Neustart des Apache-Webservers.


Tabelle 12.4: Signale des Befehls kill
Nr. Langname Kurzname Bedeutung
1 SIGHUP HUP Hangup: Reinitialisierung des Prozesses
2 SIGINT INT Interrupt (wie <STRG>+<C>)
3 SIGQUIT QUIT Quit: Beenden
9 SIGKILL KILL Sofortiges Beenden des Prozesses (wird nicht ignoriert)
15 SIGTERM TERM Sofortiges Beenden des Prozesses (kann ignoriert werden)



12.9.8 killall

Genau wie der Befehl kill (12.9.7) leitet der Befehl killall Signale an Prozesse weiter. Allerdings wird bei diesem Befehl nicht die PID sondern der Name des laufenden Programm angegeben. Alle Prozesse, die diesem Namen zugeordnet sind, werden dann beendet.
killall [OPTIONS] ID

Die sonstige Arbeitsweise ist identisch mit kill.


12.9.9 nohup

Der Befehl nohup startet ein Programm und schützt dieses vor dem Hangup-Signal12.6 SIGHUB.

nohup KOMMANDO

Wenn das KOMMANDO die Standardausgabe und Standardfehlerausgabe aufs Terminal benutzt, so wird diese umgeleitet auf die Datei nohup.out. Sollte dies nicht klappen wird versucht die Ausgabe in die Datei $HOME/nohup.out umzuleiten. Klappt dies wieder erwarten auch nicht, dann verweigert nohup die Ausführung des Kommandos. Die Datei nohup.out wird nur mit Rechten für den Besitzer erstellt. Bei bereits vorhandenen nohup.out-Dateien werden die Rechte nicht angefaßt.

Die Kommandos werden nicht automatisch in den Hintergrund gebracht. Dazu ist ein abschließendes Kaufmännisches Und (&) nötig. Auch die Prozeßpriorität wird nicht verändert. Hier ist zusätzlich der Befehl nice (12.9.1) notwendig.

Der Befehl wurde entwickelt um Programme auch nach dem Ausloggen weiter laufen zu lassen. Normalerweise bekommen auch Programme, die in den Hintergrund verschoben wurden und dort laufen, beim Ausloggen das Signal SIGHUP gesendet. Die führt, wenn der Programmierer es nicht explizit abfängt, zum Abbruch des Programms. Allerdings kann ich diesen Effekt bei einer SuSE 9.0 nicht nachvollziehen. Auch normal im Hintergrund gestartete Prozesse liefen nach dem Abmelden und Anmelden immer noch. Sie hatten zwar Ihren Elternprozess verloren, waren aber noch immer aktiv.

Als Endestatus bzw. Fehlercode von nohup kommen die Werte 126 und 127 in Frage. Bei 126 wurde das KOMMANDO zwar gefunden, konnte aber nicht gestartet werden. Dagegen konnte bei 127 das KOMMANDO nicht gefunden werden oder nohup hat einen Fehler. Ansonsten werden die Fehlercodes des KOMMANDO weitergereicht.

12.9.9.1 Beispiele

Das Signal SIGHUP hat keine Auswirkung auf die nohup gestarteten Programme.

ole@enterprise:~/test> tail -f /var/log/warn > warn.log &
[2] 6082
ole@enterprise:~/test> kill -s SIGHUP 6082
[2]+  Aufgelegt               tail -f /var/log/warn >warn.log
ole@enterprise:~/test> nohup tail -f /var/log/warn > warn.log &
[2] 6087
ole@enterprise:~/test> kill -s SIGHUP 6087
ole@enterprise:~/test> ps -e | grep tail
 6087 pts/6    00:00:00 tail

Die Standardausgabe wird umgeleitet in die Datei nohup.out, die mit sehr strengen Rechten versehen ist.

ole@enterprise:~/test> nohup tail -f /var/log/warn &
[1] 6108
nohup: appending output to `nohup.out'
ole@enterprise:~/test> ls -l
insgesamt 4
-rw-------    1 ole      users         655 2004-06-24 23:10 nohup.out


Notizen:
Notizen:

Bootvorgang und Prozesse % latex2html id marker 17796
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

418
Beenden Sie das X-Window-System und arbeiten Sie nur mit den Terminals.
419
Ermitteln Sie die folgenden Daten aus den Bootmeldungen des Kernels.
  1. Konsolentyp:
  2. Prozessortyp:
  3. Prozessorgeschwindigkeit:
  4. PCI-Bios:
  5. Swap-Partition:
  6. Kernelversion:
  7. Kernelerstellungsdatum:
  8. Geräte:

420
Für welchen Zweck wird das Programm fsck verwendet?

421
Loggen Sie sich auf Terminal 1 als root ein.

422
Lassen Sie sich die Informationen über die Auslastung des Systems (CPU und Speicher) anzeigen.

423
Beenden Sie die Anzeige und löschen Sie den Bildschirm!

424
Suchen Sie im ganzen Dateisystem nach Dateien, die den Rechnernamen enthalten. Starten Sie den Befehl als Hintergrundprozeß und achten Sie auf Datenumleitung!

425
Lassen Sie sich die Prozeßnummer Ihrer Prozesse anzeigen! Finden Sie speziell die Prozeßnummer des Hintergrundprozesses heraus!

426
Killen Sie den Hintergrundprozeß!

427
Prüfen Sie, ob grep trotzdem Informationen in Dateien abgelegt hat!

428
Lassen Sie sich die Prozeßnummern aller Prozesse anzeigen! (Welche Prozeßnummer hat der init-Prozeß?)

429
Lassen Sie sich ausführliche Informationen zu allen laufenden Prozessen anzeigen! Welcher Terminal kontrolliert den init-Prozeß, von welchem Prozeß stammt der init-Prozeß und gibt es sonst irgendeinen Prozeß der nicht von init abstammt?

430
Starten Sie nun den Editor vi.

431
Stoppen Sie vi ohne das Programm zu beenden.

432
Starten Sie den Befehl aus Aufgabe 7 als Hintergrundprozeß. Merken Sie sich die Job-ID.

433
Starten Sie das X-Window-System (startx) ohne das die Konsole blockiert wird. Wechseln Sie, falls nötig, zur Konsole zurück (<Strg>+<Alt>+<F1>).

434
Beenden Sie den in Aufgabe 15 gestarteten Hintergrundprozeß.

435
Kehren Sie zu vi zurück und schreiben Sie die Job-ID aus Aufgabe 15 in den Text.

436
Stoppen Sie vi wieder.

437
Starten Sie nun den Editor joe.

438
Stoppen Sie joe ohne das Programm zu beenden. Welches Problem tritt auf?

% latex2html id marker 17850
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

439
Lassen Sie sich alle Jobs anzeigen.

440
Lassen Sie sich alle Prozesse in der Baumansicht anzeigen.

441
Kehren Sie zu joe zurück, holen Sie den Prozeß in den Vordergrund und beenden Sie das Programm.

442
Kehren Sie zu vi zurück und schreiben Sie den Satz: ``Mit den Aufgaben ist jetzt Schluß.'' Speichern Sie den Text als /root/blubber.txt ab und beenden vi.


Notizen:


13. Administrative Aufgaben und Datensicherung

Ein großer Teil der Arbeiten des Systemadministrators werden regelmäßig wiederholt oder müssen zu bestimmten Zeiten gestartet werden. So ist es sinnvoll, die tägliche Datensicherung erst in der Nacht zu starten um die normale Tagesarbeit nicht zu behindern. Oder die Daten der letzten Inventur sollen an die Zentrale geschickt werden. Da es sich um einige Megabyte handelt, wäre es sinnvoll die freien Leitungen in der Nacht zu nutzen. Aber warum sollte der Administrator dafür so lange in der Firma bleiben.

Für die automatische Verwaltung täglicher Aufgaben und einmaliger Aufgaben besitzt Linux die entsprechenden Ressourcen.


13.1 Ausführung zu anderen Zeiten: Der at-Dämon

Wenn Sie ein Programm zu einem bestimmten Zeitpunkt einmal starten wollen, stellt Ihnen Linux den at-Dämon zur Verfügung. Dieser Dämon sorgt dafür, das in Auftrag gegebene Jobs zu einem festgelegten Zeitpunkt gestartet werden. Der Zeitpunkt kann auf eine Minute genau festgelegt werden.

Dämonen sind im Prinzip auch nur Programme, die aber nicht über ein Terminal gestartet werden. Beim at-Dämon ist dies das Programm /usr/sbin/atd. Sie können den Dämon einfach starten, indem Sie als root den Befehl atd auf der Shell eingeben. Wie für alle Systemdienste bzw. Dämonen existiert auch für atd ein RC-Script. Dieses ist /etc/init.d/atd und ist mit dem symbolischen Link /usr/sbin/rcatd verknüpft. Sie sollten den Dämon möglichst über dieses Skript starten, neustarten oder beenden.

defiant:~ # rcatd start
Starting service at daemon                                           done
defiant:~ # rcatd restart
Shutting down service at daemon                                      done
Starting service at daemon                                           done
defiant:~ # rcatd stop
Shutting down service at daemon                                      done

Allerdings ist der Dämon nach einem Neustart nicht mehr aktiv. Sie müssen, wenn Sie den Dämon jedesmal aktiv haben wollen, ihn in die Runlevel eintragen. Sie können dies bei SuSE entweder über YaST und den Runlevel-Editor erledigen oder Sie benutzen den Befehl insserv (12.4.7). Die Runlevel, für die insserv das Skript einträgt, stehen in einem Kommentarfeld im Skript.

linux37:/etc/init.d # grep Default-Start atd
# Default-Start:  2 3 5
linux37:/etc/init.d # insserv atd

Um nun einen Job zu starten benötigen Sie noch ein Werkzeug, daß das entsprechende Programm, Kommando oder Skript in die Warteschlange packt. Dies ist der Befehl at.


13.1.1 at

Wenn Sie einen Job einmal zu einer bestimmten Zeit starten wollen, benutzen Sie das Kommando at.
at [OPTIONEN] ZEIT

Verantwortlich für die Ausführung des Befehls zur richtigen Zeit ist der Dämon atd, der im Hintergrund läuft und wie ein Wecker zum voreingestellten Zeitpunkt die entsprechenden Maßnahmen einleitet.

Optionen
-d Löscht einen Job (delete)
-f DATEI Liest den Job aus der angegebenen Datei (file)
-l Zeigt alle Jobs des Benutzers an (list)
-m Sendet nach dem Abschluß des Jobs eine eMail (mail)
 

Die Benutzung des at-Kommandos ist ganz einfach.

  1. Geben Sie at zusammen mit dem Ausführungszeitpunkt an.
  2. Geben Sie die Kommandos ein, die ausgeführt werden sollen.
  3. Drücken Sie <Strg>+<d> um den Job abzuschicken.

tapico@defiant:~ > at +1 minutes
warning: commands will be executed using /bin/sh
at> who > ~/who.txt
at> <EOT>
job 9 at 2001-02-10 18:25

Bei der Zeitangabe stehen Ihnen mehrere Möglichkeiten zur Verfügung.

13.1.1.1 Beispiele für Zeitangaben

Um 15:30 Uhr
at 15:30
Am 18.03.2004 um 15:30 Uhr
at 18.03.04 15:30
Am 18.03.2004 um 15:30 Uhr
at 03/18/04 15:30
Am 18.03.2004 um 15:30 Uhr
at 031804 15:30
In 3 Stunden
at +3 hours
In 5 Minuten
at +5 minutes
In 3 Tagen um 15:00 Uhr
at 3pm +3 days
Jetzt
at now


13.1.2 atq

Der Befehl atq zeigt die at-Jobs des aktuellen Benutzers an.
atq

Die Funktion des Befehls ist identisch zu at -l.


13.1.3 atrm

Der Befehl atrm löscht einen wartenden at-Job.
atrm JOBNUMMERN

Die Funktion des Befehls ist identisch zu at -d JOBNUMMER.


13.1.4 Jobverwaltung

Jobs benötigen wie jeder Prozess Systemressourcen. Wenn nun viele Benutzer komplexe Jobs laufen lassen, kann dies signifikante Einschränkungen der Systemperformance zur Folge haben.

Mit zwei Dateien ist es möglich festzulegen, wer überhaupt Jobs starten darf. Dies sind die Dateien /etc/at.allow und /etc/at.deny . Wenn also ein Benutzer einen Job anlegen will, dann prüft das System zuerst, ob der Benutzer dazu berechtigt ist.

Existiert die Datei /etc/at.allow nicht, dann wird in der Datei /etc/at.deny nachgeschaut, ob der Zugriff für den Benutzer verboten ist.

Existiert die Datei /etc/at.allow und der Benutzer ist dort aufgeführt, dann darf der Benutzer den Job anlegen. Die Datei /etc/at.deny wird nicht überprüft. Eine leere /etc/at.deny erlaubt jedem Benutzer das Anlegen eines Jobs. Existiert hingegen die Datei gar nicht, dann hindert das alle Benutzer am Anlegen von Jobs. Wenn beide Dateien nicht existieren, dann darf nur der Superuser Jobs anlegen.

Auf jeden Fall sollten Sie als Systemadministrator darauf achten, daß das System nicht durch zu viele Job verstopft wird. Benutzen Sie dazu die Kommandos atq und atrm.


13.1.5 batch

Das Kommando batch legt einen at-Job an, der mit einer geringeren Priorität ausgeführt wird.
batch [OPTIONEN] [ZEIT]

Der Befehl batch entspricht dem Befehl at -b now. Der Schalter -b steht allerdings unter at nicht mehr zur Verfügung. Im Gegensatz zu at hat der Job eine sehr niedrige Priorität. Der Befehl untersucht die virtuelle Datei /proc/loadavg. Wenn die durchschnittliche Belastung (average load) unter 0,8 sinkt, dann wird der Job ausgeführt. Sie haben außerdem eine geringere Priorität als Hintergrundjobs. Im Gegensatz aber zu diesen, werden Sie nicht beim Ausloggen beendet, sondern laufen weiter. Vom Ende des Jobs werden Sie dann per eMail benachrichtigt. Wenn keine Zeit angegeben wird, beginnt der Job sofort.

13.2 Regelmäßiges Ausführen von Kommandos: Der cron-Dämon

Der Dämon atd erlaubt nur die zeitlich gesteuerte einmalige Ausführung eines Jobs. Allerdings ist es manchmal angebracht ein Job regelmäßig auszuführen. Dazu gehört z. B. die Datensicherung oder das Abgleichen von zwei Datenbanken. Für diese Aufgaben steht der Dämon crond zur Verfügung.


13.2.1 Der Dämon cron

Die Aufgabe des Ausführens der persönlichen crontab-Dateien und der regelmäßigen Systemjobs wird vom Dämon cron erledigt, dessen Programmdatei /usr/sbin/cron ist.

Das Verzeichnis für den Dämon ist /var/spool/cron . Hier schaut der Dämon cron im Verzeichnis tabs nach ob es persönliche Aufgaben gibt. Die sind in Dateien mit dem Benutzernamen des jeweiligen Users abgelegt. Im folgenden Beispiel hat der User tapico mit der Masterdatei cj eine Cron-Job angelegt.

defiant:/var/spool/cron # ls -l tabs
insgesamt 4
-rw-------    1 root     users         214 2004-05-25 15:19 tapico
defiant:/var/spool/cron # cat tabs/tapico
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (cj installed on Tue May 25 15:19:44 2004)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
*/5 * * * *  uptime >> ~/uptime.log

Die gefundenen Cron-Tabelle (engl. crontabs) werden in den Speicher geladen. Daneben konsultiert der Dämon die Datei /etc/crontab, die bei SuSE 9.0 so aussieht.

 
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
#
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
#
-*/15 * * * *   root  test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1
59 *  * * *     root  rm -f /var/spool/cron/lastrun/cron.hourly
14 4  * * *     root  rm -f /var/spool/cron/lastrun/cron.daily
29 4  * * 6     root  rm -f /var/spool/cron/lastrun/cron.weekly
44 4  1 * *     root  rm -f /var/spool/cron/lastrun/cron.monthly

Daneben sorgt das Skript /usr/lib/cron/run-crons dafür, daß die Skripte in den Verzeichnissen /etc/cron.daily, /etc/cron.weekly und /etc/cron.monthly regelmäßig ausgeführt werden. Bei anderen Distributionen erfolgt der Aufruf der Skripte durch das Programm run-parts, das durch den Daemon aufgerufen wird.

Die Dateien im Verzeichnis /etc/cron.daily werden als Erweiterung von /etc/crontab bezeichnet. Dies ermöglicht eine feinere Abstimmung von Aufgaben, als wie sie durch die oben erwähnten Cron-Verzeichnisse angeboten werden.

Damit ist also der Dämon crond für die Ausführung der regelmäßigem System- und Benutzerjobs zuständig. Er wird normalerweise gestartet, wenn Linux bootet und wacht jede Minute auf um zu überprüfen ob ein Job gestartet werden soll. Dabei überprüft er jedes mal die Cron-Tabelle. Sollte sich das Änderungsdatum einer Tabelle geändert haben, dann wird die Tabelle neu in den Speicher geladen. Es ist daher nicht notwendig den Cron-Dämon nach einer Änderung neu zu starten.

Bei der Ausführung werden alle Ausgaben des jeweiligen Jobs per eMail an den Besitzer der Cron-Tabelle gesendet. Es ist natürlich klar, daß Benutzer nur ihre eigenen Jobs und der Superuser alle Jobs bearbeiten kann. Für weitere Informationen über den Cron-Dämon konsultieren Sie bitte die Manual-Page cron(8).


13.2.2 crontab

Für das Anlegen von Cron-Jobs durch eine Cron-Tabelle steht der Befehl crontab zur Verfügung.
crontab [OPTIONEN] [MASTERDATEI]

Optionen
-e Erstellt oder bearbeitet die crontab-Datei des Benutzers
-l Zeigt die crontab-Datei des Benutzers an
-r Löscht die crontab-Datei des Benutzers
-u BENUTZER Legt fest, mit welcher crontab-Datei gearbeitet werden soll (nur Superuser)
 

Um crontab zu nutzen, müssen Sie zuerst eine Masterdatei im Format der oben schon gezeigten /etc/crontab anlegen. Den Namen können Sie frei wählen, er sollte aber nicht gerade mit crontab lauten. Dort tragen Sie für jeden Cron-Job eine Zeile mit sechs Feldern ein. Diese sechs Felder sind von links nach rechts: Minute, Stunde, Tag des Monats, Monat, Wochentag und Kommando. Die Werte für die Felder entnehme Sie bitte der Tabelle 13.1.


Tabelle 13.1: Erlaubte Werte für einen Crontab-Job
Feld Werte
Minute 0 - 59
Stunde 0 - 23
Tag des Monats 1 - 31
Monat 1 - 12 oder Namen
Wochentag 0 - 7 oder Namen (0 oder 7 ist Sonntag)


Zeilen in den Cron-Dateien, die mit einem Schweinegatter `#' beginnen, sind Kommentarzeilen und werden ignoriert. Außerdem werden leere Zeilen und führende Leerzeichen auch ignoriert. Ein Asterisk `*' in einem Feld repräsentiert jeden möglichen Wert (also vom ersten bis zum letzten) für das Feld.

Das crontab-Kommando speichert eine Kopie der Masterdatei unter dem Benutzernamen in dem Verzeichnis /usr/lib/crontab/tabs. Sie können auch direkt die Cron-Tabelle bearbeiten, in dem Sie den Befehl crontab -e benutzten. Dieser Befehl startet den Editor vi mit der aktuellen Cron-Tabelle und sorgt dann nach dem Beenden und Speichern für die Aktualisierung der Cron-Tabellen.

13.2.2.1 Beispiele

Um täglich festzuhalten, wer um 10 Uhr morgens eingeloggt ist, kann folgender Cronjob angelegt werden.
00 10 * * * who >> /var/log/benutzerliste.log

Bei einer Liste von Werten werden die Einzelwerte durch Kommata voneinander getrennt. Zeitbereich können auch mit einem Bindestrich `-' angegeben werden. So bedeutet `10-12' das Gleiche wie `10,11,12'. Ein Job, der jeden Dienstag und Donnerstag um 12 Uhr ausgeführt werden soll, kann dann so angegeben werden.

00 12 * * 2,4 myjob

Ein Job, der zu jeder Stunde von 6 bis 18 Uhr ausgeführt werden soll, sieht dann so aus.

00 6-18 * * * myjob

Soll ein Job innerhalb dieses Zeitraums nur jede zweite Stunde ausgeführt werden, dann kann man den Schrägstrich benutzen.

00 6-18/2 * * * myjob

Der folgende Befehl veranlaßt alle 5 Minuten einen Ping auf eine Internetadresse. Dies ist z. B. eine Möglichkeit eine Internetverbindung offen zu halten, wenn Sie sonst vom Provider nach 10 Minuten Inaktivität geschlossen werden würde.

*/5 * * * * ping -c 1 www.fibel.org &> /dev/null

Eine Besonderheit ist die Angabe des Tages. Hier stehen zwei Möglichkeiten zur Verfügung. Sie können den Tag des Monats und den Wochentag angeben. Werden beide Informationen angegeben, dann wird der Job zu dem Zeitpunkt ausgeführt wenn mindestens eine von den Angaben zutrifft. Der folgende Befehl wird also nicht nur am Freitag, den 13. ausgeführt, sondern er wird an jedem 13. Tag des Monats und an jedem Freitag ausgeführt.

00 12 13 * 5 freitag_der_13.sh

13.2.3 Verwalten von cron-Jobs

Wie auch beim Befehl at können zu viele komplexe cron-Jobs das System erheblich beeinträchtigen. Deshalb existiert auch für diese Jobart Konfigurationsdateien. Dies sind die Dateien /etc/cron.allow und /etc/cron.deny . Ihre Funktionsweise ist identisch zu den Zugriffsdateien für at. Wenn die Datei cron.allow existiert, dürfen nur Benutzer, die in dieser Datei eingetragen sind, Cron-Jobs starten. Existiert hingegen nur die Datei cron.deny so dürfen alle Benutzer Cron-Jobs starten, außer denen, die in dieser Datei stehen. Sind beide Dateien nicht vorhanden, dann darf niemand außer root Cron-Jobs anlegen.


13.3 Logdateien

Eine wichtige Infomationsquelle bei Fehlfunktionen des Betriebssystems sind die Logdateien. Systeminformationen werden in verschiedenen Logdateien mitgeschrieben. Diese Logdateien sind entweder speziell für eine Anwendung gedacht oder mehrere Anwendungen schreiben ihre Nachrichten in eine Datei.


13.3.1 Der Dämon syslogd

Der Dämon syslogd übernimmt die Aufgabe die Systemaktivitäten mitzuloggen. Er wird normalerweise durch einen Teil der rc-Konfigurationsdateien gestartet, wenn das System bootet.13.1Wenn der Dämon startet wird die Datei /etc/syslog.conf ausgelesen, in der die Optionen für die Ausführung des Dämons syslogd stehen.
syslogd

Optionen
-f DATEI Gibt alternative Konfigurationsdatei an (file)
-h Veranlaßt syslogd dazu, Nachrichten von verbundenen Hosts weiterzuleiten (hosts)
-l HOST Die angegebenen HOSTs (Liste mit Doppelpunkt getrennt) werden nur mit einfachem und nicht mit vollem Hostnamen mitgeloggt (list of hosts)
-m INTERVALL Zeit zwischen zwei markierten Linien (Standard: 20 Minuten) (markintervall)
-r Erlaubt den Empfang von Netzwerknachrichten (remotenews)
 

Der Dämon syslogd kann durch Signale gesteuert werden. Der Befehl kill (Abschnitt 12.9.7) kann mit den Signalen dazu verwendet werden, syslogd zu starten, stoppen, die Datei /etc/syslog.conf auf den neuesten Stand zu bringen u. s. w.
kill -SIGNAL $(cat /var/run/syslogd.pid)

Die Datei /var/run/syslogd.pid enthält die aktuelle PID des syslogd-Prozesses. Ein Übersicht über die Signal zeigt Tabelle 13.2.


Tabelle 13.2: Signale und ihre Auswirkungen auf syslogd
Signal Aktion
SIGHUP Reinitializiert syslogd durch Stoppen des Daemons, Neulesen der Datei /etc/syslog.conf
  und dem erneuten Starten des Daemons.
SIGTERM Beendet syslogd.
SIGQUIT Beendet syslogd.
SIGINT Beendet syslogd.
SIGUSR1 Wechselt zum Debugging-Modus, wenn mit -d gestartet.
SIGALARM Setzt eine Markierungslinie



13.3.2 /etc/syslog.conf

Die Datei /etc/syslog.conf ist die Konfigurationsdatei für den Daemon syslogd. Sie gibt an welche Informationen wohin geschrieben werden. Das folgende Beispiel ist der SuSE 9.0 entnommen.

 
# print most on tty10 and on the xconsole pipe
#
kern.warning;*.err;authpriv.none         /dev/tty10
kern.warning;*.err;authpriv.none        |/dev/xconsole
*.emerg                          *

# enable this, if you want that root is informed
# immediately, e.g. of logins
#*.alert                                 root


#
# all email-messages in one file
#
mail.*                          -/var/log/mail
mail.info                       -/var/log/mail.info
mail.warning                    -/var/log/mail.warn
mail.err                         /var/log/mail.err

#
# all news-messages
#
# these files are rotated and examined by "news.daily"
news.crit                       -/var/log/news/news.crit
news.err                        -/var/log/news/news.err
news.notice                     -/var/log/news/news.notice
# enable this, if you want to keep all news messages
# in one file
#news.*                         -/var/log/news.all

#
# Warnings in one file
#
*.=warning;*.=err               -/var/log/warn
*.crit                           /var/log/warn

#
# save the rest in one file
#
*.*;mail.none;news.none         -/var/log/messages

#
# enable this, if you want to keep all messages
# in one file
#*.*                            -/var/log/allmessages

#
# Some foreign boot scripts require local7
#
local0,local1.*                 -/var/log/localmessages
local2,local3.*                 -/var/log/localmessages
local4,local5.*                 -/var/log/localmessages
local6,local7.*                 -/var/log/localmessages

Dabei besteht jede Linie aus drei Angaben. Der Nachrichtenquelle, dem Nachrichtentyp und der Logdatei13.2.

Die Nachrichtenquelle ist eines der folgenden Schlüsselworte: auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, syslog, user, uucp und local0 bis local7.

Der Nachrichtentyp bzw. die Nachrichtenpriorität wird in aufsteigender Reihenfolge durch die Schlüsselworte debug, info, notice, warning, err, crit, alert und emerg ausgedrückt.

Ein Minuszeichen vor dem Namen der Logdatei sorgt dafür, daß die Nachrichten nicht sofort auf Platten geschrieben werden, sondern, wie sonst auch üblich, im RAM gespeichert und erst bei der nächsten routinemäßigen Synchronisation von RAM und Platte geschrieben werden.

Weitere Informationen finden Sie unter man syslog.conf.

13.3.2.0.1 Beispiele

 
Der Stern steht für alle Nachrichtenquellen bzw. Nachrichtentypen. So loggt die folgende Zeile alle Nachrichten mit der Priorität emerg mit.
*.emerg root

Das Gleichheitszeichen sorgt dafür, daß die genannte Nachrichtenpriorität exklusiv in einer Datei mitgeloggt wird.
*.=crit /var/log/critical

Das Ausrufungszeichen `!' wird als Negationsoperator verwendet.
mail.*;mail.!=info /var/log/maillog

Damit zum Beispiel überhaupt keine Mail-Nachrichten mitgeloggt werden, kann mail.!* oder mail.none gesetzt werden.

13.3.3 Verwaltung der Logdateien

Jede Nachricht wird als eine Zeile in eine Logdatei geschrieben. Datum, Quelle und natürlich die Nachricht selber werden in den Logdateien geschrieben. Welche Logdateien Sie verwenden, hängt von der Konfiguration Ihres Systems ab. Es gibt aber ein paar wichtige Systemlogdateien, die überall eigentlich vorhanden sein sollten.

13.3.3.1 /var/log/messages

Dies ist die Hauptlogdatei des Systems. Hier laufen die meisten Meldung auf. Dies hängt aber stark davon ab, wieviele weitere Logdateien eingerichtet worden sind.

13.3.3.2 /var/log/wtmp

Hier werden die Login-Zeiten und die Login-Dauer der Benutzer festgehalt. Das Kommando last (Abschnitt 8.7.6) greift auf diese Logdatei zurück.

13.3.3.3 /var/run/utmp

Diese Logdatei enthält die Informationen über die aktuell eingeloggten Benutzer. Auf diese Datei greifen die Befehle finger, w und who zurück.

13.3.3.4 /var/log/lastlog

In dieser Datei werden die Loginzeitpunkte der Benutzer gespeichert. Der Befehl lastlog verwendet diese Datei und ermöglicht so den Zeitpunkt des letzten Einloggens für jeden Benutzer zu sehen.

Vorsicht: Bei den Dateien /var/log/wtmp, /var/run/utmp und /var/log/lastlog handelt es sich um Binärdateien.

13.3.3.5 /var/log/boot.msg

Hier werden die gesamten Bootmeldungen gesammelt. Dies sind die Meldungen vom Kernel, von den Bootskripten und vom Starten der Dienste im gewählten Runlevel.


13.3.4 Rotation von Logdateien: logrotate

Die Natur von Logdateien ist es stetig zu wachsen und das über einen langen Zeitraum. Deswegen müssen diese Dateien wie Hecken regelmäßig zurückgeschnitten werden oder sie werden irgendwann das gesamte System überwuchern.

Für diesen Zweck gibt es den Befehl logrotate. Es sorgt dafür, daß ältere Daten aus den Logdateien entnommen und archiviert werden, alte Logdateien gelöscht und neue leere Logdateien erstellt werden.

logrotate [OPTIONEN] KONFIG_DATEI

Normalerweise ist die Konfigurationsdatei /etc/logrotate.conf , es können aber auch andere Dateien verwendet werden. Die Statusinformationen werden in der Datei /var/lib/logrotate.status gespeichert.

Die möglichen Kommandos entnehmen Sie bitte der Tabelle 13.3.


Tabelle 13.3: Kommandos für die Konfigurationsdateien von logrotate.
Kommando Aktion
compress Benutzt gzip zur Kompression alter Dateien
copytruncate Kopiert das Log und kürzt dann das alte Log
create Benutzt die angegebenen Rechte fürs neue Log; sind keine Rechte angegeben,
  werden die Rechte des alten Logs übernommen.
daily Logs rotieren täglich
delaycompress Kompression bei der nächsten Rotation
errors MAILTO Sendet Fehler an die angegebene Mailadresse
ifempty Rotiert auch leere Logs
include DATEI Fügt die angegebene Datei in die Konfigurationsdatei ein
mail MAILTO Sendet Logs zur angegebenen Mailadresse, wenn sie gelöscht werden.
monthly Logs rotieren monatlich
nocompress Alte Logs werden nicht komprimiert
nocopytruncate Logs werden nicht kopiert und gekürzt
nocreate Gegenteil von create
nodelaycompress Alte Logs werden sofort komprimiert
noolddir Alte Logs werden nicht in ein anderes Verzeichnis verschoben
notifempty Leere Logs werden nicht komprimiert
olddir VERZEICHNIS Alte Logs werden in das angegebene Verzeichnis verschoben.
postrotate Startet Skript nach der Rotation
prerotate Startet Skript vor der Rotation
rotate N Gibt die Anzahl der alten Logs an, die archivert werden.
size N Rotation, wenn das Log die angegebene Größe erreicht hat.
  (k für kB und M für MB)


Eine Konfigurationsdatei kann globale und lokale Optionen enthalten. Globale Optionen gelten für alle Logs, während lokale Optionen für ein bestimmtes Log gedacht sind.

Der Eintrag

# Globale Optionen
weekly

# Lokale Optionen
# für wtmp
/var/log/wtmp {
  monthly
}
bewirkt, daß alle Logs wöchentlich rotieren. Dies ist eine globale Option. Die explizite Angabe des Lognamens beim zweiten Eintrag bewirkt, daß die globale Option durch die lokale Option überschrieben wird und die Logdatei wtmp nur monatlich rotiert.


13.4 Datensicherung

Die Datensicherung eines Systems ist eine der wichtigsten Aufgaben eines Administrators. In vielen Fällen kann es sogar die einzige Aufgabe sein.

Eine Datensicherung macht man nur aus einem Grund. Man will in der Lage sein ein zerstörtes System in kürzester Zeit wieder zum Laufen zu bringen. Eine Datensicherung zu besitzen kann einen davor bewahren Tage oder sogar Wochen an der Wiederherstellung des Systems und der Daten zu sitzen.

13.4.1 Vorüberlegungen

Mehrere Faktoren spielen bei der Planung von Datensicherungsstrategien eine Rolle.

13.4.1.0.1 Kosten für die Ausfallzeit

Jedes System, sogar Linux, steht zu manchen Zeiten nicht den Benutzer zur Verfügung. Dies kann daran liegen, daß eine neue Programmversion aufgespielt wird, Fehler gepatcht werden, Hardware ausgetauscht wird oder die Systemleistung verbessert wird.

Steht das System dem Benutzer nicht zur Verfügung, so müssen auch die Kosten für die Ausfallzeit der Mitarbeiter mit in die Kosten für das gesamte Projekt einkalkuliert werden. Da dies sehr teuer werden kann, sollte man diesen Posten bei der Abwägung für die Durchführung der Aufgabe genau unter die Lupe nehmen.

13.4.1.0.2 Kosten für die Sicherung

Es gibt eine große Bandbreite von Datensicherungsstrategien. Das reicht von der Speicherung der Daten auf einer Diskette bis zur Bildung eines riesigen Clusters für kritische Dienste die 24 Stunden am Tag und 7 Tage die Woche angeboten werden müssen. Wie Sie leicht sehen sind mit den verschiedenen Strategien auch ganz unterschiedliche Kosten verbunden. Hier muß abgewägt werden, was der Ausfall kosten würde und wieviel die Datensicherung kostet.

13.4.1.0.3 Arbeitslast des System

Die Rolle des Systems ist ein wichtiger Faktor für die benötigte Verfügbarkeit. Während ein Webserver 24 Stunden am Tag aktiv sein muß, reicht es bei den meisten Bürosystem aus, daß sie während der Bürozeiten laufen. Mehrkosten für aufwendigere Datensicherungsstrategien machen sich meist dann bezahlt, wenn das System eine wichtige Rolle einnimmt bzw. einen hohe Verfügbarkeitsstufe besitzt.


13.4.2 Strategien

Es gibt eine Vielzahl von Strategien für die Verfügbarkeit und das Backupt aus denen Sie die Richtige für sich auswählen können. Das kann z. B. sein:


13.4.2.0.1 Cluster

Ein Cluster besteht aus mindestens zwei Rechnern, die gemeinsam den Zugriff auf einen zentralen Datenpool ermöglichen. Jeder der Server kann verschiedene Applikationen ausführen. Wenn nun ein Mitglied des Clusters ausfällt, können die anderen Mitglieder seine Aufgaben übernehmen. Von dieser Maßnahme bemerkt der Benutzer nichts. Wenn Sie eine Verfügbarkeiten von 24 Stunden am Tag benötigen, ist dies eine vernünftige Wahl. Neben den Hardwarekosten fallen vor allem hohe Kosten für das Management und Setup an.


13.4.2.0.2 Standby- oder Ausfall-Server

Bei dieser Lösung ist neben dem eigentlichen Server ein identischer Server im Betrieb. Dieser steht im Gegensatz zum Cluster den Anwendern nicht zur Verfügung. Er ist allerdings ständig aktiv und gleicht seine Daten mit dem Hauptserver kontinuierlich ab. Fällt der Hauptserver nun aus, dann springt der Standby-Server ein um die Aufgaben zu erfüllen. Auch dieser Vorgang ist, da der Server die gleiche IP-Adresse und den gleichen Namen hat, für den Anwender nicht nachvollziehbar. Diese Lösung ist dank des einfacheren Managements günstiger als der Cluster, obwohl ein Teil der Hardware brach liegt. Trotzdem sind die Kosten noch so hoch, daß es sich nur für Server mit einer Verfügbarkeit von 24 Stunden am Tag lohnt.


13.4.2.0.3 Duplizierter oder Backup-Server

Auch bei dieser Lösung existiert ein zweiter identischer Server. Dieser ist allerdings nicht im Betrieb. Fällt nun der Hauptserver aus, so muß der Administrator per Hand den Rechner auswechslen und die aktuellen Daten dem neuen Server zur Verfügung stellen. Das kann zum Beispiel durch den Tausch der Datenfestplatte oder durch den Anschluß an das Raid-Archiv geschehen. Bei Medienfehlern ist allerdings das Aufspielen des Backups nötig. Diese Lösung ist wiederum etwas günstiger, da kein kompliziertes Management des Systems nötig ist. Allerdings bedeutet dieses Konzept eine Ausfallzeit, falls der Hauptserver seinen Geist aufgibt.

13.4.2.0.4 Sicherung und Wiederherstellung

Dies ist die häufigste und günstigste Methode der Sicherung. Selbst wenn Sie eine drei oberen Lösungen gewählt haben, müssen Sie dieses Verfahren zusätzlich anwenden. Es basiert auf dem einfachen Prinzip, daß die Daten einfach an einem zusätzlichen Ort gespeichert werden. Bei diesem Konzept können sich die Kosten in einem weiten Bereich bewegen. Von der Diskette bis zu einem riesigen Storagetower ragt die Bandbreite.


13.4.3 Planung

Als ersten Schritt bei der Planung der Datensicherung sollten Sie sich über vier Fragen klar werden.

  1. Was soll gesichert werden?
  2. Wie oft soll gesichert werden?
  3. Wieviel Zeit steht für die Sicherung zur Verfügung?
  4. Wohin soll gesichert werden?

13.4.3.1 Was soll gesichert werden?

Ob eine Datei gesichert werden soll oder nicht läßt sich ganz einfach feststellen. Vergleichen Sie einfach die Zeit, die Sie für das Rekonstruieren der Daten benötigen, und die Zeit, die Sie für die Datensicherung benötigen. In den meisten Fällen brauchen Sie für das Rekonstruieren länger.

Als erstes sollten Sie Ihre Daten unterteilen in jene, die sich ändern, und jene, die sich nicht ändern. Als Regel kann man davon ausgehen, daß die System- und Applikationsdateien sich nicht so häufig ändern. Dies passiert ja nur, wenn das System und die Applikationen auf den neuesten Stand gebracht werden. Daher ist es eine Verschwendung von Ressourcen, wenn man diese Daten täglich sichert. Es ist aber eine gute Idee, nach jedem Update ein Backup vom aktuellen System zu fahren. So ist eine schnelle Wiederherstellung des laufenden Systems in kürzester Zeit möglich. Ein Installation mit womöglich noch nachträglich zu installierenden Patches und Treiber dauert wesentlich länger, als eine Sicherung wieder auf das System zu spielen.

Für die Datendateien, die sich naturgemäß häufiger ändern, sollten Sie einen regelmäßigen Turnus für die Datensicherung einführen. Da die wichtigsten Dateien sich täglich ändern, sollte auch das Backup täglich durchgeführt werden.

Haben Sie sich entschieden verschiedene Datengruppen in verschiedenen Intervallen zu sicher, so sollten Sie diese Dateien auch an unterschiedlichen Orten, am besten in unterschiedlichen Partitionen, speichern. Dies erleichtert die Datensicherung wesentlich.

So sollte sich das Heimatverzeichnis auf einer seperaten Partition befinden um die Sicherung der persönlichen Dateien der Benutzer wesentlich zu vereinfachen. Außerdem würde ein Schaden an der Systempartition keinen Schaden an den Daten verursachen und die Wiederherstellung des Systems wesentlich vereinfachen.

13.4.3.2 Wie oft soll gesichert werden?

Nachdem Sie sich nun entschieden haben, was Sie sichern wollen, und das kann das gesamte System sein, müssen Sie noch festlegen, wie oft die Daten gesichert werden. Es ist nicht notwendig jede Datei jeden Tag zu sichern. Sie können es aber tun.

Warum sollten Sie Systemressourcen, Platz und Arbeitskraft für ein tägliches Update Ihrer Systemdateien verschwenden, wenn sich diese alle paar Wochen nur ändern. Eigentlich brauchen Sie nur eine Sicherung, wenn Sie Veränderung am System, wie Patchen oder Aufspielen neuer Versionen, durchgeführt haben. Ein regelmäßiges Backup in größeren Abständen (z. B. monatlich) sollte aber durchgeführt werden, um sicher zu gehen, daß Sie eine funktionierende Kopie Ihres Systems besitzen.

Wenn es um die Häufigkeit eines Backups geht, dann fragen Sie sich doch einfach, welcher Schaden Ihrem Unternehmen entsteht, wenn die Daten verlorengehen, bevor eine Sicherung gefahren werden konnte. In den meisten Fällen reicht ein tägliches Backup aus. Bei sehr wichtigen sich häufigen ändernden Daten kann es sogar sinnvoll sein eine stündliche Sicherung zu fahren.

13.4.3.3 Wieviel Zeit steht für die Sicherung zur Verfügung?

Auf jeden Fall sollten Sie berücksichtigen wieviel Zeit für ein Backup zur Verfügung steht. Da ein Backup eine nicht geringe Menge an Systemressourcen für sich beansprucht, sollte man die Sicherung in eine Zeit niedriger Auslastung verlagern. So sollte eine Sicherung für eine Verwaltung am späten Abend beginnen und vor dem nächsten Morgen abgeschlossen sein. Der schlimmste Fall tritt ein, wenn die Dauer der Sicherung länger dauert als das Sicherungsintervall lang ist. Hier muß man dann die Sicherungsstrategie wechseln.

Bei Systemen, die rund um die Uhr ausgelastet sind, muß man Fenster der Inaktivität nutzen um immer wieder einzelne Dateien zu sichern.

13.4.3.4 Wohin soll gesichert werden?

Die Menge der Daten, die Zeit, die zum Sichern zur Verfügung steht, und die Dauer der Wiederherstellung bestimmen letztendlich die Auswahl des Speichermediums. Bandgeräte sind seit langer Zeit und auch heute noch die erste Wahl der Sicherung. Sie können große Mengen an Daten sicher speichern und sind dabei sehr kostengünstig. Gegen die ausgereiften Bandgeräte spricht die lange Dauer der Sicherung und die Schwierigkeit einzelne Dateien aus einem solchen Backup wieder extrahieren. Ein Bandgerät enthält schließlich nicht ein Dateisystem wie eine Festplatte. Für die Sicherung auf Band existieren viele Applikationen, die die Sicherung managen wie auch beim Wiederherstellen der Daten helfen. Dies ist dann fast so einfach wie ein Festplattezugriff, aber durch die sequentielle Speicherung der Daten kann es sehr lange dauern.

In der heutigen Zeit der billigen Festplatten, CD-Rs und optischen Laufwerken haben Sie ein große Zahl weiterer Medien für ihr Sicherung zur Verfügung.

Eine zweite Festplatte ist ein einfaches und schnelles Sicherungsmedium. Sollen aber mehrere Sicherungen über längere Zeit aufbewahrt werden, wird dieses Prinzip bald unerschwinglich teuer.

Die CD-R ist durch ihren günstigen Preis und ihre lange Haltbarkeit ein weitere gute Lösung. Allerdings macht ihr beschränkter Datenplatz bei größeren Backups Probleme. Daß sie nur einmal verwendbar ist, ist bei dem geringen Medienpreis zu verschmerzen. Die DVD mit ihrer größeren Kapazität und doch relativ kleinen Medienpreisen schließt hier eine Lücke im Angebot und reicht für viele Anwendungen aus.

Wollen Sie aber dennoch ein mehrfach beschreibbares Medium verwenden, dann sollten Sie sich mit den Magneto-Optischen-Medien beschäftigen. Sie stellen mehr Platz als CD-Rs zur Verfügung, der Zugriff auf die Daten ist flexibel wie bei einer Festplatte und sie sind haltbarer als Bänder.


13.4.4 Backuptypen

Beim Backup werden vier Typen unterschieden, die sich darin unterscheiden was gesichert und wie es wiederhergestellt wird.

13.4.4.1 Kopie

Die einfachste und am häufigsten angewandte Methode der Datensicherung ist das Kopieren von Dateien. Obwohl es die am häufigsten angewandte Methode ist, ist es eigentlich kein richtiges Backup.

Wenn man eine Datei an einen anderen Ort kopiert, ist man in der Lage die Datei wiederherzustellen, falls sie beschädigt worden ist. Meisten benutzt man ein wiederbeschreibbares Medium wie Floppy oder Zip-Disk für diese Aufgabe. Hauptanwendungsgebiet ist die Sicherung von Konfigurationsdateien. So kann man bei Fehlern beim Konfigurieren durch einfaches Zurückkopieren der Dateien den alten Zustand des Systems wieder herstellen.

13.4.4.2 Volles Backup

Ein volles Backup umfaßt, wie der Name schon sagt, jede einzelne Datei auf dem System. Man hat also ein Abbild des jetzigen Zustands des Systems. Da alle Dateien gesichert sind der administrative Aufwand für Sicherung und Wiederherstellung minimal. Natürlich hat dieses Backup auch seine Nachteil. Da das gesamte System gesichert werden muß, fällt natürlich eine Menge an Daten an. Daher dauert die Sicherung sehr lange und es ist eventuell sogar nötig während der Sicherung die Medien tauschen zu müssen. Das verhindert natürlich eine automatische Ausführung.

13.4.4.3 Partielles Backup

Beim partiellen Backup hingegen werden nur Teile der Daten gespeichert. Dadurch kann die Häufigkeit der Sicherung auf die verschiedenen Dateiarten angepaßt werden. Systemdateien werden nur nach Änderungen im System gespeichert, während die Datenpartition z. B. täglich gesichert wird. Es existiert also ein aktuelles Abbild des Systems, was aber zu verschiedenen Zeiten erstellt wurde. Daher werden dann bei der Sicherung weniger Daten übertragen. Die Sicherung ist damit schneller und man kommt mit weniger Medien aus, was dazu führt, daß der Vorgang auch automatisiert ausgeführt werden kann.

13.4.4.4 Inkrementelles oder differenzielles Backup

Das inkrementelle oder differentielle Backup reduziert noch weiter die zu sichernden Daten. Man beginnt mit einem vollen Backup (oder partiellem Backup) aller zu sichernden Daten. In den nächsten Sicherungen werden nur die Dateien gesichert, die sich seitdem geändert haben.

13.4.4.4.1 Beispiel

Sie machen Freitag in der Nacht ein volles Backup. Damit sind alle Daten auf Ihrem Medium. Am Montag bis zum Donnerstag sichern Sie jetzt nur die Daten, die seit der letzten Sicherung sich geändert haben.

Kommt es nun an einem Mittwoch zu einem Systemausfall, dann müssen Sie zuerst das Backup vom Freitag - das ist das volle Backup - einspielen. Danach müssen Sie dann die Backups vom Montag und Dienstag einspielen um die Änderungen vom letzten vollen Backup wiederherzustellen.


13.4.5 Lagerung der Backups

Als Administrator wird man häufig gebeten eine Datei wiederherzustellen, die durch einen Fehler gelöscht worden ist. Allerding merken die meisten Leute diesen Fehler nicht gleich sondern erst nach ein paar Tagen. Es ist daher wichtig die Backups auch einige Zeit aufzubewahren. In Abhängigkeit von den Informationen und wie schnell sie sich ändern, sollten Sie die Lagerhaltung planen.

13.4.5.0.1 Beispiel

Sie wollen die Sicherung acht Wochen lang aufbewahren. Sie benötigen daher für die acht Wochen auch die Bänder. Nach den acht Wochen können Sie die ältesten Bänder wieder benutzen. Daneben wollen Sie das monatliche Backup für ein Jahr aufheben.

  1. Jeden Freitag führen Sie ein volles Backup durch. Das Medium können Sie nach acht Wochen wieder benutzen. Sie benötigen dafür diese Sicherung also acht Bänder.
  2. Von Montag bis Donnerstag führen Sie ein differentielles Backup durch. Auch diese Bänder müssen acht Wochen aufbewahrt werden, da eine Datei ja am Montag erstellt werden und dann am Donnerstag ausversehen gelöscht kann. Sie brauchen hier vier mal acht Bänder also 32 Stück.
  3. An jedem ersten Tag im Monat machen sie ein volles Backup und bewahren die Bandkassette ein Jahr lang auf. Das macht also noch einmal zwölf Bänder.

Summa sumarum brauchen Sie also 52 Bänder um Ihre Backupstrategie durchführen zu können. Vergessen Sie aber auf keinen Fall die Bänder auch sorgfältig zu beschriften, sonst nützt Ihnen auch das vollständigste Backup nichts.

13.4.5.1 Lagerplatz und Schutz

Was nützt Ihnen das schönste Backup, wenn Sie Ihre Bänder direkt neben den Server legen. Ein kleines Feuer im Serverraum und nicht nur Ihr Server ist hinüber, sondern auch Ihre Sicherung. Also aufgepaßt. Ihre Sicherung nützt Ihnen nur etwas, wenn Sie die Bänder sicher aufbewahren. Am besten schaffen Sie sich einen feuerfesten Tresor an, wenn Sie die Bänder in der Nähe des Servers aufbewahren. Sinnvoll ist es, einen Teil der Bänder auch außerhalb der Firma aufzubewahren. Denken Sie aber auch daran, daß jeder, der an die Bänder kommt, auch Ihre Daten lesen kann. Ein Tresor zu Hause oder ein Schließfach in Ihrer Bank sind sehr sinnvoll.

13.4.5.2 Protokoll

Auch nützt Ihnen eine Sicherung nicht, wenn Sie vergessen ein Protokoll über Ihre Sicherung zu führen. Zumindest die Kassetten sollte durch eine Beschriftung Auskunft geben, was auf Ihnen gespeichert sind. Sonst müssen Sie Band für Band durchgehen, was auf ihm drauf ist. Oder Sie haben die Sicherung auf CD-R gebrannt. Inzwischen ist der Stapel an CD-Rs schon fünf mal umgekippt und alles ist durcheinander.

Machen Sie sich einfach einen Zettel und notieren Sie bei jedem Backup darauf:

13.5 Werkzeuge für die Sicherung

Es gibt eine große Anzahl von Programmen für die Datensicherung. Einige davon sind große mächtige kommerzielle Lösungen, andere sind klein und gehören zur Linux-Grundausstattung. Zwei davon sind tar und cpio.


13.5.1 tar

Das Programm tar (tape archive) wird dazu benutzt um mehrere Dateien zu einer Archivdatei zusammenzupacken. Dabei wird die Verzeichnisstruktur beibehalten. Obwohl tar entwickelt wurde um Daten auf Magnetbänder zu schreiben, kann ein solches tar-Archiv auf jedem beliebigem Medium gespeichert werden. Daneben kann tar die Archive bei der Erstellung auch gleichzeitig mit gzip (13.6.1) komprimieren.
tar [OPTIONEN] [TARARCHIV] [DATEILISTE]

In den Optionen bilden die Schalter eine besondere Gruppe. Es kann immer nur ein Schalter zur Zeit verwendet werden, während die anderen Optionen kombinierbar sind.

Schalter
A Hängt das ARCHIV2 and das Ende von ARCHIV1
c Legt ein neues Archiv an
d Vergleicht den Inhalt des Archivs mit anderen Dateien
r Fügt die neuen Dateien an das Ende eines bestehenden Archivs an
t Zeigt eine Liste aller Dateien im Archiv
u Fügt nur neue oder veränderte Dateien zum Archiv hinzu
x Extrahiert Dateien aus dem Archiv
 

Optionen
b N Definiert die Blockgröße
e Verhindert das Aufsplittern von Dateien über Archiv-Volumes
f DATEI Name des Archivs mit Pfad oder Gerätename
j Benutzt bzip2 zur Kompression
m Übernimmt nicht die Änderungszeit der Datei aus dem Archiv
n Das Gerät ist kein Bandgerät
p Die Originalrechte werden übernommen
v Zeigt die Liste der Dateien an, die bearbeitet werden
w tar arbeitet interaktiv
z Benutzt gzip zur Kompression
F Skript Am Ende jedes Mediums das angegeben Skript ausführen
L Länges des Bandes in kByte
M Das Archiv ist in mehrere Teile (Volumes) aufgeteilt.
W Überprüft die Dateien, nachdem sie zum Archiv hinzugefügt worden sind.
X DATEI Die in DATEI aufgeführten Dateien werden nicht berücksichtig.
Z Benutzt compress zur Kompression
--exclude DATEI Die DATEI wird nicht berücksichtigt.
 


13.5.1.1 Anlegen eines tar-Archivs

Erstellung eines Archivs (archiv.tar) über alle Dateien im aktuellen Arbeitsverzeichnis und dessen Unterverzeichnissen.
tar cf archiv.tar .

Als Ziel kann neben einer Datei auch ein Gerät angegeben werden. Der folgenden Befehl speichert das komplette Dateisystem auf dem Gerät /dev/tape.

tar cf /dev/tape /

Dabei wird der Inhalt des Magnetbandes überschrieben. Meistens müssen Sie bei einem Magnetband die Blockgröße mit angeben. Die Blockgröße definiert dabei die Menge an Daten (in Einheiten zu 512 Byte), die zur gleichen Zeit geschrieben werden können. Die Angabe erfolgt durch die Option b.

tar cfb /dev/tape 20 /

Wie Sie sehen, wird der Wert für b nicht wie üblich direkt hinter die Option geschrieben, sondern erst werden die Optionen aufgeführt und dann in der Reihenfolge die Werte.

Wenn Sie das Archiv auf mehrere Geräte (z. B. Disketten) aufteilen wollen, müssen Sie die Größe der Archiv-Teile (Volumes) angeben. Dies erfolgt durch den Schalter M. So speichert der folgende Befehl den Inhalt des Verzeichnis /home auf das Diskettengerät /dev/fd0 mit einer Größe von 1440 kB.

tar cfML /dev/fd0 1440 /home

Wenn Sie ein bestehendes Archiv nur auf den neuesten Stand bringen wollen, ohne alle Dateien erneut hineinzupacken, dann benutzen Sie den Schalter u.

tar uf archiv.tar .

Sie können Dateien auch an ein bestehendes Archiv anhängen.

tar rf archiv.tar neueDatei

Solche Archive können sehr groß werden, wenn Sie z. B. Logdateien speichern. Da es sich hierbei in den meisten Fällen um reine Textdateien handelt, können sehr gut gepackt werden. Mit der Option z wird tar angewiesen, das entstandene Archiv auch gleich mit gzip (Abschnitt 13.6.1) zu packen.

Um sich die Dateiliste des Archivs anzeigen zu lassen, kann man den folgenden Befehl verwenden.

tar tf archiv.tar

Nicht immer wollen Sie alle Dateien bzw. Unterverzeichnisse mit in das Archiv packen. Hier kommt die Option -exclude ins Spiel. Diese Option kann mehrfach vorkommen und gibt an, welche Dateien nicht mit ins Archiv sollen.

barclay@enterprise:~/test> tar cvf befehle.tar befehle/
befehle/
befehle/data
befehle/befehle
befehle/befehle.bck
befehle/data.bck
befehle/data.old
barclay@enterprise:~/test> tar cvf befehle.tar --exclude data.old befehle/
befehle/
befehle/data
befehle/befehle
befehle/befehle.bck
befehle/data.bck
barclay@enterprise:~/test> tar cvf befehle.tar --exclude data.old --exclude "*.bck" befehle/
befehle/
befehle/data
befehle/befehle

Haben Sie ein paar Dateien mehr, die nicht mit ins Archiv dürfen, dann können Sie die Namen auch in eine Datei schreiben und diese mit dem Schalter -X als Informationsquelle verwenden.

barclay@enterprise:~/test> cat noarchiv
data.old
*.bck
barclay@enterprise:~/test> tar cvf befehle.tar -X noarchiv befehle/
befehle/
befehle/data
befehle/befehle


13.5.1.2 Entpacken eines tar-Archivs

Um eine Archiv zu entpacken (Schalter x) und dabei auch die Dateinamen zu sehen (Option v) können Sie den folgenden Befehl benutzen.
tar xvf archiv.tar

Vor dem Entpacken, sollten Sie feststellen welche Verzeichnispfad gespeichert wurden. Dies können Sie mit dem Befehl

tar tvf archiv.tar
feststellen. Die Option v erzeugt eine ausführlichere Anzeige als t alleine.

Schauen wir uns doch mal folgendes Beispiel an:

Aus dem Wurzelverzeichnis haben Sie die Daten im Verzeichnis /home mit folgendem Befehl gespeichert.

tar cf home.tar home/*

Daher wurde das Verzeichnis home in jedem Pfad mit eingefügt. Sind Sie allerdings ins Verzeichnis /home gewechselt und haben den Befehl als

tar cf home.tar .
ausgeführt, so ist das Verzeichnis home nicht mehr Bestandteil des Dateipfads.

Bei einem Backup sollten Sie die Dateien immer in dem gleichen Verzeichnis extrahieren in dem Sie auch das Archiv erzeugt hatten.

Um einzelne Dateien aus einem Archiv zu entpacken, können Sie zum einen den interaktiven Modus (Option w) von tar wählen. Bei dem folgenden Befehl werden Sie bei jeder Datei gefragt, ob Sie die Datei entpacken wollen.

tar xvwf archiv.tar

Allerdings hat diese Methode einen schwerwiegenden Nachteil. Auf diesem Wege eine Datei aus einem 10.000 Dateien-Archiv zu entpacken ist doch etwas mühselig. Hier bietet sich einfach an, die gewünschte Datei einfach anzugeben.

tar xf archiv.tar meineDatei.txt

Sie können auch den umgekehrten Weg nehmen und die Dateien angeben, die nicht extrahiert werden sollen. Dies geht analog zum Erstellen des Archivs.

tar xvf archiv.tar --exclude "*.bck"


13.5.2 Was ist ein Tarball?

Diese Frage stellen sich viele Benutzer, die zum ersten Mal ein Programm aus dem Netz laden und nicht von der Distribution installieren wollen. Auf den meisten Seiten findet sich neben Bezeichnungen wie RPM- und GNU Debian-Paketen auch die Möglichkeit das Programm als Tarball herunterzuladen.

Neben den schon fertig kompilierten Binärdateien erhalten Sie in der Open Source Gemeinde auch den Quellcode um ihr Programm selbst kompilieren und installieren zu können. Dabei wird der Quellcode nicht nur alleine vertrieben, sondern meist zusammen mit Konfigurationsdateien für die Installation und Dokumentationen zum Programm. Diese Dateien befinden sich meistens in einer Verzeichnisstruktur.

Solche Strukturen werden am besten in einem tar-Archiv gesichert. Damit das entstandene Archiv auch schnell heruntergeladen werden kann, wird es komprimiert. Dabei kommt meistens das Programm gzip (13.6.1) zum Einsatz. Aber auch bzip2 (13.6.2) wird gerne verwendet, während das veraltete compress kaum mehr zum Einsatz kommt.

barclay@enterprise:~> tar cf superduper_2.1.tar superduper/2.1/ 
barclay@enterprise:~> gzip superduper_2.1.tar

Es ist dann eine Datei mit der Endung tar.gz entstanden. Ein solches komprimiertes Archiv wird als Tarball bezeichnet.

Beim Auspacken geht man den umgekehrten Weg. Erst entpacken und dann die Dateien aus dem Archiv extrahieren.

tapico@defiant:~> gunzip superduper_2.1.tar.gz
tapico@defiant:~> tar xf superduper_2.1.tar

Nun ist das Verzeichnis  /superduper/2.1 entstanden, daß alle Dateien enthält. Heute können Sie das Entpacken und Extrahieren in einem Schritt durchführen. Der Schalter z beim Befehl tar berücksichtigt die GZIP-Kompression. Für die Kompression mit bzip2 muß der Schalter j verwendet werden und bei compress der Schalter Z.

tapico@defiant:~> tar zxf superduper_2.1.tar.gz
tapico@defiant:~> tar Zxf turbogeil_3.2.tar.Z
tapico@defiant:~> tar jxf megastark_0.7.tar.bz2

Denken Sie bitte daran, daß Sie beim Erstellen des Archivs die passenden Endungen für die Kompression selbst anhängen müssen.

barclay@enterprise:~> tar zcf superduper_2.1.tar.gz superduper/2.1/
barclay@enterprise:~> tar Zcf turbogeil_3.2.tar.Z turbogeil/3.2/
barclay@enterprise:~> tar jcf megastark_0.7.tar.bz2 megastark/0.7/

Für die Endung .tar.gz kann auch .tgz verwendet werden.


13.5.3 cpio

Ein weiteres Werkzeug für Arbeit mit Archiven ist cpio (copy in and out). Sie können damit nicht nur aus mehreren Dateien ein Archiv machen und die Dateien aus einem solchen Archiv wieder extrahieren, sondern auch komplette Verzeichnisstrukturen an einen anderen Ort kopieren.
cpio [OPTIONEN]

Wie auch bei tar gibt es auch hier Schalter und Optionen.

Schalter
-o Legt ein neues Archiv an
-i Extrahiert Dateien aus einem Archiv
-p Kopiert komplette Verzeichnisstrukturen
 

Optionen
-a Setzt die Zugriffszeit der Dateien nach dem Kopieren zurück.
-d Erzeugt Verzeichnisse, wenn Sie benötigt werden (-i und -p)
-E DATEI Name einer Datei mit zusätzlichen Mustern für die zu entpackenden Dateien
-F ARCHIV Name des Archivs, was entpackt werden soll (-i)
-m Erhält die Änderungszeit der Dateien (-i)
-r Fragt nach einem neuen Namen für die Datei vorm Kopieren, wird kein Namen angegeben, wird die Datei nicht kopiert.
-t Zeigt mit -i die Dateiliste des Archivs an
-u Überschreibt existierende Dateien
-v Zeigt die Dateinamen bei der Bearbeitung an
 

Im Gegensatz zu tar arbeitet cpio nicht direkt mit den Dateien sondern übernimmt nur die Aufgabe der Archivierung. Um alle Dateien und Verzeichnisse im Verzeichns /home zu sichern, müssen die Dateinamen mit find übergeben werden und die Ausgabe in eine Datei umgeleitet werden.

find /home | cpio -o > home.cpio

Um nun zu prüfen welche Dateien in dem Verzeichnis sind, können Sie folgenden Befehl benutzen.

cpio -itF home.cpio

Um das Archiv zu entpacken, benutzen Sie den Befehl

cpio -iF home.cpio

Eine einzelne Datei läßt sich genau wie bei tar aus einem Archiv extrahieren.

cpio -iF home.cpio meineDatei.txt


13.6 Kompression

Selbst im Zeitalter der heutigen riesigen Festplatten13.3 ist nie genug Platz vorhanden. Wichtig wird die Menge der Daten, wenn es um die Übertragung durchs Internet geht. Hier sind die Datenraten noch immer viel zu klein. Da aber die meisten Dateien viel weniger Informationen erhalten, als Daten in ihnen steckt, wurden Algorithmen entwickelt um die Daten auf diese Information zu komprimieren. Dieser Abschnitt behandelt nun die unter Linux gängigen Programme zur Kompression.

13.6.1 gzip, gunzip und zcat

Unter den Namen gzip, gunzip und zcat verbirgt sich jeweils das gleiche Programm.

ole@enterprise:~> ls -i /bin/{gzip,gunzip,zcat}
 926671 /bin/gunzip   926671 /bin/gzip   926671 /bin/zcat


13.6.1.1 gzip

Das Tool gzip komprimiert den Inhalt einer Datei und erzeugt daraus eine neue Datei mit dem gleichen Namen und einem angehängten .gz. Im Gegensatz zu dem Programm zip, daß es auch unter verschiedenen Namen unter Windows gibt, kann gzip nur eine Datei packen und löscht standardmäßig auch die Originaldatei.
gzip [OPTIONEN] [DATEI]

Optionen
-c Zeigt den Inhalt an ohne die komprimierte Datei zu löschen; zusammen mit -d (content)
-d Dekomprimiert die Datei (decompress)
-n Speichert nicht die originalen Zeitstempel und Dateinamen(no name)
-N Speichert die originalen Zeitstempel (Standard) (!(no name))
-q Unterdrückt Warnmeldungen (quiet)
-r Verarbeitet auch die Dateien in Unterverzeichnissen (recursive)
-t Test der Datenintegrität(test)
-v Name und Kompressiongrad werden ausgegeben(verbose)
-ZAHL Gibt den Kompressionsgrad mit ZAHL an; Wert zwischen 1 (niedrig) und 9 (hoch).
 

13.6.1.2 Komprimieren

Um die alte Version des Manuskripts zu komprimieren, deren Dateien im Verzeichnis lk-0.3 liegen, kann man wie folgt vorgehen. Beachten Sie, daß jede Datei einzeln komprimiert wurde.

tapico@defiant:~ > ls-l lk-0.3
insgesamt 428
-rw-r--r--    1 tapico   users       27494 Okt 17 21:32 lk-backup.tex
-rw-r--r--    1 tapico   users       48607 Okt 17 21:32 lk-bootvorgang.tex
-rw-r--r--    1 tapico   users       42321 Okt 17 21:32 lk-dateisystem.tex
-rw-r--r--    1 tapico   users       40262 Okt 17 21:32 lk-grundbefehle.tex
-rw-r--r--    1 tapico   users       25652 Okt 17 21:32 lk-hilfe.tex
-rw-r--r--    1 tapico   users       13915 Okt 17 21:32 lk-installation.tex
-rw-r--r--    1 tapico   users       13394 Okt 17 21:32 lk-listen.tex
-rw-r--r--    1 tapico   users       30716 Okt 17 21:32 lk-shell.tex
-rw-r--r--    1 tapico   users       39591 Okt 17 21:32 lk-textfilter.tex
-rw-r--r--    1 tapico   users        3427 Okt 17 21:32 lk.tex
tapico@defiant:~ > gzip -v lk-0.3/*
lk-0.3/lk-backup.tex:    65.0% -- replaced with lk-0.3/lk-backup.tex.gz
lk-0.3/lk-bootvorgang.tex:       64.8% -- replaced with lk-0.3/lk-bootvorgang.tex.gz
lk-0.3/lk-dateisystem.tex:       65.2% -- replaced with lk-0.3/lk-dateisystem.tex.gz
lk-0.3/lk-grundbefehle.tex:      67.1% -- replaced with lk-0.3/lk-grundbefehle.tex.gz
lk-0.3/lk-hilfe.tex:     63.7% -- replaced with lk-0.3/lk-hilfe.tex.gz
lk-0.3/lk-installation.tex:      59.6% -- replaced with lk-0.3/lk-installation.tex.gz
lk-0.3/lk-listen.tex:    69.7% -- replaced with lk-0.3/lk-listen.tex.gz
lk-0.3/lk-shell.tex:     65.7% -- replaced with lk-0.3/lk-shell.tex.gz
lk-0.3/lk-textfilter.tex:        69.2% -- replaced with lk-0.3/lk-textfilter.tex.gz
lk-0.3/lk.tex:           58.7% -- replaced with lk-0.3/lk.tex.gz
tapico@defiant:~ > ls-l lk-0.3
insgesamt 164
-rw-r--r--    1 tapico   users        9642 Okt 17 21:32 lk-backup.tex.gz
-rw-r--r--    1 tapico   users       17105 Okt 17 21:32 lk-bootvorgang.tex.gz
-rw-r--r--    1 tapico   users       14729 Okt 17 21:32 lk-dateisystem.tex.gz
-rw-r--r--    1 tapico   users       13261 Okt 17 21:32 lk-grundbefehle.tex.gz
-rw-r--r--    1 tapico   users        9331 Okt 17 21:32 lk-hilfe.tex.gz
-rw-r--r--    1 tapico   users        5648 Okt 17 21:32 lk-installation.tex.gz
-rw-r--r--    1 tapico   users        4087 Okt 17 21:32 lk-listen.tex.gz
-rw-r--r--    1 tapico   users       10556 Okt 17 21:32 lk-shell.tex.gz
-rw-r--r--    1 tapico   users       12230 Okt 17 21:32 lk-textfilter.tex.gz
-rw-r--r--    1 tapico   users        1438 Okt 17 21:32 lk.tex.gz
tapico@defiant:~ >

Anstatt eine Datei zu erstellen kann in beiden Richtung (Komprimieren und Dekomprimieren) das Ergebnis auf die Standardausgabe umgeleitet werden. Dabei bleibt die Ursprungsdatei im Gegensatz zur normalen Vorgehensweise erhalten.

tapico@defiant:~ > gzip -c lk.tex > lk.tex.gz


13.6.1.3 gunzip

Der Befehl gunzip sorgt dafür, daß eine mit gzip gepackte Datei wieder entpackt wird.
gunzip [OPTIONEN] [DATEILISTE]

Dabei ist gunzip gar kein eigenständiges Programm, sondern nur ein anderer Dateiname für gzip.

ole@enterprise:~> ls -i /bin/{gzip,gunzip}
 926671 /bin/gunzip   926671 /bin/gzip

Das Programm gzip kann erkennen, unter welchem Namen es aufgerufen wurde. Deshalb ist gunzip nichts anderes als gzip -d. Aus diesem Grund gelten auch die gleichen Optionen wie bei gzip. So ist auch der folgende Befehl, so unsinnig er auch sein mag, vollkommen korrekt und erledigt die vorgesehene Aufgabe.

ole@enterprise:~> gunzip -d buch.tex.gz


13.6.1.4 zcat

Das Kommando zcat arbeitet wie der Befehl cat (Abschnitt 4.5.2). Im Gegensatz zu diesem gibt es den Inhalt mit gzip und compress gepackter Dateien auf den Bildschirm aus.

zcat [DATEILISTE]

Die gepackte Datei wird durch den Befehl nicht verändert. Auch hier ist gzip gemeint und es wird eigentlich der Befehl gzip -cd ausgeführt.


13.6.2 Komprimieren mit bzip2

Das Tool bzip2 komprimiert Dateien auf der Basis des ``Burrows Wheeler block sorting text compression''-Algorithmus. Dieses Verfahren ermöglicht bessere Komprimierungsraten als die der Programme gzip oder compress.

 bzip2 [OPTIONEN] [DATEILISTE]

Obgleich sich bzip2 und gzip sehr ähnlich sind, sind sie nicht identisch.

Optionen
-c Zeigt den Inhalt an ohne die komprimierte Datei zu löschen; zusammen mit -d (content)
-d Dekomprimiert die Datei (decompress)
-f Überschreibt vorhandene Dateien (force)
-n Speichert nicht die originalen Zeitstempel und Dateinamen(no name)
-k Quelldatei wird nicht gelöscht (keep)
-N Speichert die originalen Zeitstempel (Standard) (!(no name))
-q Unterdrückt Warnmeldungen (quiet)
-t Test der Datenintegrität(test)
-v Name und Kompressiongrad werden ausgegeben(verbose)
-z Komprimiert die Datei, Standardeinstellung
-ZAHL Gibt den Kompressionsgrad mit ZAHL an; Wert zwischen 1 (niedrig) und 9 (hoch).
 

Durch den besseren Algorithmus kann bzip2 deutlich besser komprimieren als gzip. Das Beispiel einer großen DVI-Datei (ASCII-Code) zeigt, daß die Kompressionsrate von bzip2 deutlich größer ist als die von gzip.

ole@enterprise:~/test> ls -l
insgesamt 2584
-rw-r--r--    1 ole      users     1692688 2004-06-27 07:51 lk.dvi
-rw-r--r--    1 ole      users      409181 2004-06-27 07:59 lk.dvi.bz2
-rw-r--r--    1 ole      users      528016 2004-06-27 07:59 lk.dvi.gz

Beim Komprimieren zerlegt bzip2 die Datei in einzelne Blöcke. Je größer die Blöcke sind, desto besser ist der Komprimierungsgrad. Einen direkten Einfluß auf die Größe der Blöcke können Sie mit den Optionen -1 bis -9 ausüben. Diese geben direkt die Größe des Blocks in 100.000 Bytes an. Defaulteinstellung ist -9. Die Verwendung von größeren Blocks hat keinen signifikanten Einfluß mehr auf die Komprimierungsrate. Je kleiner die zu komprimierende Datei ist, desto geringer ist auch der Einfluß der Komprimierungseinstellung.

Der Komprimierer bzip2 benutzt eine 32-Bit-CRC-Checksumme um die Datenintegrität des Archivs überprüfen zu können Die Überprüfung wird durch den Schalter -t aktiviert.

Für weitere Informationen, speziell zu den verwendeten Blockgrößen und Speichernutzung, konsultieren Sie die Manualpage bzip2(1).

Wie auch bei gzip besitzt bzip2 weitere Namen, die bestimmte Aktionen von bzip2 aufrufen. Das Tool bzip2recover ist dagegen ein eigenständiges Programm.

ole@enterprise:~> ls -lG /usr/bin/{bzip2,bunzip2,bzcat,bzip2recover}
lrwxrwxrwx    1 root            5 2004-04-03 09:17 /usr/bin/bunzip2 -> bzip2
lrwxrwxrwx    1 root            5 2004-04-03 09:17 /usr/bin/bzcat -> bzip2
-rwxr-xr-x    1 root        26464 2003-09-23 17:23 /usr/bin/bzip2
-rwxr-xr-x    1 root         8352 2003-09-23 17:23 /usr/bin/bzip2recover


13.6.2.1 bunzip2

Dieser Name zeigt auch auf das Tool bzip2. Unter diesem Namen aufgerufen, aktiviert es den Schalter -d zum dekomprimieren.

 bunzip2 [OPTIONEN] [DATEILISTE]

Beim Dekomprimieren werden die Endungen wie folgt umgewandelt. Bei den Endungen .bz2 und bz werden die Endungen vom Dateinamen entfernt. Die Endungen .tbz2 und .tbz weisen auf komprimierte Tar-Archive hin und werden in .tar umgewandelt. Handelt es sich um keine der genannten Endungen, dann wird an die entkomprimierte Datei die Endung .out angehängt.


13.6.2.2 bzcat

Auch dieser Name zeigt auf das Tool bzip2. Unter diesem Namen aufgerufen, aktiviert es die Schalter -cd zum dekomprimieren und gleichzeitiger Ausgabe auf der Standardausgabe.

 bzcat [OPTIONEN] [DATEILISTE]


13.6.2.3 Datenrettung mit bzip2recover

Sehr selten kommt es vor, daß eine komprimierte Datei z. B. durch ein Bitkipper fehlerhaft wird. In diesem Fall meldet bunzip2 bzw. bzip2 einen Fehler und verweigert das Dekomprimieren. Trotzdem ist die Datei nicht vollständig verloren. Da die Komprimierung in unabhängigen Blöcken erfolgt, können diese durch das Tool als einzelne Bzip2-Dateien ausgegeben werden.

bzip2recover DATEI

Aus der beschädigten Datei erstellt das Tool für jeden Block eine Datei mit dem Namen rec00001file.bz2, rec00002file.bz2, usw. Die einzelnen Dateien können nun mit bzip2 -t auf ihre Integrität überprüft und dann einzeln entpackt werden. Das Verfahren ist natürlich nur sinnvoll bei großen Dateien, die viele Blöcke enthalten. Dateien, die nur aus einem Block bestehen, können nicht wiederhergestellt werden. Wenn Sie die Sicherheit der komprimierten Dateien erhöhen wollen, sollten Sie bei der Komprimierung eine kleine Blockgröße einstellen.

ole@enterprise:~/test> bunzip2 lk.dvi.bz2

bunzip2: Data integrity error when decompressing.
        Input file = lk.dvi.bz2, output file = lk.dvi

It is possible that the compressed file(s) have become corrupted.
You can use the -tvv option to test integrity of such files.

You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.

bunzip2: Deleting output file lk.dvi, if it exists.
ole@enterprise:~/test> bunzip2 -tvv lk.dvi.bz2
  lk.dvi.bz2:
    [1: huff+mtf rt+rld]
    [2: huff+mtf rt+rld]
...
    [11: huff+mtf rt+rld]
    [12: huff+mtf data integrity (CRC) error in data

You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.
ole@enterprise:~/test> bzip2recover lk.dvi.bz2
bzip2recover 1.0.2: extracts blocks from damaged .bz2 files.
bzip2recover: searching for block boundaries ...
   block 1 runs from 80 to 47833
   block 2 runs from 47882 to 85493
...
   block 17 runs from 3647046 to 3864608
   block 18 runs from 3864657 to 3864696 (incomplete)
bzip2recover: splitting into blocks
   writing block 1 to `rec00001lk.dvi.bz2' ...
   writing block 2 to `rec00002lk.dvi.bz2' ...
...
   writing block 16 to `rec00016lk.dvi.bz2' ...
   writing block 17 to `rec00017lk.dvi.bz2' ...
bzip2recover: finished
ole@enterprise:~/test> ls
lk.dvi.bz2          rec00005lk.dvi.bz2  rec00010lk.dvi.bz2  rec00015lk.dvi.bz2
rec00001lk.dvi.bz2  rec00006lk.dvi.bz2  rec00011lk.dvi.bz2  rec00016lk.dvi.bz2
rec00002lk.dvi.bz2  rec00007lk.dvi.bz2  rec00012lk.dvi.bz2  rec00017lk.dvi.bz2
rec00003lk.dvi.bz2  rec00008lk.dvi.bz2  rec00013lk.dvi.bz2
rec00004lk.dvi.bz2  rec00009lk.dvi.bz2  rec00014lk.dvi.bz2
ole@enterprise:~/test> bzip2 -t rec*
bzip2: rec00012lk.dvi.bz2: data integrity (CRC) error in data

You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.

ole@enterprise:~/test> rm rec00012lk.dvi.bz2
ole@enterprise:~/test> bunzip2 -c rec*.bz2 > lk.dvi


13.6.3 compress und uncompress

Das Tool compress ist eines der ältesten Kompressionstools. Die komprimierte Datei endet auf .Z.

compress [DATEILISTE]

Da die Kompressionsraten von compress allerdings schlechter sind, als die der heutigen Tools, wird es kaum noch verwendet. Es gehört auch seit germaumer Zeit nicht mehr zum Standardumfang der SuSE-Distribution.


13.6.3.1 uncompress

Um mit compress komprimierte Dateien wieder zu entpacken, benutzt man das Tool uncompress.

uncompress [DATEILISTE]


Notizen:

Administrative Aufgaben % latex2html id marker 19477
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

Stellen Sie sicher, daß Sie auf keiner Konsole eingeloggt sind und auch keine Terminalemulationen auf der graphischen Oberfläche laufen. Führen Sie diese Aufgaben nur auf der Textkonsole aus und nicht in den Terminalemulationen des X-Window-Systems.

443
Loggen Sie sich an der Konsole 1 als root ein.

444
Legen Sie die Benutzer ryker und troi mit ihren Heimatverzeichnissen an. Geben Sie ryker das Kennwort terra und troi das Kennwort betazed.

445
Loggen Sie sich in Konsole 2 als ryker ein.

446
Loggen Sie sich in Konsole 3 als troi ein.

447
Auf welchem Terminal arbeiten Sie gerade?

448
Loggen Sie sich in Konsole 4 als ryker ein.

449
Stellen Sie fest, wer eingeloggt ist.

450
Stellen Sie fest, an welchem Terminal Sie gerade arbeiten.

451
Wechseln Sie zur Konsole 2.

452
Schreiben Sie mit dem echo-Befehl den Satz ``Scott me up, Beamy''. Leiten Sie die Ausgabe auf die Konsole 4 um.

453
Wechseln Sie zur Konsole 3 und wiederholen die Aufgabe 10. Schauen Sie auf der Konsole 4 nach dem Ergebnis.

454
Wechseln Sie zur Konsole 1 und wiederholen die Aufgabe 10. Schauen Sie auf der Konsole 4 nach dem Ergebnis.

455
Vergleichen Sie Ihr Ergebnis mit den Rechten auf die Konsole 4.

456
Wechseln Sie in die Konsole 3.

457
Erstellen Sie die Datei .plan mit dem Inhalt: ``Heute Kaffekränzchen''

458
Lassen Sie sich ausführliche Informationen über den Benutzer troi anzeigen. Wurde der Inhalt der Datei .plan mit ausgegeben?

459
Wechseln Sie zur Konsole 2. Stellen Sie fest, wer Sie nun sind.

460
Lassen Sie sich ausführliche Informationen über den Benutzer troi anzeigen. Wurde der Inhalt der Datei .plan mit ausgegeben?

461
Sollte der Inhalt von .plan nicht ausgegeben worden sein, dann erläutern Sie das Grund und ändern das System so, daß der Fehler nicht mehr auftritt.

462
Sie haben gerade einen Anruf erhalten. Sie sollen den Gesprächspartner in 5 Minuten zurückrufen. Basteln Sie sich mit Bordmitteln einen Wecker, der Sie mit einem Signalton und einer Textnachricht daran erinnert.

463
Lassen Sie sich alle aktuellen at-Jobs anzeigen.

464
Wechseln Sie Ihre Benutzeridentität zu root.

465
Pünktlichkeit war noch nie Ihr Stärke. Sie haben nun zum wiederholten Male Ärger bekommen, weil Sie in der Mittagspause durchgearbeitet haben. Richten Sie nun einen Dienst ein, der alle Benutzer täglich um 12:15 Uhr daran erinnert, Mittagspause zu machen.

% latex2html id marker 19563
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large ...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

466
Unter welcher Benutzeridentät arbeiten Sie gerade?

467
Unter welchem Namen hatten Sie sich auf dieser Konsole eingeloggt?

468
Lassen Sie sich den letzten Einloggzeitpunkt der Benutzer anzeigen. Welche Benutzer haben sich noch nie eingeloggt?

469
Welche Benutzer sind zur Zeit eingeloggt?

470
Lassen Sie sich den Inhalt der Datei /var/run/utmp möglichst effektiv anzeigen und vergleichen Sie den Inhalt mit dem Ergebnis der vorherigen Aufgabe.

471
Verbieten Sie dem Benutzer troi das Anlegen von at-Jobs. Testen Sie den Erfolg der Maßnahme.

472
Kehren Sie zur Konsole 1 zurück.

473
Verständigen Sie sich mit Ihrem Partner am Nachbarrechner.

474
Loggen Sie sich mit SSH auf dem Nachbarrechner als ryker ein.

475
Auf welchem Terminal arbeiten Sie gerade?

476
Wer ist gerade eingeloggt?

477
Wie lautet ihr Loginname?

478
Loggen Sie sich wieder aus.

479
Wo befinden Sie sich nun im System?


Notizen:


14. Programminstallation und Kernelmanagement

Bei den heutigen Distributionen ist die Installation der mitgelieferten Programme oder besser gesagt Programmpakete durch die distributionsspezifischen Verwaltungswerkzeuge sehr einfach. In den meisten Fällen liegen die Programmpakete als RPM- (Redhat Package Manager) oder als Debian-Archiv vor. Wie kann der Benutzer nun Programme installieren, die nicht mit der Distribution mitgeliefert wurden?

Das hängt vor allem davon ab, wie das Programm vorliegt: Als ein Archiv mit dem Quellcode, als ein Archiv mit den Binärdateien mit eigenem Installationsprogramm oder als Binärdateien in Installationsarchiven vom Typ Debian oder RPM.


14.1 Kompilieren des Quellcodes

Eigentlich alle Open Source Programme sind als Quellcode verfügbar. Der große Vorteil dieser Methode ist die Flexibilität bei der Einpassung des Programms in bestehende Strukturen (Verzeichnisse, Bibliotheken), während die Weitergabe als Binärdateien oft bestimmte Bedingungen an die Form und Ausstattung des Systems stellt.

Die Installation auf diese Art und Weise ist komplizierter, da sie individuell vom Programmierer vorgegeben wird. Es hat sich aber eine bestimmte Vorgehensweise eingebürgert, nach der doch die meisten Programmierer vorgehen. Auf jeden Fall sollten Sie die Dateien INSTALL und README mit den Anweisungen des Programmierers lesen, bevor Sie mit der Installation beginnen.


14.1.1 Entpacken eines Tarballs

In den meisten Fällen werden die Dateien für die Installation in einem Verzeichnisbaum vertrieben. Dies schließt den Quellcode (in der Sprache C), die Make-Datei und zusätzliche Dokumentationen ein. Um diesen Baum einfach vertreiben zu können, werden die Dateien und die Struktur in einem tar-Archiv (13.5.1) zusammengefaßt und mit gzip (13.6.1) zu einem Tarball (13.5.2) gepackt. Entpackt werden kann das Archiv auf verschiedene Arten:

barclay@enterprise:~> gzip -d quellcode.tar.gz
barclay@enterprise:~> tar xvf quellcode.tar

barclay@enterprise:~> gunzip quellcode.tar.gz
barclay@enterprise:~> tar xvf quellcode.tar

barclay@enterprise:~> gzip -cd quellcode.tar.gz | tar xv

barclay@enterprise:~> tar zxvf quellcode.tar.gz


14.1.2 Aufbau von C-Programmen

Die meisten Programme für Linux sind in der Programmiersprache C bzw. C++14.1 geschrieben. Bei größeren Projekten ist es üblich den Quellcode der Programme in mehreren einzelnen Dateien zu erstellen und zu bearbeiten. Diese Dateien mit der Endung .c müssen dann einzeln kompiliert werden. Es entstehen sogenannte Objekt-Dateien mit der Endung .o. In einem zweiten Arbeitsgang werden dann diese Dateien zu dem eigentlichen Programm zusammengelinkt.

14.1.2.0.1 Beispiel

 
An diesem Beispiel für ein zugegeben ziemlich primitives C-Programm kann der Vorgang nachvollzogen werden. Sie werden in den nächsten Abschnitten noch einmal darauf stoßen.

Als Erstes erstellen Sie die C-Datei start.c, die die Methode main() enthält.

Listing 14.1   start.c14.2

   1: int main() {
   2:   printHallo();
   3: }

In der Methode main() wird die Methode printHallo() aufgerufen. Diese ist weder eine Methode aus den Standard-C-Bibliotheken noch in der gleichen Datei vorhanden. Sie ist nämlich in der Datei hallo.c definiert worden.

Listing 14.2   hallo.c

   1: #include <stdio.h>
   2: 
   3: void printHallo() {
   4:   printf("Hallo Fibelleser!\nEs hat geklappt\n");
   5: }
   6:

Die beiden Quellcode-Dateien müssen nun zuerst kompiliert werden. Dazu verwenden Sie den C-Kompiler gcc. Der Schalter -c bewirkt, daß die angegebene Datei zu einer Objekt-Datei kompiliert wird. Dann werden die beiden Objektdateien durch gcc mit dem Schalter -o zu der Programmdatei gruss zusammengelinkt. Dann noch schnell die Rechte für das neue Programm geändert und fertig ist der Gruß.

barclay@enterprise:~/cprog> gcc -c start.c
barclay@enterprise:~/cprog> gcc -c hallo.c
barclay@enterprise:~/cprog> gcc -o gruss start.o hallo.o
barclay@enterprise:~/cprog> chmod 755 gruss
barclay@enterprise:~/cprog> gruss
Hallo Fibelleser!
Es hat geklappt
barclay@enterprise:~/cprog>


14.1.3 configure

Die meisten größeren Quellcodepakete enthalten ein ``configure''-Skript. Dieses Skript muß vom Benutzer weder bearbeitet oder mit Schaltern beim Starten konfiguriert werden. Seine Aufgabe ist es, die Systemkonfiguration auf Kompiler, Bibliotheken und andere wichtige Elemente für die Kompilierung zu testen. Auf der Basis der ermittelten Informationen schreibt das Skript eine individuelle Installationskonfigurationsdatei (Make-Datei) passend für das System. Sollte configure Fehler wie fehlende Bibliotheken finden, so meldet das Skript das mit einer Fehlermeldung. Erfahrungsgemäß arbeitet configure in den meisten Fällen erfolgreich und Sie können mit dem eigentlichen Kompilieren beginnen.


14.1.4 make

Das Programm make ist ein Hilfsmittel für das Kompilieren. Wenn der Quellcode aus mehreren Dateien besteht, muß jede dieser Dateien einzeln kompiliert und dann alle Dateien zu einem Programm zusammgelinkt werden.

make erledigt das, in dem in einer Konfigurationsdatei Ziele und Abhängigkeiten definiert werden. Das Ziel einer solchen Datei ist die Kompilierung eines Programms. Dieses Programm hängt ab von den Objekt-Dateien, die wiederum abhängen von den jeweiligen Quellcode-Dateien. Der Vorteil bei der Verwendung von make ist unter anderem, daß die Änderungszeit von bereits bestehenden Objektdateien mit den jeweiligen Quellcode-Dateien verglichen werden. Normalerweise sind die Objektdateien immer jünger als die Quellcode-Dateien. In diesem Fall werden die Quellcode-Dateien nicht noch einmal kompiliert. Ist die Quellcode-Datei aber jünger als die Objektdatei, so wurde sie wahrscheinlich seit dem letzten Kompiliervorgang verändert und wird deshalb bei diesem Lauf erneut kompiliert. Dadurch sparen Sie enorm viel Zeit, da bei kleinen Änderungen keine komplette Neukompilierung notwendig ist.

Am Beispiel des Programms aus Abschnitt 14.1.2 möchte ich Ihnen den Aufbau einer solchen Make-Datei zeigen.

Das Ziel