Sie sind auf Seite 1von 1189

X. systems.

press

X.systems.press ist eine praxisorientierte


Reihe zur Entwicklung und Administration von
Betriebssystemen, Netzwerken und Datenbanken.
Peter H. Ganten beschäftigt sich seit 1994 mit
GNU/Linux, zunächst als Anwender, später dann als
Entwickler, Fachautor, Consultant, Trainer, Analyst
und strategischer Berater und seit 2002 als Unter-
nehmer in der von ihm gegründeten Univention
GmbH.
Seine in vielen Projekten für Verwaltungen und
Unternehmen erworbenen Erfahrungen im
GNU/Linux-Umfeld setzt er mit seinen Mitarbeitern
dazu ein, Unternehmen und Behörden durch
passende Produkte und Dienstleistungen darin zu unterstützen, Linux-
basierte Infrastrukturen erfolgreich einzuführen und auszubauen.
Univention ist Hersteller des Univention Corporate Server, einem auf
Debian GNU/Linux basierenden Betriebssystem mit integriertem
Managementsystem, das besonders in komplexen, verteilten IT-Infra-
strukturen seine Stärken hat. Darüber hinaus bietet Univention
professionelle Dienstleistungen an wie Analyse, Beratung und Support.
Schwerpunkte der Kompetenz von Univention sind neben Linux unter
anderem auch Verzeichnisdienste und die Integration von Linux mit
Windows-Systemen.

Wulf Alex studierte Elektrotechnik mit der Fachrich-


tung Nachrichtentechnik – unter anderem bei Karl
Steinbuch – an der TH Karlsruhe und promovierte
dort an der Fakultät für Chemieingenieurwesen bei
Hans Rumpf.
Nach einem Forschungsaufenthalt an der Universität
Uppsala (Schweden) verantwortete er die gesamte EDV
eines großen Hochschulinstitutes, anfangs mit einem
zentralen UNIX-Rechner, zuletzt mit einem hetero-
genen Netz bestehend aus etwa zweihundert
Maschinen unter UNIX, Linux, MacOS und MS Windows. Ferner übernahm
er Lehraufträge zur Partikelmesstechnik, zu Linux/UNIX und zur Program-
mierung in C/C++. Er arbeitete an mehreren Büchern mit.
Programmieren hat Wulf Alex auf einer Zuse Z 22 gelernt, die er auch als
Nachtoperator gefahren hat. Heute ist er, mit etwas mehr verfügbarer Zeit,
Admin eines Domestic Area Networks und als Autor weiterhin im
Linux/UNIX-Umfeld aktiv – wenn er nicht gerade in seinen Bergstiefeln
unterwegs ist, an einem Baggersee Wachdienst leistet oder auf seinem
Motorrad Europa durchstreift.
Peter H. Ganten • Wulf Alex

Debian
GNU/Linux
Grundlagen, Einrichtung und Betrieb

3., überarbeitete Auflage

Mit 139 Abbildungen und 22 Tabellen

123
Peter H. Ganten
c/o Univention GmbH
Mary-Somerville-Str. 1
28359 Bremen
ganten@univention.de

Wulf Alex
Rieslingweg 14
76356 Weingarten (Baden)
alex-weingarten@t-online.de

Korrekturen und Ergänzungen:


http://www.univention.de/debian-buch/
http://www.alex-weingarten.de/debian/

Bibliografische Information der Deutschen Nationalbibliothek


Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen
Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über
http://dnb.d-nb.de abrufbar.

ISSN 1611-8618
ISBN 978-3-540-73338-6 Springer Berlin Heidelberg New York
ISBN 3-540-43267-1 2. Auflage Springer Berlin Heidelberg New York
Dieses Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbesondere
die der Übersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen und
Tabellen, der Funksendung, der Mikroverfilmung oder der Vervielfältigung auf anderen We-
gen und der Speicherung in Datenverarbeitungsanlagen, bleiben, auch bei nur auszugsweiser
Verwertung, vorbehalten. Eine Vervielfältigung dieses Werkes oder von Teilen dieses Werkes
ist auch im Einzelfall nur in den Grenzen der gesetzlichen Bestimmungen des Urheberrechts-
gesetzes der Bundesrepublik Deutschland vom 9. September 1965 in der jeweils geltenden
Fassung zulässig. Sie ist grundsätzlich vergütungspflichtig. Zuwiderhandlungen unterliegen
den Strafbestimmungen des Urheberrechtsgesetzes.

Springer ist ein Unternehmen von Springer Science+Business Media


springer.de

© Springer-Verlag Berlin Heidelberg 2000, 2004, 2007

Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem


Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche
Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten
wären und daher von jedermann benutzt werden dürften. Text und Abbildungen wurden
mit größter Sorgfalt erarbeitet. Verlag und Autor können jedoch für eventuell verbliebene
fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine
Haftung übernehmen.

Satz: Druckfertige Daten der Autoren


Herstellung: LE-TEX, Jelonek, Schmidt & Vöckler GbR, Leipzig
Umschlaggestaltung: KünkelLopka Werbeagentur, Heidelberg
Gedruckt auf säurefreiem Papier 33/3180 YL – 5 4 3 2 1 0
Vorwort

Die Erfindung des Buchdrucks schuf die technische Voraussetzung für den Zugriff
auf Wissen durch breite Bevölkerungsschichten. Es bedurfte jedoch gesellschaftli-
cher Umwälzungen wie der Reformation und der Aufklärung, bis die Möglichkeit
genutzt wurde und die Masse der Menschen geheime Schriften lesen konnte, wo-
durch sie mehr Freiheit und Rechte erhielt.
Die Entwicklung von Computern und weltumspannenden Netzen ermöglicht den
freien Zugriff auf Computerprogramme und -daten, eine neue Form von Wissen,
von der immer mehr Bereiche des Lebens abhängen. Auch hier führt die technische
Möglichkeit nicht automatisch zu mehr Freiheit. Im Gegenteil: Es gibt Bestrebungen
– zum Teil bereits verwirklicht – den Gebrauch dieses Wissens einzuschränken und
mit Hilfe der Computer den Einzelnen stärker als je zu überwachen.
GNU und Linux sind Projekte, die sich gegen Einschränkungen richten, Wissen
zu verbreiten, damit zu arbeiten und es zu verbessern. Debian ist aus diesen Projek-
ten hervorgegangen und stellt – sehr erfolgreich – ein umfangreiches System freier,
offener Software zur Verfügung, das vom Surfbrett bis hin zur Server-Farm für fast
alle Computeranwendungen benutzt werden kann.
Diese Open-Source-Revolution ist auf dem Vormarsch und hat in manchen Be-
reichen kommerzielle Programme und Betriebssysteme überholt. Die Freiheit offe-
ner Software ist einer der Gründe für ihren unglaublichen Erfolg. Qualität, Stabilität
und Vielfalt sind sicher ebenso bedeutend. Bei Debian GNU/Linux stehen Qualität
und Freiheit im Vordergrund. Nicht wirtschaftliches Interesse trägt die Entwicklung,
sondern das Ziel, eine Software-Distribution zu schaffen, mit der dauerhaft optimal
gearbeitet werden kann. Debian GNU/Linux wird dort entwickelt, wo Software ge-
braucht wird, nämlich von Anwendern, Administratoren und Programmierern für
Anwender, Administratoren und Programmierer.
Anfänger und Umsteiger hatten es jedoch nicht leicht, den Einstieg in diese faszi-
nierende Linux-Distribution zu finden, nicht zuletzt aufgrund fehlender Hilfen. Die-
ser Umstand und Erfahrungen als Administrator gaben den Anlass, die erste Fas-
sung des vorliegenden Buches zu schreiben. Bei der zweiten Auflage war es dem
ursprünglichen Autor, P ETER H. G ANTEN, Bremen, aus beruflichen und familiären
Gründen nicht mehr möglich, das Buch intensiv zu pflegen. Mit dem zweiten Au-
VI

tor, D R .-I NG . W ULF A LEX, Karlsruhe, kamen einige Jahrzehnte Erfahrungen in der
Computertechnik hinzu. Schließlich hat das Buch den qualifizierten und freundli-
chen Mitgliedern der deutschsprachigen Debian-Mailingliste sowie den Mitgliedern
der Linux User Group Bremen viel zu verdanken. Die Suchmaschine MetaGer und
die Wikipedia waren uns bei vielen Fragen eine wertvolle Hilfe. Unsere Bewun-
derung möchten wir außerdem der Free Software Foundation, den Entwicklern des
Linux-Kerns und den Mitarbeitern des weltweiten Debian-Projekts aussprechen.
Für die dritte Auflage wurde der Text aktualisiert, das heißt auf die Version 4.0
von Debian GNU/Linux mit Namen etch umgestellt. Auch bei der Hardware waren
einige Entwicklungen zu berücksichtigen. Das Vordringen von vernetzten Compu-
tern bis in Kleinbetriebe und Privathaushalte verlangte das verstärkte Eingehen auf
die Bedürfnisse dieser Klientel, ohne dafür Ansprüche an die Korrektheit zu opfern.
Die Gliederung, die Terminologie und die Darstellung wurden stellenweise verbes-
sert. Kritische Anmerkungen der Leser waren dabei hilfreich.
Unser zweites ebenfalls im Springer-Verlag erschienenes Debian-Buch – ISBN-
Nr. 3-540-23786-0 – das sich den Werkzeugen und Anwendungen unter Debian
GNU/Linux widmet, erlaubt es uns, im vorliegenden Band weitgehend auf die Be-
schreibung von Anwendungssoftware zu verzichten und die so gewonnenen Seiten
der Einrichtung und dem Betrieb von PCs unter Debian GNU/Linux zugute kom-
men zu lassen. Der vorliegende Band wendet sich daher in erster Linie an Netz- und
Systemverwalter (Administrator, Supervisor, Superuser, Root), während der andere
Band auf Anwender abzielt. Uns ist klar, dass viele Leser beide Funktionen in sich
vereinen; außerdem lassen sich einige Themen nicht eindeutig dem einen oder an-
deren Personenkreis zuordnen (beispielsweise die Shell). Wir halten die Aufteilung
dennoch für praktischer als die Abhandlung aller Themen in einem Riesenwälzer,
zumal Bücher dazu neigen, mit den Auflagen zu wachsen.
Das Buch besteht aus vier Teilen. In den Grundlagen werden Themen erläu-
tert, die zum Allgemeinwissen von Linux/UNIX-Benutzern gehören und für das
Verständnis der weiteren Teile wesentlich sind. Erfahrene Linux/UNIX-Benutzer
schränken die Lektüre dieses Teils auf Nachschlagen bei Bedarf ein. Die Einrich-
tung behandelt die Aufgaben, die am Anfang eines Computerlebens zu erledigen
sind. Unter Betrieb werden die Dinge erklärt, die das tägliche Brot des Verwalters
ausmachen. Der Anhang enthält Übersichten und Dokumente zum Nachschlagen.
Falls Sie vor der Fülle des Stoffes erschrecken: uns geht es nicht besser. Glücklicher-
weise braucht man nicht immer alles zu wissen. Don’t panic.
Wir hoffen, dass Sie unser Buch nützlich finden. Über Hinweise auf Fehler, kon-
struktive Kritik, aber natürlich auch über Lob freuen wir uns. Bitte senden Sie Ihre
Zuschriften an die Email-Anschriften auf der Impressumsseite.

Bremen, den 1. Mai 2007 Karlsruhe


Peter H. Ganten Wulf Alex
Begleitwort zur 3. Auflage

Ziemlich genau sieben Jahre liegt das Erscheinen der ersten Auflage dieses Werkes
zurück, das war die Blüte der so genannten „New Economy“. Damals dachten ich
und viele andere, dass es mit der Verbreitung von freier Software wie Linux sehr viel
schneller kommen würde, als es dann tatsächlich geschehen ist.
Die „New Economy“ brach zusammen und damit auch viele Unternehmen aus
dem Umfeld von Linux. Trotzdem entwickelten sich Linux und andere Open Source
Projekte kontinuierlich weiter und fanden immer mehr Anwender - nur eben nicht
in Form einer Modewelle, die zwangsläufig irgendwann in sich zusammenbricht,
sondern kontinuierlich in Form eines lang anhaltenden Trends.
Das dies so ist, stellen die Grundprinzipien freier Software wie des Debian Pro-
jekts sicher: Falls ein Einzelner an einem bestimmten Open Source Projekt kein In-
teresse mehr hat oder ein Unternehmen es nicht mehr weiterverfolgt, vielleicht weil
diese Firma aufgehört hat zu existieren, ist das Open Source Projekt selber damit
keineswegs am Ende. Wie viele proprietären Softwareprodukte haben wir gesehen,
die mit dem Ende der Existenz oder des Interesses ihre Hersteller selbst aufgehört
haben zu existieren? Man denke nur an IBMs OS/2 oder das früher einmal viel gelob-
te Banyan VINES. Nicht so bei Open Source Software: So lange es jemanden gibt,
für den das betreffende Projekt einen hinreichend großen Nutzen hat, um es weiter
voranzutreiben, wird es weiter entwickelt, nicht selten sogar durch neue Personen
mit der berühmten Kehrkraft neuer Besen. Hierfür hat es in den letzten sieben Jahren
viele Beispiele gegeben, die das Vertrauen der Anwender in Linux und Open Source
immer weiter gestärkt und den heute nicht mehr übersehbaren Erfolg erst möglich
gemacht haben.
Das Debian-Projekt spielt hierbei eine ganz besondere Rolle, denn die meisten
Open Source Produkte sind für viele Anwender zunächst einmal nicht oder nicht
wirtschaftlich nutzbar. Erst durch Linux Distributoren wie Red Hat, Novell oder das
Debian-Projekt entstehen komplette, aufeinander abgestimmte Softwaresysteme, die
sich einfach installieren, nutzen, administrieren und pflegen lassen. Unter den großen
Distributoren stellt das Debian Projekt aber das einzige Open Source Projekt dar, das
nicht wirtschaftlich von den Interessen eines Unternehmens abhängig ist. Damit wird
insbesondere für professionelle Entwickler sichergestellt, dass nicht eines Tages ein
VIII

Wettbewerber die Marschrichtung bei der Nutzung der eigenen Arbeitsergebnisse


vorgibt. Dies ist auch ein wichtiger Grund, warum sehr viele kommerziell geführte
Linux Distributionen sich auf Debian und nicht auf einen anderen kommerziellen
Distributor verlassen. Linux-Systeme wie Ubuntu, Xandros oder der eher für den
Unternehmenseinsatz entwickelte Univention Corporate Server aus unserem Hause
sind nur wenige prominente Beispiele dafür. Dadurch ist Debian nicht nur seinem
Ruf als technisch brilliante aber gleichzeitig extrem ausgereifte, sichere und stabile
Linux Distribution gerecht geworden. Debian GNU/Linux ist auch zu einer der größ-
ten völlig frei zugänglichen und in sich konsistenten Sammlungen an Know How in
Form von Software, Dokumentation und Trägern geworden, vergleichbar vielleicht
nur noch mit Projekten wie Wikipedia. Die freie Verfügbarkeit dieses Know.Hows
ist eine echte, aber schleichende Revolution, die hoffentlich durch nichts rückgän-
gig gemacht werden kann. Die wirtschaftlichen Folgen dieser Revolution liegen auf
der Hand und sind schon lange nicht mehr zu übersehen: Niedrige Einstiegshürden
und der bei Open Source Projekten übliche Geist der Initiative verbunden mit ho-
her Bereitschaft zur Kooperation ermöglichen unternehmerische Betätigungsfelder,
die in einer Welt proprietärer Software nicht möglich wären. Dadurch werden neue
Wertschöpfungsprozesse und damit Arbeitsplätze geschaffen, durch die sich der Er-
folg von Open Source weiter verstärkt. Gleichzeitig sichert freie Software Chan-
cengleichheit, auch in so genannten Schwellenländern sind Linux und andere Open
Source Produkte verfügbar und ermöglichen es, Know How aufzubauen und wirt-
schaftliche Weiterentwicklung zu betreiben.
Wie erfolgreich Debian ist, lässt sich aber auch durch Zahlen belegen: Mit mehr
als 1000 aktiven Entwicklern verfügt der Kern des Debian-Projekts heute über mehr
als doppelt so viele Entwickler als vor sieben Jahren (nicht eingerechnet die vielen
Entwickler und anderen Helfer, die keine „offiziellen“ Debian-Entwickler sind). Viel
eindrucksvoller aber ist das Ergebnis: Die aktuelle Version der Distribution („etch“)
besteht heute aus ca. 18.000 Softwarepaketen, vor sieben Jahren waren es etwas mehr
als 3.000 Pakete. Damit muss die Distribution auf 21 CDROMs untergebracht wer-
den.
Mit dem Erfolg von Linux im allgemeinen und Debian GNU/Linux im speziel-
len sind aber auch neue Gefahren verbunden: Wettbewerbern ist Linux zunehmend
ein schmerzhafter Dorn im Auge, sie lassen deswegen wenig unversucht, die eigenen
Geschäfte davor zu schützen. Das ist in den meisten Fällen legitim und ein weiterer
Beleg für den Erfolg von Linux. Problematisch wird es aber, wenn durch das Auf-
stellen unbelegter Behauptungen Angst und Schrecken verbreitet werden soll, um
Kunden abzuschrecken. In diese Kategorie muss man wohl die vor einigen Jahren
von SCO aufgestellte Behauptung, Linux verletze Schutzrechte von SCO, als auch
die jetzt von Microsoft behaupteten Patentverletzungen durch Linux (wohlgemerkt
ohne Nennung der vermeintlichen Patente) einordnen.
In den letzten sieben Jahren ist viel passiert: Ich selber habe mich vom Studenten
mit viel Zeit zum Schreiben zum Unternehmer mit zu wenig Zeit für die Familie
entwickelt, Zeit zum Schreiben bleibt da leider gar nicht mehr. Mein besonderer
Dank gebührt deswegen Herrn Wulf Alex, der dieses Werk seit der zweiten Auflage
unermüdlich und erfolgreich weiterführt und von mir dabei gelegentlich leider sehr
IX

stiefmütterlich behandelt worden ist. Insbesondere die vorliegende dritte Auflage hat
eine Reihe bedeuntender Änderungen erfahren und das Buch damit mindestens sie-
ben Jahr nach vorne katapultiert.
Ich wünsche Ihnen viel Spaß beim Lesen und besonders viel Erfolg bei der Arbeit
mit Debian GNU/Linux!

Bremen, den 5. Juni 2007


Peter Ganten
ganten@univention.de
Übersicht

1 Was ist Debian GNU/Linux? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Linux/UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3 X Window System (X11) und Arbeitsumgebungen . . . . . . . . . . . . . . . . . 183

4 Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

5 Dokumentation und Hilfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

6 Planen der Einrichtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

7 Vorbereiten der Einrichtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

8 Einrichten des Grundsystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

9 Konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

10 Erweitern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435

11 Systemstart (Booten) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465

12 Benutzer und Gruppen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519

13 Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563

14 Debian-Paketsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635

15 Kerne und Kernmodule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679

16 Netzdienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725

17 Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
XII Übersicht

18 Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897

19 Kommandoübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937

20 Zahlensysteme, Zeichensatz ISO 8859-15, ASCII-Steuerzeichen . . . . . 1. 051

21 Tasten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 060

22 Signale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 063

23 Gerätedateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 065

24 Ports und Internetdienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 069

25 Requests For Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 072

26 Debian-Gesellschaftsvertrag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 075

27 GNU General Public License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 079

28 GNU Free Documentation License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 090

29 Zum Weiterlesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 099


Inhalt

1 Was ist Debian GNU/Linux? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1


1.1 Betriebssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Freie Software, GNU und Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 Freie Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 GNU is Not UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.3 Linux – ein Kern und viele Distributionen . . . . . . . . . . . . . . . . 8
1.3 Debian GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.1 Die Debian-GNU/Linux-Distribution . . . . . . . . . . . . . . . . . . . . 11
1.3.2 Warum Debian GNU/Linux? . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.3 Auf Debian aufsetzende Distributionen . . . . . . . . . . . . . . . . . . . 21

Teil I Grundlagen

2 Linux/UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1 Anmelden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2 Kommandozeile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3 Abmelden und Herunterfahren des Systems . . . . . . . . . . . . . . . . . . . 35
2.3.1 Abmelden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3.2 Herunterfahren und Ausschalten . . . . . . . . . . . . . . . . . . . . . . . . 36
2.4 Die Rolle des Verwalters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.5 Virtuelle Konsolen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6 Prozesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.7 Kommandointerpreter (Bash) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.7.1 Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.7.2 Grundlagen der Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
2.7.3 Auftragsverwaltung (Jobverwaltung) und Prozessverwaltung . 68
2.7.4 Aneinanderreihung von Kommandos . . . . . . . . . . . . . . . . . . . . . 72
2.7.5 Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
XIV Inhalt

2.7.6 Expansion (Erweiterung) und Substitution (Ersetzung) . . . . . . 84


2.7.7 Shellskripte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
2.7.8 Andere Skriptsprachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers . . . . . . . . 115
2.8.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
2.8.2 Verzeichnis- und Dateibaum . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
2.8.3 Dateiattribute, Zugriffsrechte, Zugriffskontrolllisten . . . . . . . . 120
2.8.4 Gerätedateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
2.8.5 Links (Verweise, Verknüpfungen) . . . . . . . . . . . . . . . . . . . . . . . 129
2.8.6 Pfade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
2.8.7 Besondere Dateiarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
2.8.8 Arbeiten mit Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
2.8.9 Arbeiten mit Verzeichnissen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
2.8.10 Ändern von Systemdateien und -verzeichnissen . . . . . . . . . . . . 143
2.9 Datenträger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
2.9.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
2.9.2 Gerätebezeichnungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
2.9.3 Einhängen von Datenträgern (Mounten) . . . . . . . . . . . . . . . . . . 145
2.9.4 Aushängen von Datenträgern (Unmounten) . . . . . . . . . . . . . . . 148
2.9.5 Kopieren von Dateien auf externe Datenträger . . . . . . . . . . . . . 149
2.9.6 Die Dateisystemtabelle (fstab) . . . . . . . . . . . . . . . . . . . . . . . . . . 149
2.9.7 Datenträger einhängen als Benutzer . . . . . . . . . . . . . . . . . . . . . . 152
2.9.8 Der Automounter im Kern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
2.10 Suchen nach Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
2.10.1 Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
2.10.2 Suchen mit find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
2.10.3 Schnelles Suchen mit locate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
2.11 Textbetrachter (Pager) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
2.11.1 Aufgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
2.11.2 Benutzung von more . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
2.11.3 Benutzung von less . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
2.11.4 Betrachten komprimierter Dateien mit zless . . . . . . . . . . . . . . . 168
2.11.5 Anzeigen spezieller Daten mit lessfile und lesspipe . . . . . . . . . 168
2.12 Editoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
2.12.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
2.12.2 Zeichensätze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
2.12.3 Die vi-Familie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
2.12.4 Die Emacs-Familie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Inhalt XV

3 X Window System (X11) und Arbeitsumgebungen . . . . . . . . . . . . . . . . . 183


3.1 Was ist X11? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
3.2 X Font Server (xfs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
3.3 Farben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
3.4 Display-Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
3.5 Sitzungs-Manager (Session Manager) . . . . . . . . . . . . . . . . . . . . . . . 200
3.6 Fenster-Manager (Window Manager) . . . . . . . . . . . . . . . . . . . . . . . . 201
3.6.1 Fenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
3.6.2 Menüs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
3.7 Arbeitsumgebungen (Desktöppe) . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
3.7.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
3.7.2 K Desktop Environment (KDE) . . . . . . . . . . . . . . . . . . . . . . . . . 210
3.7.3 GNU Network Object Model Environment (GNOME) . . . . . . 212
3.8 Datei-Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
3.9 Abfolge der Manager beim Systemstart . . . . . . . . . . . . . . . . . . . . . . 217
3.10 X-Ressourcen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
3.11 Zugriffssteuerung und -Kontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
3.12 Terminal-Emulatoren (xterm u. a.) . . . . . . . . . . . . . . . . . . . . . . . . . . 225
3.13 Xprint – das X11-Drucksystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
3.14 Arbeiten mit X11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
3.14.1 Cut and Paste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
3.14.2 Rollbalken (Laufleisten, Scrollbars) . . . . . . . . . . . . . . . . . . . . . . 233
3.14.3 Kontextmenüs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
3.14.4 Screenshots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

4 Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
4.1 Entstehung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
4.2 Netzstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
4.3 Interfaces, IP-Adressen und Namen . . . . . . . . . . . . . . . . . . . . . . . . . 242
4.3.1 IP-Adressen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
4.3.2 Netze und Subnetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
4.3.3 Netzmasken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
4.3.4 Besondere Adressen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
4.3.5 IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
4.3.6 Mehr über das Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
4.3.7 Wireless Local Area Network (WLAN) . . . . . . . . . . . . . . . . . . 252
4.3.8 Namensauflösung und DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
4.3.9 Dynamic Host Configuration Protocol (DHCP) . . . . . . . . . . . . 257
4.4 Dienste, Ports und Protokolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
4.5 Zugang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
4.5.1 Zugangswege . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
4.5.2 Wählverbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
4.5.3 Digital Subscriber Line (DSL, ADSL) . . . . . . . . . . . . . . . . . . . 265
XVI Inhalt

4.6 Netzdienste im Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267


4.7 Informationssicherheit, Verschlüsselung . . . . . . . . . . . . . . . . . . . . . 269

5 Dokumentation und Hilfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273


5.1 Hilfe-Dateien und -Optionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
5.2 Manual (man-Seiten) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
5.2.1 Gebrauch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
5.2.2 Abschnitte (Sektionen) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
5.2.3 Aufbau einer Manualseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
5.2.4 Manualseiten in unterschiedlichen Sprachen . . . . . . . . . . . . . . 277
5.2.5 Drucken von Manualseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
5.2.6 Suchen in Manualseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
5.2.7 Weitere Programme zur Arbeit mit Manualseiten . . . . . . . . . . 279
5.3 GNU Info-System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
5.3.1 Benutzung von info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
5.3.2 Drucken und Konvertieren von Info-Dokumenten . . . . . . . . . . 283
5.3.3 Info und (X)Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
5.3.4 Info-Dokumentation in GNOME und KDE . . . . . . . . . . . . . . . 285
5.4 Integrierte Hilfesysteme (dhelp, dwww) . . . . . . . . . . . . . . . . . . . . . . 286
5.5 Zusätzliche Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
5.5.1 Paketspezifische Dokumentationsverzeichnisse . . . . . . . . . . . . 288
5.5.2 Bücher, allgemeine Dokumentation, TLDP . . . . . . . . . . . . . . . 289
5.6 Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
5.6.1 Wichtige Web-Adressen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
5.6.2 Requests For Comments (RFCs) . . . . . . . . . . . . . . . . . . . . . . . . 293
5.6.3 Lexika, Glossare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
5.6.4 Netnews (Newsgroups) und FAQs . . . . . . . . . . . . . . . . . . . . . . . 295
5.6.5 Mailing-Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
5.6.6 Suchmaschinen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
5.6.7 Wenn es nicht an Ihnen liegt: Die Fehlerdatenbank . . . . . . . . . 298

Teil II Einrichtung

6 Planen der Einrichtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301


6.1 Einsatzzweck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
6.2 Koexistenz mit anderen Betriebssystemen . . . . . . . . . . . . . . . . . . . . 304
6.2.1 Koexistenz neben anderen Betriebssystemen . . . . . . . . . . . . . . 304
6.2.2 Koexistenz unter einem Über-Betriebssystem (Xen) . . . . . . . . 304
6.3 Migration von anderen Betriebssystemen . . . . . . . . . . . . . . . . . . . . . 305
6.4 Hardware und Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
6.4.1 Allgemeine Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
6.4.2 Hauptprozessor(en) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Inhalt XVII

6.4.3 Arbeitsspeicher (RAM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311


6.4.4 Grafikkarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
6.4.5 Festplatte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
6.4.6 Weitere Massenspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
6.4.7 Datensicherung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
6.4.8 Ethernetkarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
6.4.9 Tastatur, Maus, Rollkugel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
6.4.10 Drucker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
6.4.11 Soundkarte und weitere Komponenten . . . . . . . . . . . . . . . . . . . 322
6.5 Partitionieren von Festplatten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
6.5.1 Warum Partitionen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
6.5.2 Partitionstypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
6.5.3 Auf welche Partitionen kann installiert werden? . . . . . . . . . . . 324
6.5.4 Die 1024-Zylinder-Grenze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
6.5.5 Planen der Partitionierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
6.5.6 Logical Volumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
6.5.7 Redundant Array of Independent Disks (RAID) . . . . . . . . . . . 333
6.6 Bootmethode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
6.7 Einrichtungsmedium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

7 Vorbereiten der Einrichtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337


7.1 Zu beschaffende Informationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
7.1.1 Release-bezogene Informationen . . . . . . . . . . . . . . . . . . . . . . . . 337
7.1.2 Informationen zur Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
7.1.3 Informationen zum Netz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
7.1.4 Datenquellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
7.2 Startmedien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
7.2.1 Disketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
7.2.2 USB-Stöpsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
7.2.3 Minimale CD/DVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
7.2.4 Vollständige CD/DVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
7.2.5 Start über das Netz (PXE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
7.3 Partitionieren unter einem anderen Betriebssystem . . . . . . . . . . . . . 348
7.3.1 Umpartitionieren oder nicht? . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
7.3.2 Umpartitionieren mit Fips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
7.3.3 Manuelles Umpartitionieren unter anderen Betriebssystemen 353
7.3.4 Laufwerksbuchstaben und Gerätedateien . . . . . . . . . . . . . . . . . 356
7.3.5 Laufwerksbuchstaben unter DOS und MS-Windows . . . . . . . . 357
7.3.6 Zuordnung von Gerätedateien unter Linux . . . . . . . . . . . . . . . . 358
7.3.7 Ein nicht ganz einfaches Beispiel . . . . . . . . . . . . . . . . . . . . . . . . 360
7.4 BIOS-Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
7.4.1 Was macht das BIOS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
7.4.2 Starten des BIOS-Setup-Programms . . . . . . . . . . . . . . . . . . . . . 361
XVIII Inhalt

7.4.3 BIOS-Einstellungen für Linux . . . . . . . . . . . . . . . . . . . . . . . . . . 363


7.4.4 BIOS flashen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
7.4.5 LinuxBIOS, OpenBIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366

8 Einrichten des Grundsystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367


8.1 Start des Einrichtungssystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
8.1.1 Vor dem Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
8.1.2 Start von Disketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
8.1.3 Start von USB-Stöpsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
8.1.4 Start von CD/DVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
8.1.5 Start über das Netz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
8.1.6 Bootparameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
8.1.7 Start des Einrichtungssystems unter DOS . . . . . . . . . . . . . . . . . 370
8.1.8 Start des Kerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
8.2 Einrichten des Grundsystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
8.2.1 Erste Entscheidungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
8.2.2 Partitionieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
8.2.3 Bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
8.2.4 Probleme bei der Grundeinrichtung . . . . . . . . . . . . . . . . . . . . . . 376
8.3 Konfigurieren des Grundsystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
8.3.1 Zeitzone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
8.3.2 Root-Passwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
8.3.3 Erster gewöhnlicher Benutzer . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
8.3.4 APT-Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
8.3.5 Software-Auswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
8.3.6 X-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
8.3.7 Email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
8.4 Fully Automatic Installation (FAI) . . . . . . . . . . . . . . . . . . . . . . . . . . 382

9 Konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
9.1 Ändern der Grundkonfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
9.1.1 Umstellen von DHCP auf statische Adressen . . . . . . . . . . . . . . 385
9.1.2 Tastaturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
9.1.3 Platteneinstellungen (hdparm, smartctl) . . . . . . . . . . . . . . . . . . 389
9.1.4 Einhängen ferner Verzeichnisse (NFS, Samba) . . . . . . . . . . . . 390
9.1.5 Anlegen von Logical Volumes . . . . . . . . . . . . . . . . . . . . . . . . . . 393
9.1.6 CD/DVD-Brenner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
9.1.7 Arbeiten mit Alternativen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
9.2 Power Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
9.2.1 APM und ACPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
9.2.2 Bildschirmschoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
9.2.3 Zentralprozessor (cpufreq) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
9.2.4 Platten (hdparm, blktool) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Inhalt XIX

9.2.5 Wake on LAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401


9.2.6 Stromausfall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
9.3 Maus, Trackball ohne X11 (gpm) . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
9.4 X-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
9.4.1 Wege zur Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
9.4.2 X.Org-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
9.4.3 Multihead, Multiseat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
9.5 Locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
9.6 Debian Font Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
9.7 Drucksysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
9.7.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
9.7.2 System-V-Drucken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
9.7.3 Berkeley-Drucken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
9.7.4 Common UNIX Printing System (CUPS) . . . . . . . . . . . . . . . . . 427

10 Erweitern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
10.1 Nützliche Links und Aliasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
10.2 Nachzurüstende Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
10.2.1 Debian-Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
10.2.2 Red-Hat-Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
10.2.3 tar-Archive (Tarballs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
10.2.4 Sonstige Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
10.3 Systemzeit, Zeitdienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
10.3.1 Systemzeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
10.3.2 Zeit im Netz (Network Time Protocol) . . . . . . . . . . . . . . . . . . . 441
10.3.3 Zeitdämon (cron) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
10.3.4 Der at-Dämon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
10.4 Emulatoren und Virtualisierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
10.4.1 DOS-Emulatoren (dosemu) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
10.4.2 Windows-Emulator (Wine) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
10.4.3 MacOS-Emulator (Mac-on-Linux) . . . . . . . . . . . . . . . . . . . . . . . 454
10.4.4 Virtualisierer (Xen, OpenVZ, UML, VServer) . . . . . . . . . . . . . 455

Teil III Betrieb

11 Systemstart (Booten) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465


11.1 Linux-Bootloader und -Bootmanager . . . . . . . . . . . . . . . . . . . . . . . . 465
11.1.1 BIOS, MBR und Bootsektor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
11.1.2 Bootverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
11.1.3 Sichern und Wiederherstellen des MBR . . . . . . . . . . . . . . . . . . 468
11.2 LILO – der LInux LOader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
11.2.1 Installationsort für LILO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
XX Inhalt

11.2.2 LILOs Bestandteile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470


11.2.3 Einrichten des Paketes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
11.2.4 Aufbau der Datei lilo.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
11.3 GRUB – der Grand Unified Bootloader . . . . . . . . . . . . . . . . . . . . . . 473
11.3.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
11.3.2 Einrichtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
11.3.3 Booten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
11.3.4 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
11.3.5 Multibooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
11.3.6 Kommandoauswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
11.4 Starten von Linux unter DOS mit loadlin . . . . . . . . . . . . . . . . . . . . . 486
11.4.1 Einrichten von Loadlin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
11.4.2 Verwendung von Loadlin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
11.4.3 Loadlin Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
11.4.4 Einrichten eines Bootmenüs mit DOS/MS Windows . . . . . . . . 489
11.4.5 Problemlösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
11.5 Weitere Bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
11.6 Booten vom Netz (PXE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
11.7 Bootdiskette bzw. -CD/DVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
11.8 Starten von Debian GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
11.8.1 init und Runlevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
11.8.2 Die Datei inittab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
11.8.3 Benutzung von init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
11.8.4 Start- und Stoppskripte für alle Runlevels . . . . . . . . . . . . . . . . . 505
11.8.5 Start- und Stoppskripte für einzelne Runlevels . . . . . . . . . . . . . 508
11.8.6 Einrichten von Startskripten und Symlinks . . . . . . . . . . . . . . . . 511
11.8.7 Meldungen beim Systemstart . . . . . . . . . . . . . . . . . . . . . . . . . . . 515

12 Benutzer und Gruppen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519


12.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
12.2 Die Dateien passwd und group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
12.3 Schattenpasswörter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
12.4 Systembenutzer und -gruppen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
12.5 Benutzer- und Gruppenkonten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
12.5.1 Verwalten von Benutzern und Gruppen . . . . . . . . . . . . . . . . . . . 525
12.5.2 Gemeinsames Zugreifen auf Dateien und Verzeichnisse . . . . . 527
12.5.3 Benutzern Verwalterrechte übertragen . . . . . . . . . . . . . . . . . . . . 530
12.6 Diskquotas – Begrenzung von Speicherplatz . . . . . . . . . . . . . . . . . . 534
12.7 Pluggable Authentication Modules (PAM) . . . . . . . . . . . . . . . . . . . . 536
12.8 Network Information Service (NIS) . . . . . . . . . . . . . . . . . . . . . . . . . 540
12.9 Lightweight Directory Access Protocol (LDAP) . . . . . . . . . . . . . . . 546
12.9.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
12.9.2 OpenLDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Inhalt XXI

12.9.3 LDAP-Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551


12.10 Remote Authentication Dial In User Service (RADIUS) . . . . . . . . 560
12.11 Accounting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
12.11.1 Logbuch (utmp, wtmp) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
12.11.2 Abrechnung (acct) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561

13 Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
13.1 Aufgaben eines Dateisystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
13.2 Linux-Dateisystemtypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
13.2.1 Extended Filesystem Version 2 (ext2) . . . . . . . . . . . . . . . . . . . . 565
13.2.2 Extended Filesystem Version 3 (ext3) . . . . . . . . . . . . . . . . . . . . 570
13.2.3 ReiserFS und Reiser4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
13.2.4 XFS (Silicon Graphics) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
13.2.5 JFS (IBM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
13.2.6 User-Dateisysteme (FUSE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
13.2.7 Squashfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
13.3 Loopback-Device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
13.4 Ramdisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
13.5 Fremde Dateisystemtypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
13.5.1 FAT, VFAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
13.5.2 NTFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
13.5.3 Apple HFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
13.6 Dateisystemtypen für entfernbare Medien . . . . . . . . . . . . . . . . . . . . 580
13.6.1 ISO 9660, ISO 13490 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
13.6.2 Universal Disk Format (UDF) . . . . . . . . . . . . . . . . . . . . . . . . . . 581
13.7 Verschlüsselte Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
13.8 Virtuelle Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
13.9 Verteilte Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
13.9.1 Network File System (NFS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
13.9.2 Samba – Netzdienste für MS Windows und IBM OS/2 . . . . . . 594
13.9.3 Netatalk – Netzdienste für Äpfel . . . . . . . . . . . . . . . . . . . . . . . . 613
13.9.4 Andrew File System, Coda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
13.9.5 Cluster-Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
13.10 Verwalten eines Dateisystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
13.10.1 Eingehängte Partitionen (mount) . . . . . . . . . . . . . . . . . . . . . . . . 620
13.10.2 Füllstand (df, du, Baobab) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
13.10.3 Prüfen und Reparieren von Dateisystemen (fsck, parted) . . . . 623
13.10.4 Formatieren von Datenträgern (mkfs) . . . . . . . . . . . . . . . . . . . . 627
13.10.5 Verlegen von Teilen der Verzeichnisstruktur auf andere
Partitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
13.10.6 Aufteilen der Home-Verzeichnisse auf mehrere Partitionen . . 631
13.10.7 Verwalten von Auslagerungsspeicher (Swap) . . . . . . . . . . . . . . 632
XXII Inhalt

14 Debian-Paketsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
14.1 Einrichten von Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
14.1.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
14.1.2 Der Debian Package Manager (dpkg) . . . . . . . . . . . . . . . . . . . . 637
14.1.3 Advanced Package Tool (APT) . . . . . . . . . . . . . . . . . . . . . . . . . . 638
14.1.4 Das interaktive Installationsprogramm dselect . . . . . . . . . . . . . 643
14.1.5 aptitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
14.1.6 GNOME-apt und Synaptic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
14.1.7 Aufgabenbezogene Paketauswahl (Tasksel) . . . . . . . . . . . . . . . 646
14.1.8 Paketkonfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
14.1.9 Überschreiben von Abhängigkeiten mit equivs . . . . . . . . . . . . 653
14.1.10 Mischen von Versionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
14.1.11 Umstellen von einer Version auf die nächste . . . . . . . . . . . . . . . 656
14.1.12 Quellcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
14.2 Pakete und Paketverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
14.2.1 Eigenschaften und Beziehungen von Paketen . . . . . . . . . . . . . . 657
14.2.2 Was passiert während der Einrichtung eines Paketes? . . . . . . . 660
14.2.3 Zustände von Paketen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
14.3 Bau von Debian-Paketen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
14.4 Gliederung der offiziellen Distribution . . . . . . . . . . . . . . . . . . . . . . . 672
14.4.1 Binärpakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
14.4.2 Quellcodepakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
14.5 Debian-Spiegel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676

15 Kerne und Kernmodule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679


15.1 Erstellen des Kerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
15.1.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
15.1.2 Kernversionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
15.1.3 Einrichten der Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
15.1.4 Vorbereiten der Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . 686
15.1.5 Durchführen der Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . 692
15.1.6 Übersetzen und Einrichten des Kerns . . . . . . . . . . . . . . . . . . . . 698
15.1.7 Neuer Kern als Debian-Paket . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
15.1.8 Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
15.1.9 Aktualisieren des Kerns mit apt-get . . . . . . . . . . . . . . . . . . . . . . 704
15.1.10 Aktualisieren des Kerns mit Patchdateien . . . . . . . . . . . . . . . . . 704
15.1.11 Austauschen des Kerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
15.2 Konfiguration von Kern und Kernmodulen beim Start . . . . . . . . . . 706
15.2.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
15.2.2 Der Bootprompt – Übergabe von Parametern an den Kern . . . 707
15.2.3 Verarbeitung von Parametern durch den Kern . . . . . . . . . . . . . 710
15.2.4 Kernmodule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
15.2.5 Allgemeine Kernparameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
Inhalt XXIII

15.2.6 Parameter für Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716

16 Netzdienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
16.1 Grundkonfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
16.1.1 Netzadapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
16.1.2 Namensauflösung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
16.1.3 Automatische Netzkonfiguration während des Systemstarts . . 736
16.1.4 Dynamische Konfiguration mittels DHCP . . . . . . . . . . . . . . . . 738
16.1.5 DNS-Proxy (dnsmasq) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
16.2 Modem-Einwahlverbindungen (PPP) . . . . . . . . . . . . . . . . . . . . . . . . 741
16.2.1 Konfiguration der seriellen Schnittstelle . . . . . . . . . . . . . . . . . . 741
16.2.2 PPP-Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
16.2.3 Testen und Benutzen von PPP-Verbindungen . . . . . . . . . . . . . . 747
16.2.4 Weitere Konfigurationsprogramme . . . . . . . . . . . . . . . . . . . . . . 749
16.3 ISDN-Subsystem für Einwahlverbindungen . . . . . . . . . . . . . . . . . . 750
16.3.1 Konfiguration der Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
16.3.2 Basiskonfiguration einer ISDN-Einwahlverbindung . . . . . . . . 753
16.3.3 Starten und Testen der Verbindung . . . . . . . . . . . . . . . . . . . . . . . 753
16.3.4 Überwachen der Verbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
16.4 DSL-Gateway (DSL-Router) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
16.4.1 Innenseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
16.4.2 Außenseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
16.4.3 Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
16.5 WLAN-Access-Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
16.6 Firewalls und Network Address Translation (Masquerading) . . . . 764
16.6.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
16.6.2 Einrichten von Netfilter/Iptables . . . . . . . . . . . . . . . . . . . . . . . . . 766
16.6.3 Startskript zum Aufbau von Firewall und NAT . . . . . . . . . . . . . 773
16.6.4 Testwerkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
16.7 Zugangskontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
16.7.1 tcpd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
16.7.2 identd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
16.8 Der Super-Dämon inetd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783
16.8.1 Was macht der Super-Dämon? . . . . . . . . . . . . . . . . . . . . . . . . . . 783
16.8.2 Konfiguration mit update-inetd . . . . . . . . . . . . . . . . . . . . . . . . . . 785
16.9 Fernbenutzung von Rechnern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
16.9.1 Telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
16.9.2 Berkeley-r-Kommandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
16.9.3 Secure Shell (SSH) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
16.9.4 Virtual Network Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
16.10 Fernkopieren (FTP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
16.10.1 FTP-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
16.10.2 Anonymous-FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
XXIV Inhalt

16.10.3 FTP-Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795


16.11 Electronic Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797
16.11.1 Transportwege . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797
16.11.2 Mail Transfer Agents (MTA) . . . . . . . . . . . . . . . . . . . . . . . . . . . 802
16.11.3 Mail Delivery Agents und Filter (Procmail, Spamassassin) . . 809
16.11.4 POP und IMAP (fetchmail) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
16.11.5 Mail Clients (Mail User Agents) . . . . . . . . . . . . . . . . . . . . . . . . 824
16.11.6 Webmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
16.11.7 Listen (Mailman) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
16.12 Netnews (Usenet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
16.12.1 News-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
16.12.2 News-Clients (Newsreader) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
16.13 Netzgeschwätz (IRC und IM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
16.13.1 Internet Relay Chat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
16.13.2 Instant Messaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
16.14 World Wide Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844
16.14.1 Webserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844
16.14.2 Web-Proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
16.14.3 Web-Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
16.15 Virtuelle private Netze (VPN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
16.16 Verwalten über das Netz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
16.16.1 Shellskripte und kleine Werkzeuge . . . . . . . . . . . . . . . . . . . . . . 873
16.16.2 Sniffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
16.16.3 Simple Network Management Protocol (SNMP) . . . . . . . . . . . 877
16.16.4 Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
16.16.5 Monit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887

17 Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
17.1 Was sind Cluster? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
17.2 Lastverteilung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
17.3 Hochverfügbarkeits-Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
17.4 Hochleistungs-Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895

18 Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
18.1 Allgemeine Fragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
18.2 Betriebssicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
18.3 Datensicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
18.3.1 Benutzerkonten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
18.3.2 Dienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
18.3.3 Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
18.3.4 Viren (Malware) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907
18.3.5 Funkverbindungen (WLAN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913
18.4 Systemüberwachung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
Inhalt XXV

18.4.1 Einzelwerkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914


18.4.2 Dateiintegrität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
18.4.3 Portscanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
18.4.4 Intrusion Detection/Prevention, Netzmonitore . . . . . . . . . . . . . 922
18.4.5 Datenrettung und Computerforensik . . . . . . . . . . . . . . . . . . . . . 924
18.4.6 Logbücher (/var/log) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925
18.4.7 Honeypotting und Teergrubing . . . . . . . . . . . . . . . . . . . . . . . . . . 929
18.5 Gefängnisse (chroot) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
18.6 Hardening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
18.6.1 Debian-Paket harden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
18.6.2 Bastille Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
18.6.3 Security-Enhanced Linux (SELinux) . . . . . . . . . . . . . . . . . . . . . 933

Teil IV Anhang

19 Kommandoübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937

20 Zahlensysteme, Zeichensatz ISO 8859-15, ASCII-Steuerzeichen . . . . . 1. 051

21 Tasten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 060

22 Signale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 063

23 Gerätedateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 065

24 Ports und Internetdienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 069

25 Requests For Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 072

26 Debian-Gesellschaftsvertrag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 075

27 GNU General Public License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 079

28 GNU Free Documentation License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 090

29 Zum Weiterlesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 099


Abbildungen

1.1 GNU-Kopf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2 Tux, der Pinguin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Debian Swirl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 Schnappschuss Lenny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5 Screenshot Knoppix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2.1 Screenshot Anmeldung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28


2.2 Screenshot GNOME System Monitor . . . . . . . . . . . . . . . . . . . . . . . . 43
2.3 Screenshot Conky System Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.4 Screenshot Saidar System Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.5 Screenshot GNOME-Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.6 Schema Skriptablauf bei Verwendung des if-Kommandos . . . . . . . 100
2.7 Byte aus 8 Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
2.8 Ausgabe von ls -l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
2.9 Screenshot Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

3.1 Screenshot Xnest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186


3.2 Screenshot Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
3.3 Screenshot Font-Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
3.4 Screenshot dfontmgr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
3.5 Screenshot xcolors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
3.6 Screenshot Anmeldebildschirm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
3.7 Screenshot Anmeldebildschirm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
3.8 Screenshot Motif Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
3.9 Screenshot SysV-Init-Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
3.10 Screenshot Arbeitsumgebung KDE . . . . . . . . . . . . . . . . . . . . . . . . . . 211
3.11 Screenshot Arbeitsumgebung GNOME . . . . . . . . . . . . . . . . . . . . . . 214
3.12 Screenshot Datei-Manager Nautilus . . . . . . . . . . . . . . . . . . . . . . . . . 217
3.13 Screenshot editres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Abbildungen XXVII

3.14 Screenshot X11-Terminals lokal und remote . . . . . . . . . . . . . . . . . . 225


3.15 Screenshot xterm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
3.16 Screenshot xterm mit großem Font . . . . . . . . . . . . . . . . . . . . . . . . . . 230

4.1 Schema eines LANs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240


4.2 Ausgabe lanmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
4.3 Netz mit Subnetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
4.4 WLAN-Adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

5.1 Screenshot xman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279


5.2 Screenshot man2html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
5.3 Screenshot KDE-Hilfezentrum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
5.4 Screenshot Emacs GNU Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
5.5 Screenshot Info zu dvips in yelp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
5.6 Screenshot Startseite von dwww . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
5.7 Screenshot Wikipedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
5.8 Screenshot Suchmaschine Metager . . . . . . . . . . . . . . . . . . . . . . . . . . 297

6.1 Passiv gekühlte Grafikkarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313


6.2 Festplatten früher und heute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
6.3 Schema Partitionierung einer Festplatte . . . . . . . . . . . . . . . . . . . . . . 324
6.4 Screenshot cfdisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
6.5 Screenshot Enterprise Volume Management System . . . . . . . . . . . . 332

7.1 Screenshot DOS-fdisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354


7.2 BIOS-Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

9.1 Dualhead-Arbeitsplatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415


9.2 Screenshot Xinerama 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
9.3 Screenshot Xinerama 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
9.4 Screenshot CUPS, Startseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
9.5 Screenshot CUPS, Drucker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
9.6 Screenshot X Printing Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
9.7 Screenshot gtklp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
9.8 Screenshot kprinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434

10.1 Screenshot dclock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444


10.2 Screenshot Buici-Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
10.3 Screenshot Sunclock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
10.4 Screenshot DOSEMU mit Uhr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
10.5 Screenshot DOSEMU mit Civilization . . . . . . . . . . . . . . . . . . . . . . . 453
10.6 Screenshot Wine mit LexiROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
10.7 Screenshot User-Mode Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
10.8 Screenshot VServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
XXVIII Abbildungen

11.1 Screenshot GRUB-Startbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475


11.2 Screenshot sysvconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
11.3 Screenshot ksysv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
11.4 Screenshot bum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

12.1 Screenshot Kuser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526


12.2 Screenshot GNOME User administration tool . . . . . . . . . . . . . . . . . 528
12.3 Screenshot phpldapadmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
12.4 Screenshot LDAP Account Manager . . . . . . . . . . . . . . . . . . . . . . . . 555
12.5 Screenshot LDAP mittels Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . 556
12.6 Screenshot LDAP-Client gq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
12.7 Screenshot LDAP-DUA Luma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559

13.1 Schema Aufteilung Partition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565


13.2 Schema Inode, Verweise auf Datenblöcke . . . . . . . . . . . . . . . . . . . . 566
13.3 Screenshot Ausgabe von lde, Inode . . . . . . . . . . . . . . . . . . . . . . . . . . 568
13.4 Screenshot TKSmb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
13.5 Screenshot SWAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
13.6 Screenshot von kdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
13.7 Screenshot Baobab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624

14.1 Paketverwaltungssystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643


14.2 Screenshot Aptitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
14.3 Screenshot GNOME-apt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
14.4 Screenshot Synaptic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
14.5 Screenshot Tasksel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
14.6 Screenshot debconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
14.7 Screenshot manedit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669

15.1 Screenshot menuconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688


15.2 Screenshot xconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
15.3 Screenshot gconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690

16.1 Screenshot pppconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743


16.2 Sreenshot gpppon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747
16.3 Screenshot gnome-ppp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
16.4 DSL-Gateway Linksys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756
16.5 Screenshot Konfiguration Speedport-DSL-Gateway . . . . . . . . . . . . 758
16.6 Screenshot GNOME-lokkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
16.7 Screenshot VNC-Verbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
16.8 Screenshot gftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
16.9 Screenshot geximon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
16.10 Screenshot fetchmailconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
16.11 Screenshot Evolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
Abbildungen XXIX

16.12 Screenshot SquirrelMail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829


16.13 Screenshot Mailman Listenverwaltung . . . . . . . . . . . . . . . . . . . . . . . 831
16.14 Screenshot Mailman Benutzerinfo . . . . . . . . . . . . . . . . . . . . . . . . . . 833
16.15 Screenshot Newsreader Knode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
16.16 Screenshot IM-Client Psi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
16.17 Screenshot Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844
16.18 Screenshot Dokumentation Apache2 . . . . . . . . . . . . . . . . . . . . . . . . 852
16.19 Screenshot Suchmaschine htdig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
16.20 Screenshot DidiWiki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856
16.21 Screenshot Analog für Web-Statistiken . . . . . . . . . . . . . . . . . . . . . . 857
16.22 Screenshot Webalizer für Web-Statistiken . . . . . . . . . . . . . . . . . . . . 858
16.23 Screenshot Micro-Httpd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
16.24 Screenshot des Web-Browsers Iceweasel . . . . . . . . . . . . . . . . . . . . . 863
16.25 Screenshot Epiphany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
16.26 Screenshot Web-Browser Konqueror . . . . . . . . . . . . . . . . . . . . . . . . 865
16.27 Screenshot Web-Browser Opera . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866
16.28 Screenshot Kiosktool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
16.29 Screenshot iptotal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
16.30 Sreenshot phpsysinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
16.31 Screenshot Wireshark, Rohdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875
16.32 Screenshot Wireshark, Statistik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877
16.33 Screenshot darkstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
16.34 Screenshot MRTG DSL-Router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
16.35 Screenshot MRTG Serverlast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
16.36 Screenshot Startseite Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
16.37 Screenshot Webmin-Seite zu NIS . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
16.38 Screenshot der Webmin-Seite zu Apache . . . . . . . . . . . . . . . . . . . . . 886
16.39 Screenshot Monit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887

17.1 Beowulf-Cluster der McGill University . . . . . . . . . . . . . . . . . . . . . . 894

18.1 Screenshot xsensors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901


18.2 Screenshot grsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906
18.3 Screenshot nmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
18.4 Screenshot Nessus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923
18.5 Screenshot GNOME System Log . . . . . . . . . . . . . . . . . . . . . . . . . . . 928
18.6 Screenshot Bastille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
Tabellen

2.1 Tastenkommandos Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53


2.2 Standarddateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.3 Dateiarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
2.4 Ausschnitt Zeichensatz Latin-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
2.5 Zeichendarstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

4.1 Portnummernbereiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

6.1 Seitenverhältnisse Bildschirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

7.1 Beispiel für die Repräsentation von Partitionen durch Gerätedateien


und durch Laufwerksbuchstaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

9.1 Typische Gerätedateien für Mausanschlüsse. . . . . . . . . . . . . . . . . . . . . . 405

11.1 Runlevels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500

12.1 Benutzer- und Gruppennummern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520

13.1 Obergrenzen ext2-Dateisystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567

17.1 Verfügbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893

20.1 Zahlensysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051


20.2 ASCII-Steuerzeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
20.3 German ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059

21.1 Tasten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1060

22.1 Signale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063


Tabellen XXXI

23.1 Gerätedateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065

24.1 Ports und Dienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069

25.1 Requests For Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072


25.2 For Your Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074
Programme und andere Quellen

2.1 Shellskript converter.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48


2.2 Shellskript converter2.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3 Shellskript Primzahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
2.4 Shellskript backup.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
2.5 Shellskript frage.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
2.6 Shellskript erreichbar.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.7 Shellskript auswahl.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
2.8 Shellskript loeschen.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
2.9 Shellskript abbruch.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
2.10 Shellskript abbruch2.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
2.11 Shellskript bedingt.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.12 Shellskript durchlauf.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.13 Shellskript preshuffle.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
2.14 Shellskript optionen.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.15 Shellskript hallo.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2.16 Start- und Stopskript sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
2.17 Konfigurationsdatei sound.config . . . . . . . . . . . . . . . . . . . . . . . 111
2.18 Perlskript Primzahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

3.1 Shellskript randomgdmtheme.sh . . . . . . . . . . . . . . . . . . . . . . . . 198

9.1 Shellskript weg.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400


9.2 Shellskript wol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

14.1 C-Programm myhallo.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668


14.2 Makefile zu myhallo.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668

16.1 Shellskript ipt-reset.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770


16.2 Shellskript ipt-set.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
16.3 Shellskript ipt-masq.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
Programme und andere Quellen XXXIII

16.4 Shellskript mynetfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777

18.1 Shellskript syswatch.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918


Zum Gebrauch

• Der erste Teil enthält Grundlagen, die im weiteren Verlauf als bekannt vorausge-
setzt werden. Wer mit Linux/UNIX und dem X Window System (X11) vertraut
ist, beschränkt sich auf Nachschlagen bei Bedarf.
• Hervorhebungen im Text werden kursiv dargestellt.
• Titel von Veröffentlichungen oder Abschnitten, Namen von Debian-Paketen oder
-Distributionen, Menüpunkte, Namen von Schaltflächen (Buttons), kurze Zitate
oder wörtliche Rede werden im Text kursiv markiert.
• In Aussagen über Wörter werden diese kursiv abgesetzt.
• Namen von Personen stehen in K APITÄLCHEN.
• Eingaben in die Tastatur oder Ausgaben auf den Bildschirm werden in
Schreibmaschinenschrift wiedergegeben, ebenso Dateinamen, Aus-
schnitte aus Dateien (Text, Code), Variablennamen, Adressen oder URLs.
• Ist eine buchstäbliche Eingabe durch einen gewöhnlichen Benutzer gemeint, so
wird der Eingabe der Systemprompt vorangestellt, erforderlichenfalls mit der
Angabe des jeweiligen Arbeitsverzeichnisses:
joe@debian:~$ ls -l /usr/bin
joe@debian:/etc$ less passwd
Um die Eingabe wirksam werden zu lassen, ist abschließend die Eingabetaste
<cr> (Return, Enter, Amen) zu drücken. Darauf wird nicht jedes Mal hingewie-
sen. Lange Eingabezeilen müssen wegen der begrenzten Breite des Satzspiegels
in zwei oder mehr Druckzeilen aufgeteilt werden; auf der Tastatur sind sie als
eine durchgehende Zeile ohne Unterbrechung einzugeben:
joe@debian:~$ dd if=/dev/zero of=/tmp/myloop bs=1M
count=1000
• Bei einer buchstäblichen Eingabe durch den Systemverwalter (Root) sieht der
Prompt anders aus:
debian:~# init s
XXXVI Zum Gebrauch

beziehungsweise bei Angabe eines Arbeitsverzeichnisses:


debian:/var/log# less auth.log
• Syntaxangaben erscheinen in grau hinterlegter Schreibmaschinenschrift.
• Tastenbezeichnungen werden in Spitzmarken eingerahmt, beispielsweise <a>,
<A> oder <tab>. Sind Tastenkombinationen (keycords) einzugeben, werden die
Tasten mit einem Pluszeichen verbunden: <ctrl>+<c>. Den Tasten aus dem
Nummernblock (keypad) wird KP vorangestellt: <KP5>. Eine Übersicht über
Sondertasten wie <ctrl> findet sich im Anhang auf Seite 1060.
• Wenn nichts anderes gesagt ist, stammt ein Programm oder Werkzeug aus einem
gleichnamigen Debian-Paket aus der etch-Distribution (stable seit 2007).
• Im Sachverzeichnis werden Umlaute wie die zugehörigen Grundlaute einsortiert
(wie im Duden).
• Suchen Sie die englische oder französische Übersetzung eines deutschen Fach-
wortes, so finden Sie diese bei der erstmaligen Erläuterung des deutschen Wortes.
• Suchen Sie die deutsche Übersetzung eines englischen oder französischen Fach-
wortes, so finden Sie einen Verweis im Sachverzeichnis.
• UNIX wird hier immer als die Gattung der aus dem bei AT&T um 1970 entwi-
ckelten UNIX ähnlichen Betriebssysteme verstanden, nicht als geschützter Name
eines bestimmten Produktes.
• Wir geben möglichst genaue Hinweise auf unsere Quellen und auf weiterführen-
de Dokumente, auch wenn sie sich stellenweise häufen. Die Alternative wäre ein
vielbändiges Werk, das Sie nicht kaufen wollen und wir nicht schreiben können.
Oftmals handelt es sich um URLs eines Dokumentes oder des Verzeichnisses, in
dem ein Dokument liegt. Der Leser denke aber daran, dass sich sowohl Inhalte
wie Adressen (URLs) ändern. Im Lauf einiger Jahre werden viele Hyperlinks von
der Linkfäule befallen; das ist bei der Dynamik des Internets unvermeidlich. Wir
haben jeden Hyperlink geprüft, lehnen aber eine Haftung für die Inhalte nicht
von uns verfasster Webseiten oder sonstiger Dokumente ab.
• Wir bemühen uns um die neue deutsche Rechtschreibung, aber Gewohnheit ist
ein eisern Hemd. Und dann hat noch unser Rechtschreib-Prüfprogramm seine
Ansichten.
• Unter Benutzer, Verwalter, Programmierer usw. werden sowohl männliche wie
weibliche Erscheinungsformen verstanden.
• Irren ist menschlich. Wir machen da keine Ausnahme und sind für freundliche
Hinweise dankbar.
1
Was ist Debian GNU/Linux?

Debian GNU/Linux ist ein freies und offenes Betriebssystem. Wir erfahren, was hin-
ter diesen Begriffen steckt und was das Besondere an Debian ist.

1.1 Betriebssysteme
Ein Rechner (E: computer, F: ordinateur) besteht aus Hardware (F: matériel) und
Software (F: logiciel), ein Netz (E: network, F: réseau) genauso. Ohne Software ver-
brät die Hardware elektrische Energie, erzeugt Lärm und steht im Weg herum. Erst
die Software macht aus den Kisten und Strippen Geräte, mit denen etwas anzufan-
gen ist. Eine CD/DVD-Scheibe, der graue Kasten auf oder neben Ihrem Schreibtisch,
Blätter und Einband eines Buches sind Hardware, der Inhalt eines Buches, einer
CD/DVD oder des Speichers in dem grauen Kasten sind Software. Wenn wir Soft-
ware auf einem Datenträger kaufen, bezahlen wir für zweierlei: für den Datenträger
(wenige Euro) und für die Erlaubnis, die Software benutzen zu dürfen (null bis viele
Euro).
Die Grundsoftware eines Rechners, die als erste von einem dauerhaften Speicher
geladen wird und Voraussetzung für alles Weitere ist, wird Betriebssystem (E: ope-
rating system, F: système d’exploitation) genannt. Innerhalb der von der Hardware
gesetzten Grenzen bestimmt das Betriebssystem die Eigenschaften eines Rechners.
Ein PC nach IBM-Muster mit einem DOS-Betriebssystem ist ein DOS-Rechner, der-
selbe PC mit einem Linux/UNIX-Betriebssystem ist ein Linux/UNIX-Rechner mit
deutlich anderen Fähigkeiten. Die meisten Betriebssysteme sind für eine bestimm-
te Hardware geschrieben. Linux/UNIX hingegen ist für unterschiedliche Hardware
verfügbar. Debian GNU/Linux beispielsweise ist an ein Dutzend Prozessortypen an-
gepasst worden. Der in PCs verwendete Prozessor Intel 80386 samt Nachfolgern und
Nachempfindungen ist nur einer davon, wenn auch der am weitesten verbreitete.
Zu einem Zeitpunkt kann auf einem Rechner nur ein Betriebssystem laufen.
Will ich dieses wechseln – beispielsweise von Debian GNU/Linux auf Mac OS
– muss ich den Betrieb beenden, den Rechner herunterfahren und dann mit dem
neuen Betriebssystem wieder hochfahren. Anwendungsprogramme dagegen werden
2 1 Was ist Debian GNU/Linux?

im laufenden Betrieb gestartet und beendet, ohne dass der Rechner herunterge-
fahren wird. Die Leistungssteigerungen der Hardware ermöglichen mittlerweile
jedoch den gleichzeitigen Betrieb mehrerer Betriebssysteme auf einem Rechner
unter einem Über-Betriebssystem. Jedes der Betriebssysteme stellt einen virtuellen
Rechner dar. Das dient dazu, verschiedene Betriebssysteme auf einer Hardwa-
re nebeneinander laufen zu lassen oder verschiedene Konfigurationen (Arbeits-
platz, Experimentierrechner, Quarantänestation, verschiedenartige Server) eines
Betriebssystems. Kommerzielle Über-Betriebssysteme sind VMware (http:
//www.vmware.com/de/) und Microsoft VirtualServer (http://www.
microsoft.com/germany/virtualserver/), freie oder offene Varianten
sind Xen (http://www.cl.cam.ac.uk/Research/SRG/netos/xen/,
http://xen.sf.net/) von der University of Cambridge/UK, Linux-VServer
(http://linux-vserver.org/), OpenVZ (http://openvz.org/) und
User Mode Linux (http://user-mode-linux.sourceforge.net/). Bei
Debian sind entsprechende Pakete in der Abteilung Other Os’s zu suchen; es gibt
aber nicht viele. Die Einrichtung eines Rechners mit mehreren virtuellen Betriebs-
systemen ist vermutlich auch zu umfangreich für ein Paketsystem und erfordert
einige Erfahrung. Die Übergänge zwischen virtuellen Diensten (beispielsweise
Webservern), chroot-Umgebungen (Gefängnissen, Jails), emulierten Betriebssy-
stemen (MS Windows oder Mac OS unter GNU/Linux), virtuellen Betriebssystemen
(MS Windows oder Mac OS neben GNU/Linux) und Rechner-Clustern1 (mehrfache
Hardware, die nach außen wie ein einziger Rechner wirkt) sind fließend. Wer sich
für das Thema interessiert, sollte mit der deutschen und der englischen Wikipedia
anfangen.
Zu den Kernaufgaben eines jeden Betriebssystems gehören die Steuerung oder
Verwaltung:
• der Betriebsmittel (Prozessoren, Speicher, Ein/Ausgabe), wobei technische Ein-
zelheiten vor dem Benutzer und seinen Programmen verborgen werden,
• der Arbeitsabläufe (Prozesse),
• der Daten (Dateisystem).
Diese Aufgaben nimmt der Kern (E: kernel, F: noyau) des Betriebssystems wahr.
Es gibt jedoch Ansätze, sie in Anwendungsprogramme auszulagern und dem Kern
nur noch koordinierende und kontrollierende Tätigkeiten zu überlassen. Vorteile ei-
nes solchen Mikrokerns sind Übersichtlichkeit und Anpassungsfähigkeit. Der Linux-
Kern ist monolithisch (kein Mikrokern), jedoch stark modularisiert. Da der nackte
Kern ziemlich hilflos ist, zählt man zum Betriebssystem im weiteren Sinn auch not-
wendige Konfigurationsdateien, einen Bootloader etc. Linux bezeichnet genau ge-
sprochen nur einen Kern, während AIX, HP-UX, Mac OS X, FreeBSD, MS Windows
vollständige Betriebssysteme sind, nicht nur Kerne. Deshalb reden wir von Debian
GNU/Linux: die Debian-Distribution eines Linux-Kerns samt GNU-Software. Dazu
mehr in Abschnitt 1.3 Debian GNU/Linux auf Seite 11.

1
Das Wort Kluster gab es einmal im Deutschen; noch in Grimms Wörterbuch wird es
aufgeführt: KLUSTER:, klump von beeren, früchten u. ä..
1.1 Betriebssysteme 3

Linux/UNIX geht zurück auf ein Ur-UNIX, das Ende der sechziger Jahre des
vorigen Jahrhunderts von K ENNETH T HOMPSON und D ENNIS M. R ITCHIE in
den Bell Laboratories des US-amerikanischen Telefonkonzerns AT&T entwickelt
wurde2 , und zwar für den Eigengebrauch, nicht als Produkt für den Verkauf. Der
Name ist kein Akronym (Abkürzung), sondern hat eine lockere Beziehung zu ei-
nem Vorgänger namens Multics. Im weiteren Verlauf wurde UNIX zu großzügigen
Bedingungen an Universitäten abgegeben – die ihrerseits zur Entwicklung beitru-
gen, wobei sich die University of California at Berkeley mit ihrer Berkeley Soft-
ware Distribution (BSD) hervorgetan hat – und der Programmcode an Firmen wie
Hewlett-Packard oder IBM lizenziert. Den Namen hielt AT&T jedoch zurück, so-
dass die Firmen eigene Namen wählen mussten wie HP-UX oder AIX. Auf die-
se Weise entstand eine Gattung von UNIX-artigen Betriebssystemen. Streng ge-
nommen ist UNIX auch heute noch ein geschützter Name, der der Open Group
(http://www.opengroup.org/) gehört.
Die UNIX-Betriebssysteme zeichneten sich von Anbeginn durch bemerkenswer-
te Eigenschaften aus:
• Sie bearbeiten mehrere Aufgaben gleichzeitig (Multi-Tasking),
• kennen mehrere Benutzer mit abgestuften Rechten (Multi-User),
• unterstützen den Dialogbetrieb am Terminal,
• arbeiten mit Hardware zahlreicher Hersteller zusammen
• und lassen sich anpassen oder erweitern.
Diese und andere, für die damalige Zeit fortgeschrittene Eigenschaften sind von jün-
geren Betriebssystemen teilweise übernommen worden und erscheinen uns heute
selbstverständlich. Das Ur-UNIX war ein großer Wurf. Die Vielseitigkeit stellt aber
auch Anforderungen. Um aus dem Vorwort eines X11-Buches zu zitieren: UNIX can
be a power-user’s paradise and a beginner’s nightmare, with the administrator sand-
wiched somewhere in between.
POSIX ist kein Betriebssystem, sondern ein umfangreicher Standard3 , der
die Anforderungen an POSIX-konforme Betriebssysteme festlegt (http://www.
opengroup.org/). Ausführlich lautet seine Bezeichnung IEEE Portable Opera-
ting System Interface for Computing Environments, womit gesagt ist, dass es um
die Schnittstelle zwischen Betriebssystemen und Anwendungsprogrammen geht.
Der Standard ist nicht kostenfrei erhältlich und wendet sich nicht an den durch-
schnittlichen Benutzer oder Programmierer. Debian GNU/Linux entwickelt sich
auf die POSIX-Vorgaben zu. Ein ähnliches Ziel verfolgen The Single UNIX Spe-
cification (http://www.unix.org/online.html), ebenfalls von der Open
Group herausgegeben und daher mit Gemeinsamkeiten zu POSIX, und speziell in
2
Eine authentische Zusammenfassung der Anfänge findet sich in The Bell System Tech-
nical Journal Vol. 57, July-August 1978, Nr. 6, Part 2, Seite 1897 bis 2312. Eine gute
Übersicht bieten auch der Eintrag Geschichte von Unix in der deutschen Wikipedia, http:
//de.wikipedia.org/, sowie R ITCHIES Webseite http://www.cs.bell-labs.
com/who/dmr/.
3
Standard im Sinn von Norm schreibt sich hinten mit d. Eine Standarte ist eine kleine
Fahne, allenfalls noch der Schwanz eines Fuchses.
4 1 Was ist Debian GNU/Linux?

der Linux-Welt die Linux Standard Base (http://www.linuxbase.org/).


Die Free Standards Group (FSG, http://www.freestandards.org/) för-
dert freie bzw. offene Software durch die Veröffentlichung freier Standards und
pflegt Beziehungen zur Linux-Welt, inzwischen aufgegangen in The Linux Foun-
dation (http://www.linux-foundation.org/).
Die Aufgaben rund um ein Linux/UNIX-System lassen sich von drei Standpunk-
ten aus betrachten:
• Ein Benutzer (E: user, F: utilisateur) arbeitet mit dem System und löst von außen
kommende Aufgaben mit seiner Hilfe,
• ein Verwalter (E: administrator, F: administrateur) bringt das System zum Lau-
fen und sorgt für sein Wohlergehen. Administrators make things work, um noch
einmal das X11-Buch zu zitieren.
• ein Entwickler (E: developer, F: développeur) kümmert sich um die Weiterent-
wicklung der Software, um Standards und neue Hardware.
Entsprechend unterscheiden sich die Interessen der drei Gruppen. Ein Benutzer will
eine Maschine konstruieren, einen Versuch auswerten, seine Termine in den Griff be-
kommen oder ein Buch online finden und bestellen. Welche Grafik seinen Bildschirm
steuert oder welcher Algorithmus seine Mitteilungen verschlüsselt, ist ihm gleich,
solange alles reibungslos und zuverlässig funktioniert. Dafür zu sorgen ist Sache des
Verwalters, der sich seinerseits nicht mit Einzelheiten der Anwendungsprogramme
abgibt. Bei der Fülle von Anwendungen wäre ihm das gar nicht möglich. Sicherheit
in jeder Hinsicht ist ein zentrales Thema für den Verwalter. Ein Entwickler program-
miert neue Software, entwickelt bestehende weiter, passt sie an neue Standards –
zum Beispiel internationale Zeichensätze – an, ringt um Treiber für neue Hardware
– zum Beispiel für schnelle WLAN-Karten – und schreibt die Dokumentation dazu.
Bei Debian zählt auch das Einbinden der Software in das Debian-Paketsystem zu
seinen Aufgaben. Die drei Aufgabenbereiche überschneiden sich.
Falls Sie das eben Gesagte und ein bisschen mehr noch einmal aus anderer Feder
lesen wollen, legen wir Ihnen das Unix and Internet Fundamentals HOWTO (2004)
von E RIC S TEVEN R AYMOND (ESR) ans Herz, im Netz unter http://www.
tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/ un-
entgeltlich zu beziehen. In unseren Büchern weisen wir – wie eben – oft auf wei-
terführende Dokumentation hin. Das ist zum einen eine Frage des Platzes und zum
anderen eine der Aktualität. System- und Netzverwalter sollten Englisch wenigstens
lesen können.

1.2 Freie Software, GNU und Linux


1.2.1 Freie Software

Software, bei der jedermann das Recht hat, den Quellcode einzusehen, wird als offen
bezeichnet. Wenn auch nur Programmierer mit dem Quellcode etwas anfangen kön-
nen, so ist diese Möglichkeit doch wichtig, um eine Software beurteilen zu können.
1.2 Freie Software, GNU und Linux 5

In offenen Quellen lassen sich keine geheimen Funktionen verstecken. Schwächen


werden öffentlich diskutiert. Manchmal will man als Anwender auch nur wissen,
welchen Einschränkungen ein Programm unterworfen ist, und findet in der Doku-
mentation keine ausreichende Erklärung. Ein Blick in die Quellen hilft weiter.
Warum ist der Zugang zum Quellcode so wichtig? Das Erstellen von Program-
men läuft gewöhnlich in zwei Schritten ab. Zunächst wird ein Quelltext (Sourcecode)
geschrieben. Dabei handelt es sich um eine oder mehrere Textdateien, die von Pro-
grammieren gelesen, verstanden und geändert werden können. Der Quelltext wird
dann mit Hilfe eines Übersetzer-Programms – dem Compiler – in ein Binärformat
gebracht, das vom Betriebssystem in den Arbeitsspeicher geladen und vom Prozes-
sor (CPU) ausgeführt wird. Die genaue Arbeitsweise eines Programms oder etwai-
ge Fehler lassen sich anhand der Binärversion nicht oder nur mit hohem Aufwand
feststellen. Ebenso ist es beinahe unmöglich, solche Programme zu verändern oder
um neue Eigenschaften zu erweitern. Darüber hinaus verbieten viele kommerzielle
Softwarelizenzen, im Binärformat vorliegende Programme zu untersuchen oder zu
verändern. Eine Bestimmung der GNU General Public License (GPL) fordert des-
wegen, dass jedes Programm, das unter der GPL steht, zusammen mit seinem Quell-
text verfügbar gemacht wird. Außerdem muss jeder, der ein GPL-lizenziertes Pro-
gramm verändert oder weiter gibt, dieses ebenfalls unter der GPL tun. Es muss der
Quellcode – einschließlich etwaiger Änderungen – offen gelegt werden. Durch die-
se Bestimmung wird gewährleistet, dass der ursprüngliche Autor eines Programms,
das unter der GPL veröffentlicht wurde, von Verbesserungen und Erweiterungen des
Programms durch die Lizenznehmer profitiert. Die Verpflichtung zur Offenlegung
des Quellcodes ist keine einseitige Leistung des Programmautors, sondern ein An-
gebot an andere Personen, das Programm ändern und weitergeben zu dürfen unter
der Bedingung, dass die Änderungen ebenfalls veröffentlicht werden.
Darf jedermann die Software ändern und sie in originaler oder veränderter Form
weitergeben, bezeichnet man die Software als frei. Das Wort frei bezieht sich dabei
nicht auf den Preis. Frei heißt frei von Einschränkungen im Gebrauch, nicht kosten-
frei. Die GNU General Public License gestattet durchaus, Software zu verkaufen.
Sie gestattet nicht, für den Quellcode einen gesonderten Preis zu berechnen oder es
zu verbieten, dass der Käufer die betreffenden Programme seinerseits weiter gibt.
Freie Software ist von Freeware zu unterscheiden. Bei Freeware handelt es sich um
Programme, die zwar ohne Bezahlung beschafft und eingesetzt werden können, zu
denen aber nicht notwendigerweise der Quellcode verfügbar ist. Bei Freeware be-
zieht sich das Wort free auf den Preis und nicht auf die Freiheit, das Programm so zu
benutzen, wie man möchte.
Freie Software muss nicht unbedingt unter der GPL stehen. Abgesehen davon,
dass es neben der GPL andere, ähnliche Lizenzen gibt, handelt es sich bei einer
Reihe von Programmen um Public Domain Software. Solche Programme können
ebenfalls von jedermann eingesetzt, verändert und weitergegeben werden, sie sind
aber nicht lizenziert. Der Autor hat auf alle Rechte an dem Programm verzichtet und
deswegen auch kein Recht zu verlangen, dass Änderungen ebenfalls im Quellcode
veröffentlicht werden.
6 1 Was ist Debian GNU/Linux?

Freie Software ist nicht nur aufgrund ideeller Überlegungen oder ausgeklügelter
Lizenzen erfolgreich. Vielmehr ist die Möglichkeit zur Anpassung eines Programms
oft ein Argument für die Auswahl freier Software. Neben Gründen der Flexibilität
und der Kosten spielen häufig auch Aspekte der Sicherheit sowie der Softwarestabi-
lität eine entscheidende Rolle. Fehler in offen gelegten Programmen, die von vielen
Anwendern, Programmieren und Analytikern untersucht werden, sind in der Regel
schneller entdeckt und behoben, als es bei kommerziellen Programmen, auf deren
Quellcode nur ein enger Personenkreis zugreifen kann, der Fall ist.
Stellen wir uns folgende Situation vor: Ein Systemverwalter entdeckt ein eigen-
artiges Verhalten eines Programms. Er untersucht die Situation und stellt anhand des
Quellcodes fest, dass das Programm unbeabsichtigter Weise die Möglichkeit bietet,
über das Netz auf den Rechner zuzugreifen und dort befindliche Daten zu manipulie-
ren. Diese Entdeckung teilt er den Autoren und Benutzern des Programms über eine
Mailing-Liste4 mit. Aufgrund der genauen Angaben zu dem Fehler, die ohne den
Quellcode nicht möglich gewesen wären, löst ein anderer Benutzer des Programms
den Fehler innerhalb weniger Stunden. Die Lösung wird sofort veröffentlicht, um
die Gefahr des unbefugten Datenzugriffs zu bannen. Aus Sicht desjenigen, der die
Problemlösung erarbeitet hat, sprechen weitere Gründe für die schnelle Veröffentli-
chung der Lösung:
• Bliebe sie unveröffentlicht, müsste sie in jede neue Version des betreffenden Pro-
gramms erneut integriert werden.
• Durch die Veröffentlichung wird die eigene Qualifikation nachgewiesen.
• Es besteht möglicherweise das Bedürfnis, etwas an Menschen zurückzugeben,
die einem in ähnlichen Situationen ebenfalls geholfen haben.
Zum Vergleich könnte sich die Geschichte bei einem kommerziellen Software-
produkt folgendermaßen abspielen: Der Systemverwalter bemerkt wieder ein eigen-
artiges Verhalten eines Programms. Er versucht, dieses Verhalten zu untersuchen, ist
sich allerdings nicht darüber im klaren, ob der Grund für das Programmverhalten im
Programm selbst oder im Zusammenspiel mit dem Betriebssystem liegt. Die Frage
kann er nicht ohne weiteres beantworten, weil der Quellcode von Programm und Be-
triebssystem nicht zur Verfügung steht und das fragliche Programm nur unter diesem
Betriebssystem ausgeführt werden kann. Daraufhin nimmt er Kontakt zum Support
des Programmherstellers auf und erklärt diesem die Angelegenheit. Der Programm-
hersteller sieht sich nicht veranlasst, eine Änderung an dem Programm vorzunehmen,
weil ihm ja nicht nachgewiesen werden kann, dass tatsächlich ein Fehler im Pro-
gramm vorliegt. Das Gleiche gilt für den Hersteller des Betriebssystems. Der Fehler
wird zu einem späteren Zeitpunkt von böswilligen Angreifern bemerkt, die ihn tat-
sächlich benutzen, um sich Zugriff zum betreffenden System zu verschaffen und dort
Daten zu verändern. Erst zu diesem Zeitpunkt räumt der Hersteller des Programms
eine mögliche Schwäche ein und empfiehlt, das Programm zunächst in einem be-
stimmten Modus nicht mehr zu benutzen. Ein halbes Jahr später bringt er ein Update
des Programms heraus, für das erneut Lizenzgebühren fällig sind.

4
Eine Mailing-Liste ist ein Verteiler für Email-Rundschreiben.
1.2 Freie Software, GNU und Linux 7

Die Geschichte beleuchtet einen der wesentlichen Vorteile freier Software: Es


ist erlaubt, sich und anderen selbst zu helfen. Freie Software wird seit einiger Zeit
auch als Open-Source-Software bezeichnet. Der Begriff Open Source ist geschützt
und an bestimmte Bedingungen gebunden. Die Bedingungen können wir im Inter-
net unter http://www.opensource.org/docs/definition.php nach-
lesen. Sie gehen auf die Debian Free Software Guidelines zurück, siehe Ab-
schnitt 1.3.1 Die Debian GNU/Linux Distribution auf Seite 11.
Auch die Autoren kostenfreier Software und Dokumente brauchen Geld zum Le-
ben und veröffentlichen ihre Werke selten aus Nächstenliebe. Da sie selbst vielfach
kostenfreie Werke benutzen, läuft es für sie insgesamt auf dasselbe hinaus, ob sie
Geld verlangen oder nicht. Oft werden auch Software oder Dokumente für den Ei-
genbedarf geschrieben – beispielsweise ein Abkürzungsverzeichnis – und mit gerin-
gem Aufwand der Allgemeinheit im Netz zugänglich gemacht. Ein Buchautor kann
für seine Bücher werben, indem er Manuskripte ins Web stellt, ohne seine Urheber-
rechte aufzugeben. Manchmal entstehen auch Bücher aus Webseiten, und der Autor
samt seiner Firma zeigt damit seine Kompetenz, beispielsweise als Webdesigner oder
Webmaster. Großen Firmen aus der Computerbranche steht es gut an, freie Software
nicht nur zu benutzen, sondern auch zu fördern. Ein unaufdringlicher Hinweis auf
den Sponsor stört niemanden. Ein Teil der Software und der Texte stammt aus dem
Hochschulbereich, wo mit öffentlichen Mitteln geförderte Projekte verpflichtet sind,
ihre Ergebnisse zu veröffentlichen. Schließlich ist auch die Anerkennung durch Zeit-
und Leidensgenossen ein Ansporn.

1.2.2 GNU is Not UNIX


Der Programmierer R ICHARD M ATTHEW S TALLMAN (RMS) gründete 1984 das
GNU-Projekt mit dem Ziel, ein System freier Software zu entwickeln, das den
Software-Bedarf von Computer-Benutzern vollständig abdecken sollte. Kern des
Projekts war zunächst die Erstellung eines Compilers5 sowie die Programmierung
eines Betriebssystems. Von Anfang an kümmerte sich das GNU-Projekt auch um
die Entwicklung von Anwendungsprogrammen und Werkzeugen zur Benutzung des
Systems. Eine der bekanntesten GNU-Anwendungen ist der Editor6 Emacs. Die
GNU-Programme erfreuten sich schon früh großer Beliebtheit. Sie wurden und wer-
den von vielen Anwendern eingesetzt, weil sie oft besser programmiert sind und
mehr Möglichkeiten bieten als kommerzielle Gegenstücke.
Die Abkürzung GNU steht für GNU is Not UNIX. Der Name drückt aus, dass
GNU in enger Beziehung zu dem Betriebssystem UNIX steht, sich gleichzeitig je-
doch von UNIX abgrenzt. Das vom GNU-Projekt geplante und entwickelte Betriebs-
system verhält sich in vielerlei Hinsicht wie eine Weiterentwicklung von UNIX. Es
handelt sich jedoch nicht um UNIX, weil alle GNU-Programme unabhängig vom
AT&T-Code neu programmiert wurden. Als Logo hat sich das Projekt naheliegen-
derweise den Kopf eines Gnus oder Wildebeests gewählt, siehe Abbildung 1.1.
5
Ein Compiler ist ein Programm, das den von Menschen geschriebenen Programmcode
(Quellcode) in ein von Maschinen ausführbares Format (Maschinencode) übersetzt.
6
Ein Editor ist ein Programm, mit dem Daten bearbeitet werden.
8 1 Was ist Debian GNU/Linux?

Hauptmotiv für die Gründung des GNU-Projekts war, dass Anfang der 80er Jah-
re des vorigen Jahrhunderts immer mehr Software unter Copyright-Bestimmungen
gestellt wurde, die es unmöglich machten, die Programme zu verändern, Fehler zu
beheben oder sie an eigene Bedürfnisse anzupassen. Darüber hinaus stellten die
Copyright-Bestimmungen es unter Strafe, Programme oder eigene Änderungen dar-
an – sofern sie doch möglich waren – an Andere weiterzugeben. Eines der wesent-
lichen Bestandteile des GNU-Projekts ist deswegen eine eigene Softwarelizenz, die
zum einen die Rechte des Programmierers schützt, zum anderen jedoch verhindert,
dass die Freiheit bei der Verwendung eines Programms eingeschränkt wird. Die
GNU-Lizenz wird in Anspielung auf den Begriff Copyright auch als Copyleft be-
zeichnet. Ihr offizieller Name ist GNU General Public License (GPL). Eine deutsche
Übersetzung der Lizenz finden Sie im Anhang ab Seite 1079.

Abb. 1.1: Das GNU-Logo, der Kopf eines Gnus oder Wildebeests, gezeichnet von E TIENNE
S UVASA. Keine Ähnlichkeit mit RMS.

Abkömmlinge der GPL sind die GNU Lesser General Public License (LGPL)
und die GNU Free Documentation License (GFDL). Erstere erlaubt nicht-freier Soft-
ware, gegen LGPL-lizenzierte Software – vor allem Bibliotheken – dynamisch zu
linken, ohne zur Offenlegung des Quellcodes verpflichtet zu sein. Die GPL lässt das
nicht zu. Die GFDL ist eine Lizenz für freie Inhalte, worunter man sich anfangs die
Dokumentation zur Software vorstellte. Mittlerweile werden auch andere Dokumen-
te unter der GFDL veröffentlicht. Am bekanntesten ist die Wikipedia.
Außerhalb des GNU-Projektes hat die GPL ebenfalls Bedeutung erlangt, weil
nicht mehr jeder Programmierer oder Autor sich um die Formulierung einer Lizenz
für seine Geistesblitze zu sorgen braucht. Viele übernehmen einfach die GPL – viel-
leicht ohne sie gründlich gelesen und verstanden zu haben – und verlassen sich dar-
auf, dass RMS und seine Mitstreiter schon die richtigen Worte gefunden haben. Die
zunehmende Beliebtheit der GPL und ihrer Verwandtschaft führt gelegentlich zu Pro-
blemen, die nicht vorhersehbar waren. Deshalb werden die Lizenzen von Zeit zu Zeit
überarbeitet, aber nicht einfacher.

1.2.3 Linux – ein Kern und viele Distributionen


Im Jahr 1991 begann der finnische Student L INUS B ENEDICT T ORVALDS in Hel-
sinki einen Betriebssystemkern zu entwickeln, der die Fähigkeiten des damals neuen
1.2 Freie Software, GNU und Linux 9

80386-Prozessors7 ausnutzen konnte. T ORVALDS benutzte zu diesem Zweck von


Anfang an die Werkzeuge des GNU-Projektes. Insbesondere setzte er den GNU-C-
Compiler ein, um den Quellcode seines Kerns in Maschinencode zu übersetzen. Das
Design und die Schnittstellen dieses neuen Betriebssystemkerns orientierten sich an
den Schnittstellen von UNIX, weswegen sich auch die übrigen GNU-Programme
sowie andere UNIX-Programme leicht auf das neue System übertragen ließen. Der
Name geht offensichtlich auf Linus und UNIX zurück. Viele UNIX-ähnliche Be-
triebssysteme tragen Namen, die auf -x enden. Ausnahmen bilden Solaris und die
BSD-Systeme.
Nach kurzer Zeit – am 17. September 1991 – veröffentlichte T ORVALDS eine ers-
te Version seines Kerns unter den Lizenzbedingungen der GPL im mittlerweile welt-
umspannenden Internet. Das System war zu diesem Zeitpunkt bereits in der Lage,
den GNU-C-Compiler und den GNU-Kommandointerpreter Bash auszuführen. Von
diesem Anfang ließen sich andere Programmierer begeistern. Sie beteiligten sich an
der Entwicklung, sodass der Kern schnell wuchs, stabiler und um neue Fähigkeiten
ergänzt wurde. Zwei Jahre nach der ersten Veröffentlichung des Linux-Kerns hatten
sich schon mehr als 100 Programmierer an der Entwicklung beteiligt. Die Menge des
Quellcodes hatte sich ungefähr verzehnfacht. Man schätzt, dass 1993 bereits 20.000
Benutzer Linux einsetzten. Diese Entwicklung hat sich bis heute fortgesetzt.

Abb. 1.2: Tux, der wohlgenährte, zufriedene Pinguin, das Linux-Logo, gezeichnet von L ARRY
E WING

Linux bezeichnet – wie wir gelesen haben – eigentlich nur den Kern, zu haben bei
http://www.kernel.org/. Die Software drumherum, die zu einem einsatzbe-
reiten Betriebssystem gehört, müsste sich ein Anwender beim GNU-Projekt und aus
weiteren Quellen beschaffen. Das ist viel Arbeit, nicht immer einfach und mit dem
Zwang verbunden, sich in kurzen Zeitabständen um neue Versionen der Software zu
kümmern8 . Deshalb übernehmen Firmen oder Organisationen die Arbeit und stellen
Distributionen zusammen, mit denen vergleichsweise einfach ein lauffähiges System
auf einem Rechner eingerichtet und aktuell gehalten werden kann. Eine Distribution
fasst Programme, Dokumentation etc. überwiegend aus fremden Quellen zusammen,
bei Debian als Upstream bezeichnet. Eigene Beiträge der Distributionspfleger sind
7
Deswegen läuft Linux nicht auf den Vorgängern des 80386-Prozessors.
8
Bei diesbezüglichem Ehrgeiz: http://www.linuxfromscratch.org/
10 1 Was ist Debian GNU/Linux?

manchmal unumgänglich, damit eine Distribution reibungslos und zuverlässig funk-


tioniert. Weltweit sind einige hundert Linux-Distributionen entstanden und teilweise
wieder vergangen, siehe die Fachpresse und http://distrowatch.com/. Be-
kannte Distributionen sind Slackware (eine der frühesten), Red Hat, SuSE (heute
zu Novell gehörig), Mandriva (ehemals Mandrake) und Debian. Auf Debian bauen
weitere Distributionen (Derivate) wie Knoppix, Ubuntu, Skolelinux und User-Linux
auf. Sie wenden sich an bestimmte Benutzerkreise oder sind auf bestimmte Anwen-
dungsgebiete ausgerichtet. Eine Übersicht, die weder vollständig noch brandaktuell
sein kann, finden wir bei der deutschen Wikipedia unter den Lemmata Liste von
Linux-Distributionen und Vergleich von Linux-Distributionen.
Als Live System werden Distributionen bezeichnet, die ohne weitere Einrich-
tung unmittelbar von einem entfernbaren Datenträger (Floppy, CD/DVD, USB-
Stöpsel9 ) gestartet und benutzt werden können. Ein Debian Live System hat den
Vorteil, dass man einen Rechner mit einem fremden Betriebssystem vorüberge-
hend unter Debian GNU/Linux betreiben kann – um es auszuprobieren oder um
ein beschädigtes lokales System zu reparieren – ohne am ständigen System et-
was ändern zu müssen. Nach Entfernen des Live System ist der Rechner wieder
ganz der alte. Voraussetzung ist, dass der Rechner von dem entfernbaren Datenträ-
ger starten (booten) kann und dieser in der Boot-Reihenfolge im BIOS an erster
Stelle kommt. Falls der entfernbare Datenträger nur gelesen werden kann, richtet
das Live System unter Umständen temporäre Dateien auf der Festplatte des Rech-
ners ein, ohne in dessen Konfiguration einzugreifen. Von Knoppix oder Ubuntu
beispielsweise gibt es Live-CDs. Wer dauerhaft mit Debian GNU/Linux arbeiten
will, kommt jedoch um eine ordentliche Einrichtung auf der Festplatte nicht her-
um. Live Systeme speziell für die Rettung beschädigter Systeme findet man bei
http://www.kernel.org/pub/dist/, darunter Knoppix (http://www.
knoppix.org/), PlanB (http://www.projectplanb.org/) und Super-
Rescue (http://www.kernel.org/pub/dist/superrescue/).
Als Logo hat sich Linux den bekannten, gut genährten Pinguin namens T UX
gewählt, der 1996 von L ARRY E WING gezeichnet wurde, einem Grafiker aus Texas,
siehe Abbildung 1.2. Er wurde von T ORVALDS ausgesucht, der eine Schwäche für
Pinguine hat. In der Tat ist der Pinguin ein angenehmerer Sympathieträger als ein
fliegendes Gebäudeteil oder ein angebissenes Stück Obst.
Die Anzahl der Linux-Installationen wird zur Zeit auf 25 Millionen geschätzt,
die Anzahl von Entwicklern, die einen Beitrag zu Linux geleistet haben, liegt bei
weit über 1.000, Tendenz steigend. In einigen Bereichen ist Linux schon jetzt das
am weitesten verbreitete Betriebssystem, und zwar – wen wundert es – vor allem
im Bereich von Internet-Servern. Auch im wissenschaftlichen Umfeld, als Server für
heterogene Netze und immer mehr im Bereich der Heim- und Arbeitsplatzrechner
hat sich Linux einen festen Platz erobert. Linux-Varianten laufen heute in Geräten
wie Mobiltelefonen und auf Großrechnern. Niedrige Kosten, hohe Stabilität, hohe
Flexibilität, ein hohes Maß an Sicherheit, eine umfangreiche Dokumentation und

9
USB-Stöpsel sind nicht mit Memory Sticks zu verwechseln, wie sie die Firma Sony ver-
wendet. Umgangssprachlich wird jedoch oft nicht unterschieden.
1.3 Debian GNU/Linux 11

relativ geringe Hardwareanforderungen bewirken, dass sich immer mehr Einkäufer,


Entscheider, Entwickler und Benutzer für GNU und Linux entscheiden. Behörden
schätzen an Linux die niedrigen Kosten von Anschaffung und Betrieb sowie die Si-
cherheit. Auch die mit dem Einsatz von Linux gewonnene Unabhängigkeit von einer
einzelnen Firma ist ein nicht zu unterschätzender Vorteil.
Während vor einigen Jahren vor allem in Unternehmen noch Bedenken bestan-
den, Linux einzusetzen, weil kein kommerzieller Support für das System verfügbar
war, hat sich die Situation mittlerweile gebessert. Eine wachsende Anzahl junger
GNU/Linux-Firmen bietet Dienstleistungen wie Schulungen und Support, aber auch
die Planung und Einrichtung von Linux-basierten EDV-Landschaften an. Darüber
hinaus engagieren sich namhafte Firmen aus der IT-Branche wie IBM, Hewlett-
Packard oder Oracle im Linux-Bereich und bieten Hard- und Software sowie Dienst-
leistungen im Umfeld dieses Betriebssystems an.

1.3 Debian GNU/Linux

1.3.1 Die Debian-GNU/Linux-Distribution

Bei dem Debian-Projekt handelt es sich um eine lockere Organisation aus etwa
1000 Entwicklern weltweit, die sich zum Ziel gesetzt hat, eine freie Software-
Distribution herauszugeben. Die Leute, die Debian zusammenstellen und pflegen
– die Debian-Maintainer – räumen eine Menge Steine aus dem Weg des Benutzers.
Beispielsweise ist die Einordnung von Dateien in Verzeichnisse zwar im Großen fest-
gelegt, aber nicht in allen Einzelheiten. Wer seinem Rechner Software aus Quellen
außerhalb des Debian-Systems hinzufügt, hat oft damit zu kämpfen, dass Dateien
nicht dort liegen, wo sie der Rest des Systems erwartet. Unser Buch befasst sich
mit Debian GNU/Linux, der Linux-Distribution von Debian. Das Debian-Projekt ist
jedoch mehr als eine Linux-Distribution, da es auch andere Kerne als Linux unter-
stützt, beispielsweise BSD-Kerne. Man kann Debian als ein Modell ansehen, um
freie Software so zu organisieren, dass sie jedermann einsetzen kann.
Das Projekt wurde 1993 von I AN M URDOCK gegründet, damals Student der
Purdue-Universität. Der Name Debian entstand aus dem Vornamen seiner Frau D E -
BRA und seinem eigenen Vornamen. Das Projekt ist im Web durch http://www.
debian.org/ vertreten, im deutschen Sprachgebiet durch http://www.de.
debian.org/. Entwickler und am Projekt Interessierte sind in der Debian Devel-
opers’ Corner unter http://www.debian.org/devel/ zu Hause, während
Verwalter und Benutzer oft die Paketlisten unter http://www.debian.org/
distrib/packages/ durchsuchen. Ein Debian-Wiki unter http://wiki.
debian.org/ dient dem Gedankenaustausch. Die Entscheidungswege des Projek-
tes sind in einer Verfassung oder Satzung (constitution, http://www.debian.
org/devel/constitution) niedergelegt; aktuell ist Version 1.2 von 2003.
Für die Gründung des Debian-Projekts sprach vieles: Die kommerziellen Distri-
butionen waren nicht so gut, wie sie hätten sein können, kommerzielle Distributo-
ren bewarben ausgiebig neue, unausgereifte Linux-Eigenschaften, wodurch bei der
12 1 Was ist Debian GNU/Linux?

Kundschaft Enttäuschungen hervorgerufen wurden; außerdem begannen einige Dis-


tributoren, freie und nicht-freie Software miteinander zu vermischen, was zur Folge
hatte, dass die Distributionen nicht mehr uneingeschränkt benutzt werden durften.
Ein weiterer Grund für die Entstehung von Debian war, dass es sich bei einer
Distribution selbst um Software handelt, die genauso frei sein sollte wie ihre Teile.
Durch die Gründung von Debian wurde das Entwicklungsprinzip von Linux, näm-
lich das gemeinschaftliche Arbeiten vieler Entwickler, die über das Internet mitein-
ander kommunizieren, auf die Distribution ausgedehnt. Das Debian-Projekt selbst
hat keine Rechtsform. Weil es bei einem Projekt dieser Größenordnung jedoch not-
wendig ist, Gelder zu verwalten und Rechte wahrzunehmen, wurde von dem Pro-
jekt die gemeinnützige Organisation Software in the Public Interest, Inc. (SPI) mit
Sitz in Indianapolis, USA gegründet, Website http://www.spi-inc.org/.
Die Organisation tritt beispielsweise als Inhaberin des Warenzeichens Debian sowie
als Copyright-Halterin für die Produkte des Debian-Projekts auf. Außerdem nimmt
sie Geld- und Sachspenden an das Debian-Projekt entgegen. Eine kurze Geschich-
te des Projektes findet sich unter http://www.debian.org/doc/manuals/
project-history/. Speziell für Debianerinnen gibt es seit 2004 ein Debian
women project mit der Website http://women.debian.org/.

Abb. 1.3: Das Debian-Logo, der dunkelrote Swirl

Das Logo des Debian-Projektes ist ein dunkelroter Swirl, siehe Abbildung 1.3.
Das Wort swirl bedeutet im Englischen Wirbel oder Spirale. In einer erweiterten
Form des Logos nur für den offiziellen Gebrauch entströmt der Swirl einer Flasche
und könnte einen Flaschengeist oder magischen Rauch darstellen, der einen Rechner
zu sinnvollem Verhalten befähigt. Bilddateien etc. liegen in mehreren Größen und
Formaten auf http://www.debian.org/logos/ zum Herunterladen bereit.
Der Name Debian GNU/Linux drückt aus, dass es sich um eine Softwaredistribu-
tion handelt, die zwei Wurzeln hat, nämlich das GNU-System und den Linux-Kern.
Zur Zeit wird daran gearbeitet, neben Linux auch andere freie Betriebssystemkerne
in das System zu integrieren. Vor allem das GNU-Projekt arbeitet schon seit langem
an einem eigenen Betriebssystemkern namens HURD. Der Kern wird zur Zeit in das
System integriert. Aus diesem Grund wird die gesamte Distribution auch einfach nur
Debian genannt, weil der Linux-Kern kein notwendiger Bestandteil mehr ist. In die-
1.3 Debian GNU/Linux 13

sem Buch wird von Debian GNU/Linux gesprochen, weil nur der Linux-basierte Teil
der Distribution beschrieben wird.
Das Debian-Projekt fühlt sich freier Software besonders verpflichtet. Eine der
tragenden Säulen des Projekts ist der Gesellschaftsvertrag (Social Contract, http:
//www.debian.org/social_contract), in dem die Ziele des Projekts de-
finiert werden. Im Anhang zu dem Vertrag wird dargelegt, unter welchen Be-
dingungen Debian ein Programm (E: programme, US-E: program, F: program-
me, logiciel) als freie Software (F: logiciel libre) anerkennt. Die Richtlinien wer-
den als Debian Free Software Guidelines (DFSG, http://www.debian.org/
social_contract#guidelines) bezeichnet. Gesellschaftsvertrag und DFSG
sind im Anhang des Buches ab Seite 1075 wiedergegeben. Die eigentliche Debian-
Distribution besteht ausschließlich aus Programmen, die mit den DFSG in Einklang
stehen. Als Service für die Benutzer der Distribution bereiten Debian-Entwickler je-
doch auch einige nicht-freie Programme für den Einsatz auf Debian-Systemen vor.
Der Grund ist im Wesentlichen, dass es zur Zeit noch Programme gibt, für die kein
freies Äquivalent verfügbar ist. Freie und nicht-freie Software befindet sich auf den
Debian-Servern im Internet sowie auf den Debian-CD/DVDs in unterschiedlichen
Bereichen, sodass es für Benutzer sofort klar ist, aus welchem Bereich ein Programm
stammt. Solange wir nur Programme aus dem Hauptteil der Distribution (main) ein-
setzen, können wir sicher sein, dass wir das System im Sinne der DFSG frei benut-
zen können. Falls wir jedoch Software aus den Abteilungen non-free oder contrib
einsetzen, ist zu prüfen, ob wir diese Programme für den von uns geplanten Zweck
benutzen dürfen.
Software entwickelt sich weiter. Es gibt kaum ein Programm, von dem nicht
im Lauf der Jahre neue Versionen veröffentlicht werden. Bei Debian werden die
Ausgaben oder Suiten in dreierlei Weise gekennzeichnet:
• durch Nummern, beispielsweise 3.1r5, offiziell als Version bezeichnet, hier in
der Revision 5,
• durch eine Klassifizierung wie unstable, testing und stable, Suite genannt,
• durch (Code-)Namen wie woody, sarge, etch oder lenny.
Anfang 2007 bezeichneten 3.1r5, stable und sarge dieselbe Software. Ebenso mein-
ten testing und etch dasselbe. Zu Ostern 2007 wurde etch unter der Versionsnum-
mer 4.0 (4.0r0) mit dem Linux-Kern 2.6.18 als stabil freigegeben. Damit rückte die
bisherige unstabile Version zu testing unter dem Namen lenny auf.
Die Entwicklung der Debian-Distribution ist vollkommen offen und für jeder-
mann einsichtig. Das Projekt veröffentlicht drei Suiten der Distribution:
• stable: eine stabile und abgeschlossene Version, die in unregelmäßigen Zeitab-
ständen von einer neuen stabilen Version abgelöst wird, Bevor eine neue stabile
Version herausgegeben wird, sind alle schwerwiegenden Fehler beseitigt. Zu ei-
ner stabilen Version kommt nichts Neues mehr hinzu; es werden nur bekannt
werdende Mängel (Sicherheitslücken) beseitigt. Manche Benutzer halten stable
für veraltet, aber Stabilität hat ihren Preis.
• testing: eine noch nicht stabile vollständige Version, an der die Entwickler des
Projekts arbeiten und die sich deswegen ständig ändert, für Arbeitsplätze geeig-
14 1 Was ist Debian GNU/Linux?

net, von denen nicht ein ganzes Netz abhängt. Immerhin haben die Pakete dieser
Suite schon eine Reihe von Prüfungen bestanden.
• unstable: eine experimentelle, vollständige Version, bei der ein Benutzer mit
schwerwiegenden Fehlern und raschen Änderungen rechnen muss und die da-
her keinesfalls in der Produktion eingesetzt werden soll. Wer sich bei Problemen
selbst zu helfen weiß, kann unstable fahren.
Darüber hinaus werden die letzte Revision der jüngstvergangenen Version unter
der Bezeichnung oldstable sowie noch ältere Versionen in einem Archiv (http:
//archive.debian.org/) verfügbar gehalten, aber nicht mehr gepflegt. Ar-
chivierte Versionen ändern sich nicht mehr, ihr Security Support ist beendet. Als
Vorstufe zu unstable taucht gelegentlich experimental auf, unvollständig und nur für
Experimente geeignet. Der Weg eines Debian-Programmpaketes führt von unstable
über testing nach stable und irgendwann in das Archiv.

Abb. 1.4: Schnappschuss aus dem Film Toy Story von Disney-Pixar: Lenny, das Fernglas,
nach dem Debian-testing (2007) benannt wurde

Fehler werden von Benutzern und Entwicklern in eine Datenbank eingegeben.


Der Inhalt dieser Datenbank kann von jedermann gelesen werden. Für die Sicher-
heit und Stabilität wesentliche Fehler werden laufend korrigiert. Wer seine Rechner
regelmäßig aktualisiert, braucht nicht auf die Veröffentlichung von Servicepaketen,
Patch Days oder dergleichen zu warten. Die gibt es bei Debian nicht. Wer mit ei-
ner stable-Suite arbeitet, sollte sein Debian GNU/Linux wöchentlich aktualisieren,
für testing ist tägliches Nachführen nicht übertrieben. Mit apt-get ist der Auf-
wand gering. Da der zeitliche Abstand zwischen zwei stabilen Versionen in die Jahre
1.3 Debian GNU/Linux 15

gehen kann – woody hielt sich drei Jahre – werden in kürzeren Abständen Point-
Releases (revisions) von stable herausgegeben, das sind Momentaufnahmen, auf die
man sich bei Neuinstallationen oder beim Brennen von CD/DVDs beziehen kann.
Das letzte Point-Release der Mitte 2005 abgelösten Version 3.0 mit Namen woody
trug die Nummer 6 und wird mithin als Version 3.0r6 bezeichnet. Nachfolger war die
Version 3.1 mit Namen sarge, Point-Release 0. Im Jahr 2007 löste die Version 4.0
mit Namen etch, bis dahin testing, die Version 3.1 (sarge) ab. Die instabile Versi-
on wird stets mit sid benannt und bekommt keine Nummer. Wenn aus testing stable
wird, rückt unstable zu testing auf und bekommt einen eigenen Namen, in diesem
Fall lenny, siehe Abbildung 1.4. Einige Monate vor dem Aufrücken einer testing-
Version nach stable wird sie eingefroren, es werden nur noch Fehler beseitigt, aber
keine Pakete mehr hinzugefügt. Die Codenamen stammen aus dem Film Toy Sto-
ry (1995) von Disney-Pixar (http://www.pixar.com/), der Firma, die auch A
bug’s life und Finding Nemo gezeichnet hat. Zu den Charakteren siehe die englische
Wikipedia unter dem Suchbegriff List of Toy Story characters.
Als Portierung oder Port wird die Anpassung einer Suite an eine Rechnerarchi-
tektur beziehungsweise eine Familie von Zentralprozessoren bezeichnet. Eine Über-
sicht findet sich auf http://www.debian.org/ports/. Der am weitesten
verbreitete Port bezieht sich auf den Prozessor Intel 80386 (x86, IA-32, i386) und
seine Abkömmlinge oder Nachbauten. Da jüngere Intel-Prozessoren wie 80486 oder
Pentium (80686) einige praktische Befehle mehr verstehen als der 80386, gibt es
Kerne, die auf die neueren Prozessoren hin optimiert sind. Der 80386-Port läuft aber
auch auf den jüngeren Prozessoren, reizt sie jedoch nicht aus. Ebenso gibt es für
AMD-Prozessoren optimierte Kerne.
Die Debian-Paketlisten sind, um Benutzern die Suche zu erleichtern, thematisch
in Abschnitte, Sektionen oder Kategorien unterteilt, wobei die Auswahl der The-
men oder die Zuordung eines Paketes mitunter diskutiert werden könnte. Immerhin
braucht sich so ein Benutzer, der sich einen Überblick über alle mit Email zusam-
menhängenden Pakete verschaffen will, nicht durch 18.000 Pakete hindurchzuwüh-
len, sondern nur durch 496. Die Sektionen sind:
• Administration Utilities Werkzeuge zur Systemverwaltung wie aptitude und
grub,
• Base Utilities vor allem Kerne,
• Communication Programs Werkzeuge zur Benutzung von Modems wie mgetty
und uucp,
• debian-installer udeb packages Werkzeuge zum Bau des Debian-Installers,
nichts für Normalverbraucher,
• Development Werkzeuge für Programmentwickler wie alex und gcc,
• Documentation Dokumentation, soweit nicht in Programmpaketen enthalten,
sowie Werkzeuge zum Lesen,
• Editors Texteditoren und Textprozessoren wie abiword, emacs, vim und Open-
Office,
• Electronics Werkzeuge für Elektrotechniker wie geda und klogic,
16 1 Was ist Debian GNU/Linux?

• Embedded software Software zum Einsatz auf Emdedded Systems wie match-
box und openwince,
• Games Spiele von Gnuchess bis tuxkart,
• GNOME GNOME-Software wie Evolution oder yelp,
• Graphics Grafikwerkzeuge wie gimp und xsane,
• Ham Radio Software für Funkamateure,
• Interpreters Übersetzer für interpretierte Programmiersprachen von AWK über
BASIC bis Tcl,
• KDE KDE-Software wie abakus und ktorrent,
• Library development Programmbibliotheken für Entwickler,
• Libraries spezielle Bibliotheken zur Ergänzung der Standardbibliotheken,
• Mail Alles, was mit Email zu tun hat, wie mutt und exim4,
• Mathematics mathematische Werkzeuge wie axiom und bc,
• Miscellaneous Vermischtes, was nirgendwoanders hinpasst, wie megahal und
med-tools,
• Network Server, Clients und Werkzeuge für das Netz wie cupsys, dnsmasq und
ntp, soweit nicht in anderen Sektionen untergebracht,
• Newsgroups Software für das Usenet wie cnews und tin,
• Old Libraries alte Bibliotheken, die möglicherweise von alten Anwendungen
noch gebraucht werden,
• Other OS’s and file systems Emulatoren wie dosemu und Werkzeuge für fremde
Dateisystemtypen wie mtools,
• Perl Alles, was mit der Programmiersprache Perl zu tun hat,
• Python Alles, was mit der Programmiersprache Python zu tun hat,
• Science wissenschaftliche Anwendungen wie cernlib und kstars,
• Shells Kommandointerpreter von der Bash bis zu zsh,
• Sound Werkzeuge zur Aufnahme, Bearbeitung und Wiedergabe von Schall von
ALSA bis xmms2,
• TeX das TEX-/LATEX-Satzsystem,
• Text Processing Werzeuge zum Bearbeiten, Formatieren und Drucken von Text
wie a2ps und ispell,
• Utilities Dienstprogramme verschiedener Art wie coreutils und gnupg,
• Virtual packages virtuelle Pakete, die andere Pakete einbinden, beispielsweise
mail-tranport-agent, das einen der MTAs wie Exim4 oder Postfix holt,
• Web Software Web-Server, -Clients und -Hilfsprogramme wie apache und ice-
weasel,
• X Window System software das X Window System mit Servern und Clients wie
xorg und xterm.
Ein Paket gehört immer nur einer Sektion an, auch wenn es vom Thema her in meh-
rere passen würde. Oft benutzt man die Suchfunktion der Debian-Webseite, ohne auf
die Sektion Wert zu legen.
Debian-Pakete werden ferner nach ihrer Dringlichkeit (priority) in fünf Klassen
eingeteilt:
• required notwendig zum Funktionieren eines Debian-Systems,
1.3 Debian GNU/Linux 17

• important wichtig, um mit einem Debian-System überhaupt arbeiten zu können,


• standard sinnvoll auf einem einfachen Debian-System ohne Grafik,
• optional wahlfrei, mit diesen Paketen kommt Freude auf,
• extra ebenfalls wahlfrei, aber oft in Konflikt zu Paketen aus den vorgenannten
Klassen stehend, sodass sich ein Verwalter entscheiden muss, welches Paket er
bevorzugt.
Weniger als die Pakete aus den Klassen standard und davor wird man nicht einrich-
ten.
Während die Sachverhalte der Entwicklung von Debian GNU/Linux klar sind,
hat sich die Bezeichnungsweise noch nicht stabilisiert. Die Begriffe Distribution,
Suite, Branch, Release, Revision, Version und Abteilung werden nicht einheitlich ver-
wendet; dazu kommen Fragen der Übersetzung und der Sprachgebrauch außerhalb
von Debian. Der Leser klammere sich nicht an die Wörter.
Gentoo (http://www.gentoo.org/) ist eine Distribution von GNU/Linux
oder FreeBSD, die nur Quellcode verteilt und vom Benutzer erwartet, dass er die
Binärdateien auf seinem Rechner erzeugt. Das ist ein interessanter Ansatz – viel-
leicht nicht für jedermann geeignet – der es ermöglicht, die Binärdateien optimal
an die jeweiligen Wünsche und die vorliegende Hardware anzupassen. Außerdem
lernt man viel dabei. Bei Debian sind Versuche in dieser Richtung, genannt Debian
From Scratch (DFS), auf http://people.debian.org/~jgoerzen/dfs/
html/ nachzulesen.
Die konservative Auslegung der Begriffe frei und stabil im Projekt wird gelegent-
lich als Nachteil angesehen, ist aber ein wesentliches Merkmal von Debian und trägt
zu seinem guten Ruf bei. Wer unbedingt neuere Software als in stable enthalten benö-
tigt, greift zu testing und kann damit in der Regel unbeschwert arbeiten. Seit Herbst
2005 nimmt testing ebenso wie stable am Sicherheits-Support von Debian teil. Si-
cherheitsmängel werden schnellstmöglich beseitigt. Einen Arbeitsplatzrechner, von
dem nicht weitere Rechner abhängen, kann man durchaus unter testing betreiben
– vielleicht nach einem halben Jahr Abwarten seit der Höherstufung. Für kritische
Server sollte man jedoch Stabilität über alles stellen. Auch sperrt sich Debian nicht
gegen den Einsatz unfreier Software, nur gehört sie nicht ins Projekt.
Debian GNU/Linux zählt zu den bedeutendsten Linux-Distributionen, und es
darf davon ausgegangen werden, dass Debian GNU/Linux – weltweit betrachtet –
die zweitgrößte Linux-Distribution ist. Im Vergleich zu anderen Distributionen bie-
tet Debian GNU/Linux die größte Anzahl von Softwarepaketen, Anfang 2007 rund
18.000. Unterstützt werden neben Intel-80386-kompatiblen PCs knapp ein Dutzend
weiterer Rechnerarchitekturen. Ferner unterstützt Debian GNU/Linux eine Vielzahl
menschlicher Sprachen, von Arabisch bis Ukrainisch.
Die ersten Zentralprozessoren – Anfang der 70er Jahre – verfügten über eine Bus-
breite von 4 Bits. Ihr Adress- und Zahlenbereich war auf 2 hoch 4 begrenzt. Heute
sind CPUs mit einer Busbreite von 32 Bits am weitesten verbreitet. Beim Prozessor-
hersteller Intel gehen sie auf den Typ 80386 von 1985 zurück, dessen Architektur
und Befehlssatz oft mit i386 bezeichnet wird, auch in den Debian-Paketlisten. Die
Nachfolger und Nachbauten sind schneller geworden, am Grundsätzlichen hat sich
18 1 Was ist Debian GNU/Linux?

aber nichts geändert. Erst mit der Intel Architecture 64 (IA-64, ia64) ist die Bus-
breite durchgängig auf 64 Bits erhöht und zugleich ein neuer Befehlssatz eingeführt
worden. Vorteile sind ein größerer Zahlen- und Speicheradressbereich sowie eine
schnellere Abarbeitung der Befehle. Die Software muss mitspielen, weshalb in den
Debian-Paketlisten ia64 von i386 getrennt ist. Prozessoren anderer Hersteller ver-
wenden teilweise schon länger Busse bis hin zu 128 Bits Breite, sind aber nicht so
verbreitet.
Debian GNU/Linux ist kostenlos über das Internet verfügbar. Weil das Herunter-
laden der Distribution für viele Benutzer mit Kosten verbunden ist, stellt das Debian-
Projekt Abbilddateien der Distribution bereit, die aus dem Internet heruntergeladen
und von Firmen zur Herstellung von CD/DVDs benutzt werden. CD/DVD-Sätze,
die aus den Abbilddateien des Debian-Projekts erstellt wurden, werden als offizi-
elle Debian-CD/DVDs bezeichnet (23 CDs). Daneben gibt es Anbieter, die selbst
Debian-CD/DVDs zusammenstellen. Solche CD/DVDs sind speziell auf bestimmte
Bedingungen angepasst oder enthalten zusätzliche Software, die das Debian-Projekt
mit den offiziellen CD/DVDs nicht verteilt.
Jede Distribution hat ihre Stärken und Schwächen. Kommerzielle Distributoren
bemühen sich um einfach zu benutzende oder ansprechend aussehende Installations-
programme. Dies sind Programmteile, die – vor allem von den Medien – bei Ver-
gleichen von Linux-Distributionen oft getestet werden und mit denen sich schnell
gute Testergebnisse erzielen lassen. Debian GNU/Linux wird von Anwendern für
Anwender gemacht. Die Einrichtung des Betriebssystems mit einem aufwendigen
grafischen Programm hat für die tägliche Arbeit jedoch eine geringe Bedeutung (was
nicht heißt, dass Debian GNU/Linux schwierig einzurichten ist). Deswegen steht bei
Debian GNU/Linux im Vordergrund, dass sicher und stabil mit dem System gearbei-
tet werden kann.
Aus Wettbewerbsgründen sind in kommerziellen Distributionen oft jüngere Ver-
sionen bekannter Programme enthalten. Diese werden gelegentlich in letzter Minu-
te in die Distribution aufgenommen, ohne vorher ausreichend getestet worden zu
sein. Auf der anderen Seite werden weniger bekannte, aber für den Betrieb ebenso
wichtige Programme von diesen Distributoren vernachlässigt, weil sich damit nicht
werben lässt. Debian ist nicht auf Marketing angewiesen und nimmt deshalb auf
solche Überlegungen keine Rücksicht. Hier stehen die Stabilität und Fehlerfreiheit
bei gleichmäßiger Aktualität aller Komponenten im Vordergrund. Dies macht sich
bei Aktualisierungen des Systems bemerkbar: Ein Debian-GNU/Linux-System kann
problemlos von einer auf die nächste Version der Distribution (sarge -> etch) aktua-
lisiert werden, ohne dass persönliche Anpassungen verloren gehen oder das System
neu gestartet werden muss. Debian-GNU/Linux-Systeme lassen sich über Jahre oh-
ne Unterbrechung betreiben, es sei denn der Betriebssystemkern muss ausgetauscht
werden – was schlecht im laufenden Betrieb erledigt werden kann – oder ein Hard-
wareproblem zwingt dazu, den Rechner herunterzufahren.
Falls Sie sich eingehend mit den Besonderheiten von Debian und den dahinter
stehenden organisatorischen Strukturen befassen wollen – also den Dingen, die De-
bian GNU/Linux von den übrigen GNU/Linux-Distributionen unterscheiden – erfah-
ren Sie bei M ARTIN F. K RAFFT auf 600 Seiten mehr zum Debian-System. Auf der
1.3 Debian GNU/Linux 19

anderen Seite schreibt er nichts über die Bash, das Common UNIX Printing System,
X11 oder Textverarbeitung. Diese Gebiete liegen außerhalb seines Themas.

1.3.2 Warum Debian GNU/Linux?

Vor nicht langer Zeit war der Begriff Linux nur Eingeweihten (Freaks, Gurus, Ge-
eks, Wizards, Nerds, Hackern . . . ) vertraut. Heute lesen wir Neuigkeiten über Linux
in der Tageszeitung und sehen Berichte im Fernsehen zu diesem Thema. Welche
Gründe sprechen für den Einsatz eines Linux-Betriebssystems? Und welche Gründe
sprechen dafür, gerade Debian GNU/Linux zu verwenden?
• Linux/UNIX ist das älteste der heute gebräuchlichen Betriebssysteme und aus-
gereift. Es war von Anbeginn auf Zusammenarbeit unterschiedlicher Hardware,
unterschiedlicher Software und zahlreicher Benutzer angelegt. Ein aktuelles Li-
nux/UNIX kann wesentlich mehr als ein UNIX von 1980, aber was ein Verwalter
damals gelernt hat, gilt auch heute noch. Es reicht nur nicht mehr aus.
• Stabilität GNU/Linux ist eines der stabilsten Betriebssysteme für PCs. Häufige
Abstürze sind mit GNU/Linux Vergangenheit. Debian GNU/Linux wird lange
Zeit öffentlich getestet, bevor es als stabil freigegeben wird. Es ist deswegen ein
besonders zuverlässiges und sicheres GNU/Linux-System.
• Geringe Hardwareanforderungen GNU/Linux benötigt für eine Aufgabe in
der Regel weniger Hardwareressourcen (CPU-Takt, Speicher) als andere Be-
triebssysteme. Das System ist modular aufgebaut. So braucht eine grafische
Oberfläche nur dort eingerichtet zu werden, wo sie auch benötigt wird.
• Mehrbenutzerfähigkeit GNU/Linux ermöglicht mehreren Benutzern, gleich-
zeitig mit dem System zu arbeiten. Dies beschränkt sich nicht auf den Einsatz
als Web-, Datei- oder Mailserver, sondern gilt auch für die Ausführung von Pro-
grammen. Das System lässt sich gut als Anwendungsserver einsetzen.
• Sicherheit Unter GNU/Linux lassen sich Daten wirkungsvoll vor dem Zugriff
durch Unbefugte schützen. Weil der Quellcode des Betriebssystems offen gelegt
ist, wird er von vielen Leuten geprüft; sicherheitsrelevante Fehler werden schnell
entdeckt und behoben.
• Kooperativität Debian GNU/Linux kann problemlos auf Rechnern eingerichtet
werden, auf denen sich bereits andere Betriebssysteme befinden oder nachträg-
lich hinzugefügt werden sollen. Zum Startzeitpunkt wird ausgewählt, welches
der Betriebssysteme gestartet werden soll.
• Benutzerfreundlichkeit Mit KDE und GNOME stehen zwei freie grafische Be-
nutzeroberflächen (Arbeitsumgebungen, Desktöppe) für GNU/Linux zur Verfü-
gung, mit denen das System ähnlich benutzt werden kann wie ein MS-Windows-
oder Macintosh-basiertes System.
• Freiheit Alle Teile von Debian GNU/Linux sind freie, offene Software. Sie sind
im Quellcode verfügbar, dürfen beliebig oft eingesetzt, angepasst, verändert und
weitergegeben werden, ohne Gebühren zu zahlen oder um Erlaubnis zu fragen.
Sie brauchen sich nicht mit komplizierten Lizenzvereinbarungen herumzuschla-
gen, mit irgendetwas einverstanden zu erklären, irgendwo registrieren zu lassen
20 1 Was ist Debian GNU/Linux?

oder irgendetwas zu aktivieren und bei Änderungen am Rechner erneut zu akti-


vieren. Sie hängen nicht auf Gedeih und Verderb von einem einzigen Hersteller
ab. Weil es in einigen Fällen unumgänglich ist, nicht-freie Software einzusetzen,
wird eine Reihe von nicht-freien Programmen vom Debian-Projekt als Dienst-
leistung ebenfalls für den Einsatz mit der Debian-Distribution vorbereitet. Diese
Software ist jedoch kein Teil der offiziellen Distribution und deutlich abgegrenzt.
• Preis GNU/Linux ist günstig erhältlich. Wer über eine Internetanbindung ver-
fügt, lädt Debian GNU/Linux aus dem Internet herunter und bezahlt außer den
Verbindungskosten nichts. Debian-DVDs kosten nur wenige Euro.
• Investitionssicherheit Weil Debian keine kommerziellen Interessen verfolgt,
werden wir nicht in kurzen Abständen gezwungen, Updates oder neue Pro-
grammversionen zu bezahlen und einzurichten. Zudem besteht keine Gefahr,
dass die Distribution eines Tages aufgrund fehlendes wirtschaftlichen Erfolges
eingestellt wird. Das Debian-Projekt kann nicht aufgekauft werden.
• Umfang Debian GNU/Linux bietet eine große Zahl an Softwarepaketen, die für
das System vorbereitet sind. Zur Zeit sind dies rund 18.000 Pakete. Mit der Soft-
ware lassen sich die meisten Aufgaben von der Büroanwendung über Server bis
hin zum Zahlenknacker in der Forschung abdecken.
• Kommerzielle Software Immer mehr Firmen setzen auf GNU/Linux. Die
Großen der IT-Branche wie IBM, Hewlett-Packard, SUN oder Oracle finanzieren
die Entwicklung von GNU/Linux mit und bieten Software für das Betriebssystem
an. Aber auch viele neue Linux-Firmen sind mit GNU und Linux gewachsen und
bieten angepasste Lösungen an.
• Unterstützung Bei Fragen zu Linux, GNU oder Debian sind zahlreiche kom-
petente Benutzer bereit zu antworten. In den meisten Städten gibt es Linux-
Benutzergruppen (Linux User Groups, LUGs), die sich auf Ihren Besuch freu-
en. Weiter gibt es im Internet eine Vielzahl von Foren, in denen alle möglichen
Linux-, GNU- und Debian-bezogenen Fragen diskutiert werden. Zusätzlich bie-
ten Unternehmen kommerziellen Linux-Support an. Schließlich steht im Netz
eine Unmenge an Dokumentation bereit. Nur wenig Software ist so ausführlich
dokumentiert wie Debian GNU/Linux.
• Flexibilität Die Distribution enthält für viele Aufgaben unterschiedliche, alterna-
tiv oder nebeneinander einsetzbare Programmpakete. Falls Sie von einer anderen
GNU/Linux-Distribution zu Debian GNU/Linux wechseln, werden Sie feststel-
len, dass die meisten Programme, die Sie von Ihrer alten Distribution kennen,
auch unter Debian GNU/Linux verfügbar sind.
• Modularität Debian GNU/Linux ist modular aufgebaut. Es braucht nicht erst
ein großes Basispaket eingerichtet zu werden; vielmehr kann jedes Paket einzeln
ausgewählt werden10 , wodurch weniger Festplattenplatz benötigt wird. Pakete
lassen sich jederzeit nachrüsten oder auch wieder hinauswerfen.
• Rechnerarchitekturen Debian GNU/Linux unterstützt knapp ein Dutzend
Rechnerarchitekturen. Neben dem klassischen Intel-80386-kompatiblen PC
(i386, IA-64) werden Amiga, Atari, Apple-Macintosh (sowohl m68000- als auch

10
Einige zentrale Pakete müssen immer eingerichtet sein.
1.3 Debian GNU/Linux 21

PowerPC-Prozessoren), Hewlett-Packard (hppa), SUN-Workstation (sparc) und


weitere unterstützt. Debian GNU/Linux kennen zu lernen und zu verwenden
bedeutet, flexibel zu bleiben.
• Softwaremanagement Das Paketverwaltungssystem von Debian gehört zu den
besten. Es erlaubt den nahtlosen Übergang von einer Debian-Version zur näch-
sten und kann Software direkt aus dem Internet einrichten. Vorhandene Anpas-
sungen werden beibehalten. Es kennt alle Beziehungen verschiedener Software-
bestandteile untereinander und verhindert, dass unbenutzbare Programme einge-
richtet werden oder das System durch die Entfernung eines Paketes lahm gelegt
wird. Während der Einrichtung von Software ist ein Neustart des Systems selten
notwendig, sodass die Ausfallzeiten des Rechners auch während der Aktuali-
sierung minimal sind. Das Einrichtungsprogramm (Installer) steht in 58 Spra-
chen von Albanisch bis Wolof zur Verfügung. Wer schon einmal Linux/UNIX-
Software als Tarball aus dem Netz heruntergeladen und von Hand übersetzt
und eingerichtet hat, ist für die vorbereiteten Debian-Pakete und Werkzeuge wie
apt-get dankbar.
Wir räumen ein, dass es einige auf dem Markt führende Softwareprodukte gibt, die
nicht für GNU/Linux verfügbar sind, unabhängig von Kosten und Lizenzen. Mit der
zunehmenden Bedeutung von GNU/Linux kann sich das bessern.
Linux/UNIX gilt als schwierig. Auf die Benutzung trifft das nicht zu. Der Ver-
walter hat allerdings einigen Stoff zu lernen. Auf Grund unserer Erfahrungen – auch
mit anderen Betriebssystemen auf kleinen und großen Rechnern – sind wir der Mei-
nung, dass Linux/UNIX für viele Aufgaben die einfachste Lösung bietet, zudem an-
passungsfähig und gut dokumentiert ist. Probleme sind am ehesten beim X Window
System (X11, Grafik), bei Email und beim Drucken in einem heterogenen Netz zu
erwarten. Das liegt daran, dass bei diesen Aufgaben viele verschiedenartige Kom-
ponenten zusammenarbeiten müssen. Im Übrigen gilt für Linux/UNIX dasselbe wie
für das Kuchenbacken: Wer es noch nie versucht hat, wird am Anfang mit Schwie-
rigkeiten zu kämpfen haben, aber jeder kann es so weit bringen, dass für den Alltag
brauchbare Ergebnisse herauskommen.
Der Umfang unserer beiden Debian-Bücher – und anderer – soll Sie nicht ab-
schrecken. Es ist nicht erforderlich, alles im Kopf zu haben, schon gar nicht die
zahllosen Einzelheiten. Ein paar Konzepte sollte man verstanden haben und vor al-
lem wissen, wie und wo man bei Fragen Hilfe bekommt. Deshalb nennen wir unsere
Quellen, auch wenn sich die Hyperlinks stellenweise häufen. Wer sich eingehend mit
einem Thema befassen und den aktuellen Stand erfahren will, kommt um das Web
nicht herum.

1.3.3 Auf Debian aufsetzende Distributionen

Wenn Debian GNU/Linux das Gelbe vom Ei ist, warum finden sich dann Distribu-
tionen, die auf Debian-Paketen aufsetzen? Was machen die Derivate besser? Schau-
en wir uns einige an. Knoppix (http://www.knopper.net/knoppix/) von
K LAUS K NOPPER ist ein Live System, das ohne weitere Einrichtung unmittelbar
22 1 Was ist Debian GNU/Linux?

von CD oder DVD gestartet werden kann, vorausgesetzt der Rechner beherrscht das
Booten von CD/DVD. Nicht zu alte PCs bieten im BIOS die Möglichkeit, von ver-
schiedenen Medien (Floppy, Festplatte, CD, SCSI) zu starten und die Rangfolge der
Medien vorzugeben. Unter CD ist dabei immer ein CD- oder DVD-Laufwerk mit
IDE/ATAPI-Schnittstelle zu verstehen, nicht ein SCSI-Laufwerk. Zum Booten von
CD/DVD ist dessen Laufwerk an die erste Stelle zu setzen. Neuere SCSI-Adapter er-
lauben, in ihrem BIOS (nicht im System-BIOS) die SCSI-Adresse einzustellen, von
der gebootet werden soll. Bei älteren SCSI-Adaptern muss das Boot-Gerät – meist
die erste Festplatte – die SCSI-Adresse 0 tragen, vereinzelt (Hewlett-Packard) auch
6. Notfalls lässt sich von der CD/DVD das Image (bitgenaue Kopie) einer Boot-
Floppy auf eine Floppy übertragen, mit dieser booten und dann von der Knoppix-
CD/DVD arbeiten.

Abb. 1.5: Screenshot einer von DVD auf einem PC laufenden Knoppix-Distribution, hier mit
dem KDE-Dateimanager Konqueror auf dem Schirm

Knoppix ist als Beilage zu einem Computer-Magazin bekannt geworden, aber


auch unabhängig davon zu haben und entwickelt sich lebhaft weiter. Gegenwärtig
sind eine abgespeckte Ausführung auf CD und eine Maxi-Ausführung auf DVD er-
hältlich. Eine Knoppix-Scheibe eignet sich ausgezeichnet als Rettungssystem für ab-
gestürzte PCs, gleich unter welchem Betriebssystem. Mittlerweile gibt es fremdspra-
chige Ausgaben von Knoppix – beispielsweise Kaella unter http://kaella.
linux-azur.org/ – Varianten und Derivate. Abbildung 1.5 zeigt einen Screen-
1.3 Debian GNU/Linux 23

shot eines Knoppix, das von DVD ohne zusätzliche Konfiguration auf einem IBM-
NetVista-PC läuft. Knoppix hat bei Benutzern anderer Betriebssysteme viele Freun-
de für GNU/Linux geworben, weil man unverbindlich von der CD/DVD booten und
mit dem System arbeiten kann, ohne bleibende Änderungen auf der Festplatte vor-
nehmen zu müssen. Das Arbeiten von CD/DVD geht nicht so flott wie von Platte,
aber für erste Schritte reicht die Geschwindigkeit allemal.
Da ein Live-System nicht auf der Festplatte des Rechners eingerichtet zu wer-
den braucht, eignet es sich hervorragend zum Ausprobieren und Herumspielen, für
Vorführungen und zum Behandeln kranker Systeme. Beispielsweise lässt sich ein
von Viren befallener Rechner mit einem Live-System betreiben, um zu retten, was
zu retten ist. Dabei braucht man nicht zu befürchten, dass das Live System ange-
steckt wird, weil eine CD/DVD nur gelesen werden kann. Im Debian-Projekt selbst
sind ebenfalls Bemühungen im Gange, ein Live System zu erstellen, siehe http:
//live.debian.net/ und http://wiki.debian.org/DebianLive/.
Ubuntu (http://www.ubuntu.com/) ist ein Debian-Derivat, das einfach
einzurichten ist und halbjährlich in einem neuen Release erscheint, während es bei
Debian schon einmal Jahre dauern kann. Auch von Ubuntu gibt es Live-CDs so-
wie zwei Ableger namens Kubuntu (http://www.kubuntu.org/) mit Schwer-
punkt KDE sowie Edubuntu (http://www.edubuntu.org/) mit einer Aus-
wahl pädagogischer Software.
Skolelinux aus Norwegen (http://www.skolelinux.org/, http://
www.skolelinux.de/) ist eine auf Debian GNU/Linux basierende Plattform für
freie Software in der Bildung. Sie ermöglicht die Einrichtung eines lokalen Netzes in
einer Schule. Zu Skolelinux gehören die Liste http://lists.debian.org/
debian-edu/ und der Wiki http://wiki.debian.org/DebianEdu. In
den Debian-Paketlisten finden sich zwei Dutzend Metapakete, großenteils aus der
Abteilung misc, deren Name mit education beginnt. Ein Metapaket enthält nur Ver-
weise auf normale Pakete, sodass man mit der Einrichtung eines Metapaketes meh-
rere thematisch zusammengehörende Pakete auf den Rechner holt.
Debian-Med ist eine angepasste Debian-Distribution (Custom Debian Distribu-
tion, CDD). Sie will ein freies System für alle Aufgaben im medizinischen Bereich
werden und ist unter http://www.debian.org/devel/debian-med/ zu
Hause. Das GNU-Projekt GNUmed (http://www.gnumed.org/) ist Bestand-
teil von Debian-Med. In den Debian-Paketlisten gibt es einige Pakete, deren Name
mit med beginnt. Beim Suchen nach der Zeichenkette med kommt viel multimediales
Zeug mit. Das Projekt scheint noch nicht so weit gediehen zu sein wie DebianEdu.
An Kinder von 1 bis 99 wendet sich das Projekt Debian Junior, ebenfalls eine an-
gepasste Debian-Distribution. Es ist unter http://www.debian.org/devel/
debian-jr/ zu finden. In den Paketlisten finden sich knapp zwei Dutzend Meta-
pakete, deren Name mit junior beginnt. Die Pakete sind auf einem laufenden Debian-
System einzurichten, stellen also keine vollständige Distribution dar. Außerhalb von
Debian bemühen sich weitere Projekte um freie Software in Kinderzimmer und
Schule, beispielsweise die Open Source Education Foundation (OSEF, http://
www.osef.org/), Schoolforge (http://www.schoolforge.net/) oder
Tux4Kids (http://www.tux4kids.net/).
24 1 Was ist Debian GNU/Linux?

Das Projekt Agnula (A GNU/Linux Audio Distribution, http://www.


agnula.org/) wurde 2002 in der EU gestartet, um ein besonders für Multimedia-
Anwendungen geeignetes GNU/Linux-System zu schaffen, das sich leicht ein-
richten lässt. Geht man von einem allgemeinen GNU/Linux-System aus, hat man
gerade bei dieser Ausrichtung einige Hürden zu überwinden. Die Debian-Variante
von Agnula nennt sich DeMuDi (Debian Multimedia Distribution) und ist auf
http://demudi.agnula.org/ beheimatet.
Kanotix (http://kanotix.com/) basiert auf Debian Sid, also der neuesten,
weitgehend ungetesteten Version, und ist damit besonders für Benutzer geeignet, die
auf neueste Software angewiesen sind, beispielsweise weil sie mit Hardware arbei-
ten, die erst seit kurzem auf dem Markt ist.
Linspire (http://www.linspire.com/) ist ein ursprünglich auf Debian
GNU/Linux aufbauendes, teilkommerzielles Betriebssystem, das versucht, dem Be-
triebssystem eines Fensterherstellers ähnlich zu sehen und ebenso intuitiv benutzbar
zu sein. Das Produkt wird kontrovers diskutiert, aber man darf nicht vergessen, dass
frei im Sinne von GNU und Debian nicht kostenfrei einschließt. Sein Hersteller un-
terstützt einige Open Source Projekte.
LiMux (http://www.muenchen.de/linux/) ist ein seit 2004 laufendes
Projekt der Stadtverwaltung München mit dem Ziel der Migration (Übergang) zu
freier Software. Die Lösung beruht weitgehend auf Debian GNU/Linux. Die Umstel-
lung soll sich während des laufenden Betriebes über vier Jahre erstrecken. Ähnlich
wie München stellt auch die Stadt Wien weich auf freie Software um, und zwar aus-
drücklich auf Debian GNU/Linux. Das Projekt WIENUX (http://www.wien.
gov.at/ma14/wienux.html) läuft seit Anfang 2005 und stellt seine Software
im Web bereit. Auf der Webseite wird davon abgeraten, WIENUX privat einzusetzen,
da es an die Bedürfnisse der Verwaltung einer Großstadt angepasst sei. Auch wer an
der Software kein unmittelbares Interesse hat, kann aus dem Migrationsvorgang ler-
nen, wie man einen großen Betrieb ohne Unterbrechung auf freie Software umstellt.
Der deutsche Bundestag hat im 2003 begonnenen und 2005 abgeschlossenen Projekt
MigOS seine Server auf GNU/Linux mit Samba und Open LDAP umgestellt, ist also
nicht so weit gegangen wie die beiden Stadtverwaltungen, die auch die Arbeitsplätze
nach und nach auf GNU/Linux umstellen. Die französische Nationalversammlung
stellt ganz auf offene Software um.
Das waren längst nicht alle Debian-Derivate. Auf der Webseite http://www.
debianhelp.co.uk/debian.htm werden 146 auf Debian GNU/Linux beru-
hende Derivate aufgelistet. Es gibt auch kommerzielle Derivate wie den Univention
Corporate Server (http://www.univention.de/) aus Bremen oder Progeny
Debian von Progeny Linux Systems (http://www.progeny.com/), der Firma
von I AN M URDOCK. Die meisten Derivate haben ihre Berechtigung, da sie beson-
dere Ziele verfolgen, die das allgemein angelegte Debian-Projekt nicht in Angriff
nehmen kann oder will.
Teil I

Grundlagen
2
Linux/UNIX

Das Kapitel vermittelt Allgemeinkenntnisse zu Linux/UNIX, die Voraussetzung für


alle weiteren Arbeiten sind. Erfahrene Linux/UNIX-Benutzer beschränken sich auf
Nachschlagen bei Bedarf.

2.1 Anmelden
Linux/UNIX ist ein Mehrbenutzersystem. Nachdem der Rechner eingeschaltet und
hochgefahren ist (sein Betriebssystem geladen/gebootet/gestartet hat), ist der erste
Schritt jeder Sitzung E: session, F: session, connexion, sich am System anzumelden
(einzuloggen)1 . Voraussetzung für den Erfolg ist ein Konto (Benutzerkonto) auf der
Maschine. Dies verlangt einerseits der Schutz vor Unbefugten, andererseits muss das
System wissen, wer gerade eine Aktion ausführt, um beispielsweise Dateien immer
den richtigen Benutzern zuzuordnen.
Bei Ihrem eigenen Rechner haben Sie dazu mindestens zwei Möglichkeiten. Ent-
weder melden Sie sich als Systemverwalter an oder als gewöhnlicher Benutzer. Der
Benutzername des Systemverwalters lautet unter Linux/UNIX üblicherweise root,
die Namen aller anderen Benutzer werden vom Systemverwalter frei vergeben. Der
Name root ist nicht zwingend, sondern nur die zugeordnete Benutzernummer (user
ID, UID) Null. Es wäre aber hirnrissig, einen anderen Namen für den Verwalter
auszusuchen, und würde zur Sicherheit nichts beitragen. Für die weiteren Benutzer
nimmt man in kleinen Netzen oft die Vornamen. Bei großen Benutzerzahlen bietet
sich eine Kombination von Buchstaben aus Vor- und Nachnamen an. Beispielswei-
se hat sich auf Maschinen mit mehreren hundert Benutzern eine Kombination aus
den ersten zwei Buchstaben des Vornamens, den ersten vier des Nachnamens und
dann einer Ziffer bewährt. Besteht der Nachname nur aus zwei Buchstaben, nimmt
man vier aus dem Vornamen. Mit der Ziffer lassen sich mehrere Konten desselben
Benutzers unterscheiden. Aber die Wahl steht jedem Verwalter frei.
1
Mancherorts – zum Beispiel bei Ebay – wird unter Anmelden das Beantragen eines Be-
nutzerkontos verstanden, unter Einloggen das Öffnen einer Sitzung. Der Sprachgebrauch ist
nicht einheitlich.
28 2 Linux/UNIX

Abb. 2.1: Screenshot eines grafischen Anmelde-Bildschirms

Der Systemverwalter hat das uneingeschränkte Recht, jedwede Veränderung am


System vorzunehmen; er kann viel zerstören. Normale Benutzer können hingegen
nur ihre eigenen Dateien ändern und haben auch sonst nur begrenzte Rechte. Man
sollte sich deswegen für seine normale Arbeit immer als gewöhnlicher Benutzer an-
melden, um sich vor eigenen Fehlern zu schützen. Noch wichtiger ist, dass dann auch
die Programme, die Sie aufrufen, nur mit Ihren Rechten als Normalbenutzer ausge-
führt werden. Ein Programm, das versucht, wichtige Systemdateien zu löschen, kann
dies nur tun, wenn Sie es als Root ausführen. Die Trennung der Verwaltungsarbeit
von der Arbeit als gewöhnlicher Benutzer ist wesentlich für die Sicherheit eines Sys-
tems. Selbst die Verwaltungsarbeit sollte so weit wie möglich eingeschränkt werden.
Das Einrichten eines Webservers oder einer Datenbank muss zwar der Systemver-
walter beginnen, den laufenden Betrieb jedoch nicht weiterführen. Dafür sind Benut-
zer wie wwwadm oder dbadm einzurichten. Der Systemverwalter soll auch möglichst
vor Ort arbeiten, nicht über das Netz.
Sobald das System hochgefahren ist, erscheint die Aufforderung, sich anzumel-
den (Login:), siehe Abbildung 2.1. Das Aussehen des Anmeldebildschirms ist
konfigurierbar, kann daher von der Abbildung abweichen. Geben Sie Ihren Benut-
zernamen ein, den Sie vom Systemverwalter bekommen haben, achten Sie dabei auf
Groß- und Kleinschreibung, und bestätigen Sie mittels der Taste <cr> (Enter, Re-
turn, Amen). Nun geben Sie Ihr Passwort ein. Ihre Eingabe wird nicht angezeigt.
Falls Sie sich vertippen, ziehen Sie den Vorgang bis zum Ende durch und begin-
nen von vorn. Nach Eingabe von Name und Passwort vergleicht das System die
2.1 Anmelden 29

eingegebenen mit den gespeicherten Werten. Falls der Benutzer unbekannt ist oder
Benutzername und Passwort nicht zusammengehören, erscheint die Fehlermeldung:
Login incorrect
oder Ähnliches. Sie können dann nach einer kurzen Pause erneut versuchen sich
anzumelden. Ein System kann nach jedem Fehlversuch die Pause verlängern und
die Anzahl der Fehlversuche begrenzen. Nach Überschreiten der Grenze wird das
Benutzerkonto gesperrt (nicht gelöscht), und der Verwalter ist gefragt.
Der Benutzername ist so vertraulich wie eine Telefonnummer, die im Telefon-
buch steht, also gar nicht. Das Passwort (Kennwort, E: password, F: mot de passe)
dagegen ist der Haustürschlüssel zum System, das Passwort von Root sogar der Ge-
neralschlüssel. Einige, ziemlich ernst zu nehmende Hinweise:
• Das Passwort soll nicht zu kurz sein, das heißt wenigstens acht Zeichen umfas-
sen.
• Es darf nicht zu einfach sein:
– keine Zeichenkette, die offensichtlich mit dem Benutzer zusammenhängt
wie Vorname, Nachname, Benutzername, Geburtstag, Telefonnummer, Au-
tokennzeichen,
– überhaupt kein Vorname,
– keine Folge gleicher Zeichen,
– keine Folge nebeneinander liegender Tasten auf der Tastatur,
– keine Begriffe wie Debian, Linux, UNIX, Server, Passwort, admin, guest,
info,
– kein Wort aus einem Wörterbuch, auch nicht rückwärts gelesen.
• Es soll den ASCII-Zeichensatz voll ausnutzen (kleine und große Buchstaben,
Ziffern, Satzzeichen, jedoch keine Steuerzeichen wie <esc> oder ctrl). Auch
von dem noch jungen Euro-Zeichen wird abgeraten (ist kein ASCII).
• Bei einer Änderung soll sich das neue von dem alten Passwort deutlich unter-
scheiden.
• Vorgegebene Passwörter (factory defaults) bei der ersten Inbetriebnahme erset-
zen.
• Passwörter regelmäßig ändern, nicht wöchentlich, aber auch nicht erst nach zehn
Jahren.
• Passwörter nicht ausleihen.
• Passwörter niemals unverschlüsselt über das Netz schicken.
• Passwörter nicht im Klartext in Dateien ablegen. Das ist manchmal unvermeid-
bar, leider, aber beim Root-Passwort gibt es kein Erbarmen.
• Ein Passwort soll nur im Kopf und schriftlich an einer sicheren Stelle gespeichert
werden, nicht auf einem Zettel unter dem Bildschirmfuß. Passwort-Manager
kann man verwenden – es geht heute fast nicht mehr ohne – aber nicht für das
Root-Passwort.
Gehen wir von 80 verwendbaren Zeichen und einer Passwortlänge von 8 Zeichen
aus, ergeben sich 80 hoch 8 Möglichkeiten, das sind rund 1,6 mal 10 hoch 15 oder
1,6 Billiarden. Das ist eine große Zahl, aber moderne Rechner können in kurzer Zeit
30 2 Linux/UNIX

riesige Mengen von Passwörtern durchprobieren. Zudem lässt sich die Aufgabe par-
allelisieren. Verkleinert man den Zeichenvorrat oder verkürzt das Passwort, kommt
man schnell in Bereiche, die einen Rechner nur noch für Minuten beschäftigen.
Ist man sowohl Verwalter als auch gewöhnlicher Benutzer, so gehören zu bei-
den Konten unbedingt verschiedene Passwörter. Ein Rezept: Man nehme ein kurzes
zweisilbiges Wort, zum Beispiel einen Blumennamen (nelke). In die Silbenfuge füge
man zwei Ziffern und ein Satzzeichen ein (nel7?2ke). Dann schreibe man eine der
Silben mit Großbuchstaben (nel7?2KE). Manche Systeme beschränken die Länge
des Passwortes auf acht Zeichen; das Beispiel wäre geeignet, merkbar und schwie-
rig zu knacken. Andere Systeme verlangen mindestens sechzehn Zeichen. Lange
Passwörter werden auch als Passphrase bezeichnet. Gelegentlich wird empfohlen,
Passwörter regelmäßig zu ändern. Der Vorschlag ist nicht falsch. Wenn das Leck je-
doch eine Datei ist, die das Passwort im Klartext speichert, hilft das Ändern nichts.
Dasselbe gilt für Netzverbindungen, die Passwörter im Klartext übertragen.
Ein Bewohner des Internets braucht für viele Dienste ein Passwort. Diese sollen
sich unterscheiden. Beispielsweise soll man zum Einkaufen online nicht sein Sy-
stempasswort verwenden. Hierzu überlegt man sich eine Methode, um aus einem
Grundpasswort weitere Passwörter abzuleiten. Ferner bieten Passwort-Manager eine
Hilfe, indem sie sich für jeden Dienst das Passwort merken und bei Bedarf einsetzen.
Das ist bequem, führt aber dazu, dass man sich keine Mühe mehr gibt, die Passwörter
im Hirn abzulegen. Bei Pannen oder beim Arbeiten auf fremden Rechnern (Internet-
Cafés) steht man dann hilflos da.
Beim Anmelden wird das eingegebene Passwort verschlüsselt und mit dem ge-
speicherten verschlüsselten Passwort verglichen. Es wird also nichts entschlüsselt.
Auch der Verwalter besitzt keine Werkzeuge zum Entschlüsseln. Werden beim An-
legen des Passwortes und beim Anmelden unterschiedliche Algorithmen zum Ver-
schlüsseln verwendet, kann die Anmeldung nicht zum Erfolg führen. Das kommt in
Netzen aus unterschiedlichen Rechnern vor.
Vorsicht ist geboten, wenn Passwörter über das Netz gehen. Werden sie in Klar-
text übertragen, können sie mit geringem Aufwand mitgelesen werden, ohne dass
der Benutzer etwas davon merkt. Besonders kritisch sind drahtlose Netze (Wireless
Local Area Network, WLAN). Versuche bestätigen immer wieder, dass vertrauliche
Daten infolge Unwissenheit, Sorglosigkeit oder Bequemlichkeit ihrer Besitzer leicht
in falsche Hände geraten können.

2.2 Kommandozeile

Nach erfolgreicher Anmeldung hängen die nächsten Schritte davon ab, ob das Sys-
tem eine Textkonsole oder eine grafische Benutzeroberfläche startet. Eine einfache
Textkonsole erscheint unverzüglich auf dem Bildschirm und stellt den klassischen,
schnellen und zuverlässigen Weg dar, Kommandos in den Rechner einzugeben. Die
Textkonsole wird auch Kommandozeile oder Command Line Interface (CLI) ge-
nannt. Sie wird heute noch auf Servern verwendet, die keinen höheren Aufwand
2.2 Kommandozeile 31

benötigen, bei Problemen mit der Grafik, wenn der Rechner nur noch im Recovery-
Modus bootet, und beim Arbeiten über das Netz auf einem fernen Rechner (telnet,
slogin). Einen Überblick über die Werkzeuge für die Kommandozeile vermittelt
der Führer GNU/Linux Command-Line Tools Summary (2006) von G ARETH A N -
DERSON bei The Linux Documentation Project (TLDP). Dort liegt auch das Text-
Terminal-HOWTO (2006) von DAVID S. L AWYER. Eine Liste aller Linux/UNIX-
Kommandos kann es nicht geben, weil deren Menge nicht bestimmbar ist. Eine
Pflichtmenge treffen wir auf jeder Maschine an, der Rest ist Kür und auf jeder Ma-
schine anders.
Auf einem modernen Arbeitsplatzrechner erscheint praktisch immer ein grafi-
scher Arbeitsplatz (Desktop) statt der Textkonsole. Sein Aufbau erfordert eine ge-
wisse Zeit. Durch Anklicken der Menüpunkte Anwendungen -> Systemwerkzeuge
-> Terminal oder Anwendungen -> Debian -> Anwendungen -> Shells -> Bash oder
Anwendungen -> Debian -> X-Shells -> Gnome Terminal oder Anwendungen ->
Debian -> X-Shells -> Konsole oder eines Icons (Bildchens), das wie ein Bildschirm
aussieht, rufen wir ein Fenster auf den Desktop, das eine Textkonsole nachahmt.
Der Fortschritt gegenüber früher besteht darin, dass wir auf einem Desktop oder
Bildschirm mehrere dieser Fenster öffnen können (was nur auf einem ausreichend
großen Bildschirm zweckmäßig ist). Hinter der Textkonsole steht eine Shell, auf
Linux-Rechnern meist die Bash. Wir lernen sie noch ausgiebig kennen.
Das Fenster besitzt eine Garnierung oder Dekoration in Form von Kopfleiste,
Seitenleisten und Fußleiste, die uns jetzt nicht interessiert. In der linken oberen Ecke
der inneren Fensterfläche tauchen einige Zeichen folgender Art auf:
joe@debian:~$
Da die Zeile konfigurierbar ist, kann sie bei Ihnen anders aussehen. Die Zeichenkette
wird (System-)Prompt (E: prompt, F: signe d’invite, symbol d’accueil) genannt, auch
Eingabeaufforderung, Systemanfrage oder Bereitzeichen. Sie leitet eine Kommando-
zeile ein. Als erste Angabe enthält sie den Benutzernamen, um Identitätskrisen vor-
zubeugen. Nach einem Klammeraffen folgt der Rechnername, damit der Benutzer
weiß, wo er sich befindet. Wenn Sie über das Netz arbeiten, ist das hilfreich. Dann
folgen ein Doppelpunkt ohne tiefere Bedeutung, die Angabe des Arbeitsverzeichnis-
ses – hier eine Tilde für das Home-Verzeichnis – ein Dollarzeichen und schließlich
ein Leerzeichen.
Wenn Sie jetzt Text eintippen, erscheint er hinter dem Prompt in derselben Zei-
le. Auf der jeweils aktuellen Position, auf der das nächste eingegebene Zeichen
erscheint, blinkt eine Marke, die als Cursor oder Einfügemarke bezeichnet wird.
Schließen Sie die Zeile, die sich über mehrere Bildschirmbreiten erstrecken darf,
mit der Taste <cr> (Wagenrücklauf, E: carriage return, F: retour chariot) logisch ab,
wird sie an den Kommandointerpreter geschickt, der in der Linux/UNIX-Welt Shell
genannt wird. Die Bezeichnung Wagenrücklauf stammt aus der Zeit der mechani-
schen Schreibmaschinen. Was die Shell mit der Eingabe anstellt, erfahren Sie in Ab-
schnitt 2.7 Kommandointerpreter (Bash) ab Seite 46. Geben Sie folgende harmlosen
Kommandos ein und schicken Sie sie jeweils mittels <cr> ab:
joe@debian:~$ pwd
32 2 Linux/UNIX

joe@debian:~$ ls
joe@debian:~$ ls -l
joe@debian:~$ ls -l /bin
joe@debian:~$ date
joe@debian:~$ ddate
joe@debian:~$ id
Sie dürfen unbesorgt auch Unsinn eingeben:
joe@debian:~$ Karlsruhe
Die Shell ist nicht leicht aus der Ruhe zu bringen und bemerkt zu obiger, unsinniger
Eingabe nur, dass sie das Kommando nicht gefunden hat, und tut weiter nichts.
An dieser Stelle erscheint es angebracht, sich einige Unterschiede in den Be-
zeichnungen von Kommandos oder Programmen zu vergegenwärtigen. auch im Hin-
blick auf das noch zu erläuternde Debian-Paketsystem. Zu unterscheiden ist zwi-
schen:
• dem Programmnamen, beispielsweise Bash oder The GIMP, nur bei großen Pro-
grammen gebräuchlich,
• dem Debian-Paketnamen, hier bash oder gimp, wobei zu einem Programm oft
mehrere Pakete gehören, beispielsweise noch bash-doc oder gimp-help-de,
• dem Namen der Debian-Paketdatei wie gimp_2.2.6-1_i386.deb oder
bash_2.05b-26_i386.deb,
• den Namen der in einem Paket enthaltenen Dateien, deren Anzahl in die Hunder-
te gehen kann,
• dem Programmaufruf, hier bash oder gimp.
Wir versuchen deutlich auszudrücken, wovon wir reden, gebrauchen aber Pro-
grammname, Programmaufruf und Kommando nebeneinander.
Ihre Eingabe in die Kommandozeile können Sie – bevor sie mit <cr> abge-
schickt ist – bearbeiten (editieren). Mit den Tastenkombinationen <ctrl>+<b>
oder <ctrl>+<f> bewegen Sie den Cursor nach links (backward) oder rechts (for-
ward). Alternativ lassen sich dazu die Pfeiltasten (Cursortasten) <<-> (Pfeil nach
links) und <->> (Pfeil nach rechts) benutzen. Um an den Anfang des Textes zu sprin-
gen, benutzen Sie die Tastenkombination <ctrl>+<a> oder die Taste <pos1>
bzw. <home>. Analog verwenden Sie die Tasten <ctrl>+<e> oder <ende> bzw.
<end>, um an das Ende des Textes zu springen.
Die Bash läuft als Vorgabe im Einfügemodus. Wenn sich der Cursor im Text
befindet und ein neues Zeichen eingeben wird, dann wird dieses vor dem Cursor ein-
gefügt und der rechts davon stehende Text um eine Position nach rechts verschoben.
Sie löschen Text, indem Sie die Tastenkombination <ctrl>+<d> oder die Taste
<entf> (Entfernen) bzw. <del> (delete) verwenden. Dann wird das Zeichen auf
der Cursorposition gelöscht. Wenn Sie das Zeichen links vom Cursor löschen wollen,
2.2 Kommandozeile 33

benutzen Sie die Taste <backspace>, manchmal nur mit einem Pfeil nach links
bezeichnet, in der rechten oberen Ecke des Hauptfeldes der Tastatur. Spielen Sie die
Möglichkeiten mit einem längeren Kommando durch:
joe@debian:~$ hostname
Eine Übersicht über die Sondertasten einer Rechnertastatur finden Sie im Anhang
auf Seite 1060.
Naheliegenderweise wird in eine Kommandozeile ein Kommando eingegeben,
wie wir es eben gemacht haben. Allgemein besteht ein Kommando unter Li-
nux/UNIX aus mehreren, durch Zwischenraum (Leertaste) getrennten Teilen:
joe@debian:~$ kommando optionen argumente
Das Kommando ist ein einzelnes Wort, meist klein geschrieben. Eine der seltenen
Ausnahmen ist das Kommando who am I, das aus drei Wörtern besteht, die aber
auch als whoami zusammengefasst werden dürfen. Die Bezeichnung eines Kom-
mandos hat eine Bedeutung, die gelegentlich nicht zu erraten ist. Beispielsweise geht
die Bezeichnung awk auf die Initialen seiner Urheber A LFRED V. A HO, P ETER J.
W EINBERGER und B RIAN W. K ERNIGHAN zurück. Die vielbesungene Bash ist die
Bourne-again-Shell, deren Vorläufer die Bourne-Shell ist, entwickelt von S TEPHEN
R. B OURNE, während der Emacs ursprünglich eine Sammlung von Editing Macros
war.
Optionen (Parameter, Schalter, Flag) sind optional, das heißt nicht unbedingt er-
forderlich. Sie modifizieren die Wirkung eines Kommandos. Viele ähnliche Auf-
gaben lassen sich mit demselben Kommando bewältigen, wenn man Optionen ein-
setzt. Es gibt eine klassische Kurzform der Optionen, die mit einem Bindestrich
oder Minuszeichen eingeleitet wird, und besonders in der Linux-Welt eine Langform
mit zwei führenden Bindestrichen. Vereinzelt treten Optionen ohne Bindestrich auf,
meist als Altlasten. Sehen wir uns das Kommando ls (list) an. Ohne Zutaten aufge-
rufen:
joe@debian:~$ ls
listet es die Einträge im Arbeitsverzeichnis auf. Mit der Option -a (all) zusammen
zeigt es auch verborgene Einträge an, deren Name mit einem Punkt beginnt:
joe@debian:~$ ls -a
Die zugehörige Langform der Option zeitigt dieselbe Wirkung:
joe@debian:~$ ls --all
Nicht zu jeder Kurzform gibt es eine Langform oder umgekehrt. In vielen Fällen, das
heißt nicht in allen, dürfen mehrere Optionen zusammengefasst werden:
joe@debian:~$ ls -a -l -i
ist gleichbedeutend mit:
joe@debian:~$ ls -ali
34 2 Linux/UNIX

Hier kommt es nicht auf die Reihenfolge der Optionen an. Das gilt nicht allgemein.
Kurze und lange Formen der Optionen dürfen gemischt, aber nicht zusammengefasst
werden. Die Bedeutung der Zeichen für die Optionen ist nicht einheitlich. Die Option
-v wie verbose (geschwätzig) führt bei vielen, aber nicht allen Kommandos zu einer
erhöhten Auskunftsbereitschaft. Eine ungültige Option führt meist zu einer kurzen
Hilfe auf dem Schirm:
joe@debian:~$ ls -y
Manche Kommandos brauchen Argumente. Beispielsweise wäre ein Kopierkom-
mando ohne Nennung von Original- und Zieldatei sinnlos. Auch das Kommando ls
kennt Argumente:
joe@debian:~$ ls /bin /etc
In diesem Fall listet es die als Argument übergebenen Verzeichnisse auf. Wie und
in welcher Folge Optionen und/oder Argumente einzugeben sind, hängt vom jewei-
ligen Kommando ab und ist auf dessen Manualseite nachzulesen, siehe Abschnitt 5
Dokumentation und Hilfen ab Seite 273.
Wenn Sie folgendes Kommando eingeben:
joe@debian:~$ list
erscheint die Fehlermeldung:
bash: list: command not found
Damit teilt Ihnen die bash mit, dass sie das Kommando list nicht finden konnte.
Dass es die Bash ist, die Ihnen dies mitteilt, erkennen Sie an dem Wort bash: am
Anfang der Fehlermeldung. Geben Sie jetzt das Kommando
joe@debian:~$ ls eilig
ein, erhalten Sie die Fehlermeldung:
ls: eilig: Datei oder Verzeichnis nicht gefunden
Diesmal teilt Ihnen das Programm ls mit, dass es die Datei oder das Verzeichnis
eilig nicht finden konnte. Die Bash hatte mit der Ausführung des Kommandos
keine Probleme, denn sie kennt und findet das Kommando ls und konnte es mit
dem Argument eilig ausführen. ls konnte jedoch im aktuellen Verzeichnis nichts
finden, was den Namen eilig trägt. Ferner sieht man, dass die Bash und das Werk-
zeug ls unterschiedlich weit gediehen mit ihren Sprachkenntnissen sind.
Welches Programm eine Fehlermeldung ausgibt, ist belangreich für eine Fehler-
suche. So lässt sich erkennen, bei welchem Teil der Kommandozeile der Fehler liegt.
Im ersten Beispiel (mit list) konnte das Kommando nicht ausgeführt werden, und
im zweiten Beispiel (mit ls) konnte ls zwar ausgeführt werden, das Programm
bemängelte dann jedoch ein ungültiges Argument.
Begehen Sie einen dritten Fehler und geben Sie
joe@debian:~$ cp
2.3 Abmelden und Herunterfahren des Systems 35

ein. Das Kommando zum Kopieren einer Datei wäre schon recht, aber Sie gebrau-
chen es syntaktisch falsch. Schließlich muss das Kommando wissen, was es wohin
kopieren soll, es fehlen zwei Argumente. In solchen Fällen antwortet ein Kommando
mit einer kurzen Hilfe, hier cp: Fehlendes Dateiargument. Das Werkzeug
gibt sogar noch einen Hinweis, wie man an weitere Informationen kommt. Aber
Vorsicht: Gedanken lesen oder gar für den Benutzer denken kann kein Komman-
do. Wenn es auszuführen geht, wird es wie eingegeben ausgeführt, auch wenn der
Benutzer sich etwas anderes vorgestellt hat.
Sollte einmal ein Kommando das Terminal in einem verkonfigurierten Zustand
hinterlassen, was bei einem Abbruch mittels <ctrl>+<c> vorkommt, hilft manch-
mal die Eingabe:
joe@debian:~$ tset
zurück zum normalen Verhalten. Das Kommando dient eigentlich zum Initialisieren
von Terminals. Mit der Option -q (query) zeigt es den augenblicklichen Terminaltyp
an, ohne Einstellungen zu ändern. Das Kommando kann auch als:
joe@debian:~$ reset
aufgerufen werden, unter Umständen eingerahmt von der Tastenkombination
<ctrl>+<j> (Line Feed). Hilft auch das nicht – und war vorher alles in Ord-
nung – ist ein Warmstart des Rechners zu erwägen.
Das Arbeiten mit der Kommandozeile gilt als altmodisch. In der Tat bieten grafi-
sche Benutzeroberflächen (GUI) viele Annehmlichkeiten, solange Alles funktioniert.
Die meisten GUIs machen jedoch nichts Anderes als Zeilenkommandos samt Optio-
nen und Argumenten schön zu verpacken. Ein Verwalter, der sich oft mit Störfällen
herumschlägt, muss auch die Kommandozeile beherrschen und die Kommandos und
die beteiligten Dateien kennen.

2.3 Abmelden und Herunterfahren des Systems

2.3.1 Abmelden

Die Sitzung endet, wenn das Programm beendet wird, das bei der Anmeldung auto-
matisch gemäß Eintrag in der Datei /etc/passwd aufgerufen wurde. Vorgegeben
ist die Login-Shell, unter Linux fast immer die Bash. Sie verlassen die Bash, indem
Sie folgendes Kommando eingeben:
joe@debian:~$ exit
Danach erscheint wieder die Anmeldeaufforderung, und der nächste Benutzer kann
eine neue Sitzung starten.
36 2 Linux/UNIX

2.3.2 Herunterfahren und Ausschalten

Während des Betriebs von Linux/UNIX werden eine Reihe von Programmen aus-
geführt, die im Hintergrund laufen und verschiedene Dienste zur Verfügung stellen
(Dämonen). Dazu gehört das Protokollieren von Systemereignissen oder die Entge-
gennahme von Anmeldungen. Viele dieser Programme oder Prozesse dürfen nicht
brutal abgebrochen werden, sondern sind geordnet zu beenden. Deswegen wird ein
Linux/UNIX-System nicht einfach ausgeschaltet, sondern heruntergefahren.
Ein weiterer Grund für das Herunterfahren besteht darin, dass Änderungen
an Dateien nicht sofort auf die Festplatte geschrieben werden. Vielmehr werden
Schreibaktionen erst dann ausgeführt, wenn das Betriebssystem ausreichend Zeit hat
oder andere Umstände auftreten, die es zum sofortigen Schreiben aller Daten zwin-
gen. Wenn Sie den Rechner einfach ausschalten, kommt es vor, dass Daten noch
nicht auf die Festplatte geschrieben worden sind und beim nächsten Systemstart feh-
len. Außerdem können sich die Daten auf der Festplatte in einem inkonsistenten
(gestörten) Zustand befinden, was dazu führt, dass weitere Daten verloren gehen.
Ein einfacher Weg, ein Linux-System herunterzufahren und gegebenenfalls neu
zu starten, besteht darin, gleichzeitig die Tasten <ctrl>+<alt>+<del> zu be-
tätigen2 . Hierzu brauchen Sie nicht angemeldet zu sein und benötigen keine beson-
deren Rechte. Die Tastenkombination, für die man beide Hände braucht, wird auch
als Affengriff oder Klingonischer Würgegriff bezeichnet und wurde um 1980 von
dem IBM-Ingenieur DAVID J. B RADLEY bei der Entwicklung des IBM-PCs erson-
nen. Der Rechner wird sofort heruntergefahren und startet neu (rebootet). Sie dürfen
ihn ausschalten, wenn Sie den Startbildschirm Ihres Rechners sehen. Das Verfahren
beruht auf einem Eintrag in der Datei /etc/inittab und ruft das Kommando
/sbin/shutdown mit einigen Optionen auf:
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
Die Option -t1 erzeugt eine Pause von 1 s Dauer zwischen dem Absenden des
kill-Signals an alle Prozesse und dem Umschalten auf den Run-Level 0. Die Option
-a veranlasst shutdown, in der Datei /etc/shutdown.allow nachzusehen,
ob der jeweilige Benutzer berechtigt ist, das Kommando zu geben. sofern die Da-
tei existiert. Die Option -r schließlich führt zu einem erneuten Start (Reboot), -h
würde das System anhalten, und now bedeutet unverzüglich.
Der Verwalter oder ein privilegierter Benutzer kann das shutdown-Kommando
direkt eintippen, auch unter X11. Wenn das System mit shutdown heruntergefah-
ren wird, erhalten alle angemeldeten Benutzer eine Meldung, bevor mit dem Herun-
terfahren begonnen wird. Das Kommando shutdown bietet weitere Möglichkeiten,
beispielsweise den Zeitpunkt zum Herunterfahren festzulegen. Es sorgt für das Lee-
ren der Puffer usw. Im Normalfall soll nur shutdown zum Herunterfahren benutzt
werden, nicht die ähnlichen Kommandos halt, poweroff oder reboot.
2
Das Verfahren funktioniert nicht, wenn Sie mit X11 arbeiten, weil X11 die Tastaturein-
gaben selbst auswertet. Schalten Sie in diesem Fall zunächst auf eine Textkonsole um (z. B.
mit den Tasten <ctrl>+<alt>+<F1>) und benutzen Sie dann die angegebene Tastenkom-
bination.
2.4 Die Rolle des Verwalters 37

Alternativ kann der Systemverwalter folgendes Kommando eingeben:


debian:~# init 0
Dies führt zum Umschalten in den Runlevel 0, der beinhaltet, dass das System herun-
tergefahren wird, siehe /etc/inittab. Danach wird das System nicht neu gestar-
tet. Stattdessen erscheint eine der folgenden beiden Meldungen auf dem Bildschirm:
Power down oder System halted. Anschließend können Sie den Rechner aus-
schalten oder per Reset-Taste am PC-Gehäuse neu starten. Die Runlevels lernen wir
in Abschnitt 11.8 Starten von Debian GNU/Linux auf Seite 499 kennen.
Arbeiten Sie mit einer grafischen Arbeitsumgebung – was auf Arbeitsplätzen
heute die Regel ist – klicken Sie die Menüpunkte Aktionen -> Abmelden oder ein
entsprechendes Knöpfchen an und im dann erscheinenden Fenster den Punkt Her-
unterfahren oder Den Computer neu starten, je nachdem. Als Default darf das nur
der Verwalter. Bei der Konfiguration des An- und Abmeldebildschirms lässt sich je-
doch einstellen, wer sonst noch dieses Recht haben soll. Das ist der eleganteste Weg.
In der Praxis eines Systems mit nur einem realen Benutzer ist es gleichgültig, auf
welchem Weg Sie herunterfahren.
Manche jüngeren PCs sind auch nach dem Ausschalten nicht tot, sondern däm-
mern in einem stromsparenden Tiefschlaf (Soft Off) dahin, aus dem sie unter Um-
ständen durch eine Tasteneingabe oder ein über das Netz eintreffendes Signal wieder
aufgeweckt werden können. Wer sicher sein will, dass sein Rechner wirklich hun-
dertprozentig (Mechanical Off) ausgeschaltet ist, braucht eine Steckdosenleiste mit
eigenem Schalter, an die Rechner, Bildschirm, Modem, Drucker und alle weiteren
Geräte angeschlossen sind. Nur ein Big Red Switch althergebrachter Bauart stellt
sicher, dass die Geräte physikalisch ausgeschaltet sind, nicht nur logisch. Im Ab-
schnitt 9.2 Power Management auf Seite 396 handeln wir die Frage des Energiever-
brauchs und der Dämmerzustände des Rechners ab.

2.4 Die Rolle des Verwalters


Auf allen Rechnern und in allen Netzen gibt es die Rolle des Verwalters (E: admi-
nistrator, manager, F: administrateur). Dahinter stehen Personen – möglichst wenige,
aber nicht weniger als zwei – deren Aufgabe es ist, die Rechner und Netze am Laufen
zu halten. Man kann einen Rechner oder ein Netz als eine Maschine auffassen, die
wie jede andere Maschine gepflegt werden muss, wenn sie zuverlässig arbeiten soll.
Auf einem Rechner oder in einem lokalen Netz (LAN) ist kein Öl zu wechseln, son-
dern Hardware nachzurüsten, Software auf dem aktuellen Stand zu halten und der
Betrieb zu überwachen. Dazu braucht ein Verwalter außer Kenntnissen besondere
Rechte, die gewöhnlichen Benutzern aus guten Gründen vorenthalten werden. Man
findet auch die Bezeichnungen Systemmanager, Administrator, Supervisor und spe-
ziell in der Linux/UNIX-Welt die Benennungen Superuser und Root. Das Programm
sudo gibt Verwaltern drei Ratschläge mit auf den Weg:
• Respect the privacy of others (Achte den privaten Bereich anderer Benutzer).
38 2 Linux/UNIX

• Think before you type (Denke, bevor du tippst).


• With great power comes great responsibility (Mit großer Macht kommt große
Verantwortung).
Der Verwalter richtet Hard- und Software ein (Installation), er konfiguriert und ak-
tualisiert sie. Die Konfiguration3 , das heißt das Einstellen der Betriebswerte oder
-parameter, beginnt mit dem Einrichten und setzt sich im laufenden Betrieb fort. Er
überwacht seinen Bereich, sorgt für die Wartung und gegebenenfalls Reparaturen,
beobachtet die technische Entwicklung, probiert Neuigkeiten aus und bildet sich
weiter. Der Verwalter ist auch der erste Ansprechpartner der Benutzer bei Fragen
oder Störungen. In großen Einrichtungen sind das Aufgaben für mehrere Personen,
in kleinen oft eine Nebenaufgabe für einen Mitarbeiter, der eigentlich für etwas An-
deres da ist. Geht es um Programmieren oder bestimmte Anwendungsprogramme,
können einzelne Benutzer ihm an Kenntnissen und Erfahrungen überlegen sein. Das
sind nicht seine Kernaufgaben.
Auf Linux/UNIX-Anlagen findet sich nur ein Verwalterkonto, das immer die Be-
nutzernummer (User ID, UID) 0 und meist, aber nicht zwingend den Benutzernamen
root (Wurzel) trägt. Wegen seiner Allmacht ist das Benutzerkonto samt dem dazu
gehörenden Passwort besonders reizvoll. Ein Verwalter sollte verantwortungs- und
sicherheitsbewusst sein und entsprechenden Rückhalt von seinen Vorgesetzten be-
kommen.
Ein Verwalter ist nicht durch die Zugriffsrechte von Dateien oder Verzeichnissen
beschränkt. Darüber hinaus kann er einige Programme ausführen, die an die UID 0
gebunden sind. Er kann nicht verschlüsselte Dateien entschlüsseln, das heißt auch
keine Passwörter. Hat ein Benutzer sein Passwort vergessen, kann ihm der Verwalter
ein neues Passwort zuteilen. Hat ein Benutzer eine Datei verschlüsselt und seinen
Schlüssel verloren, kann ihm kein Verwalter helfen.
Da Verwalter gelegentlich neue Hard- oder Software ausprobieren und einrichten
müssen, sollten sie einen Rechner oder besser ein minimales Netz aus drei Rechnern
zum Experimentieren zur Verfügung haben. Es liegt in der Natur von Experimenten,
dass sie manchmal schief gehen, was in einer Produktionsumgebung nicht tragbar
ist. Man kann nicht alles allein aus Büchern oder Webseiten lernen.
Die Allmacht von Root führt zu einer hohen Arbeitsbelastung des Verwalters und
stellt außerdem ein Risiko dar. Es gibt daher Wege, Teilaufgaben wie die Benutzer-
oder Druckerverwaltung zu delegieren, sodass Root möglichst wenig in Erscheinung
tritt. Subsysteme wie Datenbanken, Webserver oder Mailserver kennen einen eige-
nen Verwalter (data base administrator, webmaster, postmaster), der nach anfängli-
cher Einrichtung der Systeme durch Root das Kommando über seinen Bereich über-
nimmt. Vereint eine Person die Rollen eines Verwalters und eines gewöhnlichen Be-
nutzers in sich, soll sie nur das unbedingt Notwendige als Root erledigen. Es ist eine
gefährliche Unsitte, Tätigkeiten eines gewöhnlichen Benutzers aus Bequemlichkeit
als Root auszuüben.

3
Wir haben noch kein treffendes urdeutsches Wort dafür gefunden (Anpassung?).
2.5 Virtuelle Konsolen 39

Viele Programme lassen sich an eigene Wünsche anpassen, sie sind zu konfigu-
rieren. Das zählt zu den Kernaufgaben eines Verwalters. Dabei ist zu unterscheiden
zwischen:
• systemweiten Einstellungen, die entweder die Werkzeuge mitbringen (Vorgaben,
Defaultwerte) oder vom Verwalter festgelegt werden,
• persönlichen Einstellungen, die jeder Benutzer selbst festlegen kann oder muss,
oft in Form von Dateien oder Verzeichnissen in seinem Home-Verzeichnis, deren
Name mit einem Punkt beginnt.
Die Frage ist immer, was wo festgelegt wird. Üblich sind folgende Möglichkeiten,
grob geordnet nach Vorrang, die am schwersten wiegende zuletzt:
• im Programmcode, bei sauberer Programmierung in so genannten Kopf-,
Header- oder Include-Dateien, wie sie in den Verzeichnissen /usr/include,
/var/lib oder /usr/src nachzulesen sind,
• im Verzeichnis /etc, nur vom Verwalter zu ändern, mit wenigen Ausnahmen
(Dateien mit Passwörtern) von jedem Benutzer zu lesen:
– im Verzeichnis /etc/default für einige Werkzeuge wie ntpdate, ssh
oder spamassassin,
– in programmbezogenen Verzeichnissen oder Dateien wie /etc/apache2
oder /etc/arpwatch.conf,
– in den Start/Stopskripten im Verzeichnis /etc/init.d, soll vermieden
werden, kommt aber vor,
• durch systemweite Umgebungsvariable, die vom Verwalter in Dateien wie
/etc/bash.bashrc oder /etc/profile gesetzt werden,
• durch persönliche Verzeichnisse oder Dateien wie $HOME/.gimp-2.2 oder
$HOME/.conkyrc,
• durch persönliche Umgebungsvariable, die jeder Benutzer in seinem Home-
Verzeichnis in Dateien wie $HOME/.bashrc setzt,
• beim Aufruf in der Kommandozeile mittels Optionen und Argumenten.
Die Übersicht ist weder vollständig noch trifft sie auf jedes Programm zu. Die Viel-
falt der Möglichkeiten erleichtert das Leben des Verwalters nicht gerade, ist aber Vor-
aussetzung für die Leistung und Anpassungsfähigkeit von Linux/UNIX-Systemen.
Auf der zu einem Programm gehörenden Manualseite sollten unten im Abschnitt
FILES bzw. DATEIEN die Konfigurationsdateien aufgeführt sein.
Ein Verwalter hat viel zu lesen. Außer Betriebsanleitungen, README-Dateien,
Manualseiten, HOWTOs, unseren Debian-Büchern und Postings in einschlägigen
Newsgruppen empfehlen wir ihm den Linux System Administrator’s Guide (2005)
von L ARS W IRZENIUS und anderen, erschienen bei TLDP.

2.5 Virtuelle Konsolen

Linux stellt mehrere virtuelle Textkonsolen zur Verfügung, maximal 63. Die virtuel-
len Konsolen dienen dem Zweck, mehrere Sitzungen gleichzeitig auf einem Rechner
40 2 Linux/UNIX

auszuführen und schnell von einer zur anderen umzuschalten. Sie müssen sich an
jeder virtuellen Konsole eigens anmelden und können dazu unterschiedliche Benut-
zerkonten verwenden. Es ist denkbar, auf der ersten virtuellen Konsole als root
angemeldet zu sein und auf drei weiteren Konsolen als gewöhnlicher Benutzer.
Als Vorgabe stehen auf Grund der Eintragung in /etc/inittab sechs virtu-
elle Konsolen bereit. Sie können deren Anzahl durch Auskommentieren der entspre-
chenden Zeilen herabsetzen. Die erste sehen Sie – ohne umzuschalten – nachdem der
Rechner hochgefahren ist, sofern nicht automatisch eine grafische Oberfläche gestar-
tet wird. Auf die zweite Konsole schalten Sie durch Betätigung der Tastenkombina-
tion <alt>+<F2>, auf die dritte durch die Tastenkombination <alt>+<F3> usw.
Um wieder zurück auf die erste Konsole zu gelangen, drücken Sie <alt>+<F1>.
Bei einigen Programmen haben die Tastenkombinationen <alt>+<F1> usw.
eine besondere Bedeutung, sodass sie nicht zum Umschalten der Konsole führen. Zu
diesen Programmen gehören die X-Server und die DOS-Laufzeitumgebung DOS-
emu. Aus diesen Programmen wechseln Sie in die virtuellen Konsolen durch die
Tastenkombinationen <ctrl>+<alt>+<F1> usw.
Die Sitzungen an den verschiedenen Konsolen sind unabhängig voneinander.
Wenn Sie beispielsweise an der einen Konsole das aktuelle Arbeitsverzeichnis wech-
seln, sind die anderen Sitzungen davon nicht betroffen. Auch müssen Sie sich an
jeder Konsole, an der Sie sich angemeldet haben, wieder abmelden, um die dortige
Sitzung zu beenden.
Wie unter Linux/UNIX seit altersher üblich und in Abschnitt 2.7.1 Kon-
figuration und Startdateien auf Seite 51 erläutert, steckt hinter einer Sitzung
auf einer Konsole eine Shell – unter Linux eine Bash – die beim Start zu-
erst die systemweite Datei /etc/profile und dann die benutzereigene Datei
$HOME/.bash_profile aufruft. Die benutzereigene Datei bindet die ebenfalls
benutzereigene Datei $HOME/.bashrc ein, sofern vorhanden.
Probieren Sie einmal aus, sich auf der ersten Konsole eine Datei mit less anzu-
schauen und schalten Sie während dessen auf die zweite Konsole um, wo Sie dann
eine andere Datei mit vi bearbeiten können. Zwischendurch können Sie jederzeit
durch Betätigung von <alt>+<F1> bzw. <alt>+<F2> zwischen den beiden Kon-
solen hin- und herschalten.
Neben den vorgegebenen sechs virtuellen Konsolen besteht die Möglichkeit,
neue Konsolen zu öffnen. Hiervon macht X11 Gebrauch, das nach seinem Start
die nächste unbelegte virtuelle Konsole verwendet. Das ist meist die siebte Kon-
sole. Wenn Sie eine grafische Benutzeroberfläche mit X11 benutzen, wechseln Sie
deswegen mit der Tastenkombination <ctrl>+<alt>+<F1> von X11 zur ersten
virtuellen Konsole und von dort mit <alt>+<F7> wieder zurück zur grafischen
Oberfläche.
Eine Anwendung virtueller Konsolen ist die Reparatur der grafischen Oberfläche
bei Schäden, in denen der Rechner nur noch auf die Tastatur reagiert, ein hängen-
der Mauscursor zum Beispiel. In diesem Fall schießt man von einer virtuellen Text-
konsole den Fenster-Manager ab, der wieder neu startet und dann hoffentlich die
Maussignale richtig umsetzt. Eine zweite Anwendung ist das Überwachen mehrerer
Server in einem Netz, wobei auf jeweils einer Konsole eine ferngesteuerte Sitzung
2.6 Prozesse 41

auf einem Server läuft. Auf diese Weise hat man ständig die Server im Griff. Heute
– im Zeitalter grafischer Benutzeroberflächen – bieten auch Desktöppe oder Fens-
ter eine ähnliche Funktionalität, aber die virtuellen Konsolen sind anspruchslos und
benötigen keine Grafik.

2.6 Prozesse
Solange alles wunschgemäß läuft, braucht sich ein Verwalter nur selten und ein Be-
nutzer gar nicht um Prozesse auf dem Rechner zu kümmern. Aber wenn ein Kom-
mando oder ein Programm sich nicht wie erwartet verhält, sind eine Vorstellung und
und vielleicht erweiterte Kenntnisse davon hilfreich, was ein Prozess ist.
Ein Prozess (E: process, F: processus) ist die Form, in der ein Kommando oder
ein Programm unter Linux/UNIX ausgeführt wird. In alltäglicher Sprechweise wird
oft zwischen einem Programm und einem Prozess nicht unterschieden.4 Ein Pro-
gramm ruht als Datei auf dem Massenspeicher, ein Prozess belegt einen Teil des Ar-
beitsspeichers (process image) und fordert von der CPU Rechenzeit an, er tut etwas.
Im Arbeitsspeicher stehen Anweisungen und Daten.
Wie wird ein Prozess erzeugt? Der erste ausgewachsene Prozess auf einem
Linux/UNIX-System heißt init und trägt die Prozessnummer (Prozess-ID, PID) 1.
Er wird beim Systemstart auf eine besondere Art erzeugt, wie seinerzeit A DAM und
E VA. Alle weiteren Prozesse sind Abkömmlinge oder Kinder dieses Prozesses.
Neue Prozesse werden dadurch erzeugt, dass sich ein bereits bestehender Pro-
zess – zu Anfang init – kopiert (forking a process) und dann die Anweisungen
des neuen Prozesses in den Anweisungsteil der Kopie schreibt und dabei die Anwei-
sungen des alten Prozesses, der Kopiervorlage, auch Elternprozess genannt, in der
Kopie überschreibt. Ein neuer Prozess bekommt eine eigene, eindeutige Prozess-ID.
Zugleich wird auch die Prozess-ID seines Elternprozesses vermerkt. Auf diese Weise
erbt ein Kindprozess den Datenteil seines Elternprozesses. Eine Rückvererbung der
Daten vom Kind auf die Eltern gibt es nicht. Von den Änderungen, die ein Kindpro-
zess an seinen Daten vornimmt, erfährt der Elternprozess nichts. Das wird manchmal
übersehen.
Eine zweite, seltener genutzte Möglichkeit, ein Kommando auszuführen, besteht
darin, dass ein Prozess seinen Anweisungsteil durch neue Anweisungen ersetzt (exec
a process). Der Prozess behält seine ID und seine Daten, die alten Anweisungen
sind futsch. Das klassische Beispiel dafür ist die Folge getty -> login -> bash.
Schauen wir uns in einer Konsole (Terminal) in einer Sitzung mit einer grafischen
Oberfläche mittels ps die laufenden getty-Prozesse an und merken uns die PID
des ersten:
joe@debian:~$ ps -ef | grep getty

4
Manchmal wird sogar dasselbe Wort für Hardware, Programm und Prozess gebraucht.
Ein Server kann ein Rechner sein, ein Programm oder ein Prozess im Rechner.
42 2 Linux/UNIX

Die Option -e (every) bewirkt, dass jeder Prozess angezeigt wird, die Option -f
(full oder forest), dass ausführliche Informationen einschließlich der Verwandt-
schaftsbeziehungen ausgegeben werden. Nimmt man die Option -l (long) hinzu,
wird die Ausgabe noch länger. Dann wechseln wir mittels <ctrl>+<alt>+<F1>
auf die erste virtuelle Konsole und finden dort die login-Aufforderung von getty
vor. Wir melden uns an und bekommen bei Erfolg eine Sitzungsshell. Von dem
login-Prozess sehen wir nichts, aber wenn wir nun mit <alt>+<F7> zum grafi-
schen Bildschirm zurückkehren und wieder ps eingeben:
joe@debian:~$ ps -ef | grep PID_des_getty_Prozesses
stellen wir fest, dass sich unter der PID des getty-Prozesses eine Bash meldet.
Der getty-Prozess hat sich auf dem Weg über einen login-Prozess durch bash
ersetzt. Die Bash ist kein Kind von getty, sondern der alte Prozess mit neuen An-
weisungen. Das kann man immer dann machen, wenn die alten Anweisungen nicht
länger benötigt werden. Rufen wir auf der virtuellen Konsole in unserer Sitzung aus-
drücklich eine Bash auf:
joe@debian:~$ bash
wechseln zurück und geben wieder:
joe@debian:~$ ps -ef | grep PID_des_getty_Prozesses
ein, finden wir zwei Shells, die erste mit der bekannten PID und die zweite als Kind
der ersten mit einer gleichlautenden Parent-PID. Die zweite Shell ist ein Kind der
ersten, mit fortan eigenem Lebenslauf. Zu bemerken ist noch, dass Kindprozesse
spätestens dann sterben, wenn ihr Elternprozess stirbt. Traurig, aber wahr.
Einzelheiten sind im Manual zur Bash, Abschnitt Shell Builtin Commands,
exec, zur Standardfunktion exec, zum Systemaufruf fork sowie im Kapitel Pro-
cesses des Handbuchs The GNU C Library nachzulesen, zu finden auf http:
//www.gnu.org/software/libc/manual/ (2001), eine auch in anderen
Fragen ergiebige Quelle.
Wenn wir im Dialog am Terminal ein (externes) Kommando wie date oder
ein eigenes Programm – Skript oder übersetztes Programm – aufrufen, erzeugt die
Dialog-Shell – siehe nächster Abschnitt – eine Kopie von sich, schreibt die An-
weisungen des Kommandos oder Programms in den Anweisungsteil der Kopie und
schickt den Kindprozess auf den Weg. Im Regelfall wartet die Dialog-Shell dann auf
die Vollzugsmeldung des Kindprozesses, ehe sie selbst wieder für neue Aufgaben
bereit ist.
Es gibt einige Werkzeuge zum Umgang mit Prozessen. Den Prozess-Status zeigt
uns ps an, oft mit Optionen aufgerufen, siehe Manual:
joe@debian:~$ ps -ef | less
Die Ausgabe besteht aus folgenden Spalten:
• UID User-ID, Besitzer (Starter) des Prozesses,
• PID Process-ID, eindeutige Nummer des Prozesses,
• PPID Parent-Process-ID, Nummer des Elternprozesses,
2.6 Prozesse 43

Abb. 2.2: Screenshot des GNOME System Monitors, Auswahl Prozessliste

• C oder CP CPU-Auslastung, höherer Wert = höhere Auslastung, wird vom Sche-


duler zur Berechnung der Priorität benutzt (CPU-intensive Prozesse bekommen
eine schlechtere Priorität, begünstigt den Dialog),
• STIME Start Time, Uhrzeit, zu der der Prozess gestartet wurde,
• TTY Kontrollterminal, Terminal, von dem aus der Prozess gestartet wurde und
wohin er etwaige Ausgaben oder Fehlermeldungen schickt. Ein Fragezeichen
bedeutet, dass der Prozess kein Kontrollterminal hat.
• TIME vom Prozess verbrauchte CPU-Zeit,
• CMD Command, Kommando mit Optionen etc., durch das der Prozess gestartet
wurde. Eckige Klammern bedeuten, dass der Prozess auf Platte ausgelagert ist.
Die letzte Spalte ist insofern interessant, als ein Benutzer sich auf dem Weg über ps
die von einem anderen Benutzer eingetippten Kommandozeilen ansehen kann, die
gelegentlich Passwörter enthalten. Deshalb vermeide man die Eingabe von vertrau-
lichen Daten in der Kommandozeile, beispielsweise beim Kommando ftp. Die gra-
fische Verkleidung von ps heißt tkps, ohne nennenswerten Informationsgewinn.
Will man sich den Prozess-Stammbaum nicht aus der Antwort von ps rekonstru-
ieren, hilft die Option --forest
joe@debian:~$ ps -ef --forest
oder hübscher:
44 2 Linux/UNIX

Abb. 2.3: Screenshot des X11-basierten Conky System Monitors, eine unter vielen Möglich-
keiten

joe@debian:~$ pstree
Die Prozesse geordnet nach der CPU-Belastung, die sie verursachen, gibt:
joe@debian:~$ top
aus und aktualisiert seine Werte alle 3 Sekungen, bis wir das Werkzeug mittels <q>
(quit) abbrechen. In der Anzeige ist die Spalte S wie Status interessant, die Auskunft
über den Zustand der Prozesse gibt. Hierin bedeuten:
• R Running, Prozess ist bereit zu laufen und läuft, sobald ihm CPU-Zeit zugewie-
sen wird,
• S Sleeping, Prozess schlummert, bis er wieder etwas zu tun bekommt (die Pro-
zessliste ist der reinste Schlafsaal),
• Z Zombie, Prozess, der beendet ist, dessen Überreste aber noch nicht weggeräumt
sind, sollte selten auftauchen,
• D Dead, Prozess im Tiefschlaf, der nicht unterbrochen werden kann,
• T Traced or Stopped, Prozess wird verfolgt oder ist durch Signal angehalten.
Praktisch nur zu sehen, wenn man top mit der Option -i (inverse) aufruft.
2.6 Prozesse 45

Das Werkzeug htop erlaubt horizontales Scrollen und damit die Anzeige langer
Prozessnamen. In grafischem Gewand kommt der GNOME System Monitor (Nach-
folger von gtop) daher, zu starten über die Menüpunkte Anwendungen -> System-
werkzeuge -> Systemüberwachung, siehe Abbildung 2.2. Von KDE stammt das ähn-
lich aussehende Werkzeug KDE System Guard (ksysguard). Weitere Werkzeu-
ge zur Systemüberwachung sind Conky (anpassungsfähig, braucht X11, http://
conky.sf.net/), siehe Abbildung 2.3, und Saidar (anspruchslos, curses-basiert,
http://www.i-scream.org/), siehe Abbildung 2.4. Den Bedarf eines Pro-
zesses an Arbeitsspeicher ermittelt pmap, auf Wunsch recht detailliert.

Abb. 2.4: Screenshot des curses-basierten Saidar System Monitors

Prozesse lassen sich durch Signale beeinflussen. Root darf jedem Prozess etwas
signalisieren, ein gewöhnlicher Benutzer nur seinen eigenen. Eine Tabelle der Signa-
le findet sich im Anhang in Tabelle 22.1 auf Seite 1063. Der Aufruf:
joe@debian:~$ kill SIGTERM 3388
oder:
joe@debian:~$ kill -15 3388
schickt dem Prozess Nr. 3388 das Signal Nr. 15 mit der Bezeichnung SIGTERM,
das einen Prozess geordnet terminiert (beendet). kill ist auch ein eingebautes
46 2 Linux/UNIX

Kommando der Bash und genießt als solches Vorrang vor dem externen Kommando
/bin/kill. Die Aufgaben sind gleich, die Syntax unterscheidet sich leicht. Wei-
teres in Abschnitt 2.7.3 Beenden von Prozessen auf Seite 71.
Gleichzeitig auf einem System aktive Prozesse reden miteinander. Dafür gibt es
mehrere Wege von gemeinsam genutztem Arbeitsspeicher bis hin zum Versand von
Nachrichten. Die Mechanismen werden unter dem Begriff Inter Process Communi-
cation zusammengefasst, ein Thema hauptsächlich für Programmierer.

2.7 Kommandointerpreter (Bash)


2.7.1 Start

Die Bash ist der gebräuchliche Kommandointerpreter (Shell) unter Debian


GNU/Linux. Er ist die Schnittstelle zwischen Benutzer und Betriebssystem, der
Gesprächspartner beim Terminaldialog. Die Bash nimmt Kommandos entgegen und
lässt sie durch das Betriebssystem ausführen. Ferner stellt die Bash eine eigene Pro-
grammiersprache dar, mit der es möglich ist, Vorgänge zu automatisieren und sich
Schreibarbeit zu sparen. Von dieser Eigenschaft wird an vielen Stellen im System
Gebrauch gemacht. Beispielsweise handelt es sich bei den Startskripten im Ver-
zeichnis /etc/init.d um Shellskripte. Man kann dort die gleichen Kommandos
einfügen, die man auch an der Kommandozeile eingeben würde. Beide Aufgaben
gehören nicht notwendigerweise zusammen. Während es für die Bash als Komman-
dointerpreter nur andere Shells als Alternative gibt, stehen zahlreiche Interpreter
für Programmiersprachen zur Verfügung, die keine Kommandointerpreter sind. Der
Shell als Programmiersprache ähnlich ist Perl, ebenfalls eine Skriptsprache, die von
einem Perl-Interpreter in Maschinensprache übersetzt wird.
Der Name Bash steht für Bourne-Again-Shell, eine Anspielung auf die Bourne-
Shell und ihren Autor S TEPHEN R. B OURNE. Diese Shell wurde 1977 erstmals
von AT&T mit AT&T-Unix V7 ausgeliefert und ist heute auf vielen Linux/UNIX-
Systemen zu finden. Die Bash orientiert sich zwar an der Bourne-Shell und ist mit
dieser verträglich, hat aber viele Eigenschaften aus anderen Shells – hauptsächlich
der C-Shell und der Korn-Shell – übernommen, sodass mit ihr heute eine mächtige
und komfortabel zu benutzende Shell zur Verfügung steht.
Das Konzept des Kommandointerpreters ist nicht auf Linux/UNIX beschränkt.
Von der Arbeit mit DOS, MS Windows oder IBM OS/2 kennen Sie vielleicht deren
Kommandointerpreter command.com beziehungsweise cmd.exe. Auch die Auf-
gabe dieser Interpreter ist es, Kommandos entgegen zu nehmen und sie entweder
selbst auszuführen oder die zugehörigen Programme aufzurufen. Ebenso ist es mög-
lich, einfache Aufgaben mittels Batchdateien zu automatisieren. Es bestehen jedoch
große Unterschiede bezüglich des Komforts und den Fähigkeiten zwischen diesen
einfachen Kommandointerpretern und der Bash.
Viele Aufgaben lassen sich schneller und einfacher durch Kommandos in der
Kommandozeile lösen als durch Klicken, manche sogar ausschließlich. Man braucht
nicht zu warten, bis aufwendige grafische Oberflächen gestartet sind, und spart sich
2.7 Kommandointerpreter (Bash) 47

die Hangelei von einem Menü zum anderen. Wenn man bedenkt, dass man diese
Kommandos ebenso gut mit einem Texteditor in eine Datei schreiben kann und dann
schon ein kleines Programm – ein Shellskript – hat, mit dem man die betreffen-
de Aufgabe in Zukunft durch ein einziges Kommando erledigt, wird klar, welche
Vorteile ein leistungsfähiger Kommandointerpreter gegenüber grafischen Oberflä-
chen mit Menüs und Knöpfen bietet. Shellskripte werden auch Kommandoproze-
duren oder Makrobefehle genannt, in der DOS-Welt Batch-Datei. Einen Einstieg in
das Schreiben von Shellskripts vermitteln der Bash Guide for Beginners (2006) von
M ACHTELT G ARRELS und der Advanced Bash Scripting Guide (2006) von M EN -
DEL C OOPER , beide beim Linux Documentation Project.

Ein Beispiel am Anfang

Stellen Sie sich folgende Aufgabe vor: Sie erhalten immer wieder Bilddateien in ei-
nem speziellen Format – sagen wir JPEG – die Sie drucken möchten und hinterher in
einem anderen Format – beispielsweise PNG – speichern. Jede Datei soll zusätzlich
auf eine Diskette geschrieben werden, damit Sie sie weitergeben können. Die übliche
Vorgehensweise mit typischen Programmen für grafische Oberflächen ist:
1. Öffnen eines Bildbearbeitungsprogramms aus der Startleiste.
2. Wählen des Menüs Datei und Anklicken des Menüpunktes Öffnen.
3. Warten, bis die Datei geladen ist.
4. Nun wählen Sie wieder das Menü Datei und den Menüpunkt Speichern unter.
5. Es erscheint eine Dateiauswahlbox, in der Sie einen neuen Dateinamen eingeben
und den Dateityp (PNG) auswählen.
6. Danach drücken Sie ok, werden gefragt, ob Sie es wirklich ernst meinen, bestä-
tigen und warten, bis die Datei konvertiert und gespeichert ist.
7. Nun wählen Sie Datei und Drucken, um die Datei zu drucken. Unter Umständen
müssen Sie noch den Drucker angeben und einige Werte einstellen.
8. Um die Datei auf eine Diskette zu schreiben, wählen Sie entweder wieder Datei
und Speichern unter und wählen diesmal das Diskettenlaufwerk aus, oder Sie
kopieren die Datei mit einem Dateimanager auf eine Diskette.
Wenn Sie und Ihre Programme schnell sind, brauchen Sie dafür jedes Mal drei Mi-
nuten. Und bedenken Sie auch, dass Sie sich bei einigen dieser Operationen konzen-
trieren müssen, damit Sie nicht einen falschen Dateinamen, ein falsches Verzeichnis,
den falschen Drucker oder das falsche Dateiformat auswählen.
Über die Kommandozeile dauert es am Anfang genauso lange, und Sie müssen
sich auch konzentrieren. Hier gehen Sie folgendermaßen vor:
1. Sie wechseln in das Verzeichnis, in dem Ihre Dateien liegen:
joe@debian:~$ cd grafiken
2. Dann konvertieren Sie die Datei mit dem Programm convert aus dem Paket
imagemagick:
joe@debian:~/grafiken$ convert bild.jpg bild.png
48 2 Linux/UNIX

3. Nun drucken Sie die Datei auf Ihren Farbdrucker mit dem Namen color:
joe@debian:~/grafiken$ lpr -P color bild.png
4. und kopieren die Datei auf eine DOS-formatierte Diskette (siehe mtools):
joe@debian:~/grafiken$ mcopy bild.png a:
Das waren vier Kommandos. Weil Sie wissen, dass Sie die gleiche Aufgabe morgen
wieder zu erledigen haben, schreiben Sie die Kommandos in eine Datei:

#!/bin/bash
cd grafiken
convert bild.jpg bild.png
lpr -P color bild.png
mcopy bild.png a:

Quelle 2.1 : Shellskript converter.sh

Das sind dieselben vier Kommandos wie oben. Eine solche Datei wird Shellskript
genannt. Die erste Zeile enthält eine Besonderheit. Das Betriebssystem wird mit die-
ser Zeile angewiesen, den Übersetzer (Interpreter) /bin/bash zu verwenden, um
das Programm auszuführen. So soll in jedem Skript für die Bash die erste Zeile aus-
sehen. Die Zeichenfolge #! am Anfang der ersten Zeile wird Shebang genannt und
muss genau dort stehen. Der Pfad des Übersetzers folgt unmittelbar.
Sagen wir, Sie haben das Skript in der Datei converter.sh gespeichert. Um
es ausführen zu können, sind noch die Rechte zu setzen:
joe@debian:~$ chmod a+x converter.sh
oder mit anderer, nicht völlig gleichbedeutender Schreibweise der Zugriffsrechte:
joe@debian:~$ chmod 755 converter.sh
Damit räumen Sie allen Benutzern das Recht ein, die Datei als Programm auszufüh-
ren. Nun wollen Sie nicht jeden Tag dieselbe Datei konvertieren, Variable kommen
ins Spiel. Die Bash speichert in der Positionsvaraiblen mit dem Namen 1 das erste
Argument, das ihr beim Aufruf übergeben wird. In der Variablen mit dem Namen 2
wird das zweite Argument gespeichert usw. Variable werden an Stelle von Zeichen-
ketten benutzt. Ihnen wird ein Dollarzeichen vorangestellt, wenn sie bei der Ausfüh-
rung des Skripts durch ihren Wert ersetzt werden sollen. Das verbesserte Skript:

#!/bin/bash
cd grafiken
convert $1 $2
lpr -P color $2
mcopy $2 a:

Quelle 2.2 : Verbessertes Shellskript converter2.sh

Nun rufen Sie Ihr Skript folgendermaßen auf:


2.7 Kommandointerpreter (Bash) 49

joe@debian:~$ ./converter2.sh Eingabedatei Ausgabedatei


Punkt und Schrägstrich zu Beginn der Eingabe verlangen, das Kommando oder die
Datei converter2.sh im Arbeitsverzeichnis zu suchen, nicht in dem durch die
PATH-Variable festgelegten Befehlspfad. Für Eingabedatei setzen Sie den Na-
men der zu konvertierenden und zu druckenden Datei ein und für Ausgabedatei
den Namen, den die Datei nach der Konvertierung tragen soll. Wenn Sie am nächs-
ten Tag die gleiche Aufgabe mit der Datei baum.jpg wieder durchführen, rufen
Sie nur noch folgendes Kommando auf:
joe@debian:~$ ./converter2.sh baum.jpg baum.png
Das geht schneller und erfordert weniger Mühe als die Durchführung verschiedener
Menüoperationen mit der Maus oder das Eintippen mehrerer Kommandos.
Auch wenn Sie hauptsächlich mit grafischen Benutzeroberflächen arbeiten, lohnt
es sich, die wichtigsten Fähigkeiten der Bash kennen zu lernen. Viele Aufgaben las-
sen sich mit ihr einfach und zeitsparend bewältigen. Bei der Arbeit des Systemver-
walters hat man es des öfteren mit Kommandos und Shellskripten zu tun, für de-
ren Verständnis Bash-Kenntnisse erforderlich sind. Grundlegende Kenntnisse in der
Kommandosprache der Bash sind bei einer über normale Anwendungen hinausge-
henden Anpassung und Verwaltung eines Debian GNU/Linux-Systems unerlässlich,
weil große Teile des Systems von Shellskripten konfiguriert und gesteuert werden.

Aufrufen und Beenden der Bash


Nach der Anmeldung an einem Terminal – beispielsweise an einer virtuellen Konso-
le – wird die Standardshell des Benutzers gestartet. Das ist fast immer die Bash ge-
mäß dem Eintrag in der Datei /etc/passwd. Die Standardshell lässt sich mit dem
Kommando chsh ändern. Wenn Sie sich an einer virtuellen Konsole anmelden, steht
Ihnen die Bash sofort zur Verfügung. Etwas anders sieht es aus, wenn Sie mit dem X
Window System (X11) arbeiten. Hier gibt es zunächst kein Terminal, in dem kom-
mandozeilenorientierte Programme ausgeführt und benutzt werden. Dafür sind aber
Terminal-Emulationsprogramme verfügbar, die die Funktionalität eines Terminals in
einem X-Fenster bieten. Diese Programme starten in der Regel die Standardshell5 ,
sodass nach dem Aufruf eines Terminalprogramms in einem X-Fenster genauso wie
an der Konsole gearbeitet werden kann. Das klassische Terminalprogramm für X11
ist das Programm xterm. Es stehen jedoch Alternativen wie rxvt oder die von den
Arbeitsumgebungen KDE und GNOME bereitgestellten Programme konsole und
gnome-terminal zur Verfügung. Die beiden Programme weisen den Vorteil auf,
dass sie sich gut an die jeweiligen Arbeitsumgebungen anpassen.
Ein Xterm rufen Sie über das Menü des von Ihnen benutzten Fenster-Managers
oder über das Debian-Menü XShells -> Xterm auf. Das Programm konsole errei-
chen Sie unter KDE aus dem Panel unter Werkzeuge -> Konsole, und unter GNOME
können Sie das Programm GNOME-Terminal im Panel unter Anwendungen -> Sys-
temwerkzeuge -> Terminal finden. Einen Eindruck vermittelt Abbildung 2.5. Viel-
fach sind auch abgekürzte Wege zu den Terminalprogrammen eingerichtet.
5
Genauer das mit der Umgebungsvariablen SHELL eingestellte Programm.
50 2 Linux/UNIX

Abb. 2.5: Screenshot des Terminal-Emulators GNOME-Terminal. Kurz zuvor wurde das
Kommando date eingegeben.

Die Bash wird durch das Kommando exit beendet. Sie beendet sich selbst,
wenn der Datenstrom, aus dem sie liest (bei einer interaktiven Shell die Standard-
eingabe), zu Ende ist. Dies ist dann von Bedeutung, wenn die Shell nicht interaktiv
betrieben wird, sondern die auszuführenden Kommandos aus einer Datei liest. Auch
die Eingabe der Tastenkombination <ctrl>+<d> beendet bei entsprechender Kon-
figuration eine Shell. Beim Arbeiten unter einer grafischen Benutzeroberfläche findet
sich im Menü Datei unten ein Punkt Fenster schließen oder ein Knöpfchen mit einem
X in der rechten oberen Ecke des Fensters für denselben Zweck.

Interaktive versus nicht-interaktive Shell

Wenn die Bash nach der Anmeldung oder später per Kommando aufgerufen wird,
startet sie als interaktive Shell. Sie nimmt Kommandos von der Tastatur entgegen
und schreibt Mitteilungen oder Ausgaben von Kommandos auf den Bildschirm. Wird
sie jedoch indirekt gestartet, um beispielsweise ein Skript auszuführen, liest sie ihre
Kommandos aus der entsprechenden Skriptdatei. Grundsätzlich haben alle Komman-
dos unter beiden Bedingungen die gleiche Wirkung. Im interaktiven Modus verhält
sich die Bash in einigen Situationen jedoch anders. So beendet sich beispielsweise
eine nicht-interaktive Bash bei einem falsch eingegebenen Kommando nach Ausga-
2.7 Kommandointerpreter (Bash) 51

be einer Fehlermeldung sofort. Dies ist im interaktiven Modus unerwünscht. Hier


wird ebenfalls eine Fehlermeldung ausgegeben, die Bash jedoch nicht beendet.

Konfiguration und Startdateien


Die Bash wird über mehrere Dateien konfiguriert. Dabei sind zwei Fälle zu unter-
scheiden. Im ersten Fall wird die Shell wie ein normales Programm aufgerufen. Das
ist dann gegeben, wenn Sie am Prompt das Kommando bash eintippen oder – wie
oben beschrieben – ein Terminalprogramm starten. In diesem Fall liest die Bash
während ihres Starts die Kommandos, die sich in der Datei .bashrc im Home-
Verzeichnis des aufrufenden Benutzers befinden, und führt sie aus. Sie wird über die
$HOME/.bashrc-Datei konfiguriert. Das Zeichenpaar rc, dem wir noch häufiger
begegnen, bedeutet run command oder run control.
Im zweiten Fall wird die Bash als erstes Programm nach der Anmeldung am
System gestartet. Jetzt hat sie einige zusätzliche Aufgaben zu erfüllen, welche die
gestartete Arbeitsumgebung konfigurieren. Zu diesen Aufgaben gehört das Festle-
gen des Suchpfades für Programme (siehe unten). Eine solche Shell wird deswe-
gen auch Login-Shell genannt. Sie führt zunächst die Kommandos in der Datei
/etc/profile aus. Dies ist eine Systemkonfigurationsdatei, mit der Root Ein-
stellungen festlegt, die für alle Sitzungen aller Benutzer mit der Bash gelten. Damit
jedoch die Benutzer persönliche Anpassungen vornehmen können, werden danach
die Kommandos in der Datei .bash_profile im Home-Verzeichnis des Benut-
zers ausgeführt. Der Fall, dass der Verwalter systemweite Einstellungen im Verzeich-
nis /etc vornimmt, die ein Benutzer durch Dateien in seinem Home-Verzeichnis
überschreiben oder ergänzen kann, ist gängige Praxis vieler Anwendungen.
Die dritte Konfigurationsdatei betrifft die Bash nur mittelbar. Es ist die Datei
.inputrc im Home-Verzeichnis des Benutzers bzw. die Datei /etc/inputrc.
Sie bestimmt die Eigenschaften der Bibliothek libreadline, die von der Bash –
aber auch von anderen Programmen – benutzt wird, um Kommandozeilen zu lesen.
Darüber hinaus kennt die Bash einige Optionen, die ihr Verhalten beeinflussen.
Die Optionen lassen sich auch dann noch verändern, wenn die Bash schon gestartet
ist. Sie werden bei dem Kommando set erläutert.

Die Dateien .inputrc und /etc/inputrc


Mit der Datei .inputrc wird zum einen die Bibliothek libreadline an die
eigenen Bedürfnisse angepasst, zum anderen können Tastaturkommandos mit Funk-
tionen verbunden werden. Wie unter Linux/UNIX üblich, wird beim Start der Bash
zunächst die Datei /etc/inputrc gelesen, in der sich systemweite Einstellungen
für alle Benutzer befinden, und danach die Datei .inputrc im Home-Verzeichnis
des aufrufenden Benutzers, mit der jeder Benutzer eigene Einstellungen vornehmen
und systemweite Einstellungen überschreiben kann.
Die Datei wird beim Start jeder Bash gelesen. Die Tastenkombinationen
<ctrl>+<x> <ctrl>+<r> veranlassen ein erneutes Lesen der Datei. Um Än-
derungen der Datei wirksam werden zu lassen, muss die Bash beendet und wieder
gestartet oder obige Tastenkombination benutzt werden.
52 2 Linux/UNIX

Allgemeines Verhalten von libreadline

Es gibt zwei Formen von Anweisungen in der Datei. Änderungen des Verhaltens von
libreadline werden durch das Schlüsselwort set eingeleitet, dem eine Eigen-
schaftsbezeichnung folgt. Dann kommt ein Wert, den die Eigenschaft annehmen soll.
Ein Beispiel:
set visible-stats on
Mit der Anweisung wird die Eigenschaft visible-stats auf den Wert on ge-
setzt. Die Anweisung bewirkt, dass bei der Ausgabe von Dateinamen durch ange-
hängte Zeichen verdeutlicht wird, ob es sich um besondere Dateien handelt (Ver-
zeichnisse, symbolische Links etc.). Die Liste der einstellbaren Eigenschaften findet
sich in der Info-Dokumentation (siehe Abschnitt 5.3 GNU Info-System auf Seite 282)
zur Bash unter dem Suchwort READLINE. Der Aufruf man readline oder info
readline zeigt die Beschreibung der Standardfunktion readline, nicht das, was
wir brauchen. Zu den Eigenschaften gehören:
• completion-query-items Legt fest, wie viele mögliche Vervollständi-
gungen es geben muss, bevor nachgefragt wird, ob diese angezeigt werden sollen.
Voreinstellung ist 100. Die Anweisung:
set completion-query-items 250
bewirkt, dass nach zweimaligem Betätigen der Taste <tab> alle Vervollständi-
gungen sofort angezeigt werden, wenn es nicht mehr als 250 gibt.
• show-all-if-ambiguous Die Darstellung der möglichen Vervollständi-
gungen erfolgt normalerweise erst dann, wenn die <tab>-Taste ein zweites Mal
gedrückt wird. Wird die Einstellung auf on gesetzt, erfolgt die Darstellung so-
fort. Vorgabe ist off.
• disable-completion Schaltet die Vervollständigung aus, wenn der Wert
auf on gestellt ist. Vorgabe ist off.
• convert-meta Bewirkt, dass Zeichen, die nicht im ASCII-Zeichensatz vor-
kommen, in eine Zeichenkombination bestehend aus E SC und dem Ausgangs-
zeichen – mit dem höchsten Bit auf 0 gesetzt – umgewandelt werden. Die Ein-
stellung ist als Vorgabe auf on gestellt und sollte abgeschaltet (off) werden, um
deutsche Umlaute eingeben zu können.
• expand-tilde Falls auf on gestellt, wird die Tilde bei der Vervollständigung
in das Home-Verzeichnis umgewandelt. Vorgabe ist off. Die Bedeutung der
Tilde als Abkürzung für das Home-Verzeichnis bleibt davon unbeeinflusst; das
ist eine Eigenschaft der Bash selbst.
• horizontal-scroll-mode Wenn eine eingegebene Zeile länger ist als eine
Zeile des Bildschirms, wird die Eingabe nicht automatisch umgebrochen, son-
dern der Text nach links verschoben. Vorgabe ist off.
• input-meta Erlaubt Zeichen einzugeben, die nicht im ASCII-Zeichensatz
vorkommen, auch wenn dies vom Terminal nicht unterstützt wird. Vorgabe ist
on.
2.7 Kommandointerpreter (Bash) 53

• output-meta Bewirkt, dass Zeichen, die nicht im ASCII-Zeichensatz vor-


kommen, ausgegeben und nicht durch eine Escape-Sequenz ersetzt werden. Vor-
gabe ist on.

Tastenkommandos

Die zweite Form von Anweisungen betrifft das Verbinden von Tastenkommandos mit
Aktionen (key bindings). Angenommen dass immer, wenn Sie den Buchstaben Groß-
R eingeben, der Text Das war ein großes R erscheinen soll, dann tragen Sie
folgende Zeile in die Datei .inputrc ein:
"R": "Das war ein grosses R"
Die Eigenschaft lässt sich nutzen, indem Sie die Funktionstasten oder Tastenkom-
binationen mit <ctrl> oder <alt> mit Kommandos verbinden. Zur Definition
von Tastenkombinationen mit <ctrl> sind dem jeweiligen Buchstaben die Zeichen
\C- voranzustellen. Um eine Definition mit der <alt>-Taste zu erzeugen, ist die
Zeichenkette \M- (Meta) zu verwenden. Die gleiche Definition mit <ctrl> sieht
so aus:
"\C-r": "Das war ein Control-r"
Durch die libreadline werden Funktionen zur Verfügung gestellt, die der
Bearbeitung von Kommandozeile oder Kommandogeschichte dienen, Die Funktio-
nen sind per Voreinstellung bei vielen Tastenkombinationen mit der <ctrl>-Taste
und bei einigen mit der linken <alt>-Taste verbunden. Die Voreinstellungen wer-
den durch Anweisungen wie die oben erwähnten überschrieben. Die Liste der Funk-
tionen von libreadline findet sich in der Info-Dokumentation zur Bash. Deshalb
werden in der folgenden Tabelle nur die wichtigsten Funktionen erläutert:

Tab. 2.1: Tastenbelegung der Bash mit libreadline

Funktion Erläuterung Belegung

Cursor
forward-char Bewegt Cursor ein Zeichen
vorwärts S TRG - F, P FEIL R ECHTS
backward-char Bewegt Cursor ein Zeichen
zurück S TRG - B, P FEIL L INKS
forward-word Bewegt Cursor ein Wort
vorwärts A LT- F
backward-word Bewegt Cursor ein Wort
zurück A LT- B
begin-of-line Bewegt Cursor an den
Anfang der Zeile S TRG - A
end-of-line Bewegt Cursor an das
Fortsetzung
54 2 Linux/UNIX

Tab. 2.1: (Fortsetzung)

Funktion Erläuterung Belegung

Ende der Zeile S TRG - E


accept-line Abschicken der Kommandozeile E INGABE

Text
delete-char Löscht Zeichen unter Cursor S TRG - D, E NTF
backward-delete-char Löscht das Zeichen vor Cursor Z URÜCK
kill-line Löscht Text zwischen
Cursor und Zeilenende S TRG - K
backward-kill-line Löscht Text zwischen
Cursor und Zeilenanfang S TRG - X, Z URÜCK
kill-word Löscht Zeichen zwischen
Cursor und Wortende A LT- D
undo Macht jüngste Veränderung
rückgängig S TRG -_
yank Fügt zuletzt gelöschte
Zeichen wieder ein S TRG - Y
tab-insert Fügt Tabulatorzeichen ein A LT-TAB
transpose-words Verschiebt Wort unter dem
Cursor hinter nächstes Wort A LT- T

Kommandogeschichte
previous-history Geht ein Kommando zurück
und zeigt es an S TRG - P, P FEIL R AUF
next-history Geht ein Kommando vorwärts
und zeigt es an S TRG - N, P FEIL RUNTER
backward-search-history Eingabe einer Zeichenkette,
nach der die Kommando-
geschichte durchsucht wird S TRG - R

Vervollständigung
complete Vervollständigt den einge-
gebenen Begriff TAB
insert-completions Fügt alle Vervollständigungen
ein A LT-∗

Sonstiges
clear-screen Löschen des Bildschirminhalts S TRG - L

Diese Funktionen sollten nicht anderen Tastenkommandos zugeordnet werden,


weil sie auch in anderen Programmen, beispielsweise dem Editor Emacs, verwen-
det werden. Deswegen eignen sich Funktionstasten zur Definition eigener Komman-
dos und Makros. Leider sind die Funktionstasten nicht so einfach anzusprechen wie
2.7 Kommandointerpreter (Bash) 55

die übrigen. Dies liegt daran, dass unterschiedliche Terminaltypen unterschiedliche


Zeichenfolgen bei Betätigen dieser Tasten erzeugen. Die meisten Terminaltypen er-
zeugen ein Escape-Zeichen (\e) und dann eine Zeichenfolge, die auf die Nummer
der Funktionstaste schließen lässt. Wir geben deshalb hier eine Beispielkonfiguration
an, die Funktionstastenbelegungen für die Terminaltypen linux (Konsole) und eine
generische Belegung enthält:
# Einstellungen wegen deutscher Sonderzeichen:
set input-meta on
set convert-meta off
set output-meta on

# Wir wollen nicht gefragt werden, wenn es


# weniger als 200 Vervollstaendigungen gibt,
# ob diese angezeigt werden sollen:
set completion-query-items 200

# Ausserdem moechten wir sofort alle Vervoll-


# staendigungen sehen und nicht ein zweites Mal
# TAB druecken muessen:
set show-all-if-ambiguous on

# Wir haetten gerne einen Hinweis, um was fuer


# Dateitypen es sich bei Vervollstaendigungen
# handelt:
set visible-stats on

# Die Tilde soll in das Home-Verzeichnis


# uebersetzt werden:
set expand-tilde on

# Belegung der Tastenkombination CTRL-r:


# Ein komplizierteres Tastaturmakro, das
# uns einen Suchbefehl schreibt und den
# Cursor an die Stelle bewegt, wo wir
# etwas einsetzen muessen (einzeilig):
"\C-r": "find /usr/share/doc -name \"*gz\" |
xargs zgrep -i \"\" |
less \M-b\M-b\C-f\C-f\C-f"

# Belegungen Funktionstasten Linux-Konsole:


$if term=linux
"\e[[A": reverse-search-history # Funktion F1
"\e[[B": clear-screen # Funktion F2
"\e[[C": "Funktion F3"
56 2 Linux/UNIX

"\e[[D": "Funktion F4"


"\e[[E": "Funktion F5"

# Definition fuer andere Terminaltypen:


$else
"\e[11~": reverse-search-history # Funktion F1
"\e[12~": clear-screen # Funktion F2
"\e[13~": "Funktion F3"
"\e[14~": "Funktion F4"
"\e[15~": "Funktion F5"
$endif

# Diese Funktionstasten waren bei getesteten


# Terminals gleich und brauchen nur einmal
# angegeben zu werden:
"\e[17~": "Funktion F6"
"\e[18~": "Funktion F7"
"\e[19~": "Funktion F8"
"\e[20~": "Funktion F9"
"\e[21~": "Funktion F10"
"\e[23~": "Funktion F11"
"\e[24~": "Funktion F12"
Das Doppelkreuz (Raute, Nummernzeichen, Gartenzaun, E: number sign, hash
mark, F: croisillon ) leitet einen Zeilenkommentar ein, der bis zum Zeilenende reicht.
Bei einem mehrzeiligen Kommentar ist daher jede Zeile mit einem Doppelkreuz zu
beginnen. Der Kommentar darf auch nach Anweisungen irgendwo auf der Zeile be-
ginnen. Leere Zeilen werden überlesen. Makrodefinitionen stehen in Anführungs-
zeichen. In der Beispieldatei .inputrc sind folgende Einstellungen vorgenommen
worden:
• Ganz oben finden sich die drei Einstellungen für readline, mit denen deutsche
Sonderzeichen auf vielen Terminaltypen funktionieren sollten.
• Darunter finden sich zwei Einstellungen für die Vervollständigung. Zunächst
wird festgelegt, dass bei weniger als 200 möglichen Vervollständigungen keine
Nachfrage durchgeführt werden soll. Außerdem sollen die möglichen Vervoll-
ständigungen sofort angezeigt werden.
• Dann wird festgelegt, dass beim Anzeigen von Vervollständigungen der Typ der
Dateien kenntlich gemacht werden soll und dass die Tilde während der Vervoll-
ständigung in den Namen des Home-Verzeichnisses umgewandelt werden soll.
• Darauf folgt die Definition eines Tastaturmakros. Der Tastenkombination
<ctrl>+<r> wird ein Makro zugeordnet, das ein längliches Komman-
do zum Durchsuchen komprimierter Dateien im Dokumentationsverzeichnis
/usr/share/doc erzeugt (siehe find, xargs und zgrep). Weil der Text,
nach dem gesucht werden soll, bei jeder Benutzung des Makros ein anderer ist,
ist er nicht enthalten. Vielmehr wird der Cursor gleich an die Stelle bewegt, an
2.7 Kommandointerpreter (Bash) 57

der der Text einzusetzen ist (zweimal ein Wort zurück (<ctrl>+<b>) und drei
Buchstaben vor mit dreimal <ctrl>+<f>). Man sieht, dass in Makros neben
Zeichenketten auch alle Tastenbefehle vorkommen dürfen. Das Makro enthält
Anführungszeichen. Weil Anführungszeichen in der Datei .inputrc selbst
eine besondere Bedeutung haben, muss ihnen ein Gegenschrägstrich zwecks
Quotens vorangestellt werden.
• In dem darunterliegenden Block finden sich Definitionen für Funktionstasten.
Wir machen von der Möglichkeit Gebrauch, mit der Anweisung $if eine Be-
dingung – hier den Terminaltyp – abzufragen und abhängig davon unterschied-
liche Definitionen vorzunehmen. Welche weiteren Bedingungen abgefragt wer-
den können, ist in der Info-Dokumentation zur Bash erläutert. Weil sich bei den
drei Terminaltypen nur die Zeichenfolgen der ersten fünf Funktionstasten unter-
scheiden, sind nur diese in die $if-, $else- und $endif-Anweisungen ein-
geschlossen. Die darauf folgenden Definitionen gelten für alle Terminaltypen.
Sinnvoll belegt sind hier nur die Funktionstasten <F1> und <F2>. Auf der
ersten liegt jetzt das Kommando zum Durchsuchen der Kommandogeschichte
(reverse-search-history) und auf der zweiten die Funktion zum Lö-
schen des Bildschirms. Alle anderen Funktionstasten sind mit Makros belegt, die
lediglich den angegebenen Text ausgeben. Es bleibt dem Leser überlassen, sinn-
volle Makros einzusetzen. Die Definitionen für die beiden ersten Funktionstasten
sind nicht von Anführungszeichen umschlossen. Der Grund besteht darin, dass
es sich hier um die Namen von Funktionen und nicht um auszugebende Zeichen-
ketten handelt.

Die Datei /etc/profile

Über die Datei /etc/profile werden Einstellungen vorgenommen, die für alle
Benutzer gelten, deren Standardshell die Bash oder die Korn-Shell ist. In ihr finden
sich gewöhnliche Shell-Kommandos, die während des Starts dieser beiden Shells
ausgeführt werden. Um beispielsweise das Programm news jedesmal dann aufzuru-
fen, wenn die Bash als Login-Shell gestartet wird, ist in die Datei eine Zeile mit dem
Kommando news einzufügen.
Die wichtigste Aufgabe der Datei besteht jedoch darin, sinnvolle Voreinstellun-
gen festzulegen, mit denen Benutzer auch dann arbeiten können, wenn sie auf eigene
Konfigurationsdateien verzichten. Dazu gehören das Festlegen der Verzeichnisse, in
denen die Bash nach Programmen suchen soll (PATH-Variable), und Vorgaben für
die Zugriffsrechte neuer Dateien (umask).

Die Datei ~/.bash_profile

Nachdem die Bash als Login-Shell die Kommandos in der Datei /etc/profile
abgearbeitet hat, führt sie die Kommandos in der Datei .bash\_profile im
Home-Verzeichnis des Benutzers aus. Hier hat jeder Benutzer die Möglichkeit, zu-
sätzliche Einstellungen vorzunehmen oder Vorgaben aus /etc/profile zu über-
schreiben.
58 2 Linux/UNIX

Wenn der Systemverwalter das Kommando news nicht in die Datei /etc/
profile aufgenommen hat, aber man dennoch möchte, dass dieses Programm nach
der Anmeldung aufgerufen wird, ist das Kommando in die eigene Konfigurationsda-
tei .bash_profile einzufügen. Auch möchte man eventuell den vorgegebenen
Suchpfad für Programme erweitern.

Die Datei $HOME/.bashrc

Wenn die Bash nicht als Login-Shell gestartet wurde, führt sie lediglich die Kom-
mandos in dieser Datei aus. Es wird dann davon ausgegangen, dass alle wichtigen
Einstellungen und Umgebungsvariablen für die Sitzung bereits gesetzt worden sind
und lediglich Einstellungen des Benutzers an der Shell selbst vorgenommen werden
sollen.
In der Praxis möchte man oft die gleichen Einstellungen für Login-Shell und
normale Shell benutzen. Durch folgende Zeile in der Datei .bash_profile wird
erreicht, dass die Shell als Login-Shell auch alle Kommandos in der Datei .bashrc
ausführt:
. ~/.bash_profile
Der Punkt am Anfang, gefolgt von einem Leerzeichen, ist ein Shell-Kommando, das
die Bash veranlasst, die in der angegebenen Datei enthaltenen Anweisungen aus-
zuführen. Wenn Sie das Kommando in Ihre Datei .bash_profile aufnehmen,
brauchen Sie alle weiteren Einstellungen nur noch in der Datei .bashrc vorzuneh-
men. Sie gelten dann automatisch für die Login-Shell und normale Shells. Trotzdem
ist es weiterhin möglich, Kommandos, die nur für die Login-Shell gelten sollen, in
die Datei .bash_profile zu schreiben.

Die Datei ~/.bash_logout

Ebenso wie beim Start der Bash Kommandos automatisch ausgeführt werden, kön-
nen bestimmte Kommandos während der Beendigung der Bash aufgerufen werden.
Hierzu dient die Datei .bash_logout im Home-Verzeichnis des Benutzers. Sie
wird nur während der Beendigung einer Login-Shell abgearbeitet. Man könnte von
einigen Dateien Sicherungskopien (Backups) anlegen lassen oder temporäre Ver-
zeichnisse leeren. Größere Arbeiten verzögern die Abmeldung und passen nicht gut
hierher.

Hilfe und Dokumentation

Die Bash ist mit einer Hilfefunktion ausgestattet, die eine Kurzreferenz zu allen ein-
gebauten Kommandos liefert. Der Aufruf:
joe@debian:~$ help | less
2.7 Kommandointerpreter (Bash) 59

gibt eine Liste der eingebauten Kommandos aus. Wenn dem help-Kommando der
Name eines eingebauten Kommandos als Argument mitgegeben wird, erscheint eine
Beschreibung des Kommandos. Folgendes Kommando liefert eine Beschreibung des
Kommandos alias:
joe@debian:~$ help alias
Darüber hinaus gibt es Linux/UNIX-üblich eine Manual-Seite zur Bash:
joe@debian:~$ man bash
in der mit den vom Editor vi oder Pager less bekannten Kommandos vorwärts und
rückwärts geblättert oder gesucht werden kann. Zum Ausdrucken dient folgendes
Kommando:
joe@debian:~$ man bash -T ps | lpr
Der Ausdruck umfasst rund 70 Seiten DIN A4. Auch im GNU-Info-System ist die
Bash dokumentiert:
joe@debian:~$ info bash
Je nach Einrichtung des Systems zeigt info gelegentlich auch nur das Manual an.
Im Verzeichnis /usr/share/doc/bash liegen weitere Informationen. Schließ-
lich kann man sich von http://www/tldp.org/ ein Bash-Prompt-HOWTO
(2003) von G ILES O RR und einen Bash Guide for Beginners (2006) von M ACH -
TELT G ARRELS herunterladen.

2.7.2 Grundlagen der Bash

Externe und interne Kommandos

Die wichtigste Aufgabe der Shell besteht darin, Kommandos vom Benutzer entge-
genzunehmen und auszuführen. Man unterscheidet dabei zwischen externen Kom-
mandos und internen oder eingebauten Kommandos.
Externe Kommandos sind Programme, die von der Shell aufgerufen werden,
nachdem der Benutzer ein Kommando eingegeben hat. Diese haben normalerweise
den gleichen Namen wie das Kommando, das eingegeben wurde. Beispiele solcher
Programme sind die Kommandos ls oder rm. Im Gegensatz zu anderen Komman-
dointerpretern lässt die Bash fast alles, was sie nicht unbedingt selbst machen muss,
von externen Programmen erledigen. Kommandos lassen sich dadurch leichter aus-
tauschen, und die Bash bleibt ein relativ schlankes Programm, das nicht allzuviel
Speicher benötigt. Die Bash sucht nach externen Programmen in den Verzeichnis-
sen, die in der Variablen PATH aufgeführt sind (siehe Abschnitt 2.7.5 Variable auf
Seite 75).
Interne oder eingebaute Kommandos werden von der Bash eigenhändig ausge-
führt. Nachdem ein Kommando eingegeben wurde, wird überprüft, ob es sich um ein
eingebautes handelt. Falls ja, führt die Shell es selbst aus. Wenn nicht, sieht sie nach,
60 2 Linux/UNIX

ob es ein Programm mit dem Namen des Kommandos gibt, und führt es aus. Inter-
ne Kommandos werden dort benötigt, wo die Eigenschaften des Prozesses der Bash
selbst verändert werden sollen, beispielsweise beim Wechsel des Arbeitsverzeichnis-
ses mittels cd oder beim Ändern von Umgebungsvariablen mittels export. Viele
interne Kommandos dienen auch der Ablaufsteuerung von Shellskripten oder wurden
eingebaut, weil sie schneller auszuführen sind als externe Programme. Manche Kom-
mandos kommen sowohl als interne wie als externe Kommandos vor, beispielsweise
echo. Eingebaute Kommandos haben keine eigene Manualseite, sondern werden
auf der Manualseite der Shell erläutert.
Ein weiteres Beispiel eines internen Kommandos ist alias. Es definiert neue
Kommandos auf Basis bereits bekannter Kommandos. Angenommen, Sie wollten
das Kommando ls immer mit der Option - -color=auto aufrufen, so geben Sie
folgendes Kommando ein:
joe@debian:~$ alias ls="ls - -color=auto"
Das Kommando weist die Bash an, immer dann, wenn das Kommando ls einge-
geben wird, das Kommando ls - -color=auto zu verwenden. Das originale
Kommando ls erreichen Sie nur noch über seinen absoluten Pfad /bin/ls. Ein
weiterer, oft benutzter Aliasname ist folgender:
joe@debian:~$ alias ll="ls -l"
oder noch kürzer:
joe@debian:~$ alias l="ls -l"
Auf diese Weise kann man seinen Lieblingskommandos kurze Namen verpassen,
aber bitte vorher prüfen, ob der Aliasname nicht schon belegt ist. Ein Alias bleibt nur
so lange gültig, wie die Bash läuft, in der er eingegeben wurde. Alias-Anweisungen,
die immer gültig sein sollen, müssen deswegen in eine der Startdateien der Bash (ge-
wöhnlich /etc/bash.bashrc oder \$HOME/.bashrc) geschrieben werden,
damit sie jedesmal beim Start der Bash ausgeführt werden und für die gesamte Sit-
zung zur Verfügung stehen.
Gibt man nach einem Alias in der Kommandozeile eine Option oder ein Argu-
ment an, so macht man sich die Wirkung klar, indem man das Alias buchstäblich
durch seine Definition ersetzt. Ist das Alias eine Pipe, werden Option oder Argument
dem letzten Glied übergeben. Das ist nicht immer das Gewollte.

Benutzung

Im einfachsten Fall wird der Name eines Programms eingegeben und die <cr>-
Taste gedrückt, woraufhin die Bash das betreffende Programm startet. Weil viele
Programme eine Reihe von Parametern erwarten, ist es in der Bash möglich, sol-
che Parameter anzugeben. Sie werden durch ein oder mehrere Leerzeichen von dem
Programmnamen und von anderen Parametern getrennt. Die Benutzung der Bash ist
hängt hauptsächlich ab von der Konfiguration der Bibliothek libreadline, die
auch die beiden im Folgenden erläuterten Eigenschaften zur Verfügung stellt. Die
2.7 Kommandointerpreter (Bash) 61

Bash bietet verschiedene Mechanismen zum Editieren der Kommandozeile. Einige


diesbezügliche Tastenkommandos finden Sie in Tabelle 2.1 auf Seite 53.

Vervollständigung

Eine Funktion der Bibliothek ist die Kommandovervollständigung. Sie spart zum
einen viel Tipparbeit und schützt zum anderen vor Schreibfehlern. Mit der Komman-
dovervollständigung reicht es, einige Anfangsbuchstaben eines Kommandos oder ei-
nes Dateinamens einzugeben. Wenn danach die Taste <tab> gedrückt wird, schaut
die Bash nach, welche Kommandos oder Dateinamen mit diesen Buchstaben anfan-
gen. Es gibt dann drei Möglichkeiten:
1. Nur ein einziges Kommando oder Argument fängt mit diesen Buchstaben an.
In diesem Fall wird der Aufruf automatisch vervollständigt, sodass Sie nicht
weiterzuschreiben brauchen.
2. Es gibt mehrere Kommandos oder Dateien, die mit den eingegebenen Zeichen
anfangen. Je nach Einstellung durch die Datei .inputrc werden dann sofort
oder nach einer zweiten Betätigung der <tab>-Taste die verfügbaren Komman-
dos oder Dateien angezeigt. Gewöhnlich reicht es in einem solchen Fall aus,
wenige weitere Buchstaben einzugeben, bis das Kommando oder der Dateiname
eindeutig ist, und dann wieder <tab> zu drücken, um das Wort zu vervollstän-
digen.
3. Es gibt kein Kommando oder Dateinamen mit den eingegebenen Zeichen am
Anfang. Ein Warnton erschallt.
Legt man beispielweise bei einem Textprojekt zahlreiche Dateien in einem Verzeich-
nis an, dann sollen die Dateinamen aussagekräftig sein, was eine gewisse Länge
erfordert. Achtet man darauf, dass sich alle Dateinamen schon in den ersten drei
Zeichen unterscheiden, ist man dank der Vervollständigung des Eintippens langer
Namen enthoben. Eine Alternative wäre das Anlegen kurzer Symlinks auf die lan-
gen Namen, aber das ist nicht so elegant und bläht das Verzeichnis auf.
Die Bash erkennt, wann sie nach einem Programm- und wann nach einem Da-
teinamen suchen muss. Am Anfang einer Zeile steht immer ein Kommando. Als
Argument werden Kommandos nur selten, Dateinamen aber oft übergeben. Neben
Programm- und Dateinamen können auch Rechnernamen (nach einem @-Zeichen),
Benutzernamen (nach einer Tilde) und Variablennamen (nach einem $-Zeichen) er-
gänzt werden. Die Schreibweise ./datei versteht die Vervollständigung nicht, das
übersteigt ihren Horizont.
Falls Sie nur die Anfangsbuchstaben einer Datei kennen, können Sie diese ein-
fach eingeben, ein oder zweimal <tab> drücken, die möglichen Vervollständigun-
gen betrachten und dann einige weitere Buchstaben eingeben und wieder <tab>
drücken. Wenn Sie die Eingabe eines Kommandos oder eines Dateinamens immer
mit der <tab>-Taste überprüfen, kommt es nicht vor, dass Sie eine Fehlermeldung
aufgrund eines nicht gefundenen Kommandos oder einer nicht gefundenen Datei er-
halten.
62 2 Linux/UNIX

Kommandogeschichte (History)

Die Bash speichert die eingegebenen Kommandos in der Datei .bash\_history


im Home-Verzeichnis. Auf diese Weise stehen sie auch dann noch zur Verfügung,
wenn Sie sich zwischendurch abgemeldet oder den Rechner ausgeschaltet haben.
Mit Hilfe der Datei lässt sich ermitteln, was Sie als letztes auf dem Rechner ge-
macht haben. Falls Sie aus Gründen der Sicherheit dieses Verhalten nicht wünschen,
löschen Sie beim Abmelden die History, wozu sich die Datei .bash\_logout
anbietet.
Die wichtigsten Kommandos zur Benutzung der Kommandogeschichte sind die
Pfeiltasten <up> und <down>. Mittels <up> erscheinen die zuletzt eingegebe-
nen Kommandos, mit <down> geht es zurück in die Gegenwart. Die Kommando-
geschichte lässt sich durchsuchen. Angenommen, Sie haben irgendwann folgendes
Kommando eingegeben:
joe@debian:~$ find / -xdev -nouser -print | less
Hundert Kommandos später wollen Sie das Kommando erneut eingeben. Da-
zu benutzen Sie die Funktion backward-search-history der Biblio-
thek libreadline. Die Funktion ist als Vorgabe mit der Tastenkombination
<ctrl>+<r> verbunden; im Beispiel oben wurde sie auf die Funktionstaste <F1>
gelegt. Sie betätigen die Taste, es erscheint folgende Zeile:
(reverse-i-search)‘’:
Nun fangen Sie an, Ihr Kommando wieder einzugeben. Mit jedem Zeichen erscheint
das jüngste Kommando, das mit den bislang eingegebenen Zeichen anfängt, bis nach
wenigen Eingaben das gewünschte Kommando gefunden ist:
(reverse-i-search) ‘find /’: find / -xdev -nouser
-print | less
Dann drücken Sie nur noch <cr>, und das Kommando wird ausgeführt.

Standardein- und -ausgabe, Standardfehlerausgabe, Umleitung

Programme für grafische Benutzeroberflächen fragen den Benutzer oft, mit welcher
Datei gearbeitet werden soll und in welche Datei die Arbeitsergebnisse geschrieben
werden sollen. Dies beherrschen Programme für die Kommandozeile auch. Unter
Linux und anderen Betriebssystemen stehen Programmen vom Anfang der Termi-
nalsitzung an drei formale Dateien zur Verfügung, aus denen sie lesen bzw. in die sie
schreiben, ohne sie eigens zu öffnen. Diese Dateien bezeichnet man als Standardein-
gabe (stdin, E: standard input, F: entrée standard), Standardausgabe (stdout, E:
standard output, F: sortie standard) und Standardfehlerausgabe (stderr, E: stan-
dard error output, F: sortie standard d’erreur). Die Standardausgabe ist die Datei,
in die Programme schreiben. Sie ist als Vorgabe mit dem Bildschirm des Termi-
nals verbunden, von dem das Programm gestartet wird (Kontrollterminal). Wenn ein
Programm auf die Standardausgabe schreibt, erscheint das Geschriebene auf dem
2.7 Kommandointerpreter (Bash) 63

Bildschirm. Dasselbe gilt für die Standardfehlerausgabe. Auch sie ist normalerweise
mit dem Bildschirm verbunden. Zwischen den beiden Kanälen wird unterschieden,
um Ergebnisse und Fehlermeldungen voneinander zu trennen.

Tab. 2.2: Standarddateien

Name Datei Deskriptor Gerät

Standardeingabe stdin 0 Tastatur


Standardausgabe stdout 1 Bildschirm
Standardfehlerausgabe stderr 2 Bildschirm

Die Standardeingabe ist mit der Tastatur des Terminals verbunden, in dem das
Programm läuft. Von ihr wird gelesen. Wenn ein Programm Daten liest oder Benut-
zerantworten entgegennimmt, dann macht es das über die Standardeingabe. Alles,
was Sie in ein Terminal eingeben, wird von dem Programm gelesen, dessen Kon-
trollterminal es ist. Nach dem Start der Bash ist dies die Bash. Sie liest alle Eingaben
von der Standardeingabe. Wie jede Datei kann auch die Standardeingabe ein Ende
haben. Solange sie mit einem Terminal verbunden ist, beenden Sie die Standardein-
gabe, indem Sie die Tastenkombination <ctrl>+<d> drücken (üblich, aber mittels
stty konfigurierbar). Andere Betriebssysteme kennen noch die Dateien stdaux
(Standard Auxiliary Device) und stdprn (Standard Printer Device). Braucht Li-
nux/UNIX nicht.
Wenn ein Kommando ausgeführt wird, erscheint seine Ausgabe auf dem Bild-
schirm des Terminals, von dem er gestartet wurde. Manchmal möchte man die Aus-
gabe statt auf den Bildschirm in eine Datei schreiben. Nehmen wir an, Sie schreiben
einen längeren Text. Sie möchten jeden Abend festhalten, wie groß Ihre Datei ist,
um den Fortgang der Arbeit zu überwachen. Dazu dient das Kommando:
joe@debian:~$ ls -l diplom
Um zu ereichen, dass die Ausgabe von ls gleich in einer Datei landet, erweitern wir
das Kommando:
joe@debian:~$ ls -l diplom > fortschritt
Das Zeichen > bewirkt, dass die Ausgabe statt auf den Bildschirm in die Datei
fortschritt geschrieben wird. Die Datei wird jedesmal von vorn beschrieben,
der vorhergehende Inhalt geht verloren. Da wir aber den Fortschritt über der Zeit
verfolgen wollen, verwenden wir ein geringfügig anderes Kommando:
joe@debian:~$ ls -l diplom > > fortschritt
Das Zeichenpaar >> bewirkt, dass die Ausgabe des Kommandos an den bereits vor-
handenen Inhalt der dahinter bezeichneten Datei angehängt wird. Sie wird nicht
überschrieben, sondern fortgeschrieben. Wenn die Datei vorher noch nicht vorhan-
den war, wird sie auch mit diesem Kommando erzeugt. Der von der Shell geleistete
Mechanismus wird Umleitung (E, F: redirection) genannt.
64 2 Linux/UNIX

Geöffnete Dateien werden außer über ihren Namen (Dateipointer) auch über
einen Deskriptor (Index, Handle) angesprochen. Da es sich bei Standardein- und
-ausgabe sowie bei der Standardfehlerausgabe um geöffnete Dateien handelt, ist dies
auch hier der Fall. Der Deskriptor für die Standardeingabe hat die Nummer 0, der De-
skriptor für die Standardausgabe die Nummer 1 und der für die Standardfehleraus-
gabe die Nummer 2. Für Programmierer: Systemaufrufe verwenden Deskriptoren,
C-Standardfunktionen Dateipointer, das sind Pointer (Adressvariable) auf Strukturen
vom Typ FILE. Vom Anwendungsprogramm geöffnete Dateien erhalten Deskripto-
ren von 3 an aufwärts.
Die Deskriptoren lassen sich mit den Operatoren > und < mit anderen Dateien
als dem Terminal verbinden. Obiges Kommando:
joe@debian:~$ ls -l diplom > fortschritt
ist insofern eine Abkürzung für das Kommando:
joe@debian:~$ ls -l diplom 1> fortschritt
weil hier der Deskriptor 1 (Standardausgabe) mit der Datei fortschritt verbun-
den wird.
Ebenso funktioniert die Umleitung mit der Standardfehlerausgabe. Das Pro-
gramm ls erzeugt eine Fehlermeldung, wenn es Daten über eine Datei anzeigen
soll, die es nicht gibt. Die Fehlermeldung wird auf die Standardfehlerausgabe ge-
schrieben. Vorausgesetzt die Datei titel existiert nicht, dann gibt das folgende
Kommando nur eine Fehlermeldung aus:
joe@debian:~$ ls -l diplom titel 1> fortschritt
Die reguläre Ausgabe von ls wird wieder in die Datei fortschritt geschrieben,
die Fehlermeldung erscheint auf dem Bildschirm. Wenn auch Fehlermeldungen in
eine Datei umgeleitet werden sollen, ist folgendes Kommando einzugeben:
joe@debian:~$ ls -l diplom titel 1> fortschritt 2>
fehler
Mit dem Kommando werden die Fehlermeldungen (Deskriptor 2, Standardfehleraus-
gabe) in die Datei fehler umgeleitet.
Die Trennung zwischen Standardausgabe und Standardfehlerausgabe ist vor al-
lem dann hilfreich, wenn die Ausgabe eines Programmes von anderen Programmen
weiterverarbeitet werden soll. Die Ausgabe des obigen Kommandos könnte folgen-
dermaßen aussehen:
-rw-r--r-- 1 joe joe 431559 Jul 16 23:20 diplom
Weil Sie nur die Größe der Datei und nicht die anderen Daten protokollieren
wollen, schneiden Sie diesen Wert mit dem Kommando cut aus:
joe@debian:~$ cut -c 34-41 protokoll
Dann leiten Sie die Ausgabe des Kommandos in eine neue Datei um:
2.7 Kommandointerpreter (Bash) 65

joe@debian:~$ cut -c 34-41 protokoll > groesse


Was würde passieren, wenn in der Datei protokoll auch etwaige Fehlermeldun-
gen enthalten wären? Die cut-Kommandos würden nicht die Dateigröße, sondern
irgendeine sinnlose Zeichenkette aus der Fehlermeldung herausschneiden.
Durch die Trennung der beiden Kanäle ist es auch möglich, nur die Fehler eines
Programms zu beobachten. Ein Programm könnte jede Nacht prüfen, ob die Größen
und Rechte wichtiger Dateien noch stimmen oder – vielleicht von einem Eindring-
ling – geändert worden sind. Die Daten würde es dann in Protokolldateien schreiben,
die normalerweise niemanden interessieren. Nur wenn es wirklich eine Abweichung
findet, würde es eine Mitteilung auf die Standardfehlerausgabe geben, die man in
eine Datei umleiten und an den Verwalter schicken könnte.
Falls Standardausgabe und Standardfehlerausgabe doch zusammen in eine Datei
umgeleitet werden sollen, dient hierzu der Operator &. Er verbindet zwei Deskripto-
ren miteinander. So führt das Kommando:
joe@debian:~$ ls -l diplom titelblatt 1 > protokoll 2>&1
dazu, dass sowohl die Ausgabe des Kommandos ls als auch die Fehlermeldungen
in der Datei protokoll gespeichert werden (Deskriptor 2 wird mit Deskriptor 1
verbunden). Das Kommando lässt sich abkürzen:
joe@debian:~$ ls -l diplom titelblatt &> protokoll
Gelegentlich bietet sich zur Ausgabeumleitung die Datei /dev/null an. Die
Gerätedatei stellt den Mülleimer (bit bucket) des Systems dar, das Schwarze Loch
im Datenraum. Alle Daten, die nach /dev/null geschrieben werden, gehen sofort
unrettbar verloren. Möchte man die Fehlerausgabe eines Programms unterdrücken,
leitet man die Standardfehlerausgabe auf /dev/null um. Dies geschieht in unse-
rem Beispiel mit folgendem Kommando:
joe@debian:~$ ls -l diplom titelblatt > protokoll 2 >
/dev/null
Lesen aus /dev/null liefert ein End-of-File-Zeichen (EOF) zurück.
Etwas anders funktioniert die Umleitung der Standardeingabe. Hier wird der
Operator < benutzt. Das Programm cut, das wir eben benutzt haben, liest normaler-
weise von der Standardeingabe, wenn es nicht den Namen einer Datei als Argument
übergeben bekommt. So hätte man an Stelle von:
joe@debian:~$ cut -c 34-41 protokoll > groesse
auch Folgendes schreiben können:
joe@debian:~$ cut -c 34-41 < protokoll > groesse
Hierdurch wird die Standardeingabe aus der Datei protokoll gelesen, nicht von
der Tastatur.
Wird das Kommando ohne Umleitung der Standardeingabe eingegeben, so wartet
es darauf, dass Eingaben vom Benutzer am Terminal vorgenommen werden. Diese
werden mit der Tastenkombination <ctrl>+<d> (EOF) beendet. Wenn der letzte
66 2 Linux/UNIX

Teil (> groesse) weggelassen wird, erscheint das Ergebnis wieder auf der Stan-
dardausgabe.

Here Documents

Vorwiegend in Shellskripten möchte man Text oder Daten, die von einem Pro-
gramm gelesen werden sollen, nicht aus einer Datei lesen lassen, sondern direkt im
Skript oder in der Kommandozeile angeben. Diesem Zweck dient der Operator <<
Zeichenkette. Es werden dann alle nachfolgenden Zeilen als Standardeingabe
benutzt, bis die mit Zeichenkette angegebene Zeichenkette als einzige in einer
Zeile vorkommt:
#!/bin/bash
cat << EOF
Das Skript gibt den hier angegebenen Text aus,
bis die Zeichenkette EOF allein in einer Zeile
steht. Es hätte auch jede andere Zeichenkette
verwendet werden können. EOF wird aber oft
benutzt, weil das für End-Of-File steht und
die Zeichenkette das Ende von stdin anzeigt.
EOF
Hier liest das Programm cat den Text zwischen der zweiten Zeile und der EOF-Zeile
und gibt ihn auf die Standardausgabe aus. Dieses Verfahren wird in Skripten oft be-
nutzt, um längere Ausgaben, beispielsweise Erläuterungen oder Hilfetexte, einfach
zu formulieren. Der von den beiden EOF-Marken eingerahmte Text wird als Here
Document bezeichnet und kann mit anderem Inhalt auch von weiteren Programmen
benutzt werden, die eine kurze, feststehende Eingabe von der Standardeingabe benö-
tigen (URLs, Telefonnummern, Benutzernamen, nur ungern Passwörter in Klartext).

Kommandoverkettung (Pipe)

Im obigen Beispiel ist es lästig, dass zwei Kommandos hintereinander eingegeben


werden müssen. Außerdem stört es, dass zwischendurch eine Datei angelegt wird,
die keine interessierenden Daten enthält. Mit dem Operator | (senkrechter Strich, E:
vertical bar, F: barre verticale) verbindet man die Standardausgabe eines Programms
mit der Standardeingabe eines zweiten Programms, ohne Zwischendateien zu benut-
zen. Das sieht so aus:
joe@debian:~$ ls -l diplom | cut -c 34-41 >> groesse
Hier wird die Ausgabe des Kommandos ls -l mit der Eingabe des Kommandos
cut verbunden, und die Ausgabe von cut wird an die Datei groesse angehängt.
Eine solche Konstruktion bezeichnet man als Pipe (Röhre, Pipeline, Fließband, E: pi-
pe, F: tube). Pipes können von Programmen ähnlich wie Dateien benutzt werden. Es
werden auf der einen Seite Daten in sie hineingeschrieben und auf der anderen Seite
2.7 Kommandointerpreter (Bash) 67

aus ihnen gelesen. Mit dem Kommando mkfifo ist es sogar möglich, im Dateisys-
tem Pipes mit eigenem Namen zu erzeugen, die man wie Dateien benutzen kann.
Eine solche benannte Pipe ist nach Gebrauch ausdrücklich zu löschen.
Die Verkettung von Kommandos ist ein wichtiges Instrument. So gibt es eine
ganze Reihe kleiner, spezialisierter Werkzeuge, die erst dann sinnvoll genutzt wer-
den können, wenn sie durch Pipes mit anderen Programmen verkettet werden. Mit
solchen Pipes erhält man Kommandos, die auf die betreffende Aufgabenstellung zu-
geschnitten sind.
Ein Beispiel dafür ist die Konvertierung von DOS-Textdateien für die Be-
nutzung unter Linux/UNIX. Unter DOS und MS Windows werden Zeilenenden
in Textdateien durch ein Wagenrücklaufzeichen (CR, Carriage Return) und ein
Zeilenvorschub-Zeichen (LF, Line Feed) kodiert, wohingegen unter Linux/UNIX das
Zeilenvorschub-Zeichen (LF) allein ein Zeilenende markiert. Um eine unter DOS er-
stellte Textdatei unter Linux/UNIX lesen zu können, müssen die CR-LF-Paare in
LF-Zeichen umgewandelt werden. Dies geschieht mit dem Programm fromdos
aus dem Debian-Paket sysutils. Weiter wird unter DOS oft ein anderer Zeichensatz
benutzt als unter Linux/UNIX. Die Zeichensatztabelle beschreibt, welches Zeichen
durch welche Zahl repräsentiert wird. Das führt dazu, dass beispielsweise deutsche
Umlaute in solchen Dateien unter Linux/UNIX nicht zu lesen sind, wenn diese nicht
an die richtige Zeichensatztabelle angepasst werden. Dies geschieht mit dem Pro-
gramm recode. Angenommen, Sie haben die Textdatei diplom unter DOS er-
stellt und wollen Sie nun unter Linux weiterbearbeiten. Dann geben Sie folgendes
Kommando ein, um gleichzeitig die Konvertierung der Zeilenenden und die Konver-
tierung von einer Zeichensatztabelle in eine andere durchzuführen:
joe@debian:~$ cat diplom | fromdos | recode
cp850/..latin1 > diplom_linux
Das Kommando cat schreibt den Inhalt der Datei diplom auf die Standardaus-
gabe, die mit der Standardeingabe des Kommandos fromdos verbunden wird.
Das Programm konvertiert die Zeilenenden und gibt das Ergebnis wiederum auf
die Standardausgabe, die von recode als Standardeingabe gelesen wird. Das Pro-
gramm recode konvertiert nun die Zeichen in der Datei ausgehend von der DOS-
Zeichensatztabelle (code page) cp850 in die unter Linux/UNIX übliche Zeichen-
satztabelle latin1. Die Standardausgabe von recode wird schließlich in die Da-
tei diplom_linux umgeleitet, die hinterher die Linux-Version des Textes enthält.
Wenn Sie die Datei später wieder unter DOS bearbeiten möchten, drehen Sie die
Pipe um:
joe@debian:~$ cat diplom_linux | recode latin1..cp850/ |
todos > diplom_dos
Hier wird das Kommando todos benutzt, um die Zeilenenden in das DOS-Format
zu bringen6 . Pipes sind ein Weg der Inter Process Communication.

6
Die Dateikonvertierungen können auch von dem Programm recode allein geleistet wer-
den. Sie dienen hier nur der Beschreibung von Pipes.
68 2 Linux/UNIX

2.7.3 Auftragsverwaltung (Jobverwaltung) und Prozessverwaltung

Unter Linux/UNIX ist es möglich, zeitgleich mehrere Prozesse auszuführen (Mul-


titasking). Diese Fähigkeit des Betriebssystems wird von der Bash auf vielfältige
Weise unterstützt. Ein Prozess ist die Form, in der ein Programm ausgeführt wird. Er
liegt im Arbeitsspeicher, besteht aus einer Kopie des auszuführenden Programms so-
wie Daten und fordert vom Zentralprozessor Rechenzeit an. Jeder Prozess auf einer
Maschine hat eine eindeutige Nummer, die Prozess-ID, die man mittels ps erfährt.
Nach dem Start der Bash sind Standardein- und -ausgabe der Bash mit dem Ter-
minal verbunden, von dem sie gestartet wurde (Kontrollterminal). Alles, was Sie auf
der Tastatur eingeben, geht an die Bash und alles, was die Bash ausgibt, geht auf den
zugehörigen Bildschirm. Wenn Sie in der Bash ein anderes Programm aufrufen, dann
werden Standardein- und -ausgabe mit diesem Programm verbunden. Angenommen,
Sie rufen von der Bash aus den Texteditor vi auf. Jeder Tastenanschlag dient nun
der Benutzung von vi und nicht mehr der Bash. Erst wenn der Editor beendet ist,
kommt die Bash wieder an der Reihe.

Der &-Operator

Ein Beispiel: Sie möchten eine Datei anlegen, in der die Namen aller Dateien auf dem
System stehen, die Ihnen gehören. Dies bewerkstelligen Sie mit dem Kommando
find. Das Kommando:
joe@debian:~$ find / -user kurt
gibt die Namen aller Dateien auf dem System aus, die dem Benutzer kurt gehören.
Das Kommando:
joe@debian:~$ find / -user kurt &> kurts_dateien
schreibt die normale Ausgabe sowie die Fehlerausgabe des Kommandos in die Datei
kurts_dateien. Wenn Sie das Kommando ausprobieren, sehen und hören Sie,
dass es dauert, bis das gesamte Dateisystem durchsucht worden ist. Währenddessen
ist das Kontrollterminal blockiert, weil die Bash wartet, bis das Kommando beendet
ist. Man sagt auch, der Prozess laufe im Vordergrund oder synchron ab.
Durch den Operator & (et-Zeichen, E: ampersand , F: esperluette) ist es möglich,
Prozesse in den Hintergrund zu stellen. Wenn Sie das obige Kommando folgender-
maßen eingeben, können Sie sofort mit der Bash weiterarbeiten:
joe@debian:~$ find / -user kurt &> kurts_dateien &
Nach der Eingabe des Kommandos liefert die Bash zwei Zahlen zurück:
[1] 3642
Die erste Zahl (in eckigen Klammern) ist die Auftrags- oder Jobnummer des Pro-
zesses, den Sie in den Hintergrund gestellt haben. Die zweite Zahl ist die Prozess-
nummer des dazugehörigen Prozesses. Dazu muss man wissen, dass jeder Prozess
2.7 Kommandointerpreter (Bash) 69

vom System eine eindeutige Prozessnummer erhält, über die er angesprochen wer-
den kann. Die Prozessnummer wird auch Prozess-ID (PID) genannt.
Wenn ein im Hintergrund ablaufender Prozess beendet wird, teilt die Bash dies
ebenfalls mit. Sie erhalten eine der folgenden Ausgaben:
[1]- Done find / -user kurt &> kurts_dateien
[1] Exit 1 find / -user kurt &> kurts_dateien
[1]- Terminated find / -user kurt &> kurts_dateien
[1]- Killed find / -user kurt &> kurts_dateien
Im ersten Fall wurde der Prozess normal beendet (Done). Im zweiten Fall wurde der
Prozess beendet und hat einen Rückgabewert geliefert, der von 0 abweicht. Damit
zeigen Prozesse an, dass Fehler aufgetreten sind. Im Fall des find-Kommandos
kann dies daran liegen, dass find versucht hat, Verzeichnisse zu durchsuchen,
für die es keine Leseberechtigung hat. Die letzten beiden Ausgaben erscheinen,
wenn der Prozess von außen durch ein Signal beendet wurde. Die Mitteilung
Terminated bedeutet, dass ein anderer Prozess diesen Prozess aufgefordert hat,
sich zu beenden, und Killed bedeutet, dass ein anderer Prozess diesen Prozess ge-
waltsam beendet hat, ohne ihm die Chance zu geben, sich selbst zu beenden (siehe
kill).
Solche Meldungen erscheinen erst dann, wenn die Eingabe einer Kommandozei-
le abgeschlossen ist. Der Grund ist, dass man beim Eingeben von Kommandos nicht
gestört werden möchte. Wenn Sie wissen wollen, ob es irgendwelche Meldungen
gab, schicken Sie einfach eine leere Kommandozeile ab, indem Sie die Taste <cr>
drücken.

Umschalten zwischen Prozessen


Gelegentlich möchte man einen Prozess zunächst im Vordergrund starten und dann
für eine Weile in den Hintergrund stellen, um etwas anderes zu erledigen, ohne den
Prozess zu beenden. Ein Beispiel dafür ist die Arbeit mit Editoren. Wenn Sie mit dem
vi eine Datei bearbeiten und zwischendurch kurz etwas nachsehen wollen, müssten
Sie Ihre Datei speichern, den Editor beenden, dann nachsehen, was Sie wissen wol-
len, und hinterher den Editor wieder starten. Beim Arbeiten in mehreren Fenstern
oder mit mehreren Desktöppen geht das natürlich eleganter, aber wenn man nur ein
Terminal hat, müsste man so vorgehen. Die großen Editoren kennen das Problem
und bieten einen Weg, um vorübergehend eine Shell aufzurufen (aus-shellen), ohne
den Editor zu unterbrechen.
Mit der Tastenkombination <ctrl>+<z> halten Sie einen Prozess, der im Vor-
dergrund ausgeführt wird, an und stellen ihn in den Hintergrund (suspendieren). Sie
erhalten den Prompt der Bash und können andere Dinge tun, bis Sie den Prozess wie-
der in den Vordergrund holen. Der Vorgang unterscheidet sich vom Starten eines Pro-
zesses im Hintergrund dadurch, dass der betreffende Prozess durch <ctrl>+<z>
angehalten wird. Wenn Sie das oben aufgeführte Kommando nochmals ohne &-
Operator aufrufen:
70 2 Linux/UNIX

joe@debian:~$ find / -user kurt &> kurts_dateien


und danach <ctrl>+<z> drücken, erhalten Sie folgende Meldung:
[1]+ Stopped find / -user kurt &>
Die Bash teilt mit, dass der Prozess angehalten ist. An der ausbleibenden Festplat-
tenaktivität merken Sie auch, dass das Kommando nicht mehr ausgeführt wird. Es
besteht nun die Möglichkeit, den Prozess entweder im Hintergrund wie mit & weiter
auszuführen oder ihn wieder in den Vordergrund zu holen. Selbstverständlich kann
er auch erstmal im Hintergrund verbleiben.
Um einen Auftrag in den Hintergrund zu stellen, ist folgendes Kommando ein-
zugeben:
joe@debian:~$ bg [Jobnummer]
Das Wort bg steht für Background. Die optional anzugebende Jobnummer bezeich-
net die Auftragsnummer des Prozesses, der in den Hintergrund gestellt werden soll.
Wird sie nicht angegeben, dann wird der zuletzt angehaltene Prozess in den Hinter-
grund gestellt. Im Beispiel ist folgendes Kommando einzugeben:
joe@debian:~$ bg %1
Als Argument erwartet bg entweder eine Prozess-ID ohne oder eine Jobnummer mit
vorangestelltem Prozentzeichen. Statt der Jobnummer darf der Jobname verwendet
werden. Es erscheint eine Bestätigung, dass der Prozess im Hintergrund weiter aus-
geführt wird:
[1]+ find / -user kurt &> kurts_dateien &
An der wieder einsetzenden Festplattenaktivität ist zu hören, dass der Prozess das
Dateisystem weiter durchsucht.
Mit dem Kommando fg (foreground) wird ein Prozess wieder in den Vorder-
grund geholt. Der Aufruf lautet:
joe@debian:~$ fg [Jobnummer]
Auch hier ist die Angabe der Jobnummer optional. Wird sie nicht angegeben, dann
wird der zuletzt angehaltene oder in den Hintergrund gestellte Prozess in den Vor-
dergrund geholt. Um den find-Prozess wieder in den Vordergrund zu bringen, ist
folgendes Kommando einzugeben:
joe@debian:~$ fg %1
Die Bash bestätigt das Kommando dadurch, dass sie das Kommando anzeigt, wel-
ches wieder im Vordergrund ausgeführt wird:
find / -user kurt &> kurts_dateien
Wird eine Datei mit dem Editor vi bearbeitet und soll der Editor kurzzeitig in
den Hintergrund gestellt werden, um etwas anderes zu tun, so ist während der Arbeit
<ctrl>+<z> zu drücken, und es erscheint der Prompt der Shell. Dann können Sie
andere Tätigkeiten durchführen, beispielsweise mit less der Inhalt einer anderen
2.7 Kommandointerpreter (Bash) 71

Datei betrachten. Ist man damit fertig, gibt man das Kommando fg ein und setzt die
Arbeit mit dem vi fort.
Das Kommando jobs zeigt an, welche Aufträge in dem betreffenden Terminal
gerade ausgeführt werden und welche Jobnummern sie haben. Wenn Sie viele Auf-
träge im Hintergrund laufen haben und die Jobnummer eines Prozesses, den Sie in
den Vordergrund schalten wollen, nicht mehr wissen, benutzen Sie dieses Komman-
do, um die Jobnummer zu ermitteln.

Beenden von Prozessen

Manchmal soll ein Prozess von außen beendet werden. Dafür kann es verschiedene
Gründe geben. Man hat ein Kommando falsch geschrieben und möchte nicht abwar-
ten, bis es vollständig ausgeführt ist, ein Programm tut etwas, was es nicht soll, und
muss beendet werden, oder ein Programm soll neu gestartet werden, damit es sei-
ne Konfigurationsdateien erneut liest usw. Der Verwalter muss auch dann und wann
einen Benutzerprozess beenden, der nicht freiwillig Feierabend macht.
In der Regel können Prozesse, die im Vordergrund ausgeführt werden, durch die
Tastenkombination <ctrl>+<c> gestoppt werden. Ob das betreffende Programm
dann wirklich Schluss macht, hängt davon ab, wie es programmiert wurde. Das Be-
enden von Prozessen erfolgt durch Senden eines Signals an den Prozess. Programme
entscheiden selbst, was zu tun ist, wenn sie ein bestimmtes Signal empfangen. Über
diesen Mechanismus kann ein Programm, das ein Signal zu seiner Beendigung er-
halten hat, noch aufräumen, beispielsweise Daten sichern oder temporäre Dateien
löschen, bevor es sich verabschiedet.
Eine Ausnahme stellt das Signal 9 (SIGKILL) dar, das von keinem Prozess ab-
gefangen werden kann und sofort zur Beendigung des Prozesses führt. Sie sollten
das Signal nur dann verwenden, wenn Sie einen Prozess beenden müssen, der sich
widerborstig zeigt und auf keine andere Weise beenden lässt.
Um ein Signal an einen Prozess zu senden, wird das eingebaute Kommando
kill oder das externe Kommando /bin/kill benutzt. Das Kommando sendet
als Vorgabe das Signal 15 (SIGTERM) an Prozesse. Das Signal führt – ähnlich wie
das durch die Tastenkombination <ctrl>+<c> erzeugte Signal 2 (SIGINT) – zur
sanften Beendigung eines Prozesses. Die Syntax von kill lautet:
kill [-Signal] Prozess-ID | %Jobnummer [Prozess-ID |
%Jobnummer ...]
Dem Kommando kann mit Signal die Nummer oder der Name eines Signals über-
geben werden. Eine solche Angabe wird mit einem Minuszeichen eingeleitet. An-
schließend wird ihm mit Prozess-ID oder Jobnummer die Prozess-ID oder Job-
nummer des Prozesses übergeben, an den das Signal gesendet werden soll. Wenn ei-
ne Jobnummer angegeben wird, wird dieser ein Prozentzeichen vorangestellt, damit
sie von Prozess-IDs unterschieden werden kann. Es können auch Prozess-IDs oder
Jobnummern mehrerer Prozesse angegeben werden. Sie erhalten dann alle dasselbe
Signal.
72 2 Linux/UNIX

Um den Job mit der Nummer 1 zu beenden, ist folgendes Kommando einzuge-
ben:
joe@debian:~$ kill %1
Um den Prozess mit der PID 2467 zu beenden, ist folgendes einzugeben:
joe@debian:~$ kill 2467
Und um denselben Prozess brutal zu beenden, ohne ihm Chancen zum Aufräumen
zu gewähren, ist folgendes Kommando einzugeben:
joe@debian:~$ kill -9 2467
Alternativ könnte man auch schreiben:
joe@debian:~$ kill -SIGKILL 2467
Vorteilhaft bei der Benutzung von Prozess-IDs gegenüber der Benutzung von Job-
nummern ist der Umstand, dass mit ihnen auch Signale an Prozesse geschickt werden
können, die nicht von der Bash kontrolliert werden, mit der gerade gearbeitet wird.
Natürlich ist dabei zu beachten, dass nur solche Prozesse gekillt werden dürfen, die
einem auch gehören, in der Regel solche, die man selbst gestartet hat. Dem System-
verwalter ist es mit kill -9 möglich, fast jeden Prozess auf dem System sofort zu
beenden.
Welche Prozesse auf dem System laufen und wie die zugehörigen Prozess-IDs
lauten, lässt sich mit dem Programm ps herausfinden:
joe@debian:~$ ps -ef | less
Die Option -e (every) sorgt dafür, dass alle Prozesse auf dem System angezeigt
werden, nicht nur die eigenen. Die Option -f (full oder forest) gestaltet die Ausgabe
ausführlicher, sodass sie gerade eine Bildschirmbreite (80 Zeichen) füllt. Weitere
Optionen sowie die Bedeutung der ausgegebenen Spalten erklären das Manual sowie
Abschnitt 2.6 Prozesse auf Seite 41.

2.7.4 Aneinanderreihung von Kommandos

Der Operator ; (Semikolon)

Neben der Verkettung von Kommandos mit dem Pipe-Operator ist es möglich, auch
mehrere unverkettete Kommandos in eine Zeile zu schreiben. So ist es sinnvoll, Kom-
mandos, die immer nacheinander ausgeführt werden sollen, in eine Zeile zu schrei-
ben. Sie stehen dann über die Kommandogeschichte sofort alle zusammen wieder
zur Verfügung und brauchen nicht einzeln herausgefischt zu werden.
In einer Zeile stehende Kommandos werden mit dem Zeichen ; (Semikolon)
voneinander getrennt. Sie werden dann sequentiell (nacheinander) abgearbeitet. Das
heißt, erst wenn das erste Kommando beendet ist, wird das zweite ausgeführt usw.
Dies lässt sich an folgendem Beispiel erklären. Weiter oben sollte mit dem Komman-
do:
2.7 Kommandointerpreter (Bash) 73

joe@debian:~$ ls -l diplom | cut -c 34-41 > > groesse


der Datei groesse die Größe der Datei diplom nach jedem Aufruf des Komman-
dos angehängt werden. Nun wäre es hübsch, nach jedem Aufruf einen Kommentar in
die betreffende Datei zu schreiben. Nach dem Aufruf des obigen Kommandos kann
der Editor vi benutzt werden, um den Kommentar einzutragen:
joe@debian:~$ ls -l diplom | cut -c 34-41 > > groesse;
vi groesse
Diese Formulierung sichert, dass der Editor erst dann gestartet wird, wenn die Aus-
gabe der vorhergehenden Kommandos an die Datei groesse angehängt wurde.
Würde man stattdessen schreiben:
joe@debian:~$ ls -l diplom | cut -c 34-41 > > groesse &
vi groesse
dann würde der Editor fast zeitgleich mit dem vorhergehenden Kommando aufgeru-
fen, und das Ergebnis der Größenbestimmung würde voraussichtlich noch gar nicht
in der Datei zu finden sein.

Bedingte Ausführung mit den Operatoren && und ||

Gelegentlich soll ein Kommando nur dann ausgeführt werden, wenn ein vorherge-
hendes Kommando ein bestimmtes Ergebnis geliefert hat. Dazu muss man wissen,
dass jedes Programm einen Rückgabewert (E: return value, exit status, F: code re-
tour) an die Shell oder einen anderen aufrufenden Prozess liefert, wenn es beendet
wird. Dieser Rückgabewert ist eine ganze Zahl zwischen 0 und 255 einschließlich.
Per Konvention berichtet ein Programm mit dem Rückgabewert 0, dass alles gut ge-
gangen ist und keine Fehler aufgetreten sind. Mit einem von 0 abweichenden Wert
wird angezeigt, dass Fehler aufgetreten sind. Weil es 255 verschiedene Rückgabe-
werte gibt, die einen Fehler anzeigen, besteht die Möglichkeit, über die Rückgabe-
werte auf unterschiedliche Fehler hinzuweisen. So könnte der Rückgabewert 1 Datei
nicht gefunden und der Rückgabewert 2 unbekannte Option angegeben bedeuten.
Hierfür gibt es keine einheitliche Regelung; die Bedeutung eines von 0 abweichen-
den Rückgabewertes ist vom jeweiligen Programm abhängig. Handelt es sich um
Kommandos, findet sich die Bedeutung der Rückgabewerte im Manual.
Der Operator && bewirkt, dass das auf den Operator folgende Kommando nur
dann ausgeführt wird, wenn das davor stehende Kommando den Rückgabewert 0
geliefert hat. Beispielsweise führt das folgende Kommando dazu, dass der Editor vi
nur dann aufgerufen wird, wenn das Programm ls am Anfang der Zeile die Datei
diplom anzeigen konnte:
joe@debian:~$ ls -l diplom >> protokoll && vi protokoll
Im Gegensatz dazu bewirkt der Operator ||, dass das auf ihn folgende Kom-
mando nur ausgeführt wird, wenn das voranstehende Kommando einen von 0 abwei-
chenden Rückgabewert geliefert hat. Im folgenden Beispiel wird der Editor nur dann
aufgerufen, wenn das Kommando ls die Datei diplom nicht anzeigen konnte:
74 2 Linux/UNIX

joe@debian:~$ ls -l diplom >> protokoll || vi protokoll


Auch diese Operatoren führen dazu, dass die angegebenen Kommandos nacheinan-
der abgearbeitet werden. Logischerweise muss der Rückgabewert der Kommandos
vor den Operatoren feststehen, bevor entschieden werden kann, ob die folgenden
Kommandos ausgeführt werden sollen oder nicht. Bei einer Kette von Kommandos
vor dem Operator wird der Rückgabewert des zuletzt ausgeführten Kommandos aus-
gewertet. Das folgende Kommando würde den Editor immer aufrufen, auch wenn
die Datei diplom gar nicht angezeigt werden konnte, weil zwar ls einen von 0
abweichenden Rückgabewert liefert, aber das Programm cut auch dann den Wert 0
zurückgibt, wenn es eine leere Datei bearbeitet:
joe@debian:~$ ls -l diplom | cut -c 34-41 > > groesse &&
vi groesse

Gruppieren von Kommandos

Gelegentlich möchte man eine Gruppe von Kommandos oder Programmen zusam-
menfassen, um sie gemeinsam aus der gleichen Datei lesen zu lassen oder zusammen
in den Hintergrund zu stellen. Hierzu dienen die Operatoren {} und (). Beispiels-
weise bewirkt das Kommando:
joe@debian:~$ ( ls; pwd; whoami ) &
dass die Kommandos ls, pwd und whoami nacheinander im Hintergrund ausge-
führt werden. Das ist wichtig, wenn die Ausgabe dieser Kommandos in eine Datei
umgeleitet werden sollen. Würde man das Kommando:
joe@debian:~$ ls > > datei & pwd > > datei & whoami > >
datei &
eingeben, dann würden die drei Programme unabhängig voneinander nahezu zeit-
gleich gestartet und asynchron ausgeführt werden. Es wäre eine Frage des Zufalls
bzw. des schnellsten Programms, welches Programm zuerst in die Ausgabedatei
datei schreiben würde, und man könnte den Aufbau dieser Datei schlecht vor-
aussagen.
Auf der anderen Seite bewirkt das folgende Kommando, dass die drei Programme
hintereinander ausgeführt werden und deswegen ihre Ausgaben auch hintereinander
in die Ausgabedatei schreiben. Hier steht genau fest, dass zunächst die Ausgabe von
ls, dann die von pwd und zum Schluss die von whoami in der Ausgabedatei landet.
Das Ergebnis kann hinterher ausgewertet werden. Der Operator >> wird nicht benö-
tigt, um die Ausgaben aller Prozesse zu speichern, weil die Bash die in Klammern
zusammengefassten Kommandos als einen einzigen Prozess betrachtet:
joe@debian:~$ ( ls; pwd; whoami ) > datei &
Der ()-Operator bewirkt, dass eine weitere Shell gestartet wird, in der die ange-
gebenen Kommandos ausgeführt werden. Diese weitere Shell lässt sich genauso wie
jeder andere Prozess durch die Login-Shell verwalten, beispielsweise wieder in den
2.7 Kommandointerpreter (Bash) 75

Vordergrund schalten. Letztlich ist es die Ausgabe dieser Shell (in der die angegebe-
nen Kommandos ausgeführt werden), die mit dem Operator > in die Datei datei
umgeleitet wird.
Das Verfahren hat den Nachteil, dass alle Variablen, die durch die geklammerten
Kommandos geändert werden, verloren gehen, weil sie in der neu gestarteten Shell
geändert und gespeichert werden und diese beendet wird, sobald alle darin auszu-
führenden Kommandos abgearbeitet sind. Wenn anstatt der runden Klammern ge-
schweifte Klammern benutzt werden, führt dies dazu, dass die geklammerten Kom-
mandos von derselben Shell ausgeführt werden:
joe@debian:~$ { ls; pwd; whoami; a=17; } > datei
Der Wert der Variablen a bleibt nach Abarbeitung des Kommandos verfügbar. Bei
Verwendung geschweifter Klammern müssen zwischen Klammern und Kommandos
Leerzeichen stehen, und jedes Kommando muss mit einem Semikolon abgeschlossen
sein. Der &-Operator führt auch bei dieser Konstruktion dazu, dass die angegebenen
Kommandos im Hintergrund ausgeführt werden, wodurch Variable verloren gehen.

2.7.5 Variable

Positionsvariable

Die Bash kennt wie andere Shells Variable, manchmal Parameter genannt, deren
Werte Zeichenketten oder Arrays (Felder, Feldvariable) von Zeichenketten sind. Ei-
nige Kommandos fassen die Zeichenketten je nach Zusammenhang auch als nume-
rischen oder logischen Wert auf, ohne Zutun des Benutzers. Es gibt zwei Arten von
Variablen:
• Positionsvariable (Aufrufparameter, Positionsparameter, Parametervariable),
• benannte Variable.
Die benannten Variablen werden weiter unterteilt; wir befassen uns damit noch aus-
führlich.
Positionsvariable werden von der Bash automatisch verwaltet und enthalten In-
formationen aus der Kommandozeile. In der Regel werden sie vom Benutzer und
seinen Programmen nur gelesen. Ihre Bezeichnungen und Bedeutungen sind:
• $0 enthält das erste Glied der Kommandozeile, das heißt das Kommando selbst
ohne Optionen oder Argumente.
• $1 enthält das zweite Glied der Kommandozeile, meist eine Option oder ein
Argument. So geht es weiter bis $9.
• $* (Dollar Stern) enthält die ganze Kommandozeile ohne $0 als eine einzige
Zeichenkette.
• $@ (Dollar Klammeraffe) enthält die ganze Kommandozeile ohne $0, jedes
Glied in einer eigenen Zeichenkette. Dieser Unterschied zu $* spielt gelegentlich
eine Rolle.
• $# (Dollar Doppelkreuz) enthält die Anzahl der Glieder der Kommandozeile
ohne $0.
76 2 Linux/UNIX

• $? (Dollar Fragezeichen) enthält den Rückgabewert (Returnwert, Exit Co-


de/Status) des zuletzt im Vordergrund ausgeführten Kommandos.
• $! (Dollar Ausrufezeichen) enthält die Prozess-ID des jüngsten Hintergrund-
Prozesses.
• $$ (Dollar Dollar) enthält die Prozess-ID der Shell.
Manchmal werden nur die mit Ziffern bezeichneten Parameter als Positionsparame-
ter angesehen, die nachfolgenden als Spezialparameter. Es gibt noch einige Variable
von der Sorte, siehe das Manual zur Bash, Suchwort Positional Parameters. Eine
Kommandozeile kann natürlich mehr als zehn Glieder umfassen. Die Glieder jen-
seits von $9 sind auch zugänglich, aber auf andere Weise. Mit dem Kommando:
joe@debian:~$ shift n
verschiebt man alle Positionsvariablen von $1 angefangen um n Positionen nach
links (zu niedrigeren Zahlen). Die vorher am linken Ende stehenden Positionsvaria-
blen fallen dabei weg. Die im so genannten Sumpf gelegenen Positionsvariablen mit
Nummern höher 9 rutschen entsprechend in niedrigere Positionen und werden auf
die beschriebene Weise nutzbar. Der Vorgabewert von n ist 1. Um die Wirkungswei-
se besser zu verstehen, schreiben wir uns ein kleines Shellskript namens posi:
echo $*
echo $0
echo $1 $2 $3
echo $9 $10 $11
shift
echo $1 $2 $9
setzen seine Zugriffsrechte:
joe@debian:~$ chmod 700 posi
und rufen es mit zehn Argumenten auf:
joe@debian:~$ ./posi eins zwei drei vier fuenf sechs
sieben acht neun zehn
In der esten Zeile der Ausgabe finden wir erwartungsgemäß die gesamte Eingabezei-
le ohne das Kommando ./posi wieder, in der zweiten Zeile das Kommando. Die
dritte Zeile nennt die ersten drei Argumente. In der vierten taucht ein Problem auf, da
das zehnte Argument und alle folgenden nicht auf diese Weise angesprochen werden
können. In der fünften Ausgabezeile sehen wir, dass das erste Argument durch das
zweite ersetzt worden ist und das neunte durch das vorher unzugängliche zehnte.
Den Positionsvariablen lassen sich nicht wie benannten Variablen neue Werte
zuweisen. Allerdings ist es möglich, sie über das eingebaute Kommando set neu zu
setzen. Die Syntax zu diesem Kommando lautet:
set Argument1 [Argument2 ...]
2.7 Kommandointerpreter (Bash) 77

Danach ist das mit Argument1 angegebene Argument in der Variablen 1 gespei-
chert, das mit Argument2 angegebene in der Variablen 2 usw. Wird set ohne
Optionen oder Argumente aufgerufen, gibt es die Namen aller definierten Shellva-
riablen mitsamt ihren Werten aus. Zusammen mit dem Kommando set können auch
die Ersetzungsmechanismen benutzt werden. So weist das Kommando:
joe@debian:~$ set *
die Namen aller Dateien im Arbeitsverzeichnis (die durch die Dateinamenerweite-
rung für den Stern eingesetzt werden) den Positionsvariablen zu. Das Kommando:
joe@debian:~$ set ‘ls -l diplom‘
führt dazu, dass die Ausgabe des Kommandos ls -l diplom in den Positionsva-
riablen gespeichert wird. In der Variablen 1 sind dann die Zugriffsrechte der Datei
gespeichert, in der Variablen 2 die Anzahl der Verzeichniseinträge (link counter), in
der Variablen 3 der Besitzer usw. Wenn nicht jedes durch Leerzeichen getrennte Wort
einer einzelnen Variablen zugeordnet werden soll, sondern die Zerlegung nach einem
anderen Muster erfolgen soll, ist die Variable IFS vorübergehend entsprechend zu
ändern.
Will man eine temporäre Datei mit einem eindeutigen Namen erzeugen, lässt
sich dazu die eindeutige Prozess-ID der jeweiligen Shell heranziehen:
joe@debian:~$ cp datei datei.$$
woraus folgt, dass man mit Dollarzeichen in Dateinamen vorsichtig umgehen soll.
Andernfalls ereignen sich möglicherweise ungewollte Dinge. Die Hauptanwendung
der Positionsvariablen liegt in Shellskripten, siehe Abschnitt 2.7.7 Shellskripte auf
Seite 93.

Benannte Variable

Benannte Variable der Shell tragen einen Namen (Bezeichner, Identifier) und wer-
den über diesen angesprochen. Einige erzeugt die Shell von sich aus, andere kann
oder muss der Benutzer anlegen. Anwendungsprogramme richten auch gern solche
Variable ein. Die meisten lassen sich sowohl lesen wie ändern. Die Namen bestehen
aus einem großen oder kleinen Buchstaben, gefolgt von Buchstaben, Ziffern oder
dem Unterstrich (E: underscore, F: tiret bas, sousligné). Die Variablen haben einen
Gültigkeitsbereich (E, F: scope); Programmierer kennen den Begriff:
• Lokal gültige Variable gelten nur in der Shell, in der sie erzeugt worden sind
(Normalfall).
• Global gültige Variable gelten in der Shell, in der sie erzeugt worden sind, und
in deren Abkömmlingen. Man sagt, sie werden exportiert.
Ein Export nach oben, an die aufrufende Shell, ist nicht möglich. Die Ursache ist das
Verfahren, mit dem Prozesse erzeugt werden.
Benannte Variable werden erzeugt und erhalten ihren Wert durch eine Zuweisung
der Form:
78 2 Linux/UNIX

joe@debian:~$ NAME=wert
Die Großschreibung der Namen ist nicht zwingend, aber verbreitet. Um das Gleich-
heitszeichen7 herum dürfen keine Leerzeichen stehen. Ist der Wert – eine Zeichen-
kette – aus mehreren getrennten Zeichengruppen zusammengesetzt, muss er von ein-
fachen oder doppelten Anführungszeichen eingerahmt werden:
joe@debian:~$ NAME="Debian GNU/Linux"
Der Wert einer bereits existierenden Variablen wird ebenfalls durch eine Zuweisung
geändert. Auch die leere Zeichenkette darf zugewiesen werden. Erst wenn auf der
rechten Seite der Zuweisung nichts steht:
joe@debian:~$ NAME=
gilt die Variable als undefiniert und wird gelöscht. Dasselbe bewirkt das eingebaute
Shellkommando unset:
joe@debian:~$ unset NAME
Bestimmte vordefinierte Shellvariable verlieren ihre besonderen Eigenschaften beim
ersten unset, auch wenn sie hernach wieder gesetzt werden, beispielsweise die
Variablen GROUPS, HISTCMD oder RANDOM. Einer Variablen darf der Wert einer
anderen, bereits vorhandenen (definierten) Variablen zugewiesen werden:
joe@debian:~$ BENUTZER=$USER
Soll an den Wert unmittelbar eine Zeichenkette angehängt werden, ist der Variablen-
name zu klammern:
joe@debian:~$ BENUTZER=${USER}.debian
andernfalls würde das Anhängsel als Teil des Namens verstanden werden. Man darf
sogar einer Variablen ihren geänderten oder ergänzten alten Wert als neuen Wert
zuweisen:
joe@debian:~$ PATH=~/bin:"$PATH"
womit dem vom System eingestellten Kommandopfad das Verzeichnis bin im
Home-Verzeichnis des Benutzers vorangestellt wird. Die Shell unterscheidet zwi-
schen dem alten und dem neuen Wert. Mit dem eingebauten Shellkommando set
ohne Argumente erfährt man alle aktuell gültigen Shellvariablen in alphabetischer
Folge und ihre Werte:
joe@debian:~$ set | less
üblicherweise der Anzahl nach mehrere Dutzend, daher zweckmäßig durch less zu
filtern. Wir sehen uns bald die wichtigsten an.
Will man eine Variable nur für ein Kommando oder Programm erzeugen oder
ändern, so muss man dafür sorgen, dass Zuweisung und Kommando gemeinsam als
Gruppe (list) in einer Subshell ausgeführt werden:
7
Eine Zuweisung ist keine Gleichung. Trotzdem reden wir von Gleichheitszeichen, um
nicht unnötig einen neuen Begriff einzuführen. Beim Programmieren wird zwischen Zuwei-
sung (E: assignment) und Gleichung (E: equation) streng unterschieden.
2.7 Kommandointerpreter (Bash) 79

joe@debian:~$ ( NAME=wert; /bin/echo $NAME )


Hier gibt das Kommando /bin/echo die Zeichenkette wert aus, unabhängig da-
von, welchen Wert die Variable NAME vorher hatte. Die Klammern verhindern, dass
die Variable NAME in der Sitzungsshell gesetzt und an den Kindprozess /bin/echo
vererbt wird. Hinterher hat die Variable NAME wieder ihren alten Wert, da der neue
Wert nicht von der Subshell rück- oder aufwärts vererbt wird.
Einige wenige Variable können vom Benutzer nur gelesen, aber nicht verändert
werden. Man erfährt sie mittels:
joe@debian:~$ readonly
Beispielsweise ist die Variable EUID, welche die effektive Benutzer-ID enthält, nicht
vom Benutzer durch eine Zuweisung veränderbar:
joe@debian:~$ EUID=4711
erzeugt eine Fehlermeldung. Ein Benutzer kann auch selbst unveränderbare Variable
definieren:
joe@debian:~$ readonly ABC=abc
Der Versuch, die Variable ABC zu verändern oder zu löschen, resultiert in der glei-
chen Fehlermeldung. Der Benutzer wird sie los, indem er die Shell, in der sie defi-
niert wurde, beendet.
Neu angelegte Variable sind per Vorgabe nur lokal gültig; sie gelten nur in der
Shell, in der sie angelegt werden. Sollen sie an Kindprozesse weiter vererbt (expor-
tiert) werden, ist ein zweiter Schritt erforderlich. Der Export von Variablen ist ein
Weg, auf dem Shells oder andere Prozesse ihren Kindprozessen etwas mitteilen, bei-
spielsweise die Namen bestimmter Dateien oder Verzeichnisse. Die aktuellen zum
Export vorgesehenen Variablen – die Umgebung der Shell – erfährt man mittels:
joe@debian:~$ export
Die Ausgabe besteht aus Zeilen wie:
declare -x TERM="xterm"
Das eingebaute Kommando declare mit der Option -x erzeugt neue Variable
und sieht sie zum Export vor. Seine Möglichkeiten gehen weiter, siehe man bash,
Suchwort declare. Die Umgebung (E: environment, F: environnement) eines Pro-
zesses besteht aus der ursprünglichen Umgebung der aufrufenden Shell, gegebenen-
falls mit geänderten Werten, abzüglich der mittels unset oder anders gelöschten
Variablen und zuzüglich der mittels export oder declare -x hinzugefügten Va-
riablen.
Mit dem export- Kommando erzeugt man zu exportierende Variable, entweder
zusammen mit der Zuweisung oder in getrenntem Aufruf:
joe@debian:~$ export NAME=wert
joe@debian:~$ NAME=wert; export NAME
80 2 Linux/UNIX

Den Export einer Variablen nimmt man mit einer Option zurück:
joe@debian:~$ export -n NAME
Dieselbe Wirkung zeigt:
joe@debian:~$ declare +x NAME
Das Pluszeichen vor der Option kehrt ihre übliche Wirkung um; das gilt nicht allge-
mein für jede Option und jedes Kommando. Bei der Zuweisung eines neuen Wertes
an eine bereits vorhandene exportierte Variable bleibt diese global gültig; ein erneu-
ter Export erübrigt sich. Prozesse, die bereits mit dem alten Wert der exportierten
Variablen laufen, erfahren nichts von der Änderung. Nur nach der Änderung gestar-
tete Prozesse laufen mit dem neuen Wert. Zur Anzeige der zum Export vorgesehenen
Variablen dient auch das Kommando printenv (print environment).
Eine Reihe von Variablen wird von der Login- oder Sitzungsshell erzeugt
und an alle Prozesse der Sitzung vererbt oder exportiert. Diese Variablen bilden
die Umgebung der Sitzung und werden in Shellskripten wie /etc/profile
und /etc/bash.bashrc systemweit sowie in benutzereigenen Skripten wie
$HOME/.profile, $HOME/bash_profile und $HOME/.bashrc definiert.
Auf eine benannte Variable wird in der Kommandozeile oder in einem Shellskript
zugegriffen, indem man ihrem Namen ein Dollarzeichen voranstellt:
joe@debian:~$ echo $TERM
Obige Eingabe veranlasst die Anzeige des Wertes der Variablen TERM, beispiels-
weise xterm oder hpterm. Achtung: echo ist sowohl ein eingebautes Shellkom-
mando – siehe man bash – als auch ein externes Kommando /bin/echo – siehe
man echo. Beide unterscheiden sich leicht. Auch in letzterem Fall wird der Aus-
druck $TERM von der Shell durch seinen Wert ersetzt (expandiert), das Kommando
/bin/echo erfährt nur den Wert der Variablen.
Sehen wir uns nun die wichtigsten benannten Shellvariablen an, in alphabeti-
scher Folge, wie sie das Kommando set ausgibt, zuzüglich einiger Variablen, deren
Wert man sich mit dem echo-Kommando ansehen kann. Auf Ihrem Rechner wird
die Aufzählung in Einzelheiten anders aussehen; die hier teilweise verkürzt wieder-
gegebenen Werte oder Wertelisten weichen mit Sicherheit ab:
• BASH=/bin/bash nicht exportiert, absoluter Pfad der aktuellen Shell,
• BASH_VERSINFO=([0]="2"[1]="05b"...) nicht exportiert, Version
der aktuellen Shell als Array dargestellt,
• BASH_VERSION=’2.05b.0(1)-release’ nicht exportiert, Version der
aktuellen Shell als durchgehende Zeichenkette dargestellt,
• CDPATH=.:~:/usr:/usr/local nicht exportiert, Suchpfad für das cd-
Kommando,
• COLORTERM=gnome-terminal exportiert, aktuelles Terminalprogramm,
siehe Abschnitt 3.12 Terminal-Emulatoren auf Seite 225,
• COLUMNS=91 nicht exportiert, zum Terminalprogramm gehörende Spaltenzahl
(Fensterbreite in Anzahl der Zeichen angegeben), siehe auch LINES,
2.7 Kommandointerpreter (Bash) 81

• CVS_RSH=ssh exportiert, in der benutzereigenen Datei $HOME/.bashrc


festgelegtes, von der Anwendung CVS (Concurrent Versions System) zu ver-
wendendes Programm für den Zugriff auf das CVS-Repository über Netz, hier
die Secure Shell,
• DIRSTACK=() nicht exportiert, ein Array, hier leer, das eine Liste von Ver-
zeichnissen speichert; lässt sich mittels der eingebauten Kommandos pushd
und popd ändern und mit dirs anzeigen, gelegentlich ein bequemer Weg zum
Wechseln zwischen Verzeichnissen,
• DISPLAY=:0.0 exportiert, Nummer des X11-Displays, mit dem etwaige X11-
Clients Verbindung aufnehmen sollen, siehe Abschnitt 9.4 X Window System ab
Seite 407,
• EDITOR=/usr/bin/vi nicht exportiert, nennt den Editor, mit dem als Vor-
gabe Kommandozeilen editiert werden sollen, auch sonst verwendet,
• EUID=1001 nicht exportiert, effektive Benutzernummer, siehe auch UID sowie
Abschnitt 12 Benutzer und Gruppen ab Seite 519,
• FCEDIT=/usr/bin/vi nicht exportiert, nennt den Editor, mit dem als Vor-
gabe Kommandozeilen editiert werden sollen, die aus der Kommandogeschichte
zurückgeholt worden sind (eingebautes Kommando fc),
• FIGNORE=".o: :.bak" nicht exportiert, Liste von Dateikennungen, die bei
der Dateinamenerweiterung durch readline-Funktionen zum Übergehen der
betreffenden Datei führt,
• FUNCNAME=... nicht exportiert, existiert nur, wenn gerade eine Shellfunktion
ausgeführt wird, siehe Abschnitt 2.7.7 Shellskripte auf Seite 93,
• GDM_XSERVER_LOCATION=local exportiert, Wirkungsstätte des X-
Servers, aufgerufen vom GNOME Display Manager, hier der lokale Arbeits-
platzrechner, siehe Abschnitt 3.4 Display-Manager auf Seite 195,
• GROUPS=() nicht exportiert, Array der Gruppen als Gruppen-ID, zu denen der
Benutzer gehört, siehe Abschnitt 12 Benutzer und Gruppen ab Seite 519,
• GTK_RC_FILES=/etc/gtk/gtkrc:/home/joe/.gtkrc-1.2 expor-
tiert, absolute Pfade der systemweiten und der benutzereigenen Konfigurations-
datei des GIMP Toolkits, einer viel verwendeten Grafik-Bibliothek,
• HISTCMD=561 nicht exportiert, laufende Nummer (Index) des gerade ausge-
führten Kommandos in der Kommandogeschichte,
• HISTFILE=/home/joe/.bash_history nicht exportiert, Datei mit der
Kommandogeschichte (history), siehe Abschnitt 2.7.2 Kommandogeschichte auf
Seite 62,
• HISTFILESIZE=500 nicht exportiert, maximale Anzahl der Einträge in vor-
stehender Datei,
• HISTSIZE=500 nicht exportiert, Anzahl der Kommandozeilen, die beim Be-
enden einer interaktiven Shell in die Datei mit der Kommandogeschichte
(HISTFILE) kopiert werden, höchstens gleich HISTFILESIZE,
• HOME=/home/joe exportiert, absoluter Pfad des Home-Verzeichnisses des
Benutzers,
• HOSTNAME=pcjoe nicht exportiert, Name des Rechners, wie vom Kommando
hostname angezeigt,
82 2 Linux/UNIX

• HOSTTYPE=i386 nicht exportiert, Architektur des Rechners, hier Intel 86386


und Nachfolger (tatsächlich ein AMD Athlon, aber der Prozessor fällt unter diese
Architektur),
• IFS=$’ \t\n’ nicht exportiert, Internal Field Separator, Trennzeichen zwi-
schen den Teilen einer Kommandozeile, hier Dollarzeichen, Leerzeichen, Tabu-
lator und Zeilenwechsel (newline),
• LANG=de_DE@EURO exportiert, Variable aus dem Locale, siehe Abschnitt 9.5
Locale auf Seite 418, wo auch weitere unter Umständen gesetzte Umgebungsva-
riable aus dem Locale erläutert sind (LC_ALL usw.),
• LANGUAGE=de_DE:de:en_GB:en exportiert, Variable aus dem Locale, legt
fest, in welcher sprachlichen Folge nach Manualseiten und anderen Texten ge-
sucht werden soll, hier deutsches Deutsch, Deutsch allgemein, britisches Eng-
lisch, Englisch allgemein,
• LINENO=71 nicht exportiert, Zeilennummer des gerade ausgeführten Komman-
dos. Der Wert entspricht bei interaktiven Shells der Nummer der jeweiligen Kom-
mandozeile, in Shellskripten der Zeilennummer des gerade ausgeführten Kom-
mandos im Skript.
• LINES=28 nicht exportiert, zum Terminalprogramm gehörende Zeilenzahl
(Fensterhöhe), siehe auch COLUMNS,
• LOGNAME=joe exportiert, Benutzername wie beim Einloggen verwendet, än-
dert sich nicht während einer Sitzung, siehe auch USERNAME,
• LS_COLORS=’no=00:...:.wav=01;35:’ exportiert, vom Werkzeug ls
zu verwendende Farben zur Kennzeichnung verschiedener Dateitypen,
• MACHTYPE=i386-pc-linuc-gnu nicht exportiert, Maschinentyp, das heißt
Architektur und Betriebssystem,
• MAILCHECK=600 nicht exportiert, Periode in Sekunden zum Abfragen des Po-
steingangs nach etwaigen neuen Mails,
• MAILPATH="/var/spool/mail/debian:/var/spool/mail/joe"
nicht exportiert, Liste von Dateien, die eingehende Mail enthalten, siehe Ab-
schnitt 16.11 Electronic Mail auf Seite 797,
• OLDPWD=/home/joe/TeX/d1/Haupt exportiert, vorheriges Arbeitsver-
zeichnis, siehe auch PWD,
• OPTARG=... nicht exportiert, der Wert der letzten von dem eingebauten Kom-
mando getopts verarbeiteten Option.
• OPTERR=1 nicht exportiert, mit dem Wert 1 zeigt die Bash etwaige Fehlermel-
dungen des eingebauten Kommandos getopts an.
• OPTIND=1 nicht exportiert, gehört ebenfalls zum Kommando getopts,
• OSTYPE=linux-gnu nicht exportiert, das Betriebssystem, unter dem die Shell
läuft,
• PATH=/usr/local/bin:/usr/bin:/bin:... exportiert, Suchpfade
für externe Kommandos, die Reihenfolge der Verzeichnisse spielt eine Rolle,
siehe Abschnitt 2.7.2 Externe und interne Kommandos auf Seite 59,
• PIPESTATUS=([0]="0") nicht exportiert, ein Array, das die Rückgabewerte
der Prozesse der zuletzt im Vordergrund ausgeführten Pipe enthält,
2.7 Kommandointerpreter (Bash) 83

• PPID=1616 nicht exportiert, Nummer des Elternprozesses (parent process iden-


tifier) der Shell, hier die Nummer eines GNOME-Terminal-Prozesses als Eltern-
prozess der Bash,
• PROMPT_COMMAND=’echo -ne "\033]0;${USER}@${HOSTNAME};
${PWD}\007"’ nicht exportiert, falls gesetzt, wird der Wert als Kommando
vor jedem primären Prompt ausgeführt,
• PS1=’${debian_chroot:+(debian_chroot)}\u@\h;\w\$ ’
nicht exportiert, erster (primärer) Prompt, siehe Abschnitt 2.2 Kommandozeile
auf Seite 30,
• PS2=’>= ’ nicht exportiert, zweiter Prompt, der angezeigt wird, wenn ein
Kommando noch nicht vollständig eingegeben, aber schon die <cr>-Taste ge-
drückt wurde (also noch Eingaben fehlen),
• PS3= nicht exportiert, dritter Prompt, falls gesetzt, vom select-Kommando in
Shellskripten (Selektion, Auswahl) verwendet,
• PS4=”+ ’ nicht exportiert, vierter Prompt, der während der Ablaufverfolgung
(tracing) eines Shellskripts benutzt werden kann, siehe Abschnitt 2.7.7 Shell-
skripte auf Seite 93,
• PWD=/home/joe exportiert, augenblickliches Arbeitsverzeichnis, siehe auch
OLDPWD sowie Abschnitt 2.8.9 Arbeiten mit Verzeichnissen auf Seite 139,
• RANDOM=23541 nicht exportiert, eine bei jeder Abfrage neu erzeugte zufällige
Ganzzahl zwischen 0 und 32767 zur beliebigen Verwendung,
• SECONDS=30648 nicht exportiert, Anzahl der Sekunden seit dem Start der
Shell,
• SESSION_MANAGER=local/pcjoe:/tmp/.ICE-unix/1465 expor-
tiert, vom Display-Manager gesetzte Variable mit dem Namen einer leeren
Datei, der die Prozess-ID des X-Session-Managers darstellt, siehe Abschnitt 3.5
Session-Manager auf Seite 200,
• SHELL=/bin/bash exportiert, absoluter Pfad der Login-Shell, siehe auch
BASH,
• SHELLOPTS=braceexpand:emacs:hashall:... nicht exportiert, Op-
tionen der aktuellen Shell,
• SHLVL=1 exportiert, Zähler, der mit jedem Aufruf einer Subshell um 1 erhöht
wird (Schachtelungstiefe),
• SSH_AGENT_PID=1507 exportiert, Prozess-ID des Secure-Shell-Agenten, der
die privaten Schlüssel verwaltet,
• SSH_AUTH_SOCK=/tmp/ssh-MjNg1465/agent.1465 exportiert, eine
Variable der Secure Shell,
• TERM=xterm exportiert, Typ des Terminals, wichtig für die Wahl der richtigen
Terminalkommandos,
• UID=1001 nicht exportiert, Benutzernummer beim Start der Shell, siehe auch
EUID und USER sowie Abschnitt 12 Benutzer und Gruppen ab Seite 519,
• USER=joe exportiert, Benutzername, siehe auch UID,
• USERNAME=joe exportiert, dasselbe wie LOGNAME
84 2 Linux/UNIX

• XAUTHORITY=/home/joe/.Xauthority exportiert, von X11 gesetzte Va-


riable, Name der Datei mit Schlüsseln (MIT Magic Cookies) zugelassener X-
Clients, siehe man xauth,
• _=mutt nicht exportiert, Name des jüngstvergangenen Kommandos.
Einige Werte – zum Beispiel der Benutzername – werden unter mehreren Varia-
blen gespeichert. Das rührt daher, dass verschiedene Programme verschiedene Va-
riablen abfragen. Es gibt auch Werte wie die Anschrift für Antworten auf Mails
(REPLYTO=...), die sich entweder in der Umgebung oder in der Konfigurations-
datei ($HOME/.muttrc) einer Anwendung speichern lassen. Macht man beides,
erhebt sich die Frage nach dem Vorrang.

2.7.6 Expansion (Erweiterung) und Substitution (Ersetzung)

Dateinamenerweiterung (Globbing)

Die Begriffe Expansion (Erweiterung) und Substitution (Ersetzung oder Auflösung)


bezeichnen ähnliche Vorgänge. In beiden Fällen wird ein Ausdruck durch einen an-
deren ersetzt. Ein einfacher Fall wurde bereits bei der Benutzung von Variablen vor-
gestellt:
joe@debian:~$ a=$b
Die Anweisung bewirkt, dass der Ausdruck $b durch die Zeichenkette, die in der
Variablen b gespeichert ist, ersetzt und der Variablen a zugewiesen wird. Die Shell
beherrscht verschiedene Expansions- und Substitutionsmechanismen, mit denen sich
– in begrenztem Umfang – sogar arithmetische Berechnungen durchführen lassen
oder die Ausgabe eines Programms einer Variablen zugewiesen werden kann.
Sobald die Shell auf einen Datei- oder Verzeichnisnamen trifft, der die Metazei-
chen (Jokerzeichen, wildcard) * (Stern, E: asterisk, F: astérisque), ? (Fragezeichen,
E: question mark, F: point d’interrogation) oder [] (eckige Klammern, E: brackets,
F: crochets) enthält, versucht sie, die Zeichenkette durch alle Namen vorhandener
Dateien oder Verzeichnisse zu ersetzen, auf die Folgendes zutrifft:
• Jedes Zeichen, das keine besondere Bedeutung hat, muss bei den in Frage kom-
menden Dateinamen an genau der gleichen Stelle stehen wie in der Zeichenkette.
• Das Fragezeichen bezeichnet genau ein beliebiges Zeichen.
• Der Stern bezeichnet eine beliebige Anzahl beliebiger Zeichen (auch 0 Zeichen).
• In eckigen Klammern angegebene Zeichen bezeichnen genau ein Zeichen aus
der Menge der in den eckigen Klammern eingeschlossenen Zeichen. Mit einem
Bindestrich wird ein Bereich von Zeichen angegeben. Wenn einer Zeichenkette
in eckigen Klammern ein Ausrufungszeichen oder das ^-Zeichen vorangestellt
ist, sind alle nicht angegebenen Zeichen gemeint (Komplement).
Ein Schrägstrich – das Trennzeichen zwischen Verzeichnissen in Pfaden – wird nicht
durch ein Metazeichen erfasst, sondern muss ausdrücklich hingeschrieben werden.
Braucht man eines der Metazeichen buchstäblich, ist es durch einen Gegenschräg-
strich zu quoten, siehe unten. Der Mechanismus wird auch als Globbing bezeichnet
2.7 Kommandointerpreter (Bash) 85

und durch die Shelloption -f oder -o noglob unterbunden. Er hat trotz einiger
Ähnlichkeit nichts mit regulären Ausdrücken zu tun, wie sie in Abschnitt 2.10.1 Re-
guläre Ausdrücke auf Seite 157 erläutert werden.
Die Wirkung der Metazeichen lässt sich ebenfalls mit dem Kommando echo
vorführen:
joe@debian:~$ echo *
Das Kommando gibt die Namen aller Dateien im Arbeitsverzeichnis aus.
joe@debian:~$ echo /usr/share/doc/*/*.txt
gibt die Namen aller Dateien in allen Unterverzeichnissen des Verzeichnisses
/usr/share/doc aus, die die Kennung .txt tragen.
joe@debian:~$ echo a????.txt
gibt die Namen aller Dateien im Arbeitsverzeichnis aus, die mit einem a beginnen,
dann aus genau vier beliebigen Zeichen bestehen und auf .txt enden.
joe@debian:~$ echo [a-z][!0-9][mn]??.*
gibt die Namen aller Dateien im Arbeitsverzeichnis aus, die mit einem klein ge-
schriebenen Buchstaben beginnen, als zweites Zeichen keine Ziffer haben, deren
drittes Zeichen entweder m oder n ist, die dann aus zwei weiteren beliebigen Zei-
chen und einem Punkt bestehen und dahinter eine beliebige Zeichenfolge aufweisen.
Die Metazeichen werden von der Shell und nicht von den aufgerufenen Program-
men verarbeitet. Diese erhalten von der Shell eine Liste mit Namen ohne Metazei-
chen und merken vom Globbing nichts. Wenn das Arbeitsverzeichnis beispielswei-
se die Dateien bild1.png, bild2.png und bild3.png enthält und folgendes
Kommando eingegeben wird:
joe@debian:~$ ls -l *png
dann sieht die Shell nach, welche Dateinamen im Arbeitsverzeichnis auf die ange-
gebene Zeichenkette passen, und setzt diese dafür ein. Das Kommando ist gleichbe-
deutend mit:
joe@debian:~$ ls -l bild1.png bild2.png bild3.png
Nur dann, wenn die Shell keinen passenden Dateinamen findet, wird er wie einge-
geben an das aufgerufene Programm weitergereicht. Dateinamen, die Metazeichen
enthalten, sind aber kein guter Einfall.

Verarbeiten von Sonderzeichen unterdrücken (quoten)

Manchmal ist es erwünscht, dass Metazeichen nicht von der Shell verarbeitet wer-
den. Außerdem kennt die Shell weitere Metazeichen wie das Dollarzeichen. Es gibt
drei Möglichkeiten, die Interpretation der Metazeichen im Einzelfall zu unterbinden
(quoten, maskieren, entwerten, sperren):
86 2 Linux/UNIX

• Wird einem Zeichen ein Gegenschrägstrich (backslash) (\) vorangestellt, so wird


dieses Zeichen nicht interpretiert. Wenn man das Zeichen \ selbst meint, muss
man ihm ebenfalls das Zeichen \ voranstellen.
• Wenn eine Zeichenkette in doppelten Anführungszeichen (double quotes) (“ “)
steht, werden die in ihr enthaltenen Metazeichen nicht interpretiert. Hier gibt es
Ausnahmen. So werden Dollarzeichen zwischen Anführungszeichen (die Varia-
blenbezeichnungen wie $TERM einleiten) weiterhin interpretiert. Weitere Aus-
nahmen sind der Accent grave (back quote), der Gegenschrägstrich und die Gän-
sefüßchen (double quote).
• Metazeichen zwischen einfachen Anführungszeichen (Apostroph, single quote)
(’ ’) werden nie interpretiert. Durch einfache Anführungszeichen lässt sich die
Bedeutung aller Metazeichen der Shell abschalten, ausgenommen das einfache
Anführungszeichen selbst. Dies ist erforderlichenfalls durch einen Gegenschräg-
strich zu quoten.
Die Verwendung der stärksten Quotung mittels einfacher Anführungszeichen an
Stellen, wo doppelte Anführungszeichen ausreichen würden, ist unschädlich. Nur
dort, wo man auf die genannten Ausnahmen angewiesen ist, hat man keine Wahl.
Das Kommando:
joe@debian:~$ ls "*png"
ruft also im Gegensatz zu obigem Beispiel das Programm ls mit dem Argument
*png auf. Wenn keine Datei dieses Namens im Verzeichnis existiert, erhält man
eine Fehlermeldung von ls. Auf diese Weise lassen sich Datei- oder Verzeichnisna-
men als Argument eingeben, die Trennzeichen wie das Leerzeichen enthalten, was
in anderen Rechnerwelten vorkommt.
Einige Programme interpretieren Metazeichen ebenfalls. Dazu gehören die Pro-
gramme find oder zip. Wenn für die Shell bedeutsame Zeichen in Argumenten
vorkommen, die unverändert Programmen übergeben werden sollen, müssen diese
immer durch Anführungszeichen oder den Gegenschrägstrich vor der Interpretation
durch die Shell geschützt werden. Wenn Sie sich bei einem bestimmten Ausdruck
nicht sicher sind, welche Zeichen geschützt sind und welche interpretiert werden,
können Sie dies mit dem echo-Kommando überprüfen. Das Kommando:
joe@debian:~$ echo "$hallo Welt"’ ’\$hallo Welt
gibt – vorausgesetzt, die Variable hallo ist undefiniert – folgendes aus:
Welt $hallo Welt
Das erste $hallo steht zwar in doppelten Anführungszeichen, in denen die Shell
dennoch versucht, den Wert der Variablen hallo einzusetzen. Weil die Variable
undefiniert ist, wird für $hallo kein Wert eingesetzt, und die ausgegebene Zei-
chenkette beginnt mit dem Leerzeichen vor Welt. Die Leerzeichen zwischen den
einfachen Anführungsstrichen werden unverändert ausgegeben (sie hätten auch in
doppelten Anführungsstrichen stehen können), und die darauffolgende Zeichenkette
$hallo wird ebenfalls unverändert ausgegeben, weil dem Dollarzeichen hier ein
Gegenschrägstrich vorangestellt ist. Das letzte Wort Welt ist das zweite Argument
2.7 Kommandointerpreter (Bash) 87

für das echo-Kommando, weil es durch ein Leerzeichen von den vorherigen Zei-
chen getrennt steht. Es wird ebenfalls unverändert ausgegeben, weil es keine Meta-
zeichen enthält.

Kommandosubstitution

Immer wenn ein Ausdruck in rückwärtsgerichteten, einfachen Anführungsstrichen


(E: back quote, F: accent grave) (‘ ‘) steht, versteht die Shell einen solchen Aus-
druck als Kommando und führt es aus. Danach ersetzt sie den Ausdruck einschließ-
lich der Back Quotes durch das, was durch dieses Kommando auf die Standardaus-
gabe geschrieben wird. Das Kommando:
joe@debian:~$ a=‘ls‘
bewirkt, dass die Standardausgabe des Kommandos ls der Variablen a zugewiesen
wird. Das Ergebnis kann mit folgendem Kommando betrachtet werden:
joe@debian:~$ echo $a
Nutzbringend lässt sich diese Eigenschaft einsetzen, wenn die Ausgabe eines Kom-
mandos als Argument für ein anderes Kommando dienen soll. Beispiel: Mit der Op-
tion -S des Kommandos dpkg kann man sich anzeigen lassen, welche Datei zu wel-
chem Debian-Paket gehört. Möchte man wissen, zu welchem Paket das Programm
ls gehört, gibt man folgendes Kommando ein:
joe@debian:~$ dpkg -S ls
Dann werden die Namen aller zu installierten Debian-Paketen gehörenden Dateien
ausgegeben, in denen die Zeichenkette ls vorkommt. Zu jeder Datei wird angege-
ben, aus welchem Paket sie stammt. Weil diese Zeichenkette in vielen Dateinamen
vorkommt, erhält man eine lange und unübersichtliche Ausgabe. Man müsste den
Dateinamen genauer angeben, um eine bessere Ausgabe zu bekommen. Das Kom-
mando which gibt den absoluten Dateinamen eines Programms aus. Der Aufruf:
joe@debian:~$ which ls
führt zu der Ausgabe:
/bin/ls
Jetzt kann man mit dem Kommando:
joe@debian:~$ dpkg -S /bin/ls
genauer nach dem Paket suchen, aus dem das Programm stammt. Die Zwischenin-
formation des Dateinamens von ls interessiert jedoch eigentlich nicht. Und außer-
dem macht es keinen Spaß, Ausgaben von Programmen abzutippen, um sie anderen
Programmen als Eingabe zu übergeben. Mit Hilfe der Kommandosubstitution macht
man es sich einfacher:
joe@debian:~$ dpkg -S ‘which ls‘
88 2 Linux/UNIX

Die Kommandosubstitution führt dazu, dass zunächst which ls abgearbeitet und


dessen Ausgabe dort eingesetzt wird, wo sich der Ausdruck ‘which ls‘ befindet,
bevor das Kommando dpkg aufgerufen wird. dpkg wird sofort mit der Option -S
und dem Argument /bin/ls aufgerufen und liefert das gewünschte Ergebnis.

Zahlenrechnen

Mit der Bash ist es in begrenztem Umfang möglich, arithmetische Berechnungen


durchzuführen. Solche Berechnungen werden mit einem Dollarzeichen eingeleitet
und in eckige Klammern gesetzt. Beispielsweise gibt das Kommando:
joe@debian:~$ echo $[2 + 2]
die Zahl 4 aus. Teil von Berechnungen können auch zu substituierende Ausdrücke
sein. So führt die folgende Kommandokette zum gleichen Ergebnis:
joe@debian:~$ a=2; b=2; echo $[ $a + $b ]
Alternativ kann das eingebaute Kommando let zum Ausführen von Berechnungen
benutzt werden. Ein Beispiel für Kommandosubstitution innerhalb von Berechnun-
gen wäre folgende Anweisung:
joe@debian:~$ echo $[ ‘cat diplom | wc - -lines‘ / 60 ]"
Seiten"
Hier wird zunächst der Ausdruck ‘cat diplom | wc - -lines‘ aufgelöst,
indem das Kommando ausgeführt wird. Das Programm wc gibt mit der Option
- -lines die Anzahl der gelesenen Zeilen aus. Das Ergebnis (die Anzahl der Zei-
len in der Datei diplom) wird danach durch die Zahl 60 geteilt, und an die daraus
resultierende Zeichenkette wird nach einem Leerzeichen das Wort Seiten ange-
hängt.
Berechnungen mit der Bash sind auf ganzzahlige Werte zwischen -2147483648
und 2147483647 begrenzt. Gerundet wird nicht. Die Ursache ist, dass die Bash Zah-
len intern als vorzeichenbehaftete 32-Bit-Integerwerte speichert. Wenn bei Benut-
zung der Shell genauere Berechnungen nötig sind, ist das Programm bc (basic cal-
culator) zu empfehlen, auf das jedoch nicht weiter eingegangen werden soll. Es wird
in unserem zweiten Debian-Buch erläutert.
Die Bash kennt die üblichen arithmetischen Operatoren + (Addition), - (Subtrak-
tion), * (Multiplikation), / (Division) und % (modulo, Divisionsrest), Darüber hinaus
sind weitere Funktionen wie logisches und bitweises NICHT, UND und ODER so-
wie Wertevergleiche (größer als, kleiner als usw.) möglich. Die Funktionen sind in
der Info-Dokumentation zu der Bash dokumentiert.

Feldvariable

Die Bash erlaubt es, eindimensionale Feldvariable (Array) zu definieren. Feldvaria-


ble sind Variable, in denen mehrere Werte desselben Typs hintereinander gespeichert
sind. Um einen Wert an einer bestimmten Stelle einer Feldvariablen zu speichern
2.7 Kommandointerpreter (Bash) 89

oder ihn von dort zu lesen, ist die Stelle durch einen Index (Hausnummer) anzuge-
ben. Der Index wird in eckigen Klammern hinter der Variablen angegeben.
Feldvariable werden – wie gewöhnliche Variable – in dem Moment erzeugt, in
dem sie das erste Mal benutzt werden. Wenn eine Variable, die bisher keine Feld-
variable war, als Feldvariable angesprochen wird, wird ihr ursprünglicher Wert dem
ersten Element zugewiesen. Das erste Element hat den Index 0, wie in der Program-
miersprache C üblich. Um Feldern von Feldvariablen Werte zuzuweisen, ist folgende
Syntax zu verwenden:
Name[Index]=Wert
Dadurch wird der Feldvariablen Name an der mit Index bezeichneten Stelle der
Wert Wert zugewiesen. Beispiel:
joe@debian:~$ a[100]="Feld 100 der Variablen a"
Die Belegung aller Felder einer Variablen gleichzeitig geschieht, indem die ein-
zelnen Werte in runden Klammern durch Leerzeichen getrennt angegeben werden.
Dadurch werden alle vorherigen Felder der Variablen gelöscht. Beispielsweise defi-
niert das Kommando:
joe@debian:~$ Dinge=(Auto Buch Pflanze Viertele)
die Feldvariable Dinge und weist den ersten vier Feldern die angegebenen Werte zu.
Durch eine Anweisung in dieser Form werden alle bisherigen Felder der Variablen
gelöscht.
Eine etwas andere Syntax ist notwendig, um Werte aus Feldvariablen zu ver-
wenden. Das folgende Beispiel gibt den Wert des Elements mit dem Index 100 der
Feldvariablen a aus:
joe@debian:~$ echo ${a[100]}
Feldvariablen müssen nach dem Dollarzeichen in geschweifte Klammern gesetzt
werden. Der Index kann auch in Form einer Variablen oder eines arithmetischen
Ausdrucks angegeben werden, dessen Ergebnis jedoch auf jeden Fall größer oder
gleich 0 sein muss. Beispiel:
joe@debian:~$ i=100; echo ${a[$i]}
Um der Feldvariablen menschen in der durch die Variable i bezeichneten Stelle
abzüglich zwei den Wert der Feldvariablen namen in der durch die Variablen i
bezeichneten Stelle zuzuweisen, ist folgendes Kommando einzugeben:
joe@debian:~$ menschen[$i-2]=${namen[$i]}
Einige Shellvariable sind Feldvariable, so beispielsweise BASH_VERSINFO und
DIRSTACK, siehe Abschnitt 2.7.5 Benannte Variable auf Seite 77.

#!/bin/ksh
# Shellscript primscript zur Berechnung von Primzahlen
# Korn-Shell erforderlich (apt-get install ksh)
90 2 Linux/UNIX

typeset -i ende=1000 # groesste Zahl, max. 3600


typeset -i z=5 # aktuelle Zahl
typeset -i i=1 # Index von p
typeset -i p[500] # Array der Primzahlen, max. 511
typeset -i n=2 # Anzahl der Primzahlen

p[0]=2; p[1]=3 # die ersten Primzahlen

while [ z -le ende ] # die [] muessen von Leerzeichen


# umgeben sein (Alias fuer test)
do
if [ z%p[i] -eq 0 ] # z teilbar
then
z=z+2
i=1
else # z nicht teilbar
if [ p[i]*p[i] -le z ]
then
i=i+1
else # Primzahl gefunden
p[n]=z; n=n+1
z=z+2
i=1
fi
fi
done

i=0 # Ausgabe des Arrays


while [ i -lt n ]
do
print ${p[i]}
i=i+1
done

echo Anzahl: $n

Quelle 2.3 : Shellskript zur Berechnung von Primzahlen

Quelle 2.3 zeigt ein Shellskript für eine untypische Aufgabe, die Berechnung
von Primzahlen. Zuerst werden die Variablen deklariert und initialisiert, ebenso be-
kommt das Array der Primzahlen seine ersten beiden Werte. In einer while-Schleife
wird jede weitere ungerade Zahl darauf hin untersucht, ob sie durch die bereits be-
kannten Primzahlen ohne Rest teilbar ist (Modulo-Operator). Falls nicht, haben wir
eine neue Primzahl gefunden, die dem Array hinzugefügt wird. Nachdem wir an der
Obergrenze angelangt sind, verlassen wir die Schleife und geben das Array aus. Ein
C- oder Fortran-Programm erledigt solche Aufgaben deutlich schneller und verfügt
über einen größeren Zahlenbereich. In Quelle 2.18 auf Seite 114 zeigen wir das
Skript auf Perl umgeschrieben.
2.7 Kommandointerpreter (Bash) 91

Klammererweiterung
Der Mechanismus der Klammererweiterung (brace expansion) erlaubt, eine Reihe
von ähnlichen Zeichenfolgen relativ schnell zu erzeugen. Dazu ist in geschweiften
Klammern eine Anzahl von Zeichenketten zu benennen, die durch Kommas von-
einander getrennt werden. Im Unterschied zu der Expansion von Dateinamen mit
Metazeichen wird hierbei nicht geprüft, ob die aus dem betreffenden Ausdruck er-
zeugbaren Zeichenketten als Dateinamen existieren. Das Kommando:
joe@debian:~$ echo /usr/share/doc/{aa,bb}
kombiniert die Zeichenketten aa und bb mit der vorangestellten Zeichenkette und
gibt beide daraus erzeugbaren Zeichenketten aus. Möchten man im Verzeichnis
/usr/local/doc die Verzeichnisse hosts, tools und adms anlegen, so ge-
schieht dies mit folgendem Kommando:
joe@debian:~$ mkdir /usr/local/doc/{hosts,tools,adms}
Wenn mehrere Klammererweiterungen in einem Ausdruck vorkommen, werden
die darin enthaltenen Ausdrücke miteinander kombiniert. Dies zeigt folgendes Kom-
mando:
joe@debian:~$ echo /usr/share/doc/{1,2}/{a,b,c}
Auf diese Art lässt sich eine große Zahl möglicher Kombinationen von Zeichenketten
schnell angeben. Vorteilhaft ist, dass die Ausdrücke in den geschweiften Klammern
auch Metazeichen enthalten dürfen. Diese werden wie üblich expandiert, nachdem
die Kombinationen aus den Zeichenketten gebildet worden sind. So gibt das Kom-
mando:
joe@debian:~$ echo /usr/share/doc/{a*,b*}
die Namen aller Dateien im Verzeichnis /usr/share/doc aus, deren Namen
mit einem kleinen a oder b beginnen. Will man aus den Unterverzeichnissen von
/usr/share/doc, deren Namen mit a oder b beginnen, alle Dateien, deren Na-
men mit README oder NEWS beginnen, in das Verzeichnis docs kopieren, so erle-
digt dies folgendes Kommando:
joe@debian:~$ cp /usr/share/doc/{a*,b*}/{README*,NEWS*}
docs
Bei der Expansion werden zunächst vier Zeichenketten gebildet, nämlich:
1. /usr/share/doc/a*/README*
2. /usr/share/doc/a*/NEWS*
3. /usr/share/doc/b*/README*
4. /usr/share/doc/b*/NEWS*
Daraufhin werden die Metazeichen expandiert. Dies geschieht für jede der vier Zei-
chenketten einzeln und nacheinander. Die Expansion geschieht nur dann, falls es
tatsächlich passende Dateinamen gibt. Wenn beispielsweise aus der Zeichenkette
/usr/share/doc/b*/NEWS* keine Dateinamen gebildet werden können, fin-
det für diese Zeichenkette keine Expansion statt. Sie bleibt unverändert.
92 2 Linux/UNIX

Bedingte Variablenexpansion

Die Bash bietet Mechanismen, die es erlauben, Variable nur unter bestimmten Bedin-
gungen zu expandieren. Dadurch ist es möglich, Werte beispielsweise nur dann zu
interpretieren, wenn diese auch gesetzt sind. Die Konstruktionen werden mit einem
Dollarzeichen eingeleitet und dann in geschweifte Klammern gesetzt. Es stehen die
im Folgenden genannten Konstrukte zur Verfügung. Darin angegebene Zeichenket-
ten können normale Zeichenketten oder Variable sein, die dann vor der Auswertung
des jeweiligen Ausdrucks ausgewertet werden.
• ${Variable} Entspricht dem Wert von Variable, ist gleichbedeutend mit
$Variable. Die Schreibweise ist jedoch geeignet, nachfolgende Zeichen von
dem Namen der betreffenden Variablen abzugrenzen. Beispiel: während die Zei-
chenkette $ab durch den Inhalt der Variablen ab ersetzt werden würde, ist die
Zeichenkette ${a}b gleichbedeutend mit dem Inhalt der Variablen a und dem
unmittelbar angehängten Zeichen b.
• ${Variable:-Zeichenkette} Wenn die Variable Variable existiert
und einen Wert hat, ist der Ausdruck gleich dem Wert von Variable, sonst
gleich dem Wert von Zeichenkette.
• ${Variable:=Zeichenkette} Wenn die Variable Variable existiert
und einen Wert hat, ist der Ausdruck gleich dem Wert von Variable. Wenn
nicht, wird der Wert von Zeichenkette Variable zugeordnet und der Aus-
druck ist gleich Zeichenkette.
• ${Variable:?Zeichenkette} Wenn die Variable Variable existiert
und einen Wert hat, ist der Ausdruck gleich dem Wert von Variable. Wenn
nicht, wird die mit Zeichenkette angegebene Zeichenkette auf die Standard-
fehlerausgabe gegeben und die Ausführung weiterer Kommandos abgebrochen.
Falls die Shell nicht interaktiv ist, wird sie beendet. Mit dieser Konstruktion lässt
sich prüfen, ob alle notwendigen Parameter für die Ausführung eines Shellskripts
vorliegen.
• ${Variable:+Zeichenkette} Wenn die Variable Variable existiert
und einen Wert hat, ist der Ausdruck gleich der mit Zeichenkette angegebe-
nen Zeichenkette. Wenn Variable nicht existiert oder keinen Wert hat, ist der
Ausdruck gleich der leeren Zeichenkette.
• ${Variable:Anfangspunkt[:Endpunkt]} Der Ausdruck ist gleich der
Teilzeichenkette der in Variable gespeicherten Zeichenkette, die mit dem
mit Anfangspunkt angegebenen Zeichen anfängt und mit dem optional
mit Endpunkt (ohne eckige Klammern) angegebenen Zeichen aufhört. Bei
Anfangspunkt und Endpunkt muss es sich um Ausdrücke handeln, die Zah-
len entsprechen. Wenn Endpunkt nicht angegeben ist, ist der Ausdruck gleich
der Zeichenkette aus Variable von Anfangspunkt bis zum Ende. Wenn
Anfangspunkt einer negativen Zahl entspricht, wird der Anfangspunkt vom
Ende der Zeichenkette aus Variable an rückwärts ermittelt. Wenn die Variable
@ ist, entspricht das Ergebnis den Shell-Argumenten vom Anfangspunkt-en
Argument bis zum Endpunkt-en Argument. Wenn Variable eine Feldvaria-
2.7 Kommandointerpreter (Bash) 93

ble mit dem Index @ oder * ist, entspricht der Ausdruck dem Inhalt von dem
Anfangspunkt-en Feld bis zum Endpunkt.
• ${#Variable} Der Ausdruck entspricht der Anzahl der Zeichen, aus denen
die in Variable gespeicherte Zeichenkette besteht. Wenn Variable gleich
@ oder * ist, entspricht der Ausdruck der Anzahl der Argumente der Shell. Wenn
Variable eine Feldvariable mit dem Index @ oder * ist, entspricht der Aus-
druck der Anzahl der Elemente dieser Feldvariablen.

2.7.7 Shellskripte

Allgemeine Bemerkungen zur Skripterstellung

Am Anfang des Kapitels wurde gezeigt, wie sich Shellkommandos in eine Textdatei
schreiben lassen und diese dann wie ein Programm ausgeführt werden kann, siehe
Quelle 2.2 auf Seite 48. Dabei sind zwei Dinge zu beachten:
• Zu Beginn der ersten Zeile sollte sich folgender Eintrag befinden:
#!/bin/bash
Durch diese Zeile – Shebang genannt – wird das Betriebssystem angewiesen,
das Skript durch die Bash auszuführen. In vielen Shell-Skripten findet man in
der ersten Zeile auch den folgenden Eintrag:
#!/bin/sh
Dies bedeutet, dass das Skript von der Bourne-Shell ausgeführt werden soll. Un-
ter Debian GNU/Linux ist /bin/sh ein symbolischer Link nach /bin/bash.
Es wird mit beiden Zeilen dasselbe Programm aufgerufen. Allerdings verhält
sich die Bash etwas anders, wenn sie über den Namen /bin/sh aufgerufen
wird. Hierdurch wird die Kompatibilität zur Bourne-Shell gewährleistet.
• Die Datei muss für denjenigen, der sie benutzen will, les- und ausführbar sein.
Dies wird mit dem Kommando chmod eingestellt. Die Kennung .sh bei Shell-
skripten ist nicht zwingend, die Shell interessiert sich nicht dafür.
Das Arbeitsverzeichnis, in dem sich das Shellskript befindet, ist nicht immer im
Suchpfad für ausführbare Dateien enthalten (PATH-Variable). Das Skript wird daher
nicht in jedem Fall gefunden. Dies lässt sich ändern, indem das Arbeitsverzeichnis
mit in die Werteliste der Variablen PATH aufgenommen wird oder das Skript mit
seinem Verzeichnisnamen aufgerufen wird. Das Kommando:
joe@debian:~$ PATH=".:$PATH"
fügt das durch einen Punkt dargestellte Arbeitsverzeichnis vor allen anderen Ver-
zeichnissen in den Suchpfad für ausführbare Dateien ein8 . Solange Sie Ihren eige-
nen Programmen Namen geben, die nicht bereits im System vorkommen, spielt es
8
Als Verwalter können Sie Skripte auch in ein Verzeichnis kopieren, das im system-
weiten Suchpfad für Programme enthalten ist. Oft verwendet man hierzu das Verzeichnis
/usr/local/bin.
94 2 Linux/UNIX

keine Rolle, ob Sie den Punkt im Pfad voranstellen oder anhängen. Andernfalls wird
das Programm ausgeführt, das als erstes gefunden wird. Um ein Programm im Ar-
beitsverzeichnis mit Verzeichnisangabe (relativem Pfad) aufzurufen, stellt man dem
Namen der Programmdatei die Zeichenkette ./ voran:
joe@debian:~$ ./myscript
Damit wird in jedem Fall die Datei myscript aus dem Arbeitsverzeichnis ausge-
führt.

Kommentare
Leere Zeilen und Zeilen, die mit einem Doppelkreuz beginnen, werden von der Bash
nicht beachtet. Das Doppelkreuz darf auch irgendwo in einer Zeile, nach gültigen
Anweisungen, stehen und gilt dann für den Rest der Zeile. Dadurch ist es möglich,
Kommentare in Skripte zu schreiben und einzelne Kommandos in sinnvoll zusam-
menhängenden Gruppen anzuordnen. Hiervon sollte man ausgiebig Gebrauch ma-
chen. Am Tag, an dem ein Skript geschrieben wird, ist noch klar, wozu die einzelnen
Anweisungen gut sind. Zwei Wochen oder zwei Jahre später sieht das anders aus.

Variable
Zur weiteren Steigerung der Übersichtlichkeit ist zu empfehlen, Variablennamen zu
wählen, die aussagekräftig sind. Der Name z lässt nicht unbedingt erkennen, was
in dieser Variablen gespeichert wird, wohingegen der Name eingabedatei dies
eher ermöglicht. Die Autoren empfinden es weiter als sinnvoll, Variablen in umfang-
reichen Skripten zu Beginn der Skripte zu deklarieren und ihnen Werte zuzuweisen
(initialisieren). Dadurch kann auf einen Blick geprüft werden, ob ein bestimmter Na-
me schon vergeben ist. Die vordefinierten Positionsvariablen stehen selbstverständ-
lich in Shellskripten zur Verfügung, ebenso Umgebungsvariable.

Ablaufsteuerung (Schleifen)
Jedes Skript, das mehr als nur eine Folge von Kommandos ausführt, benötigt eine
Ablaufsteuerung (E: flow control, F: structure de contrôle). Das sind Kommandos,
die bestimmen, ob eine Aktion ausgeführt wird, die angeben, wie bei einem Fehler
verfahren wird, oder die festlegen, wie oft eine Aktion in einer Schleife (E: loop, F:
boucle) ausgeführt wird. Die Bash bietet dazu eine Reihe eingebauter Kommandos,
die ähnlich auch in anderen Sprachen bekannt sind.
Alle Kommandos zur Ablaufsteuerung können sowohl in der Kommandozeile als
auch in Skripten benutzt und beliebig verschachtelt werden. Die folgende Übersicht
ist ähnlich aufgebaut wie die Kommandoübersicht im Anhang ab Seite 937. Auch
hier gilt, dass Ausdrücke in eckigen Klammern optional (ohne eckige Klammern) zu
benutzen sind. Die meisten Konstrukte zur Ablaufsteuerung setzen sich aus mehreren
Schlüsselwörtern zusammen.
Dem Wiederholen von Kommandos für eine Anzahl von Zeichenketten dient die
for-Schleife:
2.7 Kommandointerpreter (Bash) 95

for Variable [in Zeichenkette [Zeichenkette ...]]; do


Kommando; [Kommando; ...] done;
Das Kommando führt das oder die mit Kommando angegebene(n) Kommando(s) für
jede mit Zeichenkette angegebene Zeichenkette einmal aus. Dabei wird der mit
Variable angegebenen Variablen jeweils die Zeichenkette zugewiesen, für welche
die Kommandos gerade ausgeführt werden. Das Kommando:
joe@debian:~$ for i in tee bier wein; do echo $i; done;
gibt hintereinander die Wörter tee, bier und wein aus. Ist keine Zeichenkette
angegeben, werden stattdessen die Positionsvariablen verwendet. Folgende Anwei-
sungen bedeuten das Gleiche:
joe@debian:~$ for i; do echo $i; done
joe@debian:~$ for i in $*; do echo $i; done
Beide bewirken, dass alle Positionsparameter hintereinander ausgegeben werden.
Ein Skript als Beispiel einer Anwendung der for-Schleife:

#!/bin/bash

for verzeichnis in briefe texte musik grafik


do cd $verzeichnis
mkdir -p backup
mv *~ *.bak *.old backup
cd ..
done;

Quelle 2.4 : Shellskript backup.sh als Beispiel einer for-Schleife

Das Skript wechselt nacheinander in die Verzeichnisse briefe, texte,


musik und grafik, legt dort jeweils ein Unterverzeichnis mit dem Namen
backup an – sofern es noch nicht existiert – und verschiebt alle Dateien mit den
Kennungen ~, .bak oder .old in das Unterverzeichnis. Nach jedem Durchlauf
wird wieder zurück in das Ausgangsverzeichnis gewechselt. Wie man sieht, unter-
scheiden sich die for-Schleifen der Shell und der Programmiersprache C erheblich
in ihrer Bedeutung.
Die while-Schleife wiederholt eine Aktion, solange Kommandos erfolgreich
ausgeführt werden:
while Testkommando; [Testkommando; ...]; do Kommando;
[Kommando; ...]
done;
Zunächst werden die mit Testkommando angegebenen Kommandos ausgeführt.
Wenn das letzte Kommando einen Rückgabewert 0 (Erfolg) hat, werden die mit
Kommando angegebenen Kommandos ausgeführt. Danach werden wieder die mit
Testkommando angegebenen Kommandos ausgeführt. Die Schleife wird so lange
96 2 Linux/UNIX

wiederholt, bis das letzte Testkommando einen von 0 abweichenden Rückgabewert


(Misserfolg) liefert.

#!/bin/bash

# Definition einer Funktion

function frage
{
while true
do echo -n ’Weitermachen? ’
read antwort || return 1
case \$antwort in
j|ja|y|yes|oui) return 0;;
n|nein|no|non) return 1;;
*) echo ’Mit j oder n antworten’;;
esac
done
}

# Anwendung der Funktion frage

while frage
do date # oder etwas Sinnvolleres
done

Quelle 2.5 : Shellskript frage.sh als Beispiel einer while-Schleife

Im Skript wird eine Funktion definiert, die eine while-Schleife enthält, deren
Bedingung immer true ist. Das wäre eine ewige Schleife, wenn sie nicht mittels
return verlassen würde. Die Funktion schreibt eine Frage auf den Bildschirm und
gibt je nach Antwort eine 0 oder 1 zurück. Im Hauptteil des Skripts, der Anwen-
dung der Funktion, steht eine zweite while-Schleife, die die Funktion aufruft, ihr
Ergebnis als Bedingung auswertet und das externe Kommando date aufruft oder
abbricht. Danach ist das Skript beendet.
Die until-Schleife wiederholt eine Aktion, solange Kommandos nicht erfolg-
reich ausgeführt werden:
until Testkommando; [Testkommando; ...]; do Kommando;
[Kommando; ...]
done;
Dieses Kommando gleicht dem while-Kommando mit dem Unterschied, dass die
mit Kommando angegebenen Kommandos so lange ausgeführt werden, wie das letz-
te Testkommando einen Rückgabewert ungleich 0 liefert, also fehlschlägt.

#!/bin/bash

until ping -c 1 buchhaltung &> /dev/null


2.7 Kommandointerpreter (Bash) 97

do echo "Rechner buchhaltung nicht erreichbar"


sleep 5
done

telnet buchhaltung

Quelle 2.6 : Shellskript erreichbar.sh als Beispiel einer until-Schleife

Das Skript untersucht mit dem Kommando ping, ob der Rechner


buchhaltung zu erreichen ist. Die Ausgabe von ping interessiert nicht, wes-
wegen sie nach /dev/null umgeleitet wird. Wenn der Test fehlschlägt, weil der
Rechner schweigt, wird eine Meldung ausgegeben und fünf Sekunden gewartet. Da-
nach wird der Test wiederholt. Sobald der Rechner buchhaltung antwortet und
ping den Rückgabewert 0 liefert, wird eine Verbindung mittels telnet aufgebaut.
Dem menügesteuertes Ausführen von Aktionen dient das Kommando select:
select Variable [in Zeichenkette [Zeichenkette ...]];
do Kommando;
[Kommando; ...] done;
Dieses Kommando ist syntaktisch ähnlich aufgebaut wie das for-Kommando. Es
wird ein Menü dargestellt, in dem alle mit Zeichenkette angegebenen Zeichen-
ketten aufgeführt sind. Jeder Zeichenkette wird dabei eine Zahl zugeordnet. Zu-
sätzlich erscheint eine Aufforderung zur Eingabe einer Zahl. Das Erscheinungs-
bild des Prompts wird durch die eingebaute Variable PS3 festgelegt. Wenn mit
Zeichenkette keine Zeichenkette angegeben ist, werden wie beim Kommando
for stattdessen die Positionsvariablen verwendet.
Nachdem der Benutzer eine Zahl ausgewählt hat, werden die mit Kommando
angegebenen Kommandos ausgeführt. Der Wert der mit Variable bezeichneten
Variablen ist dabei gleich der Zeichenkette, die der Zahl entspricht, welche vom Be-
nutzer ausgewählt wurde. Nach Ausführung aller Kommandos wird das Menü erneut
dargestellt, und es kann wieder eine Auswahl getroffen werden. Wenn eine ungültige
Zahl eingegeben wurde, ist Variable leer. Skripte, die das Kommando verwenden,
sollten dies testen und für eine ungültige Auswahl eine spezielle Aktion vorsehen.
Die Schleife wird mit dem Kommando break verlassen.

#!/bin/bash

PS3="W-
ahlen Sie, was angezeigt werden soll: "

select auswahl in Speicher Platten Benutzer Zeit Ende


echo
do echo
case $auswahl in
Speicher ) free ;;
Platten ) df ;;
Benutzer ) who ;;
Zeit ) uptime ;;
98 2 Linux/UNIX

Ende ) break ;;
* ) echo ungueltig!
esac
done

echo "Bis bald..."

Quelle 2.7 : Shellskript auswahl.sh als Beispiel einer Auswahl mittels select

Das Skript stellt eine interaktive Schnittstelle zu Werkzeugen zur Systeminfor-


mation dar. In der zweiten Zeile wird der Variablen PS3 eine Zeichenkette zuge-
wiesen, die als Prompt für eine Auswahl dient. Dann wird select aufgerufen,
wodurch ein Menü dargestellt wird, in dem der Benutzer zwischen den Punkten
Arbeitsspeicher, Festplatten usw. auswählen kann. Nach erfolgter Aus-
wahl wird mit echo eine Leerzeile ausgegeben. Danach wird mit dem Kommando
case für jede Auswahl ein Programm aufgerufen. Bei der Auswahl von Ende wird
die Schleife mit dem Kommando break verlassen. Die letzte Zeile in der case-
Gruppe gibt eine Fehlermeldung aus, falls eine ungültige Auswahl eingegeben wur-
de. Nach Beendigen der Schleife verabschiedet sich das Skript. Noch ein Beispiel:

#!/bin/bash

PS3="Welche Datei loeschen? "

select datei in *
do rm $datei; break; done;

Quelle 2.8 : Shellskript loeschen.sh als Beispiel einer Auswahl mittels select

Die Kommandofolge zeigt die Dateien im Arbeitsverzeichnis an, die dem Meta-
zeichen * entsprechen (alle Dateien, könnte auch ein anderes Muster sein) und bietet
die Möglichkeit, eine dieser Dateien auszuwählen. Die ausgewählte Datei wird ge-
löscht und die Auswahl verlassen.
Um eine Schleife sofort zu verlassen, gibt man das Kommando break:
break [Tiefe]
Mit for, while, until oder select aufgebaute Schleifen werden sofort ver-
lassen, wenn in ihnen das Kommando break ausgeführt wird. Optional kann dem
Kommando die Tiefe von ineinander verschachtelten Schleifen übergeben werden.
Es werden dann so viele Schleifen gleichzeitig verlassen, wie mit Tiefe angegeben
ist. Vorgabewert für Tiefe ist 1.

#!/bin/bash

for verzeichnis in texte grafiken


do cd $verzeichnis || break
for datei in liste daten index
2.7 Kommandointerpreter (Bash) 99

rm $datei || break 2
done
cd ..
done

Quelle 2.9 : Shellskript abbruch.sh als Beispiel des Abbruchs einer Schleife mittels
break

Das Beispiel zeigt zwei geschachtelte for-Schleifen. In der äußeren Schleife


wird eine Anzahl von Verzeichnissen durchlaufen und versucht, in diese Verzeich-
nisse zu wechseln (cd $verzeichnis). Falls das Kommando fehlschlägt, wird
die Schleife sofort mit break verlassen. Anderenfalls wird die innere Schleife ge-
startet, in der versucht wird, eine Anzahl von Dateien zu löschen. Sobald dies für
eine Datei fehlschlägt, werden beide Schleifen verlassen.
Mit dem Kommando continue springt man an das Ende einer Schleife:
continue [Tiefe]
Das Kommando continue führt dazu, dass alle weiteren Kommandos innerhalb
einer Schleife nicht mehr ausgeführt werden, sondern sofort an das Ende der Schlei-
fe gesprungen wird. Danach wird sie erneut ausgeführt. Auch hier lässt sich optional
die Tiefe angeben, wodurch an das Ende der Schleife der entsprechenden Schachte-
lungstiefe gesprungen wird. Vorgabe für Tiefe ist wieder 1.

#!/bin/bash

for verzeichnis in texte grafiken


do cd $verzeichnis || continue
for datei in liste daten index
rm $datei || break 2
done
cd ..
done

Quelle 2.10 : Shellskript abbruch2.sh als Beispiel des Abbruchs einer Schleife mittels
continue

Diese Abwandlung des vorherigen Beispiels bewirkt im Falle einer nicht erfolg-
reichen Ausführung des cd-Kommandos, dass die Schleife nicht ganz abgebrochen
wird, sondern lediglich an ihr Ende gesprungen wird und daraufhin mit dem nächsten
Verzeichnis weitergemacht wird.

Bedingtes Ausführen von Kommandos

Ein Mittel zur bedingten Ausführung von Kommandos wurde bereits vorgestellt, sie-
he Abschnitt 2.7.4 Bedingte Ausführung mit den Operatoren && und || auf Seite 73.
100 2 Linux/UNIX

Die Operatoren erlauben, Kommandos nur dann auszuführen, wenn das vorange-
hende Kommando erfolgreich (&&) oder nicht erfolgreich (||) ausgeführt wurde. Die
Kommandos if und case bieten jedoch weit mächtigere Möglichkeiten, in Abhän-
gigkeit von Zuständen bestimmte Kommandos und Kommandofolgen auszuführen.
Im Zusammenhang hiermit kommt dem eingebauten Kommando test eine beson-
dere Bedeutung zu.

letzes Kommando erfolgreich (rc=0)

if Kommandokette then Kommandokette Ende

letztes Kommando nicht erfolgreich (rc!=0)

letzes Kommando erfolgreich (rc=0)

elif Kommandokette then Kommandokette Ende

letztes Kommando nicht erfolgreich (rc!=0)

letzes Kommando erfolgreich (rc=0)

elif Kommandokette then Kommandokette Ende

letztes Kommando nicht erfolgreich (rc!=0)

else Kommandokette Ende

fi;
Abb. 2.6: Schema des Skriptablaufs bei Verwendung des if-Kommandos. Die Abkürzung
rc steht für Returncode (Rückgabewert).

if Testkommando1; [Testkommando1; ...]; then


Kommando1; [Kommando1; ...]; [elif Testkommando2;
[Testkommando2; ...]]; then Kommando2; [Kommando2;
...] [elif ...] [else Kommando3; [Kommando3; ...]] fi;
Das Kommando if führt die mit Testkommando1 angegebenen Kommandos
aus. Wenn der Rückgabewert des letzten Testkommandos 0 ist, werden die unter
Kommando1 genannten Kommandos ausgeführt. Abbildung 2.6 verdeutlicht den
Ablauf.
2.7 Kommandointerpreter (Bash) 101

Hinter den Kommandos, die ausgeführt werden, wenn die erste Testbedingung
zutrifft, kann das Schlüsselwort elif stehen. Dann werden, wenn die erste Test-
bedingung nicht zutrifft, die hinter elif angegebenen Testkommandos ausgeführt.
Wenn das letzte dieser Kommandos den Rückgabewert 0 liefert, werden die Kom-
mandos ausgeführt, die hinter dem nächsten then stehen. Es dürfen mehrere elif
...then-Paare hintereinander vorkommen. Dann werden so lange die verschiede-
nen hinter den elif-Wörtern stehenden Testkommandos ausgeführt, bis das letzte
Kommando eines der Testkommandos den Rückgabewert 0 liefert.
Am Ende der Konstruktion kann das Schlüsselwort else stehen. Es bewirkt,
dass die hinter else stehenden Kommandos ausgeführt werden, wenn keines der
vorhergegangenen, hinter if oder elif aufgeführten jeweils letzten Testkomman-
dos einen Rückgabewert 0 hat. Die Folge von bedingten Anweisungen wird mit dem
Wort fi abgeschlossen. Hier ein Beispiel für die Anwendung bedingter Anweisun-
gen:

#!/bin/bash

# Variable initialisieren
rechner="verwaltung abrechnung personal edv"
tot=0; totnamen=""
mailserver="mail.provider.de"
email="admin@admin.org.de"
faxnummer="0049111222333"
log=/var/log/logfile

# Versuchen, die Rechner zu erreichen


for i in $rechner
do if ping -c 1 $i &> /dev/null
then echo "Rechner $i ok." » $log
else tot=$[$tot+1]
totnamen=$totnamen" "$i
echo "Rechner $i nicht ok." » $log
fi
done

# Wenn Rechner unerreichbar, versuchen,


# den Verwalter zu erreichen.
if [ $tot -ne 0 ]
then if ping -c 1 $mailserver &> /dev/null
then echo $totnamen |
mail -s "Rechner ausgefallen" $email
echo "Email gesendet" » $log
elif echo "ausgefallene Rechner: "$totnamen |
sendfax -P 0 -n -d $faxnummer &> /dev/null
then echo "Fax gesendet" » $log
else echo "Benachrichtigung unmoeglich" » $log
fi
fi

Quelle 2.11 : Shellskript bedingt.sh als Beispiel für bedingte Anweisungen


102 2 Linux/UNIX

Das Skript 2.11 dient zur Überwachung der Erreichbarkeit einiger Rechner, die
in der Variablen rechner aufgeführt werden. Im ersten Teil werden die Variablen
deklariert und mit Werten versehen. Im zweiten Teil wird mit einer for-Schleife ver-
sucht, die Rechner mit dem Kommando ping zu erreichen. Dem for-Kommando
werden dazu die Namen der zu überprüfenden Rechner mit der Variablen rechner
übergeben. Das darunter stehende if-Kommando ruft das Programm ping auf, das
den Rückgabewert 0 liefert, wenn der jeweilige Rechner erreicht wird. In diesem Fall
wird in die Datei, deren Namen in der Variablen log gespeichert ist, eine Erfolgs-
meldung geschrieben. Wenn ping einen von 0 abweichenden Rückgabewert liefert,
also der betreffende Rechner nicht zu erreichen ist, wird zu der Variablen tot der
Wert eins hinzuaddiert. Weil die Variable zu Beginn des Skriptes mit dem Wert 0
initialisiert war, enthält sie nach Beendigung der Schleife die Anzahl der nicht er-
reichten Rechnerc. Außerdem werden der Variablen totnamen der Name des nicht
erreichbaren Rechners angehängt und ein Eintrag in die Logdatei geschrieben.
Im dritten Teil wird anhand der Variablen tot geprüft, ob es nicht erreichbare
Rechner gegeben hat. Die eckigen Klammern sind eine vereinfachte Schreibweise
für das Kommando test. Um die eckigen Klammern müssen Zwischenräume ste-
hen, da es Kommandos sind, keine Operatoren. Falls es unerreichbare Rechner gab,
soll der Verwalter benachrichtigt werden. Zu dem Zweck wird zunächst mit dem
gleichen Verfahren geprüft, ob wenigstens der Mailserver zu erreichen ist. Wenn
der Test erfolgreich ist, wird mit dem Kommando mail eine Mail an die in der
Variablen email gespeicherte Anschrift gesendet, welche die angegebene Betreff-
Zeile enthält. Das Programm mail liest den Inhalt der zu sendenden Mail von der
Standardeingabe. Es wird die Liste der Namen nicht erreichbarer Rechner gesendet.
Nachdem die Mail abgeschickt ist, wird ein entsprechender Eintrag in die Logdatei
geschrieben.
Wenn der Mailserver jedoch nicht erreicht werden konnte (Rückgabewert un-
gleich 0), wird versucht, ein Fax an die in der Variablen faxnummer gespeicherte
Faxnummer zu senden. Hierzu wird das Programm sendfax aus dem Debian-Paket
hylafax-client benutzt. Wenn der Rückgabewert von sendfax 0 ist, wird die erfolg-
reiche Absendung des Faxes in der Logdatei vermerkt. Sollte jedoch auch der Ver-
such, ein Fax zu senden, fehlschlagen, wird in der Logdatei vermerkt, dass es nicht
möglich war, den Verwalter zu benachrichtigen.

Testen von Bedingungen

test Ausdruck
oder
[ Ausdruck ]
test überprüft, ob die mit Ausdruck bezeichnete Bedingung wahr oder falsch
ist, und liefert den Wert 0 zurück, falls die Bedingung zutrifft. Anderenfalls wird
der Wert eins zurückgeliefert. Das Kommando kann immer dann eingesetzt werden,
wenn bei der bedingten Ausführung von Kommandos nicht der Rückgabewert eines
2.7 Kommandointerpreter (Bash) 103

Programms beurteilt werden, sondern geprüft werden soll, ob bestimmte Dateien


existieren oder ob Variablen bestimmte Werte haben. Die Entscheidung ist abhängig
vom Rückgabewert von test, der seinerseits abhängig vom Zutreffen oder Nicht-
Zutreffen bestimmter Bedingungen ist.
Es gibt zwei unterschiedliche Schreibweisen für dieses Kommando. In der ersten
Form wird test wie jedes andere Kommando aufgerufen. Als Parameter werden
ihm, wie unten beschrieben, die zu testenden Ausdrücke übergeben. In der zweiten
Form wird an Stelle des Wortes test eine linke eckige Klammer geschrieben, die
– gefolgt von dem zu testenden Ausdruck – von einer rechten eckigen Klammer
geschlossen wird. Die eckigen Klammern müssen als Kommandos von Leerzeichen
eingerahmt werden. Die zweite Schreibweise erhöht die Lesbarkeit des Kommandos
in Skripten. Die beiden Kommandos:
joe@debian:~$ test -e diplom || echo "Arbeit weg"
joe@debian:~$ [ -e diplom ] || echo "Arbeit weg"
sind identisch in ihrer Wirkung. Die Bedingungen bedeuten:
• -e Datei Trifft zu, wenn Datei existiert.
• -x Datei Trifft zu, wenn Datei existiert und ausführbar ist.
• -d Datei Trifft zu, wenn Datei existiert und ein Verzeichnis ist.
• -r Datei Trifft zu, wenn Datei existiert und gelesen werden kann.
• -w Datei Trifft zu, wenn Datei existiert und beschreibbar ist.
• Zeichenkette1 = Zeichenkette2 Die Zeichenketten sind gleich.
• Ausdruck1 -eq Ausdruck2 Die Ausdrücke haben den gleichen numeri-
schen Wert.
• Ausdruck1 -lt Ausdruck2 Der linke Ausdruck ist numerisch kleiner als
der rechte Ausdruck.
• Ausdruck1 -gt Ausdruck2 Der linke Ausdruck ist numerisch größer als
der rechte Ausdruck.
• Ausdruck1 -ne Ausdruck2 Die Ausdrücke sind numerisch ungleich.
• -z Zeichenkette Trifft zu, wenn die Zeichenkette leer ist. Dadurch lässt
sich prüfen, ob eine Variable einen Wert hat.
• -n Zeichenkette Trifft zu, wenn die Zeichenkette nicht leer ist.
• ! Ausdruck Trifft zu, wenn Ausdruck nicht zutrifft (logisches NOT).
• Ausdruck1 -o Ausdruck2 Trifft dann zu, wenn Ausdruck1 oder
Ausdruck2 oder beide zutreffen (logisches OR).
• Ausdruck1 -a Ausdruck2 Trifft dann zu, wenn Ausdruck1 und
Ausdruck2 zutreffen (logisches AND).
Im obigen Shellskript zur Überprüfung der Erreichbarkeit von Rechnern wurde mit
dem Kommando test in der Zeile if [ $tot -ne 0 ] getestet, ob die Va-
riable tot einen von 0 abweichenden Wert hat. Dies ist in dem Skript genau dann
der Fall, wenn mindestens ein Rechner nicht zu erreichen war. Nun möchte man das
Skript vielleicht dahingehend ändern, dass der Verwalter erst dann benachrichtigt
104 2 Linux/UNIX

wird, wenn mehr als ein Rechner nicht zu erreichen ist. Die Zeile ist dann folgender-
maßen zu ändern:
if [ $tot -gt 1 ]
Nun liefert test nur dann den Rückgabewert 0, wenn die Variable tot einen Wert
größer als eins enthält.
Mit test und while lassen sich auch Schleifen realisieren, die nur einige Male
durchlaufen werden sollen:

#!/bin/bash

durchlauf=0
anzahl=10
while [ $anzahl -ne $durchlauf ]
do echo $durchlauf
durchlauf=$[$durchlauf+1]
done

Quelle 2.12 : Shellskript durchlauf.sh als Beispiel für einen Schleifenzähler mittels
test bzw. eckigen Klammern

Hier wird als Test-Kommando für die while-Schleife das Kommando test
in Form der eckigen Klammern benutzt, das prüft, ob die Variablen anzahl und
durchlauf (Schleifenzähler) einen unterschiedlichen numerischen Wert haben.
Falls dies zutrifft, liefert test den Rückgabewert 0, und die Schleife wird durchlau-
fen. Innerhalb der Schleife wird zunächst der Wert der Variablen durchlauf aus-
gegeben und ihr Wert dann um eins erhöht. Die Folge ist, dass nach zehn Durchläu-
fen ihr Wert gleich 10 ist und dann die Test-Bedingung (anzahl und durchlauf
unterscheiden sich) nicht mehr zutrifft, woraufhin test einen von 0 abweichenden
Rückgabewert liefert und die Schleife verlassen wird.
Ein weiterer Anwendungsbereich von test liegt darin zu überprüfen, ob Da-
teien existieren und bestimmte Eigenschaften haben. So führt es zu Fehlern, wenn
Programme aufgerufen werden, die nicht vorhanden sind, oder aus Dateien gelesen
werden soll, für die keine Leseberechtigung besteht. Solche Fehler können durch
Test-Anweisungen vor Aufruf des eigentlichen Programms vermieden werden.
Das folgende Skript ruft das in Wirklichkeit nicht vorhandene Programm
/usr/local/bin/shuffle auf. Das Programm liest Daten von der Standard-
eingabe und schreibt seine Ergebnisse auf die Standardausgabe. Weil das Programm
im Falle eines Fehlers keine Meldungen ausgibt, die auf die Ursache des Fehlers
schließen lassen, wurde das Skript geschrieben. Es testet zunächst die notwendigen
Bedingungen zur erfolgreichen Ausführung von /usr/local/bin/shuffle,
gibt entsprechende Fehlermeldungen aus, falls die Bedingungen nicht erfüllt sind,
und ruft das Programm nur dann auf, wenn alle Bedingungen erfüllt sind:

#!/bin/bash
2.7 Kommandointerpreter (Bash) 105

programm=/usr/local/bin/shuffle
eingabe=/tmp/shuffledata
ausgabe=/tmp/shuffle.out

if [ ! -x $programm ]; then
echo "Fehler: Programm nicht ausf-
uhrbar."
exit 1;
fi;

if [ ! -r $eingabe ]; then
echo "Fehler: Kann Daten nicht lesen."
exit 1;
fi;

if [ ! -w $ausgabe ]; then
echo "Fehler: Ausgabe nicht beschreibbar."
exit 1;
fi;

# Alles stimmt, wir rufen das Programm auf.


cat $eingabe | $programm » $ausgabe

Quelle 2.13 : Shellskript preshuffle.sh als Beispiel eines Testes für die Ausführbarkeit
eines Programmes

In dem Skript werden zunächst Variable definiert, die den Namen der Programm-
datei sowie die Namen von Ein- und Ausgabedatei enthalten. Dann wird getestet, ob
die Programmdatei vorhanden und ausführbar ist (-x), ob die Eingabedatei vorhan-
den und lesbar ist (-r) und ob die Ausgabedatei vorhanden und beschreibbar ist
(-w). Wenn eine der Bedingungen nicht erfüllt ist, wird das Skript mit exit ab-
gebrochen. Dem Kommando exit wird dabei die Zahl 1 als Parameter übergeben.
Dadurch wird bewirkt, dass der Rückgabewert des Skriptes 1 ist. Ein anderer Prozess
oder ein anderes Skript kann anhand des Rückgabewertes dieses Skriptes prüfen, ob
es erfolgreich ausgeführt wurde.

Bedingtes Ausführen von Kommandos in Abhängigkeit von Variablen (case)

case Variable in Zeichenkette1 [ | Zeichenkette1 ... ]


) Kommando1
[; Kommando1 ...] ;; [ Zeichenkette2 [ | Zeichenkette2
... ] ) Kommando2
[; Kommando2 ]] ;; [...] esac
Das Kommando case ermöglicht, in Abhängigkeit vom Wert einer Variablen ver-
schiedene Aktionen auszuführen. Ein Beispiel dafür wurde bereits zusammen mit
dem Kommando select vorgestellt. Zunächst wird der in der mit Variable
bezeichneten Variablen gespeicherte Wert mit der Zeichenkette Zeichenkette1
verglichen. Hier kann an Stelle einer einfachen Zeichenkette auch eine Variable oder
106 2 Linux/UNIX

ein Kommando in einfachen rückwärtsgerichteten Anführungsstrichen stehen (Kom-


mandosubstitution). Dann wird statt der Zeichenkette mit der Ausgabe dieses Kom-
mandos oder dem Wert der Variablen verglichen. Die Zeichenkette darf auch Meta-
zeichen (*, ?, []) enthalten, die beim Vergleich ausgewertet werden.
Hinter der Zeichenkette dürfen sich – durch senkrechte Striche getrennt – weitere
Zeichenketten befinden. Dann wird mit allen vorhandenen Zeichenketten verglichen.
Wenn der Vergleich ergibt, dass der Wert von Variable mit der oder den Zeichen-
ketten übereinstimmt, werden die nach einer runden, rechten Klammer9 stehenden
Kommandos ausgeführt. Die Kommandos müssen mit zwei Semikolons abgeschlos-
sen werden. Danach wird das case-Kommando verlassen.
Ergibt der Vergleich, dass der Wert von Variable nicht mit der
oder den Zeichenketten übereinstimmt, wird nach der nächsten Zeichenkette
(Zeichenkette2) gesucht und dort wieder verglichen. Wenn dieser Vergleich zu-
trifft, werden die hinter den Zeichenketten stehenden Kommandos (Kommandos2)
ausgeführt. Wenn nicht, wird zur nächsten Zeichenkette gesprungen. Das case-
Kommando wird oft zur Auswertung von Parametern benutzt, beispielsweise in
Startskripten wie /etc/init.d/skeleton. Das folgende Beispiel zeigt, wie
dies zur Auswertung langer und kurzer Optionen geschieht:

#!/bin/bash

# Voreinstellungen festlegen
verbose=0
force=0
version="0.99982p21"
files=""

for i;
do case $i in
-h | -\,-h* ) cat « EOF
$0 - Skript mit Optionen
-f | -\,-force : Aktionen ohne Rueckfrage durchfuehren.
-v | -\,-verbose : Erklaeren, was getan wird.
-h | -\,-help : Zeigt diese Hilfe an.
-V | -\,-version : Version des Programms ausgeben.
EOF
exit ;;
-v | -\,-verb* ) verbose=1 ;;
-V | -\,-vers* ) echo $version; exit ;;
-f | -\,-f* ) force=1 ;;
* ) if [ -r $i ]
then files=$files" "$i
else echo $i" ist nicht lesbar!";
exit 1;
fi ;;
esac;
done;

9
Der seltene Fall, dass eine Klammer ohne ihr Gegenstück auftritt.
2.7 Kommandointerpreter (Bash) 107

if [ $verbose -ne 0 ]; then echo "Bearbeite "$files; fi

# Hier folgen die eigentlichen Aktionen.

Quelle 2.14 : Shellskript optionen.sh als Beispiel für eine case-Anweisung

Das Beispiel stellt lediglich den Beginn eines Skriptes dar, die eigentlichen Ak-
tionen fehlen. Wichtig ist die Methode, mit der hier die Kommandozeile auf Optio-
nen untersucht wird. Nach der Deklaration von Variablen im oberen Teil wird eine
for-Schleife über alle Positionsvariablen gestartet. Die Variable i enthält für jeden
Durchlauf dieser Schleife einen Parameter, der dem Skript an der Kommandozeile
übergeben wurde.
Innerhalb der Schleife befindet sich lediglich die case-Anweisung. In dieser
wird der Wert, der sich gerade in der Variablen i befindet, mit jeweils zwei Zeichen-
ketten verglichen, die durch den senkrechten Strich voneinander getrennt sind. Die
erste der beiden Zeichenketten repräsentiert die Option in Kurzschreibweise (mit ei-
nem Minuszeichen) und die zweite Zeichenkette die Option in langer Schreibweise
(mit zwei Minuszeichen). Um die Benutzung des Skripts einfach zu gestalten, wird
bei der langen Schreibweise nur mit den Zeichen am Anfang von Optionen vergli-
chen, die notwendig sind, um eine Option von anderen zu unterscheiden. Hinter den
Anfangszeichen befindet sich das Metazeichen Sternchen, das eine beliebige Anzahl
beliebiger Zeichen bedeutet.
Sobald eine Zeichenkette mit der Variablen i übereinstimmt, werden die Kom-
mandos hinter der runden Klammer nach der entsprechenden Zeichenkette ausge-
führt. Wenn beispielsweise die Option -h oder --help benutzt wurde, führt das
dazu, dass der Hilfetext hinter dem cat-Kommando ausgegeben und das Programm
verlassen wird. Eine ähnliche Wirkung hat die Option -V bzw. --version, nur
dass hier das Kommando echo benutzt wird, um Text auszugeben.
Die Optionen -f bzw. --force und -v bzw. --verbose führen dazu, dass
den Variablen force bzw. verbose neue Werte zugewiesen werden. Hier folgt
kein exit-Kommando, weshalb die for-Schleife erneut durchlaufen wird. Für die
weitere Ausführung des Skripts ist wichtig, dass den beiden Variablen am Anfang be-
reits Werte zugewiesen wurden. Wenn diese Optionen nämlich nicht benutzt werden,
werden den Variablen in der Schleife keine Werte zugewiesen, und die Auswertung
der Variablen in späteren Teilen des Skripts führt zu Fehlern.
Als letzte zu prüfende Zeichenkette befindet sich in der case-Anweisung das
Metazeichen *. Dieses Zeichen trifft auf alle Zeichenketten zu. Deshalb werden die
Anweisungen hinter dieser Zeichenkette immer ausgeführt, wenn nicht vorher der
Vergleich mit einer anderen Zeichenkette erfolgreich gewesen ist. Die Anweisungen
hinter dem Stern haben folgenden Sinn: Immer wenn sie ausgeführt werden, wird
ein Parameter bearbeitet, der keine gültige Option darstellt. Das Skript muss nun
entscheiden, ob es mit solchen Parametern überhaupt etwas anfangen kann. Ange-
nommen, das Skript würde irgendwelche Aktionen mit Dateien ausführen, so könnte
hier geprüft werden, ob es sich bei den hier bearbeiteten Parametern um Dateinamen
108 2 Linux/UNIX

handelt. Genau das wird hier getan. Mit einer test-Anweisung ([ -r $i ]) wird
geprüft, ob der gerade bearbeitete Parameter dem Namen einer Datei entspricht, die
lesbar ist. Falls das zutrifft, wird der Parameter an die in der Variablen files ge-
speicherte Zeichenkette angehängt. Ansonsten wird eine Fehlermeldung ausgegeben
und das Skript mit dem Rückgabewert 1 beendet. Die Folge ist, dass alle Parameter,
die keine Optionen, aber Namen von lesbaren Dateien sind, nach Beendigung des
Skriptteils in der Variablen files gespeichert sind. Die Variable kann im weiteren
Verlauf des Skripts steuern, welche Dateien bearbeitet werden.
Die letzte Anweisung im Beispiel prüft, ob der Wert der Variablen verbose von
0 abweicht, was der Fall sein sollte, falls die Option -v bzw. --verbose benutzt
wurde. Dann wird der Inhalt der Variablen files ausgegeben.
Angenommen, das Skript wird unter dem Namen optionen.sh als ausführ-
bare Datei im Arbeitsverzeichnis gespeichert, dann führt der Aufruf des Skripts in
der Form:
joe@debian:~$ ./optionen.sh -v *
dazu, dass die Namen aller Dateien im Arbeitsverzeichnis ausgegeben werden, so-
fern sie für den aufrufenden Benutzer lesbar sind. Es wird zunächst durch den Para-
meter -v die Variable verbose auf 1 gesetzt. Der Stern wird von der Shell schon
vor dem eigentlichen Aufruf des Skriptes durch die Namen der Dateien im Arbeits-
verzeichnis ersetzt. Diese werden dann von dem Skript nacheinander als Parameter
erkannt, die keine Optionen sind und daraufhin untersucht, ob sie Namen lesbarer
Dateien sind. Wenn das so ist, werden sie – wie beschrieben – dem Wert der Varia-
blen files angehängt, die am Ende des Skriptes aufgrund des Wertes der Variablen
verbose ausgegeben wird.

Funktionen

Die Bash kennt Funktionen wie andere Programmiersprachen auch. Darunter wer-
den Gruppen von Kommandos verstanden, denen ein Name zugeordnet wird, und
die später mit diesem Namen aufgerufen werden. Die Benutzung von Funktionen
bietet sich immer an, wenn eine Gruppe von Kommandos mehrmals ausgeführt wer-
den soll. Mit Funktionen lassen sich längere Shellskripte übersichtlich gestalten. Die
Syntax für Funktionen ist folgende:
Name () { Kommando; [ Kommando; ... ] }
Hierdurch wird eine Funktion mit dem Namen Name definiert. Die Funktion wird da-
nach wie ein gewöhnliches Kommando benutzt. Sobald sie aufgerufen wird, werden
die mit Kommando angegebenen Kommandos zwischen den geschweiften Klam-
mern der Funktionsdefinition ausgeführt. Bei der Definition von Funktionen gibt es
zwei Dinge zu beachten:
• Die Funktion muss vor ihrem ersten Aufruf definiert sein, naheliegend.
• Die Positionsvariablen 1, 2 usw. werden beim Aufruf einer Funktion durch die
Parameter ersetzt, mit denen die Funktion aufgerufen wurde. Nach Beendigen
der Funktion sind wieder die alten Werte gültig.
2.7 Kommandointerpreter (Bash) 109

Funktionen werden an jeder Stelle durch das Kommando return beendet. Wir ha-
ben bereits ein Beispiel für eine Funktion in Quelle 2.5 auf Seite 96 kennen gelernt.
Hier noch ein Beispiel:

#!/bin/bash

hallo () {
if [ -z $1 ] then echo "hallo "$USER
else echo "hallo "$1
fi;
}

hallo
hallo Joe Debian
Quelle 2.15 : Shellskript hallo.sh als Beispiel für eine Shellfunktion

In dem Skript wird zunächst eine Funktion mit dem Namen hallo definiert.
In der Funktion wird geprüft, ob die Positionsvariable 1 leer ist, und falls ja, die
Zeichenkette hallo und der in der Variablen USER gespeicherte Wert ausgegeben.
Wenn die Positionsvariable nicht leer ist, wird stattdessen ebenfalls die Zeichenkette
hallo, aber danach die in der Positionsvariablen 1 gespeicherte Zeichenkette aus-
gegeben. Im unteren Teil des Skripts wird die Funktion zweimal aufgerufen. Einmal
ohne Parameter, was zur Ausgabe von hallo und dem Benutzernamen des Auf-
rufers führt, und einmal mit dem Parameter Joe Debian, was zur Ausgabe der
Zeichenkette hallo Joe Debian führt.
Als reizvolleres Beispiel sehen wir uns ein Start- und Stopskript an. In Ab-
schnitt 11.8.4 Start- und Stopskripte auf Seite 505 ist beschrieben, wie vom Pro-
gramm init während des Systemstarts und beim Wechseln des Runlevels bestimm-
te Skripte ausgeführt werden. Jedes dieser Skripte ist für das Starten oder Anhalten
eines Dienstes oder für das Ein- bzw. Ausschalten bestimmter Systemeigenschaften
zuständig. Diese Skripte akzeptieren mindestens zwei Argumente, nämlich start
und stop. Beim Starten eines Dienstes wird das Skript von init mit dem Argu-
ment start aufgerufen und beim Anhalten mit dem Argument stop. Möchte man
weitere Aktionen beim Systemstart oder beim Wechseln von Runleveln durchführen
oder eigene Dienste starten, dann empfiehlt es sich, eigene Skripte zu diesem Zweck
zu schreiben, die als ausführbare Dateien im Verzeichnis /etc/init.d abgelegt
werden. Danach muss ein symbolischer Link in das /etc/rc*.d-Verzeichnis des
Runlevels, in dem der Dienst zur Verfügung stehen soll, gesetzt werden, und schon
wird der Dienst automatisch bei jedem Wechsel in den entsprechenden Runlevel ge-
startet.
Das folgende Skript definiert den Dienst Soundunterstützung am Beispiel ei-
ner AWE32-Soundkarte. Um die Unterstützung dieser Karte zur Verfügung zu stel-
len, sollen eine Reihe von Kern-Modulen mit konfigurierbaren Parametern geladen
werden. Darüber hinaus soll ein spezielles Programm aufgerufen werden, mit dem
Soundfonts auf der Karte eingerichtet werden. Das hierbei verwendete Programm
und die Soundfont-Datei sollen ebenfalls konfigurierbar sein. Deshalb wurde das fol-
110 2 Linux/UNIX

gende Skript zweigeteilt: zum einen in das eigentliche Startskript, das von init auf-
gerufen wird, und zum anderen in eine Konfigurationsdatei, in der angegeben wird,
welche Module geladen oder entfernt werden sollen, welche Parameter dabei zu ver-
wenden sind und mit welchem Programm welche Soundfont-Datei geladen werden
soll. Die Datei mit dem Startskript bekommt den Namen /etc/init.d/sound
und die Konfigurationsdatei den Namen /etc/sound.config.
Ein zusätzliches Problem ergibt sich dadurch, dass die zu ladenden Module von-
einander abhängen. Sie müssen in einer bestimmten Reihenfolge geladen und beim
Anhalten des Dienstes in umgekehrter Reihenfolge entladen werden. Das Skript soll
sich um diesen Sachverhalt automatisch kümmern10 .
Im Kopfteil des Startskripts findet sich neben der Kommentarzeile die Initia-
lisierung für zwei Variable: do_sfx und rmodules. In der Variablen do_sfx
wird festgehalten, ob Soundfonts auf die Karte zu laden sind, und in der Variablen
rmodules werden die Namen der Module in umgekehrter Reihenfolge gespeichert.
Die Reihenfolge wird zum geordneten Entladen der Module benötigt:

#!/bin/bash

# Starten des Sound-Subsystems


do sfx=0
rmodules=""

if [ -r /etc/sound.config ]; then . /etc/sound.config;


else exit 0; fi;
test -z "$modules" && exit 0:
test -x "$sfxload" && test -r "$sfxdatei" && do sfx=1;

case "$1" in
start)
echo -n "Lade Sound-Treiber... "
for i in $modules
do opts=‘eval echo ’$’$i‘
modprobe $i $opts
done;
[ $do sfx -eq 1 ] && $sfxload $sfxdatei
echo "fertig." ;;
stop)
echo -n "Entferne Sound-Treiber... "
for i in $modules;
do rmodules=$i" "$rmodules; done;
for i in $rmodules;
do rmmod $i; done;
echo "fertig." ;;
restart)
$0 stop
$0 start ;;
force-reload)
10
Alternativ zu dem hier gezeigten Verfahren lässt sich das Laden von Modulen auch mit
dem Programm modprobe automatisieren.
2.7 Kommandointerpreter (Bash) 111

$0 restart ;;
*)
echo "Verwendung: $0 {start|stop|restart|force-reload}"
exit 1
esac

exit 0

Quelle 2.16 : Shellskript sound zum Starten und Stoppen eines Sound-Dienstes

Darunter folgen drei Anweisungen, mit denen geprüft wird, ob genügend Infor-
mationen vorliegen, um alle Aktionen auszuführen. Die erste dieser Anweisungen
testet, ob die Konfigurationsdatei /etc/sound.config vorhanden ist und ge-
lesen werden kann. Falls ja, werden die Anweisungen in der Konfigurationsdatei
ausgeführt (der Punkt ist eine Abkürzung für das Kommando source). Wenn die
Konfigurationsdatei nicht vorhanden oder nicht lesbar ist, wird das Skript sofort und
ohne einen von 0 abweichenden Rückgabewert verlassen. Der Grund hierfür ist, dass
das Startskript auf Systemen, auf denen keine Soundkarte vorhanden ist oder diese
noch nicht konfiguriert wurde, nicht zu Fehlern beim Start führen soll.
Die Konfigurationsdatei /etc/sound.config könnte folgendermaßen aus-
sehen:

# /etc/sound.config
# Konfigurationsdatei f-
ur /etc/init.d/sound
# Namen der zu ladenden Module in der Reihenfolge, in
# der sie geladen werden sollen.
modules="soundcore soundlow sound uart401 sb opl3
awe wave"

# Optionen zum Laden der Module


# Syntax: Modulname="Optionen"
sb="irq=5 dma=0 dma16=5 mpu io=0x330 io=0x220"
opl3="io=0x388"

# Pfad und Name des Programms sfxload


sfxload="/usr/bin/sfxload"

# Pfad und Name der zu ladenden Sounddatei


sfxdatei="/usr/lib/awe/sfbank/synthgm.sbk"

Quelle 2.17 : Konfigurationsdatei für einen Sound-Dienst

Die Datei enthält gewöhnliche Bash-Kommandos, unterscheidet sich jedoch


von einem Shellskript dadurch, dass sie nicht ausführbar zu sein braucht, wes-
wegen ihr auch die sonst übliche Kommentarzeile mit Angabe des Interpreters
(#!/bin/bash) fehlt. Dies liegt daran, dass sie vom Startskript nicht als ein eige-
ner Prozess aufgerufen wird, sondern lediglich die in ihr angegebenen Kommandos
112 2 Linux/UNIX

gelesen und ausgeführt werden. Obwohl hier auch andere Kommandos möglich wä-
ren, befinden sich in dieser Datei nur Variablendefinitionen mit Wertzuweisungen.
Für den Benutzer, der nur diese Datei zu ändern braucht, reicht es aus, hinter die
Gleichheitszeichen Werte entsprechend seiner Konfiguration zu schreiben.
Die erste Nicht-Kommentar-Zeile definiert die Variable modules, in der die
Namen der zu ladenden Module gespeichert werden. Darunter befinden sich Opti-
onsdefinitionen für einige Module, die in Variablen gespeichert werden, welche die
gleichen Namen tragen wie die Module, für die sie gelten. Schließlich folgen die De-
finitionen von zwei Variablen, die den Namen des Programms zur Einrichtung von
Soundfonts und den Namen der einzurichtenden Soundfont-Datei beinhalten.
Im Startskript wird nach der Bearbeitung der Konfigurationsdatei geprüft, ob die
Variable modules leer ist. Falls ja, wird das Skript verlassen. Dann wird geprüft,
ob eine ausführbare Datei zum Laden von Soundfonts angegeben wurde und ob die
Soundfont-Datei lesbar ist.
Nach der Initialisierungsphase wird in einer case-Anweisung der erste dem
Skript übergebene Parameter (Variable 1) ausgewertet. Abhängig vom Wert des Pa-
rameters werden durch die case-Anweisung fünf verschiedene Blöcke des Skripts
ausgeführt:
• start Anweisungen zum Starten des Dienstes.
• stop Anweisungen zum Anhalten des Dienstes.
• restart Die Option wird von vielen Startskripten aus Bequemlichkeit zur Ver-
fügung gestellt. Der Dienst wird angehalten und sofort erneut gestartet. Dies wird
erreicht, indem sich das Skript selbst einmal mit dem Parameter stop und dann
mit dem Parameter start aufruft. Dazu wird nicht der Name des Skripts, son-
dern die Variable 0 benutzt, in der sich der Name des Skriptes befindet. Dies bie-
tet den Vorteil, dass die Funktion auch dann noch funktioniert, wenn das Skript
umbenannt wurde.
• force-reload Einige Programme, die als Systemdienste benutzt werden,
können ihre Konfigurationsdaten neu lesen, ohne angehalten und neu gestar-
tet werden zu müssen. Deswegen implementieren viele Startskripte die Option
force-reload, die solchen Programmen ein bestimmtes Signal schickt, wor-
aufhin die Konfigurationsdaten gelesen werden. In unserem Fall ist dies nicht
möglich, weswegen die Option hier dazu führt, dass das Skript nochmals mit
dem Parameter restart aufgerufen wird.
• * Der Stern zum Schluss fängt den Fall ab, dass mit dem ersten Parameter eine
nicht unterstützte Option ausgewählt wurde. In diesem Fall wird eine Hilfe mit
den gültigen Optionen ausgegeben.
Der start-Teil beinhaltet im Wesentlichen eine Schleife über die in der Varia-
blen modules befindlichen Werte, das heißt über die Namen der Module. In der
ersten Anweisung der Schleife wird ausgewertet, mit welchen Optionen das jeweili-
ge Modul zu laden ist. Die Konvention ist, dass die Optionen für jedes Modul in ei-
ner Variablen mit dem Namen des Moduls gespeichert sind. Daher wird zunächst vor
den Namen des Moduls (in i) das Dollarzeichen gesetzt, um den Namen als Variable
zu deklarieren. Weil diese neu entstandene Variablenbezeichnung nicht automatisch
2.7 Kommandointerpreter (Bash) 113

durch ihren Wert ersetzt wird, wird sie dem Kommando eval übergeben, der eine
weitere Ersetzung durchführt. Da eval die Zeichenkette auflöst und als Kommando
interpretiert, ist der Anweisung das Kommando echo vorangestellt, welches zusam-
men mit eval die Optionen für das zu ladende Modul ausgibt. Diese Ausgabe wird
mittels Kommandosubstitution der Variablen opts zugewiesen. Dann wird das Mo-
dul mit diesen Optionen über das Programm modprobe geladen.
Wenn die Schleife beendet ist und alle Module geladen sind, wird die Soundfont-
Datei eingerichtet (Programmname in sfxload11 , Datei in sfxdatei), falls die
Bedingungen hierzu erfüllt sind. In diesem Fall wäre die Variable do_sfx im In-
itialisierungsteil auf den Wert 1 gesetzt worden.
Der stop-Teil beinhaltet zwei Schleifen. In der ersten werden die Namen der
Module aus der Variablen modules in umgekehrter Reihenfolge in der Variablen
rmodules gespeichert, indem der jeweils aktuelle Modulnamen vor die dort bereits
vorhandenen gesetzt wird. In der zweiten Schleife werden diese Module mit dem
Kommando rmmod entfernt.
In den meisten Fällen ist ein Startskript zum Laden von Modulen nicht notwen-
dig. Vielmehr können Module durch das Kernprogramm kmod automatisch entspre-
chend der Konfiguration in /etc/modules.conf geladen werden. Gelegentlich
ist es wünschenswert, bestimmte Module nur explizit zur Verfügung zu stellen. Da-
durch wird global verhindert, dass Programme die Soundkarte benutzen, wenn dies
nicht gewollt ist. Vorstehendes Beispiel dient nur der Veranschaulichung des Auf-
baus von Shellskripten und darf keineswegs als Anleitung für die Einrichtung von
Sound auf einem Rechner verstanden werden.

2.7.8 Andere Skriptsprachen

Unter Debian GNU/Linux stehen eine Reihe weiterer interpretierter Sprachen


(Skriptsprachen) zur Verfügung, die für manche Anwendungen besser geeignet
sind als die Bash. Die bekanntesten dieser Sprachen sind Perl (http://perl.
org/), Python (http://www.python.org/) und Tcl/TK (http://www.
tcl.tk/). Weitere, weniger bekannte finden sich in der Abteilung Interpreters der
Debian-Paketliste auf http://packages.debian.org/. Als Beispiel für ein
Perlskript diene Quelle 2.18 , das nach Perl umgeschriebene Shellskript 2.3 von
Seite 90 zur Berechnung von Primzahlen. Die dortige Erklärung gilt auch hier.

#!/usr/bin/perl
# perl-Script zur Berechnung von Primzahlen

$ende = 10000; # groesste Zahl


$z = 5; # aktuelle Zahl
$i = 1; # Index von p
@p = (2, 3); # Array der Primzahlen
$n = 2; # Anzahl der Primzahlen

11
Das Programm sfxload ist Bestandteil des Paketes awe-drv. Es wird zum Laden von
Soundfonts auf Soundkarten der Soundblaster AWE-Familie benutzt.
114 2 Linux/UNIX

while ($z <= $ende) {


if ($z % @p[$i] == 0) { # z teilbar
$z = $z + 2;
$i = 1;
}
else { # z nicht teilbar
if (@p[$i] * @p[$i] <= $z) {
$i++;
}
else {
@p[$n] = $z;
$n++;
$z = $z + 2;
$i = 1;
}
}
}

# Ausgabe des Arrays

$i = 0;
while ($i < $n) {
print(@p[$i++], "\n");
}

print("Anzahl: ", $n, "\n");

Quelle 2.18 : Perlskript prim.pl zur Berechnung von Primzahlen

Perl hat Stärken in der Verarbeitung von Zeichenketten. Python ist eine anpas-
sungsfähige, zunächst einfache Skriptsprache, die gut mit anderen Programmierspra-
chen zusammenarbeitet und gern auf Webservern eingesetzt wird. Die Sprache Tcl
mit dem Toolkit Tk ist anfangs einfach und bringt Konstrukte für das Arbeiten mit
Dateien, Grafiken und im Netz mit. Weitere einführende Informationen finden sich
in der Wikipedia. Darüber hinaus können andere Shells eingesetzt werden. Die be-
kanntesten Alternativen zur Bash sind die Korn-Shell und die Tenex C Shell, siehe
die Abteilung Shells der Debian-Paketliste.
Von den interpretierten Sprachen sind solche zu trennen, deren Quellen zunächst
mit einem Compiler in Prozessoranweisungen übersetzt werden und dann ohne wei-
tere Übersetzung ausgeführt werden können. Diese Sprachen bieten den Vorteil, dass
in ihnen verfasste Programme wesentlich schneller als Skripte ausgeführt werden.
Die klassische Programmiersprache unter UNIX und Linux ist C mit seiner mächti-
gen Erweiterung C++. Linux selbst und die meisten unter Debian GNU/Linux einge-
setzten Programme sind in C/C++ geschrieben. Deswegen ist es nicht verwunderlich,
dass diese Sprache einen reibungslosen Zugang zu den Funktionen des Betriebssy-
stems bietet und unter Linux gut unterstützt wird.
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 115

2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers

2.8.1 Grundbegriffe

Dateien (E: file, F: fichier) enthalten Daten, die geschrieben oder gelesen werden.
Das Konzept ist unter Linux/UNIX sehr allgemein zu verstehen. Auch ein Bild-
schirm ist eine Datei oder ein Teil davon. Unter einem Dateinamen werden zusam-
mengehörige Daten zusammengefasst, beispielsweise ein Brief, ein Programm, eine
Webseite, ein Abschnitt eines Buches, eine Zeichnung, ein Foto, ein Musikstück.
Solche gewöhnlichen oder regulären Dateien werden in Verzeichnissen (Ordner, Ka-
talog, E: directory, catalog, folder, F: répertoire) zusammengefasst, um die Übersicht
zu behalten. Unter Linux/UNIX dürfen Datei- oder Verzeichnisnamen alle Zeichen
aller Zeichensätze enthalten außer dem unsichtbaren Nullbyte (ASCII-Zeichen Nr. 0,
00000000) und dem Schrägstrich (ASCII-Zeichen Nr. 47, E: slash, F: barre oblique),
weil dieser im Pfad Verzeichnisnamen voneinander trennt. Es empfiehlt sich jedoch,
auf Sonder- und Steuerzeichen (Umlaute, Escape, Control) zu verzichten; man han-
delt sich nur unnötige Überraschungen damit ein. Auch aus mehreren, durch Zwi-
schenraum getrennten Wörtern bestehende Dateinamen sind erlaubt, erfordern aber
im Umgang zusätzlichen Aufwand (Anführungszeichen), weil der Zwischenraum
von der Shell als Trennzeichen verstanden wird. Große und kleine Buchstaben sind
wie immer in der Linux/UNIX-Welt verschiedene Zeichen. Heute dürfen Datei- und
Verzeichnisnamen bis zu 255 Zeichen lang sein, früher waren es 14. Bei entspre-
chender Konfiguration sind sogar Dateinamen mit einer Länge von 1023 Zeichen
möglich, aber da fragt man sich, wozu die gut sein sollen.
Auch Verzeichnisse sind Dateien. Es handelt sich dabei um eine spezielle Form,
nämlich um zweispaltige Tabellen (genauer: verkettete Listen oder Bäume) der Da-
teien und Unterverzeichnisse, die sich in den Verzeichnissen befinden, samt einer
eindeutigen Nummer – der Inode-Nummer – über die man zu Informationen über die
jeweilige Datei gelangt. Die Zuordnung von Dateiname und Inode-Nummer erfolgt
ausschließlich in Verzeichnissen. Diese werden vom System verwaltet und können
vom Benutzer nur gelesen werden, nicht unmittelbar verändert, da dies den Aufbau
des Dateisystems und den Zugang zu den Daten gefährden würde.
Zu jeder Datei einschließlich der Verzeichnisse gehört ein Inode12 . Der Inode (I-
Node, index node, Informationsknoten, Indexeintrag, Dateikopf) ist selbst eine Art
von kleiner Datei, die alle Informationen über eine Datei (Metadaten) mit Ausnahme
des Namens beherbergt. Dazu gehören:
• Besitzer (E: owner, F: propriétaire) der Datei,
• Gruppe (E: group, F: groupe) der Datei,
• Zugriffsrechte, siehe Abschnitt 2.8.3 Dateiattribute, Zugriffsrechte, Zugriffskon-
trolllisten auf Seite 120,
• Art der Datei (reguläre Datei, Verzeichnis, Symlink . . . ),
• Größe in Bytes,
12
Der, die, das Inode? E: node bedeutet Knoten, die Wörter sind auch verwandt, also ge-
brauchen wir der Inode. Bei Firewall und Socket taucht die Frage ebenfalls auf.
116 2 Linux/UNIX

• Referenzzähler (link counter), das heißt Anzahl der Namen der Datei (harte
Links),
• drei Zeitstempel:
– Zeit des jüngsten öffnenden Zugriffs (atime, access time),
– Zeit des jüngsten schreibenden Zugriffs (mtime, modification time),
– Zeit der jüngsten Änderung des Dateistatus (in etwa: Änderung des Inodes,
ctime, status change time),
• Verweise (Zeiger, Adressen) auf die Datenblöcke der Datei.
Der Inode ist wichtiger als die Datenblöcke. Es gibt Dateien ohne Datenblöcke – bei-
spielsweise die Gerätedateien oder kurze Symlinks – aber keine Datei ohne Inode13 .
Der Aufruf:
joe@debian:~$ stat dateiname
zeigt die Informationen zu einer Datei an, einen Teil davon auch das Kommando ls
mit entsprechenden Optionen, beispielsweise:
joe@debian:~$ ls -li dateiname
Die Manualseite zum Systemaufruf stat (Sektion 2) enthält ebenfalls Einzelheiten
zum Inode. Die Inodes werden in einer eigenen Liste im Dateisystem gespeichert.
Nach der Anmeldung landet ein Benutzer in einem Verzeichnis, das ihm gehört,
in dem er alle Rechte besitzt (möglichst aber auch nur er, von Root abgesehen).
Das Verzeichnis wird Home-Verzeichnis (Heimatverzeichnis, Hauptkatalog, E: ho-
me directory, F: répertoire personnel, répertoire principal) genannt. Dort Ordnung zu
halten, bleibt jedem Benutzer selbst überlassen. Im Interesse der Systemsicherheit
kann der Verwalter bestimmte Vorgaben machen (umask, Quoten).
Um Dateien zu bearbeiten, werden Programme verwendet, die mit den Informa-
tionen, die in einer Datei zu finden sind, etwas anfangen können. So bearbeitet man
Textdateien mit einem Texteditor oder einem Textverarbeitungsprogramm, Bildda-
teien mit Grafikprogrammen, Sounddateien mit Soundwerkzeugen usw. Unser zwei-
tes Debian-Buch widmet sich eingehend solchen Werkzeugen, da hier der Platz nicht
ausreicht. Für Linux/UNIX sind alle gewöhnlichen Dateien Folgen von Bytes; es un-
terscheidet nicht zwischen Text und anderen Inhalten. Das ist nicht überall so.
Auf den nachstehenden Seiten werden Dateien und Verzeichnisse behandelt, wie
sie sich dem Benutzer darbieten. Die technischen Einzelheiten von Dateisystemen
wie ext3 kommen im Abschnitt 13 Dateisysteme ab Seite 563 zur Sprache.

2.8.2 Verzeichnis- und Dateibaum

Viele Anwender, die zum ersten Mal mit einem Linux/UNIX-Betriebssystem arbei-
ten, sind zunächst von der Fülle der Dateien und Verzeichnisse auf dem System ver-
wirrt. Es sind Zehntausende. Während sich die Dateien einfacher Betriebssysteme in

13
Bei Pipes (FIFOs) und Sockets ist die Aussage zu relativieren, aber das sind auch keine
richtigen Dateien.
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 117

nur wenigen Verzeichnissen befinden, wird bei der Einrichtung eines Linux/UNIX-
Systems eine Vielzahl von Verzeichnissen angelegt, die alle mehr oder weniger Teile
des Betriebssystems oder der Distribution beinhalten. Es steckt aber Logik hinter der
Vielfalt. Zwei Gesichtspunkte bei der Einteilung sind:
• statische, sich selten ändernde Daten versus sich laufend ändernde,
• systemübergreifende (shareable) Daten versus systemspezifische.
Daraus folgen vier Kombinationen. Dateien, die Dokumentation wie das Manual ent-
halten, sind beispielsweise statisch und systemübergreifend. Ein weiterer Gesichts-
punkt ist, dass bestimmte Daten beim Systemstart gebraucht werden, andere erst
später. Wer einfach ein fertig konfiguriertes System benutzen möchte, braucht nur
zu wissen, dass sich seine eigenen Dateien in seinem Home-Verzeichnis befinden.
Dieses Verzeichnis ist ein Unterverzeichnis des Verzeichnisses /home und trägt üb-
licherweise den Namen des Besitzers.
Die Verzeichnisse und Dateien bilden eine baumartige Hierarchie mit der Wurzel
oben. Das Wurzelverzeichnis (E: root directory, F: répertoire racine) wird nur mit ei-
nem Schrägstrich bezeichnet, vom Kern während des Systemstarts eingebunden und
während der ganzen Laufzeit beibehalten. Das Wurzelverzeichnis muss selbst – ohne
Einhängen weiterer Partitionen oder Verzeichnisse – alles enthalten, was zum Sys-
temstart und für etwaige Reparaturversuche benötigt wird. Mehr soll in das Wurzel-
verzeichnis auch nicht hineingepackt werden, damit es klein und einfach bleibt. Dazu
kommen im Betrieb weitere, automatisch oder per Kommando eingehängte Partitio-
nen oder Verzeichnisse. Im Mehrbenutzerbetrieb enthält das Wurzelverzeichnis nach
dem Einhängen aller erforderlichen Partitionen folgende Verzeichnisse:
• /bin enthält klassische Linux/UNIX-Kommandos, die schon beim Start, bei Re-
paraturen und beim Zurückspielen von Sicherungskopien (Backups) gebraucht
werden wie mount, bash oder ls. Es muss sich auf derselben Partition be-
finden wie das Wurzelverzeichnis. Die Kommandos sind großenteils übersetzte
(compilierte) Programme, zum Teil aber auch Shellskripte. Sie werden von allen
Benutzern und vielen Shellskripten verwendet. Keine Unterverzeichnisse.
• /boot mit statischen Dateien, die beim Start gebraucht werden, bevor das Wur-
zelverzeichnis eingebunden ist. Hier liegt beispielsweise der Linux-Kern, der von
einem Bootloader wie LILO oder GRUB in den Arbeitsspeicher geladen wird.
• /dev Gerätedateien und ein einziges Kommando (MAKEDEV), nichts anderes.
Muss auf derselben Partition liegen wie das Wurzelverzeichnis. Weiteres siehe
Abschnitt 2.8.4 Gerätedateien auf Seite 127.
• /etc für Dateien zur systemweiten Konfiguration, mit vielen Unterverzeichnis-
sen, wertvoll, da mit dem Schweiß des Verwalters getränkt. Muss auf derselben
Partition liegen wie das Wurzelverzeichnis. Früher enthielt /etc auch Komman-
dos zur Systemverwaltung, die heute in /sbin oder /usr/sbin liegen.
• /home mit den Home-Verzeichnissen der Benutzer, anderswo auch /homes
oder /users genannt. Üblicherweise auf einer eigenen Partition untergebracht,
die während des Systemstarts in das Wurzelverzeichnis eingehängt wird. Kann
über das Netz per NFS oder Samba von einem zentralen Dateiserver zur Verfü-
118 2 Linux/UNIX

gung gestellt werden. Falls man Tausende von Benutzern hat, in Unterverzeich-
nisse für Benutzergruppen unterteilt.
• /lib Bibliotheken und Kernmodule, die beim Start gebraucht werden, daher auf
derselben Partition wie das Wurzelverzeichnis,
• /lost+found Fundbüro für Dateien, die bei einem File System Check keinem
Verzeichnis zugeordnet werden können, normalerweise leer. Jede Partition mit
einem ext2/ext3-Dateisystem betreibt ihr eigenes Fundbüro.
• /media enthält Unterverzeichnisse (Einhängepunkte) für entfernbare Medien
wie Disketten, CD/DVDs, USB-Stöpsel oder Kameras.
• /mnt vorgefertigter, aber unverbindlicher Einhängepunkt für beliebige Datei-
systeme.
• /opt beherbergt optionale Programmpakete wie den Adobe Reader oder Goo-
gle Earth, sofern diese nicht im Verzeichnis /usr/local untergebracht wer-
den. Auch besondere Compiler passen gut dorthin. Im File Hierarchy Standard
vorgesehen, unter Linux eher selten anzutreffen. Gern über das Netz zur Verfü-
gung gestellt, um die Verwaltung der optionalen Programmpakete zu vereinfa-
chen. Nicht für Kleinvieh (lokale Shellskripte) gedacht.
• /proc virtuelles Dateisystem zum Zugriff auf Informationen aus dem Kern.
Enthält keine Dateien mit Daten. Näheres siehe Abschnitt 13.8 Virtuelle Datei-
systeme auf Seite 587. Der Nachfolger heißt /sysfs.
• /root Home-Verzeichnis von Root, auf derselben Partition wie das Wurzel-
verzeichnis, damit es dem Verwalter auch im Single-User-Modus zugänglich ist.
Nicht gedacht für die Arbeit des Verwalters als gewöhnlicher Benutzer; hierfür
sollte der Verwalter ein Konto als gewöhnlicher Benutzer mit Home-Verzeichnis
unter /home verwenden.
• /sbin dem Verwalter vorbehaltene Werkzeuge, die beim Systemstart oder bei
Reparaturen gebraucht werden, wie fsck oder ifconfig. Muss daher auf der-
selben Partition liegen wie das Wurzelverzeichnis.
• /tmp temporäre Dateien, meist von Anwendungsprogrammen angelegt, übli-
cherweise auf eigener Partititon. Wird beim Systemstart geleert, unter Umstän-
den auch häufiger.
• /usr umfangreiches Verzeichnis mit der Mehrzahl der Programme, Bibliothe-
ken und Dokumentationen, die im laufenden Betrieb von allen Benutzern ge-
braucht werden. Bevorzugt auf eigener Partition, rund ein Dutzend Unterver-
zeichnisse. Früher auch mit Unterverzeichnissen, die heute unter /var liegen.
– /usr/bin allgemeine Kommandos, soweit nicht in /bin,
– /usr/doc Dokumentation, heute nur noch mit Symlinks auf /usr/
share/doc oder fehlend,
– /usr/games Spiele und pädagogische Software,
– /usr/include Include-Dateien (Header-Dateien) für C/C++-Programme,
teilweise mit interessanten Informationen,
– /usr/lib Bibliotheken, auch Programme, die nicht direkt von Benutzern
oder Skripten aufgerufen werden,
– /usr/local Heimstatt für lokale Besonderheiten, eigene Züchtungen und
dergleichen, Unterverzeichnisse ähnlich wie /usr, ziemlich wertvoll,
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 119

– /usr/sbin Werkzeuge zur Verwaltung, die nicht schon beim Systemstart


oder für Reparaturen benötigt werden,
– /usr/share systemunabhängige Daten wie Dokumentation oder Wörter-
bücher, oft von einem Server in das lokale Netz exportiert,
– /usr/src Quellcode (source code), auf vielen Arbeitsplätzen leer,
– /usr/X11R6 X Window System Version 11 Release 6, wegen seiner Be-
deutung und seines Umfangs in einem eigenen Verzeichnis untergebracht.
Entsprechend künftig X11R7.
• /var mit Dateien, deren Größe starkt schwankt, typischerweise Protokolldatei-
en (log-Dateien), Warteschlangen (Email, Drucker), Webspace und dergleichen,
Meist auf eigener Partition, rund ein Dutzend Unterverzeichnisse je nach Ausbau
des Systems:
– /var/account Buchaltungsdaten, sofern eingerichtet,
– /var/cache Zwischenspeicher einiger Anwendungen,
– /var/games Spieldaten,
– /var/lib veränderliche Zustandsdaten,
– /var/lock Sperrdateien (lockfile) einiger Anwendungen,
– /var/log Protokolldateien, mehrere Unterverzeichnisse, wichtig für die
Fehlersuche,
– /var/mail Briefkästen der Benutzer,
– /var/run veränderliche Daten laufender Prozesse,
– /var/spool Warteschlangen einiger Anwendungen,
– /var/tmp temporäre Dateien, die einen Systemstart überdauern sollen,
– /var/www Webspace, sofern ein Webserver eingerichtet ist,
– /var/yp NIS-Daten, sofern ein NIS-Server eingerichtet ist.
Das Wurzelverzeichnis enthält wenige Dateien, meist Symlinks auf Boot-Dateien
in den Verzeichnissen. Der Verwalter kann nach reiflicher Überlegung weitere Ver-
zeichnisse unter der Wurzel anlegen, vor allem Einhängepunkte. Jedes Verzeichnis
gehört in ein übergeordnetes Verzeichnis, nur das Wurzelverzeichnis ist sich selbst
über- oder untergeordnet. Die Dateien bilden die Blätter des Baums, unter ihnen
folgt nichts mehr. Im Lauf der Zeit sollte man eine Vorstellung davon entwickeln,
was wohin gehört.
Die Namen der wichtigsten Verzeichnisse sowie ihre Lage stimmen zwischen
den meisten Linux-Distributionen und UNIX-Systemen überein. Sowohl die Namen
als auch die Aufgaben dieser Verzeichnisse sind historisch gewachsen. Das Verzeich-
nis /etc (etc = et cetera, Sonstiges) würde man heute anders nennen, aber so heißt
es nun einmal seit fast fünfzig Jahren. Trotz der groben Übereinstimmung zwischen
allen Linux- und UNIX-Systemen gibt es im Detail Unterschiede. Hierunter leiden
Verwalter, die mit Systemen verschiedener Hersteller arbeiten. Aber auch die Erstel-
lung von Software und von Installationsskripten wird durch Unterschiede im Ver-
zeichnisbaum erschwert. Aus diesem Grund gibt es Bemühungen zur Standardisie-
rung, deren Ergebnis der File Hierarchy Standard (FHS) ist, zur Zeit in der Version
2.1. Der Standard ist in dem Paket debian-policy enthalten und befindet sich nach
dessen Einrichtung im Verzeichnis /usr/share/doc/debian-policy/fhs.
120 2 Linux/UNIX

Englischkenntnisse vorausgesetzt ist das Dokument leicht zu lesen. Der FHS in der
neuesten Fassung ist von http://www.pathname.com/ abrufbar. Bei The Li-
nux Documentation Project gibt es einen Führer Linux Filesystem Hierarchy (2004)
von B INH N GUYEN. Die Verzeichnisstruktur ab Debian GNU/Linux 2.2 richtet sich
nach dem FHS. Es gibt Bestrebungen, auch in die Home-Verzeichnisse, deren Ge-
staltung ihren Besitzern völlig frei gestellt ist, eine verbindliche Struktur hineinzu-
bringen, siehe http://standards.freedesktop.org/.

2.8.3 Dateiattribute, Zugriffsrechte, Zugriffskontrolllisten

Anzeigen von Dateiattributen

Wie wir eben gesehen haben, gehören zu einer Datei Informationen über sie, auch
Metadaten oder Attribute genannt, die in einem Inode abgelegt sind. Wird das Kom-
mando ls mit der Option -l (long) aufgerufen, erfolgt die Ausgabe im langen
Format. Geben Sie in einem Unterverzeichnis, sagen wir texte, Ihres Home-
Verzeichnisses folgendes Kommando ein:
joe@debian:~/texte$ ls -l
Sie erhalten dann eine Ausgabe folgender Art:
insgesamt 38
-rw-r--r-- 1 joe joe 18007 Jun 24 15:21 GPL-Beer
-rw-r--r-- 1 joe joe 18007 Jun 24 15:21 GPL-Komm
In der oberen Zeile wird der Platzbedarf aller angezeigten Dateien in Kilobyte dar-
gestellt. Darunter finden sich ausführliche Angaben zu den beiden Dateien in dem
Verzeichnis, ein Ausschnitt aus dem Inode zuzüglich des Dateinamens:
• Art der Datei, beispielsweise gewöhnliche Datei (-), Verzeichnis (d) oder sym-
bolischer Link (l),
• Rechte des Besitzers an der Datei (read - write - execute),
• Rechte der Gruppe an der Datei,
• Rechte anderer Benutzer an der Datei,
• Anzahl der Verzeichniseinträge (hard link) der Datei,
• Besitzer der Datei,
• Gruppe der Datei,
• Größe der Datei in Bytes,
• Datum (Zeitstempel) der jüngsten Änderung der Datei (mtime),
• Name der Datei.
Bei symbolischen Links wird neben dem Namen des Links zusätzlich der Name der
Datei angezeigt, auf die der Link verweist. Die Bedeutung der Felder wird auch in
Abbildung 2.8 dargestellt. Neben gewöhnlichen Dateien, Verzeichnissen und Sym-
links gibt es noch andere Dateitypen, die in Abschnitt 2.8.7 Besondere Dateiarten
auf Seite 133 besprochen werden.
Aus der oben genannten Ausgabe von ls -l lässt sich Folgendes ablesen:
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 121

Abb. 2.7: 1 Byte aus 8 Bits, einmal nicht durch 0 und 1 dargestellt, oder doch?

• Bei den beiden angezeigten Dateien handelt es sich um gewöhnliche (reguläre)


Dateien, denn das erste Zeichen des ersten Feldes ist ein Bindestrich.
• Beide Dateien gehören dem Benutzer joe (drittes Feld, Besitzer) und sind der
Gruppe joe zugeordnet (viertes Feld).
• Beide Dateien haben eine Größe von 18.007 Byte (fünftes Feld).
• Sie wurden zuletzt am 24. Juni des laufenden Jahres um 15:21 Uhr geändert
(mtime, sechstes Feld).
• Der Besitzer joe darf die Dateien lesen (erstes Feld, zweites Zeichen ist r wie
read) und inhaltlich ändern (erstes Feld, drittes Zeichen ist w wie write). Er darf
die Datei nicht ausführen (erstes Feld, viertes Zeichen ist nicht x wie execute,
sondern ein Strich).
• Mitglieder der Gruppe joe dürfen die Dateien lesen (erstes Feld, fünftes Zei-
chen), aber weder ändern noch ausführen (erstes Feld, sechstes und siebentes
Zeichen).
• Ebenso dürfen alle anderen Benutzer die Dateien nur lesen (erstes Feld, achtes
Zeichen), aber nicht ändern oder ausführen (erstes Feld, letzte beide Zeichen).
• Bleibt noch das zweite Feld, der Linkzähler. Er gibt an, wieviele Namen (harte
Links) die Datei hat, im Minimum einen.
Mit anderen Optionen zeigt ls teilweise andere Attribute an, beispielsweise andere
Zeitstempel. Das Kommando tree zeigt durch Einrückungen und ASCII-Grafik die
Baumstruktur eines Verzeichnisses rekursiv an und versteht ähnliche Optionen wie
ls. Auf Seite 665 steht ein Beispiel.
Daten werden in Rechnern durch Bits dargestellt. Ein Bit ist das Datenatom. Es
nimmt einen von zwei möglichen Werten an. Ob diese durch 0 und 1 oder durch
andere Symbole dargestellt werden, ist unerheblich, siehe Abbildung 2.7. Eine sol-
che Darstellung durch zwei Symbole oder Zustände wird binär genannt und ist vom
Dualsystem – dem Zahlensystem zur Basis 2 – zu unterscheiden. Daraus abgelei-
tet ist bit (klein geschrieben) die Maßeinheit der Informationsmenge, seit C LAU -
122 2 Linux/UNIX

DE E LWOOD S HANNON sich in seiner Informationstheorie damit befasst hat. Der


gewöhnliche Benutzer kommt mit Bits selten in Berührung. Die Übertragungsge-
schwindigkeit in Netzen wird meist in Bit/s gemessen, ansonsten handhabt man die
Bits zu Bytes gebündelt. Wie viele Bits ein Byte ergeben, schwankte anfangs zwi-
schen 5 und 9. Im Jahr 1964 legte IBM im Zusammenhang mit der Rechnerfamilie
IBM System/360 das Byte zu 8 Bits und noch einige andere Dinge fest, und das rührt
daher, dass sich mit 8 Bits alle Schriftzeichen der westlichen Welt darstellen lassen.
In Frankreich und in Normen wird das Wort Oktett bevorzugt. Speicherplatz wird in
Bytes oder Blöcken davon zugewiesen.
Genauso wie man Gramm in Kilogramm umrechnet, lassen sich Bytes zu Ki-
lobytes und höheren Einheiten zusammenfassen. Neben der gewohnten Einteilung
nach Zehnerpotenzen (kilo = 1000) findet sich – sogar häufiger – die Einteilung nach
Zweierpotenzen (kilo = 1024). Für grobe Abschätzungen spielt der Unterschied kei-
ne Rolle, aber manchmal heißt es aufpassen. Will man ausdrücklich darauf hinwei-
sen, dass man Zweierpotenzen meint, schreibt man KiByte oder KiB für 1024 Byte.
Die nächsten Stufen sind Mega, Giga, Tera, Peta, Exa und Zetta, immer mit dem
Faktor 1000 oder 1024 dazwischen, siehe http://physics.nist.gov/cuu/
Units/ und die deutsche Wikipedia unter dem Suchwort Binärpräfix. Datenspei-
cher im Terabyte-Bereich gibt es bereits.

Typ User Group Others Einträge Besitzer Gruppe Größe Datum Dateiname

−dl −r−w−x −r−w−x −r−w−x Anzahl Name Name in Byte Datum Name

d = Verzeichnis Anzahl der Datum


− = Datei r = read Verzeichniss− der
l = Softlink w = write Einträge (Hardlinks) letzten
und andere x = execute Änderung
− = nicht gesetzt
und andere

Abb. 2.8: Bedeutung der Ausgabe des Kommandos ls -l

Besitzer und Benutzer

Die Information, ob ein Benutzer eine Datei lesen oder inhaltlich ändern darf, wird
vom Betriebssystem zu jeder Datei gespeichert. Dabei wird festgehalten, wem die
Datei gehört. Besitzer ist per Vorgabe der Benutzer, der die Datei erzeugt hat. Weiter
wird zu jeder Datei gespeichert, was der Besitzer mit der Datei machen darf. Dabei
gibt es drei verschiedene Zugriffsrechte (E: permission, F: droit d’accès):
• Die Datei darf gelesen werden (E: read, F: lecture). Dieses Attribut wird durch
den Buchstaben r abgekürzt.
• Die Datei darf geändert werden (E: write, F: écriture). Dieses Attribut wird durch
den Buchstaben w abgekürzt.
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 123

• Die Datei darf ausgeführt werden (E: execute, F: exécution). Dieses Attribut wird
durch den Buchstaben x abgekürzt. Alle Programmdateien brauchen dieses At-
tribut, sowohl Skripte wie compilierte Programme.
Kopieren einer Datei setzt die Leseerlaubnis an der Datei voraus, Anlegen oder Lö-
schen die Schreiberlaubnis im übergeordneten Verzeichnis. Bei Verzeichnissen be-
deutet Ausführen Hinein- oder Hindurchgehen. Dies gilt nicht als lesender Zugriff,
im Gegensatz zum Auflisten mittels ls. Textdateien können nicht ausgeführt wer-
den, das Ausführungsrecht ist sinnlos, aber unschädlich.

Gruppen
Gelegentlich ist es erwünscht, einer Gruppe von Benutzern zu erlauben, auf be-
stimmte Dateien zuzugreifen. Hierbei kann es sich um eine Projektgruppe handeln,
bei der alle Mitglieder mit denselben Daten arbeiten. Es würde dann nicht ausrei-
chen, einzelnen Benutzern Schreib- und Leserechte an diesen Daten zu erteilen. Des-
wegen wird – neben dem Besitzer – für jede Datei eine Gruppe gespeichert, für die
eigene Rechte gelten.
Jeder Benutzer gehört mindestens einer Gruppe an (primäre Gruppe, nachzulesen
in /etc/passwd). Er kann aber in weitere Gruppen (sekundäre Gruppen) wech-
seln (nachzulesen in /etc/group). Wenn er Dateien erzeugt, gehören diese der
Gruppe, der er momentan angehört (aktive Gruppe). Hierdurch erhält er je nach Um-
ständen das Recht, auf weitere Dateien zuzugreifen, die diesen Gruppen zugeordnet
sind. Unter Debian/GNU Linux wird beim Anlegen eines Benutzerkontos gleichzei-
tig eine Gruppe mit demselben Namen angelegt, der der neue Benutzer automatisch
angehört. Das sieht nach Verschwendung aus, hat aber den Vorteil, später alle Frei-
heiten bei der Gruppeneinteilung zu haben.
Die für die Gruppe verwalteten Rechte sind die gleichen Rechte, wie sie auch
für den Besitzer verwaltet werden, also read, write und execute. Der Besitzer einer
Datei braucht nicht auch Mitglied der einer Datei verbundenen Gruppe zu sein; beide
Einträge sind unabhängig voneinander.

Andere Benutzer
Neben den Besitzer- und Gruppenrechten werden die gleichen Rechte ein drittes
Mal für alle anderen Benutzer verwaltet, also für alle, die weder der Gruppe, die mit
einer Datei verbunden ist, angehören, noch Besitzer der Datei sind (Rest der Welt, E:
others, F: autres), anders als bei Microsoft, wo jeder wirklich jeder ist.
Viele Systemdateien auf einem Linux/UNIX-System sind für alle Benutzer les-
bar, dürfen jedoch nur von Root verändert werden. Dazu gehört die Dokumentation
in /usr/share/doc, die für alle Benutzer lesbar sein soll, aber von gewöhnli-
chen Benutzern nicht verändert werden darf, ebenso die meisten Konfigurationsda-
teien in /etc. Es gibt wenige Geheimnisse auf einem Linux/UNIX-System. Fast
alle Programme sind von allen Benutzern ausführbar. Ein Programm kann jedoch
unabhängig von den Zugriffsrechten auch selbst entscheiden, bestimmte Tätigkeiten
nur auszuführen, wenn es vom Benutzer mit der Nummer 0 (Root) aufgerufen wird.
124 2 Linux/UNIX

Ändern von Dateiattributen

Dateiattribute können grundsätzlich nur vom Besitzer verändert werden. Darüber


hinaus hat der Systemverwalter das Recht, die Attribute aller Dateien zu verändern.
Es gibt drei Kommandos zum Ändern der Attribute:
• chown change owner, der Besitzer einer Datei wird gewechselt,
• chgrp change group, die mit einer Datei verbundene Gruppe wird gewechselt,
• chmod change mode, die Zugriffsrechte, die Besitzer, Gruppe und andere Be-
nutzer an einer Datei haben, werden verändert.
Im einfachsten Fall lautet die Syntax von chown:
chown Benutzer Datei
Damit wird der mit Benutzer angegebene Benutzer neuer Besitzer der Datei. Das
Kommando chgrp wird genauso verwendet. Nur der Systemverwalter ist berech-
tigt, Dateien neuen Besitzern zu übertragen. Benutzer können Dateien anderen Grup-
pen zuordnen, wenn sie Besitzer der Datei und außerdem Mitglied der Gruppe sind.
Die Änderung von Besitzer und Gruppe kann in einem Aufruf zusammengefasst
werden:
chown besitzer:gruppe datei
Besitzer und Gruppe dürfen statt durch ihre Namen auch durch ihre IDs (Nummern)
angegeben werden.
Ändern Sie zur Übung (als Root, vorher su eingeben, oder mit sudo arbeiten)
Besitzer und Gruppe der Datei GPL-Beer auf root, lassen Sie sich zwischendurch
das Ergebnis mit ls -l anzeigen, und machen Sie die Änderungen hinterher rück-
gängig. Danach geben Sie die Verwalterrechte mit exit auf.
Das Kommando chmod ist etwas schwieriger zu benutzen. Ihm müssen mindes-
tens zwei Argumente übergeben werden:
• Ein Ausdruck, der die zu erteilenden Zugriffsrechte festlegt,
• der oder die Namen der Datei(en), deren Zugriffsrechte geändert werden sollen.
Der Ausdruck, mit dem die Rechte festgelegt werden, setzt sich zusammen aus:
• Einer Angabe, wessen Zugriffsrechte (Besitzer, Gruppe oder Andere) geändert
werden sollen. Diese Angabe besteht aus einem oder mehreren der folgenden
Buchstaben:
u Die Rechte des Besitzers (user, owner) sollen geändert werden.
g Die Rechte der Gruppe (group) an der Datei sollen geändert werden.
o Die Rechte aller anderen Benutzer (others) sollen geändert werden.
a Die Rechte aller Benutzer (all), also Besitzer, Gruppenmitglieder und anderer
Benutzer sollen gleichzeitig geändert werden.
Die Angabe ist nicht zwingend. Wenn sie fehlt, wird angenommen, dass die
Rechte aller Benutzer, also a, gleichzeitig geändert werden sollen.
• Einer Angabe, ob Rechte hinzugefügt oder entfernt werden sollen. Dabei steht
+ dafür, dass Rechte hinzugefügt werden sollen,
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 125

– dafür, dass Rechte entfernt werden sollen und


= dafür, dass die Rechte exakt so wie angegeben gesetzt werden sollen.
• Der Angabe, welche Rechte hinzugefügt, entfernt oder gesetzt werden sollen.
Hierbei werden die gleichen Abkürzungen benutzt, die wir schon aus der Ausga-
be von ls -l kennen:
r Leserecht.
w Schreibrecht.
x Recht zum Ausführen der Datei oder Durchsuchen des Verzeichnisses.
Zwischen den einzelnen Teilen eines solchen Ausdrucks darf kein Leerzeichen ste-
hen. Der Ausdruck u+w würde bewirken, dass chmod einer Datei Schreibrechte für
den Besitzer hinzufügt. Ebenso würde das Argument g+w die Schreibrechte für die
Mitglieder der Gruppe, die mit der Datei verbunden ist, hinzufügen. Der Ausdruck
a-r würde die Leserechte an einer Datei für Besitzer, Gruppenmitglieder und an-
dere Benutzer entfernen. Dies ließe sich mit a+r wieder ändern. a=r würde allen
Benutzern ausschließlich Leserechte erteilen und alle weiteren Rechte entfernen.
Kombinationen sind möglich. So fügt der Ausdruck ug+rwx Schreib-, Lese-
und Ausführungsrechte hinzu, wohingegen go-rwx diese Rechte für die Gruppe
und andere Benutzer entfernt. Außerdem können unterschiedliche Ausdrücke durch
Kommas voneinander getrennt angegeben werden, Beispiel u+rwx,g+w,o-rwx.
Um alle Rechte für alle Benutzer an der Datei GPL-Beer aufzuheben, ist im
Verzeichnis texte folgendes Kommando einzugeben:
joe@debian:~$ chmod a-rwx GPL-Beer
Danach kann niemand (auch nicht der Besitzer) die Datei lesen oder ändern. Versu-
chen Sie, diese Datei mit vi zu bearbeiten; schon das Lesen scheitert. Glücklicher-
weise können der Besitzer der Datei sowie der Systemverwalter die Rechte wieder
ändern und mit folgendem Kommando dem Besitzer Lese- und Schreibrechte ein-
räumen:
joe@debian:~$ chmod u+rw GPL-Beer
Machen Sie sich jetzt mit dem Kommando chmod vertraut, indem Sie
• sich und der verbundenen Gruppe Ausführungsrechte an der Datei GPL-Komm
geben.
• die Ausführungsrechte wieder aufheben.
• sicherstellen, dass nur Sie die beiden Dateien in dem Verzeichnis lesen dürfen.
Lassen Sie sich zwischendurch die Änderungen mittels ls -l anzeigen.
Es gibt eine zweite Art, die Zugriffsrechte zu kennzeichnen, die von manchen
Benutzern bevorzugt wird. Wir bilden eine dreistellige Oktalzahl auf folgende Weise:
• Das Leserecht (r) erhält den Wert 4, das Schreibrecht (w) den Wert 2 und das
Ausführungsrecht (x) den Wert 1. Eine Null bedeutet keine Zugriffsrechte.
• Für jeden der drei Benutzerkreise werden die jeweiligen Zugriffsrechte addiert.
Das Ergebnis ist ein Wert zwischen 0 und 7, daher Oktalzahl.
126 2 Linux/UNIX

• An vorderster (linker) Stelle steht die Summe für den Besitzer, an mittlerer Stelle
die für die Gruppe und rechts die für andere Benutzer.
Gebräuchliche auf diese Weise gebildete Werte sind:
• 700: alle Zugriffsrechte für den Besitzer, keine Zugriffsrechte für eine Gruppe
oder andere; vielfach bei Home-Verzeichnissen anzutreffen,
• 750: alle Zugriffsrechte für den Besitzer, Lese- und Ausführungsrecht für die
Gruppe, für alle anderen keine Zugriffsrechte.
• 755: alle Zugriffsrechte für den Besitzer, Lese- und Ausführungsrechte für die
Gruppe und alle anderen; ein häufiger Wert für Systemverzeichnisse,
• 640: Lesen und Schreiben für den Besitzer, Lesen für die Gruppe, für alle anderen
kein Recht; sinnvoll bei Textdateien in einem Gruppenprojekt.
Der Aufruf:
joe@debian:~$ chmod 600 GPL-Beer
setzt die Zugriffsrechte an der Datei GPL-Beer auf Lesen und Schreiben für den
Besitzer, unabhängig davon, wie sie vorher lauteten. Gelegentlich wird die oktale
Ergänzung jeder Stelle benötigt und als Maske (file mode creation mask) bezeichnet,
siehe man bash unter dem Suchwort umask. Die Maske zum Zugriffsrecht 750
wäre 027.

Zugriffskontrolllisten

Für einige Zwecke ist das Konzept von Besitzern, Gruppen und Rest der Welt nicht
flexibel genug. Hier helfen Zugriffskontrolllisten (E: access control list, ACL, F: liste
de contrôle d’accès) weiter. Wenn es um Dateien geht, müssen Kern und Dateisystem
solche Listen unterstützen, was gegenwärtig möglich, aber nicht vorgegeben ist. Der
Vorteil der Listen besteht darin, dass man mehreren Benutzern oder Gruppen genau
bestimmte Rechte zuteilen kann, während das herkömmliche Owner-Group-Others-
Konzept nur einen Benutzer – nämlich den Besitzer – und nur eine Gruppe zulässt.
Das Debian-Paket acl bringt drei Werkzeuge zum Umgang mit Zugriffskontrolllisten
von Verzeichnissen und Dateien mit. Der Aufruf:
joe@debian:~$ getfacl datei
zeigt die herkömmlichen Zugriffsrechte einer Datei an, falls keine Zugriffskon-
trolllisten eingerichtet sind.
Einzelne Anwendungen verwalten eigene Zugangskontrollisten, beispielsweise
der HTTP-Proxy Squid. In der Datei /etc/squid/squid.conf werden im Ab-
schnitt ACCESSCONTROLS zuerst ACL-Klassen definiert, die aus Benutzern, Rech-
nern, Dateien oder anderen Objekten bestehen, beispielsweise mittels der Zeile:
acl unser_netz src 192.168.1.0/24 192.168.2.0/24
Anschließend wird der Klasse ein durch einen Operator gekennzeichneter Zugriff
auf einen Dienst (Protokoll) erlaubt oder verboten:
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 127

http_access allow unser_netz


http_access deny all
Die Zeilen werden der Reihe nach durchgegangen, bis eine zutrifft. Die Klasse all
trifft immer zu; wenn nicht eine vorangegangene Zeile zu einer Entscheidung geführt
hat, wird der Zugriff verwehrt. Das Konzept wird im User’s Guide von Squid umfas-
send erklärt. Eine ACL-Klasse ähnelt einer Rolle in einer Datenbank. Man vermeidet,
dass man bei jeder Genehmigung alle Betroffenen aufzählen muss, und gewinnt an
Übersicht.

Zeitstempel
Zu jeder Linux/UNIX-Datei gehören drei Zeitangaben, die Zeitstempel (E: time-
stamp, F: date) genannt und automatisch verwaltet werden:
• die Zeit des jüngsten lesenden oder schreibenden Zugriffs (access time, atime),
• die Zeit des jüngsten schreibenden Zugriffs (modification time, mtime),
• die Zeit der jüngsten Änderung des Datei-Status (status change time, ctime).
Ein Lesezugriff ändert nur den ersten Stempel (atime). Ein schreibender Zugriff ak-
tualisiert die beiden ersten Stempel (atime und mtime), weil dem Schreibvorgang
ein Lesevorgang vorausgeht. Der Datei-Status umfasst den Besitzer samt Gruppe,
die Zugriffsrechte und den Linkzähler, also Informationen aus dem Inode. Schrei-
ben, eine Änderung der Zugriffsrechte mittels chmod oder das Hinzufügen von har-
ten Links mittels ln ändert den dritten Stempel. Kurz und bündig ist das auf der
Manualseite zum Systemaufruf stat (Sektion 2) nachzulesen.
Mittels des Kommandos ls kann man sich die Zeitstempel ansehen (man sollte
auch einmal mit einer temporären Datei alle Änderungen durchspielen):
• ls -l zeigt die Zeit des jüngsten modifizierenden Zugriffs auf die Datei an
(mtime), wichtig,
• ls -lu zeigt die Zeit des jüngsten Zugriffs auf die Datei an (atime),
• ls -lc zeigt die Zeit der jüngsten Statusänderung (Inhalt, Besitzer, Zugriffs-
rechte, Links) an (ctime).
Auf manchen Linuxen findet sich ein Kommando stat, das den Systemaufruf stat
umhüllt und die Informationen aus dem Inode – darunter die Zeitstempel – les-
bar wiedergibt. Der Zeitpunkt der Erschaffung einer Datei – das wäre der allererste
schreibende Zugriff – wird nicht festgehalten und ist auch aus technischer Sicht unin-
teressant. Nur wenn eine Datei seit ihrer Erzeugung nicht verändert worden ist, deckt
sich die mtime mit dem Entstehungsdatum. Änderungen am Datei-Inhalt hingegen
sind für Werkzeuge wie make und für Backups wichtig, um entscheiden zu können,
ob eine Datei aktuell ist.

2.8.4 Gerätedateien
Eine Besonderheit von Linux/UNIX ist das Ansprechen aller Geräte – vom Speicher
bis zum Drucker und virtuellen Geräten – als Datei. Das erleichtert das Programmie-
ren. Die Gerätedateien (E: special device file, F: fichier périphérique special) sind
128 2 Linux/UNIX

ausnahmslos im Verzeichnis /dev zusammengefasst. Dort stehen mehr Gerätedatei-


en, als Ihr Rechner Geräte hat. Das ist unschädlich, kostet kaum Speicherplatz und
bereitet das Hinzufügen weiterer Geräte vor. Mittlerweile ermöglicht das Dynamic
Device Management mittels udev das dynamische Anlegen und Löschen von Gerä-
tedateien nach Bedarf. Falls auf Ihrem System ein udev-Dämon werkelt, ist dieser
Weg eingerichtet. Bei den Geräten wird zwischen zeichenweise (character device,
raw device) und blockweise (block device) arbeitenden unterschieden. Character-
Geräte lesen und schreiben Daten ungepuffert in Päckchen beliebiger Größe, Block-
geräte gepuffert in Blöcken fester Größe. Eine Festplatte beispielsweise fällt in beide
Gruppen und hat daher zwei Gerätedateien für die beiden Zugriffsarten. Wie in an-
deren Verzeichnissen gibt es in /dev Unterverzeichnisse und symbolische Links.
Bei den Namen der Gerätedateien erspart man sich Mühe, wenn man sich an die
Konventionen hält, siehe Tabelle 23.1 im Anhang auf Seite 1065.
Zu jedem Gerät gehört ein Zahlenpaar, das mit dem Kommando ls -l ange-
zeigt wird. Um die Gerätenummer der Partition /dev/hda2 zu erfahren, geben wir
ein:
joe@debian:~$ ls -l /dev/hda2
Die Ausgabe sieht ungefähr folgendermaßen aus:
brw-rw---- 1 root disk 3,2 2006-11-21 /dev/hda2
Das Zahlenpaar, die Gerätenummer, wird mit den beiden Zahlen zwischen Gruppe
und Datum angegeben. Sie lautet für /dev/hda2 also 0302 (führende Nullen wer-
den von ls nicht ausgegeben, aber beispielsweise von /sbin/lilo benutzt, um
Backup-Dateien eindeutig zu benennen). Man unterscheidet zwei Gerätenummern:
Major- und Minor-Nummer. Die erste Zahl in der Ausgabe von ls ist die Major-
Nummer, die zweite die Minor-Nummer. Die Major-Nummer kennzeichnet den Ge-
rätetreiber, die Minor-Nummer die Instanz (die laufende Nummer oder bestimmte
Parameter) des jeweiligen Treibers. So hat beispielswesie /dev/hda7 die Major-
Nummer 3 (Treiber) und die Minor-Nummer 7 (laufende Nummer der Partition).
Eine sehr nützliche Gerätedatei ist /dev/null, der Bit Bucket oder das
Schwarze Loch im Datenall. Hinter der Datei steckt keine Hardware. Alles, was nach
/dev/null geschrieben wird, ist weg. Liest man aus /dev/null, so erhält man
ein End-of-File-Zeichen (EOF) zurück. Kopieren wir /dev/null in eine richtige
Datei:
joe@debian:~$ cp /dev/null unsere_datei
so wird sie geleert, bleibt aber erhalten, im Gegensatz zum Löschen. Mit dem Aufruf:
joe@debian:~$ cat /dev/zero > /dev/null
beschäftigt man den Zentralprozessor mit einer sinnlosen Arbeit; beenden mit
<ctrl>+<c>.
Es fällt auf, dass Netzschnittstellen wie eth0 nicht im /dev-Verzeichnis auf-
tauchen. Treiber für Netzschnittstellen haben es weder mit Zeichen noch mit Blöcken
zu tun, sondern mit Datenpaketen. Wenn Pakete eintrudeln, informieren sie den Kern
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 129

von sich aus, was einer Festplatte nie einfiele. Die Treiber bilden eine Klasse für sich.
Entsprechend werden die Netzschnittstellen nicht in /proc/devices aufgelistet,
sondern in /proc/net/dev. Während man aus Gerätedateien lesen oder in sie
schreiben kann:
joe@debian:~$ cat < /dev/null
ist dieser einfache Weg bei Netzschnittstellen nicht gangbar. Wer Genaueres wissen
will, lese in der Literatur zur Programmierung von Treibern und Kernmodulen nach.

2.8.5 Links (Verweise, Verknüpfungen)

Eine Besonderheit der UNIX-Dateisysteme stellen die Verweise oder Links (E: link,
F: lien) dar. Man unterscheidet zwei Typen, die weichen Verweise (softlink) und die
harten Verweise (hardlink). Softlinks werden auch als symbolische Links (symbo-
lic link, Symlink) bezeichnet; in anderen Welten ist die Bezeichnung Verknüpfung
üblich.

Harte Links

Ein harter Link ist ein Eintrag einer Datei in einem Verzeichnis, also das Paar Inode-
Nummer und Dateiname. Für jede Datei muss es mindestens einen Verzeichnisein-
trag geben, damit sie überhaupt gefunden wird. Namenlose Dateien kommen nicht
vor. Der Zugriff auf eine Datei mittels ihrer Inode-Nummer ist zwar möglich, aber
im Normalbetrieb nicht vorgesehen.
Löschen einer Datei bedeutet das Entfernen ihres Eintrags aus dem Verzeichnis.
Die Daten mögen noch auf der Platte sein, aber sie sind nicht mehr zugänglich. Des-
halb wird der Vorgang genauer als logisches Löschen bezeichnet. Der ehemals von
der Datei auf der Platte beanspruchte Platz wird vom System als frei betrachtet und
kann jederzeit überschrieben werden. Ein Zugriff auf Dateien, die keinen Namen
mehr haben, ist nur mit Werkzeugen möglich, die in das Dateisystem eingreifen (file
system debugger, disc editor), und setzt vertiefte Kenntnisse und Glück voraus.
Es ist möglich, für dieselbe Datei sprich Inode-Nummer weitere Einträge im sel-
ben, aber auch in anderen Verzeichnissen anzulegen. Hierzu dient das Kommando
ln. Er hat die gleiche Syntax wie die Kommandos cp und mv, nämlich:
ln Quelle Ziel
Stellen Sie sich vor, Sie bearbeiten die Datei GPL-Beer so häufig, dass Sie sie
gleich nach der Anmeldung in Ihrem Home-Verzeichnis vorfinden wollen. Trotzdem
soll Sie auch im Verzeichnis texte liegen, weil sie zu Ihren Textdateien gehört.
Wenn Sie sich nun in diesem Unterverzeichnis Ihres Home-Verzeichnisses befinden,
erzeugen Sie mit folgendem Kommando einen weiteren Verzeichniseintrag für die
Datei GPL-Beer in Ihrem Home-Verzeichnis:
joe@debian:~/texte$ ln GPL-Beer ../GPL-Beer
oder aus Ihrem Home-Verzeichnis heraus:
130 2 Linux/UNIX

joe@debian:~$ ln texte/GPL-Beer GPL-Beer


Die Datei hat jetzt in Ihrem Home-Verzeichnis den gleichen Namen wie im Verzeich-
nis texte. Sie hätten aber auch einen anderen Namen wählen können. Wechseln Sie
nun in Ihr Home-Verzeichnis und ändern Sie die dortige Datei GPL-Beer gering-
fügig mit einem Texteditor. Wechseln Sie danach wieder in das Verzeichnis texte
und sehen Sie nach, ob die Änderungen auch dort in GPL-Beer vorhanden sind.
Sie sehen, es handelt sich wirklich um dieselbe Datei. Logischerweise gehören zu
beiden Dateinamen dieselben Attribute, da ja nur eine Datei und ein Inode dahinter
stecken. Die Anzahl der harten Links auf eine Datei wird im Linkzähler festgehal-
ten, dessen Wert von ls -l in der zweiten Spalte angezeigt wird. Herauszufinden,
wo etwaige weitere Namen einer Datei liegen, kann mühsam werden, man muss mit
find und der Inode-Nummer arbeiten. Der Inode weiß zwar, wieviele harte Links
auf ihn verweisen, aber nicht, wo diese liegen. Links im selben Verzeichnis lassen
sich manchmal an Hand der übereinstimmenden Dateigröße erkennen.
Wenn Sie jetzt einen der beiden Verzeichniseinträge mit rm löschen, so kön-
nen Sie auf die Datei immer noch unter dem anderen Verzeichniseintrag zugreifen.
Erst wenn alle Verzeichniseinträge gelöscht sind – im Beispiel GPL-Beer in Ihrem
Home-Verzeichnis und im Verzeichnis texte – kann auf die Datei nicht mehr zu-
gegriffen werden, und der Platz, den sie auf der Festplatte eingenommen hat, wird
vom Betriebssystem anderweitig vergeben.
Beim Erzeugen von harten Links bestehen zwei Einschränkungen. Erstens lassen
sich keine Hardlinks auf Verzeichnisse anlegen, weil dies zu geschlossenen Wegen
im Verzeichnisbaum führen kann. Ausnahmen sind die vom System angelegten Be-
zeichnungen Punkt und Punkt-Punkt für das aktuelle Verzeichnis und seinen Boss.
Zweitens müssen sich harte Links immer auf demselben Dateisystem befinden wie
die Datei (Inode) selbst. Jedes Dateisystem führt eigene Inode-Listen. Deshalb kann
ein harter Link nicht die Grenze eines Dateisystems überschreiten.

Weiche Links (Symlinks)

Die beiden Einschränkungen für harte Links lassen sich durch weiche oder symboli-
sche Links (Softlink, Symlink) umgehen. Weiche Links sind kleine Dateien mit eige-
ner Inode-Nummer, in denen die Anweisung an das System steht, eine andere Datei
zu verwenden, sobald auf den weichen Link zugegriffen wird. Linux-Dateisysteme
wie ext2 und ext3 speichern den Zielnamen in dem Inode des Links, sofern er nicht
länger ist als 60 Zeichen, und sparen so einen Speicherblock und einen Lesezugriff
(fast symbolic link). Weiche Links können auch für Verzeichnisse angelegt werden,
sie dürfen die Grenzen eines Dateisystems überschreiten, und sie dürfen geschachtelt
oder verkettet werden. Existiert das Ziel eines weichen Links nicht mehr, führt sein
Aufruf zu einer Fehlermeldung.
Auch weiche Links werden mit dem Kommando ln erzeugt, dem dann die Opti-
on -s (symbolic) mitgegeben wird. Die Syntax zum Erzeugen eines weichen Links
lautet:
ln -s Quelle Ziel
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 131

Um einen weichen Link mit dem Namen Link-auf-GPL-Beer in Ihrem Home-


Verzeichnis auf die Datei GPL-Beer im Unterverzeichnis texte zu erzeugen, ist
folgendes Kommando einzugeben:
joe@debian:~/texte$ ln -s ~/texte/GPL-Beer
~/Link-auf-GPL-Beer
Ebenso wie bei einem harten Link können Sie jetzt mit Link-auf-GPL-Beer
genauso arbeiten wie mit der Originaldatei. Es werden in jedem Fall dieselben Daten
bearbeitet.
Ein Unterschied zwischen weichen und harten Verweisen besteht aber in der
Auswirkung des Löschens auf Original und Verweis. Während das Löschen des Ur-
sprungseintrags bei einer zweifach hart gelinkten Datei die Daten nicht löscht, weil
sie noch unter dem zweiten Namen zu erreichen ist, sieht es bei weichen Links anders
aus. Hier ist zwischen der Entfernung des Links und Entfernung der Ursprungsdatei
zu unterscheiden.
Die Zugriffsrechte von Symlinks werden nicht beachtet, sondern nur die Zu-
griffsrechte der Zieldatei. Will man dennoch die Besitzverhältnisse eines Symlinks
ändern (und nicht die der Zieldatei), bieten chown und chgrp entsprechende Op-
tionen.
Ein sinnvoller Anwendungsbereich für die Arbeit mit weichen Links ist folgende
Situation: Sie haben auf der Partition, auf der Sie Debian eingerichtet haben, keinen
Platz mehr und möchten zusätzliche Pakete einrichten. Deswegen bauen Sie eine
weitere Festplatte in Ihren Rechner ein.
Unter anderen Betriebssystemen würde dies oft bedeuten, dass Sie nun das Be-
triebssystem und alle Anwendungen neu einrichten müssten. Unter Linux/UNIX ko-
pieren Sie einfach einen Teil der Dateien und Verzeichnisse auf die neue Festplatte
und löschen sie anschließend auf der alten Platte. Dann erzeugen Sie weiche Links,
die von der Position, wo sich die Dateien vorher befanden, auf die neue Position
zeigen. In der Praxis würde man hier einfach ein ganzes Verzeichnis mit allen Unter-
verzeichnissen auf die neue Platte kopieren und dann einen einzigen weichen Link
auf die neue Position dieses Verzeichnisses einrichten.
Der Verwalter benutzt Symlinks auch oft, um Verzeichnissen oder Dateien weite-
re Zugangswege zu geben, da sie von verschiedenen Programmen an verschiedenen
Stellen im Dateisystem erwartet werden. Beispielsweise erzeugt
debian:/# ln -s media/cdrom cdrom
einen Zugangsweg zum Einhängepunkt /media/cdrom direkt in der Wurzel des
Dateibaums oder (einzeilig ohne Zwischenraum nach der Null):
debian:/usr/local/bin# ln -s /usr/local/Adobe/Acrobat7.0
/bin/acroread acroread
einen Zugangsweg zum Acrobat Reader in einem Verzeichnis, das üblicherweise im
Befehlspfad (PATH-Variable) der Benutzer vorkommt.
132 2 Linux/UNIX

2.8.6 Pfade

Absolute Pfade

Ein Pfad (E: path, F: chemin) ist der Weg im Dateibaum von einem Ausgangspunkt
zu einem Verzeichnis oder einer Datei. Wenn man nur kurz etwas in einem Verzeich-
nis ändern möchte, ist es oft zu aufwendig, in dieses Verzeichnis zu wechseln, dort
etwas auszuführen und dann zurück in das alte Verzeichnis zu wechseln. Man kann
sich dann mit dem absoluten Pfadnamen helfen. Beispielsweise möchten Sie ein drit-
tes Verzeichnis in Ihrem Home-Verzeichnis anlegen, das den Namen sound trägt,
und Sie befinden sich noch im Verzeichnis /home/joe/grafik. Mit der eben
beschriebenen Methode würden Sie jetzt zurück in Ihr Home-Verzeichnis wechseln,
dort den Befehl mkdir sound eingeben und dann wieder zurück in das Verzeich-
nis grafik wechseln. Sie können aber auch folgenden Befehl eingeben:
joe@debian:~/grafik$ mkdir /home/joe/sound
Der absolute Pfadname bezeichnet den vollen Pfad mit allen Verzeichnissen und Un-
terverzeichnissen ausgehend von der Wurzel des Dateisystems, beginnt also immer
mit einem Schrägstrich.

Relative Pfade

Manchmal hat aber auch die Verwendung absoluter Pfadnamen Nachteile. Stellen
Sie sich vor, Sie verweilen in Ihrem Home-Verzeichnis und möchten im dort be-
findlichen Verzeichnis briefe zwei Unterverzeichnisse mit den Namen privat
und geschaeft anlegen. Sie könnten in das Verzeichnis briefe wechseln und
die Unterverzeichnisse dort erzeugen. Sie können die Verzeichnisse aber auch mit
folgendem Befehl anlegen:
joe@debian:~$ mkdir briefe/privat briefe/geschaeft
Jetzt haben Sie dem Befehl mkdir zwei Parameter übergeben, wodurch beide Ver-
zeichnisse mit einem Befehl erzeugt wurden. Viele Linux/UNIX-Befehle akzeptieren
solche Mehrfach-Parameter. Außerdem haben Sie die beiden Verzeichnisse privat
und geschaeft erzeugt, indem Sie den relativen Pfad, nämlich den Pfad aus-
gehend vom Arbeitsverzeichnis angegeben haben. Relative Pfadnamen bezeichnen
einen Pfad ausgehend vom Arbeitsverzeichnis und beginnen daher nie mit einem
Schrägstrich.
Wenn Sie jetzt in das Verzeichnis musik wechseln und sich den Inhalt von
briefe anzeigen lassen wollen, können Sie folgenden Befehl eingeben:
joe@debian:~$ ls ../briefe
Auch dies ist ein relativer Pfadname. Mit .. (zwei Punkte) wird das über dem Ar-
beitsverzeichnis liegende Verzeichnis bezeichnet – unabhängig von seinem Namen
– das hier das Home-Verzeichnis ist. Von dort geht es weiter in das Verzeichnis
briefe.
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 133

2.8.7 Besondere Dateiarten

Benannte Pipes (FIFO)

In der Auflistung von Verzeichnissen tauchen – selten – zwei Dateiarten auf, die
der Kommunikation zwischen Prozessen dienen: benannte Pipes und Sockets, ge-
kennzeichnet durch p bzw. s an erster Stelle der Ausgabezeilen. Unbenannte Pipes
kennen wir bereits aus Abschnitt 2.7.2 Kommandoverkettung (Pipe) auf Seite 66. Be-
nannte Pipes (E: named pipe, F: tube nommé) tragen einen Namen wie eine Datei,
werden auch als FIFO bezeichnet und mit dem Kommando mkfifo angelegt:
joe@debian:~$ mkfifo meine_benannte_pfeife
Alternativ geht auch:
joe@debian:~$ mknod meine_benannte_pfeife p
Während die unbenannte Pipe mit den beteiligten Prozessen lebt und stirbt, ist die
benannte Pipe eine selbständige Einrichtung. Ihr zweiter Name FIFO bedeutet First
In First Out und kennzeichnet einen Speichertyp, bei dem die zuerst eingelagerten
Daten auch als erste wieder herauskommen (im Gegensatz zum Stack, Stapel oder
Keller, bei dem die zuletzt eingelagerten Daten als erste wieder herauskommen).
Beide Pipes speichern ihre Daten im Arbeitsspeicher, zur benannten gehört ein Inode
ohne Datenblöcke. Mittels ls -l überzeugen wir uns von ihrer Existenz. Dann
können wir mit:
joe@debian:~$ who > meine_benannte_pfeife &
joe@debian:~$ cat < meine_benannte_pfeife
unsere Pipe zum Datentransport vom ersten zum zweiten Prozess einsetzen. Die Rei-
henfolge der Daten ist durch die Eingabe festgelegt, beim Auslesen verschwinden die
Daten aus der Pipe (kein Kopieren). Je nach Zugriffsrechten können der schreibende
und der lesende Prozess verschiedenen Benutzern gehören, was bei einer unbenann-
ten Pipe schlecht möglich ist. Die Pipe existiert vor und nach den beiden Prozessen
und ist beliebig weiter verwendbar. Man wird sie mit:
joe@debian:~$ rm meine_benannte_pfeife
wieder los, wie eine gewöhnliche Datei.

Sockets

Sockets (BSD-Socket, wörtlich Fassung, Steckdose, wird nicht übersetzt, auch nicht
in Frankreich) sind ein Mechanismus zur Kommunikation zwischen zwei Prozes-
sen auf derselben oder auf vernetzten Maschinen in beiden Richtungen. Die Socket-
Schnittstelle besteht aus einer Handvoll von Systemaufrufen, die von Benutzerpro-
zessen in einheitlicher Weise verwendet werden. Dem Programmierer stellen sich
Sockets wie Dateien dar: Er öffnet mittels eines Systemaufrufes einen Socket, er-
hält einen Socket-Deskriptor zurück und schreibt nach dort oder liest von dort. Ist er
134 2 Linux/UNIX

fertig, schließt er den Socket. Zu einem Socket gehört ein Inode ohne Datenblöcke.
Unter den Sockets liegen die Protokollstapel, das heißt die Programmmodule, die die
Daten entsprechend den Schichten eines Netzprotokolls aufbereiten, und schließlich
die Gerätetreiber für die Netzkarten oder sonstige Verbindungen. Näheres siehe mit-
tels man 7 socket.

Tab. 2.3: Die von ext2-Dateisystemen verwendeten Dateitypen

File_type Beschreibung

0 Unbekannter Typ (sollte nicht vorkommen)


1 Gewöhnliche Datei, mit Inode und Datenblöcken
2 Verzeichnis, mit Inode und Datenblöcken
3 zeichenweise arbeitendes Gerät, nur Inode, keine Datenblöcke
4 blockweise arbeitendes Gerät, nur Inode, keine Datenblöcke
5 benannte Pipe (FIFO), nur Inode, keine Datenblöcke
6 Socket, nur Inode, keine Datenblöcke
7 symbolischer Link, mit Inode und gegebenenfalls Datenblock

Sockets lassen sich durch Streams nachbilden (emulieren), aber darauf einzuge-
hen würde zu weit führen. Das betrifft Programmierer, und auch nicht alle. Der Ver-
walter kommt unter Umständen beim Konfigurieren von Netzdruckern mit Sockets
in Berührung. Im Verzeichnis /tmp sind gelegentlich Sockets zu besichtigen. Ta-
belle 2.3 zeigt alle Dateitypen, genau genommen nur für ext2-Dateisysteme. Andere
Dateisysteme können weitere Dateitypen festlegen.

2.8.8 Arbeiten mit Dateien

Anzeigen des Inhalts

Um den Inhalt einer Textdatei auf dem Bildschirm auszugeben, kann das Kommando
cat (concatenate) benutzt werden. Es ist ein einfaches Filter, das von stdin liest
und nach stdout schreibt, weiter nichts. Wegen seiner Einfachheit ist es manchmal
die letzte Rettung für den Verwalter, wenn richtige Texteditoren oder Betrachter nicht
verfügbar sind. Beispielsweise kann man mit cat eine leicht beschädigte fstab
reparieren, falls der Texteditor vi nicht zu erreichen ist.
Auf jedem Debian-System befindet sich die Datei /etc/debian_version,
die Sie sich mit dem Kommando:
joe@debian:~$ cat /etc/debian_version
anzeigen lassen können. Es erscheint eine Zeichenkette, die der Version Ihrer
Debian-Distribution entspricht und in dieser Datei gespeichert ist. Geben Sie nun
folgendes Kommando ein:
joe@debian:~$ cat /usr/share/common-licenses/GPL
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 135

Es wird der Text der GNU General Public License auf dem Bildschirm ausgege-
ben. Bei der Anzeige tritt ein Problem auf: Der Text ist so lang, dass er oben aus
dem Bildschirm herausläuft und Sie nur den Schluss lesen können. Man braucht ein
Werkzeug, mit dem auch größere Dateien am Bildschirm gelesen werden können.
Dieses Werkzeug wird durch das Programm more oder seinen leistungsfähigeren
Nachfolger less dargestellt. Geben Sie folgendes Kommando ein:
joe@debian:~$ less /usr/share/common-licenses/GPL
Sie sehen jetzt den Anfang der Datei auf dem Bildschirm und können mit den Tasten
<Page Up> und <Page Down> sowie mit den Pfeiltasten in der Datei blättern.
Ein besonderer Vorteil von less besteht darin, dass auch nach Zeichenketten ge-
sucht werden kann. Dazu ist die Taste </> (Schrägstrich) zu drücken, die zu suchen-
de Zeichenkette einzugeben und dann mit <cr> zu bestätigen. Suchen Sie einmal
nach dem Begriff software in dieser Datei. Durch Betätigen der Taste <n> (next)
gelangen Sie nach dem Suchvorgang an die jeweils nächste Stelle des Textes, an der
der Begriff gefunden wird. Der Suchbegriff wird als regulärer Ausdruck interpretiert,
sodass Sie auch Suchmuster eingeben können.
Zum Verlassen drücken Sie die Taste <q> (quit). Das Programm wird ausführlich
in Abschnitt 2.11.3 Benutzung von less auf Seite 166 beschrieben. Weitere Textbe-
trachter sind most und xless. Letzteres setzt X11 voraus. Der unter Linux am
häufigsten benutzte Betrachter dürfte less sein.

Kopieren

Weil Sie sich als gewöhnlicher Benutzer am System angemeldet haben, dürfen Sie
die Datei /usr/share/common-licenses/GPL nicht ändern. Sie ist Bestand-
teil der Debian-GNU/Linux-Installation und kann nur vom Systemverwalter geän-
dert werden. Außerdem wäre es töricht, diese Datei zu ändern, weil sie vom Pa-
ketverwaltungssystem gepflegt und während einer Aktualisierung des Systems unter
Umständen überschrieben wird, wodurch Ihre Änderungen verloren gingen.
Wenn Sie die Datei trotzdem bearbeiten möchten – etwa um sie mit Anmerkun-
gen zu versehen – kopieren Sie sie in Ihr Home-Verzeichnis. Zum Kopieren von
Dateien dient das Kommando cp (copy). Dem Kommando müssen mindestens zwei
Argumente übergeben werden, nämlich der Name der Datei, die kopiert werden soll
(Quelldatei) und der Name der zu erstellenden Datei, in die der Inhalt der Quellda-
tei kopiert werden soll (Zieldatei). Das Ziel kann auch ein Verzeichnis sein. Dann
wird die Zieldatei in dem angegebenen Verzeichnis mit dem Namen der Quelldatei
erzeugt. Die Syntax von cp lautet im einfachsten Fall:

cp Quelle Ziel
Um jetzt die GPL in Ihr Home-Verzeichnis zu kopieren, geben Sie folgendes
Kommando ein:
joe@debian:~$ cp /usr/share/common-licenses/GPL ~/
136 2 Linux/UNIX

Hier verwenden wir die Abkürzung ~, um das eigene Home-Verzeichnis anzugeben.


Statt der Tilde können Sie auch einen Punkt verwenden; dann landet die Kopie im
Arbeitsverzeichnis. Wenn Sie sich jetzt in Ihrem Home-Verzeichnis befinden (über-
prüfen mit pwd), können Sie sich Ihre persönliche Kopie der Datei ansehen. Die
Kopie gehört Ihnen, Sie haben alle Rechte an ihr.
Außerdem möchten Sie vielleicht neben der Originalversion eine weitere Versi-
on, in die Sie Ihre Kommentare einfügen, in Ihrem Home-Verzeichnis haben. Dazu
verwenden Sie folgendes Kommando:
joe@debian:~$ cp GPL GPL-Komm
Voraussetzung für die korrekte Ausführung des Kommandos ist, dass Sie sich wei-
terhin in dem Verzeichnis befinden, wo die kopierte Datei GPL liegt. Wenn Sie sich
jetzt mit ls den Inhalt des Verzeichnisses anzeigen lassen, sollten Sie beide Kopien
der GPL sehen.
Bei den Argumenten von cp und ähnlichen Kommandos ist Aufmerksamkeit
geboten. Nehmen wir an, wir hätten das Verzeichnis /home als Arbeitsverzeichnis
gewählt. Dann kopiert der Aufruf:
joe@debian:/home$ cp -dpr joe /tmp
Joes Home-Verzeichnis joe samt seinem Inhalt rekursiv (mit allen Unterverzeich-
nissen) in das Verzeichnis /tmp, wobei Symlinks und Attribute erhalten bleiben.
Wir finden nach Abschluss des Kopiervorgangs ein Verzeichnis /tmp/joe vor. Der
Aufruf:
joe@debian:/home$ cp -dpr joe/* /tmp
dagegen kopiert den Inhalt des Verzeichnisses joe (Dateien und Unterverzeichnisse)
in das Verzeichnis /tmp. Wir treffen Joes Dateien und Unterverzeichnisse direkt im
Verzeichnis /tmp an. Das ist logisch, aber man denkt nicht immer daran.

Löschen

Dateien werden mit dem Kommando rm (remove) gelöscht. Das Kommando benö-
tigt mindestens ein Argument, nämlich den Namen der zu löschenden Datei. Es ist
erlaubt, mehrere Dateien anzugeben. Die Syntax lautet im einfachsten Fall:
rm Dateiname
Löschen Sie die Datei GPL in Ihrem Home-Verzeichnis und überprüfen Sie mittels
ls, ob die Datei verschwunden ist. Vorsich beim Gebrauch von Jokerzeichen in Ver-
bindung mit dem Löschkommando; leicht erwischt man die falschen Dateien. Mit
der Option -i fragt das Kommando vor jedem Löschen einer Datei zurück. Mit der
Option -r arbeitet das Werkzeug rekursiv.
Falls Sie eine Datei mit einem Namen löschen wollen, der Sonderzeichen enthält,
versuchen Sie, den Namen mit Jokerzeichen einzugrenzen, und rufen rm mit der
Option -i (interactive) auf, im ungünstigsten Fall:
joe@debian:~$ rm -i *
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 137

wobei Sie die Fragen von rm so lange verneinen, bis sie bei dem Löschkandida-
ten angelangt sind. Nach dem Löschen brechen Sie das Kommando mit den Tasten
<ctrl>+<c> ab.
Das Debian-Paket perforate enthält drei Werkzeuge, um der Verschwendung von
Plattenplatz entgegenzuwirken:
• finddup durchsucht ein Verzeichnis rekursiv nach doppelt vorhandenen Datei-
en und ersetzt auf Wunsch die Duplikate durch harte Links,
• findstrip durchsucht ein Verzeichnis rekursiv nach ungestrippten Program-
men und gibt ihre Namen aus; vergleiche man strip,
• zum zieht Folgen von Nullen in Dateien zusammen.
Man sollte die Werkzeuge zuerst an Testdateien ausprobieren, um ihre Wirkung ken-
nen zu lernen. Am brauchbarsten scheint finddup zu sein. Der Aufruf:
joe@debian:~$ finddup --noactive
ist ungefährlich und rödelt je nach Umfang des Arbeitsverzeichnisses eine Zeitlang
auf der Platte herum.
Unter Linux/UNIX sind mittels rm gelöschte Dateien weg. Sie stehen nicht mehr
in einem Papierkorb oder über ein undelete-Kommando zur Verfügung. Genau
genommen sind die Dateien aber nur logisch gelöscht; die Daten können unter Um-
ständen auf einem mühsamen Weg teilweise rekonstruiert werden (File System De-
bugger). Wenn Sie aus Gründen der Sicherheit eine Datei, ein Verzeichnis, eine Par-
tition oder die Daten einer ganzen Platte restlos vernichten wollen, müssen Sie sie
vor dem Löschen mehrmals mit Unsinn überschreiben:
debian:~# dd if=/dev/urandom of=/dev/hdb bs=64k
Der Aufruf schreibt Zufallszahlen auf die gesamte Platte /dev/hdb, also die
Slave-Platte am ersten IDE-Controller. Das Kommando wipe aus dem gleichna-
migen Debian-Paket, Heimathafen http://abaababa.ouvaton.org/, unter-
stützt das Löschen durch mehrfaches Überschreiben. In dem Paket coreutils ist das
GNU-Werkzeug shred enthalten, das Ähnliches leistet. Lesen Sie die zugehöri-
gen Manualseiten gründlich, wipe und shred haben Einschränkungen. Weite-
re Werkzeuge zum sicheren Löschen bringt das Paket secure-delete, Heimathafen
http://www.thc.org/, mit:
• sfill reinigt unbelegten Platz in einer Partition, das heißt überschreibt die Res-
te einschließlich der Inodes nur logisch gelöschter Dateien.
• smem löscht den Arbeitsspeicher.
• srm ein gründlich arbeitender Ersatz für rm.
• sswap reinigt die Swap-Partition.
Nach getaner Arbeit lässt sich – möglichst im Single User Modus – mit dem Aufruf:
debian:~# sfill -lf /tmp 2>/dev/null
ein Verzeichnis – hier /tmp – von den Resten mittels rm logisch gelöschter Datei-
en befreien. Noch gültige Dateien oder Verzeichnisse werden nicht angetastet. Die
138 2 Linux/UNIX

Kommandos brauchen Zeit und werden daher oft mit Optionen zur Abkürzung des
Verfahrens aufgerufen.
Moderne Festplatten blenden defekt gewordene Sektoren unbemerkt aus; auf die-
sen können sich Daten befinden, die mit keinem Kommando mehr erreichbar sind,
wohl aber mit speziellen Werkzeugen, die bis hin zu besonderen Mikroskopen rei-
chen. Als absolut sicher gilt Einschmelzen des Datenträgers. Denken Sie daran vor
dem Entsorgen oder Veräußern von Rechnern, Platten, Floppies oder USB-Stöpseln.
Auch Anrufbeantworter, Mobiltelefone und Digitalkameras enthalten Speicher.
Wenn Sie auf einer grafischen Benutzeroberfläche wie GNOME oder KDE mit
einem Datei-Manager (Datei-Browser) arbeiten, löschen Sie eine Datei durch Ankli-
cken und Auswählen eines Menüpunktes wie In den Müll verschieben. In diesem
Fall lässt sich die gelöschte Datei wieder aus dem Mülleimer hervorholen, solange
die Müllabfuhr den Eimer noch nicht geleert hat.

Verschieben und Umbenennen

Hoffentlich möchten Sie Ihr Home-Verzeichnis ordentlich gestalten. Deswegen soll


die Datei GPL-Komm in einem Unterverzeichnis liegen, das den Namen texte
trägt. Legen Sie dieses Verzeichnis jetzt an (make directory):
joe@debian:~$ mkdir texte
Nun kann die Datei mit dem Kommando mv (move) in dieses Verzeichnis verschoben
werden. Das Kommando benötigt – wie cp – mindestens zwei Argumente, nämlich
den alten Namen der zu verschiebenden Datei und den neuen. Bei dem neuen Namen
kann es sich um ein Verzeichnis handeln. Dann wird die zu verschiebende Datei in
das angegebene Verzeichnis gelegt und behält ihren Namen, den sie vorher – im alten
Verzeichnis – hatte. Die Syntax von mv lautet im einfachsten Fall:
mv Name-Alt Name-Neu
Um die Datei GPL-Komm in das frisch angelegte Verzeichnis texte zu verschie-
ben, ist folgendes Kommando einzugeben:
joe@debian:~$ mv GPL-Komm texte
Dass texte ein Verzeichnis und nicht etwa ein neuer Dateiname ist, erkennt das
Kommando. Wechseln Sie danach in das Verzeichnis texte und überprüfen Sie, ob
die Datei dort angekommen ist:
joe@debian:~$ cd texte; ls -l
Bleibt eine Datei beim Verschieben in ihrem Dateisystem, behält sie ihre Inodenum-
mer. Wechselt sie das Dateisystem, entspricht das Verschieben einem Kopieren mit
anschließendem Löschen der ursprünglichen Datei.
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 139

Versteckte Dateien (Punktdateien)


Eine besondere Form von Dateien sind die versteckten Dateien oder Verzeichnis-
se (E: hidden file, hidden directory), auch als Punktdateien oder Dotfiles bzw. -
directories bezeichnet, weil ihr Name mit einem Punkt beginnt. Diese Dateien oder
Verzeichnisse unterscheiden sich von anderen nicht bezüglich ihrer Attribute. Sie
sind in keiner Weise geheim oder verschlüsselt. Solche Dateien oder Verzeichnisse
werden von ls oder von Dateimanagern nur mit der Option -a (all) angezeigt.
Der Grund hierfür besteht darin, dass in den Home-Verzeichnissen eine Reihe
von Dateien liegt, in denen die Einstellungen der Benutzer für verschiedene Pro-
gramme gespeichert werden. Dadurch können verschiedene Benutzer unterschiedli-
che Einstellungen für dieselben Programme verwenden. Auch wenn man ein Werk-
zeug nur einmal ausprobiert hat, bleibt seine persönliche Konfigurationsdatei beste-
hen. Das trifft sogar dann zu, wenn der Verwalter das Werkzeug wieder aus dem
System rauswirft. Man sollte von Zeit zu Zeit vorsichtig unter seinen Punktdateien
und -verzeichnissen ausmisten. Die Tatsache, dass eine Datei oder ein Verzeichnis
leer ist, sagt nichts über ihre Daseinsberechtigung. Eine leere Datei kann allein schon
durch ihre Existenz oder ihre Zeitstempel etwas bedeuten.
Die Anzeige dieser Dateien, von denen bei Benutzung vieler Werkzeuge eine
ganze Menge vorhanden sind, stört jedoch einfach, wenn man sich den Inhalt seines
Home-Verzeichnisses ansieht. Aufgrund der großen Anzahl von Dateien wird die
Struktur unübersichtlich, und gesuchte Dateien lassen sich nur schwer finden. Wenn
Sie in Ihr Home-Verzeichnis wechseln und dann das Kommando:
joe@debian:~$ ls -a
eingeben, sehen Sie, dass dort einige solcher Dateien oder Verzeichnisse existie-
ren. Sie sollten zumindest die Einstellungsdateien der bash finden, die die Namen
.bashrc und .bash_profile tragen. Außerdem sehen Sie noch zwei besonde-
re Einträge, die .. und . lauten. Diese Einträge bezeichnen stets das Verzeichnis,
das über dem angezeigten Verzeichnis liegt (..) sowie das angezeigte Verzeichnis
selbst (.), das ebenfalls einen Eintrag in der Dateiliste des betreffenden Verzeichnis-
ses hat.
Selbstverständlich ist es möglich, verschiedene Parameter beim Aufruf von ls
und anderen Kommandos oder Programmen zu kombinieren. Das folgende Kom-
mando zeigt die vollständige Liste aller Dateien in Ihrem Home-Verzeichnis im lan-
gen Format:
joe@debian:~$ ls -la ~/
Das Zusammenziehen von Optionen ist nicht bei allen Kommandos erlaubt, siehe
Manual.

2.8.9 Arbeiten mit Verzeichnissen


Home-Verzeichnis, Arbeitsverzeichnis
Zusammengehörende Daten – beispielsweise der Text eines Briefes – werden in einer
Datei abgelegt. Zusammengehörende Dateien – beispielsweise alle Briefe an einen
140 2 Linux/UNIX

Empfänger – werden in ein Verzeichnis eingeordnet. Verzeichnisse können ihrerseits


wieder in übergeordneten Verzeichnissen zusammengefasst werden, sodass sich eine
Baumstruktur (E: tree, F: arborescence) ergibt, deren Knoten (E: vertex, F: nœud,
sommet) die Verzeichnisse und deren Blätter die Dateien sind. Wurzel oben14 . Ei-
ne zweckmäßige Verzeichnisstruktur ist für die Arbeit ebenso wichtig wie Ordnung
in papiernen Unterlagen. Während die Systemverzeichnisse weitgehend durch Stan-
dards und Konventionen vorgegeben sind und nur vom Verwalter geändert werden
könnten (der sich hüten wird, das zu tun), ist ein Benutzer für die Verzeichnisstruktur
unterhalb seines Home-Verzeichnisses selbst zuständig. Iin unserem zweiten Debian-
Buch ist ein eigener Abschnitt der Verzeichnisstruktur eines Textprojektes gewidmet,
die wesentlich ist für ein effektives Schreiben und Formatieren. Die Zugriffsrechte
der Verzeichnisse tragen zur Datensicherheit bei.
Jedem Benutzer ist ein Home-Verzeichnis zugeordnet, und zwar durch einen
Eintrag in der Datei /etc/passwd. Das ist das Verzeichnis, in dem der Benut-
zer selbst Dateien und Unterverzeichnisse anlegen und verändern darf. Wir haben
den Begriff schon einige Male gebraucht. Nach der Anmeldung am System ist das
Home-Verzeichnis des Benutzers das Arbeitsverzeichnis seiner Shell. Man befindet
sich nach der Anmeldung immer dort, wo man auch alle Rechte an den Dateien hat.
Außerhalb seines Home-Verzeichnisses hat ein Benutzer nur eng begrenzte Rechte,
in fremden Home-Verzeichnissen normalerweise keine.
Darüber hinaus ist jedem Programm – auch der Bash – ein Arbeitsverzeichnis
(aktuelles V., E: working directory, current directory, F: répertoire courant, réper-
toire de travail) zugeordnet. Das Arbeitsverzeichnis bestimmt, wo Dateien gesucht
oder neu angelegt werden. Immer wenn nicht ausdrücklich etwas anderes verlangt
wird, werden Dateien in dem jeweiligen Arbeitsverzeichnis angelegt oder gesucht.
Das Arbeitsverzeichnis kann stets – unabhängig von seinem Namen – mit einem
einzelnen Punkt bezeichnet werden.

Anzeigen des Arbeitsverzeichnisses

Um Ihr Arbeitsverzeichnis anzuzeigen, geben Sie:


joe@debian:~$ pwd
(print working directory) ein. Sie erhalten eine Ausgabe wie:
/home/joe
oder
/home/joe/texte
wobei anstelle von joe Ihr Benutzername steht, vorausgesetzt bei der Namensge-
bung wurde der Konvention gefolgt, die Home-Verzeichnisse mit den Benutzerna-
men zu kennzeichnen, was nicht zwingend ist. Danach erscheint wieder der Prompt,
und Sie können ein neues Kommando eingeben.
14
Baum: Wurzel unten = Wald, Wurzel oben = Informatik, keine Wurzel = Segelschiff
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 141

An der Ausgabe /home/joe ist zu erkennen, dass das Verzeichnis joe ein
Unterverzeichnis des Verzeichnisses home ist. Verzeichnisnamen werden unter Li-
nux/UNIX durch einen Schrägstrich getrennt. Hieraus folgt, dass ein Schrägstrich
niemals Teil eines Datei- oder Verzeichnisnamens sein darf, wie bereits bemerkt.
Dies ist für viele Linux-Anfänger ungewohnt, weil andere Betriebssysteme Verzeich-
nisnamen durch einen umgekehrten Schrägstrich trennen.
Gemäß Konvention werden die Verzeichnisse der gewöhnlichen Benutzer unter-
halb des Verzeichnisses /home angelegt. Gäbe es auf Ihrem System zwei Benutzer
mit den Namen joe und eva, so würde das Verzeichnis /home die beiden Un-
terverzeichnisse joe und eva beinhalten. Während das Verzeichnis /home dem
Benutzer root gehört und die Zugriffsrechte 755 aufweist – sodass jeder Benut-
zer hineinwechseln und lesen, aber nicht Unterverzeichnisse anlegen oder löschen
darf – sollen die einzelnen Home-Verzeichnisse den jeweiligen Benutzern gehören
und durch restriktive Zugriffsrechte (700) geschützt sein. Nur Root hat sein Home-
Verzeichnis direkt unterhalb der Wurzel des Verzeichnisbaums.
Jetzt ist es höchste Zeit, sich mit dem online-Handbuch (Manual, man-Seiten)
vertraut zu machen. Zu fast allen Kommandos gibt es eine als Datei abgespeicherte,
einheitlich aufgebaute Beschreibung. Geben Sie
joe@debian:~$ man pwd
ein, um die Beschreibung zu pwd auf den Bildschirm zu bekommen. pwd ist ein
einfaches Kommando ohne Optionen oder Argumente, entsprechend kurz fällt die
Beschreibung aus. Die Beschreibung des Manuals selbst erhalten Sie mittels
joe@debian:~$ man man
Sie sollten sich angewöhnen, sich auf diese Weise über für Sie neue Kommandos zu
unterrichten. Ausführlich wird das Manual im Abschnitt 5.2 Manual auf Seite 274
erläutert.

Erzeugen von Verzeichnissen


Auf die Dauer wird es unübersichtlich, wenn Sie alle Ihre Dateien in Ihrem Home-
Verzeichnis aufbewahren. Vielleicht wollen Sie Ihr Debian-System in erster Linie
dazu verwenden, Briefe zu schreiben und Bilddateien zu erstellen und zu bearbeiten.
Es wäre sinnvoll, für diese beiden Gebiete je ein Unterverzeichnis anzulegen. Das
geht mit dem Kommando:
joe@debian:~$ mkdir grafik briefe
mkdir braucht mindestens ein Argument, übernimmt aber auch mehrere. Eine Regel
besagt, dass man ein Verzeichnis spätestens dann unterteilen soll, wenn es mehr als
einige hundert Einträge enthält.

Anzeigen von Verzeichnissen und Dateien


Das Kommando ls (list) dient dem Anzeigen oder Auflisten von Verzeichnissen.
Geben Sie folgendes Kommando ein:
142 2 Linux/UNIX

joe@debian:~$ ls
ls hat viele Optionen – siehe man ls – von denen aber nur wenige oft gebraucht
werden. Die wichtigste ist -l (long), die ausführliche Angaben über die Dateien und
Verzeichnisse verlangt.

Wechseln des Arbeitsverzeichnisses

Angenommen, Sie wollten einen Brief schreiben. Der soll im Verzeichnis briefe
entstehen. Sie müssen dieses Verzeichnis zu Ihrem Arbeitsverzeichnis machen. Dazu
dient das Kommando cd (change directory, ein in die Shell eingebautes Kommando).
Auch dieses Kommando benötigt ein Argument, nämlich den Namen des Verzeich-
nisses, in das gewechselt werden soll. Geben Sie das Kommando
joe@debian:~$ cd briefe
ein, um in das Verzeichnis briefe zu wechseln. Um zurück in Ihr Home-
Verzeichnis zu gelangen, gibt es folgende Wege:
• Mit dem Kommando cd .. gelangen Sie in das Verzeichnis über dem Verzeich-
nis, in dem Sie sich gerade befinden. Zwischen cd und .. muss ein Leerzeichen
stehen. Die Zeichenkette .. kennzeichnet immer das nächsthöhere Verzeichnis.
Auch die Kombination ../.. ist erlaubt.
• Mit dem Kommando cd - (Minuszeichen) gelangen Sie in das Verzeichnis, in
dem Sie sich befanden, bevor Sie das letzte cd-Kommando eingegeben haben.
• Mit dem Kommando cd ohne Argument gelangen Sie immer in Ihr Home-
Verzeichnis, egal wo Sie sich vorher befanden.
Zur Übung können Sie in das Verzeichnis grafik wechseln und dann zurück in
Ihr Home-Verzeichnis. Überprüfen Sie dabei jedes Mal mit pwd, ob Sie im richtigen
Verzeichnis gelandet sind. Der Aufruf man cd funktioniert nicht, da cd ein inter-
nes Kommando der Shell ist. Sie finden seine Beschreibung mittels man bash im
Abschnitt Shell Builtin Commands der Manualseite.

Löschen von Verzeichnissen

Möchten Sie eines der eben angelegten Verzeichnisse wieder löschen, dient hierzu
das Kommando rmdir (remove directory), sofern das Verzeichniss leer ist. Um das
Verzeichnis grafik zu löschen, ist das Kommando
joe@debian:~$ rmdir grafik
einzugeben. Voraussetzung ist, dass Sie sich im Home-Verzeichnis befinden, weil das
Verzeichnis grafik dort liegt und von einem anderen Verzeichnis aus vom Kom-
mando nicht gefunden wird. Löschen Sie das Verzeichnis grafik und erzeugen Sie
es erneut. Wechseln Sie dann in dieses Verzeichnis.
Falls ein Verzeichnis nicht leer ist, löschen Sie es samt allen Unterverzeichnissen
und Dateien mittels:
2.8 Dateien und Verzeichnisse – aus der Sicht des Benutzers 143

joe@debian:~$ rm -rf verzeichnisname


aber Vorsicht, das Kommando ist gnadenlos und löscht ohne Rückfragen das Ver-
zeichnis mit allem, was darin ist.
Die vorstehend erläuterten Kommandos zum Umgang mit Dateien und Verzeich-
nissen gehören zu den Dienstprogrammen (E: utility, F: utilitaire), kleine Helfer, die
man auf jedem Rechner braucht, um die eigentliche Arbeit erledigen zu können. Im
Zeitalter grafischer Arbeitsumgebungen werden sie unter der Oberfläche eines Datei-
Managers wie konqueror (KDE) oder nautilus (GNOME) zusammengefasst,
siehe Abschnitt 3.8 Datei-Manager auf Seite 216.

2.8.10 Ändern von Systemdateien und -verzeichnissen

Das Kommando su

Es wurde bereits darauf hingewiesen, dass ein gewöhnlicher Benutzer keine Teile
des Betriebssystems verändern kann. Falls Sie zugleich Ihr eigener Systemverwalter
sind, werden Sie dies gelegentlich tun. Sie könnten sich dazu abmelden und als Root
wieder anmelden. Danach haben Sie alle notwendigen Rechte.
Dieses Vorgehen ist unbequem, gerade wenn Sie bereits eine Reihe von Program-
men aufgerufen haben, die Sie erst beenden und später wieder neu starten müssten.
Deswegen kann zum Wechsel der Identität auch das Kommando su (substitute) ver-
wendet werden. Wird su ohne Argument aufgerufen:
joe@debian:~$ su
so wird die Benutzeridentität auf Root gesetzt. Es ist auch möglich, als Argument
den Namen eines gewöhnlichen Benutzers anzugeben, um kurzzeitig dessen Identität
anzunehmen, was seltener vorkommt.

Ändern der Datei /etc/motd

Vielleicht möchten Sie nach der Anmeldung an Ihrem System etwas freundlicher be-
grüßt werden? Die Datei motd (message of the day) enthält den Text, der nach der
Anmeldung ausgegeben wird. Sie befindet sich wie viele Konfigurationsdateien im
Verzeichnis /etc. Zur Verwaltung eines Debian-GNU/Linux-Systems müssen Sie
deswegen vorwiegend Dateien in diesem Verzeichnis oder seinen Unterverzeichnis-
sen ändern.
Geben Sie folgendes Kommando ein, um aus Ihrer Sitzung heraus Systemver-
walter zu werden:
joe@debian:~/texte$ su
Sie werden nun nach einem Passwort gefragt. Geben Sie das Verwalterpasswort ein.
Wenn Sie sich vertippen, schlägt su fehl, und Sie erhalten die Fehlermeldung:
su: Authentication failure
144 2 Linux/UNIX

su teilt Ihnen mit, dass Ihre Anmeldung falsch war. Sie können es dann erneut versu-
chen, indem Sie nochmals su eingeben. Wenn Sie das richtige Passwort eingegeben
haben, sehen Sie jetzt den Prompt des Systemverwalters. Nun haben Sie volle Ver-
walterrechte samt -verantwortung. Wenn Sie folgendes Kommando eingeben:
debian:/home/joe/texte# vi /etc/motd
starten Sie den Editor vi und öffnen die Datei /etc/motd. Wie Sie sehen, wur-
de ein absoluter Pfadname benutzt. Sie können nun eine neue Zeile mit dem Text
Herzlich willkommen! anfügen und die Datei abspeichern.
Um nach getaner Arbeit die Root-Rechte wieder aufzugeben und als gewöhnli-
cher Benutzer weiterzuarbeiten, geben Sie folgendes Kommando ein:
debian:/home/joe/texte# exit
Damit wird die Shell des Verwalters beendet, und Sie befinden sich wieder in der
Sitzungs-Shell, die Sie durch Ihre Anmeldung als gewöhnlicher Benutzer gestartet
haben. Mit dem Kommando whoami (wer bin ich) oder id (identity) lassen Sie
sich jederzeit Ihre Identität anzeigen. Probieren Sie es als Benutzer und als System-
verwalter aus. Identitätswechsel werden in der Datei /var/log/auth.log pro-
tokolliert. In Abschnitt 12.5.3 Benutzern Verwalterrechte übertragen auf Seite 530
lernen wir weitere Wege zum Übertragen von Verwalterrechten kennen.

2.9 Datenträger
2.9.1 Grundbegriffe

Datenträger sind Hardware, auf der große Datenmengen dauerhaft gespeichert wer-
den, mit anderen Worten Speichermedien oder Massenspeicher (E: mass storage, F:
stockage de masse). Arbeitsspeicher oder Zwischenspeicher (Cache) zählen nicht da-
zu. Externe oder entfernbare Datenträger (E: removable media, F: moyen amovible)
sind Speichermedien, die aus einem Rechner herausgenommen und zu einem ande-
ren Rechner transportiert oder als Sicherungskopien im Tresor aufbewahrt werden.
Dazu zählen:
• Festplatten (E: hard disk, F: disque dur), die fest in den Rechner eingebaut sein
können, aber auch herausnehmbar oder als externe Platte angeschlossen,
• Disketten (Schlappscheiben, E: floppy disc, F: disquette) verschiedener Durch-
messer von 3 bis 8 Zoll,
• ZIP- und JAZ-Disketten,
• Magnetbänder (E: tape, F: bande magnétique),
• magnetooptische Platten (MO),
• USB-Stöpsel (Speicherstift, E: USB stick, USB flash drive, F: clé USB),
• Speicherkarten (Compact Flash, Smart Media, Secure Digital etc., E: memory
card, F: carte mémoire),
• Compact Discs (CD, CDROM),
• Digital Versatile Discs (DVD).
2.9 Datenträger 145

Auf externe Medien kann auf zweierlei Art zugegriffen werden:


• Sie enthalten ein von Linux/UNIX unterstütztes Dateisystem. Dann werden sie
in das Wurzeldateisystem eingehängt, wie nachstehend beschrieben.
• Sie enthalten ein Archiv (tar, cpio). Dann schreibt oder liest das Kommando
von oder zu der zugehörigen Gerätedatei wie /dev/cdrom.
Darüber hinaus verfügt Linux über besondere Werkzeuge (mtools) zum Arbeiten
mit Disketten, auf denen ein DOS-Dateisystem eingerichtet ist. Im Laufe der Jahr-
zehnte sind – entsprechend den unterschiedlichen Möglichkeiten und Anforderungen
der Speichermedien – mehrere Dutzend verschiedener Dateisystemtypen entwickelt
worden. Übersichten und Einzelheiten findet man im Filesystems HOWTO (2007)
von M ARTIN H INNER. In Abschnitt 13 Dateisysteme ab Seite 563 gehen wir auf
Dateisystemtypen näher ein.

2.9.2 Gerätebezeichnungen

Falls Sie Betriebssysteme wie DOS oder MS Windows kennen, werden Sie sich viel-
leicht darüber wundern, dass bei der Angabe von Pfadnamen nie ein Laufwerksbuch-
stabe benutzt wird. Laufwerksbuchstaben existieren unter Linux/UNIX nicht. Es gibt
beim Umgang mit Dateien keine Laufwerke (E: drive, F: lecteur, dérouleur), sondern
nur ein einziges großes Dateisystem, in das alle verfügbaren Festplatten, Disketten,
CD/DVDs, Stöpsel oder sonstigen Medien eingebunden werden. Trotzdem haben
die Geräte oder Laufwerke Namen, die jedoch anders gebraucht werden als unter
DOS oder MS Windows. Geräte wie Festplatten oder Diskettenlaufwerke werden
durch spezielle Dateien dargestellt, die sich im Verzeichnis /dev befinden. Diese
Dateien werden Gerätedateien genannt. Wir haben kurz in Abschnitt 2.8.4 Geräte-
dateien auf Seite 127 über sie gesprochen. Einige Gerätenamen für Festplatten oder
CD/DVD-Laufwerke lernen Sie während der Einrichtung kennen. Es existiert jedoch
eine Anzahl weiterer Gerätedateien, beispielsweise auch solche, die Bandlaufwerke
(Streamer) oder den Sound-Mixer auf einer Soundkarte darstellen.
Die Gerätedateien für Diskettenlaufwerke heißen fd0 (für Floppy-Disk 0), fd1,
fd2 usw. Dabei entspricht /dev/fd0 dem Diskettenlaufwerk, das Sie unter DOS
über den Laufwerksbuchstaben A: ansprechen, /dev/fd1 dem zweiten Laufwerk
(unter DOS: B:) usw. Entsprechendes gilt für andere Datenträger. Eine Übersicht
über die gebräuchlichen Gerätedateien findet sich im Anhang, Tabelle 23 Geräteda-
teien auf Seite 1065. Der gewöhnliche Benutzer braucht sich um die Gerätedateien
nicht zu kümmern, der Verwalter bekommt mit ihnen zu tun. Vieles im Verzeichnis
/dev läuft heute automatisch ab.

2.9.3 Einhängen von Datenträgern (Mounten)

Von Linux/UNIX unterstützte Dateisysteme auf beliebigen internen oder externen


Datenträgern werden durch Einhängen (mounten, einbinden, montieren, E: to mount,
F: monter) zu einem Zweig des eigenen Wurzel- oder Rootdateisystems. Einhän-
gen heißt, ein Verzeichnis – meist die Wurzel – des hinzukommenden Dateisystems
146 2 Linux/UNIX

auf ein Verzeichnis des eigenen Dateisystems abzubilden. Dieses Verzeichnis nennt
man Einhängepunkt (E: mounting point, F: point de montage); es sollte keine Ein-
träge enthalten. Ist dies nicht der Fall, sind die Einträge nicht sichtbar, solange das
hinzugekommene Dateisystem eingehängt ist. Sie sind jedoch nicht verloren und
tauchen wieder auf. Einige Einhängepunkte wie das Verzeichnis /floppy oder
/media/floppy, das zum Einhängen von Disketten gedacht ist, werden wäh-
rend der Grundeinrichtung angelegt. Es ist möglich, ein Dateisystem gleichzeitig in
mehrere Einhängepunkte desselben Wurzeldateisystems einzuhängen. Ebenso dür-
fen mehrere Dateisysteme gleichzeitig in verschiedene Einhängpunkte eingehängt
sein, nur ist darauf zu achten, dass keine geschlossenen Wege (Schleifen) im Datei-
system erzeugt werden. Es kann auch zu Problemen führen, wenn ein Verzeichnis
und dann noch einmal ein Unterverzeichnis davon in dasselbe Wurzelsystem ein-
gehängt werden. Also nicht kreuz und quer einhängen! Ein nicht mehr benötigtes
Dateisystem lässt sich aushängen. Solange es noch in Gebrauch ist, verweigert das
System das Aushängen. Beim Herunterfahren des Systems werden alle Dateisysteme
automatisch ausgehängt.
Normalerweise ist der direkte Zugriff auf Hardwarekomponenten nur dem Ver-
walter gestattet. Weil das Einhängen von Datenträgern einen Hardwarezugriff dar-
stellt, kann dieser Vorgang nur vom Verwalter durchgeführt werden. Er hat die Mög-
lichkeit zu erlauben, dass bestimmte Datenträger auch von gewöhnlichen Benut-
zern eingehängt werden. Entscheidend ist ein Eintrag (Option user) in der Da-
tei /etc/fstab. Einzelheiten zum mount-Kommando erfährt man mittels man
mount. Ohne Optionen oder Argumente von einem beliebigen Benutzer aufgerufen
zeigt mount eine Liste der augenblicklich eingehängten Dateisysteme an.
Dem Kommando mount sind normalerweise zwei Argumente zu übergeben,
zum einen die Gerätedatei, unter der das externe Dateisystem liegt, und zum anderen
der Name des Verzeichnisses, in das das externe Dateisystem eingebunden werden
soll (Einhängepunkt). Die Syntax des Kommandos lautet in einfachen Fällen:
mount Gerätedatei Einhängepunkt
Das mag zunächst umständlich erscheinen. Es ist jedoch nur durch die Anmel-
dung eines Datenträgers beim Betriebssystem möglich, den Inhalt des Datenträgers
zwischenzuspeichern (zu puffern). Dadurch können Schreib- und Lesevorgänge aus
Sicht des Benutzers eher beendet werden, weil gegebenenfalls nur aus dem Puffer ge-
lesen beziehungsweise in ihn geschrieben wird. Das wirkliche Schreiben findet erst
statt, wenn das Betriebssystem Zeit dazu hat oder der Datenträger abgemeldet wird.
Würde das Betriebssystem sich nicht darauf verlassen können, dass der Datenträger
noch vorhanden ist, müsste es bei jeder Leseoperation nachschauen und Schreib-
operationen sofort durchführen, weil der Datenträger ja im nächsten Moment vom
Benutzer entfernt werden könnte.
Außerdem ist es möglich, dass andere Benutzer über das Netz ebenfalls auf den
Datenträger zugreifen. Hier würde ein Fehlerzustand auftreten, wenn ein Benutzer
gerade auf eine Diskette schreibt und ein anderer sie gleichzeitig aus dem Laufwerk
nimmt. Die Folge wäre eine zerstörte Datei, im schlimmsten Fall sogar ein zerstörtes
Dateisystem auf der Diskette. Aus diesem Grunde sperren die meisten Laufwerke
2.9 Datenträger 147

für Wechseldatenträger die Ausgabetaste, solange der Datenträger eingehängt ist.


Diskettenlaufwerke bieten diese Möglichkeit bei PCs leider nicht, sodass man sich
hier mit der vertrauensvollen An- und Abmeldung begnügen muss.
Wem das Ein- und Aushängen von Wechseldatenträgern auf Dauer zu mühsam
ist, kann zum einen mit den mtools direkt auf DOS-formatierte Datenträger zugrei-
fen, wobei auf alle Vorteile des Einhängens in das Dateisystem verzichtet wird. Zum
anderen besteht die Möglichkeit, einen Automounter einzusetzen, der Datenträger in
dem Augenblick einhängt, in dem auf sie zugegriffen wird, und aushängt, wenn eine
Zeit lang kein Zugriff mehr erfolgt ist (siehe Abschnitt 2.9.8, Der Automounter im
Kern auf Seite 153). Darüber hinaus wird das Einhängen von Datenträgern bei der
Arbeit mit grafischen Benutzeroberflächen vereinfacht, weil der Vorgang hier mit der
Maus gesteuert wird.
Um eine Diskette einzuhängen, schieben Sie die Diskette in das Disketten-
Laufwerk und geben als Verwalter folgendes Kommando ein:
debian:~# mount /dev/fd0 /media/floppy
In der Regel leuchtet dann die Lampe des Diskettenlaufwerks kurz auf und sein
Motor läuft an. Wenn Sie keine Fehlermeldung erhalten, ist der Datenträger nun mit
dem Verzeichnis /media/floppy verbunden. Falls ein Fehler auftritt, sollten Sie
folgende Punkte überprüfen:
• Ist /dev/fd0 die richtige Gerätedatei? Versuchen Sie es auch mit /dev/fd1.
• Ist die Diskette mit einem Dateisystem formatiert, dass vom Linux-Kern unter-
stützt wird? Vom Standardkern werden u. a. DOS/MS Windows-, ext2- (Linux)
und Minix-formatierte Datenträger erkannt und unterstützt.
• Ist die Unterstützung für Diskettenlaufwerke in Ihren Kern eincompiliert? Das
ist beim Standardkern der Fall.
• Sind Sie als Root angemeldet oder haben Sie wenigstens Ihre Identität mit su
zur Identität des Verwalters gewechselt?
Den Inhalt der Diskette können Sie sich bei Erfolg wie den Inhalt jedes anderen
Verzeichnisses anzeigen lassen. Geben Sie folgendes Kommando ein:
debian:~# ls -l /media/floppy
Sie sollten jetzt die Dateien auf der Diskette aufgelistet bekommen. Wenn die Dis-
kette leer ist, sehen Sie natürlich keine Dateien. Probieren Sie es dann nochmal mit
einer anderen Diskette. Vorher müssen Sie die momentan eingehängte Diskette je-
doch wieder aus dem Dateisystem aushängen.
Für CDs oder DVDs gilt dasselbe, nur dass das Dateisystem ein anderes ist. Auf
CDs findet man überwiegend das Dateisystem nach ISO 9660 (ECMA 119/2), wäh-
rend auf DVDs zunehmend das Universal Disc Format (UDF) verwendet wird. Beide
werden von aktuellen Linux-Systemen beherrscht. Weiteres dazu in Abschnitt 13.6
Dateisysteme für entfernbare Medien auf Seite 580.
148 2 Linux/UNIX

2.9.4 Aushängen von Datenträgern (Unmounten)

Sie dürfen eine Diskette oder CD/DVD nie aus dem Laufwerk nehmen, bevor Sie
sie ordnungsgemäß aus dem Dateisystem ausgehängt haben. Andernfalls drohen
Datenverluste. Zum Aushängen (unmounten, demontieren, trennen, E: to unmount,
F: démonter) eines Datenträgers aus dem Rootdateisystem dient das Kommando
umount. Sie können umount als Argument entweder die Gerätedatei des einge-
hängten Datenträgers oder das Verzeichnis, in das sie diesen eingehängt haben (Ein-
hängepunkt), übergeben. Die Kommandos:
debian:~# umount /media/floppy
debian:~# umount /dev/fd0
bewirken dasselbe: Der vorher in das Verzeichnis /media/floppy eingehäng-
te Datenträger /dev/fd0 wird aus dem Rootdateisystem ausgehängt. Erst danach
dürfen Sie den Datenträger (Diskette oder CD/DVD) aus dem Laufwerk nehmen.
Das Kommando eject erledigt Aushängen und Auswerfen in einem Zug.
Falls auf dem eingehängten Datenträger noch eine Datei geöffnet ist, wird das
Aushängen verweigert mit der Meldung device is busy. Dann geht die Suche
nach der offenen Datei los. Der Aufruf:
debian:~# lsof /dev/cdrom
mit der Gerätedatei des auszuhängenden Mediums als Argument listet alle offenen
Dateien dieses Mediums auf. Falls die Auskunft noch nicht die nötige Klarheit bringt,
versucht man als nächstes, mittels ps oder fuser einen Besitzer zu dem Prozess
oder der Datei herauszufinden:
debian:~# fuser -vm /media/stick
Als Antwort erhalten Sie Prozess-IDs. Den zugehörigen Prozessnamen samt Benut-
zer nennt Ihnen:
joe@debian:~$ ps -ef | grep PID
Die Benutzung eines Verzeichnisses als Arbeitsverzeichnis gilt als Öffnen des Ver-
zeichnisses, verhindert also auch das Aushängen. Die meisten Texteditoren arbeiten
auf einer Arbeitskopie der Textdatei und öffnen diese nur zum anfänglichen Lesen
und zum Zurückschreiben. Diese Art der Benutzung lässt sich nicht feststellen. Sie
stört beim Aushängen aber auch nicht, nur der Schreiber wird sich wundern, wenn
er zurückschreibt. Voraussichtlich landet die Frucht seiner Mühen im Einhängepunkt
und ist damit beim nächsten Einhängen unsichtbar.
Wer mit einer grafischen Benutzeroberfläche und mehreren Arbeitsflächen arbei-
tet, übersieht leicht ein Fenster, das noch mit dem Datenträger zu tun hat. Auf das
Ein- und Aushängen kommen wir in Abschnitt 13.10 Verwalten des Dateisystems
auf Seite 620 ausführlicher zu sprechen.
2.9 Datenträger 149

2.9.5 Kopieren von Dateien auf externe Datenträger

Nachdem ein Datenträger eingehängt ist, wird sein Dateisystem wie ein normales
Verzeichnis benutzt. Sie verwenden dieselben Kommandos, die Sie schon kennen ge-
lernt haben, um Dateien zu kopieren, zu verschieben oder zu löschen. Wir wollen nun
die Datei GPL-Beer aus dem Unterverzeichnis texte Ihres Home-Verzeichnisses
auf eine Diskette kopieren. Sie hängen die Diskette ein, wenn sie nicht schon ein-
gehängt ist, wechseln in das Verzeichnis texte und kopieren die Datei mit dem
Kommando:
debian:/home/joe/texte# cp GPL-Beer /media/floppy
in das Verzeichnis /media/floppy, also auf die Diskette. Lassen Sie sich zur
Kontrolle anzeigen, ob die Datei auf der Diskette angekommen ist. Wechseln Sie
dazu mit cd in das Verzeichnis /media/floppy und geben dort das Kommando
ls -l ein. In umgekehrter Richtung funktioniert das Kopieren genauso.
Natürlich können Sie Dateien auf einem externen Datenträger auch direkt bear-
beiten, sobald er eingehängt ist. Hängen Sie die Diskette mit der Datei GPL-Beer
ein und verändern Sie die darauf befindliche Datei mit einem Editor Ihrer Wahl. Da-
nach kopieren Sie zur Übung eine Datei von einer Diskette auf eine andere Diskette.
Wenn Sie nur ein Diskettenlaufwerk haben, müssen Sie die Datei zunächst in Ihr
Home-Verzeichnis kopieren, die erste Diskette aushängen, dann die zweite Disket-
te einlegen und -hängen und schließlich die Datei von Ihrem Home-Verzeichnis auf
die zweite Diskette kopieren. Die zum Zwischenspeichern benötigte Kopie in Ihrem
Home-Verzeichnis löschen Sie hernach.

2.9.6 Die Dateisystemtabelle (fstab)

Aufbau

In der Systemkonfigurationsdatei /etc/fstab (file system table) wird festgelegt,


welche Datenträger beim Systemstart automatisch in welche Verzeichnisse einge-
hängt werden sollen. Darüber hinaus wird das Einhängen durch gewöhnliche Benut-
zer vorbereitet. Diese Datei ist wichtig, weil während des Systemstarts zumindest
der Datenträger feststehen muss, auf dem sich das Wurzeldateisystem befindet. Eine
fehlende oder fehlerhafte fstab hat ernsthafte Probleme beim Systemstart zur Fol-
ge, die möglicherweise einen Start von einem entfernbaren Datenträger (Live-CD)
erfordern. Sehen Sie sich die Datei mit cat oder less an. Sie könnte Folgendes
beinhalten:
# /etc/fstab: static file system information.
#
#<file sys> <mnt pt> <type> <options> <dump> <pass>
/dev/hda6 / ext2 defaults 0 1
/dev/hda5 none swap sw 0 0
proc /proc proc defaults 0 0
150 2 Linux/UNIX

Unterhalb der hier wiedergegebenen Einträge befinden sich weitere, wenn Sie bereits
während der Grundeinrichtung zusätzliche Datenträger eingebunden haben. Die Da-
tei ist folgendermaßen aufgebaut:
• Leere Zeilen und solche, die mit einem Doppelkreuz beginnen, haben keine Be-
deutung und dienen dem übersichtlichen Aufbau sowie der Kommentierung der
Datei (wie bei der Bash).
• Jede andere Zeile bezeichnet die Zuordnung eines Datenträgers zu einem Ver-
zeichnis. Diese Zeilen bestehen aus sechs verschiedenen Feldern (Spalten).
• Dabei steht in der ersten Spalte die Bezeichnung der Gerätedatei, die den einzu-
hängenden Datenträger darstellt.
• In der zweiten Spalte steht der Name des Verzeichnisses, in das der Datenträger
eingehängt werden soll (Einhängepunkt).
• In der dritten Spalte steht der Typ des Dateisystems auf dem Datenträger, also
das Format, in dem der Datenträger formatiert ist.
• In der vierten Spalte folgen Optionen, die teilweise vom Typ des Dateisystems
auf dem Datenträger abhängen. Einzelne Optionen werden durch Kommata von-
einander getrennt. Zwischen den Optionen dürfen sich keine Leerzeichen be-
finden, weil dann die Optionen hinter dem Leerzeichen als Inhalt der nächsten
Spalte aufgefasst würden.
• In der fünften Spalte stehen Informationen für das Programm dump, die zur Zeit
nicht beachtet werden.
• In der sechsten Spalte finden sich Informationen darüber, ob und wie die Da-
tenträger beim Systemstart auf ihre Unversehrtheit geprüft werden sollen. Der
Wert 0 bedeutet, dass der Datenträger nicht geprüft werden soll (sinnvoll bei
CD/DVDs). Der Wert 1 bedeutet, dass der Datenträger vor allen anderen geprüft
werden soll. Der Datenträger mit dem Rootdateisystem (/) erhält diesen Wert.
Alle anderen Datenträger sollten anschließend geprüft werden und deswegen den
Wert 2 erhalten.
Von den Optionen im Anschluss an defaults sind vor allem interessant:
• ro readonly, beispielsweise bei /usr denkbar,
• nodev lässt keine Gerätedateien zu, bei fast allen Verzeichnissen sinnvoll,
• nosuid übergeht das Set-UID- und das Set-GID-Bit, beispielsweise bei /tmp
und /home zu empfehlen,
• noexec verhindert das Ausführen von Dateien als Programme.
So bequem die uneingeschränkte Option defaults ist, man erleichtert Bösewich-
ten damit das Leben. Bei vielen Dateisystemen kann man ohne die rechtmäßig be-
nötigte Funktionalität einzuschränken weitere Optionen anfügen.
In der oben wiedergegebenen Datei /etc/fstab finden sich zwei besondere
Einträge, die auch auf Ihrem System vorhanden sein sollten. Dies ist einmal der Ein-
trag für den Swapbereich. Dieser dient zum Auslagern von Inhalten des Arbeitsspei-
chers auf die Festplatte und ist deswegen nicht in das Dateisystem eingebunden. In
der zweiten Spalte (mount point), in der normalerweise das Verzeichnis steht, in
2.9 Datenträger 151

das die Partition eingehängt werden soll, steht hier der Eintrag none. Der Swapbe-
reich enthält kein Dateisystem, also nichts zum Einhängen.
Die zweite Besonderheit ist das /proc-Dateisystem. Dieses Dateisystem stellt
eine Schnittstelle zum Linux-Kern dar, über die Informationen aus dem Kern ge-
lesen und an diesen übergeben werden können. Das proc-Dateisystem ist keinem
physikalischen Datenträger zugeordnet, weswegen sich hier in der ersten Spalte, der
Eintrag proc ohne Schrägstrich befindet. Sie können die Benutzung des /proc-
Dateisystems ausprobieren, indem Sie das Kommando
joe@debian:~$ cat /proc/interrupts
eingeben. In der Datei stehen die vom Kern benutzten Interrupts. Die swap- und
proc-Dateisysteme werden beim Systemstart nicht geprüft, weil auf ihnen keine
Daten gespeichert werden, die nach einem Start zur Verfügung stehen müssten.

Anlegen eines Eintrags für das Diskettenlaufwerk

Bevor Sie die Datei /etc/fstab ändern, sollten Sie eine Sicherheitskopie anle-
gen. Kopieren Sie die Datei dazu mit cp in Ihr Home-Verzeichnis. Da sie kurz ist,
wäre auch an einen Ausdruck zu denken. Sie zählt zu den wertvollsten Dateien. Nun
editieren Sie die Datei mit dem Editor vi. Dazu brauchen Sie Verwalterrechte, weil
es sich bei der Datei um eine Systemkonfigurationsdatei handelt. Fügen Sie folgende
Zeile hinzu:
/dev/fd0 /media/floppy msdos defaults,user,noauto 0 0
Damit geben Sie in der ersten Spalte den Namen der Gerätedatei Ihres Disketten-
laufwerks an. Wenn Ihr Diskettenlaufwerk nicht /dev/fd0 ist, müssen Sie einen
anderen Gerätedateinamen verwenden. In der zweiten Spalte geben Sie als Einhän-
gepunkt das Verzeichnis /media/floppy an. Hierhin sollen Disketten in Zukunft
per Voreinstellung eingehängt werden. Die dritte Spalte bestimmt das Dateisys-
tem. Weil Disketten in der Regel DOS/MS-Windows-formatiert sind, geben Sie hier
msdos oder vfat an. Die Variante vfat beinhaltet die Unterstützung für lange
Dateinamen auf DOS-formatierten Disketten.
In der Spalte mit den Optionen sind einige zusätzliche Angaben zu machen. Zu-
nächst bestimmt defaults, dass die Vorgaben übernommen werden sollen. Wel-
che das sind, finden Sie auf der Manualseite zu mount. Der Eintrag user legt fest,
dass auch gewöhnliche Benutzer berechtigt sind, das Dateisystem einzuhängen. Der
Eintrag noauto besagt, dass dieses Dateisystem nicht automatisch während des
Systemstarts eingehängt werden soll. Das würde bei einem Diskettenlaufwerk kei-
nen Sinn ergeben, weil sich nicht immer eine Diskette im Laufwerk befindet. In den
letzten beiden Feldern sind übliche Werte eingetragen. Andere, häufig vorkommende
Zeilen in der fstab sind:
/dev/scd0 /media/cdrom0 iso9660 ro,user,noauto 0 0
/dev/sdc1 /media/stick0 msdos user,umask=0,noauto 0 0
server1:/var/www /var/www nfs defaults 0 0
152 2 Linux/UNIX

Die erste Zeile erlaubt gewöhnlichen Benutzern, eine CD/DVD in einem Laufwerk
mit SCSI-Schnittstelle einzuhängen, und zwar nur zum Lesen (ro = readonly). Der
zweite Eintrag gilt einem USB-Stöpsel. Der dritte schließlich hängt ein per NFS
über das Netz von einem Server zur Verfügung gestelltes (exportiertes) Verzeichnis
in die lokale Verzeichnisstruktur ein. Da lokal kein Webserver (HTTP-Dämon) läuft,
mithin das lokale Verzeichnis /var/www unbelegt ist, konnte hier der gleiche Pfad
wie auf dem Server gewählt werden. Das ist nicht zwingend. Ein umfangreicheres
Beispiel lernen wir in Abschnitt 13.10.1 Anzeigen eingehängter Partitionen auf Sei-
te 620 kennen. Wenn Sie die Datei /etc/fstab angepasst und gesichert haben,
verlassen Sie den Editor und geben die Verwalterrechte auf.

2.9.7 Datenträger einhängen als Benutzer

Nun können gewöhnliche Benutzer Disketten im Laufwerk /dev/fd0 ein- und aus-
hängen. Hierbei braucht nicht mehr die Gerätedatei angegeben zu werden, die ja be-
reits in /etc/fstab genannt ist. Vielmehr reicht es aus, einfach das Verzeichnis
als Parameter anzugeben, in das der vordefinierte Datenträger eingehängt werden
soll. Zum Einhängen reicht das Kommando:
joe@debian:~$ mount /media/floppy
Gleichwertig ist die Angabe von /dev/fd0 an Stelle von /media/floppy. Und
zum Aushängen:
joe@debian:~$ umount /media/floppy
Das gleiche bequeme Vorgehen, das Sie für die Verwendung von Disketten einge-
richtet haben, möchten Sie vielleicht auch für CD/DVDs nutzen. Wenn sich in Ihrem
Rechner ein CD/DVD-Laufwerk befindet, können Sie nun einen ähnlichen Eintrag
für dieses Laufwerk anlegen. Es wird hier davon ausgegangen, dass Sie die Grund-
einrichtung – zumindest teilweise – von CD/DVD durchgeführt haben und deswegen
wissen, wie Ihre CD/DVD angesprochen werden kann. Sie benötigen folgende zu-
sätzliche Informationen:
• Der Dateisystemtyp von CDs ist meist iso9660. Auf DVDs wird iso9660
oder udf verwendet. Näheres siehe man fstab. Alle Dateisysteme, die Ihr
aktueller Kern unterstützt, sind in /proc/filesystems aufgelistet.
• Analog zum Verzeichnis /media/floppy, in das Sie Disketten einhängen,
wird während der Grundeinrichtung das Verzeichnis /media/cdrom erzeugt,
das zum Einhängen von CD/DVDs vorgesehen ist.
• Weil es eine Vielzahl verschiedener CD/DVD-Laufwerkstypen gibt, existiert ei-
ne große Anzahl von Gerätedateien, die diese darstellen. Während der Grund-
einrichtung wurde die Datei /dev/cdrom angelegt, die ein Verweis (Sym-
link) auf die für Ihr System gültige CD/DVD-Gerätedatei ist. Beispielswei-
se kann /dev/cdrom ein Symlink auf /dev/scd0 sein. Verwenden Sie
/dev/cdrom, um CD/DVDs einzuhängen.
2.9 Datenträger 153

• Weil von CD/DVDs nur gelesen werden kann und sie nicht beschrieben werden
können, gibt es normalerweise eine Warnung beim Einhängen dieser Datenträger.
Verwenden Sie deswegen in der Datei /etc/fstab die Option ro (read-only),
um die Warnung zu erübrigen.
Wenn Sie den entsprechenden Eintrag vorgenommen haben, prüfen Sie, ob Sie
CD/DVDs als Benutzer einhängen können, und lassen Sie sich den Inhalt einer
CD/DVD anzeigen. Lassen Sie sich auch den Inhalt von Unterverzeichnissen auf
der Scheibe anzeigen. DVDs lassen sich nur in DVD-Laufwerken lesen, CDs sowhl
in CD- wie in DVD-Laufwerken.

2.9.8 Der Automounter im Kern

Der Linux-Kern verfügt über die Fähigkeit, Datenträger automatisch einzuhängen,


sobald auf sie zugegriffen wird. Dazu muss der Kern mit der Option Kernel
automounter support übersetzt worden sein, bei Standardkernen gegeben.
Außerdem muss das Paket autofs eingerichtet sein. Es enthält die Programme und
Dateien, die benötigt werden, um diese Eigenschaft nutzen zu können15 Über ein
Programm werden dem Kern Verknüpfungen von Verzeichnissen und Datenträgern
mitgeteilt. Sobald auf ein solches Verzeichnis zugegriffen wird, mountet der Kern
den Datenträger automatisch, die Notwendigkeit zum manuellen Einhängen entfällt.
Die beiden wichtigsten Anwendungsbereiche des Systems sind:
• Netzumgebungen, in denen von allen Rechnern aus auf eine große Anzahl von
Verzeichnissen zugegriffen wird, die auf anderen Rechnern liegen. Dabei ist es
unerwünscht, dass alle Verzeichnisse ständig eingehängt sind. Durch den Ein-
satz eines Automounters wird die Verbindung erst dann aufgebaut, wenn auf das
Verzeichnis zugegriffen wird.
• Beim Zugriff auf auswechselbare Datenträger wie Disketten oder CD/DVDs wird
es oft als lästig empfunden, dass diese manuell eingehängt werden müssen, bevor
auf sie zugegriffen werden kann. Der Automounter nimmt dem Benutzer das
manuelle Einhängen der Medien ab.
Das Paket autofs wird über die Datei /etc/auto.master konfiguriert. Sie
sieht nach der erstmaligen Einrichtung des Paketes so aus:
# $Id: extern.tex,v 1.13 2007/05/19 20:47:08 wulfa Exp $
# Sample auto.master file
# Format of this file:
# mountpoint map options
# For details of the format look at autofs(8).
/misc /etc/auto.misc --timeout=60
Leere Zeilen und solche, die mit einem Doppelkreuz beginnen, haben keine Bedeu-
tung. Alle übrigen Zeilen müssen folgendes Format haben:

15
Ein anderes Automounting-System steht mit dem Paket am-utils zur Verfügung.
154 2 Linux/UNIX

Verzeichnis Konfigurationsdatei [Optionen]


Mit Verzeichnis wird ein Verzeichnis angegeben, für das der Automounter zu-
ständig sein soll. Für jedes Verzeichnis gibt es eine eigene Konfigurationsdatei, die
beschreibt, welche Datenträger in welches Unterverzeichnis des angegebenen Ver-
zeichnisses bei Bedarf eingehängt werden. In obiger Datei wird angegeben, dass
der Automounter das Verzeichnis /misc kontrollieren soll und dass in der Datei
/etc/auto.misc angegeben ist, welcher Datentr:ager in welches Unterverzeich-
nis von /misc eingebunden werden soll. Hinter der Angabe der Konfigurations-
datei lassen sich Optionen angegeben. Die wichtigste Option ist --timeout, die
bestimmt, dass nach Ablauf einer Zeit ein Datenträger wieder aus dem Dateisystem
entfernt wird, wenn er nicht erneut benutzt worden ist. Die Zeit ist hinter der Option
in Sekunden anzugeben, der voreingestellte Wert beträgt 300 Sekunden. Die Kon-
figurationsdatei für das Verzeichnis /misc (/etc/auto.misc) ist in dem Paket
ebenfalls enthalten. Sie sieht nach der erstmaligen Einrichtung so aus:
# $Id: extern.tex,v 1.13 2007/05/19 20:47:08 wulfa Exp $
# This is an automounter map having the following format
# key [ -mount-options-separated-by-comma ] location
# Details may be found in the autofs(5) manpage

kernel -ro ftp.kernel.org:/pub/linux


boot -fstype=ext2 :/dev/hda1
removable -fstype=ext2 :/dev/hdd
cd -fstype=iso9660,ro :/dev/hdc
floppy -fstype=auto :/dev/fd0
Auch in dieser Datei haben leere Zeilen und solche, die mit einem Doppelkreuz
beginnen, keine Bedeutung. Alle anderen Zeilen bestehen aus drei Feldern, durch
Leerzeichen voneinander getrennt. Die Felder bedeuten Folgendes:
• Im ersten Feld steht der Name eines Unterverzeichnisses des Verzeichnisses, für
das die Datei zuständig ist. Der erste Eintrag (kernel) bezeichnet in diesem
Fall das Verzeichnis /misc/kernel und der zweite das Verzeichnis /misc/
boot.
• Im zweiten Feld befinden sich die Optionen, mit denen das Programm mount
vom Automounter aufgerufen wird.
• Das dritte Feld beschreibt den einzuhängenden Datenträger. Dabei wird zunächst
der Name des Rechners angegeben, der den Datenträger bzw. ein Verzeichnis
über NFS zur Verfügung stellt. Hinter dem Doppelpunkt wird der Name des Ver-
zeichnisses auf dem fernen Rechner angegeben. Datenträger, die an den lokalen
Rechner angeschlossen sind (lokale Disketten oder CD/DVDs), erhalten keinen
Eintrag vor dem Doppelpunkt und dahinter den Namen der Gerätedatei, die den
einzuhängenden Datenträger darstellt.
Die Datei ist an die lokalen Gegebenheiten anzupassen. Wenn der Automounter dazu
genutzt werden soll, CD/DVDs und Disketten automatisch einzuhängen, sollte sie
nur noch die beiden mit cd und floppy beginnenden Einträge enthalten. Der Name
2.9 Datenträger 155

der Gerätedatei, welche das CD/DVD-Laufwerk darstellt, ist ebenfalls anzupassen.


Beispiel:
cd -fstype=iso9660,ro :/dev/hda
floppy -fstype=auto :/dev/fd0
Nach jeder Änderung einer Konfigurationsdatei des Automounters muss dieser
neu gestartet werden. Dies geschieht mit dem Skript /etc/init.d/autofs, das
auch während des Systemstarts aufgerufen wird:
debian:~# /etc/init.d/autofs restart

Arbeiten mit dem Automounter

Nachdem der Automounter konfiguriert und erneut gestartet wurde, kann auf die
konfigurierten Verzeichnisse zugegriffen werden. Im Gegensatz zum manuellen Ver-
fahren existieren die Verzeichnisse erst dann, wenn die Datenträger tatsächlich einge-
bunden werden. Wenn Sie das Programm wie oben beschrieben konfiguriert haben,
zeigt folgendes Kommando ein zunächst leeres Verzeichnis an:
joe@debian:~$ ls /misc
Wenn sich jedoch eine Diskette mit Daten im Laufwerk befindet, führt das nächste
Kommando dazu, dass die Diskette automatisch eingebunden und ihr Inhalt ange-
zeigt wird:
joe@debian:~$ ls /misc/floppy
Oft wird jedoch gewünscht, dass die Verzeichnisse auch sichtbar sind, wenn der Da-
tenträger noch nicht eingebunden ist. Hierzu kann man sich mit symbolischen Links
behelfen. Beispielsweise könnte das Verzeichnis /floppy gelöscht werden und
stattdessen ein symbolischer Link mit dem Namen /floppy auf das Verzeichnis
/misc/floppy erzeugt werden:
debian:~# rmdir /floppy
debian:~# ln -s /misc/floppy /floppy
Danach führt jeder Zugriff auf /flopyy dazu, dass in Wirklichkeit auf das Ver-
zeichnis /misc/floppy zugegriffen wird und der Datenträger dadurch automa-
tisch eingebunden wird, falls noch nicht geschehen.
Die Verwendung des Automounters ändert nichts an der Tatsache, dass Disketten
oder andere Medien erst dann aus dem Laufwerk genommen werden dürfen, wenn
sie nicht mehr in das Dateisystem eingebunden sind. Es muss immer abgewartet
werden, bis der Automounter den Datenträger aus dem Dateisystem entfernt hat.
Dies lässt sich mit den Kommandos df oder mount prüfen. Alternativ kann der
Automounter mit folgendem Kommando dazu gebracht werden, alle Datenträger,
die nicht in Benutzung sind, sofort aus dem Dateisystem zu entfernen:
debian:~# killall -USR1 automount
156 2 Linux/UNIX

Weil das Kommando nur vom Verwalter benutzt werden darf (der Automount-
Prozess gehört dem Verwalter), empfiehlt sich die Verwendung des Paketes sudo,
um auch gewöhnlichen Benutzern zu erlauben, das Kommando auszuführen. Dazu
ist der Datei /etc/sudoers folgende Zeile hinzuzufügen:
ALL ALL=NOPASSWD:/usr/bin/killall -USR1 automount
Gewöhnliche Benutzer können das sofortige Entfernen unbenutzter Datenträger dann
durch dieses Kommando erzwingen:
joe@debian:~$ sudo killall -USR1 automount

Benutzerschreibrechte

Ein weiteres Problem bei der Verwendung des Automounters ergibt sich daraus, dass
der eigentliche Einhängevorgang durch den Automounter vollzogen wird. Weil bei-
spielsweise DOS-formatierte Datenträger keine Besitzer oder Gruppen zu Dateien
speichern, gehören Dateien auf solchen Datenträgern immer dem Benutzer, der den
Datenträger eingehängt hat, es sei denn, beim Einhängen wird etwas anderes ange-
geben. Weil der Automounter-Prozess dem Verwalter gehört, gehören Dateien auf
automatisch eingebundenen Disketten, die DOS-formatiert sind, dem Verwalter, und
normale Benutzer können sie nicht verändern.
In der Regel wird jedoch ein Verhalten erwünscht, dass es dem Benutzer, der auf
eine solche Diskette zugreift, auch gestattet, Dateien auf der Diskette zu ändern oder
neue anzulegen. Dies kann auf zweierlei Weise erreicht werden. Eine Möglichkeit
ist, den Automounter so zu konfigurieren, dass er Disketten immer mit Schreib- und
Leserechten für einen bestimmten Benutzer konfiguriert. Der Eintrag in der Datei
/etc/auto.misc sieht dann so aus:
floppy -fstype=auto,uid=1000,gid=1000 :/dev/fd0
Die Mount-Optionen uid und gid bewirken, dass der Datenträger immer mit der
angegebenen User- und Gruppen-ID eingehängt wird. Die Benutzer- und Gruppen-
ID eines bestimmten Benutzers ermitteln Sie mit dem Kommando id. Sie finden sie
auch in den Dateien /etc/passwd und /etc/group.
Dieses Verfahren ist jedoch zu unflexibel, wenn verschiedene Benutzer auf
den Datenträger zugreifen sollen. Dann empfiehlt es sich, den Datenträger mit der
Gruppen-ID einer Gruppe einzuhängen, in die alle Benutzer des Systems aufgenom-
men werden, denen der schreibende Zugriff erlaubt sein soll:
floppy -fstype=auto,gid=25,umask=002,quiet :/dev/fd0
Die Gruppen-ID 25 entspricht per Vorgabe der Gruppe floppy, und die Option
umask=002 bewirkt, dass auch Gruppenmitglieder auf den Datenträger schreiben
dürfen. Durch die Option quiet wird erreicht, dass Versuche, Besitzer oder Gruppe
auf dem Datenträger zu ändern, nicht fehlschlagen, obwohl sie nicht durchgeführt
werden können, weil DOS kein Benutzerkonzept kennt.
2.10 Suchen nach Dateien 157

2.10 Suchen nach Dateien


2.10.1 Reguläre Ausdrücke

Reguläre Ausdrücke (regular expressions, RE) sind ein mächtiges Werkzeug zur Be-
arbeitung von Textdateien. Es handelt sich dabei um eine Erweiterung herkömm-
licher Suchfunktionen von Textwerkzeugen. Programme, die mit regulären Aus-
drücken umgehen, sind Texteditoren wie vi oder (X)Emacs, die Programminter-
preter perl oder awk, der Streameditor sed oder das Suchprogramm grep. Die
Werkzeuge arbeiten grundsätzlich zeilenweise. Die Bezeichnung stammt aus der
Theorie formaler Sprachen (Programmiersprachen). Für uns reicht es zu wissen, dass
reguläre Ausdrücke Zeichenfolgen sind, die nach einem System von Regeln ausge-
wertet werden und wiederum Zeichenfolgen oder Textmuster beschreiben. Reguläre
Ausdrücke sind von den Metazeichen (Jokerzeichen) in Dateinamen zu unterschei-
den, die von der Bash und anderen Programmen benutzt werden. Beide dienen zwar
einem ähnlichen Zweck, haben aber eine verschiedene Syntax.
Die einfachste Form eines regulären Ausdrucks ist eine gewöhnliche Zeichen-
kette (E: character string, F: chaîne de caractères) ohne tiefere Bedeutung, eine
Zeichenketten-Konstante, ein Literal. Um die Systemprotokolldatei /var/log/
syslog nach Zeilen zu durchsuchen, welche die Zeichenkette ippp0 enthalten,
wird das Werkzeug grep wie folgt benutzt:
debian:~# grep ippp0 /var/log/syslog
Es werden alle Zeilen ausgegeben, die eine Zeichenkette enthalten, auf die der re-
guläre Ausdruck ippp0 zutrifft. Was machen Sie aber, wenn Sie alle Zeilen sehen
möchten, in denen ippp0 oder ippp1 vorkommt? Sie könnten den obigen Aufruf
ändern und sich beim zweiten Mal die Zeilen mit ippp1 ausgegeben lassen. Sie
hätten dann zwei getrennte Datensätze, aus denen sich die Reihenfolge ihres Auftre-
tens in der Ausgangsdatei /var/log/syslog nicht mehr erkennen lässt. Regulä-
re Ausdrücke bieten die Möglichkeit, Suchbegriffe anzugeben, die auf mehrere Zei-
chenketten zutreffen. Hierzu werden bestimmte Zeichen mit besonderer Bedeutung
eingesetzt. Beispielsweise wird in eckigen Klammern angegeben, dass mehrere Zei-
chen als zutreffend gelten sollen. Um die Datei /var/log/syslog nach ippp0
und ippp1 zu durchsuchen, wird folgendes Kommando benutzt:
debian:~# grep "ippp[01]" /var/log/syslog
Die Anführungszeichen sind notwendig, damit die eckigen Klammern nicht von der
Shell verarbeitet werden. Wichtige Sonderzeichen in regulären Ausdrücken sind:
• . Ein Punkt steht für genau ein beliebiges Zeichen. Der reguläre Ausdruck a.a
trifft sowohl auf die Zeichenkette aba als auch auf aca zu. Er trifft nicht auf die
Zeichenkette aa zu, weil in dieser Zeichenkette das dritte Zeichen fehlt.
• * Ein Stern nach einem regulärem Ausdruck bedeutet ein beliebig häufiges Vor-
kommen – auch nullmalig – des voran stehenden regulären Ausdrucks. Der re-
guläre Ausdruck "stop*" trifft auf die Zeichenketten sto, stop und stopp,
nicht aber auf die Zeichenkette stau zu, weil hier das dritte Zeichen kein „o“
158 2 Linux/UNIX

ist. Durch die Kombination von Punkt und Stern lassen sich beliebig lange Zei-
chenketten, die aus jedem Zeichen bestehen dürfen, beschreiben. Der reguläre
Ausdruck .* trifft auf alle Zeichenketten zu: Ein beliebiges Zeichen darf belie-
big oft vorkommen.
• + Das Plus-Zeichen bedeutet, dass der voran stehende reguläre Ausdruck min-
destens einmal vorkommen muss. Der Ausdruck stop+ trifft deswegen nicht
auf die Zeichenkette sto zu, weil das Zeichen „p“ hier nicht enthalten ist, wohl
aber auf stop oder stopp. Das Pluszeichen wird nicht von allen Programmen,
die mit regulären Ausdrücken umgehen, als Sonderzeichen interpretiert.
• [] Durch eckige Klammern eingeschlossene Zeichen bedeuten ein Zeichen
aus der eingeklammerten Zeichenmenge. Beispielsweise trifft der Ausdruck
st[ao].* sowohl auf stop als auch auf stau zu, nicht aber auf stumm,
weil das dritte Zeichen entweder ein „a“ oder ein „o“ sein muss. Die eingeklam-
merte Zeichenmenge kann als Bereich angegeben werden. Der Ausdruck [0-9]
umfasst alle Ziffern und der Ausdruck [a-z] alle Kleinbuchstaben ohne Um-
laute. Auch hier ist die Kombination mit anderen Sonderzeichen möglich. So
trifft der Ausdruck [a-z]* auf solche Zeichenketten zu, in denen beliebig vie-
le Kleinbuchstaben oder gar keine Zeichen vorkommen. Wird den Zeichen in
eckigen Klammern ein Zirkumflex (^) vorangestellt, dann ist gemeint, dass der
entsprechende Ausdruck nur auf solche Zeichen zutrifft, die nicht in den eckigen
Klammern enthalten sind (Komplement). Der Ausdruck [^0-9] trifft nur auf
Zeichen zu, die keine Ziffern sind.
• ^ Um den Anfang einer Zeile anzugeben, ist ebenfalls das Zeichen ^ zu verwen-
den. Der Ausdruck ^Einleitung trifft für alle Zeilen zu, in denen das Wort
Einleitung am Anfang der Zeile steht.
• $ Ebenso kann das Ende einer Zeile spezifiziert werden. Hierzu ist das Dollar-
zeichen zu benutzen. Der Ausdruck 2000$ trifft für solche Zeilen zu, in denen
die Zahl 2000 am Ende der Zeile steht. Durch die Kombination von Zirkumflex
und Dollarzeichen lässt sich der Inhalt ganzer Zeilen angeben:
^Heute ist Sonntag$
trifft ausschließlich auf solche Zeilen zu, die nur die Zeichenkette Heute ist
Sonntag beinhalten, und der Ausdruck:
^Heute ist .*tag$
trifft auf die Zeilen zu, die mit der Zeichenkette Heute ist beginnen
und mit den Zeichen tag enden, also auch auf Heute ist Dienstag
oder Heute ist ein besonders warmer Donnerstag, nicht aber
auf Heute ist ein schöner Tag, weil die letzte Zeile nicht mit den Zei-
chen tag, sondern mit Tag endet.
• \ Gelegentlich müssen Zeichen mit besonderer Bedeutung wie normale Zeichen
(buchstäblich) eingesetzt werden. Wir kennen das bereits unter dem Begriff Quo-
ten von den Metazeichen der Shell. Ein vorangestellter Gegenschrägstrich nimmt
den Sonderzeichen ihre besondere Bedeutung. Der Punkt in Danke\. hat keine
besondere Bedeutung mehr, der Ausdruck steht für die Zeichenkette Danke.
2.10 Suchen nach Dateien 159

(mit Punkt). Wenn das Zeichen \ als normales Zeichen genutzt werden soll, ist
ihm ebenfalls ein Gegenschrägstrich voranzustellen (\\).
• | Zwei durch einen senkrechten Strich miteinander verbundene reguläre Aus-
drücke bilden einen regulären Ausdruck, der auf jede Zeichenkette zutrifft, die
auf mindestens einen der beiden Teilausdrücke passt. Dies ist eine Erweiterung,
die beispielsweise nicht von grep (ohne Optionen), wohl aber von egrep ver-
standen wird.
Wenn Sie in der Kommandozeile mit regulären Ausdrücken arbeiten, sollten Sie we-
gen der Ähnlichkeit mit den Metazeichen der Shell die regulären Ausdrücke mit
einfachen Anführungszeichen (single quotes) vor jeder Verabeitung durch die Shell
schützen.
Nehmen Sie irgendeinen Text und lassen Sie das Kommando grep mit verschie-
denen regulären Ausdrücken darauf los:
joe@debian:~$ grep ’aber’ textfile
joe@debian:~$ grep ’ab.a’ textfile
joe@debian:~$ grep ’bb.[aeiou]’ textfile
joe@debian:~$ grep ’ˆ[0-9]+$’ textfile
joe@debian:~$ grep ’M[ae][iy]e?r’ textfile
grep gibt die Zeilen aus, in denen sich wenigstens eine Zeichenkette befindet, auf
die der reguläre Ausdruck passt. Im ersten Beispiel sind das alle Zeilen, welche die
Zeichenkette aber enthalten wie aber, labern, Schabernack, aberkennen,
im zweiten trifft unter anderem abwarten zu, im dritten Abbruch. Die vierte
Form ermittelt alle Zeilen, die nur Ziffern enthalten: Am Anfang der Zeile (Circum-
flex) ein Zeichen aus der Menge 0 bis 9, dann eine beliebige Wiederholung von Zif-
fern bis zum Ende (Dollar) der Zeile. Man sagt, dass Circumflex oder Dollarzeichen
das Muster am Zeilenanfang oder -ende verankern. In der fünften Zeile wird nach
dem Namen Meier mit all seinen Varianten geforscht. Wie lautet ein regulärer Aus-
druck, der in einer Liste auf die Namen aller .exe-Programme aus der DOS-Welt
zutrifft? Ganz einfach:
\.exe$
Der Punkt muss mittels Backslash seiner besonderen Bedeutung beraubt (gequo-
tet) werden, dann folgen drei harmlose Buchstaben. Das Dollarzeichen besagt, dass
die vorgenannte Zeichenfolge am Ende einer Zeile (Dateinamen) vorkommen soll.
Wollen wir auch groß geschriebene Dateinamen erwischen, geht das mit einer oder-
Verknüpfung:
\.exe$|\.EXE$
Wir wollen nun einen regulären Ausdruck zusammenstellen, der auf alle gültigen
Internet-Email-Anschriften zutrifft. Dazu schauen wir uns einige Anschriften an:
160 2 Linux/UNIX

wulf.alex@mvm.uni-karlsruhe.de
wualex1@mvmc64.ciw.uni-karlsruhe.de
ig21@rz.uni-karlsruhe.de
012345678-0001@t-online.de
Dr_Ralf.Muus@DEGUSSA.de
Links steht immer ein Benutzername, dessen Form vom jeweiligen Betriebssystem
(Eintrag in /etc/passwd oder /etc/aliases) bestimmt wird, dann folgen das
@-Zeichen (Klammeraffe) und ein Maschinen- oder Domänenname, dessen Teile
durch Punkte voneinander getrennt sind. Im einzelnen:
• Anfangs ein Zeichen aus der Menge der Ziffern oder kleinen oder großen Buch-
staben,
• dann eine beliebige Anzahl einschließlich null von Zeichen aus der Menge der
Ziffern, der kleinen oder großen Buchstaben und der Zeichen _-.,
• genau ein Klammeraffe als Trennzeichen,
• im Maschinen- oder Domänennamen mindestens eine Ziffer oder ein Buchstabe,
• dann eine beliebige Anzahl von Ziffern, Buchstaben oder Strichen,
• mindestens ein Punkt zur Trennung von Domäne und Top-Level-Domäne,
• nochmals mindestens ein Buchstabe zur Kennzeichnung der Top-Level-Domäne.
Daraus ergibt sich folgender regulärer Ausdruck (einzeilig):
^[0-9a-zA-Z][0-9a-zA-Z_-.]*@[0-9a-zA-Z][0-9a-zA-Z_-.]*
\.[a-zA-Z][a-zA-Z]*
Das sieht kompliziert aus, ist aber der einfachste Weg zur Beschreibung solcher Ge-
bilde. Obige Form einer Email-Anschrift ist nicht gegen die RFCs abgeprüft und
daher vermutlich zu eng. Eine Anwendung für den regulären Ausdruck könnte ein
Programm sein, das Email-Anschriften verarbeitet und sicherstellen will, dass die
ihm übergebenen Zeichenketten wenigstens ihrer Form nach gültig sind. Robuste
Programme überprüfen Eingaben, ehe sie sich weiter damit abgeben.
Nähere Informationen zu regulären Ausdrücken finden sich in der Info-
Dokumentation zum Programm awk (GNU Version, Paket gawk), in der Manu-
alseite zum regulären Ausdruck nach dem POSIX-Standard (Manualseite zu regex
in Abschnitt 7) sowie in der Manualseite zu dem Editor ed (Paket ed).

2.10.2 Suchen mit find

Aufruf von find

Zum Suchen und Finden von Dateien dient das Kommando find. Es ermöglicht,
Dateien anhand unterschiedlicher Kriterien zu suchen, die auch miteinander ver-
knüpft werden können. Außerdem können mit den gefundenen Dateien Aktionen
durchgeführt werden. Beispielsweise kann untersucht werden, ob sie eine bestimmte
Zeichenfolge enthalten oder nicht. In einfachen Fällen sieht die Syntax von find so
aus:
2.10 Suchen nach Dateien 161

find [Verzeichnis] Suchkriterium [Argument]


Verzeichnis bezeichnet dabei das Verzeichnis, das rekursiv durchsucht wer-
den soll. Die Dokumentation von Debian befindet sich unterhalb des Verzeichnis-
ses /usr/share/doc. Wenn hieraus ein Dokument gesucht werden soll, so sucht
man nur unterhalb des Verzeichnisses, um den Suchvorgang abzukürzen. Fehlt die
Angabe des Verzeichnisses, wird das Arbeitsverzeichnis genommen.
Suchkriterium stellt ein Argument dar, das find angibt, wonach zu suchen
ist. Bei den Suchkriterien handelt es sich um Tests, die für jede Datei unterhalb des
Startverzeichnisses durchgeführt werden. Ein Beispiel für einen Test ist das Such-
kriterium -name, welches find veranlasst, für jede Datei zu überprüfen, ob sie
einen bestimmten Namen hat. Den Suchkriterien muss in den meisten Fällen noch
ein weiteres Argument folgen, nämlich das Argument des Kriteriums. Im Beispiel
von -name ist das der Dateiname, nach dem gesucht werden soll.
Um alle Dateien zu finden und anzuzeigen, die unterhalb des Verzeichnisses
/usr/share/doc liegen und den Namen README tragen, ist folgendes Kom-
mando einzugeben:
joe@debian:~$ find /usr/share/doc -name README
Früher musste noch die Aktion -print angegeben werden, aber die ist heute vor-
gegeben und darf entfallen. Neben -name gibt es noch eine Reihe weiterer Suchkri-
terien. Die wichtigsten sind:
• -iname Dateiname Es wird nach einem Dateinamen ohne Beachtung von
Groß- und Kleinschreibung gesucht (das i steht für case insensitive). Beispiel:
wird nach GPL gesucht, wird auch gpl gefunden.
• -user Benutzername und -group Gruppenname Es wird nach Dateien
gesucht, die einem bestimmten Benutzer oder einer bestimmten Gruppe zugeord-
net sind. Beispiel:
joe@debian:~$ find -user root
Es werden die Namen aller Dateien ausgehend vom aktuellen Verzeichnis ausge-
geben, die dem Systemverwalter gehören.
• -newer Datei Es werden Dateien gefunden, die später als die mit Datei
angegebene Datei geändert wurden. Beispiel:
joe@debian:~$ find -newer /etc/passwd
Es werden ausgehend vom Arbeitsverzeichnis alle Dateien ausgegeben, die nach
dem Datum verändert wurden, an dem die Datei /etc/passwd zuletzt geän-
dert oder neu erzeugt wurde.
• -type Typ Es werden die Dateien ausgegeben, die vom Typ Typ sind. Für
Typ kann Folgendes eingesetzt werden:
– d Verzeichnis (directory). Es werden nur Verzeichnisse ausgegeben.
– l Symbolischer Link. Es werden nur symbolische Links ausgegeben.
– f Datei (file). Es werden nur gewöhnliche Dateien ausgegeben.
162 2 Linux/UNIX

• -size Größe Es werden Dateien ausgegeben, deren Größe Größe über-


schreitet, wenn Größe das Zeichen „+“ vorangestellt ist, oder deren Größe
Größe unterschreitet, wenn Größe ein „-“ vorangestellt ist. Wenn Größe we-
der ein „+“ noch ein „-“ vorangestellt ist, werden nur die Namen der Dateien
ausgegeben, deren Größe Größe exakt entspricht. Hinter der Angabe der Größe
kann die Einheit angegeben werden. Dafür gibt es folgende Möglichkeiten:
– c Die Größe wird in Bytes angegeben (count).
– k Die Größe wird in KB (Kilobyte) angegeben.
– b Die Größe wird in Blöcken angegeben.
Das folgende Kommando sucht unterhalb des aktuellen Arbeitsverzeichnisses
alle Dateien, die kleiner als 5 Kilobyte sind:
joe@debian:~$ find -size -5k
Das nächste Kommando listet alle Dateien unterhalb des Verzeichnisses
/usr/share/doc auf, die größer als 100 KB sind:
joe@debian:~$ find /usr/share/doc -size +100k
Das Kommando find ist vielseitig, braucht aber seine Zeit für die Ausführung.
Es ist möglich, Suchkriterien durch logische Operatoren zu verbinden. Hierzu
stehen die Operatoren -and, -or und -not zur Verfügung. Beispielsweise sucht
folgendes Kommando nach Dateien unterhalb des Verzeichnisses /usr/share/
doc, deren Namen README lautet und deren Größe 4 KB übersteigt:
joe@debian:~$ find /usr/share/doc -name README -and
-size +4k
Das nächste Kommando sucht unterhalb des aktuellen Arbeitsverzeichnisses alle Da-
teien, die nicht dem Systemverwalter gehören und gewöhnliche Dateien (keine Ver-
zeichnisse oder symbolische Links) sind:
joe@debian:~$ find -not -user root -and -type f
Wenn Sie find mit den Suchkriterien -name oder -iname benutzen, dürfen
die Namen, nach denen gesucht wird, auch Metazeichen enthalten. Diese haben die
gleiche Bedeutung wie für die Shell. Bedenken Sie jedoch, dass Sie die Shell daran
hindern müssen, die Metazeichen zu verarbeiten. Quoten Sie die Zeichenkette, wenn
Sie möchten, dass das Metazeichen unverändert an find übergeben wird:
joe@debian:~$ find /usr/share/doc "GPL*"

Ausführen von Kommandos mit den Suchergebnissen

Als Voreinstellung gibt find den Pfad- und Dateinamen zu einer Datei aus, die den
Suchkriterien entspricht. Gelegentlich ist es jedoch erwünscht, die Suchergebnisse
gleich einem weiteren Kommando zuzuführen. Beispielsweise erzeugen viele Pro-
gramme eine core-Datei, wenn ein schwerer Fehler auftritt. Die Cores belegen viel
Platz und helfen dem durchschnittlichen Benutzer nichts, weg damit. Dies wird er-
reicht, indem man find nach core-Dateien suchen und dann das Programm rm
2.10 Suchen nach Dateien 163

direkt von find aufrufen lässt. Zunächst wollen wir find aber nur das ungefähr-
liche Programm ls mit dem Argument -l aufrufen lassen, um nicht Dateien zu
löschen, sondern die Größe der Dateien anzeigen zu lassen.
Zum Ausführen eines Programms durch find dient das Argument -exec. Ihm
muss der Name des Programms übergeben werden, das aufgerufen werden soll. Alle
folgenden Parameter übergibt find dem aufzurufenden Programm. Wird -exec
ls -l angegeben, so ruft find ls mit der Option -l auf. Deswegen muss find
wissen, wo die Parameter für das aufzurufende Programm enden. Dies wird mit ei-
nem Semikolon angezeigt. Hierbei ist zu beachten, dass das Semikolon für die Shell
eine besondere Bedeutung hat (Metazeichen) und durch einen Backslash gequotet
werden muss. Das Argument lautet dann -exec ls -l \;.
Das ist noch nicht alles. Bis jetzt würde find für jede gefundene Datei das
Kommando ls -l ausführen, wodurch die Dateien im Arbeitsverzeichnis angezeigt
werden würden. Dies würde genau so oft passieren, wie find Dateien findet, auf
die die angegebenen Suchkriterien zutreffen. Da dies keinen Sinn ergibt, muss find
an ls noch ein Argument übergeben, das ls mitteilt, welche Datei anzuzeigen ist.
Hierfür wird ein Paar geschweifter Klammern benutzt, an deren Stelle find später
die Namen der gefundenen Dateien einsetzt. Wird find der Parameter -exec ls
-l {} \; übergeben und dann die Datei texte/core gefunden, so ruft find
ls folgendermaßen auf:
joe@debian:~$ ls -l texte/core
Um die gefundenen Dateien automatisch durch rm löschen zu lassen, ist dieser Auf-
ruf zu verwenden:
joe@debian:~$ find ~/ -name core -exec rm {} \;
Alternativ zum Argument -exec kann das Argument -ok verwendet werden. Es
bewirkt das Gleiche, dabei wird vor jedem Aufruf des auszuführenden Kommandos
nachgefragt, ob es tatsächlich ausgeführt werden soll. Das wird dann mit <y> oder
<n> bestätigt oder verneint.
Die Syntax von find variiert etwas zwischen den verschiedenen Linux/UNIX-
Systemen, im Manual nachlesen. Dem Microsoft-Kommando find entspricht das
Linux/UNIX-Kommando grep.

2.10.3 Schnelles Suchen mit locate

Einen anderen Ansatz als find verfolgt das Kommando locate. Während find
das Dateisystem nach jedem Aufruf tatsächlich durchsucht, benutzt locate eine
Datenbank, in der Namen und Verzeichnisse der meisten Dateien auf dem System
gespeichert sind. Diese Datenbank wird üblicherweise einmal pro Nacht durch Auf-
ruf des Programms updatedb aktualisiert16 Deswegen werden Dateien, die gerade

16
Verantwortlich hierfür ist der cron-Dämon, siehe Abschnitt 10.3.3 Zeitdämon auf Sei-
te 446.
164 2 Linux/UNIX

eben erzeugt wurden, mit locate nicht gefunden. locate eignet sich gut zur Su-
che nach Dateien, die Bestandteil der Debian-Installation sind, weil diese sich nicht
täglich ändert. Im einfachsten Fall rufen Sie locate folgendermaßen auf:
locate Suchzeichenfolge
Die Suchzeichenfolge bezeichnet dabei eine Zeichenkette, die im Datei- oder
Pfadnamen der gesuchten Datei vorkommt. Beispielsweise sucht folgendes Kom-
mando nach allen in der Datenbank gespeicherten Dateien, in deren Namen die Zei-
chenkette README vorkommt und listet diese auf:
joe@debian:~$ locate README
Sie können in der Suchzeichenfolge auch die Shell-Metazeichen *, ? und [] ver-
wenden. Schützen Sie die Metazeichen vor der Auswertung durch die Shell. Wenn
Sie Metazeichen verwenden, werden nur Dateien ausgegeben, auf die die Suchzei-
chenfolge exakt zutrifft. Beispiel: die Suchzeichenfolge aa* trifft nicht exakt auf den
Namen laang zu, weil das l mit ihr nicht abgedeckt ist, während ohne Metazeichen
alle Dateien ausgegeben werden, die die Suchzeichenfolge enthält. So durchsucht
folgendes Kommando die Datenbank nach allen Einträgen, die mit der Zeichenfolge
README enden:
joe@debian:~$ locate "*README"
Das nächste Kommando gibt alle Dateien der Datenbank aus, die die Zeichenfolge
README enthalten, gefolgt von einem Punkt und dann drei beliebigen Zeichen:
joe@debian:~$ locate "*README.???"
Wir wollen nun in allen Dateien namens socket.h nach der Zeichenfolge protocol
family suchen. Dazu bauen wir eine Pipe aus grep und locate auf:
joe@debian:~$ grep "protocol family"‘locate socket.h‘
locate liefert die Liste der Dateien, der in rückwärtsgerichteten Hochkommas
(back quote) stehende Ausdruck wird samt den Hochkommas durch die Liste er-
setzt (substituiert) und grep als zweites Argument untergejubelt. Das erste Argu-
ment steht in Anführungszeichen, damit es von der Shell als ein einziger Ausdruck
weitergereicht wird.
Die locate-Datenbank kann auf bestimmte Verzeichnisse begrenzt werden,
sodass beispielsweise die Home-Verzeichnisse der Benutzer nicht erfasst werden.
locate arbeitet schnell, da die Suche im Dateisystem bereits durch updatedb
erledigt ist, das eine gewisse Zeit beansprucht.

2.11 Textbetrachter (Pager)


2.11.1 Aufgabe
Von den zahlreichen Anwendungen unter Debian GNU/Linux greifen wir hier nur ei-
nige Textbetrachter und anschließend zwei Texteditoren heraus, weil sie bei der Sys-
temverwaltung unentbehrlich sind. Ein Textbetrachter oder Pager ist ein Programm,
2.11 Textbetrachter (Pager) 165

das Textdateien am Bildschirm seitenweise ausgibt und dem Benutzer erlaubt, sich
im Text zu bewegen, also vorwärts oder rückwärts zu blättern oder im Text nach Zei-
chenketten zu suchen. Ein Pager, der auf jedem Linux/UNIX System zu finden sein
sollte, ist das klassische Programm more. Unter Debian GNU/Linux steht zusätzlich
das Programm less zur Verfügung, das mehr Funktionen kennt und bequemer zu
benutzen ist als more.
Verschiedene Betriebssysteme markieren den Zeilenwechsel in Textdateien mit-
tels unterschiedlicher Zeichen:
• In der Linux/UNIX-Welt mittels des ASCII-Zeichens Nr. 10 (LF, Zeilenvor-
schub, E: line feed, F: saut de ligne),
• in der traditionellen Macintosh-Welt mittels des ASCII-Zeichens Nr. 13 (CR,
Wagenrücklauf, E: carriage return, F: retour chariot),
• in der DOS/Windows-Welt mittels des Paares aus beiden Zeichen (CR LF).
Manche Werkzeuge übersetzen die Zeilenwechsel stillschweigend, manche nicht.
Bei diesbezüglichen Problemen helfen Übersetzer wie todos und fromdos aus
dem Paket sysutils, der allgemeine Zeichenersetzer tr, der Zeichensatz-Konverter
recode oder der Streaming Editor sed.
Programme zum Betrachten von Text sind Bestandteil des Alternativen-Systems
von Debian. Sie können mehrere solche Programme gleichzeitig einrichten. Welches
Programm dann nach Eingabe des Kommandos pager aufgerufen wird, wird durch
einen symbolischen Link im Verzeichnis /etc/alternatives festgelegt, siehe
Abschnitt 9.1.7 Arbeiten mit Alternativen auf Seite 394. Meist ist pager ein Sym-
link auf /usr/bin/less. Die Textbetrachter können natürlich auch direkt über
ihren eigentlichen Namen wie less aufgerufen werden.
Eine Reihe von Programmen, die einen Textbetrachter verwenden, werten den
Inhalt der Umgebungsvariable PAGER aus (siehe Abschnitt 2.7.5 Benannte Variable
auf Seite 77), um zu entscheiden, welches Programm tatsächlich aufgerufen werden
soll. Das bekannteste Beispiel hierfür ist das Programm man.
Textbetrachter können in zwei verschiedenen Modi arbeiten: Sie zeigen den Text
aus einer Datei an, oder sie lesen den Text aus einem Datenstrom, einer Pipe (sie-
he Abschnitt 2.7.2 Kommandoverkettung auf Seite 66). Um beispielsweise die Datei
readme.txt im Arbeitsverzeichnis mittels less anzuzeigen, kann alternativ ei-
ner der beiden Aufrufe benutzt werden:
joe@debian:~$ less readme.txt
joe@debian:~$ cat readme.txt | less
In obigem Zusammenhang ist die erste Fassung einfacher, aber es gibt auch Fälle, in
denen man die Pipe braucht:
joe@debian:~$ ps -ef | less
Schließlich kann man mit Texteditoren auch Text lesen, ohne ihn zu ändern. Wer den
vi in den Fingerspitzen hat, ruft ihn zum Lesen in der Form view auf und verfügt
über alle Funktionen des Editors. Solange es nur um das Blättern in einem nicht zu
166 2 Linux/UNIX

langen Text geht, bietet auch das Scrollen im Bildschirmspeicher einen Weg, sich den
Text häppchenweise anzusehen, aber die sonstige Funktionalität der Pager wie Su-
chen nach Zeichenketten fehlt. In vorstehendem Beispiel umfasst die Ausgabe etwa
hundert Zeilen entsprechend vier Bildschirmen, da ist auch Scrollen eine Möglich-
keit. Will man sich nur die ersten oder letzten Zeilen einer Textdatei ansehen, sind
die Kommandos head und tail die richtigen Werkzeuge. Der Aufruf:
joe@debian:~$ tail /var/log/messages
zeigt die jüngsten zehn Zeilen der Protokolldatei zum Zeitpunkt des Aufrufs an. Die
Anzahl der auszugebenden Zeilen lässt sich als Option mitgeben:
joe@debian:~$ tail -20 /var/log/messages
genauso für head. Mittels (f = follow):
joe@debian:~$ tail -f /var/log/messages
wird die Ausgabe laufend nachgeführt und somit die Datei ständig zum Lesen offen
gehalten.

2.11.2 Benutzung von more

Die Programme more und less werden beide mit der Tastatur benutzt. Bei more
sind die wichtigsten Tastaturkommandos:
<h> oder <?> Eine Hilfe mit den Tastaturkommandos wird angezeigt.
<space> Die nächste Seite des Textes wird angezeigt.
<b> (back) Die vorige Seite des Textes wird angezeigt.
<cr> Eine weitere Zeile wird angezeigt.
<ctrl>+<l> Der Bildschirm wird neu geschrieben.
<q> oder <Q> (quit) Das Programm wird verlassen.
Darüber hinaus bietet more weitere Kommandos und Funktionen wie Suchen nach
regulären Ausdrücken an, die zum Teil jedoch nur dann funktionieren, wenn mit dem
Programm eine Datei angezeigt wird und nicht, wenn more aus einem Datenstrom
liest, wie es bei der Verwendung des Programms mit man der Fall ist. Ein Datenstrom
kann nicht rückwärts fließen.

2.11.3 Benutzung von less

Diese und andere Schwächen von more beseitigt das Programm less, mit dem Sie
auch in Text aus einem Datenstrom vor- und zurückblättern können. Die wichtigsten
Kommandos für die Arbeit mit less werden nachfolgend aufgeführt. Vielen Kom-
mandos kann dabei optional eine Zahl vorangestellt werden. Dazu ist zuerst die Zahl
einzugeben und dann unmittelbar folgend die Taste für das Kommando zu betätigen.
Die Liste aller von less verstandenen Kommandos finden Sie im Manual sowie in
der Online-Hilfe.
2.11 Textbetrachter (Pager) 167

<h> oder <H> Eine Hilfe mit den Tastaturkommandos wird angezeigt.
<space> oder <f> Im Text wird um eine voreingestellte Anzahl von Zeilen
vorwärts geblättert. In der Regel ist das die Menge Text,
die auf einen Bildschirm passt. Stellen Sie eine Zahl voran,
wird um die angegebene Anzahl Zeilen vorwärts geblättert.
<z> Wie <space> oder <f> mit dem Unterschied, dass die
optional vorangestellte Zahl zur neuen Voreinstellung wird.
b oder <esc>+<v> Rückwärts blättern um die voreingestellte Menge Text.
Diese ist wie bei space voreingestellt auf die Menge Text,
die auf einen Bildschirm passt.
<w> Wie <b> mit dem Unterschied, dass die optional
vorangestellte Zahl zur neuen Voreinstellung wird.
<cr> oder <e> Ohne vorangestellte Zahl wird um eine Zeile vorgeblättert,
ansonsten um die angegebene Anzahl von Zeilen.
<y> oder <k> Rückwärts blättern um eine Zeile oder die spezifizierte
Anzahl von Zeilen.
<d> Defaultmäßig ein halber Bildschirm vorwärts,
sonst die angegebene Anzahl von Zeilen.
<u> Wie <d>, jedoch rückwärts.
<esc>+<(> Der Text wird um die angegebene Anzahl von Spalten
(Zeichen) nach rechts verschoben, ohne Angabe um acht.
<esc>+<)> Der Text wird um die angegebene Anzahl von Spalten
nach links verschoben, ohne Angabe um acht.
<ctrl>+<l> Der Bildschirm wird neu gezeichnet.
<p> Es wird zu der Textstelle gesprungen, die der angegebenen
Menge des Textes in Prozent entspricht. Wenn Sie 50 und
dann <p> eingeben, gelangen Sie zur Mitte des Textes.
</> Suchen. Nach dem Schrägstrich ist ein regulärer Ausdruck
einzugeben und abschließend <cr> zu drücken. less
sucht nach Zeichenfolgen, die zum RE passen und springt
zum ersten Treffer. Wenn Sie mehrmals nach der gleichen
Zeichenfolge suchen, setzen Sie die Suche mittels Eingabe
von <n> (new) fort. Geben Sie <N> ein,
um rückwärts weiter zu suchen.
<?> Wie </>, nur rückwärts.
<v> Es wird der voreingestellte Editor mit der Datei geöffnet.
Das Kommando funktioniert nur bei Dateien.
<s> (save) Der Text wird in eine Datei gespeichert.
Das Kommando funktioniert nur bei Datenströmen.
<q> oder <Q> (quit) Beendet das Programm less.
Die Pfeiltasten sowie die Tasten <Page Up> und <Page Down> funktionieren
ebenfalls erwartungsgemäß. Einige Kommandos stimmen mit denen des Texteditors
vi überein. Wer diesen Editor gewohnt ist, findet sich schnell zurecht.
168 2 Linux/UNIX

Manchmal ist es notwendig, less mitzuteilen, welchen Zeichensatz das Pro-


gramm benutzen soll. Hierzu dient die Umgebungsvariable (siehe Abschnitt 2.7.5
Benannte Variable auf Seite 77) LESSCHARSET. Einige Werte für diese Variable
sind:
• ascii Es werden nur die Zeichen des US-ASCII-Zeichensatzes angezeigt. Die
deutschen Umlaute gehören nicht dazu.
• iso8859 Dieser Zeichensatz entspricht weitgehend dem ASCII-Zeichensatz,
enthält jedoch zusätzlich die Sonderzeichen westeuropäischer Sprachen, Dieser
Wert ist vorgegeben, falls die Variable LESSCHARSET nicht gesetzt ist.
• dos MS-DOS Zeichensatz.
• koi-8r Zeichensatz für die russische Sprache (kyrillische Schrift).
Um den Inhalt russischer (kyrillischer) Textdateien anzuzeigen, die mit dem Zei-
chensatz koi-8r kodiert sind, ist folgendes Kommando einzugeben, bevor less
aufgerufen wird:
joe@debian:~$ export LESSCHARSET=koi-8r
Ein kyrillischer Font für den Bildschirm muss eingerichtet sein. Ohne Font geht
nichts.

2.11.4 Betrachten komprimierter Dateien mit zless

Fast alle Textdateien in den Verzeichnissen unterhalb von /usr/share/doc lie-


gen in mittels gzip komprimierter Form vor. Um diese Dateien mit less zu be-
trachten, sind sie vorher zu dekomprimieren. Einfacher geht es mit dem Kommando
zless. Das Kommando dekomprimiert die Datei und zeigt sie an:
joe@debian:~$ zless /usr/share/doc/bash/FAQ.gz
Neben zless steht auch das Kommando zmore zur Verfügung, welches den Inhalt
komprimierter Dateien oder eines komprimierten Datenstroms mit dem Programm
more anzeigt.

2.11.5 Anzeigen spezieller Daten mit lessfile und lesspipe

Die beiden Programme lessfile und lesspipe erlauben es, auch Dateien mit
less zu betrachten, bei denen es sich nicht um Textdateien handelt. Die Programme
können von less aufgerufen werden, bevor eine Datei angezeigt wird, und die Datei
so umwandeln, dass ihr Inhalt wie gewöhnlicher Text angezeigt wird.
Die Programme unterscheiden sich dadurch, dass lesspipe die umgewandel-
ten Daten direkt auf die Standardausgabe gibt, die mit der Standardeingabe von
less verbunden ist, während lessfile zunächst die gesamte anzuzeigende Datei
umwandelt, das Ergebnis in eine temporäre Datei schreibt und den Inhalt der Datei
mit less anzeigt. Die Datei wird bei Beendigung von less gelöscht. Bei der Ver-
wendung von lessfile muss also gelegentlich länger gewartet werden, bis Daten
angezeigt werden, während lesspipe sofort Daten zur Verfügung stellt, die aber
2.12 Editoren 169

möglicherweise zu Beginn noch nicht komplett durchsucht werden können, weil sie
noch nicht umgewandelt wurden.
Beide Programme entscheiden anhand der Endung des Namens einer Datei, wie
die betreffenden Daten umzuwandeln sind. Daraus ergibt sich, dass dieses Verfahren
nur dann funktioniert, wenn der Inhalt einer Datei angezeigt wird und nicht, wenn
von der Standardeingabe gelesen wird. Im zweiten Fall steht kein Dateiname zur
Verfügung.
Das Programm less erfährt durch die beiden Umgebungsvariablen LESSOPEN
und LESSCLOSE davon, welche Programme vor und nach dem Anzeigen einer Da-
tei aufgerufen werden sollen. Die beiden Variablen können mit den Programmen
lessfile bzw. lesspipe gesetzt werden. Wenn Sie lessfile benutzen, ge-
ben Sie folgendes Kommando ein:
joe@debian:~$ eval $(lessfile)
Wenn Sie lesspipe benutzen, ist dieses Kommando zu verwenden:
joe@debian:~$ eval $(lesspipe)
Um diese Einstellung dauerhaft zu verwenden, ist das entsprechende Kommando in
der Startdatei der Standardshell anzugeben (siehe Abschnitt 2.7.1 Konfiguration und
Startdateien auf Seite 51). Mit dem Aufruf:
joe@debian:~$ set | grep LESS
ermitteln Sie, ob die beiden Umgebungsvariablen gesetzt sind. Falls ja, kann
less den Inhalt sowie die Beschreibung von Debian-Paketen oder von kom-
primierten Dateien anzeigen. Um beispielsweise den Inhalt des Debian-Archivs
grub_0.97-16.1_i386.deb anzuzeigen, ist im Verzeichnis /var/cache/
apt/archives folgendes Kommando einzugeben:
joe@debian:~$ less grub_0.97-16.1_i386.deb
wobei man vorteilhaft von der Dateinamenergänzung mittels <tab> Gebrauch
macht.

2.12 Editoren
2.12.1 Grundbegriffe

Ein Editor – wörtlich ein Herausgeber – ist im allgemeinen Sinn ein Werkzeug
zum Erzeugen und Verarbeiten von Dateien. Zum Erzeugen und Verarbeiten von
Textdateien wird ein Texteditor benötigt, ein Texteisen. Andere Editoren bearbeiten
Formeln, Grafiken, Musiknoten, Sounddateien oder beliebige binäre Daten. Textedi-
toren stellen den Inhalt der zu verarbeitenden Textdatei auf dem Bildschirm dar und
ermöglichen, durch Editierkommandos Text einzugeben oder den angezeigten Text
zu ändern. Es lassen sich zwei Gruppen von Texteditoren unterscheiden:
170 2 Linux/UNIX

• Texteditoren im engeren Sinn nehmen Zeicheneingaben und Editierkommandos


entgegen, formatieren den Text aber nicht und stellen auch keinen formatierten
Text auf dem Bildschirm dar (von der Zeilenstruktur abgesehen, die man kaum
als Format bezeichnen kann). Sie fügen von sich aus keine verdeckten Zeichen-
ketten in den Text ein. In der Systemverwaltung spielen nur diese Editoren eine
Rolle.
• WYSIWYG-Editoren – auch Textprozessoren genannt – kennen Formatieran-
weisungen und zeigen deren Auswirkungen sofort auf dem Bildschirm an, daher
der Name WYSIWYG = What You See Is What You Get, zu Deutsch: Auf dem
Bildschirm sieht man, wie der Text später auf Papier aussieht, mehr oder weniger.
Textprozessoren sind hauptsächlich in Büros anzutreffen.
Obwohl die Textprozessoren als die intelligenteren Werkzeuge erscheinen, sind ih-
nen bei anspruchsvollen Aufgaben die einfachen Texteditoren in Verbindung mit
Formatier- oder Satzprogrammen überlegen. Unsere Debian-Bücher beispielsweise
sind mit Texteditoren erster Art geschrieben und dann mittels des Satzprogramms
LATEX formatiert worden.
Ferner kann man Texteditoren ebenso wie andere Werkzeuge danach einteilen,
ob sie mit einem Textbildschirm auskommen oder eine grafische Oberfläche mitbrin-
gen. Ein vergleichsweise einfacher Texteditor mit grafischer Oberfläche ist gedit.
Den Emacs gibt es in beiden Geschmacksrichtungen. gvim ist eine vi-Variante mit
grafischer Oberfläche.
Alle Texteditoren stehen vor dem Problem, das sie über ein- und dieselbe Tastatur
sowohl Text wie Editierkommandos empfangen, wobei die wenigen Editiertasten der
üblichen PC-Tastatur mit etwas über 100 Tasten bei weitem nicht ausreichen. Es
haben sich zwei Lösungen herausgebildet:
• Die Editoren der vi-Familie kennen zwei Modi. Im Eingabe- oder Schreibmo-
dus werden alle Eingaben als zu speichernder Text aufgefasst, im Befehls- oder
Kommandomodus als Editierkommandos.
• Die Editoren der Emacs-Familie kennen nur einen Modus (oder keinen) und un-
terscheiden die Editierkommandos durch besondere Tastenkombinationen vom
eingegebenen Text.
Beide Wege haben Vor- und Nachteile sowie ihre Anhänger. Man sollte keinen Glau-
benskrieg darum entfachen. Schreiben kann man mit beiden gleichermaßen.
Unter Debian GNU/Linux stehen Ihnen verschiedene Texteditoren zur Ver-
fügung, die jedoch nicht alle auf Ihrem Rechner eingerichtet zu sein brauchen.
Die Texteditoren nehmen am Alternativen-System von Debian teil, siehe /etc/
alternatives. Das Kommando editor kann Ihren Lieblingseditor aufrufen,
unabhängig davon, wie der tatsächlich heißt.
Neben den oft gebrauchten Texteditoren gibt es Werkzeuge für besondere Auf-
gaben wie den Streaming-Editor sed, ein Filter, das einen Text nach mitgegebenen
Regeln bearbeitet, oder Hex-Editoren, die eine beliebige Datei byteweise zu editie-
ren gestatten. Auch das Mischen rechts- und linksläufiger Schriften in einem Text
ist eine Aufgabe für Spezialisten. In unserem zweiten Debian-Band gehen wir auf
einige dieser Editoren ein.
2.12 Editoren 171

2.12.2 Zeichensätze

Wenn es um Texte geht, muss man sich zuerst mit dem Problem der Zeichensätze
herumschlagen. Das hat nichts mit Linux/UNIX zu tun, sondern gilt für alle Be-
triebssysteme.
Der Rechner kennt nur Bits und Bytes (Oktetts, Gruppen von 8 Bits). Die Bedeu-
tung erhalten die Bits durch die Programme. Ob eine Bitfolge in der Menschenwelt
eine Zahl, ein Wort oder einen Schnörkel darstellt, entscheidet die Software. Um
mit Texten zu arbeiten, muss zuerst ein Zeichensatz (E: character set, F: jeu de ca-
ractères) vereinbart werden. Dieser besteht aus einer anfangs ungeordneten Menge
von Zeichen, auch Répertoire oder Zeichenvorrat genannt, die nur besagt, welche
Zeichen bekannt sind. Zu dem Zeichenvorrat der europäischen Sprachen gehören:
• Kleine und große Buchstaben, auch mit Akzenten (Diakritika) usw.,
• Ziffern,
• Satzzeichen,
• Symbole: aus der Mathematik, Euro-Symbol, Klammeraffe (E: commercial at,
F: arobace), et-Zeichen,
• Leerzeichen (Zwischenraum, Space), Tabulator (so genannte Whitespaces, Zei-
chen, die einen Vorschub erzeugen, aber keine Druckerschwärze verlangen),
• Steuerzeichen wie Zeilenwechsel (Line Feed), Seitenwechsel (Form Feed),
Backspace.
In einem zweiten Schritt wird die Menge geordnet, jedem Zeichen wird eine Position
(E: code position, code point, Unicode scalar value) zugewiesen. Nahe liegend ist
eine mit null beginnende Nummerierung. Die geordnete Menge ist der Zeichensatz.
In der Regel bekommt jedes Zeichen auch noch einen Namen, siehe Tabelle 2.4.
Wir wissen aber noch nicht, wie die Zeichen im Rechner und auf dem Bildschirm
oder auf Papier dargestellt werden. Auch die Aussprache der Zeichen ist noch zu
vereinbaren und nicht einheitlich. Das Zeichen ist vorläufig noch abstrakt.

Tab. 2.4: Ausschnitt aus dem Zeichensatz Latin-1


Nummer Zeichen Name

Nr. 008 bs Backspace (Rückschritt)


Nr. 055 7 Digit seven (Ziffer sieben)
Nr. 104 h Latin small letter h (lateinischer Kleinbuchstabe h)
Nr. 123 { Left curly bracket (linke geschweifte Klammer)
Nr. 220 Ü Latin capital letter u with diaresis (lateinischer Großbuchstabe
u-Umlaut)

Die Zeichencodierung (E: character encoding) legt fest, wie eine Folge von Zei-
chen in eine Folge von Bits oder Bytes umzuwandeln ist, und zurück. Der Zeichen-
satz ist von seiner Codierung zu unterscheiden. Im einfachsten Fall wird die vorzei-
chenlose, ganzzahlige Positionsnummer als Code für ein Zeichen genommen. Dann
172 2 Linux/UNIX

stellt sich die Frage, wie solche Zahlen im Rechner dargestellt werden. Der häufigste
Fall ist eine Darstellung als duale Zahl mit sieben oder acht Bits. Wir kommen so zur
Codetafel. In der linken Spalte stehen die Zeichen, in der rechten die Bits oder um-
gekehrt. Mit diesem Schritt ist die rechnerinterne Darstellung der Zeichen festgelegt,
aber noch nicht deren Aussehen auf Schirm oder Papier, die Glyphen.
Zu Zeiten, als Bits noch knapp und teuer waren, haben die Nordamerikaner ei-
ne Codetafel aufgestellt, in der die ihnen bekannten Buchstaben, Ziffern und Satz-
zeichen zuzüglich einiger Steueranweisungen wie Zeilen- und Seitenvorschub mit
sieben Bits dargestellt werden. Das war Sparsamkeit am falschen Platz, aber schon
ein Fortschritt gegenüber dem Fernschreib-Alphabet, das nur fünf Bits oder Löcher
auf dem Lochstreifen vorsah. Mit sieben Bits unterscheide ich 27 = 128 Zeichen,
nummeriert von 0 bis 127. Diese Codetafel ist unter dem Namen American Standard
Code for Information Interchange (ASCII) weit verbreitet und seit 1963 in ISO 646
genormt, gleichzeitig auch als CCITT-Empfehlung V.3. Um Missverständnisse aus-
zuschließen, heißt sie ausführlich 7-bit-US-ASCII. Jeder Rechner kennt sie.
Die ersten 32 Zeichen der ASCII-Tafel dienen der Steuerung der Ausgabegeräte,
es sind unsichtbare Zeichen. Ein Beispiel für Steuerzeichen ist das ASCII-Zeichen
Nr. 12, Form Feed, das einen Drucker zum Einziehen eines Blattes Papier veranlasst.
Auf der Tastatur werden sie entweder in Form ihrer Nummer oder mit gleichzeitig
gedrückter <ctrl>-Taste erzeugt. Die Ziffern 0 bis 9 tragen die Nummern 48 bis
57, die Großbuchstaben die Nummern 65 bis 90. Die Kleinbuchstaben haben um 32
höhere Nummern als die zugehörigen Großbuchstaben, was das Umrechnen erleich-
tert. Der Rest sind Satzzeichen. Im Anhang ist die ASCII-Tafel wiedergegeben. Das
Kommando:
joe@debian:~$ man ascii
bringt sie auf den Schirm.
Textausgabegeräte wie Bildschirme oder Drucker erhalten vom Rechner die
ASCII-Nummer eines Zeichens und setzen diese mittels eingebauter Software in
das entsprechende Zeichen um. So wird beispielsweise die ASCII-Nr. 100 in den
Buchstaben d umgesetzt. Die Ausgabe der Zahl 100 als Zeichenkette erfordert das
Abschicken der ASCII-Nr. 49, 48, 48.
Die US-ASCII-Tafel enthält nicht die deutschen Umlaute und andere europäi-
sche Absonderlichkeiten. Es gibt einen Ausweg aus dieser Klemme, leider sogar
mehrere. Bleibt man bei sieben Bits, muss man einige nicht unbedingt benötigte
US-ASCII-Zeichen durch nationale Sonderzeichen ersetzen. Für deutsche Zeichen
ist eine Ersetzung gemäß DIN 66003 üblich, siehe Anhang 20.3 German ASCII auf
Seite 1059. German ASCII ist als Variante Nr. 21 in ISO 646 registriert. Für Frank-
reich oder Schweden lautet die Ersetzung anders, siehe die deutsche Wikipedia unter
dem Begriff ISO 646.
Im Ausgabegerät, das die Umsetzung der ASCII-Nummern in Zeichen vor-
nimmt, liegt eine solche Ersatztafel. Deshalb kann ein entsprechend ausgestatte-
ter Bildschirm oder Drucker dieselbe Textdatei einmal mit amerikanischen ASCII-
Zeichen ausgeben, ein andermal mit deutschen ASCII-Zeichen. Im ersten Fall er-
scheinen geschweifte und eckige Klammern, im zweiten stattdessen Umlaute. Wer-
2.12 Editoren 173

den bei Ein- und Ausgabe unterschiedliche Codetafeln verwendet, gibt es Zeichen-
salat. Andersherum gesagt: Wenn ich einen Text ausgebe, muss ich die Codetafel der
Eingabe kennen und verwenden.
Spendiert man ein Bit mehr, so lassen sich 28 = 256 Zeichen darstellen. Das ist
der bessere Weg. Die Firma IBM hat schon früh bei größeren Anlagen den Extended
Binary Coded Decimal Interchange Code (EBCDIC) mit acht Bits verwendet, der
nirgends mit ASCII übereinstimmt. Hätte sich diese Codetafel statt ASCII durchge-
setzt, wäre uns Europäern einige Mühe erspart geblieben. Eine globale Lösung wäre
es aber auch nicht gewesen.
Bei ihren PCs schließlich wollte IBM außer nationalen Sonderzeichen auch eini-
ge Halbgrafikzeichen wie Mondgesichter, Herzchen, Noten und Linien unterbringen
und schuf einen weiteren Zeichensatz namens IBM-PC, der in seinem Kern mit US-
ASCII übereinstimmt, ansonsten aber weder mit EBCDIC noch mit Latin-irgendwas.
Die internationale Normen-Organisation ISO hat mehrere 8-bit-Zeichensätze
festgelegt, von denen einer unter dem Namen Latin-1 nach ISO-8859-1 Verbreitung
gewonnen hat, vor allem in weltweiten Netzdiensten. Seine untere Hälfte ist mit US-
ASCII identisch, die obere enthält die Sonderzeichen west- und mitteleuropäischer
Sprachen. Der Aufruf:
joe@debian:~$ man iso_8859_1
zeigt die Tafel. Polnische und tschechische Sonderzeichen sind in Latin-2 nach
ISO 8859-2 enthalten. Die Zeichensätze Latin-1 bis 4 sind ebenfalls im Standard
ECMA-94 beschrieben (ECMA = European Computer Manufacturers Association).
Kyrillische Zeichen sind in ISO 8859-5, griechische in ISO 8859-7 festgelegt (lo-
gischerweise nicht als Latin-* bezeichnet; Latin-5 ist Türkisch nach ISO 8859-9).
ISO 8859-15 oder Latin-9 entspricht Latin-1 zuzüglich des Eurosymbols und weite-
rer Kleinigkeiten.
Die Latin-Zeichensätze enthalten außer dem gewohnten Zwischenraum- oder
Leerzeichen (space) ein in Textverarbeitungen oft benötigtes Zeichen für einen Zwi-
schenraum, bei dem kein Zeilenumbruch erfolgen darf (Latin-1 Nr. 160, no-break
space). Im Satzsystem LATEX wird hierfür die Tilde verwendet, in HTML die Um-
schreibung (entity) &nbsp;. Dieses Zeichen kommt beispielsweise zwischen Zahl
und Maßeinheit oder innerhalb eines Namens vor.
Auch wenn die Ein- und Ausgabegeräte 8-bit-Zeichensätze kennen, ist noch
nicht sicher, dass man die Sonderzeichen benutzen darf. Die Programme müssen
ebenfalls mitspielen. Der hergebrachte vi-Editor, die curses-Bibliothek für Bild-
schirmfunktionen und einige Email-Programme verarbeiten nur 7-bit-Zeichen. Erst
jüngere Versionen von Linux/UNIX mit Native Language Support unterstützen 8-
bit-Zeichensätze voll. Textverarbeitende Software, die 8-bit-Zeichensätze verträgt,
wird als 8-bit-clean bezeichnet. Bei Textübertragungen zwischen Rechnern (insbe-
sondere Email) ist Misstrauen angebracht. Die Konsequenz heißt in kritischen Fällen
Beschränkung auf 7-bit-US-ASCII, das funktioniert immer und überall. Das Problem
verliert jedoch an Bedeutung.
Wenn wir das Abendland verlassen, stellen wir fest, dass es drei Gruppen von
Schriften gibt:
174 2 Linux/UNIX

• alphabetische Schriften (E: alphabetic scripts): Lateinisch, Griechisch, Kyril-


lisch, Arabisch, Hebräisch, Devanagari mit jeweils wenigen hundert Zeichen,
• Silbenschriften (E: syllabic scripts): Hiragana, Hangul, Thai, mit jeweils wenigen
tausend Zeichen,
• Begriffsschriften (E: ideographic scripts): Chinesisch, Japanisch, Koreanisch, Vi-
etnamesisch (CJKV), mit etwa 50000 Zeichen im Chinesischen.
Nicht alle Schriften werden – wie wir es gewohnt sind – von links nach rechts ge-
schrieben und gelesen. Texte, die eine Mischung aus rechts- und linksläufigen Schrif-
ten enthalten, fordern die Software heraus. Mehrere Einrichtungen bemühen sich,
diese Vielfalt unter einen Hut zu bringen:
• die International Standardization Organization (ISO), die Internationale Normen-
Organisation mit Sitz in Genf, an der auch das Deutsche Institut für Normung
(DIN) beteiligt ist, http://www.iso.org/ bzw. http://www2.din.
de/,
• die International Electrotechnical Commission (IEC), an der die Deutsche Kom-
mission Elektrotechnik Elektronik Informationstechnik im DIN + VDE beteiligt
ist, http://www.iec.ch/ bzw. http://www.dke.de/,
• das Unicode Consortium, ein Zusammenschluss führender Hersteller und Insti-
tutionen sowie von Einzelpersonen, http://www.unicode.org/,
• das World Wide Web Consortium (W3C), zu erreichen unter http://www.
w3.org/International/,
• das Internet in Form einiger Requests For Comments.
Eine große, gemeinsame Richtung ist erkennbar, wenn auch im Einzelnen die unter-
schiedlichen Bezeichnungen und Zuständigkeiten verwirren.

Tab. 2.5: Darstellung des Zeichens A in verschiedenen Standards


Standard dual dez

ASCII (7 bit) 1000001 65


ISO 8859-1 (8 bit), UTF-8 01000001 65
UTF-16, UCS-2 (16 bit) 00000000 01000001 65
UTF-32, UCS-4 (32 bit) 00000000 00000000 00000000 01000001 65

ISO und IEC haben mit der Norm ISO/IEC 10646 einen Zeichensatz (Zeichen,
Namen und Positionsnummer) festgelegt, der die Zeichen aller historischen, gegen-
wärtigen und zukünftigen Schriftsprachen der Erde berücksichtigt. Dieser Zeichen-
satz heißt Universal Character Set (UCS), ausführlich Universal Multiple Octet Co-
ded Character Set. Unabhängig von der ISO arbeitet das Unicode Consortium seit
1991 an dem gleichen Ziel und hat einen Zeichensatz namens Unicode geschaffen.
Glücklicherweise haben beide Einrichtungen zusammengefunden. Im Jahr 2003 er-
schien Unicode in Version 4, die der Norm ISO/IEC 10646:2003 folgt. Der einheitli-
che Zeichensatz reicht für mehr als eine Million Zeichen. Die Standards von ISO/IEC
2.12 Editoren 175

und Unicode unterscheiden sich in ergänzenden Abschnitten, die teilweise verschie-


dene Themen aufgreifen. Geht es nur um den Zeichensatz, bedeuten Unicode, UCS
und ISO/IEC 10646 dasselbe. In den untersten 256 Zeichen ist Unicode mit Latin-1
identisch, in den untersten 128 Zeichen folglich mit US-ASCII.
Die nächste Frage betrifft die Umsetzung der Zeichen oder ihrer Nummern in
Bits und Bytes. Nahe liegt eine Darstellung durch 2 oder 4 Bytes, wobei das höchst-
wertige Byte zuerst übertragen wird (bigendian), wenn nicht anders bestimmt (UTF
= Unicode Transformation Format):
• UCS-4 (UTF-32) verwendet eine feste Anzahl von 32 Bits (4 Bytes) und codiert
damit bis zu 232 = 4294967296 Zeichen (Positionen). Der Bedarf an Speicher-
platz ist maximal.
• UCS-2 (UTF-16) ist ein Kompromiss, der für die häufigeren Zeichen 2 Bytes
(65 536 Positionen) und für die selteneren ein Paar von UCS-2-Codes (4 Bytes)
verwendet. Von Java und MS Windows benutzt.
Die Linux/UNIX-Familie bekommt damit ein Problem. In UCS-2- oder UCS-4-
codierten Zeichenketten treten häufig Nullbytes (00000000) auf, siehe Tabelle 2.5.
Diese haben in der Programmiersprache C und damit auch in Linux/UNIX eine
besondere Bedeutung: Sie beenden eine Zeichenkette. Außerdem kennen die her-
kömmlichen Linux/UNIX-Werkzeuge nur Zeichen mit der Länge von einem Byte.
Wir brauchen eine andere Codierung des Zeichensatzes.
Die Lösung des Linux/UNIX-Problems – ausgedacht von K ENNETH T HOMP -
SON mit Unterstützung durch ROB P IKE, beide UNIX-Urgestein – besteht in UTF-8,
das 1 bis 6 Bytes verwendet und alle UCS-Zeichen codiert. Der Bedarf an Speicher-
platz ist minimal, dafür muss mehr gerechnet werden. UTF-8 codiert nach folgender
Vorschrift:
• Die US-ASCII-Zeichen Nr. 0 bis 127 (hex 00 bis 7F) bleiben, wie sie sind: ein
Byte, höchstwertiges Bit null.
• Alle Zeichen >127 werden als Folgen mehrerer Bytes codiert, wobei in jedem
Byte das höchstwertige Bit gesetzt ist. Somit tritt kein ASCII-Byte als Teil eines
Zeichens >127 auf.
• Das erste Byte einer Bytefolge, die ein Zeichen >127 darstellt, beginnt mit so
vielen Einsen, wie die Folge Bytes umfasst, gefolgt von einer Null, und liegt
damit im Bereich von 192 bis 253 (hex C0 bis FD). Die restlichen Bits tragen zur
Codierung der Positionsnummer bei.
• Die weiteren Bytes der Folge beginnen stets mit 10, die restlichen Bits tragen zur
Codierung der Positionsnummer bei. Die Bytes liegen damit im Bereich von 128
bis 191 (hex 80 bis BF).
• Die Bytes 254 und 255 (hex FE und FF) werden nicht verwendet.
• Jedes Zeichen wird durch seine kürzest mögliche Bytefolge codiert, die Codie-
rung ist umkehrbar eindeutig.
Die Folgen können bis zu sechs Bytes lang sein; die 65000 häufiger vorkommenden
Zeichen erfordern jedoch nur bis zu drei Bytes. UFT-8 ist im Web verbreitet und
176 2 Linux/UNIX

gewinnt in der Linux/UNIX-Welt an Boden. Ein Beispiel: Unser Eszett (ß) hat im
Latin-1-Zeichensatz die Nr. 223 und damit auch in UCS oder Unicode. Der Aufruf:
joe@debian:~$ unicode -d 223
liefert als Ergebnis:
U+00DF LATIN SMALL LETTER SHARP S
UTF-8: c3 9f UTF-16BE: 00df Decimal: &#223;
SS (SS)
Uppercase: U+00DF
Category: Ll (Letter, Lowercase)
Bidi: L (Left-to-Right)
was Folgendes bedeutet:
• Das Zeichen mit der hexadezimal ausgedrückten Position U+00DF (dezimal 223)
in Unicode trägt den Namen LATIN SMALL LETTER SHARP S, wird in UTF-8
durch hexadezimal c3 9f, in bigendian UTF-16 durch hexadezimal 00df darge-
stellt.
• Der zugehörige Großbuchstabe (den es nicht gibt) ist identisch mit dem Klein-
buchstaben.
• Das Zeichen fällt in die Kategorie der Kleinbuchstaben.
• Das Zeichen gehört zu den Schriften, die von links nach rechts geschrieben wer-
den.
Probieren Sie obige Eingabe mit den Nr. 167, 188, 216, 555, 1648, 4711 und 12345
aus. Die UTF-8-Darstellung des Eszetts liest sich dual:
c3 9f = 11000011 10011111 = 110 00011 10 011111
Von links gelesen ergibt die Anzahl der Einsen bis zur ersten Null die Anzahl der
zum Zeichen gehörenden Bytes, hier zwei. Vom ersten Byte sind dann die ab der
dritten Eins stehenden Stellen zu nehmen, hier 11. Vom zweiten Byte sind die bei-
den führenden Bits zu streichen, der Rest ist an die 11 vom ersten Byte anzuhängen,
sodass sich 11011111 = 223 dezimal ergibt. Bei solchen Rechnungen ist der Zahlen-
basiskonverter gbase aus dem gleichnamigen Debian-Paket hilfreich.
Wir haben nun einen globalen Zeichensatz (UCS, Unicode) samt einer Codie-
rung (UTF-8), die ins Konzept von Linux/UNIX passt. Jetzt muss noch die Softwa-
re mitspielen. Werkzeuge wie cat lesen Bytes ein und geben Bytes aus, ohne auf
ihre Bedeutung zu achten. Die brauchen nichts von UTF-8 zu verstehen. Aber über-
all dort, wo die Länge von Zeichenketten gefragt ist, müssen die Funktionen und
Programme jetzt aufpassen. Die alte Gleichheit Byte = Zeichen = Schritt auf dem
Bildschirm gilt nicht mehr. Ein Zeichen kann aus mehreren Bytes bestehen und –
bei den CJKV-Sprachen – doppelt breit sein. Bestimmte Zeichen wie selbständige
Akzente veranlassen keinen Schritt auf dem Bildschirm, haben also die Breite null.
Betroffen sind Programme wie ls, wc und die Texteditoren. Da der Benutzer keinen
Einfluss auf seine Werkzeuge hat, bleibt nur die Hoffnung, dass die Textwerkzeuge
unter Debian GNU/Linux zunehmend UTF-8 beherrschen. Auf der Webseite zum
2.12 Editoren 177

Debian-Paket vim aus etch ist von Unicode die Rede; der aktuelle Emacs murmelt
etwas von some Unicode support. Es gibt auch Editoren, die speziell für UTF-8 und
bidirektionale Schreibweise entwickelt worden sind, aber das führt hier zu weit.
Zusammenfassend noch einmal die drei in der Linux/UNIX-Welt gebräuchlichs-
ten Zeichensätze und Codierungen:
• Alt, bewährt, verbreitet, aber beschränkt in seinen Möglichkeiten: 7-bit-ASCII
nach ISO 646,
• verbreitet, aber nur für das Abendland ausreichend: ISO/IEC 8859 mit 8 Bits,
daraus für West- und Mitteleuropa ISO-8859-1, auch Latin-1 oder IBM Codepa-
ge 819 genannt.
• UCS bzw. Unicode mit der Codierung UTF-8, nach ISO/IEC 10646 und Unicode
Version 4, ein bis sechs Bytes, zukunftssicher und zunehmend unterstützt.
Wer sich eingehender mit Unicode und UTF-8 beschäftigen möchte, findet einen
Einstieg bei:
• http://www.unicode.org/Public/ sowie http://www.unicode.
org/faq/,
• RFC 3629 UTF-8, a transformation format of ISO 10646.
• B RUNO H AIBLE, The Unicode HOWTO (2001), http://www.tldp.org/
HOWTO/Unicode-HOWTO.html,
• M ARKUS K UHN, UTF-8 and Unicode FAQ for Unix/Linux, http://www.cl.
ac.uk/~mgk25/unicode.html,
• ROMAN C ZYBORRA, Unicode Transformation Formats: UTF-8 & Co., http:
//czyborra.com/utf/,
• A LAN W OOD, Unicode and Multilingual Support in HTML, Fonts, Web Brow-
sers and Other Applications, http://www.alanwood.net/unicode/,
Die Standards gibt es gegen Entgelt bei den jeweiligen Organisationen. Zu Fonts17 ,
also den Darstellungen der Zeichen auf Bildschirm oder Papier, findet sich bei TLDP
ein HOWTO Optimal Use of Fonts on Linux (2007) von AVI A LKALAY und weiteren
Autoren. Die hervorragende comp.fonts FAQ von N ORMAN WALSH (1996, http:
//nwalsh.com/) ist leider am Verschwinden.

2.12.3 Die vi-Familie

Der Standard-Texteditor auf allen Linux/UNIX-Systemen ist der vi (visual editor).


Deshalb sind Grundkenntnisse des vi hilfreich, auch wenn Sie zur Arbeit einen
anderen Editor bevorzugen. Ein weiterer Vorteil des vi besteht darin, dass er kei-
ne grafische Oberfläche braucht. Sie können ihn auch dann benutzen, wenn Sie sich
über das Netz auf einem anderen System angemeldet haben oder wenn Sie die Konfi-
guration Ihrer grafischen Oberfläche reparieren müssen. Der Original-vi steht unter
17
Ein Font ist eine Sammlung von Schriftzeichen, ursprünglich der Inhalt eines Setzkas-
tens, allenfalls noch eine Gemeinde im Kanton Fribourg (http://www.font.ch/). Ein
Fonds – französisch auszusprechen – hat etwas mit Geld zu tun. Einen Fond – ebenfalls fran-
zösischen Ursprungs – gibt es im Auto, auf der Bühne und in der Küche.
178 2 Linux/UNIX

Debian nicht zur Verfügung, dafür aber mehrere vi-ähnliche Editoren wie vim (vi
improved) oder nvi (new vi). Diese bieten zusätzliche Eigenschaften, die dem ur-
sprünglichen vi fehlen. Sie verstehen jedoch alle die im Folgenden gezeigten Kom-
mandos. Welche vi-Variante nach Eingabe des Kommandos vi tatsächlich aufge-
rufen wird, wird mit dem Alternativen-System festgelegt. Unter etch für vi vorge-
geben ist /usr/bin/nvi.
Im Abschnitt 2.8.8 Verschieben und Umbenennen auf Seite 138 hatten wir ein
Unterverzeichnis texte angelegt und eine Textdatei namens GPL-Komm dorthin
verschoben. Wir wechseln in das Unterverzeichnis und geben folgendes Kommando
ein:
joe@debian:~/texte$ vi GPL-Komm
Achten Sie auf Groß- und Kleinschreibung und benutzen Sie so bald wie möglich die
<tab>-Taste zwecks Vervollständigung der Wörter. Dann probieren wir verschiede-
ne Editierkommandos aus.

Navigation im Text
Sie sehen nun den Inhalt der Datei auf dem Bildschirm. Ähnlich wie bei less soll-
ten Sie in der Lage sein, mit den Tasten <Page Up> und <Page Down> im Text
vor- und zurückzublättern. Genauso können Sie die Pfeiltasten verwenden, um die
Einfügemarke (den Cursor) im Text zu bewegen und zeilenweise vorwärts und rück-
wärts zu gehen. Weil die Tasten jedoch nicht überall zu Verfügung stehen oder nicht
richtig konfiguriert sind, dienen zur Bewegung des Cursors zusätzlich folgende Kom-
mandos:
<h> Cursor nach links
<l> Cursor nach rechts
<j> Cursor nach unten
<k> Cursor nach oben
<0> (null) Cursor zum Zeilenanfang
<$> Cursor zum Zeilenende
<7><G> Cursor zur siebten Zeile
<G> Cursor zum Textende
Während der Eingabe von Text (im Eingabemodus) können Sie keines der vorste-
henden Kommandos zur Navigation im Text benutzen, da die Tasten als normale
Texteingabe aufgefasst werden. Um die Eingabe zu beenden und in den Komman-
domodus zu wechseln, muss die Taste <esc> betätigt werden. Wenn sich Ihr vi
verrückt gebärdet, schauen Sie einmal auf die Caps-Lock-Taste. Die verleiht vielen
Tastenkommandos eine völlig andere Bedeutung. Ein Beispiel liefert die viel benutz-
te Taste <j>.

Suchen
Genauso wie in less können Sie mit dem vi durch Eingabe der Kommandofol-
ge </>muster<cr> nach bestimmten Textmustern suchen, wobei muster durch
2.12 Editoren 179

die Zeichenfolge ersetzt werden muss, nach der gesucht werden soll. Weiterhin ist
es möglich, durch die Kommandofolge </><cr> nach dem gleichen Text wie bei
der vorhergehenden Suche zu suchen. Hierzu kann – wie bei less – auch das Kom-
mando <n> benutzt werden. Das Suchmuster ist ein regulärer Ausdruck, siehe Ab-
schnitt 2.10.1 Reguläre Ausdrücke auf Seite 157.

Einfügen

Zum Einfügen von Text dienen folgende Kommandos:


<i> Einfügen von Text vor dem Cursor (insert)
<a> Einfügen von Text hinter dem Cursor (append)
<o> Erzeugen einer neuen (leeren) Zeile unterhalb der
Zeile, in der sich der Cursor befindet, und
Einfügen von Text in diese Zeile (open)
<O> Erzeugen einer neuen (leeren) Zeile oberhalb der
Zeile, in der sich der Cursor befindet, und
Einfügen von Text in diese Zeile (Open)
<esc> Beenden der Eingabe (Umschalten in Kommandomodus),
kann mehrmals hintereinander gegeben werden
Nachdem eines der oben aufgeführten Kommandos benutzt wurde, kann mit der
Tastatur Text eingegeben werden. Falsche Eingaben werden mit der Taste <bs>
(Backspace) rückgängig gemacht. Wenn Sie während der Texteingabe die Taste
<cr> drücken, wird eine neue Zeile unterhalb der aktuellen Zeile erzeugt, das heißt
ein Zeilenwechsel geschrieben. Mit <esc> beenden Sie die Eingabe und gelangen
in den Befehlsmodus.

Löschen

Zum Löschen von Text stehen folgende Kommandos zur Verfügung:


<x> Löschen des Zeichens, auf dem sich der Cursor befindet
<d><w> Löschen des Wortes, auf dessen Anfang sich der Cursor befindet
<d><d> Löschen der Zeile, auf der sich der Cursor befindet
Das Löschen funktioniert selbstverständlich nur im Kommandomodus, andern-
falls werden die Buchstaben geschrieben.

Verschieben

Mit folgenden Kommandos werden Textzeilen verschoben:


<Y> (yank) Die Zeile, auf der sich der Cursor befindet,
wird in einen Zwischenspeicher kopiert. Falls sich
vorher anderer Text im Zwischenspeicher befunden hat,
wird dieser überschrieben
180 2 Linux/UNIX

<3><Y> Dasselbe für drei Zeilen


<p> (put) Die Zeilen im Zwischenspeicher werden unterhalb
der Zeile, auf der sich der Cursor befindet, eingefügt
<P> (put) Die Zeilen im Zwischenspeicher werden
oberhalb der Zeile, auf der sich der Cursor befindet, eingefügt
Es gibt weitere Möglichkeiten, die von Zwischenspeichern Gebrauch machen.

Zurücknehmen von Änderungen

Mit dem Kommando <u> (undo) nehmen Sie die jeweils letzte Änderung zurück.
Damit ist die gesamte Auswirkung eines Kommandos gemeint. Wird beispielsweise
nach Verwendung des Kommandos <x> die Taste <u> gedrückt, so wird das vorher
gelöschte Zeichen wieder eingesetzt. Wenn nach der Eingabe von Text beispielswei-
se durch die Kommandos <i> – insert, Texteingabe – <esc> <u> ausgeführt wird,
wird der gerade eingegebene Text gelöscht.

Speichern und Verlassen

Es ist möglich, den vi zu verlassen, ohne die vorgenommenen Änderungen zu spei-


chern. Außerdem kann die Datei unter einem neuen Namen gespeichert werden, oh-
ne die alte zu überschreiben. Ferner kann man die bearbeitete Datei zwischendurch
speichern, ohne den Editor zu verlassen (dringend anzuraten). Und schließlich kann
die Datei gesichert und das Programm dann verlassen werden. Um diese Operatio-
nen durchzuführen, ist vi in einen speziellen Kommandomodus zu schalten, den
ex-Modus18 . Hierzu ist das Kommando <:> einzugeben. Genau wie den Eingabe-
modus verlassen Sie auch den ex-Modus durch Betätigung der Taste <esc>. Im
ex-Modus stehen Ihnen folgende Kommandos zur Verfügung:
w Speichern. Die Datei wird auf der Festplatte unter dem
aktuellen Namen gespeichert. Dabei wird die ursprüngliche
Version der Datei überschrieben. Der Editor wird nicht verlassen.
w Name Speichern unter. Die Datei wird auf der Festplatte unter
dem mit Name angegebenen Dateinamen gespeichert.
Hierbei kann auch ein relativer oder absoluter Pfadname
angegeben werden.
wq Speichern und verlassen. Die Datei wird auf der Festplatte
unter dem aktuellen Namen gespeichert. Danach wird vi beendet.
q Beenden. Der Editor wird beendet. Falls Änderungen an der
bearbeiteten Datei noch nicht gesichert sind, erscheint eine Warnung,
und der Editor wird nicht beendet.
q! Sofort verlassen. Der Editor wird in jedem Fall beendet.
Ungespeicherte Änderungen gehen verloren.
18
ex ist ein uralter zeilenorientierter Editor. Wie man in /etc/alternatives sieht,
verbirgt sich bei Debian hinter ex das Kommando /usr/bin/nex.
2.12 Editoren 181

Die Editoren der vi-Familie beherrschen wesentlich mehr Funktionen als oben dar-
gestellt, aber die lernt man erst bei Bedarf. Die meisten Benutzer kommen mit zwei
Dutzend Editierkommandos aus, gelegentliche Benutzer sogar mit nur einem Dut-
zend.

2.12.4 Die Emacs-Familie

Der Emacs gehört nicht zur Grundeinrichtung eines Debian-GNU/Linux-Systems,


sondern muss vom Verwalter nachgerüstet werden:
debian:~# apt-get install emacs21
Das Paket belegt nach dem Auspacken rund 50 MB auf der Platte. Um den Emacs
aufzurufen, gibt man
joe@debian:~$ emacs
ein, gegebenenfalls mit Dateinamen dahinter. Nach ein paar Sekunden sollte sich ein
Fenster öffnen - mit dem Schnellstart ist das bei Emacs so eine Sache, denn übli-
cherweise ruft man ihn am Anfang einer Sitzung auf und schließt ihn erst wieder,
wenn man sich ausloggt. Falls Sie mit einer grafischen Benutzeroberfläche arbeiten,
öffnet sich ein Fenster, dessen weitgehend selbsterklärende Menüs und Piktogram-
me einen schnellen Einstieg erlauben, siehe Abbildung 2.9. Andernfalls öffnet man
mit <ctrl>+<x> <ctrl>+<f> (zwei Tastenkombinationen hintereinander) eine
Datei, falls nicht schon beim Aufruf von Emacs geschehen.
Dann kann man direkt mit dem Schreiben loslegen; emacs kennt keine getrenn-
ten Kommando- und Eingabemodi wie vi. Eine neue Zeile beginnt man mit <cr>
(nach dem Cursor) oder <ctrl>+<o> (davor). Kleine Tippfehler korrigieren wir
mittels Pfeiltasten und Backspace oder <del> bzw. <entf>, ganze Zeilen las-
sen sich mit <ctrl>+<k> löschen und mit <ctrl>+<y> wieder einfügen. Bei
größeren Missgeschicken hilft <ctrl>+<x> <u>, welches das letzte Komman-
do rückgängig macht (undo). Vermissen Sie in Ihrem Text etwas, können Sie mit
<ctrl>+<s> eine Suche vorwärts und mit <ctrl>+<r> dasselbe rückwärts be-
ginnen. Schließlich drücken wir <ctrl>+<x> <ctrl>+<s> zum Speichern des
Geschriebenen und <ctrl>+<x> <ctrl>+<c>, um Emacs zu beenden. Verlässt
man Emacs, ohne vorher zurückzuschreiben, wird man gefragt, ob man nicht doch
abspeichern möchte.
Falls Sie sich in irgend einem Unterkommando verfangen – was früher oder
später vorkommt – befreien Sie sich mit <ctrl>+<g> oder im schlimmsten Fall
<esc> <esc> <esc>. Abschließend seien die recht umfangreichen Hilfsfunk-
tionen des Emacs erwähnt: Drückt man <ctrl>+<h> <a>, kann man einen Be-
griff eingeben, zu dem Emacs dann Hilfe sucht. Dabei werden Sie meistens meh-
rere Befehle zu sehen bekommen, die Sie eintippen können, wenn Sie vorher ein
<alt>+<x> eingeben. Nach ein paar Mal wird das zu langweilig, und man fragt
Emacs per <ctrl>+<h> <w>, auf welcher Taste der jeweilige Befehl zu finden
ist. Wollen Sie noch mehr lernen, zeigt Ihnen <ctrl>+<h> <t> eine Einführung
in den Umgang mit Emacs an, bei einer deutschen Installation auf Deutsch.
182 2 Linux/UNIX

Abb. 2.9: Screenshot des Texteditors GNU Emacs mit grafischer Oberfläche, überraschend
einfach zu benutzen

Editoren mit Emacs-ähnlichem Verhalten sind jove, XEmacs und Microemacs.


Insbesondere jove empfiehlt sich, wenn man nicht gleich voll einsteigen will. Man
kann sich an jeden Editor gewöhnen, nur nicht jede Woche an einen anderen.
3
X Window System (X11) und Arbeitsumgebungen

Das X Window System ist die Grundlage für Grafik unter Linux/UNIX. Das System
ist leistungsfähig, aber nicht einfach zu durchschauen. Wir lernen einige Begriffe
und Konzepte kennen.

3.1 Was ist X11?


Das X Window System (kurz X11 oder X, als Release 7 auch X11R7) stellt die
einheitliche Grundlage für grafische Benutzeroberflächen und weitere rastergrafi-
sche (bitmap-orientierte) Anwendungen unter Linux/UNIX dar. X11 ist nicht auf
die Linux/UNIX-Welt beschränkt, aber es stammt von dort und ist dort am stärksten
verbreitet. Es war wie UNIX ein großer Wurf und für die Hardware zur Zeit sei-
ner Entstehung fast zu anspruchsvoll. Heute profitieren wir von den Visionen seiner
Entwickler.
In einem wesentlichen Punkt unterscheidet X11 sich von anderen grafischen
Fenstersystemen: Es ist netzfähig (netztransparent). Unter X11 wird ein Netzpro-
tokoll – das X-Protokoll – benutzt, über das Anwendungen (X-Clients) einem X-
Server1 mitteilen, dass Fenster und andere Grafiken auf dem Bildschirm dargestellt
werden sollen. Im Gegenzug teilt der X-Server der Anwendung mit, wenn vom Be-
nutzer Aktionen (Ereignisse, events) wie Mausbewegungen oder Tastenanschläge
ausgeführt worden sind. Das X-Protokoll hat nichts mit dem Internet und seinen Pro-
tokollen (TCP/IP) zu tun. Durch die Aufteilung in Server und Clients macht es aus
Sicht des Benutzers keinen Unterschied, ob eine Anwendung auf demselben Rechner
ausgeführt wird, von dem aus sie auch benutzt wird, oder auf einem anderen Rech-
ner, der vielleicht über mehr Rechenleistung oder spezielle Software verfügt. Der
lokale Rechner übernimmt dabei lediglich die Darstellung der Fenster und die Wei-
tergabe von Benutzereingaben (Tastatur- und Mausereignissen). Er arbeitet dann als

1
Das Wort Server bezeichnet eine Software, die Dienste für andere Programme erbringt.
Oft wird das Wort auch für die Maschine gebraucht, auf der eine derartige Software läuft.
Dasselbe gilt für Clients, die von Servern Dienste verlangen.
184 3 X Window System (X11) und Arbeitsumgebungen

X-Terminal, eine Gerätegattung, die es vorübergehend in Hardware gab, bis sie von
PCs oder gleichwertigen Rechnern mit X-Servern in Software abgelöst wurde. Auch
heute noch lassen sich leistungsschwache, nicht gerade uralte PCs als X-Terminals
weiter verwenden, Stichworte Linux Terminal Server Project und Thin Client.
Das X Window System wurde am Massachusetts Institute of Technology (MIT)
zusammen mit IBM und der heute nicht mehr existierenden Firma Digital Equip-
ment Coporation im Projekt Athena entwickelt. Im Jahr 1987 erschien die Versi-
on 11, Release 1 (X11R1). Gleichzeitig wurde am MIT das X Consortium gegrün-
det, um das System zu betreuen. 1993 wurde das X Consortium als selbständige
Organisation aus dem MIT ausgegliedert und ein Jahr später das Release 6 (X11R6)
veröffentlicht, das bis 2006 aktuell blieb. 1996 schließlich löste sich das X Consor-
tium zu Gunsten der Open Software Foundation auf. Heute wird das System von
der X.Org Foundation gepflegt (http://www.x.org/ und http://x.org/).
Ende 2005 erschienen die beiden funktionsgleichen, nur unterschiedlich aufgebau-
ten Releases X11R6.9 und X11R7.0. Im Februar 2007 wurde X11R7.2 freigegeben
(released). Das System wird unter einer X License im Quellcode veröffentlicht, die
keine Lizenzgebühren verlangt. Wer über eine schnelle Netzanbindung und ausrei-
chend Massenspeicher verfügt, kann sich bei X.Org das System herunterladen. Ein
deutscher Spiegel ist ftp://gwdg.de/pub/X11/x.org/. Das System besteht
im Wesentlichen aus Bibliotheken – zuunterst die Xlib, darauf der X-Toolkit Xt –
Fonts, Werkzeugen, Musteranwendungen und Dokumentation.
X11 liefert die Grundlage für grafische Anwendungen, lässt aber Einzelheiten –
das Look and Feel – offen. Es ist gesichtslos (faceless). Das war eine bewusste Ent-
scheidung, um allen Betriebssystemen die Einbindung eines X-Servers in ihr eige-
nes Look and Feel zu erlauben. Infolgedessen entwickelten sich zunächst zahlreiche
firmengebundene Gestaltungs- und Benutzungskonzepte, sehr zum Leidwesen der
Benutzer und zur Freude konkurrierender grafischer Benutzeroberflächen. Mit dem
Motif-System aus Gestaltungsregeln und dazu gehörenden Funktionen sowie dem
darauf aufsetzenden Common Desktop Environment (CDE) wurde wieder für Ein-
heit in der UNIX-Welt gesorgt. Leider sind Motif und CDE weder kostenfrei noch
offen, sodass für Linux eigene Lösungen geschaffen werden mussten. Heute wettei-
fern in der Linux-Welt zwei grafische Benutzerumgebungen miteinander: das GNU
Network Object Model Environment (GNOME), das den GIMP-Toolkit (GTK+) als
Funktionsbibliothek verwendet, und das K Desktop Environment (KDE), das auf den
Quasar-Toolkit (Qt) der norwegischen Firma Trolltech baut. Beide Umgebungen un-
terscheiden sich vom Ansatz her deutlich, lassen sich aber so konfigurieren, dass für
den Benutzer die Unterschiede fast verschwinden.
Ein Programmierer arbeitet nach Möglichkeit mit einer höheren Funktionsbiblio-
thek wie Qt oder GTK+, die auf dem X Toolkit Xt aufsetzen. Die unterste Schicht
bildet die Xlib, auf die zurückzugreifen dem Programmieren in Assembler gleicht
oder dem Bau eines Hauses, wenn der Bauherr auf einen Wald, eine Tongrube und
eine Erzmine angewiesen ist.
Die Netzfähigkeit von X11 beruht auf der Trennung von X11-Anwendungen in
einen lokal auf dem Arbeitsplatzrechner laufenden X-Server und mehrere irgendwo
laufende X-Clients. Der X-Server ist zuständig für die Darstellung auf dem Bild-
3.1 Was ist X11? 185

schirm und für die Entgegennahme von Eingaben (Tastatur, Maus). In der Regel
greift er selbst unmittelbar auf die Hardware zu und bringt infolgedessen die ent-
sprechenden Treiber für Tastatur, Maus und Grafikkarte mit. Auf einem Rechner
läuft üblicherweise nur ein X-Server, weil es eine wacklige Angelegenheit ist, wenn
mehrere Treiber gleichzeitig über ein Stück Hardware herfallen. Ein X-Server kann
mehrere Bildschirme, Tastaturen und Mäuse steuern. Die Clients sind so von Eigen-
heiten der jeweiligen Hardware weitgehend entlastet. Der Server ist auf dem Rech-
ner zuhause, vor dem der Benutzer sitzt. Das läuft der gewohnten Vorstellung von
Servern als dicken Maschinen fernab im Netz zuwider, ist aber logisch. Auf der an-
deren Seite stehen die Anwendungen, die X-Clients, die über das X-Protokoll mit
dem X-Server kommunizieren und diesen beispielsweise anweisen, Fenster auf dem
Bildschirm zu öffnen, oder von ihm die Mitteilung erhalten, dass der Benutzer eine
Taste gedrückt oder die Maus geschubst hat. Natürlich – und das ist bei Einzelsys-
temen immer der Fall – können sich X-Server und X-Clients auch auf demselben
Rechner befinden. Oft laufen sogar einige Clients lokal, andere irgendwo im Netz,
nur der Server ist an den Arbeitsplatz des Benutzers gebunden. Weiteres auf den
Manualseiten zu Xserver und xset.
Aus mehreren Gründen bemühen sich die Entwickler, den Server einfach und
schlank zu halten. Er übernimmt nur die unumgänglichen Aufgaben, alles andere
wird Clients übertragen. Zu seinen Aufgaben gehören insbesondere nicht die Fen-
sterverwaltung, das Erzeugen von Menüs, Knöpfen, Scrollbars und die Interpre-
tation von Tastatureingaben oder Mausbewegungen. Dafür sind die Anwendungen
(Clients) zuständig, allen voran der Fenster-Manager, der in Abschnitt 3.6 Fenster-
Manager auf Seite 201 besprochen wird. So gesehen ist der X-Server ein ziemlich
dummes Stück Software.
Auf PCs ist der freie X-Server XFree86 (http://www.xfree86.org/) ver-
breitet, der bei Debian in den Paketen xfree86-common und xserver-xfree86 verfüg-
bar ist. Unter etch liegt im Paket xserver-xorg eine jüngere Alternative von X.Org.
Neben XFree86 und X.Org gibt es kommerzielle X-Implementierungen, z. B. von
der Firma XIGraphics (http://www.xig.com/) oder von der Firma Metrolink
(http://www.metrolink.com/). Soll auf einem Rechner ein X-Server einge-
richtet werden, so ist dieser in Abhängigkeit von der in dem Rechner vorhandenen
Grafikkarte auszuwählen. Für den X-Server und die Grafikkarte muss ein Treiber
verfügbar sein, entweder von X.Org oder vom Hersteller der Karte. Spezielle oder
frisch auf den Markt gekommene Grafikkarten können problematisch sein. Auch bei
besonderen Eingabegeräten, die über Tastatur und Maus/Rollkugel hinausgehen, ist
die Zusammenarbeit mit dem X-Server zu klären. Grundsätzlich verfügt X11 über
eine Schnittstelle für Server-Erweiterungen (extension).
Ein Server kann sich normalerweise nicht selbst aufrufen, eine Schachtelung
(nesting) von X-Servern ist nicht zulässig. Braucht man jedoch einen Server inner-
oder unterhalb eines Servers – beispielsweise zum Untersuchen von Display- oder
Fenster-Managern – so leistet Xnest den Dienst, ein Programm, das sich zum tat-
sächlichen Server wie ein X-Client verhält, zu den in ihm gestarteten Clients wie ein
Server. Üblicherweise weist man dem Subserver ein eigenes Display zu, sodass der
Aufruf wie folgt aussehen könnte:
186 3 X Window System (X11) und Arbeitsumgebungen

Abb. 3.1: Screenshot des Sub-X-Servers Xnest mit dem vtwm-Fenster-Manager, einer
Xclock, einem GNOME-Terminal und einem aus diesem heraus gestarteten Rechenprogramm
gbase

joe@debian:~$ Xnest -ac :1 &


vorausgesetzt der tatsächliche Server arbeitet mit dem Display Nr. 0. Die Option
-ac setzt die Zugangskontrollen (access control) außer Kraft, für den Anfang der
einfachste Weg zum Erfolg. Erläuterungen (mehr als im Manual) erhält man mittels:
joe@debian:~$ Xnest -help
Anschließend startet man in einem Fenster des tatsächlichen Servers einen Terminal-
Emulator:
joe@debian:~$ DISPLAY=:1 gnome-terminal &
und kann dann in dem Emulator unter dem Subserver weitere Dinge tun, wobei die
Angabe des Displays nicht vergessen werden darf. Warnungen bezüglich fehlender
exotischer Fonts sind belanglos. Beenden des Subservers über das Menü links oben
oder den x-Button rechts oben. Abbildung 3.1 zeigt ein Beispiel. Die Screenshots
der Display-Manager von Abschnitt 3.4 Display-Manager ab Seite 195 wurden mit
folgender Kommandozeile vorbereitet:
joe@debian:~$ export XNESTSIZE=1300x900; gdmthemetester
console circles
3.2 X Font Server (xfs) 187

wobei das Kommando gdmthemetester Xnest voraussetzt.


Für viele Aufgaben stehen sowohl dem Verwalter wie dem Anwender drei Grup-
pen von Werkzeugen zur Auswahl:
• ein textbasiertes, nicht grafikfähiges Werkzeug, das geringe Ansprüche stellt,
aber nicht unbedingt die Erwartungen eines heutigen Benutzers erfüllt,
• ein grafikfähiges, auf X11, nicht aber auf bestimmten Grafikbibliotheken (GTK+,
Qt . . . ) basierendes Werkzeug,
• ein grafikfähiges, auf X11 und bestimmten höheren Grafikbibliotheken basieren-
des Werkzeug, von denen Qt und GTK+ in der Linux-Welt am weitesten verbrei-
tet sind.
Die Qt-Bibliothek (Quasar Toolkit) wird vom K Desktop Environment (KDE) be-
vorzugt, während der GIMP Toolkit (GTK+) von GNOME verwendet wird. Bei-
spielsweise ist die unter Debian verfügbare Tabellenkalkulation sc (spreadsheet cal-
culator) mit einem Textbildschirm zufrieden, ähnlich wie der Texteditor vi. Die
Tabellenkalkulation oleo ist ein X-Client, und gnumeric bzw. kspread sind
leistungsfähige Tabellenkalkulationen unter GNOME und KDE.
X11 ist ein offener Standard, der auf vielen Betriebssystemen der Linux/UNIX-
Familie und weiteren zur Verfügung steht. Daraus ergibt sich der Vorteil, dass
Anwendungen, die auf anderen Linux/UNIXen ausgeführt werden, auch von ei-
nem Debian-System aus benutzt werden können, eine Netzverbindung zwischen
den Rechnern vorausgesetzt. Darüber hinaus sind X-Server für fast alle moder-
nen Betriebssysteme erhältlich, sodass auch von einem MS-Windows-Rechner oder
Macintosh aus mit Anwendungen (Clients) gearbeitet werden kann, die auf einem
Linux/UNIX-Rechner ausgeführt werden. Beispielsweise kann ein X-Server, der auf
einem MS-Windows-Rechner oder einem Macintosh läuft, über ein Netz auf eine
Datenbank zugreifen, die auf einem Linux/UNIX-Rechner arbeitet. Dieser Weg be-
steht zusätzlich zu etwaigen Netzfähigkeiten der Datenbank selbst.

3.2 X Font Server (xfs)


X-Server brauchen zur Darstellung von Text Fonts, das heißt Beschreibungen, wie
die Textzeichen, die Glyphen2 aussehen. Liegen die Font-Dateien auf der Ma-
schine, auf welcher der X-Server läuft, ist weiter nichts zu unternehmen. Er fin-
det sie im Font Path, siehe die Konfigurationsdatei /etc/X11/XF86Config-4
oder xorg.conf. Hat man mehrere Maschinen im lokalen Netz, müssten auf je-
der die Font-Dateien eingerichtet werden, was unnötig Massenspeicherplatz kos-
tet und Pflegeaufwand mit sich bringt. Deshalb reicht es seit X11R5, wenn auf
ein oder zwei Maschinen im lokalen Netz die Fonts liegen und ein X-Font-Server

2
Der Buchstabe A oder die Ziffer 7 haben je nach Font oder Schreibgewohnheit unter-
schiedliche Formen, zu dem abstrakten Zeichen gehören mehrere Glyphen. Umgekehrt kön-
nen auch zu einem Glyph, beispielsweise H, in verschiedenen Schriften (Lateinisch, Grie-
chisch, Kyrillisch) unterschiedliche abstrakte Zeichen gehören.
188 3 X Window System (X11) und Arbeitsumgebungen

Abb. 3.2: Screenshot des Werkzeugs xfd bei der Anzeige der X11-Cursor

läuft, der alle X-Server per X Font Service Protocol bedient. Der klassische X-
Font-Server ist im Debian-Paket xfs enthalten, weitere findet man in der Abteilung
X Window System software der Paketlisten. Die Konfiguration von xfs liegt in
/usr/X11R6/lib/X11/fs/config, die zugehörige Manualseite enthält und
erklärt eine Musterkonfiguration. Eine Hilfe zum Umgang mit X-Fonts bietet:
joe@debian:~$ man 7x X
in den Abschnitten, deren Überschrift das Wort FONT enthält. Mittels:
joe@debian:~$ man -k font | less
wird eine Übersicht über Kommandos angezeigt, die sich mit Fonts befassen, nicht
alle zu X11 gehörig.
Ein X-Font-Server bedient mehrere X-Server im lokalen Netz. Umgekehrt kann
ein X-Server von mehreren X-Font-Servern Fonts beziehen, und schließlich kann
sich ein X-Font-Server an einen Kollegen wenden (Verkettung). Das beinhaltet auch,
dass häufig gebrauchte Fonts lokal gespeichert sind (um das Netz zu entlasten) und
seltener gebrauchte von einem Font-Server abgerufen werden. Ein Benutzer kann zu-
sätzlich persönliche Fonts (Griechisch, Kyrillisch, Devanagari . . . ) in einem Unter-
verzeichnis (myfonts) seines Home-Verzeichnisses speichern. Das Unterverzeich-
nis ist dem Font Path des lokalen X-Servers hinzuzufügen.
Für eine alleinstehende X11-Installation oder auf einem X-Font-Server sollten
mindestens folgende Pakete eingerichtet sein:
3.2 X Font Server (xfs) 189

• xfonts-base grundlegende bitmapped Fonts niedriger Auflösung,


• xfonts-75dpi bitmapped Fonts für Bildschirme niedriger Auflösung, unter 1024
x 768 Größe,
• xfonts-100dpi bitmapped Fonts für Bildschirme hoher Auflösung, über 1024 x
768 Größe,
• xfonts-scalable skalierbare Fonts,
• xfonts-utils einige erforderliche Werkzeuge, erst ab etch verfügbar.
Weitere Fonts und Kodierungen nach Bedarf. Auf Rechnern, auf denen diese Fonts
eingerichtet sind, können sie in der Konfigurationsdatei des X-Servers im Abschnitt
Files mit ihrem Pfad eingetragen werden.

Abb. 3.3: Screenshot des X11-Font-Editors xmbdfed

Die Namen der X-Fonts sind länglich und geben Auskunft über mehrere Eigen-
schaften der Fonts. Zerpflücken wir eine Zeile aus der Datei /etc/X11/fonts/
100dpi/xfonts-100dpi.alias, die kurze Aliasnamen für einige ausführli-
che Fontnamen enthält:
• lucidasanstyperwriter-24 der Aliasname, wie er in X-Ressourcen ver-
wendet werden kann. Es folgt der ausführliche Name mit Bindestrichen als
Trennzeichen zwischen den Teilen.
• b&h Hersteller (Inhaber des Urheberrechts, Warenzeichens oder Patents) des
Fonts, hier C HARLES B IGELOW und K RIS H OLMES, USA.
190 3 X Window System (X11) und Arbeitsumgebungen

• lucidatypewriter Schriftfamilie, hier eine Schreibmaschinenschrift aus


dem Geschlechte Lucida.
• medium Schriftstärke, hier mittel im Gegensatz zu fett (bold).
• r Neigung, hier r wie roman im Gegensatz zu i wie italic (kursiv) oder o wie
oblique (geneigt, schräg).
• normal Laufweite, hier normal im Gegensatz zu condensed (eng).
• sans eine Stilangabe, hier sans für sans serif, ohne Serifen, meist leer gelassen.
• 34 Gesamtzahl der Pixel je Zeichen.
• 240 Zeichengröße in zehntel Punkten.
• 100 horizontale Auflösung in Dots per Inch (dpi).
• 100 vertikale Auflösung in dpi.
• m Schrittweite, hier m für monospaced (konstant, dicktengleich), im Gegensatz
zu p für proportional oder c für character cell.
• 200 durchschnittliche Zeichenbreite in zehntel Pixeln. Beispielsweise ist bei
gleicher Zeichengröße die New Century Schoolbook breiter als die Times, et-
wa 10 %.
• iso8859-1 Organisation oder Norm, die den Zeichensatz definiert, und Zei-
chensatz, hier ISO 8859-1 (Latin-1), im Gegensatz zu ISO-10646-1 oder adobe-
fontspecific (Cursor-Fonts).
In ausführlichen Fontangaben dürfen Stern und Fragezeichen als Joker mit derselben
Bedeutung wie in Dateinamen verwendet werden. Der Aufruf:
joe@debian:~$ xfd -fn lucidasans-bolditalic-12
zeigt alle Zeichen des als Argument übergebenen Fonts in Form einer Tafel an.
Im Beispiel wurde ein kurzer Aliasname aus /usr/X11R6/lib/X11/fonts/
100dpi/fonts.alias gewählt. Die von X11 zur Verfügung gestellten Cursor
bilden ebenfalls einen Font, den man sich anzeigen lassen kann:
joe@debian:~$ xfd -center -fn cursor
siehe Abbildung 3.2. Darüber hinaus steht es Anwendungen frei, eigene Cursor zu
definieren. Zum Erzeugen oder Ändern von Fonts verwendet man einen Font-Editor
wie xmbdfed. Abbildung 3.3 zeigt die beiden Fenster des Werkzeugs, links die
Übersicht über den Font, rechts das Arbeitsfenster zum Bearbeiten einzelner Gly-
phen.
Fonts liegen als Rasterfonts (Bitmaps) oder Vektorfonts vor. Rasterfonts werden
von Bildschirmen oder Druckern unmittelbar verarbeitet, lassen sich jedoch nicht
gut skalieren. Vektorfonts lassen sich gut skalieren, müssen aber zur Wiedergabe
im Ausgabegerät oder kurz davor in Bitmaps umgewandelt (gerastert) werden. Das
Problem tritt bei jeder Art von Grafik auf.
Ferner unterscheidet man Fonts mit fester Zeichenbreite (dicktengleich, mo-
nospaced, fixed-width) wie auf alten Schreibmaschinen gebräuchlich – bekannte
Vertreter sind Courier und Lucidatypewriter – und Proportionalfonts, in denen je-
des Zeichen nur so viel Breite einnimmt, wie es braucht, ein i also weniger als ein
M. Bekannte Proportionalfonts oder -fontfamilien sind Times, Helvetica und New
3.2 X Font Server (xfs) 191

Abb. 3.4: Screenshot des GUI-Frontends dfontmgr zum Debian Font Manager (Defoma)

Century Schoolbook. In gewöhnlichem Text sehen Proportionalfonts besser aus, in


Tabellen und im Quellcode von Programmen haben Fonts fester Zeichenbreite Vor-
teile. Es gibt auch speziell für die Bildschirmwiedergabe entwickelte Fonts, in denen
jedes Zeichen eine bestimmte Punktmatrix (6x13 oder anders) ausfüllt.
Ein X-Server bringt einige Fonts mit, die in Unterverzeichnissen von /usr/
lib/X11/fonts abgelegt sind:
• 100dpi Fonts mit einer Auflösung von 100 Punkten pro Zoll,
• 75dpi Fonts mit einer Auflösung von 75 Punkten pro Zoll,
• misc verschiedene Fonts fester Zeichenbreite, Cursor etc.,
• Speedo Outline-Fonts von Bitstream (http://www.bitstream.com/),
• Type1 Type-1-Fonts, großenteils Symlinks auf Fonts im Verzeichnis /usr/
share/fonts/type1/gsfonts.
Darüber hinaus lassen sich Fonts nachrüsten, teils von Debian, teils aus anderen frei-
en oder kommerziellen Quellen.3 Die beiden wichtigsten Vektorfont-Formate sind
True Type (TT), hauptsächlich auf Macintoshs und unter MS Windows zu finden,
und das von Adobe stammende PostScript Type 1 Format (PS1), das auch von X11
dargestellt werden kann und daher unter Linux/UNIX verbreitet ist. True Type war
die Antwort von Apple und Microsoft auf Adobe. Im Jahr 1996 rauften sich Ad-

3
Fonts kommen mit vielen Programmen mit. Einen Überblick verschafft locate font.
192 3 X Window System (X11) und Arbeitsumgebungen

obe und Microsoft zusammen und schufen das Open Type Format als einheitliche
Verpackung von PostScript- und True-Type-Fonts.
X11 hat ursprünglich nichts mit der Druckausgabe zu tun. Die Tatsache, dass ein
Font unter X11 verfügbar ist, bedeutet noch nicht, dass er auch auf Papier gedruckt
werden kann. Einen gemeinsamen Nenner von X11 und der Druckerwelt stellt das
oben erwähnte Type 1 Format dar: Fonts dieses Formates können sowohl vom X-
Server auf dem Bildschirm dargestellt als auch als Softfonts (in Dateien abgelegte
Fonts) in PostScript-Drucker geladen werden.
Der Debian Font Manager defoma aus dem gleichnamigen Paket in der Ab-
teilung Administration Utilities stellt ein über X11 hinausreichendes, allgemeines
Werkzeug dar, um Fonts zu verwalten und beliebigen Anwendungen verfügbar zu
machen. Wer es grafisch liebt, holt sich noch das Paket dfontmgr dazu, ein GUI
Frontend zu Defoma, siehe Abbildung 3.4. Wir lernen den Manager genauer in Ab-
schnitt 9.6 Debian Font Manager auf Seite 421 kennen. Ebenfalls unabhängig von
X11 sind die Werkzeuge aus dem Debian-Paket fontconfig, beispielsweise:
joe@debian:~$ fc-list | less
das alle auf dem Rechner eingerichteten Fonts bzw. Fontfamilien auflistet. Heimat-
hafen von Fontconfig ist http://freedesktop.org/. Beide Werkzeuge über-
schneiden sich in ihren Zielen. Defoma kann Fontconfig als Anwendung versorgen.
Auf einer als Font-Server vorgesehenen Maschine richten wir das Paket xfs ein.
Beim Suchen in Paketlisten mit dem Suchbegriff xfs stoßen wir auch auf das XFS-
Dateisystem, das mit dem Font-Server nichts gemein hat. Die Konfiguration des
Font-Servers liegt im Verzeichnis /etc/X11/fs. Die Datei config ist durch
Kommentar ausreichend erklärt. Falls der Font-Server im LAN, also nicht nur lo-
kal, arbeiten soll, ist die Zeile:
no-listen = tcp
durch ein Doppelkreuz auszukommentieren. Den Katalog, die Pfadliste für Fontda-
teien, kann man nachprüfen und ergänzen. Die Datei xfs-options wird in einer
eigenen Manualseite beschrieben und enthält eine wenig aufregende Option. Der
Font-Server wird wie üblich durch ein Start-Stop-Skript in /etc/init.d gestar-
tet. Er lauscht auf Port 7100, siehe /etc/services. Die Verbindung zu Prozessen
auf seiner eigenen Maschine läuft über Sockets (man 7 unix). Die Benutzung des
Font-Servers hat in diesem Fall den Vorteil, dass hinzukommende Fonts nur an einer
Stelle einzutragen sind.
Die beiden Werkzeuge mkfontscale und mkfontdir legen im Arbeitsver-
zeichnis einen Index der Fontdateien an und sollen nach dem Hinzufügen von Fonts
von Root in dem betroffenen Verzeichnis mit den Fontdateien in der genannten Rei-
henfolge aufgerufen werden. Der Font-Server greift auf den Index zu.
Auf den Clients im LAN ist in der Konfigurationsdatei /etc/X11/xorg.
conf im Abschitt Files eine der folgenden Zeilen hinzuzufügen, zweckmäßig
nach etwaigen lokalen Font-Pfaden:
FontPath "unix/:7100" # local
FontPath "tcp/server.beiuns:7100" # remote
3.3 Farben 193

Es dürfen mehrere Server eingetragen werden. Der Aufruf:


joe@debian:~$ xfsinfo -server server.beiuns:7100
auf einem beliebigen Rechner im LAN liefert einige Informationen zu dem in der
Option benannten X-Font-Server. In ähnlicher Weise listet:
joe@debian:~$ fslsfonts -server server.beiuns:7100 |
less
die vom Font-Server bereit gestellten Fonts auf.

3.3 Farben

Farbe ist heute in der Computerey selbstverständlich. X11 bringt ein leistungsfähiges
Farbenmanagement mit. Intern stellt X11 Farben durch drei 16-Bit-Werte für Rot,
Grün und Blau nach dem RGB-Farbmodell dar. Der Aufruf:
joe@debian:~$ showrgb | less
zeigt die verfügbaren Zahlentripel in dezimaler Notation (000 bis 255) samt den zu-
gehörigen englischen Bezeichnungen. Beispielsweise bedeutet 0 0 0 naheliegender-
weise schwarz, 255 255 255 weiß und 65 105 225 königsblau (royal blue). Die beiden
Werkzeuge xcolors und xcolorsel geben zusätzlich Farbmuster aus, siehe Ab-
bildung 3.5. Der Farbmischer xcolmix oder der Farbeditor xcoloredit (nicht
bei Debian, sondern bei FreeBSD) erlaubt, eigene Farben anzurühren oder einfach
nur mit den drei Grundfarben zu spielen, um sich eine Anschauung von der additiven
Farbmischung zu verschaffen.
Der Benutzer kann beim Aufruf einer Anwendung die Farben als Option in Wor-
ten oder in hexadezimalen Zahlen mitgeben:
joe@debian:~$ xclock -background blue
joe@debian:~$ xclock -background rgb:0/0/ffff
Die Farbnuancen, die tatsächlich auf dem Bildschirm oder auf dem Papier zu sehen
sind, hängen von der jeweiligen Hardware ab. Beispielsweise lassen sich manche
Bildschirme auf einen wärmeren oder kälteren Farbton einstellen, gekennzeichnet
durch eine Farbtemperatur. Man könnte an den RGB-Werten drehen, Erfolg setzt
aber Erfahrung voraus.
Das X Colour Management System (Xcms) ermöglicht, Farben in einer vom
Ausgabegerät unabhängigen Weise zu spezifizieren. Dazu macht es Gebrauch von
dem Normfarbsystem der Commission Internationale d’Eclairage (CIE, http:
//www.cie.co.at/). Eine Arbeitsgruppe der CIE befasst sich eigens mit der
Bildverarbeitung auf EDV-Anlagen. Einführungen in das Farbmanagement findet
194 3 X Window System (X11) und Arbeitsumgebungen

Abb. 3.5: Screenshot des Werkzeugs xcolors, das die X11-Farben anzeigt, Bildschirmaus-
schnitt, auf dem Schirm farbig

man durch Eingabe von cie farbstandard in eine Suchmaschine oder unter ande-
rem auf http://www.heidelberg.com/ im Downloadbereich4 . Die deutsche
Wikipedia erläutert unter dem Begriff Lab-Farbraum einige Zusammenhänge.
Am X-Server ändert sich durch das Farbmanagement nichts, er empfängt RGB-
Werte und stellt sie unverändert dar. Die Clients arbeiten mit geräteunabhängigen
Xcms-Farbwerten, die von Funktionen aus der Xlib mit Hilfe von individuell anzu-
fertigenden Eichkurven (Kalibrierung) in RGB-Werte umgerechnet werden. Einige
Hersteller von Ausgabegeräten liefern Eichtabellen mit. Das Problem besteht nicht
nur darin, dass verschiedene Ausgabegeräte Farbangaben verschieden interpretieren,
sondern auch darin, dass die Geräte innerhalb des Farbraums nur unterschiedliche
Ausschnitte (Gamut) darstellen können. Ein Drucker kann gar nicht alle Farben aufs
Papier bringen, die ein Bildschirm wiedergibt, und umgekehrt. Die außerhalb der
Schnittmenge liegenden Farben sind dann bestmöglich anzunähern (Gamut Map-
ping). Und das unter Umständen mehrmals hintereinander in der Kette vom Scanner
bis zur Druckmaschine.
Früher war Grafikspeicher knapp. Da ein Bild selten alle mit 8, 16 oder 24 Bits
benennbaren Farben benötigt, hat man die von einer Anwendung verlangten Far-
ben in einer vergleichsweise kleinen Colormap abgelegt und sich im Grafikspeicher
4
Die Website enthält auch ein nützliches, herunterladbares Glossar zu Begriffen aus dem
Druckwesen.
3.4 Display-Manager 195

auf Nummern aus der Colormap bezogen. Wenn auch die Speicherkapazität heute
kein Problem mehr ist, so werden Colormaps doch weiterhin verwendet, da sie einen
schnellen Wechsel der Farben einer Darstellung durch Austausch der Colormap er-
möglichen, was weit weniger Aufwand erfordert, als jedes Pixel neu zu färben. Mit-
tels des Aufrufs:
joe@debian:~$ xdpyinfo | less
erfährt ein Benutzer allerlei über sein Display und dessen Screens, darunter die Farb-
tiefe (z. B. depth = 16 planes, das heißt 16 Bit pro Pixel) und die Default
Colormap (0x20). Geht es nur um die Eigenschaften eines Fensters, reichen das
Kommando:
joe@debian:~$ xwininfo
und ein Klick in das betroffene Fenster. Genauso arbeitet das Kommando xprop,
nur ist das Ergebnis schwieriger zu verstehen. Da eine Colormap an eine Anwen-
dung und diese an ein Fenster gebunden ist, gehört die Verwaltung der Colormaps
zu den Aufgaben des Fenster-Managers. Das Werkzeug xstdcmap aus dem Paket
xbase-clients erlaubt dem Benutzer, eine eigene Standard-Colormap zu definieren,
und sollte aus einem Startskript wie $HOME/.bashrc aufgerufen werden.
Eine unnötig große Farbtiefe kostet Speicher und Rechenzeit. Mit 16 Bits lassen
sich 65.536 Farben kennzeichnen, das reicht für viele Anwendungen. Ein geübtes
menschliches Auge unterscheidet etwa eine Million Farbtöne.

3.4 Display-Manager

Bei den Login-, Anmelde- oder Display-Managern, gelegentlich auch als Desktop-
Manager bezeichnet, handelt es sich um Programme, die beim Systemstart aufge-
rufen werden, bevor sich Benutzer an dem System anmelden. Deshalb gibt es auch
keine persönlichen Einstellungen, nur systemweite, im Gegensatz etwa zu der Situa-
tion bei den Fenster-Managern. Display-Manager starten den X-Server und stellen
mit seiner Hilfe ein Fenster dar, das die Anmeldung an das System erlaubt. Nach er-
folgreicher Anmeldung starten sie meist einen Sitzungs-Manager oder einen Fenster-
Manager, siehe die nächsten Abschnitte. Ein Display-Manager und die von ihm gest-
arteten X-Server überleben eine Sitzung und stehen nach deren Ende für die nächste
Anmeldung bereit. Beim Einrichten eines zweiten oder dritten Display-Managers
wird man gefragt, welcher die Vorgabe sein soll.
Sind mehrere Display-Manager auf einer Maschine eingerichtet, legt die Datei
/etc/X11/default-display-manager fest, welcher gestartet wird. Dort
steht der Pfad zum Manager, beispielsweise /usr/bin/X11/xdm, und zwar ge-
nau in der Form, wie er in den Start-Stop-Skripten in /etc/init.d verwendet
wird. Voraussetzung ist ferner, dass im Verzeichnis /etc/init.d ein zugehöriges
Start-Stop-Skript zu finden und in die Runlevel-Verzeichnisse /etc/rc*.d sym-
bolisch verlinkt ist.
196 3 X Window System (X11) und Arbeitsumgebungen

Ein Display-Manager erübrigt die Anmeldung an der Textkonsole. Das System


schaltet nach seinem Start sofort in den grafischen Modus, in dem sich Benutzer an-
melden. Andernfalls müsste sich ein Benutzer zuerst auf einer Textkonsole anmelden
und dann von Hand oder aus einem Startskript den X-Server starten. Darüber hin-
aus ermöglicht das X Display Manager Control Protocol (XDMCP) die Verwendung
eines Display-Managers, der auf einem anderen Rechner läuft, wodurch auf einem
Arbeitsplatzrechner lediglich ein X-Server benötigt wird und die Benutzerauthen-
tifizierung sowie alle Anwendungen inklusive Fenster-Manager auf einem anderen
Rechner ausgeführt werden können. Diese Konstellation ist heute selten; sie war in
Verbindung mit einfachen X-Terminals an einem zentralen Rechner sinnvoll.

Abb. 3.6: Screenshot eines grafischen Anmeldebildschirms (greeter) des GNOME Display
Managers. Will man selbst Themen schreiben, nimmt man zweckmäßig ein vorhandenes The-
ma als Vorlage und modifiziert die Dateien.

Die Konfiguration der gebräuchlichsten Display-Manager steht in den Verzeich-


nissen:
• /etc/X11/xdm für den X11 Display-Manager xdm,
• /etc/gdm für den GNOME Display-Manager gdm und
• /etc/kde3/kdm für den KDE Display-Manager kdm.
Der kdm wurde aus dem xdm entwickelt, während der gdm eine eigenständige Züch-
tung ist und stärker vom xdm abweicht. Die Textdateien lassen sich mit einem Text-
editor ändern, zusätzlich über Menüpunkte wie Anwendungen -> Debian -> Apps
3.4 Display-Manager 197

-> System -> GDM Setup oder vom Schirm des Display-Managers aus über einen
Punkt wie Aktionen -> Anmeldemanager konfigurieren. Vor der Anmeldung kann ein
gewöhnlicher Benutzer die Sprache und die Sitzungsart (Fenster-Manager) bestim-
men, soweit eingerichtet. Sucht er sich einen nicht verfügbaren Fenster-Manager aus,
hängt die Anmeldung, und ein Gang zum Reset-Knopf wird fällig.
In einer Konfigurationsdatei wie /etc/gdm/gdm.conf geht es vor allem um
folgende Einstellungen:
• Soll der Manager als Dämon leben?
• Soll Root sich einloggen dürfen oder muss er/sie den Umweg über das Konto
eines gewöhnlichen Benutzers wie joe nehmen?
• Welches Aussehen (Thema, Background, Wallpaper) soll der Anmeldeschirm
zeigen?
• Welche Nachricht soll der Schirm zur Begrüßung zeigen?
• Soll eine Anmeldung aus der Ferne zugelassen werden (unabhängig von
slogin)?
• Ausführlichkeit der Meldungen zwecks Fehlersuche (Debugging).
• Einige Möglichkeiten, den Anmeldeschirm für behinderte Benutzer anzupassen
(Schriften, Farben, Klänge).
• Sollen einige Benutzer (nobody) unabhängig von /etc/passwd von einer
Anmeldung ausgeschlossen werden?
Die Einstellungen anderer Display-Manager sind im Prinzip ähnlich, nur anders auf
die Dateien im Konfigurationsverzeichnis verteilt. Hilfe bieten die Kommentare in
den Dateien sowie die Manualseiten zu xdm, kdm und gdm.
Das Aussehen des Display-Managers auf dem Bildschirm wird durch so
genannte Themen bestimmt. Bei Debian bringt der GNOME Display-Manager
mehrere davon mit. Der von gdm zu verwendende Begrüßungsbildschirm wird
in der Datei /etc/gdm/gdm.conf festgelegt, mittels gdmsetup oder eines
Texteditors zu bearbeiten. Der Benutzer kann auf dem Anmeldebildschirm un-
ter dem Menüpunkt Thema eines auswählen. Weitere wählt der Verwalter un-
ter dem Menüpunkt Anwendungen -> Systemwerkzeuge -> Einrichtung des An-
meldebildschirms -> Begrüßer aus. Schließlich lassen sich von http://art.
gnome.org/themes/gdm-greeter/, http://www.gnome-look.org/
oder http://debblue.debian.net/ zahlreiche phantasievolle Begrüßungs-
bildschirme als Tarball herunterladen und vom Verwalter in /usr/share/gdm/
themes einrichten. Alle Dateien in den Themenverzeichnissen brauchen die Zu-
griffsrechte 644. Anschließend ist der Anmeldebildschirm neu zu konfigurieren
(gdmsetup). Eventuell sind in der Datei /etc/gdm/gdm.conf einige Zeilen
zu editieren. Insbesondere darf die Zeile:
GraphicalThemes=......
nicht auskommentiert sein. Falls die Schriften zu klein erscheinen, kann man ver-
suchen, die Fontgrößen in der xml-Datei eines Themas anzuheben, beispielswei-
se von 12 auf 14 oder 16 Punkte. Das Ergebnis lässt sich mit dem Werkzeug
gdmthemetester begutachten. Es setzt Xnest voraus, siehe Abschnitt 3.1 Was
198 3 X Window System (X11) und Arbeitsumgebungen

ist X11? auf Seite 183. Ein Shellskript zum zufälligen Wechseln des Begrüßungs-
bildschirms zeigt Quelle 3.1 . Es setzt voraus, dass sich in dem Themen-Verzeichnis
ausschließlich Themen und nicht etwa Tarbälle oder andere Dateien befinden. Das
Skript könnte täglich im Namen von Root als Cronjob ausgeführt werden. Auf
nicht durchlaufenden Rechnern schreibt man es als Startskript in das Verzeichnis
/etc/init.d und ruft es per Symlink in /etc/rc2.d auf, bevor gdm gestartet
wird. Ein anderer Weg ist, in der Datei gdm.conf immer dasselbe Thema auf-
zurufen, das jedoch einen Symlink auf wechselnde Themen darstellt. Hierzu ist
in dem Shellskript der sed-Aufruf durch rm und ln -s zu ersetzen, was einfa-
cher zu verstehen ist. Eine Anleitung zum Schreiben eigener Themes findet sich
auf http://www.gnome.org/projects/gdm/docs/2.14./gdm.html.
Der Austausch des Hintergrundes eines vorhandenen Themas – oft ein jpg-Foto – ist
einfach, ansonsten sind XML-Kenntnisse gefragt.

#!/bin/bash
# Skript, das das gdm-Thema zufaellig wechselt
# Backup von gdm.conf anlegen: gdm.conf.original
# Verzeichnis themes darf nur Themen enthalten

logger -s "Changing GDM-Theme (randomgdmtheme)"

if [ ‘/usr/bin/whoami‘ == "root" ]; then


DAT=/etc/gdm/gdm.conf
DIR=/usr/share/gdm/themes
THS=‘/bin/ls -1 "$DIR"‘
N=‘echo $THS | /usr/bin/wc -w‘
((N=RANDOM%N+1))

/bin/cp $DAT $DAT.old

# sed-Aufruf in einer Zeile:


/bin/sed
s/^GraphicalThemes=.*/GraphicalThemes=‘echo $THS |
/usr/bin/cut -d ’ ’ -f $N‘/ $DAT.old > $DAT
fi
Quelle 3.1 : Shellskript randomgdmtheme.sh zum zufälligen Wechseln der Themen des
GNOME Display-Managers. Die Fähigkeit ist mittlerweile im GDM eingebaut.

Der KDE-Display-Manager kdm und der GNOME-Display-Manager gdm ge-


statten dem Benutzer, vor der Anmeldung unter dem Menüpunkt Menü -> Sitzungs-
art beziehungsweise Sitzung zwischen verschiedenen Sitzungsarten und Fenster-
Managern zu wählen, eine angenehme Eigenschaft, wenn an einem Terminal wech-
selnde Benutzer mit unterschiedlichen Vorlieben arbeiten. Voraussetzung ist, dass
der gewünschte Fenster-Manager eingerichtet ist.
Wenn Sie X11 mit einem Display-Manager starten, erfolgt die Benutzeranmel-
dung nicht wie früher üblich an der Konsole mit dem Programm login, sondern
über den Display-Manager. Der startet keine Shell, sondern eine X-Sitzung, sodass
3.4 Display-Manager 199

Abb. 3.7: Screenshot eines grafischen Anmeldebildschirms (greeter) des GNOME Display
Managers, heruntergeladen von www.gnome-look.org/

Umgebungsvariable (siehe Abschnitt 2.7.5 Variable auf Seite 75), die normalerweise
durch die Login-Shell gesetzt werden, nicht vorhanden sind. Die Folge ist, dass über
Umgebungsvariablen vorgenommene Einstellungen verloren gehen.
Allerdings steht hier ein ähnlicher Mechanismus wie bei der Shell zur Verfügung.
Während des Starts einer X-Sitzung werden die Anweisungen ausgeführt, die sich in
der Datei /etc/environment befinden. In der Datei dürfen alle üblichen Shell-
Anweisungen vorkommen. Wenn Sie beispielsweise deutsche Spracheinstellungen
auch unter X11 verwenden möchten, schreiben Sie folgende Anweisung in die Datei:
export LANG="de_DE.UTF-8"
Die export-Anweisung ist möglicherweise überflüssig, schadet aber nicht.
Wenn ein Display-Manager aktiv ist oder Sie den X-Server von Hand mit-
tels startx gestartet haben, können Sie bei Bedarf weiterhin im Textmodus
arbeiten. Durch Betätigen der Tastenkombinationen <ctrl>+<alt>+<F1> bis
<ctrl>+<alt>+<F6> schalten Sie zu einer virtuellen Textkonsole und mittels
<alt>+<F7> zurück zur X11-Konsole. wie in Abschnitt 2.5 Virtuelle Konsolen
auf Seite 39 erläutert.
Der GNOME Display Manager gdm ermöglicht, aus einer Sitzung heraus durch
Anklicken des Menüpunkts Anwendungen -> Debian -> Anwendungen -> System
-> GDM flexiserver eine weitere Sitzung zu starten. Die ursprüngliche Sitzung wird
gesperrt wie bei längerer Untätigkeit, die Ausgabe auf die achte virtuelle Konsole
umgeschaltet und dort ein Anmeldebildschirm gestartet. Mit der Tastenkombination
200 3 X Window System (X11) und Arbeitsumgebungen

<ctrl>+<alt>+<F7> gelangt man auf die ursprüngliche, gewohnte Konsole mit


der Sperre zurück und kann sie entsperren. Sieht man sich die Prozesse an:
joe@debian:~$ ps -ef | grep gdm
bemerkt man, dass der ursprüngliche gdm ein zweites Kind bekommen hat. Beide
Kinder haben jeweils einen X-Server mit unterschiedlicher Displaynummer gestar-
tet. Eine anderer Weg ist das Schachteln (nesting) der X-Server. Startet man aus der
Kommandozeile einen weiteren Flexiserver:
joe@debian:~$ gdmflexiserver
wird dieser zum dritten Kind des ursprünglichen gdm, bekommt die neunte virtuelle
Konsole zugewiesen und startet den dritten X-Server auf der Maschine. Beenden der
Flexiserver durch Abmelden. Auf diese Weise kann ein Benutzer gleichzeitig unter
verschiedenen Konten mit X11-Unterstützung auf einer Maschine angemeldet sein.

3.5 Sitzungs-Manager (Session Manager)

Der Display-Manager startet einen Sitzungs-Manager (session manager), dessen


Aufgabe es ist, die zu einer Sitzung gehörenden X-Clients aufzurufen. Ein Sitzungs-
Manager lebt und stirbt mit der Sitzung. Unter GNOME ist der X-Session-
Manager in /etc/alternatives auf /usr/bin/gnome-session fest-
gelegt. Der GNOME-Manager arbeitet entweder als Vorgabe die Datei /usr/
share/gnome/default.session ab oder die benutzereigene Datei $HOME/
.gnome2/session. Diese wird beim Beenden einer Sitzung automatisch ange-
legt, falls der Benutzer im Logout-Fenster die Option Aktuelle Einstellungen spei-
chern anwählt. Die unmittelbar vor dem Abmelden vorliegenden Einstellungen von
Arbeitsflächen, Fenstern und Anwendungen werden dann beim nächsten Anmelden
wieder hergestellt. Kleinere Pannen kommen vor. Keinesfalls soll man sich darauf
verlassen, dass sich Editoren samt editierten Dateien nach dem Anmelden genau in
dem Zustand befinden, in dem sie sich vor der Abmeldung befanden. Das heißt,
vor dem Abmelden alle Ergebnisse ausdrücklich abspeichern. Da man selten mor-
gens die Arbeit genau dort fortsetzt, wo man sie am Abend zuvor beendet hat, ist es
zweckmäßig, vor dem Abspeichern der aktuellen Einstellungen eine stets brauchba-
re Auswahl von Arbeitsflächen etc. herzustellen. Ich beginne und beschließe zwar
oft mein Tagewerk mit dem Lesen der Email, aber nicht immer. Es wäre daher nicht
zweckmäßig, ein Emailprogramm wie mutt automatisch starten zu lassen. Dage-
gen laufen auf meinen beiden letzten Arbeitsflächen immer Terminal-Emulatoren
(gnome-terminal). Falls beim Abmelden die Möglichkeit zum Speichern der
Sitzung nicht angeboten wird, hilft der Aufruf:
joe@debian:~$ gnome-session-save
irgendwann, wenn die Sitzung (alle Arbeitsflächen) ihren Wunschzustand aufweist.
Nicht alle Anwendungen unterstützen jedoch den Start durch den Session-Manager.
Mit GNOME-Terminal gab es keine Probleme, der GNOME Web-Browser Epiphany
3.6 Fenster-Manager (Window Manager) 201

zeigte sich widerborstig. Die Datei $HOME/.gnome2/session darf man getrost


löschen, falls man mit ihr unzufrieden ist. Der Sitzungs-Manager schreibt einige
Hinweise und Fehlermeldungen in die Datei $HOME/.xsession-errors.
Unter GNOME startet in der Default-Sitzung als erstes gnome-smproxy. Der
Proxy schiebt sich vor den Sitzungs-Manager, gestattet den Anwendungen sich zu
initialisieren und verbindet sie erst bei Bedarf mit dem Sitzungs-Manager. Als zwei-
tes Programm erscheint gnome-wm auf der Bildfläche, ein Skript, das den aus-
gewählten Fenster-Manager startet. Dann folgen weitere Anwendungen, die in der
Session-Beschreibung nachzulesen sind. In einer benutzerdefinierten Sitzung wer-
den sofort die zur Sitzung gehörenden Anwendungen gestartet, dann der Proxy.
Unter anderen Display- und Sitzungs-Managern lauten die Verzeichnis- und Da-
teinamen zum Teil anders, der Mechanismus bleibt gleich. X11 selbst bringt den
Display-Manager xdm sowie den Session-Manager xsm, Paket xbase-clients, mit.
Man kommt sogar ohne Sitzungs-Manager aus, da einige Fenster-Manager einen
Teil der Aufgaben zur anfänglichen Gestaltung einer Sitzung beherrschen. Sitzungs-
Manager sind eine jüngere Erscheinung in X11.
Die Datei $HOME/.xsession ist ein Skript, das weitgehend beliebige Kom-
mandos enthalten darf, die zu Beginn einer Sitzung ausgeführt werden. Die letzte
ausführbare Zeile muss jedoch einen Fenster-Manager aufrufen, und zwar im Vor-
dergrund (ohne &). Der Fenster-Manager – siehe nächster Abschnitt – übernimmt
dann das Kommando.

3.6 Fenster-Manager (Window Manager)

3.6.1 Fenster

Eine weitere Besonderheit von X11 besteht in der Aufgabentrennung zwischen X-


Server und Fenster-Manager (window manager): Während der X-Server nur für
die Darstellung der Fenster und ihrer Inhalte auf dem Bildschirm verantwortlich
ist, kümmert sich der Fenster-Manager um das Erscheinungsbild der Fenster. Der
Fenster-Manager ist verantwortlich für die Größe und Lage der Fenster, für einheitli-
che Rahmen und Kontrollleisten (Dekoration, Garnierung), für Fenstern zugeordne-
te Schaltflächen wie den Knöpfen zum Minimieren und Maximieren, aber auch für
das Umschalten von einem Fenster zum nächsten oder für die Verbindung von be-
stimmten Geräuschen mit Ereignissen. Darüber hinaus bieten Fenster-Manager wei-
tere Möglichkeiten wie die Darstellung von System-Menüs oder einer Taskleiste,
über die zwischen Anwendungen hin- und hergeschaltet werden kann. Der X-Server
kann diese Aufgaben nicht bewältigen, und in die eigentlichen Anwendungen lassen
sie sich auch nicht integrieren, da mehrere Anwendungen gleichzeitig Fenster auf
dem Bildschirm geöffnet haben können und sich bei jeder Änderung untereinander
verständigen müssten. Ein Fenster-Manager ist die einfachste Lösung und entspricht
auch dem Linux/UNIX-Prinzip, dass ein Programm sich um eine Aufgabe kümmern
soll, nicht um alles.
202 3 X Window System (X11) und Arbeitsumgebungen

Weil Fenster-Manager ebenfalls X-Anwendungen sind, können sie auf einem an-
deren Rechner als dem Arbeitsplatzrechner ausgeführt werden. Damit wären dann
drei Rechner im Spiel: der X-Server am Arbeitsplatz, der Fenster-Manager im Netz
und die Anwendung auf einem weiteren Rechner im Netz. Die Konstellation ist aber
ungebräuchlich.
Unter einem X-Server kann zu einem Zeitpunkt nur ein Fenster-Manager das Sa-
gen haben. Es ist jedoch möglich, verschiedene Fenster-Manager einzurichten und
nach Lust und Laune zwischen diesen zu wechseln, sogar innerhalb einer Sitzung.
Aber man gewöhnt sich meist an einen Fenster-Manager und bleibt ihm treu. In Son-
derfällen kann man mit X11 auch ohne Fenster-Manager arbeiten. Wenn man immer
nur mit einer Anwendung mit einem Fenster zu tun hat und dieses stets dieselbe Lage
und Größe aufweist, erübrigt sich die Intelligenz eines Fenster-Managers.
Während sich der Bildschirm in mehrere Fenster unterteilen lässt, die jeweils ei-
ner Anwendung zugeordnet sind, ist das bei der Tastatur nicht möglich; Es kann zu
einem Zeitpunkt immer nur ein Fenster sprich eine Anwendung Eingaben entgegen-
nehmen. Dieses Fenster ist aktiv/aktuell, es hat den Input Fokus. Genauer sagt man,
die Eingabe von Tastatur und Maus sei auf das Fenster fokussiert. Üblicherweise
nimmt ein Fenster eine andere Rahmenfarbe an, wenn es den Fokus bekommt. Es
gibt zwei Wege, einem Fenster den Fokus zuzuweisen (focus policy):
• Entweder klickt man mit einer Maustaste in das gewünschte Fenster, das den
Fokus bekommt unabhängig davon, wo sich der Cursor anschließend hinbewegt
(click-to-type, explicit focus),
• oder der Fokus folgt stets dem Cursor (pointer focus, real-estate-driven focus).
Vom Fokus zunächst unabhängig und eigens zu konfigurieren ist die Frage, wel-
ches Fenster als vorderstes gezeigt wird und damit unverdeckt ist. Oft findet sich die
Kombination von explizitem Fokus und automatischem Holen des Fensters mit dem
Fokus nach vorn (nach oben auf den Window Stack).
Der Motif Window Manager kennt beide Policies; per Default ist er auf expliziten
Fokus und automatisches Holen eingestellt. Wollen wir ihn kennen lernen, so muss
er vom Verwalter eingerichtet sein. Dann kann ein Benutzer eine Datei $HOME/
.xsession folgenden Inhalts anlegen:
xclock &
gnome-terminal &
epiphany &
mwm -xrm "Mwm*keyboardFocusPolicy : pointer"
# mwm -xrm "Mwm*keyboardFocusPolicy : explicit"
Der Display-Manager führt die Datei aus. Als letztes Programm wird der Motif Win-
dow Manager mit einer Option aufgerufen, die seine Policy auf pointer setzt. Da-
mit ist auch das automatische Holen deaktiviert, siehe Manual. Wir erhalten einen
Bildschirm, der genau drei Fenster für die drei in .xsession aufgeführten Pro-
gramme enthält, sonst nichts, siehe Abbildung 3.8. Beenden der Sitzung durch Killen
des Fenster-Managers. Bei Problemen weicht man mittels <ctrl>+<alt>+<F1>
auf eine virtuelle Textkonsole aus. Möchte man die kleinen Annehmlichkeiten eines
3.6 Fenster-Manager (Window Manager) 203

Abb. 3.8: Screenshot eines vom Motif Window Manager verwalteten Bildschirms mit drei
Anwendungen, ohne weitere Verzierungen, Der Web-Browser hat den Fokus – ersichtlich an
der Rahmenfarbe – und liegt vorn, was nicht notwendig zusammengehört. Die Annehmlich-
keiten einer Arbeitsumgebung wie Taskleiste, Menüs oder Rollbalken sind Anwendungen, die
eigens vom Session Manager gestartet werden müssen.

Environments wie GNOME oder KDE genießen, so sind die gewünschten Program-
me in besagte Datei aufzunehmen. Der Fenster-Manager muss als letzter kommen,
und zwar ohne et-Zeichen.
Bei Debian hat man die Wahl zwischen drei Dutzend Fenster-Managern, die in
der Abteilung X Window System software der Paketliste untergebracht sind. Weitere
liegen in den Abteilungen KDE und GNOME. Die Wahl des Fenster-Managers hängt
stark von den persönlichen Bedürfnissen und vor allem vom Geschmack ab. Wir kön-
nen deswegen nur empfehlen, einige Fenster-Manager einzurichten und mit ihnen zu
spielen, bis man den passenden gefunden hat. Einige Einschränkungen: Wenn Sie
die Arbeitsumgebung GNOME verwenden, sollten Sie einen GNOME-kompatiblen
Fenster-Manager verwenden. Falls Sie KDE benutzen, brauchen Sie keinen zusätz-
lichen Fenster-Manager, weil KDE einen eigenen hat. Dies bedeutet nicht, dass Sie
KDE Programme nicht auch mit einem fremden Fenster-Manager verwenden kön-
nen. Im Folgenden finden Sie eine Auswahl verbreiteter Fenster-Manager in alpha-
betischer Folge:
• afterstep Dieser Fenster-Manager empfindet das Look and Feel des Be-
triebssystems NeXTStep nach. Es handelt sich um einen besonders hübschen
204 3 X Window System (X11) und Arbeitsumgebungen

Fenster-Manager, der jedoch viele Farben braucht und deswegen bei einer Farb-
tiefe von 8 Bit nicht zu empfehlen ist.
• asclassic Eine ältere Version von afterstep.
• blackbox Ein einfacher Fenster-Manager, der sich gut für den Einsatz auf Sys-
temen mit knappen Ressourcen eignet.
• enlightenment Ein hochkonfigurierbarer Fenster-Manager mit aufwendiger
Grafik und vielen reizvollen Eigenschaften. GNOME- und KDE-kompatibel.
• fvwm Der Klassiker unter den Fenster-Managern für Linux, geschrieben 1993
von ROBERT NATION und wegen seines beispielhaften Quellcodes zur Grundla-
ge weiterer Fenster-Manager geworden, http://fvwm.org/.
• fvwm95 Eine Abart des fvwm im Look and Feel von MS Windows 95, wenns
denn sein soll.
• icewm Ein einfacher, funktionaler Fenster-Manager, der wahlweise im Look and
Feel von MS Windows, IBM-OS/2 oder Motif betrieben werden kann. Das Pro-
gramm hat eine Taskleiste, Uhr, Mailboxanzeige und anderes mehr.
• icewm-gnome Dieses Paket enthält den Fenster-Manager icewm mit integrier-
ter GNOME-Unterstützung.
• kwin Der vorgegebene Fenster-Manager aus dem KDE-Projekt.
• metacity Der per Vorgabe bei der Einrichtung verwendete, leichtgewichti-
ge Fenster-Manager zur GNOME-Desktop-Umgebung, schlicht, einfach in der
Handhabung, wenig konfigurierbar.
• mwm Der Motif Window Manager aus dem Non-free-Bereich von Debian,
Paket motif-clients. Ein schwergewichtiger Fenster-Manager, beheimatet im
OpenMotif-Projekt (http://www.motifzone.net/).
• wmaker Auch dieser Fenster-Manager orientiert sich am NeXTStep-Design. Er
lässt sich bequem konfigurieren, zeichnet sich durch hohe Geschwindigkeit aus
und bietet einige interessante Konzepte.
Normalerweise wird während des Beginns einer Sitzung das Programm
x-window-manager aufgerufen. Hierbei handelt es sich um einen symboli-
schen Link auf den tatsächlich zu startenden Window-Manager. Dieser Link wird
mit Hilfe des Alternativen-Systems (siehe Abschnitt 9.1.7 Arbeiten mit Alternativen
auf Seite 394) verwaltet. Um aus den eingerichteten Fenster-Managern systemweit
einen als Vorgabe festzulegen, gibt der Verwalter folgendes Kommando ein:
debian:~# update-alternatives - -config x-window-manager
Es erscheint ein Menü, aus dem durch Eingabe einer Zahl der gewünschte Fenster-
Manager festgelegt wird. Manche Environments halten sich offenbar nicht an die
Vorgabe, sondern bringen eigene Einstellungen mit. Einige Display-Manager ermög-
lichen die Auswahl des zu startenden Fenster-Managers bei der Anmeldung des Be-
nutzers, wodurch die Voreinstellung überschrieben wird.
Die systemweite Vorgabe kann von jedem Benutzer überschrieben werden, in-
dem eine Datei mit dem Namen $HOME/.xsession angelegt wird. Wir haben sie
bereits bei der Erläuterung des Fokus kennen gelernt. Diese Datei kann alle mög-
lichen Shell-Kommandos enthalten, also auch benutzt werden, um bestimmte Pro-
gramme zu starten oder Umgebungsvariablen zu setzen, bevor ein Fenster-Manager
3.6 Fenster-Manager (Window Manager) 205

gestartet wird. Der Fenster-Manager muss das letzte Programm sein, das aus dieser
Datei heraus gestartet wird, weil die Sitzung beendet wird, sobald die Abarbeitung
der Datei .xsession erledigt ist.
Angenommen ein Benutzer möchte ausschließlich mit dem Window-Manager
afterstep arbeiten, unabhängig davon, welcher Fenster-Manager als Systemvor-
gabe eingestellt ist. Außerdem möchte er, dass die Programme xbiff aus dem
Paket xbase-clients und xdaliclock aus dem gleichnamigen Paket automatisch
gestartet werden, sobald die X-Sitzung eröffnet wird. Dazu legt er folgende Datei
.xsession in seinem Home-Verzeichnis an:
xbiff &
xdaliclock &
afterstep
Die Programme xbiff und xdaliclock müssen im Hintergrund ausgeführt wer-
den (&-Operator), ansonsten würde die Ausführung der Datei .xsession so lan-
ge angehalten werden, bis die Programme beendet wären. Der Fenster-Manager
afterstep dagegen muss als letztes Programm und im Vordergrund gestartet wer-
den. Der Manager begleitet die ganze Sitzung.

3.6.2 Menüs

Die meisten Fenster-Manager weisen einen Mechanismus auf, mit dem sich Pro-
gramme starten lassen, ohne dass der Name des zu startenden Programms in einer
Kommandozeile eingegeben zu werden braucht. Hierbei handelt es sich um Menüs,
die mit dem Startmenü unter MS Windows oder dem Finder bei Macintosh-Systemen
vergleichbar sind. Leider sind die Methoden zur Konfiguration solcher Menüs völlig
unterschiedlich5 , sodass es eine lästige Aufgabe ist, die Menüs aller eingerichteten
Fenster-Manager in Einklang zu halten, also Menüeinträge hinzuzufügen, wenn ei-
ne Anwendung eingerichtet wurde, bzw. zu entfernen, wenn ein Programm gelöscht
wurde. Um die automatisierte Pflege der Menüs beinahe aller Fenster-Manager küm-
mern sich die in dem Paket menu enthaltenen Werkzeuge. Sie sollten dieses Paket
einrichten, um Anwendungen bequem über Menüs Ihres Fenster-Managers zu errei-
chen. Die Eingabe:
joe@debian:~$ apt-cache showpkg menu
listet im Abschnitt Reverse Depends die Kommandos auf, die von dem Paket menu
abhängen.
Jedes Paket, das Programme enthält, die über Menüs aufrufbar sein sollen, legt
dazu im Verzeichnis /usr/lib/menu eine Datei ab, in der beschrieben ist, wel-
cher Einträge den Menüs hinzugefügt werden sollen. Jeder Fenster-Manager und
jedes andere Programm, das einen Auswahlmechanismus über Menüs bereitstellt,

5
Das ist der Grund dafür, dass in den Hauptmenüs von GNOME oder KDE ein Punkt
Debian auftaucht, der viele Menüeinträge wiederholt. Die inakzeptable Alternative wäre die
Beschränkung auf einen Fenster-Manager und ein Menüsystem.
206 3 X Window System (X11) und Arbeitsumgebungen

enthält darüber hinaus ein Werkzeug, das aus den einzelnen Menüinformationen
Konfigurationsdateien für den Fenster-Manager oder das entsprechende Programm
erzeugt, durch welche die jeweilige Menüstruktur aufgebaut wird. Diese Konfigura-
tionsdateien müssen immer dann neu angelegt werden, wenn ein Paket mit Program-
men, die im Menüsystem berücksichtigt werden sollen, eingerichtet oder entfernt
wird. Aus diesem Grund rufen die Einrichtungsskripte solcher Pakete nach der Ein-
richtung oder dem Rauswurf das Programm update-menus auf, das die Menüs
aktualisiert.
Gelegentlich ist es erwünscht, dem Menüsystem eigene Einträge hinzuzufü-
gen oder vorgegebene Einträge zu überschreiben. Systemverwalter können deshalb
im Verzeichnis /etc/menu eigene Menüdefinitionen ablegen, durch die entweder
neue Menüs erzeugt oder bestehende Definitionen überschrieben werden. Darüber
hinaus können Benutzer ein Unterverzeichnis .menu in ihrem Home-Verzeichnis
anlegen und dort ebenfalls Menüdefinitionsdateien ablegen.
Jede Definition eines Menüeintrags in einer Menüdefinitionsdatei beginnt mit
einem Fragezeichen und der Zeichenkette package, hinter der sich in Klammern
der Name des Paketes befindet, zu dem der Menüeintrag gehört. Der Menüeintrag
wird nur dann erzeugt, wenn das betreffende Paket auch tatsächlich eingerichtet ist.
Für Menüeinträge, die keinem Paket zugeordnet sind, ist ein beliebiger Paketname
zu verwenden, der mit der Zeichenfolge local. beginnt. Nach dem Paketname
folgt ein Doppelpunkt, und daraufhin können verschiedenen vorgegebenen Variablen
Werte zugewiesen werden.
Wenn mehr als eine Zeile für einen Eintrag benötigt wird, sind fortzusetzende
Zeilen mit einem Backslash abzuschließen. Im Folgenden finden Sie als Beispiel
eine Menüdefinition, mit der ein Eintrag für das Programm wine erzeugt wird:
?package(local.wine):needs="x11" \
section="Apps/Editors" \
title="MS Winword" \
command="wine --language de --managed \
/dosC/Programme/MSOffice/Winword/winword.exe"
Mit local.wine als Paketbezeichnung wird hier festgelegt, dass es sich um eine
lokale Menüdefinition handelt und der Menüeintrag unabhängig von dem Vorhan-
densein irgendwelcher Pakete erzeugt werden soll. Die einzelnen Variablenbezeich-
ner haben die folgende Bedeutung:
• needs=Voraussetzung Hiermit wird angegeben, welche Voraussetzung
erfüllt sein muss, damit das Programm benutzt werden kann. Programme
für X11 können beispielsweise nicht ausgeführt werden, wenn kein X-Server
zur Verfügung steht. Ebenso können Programme für die Konsole unter X11
nicht direkt, sondern nur in einem Terminalfenster ausgeführt werden. Für
Voraussetzung kann Folgendes angegeben werden: x11 – das Programm
kann nur unter X11 ausgeführt werden; text – das Programm muss in einem
Terminalfenster oder an der Konsole ausgeführt werden; vc – das Programm
kann nur an einer virtuellen Konsole, nicht aber in einem Terminalfenster ausge-
führt werden.
3.6 Fenster-Manager (Window Manager) 207

• section="Menüname[/Untermenü ...]" Die Menüs zum Starten von


Anwendungen weisen normalerweise eine baumartige, hierarchische Struktur
auf, in der zunächst alle Programme einer Kategorie wie Spiele in einem Menü
zusammengefasst werden und sich verschiedene Unterkategorien in Untermenüs
befinden wie Denkspiele, Aktionspiele. Hiermit wird der Platz in der Menüstruk-
tur für den betreffenden Menübefehl angegeben. Menüs und Untermenüs sind
durch einen Schrägstrich voneinander zu trennen. Beispiel: Games/Action.
Informationen zur Menüstruktur finden Sie in der Manualseite zu menufile in
Abschnitt 5.
• icon="Bilddatei" Die Variable definiert, welches Bild (Icon) neben dem
betreffenden Menüeintrag angezeigt werden soll. Die Angabe ist optional. Nicht
alle Menüs können Bilder anzeigen. Für solche Menüs hat die Variable keine
Bedeutung. Icondateien sollten im XPM-Format vorliegen. Das Grafikwerkzeug
GIMP beherrscht das Format.
• title="Titel" Gibt mit Titel die Bezeichnung des Menüeintrags an.
• longtitle="Beschreibung" Gibt eine Beschreibung des Menüeintrags
an. Abhängig vom Fenster-Manager werden die Beschreibungen beispielsweise
mit Hilfe der Bubble Help als Sprachblasen angezeigt.
• command="Kommando" Gibt mit Kommando den Namen des Programms an,
das bei Auswahl des zugehörigen Menüpunkts aufgerufen wird. Programmna-
men sind mit vollem Pfad- und Dateinamen anzugeben. Optionen werden durch
Leerzeichen getrennt hinter dem Programmnamen angefügt.
Um einen Menüeintrag zu löschen, der durch ein Paket erzeugt wurde, wird in
/etc/menu oder im Verzeichnis .menu im Home-Verzeichnis des Benutzers eine
leere Menüdatei angelegt. Die Datei muss den gleichen Namen tragen wie die Datei
im Verzeichnis /usr/lib/menu, durch welche der Eintrag definiert wird.
Nachdem eine Menüdefinition hinzugefügt, verändert oder entfernt wurde, ist
das Kommando update-menus aufzurufen:
debian:~# update-menus
Darüber hinaus ist es notwendig, den Fenster-Manager neu zu starten, weil er Menü-
definitionen nur zu Beginn einliest. Wenn Sie die Arbeitsumgebungen KDE oder
GNOME verwenden, reicht es, das Panel neu zu starten. Ausloggen und wieder Ein-
loggen geht natürlich auch.
Wenn eine Menüdefinition im Verzeichnis .menu eines Benutzers verändert
wurde, ist update-menus von dem betreffenden Benutzer aufzurufen. Auch in
diesem Fall ist der Fenster-Manager neu zu starten. Mehr Informationen zu Menü-
definitionen finden Sie in der Manualseite zu menufile, zu update-menus so-
wie allgemein zum Menüsystem in der Dokumentation unterhalb des Verzeichnisses
/usr/share/doc/menu.
208 3 X Window System (X11) und Arbeitsumgebungen

3.7 Arbeitsumgebungen (Desktöppe)

3.7.1 Grundbegriffe

Arbeitsumgebungen (Desktop environment oder kurz Desktop) sind nicht Bestand-


teil von X11, sondern bauen darauf auf. Eine Arbeitsumgebung besteht aus Biblio-
theken, Daten und Programmen. Weil alle Programme einer Arbeitsumgebung die-
selben Bibliotheken verwenden, lassen sie sich ähnlich gebrauchen und bieten ein
einheitliches Erscheinungsbild (Look and Feel). Außerdem können verschiedene
Anwendungen einer Umgebung miteinander kommunizieren. Zu einer Arbeitsum-
gebung gehört in der Regel ein Dateimanager, ein Programm, mit dem die Dateien
und Verzeichnisse des Systems bildhaft als Icons dargestellt werden und sich mit der
Maus oder Rollkugel und über Menüs handhaben lassen. Dazu kommt meist ein Pro-
gramm, mit dem Anwendungen gestartet werden. Innerhalb einer Arbeitsumgebung
ist es oft möglich, eine Datei (beispielsweise Text) aus dem Dateimanager mit der
Maus auf eine Anwendung (beispielsweise ein Leseprogramm) zu ziehen und die
Datei mit der Anwendung zu öffnen. Dies erscheint manchen Benutzern einfacher
als der Weg über Menüs oder Kommandozeilen. Auch ein Fenster-Manager zählt zur
Grundausstattung eines Desktops. Eine Übersicht über X11-Desktops findet man auf
http://freedesktop.org/wiki/Desktops.
Benutzer von Debian GNU/Linux haben die Auswahl unter mehreren Arbeits-
umgebungen:
• GNU Network Object Model Environment (GNOME), http://www.
gnome.org/ und http://www.gnome-ev.de/, Teil des GNU-Projekts,
mit einer eigenen Abteilung in der Debian-Paketliste, Paketen aber auch in ande-
ren Abteilungen, verwendet die Grafikbibliothek GTK+, Vorgabe unter etch.
• K Desktop Environment (KDE), http://www.kde.org/, ebenfalls mit ei-
ner eigenen Abteilung in der Debian-Paketliste, Paketen aber auch in anderen
Abteilungen, verwendet die Quasar-Toolkit-Grafikbibliothek (Qt), stilistisch et-
was lebhafter als GNOME.
• GNUstep, http://www.gnustep.org/, entstanden aus NeXTSTEP und
daher mit Anklängen an die NeXT- und Apple-Welt.
• Cholesterol Free Desktop Environment (Xfce), http://www.xfe.org/,
eine leichtgewichtige, schnelle Arbeitsumgebung, die sich an die Standards von
http://www.freedesktop.org/ hält und gut mit Anwendungen aus an-
deren Umgebungen zusammenarbeitet.
Im Handel erhältlich ist die nicht freie, auf Motif beruhende Arbeitsumgebung Com-
mon Desktop Environment (CDE), die auf vielen kommerziellen UNIX-Systemen
eingesetzt wird. Dazu kommen proprietäre Arbeitsumgebungen. GNOME ist der
Desktop, der bei der Einrichtung des Grundsystems vorgegeben wird, vorausgesetzt,
man hat überhaupt die Paketauswahl für einen Desktoprechner markiert. KDE wird
aber auch heruntergeladen oder lässt sich nachrüsten. Display-Manager bieten auf
dem Anmeldebildschirm unter dem Punkt Sitzung die verfügbaren Arbeitsumge-
bungen zur Auswahl an. Innerhalb einer Sitzung mit zwei verschiedenen Arbeits-
3.7 Arbeitsumgebungen (Desktöppe) 209

umgebungen zu arbeiten oder die Arbeitsumgebung zu wechseln, ist ungebräuchlich


bis unmöglich.
Im Gegensatz zu Fenster-Managern können Anwendungen oder Werkzeuge, die
zu unterschiedlichen Arbeitsumgebungen gehören, gleichzeitig nebeneinander in ei-
ner Sitzung betrieben werden. Voraussetzung ist lediglich, dass die benötigten Kom-
ponenten der Umgebungen auf dem System eingerichtet sind. Abbildung 3.9 zeigt
den SysV-Init-Editor aus dem KDE-Projekt auf einer GNOME-Arbeitsfläche. Es
kommt jedoch vor, dass Anwendungen nicht richtig miteinander kommunizieren,
sodass ein Programm einer Arbeitsumgebung beispielsweise nichts damit anfangen
kann, wenn mit der Maus ein Objekt aus einem Programm einer anderen Arbeitsum-
gebung auf dieses Programm gezogen wird. Nach Möglichkeit bleibt man innerhalb
einer Sitzung bei einer Arbeitsumgebung. Ausprobieren.

Abb. 3.9: Screenshot des KDE SysV-Init-Editors auf einem GNOME-Desktop

Zum sichtbaren Teil eines Desktops gehören eine Menüleiste mit mehreren
Knöpfen, ein Rollbalken (Laufleiste, scrollbar), eine Taskleiste (Schnellstartleiste,
Panel) mit Knöpfen zur Auswahl der Arbeitsfläche, eine Uhr, ein Lautstärkeregler
und andere Kleinigkeiten mehr.
Wer mit beiden Arbeitsumgebungen (und mit CDE unter HP-UX) gearbeitet hat,
kommt zu dem Schluss, dass man mit allen leben kann, dass jede Umgebung ihre
Stärken hat und sich weiter entwickelt und dass die Gewohnheit eine entscheidende
Rolle spielt.
210 3 X Window System (X11) und Arbeitsumgebungen

3.7.2 K Desktop Environment (KDE)

Die aktuelle Version der Arbeitsumgebung KDE (Anfang 2007 3.5.6) basiert auf
einer Bibliothek (Quasar Toolkit, Qt), bei der es sich um bedingt freie Software han-
delt. KDE selbst ist ein Open-Source-Projekt, das unter der GPL veröffentlicht ist.
Das KDE-Projekt stellt neben dem Quellcode auch Pakete in mehreren Formaten zur
Verfügung, allerdings keine Debian-Pakete. Mehr Informationen hierüber auf der
Startseite des KDE-Projektes unter http://www.kde.org/.
KDE besteht bei Debian aus zahlreichen Paketen, die teilweise zu Metapaketen
zusammengefasst sind, um die Einrichtung zu erleichtern. Die wichtigsten sind:
• kde ein umfangreiches Metapaket, das alle offiziellen Module von KDE umfasst,
• kde-core Metapaket, das die wichtigsten Module des Desktops umfasst, benötigt
kdebase (siehe unten),
• kde-devel Metapaket mit allen Modulen für KDE-Entwickler,
• kde-extras Metapaket mit nicht-offiziellen Anwendungen, die auf KDE aufset-
zen und für KDE-Benutzer interessant sein können, darunter kile, koffice und
noteedit,
• kde-i18n-de enthält die deutschen internationalisierten Dateien für alle KDE-
Kernanwendungen, entsprechend -fr für die französischen Dateien etc.,
• kdeaccessibility Metapaket mit einigen KDE-Paketen zur Verbesserung der Zu-
gänglichkeit für behinderte Benutzer,
• kdeadmin Metapaket mit Werkzeugen zur Verwaltung,
• kdebase Metapaket mit dem Minimum an Modulen zum Arbeiten mit KDE,
darunter der Fenster-Manager kwin, der Datei-Manager konqueror und der
Terminal-Emulator konsole, benötigt kdebase-bin und kdebase-data (aber dar-
um kümmert sich das Metapaket bei seiner Einrichtung mittels apt),
• kdegames Metapaket mit Spielen wie kpoker,
• kdegraphics Metapaket mit grafischen Anwendungen,
• kdelibs Metapaket mit den wichtigsten Bibliotheken,
• kdemultimedia Metapaket mit Multimedia-Anwendungen,
• kdenetwork Metapaket mit Netzanwendungen wie kget, kwifimanager und
kopete,
• kdeutils Metapaket mit Dienstprogrammen wie kcalc, kedit und ksim,
• kdm Paket mit dem K-Display-Manager,
• koffice Paket mit allen Teilen von KOffice (Büroanwendungen),
• koffice-i18n-de deutsche Übersetzungen zu KOffice,
• konsole Paket mit dem Terminal-Emulator konsole.
In der Regel wird man zuerst einige Metapakete einrichten und nach Bedarf einzelne
Pakete nachrüsten. Wer es sich einfach machen will und ausreichend Platz auf der
Platte hat, nimmt das Metapaket kde. Wer sparen muss, wählt das Metapaket kde-
base, zweckmäßig mit der deutschsprachigen Ergänzung kde-i18n-de. Dokumenta-
tion findet sich reichlich auf http://de.kde.org/ und http://docs.kde.
org/, wird aber auch mit den Programmen geliefert und ist im jeweiligen Fenster
über den Menüpunkt Hilfe erreichbar.
3.7 Arbeitsumgebungen (Desktöppe) 211

Abb. 3.10: Screenshot der Arbeitsumgebung KDE, Erklärung im Text

Die Konfiguration von KDE verteilt sich auf das Verzeichnis /etc/kde3 mit
den systemweiten Einstellungen und auf das benutzereigene Verzeichnis $HOME/
.kde sowie eine Datei $HOME/.kderc mit individuellen Wünschen.
In Abbildung 3.10 sehen wir einen typischen KDE-Bildschirm, gemalt vom
Fenster-Manager kwin. Links oben erkennen wir das Icon eines Mülleimers (oh-
ne Mülltrennung in recyclefähige Bits und Restbits). Auf der Arbeitsfläche liegen
die Fenster des Datei- und Web-Browsers Konqueror sowie eines Kalenders. Die
Schnellstartleiste am unteren Bildschirmrand wird bei KDE Kontrollleiste genannt
und enthält von links nach rechts:
• ein Zahnrad mit einem K; Anklicken zaubert das Hauptmenü hervor, aus dem
viele Programme oder Aktionen wie Sitzung sperren oder Abmelden gestartet
werden,
• einen Bleistift auf einem Blatt Papier; Anklicken zeigt die Arbeitsfläche an,
• ein rot gedecktes Häuschen; Anklicken ruft den Konqueror als Dateimanager des
Home-Verzeichnisses auf,
• eine Weltkugel mit den Resten eines Zahnrads; Anklicken ruft den Konqueror als
Web-Browser auf, siehe das große Fenster,
• einen Briefumschlag neben einem Stück Schweizerkäse; Anklicken startet das
Emailprogramm kmail,
• einen rotweißen Rettungsring, hinter dem die Startseite des KDE-Hilfezentrums
steckt,
212 3 X Window System (X11) und Arbeitsumgebungen

• vier durchnummerierte Quadrate, welche die vier per Vorgabe eingerichteten Ar-
beitsflächen darstellen,
• kleine iconartige Flächen, die den Fenstern auf der Arbeitsfläche zugeordnet
sind,
• zwei winzige Icons, über die der Klipper – ein Dienstprogramm für die Zwi-
schenablage – und der KOrganizer gestartet werden, in der Annahme, dass ein
Normalbenutzer beide Werkzeuge oft benutzt,
• ganz rechts eine Anzeige der Systemuhr,
• äußerst rechts einen schmalen Knopf, um die Kontrollleiste vorübergehend ver-
schwinden zu lassen, wenn man den ganzen Bildschirm für eine Anwendung wie
eine Tabellenkalkulation oder Grafiken braucht.
Aussehen, Lage und Funktionalität der Kontrollleiste sind weitgehend konfigurier-
bar. Braucht man mehr als die vier vorgegebenen Arbeitsflächen, rechtsklickt man
in die vier Quadrate und wählt den Menüpunkt Virtuelle Arbeitsflächen einrichten.
Das Fenster einer Anwendung wie Konqueror besteht ebenfalls aus einer Nutzfläche
sowie aus Dekoration: Titelleiste mit einigen Knöpfen links und rechts, Menüleiste,
Rollbalken (meist rechts am Rand) und weiteren, anwendungsabhängigen Elemen-
ten. Üblicherweise steckt hinter dem linken Knopf der Titelleiste ein Menü, das als
untersten Punkt das Beenden der Anwendung und damit Schließen des Fensters ent-
hält. Die rechten Knöpfe der Titelleiste dienen dem Vergrößern des Fensters auf die
Größe der Arbeitsfläche und wieder zurück sowie dem Schließen alternativ zu dem
eben erwähnten Menüpunkt.
Die zu KDE gehörenden Prozesse müssen miteinander reden. Hierfür haben
die Entwickler ein eigenes Protokoll namens Desktop Communication Protocol
(DCOP) geschaffen, um Ressourcen zu sparen und die Geschwindigkeit zu er-
höhen. Informationen dazu finden sich auf http://developer.kde.org/
documentation/. Es setzt auf dem Inter Client Exchange Protocol (ICE) von
X11R6 und auf der Qt-Bibliothek auf. Jede Anwendung, die DCOP benutzt, ist ein
Client des als Dämon laufenden DCOP-Servers, der als eine Art von Telefonvermitt-
lung zwischen den Prozessen arbeitet. Ein Benutzer der Arbeitsumgebung KDE tut
gut daran, alles was dcop im Namen trägt, nicht zu behelligen oder gar zu löschen.
Solange alles funktioniert, brauchen sich weder Verwalter noch Benutzer um den
Hintergrund der Arbeitsumgebung Gedanken zu machen, Programmierer dagegen,
die Anwendungen für die Arbeitsumgebung schreiben, müssen sich mit DCOP be-
fassen. DCOP wird nur von KDE benutzt. So gut es auch sein mag, Einzellösungen
sind selten der optimale Weg. Das KDE-Projekt ist deshalb dabei, seine Interprozess-
Kommunikation auf den D-Bus umzustellen, der eine allgemeinere Lösung darstellt.

3.7.3 GNU Network Object Model Environment (GNOME)

Die aktuelle Version der Arbeitsumgebung GNOME (Anfang 2007 2.18) beruht auf
dem GIMP Toolkit (GTK+), der unter der GPL steht, also im strengen Sinn frei ist.
Aus diesem Grund haben sich einige Firmen für GNOME entschieden, da hier kei-
ne Lizenzfragen auftauchen. GNOME war später dran als KDE, hat aber aufgeholt.
3.7 Arbeitsumgebungen (Desktöppe) 213

Außer in der Grafikbibliothek unterscheidet sich GNOME von KDE in der Program-
miersprache (C statt C++), in der Interprozesskommunikation (CORBA statt DCOP)
und in vielen Kleinigkeiten des Look and Feel, die jedoch so weit konfigurierbar
sind, dass für einen Benutzer die Unterschiede verschwimmen. Beispielsweise star-
tet per Vorgabe unter KDE ein einfacher Mausklick ein Programm, unter GNOME
ein doppelter. Dies lässt sich vom Benutzer unter GNOME über die Menüpunkte
Anwendungen -> Systemwerkzeuge -> Konfigurationseditor -> desktop -> gnome
-> peripherals -> mouse -> single_click ändern, unter KDE über die Menüpunkte
Hauptmenü -> Kontrollzentrum -> Angeschlossene Geräte -> Maus -> Allgemein
-> Symbole. Einige Kommandos zum Konfigurieren – falls man grafisch nicht ans
Ziel gelangt – tragen Namen der Art /usr/bin/gnome- *, ein Blick darauf lohnt.
GNOME möbliert von sich aus den Desktop etwas zurückhaltender als KDE und
setzt darauf, dass ein Benutzer die von ihm gewünschten zusätzlichen Möbelstücke
nach und nach selbst einrichtet. Falls Sie sich unsicher sind, mit welcher Arbeitsum-
gebung Sie gerade arbeiten, hilft ein Rechtsklick in die Taskleiste. Im auftauchenden
Menü wählt man den Punkt Hilfe. Spätestens dann sollte die Arbeitsumgebung Farbe
bekennen.
Auch GNOME besteht bei Debian aus zahlreichen Paketen, die teilweise zu Me-
tapaketen zusammengefasst sind, um die Einrichtung zu erleichtern. Zu trennen sind
dabei die Anwendungen und Bibliotheken, die GNOME selbst ausmachen, von sol-
chen Programmen, welche die Bibliotheken und Dienste des GNOME-Systems be-
nutzen und seine Funktionalität erweitern. Die wichtigsten sind:
• gnome ein Metapaket, das alle offiziellen Module von GNOME2 umfasst,
• gnome-core ein Metapaket, welches das Minimum der Arbeitsumgebung enthält,
• gnome-desktop-environment ein Metapaket, das die Arbeitsumgebung samt ei-
nigen Anwendungen umfasst,
• gnome2-user-guide Paket mit GNOME2-Dokumentation,
• gnome-accessibility-themes Paket mit einigen Themes zur Verbesserung der Zu-
gänglichkeit für sehschwache Benutzer,
• gnome-utils Paket mit Dienstprogrammen,
• gnome-games, gnome-games-data und gnome-games-extra-data Pakete mit
Spielen für GNOME,
• gnome-media Paket mit Multimedia-Anwendungen,
• gnome-office Metapaket mit Office-Anwendungen (Büroanwendungen),
• gnome-terminal Paket mit Terminal-Emulator,
• gdm und gdm-themes Pakete mit dem GNOME Display Manager,
Die Bezeichnung der Pakete und die Verteilung der Aufgaben unterscheidet sich teil-
weise von KDE, ansonsten gilt das bereits Gesagte: Man richtet zweckmäßig eines
der grundlegenden Metapakete ein und rüstet einzelne Pakete bei Bedarf nach. Doku-
mentation findet sich reichlich auf http://www.gnome.org/learn/, kommt
mit den Paketen mit und ist in den jeweiligen Fenstern über den Menüpunkt Hilfe
erreichbar.
Die Konfiguration von GNOME verteilt sich auf die Verzeichnisse /etc/
gconf und /etc/gnome mit den systemweiten Einstellungen sowie auf die be-
214 3 X Window System (X11) und Arbeitsumgebungen

Abb. 3.11: Screenshot der Arbeitsumgebung GNOME, kann im Einzelfall abweichen, Erklä-
rung im Text. Bis Sie unser Buch in Händen halten, noch schöner geworden.

nutzereigenen Verzeichnisse $HOME/.gconf und $HOME/.gnome2 mit indi-


viduellen Wünschen. Das Verzeichnis $HOME/.gnome2_private hat gegen-
wärtig noch keine Funktion und ist leer. Das wichtigste Werkzeug für die Kon-
figuration ist gconftool-2. Die Konfiguration ist ausführlich in Dokumenten
auf http://www.gnome.org/learn/ beschrieben, gegliedert in einen User’s
Guide, einen System Administration Guide und einen Accessibility Guide.
In Abbildung 3.11 sehen wir einen typischen GNOME-Bildschirm, gemalt vom
Fenster-Manager metacity. Im Einzelfall weicht der Bildschirm je nach Version
und Konfiguration von GNOME von der Darstellung ab. Den oberen Bildrand ziert
eine Leiste (Panel), die von links nach rechts folgende Knöpfe enthält:
• den Fußabdruck eines noch kleinen Gnoms samt dem Schriftzug Anwendungen,
mittels dessen man ein Menü öffnet, das über Untermenüs den Zugang zu zahl-
reichen Anwendungen ermöglicht,
• Aktionen, das sind eine Kommandozeile, ein Dateisuchfenster, ein Menüpunkt
zum Aufnehmen von Bildschirmfotos (Screenshots), Sperren des Bildschirms
und Abmelden,
• ein natolivfarbenes Rechteck, das den Datei-Browser Nautilus startet,
• einen dunkelgrauen Fernseher, der den Terminal-Emulator GNOME-Terminal
startet,
• rechts oben einen Kalender samt Uhr, die auch Sekunden anzeigen kann,
3.7 Arbeitsumgebungen (Desktöppe) 215

• weiter rechts ein Lautsprechersymbol für einen einfachen Lautstärkeregler,


• ganz rechts einen Fensterwähler, der ein Menü anbietet, das alle zur Zeit vor-
handenen Fenster – auch auf verschiedenen Arbeitsflächen – anzeigt und auszu-
wählen gestattet. Bei anderen Konfigurationen findet sich stattdessen ein Panel-
Benachrichtigungsfeld.
Ein Rechtsklick auf die leere Fläche der Leiste (des Panels) öffnet ein Menü zu seiner
Konfiguration. Auf der Arbeitsfläche tummeln sich:
• drei Icons für Computer (der Datei-Browser Nautilus), Persönlicher Ordner
(nochmals der Nautilus, aber jetzt mit dem Home-Verzeichnis des Benutzers im
Visier) und einen Mülleimer, der auch vom Nautilus verwaltet wird,
• vorn ein Fenster des Web-Browsers Epiphany aus dem Geschlecht der Mozil-
las, dahinter teilweise verdeckt ein Fenster des Terminal-Emulators GNOME-
Terminal.
Ein Rechtsklick auf den leeren Teil der Arbeitsfläche öffnet ein Menü zum Starten
von GNOME-Terminal, zum Anlegen eines Starters (launcher), das ist ein neues
Icon auf der Arbeitsfläche, mit dem ein beliebiges Programm gestartet wird, zum
Aufräumen auf der Arbeitsfläche usw. Am unteren Bildrand steht uns eine weitere
Leiste (Panel) mit folgenden Knöpfen zu Diensten:
• ganz links und rechts ein Knopf, der zwischen Anzeigen und Verbergen des Pa-
nels umschaltet,
• ein Knopf aus der Fensterliste, der zu dem teilweise verdeckten Terminalfenster
auf der Arbeitsfläche gehört und es erlaubt, dieses zu verbergen (minimieren)
oder wieder hervorzuholen,
• das Gleiche für das Browserfenster,
• rechts vier Knöpfe zum Umschalten zwischen den vier Arbeitsflächen.
Ein Rechtsklick auf die Leiste öffnet ein Menü zu ihrer Konfiguration, vor allem
zwecks Hinzufügen weiterer Knöpfe. Der Menüpunkt Zum Panel hinzufügen öff-
net ein Angebot über vorgefertigte Knöpfe für häufig vorkommende Aufgaben. Man
kann aber auch Knöpfe nach Aussehen und Bedeutung selbst gestalten, siehe dazu
die Hilfe zum Panel. Braucht man zusätzliche Arbeitsflächen, rechtsklickt man auf
die Knöpfe zur Auswahl der Arbeitsfläche und wählt aus dem emporschnellenden
Menü den Punkt Einstellungen. Wer einen großen Bildschirm sein eigen nennt, wird
eher mit mehreren Fenstern auf einer Arbeitsfläche arbeiten. Das Fenster einer An-
wendung zeigt oben links das übliche Fenstermenü mit Schließen als wichtigstem
Punkt, oben rechts drei Knöpfe zum Minimieren, Maximieren und Schließen sowie
je nach Anwendung rechts einen Rollbalken und unten verschiedene Informationen.
Ein minimiertes Fenster wird durch Linksklick in die Fensterliste im Panel wieder
munter, weshalb die Fensterliste im Panel vertreten sein sollte.
Auch bei GNOME müssen die Prozesse einer Sitzung miteinander reden. GNO-
ME hat dafür die Common Object Request Broker Architecture (CORBA, http:
//www.corba.org/) gewählt, eine offene, herstellerunabhängige Spezifikation
(eine Sprache und zwei Protokolle), wie Anwendungen über ein Netz miteinander
216 3 X Window System (X11) und Arbeitsumgebungen

kommunizieren. Vielleicht ist diese Lösung zukunftsträchtiger als KDEs Alleingang


mit DCOP. Der D-Bus wird auch unterstützt.

3.8 Datei-Manager
In Abschnitt 2.8 Dateien und Verzeichnisse auf Seite 115 haben wir ein Reihe
von Kommandos zur Handhabung von Dateien oder Verzeichnissen kennen gelernt
(Dienstprogramme). In einer Arbeitsumgebung werden diese Helfer unter der Ober-
fläche eines Datei-Managers zusammengefasst:
• der Midnight Commander aus dem Debian-Paket mc und der Last File Manager
aus dem Debian-Paket lfm sind von X11 unabhängige, curses-basierte (nicht-
grafische) Datei-Manager,
• auf X11 basiert der von einer Arbeitsumgebung unabhängige X Northern Captain
aus dem Debian-Paket xnc,
• zur Arbeitsumgebung GNOME gehört der Datei-Manager nautilus, schlicht,
aber mit allen nötigen Funktionen,
• zur Arbeitsumgebung KDE gehört der Datei-Manager und zugleich Web-
Browser konqueror.
In Abbildung 3.12 sehen wir einen Screenshot des Datei-Managers Nautilus, der zur
Arbeitsumgebung GNOME gehört und bei der vorgegebenen Einrichtung automa-
tisch gestartet wird. Er verwaltet unter anderem die Arbeitsflächen und läuft daher
im Hintergrund, auch wenn man ihn nicht ausdrücklich aufgerufen hat. Der KDE
Konqueror hingegen hat mit den Arbeitsflächen nichts zu schaffen und wird nur auf
Befehl munter.
Datei-Manager bieten über das einfache Anzeigen, Umbenennen und Löschen
hinaus weitere Funktionen. Beispielsweise lassen sich Dateien oder Verzeichnisse
mit der linken Maustaste auf das Icon eines entfernbaren Speichermediums (Floppy,
USB-Stöpsel, CD/DVD in einem Brenner) ziehen und dort speichern, entsprechende
Zugriffsrechte vorausgesetzt. Man erwarte jedoch nicht, dass dieses Vorgehen so-
fort und überall ohne weitere Konfiguration funktioniert. Beispielsweise brach der
Versuch, in Nautilus ein Projektverzeichnis von der Platte auf einen USB-Stöpsel
zu kopieren, ab mit der Fehlermeldung Ungültige Parameter beim Kopieren. Es ver-
steht sich, dass der USB-Stöpsel vorher eingehängt war, andernfalls wäre das Pro-
jektverzeichnis in den Einhängepunkt (Mounting Point, ein leeres Verzeichnis wie
/media/stick) kopiert worden, was problemlos, aber verdächtig schnell geht.
Die Kommandozeile:
joe@debian:manuskripte$ cp -dfpru debian /stick
dagegen tat ohne Murren das Verlangte. Während Sie in der Kommandozeile die Pa-
rameter oder Optionen im Blick haben, dürfen Sie beim Manager erst einmal suchen,
wo der Hund begraben liegt. Der Konfigurationseditor (Menüpunkte Anwendungen
-> Systemwerkzeuge -> Konfigurationseditor) war dabei ebenso erfolglos wie die
händische Suche mit locate, grep und less. Einige Hinweise zum Umgang mit
3.9 Abfolge der Manager beim Systemstart 217

Abb. 3.12: Screenshot des zu GNOME gehörenden Datei-Managers Nautilus. Angezeigt wird
das Verzeichnis, in dem sich Bilddateien zum Buch befinden. Die Bildervorschau ist hübsch,
frisst aber auch Fläche.

Floppies oder CD/DVDs finden sich in den Sektionen 7.10 und 7.11 der Online-Hilfe
von Nautilus.

3.9 Abfolge der Manager beim Systemstart


Zur Übersicht noch einmal die verschiedenen an einer Sitzung beteiligten Manager
und sonstigen Knechte in der Abfolge ihrer Starts:
• Nach dem Einschalten des Rechners laufen einige hardwarenahe Vorgänge ab,
die in Kapitel 11 Systemstart (Booten) ab Seite 465 erläutert werden. Sobald Kern
und Wurzeldateisystem betriebsbereit sind, geht es mit den folgenden Schritten
weiter.
• Vom init-Prozess wird auf Grund des Eintrags in /etc/inittab ein be-
stimmter Runlevel (meist Nr. 2, Mehrbenutzerbetrieb) als Default Runlevel aus-
gewählt.
• Auf Grund des Eintrags in /etc/inittab werden je nach Runlevel bis zu
sechs Prozesse /sbin/getty auf den Konsolen /dev/tty* gestartet. Die
Bemerkung respawn besagt, dass die Prozesse nach Beendigung sofort wie-
der erneuert werden. Ein getty-Prozess schreibt den Login-Prompt auf seine
218 3 X Window System (X11) und Arbeitsumgebungen

Konsole, ersetzt sich (exec) bei der Anmeldung durch /bin/login und dieser
Prozess bei Erfolg durch eine Login-Shell (Bash). Für Benutzer grafischer Ober-
flächen sind die Konsolen von geringerer Bedeutung, auf Maschinen ohne X11
(manche Server) sind sie der einzige direkte Zugang.
• Im Normalbetrieb (nicht bei Notfällen) wird das Skript /etc/init.d/rcS
ausgeführt, das die Startskripte in /etc/rcS.d der Reihe nach aufruft. Die
Einträge in den Verzeichnissen /etc/rc*.d sind Symlinks auf Skripte in
/etc/init.d. In rcS werden das Dateisystem, die Netzanbindung, die Sys-
temuhr und weitere Ressourcen gestartet, die sowohl im Einzel- wie im Mehrbe-
nutzerbetrieb gebraucht werden.
• Anschließend folgt auf Grund des Eintrags in /etc/inittab das Skript
/etc/init.d/rc mit dem jeweiligen Runlevel als Argument. Das Skript
ruft aus dem zu dem jeweiligen Runlevel (hier 2) gehörenden Verzeichnis
/etc/rc2.d zuerst die Kill-Skripte (K...), dann die Startskripte (S...) der
Reihe nach auf. Die Kill-Skripte beenden Dienste, die möglicherweise laufen,
in dem gewählten Runlevel aber nicht länger laufen sollen, beispielsweise wenn
zwecks Wartung vom Mehrbenutzerbetrieb (Runlevel 2) in den Einbenutzerbe-
trieb (Runlevel 1) gewechselt wird.
• Unter den Startskripten befindet sich auf Maschinen mit X11 gegen Ende das
Skript /etc/init.d/gdm, das den GNOME Display-Manager /usr/bin/
gdm startet, der in /etc/X11/default-display-manager bei der Kon-
figuration von X11 eingetragen wurde. Alternativen wären xdm von X11, kdm
von KDE oder wdm (WINGs Display Manager, NeXT-ähnlich).
• Der Display-Manager startet einen X-Server, schreibt den Anmelde-Bildschirm,
nimmt die Anmeldung des Benutzers entgegen, prüft sie6 und startet bei Erfolg
einen X-Session-Manager wie xsm oder gnome-session als ersten benutzer-
eigenen Prozess. Damit ist die Sitzung eines Benutzers eröffnet. Der Display-
Manager verschwindet von der Bildfläche und läuft als Dämon im Hintergrund
weiter.
• Der X-Session-Manager startet die Programme, die der Benutzer in seiner Sit-
zung bereits laufend vorfinden möchte, insbesondere einen Fenster-Manager, auf
Grund der Eintragung in /etc/alternatives beispielsweise /usr/bin/
metacity, und einen Datei-Manager wie Nautilus. Dazu kommen Anwendun-
gen wie ein Web-Browser und ein Terminal-Emulator, alles was beim Abmelden
mit einem Klick auf den Menüpunkt Aktuelle Einstellungen speichern festgehal-
ten worden ist. Der Benutzer sieht nun eine seiner Arbeitsflächen, mit Rahmen,
Menüs und sonstigem Zierrat, gegebenenfalls mit einer laufenden Anwendung.
• Nehmen wir an, der Benutzer wähle per Menü oder Icon einen Terminal-
Emulator wie /usr/bin/X11/xterm, /usr/bin/konsole oder /usr/
bin/gnome-terminal aus. Der Emulator startet dann eine interaktive Bash,
mit der man per Kommandozeile reden kann. Diese arbeitet als erstes die sys-
temweite Datei /etc/bash.bashrc ab und dann die benutzereigene Da-
tei $HOME/.bashrc. Entsprechendes gilt für andere grafische Anwendun-

6
Der heutige GDM delegiert die Prüfung an PAM, siehe Seite 536.
3.10 X-Ressourcen 219

gen an Stelle des Terminal-Emulators, beispielsweise für einen Web-Browser


wie /usr/bin/epiphany oder den CD-Player /usr/bin/gnome-cd,
die systemweit im Verzeichnis /etc und bei Bedarf zusätzlich im Home-
Verzeichnis des Benutzers konfiguriert sind.
• Zum Beenden der Sitzung gibt man in einer Textkonsole das eingebaute Shell-
Kommando exit, worauf sich die Sitzungs-Shell beendet. Der init-Prozess
erfährt davon und startet wegen der respawn-Anweisung in /etc/inittab
einen neuen getty-Prozess. In einer grafischen Arbeitsumgebung wählt
man den Menüpunkt Aktionen -> Abmelden -> Abmelden (GNOME) oder
Hauptmenü -> Aktionen/Abmelden -> Aktuelle Sitzung beenden (KDE) und be-
endet damit den X-Session-Manager. Der Display-Manager schreibt wieder das
Anmeldefenster auf den Schirm.
Zum normalen Beenden des Betriebs wird das Kommando /sbin/shutdown
aufgerufen, welches das System in den Runlevel 0 (Halt) oder 6 (Warmstart, Re-
boot) versetzt. Entsprechend den Einträgen in /etc/inittab werden die Skripte
aus /etc/rc0.d oder /etc/rc6.d ausgeführt. Dabei handelt es sich vorwie-
gend um Kill-Skripte, die in sinnvoller Reihenfolge einen Dienst nach dem anderen
abschalten. Der erste Kandidat ist der Display-Manager. Ganz zum Schluss wird
das Startskript /etc/init.d/halt oder /etc/init.d/reboot abgearbei-
tet, das nach einigen Vorbereitungen das Kommando halt bzw. reboot aufruft.
Die Schritte beim Start eines Rechners werden – von einem anderen Standpunkt
aus – auch im From Power Up To Bash Prompt HOWTO (2000) von G REG O’K EEFE
und im dritten Kapitel des Unix and Internet Fundamentals HOWTO (2004) von
E RIC S. R AYMOND behandelt, beide bei TLDP zu finden. Ferner befassen sich Do-
kumentationen zum Kern und zu den Bootloadern mit diesbezüglichen Punkten.

3.10 X-Ressourcen
Anwendungen, die von X11 Gebrauch machen, benötigen eine Vielzahl von Anga-
ben oder Parametern zur Beschreibung ihrer Grafiken. X11 verfügt daher über ei-
ne eigene Methode zur Konfiguration, die man als X-Ressourcen7 bezeichnet. Der
X-Server verwaltet dabei eine Hierarchie von Variablen und Werten, mit denen bei-
spielsweise die Hintergrundfarbe von Fenstern, die von einer Anwendung zu ver-
wendenden Schriftarten oder das Erscheinungsbild einer Werkzeugleiste bestimmt
werden. Die X-Ressourcen lassen sich als eine mächtige Erweiterung der Optionen
üblicher Linux/UNIX-Kommandos auffassen.
Zu Beginn einer X11-Sitzung werden die X-Ressourcen in den X-Server geladen.
Dies geschieht mit dem Programm xrdb (X Resource Database), üblicherweise auf-
gerufen vom Display-Manager oder einem X-Startskript wie startx. Dabei wer-
den zunächst die systemweit geltenden X-Ressourcen aus den Dateien im Verzeich-
nis /etc/X11/Xresources und dann – sofern vorhanden – die Ressourcen-
7
X11-Ressourcen sind etwas anderes als die in anderem Zusammenhang vorkommenden
Hardware- oder Software-Ressourcen.
220 3 X Window System (X11) und Arbeitsumgebungen

Definitionen aus der Datei .Xresources im Home-Verzeichnis des Benutzers ge-


laden.
Die Syntax dieser Dateien unterscheidet sich von der anderer Konfigurationsda-
teien. Kommentare werden hier nicht mit einem Doppelkreuz, sondern mit einem
Ausrufungszeichen eingeleitet. Jede Ressourcendefinition besteht aus einer Zeile, in
der sich der Name der Ressource gefolgt von einem Doppelpunkt sowie dem Wert
der Ressource befindet. Falls für die Spezifikation einer Ressource mehr als eine
Zeile benötigt wird, sind fortzusetzende Zeilen mit einem Gegenschrägstrich (Back-
slash) abzuschließen.

Abb. 3.13: Screenshot des X-Ressourcen-Editors editres mit der Anzeige der Ressourcen-
Hierarchie von xedit

Namen von Ressourcen setzen sich aus unterschiedlichen Elementen zusammen,


die durch Punkte voneinander getrennt werden. Das erste Element bezeichnet in der
Regel den Namen der Anwendung, die nächsten Elemente einzelne Teile des oder
der Fenster der betreffenden Anwendung und der letzte Teil ein Merkmal (Attribut)
des betreffenden Elements. Dies soll am Beispiel des Terminal-Emulators xterm
erläutert werden. Die Fenster des Programms setzen sich aus verschiedenen Widgets
(Widget = Window Gadget = geniales Dingsbums des Fensters) zusammen, wobei
der Name des Widgets im Hauptfenster von xterm VT100 lautet. Möchte man den
Hintergrund des xterm-Fensters in blauer Farbe haben, so ist folgende X-Ressource
zu setzen:
3.10 X-Ressourcen 221

XTerm.vt100.background: blue
Hierin bezeichnet XTerm die Anwendung, vt100 das Widget, background das
Attribut und blue den Wert. Menüs und andere Fenster des Programms benutzen
andere Widgets; sie werden durch diese Ressource nicht verändert. Durch den Stern
lassen sich alle möglichen Kombinationen auf einmal spezifizieren, ähnlich dem
Stern als Joker in Dateinamen, die der Shell übergeben werden. So führt die folgen-
de Anweisung dazu, dass der Hintergrund aller Teile von xterm in Blau dargestellt
wird:
XTerm*background: blue
Um den Hintergrund aller Anwendungen, die mit X-Ressourcen arbeiten, blau dar-
zustellen, ist folgende Anweisung in die Datei .Xresources aufzunehmen:
*background: blue
Weitere Beispiele sind auf der Manualseite zu X(7) im Abschnitt RESOURCES
zu finden. Nicht alle X-Anwendungen verwenden X-Ressourcen; das hängt davon
ab, ob sie die zugehörigen Funktionen aus der Xlib und dem XToolkit benutzen.
Die voreingestellten Ressourcen für die meisten Programme, die mit X-Ressourcen
arbeiten, befinden sich in Dateien im Verzeichnis /usr/X11R6/lib/X11/
app-defaults, mittlerweile ein Symlink auf /etc/X11/app-defaults.
Die Namen der Dateien in diesem Verzeichnis entsprechen den Namen der zuge-
hörigen Anwendungen. Sie sollten diese Dateien nicht verändern, sondern als Vor-
lagen für Einträge in der Datei .Xresources in Ihrem Home-Verzeichnis oder
in einer Datei unterhalb von /etc/X11/Xresources verwenden. Mehr über X-
Ressourcen finden Sie in der Manualseite zu X in der Sektion 7. Wie Sie Ressourcen
zur Laufzeit von X11 verändern, ist in der Manualseite zu xrdb beschrieben. Damit
eine Anwendung Gebrauch von einer veränderten X-Ressource macht, ist sie neu zu
starten.
Bei vielen X-Anwendungen lassen sich die Ressourcen vorübergehend durch
Optionen in der Kommandozeile ändern. Beispielsweise führt folgender Aufruf:
joe@debian:~$ xterm -fg blue -bg yellow -fn
lucidasans-18
dazu, dass der Terminal-Emulator mit blauer Schrift auf gelbem Hintergrund und
dem Font Lucidasans (Alias für die ausführliche Bezeichnung) gestartet wird, was
die Verwandtschaft zwischen X-Ressourcen und Kommandooptionen unterstreicht.
Die Optionen werden temporär in Ressourcen übersetzt.
Mit dem X-Ressourcen-Editor editres kann man sich die zu einer laufenden
Anwendung gehörenden Ressourcen anzeigen lassen und sie bei Bedarf dynamisch
editieren, sodass man sofort die Auswirkungen erkennt, siehe Abbildung 3.13, die
den Ressourcenbaum der Anwendung xedit (ein Texteditor) anzeigt, die Wurzel
zur Abwechslung einmal links. Hierzu ruft man den Ressourcen-Editor auf, wählt
den Menüpunkt Commands -> Get Tree und bewegt das auftauchende Fadenkreuz in
das Fenster der zu untersuchenden X-Anwendung. Das kann auch editres selbst
sein. Ähnliche Möglichkeiten bieten die Werkzeuge viewres und appres:
222 3 X Window System (X11) und Arbeitsumgebungen

joe@debian:~$ appres XTerm | less


aber editres ist am schönsten und auch am vielseitigsten. .

3.11 Zugriffssteuerung und -Kontrolle


X11 ist ein Netzprotokoll. Anwendungen, die X11 benutzen, müssen daher wissen,
auf welchem Rechner der X-Server läuft, den sie zur Darstellung verwenden sollen.
Dies wird ihnen mit Hilfe der Umgebungsvariablen DISPLAY (siehe Abschnitt 2.7.5
Benannte Variable auf Seite 77) mitgeteilt. Die Variable wird gewöhnlich während
des Starts des X-Servers gesetzt, sodass alle nachfolgenden X11-Anwendungen wis-
sen, welchen X-Server sie zu benutzen haben.
Der Wert der Variablen DISPLAY setzt sich aus dem Rechnernamen, der Num-
mer des Displays auf diesem Rechner und der Nummer des Bildschirms, der zu dem
betreffenden Display gehört, zusammen. Daraus folgt, dass es auf einem Rechner
mehrere Anzeigeeinheiten geben kann. Rechnername und Displaynummer werden
durch einen Doppelpunkt voneinander getrennt, während Displaynummer und Bild-
schirmnummer durch einen einfachen Punkt getrennt werden. Ein Beispiel:
DISPLAY=blackmagic:1.0
Damit versuchen X11-Anwendungen, den Rechner mit dem Namen blackmagic
zu erreichen und dessen zweites Display sowie dort den ersten Schirm zu verwen-
den. Displays und Bildschirme werden mit der Zahl 0 beginnend durchnummeriert.
Rechnername und Bildschirmnummern sind optional. Wenn kein Rechnername an-
gegeben ist, wird der X-Server auf dem lokalen Rechnern gesucht. Wenn keine Bild-
schirmnummer angegeben ist, wird der erste Bildschirm benutzt. Normalerweise hat
die Variable folgenden Wert:
DISPLAY=:0.0
Er bedeutet, X11-Anwendungen auf dem ersten Display des Rechners darzustellen,
auf dem die Anwendung selbst ausgeführt wird. Sie können auf Ihrem Rechner auch
mehrere X-Server gleichzeitig ausführen, aber nur, wenn jeder X-Server ein eige-
nes Display verwaltet. Um mit dem Kommando startx eine X-Sitzung auf dem
zweiten Display zu starten, wird dieses Kommando eingegeben:
joe@debian:~$ startx - - :1
Hier wird dem X-Server mit dem Parameter :1 die Bezeichnung des zu verwen-
denden Displays angegeben. Auf diese Art lassen sich mehrere X-Server mit unter-
schiedlichen Farbtiefen nebeneinander betreiben. Mehr dazu in der Manualseite zu
Xserver. Alternativ zur Umgebungsvariablen DISPLAY werten die meisten X11-
Anwendungen die Kommandozeilenoption -display aus, hinter welcher der zu
benutzende X-Server in derselben Form angegeben wird wie mit der Umgebungs-
variablen. Um das Terminal-Emulationsprogramm xterm zu starten und dessen
Ausgabe auf dem ersten Display des Rechners redmagic darzustellen, wird das
Programm so aufgerufen:
3.11 Zugriffssteuerung und -Kontrolle 223

joe@debian:~$ xterm -display redmagic:1


Weil es möglich ist, jedem Programm mit Hilfe der Umgebungsvariablen
DISPLAY oder einer Kommandozeilenoption mitzuteilen, auf welchem Rechner es
seine Ausgaben vornehmen soll, muss sichergestellt werden, dass von den X-Servern
nur solche Programme (Clients) akzeptiert werden, die tatsächlich erwünscht sind.
Oder fänden Sie es lustig, wenn Ihr Kollege – ein kleiner Scherzbold – ständig Fens-
ter auf Ihrem Bildschirm öffnet und schließt? Ein ungesicherter X-Server auf Ihrem
Arbeitsplatz ermöglicht bösen Buben im Internet, sich mit Ihrem Rechner zu verbin-
den, ohne dass Sie es merken, und:
• Ihren Bildschirm anzuschauen und zu kopieren,
• Ihre Tastatureingaben mitzulesen (Passwörter),
• Ihre Tastatureingaben abzufangen, zu verfälschen oder zu simulieren,
• Ihre Anwendungen fernzusteuern, beispielsweise Ihren Web-Browser, während
Sie mit Ihrer Bank plaudern.
Der Zugriff auf den X-Server lässt sich aber vernünftig absichern. Benötigen Sie
den direkten Zugriff auf Ihren X-Server über das Netz überhaupt nicht, kommen-
tieren Sie die entsprechenden Zeilen (Portnummern 6000 ff.) in /etc/services
aus. Über SSH laufende X11-Verbindungen (siehe unten) sind weiterhin möglich,
da diese über den SSH-Port (22) laufen. Das X Window User HOWTO (2002) von
H AL B URGISS und das Remote X Apps mini-HOWTO (2001) widmen der Sicherheit
eigene Abschnitte.
Zur Zugriffskontrolle gibt es mehrere Verfahren, die auf der Manualseite zu
Xsecurity vorgestellt werden. Das älteste, hostbasierte und ziemlich unsichere
Verfahren ist in der Manualseite zu dem Programm xhost beschrieben. Da vom
Gebrauch dieses Programms abzuraten ist, gehen wir nicht darauf ein. Ein neueres
und etwas sichereres Verfahren erlaubt die benutzerabhängige Zugriffskontrolle. Es
wird als Vorgabe benutzt. Beim Start einer X-Sitzung, also nach der Anmeldung am
Display-Manager oder nach Eingabe des Kommandos startx, wird dabei in der
Datei .Xauthority im Home-Verzeichnis des Benutzers, der die Sitzung startet,
ein Schlüssel (MIT Magic Cookie) abgelegt. Jeder, der im Besitz des Schlüssels ist,
darf das Display benutzen. Die Datei .Xauthority sollte deswegen aus Sicher-
heitsgründen nur für den Besitzer lesbar sein (600).
Soll nun einem anderen Benutzer die Möglichkeit eingeräumt werden, das Dis-
play zu benutzen, kann der Schlüssel aus der Datei extrahiert werden. Hierzu dient
das Kommando xauth. Ihm ist zu diesem Zweck das Schlüsselwort extract, der
Name der Datei, in die der Schlüssel geschrieben werden soll, sowie der Name des
Displays, zu dem der Schlüssel gehört, zu übergeben. Beispiel:
joe@debian:~$ xauth extract mykey :0
Hiermit wird der Schlüssel des aufrufenden Benutzers für das Display :0 in die Da-
tei mykey im Arbeitsverzeichnis geschrieben. Die Datei wird durch das Komman-
do überschrieben, falls sie bereits existiert. Sie kann nun einem anderen Benutzer
übergeben oder auf einen anderen Rechner kopiert werden. Dort lässt sich der in
224 3 X Window System (X11) und Arbeitsumgebungen

ihr enthaltene Schlüssel mit folgendem Kommando in die X11-Schlüsselsammlung


aufnehmen:
joe@debian:~$ xauth merge mykey
Nun kann auch der dortige Benutzer das betreffende Display ansprechen. Dabei ist
es unerheblich, ob es sich um einen Benutzer desselben Rechners oder eines anderen
Systems handelt. Mehr Informationen zu xauth in seiner Manualseite.
Viele Verwalter arbeiten normalerweise mit ihrem gewöhnlichen Benutzerkonto
unter X11 und benutzen Kommandos wie su oder sudo, um die Benutzeridenti-
tät des Verwalters anzunehmen. Dies ist die empfohlene Arbeitsweise. Sollen nun
X11-Programme mit den Rechten des Verwalters ausgeführt werden, ergibt sich das
Problem, dass der Verwalter nicht im Besitz des Schlüssels für den X-Server ist und
seine Programme den Server nicht benutzen können. Er würde dann die folgende
Fehlermeldung erhalten:
Xlib: connection to ":0.0" refused by server
Xlib: Client is not authorized to connect to Server
Error: Can’t open display: :0
Der Schlüssel muss dem Verwalter also übertragen werden, bevor dieser den X-
Server benutzen kann. Bei Verwendung von su zur Erlangung der Zugriffsrechte
kann dies automatisch durch die folgenden Zeilen in der Datei .bashrc im Home-
Verzeichnis des Verwalters geschehen:
if [ $DISPLAY ] ; then
su $USER -c dquxauth extract - $DISPLAY" | xauth merge -
fi;
In der ersten Zeile wird getestet, ob die Variable DISPLAY überhaupt gesetzt ist.
Falls dies der Fall ist, wird mit dem Kommando su zurück zur Identität des (gewöhn-
lichen) Benutzers gewechselt, der das Kommando su aufgerufen hat; sein Name ist
weiterhin in der Variablen USER gespeichert. Dann wird der Schlüssel extrahiert, der
danach wieder unter der Identität des Verwalters in die X11-Schlüsselsammlung des
Verwalters aufgenommen wird.
Der beschriebene Mechanismus ist besser als nichts, aber von einer sicheren Ver-
bindung über ein unsicheres Netz weit entfernt. Er reicht in überschaubaren lokalen
Netzen aus, nicht im Internet. Hier ist die Verbindung zu verschlüsseln, wozu die
Secure Shell (SSH, siehe Abschnitt 16.9.3 Secure Shell auf Seite 789) einen Weg
bietet. In der Konfiguration der SSH in den Dateien /etc/ssh/ssh_config und
sshd_config ist dazu das X-Forwarding ausdrücklich einzuschalten. Dann kann
ein Benutzer mit einem Kommando wie:
joe@debian:~$ ssh -f rechner2 xterm
auf dem fernen Rechner namens rechner2 einen X-Client namens xterm star-
ten, der seine Ein- und Ausgabe über den lokalen X-Server tätigt. Voraussetzung ist,
dass der Benutzer auf dem fernen Rechner über Benutzerrechte verfügt und dass der
3.12 Terminal-Emulatoren (xterm u. a.) 225

Abb. 3.14: Screenshot eines lokalen GNOME Terminals (vorn) und einer in der Ferne laufen-
den KDE Konsole, die über X11 und SSH mit dem lokalen X-Server verbunden ist

Client dort eingerichtet ist. Will man sich auf dem fernen Rechner unter einem an-
deren Benutzernamen als auf der lokalen Maschine anmelden, ist der dortige Name
mit der Option -l in der Kommandozeile zu übergeben. Abbildung 3.14 zeigt ein
Beispiel. Lokal hat der Benutzer wulf auf dem Rechner pcwulf ein GNOME Ter-
minal laufen, in der Ferne als Benutzer hugo auf dem Rechner ibwulf eine KDE
Konsole.
Eine solche Konstellation unterscheidet sich von einem Remote Login per SSH,
das auch ohne X11 möglich ist, beispielsweise zu einem Server, auf dem es kein
X11 gibt. Äußerlich ist eine solche Verbindung kaum von einer X11-Verbindung
zu unterscheiden, wir ersparen uns daher einen Screenshot. Innerlich erkennt man
an den Prozesslisten, was wo läuft. Die Manualseiten zu ssh sowie zu den beiden
Konfigurationsdateien enthalten Einzelheiten zu X11 über SSH. Wer oft X11 über
SSH benötigt, sollte sich den Secure Display Manager sdm ansehen, als Debian-
Paket zu haben und auf http://www.lessdisks.net/ zu Hause.

3.12 Terminal-Emulatoren (xterm u. a.)


Trotz grafischer Benutzeroberflächen mit Menüs, Buttons, Mausklicks und weite-
rem Firlefanz braucht man gelegentlich die schlichte, klassische Kommandozeile.
226 3 X Window System (X11) und Arbeitsumgebungen

Man hat auch seine Gewohnheiten. Ehe ich mich durch eine vielstufige Menühier-
archie durchklicke, gebe ich lieber ein Kommando ein. Des weiteren sind nicht alle
Linux/UNIX-Programme für die Verwendung mit X11 programmiert, insbesonde-
re ältere. Zu den am häufigsten aufgerufenen X11-Clients zählen daher Terminal-
Emulatoren, die in einem Fenster auf einer Arbeitsfläche einen altmodischen Bild-
schirm darstellen, hinter dem eine Shell auf Eingaben lauert. Der Fortschritt gegen-
über früher besteht darin, dass der Benutzer auf einem physikalischen Bildschirm,
der Geld gekostet hat, Strom zieht und Platz einnimmt, mehrere virtuelle Bildschir-
me erzeugen kann. Die Tastatur lässt sich leider nicht vervielfachen, sondern ist
immer nur einem Fenster oder virtuellen Bildschirm zugeordnet. Wir sprachen in
Abschnitt 3.6.1 Fenster-Manager auf Seite 201 darüber, als es um den Fokus ging.
Hinter den Menüpunkten Aktionen -> Anwendung ausführen (GNOME) oder
Aktionen -> Befehl ausführen (KDE) steckt etwas Ähnliches wie ein minimaler
Terminal-Emulator, der die Eingabe genau einer Kommandozeile erlaubt und diese
einer Shell zur Ausführung übergibt. Wer nur selten eine Kommandozeile benötigt,
ist damit vollauf bedient und braucht sich weder mit einer Shell noch mit einem
Terminal-Emulator auseinander zu setzen.
X11 bringt als Musteranwendung den Terminal-Emulator xterm mit, der ein
DEC-VT102- und ein Tektronix-4014-Terminal gleichzeitig mimt, GNOME das
gnome-terminal, KDE die konsole. Als Debian-Pakete sind auch der ge-
nügsame Emulator xvt, aterm, eterm, der multilinguale kterm und der rxvt
erhältlich, mit gewissen Vorzügen gegenüber dem Urahn xterm, alle aus der
Abteilung X Window System software. Im Verzeichnis /etc/alternatives
wird dem symbolischen Link x-terminal-emulator das Programm /usr/
bin/gnome-terminal.wrapper zugeordnet oder ein anderes. Ein Wrapper
ist eine Verpackung um ein Kommando, in diesem Fall ein Perl-Skript, das ei-
nige Optionen verarbeitet und sich zum Schluss durch das eigentliche Programm
gnome-terminal ersetzt. Die genannten Emulatoren ahmen ein Terminal des
Typs DEC VT100 oder dessen Nachfolgern nach, das heißt, sie verwenden dessen
Steuersequenzen (Zeichenfolgen, die nicht auf den Bildschirm geschrieben werden,
sondern das Terminal konfigurieren oder zu einer Tätigkeit veranlassen). Weil vie-
le Steuersequenzen mit einem Escape-Zeichen beginnen, werden sie auch Escape-
Sequenzen genannt. Drucker kennen auch Steuersequenzen, aber andere als Ter-
minals. Die Steuersequenzen sind standardisiert in den weitgehend gleichlauten-
den Normen ECMA-48 Control functions for coded character sets, übernommen
in ISO 6429, und ANSI X3.64 Additional Controls for Use with the American Na-
tional Standard Code for Information Interchange. Die ECMA-Norm steht im Netz
zur Verfügung. Unter DOS leistete der Treiber ansi.sys ähnliche Dienste (falls
sich jemand daran erinnert).
Die Firma Digital Equipment Corporation (DEC) war ein in der UNIX-
Geschichte bedeutender, inzwischen untergegangener Computerhersteller. Dessen
Terminals VT52 (1975), VT100 (1978) und VT102 waren weit verbreitete, seriel-
le, monochrome Textterminals (http://vt100.net/). Das VT220 (1983) war
immer noch ein reines Textterminal, jedoch schon mit einem 8-Bit-Zeichensatz.
Erst das VT240 beherrschte Grafik. Mit der VT500-Serie von 1993 schließt die
3.12 Terminal-Emulatoren (xterm u. a.) 227

Reihe; 1995 verkaufte DEC das Terminalgeschäft an die Boundless Corporation


(http://www.boundless.com/, die heute noch einige VT500-Textterminals
im Programm hat.

Abb. 3.15: Screenshot des X11-Terminal-Emulators xterm auf einer GNOME-Arbeitsfläche.


Erläuterungen im Text

Sehen wir uns xterm näher an. Seine Bedeutung liegt weniger im unmittelbaren
Gebrauch, sondern darin, dass er den Ausgangspunkt für jüngere Emulatoren gebil-
det hat. Abbildung 3.15 zeigt einen Screenshot des Emulators auf einer GNOME-
Arbeitsfläche. Wir erkennen eine Titelleiste, weiter keine Verzierungen. Unter KDE
sieht die Leiste geringfügig kreativer aus, wie aus Abbildung 3.16 auf Seite 230 er-
sichtlich. Links in der Titelleiste ist der Knopf für das Fenster-Menü angebracht, des-
sen Punkte von Minimieren bis Schließen reichen, wie bei anderen Fenstern. Rechts
in der Leiste finden wir drei Knöpfe für Minimieren, Maximieren und Schließen als
Alternative zu dem eben genannten Menü. So weit ist das Standard für alle Fenster
einer Arbeitsfläche.
Bewegen wir den Mauscursor in das xterm-Fenster, drücken die <ctrl>-Taste
und gleichzeitig die linke Maustaste, erscheint ein spezifisches Menü Main Options
mit folgenden den xterm-Prozess betreffenden Punkten:
• Secure Keyboard (Vorgabe: off) schaltet in einen Modus, in dem Tastatureinga-
ben nur an das jeweilige xterm gehen und nicht an weitere Clients, ein etwas
228 3 X Window System (X11) und Arbeitsumgebungen

erhöhter Schutz bei der Eingabe von Passwörtern, aber kein umfassendes Sicher-
heitskonzept. Das Fenster kehrt bei Erfolg die Farbe um.
• Allow SendEvents (Vorgabe: false) erlaubt anwendungsspezifische Tastatur- oder
Mauseingaben (events), die via X-Server an andere Anwendungen gesendet wer-
den, unter Umständen eine Sicherheitslücke (unerwünschte Fernsteuerung von
X11-Prozessen).
• Redraw Window Aufforderung, das Fenster neu zu zeichnen, harmlos,
• Print Window sendet den Textinhalt des Fenster an ein Programm, das in den
X-Ressourcen ($HOME/.Xresources) festgelegt ist, siehe Abschnitt 3.10 X-
Ressourcen auf Seite 219. Ist nichts festgelegt, tut sich nichts, insofern harmlos.
• print-redirect (Vorgabe: off) zum Ein- und Ausschalten eines Druckers, sofern
entsprechend konfiguriert. Terminals in Hardware verfügten über einen seriellen
Druckeranschluss, daher stammen diese beiden Eigenschaften.
• 8-Bit Controls ausgegraut, das heißt unwirksam; xterm schickt normalerwei-
se Kontrollsequenzen aus einem Escape-Zeichen, gefolgt von einem siebenbit-
tigen ASCII-Zeichen. Falls ein VT220-Terminal emuliert wird, werden VT220-
spezifische achtbittige Kontrollzeichen im Bereich 128 bis 159 gesendet.
• Back Arrow Key (BS/DEL) legt fest, ob die Backspace-Taste ein Backspace-
Zeichen (ASCII-Nr. 8) oder ein Delete-Zeichen (ASCII-Nr. 127) schickt.
• Alt/NumLock Modifiers legt fest, wie die <alt>- und die <NumLock>-Tasten
aufgefasst werden sollen.
• Meta Sends Escape legt fest, ob <ctrl>-Zeichenpaare in ein Escape-Zeichen
gefolgt von dem zweiten Zeichen umgewandelt werden sollen.
• Delete is DEL legt fest, ob die <del>-Taste ein Delete-Zeichen (ASCII-Nr. 127)
oder eine VT220-Escape-Zeichenfolge sendet.
• Old Function-Keys, Sun Function-Keys legt fest, ob die Funktionstasten ent-
sprechend einem VT- oder einem Sun-Terminal arbeiten sollen.
• VT220 Keyboard Die Tastatur wird als eine VT220-Tastatur angesehen, ein-
schließlich der Funktionstasten.
• Send STOP Signal, Send CONT Signal, Send INT Signal, Send HUP Signal,
Send TERM Signal, Send KILL Signal schickt das jeweilige Signal an die
Prozessgruppe von xterm, was auch einfacher mit dem entsprechenden kill-
Kommando oder einem <ctrl>-Zeichenpaar bewirkt werden kann.
• Quit schickt das SIGHUP-Signal (Nr. 1) an die Prozessgruppe von xterm und
beendet damit den Emulator und alle aus ihm gestarteten Prozesse. Geht auch
über das Fenstermenü (links oben), den x-Knopf (rechts oben), das Zeichenpaar
<ctrl>+<d>, das Kommando kill -1 0 oder das Kommando exit.
Ist man mit der Konfiguration einverstanden, bleibt als wichtigster Punkt das Neu-
zeichnen des Fensters (Redraw Window).
Drücken wir zusammen mit der <ctrl>-Taste die mittlere Maustaste (X11 geht
stets von einer dreitastigen Maus aus), erscheint ein Menü VT Options mit folgenden
Punkten aus der Konfiguration eines VT102-Terminals:
• Enable Scrollbar richtet einen Rollbalken (Laufleiste) am linken Fensterrand
ein. Wenn sich der Mauscursor im Balken aufhält, bewegt ein Linksklick die
3.12 Terminal-Emulatoren (xterm u. a.) 229

Zeilenmarke im Balken nach unten, ein Mittelklick auf die Cursorposition und
ein Rechtsklick nach oben.
• Enable Jump Scroll neue Zeilen erscheinen mit der Geschwindigkeit, wie sie der
Rechner liefert. Bei Smooth Scroll wird die Geschwindigkeit begrenzt, sodass
das Auge folgen kann. Nicht unterstützt, wirkungslos.
• Enable Reverse Video für den Screenshot aktiviert, um Druckerschwärze zu spa-
ren, kehrt die Farben um.
• Enable Auto Wraparound schaltet den automatischen Zeilenumbruch bei über-
langen Textzeilen ein, andernfalls werden alle überzähligen Zeichen in die letzte
Position (rechts) geschrieben.
• Enable Reverse Wraparound kehrt in dem umgebrochenen Teil einer Zeile die
Farben um. Nicht unterstützt, wirkungslos.
• Enable Auto Linefeed Falls eingeschaltet, wird automatisch jedem Carriage Re-
turn (ASCII-Nr. 13) ein Line Feed (ASCII-Nr. 10) hinzugefügt.
• Enable Application Cursor Keys, Enable Application Keypad falls eingeschal-
tet, kann eine Anwendung von den jeweiligen Tasten Gebrauch machen, die dann
einen anderen Code senden als die entsprechenden Tasten im Haupttastenblock.
• Scroll to Bottom on Key Press springt bei einer Tasteneingabe in die unterste
Zeile, nicht unterstützt.
• Scroll to Bottom on Tty Output springt bei einer Ausgabe auf den Bildschirm in
die unterste Zeile, nicht unterstützt.
• Allow 80/132 Column Switching schaltet zwischen 80 und 132 Zeichen Fenster-
breite hin und her. Uninteressant, da man anders als bei einem VT102 in Hard-
ware mit der Maus das Fenster in die Breite und Länge ziehen kann.
• Enable Curses Emulation Das VT102 wies einen Fehler namens Curses Bug
auf, der hiermit umgangen werden kann.
• Enable Visual Bell Ersetzt das akustische ASCII-Zeichen Nr. 7 (bel,
<ctrl>+<g>) durch ein Zucken (flashing) des Fensterinhalts, falls absolu-
te Ruhe gefordert oder das Gehör des Benutzers geschädigt ist.
• Enable Pop on Bell falls aktiviert, schiebt die Steuersequenz <ctrl>+<g> das
Fenster auf dem Schirm nach vorn.
• Enable Margin Bell lässt die Glocke ertönen, wenn sich die Texteingabe dem
rechten Bildrand auf 8 Zeichen nähert (war bei Schreibmaschinen üblich).
• Enable Blinking Cursor lässt den Eingabecursor blinken, was stärker auffällt.
• Enable Alternate Screen Switching erlaubt, zwischen dem normalen und einem
alternativen Terminal umzuschalten. Uninteressant, da wir uns beliebig viele Ter-
minals auf dem Bildschirm einrichten können.
• Enable Active Icon ausgegraut, das heißt unwirksam;
• Do Soft Reset fordert zu einem vorsichtigen Reset auf, das nur die Scrollbereiche
zurücksetzt, ziemlich uninteressant.
• Do Full Reset fordert zu einem vollen Reset auf, das die Anfangseinstellungen
von xterm wiederherstellt und das Fenster putzt, gelegentlich brauchbar.
• Reset and Clear Saved Lines wie vorstehend, löscht darüber hinaus Zeilen im
Puffer (saved lines).
230 3 X Window System (X11) und Arbeitsumgebungen

• Show Tek Window öffnet ein Terminalfenster vom Typ Tektronix 4014, belässt
aber den Fokus im ursprünglichen Fenster. Nur für Tektronix-Fans interessant.
• Switch to Tek Mode wie vorstehend, fokussiert aber die Eingabe auf das
Tektronix-Fenster. Zwischen beiden Fenstern lässt sich entsprechend der Fokus
Policy wechseln.
• Hide VT Window wie vorstehend, lässt das VT-Fenster vom Schirm verschwin-
den. Im Menü TeK Options findet sich ein Punkt zum Hervorzaubern des VT-
Fensters.
• Show Alternate Screen wechsele auf den zweiten Schirm im Terminalspeicher,
uninteressant, siehe oben.
Wer schon einmal ein serielles Terminal konfiguriert oder beschrieben hat – es
braucht kein VT102 zu sein – wird sich an Vieles erinnern. Auch ein altes, beim
Aufräumen übersehenes Terminal-Handbuch erklärt einige der vorstehenden Begrif-
fe. Die meisten dieser Optionen lässt man am besten in Ruhe, weil sie für ein virtu-
elles Terminal wenig Sinn ergeben.

Abb. 3.16: Screenshot des Terminal-Emulators xterm auf einer KDE-Arbeitsfläche mit
einem in .Xresources gewählten großen Font, hier Lucidasanstypewriter-24. Der Bild-
schirm ist ein 17-Zöller mit einer Auflösung von 800 x 600 und dürfte für diesen Font größer
sein. Mittlerweile sind flache 19-Zöller die Regel.

Drücken wir schließlich zusammen mit der <ctrl>-Taste die rechte Maustaste,
erhalten wir ein Menü VT Fonts mit folgenden Punkten:
3.12 Terminal-Emulatoren (xterm u. a.) 231

• Default setzt den verwendeten Font auf den Defaultfont.


• Unreadable, Tiny bis Huge setzen den Font auf durch die Nr. 1 bis 6 in den
Ressourcen definierten Fonts. Unreadable ist winzig und – wie der Name besagt
– nicht lesbar. Tiny ist kaum besser. Wem Huge noch nicht groß genug ist, der
definiert in den Ressourcen einen noch größeren Font. Dazu schreibt er in die
Datei $HOME/.Xresources die beiden Zeilen:
*fontMenu*font6*Label: Riesig
*VT100*font6: 12x24

und startet seine Sitzung erneut. Der Name 12x24 stammt aus der Datei /etc/
X11/fonts/misc/xfonts-base.alias; es kann natürlich auch der Na-
me eines anderen X11-Fonts möglichst mit fester Schrittweite sein. Die Zeichen
sind zwar groß, aber etwas mager. Der Font lucidasanstypewriter-24 oder gar
lucidasanstypewriter-bold-24 kommt kräftiger. Abbildung 3.16 zeigt den Erfolg.
Andere Terminal-Emulatoren werden von der Einstellung nicht beeinflusst, son-
dern sind eigens zu konfigurieren.
• Escape Sequence, Selection ausgegraut, das heißt unwirksam; setzt und benennt
bestimmte Fonts.
• Line-Drawing Characters falls eingeschaltet, verwendet xterm seine eigenen
Linien in Tabellen und dergleichen, andernfalls werden Linien aus dem jeweili-
gen Font genommen, soweit vorhanden.
• Doublesized Characters falls eingeschaltet, bittet der Emulator den Fontserver
um einen vergrößerten Font. Wie der Fontserver reagiert, ist eine andere Frage.
Halbiert die Anzahl der Zeichen je Zeile. Nicht unterstützt, wirkungslos.
• True-Type Fonts ausgegraut, das heißt unwirksam, da nicht eingerichtet..
• UTF-8 veranlasst xterm, vorübergehend UTF-8 (Unicode Transformation For-
mat 8) für die Ein/Ausgabe zu verwenden. Sinnvoll, falls eine Anwendung UTF-
8 verwendet und dies nicht der lokalen Einstellung entspricht. Ein geeigneter
Font ist Voraussetzung für den ungetrübten Genuss dieser Fähigkeit.
Ein viertes Menü Tek Options steht nur im Tektronix-Fenster zur Verfügung und soll
uns nicht interessieren. Die meisten Auswahlen lassen sich auch durch Optionen in
der Kommandozeile beim Aufruf von xterm oder durch Einträge in den Dateien
.Xdefaults oder .Xresources treffen.
Das Kommando resize, in einem xterm-Fenster aufgerufen, gibt die Größe
des Fensters in einer Form an, die von einer Shell weiterverarbeitet werden kann.
Falls man Probleme mit Kommandos hat, die die Fenstergröße kennen müssen und
sich bei Änderungen nicht von sich aus anpassen, sehe man sich die Manualseite zu
resize an.
Das Werkzeug screen wird in einem Terminalfenster oder sinnvoller auf einer
echten oder virtuellen Konsole aufgerufen und erzeugt dort neue VT100-Terminals,
zwischen denen man wechseln kann. In jedem Terminal kann ein anderes Programm
laufen, als Vorgabe eine Shell. Man kann sich screen wie einen seriellen Multiple-
xer vorstellen, der aus einem Terminalanschluss mehrere macht und auch gleich noch
232 3 X Window System (X11) und Arbeitsumgebungen

die Terminals dazu liefert. In Situationen, wo man nur eine Verbindung zu einem ein-
zigen Terminal hat, erreicht man so annähernd den Komfort einer Arbeitsumgebung
mit mehreren Arbeitsflächen. Beim Arbeiten in einer Arbeitsumgebung wie GNO-
ME oder KDE stehen andere, elegantere Wege zum Wechseln zwischen mehreren
Aufgaben zur Verfügung.
Es würde zu weit führen, auch die anderen Terminal-Emulatoren ausführlich zu
erläutern. In ihrer Funktionalität sind sie ähnlich, in ihrer Benutzung unterscheiden
sie sich in einigen Punkten. Die neueren verfügen über eine Menüleiste unterhalb
der Titelleiste und vermeiden den Aufruf der Menüs mittels <ctrl>-Taste und
Mausklicks. Optionen, die nur bei einem VT102 in Hardware sinnvoll waren, fehlen.
Wir wollen uns aber noch eine recht praktische Fähigkeit vom GNOME-Terminal
und der KDE Konsole ansehen. Klickt man im GNOME-Terminal auf den Menü-
punkt Datei -> Reiter öffnen, so ersetzt sich nach der Auswahl eines Profils das
bisherige Terminal durch ein weiteres. Gleichzeitig erscheint unter der Menüleiste
eine Leiste mit den Bezeichnungen der beiden Fenster, Registerkarten oder Reiter.
Anklicken bringt das jeweilige Terminal nach vorn. Auf diese Weise lassen sich auf
einer Arbeitsfläche in einem Fenster mehrere Terminals gleichzeitig öffnen, von de-
nen immer nur eines sichtbar ist. Arbeitet man beispielsweise wegen eines kleinen
Bildschirms gern mit maximierten Fenstern und möchte Texte vergleichen, geht das
schnell und einfach mit derartigen Reitern. Das Dateimenü unterscheidet logischer-
weise zwischen Fenster schließen und Reiter schließen. Sieht man sich die Prozes-
se an, stellt jeder Reiter eine Shell (Bash) als Kindprozess des GNOME-Terminal-
Prozesses dar. Es stecken also mehrere Shells hinter einem Fenster. Die Kavallerie
reitet auch für den GNOME-Web-Browser Epiphany.
Bei KDE lauten die Menüpunkte Sitzung -> Neues Befehlsfenster beziehungs-
weise Sitzung -> Sitzung schließen, während Sitzung -> Beenden die Konsole been-
det. Ein Blick in die Prozessliste zeigt, dass eine Sitzung eine Shell als Kindprozess
der Konsole ist. Die Sitzungen werden per Vorgabe in einer Leiste am unteren Fens-
terrand aufgelistet.

3.13 Xprint – das X11-Drucksystem

Xprint ist ein netzfähiges Drucksystem, welches das X11-Protokoll verwendet, und
auf http://xprint.mozdev.org/ beheimatet, einem Projekt bei X.org. Es
stellt eine eingeschränkte Alternative zu Drucksystemen wie System-V-Drucken,
Berkeley-Drucken oder CUPS dar, die ebenfalls das Drucken im Netz erlauben, aber
andere Protokolle benutzen und in Abschnitt 9.7 Drucksysteme auf Seite 422 erläu-
tert sind. Insbesondere arbeitet es mit dem Web-Browser Mozilla zusammen und
bereichert diesen um einige Druckoptionen. Bei Debian ist es in die Pakete xprint
und xprint-common verpackt.
Darüber hinaus ist Xprint die Typenbezeichnung einiger Drucker der Fir-
ma Rank-Xerox sowie eines Ausgabemanagementsystems der Firma Océ Soft-
ware Laboratories Namur S. A., das von Fujitsu-Siemens verwendet wird
(http://manuals.fujitsu-siemens.com/dynaweb/). Es scheint auch
3.14 Arbeiten mit X11 233

eine Delphi-Komponente gleichen Namens zur geräteunabhängigen Druckeraus-


gabe zu geben. Jedenfalls ist die Bezeichnung Xprint mehrdeutig; man muss sich
vergewissern, was gemeint ist.
Der Gedanke hinter Xprint ist, dass Drucker oder Dateien in Druckformaten wie
PCL, PostScript oder PDF eine weitere Ausgabemöglichkeit neben dem Bildschirm
sind, also für X11 nichts Neues. Einige Parameter sind anders, eine Tastatur gibt es
nicht, aber sonst passt alles in das Konzept eines X-Servers. Bis das Drucksystem
in X-Server wie XFree86 oder X.org integriert ist, bringt es einen eigenen X11-
Printserver namens Xprt mit, in den Debian-Paketen enthalten. Es ist schwierig zu
erkennen, worin der Vorteil von Xprint gegenüber CUPS liegen soll.

3.14 Arbeiten mit X11

Wir haben bereits darauf hingewiesen, dass das Erscheinungsbild des Desktops und
der Fenster in den Zuständigkeitsbereich der Fenster-Manager fällt und von X11 in-
sofern unabhängig ist. Hierzu gehört auch die Frage, wie Programme gestartet wer-
den und welche Funktionen mit Maustasten verbunden sind. Es gibt jedoch eini-
ge Eigenschaften von X11, die sich von den grafischen Benutzeroberflächen ande-
rer Betriebssysteme unterscheiden und unabhängig vom jeweiligen Fenster-Manager
sind.

3.14.1 Cut and Paste

Text kann in fast allen Anwendungen mit der linken Maustaste markiert und im sel-
ben oder in einem anderen Fenster mit der mittleren Maustaste eingefügt werden.
Das funktioniert auch über die Grenze einer Arbeitsfläche hinweg. Es ist dabei nicht
notwendig, zunächst in einem Menü ein Kommando zum Kopieren in die Zwischen-
ablage und hinterher ein Kommando zum Einfügen aus der Zwischenablage zu ver-
wenden.

3.14.2 Rollbalken (Laufleisten, Scrollbars)

Ältere X11-Anwendungen sind oft mit Rollbalken (scrollbar, Laufleiste, Leiste am


seitlichen Rand eines Fensters, mit dem der Fensterinhalt bewegt werden kann) aus-
gestattet, die anders benutzt werden, als wir es gewohnt sind. Ein Beispiel für ei-
ne solche Anwendung ist der Terminal-Emulator xterm. Bei diesen Anwendun-
gen wird der Fensterinhalt mit der linken Maustaste vorwärts und mit der rechten
Maustaste rückwärts bewegt, und zwar unabhängig davon, wo man auf den Rollbal-
ken klickt. Mit der mittleren Maustaste wird der Rollbalken an die Position bewegt,
an der sich der Mauscursor befindet.
234 3 X Window System (X11) und Arbeitsumgebungen

3.14.3 Kontextmenüs

Mit vielen Fenster-Managern und Anwendungen erreichen Sie Funktionen dadurch,


dass Sie mit der Maus auf das Fenster der Anwendung bzw. auf den Bildschirmhin-
tergrund klicken. Manche Funktionen lassen sich nur mit diesem Verfahren errei-
chen. Es erscheint dann ein Menü, aus dem Kommandos ausgewählt werden. Teil-
weise müssen solche Menüs festgehalten werden, das heißt, sie werden nur so lan-
ge dargestellt, wie die Maustaste gedrückt ist. Andere Menüs bleiben so lange auf
dem Bildschirm, bis ein Kommando ausgewählt oder in einen anderen Bereich des
Bildschirms geklickt worden ist. Linker, mittlerer und rechter Maustaste sind dabei
unterschiedliche Menüs zugeordnet.

3.14.4 Screenshots

Zum Erzeugen von Bildschirmabzügen oder -kopien8 (E: screenshot, F: capture


d’écran) bringt X11 das Werkzeug xwd (X Window dump, Paket xbase-clients) mit.
Darüber hinaus erlauben GNOME und KDE durch Anklicken eines Menüpunktes
wie Anwendungen -> Zubehör -> Bildschirmfoto aufnehmen oder eines Knopfes
im Panel oder durch Betätigen der Taste <Print Screen>, den ganzen Bild-
schirm oder ein einzelnes Fenster zu kopieren, auch zeitverzögert. Die dahinter ste-
henden Programme heißen gnome-screenshot aus dem Paket gnome-utils bzw.
ksnapshot. Auch das Grafikwerkzeug GIMP verfügt mittels eines Menüpunktes
Datei -> Holen -> Screen Shot über die Fähigkeit, ebenso das Kommandozeilen-
Werkzeug imagemagick. Auf einer virtuellen Konsole funktionieren die Verfah-
ren mangels X11 nicht; man hat aber auch selten das Bedürfnis, einen reinen Text-
bildschirm zu verewigen. Das Speichern von Schnappschüssen aus Videos ist ei-
ne andere Baustelle. Für diese Aufgabe bringen Videobetrachter eigene Funktionen
mit.

8
Das Wort Bildschirmfoto trifft die Sache nicht, da eben kein Foto des Bildschirms aufge-
nommen, sondern der Bildschirmspeicher ausgelesen wird.
4
Internet

Das Internet ist heute allgegenwärtig und Voraussetzung für viele Tätigkeiten auf
einem Rechner. Wir sehen uns seinen Aufbau und einige zu seinem Verständnis not-
wendige Begriffe und Konzepte an.

4.1 Entstehung
Die Legende berichtet, dass in den sechziger Jahren des vorigen Jahrhunderts die
nordamerikanische Firma RAND einen Vorschlag ausbrüten sollte, wie in den USA
nach einem atomaren Schlag die Kommunikation der Streitkräfte und der Behörden
aufrecht erhalten werden könnte. Zwei Grundsätze kamen dabei heraus:
• dezentrale Steuerung; keine Zentrale, von der alles abhängt,
• kein Verlass auf das Funktionieren bestimmter Verbindungen, das heißt eine
weitgehend vermaschte Topologie etwa wie ein Straßennetz, in dem bei Unfällen
oder Bauarbeiten der Verkehr umgeleitet wird.
Ungefähr zur selben Zeit hatten die Advanced Research Projects Agency (ARPA)
und einige nordamerikanische Universitäten Bedarf an Rechenleistung auf Groß-
rechnern, aber wenig Geld. Was lag näher, als die vorhandenen Großrechner über
Telefonleitungen zu vernetzen, um sie besser auszunutzen? Aber: die Großrechner
waren zueinander völlig inkompatibel, sie redeten nicht miteinander. Also war ein
Zwischenglied zwischen Rechner und Netz erforderlich, ein Interface Message Pro-
cessor oder IMP. Verwirklicht wurde gegen Ende 1969 ein dezentral organisiertes
Netz aus vier Knoten in der Universität von Kalifornien in Los Angeles (UCLA), der
Universität von Kalifornien in Santa Barbara (UCSB), der Universität von Utah (U)
in Salt Lake City und dem Stanford Research Institute (SRI) in Menlo Park, das nach
dem Geldgeber ARPANET (Advanced Research Projects Agency Network) genannt
wurde. Es verwendete eine paketweise Übertragung der Daten. Die beiden ersten
Dienste waren Telnet und FTP.
Das Netz wuchs, Email kam hinzu und ließ den Verkehr in die Höhe schnel-
len, die Protokolle (TCP/IP) wurden ausgearbeitet, andere Netze übernahmen die
236 4 Internet

Protokolle und verbanden sich mit dem ARPANET. Da sich UNIX zur selben Zeit
entwickelte und einige Voraussetzungen für ein heterogenes Netz mitbrachte, spiel-
ten UNIX-Rechner im ARPANET von Anbeginn eine bedeutende Rolle. England
und Norwegen bauten 1973 die ersten europäischen Knoten auf. Im Jahr 1984 (1000
Knoten) schloss sich die National Science Foundation (NSF) an, die in den USA
etwa die Rolle spielt wie hierzulande die Deutsche Forschungsgemeinschaft (DFG).
Das ARPANET starb 1989 mit 150 000 Knoten. Seine Aufgabe als Mutter des welt-
weiten Internet war erfüllt. Die beiden RFCs 1122 und 1123 sowie der RFC 1462 =
FYI 20 vermitteln eine Übersicht über die Grundgedanken des Internets.
Anfang der neunziger Jahre des vorigen Jahrhunderts wurde am CERN in Genf
ein Netzdienst entwickelt, der vor allem den Austausch technischer und wissen-
schaftlicher Dokumente im Forschungszentrum erleichtern sollte. Heraus kam eine
Lösung, die wenige Jahre später zu einem weltweiten Netz von Informationsservern
führte, dessen Benutzung auch für technisch weniger Interessierte so selbstverständ-
lich geworden ist wie das Lesen von Zeitungen. Die Rede ist vom World Wide Web,
kurz Web oder WWW, das viele Benutzer mit dem Internet gleichsetzen, obwohl es
nur ein Dienst von vielen im Internet ist. Richtig los ging es 1993, als mit Mosaic ein
grafikfähiger Web-Browser zum kostenfreien Herunterladen angeboten wurde und
grafikfähige Hardware erschwinglich geworden war.
Heute ist das Internet die Wunderwaffe gegen Dummheit, Armut, Pestilenz, Er-
werbslosigkeit, Inflation und die Sauregurkenzeit in den Medien. Der RFC (Request
For Comments) 1462 alias FYI (For Your Information) 20 What is the Internet? von
1993 sieht das nüchterner. Das Internet ist ein Zusammenschluss vieler regionaler
Netze, verbunden durch die TCP/IP-Protokolle, die Sprache des Internets. Eine an-
dere Betrachtungsweise versteht unter dem Internet in erster Linie die Benutzer des
Netzverbundes, und eine dritte sieht vorrangig die Informationen, die der Netzver-
bund bereithält oder übermittelt. Alle drei Definitionen des Internets sind richtig, für
sich allein jedoch einseitig und unvollständig.
Im Internet gibt es keine zentrale Instanz, die alles bestimmt und regelt. There
is no governor anywhere. Das grenzt an Anarchie und funktioniert großartig. Die
Protokolle entstehen auf dem Wege von netzweiten Vereinbarungen (Requests For
Comments). Niemand ist verpflichtet, sich daran zu halten, aber wer es nicht tut,
steht bald einsam da. Nirgendwo sind alle Benutzer, alle Knoten, alle Newsgruppen,
alle WWW-Server registriert. Das Wort alle kommt nur einmal im Internet vor: Alle
Teilnehmer verwenden die Protokolle der TCP/IP-Suite.
Eine gezielte Störung oder Beeinflussung wichtiger Knoten (Verbindungsrech-
ner, Server) des Internet kann zwar größere Benutzergruppen abklemmen, aber nie-
mals das ganze Internet lahmlegen. Da die wichtigen Knoten unterschiedlichen Be-
hörden oder Organisationen unterstehen, ist es unwahrscheinlich, dass sie alle gleich-
zeitig streiken.
Hält man sich vor Augen, wie viele der Selbstverständlichkeiten der heutigen
Computerey vor über vierzig Jahren von Wissenschaftlern in Universitäten und For-
schungslabors wie Bell entwickelt worden sind, denen Zeit und Geld zum Spinnen
und Spielen gegeben wurde, erkennt man, was Grundlagenforschung bedeutet. Zwei-
tens sieht man, wie sich einige Entwicklungen gegenseitig bedingen: ohne die Halb-
4.2 Netzstrukturen 237

leitertechnik wären Rechner und Netze nicht populär geworden, und ohne das Inter-
net gäbe es weder Linux noch das Web. Debian auch nicht.

4.2 Netzstrukturen
Was ist ein Netz? Zunächst nicht mehr als ein Wirrwarr von Kabeln und Kisten,
die alle irgendwie miteinander verbunden sind. Vermutlich schwirren auch noch
ein paar drahtlose Verbindungen durch die Luft. Im Falle des Internets handelt es
sich sogar um ein ziemlich ausgedehntes Wirrwarr. Es ist klar, dass es innerhalb
eines Netzes eine gewisse Ordnung geben muss, damit die Kommunikation zwi-
schen den Geräten – großenteils, aber nicht nur Rechnern – funktioniert. Die Be-
teiligten schicken sich Daten in Form von Paketen (E: frame, packet, F: paquet)
– wie bei der gelben Post, nicht wie beim althergebrachten Telefon. Das nutzt die
Transportwege besser aus. Zur Ergänzung unserer Worte weisen wir auf das Linux
Networking HOWTO (1999) bei TLDP und das Linux networking-concepts HOW-
TO (2001) von PAUL RUSTY RUSSELL bei http://www.netfilter.org/
documentation/HOWTO/ hin. Für ein verregnetes Wochenende reicht The Li-
nux Network Administrator’s Guide (2000, 500 Seiten) von O LAF K IRCH und T ER -
RY DAWSON , ebenfalls bei TLDP. Ein Skriptum namens Grundlagen Computernet-
ze (2005) von J ÜRGEN P LATE auf http://www.netzmafia.de/skripten/
hilft über ein zweites Wochenende. Sehen wir uns zunächst den Aufbau eines Net-
zes an. Wir unterscheiden:
• die Verkabelung – drahtlose Verbindungen eingeschlossen – die man sehen kann
und die bei der Einrichtung viel Mühe macht (Geld kostet),
• die elektrische Verbindung oder Verschaltung, die unabhängig ist von der Verka-
belung,
• die logische Verbindung, die wiederum unabhängig ist von den beiden anderen.
Es gibt ein inzwischen ausgestorbenes Beispiel für die Unabhängigkeit der drei Ver-
bindungsebenen voneinander, das Arcnet, ein früher Konkurrent des Ethernets. Die
Verkabelung war ein Stern, die Rechner waren sternförmig an einen zentralen Hub
angeschlossen. Elektrisch waren die Kabel im Hub parallel geschaltet, was auch als
Bus bezeichnet wird. Logisch dagegen bildeten die Rechner einen Ring, in dem ein
Token kreiste, eine Art von Sprecherlaubnis. Damit haben wir drei Begriffe für Netz-
topologien genannt: Stern, Bus und Ring. Hinzu kommt das vermaschte Netz, in dem
jeder mit jedem verbunden ist. Als Verkabelung lässt sich das nur bei geringen Teil-
nehmerzahlen verwirklichen. In Reinkultur kommen die vier Netztopologien nur auf
kleinem Raum vor. In lokalen Netzen (Local Area Network, LAN) wird heute eine
je nach Größe mehrstufige sternförmige Verkabelung bevorzugt, mit Netzkomponen-
ten wie Hubs, Switches oder Access Points im Zentrum. Der Aufwand ist zwar hoch,
aber die Ausfallsicherheit auch, insbesondere wenn man die Zentren gut pflegt.
Die Verbindungen bestehen aus Kupferkabeln, Lichtwellenleitern (Glasfaserka-
bel) oder drahtlosen Strecken zwischen zwei Antennen. Im Fall des Ethernets ge-
nügen die lokalen Kabel meist einer Spezifikation, die als Category 5 (Cat5) be-
zeichnet wird, allgemeiner als Twisted Pair. weil jeweils zwei zusammengehörende
238 4 Internet

Adern miteinander verdrillt sind. Früher waren dicke oder dünne Koaxialkabel ver-
breitet und liegen vielerorts noch herum. Auch bei Lichtwellenleitern gibt es mehre-
re Typen. Lokale Funkstrecken werden als Wireless Local Area Network (WLAN)
nach dem Standard IEEE 802.11 aufgebaut. Kleine drahtlose Netze lassen sich auch
mit Bluetooth-Technik nach IEEE 802.15.1 oder mit Ultrabreitbandfunk (Ultra Wide
Band, UWB) verwirklichen; die Protokolle sind verabschiedet, auf dem Markt gibt
es die erforderlichen Komponenten. Bluetooth ist älter und daher weiter entwickelt
als UWB. Es ist jedoch anzumerken, dass Bluetooth und UWB zum Verbinden pe-
ripherer Geräte wie Tastatur, Drucker, Kopfhörer/Mikrofon (Headset), Mobiltelefon,
GPS-Empfänger oder Stereoanlage mit einem Rechner entwickelt worden sind, nicht
zum Vernetzen von Rechnern. Die Reichweite und die Übertragungsgeschwindigkeit
aller Verbindungsarten sind beschränkt.
Ein selbständiges Gerät im Netz wird allgemein als Knoten (E: node, F: nœud)
bezeichnet. Das kann ein Rechner sein, aber auch ein Drucker mit eigenem Netz-
anschluss, ein VoIP-Telefon oder eines der zahlreichen Netzelemente wie Switches
oder Gateways. In manchen Zusammenhängen wird der Begriff eingeschränkt auf
adressierbare Geräte oder auf Verbindungspunkte mehrerer Kommunikationswege
(Vermittlungspunkte). Auch der Begriff Host bezeichnet einen Knoten im Netz, un-
ter Umständen eingeschränkt auf Rechner. Ein besserer Drucker enthält jedoch einen
Rechner mit Prozessor und Speicher, sodass es schwierig ist, Grenzen zu ziehen. Wir
übergehen solche Feinheiten.
Ein Rechner verfügt über einen auf dem Mainboard integrierten oder als Kar-
te in einen PCI-Slot eingesteckten Netzadapter, heutzutage überwiegend mit einer
RJ45-Buchse versehen. Die Adapter unterscheiden sich außer durch Preis und Ge-
schwindigkeitsklasse darin, wie viel Arbeit sie der CPU abnehmen oder aufbür-
den. Dazu kommen Fähigkeiten wie das Booten vom Netz (PXE = Preboot Exe-
cution Environment), Wake-on-LAN (WOL, ferngesteuertes Einschalten des Rech-
ners), ferngesteuerte Verwaltung über das Simple Network Management Protocol
(SNMP), Verschlüsselung des Netzverkehrs in Silizium oder Port Trunking, auch
Bonding oder Bündelung genannt, das heißt Zusammenschalten mehrerer Adapter
zu einem logischen Kanal. Wird es eng im Gehäuse, helfen Karten mit zwei bis
vier Ports aus der Klemme. Bei Bedarf schaue man sich http://sourceforge.
net/projects/bonding/, den Guide to IP Layer Network Administration with
Linux (2003) von M ARTIN A. B ROWN auf http://linux-ip.net/ und das
Debian-Paket ifenslave an. Ferner sind das Debian-Paket bridge-utils und das Ether-
net Bridge + netfilter Howto (2005) von N ILS R ADTKE auf TLDP von Interesse.
Einige weitere HOWTOs zum Thema Bridging sind älteren Datums.
Ein Hub (Nabe, Verteiler) ist ein Kästchen, das aus einem Netzanschluss (Port)
mehrere macht. Eintreffende Datenpakete werden an alle anderen Anschlüsse ge-
schickt. Die Bedeutung von Hubs ist mit der Verbreitung von Fast Ethernet zurück-
gegangen. Es spricht aber nichts dagegen, sie als preisgünstige Lösung in kleinen,
schwach belasteten Netzen oder Netzabschnitten weiterhin einzusetzen.
Ein Switch (Schalter, Weiche) hat die gleichen Anschlüsse wie ein Hub. Er schal-
tet jedoch kurzzeitig eine Verbindung vom Sender zum Empfänger durch; die ande-
ren Anschlüsse bemerken nichts davon. Das hat Geschwindigkeitsvorteile in höher
4.2 Netzstrukturen 239

belasteten Netzen und verringert die Gefahr des unberechtigten Mithörens. Es gibt
aber Tricks (MAC-Flooding), einen Switch dahin zu bringen, dass er sich wie ein
Hub verhält. Hat man mehr als etwa 20 Knoten im LAN, sollte man die Mehr-
kosten für verwaltbare (managebare, manageable) Switches nicht scheuen, die es
ermöglichen, die logische Struktur eines Netzes von seiner geografischen zu tren-
nen. Beispielsweise können Teilnehmer in verschiedenen Gebäudeteilen logisch zu
einem virtuellen Subnetz (Virtual Local Area Network, VLAN) zusammengefasst
werden. Port Trunking, auch Link Aggregation oder NIC Teaming genannt, ist das
Zusammenfassen mehrerer Anschlüsse zwecks Erhöhung der Geschwindigkeit oder
Ausfallsicherheit, bei Servern oder Gebäudeverbindungen interessant.1 Port Mirro-
ring ist das Versenden der für einen Port bestimmten Datenpakete zusätzlich an einen
zweiten Port, meist zwecks Netzanalyse. Verwaltbare Switches verfügen über weite-
re Fähigkeiten, die das Leben des Netzverwalters bereichern. Große Switches lassen
sich über einen besonderen Anschluss (Matrix Port) miteinander koppeln, sodass sie
wie ein einziger Switch mit vielen Ports wirken (stackable switch). Soll ein Switch
in einem Arbeitszimmer untergebracht werden, ist an das Geräusch eines etwaigen
Lüfters zu denken.
Ein Media Converter passt unterschiedliche Leitungstypen aneinander an, bei-
spielsweise Lichtwellenleiter (Glasfaser) an Kupferkabel. Braucht man manchmal,
kann aber auch durch Einschübe (Module) in Switches oder ähnlichen Netzelemen-
ten verwirklicht werden.
Ein Router verbindet zwei Netze – wie eine Brücke – achtet aber auf die Emp-
fängeranschrift der Datenpakete und reicht nur Pakete weiter, die für das jeweils an-
dere Netz bestimmt sind. Der Kasten, der das lokale Netz mit dem DSL-Anschluss
zum Internet verbindet, erfüllt Routeraufgaben, ebenso der Kasten, der ein Kabel-
netz (Ethernet) mit einem Funknetz (WLAN) verbindet. Ein Router kann auch durch
einen Rechner mit entsprechender Software verwirklicht werden.
Ein Gateway erfüllt die Aufgabe eines Routers und setzt darüber hinaus Proto-
kolle und weitere Dinge um. Ein DSL-Router ist eigentlich ein Gateway und wird
auch von einigen Herstellern so genannt. Im täglichen Sprachgebrauch wird zwi-
schen Router und Gateway oft kein Unterschied gemacht, weil die Routingfunktio-
nen im Vordergrund stehen (solange der Rest funktioniert).
Eine Firewall (Brandmauer) sieht sich die Datenpakete genau an und lässt sie
nur durch – in beiden Richtungen – wenn sie vorgegebenen Regeln entsprechen. Ei-
ne Firewall kann ein eigener Rechner, aber auch in ein Gateway oder einen Router
integriert sein. Mit ihrer Hilfe wird unerwünschter Datenverkehr ausgefiltert. Auf der
Grenze zwischen lokalem Netz und Internet braucht man eine Firewall (oft in das Ga-
teway integriert), aber auch innerhalb großer lokaler Netze wie einem Campusnetz.
Firewall-Funktionen können sogar auf einem Arbeitsplatzrechner eingerichtet sein
(Personal Firewall), der besonders geschützt werden soll. Diesbezügliche Debian-
Pakete sind in der Abteilung Network der Paketliste zu finden. Eine Firewall ist we-
der ein Spamfilter für Email noch ein Virenscanner, das sind andere Baustellen.

1
Siehe Guide to IP Layer Network Administration with Linux von M ARTIN A. B ROWN .
(2003), unter http://linux-ip.net/.
240 4 Internet

Die deutsche Wikipedia enthält ausführlichere, aber immer noch einführende Ar-
tikel zu den vorstehenden Begriffen. Der Verwalter eines komplexen Netzes – was
nicht zahlenmäßig groß bedeutet – muss sich eingehender mit der Netztechnik be-
fassen als hier vereinfacht dargestellt. Die technischen Möglichkeiten und die An-
forderungen an die Sicherheit sind in der jüngeren Vergangenheit stark gewachsen.
Betrachten wir drei Beispiele für lokale Netze mit Internetanbindung. Das mini-
male Netz besteht aus einem einzigen Rechner, an dessen Parallel- oder USB-Port
ein Drucker angeschlossen ist. Von seiner Ethernetkarte führt ein Kabel unmittelbar
zum DSL-Modem (Internet-Gateway). In älteren Anlagen geht es stattdessen von ei-
nem ISDN- oder Telefonmodem ins Telefonnetz. Da dieser Rechner nach Aufbau
der Verbindung zum Internet-Versorger ein weltweit sichtbarer Knoten im bösen In-
ternet ist, muss er sich selbst vor Angriffen schützen. Bei einer DSL-Verbindung ist
dringend anzuraten, zwischen DSL-Modem und Rechner ein Gateway mit Firewall-
Funktionen zu schalten. Das Kästchen übernimmt den Schutz vor vielerlei Angriffen,
sodass der Rechner entlastet und einfacher zu konfigurieren ist. Derartige Gateways
beinhalten oft einen Switch mit vier Anschlüssen, womit ein Ausbau des lokalen
Netzes vorbereitet ist, siehe Abbildung 16.4 auf Seite 756. Eine beliebte Kombinati-
on verfügt auch noch über einen WLAN Access Point, erkennbar an der Antenne.

Abb. 4.1: Schema eines LANs, SW = Switch, S = Server, GW = Gateway, FW = Firewall, IN


= Internet, A = Arbeitsplatz, D = Drucker, AP = Access Point für WLAN, LT = Laptop mit
WLAN-Adapter. Erläuterungen im Text.

In der nächsten Ausbaustufe finden wir mehrere Rechner im lokalen Netz, die
sich Drucker und DSL-Anschluss teilen. Vielleicht mischen auch einige Laptops
drahtlos mit. Dann brauchen wir im Zentrum einen Hub oder Switch mit entspre-
chend vielen Anschlüssen. Der Drucker sollte nicht mehr über einen Rechner, son-
dern unmittelbar über einen eigenen Ethernetanschluss oder einen externen Print-
4.2 Netzstrukturen 241

Server eingebunden sein. Ein ständig laufender Server für verschiedene Dienste ist
nicht übertrieben. Die obere Grenze für ein solches unstrukturiertes Netz liegt nicht
notwendiger- aber sinnvollerweise bei etwa 20 Teilnehmern. Abbildung 4.1 zeigt
schematisch ein solches LAN mit kleinen Erweiterungen. Aus räumlichen Grün-
den sind nicht alle Teilnehmer direkt mit einem einzigen Switch verbunden, son-
dern schwerpunktmäßig mit untergeordneten Switchen, die ihrerseits an den zentra-
len Switch angeschlossen sind. Sowohl die Verkabelung wie auch die zeichnerische
Darstellung lassen sich vielfältig variieren.

Abb. 4.2: Ausgabe des Werkzeugs lanmap, das eine Karte der Netzverbindungen eines Rech-
ners zeichnet

Werden es mehr, sollte man das lokale Netz in Subnetze unterteilen. Die Sub-
netze werden durch Router – gegebenenfalls Rechner mit Routerfunktionen wie in
Abbildung 4.3 auf Seite 246 dargestellt – miteinander verknüpft. Hier sind manage-
bare Switches gefragt, um die geografische von der logischen bzw. organisatorischen
Struktur zu entkoppeln. Die Subnetze sind durch ein Netz hoher Geschwindigkeit
(Gigabit-Ethernet) miteinander verbunden, ein so genanntes Backbone (Rückgrat),
wofür je nach Entfernungen Lichtwellenleiter erforderlich sein können. Die Netzver-
waltung wird zu einer Aufgabe, die nicht mehr von der Sekretärin nebenbei erledigt
werden kann (Betonung auf nebenbei). Nach oben sind der Ausdehnung eines Net-
zes keine Grenzen gesetzt. Man braucht in großen Netzen wie einem Campusnetz
spezialisierte Mitarbeiter für Teilaufgaben der Netzverwaltung, beispielsweise einen
Postmaster samt Vertreter für die Email.
242 4 Internet

Ruft man auf einem Rechner das Werkzeug lanmap auf und lässt es eine Zeit-
lang laufen, zeichnet es eine Karte (png-Datei) der Netzverbindungen des Rechners
auf. Startet man in dem Zeitraum einen Broadcast-ping:
debian:~# ping -c 2 -b 192.168.1.255
so findet man alle zu dem Zeitpunkt aktiven Teilnehmer des lokalen Netzes auf der
Karte. Abbildung 4.2 zeigt eine solche Karte. Im Mittelpunkt sehen wir den Rech-
ner, auf dem lanmap lief. Das Wölkchen (Outside) im Nordosten ist das über ein
Gateway verbundene Internet. Die Switche im LAN sehen Sie nicht, weil es einfache
Switche ohne IP-Adresse sind. Die Karte ist subjektiv, aus der Sicht des Rechners,
und nicht als Übersicht über das LAN geeignet.

4.3 Interfaces, IP-Adressen und Namen

4.3.1 IP-Adressen

Ein Rechner muss auf irgendeine Weise an ein Netz angeschlossen werden. Hier-
zu dient eine Ethernetkarte, eine WLAN-Karte mit Antenne, ein Modem oder ei-
ne ISDN-Karte. Einen solchen Anschluss bezeichnet man gemeinhin als Netzkar-
te, Netzinterface, Netzadapter oder Network Interface Card (NIC). Die Funktion
eines Netzadapters kann auch durch ein externes Gerät mit Anschluss an eine se-
rielle oder USB-Schnittstelle verwirklicht werden, bei Ethernet selten, bei Mo-
dems oder WLAN-Adaptern häufig. Netzinterfaces passen nicht in das sonst un-
ter Linux/UNIX übliche Konzept der Gerätedateien. Sie haben eine eigene Be-
zeichnungsweise wie eth0 für die erste Ethernetkarte. Ihre Konfiguration liegt in
/etc/network/interfaces. Damit das Betriebssystem mit dem Adapter um-
gehen kann, bedarf es eines Treibers, beispielsweise für eine Ethernetkarte wie eine
3com 905B-TX oder einen WLAN-USB-Adapter wie den Linksys WUSG54G. Ein
Treiber muss sowohl zum Adapter als auch zum Betriebssystem passen, Windows-
Treiber nützen uns nichts. Im günstigsten Fall kommt der Treiber mit Debian
GNU/Linux mit, in weniger günstigen Fällen muss man sich den Treiber aus dem
Netz beschaffen und selbst übersetzen oder einbauen. Hat man Pech, gibt es keinen
Treiber.
Beim Versenden der Daten muss feststehen, an welchen Rechner die Daten ge-
sendet werden sollen. Ebenso sollte ein Rechner wissen, ob Daten, die er empfängt,
für ihn bestimmt sind. Hierzu verwendet man Adressen. Im Internet hat jeder Kno-
ten eine eindeutige Adresse, die es ermöglicht, Daten an diesen Knoten zu senden.
Wenn Sie sich mit Ihrem Rechner zuhause in das Internet einwählen, bekommen Sie
die Adresse Ihres Rechners in der Regel von Ihrem Internet-Versorger zugewiesen.
Genau genommen ist es nicht der Rechner, sondern das Interface (die Karte), dem
eine Adresse zugeordnet ist. Es ist durchaus möglich, dass ein Rechner sowohl über
eine Ethernetkarte als auch über eine ISDN-Verbindung verfügt. Er hat dann zwei
Interfaces und jedes dieser Interfaces eine eigene Adresse. Auch die Kombination
von zwei Ethernetkarten oder einer Ethernetkarte und einer WLAN-Karte in einem
4.3 Interfaces, IP-Adressen und Namen 243

Rechner ist nicht selten. Ein Gateway, das Netze verbindet, braucht für jedes Netz
ein eigenes Interface. IP-Adressen werden den Knoten:
• statisch (dauerhaft) zugewiesen,
• dynamisch (erst bei Bedarf) von einem DHCP-Server zugewiesen,
• dynamisch ohne Mitwirkung eines Servers durch Verhandlungen im lokalen Netz
zugewiesen (Zeroconf-Netz, Automatic Private IP Addressing, APIPA).
Mischformen sind möglich und erhöhen die Unentbehrlichkeit des Netzverwalters.
Die Methode, wie Daten von einem Rechner zu einem anderen übertragen wer-
den, ist abhängig von der Art der Verbindung, die zwischen den Rechnern besteht.
In einem Ethernet werden Daten anders übertragen als über eine Telefonleitung oder
eine Satellitenverbindung. Große Netze wie das Internet benutzen viele unterschied-
liche Verfahren, Daten zu übertragen. Stellen Sie sich vor, Sie haben von zuhause ei-
ne Einwahlverbindung über einen Internetversorger aufgebaut und laden eine Datei
von einem Rechner in einer nordamerikanischen Universität herunter. Dabei könnte
es sein, dass die Daten zunächst über das Ethernet im Fachbereich der Universität,
dann über das FDDI-Netz der Universität, weiter über ein ATM-Netz, danach über
Satellit, wieder über ein ATM-Netz in Europa zu Ihrem Versorger und schließlich
über ein Telefonkabel oder Fernsehkabel zu Ihnen geschickt werden. Im lokalen Netz
geht es dann über Ethernet oder WLAN zum Endverbraucher. Trotz der unterschied-
lichen Verfahren, die dabei zum Einsatz kommen, werden immer dieselben Daten
mit denselben Adressen verschickt. Alle beteiligten Stationen müssen die Adressen
verstehen, um die Daten in der richtigen Richtung weiterzuschicken. Das zu diesem
Zweck eingesetzte Protokoll ist das Internet Protocol (IP) nach RFC 791. Demzu-
folge spricht man bei Rechneradressen wie 195.71.9.196 von IP-Adressen im
Gegensatz beispielsweise zu MAC-Adressen, die lediglich für den Datentransport
im Ethernet von Bedeutung sind.
Die MAC-Adressen (Hardware-Adresse, physikalische Adresse, IEEE-Adresse,
NIC-Addresse, Media Access Control Address) von Ethernetkarten und einigen
Netzkomponenten dienen dem Ansprechen der Hardware auf niederer Ebene und
bestehen aus sechs Bytes, die hexadezimal wie 00:02:55:8C:A4:75 geschrie-
ben werden und sich mit dem Kommando ifconfig oder ip addr (Debian-
Paket iproute, Heimathafen Linux Advanced Routing & Traffic Control, auf http:
//lartc.org/) ermitteln lassen. Die ersten drei Bytes – der Organizationally Un-
ique Identifier (OUI) – bezeichnen den Hersteller. Die Umsetzung von Bytes auf Her-
steller findet man nebst Erläuterungen unter http://standards.ieee.org/
regauth/oui/index.shtml. Dort sind die drei Bytes ohne die Doppelpunkte
in die Suchmaske einzugeben, also 000255. Im Beispiel lautet die Antwort IBM
Corporation. Die hinteren drei Bytes sind eine Seriennummer nach Belieben des
Herstellers. MAC-Adressen gibt es nur im Ethernet; sie sind der Hardware fest zu-
geordnet, lassen sich aber per Software vortäuschen.
Internet-Adressen (IPv4-Adressen) bestehen aus einer Zahl zwischen 0 und
4294967194, rund 4 Milliarden. In dieser Schreibweise trifft man sie so gut wie
nie an. Stattdessen werden sie in Form von vier dezimalen Zahlen zwischen 0 und
255 dargestellt, die durch Punkte getrennt sind, beispielsweise 192.168.0.11.
244 4 Internet

Jeder Zahl entspricht ein Byte. Der Bereich erstreckt sich so von 0.0.0.0 bis
255.255.255.255. In Wirklichkeit sind weniger Adressen verfügbar, weil eine große
Anzahl von Adressen für besondere Zwecke reserviert ist (RFC 3330) oder aus tech-
nischen Gründen nicht nutzbar ist. Andererseits dürfen bestimmte Adressbereiche
mehrfach belegt werden. Aufgrund des Wachstums des Internets hat das dazu ge-
führt, dass Internetadressen knapp geworden sind. Dies ist einer der Gründe dafür,
dass ein neues Internet-Protokoll (IPv6) entworfen wurde, das eine größere Anzahl
von Adressen bereit stellt. Zur Zeit wird IPv6 erst wenig benutzt. Die Notation mit
vier Zahlen wird Dotted Quad Notation genannt.
Bei der Internet Assigned Numbers Authority (IANA, http://www.iana.
org/) sind Adressbereiche registriert, die von Regional Internet Registries (RIR)
weiter vergeben werden. Für Europa und angrenzende Gebiete ist das Réseaux IP Eu-
ropéens Network Coordination Centre (RIPE NCC, http://www.ripe.net/)
zuständig, das Adressbereiche an die nationalen Registries verteilt, in Deutschland an
DENIC (http://www.denic.de/) für die Top-Level-Domäne de. In Deutsch-
land gibt das DENIC Adresskontingente an die deutschen Internet-Versorger (Inter-
net Service Provider, ISP) weiter, beispielsweise an die Deutsche Telekom oder das
Deutsche Forschungsnetz (DFN). Aus einer IP-Adresse kann – wenn überhaupt –
nur sehr grob auf den geografischen Standort eines Knotens geschlossen werden.
Es gibt eine Reihe von IP-Adressen, an die im Internet keine Daten weitergeleitet
werden (die nicht geroutet werden). Solche Adressen eignen sich dafür, in privaten
(nicht-öffentlichen) Netzen eingesetzt zu werden, weil ihre Verwendung nicht zu
Konflikten führt, wenn sie an anderer Stelle ebenfalls eingesetzt werden. Die Ver-
wendung dieser privaten Adressen wird – im Gegensatz zu allen anderen Adressen –
nicht registriert, sie sind nur im privaten LAN bekannt. Folgende IP-Adressbereiche
sind für private Zwecke reserviert (RFC 1918):
• 10.0.0.0 – 10.255.255.255 (2 hoch 24 gleich 16 Millionen Adressen)
• 172.16.0.0 – 172.31.255.255 (je Netz 2 hoch 16 gleich 65000 Adressen, insge-
samt rund 1 Mio.)
• 192.168.0.0 – 192.168.255.255 (je Netz 2 hoch 8 gleich 256 Adressen, insgesamt
rund 65 Ts.)
Wenn Sie ein lokales Netz (Local Area Network einer Universität, Firma, Familie)
einrichten, das nur an einer Stelle mit dem Internet verbunden ist, sollten Sie Adres-
sen aus diesen Bereichen verwenden. Deren Verwaltung obliegt Ihnen und interes-
siert das Internet nicht im geringsten. In kleinen LANs werden meist Adressen aus
dem dritten Bereich verwendet, obwohl der erste oder zweite Bereich auch zulässig
ist und keine Nachteile mit sich bringt. Nirgendwo im Internet wird über diese priva-
ten Adressbereiche Buch geführt. Als lokaler Netzverwalter brauchen Sie niemand
zu fragen oder zu benachrichtigen, wenn Sie private Adressen verwenden. Ein sol-
ches internes, isoliertes Netz mit der Technik des Internets wird Intranet genannt. Oft
werden in Intranets außer TCP/IP weitere Netzprotokolle wie Appletalk, SMB oder
Novell-IPX gefahren.
Der Adressbereich 127.0.0.0/8 stellt die Loopback-Adressen dar, die den Rech-
ner selbst bezeichnen (loopback = Schleife). Benutzt wird davon praktisch nur die
4.3 Interfaces, IP-Adressen und Namen 245

Adresse 127.0.0.1, im Prinzip reicht der Bereich aber bis 127.255.255.254. Daten-
pakete, die ein Rechner an diese Adressen schickt, bleiben innerhalb des Kerns, aus-
zuprobieren mittels:
joe@debian:~$ ping 127.0.0.1
oder:
joe@debian:~$ ping 127.100.150.200
Der Versuch setzt nur voraus, dass der TCP/IP-Stapel im Kern funktioniert. Es gibt
noch einige besonderen Zwecken vorbehaltene Adressbereiche, darunter der Be-
reich 224.0.0.0 bis 239.255.255.255 für Multicasting (Gruppenruf) nach
RFC 1112 oder der Bereich 169.254.0.0/16 für lokale Links in Zeroconf-
Netzen. Eine Übersicht über reservierte Adressbereiche gibt der RFC 3330 Special
Use IPv4 Addresses von 2002.
Zum Experimentieren, Testen und in Dokumentationen werden gelegentlich Na-
men gebraucht, die beim Auftauchen im Internet keinen realen Knoten belästigen.
Der RFC 2606 legt hierfür folgende Namen fest:
• die Top Level Domains .test für Testzwecke, .example für Beispiele in
Texten und .invalid dort, wo man einen Namen sofort als ungültig erkennen
soll,
• die Second Level Domains example.com, example.net und example.
org.
Ein ping oder traceroute zu example.com oder www.example.com ist
zwar möglich und liefert auch vernünftige Antworten, eine HTTP-Anfrage wird je-
doch abgewiesen.
Der einfachste und häufigste Fall ist, dass ein Rechner über genau eine Netzkar-
te verfügt, und dieser genau eine IP-Adresse zugeordnet ist. Es verursacht keinerlei
Schwierigkeiten – von Platzproblemen abgesehen – in einen Rechner weitere Netz-
karten mit jeweils einer eigenen IP-Adresse einzubauen. Man gewinnt jedoch für
den Normalbetrieb nichts damit. Vorzugsweise bei Servern sind mit etwas Aufwand
auch raffinierte Kombinationen machbar. Als (Port)Trunking, Bonding, Etherchannel
(Cisco) oder Link Aggregation wird das Zusammenfassen mehrerer Ethernetkarten
unter einer logischen IP-Adresse zwecks Erhöhung der Bandbreite (load balancing)
und Ausfallsicherheit (hot standby) verstanden. Entsprechend leistungsfähige Netz-
karten vorausgesetzt, ermöglichen die Debian-Pakete ifenslave-2.4 und ifenslave-
2.6 das Bonden mehrerer Netzkarten eines Rechners. Will man die Karten mehre-
rer Rechner zusammenfassen, braucht man verwaltbare Switches. Umgekehrt lassen
sich auch mit Hilfe von Werkzeugen aus dem Debian-Paket iproute einer Netzkar-
te mehrere IP-Adressen zuteilen, aber das ist nichts für den Anfang. Informationen
zu solchen Linux-Netz-Themen liefern mehrere HOWTOs bei TLDP sowie http:
//linux-net.osdl.org/ und http://wiki.linuxquestions.org/
wiki/Networking.
246 4 Internet

4.3.2 Netze und Subnetze

Wenn bisher vom Netz die Rede war, war damit der gesamte Verbund aller Rechner
gemeint, die irgendwie miteinander in Verbindung stehen. Vielfach bezeichnet der
Begriff jedoch lediglich eine Gruppe von Rechnern, die direkt physikalisch mitein-
ander verbunden (verkabelt) sind. Man spricht hier von einem Subnetz2 . In einem
Ethernet beispielsweise können Rechner Daten direkt an alle anderen Rechner schi-
cken, die an dasselbe Ethernet angeschlossen sind. Daten, die an Rechner geschickt
werden sollen, die sich in anderen (Sub-)Netzen befinden, müssen hingegen von ei-
nem speziellen Gerät von dem einen Netz in ein anderes weitergeleitet werden. Diese
weiterleitenden Geräte werden als Router bezeichnet. Ein Router kann ein Gerät für
sich sein, das keine anderen Aufgaben beherrscht, eine Kombination mit anderen
Netzkomponenten wie ein Router/Switch oder ein Rechner, der mittels Software das
Routing durchführt. Verbreitet sind Router zur Verbindung eines lokalen Netzes mit
dem Telefonnetz und letztlich einem Internet-Versorger (Internet Service Provider,
ISP). Diese Geräte werden besser als Gateways bezeichnet, weil sie über das Routen
hinausgehende Aufgaben wahrnehmen.

145.22.100.1
ISP

210.21.3.1 210.21.3.2 210.21.3.3

145.22.100.6

210.21.3.0

210.21.3.250

210.21.4.1 210.21.4.2 210.21.4.3

210.21.4.250

210.21.4.0

Abb. 4.3: Netz mit zwei Subnetzen und Zugang zu einem Internet-Anbieter

2
Tatsächlich können mehrere Subnetze in einem physikalischen Netz vorhanden sein. Au-
ßerdem ist es möglich, mehrere physikalische Netze durch Bridges (Brücken) miteinander zu
verbinden, sodass sie wie ein Subnetz behandelt werden können.
4.3 Interfaces, IP-Adressen und Namen 247

Abbildung 4.3 verdeutlicht dies. Die Rechner im unteren Teil der Abbildung
sind durch ein Ethernet miteinander verbunden. Der Rechner mit der IP-Adresse
210.21.4.1 kann den Rechner mit der IP-Adresse 210.21.4.3 direkt errei-
chen. Das gleiche gilt für die Rechner im oberen Teil der Abbildung, die ebenfalls
durch ein Ethernet miteinander verbunden sind. Der Rechner in der Mitte ist mit
beiden Netzen verbunden. Er hat zwei Interfaces (Netzkarten) und demzufolge zwei
IP-Adressen (210.21.4.250 und 210.21.3.250). Wenn der Rechner mit der
IP-Adresse 210.21.4.2 Daten an den Rechner mit der Adresse 210.21.3.2
senden will, dann kann er dies nicht direkt, sondern sendet die Daten an den Router
210.21.4.250, der sie über sein anderes Interface 210.21.3.250 in das obere
Ethernet leitet, von wo sie direkt an den Zielrechner geschickt werden. Hierzu be-
nötigt der Rechner 210.21.4.2 die Information, wohin er Pakete schicken soll,
die er nicht selbst (über das Netz, an das er angeschlossen ist) zustellen kann. Diese
Information bezeichnet man als Standard-Gateway oder Default-Route. Es muss bei
den Rechnern im unteren Teil der Abbildung auf die Adresse 210.21.4.250 zei-
gen. Wenn die Rechner im oberen Teil der Abbildung in der Lage sein sollen, Daten
zu Rechnern im unteren Teil der Abbildung zu schicken, benötigen sie diese Infor-
mation ebenfalls. Allerdings müssen diese das Standard-Gateway 210.21.3.250
benutzen, weil das Interface 210.21.4.250 nicht mit dem Ethernet verbunden ist,
an das diese Rechner angeschlossen sind und deswegen von ihnen nicht erreichbar
wäre. Briefe an Adressen in meinem Heimatdorf trage ich selbst aus, Briefe in an-
dere Orte werfe ich in einen Briefkasten der gelben Post, der das Standard-Gateway
darstellt.

4.3.3 Netzmasken

Alle Rechner müssen wissen, welche Rechner sich in ihrem Netz und welche Rech-
ner sich in anderen Netzen befinden. Hierzu dient die Netzmaske. Eine IP-Adresse
besteht aus vier Zahlen zwischen 0 und 255. Sie lässt sich durch vier Bytes darstel-
len. Mit der Netzmaske wird angegeben, welche Bits in diesen vier Bytes Rechner
darstellen, die sich im lokalen Netz befinden, und durch welche Bits Rechner in an-
deren Netzen angesprochen werden.
Ein häufig gebrauchter Wert für die Netzmaske ist 255.255.255.0. Dieser
Wert entspricht vier Bytes, in denen alle Bits der ersten drei Bytes gesetzt (gleich
1) sind und die acht Bits im letzten Byte nicht gesetzt (gleich 0) sind. Ein Rech-
ner, der die Information hat, dass in seinem Netz diese Netzmaske verwendet wird,
schließt daraus, dass sich alle IP-Adressen, bei denen sich nur die Bits im letzten
Byte von denen im letzten Byte der eigenen IP-Adresse unterscheiden, im selben
Netz aufhalten, während sich solche IP-Adressen, bei denen sich Bits der ersten drei
Bytes von denen in den ersten drei Byte der eigenen IP-Adresse unterscheiden, in
anderen Netzen befinden. Daten an diese Rechner müssen über einen Router versen-
det werden. Anders gesagt: Die Adresse eines Knotens durch logisch-UND mit der
Netzmaske verknüpft ergibt die Netzadresse. Alle Knoten mit derselben Netzadresse
reden direkt – ohne Router – miteinander. Der Aufruf (mit absolutem Pfad, da das
248 4 Internet

Werkzeug zwar von jedem Benutzer ausgeführt werden darf, aber nicht im üblichen
Befehlspfad liegt):
joe@debian:~$ /sbin/route
liefert als Antwort die Routing-Tabelle des Kerns, beispielsweise:
192.168.2.0 * 255.255.255.240 eth1
192.168.0.0 * 255.255.255.0 eth0
default router.beiuns 0.0.0.0 eth0
In der ersten Spalte stehen Netzadressen, hier zwei sowie an letzter Stelle die Be-
zeichnung default für alle übrigen. Die zweite Spalte nennt den Router. Der Stern
bedeutet kein Router, direkt zustellen; in der dritten Zeile steht der Name des Routers
(Default-Gateway, das Kästchen, welches das lokale Ethernet mit dem DSL-Modem
verbindet und ein selbständiger Knoten ist). In der dritten Spalte – vom Programm
Genmask (generality mask) betitelt – folgt die jeweilige Netzmaske. Hier sehen wir
in der ersten Zeile eine Netzmaske mit einer anderen Zahl als 0 oder 255. In dua-
ler Schreibweise lautet die Maske 11111111.11111111.11111111.11110000 und be-
zeichnet somit ein Subnetz mit den Adressen von 192.168.2.0 bis 192.168.2.15, das
abzüglich der beiden reservierten Adressen 0 und 15 Raum für 14 Knoten bietet. Der
Anschluss an dieses Netz läuft über die zweite Ethernetkarte eth1 im Rechner. Die
zweite Zeile ist nichts Besonderes: das Netz 192.168.0.0 umfasst 256 Adressen und
gehört zur ersten Ethernetkarte eth0. Alle anderen Adressen sind nicht lokal und
laufen über eth0 zum Router router.beiuns. Üblicherweise teilt man Routern
die erste oder letzte freie Adresse (1 oder 254) zu, aber das ist nicht zwingend. Mit
der entsprechenden Software könnte dieser Rechner als Router zwischen den beiden
Netzen 192.168.0.0 und 192.168.2.0 arbeiten. Das 0.0-Netz ist im vorliegenden Fall
das normale Arbeitsnetz, das 2.0-Netz ein experimentelles Netz.
Ist ein Rechner durch zwei Netzadapter mit demselben Netz verbunden – was
möglich, aber selten sinnvoll ist – sehe man sich die Routing-Tabelle des Kerns mit-
tels route an und vergleiche sie mit den eigenen Vorstellungen. Gegebenenfalls
sind Routen zu löschen:
debian:~# route del default eth2
wobei statt default eine Netzadresse wie 192.168.2.0 stehen kann. Mit demselben
Werkzeug lassen sich auch Routen hinzufügen, siehe Manual. Soll das Routing au-
tomatisch bei jedem Systemstart geändert werden, schreibt man die Kommandos in
ein Startskript, das aufgerufen wird, nachdem die Netzkonfiguration abgeschlossen
ist.
Die oft anzutreffende Schreibweise 192.168.2.3/28 besagt, dass für den
Knoten 192.168.2.3 eine Netzmaske von 28 Bit Länge gilt, also die Maske
255.255.255.240. Ein Knoten mit der Adresse 192.168.2.20/28 befän-
de sich im Netz 192.168.2.16/28 (niedrigste verfügbare Adresse) und hätte
dieselbe Netzmaske. Die Broadcast-Adresse dieses Netzes wäre 192.168.2.31
(höchste verfügbare Adresse). Die Schreibweise wird als Classless Inter-Domain
Routing (CIDR) Notation bezeichnet, die Zahl nach dem Schrägstrich als Suffix,
4.3 Interfaces, IP-Adressen und Namen 249

und ist im RFC 1519 beschrieben. Bei solchen Betrachtungen sind die Werkzeuge
gbase, ipcalc und sipcalc eine Hilfe.
In Abbildung 4.3 ist die Netzmaske aller Rechner 255.255.255.0. Wenn vom
Rechner 210.21.4.2 ein Paket an den Rechner 210.21.3.2 geschickt werden
soll, erkennt der Absender, dass sich Bits im dritten Byte voneinander unterschei-
den (4 ungleich 3), und weiß aufgrund der Netzmaske, dass sich der Zielrechner in
einem anderen Netz befindet. Er schickt die Pakete deswegen an den Router. Möch-
te der Rechner 210.21.4.2 jedoch ein Paket an den Rechner mit dem Interface
210.21.4.250 schicken, so erkennt er, dass sich die Bits der ersten drei Bytes
nicht unterscheiden und stellt die Pakete direkt zu.

4.3.4 Besondere Adressen


Netzadressen
Neben den einzelnen Knoten bzw. Interfaces haben auch die Netze selbst eine IP-
Adresse, und zwar die erste (niedrigste) verfügbare IP-Adresse im Netz. Die in ei-
nem Netz verfügbaren Adressen ergeben sich aus der IP-Adresse eines Rechners
in diesem Netz kombiniert mit der Netzmaske. Aufgrund der Information, dass ein
Rechner die IP-Adresse 210.21.4.3 hat und dass in dem Netz die Netzmas-
ke 255.255.255.0 gilt, wird darauf geschlossen, dass in diesem Netz die IP-
Adressen 210.21.4.0 bis 210.21.4.255 zur Verfügung stehen. Die Adresse
des Netzes ist dann 210.21.4.0. Die Netzadressen sind in der Abbildung 4.3
ebenfalls angegeben.

localhost
Ein besonderes Netz ist jenes mit der IP-Adresse 127.0.0.0 (Netzmaske
255.0.0.0 oder /8). Es ist für den Verkehr von Datenpaketen bestimmt, die
einen Rechner nicht verlassen. Dies kommt vor, wenn zwei Prozesse mit Hilfe von
Netzprotokollen miteinander kommunizieren, die beide auf demselben Rechner
ausgeführt werden. Ein Beispiel ist ein Web-Browser, der einen Webserver auf
derselben Maschine anspricht. Auch für dieses Netz wird ein Interface benötigt. Es
handelt sich dabei um das Loopback-Interface, dem die IP-Adressen 127.0.0.1
bis 127.255.255.254 und der Name localhost zugewiesen sind. Ein vernetzter
Rechner hat stets mindestens zwei IP-Adressen, nämlich 127.0.0.1 für sein
Loopback-Interface und die IP-Adresse des Interfaces, über das er mit dem Netz
verbunden ist. Die Adresse 127.0.0.1 – oder eine andere aus dem Bereich
127.0.0.1 bis 127.0.0.254 – und der Name localhost liegen fest, können
also nicht frei gewählt werden, und sind in der Rechnerwelt das, was in der Men-
schenwelt das Pronomen ich bedeutet. Das Loopback-Interface wird wie die anderen
in /etc/network/interfaces konfiguriert; die Zuweisung einer Adresse ent-
fällt. Nicht-vernetzte Rechner haben zumindest die IP-Adresse 127.0.0.1, auch
dann, wenn sie keine Netzkarte enthalten. Der Verkehr zum Loopback-Interface
spielt sich innerhalb des Betriebssystems ab. Testen Sie das Loopback-Interface
mittels:
250 4 Internet

joe@debian:~$ ping -c 4 127.0.0.1


Wenn keine Antwort zurückkommt, ist etwas oberfaul. Möglicherweise ist kein
TCP/IP-Stapel im Kern eingerichtet.
Das Loopback-Interface hat nichts zu tun mit dem Loopback-Device, einem vir-
tuellen Massenspeicher, siehe Abschnitt 13.3 Loopback-Device auf Seite 574. Leider
wird das Interface gelegentlich auch als Device bezeichnet.
Es gibt den Namen localdomain zur Bezeichnung der lokalen IP-Domäne, aber
dieser ist unverbindlich und kann (sollte) in /etc/hosts beliebig anders gesetzt
werden. Falls ein lokaler Mail Transfer Agent (sendmail, postfix, exim) läuft,
ist dieser auch von einer Änderung des Domänennamens zu unterrichten, sonst hat
er Schwierigkeiten beim Zustellen lokaler Mails. Der Name der lokalen Domäne ist
noch in mehreren anderen Winkeln des Systems versteckt, was nachträgliche Kor-
rekturen erschwert. Zur lokalen Domäne gehört keine vorgegebene Auswahl von
IP-Adressen, wenngleich für lokale Netze aus gutem Grund die drei privaten Berei-
che von IP-Adressen empfohlen werden. Das Kommando domainname zeigt den
Namen der NIS-Domäne an – sofern eine eingerichtet ist – während hostname -f
(full) den vollen Namen des Rechners ausgibt.

Broadcast-Adressen
Die höchste freie Adresse in einem Netz ist ebenfalls reserviert. Hierbei handelt
es sich um die Broadcast-Adresse. Pakete an diese Adresse werden als Broadcast
(Rundruf) an alle Knoten in dem betreffenden Netz geleitet. Der Absender schickt
ein Datenpaket mit der Broadcast-Adresse ins Netz; vervielfältigt wird das Paket auf
den Switchen, genauso wie bei Multicasting. Die Belastung des Absenders bleibt
minimal. Durch Broadcasting kann festgestellt werden, welcher Rechner in einem
Netz einen bestimmten Dienst zur Verfügung stellt, ohne dass man seine genaue
Adresse kennt. In einem Netz mit der Adresse 210.21.4.0 und der Netzmas-
ke 255.255.255.0 ist die Broadcast-Adresse 210.21.4.255. In jedem Netz
sind zwei Adressen reserviert, nämlich die Netzadresse, die niederste Adresse (oft
0), und die Broadcast-Adresse, die höchste Adresse (oft 255). Schicken Sie – nach
Rücksprache mit Ihrem Netzverwalter – einen Broadcast in Ihr lokales Netz:
joe@debian:~$ ping -b -c 4 192.168.0.255
wobei Sie das letzte Argument gegen Ihre Broadcast-Adresse austauschen. Alle ak-
tiven Knoten in Ihrem Netz antworten, sofern das Antworten auf Pings nicht weg-
konfiguriert ist. Wir unterscheiden also folgende Adressierungsarten:
• Unicasting Punkt-zu-Punkt- oder Ende-zu-Ende-Verbindung: Ein Knoten
schickt ein Datenpaket an genau einen anderen, bestimmten Knoten,
• Multicasting Gruppenruf: Ein Knoten schickt ein Datenpaket an eine bestimmte
Gruppe von Empfängern im lokalen Netz,
• Broadcasting Rundruf: Ein Knoten schickt ein Datenpaket an alle Knoten im
lokalen Netz,
• Anycasting: Ein Knoten schickt ein Datenpaket an einen beliebigen Empfänger
im lokalen Netz. Der schnellste Empfänger antwortet.
4.3 Interfaces, IP-Adressen und Namen 251

Punkt-zu-Punkt-Verbindungen
Eine spezielle Form von Netzen sind Punkt-zu-Punkt-Verbindungen (Point-to-Point).
Darunter werden direkte Verbindungen zwischen zwei Rechnern verstanden, wie sie
bei Einwahlverbindungen zu einem Internet-Versorger vorkommen. Die Netzmas-
ke solcher Verbindungen i