Linux Essentials
Linux Essentials
Die Einsteiger-Zertifizierung
des LPI
Linux Essentials
Die App Linux Essentials können Sie im Google Play Store in Deutsch
und Englisch herunterladen. Eine frei kopierbare PDF-Version die-
ser Schulungsunterlage zum Drucken und Weitergeben finden Sie im
Online-Shop der Linup Front GmbH unter [Link] .
In unserem Online-Shop bieten wir Ihnen außerdem weitere Schu-
lungsunterlagen zu Linux- und Open-Source-Themen an. Wir liefern
gedruckte Unterlagen (innerhalb Deutschlands und der EU) sowie Un-
terlagen in PDF- und E-Book-Formaten.
3
Wichtig
4
Inhalt
1 Computer, Software und Betriebssysteme 16
1.1 Was ist eigentlich ein Computer? . . . . . . . . . . 17
1.2 Bestandteile eines Computers . . . . . . . . . . . 21
1.3 Software . . . . . . . . . . . . . . . . . . . 30
1.4 Die wichtigsten Betriebssysteme . . . . . . . . . . 32
1.4.1 Windows und OS X . . . . . . . . . . . . . 32
1.4.2 Linux . . . . . . . . . . . . . . . . . . 34
1.4.3 Mehr Unterschiede und Gemeinsamkeiten . . . . 36
1.5 Ausblick . . . . . . . . . . . . . . . . . . . 38
5 Hilfe 120
5.1 Hilfe zur Selbsthilfe . . . . . . . . . . . . . . . 121
5.2 Der help -Befehl und die --help -Option . . . . . . . . 122
5.3 Die Handbuchseiten . . . . . . . . . . . . . . . 123
5.3.1 Überblick. . . . . . . . . . . . . . . . . 123
5.3.2 Struktur . . . . . . . . . . . . . . . . . 124
5.3.3 Kapitel . . . . . . . . . . . . . . . . . 125
5.3.4 Handbuchseiten anzeigen. . . . . . . . . . . 126
5.4 Die Info-Seiten . . . . . . . . . . . . . . . . . 129
5.5 Die HOWTOs . . . . . . . . . . . . . . . . . 131
5.6 Weitere Informationsquellen . . . . . . . . . . . . 132
6
6 Dateien: Aufzucht und Pflege 137
6.1 Datei- und Pfadnamen . . . . . . . . . . . . . . 138
6.1.1 Dateinamen . . . . . . . . . . . . . . . . 138
6.1.2 Verzeichnisse . . . . . . . . . . . . . . . 141
6.1.3 Absolute und relative Pfadnamen . . . . . . . . 143
6.2 Kommandos für Verzeichnisse . . . . . . . . . . . 146
6.2.1 Das aktuelle Verzeichnis: cd & Co. . . . . . . . . 146
6.2.2 Dateien und Verzeichnisse auflisten – ls . . . . . 147
6.2.3 Verzeichnisse anlegen und löschen: mkdir und rmdir . . 151
6.3 Suchmuster für Dateien . . . . . . . . . . . . . 153
6.3.1 Einfache Suchmuster . . . . . . . . . . . . 153
6.3.2 Zeichenklassen . . . . . . . . . . . . . . 156
6.3.3 Geschweifte Klammern . . . . . . . . . . . 157
6.4 Umgang mit Dateien. . . . . . . . . . . . . . . 160
6.4.1 Kopieren, Verschieben und Löschen – cp und Ver-
wandte . . . . . . . . . . . . . . . . . 160
6.4.2 Dateien verknüpfen – ln und ln -s . . . . . . . . 165
6.4.3 Dateiinhalte anzeigen – more und less . . . . . . . 171
6.4.4 Dateien suchen – find . . . . . . . . . . . . 173
6.4.5 Dateien schnell finden – locate und slocate . . . . . 179
7
8.3.2 Anfang und Ende von Dateien – head und tail . . . 214
8.4 Datenverwaltung . . . . . . . . . . . . . . . . 217
8.4.1 Sortierte Dateien – sort und uniq . . . . . . . . 217
8.4.2 Spalten und Felder – cut , paste & Co. . . . . . . . 226
8
13 Benutzerverwaltung 334
13.1 Grundlagen . . . . . . . . . . . . . . . . . . 335
13.1.1 Wozu Benutzer? . . . . . . . . . . . . . . 335
13.1.2 Benutzer und Gruppen. . . . . . . . . . . . 338
13.1.3 »Natürliche Personen« und Pseudobenutzer . . . . 342
13.2 Benutzer- und Gruppendaten . . . . . . . . . . . 344
13.2.1 Die Datei /etc/passwd . . . . . . . . . . . . . 344
13.2.2 Die Datei /etc/shadow . . . . . . . . . . . . . 349
13.2.3 Die Datei /etc/group . . . . . . . . . . . . . 354
13.2.4 Die Datei /etc/gshadow . . . . . . . . . . . . 356
13.3 Benutzerkonten und Gruppeninformationen verwalten . . 358
13.3.1 Benutzerkonten einrichten . . . . . . . . . . 358
13.3.2 Das Kommando passwd . . . . . . . . . . . . 362
13.3.3 Benutzerkonten löschen . . . . . . . . . . . 365
13.3.4 Benutzerkonten und Gruppenzuordnung ändern . . 366
13.3.5 Die Benutzerdatenbank direkt ändern — vipw . . . 367
13.3.6 Anlegen, Ändern und Löschen von Gruppen . . . . 368
14 Zugriffsrechte 373
14.1 Das Linux-Rechtekonzept . . . . . . . . . . . . . 374
14.2 Zugriffsrechte auf Dateien und Verzeichnisse . . . . . . 375
14.2.1 Grundlagen . . . . . . . . . . . . . . . . 375
14.2.2 Zugriffsrechte anschauen und ändern . . . . . . 377
14.2.3 Dateieigentümer und Gruppe setzen – chown und chgrp 379
14.3 Eigentum an Prozessen . . . . . . . . . . . . . . 382
14.4 Besondere Zugriffsrechte für ausführbare Dateien . . . . 383
14.5 Besondere Zugriffsrechte für Verzeichnisse . . . . . . 385
9
15.2 Linux als Netzwerk-Client. . . . . . . . . . . . . 405
15.2.1 Anforderungen . . . . . . . . . . . . . . 405
15.2.2 Fehlersuche . . . . . . . . . . . . . . . . 407
A Musterlösungen 419
B Beispieldateien 445
C Linux-Essentials-Zertifizierung 451
C.1 Übersicht der Prüfungsziele . . . . . . . . . . . . 452
C.2 Prüfungsziele für Linux Essentials . . . . . . . . . . 454
D Kommando-Index 467
Index 473
10
Tabellenverzeichnis
2.1 Vergleich der wichtigsten Linux-Distributionen (Stand:
Februar 2012) . . . . . . . . . . . . . . . . . . . . . . . . . 83
schicken. (Zur Vereinfachung geben Sie am besten den Titel der Schu-
lungsunterlage, die auf der Rückseite des Titelblatts enthaltene Revisi-
onsnummer sowie die betreffende(n) Seitenzahl(en) an.) Natürlich kön-
nen Sie uns auch über das Telefon, Telefax oder die »gelbe« Post errei-
chen. Vielen Dank!
15
1 Computer, Software und
Betriebssysteme
Lernziele
• Grundlegende Computer-Hardware-Kenntnisse erwerben
• Von verschiedenen Betriebssysteme gehört haben und ihre Ge-
meinsamkeiten und Unterschiede einschätzen können
Vorkenntnisse
• Grundlegende Computer-Kenntnisse sind nützlich
1.1 Was ist eigentlich ein Computer?
Bevor wir uns damit beschäftigen, was ein Computer überhaupt ist,
hier ein paar Zitate von Berühmtheiten aus der Szene:
»Wir dachten zuerst, dass wir mit einem halben Dutzend
Computern in Forschungslaboratorien allen Bedarf in [den
Vereinigten Staaten] abdecken könnten«
Howard H. Aiken, 1952
Howard Aiken war ein Computerpionier und der Entwickler von IBMs
erstem Computer, dem »Harvard Mark I«. Die ersten Computer im mo-
dernen Sinne wurden im zweiten Weltkrieg gebaut, um bei der Ent-
schlüsselung von Geheimcodes oder bei komplizierten Berechnungen
zu helfen, und es waren große, aufwendige und fehleranfällige Geräte –
die elektronischen Bauteile wie Transistoren oder integrierte Schaltkrei-
se, aus denen heutige Computer bestehen, waren allesamt noch nicht
erfunden. Was sich in dieser Zeit und den Jahren unmittelbar nach dem
Krieg herausstellte, waren allerdings einige Grundannahmen, die erfüllt
sein müssen, damit man von einem Gerät als »Computer« reden kann:
• Ein Computer verarbeitet Daten gemäß einer Folge von automatisch
ausgeführten Instruktionen, einem Programm.
• Programme müssen Entscheidungen und Wiederholungen erlauben.
• Es muss möglich sein, das ausgeführte Programm zu ändern oder
auszutauschen.
17
»Verarbeitung von Daten«, aber – jedenfalls solange es kein teurer »pro-
grammierbarer Taschenrechner« ist – passiert das nicht automatisch,
sondern ein Mensch drückt die Tasten.
In den frühen 1950er Jahren waren Computer hochspezialisierte Ge-
räte, die man – wie Aiken sagte – am ehesten in Forschungsinstituten
vermuten würde. In Science-Fiction-Filmen jener Zeit sieht man die Sä-
le, voll mit Reihen von Schränken, in denen sich geheimnisvolle Spulen
drehen. In nicht ganz 70 Jahren hat sich dieses Bild grundlegend gewan-
delt1 .
Ken Olsen war der Chef einer anderen Computerfirma, der Digital
Equipment Corporation (DEC), die in den 1970er Jahren an der Spitze der
Entwicklung »kleiner« Computer stand2 . Wobei »klein« damals durch-
aus relativ zu sehen war; es bedeutete zuerst etwas wie »braucht keinen
kompletten Computersaal mit Klimaanlage und eigenem Elektrizitäts-
werk und kostet weniger als eine Million Dollar« (oder so); Fortschritte
bei der Hardware führten aber dazu, dass gegen Ende der 1970er Jahre
»klein« etwas hieß wie »kann von zwei Personen hochgehoben werden«.
B DEC ist für uns Linux-Freunde wichtig, denn auf zwei DEC-Com-
putermodellen, der PDP-8 und der PDP-11, wurde Unix entwi-
ckelt – das System, das gut 20 Jahre später Linus Torvalds dazu
inspirierte, mit Linux zu beginnen.
dem Chef von IBM, zugeschrieben, der 1943 etwas gesagt haben soll wie »Es gibt einen
Weltmarkt für vielleicht fünf Computer«. Leider ist das nicht belegt. Und wenn er es tat-
sächlich 1943 gesagt hätte, hätte er zumindest für die nächsten zehn Jahre oder so durch-
aus recht behalten.
2 DEC wurde 1998 von Compaq gekauft und Compaq 2002 von Hewlett-Packard.
18
und sie hatten selten eine vernünftige Tastatur und fast nie einen anstän-
digen Bildschirm. Sie waren eigentlich ein Zeitvertreib für Bastler, so
ähnlich wie eine elektrische Eisenbahn, denn wirklich anfangen konnte
man mit ihnen ehrlicherweise nicht viel. Trotzdem waren es »Compu-
ter« im Sinne unserer Definition von oben, denn sie waren frei program-
mierbar – auch wenn man die Programme umständlich eintippen oder
(mit Glück) von einer Audiocassette lesen konnte. Wirklich für voll ge-
nommen wurden diese Apparate trotzdem nicht wirklich, und Ken Ol-
sens Zitat ist deswegen auch oft missverstanden worden: Er hatte abso-
lut nichts gegen kleine Computer (seine Firma verkaufte ja welche). Was
er nicht einsah, war die Idee, den kompletten Haushalt von einem Com-
puter steuern zu lassen (Heizung, Licht, Unterhaltung und so weiter) –
eine Idee, die damals noch sehr hypothetisch war, heute eher möglich
und vielleicht nicht mehr ganz so absurd scheinend.
Erst in den späten 1970er und 1980er Jahren wandelten die »Heim-
computer« sich vom Bausatz zum fertigen Gerät (Namen wie »Apple II«
und »Commodore 64« sind zumindest den Älteren unter uns vielleicht
noch ein Begriff) und begannen sich auch in den Büros auszubreiten.
1981 wurde der erste IBM PC vorgestellt, und 1984 kam der erste »Mac-
intosh« von Apple auf den Markt. Der Rest ist, wie man sagt, Geschich-
te – aber man sollte nicht vergessen, dass die Welt der Computer nicht
nur aus PCs und Macs besteht. Die riesigen, Säle füllenden Rechner von
früher sind immer noch unter uns – auch wenn sie seltener werden und
oft in Wirklichkeit aus großen Gruppen von Computern bestehen, die
ziemlich eng mit den PCs auf unserem Tisch verwandt sind und zusam-
menarbeiten. Am Prinzip hat sich aber seit Howard Aikens Zeit nichts
geändert: Computer sind immer noch Daten automatisch verarbeiten-
de Geräte mit auswechselbaren Programmen, die Verzweigungen und
Schleifen enthalten können. Und das wird auch weiter so bleiben.
19
Übungen
C 1.1 [1] Was war der erste Computer, den Sie benutzt haben? Was
für einen Prozessor hatte er, wieviel RAM-Speicher und wie groß
war die Festplatte (falls es eine gab – falls nicht, wie wurden Daten
dauerhaft gespeichert)?
20
1.2 Bestandteile eines Computers
Werfen wir bei dieser Gelegenheit nochmal einen Blick auf das »In-
nenleben« eines Computers (genauer gesagt eines »IBM-kompatiblen«
PC) und die Komponenten, die wir dort finden:
B Das ist ein genialer Trick, der auf den Computerpionier John
von Neumann, einen Zeitgenossen von Howard Aiken, zu-
rückgeht. Im Grunde gibt es dann nämlich gar keinen Un-
terschied zwischen Programmcode und Daten mehr – das
heißt, dass Programme Programmcode genauso manipulie-
ren können wie Adressen oder Kochrezepte. (In der alten
21
Zeit musste man zum »Programmieren« außen am Com-
puter Kabel umstöpseln, oder die Programme waren auf
Papierstreifen oder -karten gelocht und konnten nicht ohne
Weiteres geändert werden.)
hatte.
5 Alles übrigens dank dem nicht nachlassenden Interesse der Menschheit an beeindru-
ckenden Computerspielen. Wer behauptet, dass Videospiele zu nichts nütze seien, sollte
sich das mal in Ruhe durch den Kopf gehen lassen.
22
auch noch vorne und hinten ins Spiel kommen, und das durchaus
im wörtlichen Sinne: Für fotorealistische Spiele ist es ja absolut
entscheidend, ob ein Monster vor oder hinter einer Mauer steht,
also zu sehen ist oder nicht, und der Sinn moderner Grafikkarten
ist unter anderem, dem Prozessor des Rechners solche Entschei-
dungen abzunehmen, damit der sich in der Zeit um andere Dinge
kümmern kann. Heutige Grafikkarten haben entsprechend auch
eigene Prozessoren, die mitunter viel schneller rechnen können
als die CPU des Rechners selbst, aber nicht so allgemein gehalten
sind.
23
seinen 240 Volt in den Gleichstrom mit verschiedenen niedrigen
Spannungen umzuwandeln, den die Elektronik im Computer
benötigt. Man muss es so wählen, dass es genug Strom für alle
Komponenten des Computers liefern kann (schnelle Grafikkar-
ten sind typischerweise die Gierhälse Nr. 1), aber dabei möglichst
nicht überdimensioniert ist, damit es bei seiner Arbeit nicht selber
unnötig zu viel Strom verschluckt (Stichwort »Wirkungsgrad«).
Der meiste Strom, den das Netzteil in den Computer pumpt, wird
übrigens über kurz oder lang zu Wärme, weswegen gute Kühlung
sehr wichtig ist. Der Einfachheit halber haben die meisten Com-
puter darum einen oder mehrere Lüfter, die der teuren Elektro-
nik frische Luft zufächeln oder die heiße Luft aus dem Gehäuse
pusten sollen. Wenn man sehr sorgfältig ist, kann man Computer
bauen, die ohne Lüfter auskommen und darum schön leise sind,
aber solche Computer sind dann im Vergleich ziemlich teuer und
meistens auch nicht so schnell (denn »schnell« ist bei Prozessoren
und Grafikkarten in etwa gleichbedeutend mit »heiß«).
Festplatten Während der RAM-Speicher des Computers für die Da-
ten benutzt wird, die gerade in Bearbeitung sind (Texte, Tabellen,
Web-Seiten, Programme, die geschrieben werden, Musik, Videos,
…– und natürlich die Programme selbst, mit denen Sie diese Da-
ten bearbeiten), werden Daten, die gerade nicht aktiv bearbeitet
werden, auf einer Festplatte gespeichert. Hauptgrund dafür ist,
dass Festplatten viel mehr Daten speichern können als der RAM-
Speicher gängiger Computer – die Kapazitäten von Festplatten
messen wir heute im Tebibyte-Bereich (1 TiB = 240 Byte), sie liegen
also um einen Faktor 100–1000 über typischen RAM-Kapazitäten.
Langsam in Mode kommen SSDs oder solid-state disks, die die Da-
ten statt auf magnetischen Scheiben in Flash-Speicher ablegen, ei-
ner Art von RAM-Speicher, der auch ohne Strom seine Informatio-
nen halten kann. SSDs sind schneller als magnetische Festplatten,
aber pro Gigabyte Speicherkapazität beträchtlich teurer. Dafür ha-
ben sie keine beweglichen Teile, sind stoßunempfindlich und im
Vergleich zu herkömmlichen Festplatten energiesparend, was sie
für tragbare Computer interessant macht.
26
Medien von CD- oder 100 von DVD-Größe, und die ständi-
ge Wechselei wäre auch nervend. (Sogar auf Blu-ray-Discs
passen maximal 50 GiB oder so, und Laufwerke, die Blu-ray-
Discs schreiben können, sind noch ziemlich teuer.)
Anzeige In alten Filmen sieht man sie noch: die grün leuchtenden Com-
puterbildschirme. In der Realität sind sie allerdings bis auf Spe-
zialfälle verschwunden, Farbe ist angesagt, und neue Bildschir-
me sind auch nicht mehr fett und klobig wie die Röhrenmonito-
re (CRT, engl. cathode ray tube), die früher üblich waren, sondern
sind flache, elegante Monitore auf der Basis von Flüssigkristal-
len (LCD, liquid crystal display). LCDs haben nicht nur den Vor-
teil, weniger Platz auf dem Schreibtisch wegzunehmen, sondern
flimmern auch nicht und belasten den Anwender nicht mit mög-
licherweise schädlicher Strahlung – eine Win-Win-Situation! Ein
paar Nachteile gibt es auch, zum Beispiel ändert sich bei LCDs
das Aussehen des Bilds, wenn man aus einem zu schrägen Win-
kel auf die Anzeige schaut, und billigere Geräte liefern mitunter
ein fleckiges Bild, weil die Beleuchtung nicht gleichmäßig ist.
Übungen
C 1.2 [2] Schrauben Sie Ihren Computer auf (ggf. unter der Aufsicht
Ihres Lehrers, Trainers oder Erziehungsberechtigten – und das
Gerät unbedingt vorher ausschalten und vom Stromnetz tren-
nen!) und identifizieren Sie die wichtigsten Komponenten wie
CPU, RAM-Speicher, Hauptplatine, Grafikkarte, Netzteil und
Festplatte. Welche Komponenten in Ihrem Computer haben wir
hier nicht aufgezählt?
29
1.3 Software
• Das Betriebssystem sorgt dafür, dass Sie mit dem Computer tat-
sächlich etwas anfangen können: Es verwaltet die Ressourcen des
Computers, also den RAM-Speicher, die Festplatten, die Rechen-
zeit auf der (oder den) CPU(s), die einzelne Programme nutzen
dürfen, und den Zugriff auf andere Peripheriegeräte. Es sorgt da-
für, dass Programme gestartet und beendet werden können, dass
7 Definition von Hardware: »Die Teile des Computers, die man treten kann« (Jeff Pesis)
30
die verschiedenen Benutzer des Computers einander nicht in die
Quere kommen und dass jedes Programm auch mal laufen darf.
Außerdem regelt es – auf einer elementaren Ebene – die Teilnah-
me des Computers an einem lokalen Netz oder dem Internet. Das
Betriebssystem stellt meistens auch eine grafische Oberfläche zur
Verfügung und bestimmt so maßgeblich, wie der Computer für
seine Benutzer »aussieht« und sich »anfühlt«.
Wenn Sie einen neuen Computer kaufen, wird dieser meist mit
einem vorinstallierten Betriebssystem geliefert: PCs mit Microsoft
Windows, Macs mit (Mac) OS X, Smartphones oft mit Android (ei-
nem Linux-Ableger). Das Betriebssystem ist mit einem Computer
aber nicht so eng verbunden wie die Firmware, sondern kann in
vielen Fällen durch ein anderes ersetzt werden – auf den meisten
PCs und Macs können Sie zum Beispiel Linux installieren.
8 Manchmal hört man auch das Wort »Applikation«, aber eine Applikation ist etwas,
was über ein Loch in den Jeans genäht wird. Die neudeutsche Kurzversion »App« ist je-
doch wahrscheinlich nicht mehr zu stoppen.
31
1.4 Die wichtigsten Betriebssysteme
Das heutige Windows ist ein Nachkomme von »Windows NT«, mit
dem Microsoft in den 1990er Jahren versuchte, ein zeitgemäßes Betriebs-
system zur Verfügung zu stellen (frühere Versionen wie »Windows 95«
waren grafische Aufsätze für das damalige Betriebssystem von Micro-
soft, MS-DOS, und selbst für die 1990er ziemlich primitiv). Der Anstand
verbietet uns hier eine kritische Würdigung von Windows; es soll genü-
gen, dass es in etwa das tut, was man von einem Betriebssystem erwar-
ten würde, eine grafische Oberfläche zur Verfügung stellt und Unter-
stützung für die meisten Peripheriegeräte mitbringt (oder die Hersteller
dieser Geräte bieten Windows-Unterstützung an).
9 Viele Leute wissen überhaupt gar nicht, dass es etwas Anderes gibt.
32
Der »Macintosh« von Apple kam 1984 in den Handel und verwendet
seither ein Betriebssystem namens »Mac OS«. Über die Jahre hat App-
le verschiedene zum Teil radikale Änderungen an der Plattform (heu-
tige Macs sind technisch im Wesentlichen dasselbe wie Windows-PCs)
und am Betriebssystem gemacht. Bis einschließlich zur Version 9 war
Mac OS ein ziemlich wackliges Etwas, das zum Beispiel die gleichzeitige
Ausführung von mehreren Programmen nur rudimentär unterstützte.
Das aktuelle »Mac OS X« – das »X« ist eine römische 10, nicht der Buch-
stabe »X« – basiert auf einem an BSD-Unix angelehnten Fundament und
ist Linux konzeptuell nicht unähnlich.
1.4.2 Linux
Linux ist ein Betriebssystem, das ursprünglich von Linus Torvalds als
Neugierprojekt begonnen wurde, aber dann ein Eigenleben annahm –
inzwischen arbeiten Hunderte von Entwicklern (nicht nur Studenten
und Hobby-Programmierer, sondern auch Profis von Firmen wie IBM,
Red Hat oder Oracle) an seiner Weiterentwicklung.
Linux wurde inspiriert von Unix, einem in den 1970er Jahren bei den
AT&T Bell Laboratories entwickelten Betriebssystem für »kleine« Com-
puter (siehe oben für die Bedeutung von »klein« in diesem Kontext), das
sich schnell zum bevorzugten System für Wissenschaft und Technik ent-
10 Eigentlich ist der wirkliche Kriegsschauplatz nicht Windows, sondern Office – die
meisten Leute kaufen ja nicht Windows, weil sie Windows so innig lieben, sondern weil
es das einzige Betriebssystem für beliebige (d. h. billige) PCs ist, wo Office läuft –, aber
da gilt dieselbe Überlegung, wenn man statt »Apple« »Google« einsetzt. Tatsächlich sind
Office und Windows (für PCs) die einzigen Produkte, mit denen Microsoft nennenswert
Geld verdient; alles andere, was Microsoft macht (mit der möglichen Ausnahme der Spie-
lekonsole Xbox), ist ein Verlustgeschäft.
34
wickelte. Linux verwendet in sehr weiten Teilen dieselben Konzepte und
Grundideen wie Unix, und für Unix geschriebene Software ist leicht auf
Linux zum Laufen zu bringen, aber Linux selbst enthält keinen Unix-
Code, ist also ein unabhängiges Projekt.
Im Gegensatz zu Windows und OS X steht hinter Linux keine einzel-
ne Firma, deren wirtschaftlicher Erfolg vom Erfolg von Linux abhängt.
Linux ist »frei verfügbar« und kann von jedem benutzt werden – auch
kommerziell –, der die Spielregeln einhält (dazu im nächsten Kapitel
mehr). Dies zusammen mit dem Umstand, dass Linux inzwischen nicht
nur auf PCs läuft, sondern in im Wesentlichen identischer Form vom
Telefon (das populärste Betriebssystem für Smartphones, Android, ist
ein Ableger von Linux) bis zum größten Großrechner (die 10 schnells-
ten Rechner der Welt laufen alle unter Linux) auf allen Arten von Rech-
nern zu finden ist, macht Linux zum flexibelsten Betriebssystem in der
Geschichte des modernen Computers.
Strenggenommen ist »Linux« nur der Betriebssystem-Kern, also das
Programm, das sich um die Ressourcenverteilung an Anwendungspro-
gramme und Dienstprogramme kümmert. Da ein Betriebssystem oh-
ne Anwendungsprogramme aber nicht besonders nützlich ist, installiert
man meist eine Linux-Distribution, also ein Paket aus dem eigentlichen
»Linux« nebst einer Auswahl von Anwendungs- und Dienstprogram-
men, Dokumentation und anderen Nützlichkeiten. Das Schöne ist, dass
die meisten Linux-Distributionen wie Linux selbst »frei verfügbar« und
damit kostenlos oder sehr preisgünstig zu haben sind. Auf diese Weise
können Sie einen Rechner mit Programmen ausstatten, deren Äquiva-
lente für Windows oder OS X etliche tausend Euro kosten würden, und
Sie geraten nicht in Gefahr, wegen Lizenzverstößen belangt zu werden,
nur weil Sie Ihre Linux-Distribution auf allen Ihren Computern und de-
nen von Tante Frieda und Ihren Kumpels Susi und Alex installiert ha-
ben.
35
1.4.3 Mehr Unterschiede und Gemeinsamkeiten
Tatsächlich unterscheiden die drei großen Betriebssysteme – Linux,
Windows und OS X – sich in ihrer Anmutung für den Benutzer heute
nur noch in Details. Alle drei bieten eine grafische Oberfläche (GUI,
graphical user interface) an, die es auch dem weitgehend unbedarften
Anwender ermöglicht, ohne tiefgehende Computerkenntnisse durch
einfache Gesten wie Klicken und Ziehen seine Dateien zu verwalten,
Programme zu starten und so weiter. Viele populäre Anwendungs-
programme stehen auch für alle drei Plattformen zur Verfügung, so
dass es fast unerheblich wird, welches der Betriebssysteme Sie letzten
Endes benutzen, solange Sie sowieso die meiste Zeit im Web-Browser,
Office-Paket oder Mail-Programm verbringen. Das ist ein Vorteil, weil
so bei Bedarf eine »schrittweise« Migration von einem System zu einem
anderen möglich wird.
Neben der grafischen Oberfläche bieten alle drei Systeme auch ei-
ne Möglichkeit, auf einer »Kommandozeile« textuelle Befehle einzuge-
ben, die das System dann ausführt. Bei Windows und OS X nutzen das
vorwiegend Systemadministratoren, während »gewöhnliche« Benutzer
normalerweise einen weiten Bogen darum machen – eine Frage der Kul-
tur. Bei Linux dagegen ist die Kommandozeile weniger verpönt, was
mit der Abstammung des Systems aus der technisch-wissenschaftlichen
Unix-Philosophie zu tun haben mag. Tatsache ist, dass viele Aufgaben
sich bequemer und effizienter über die Kommandozeile erledigen las-
sen, vor allem mit den mächtigen Werkzeugen, die Linux (und eigent-
lich auch OS X) dafür zur Verfügung stellen. Als angehender Linux-An-
wender tun Sie gut daran, sich der Kommandozeile zu öffnen und ihre
Stärken und Schwächen kennenzulernen, so wie Sie auch die Stärken
und Schwächen der grafischen Oberfläche kennenlernen sollten. Eine
Kombination aus beiden gibt Ihnen die größte Flexibilität.
36
Übungen
C 1.3 [1] Wenn Sie Erfahrung mit einem proprietären Betriebssys-
tem wie Windows oder (Mac) OS X haben: Welche Anwendungs-
programme nutzen Sie dort vor allem? Welche davon sind »freie
Software«?
37
1.5 Ausblick
38
Zusammenfassung
39
2 Linux und freie Software
Lernziele
• Die Grundprinzipien von Linux und freier Software kennen
• Die gängigen FOSS-Lizenzen einordnen können
• Von den wichtigsten freien Anwendungsprogrammen gehört ha-
ben
• Von den wichtigsten Linux-Distributionen gehört haben
Vorkenntnisse
• Grundkenntnisse über Computer und Betriebssysteme (Kapitel 1)
2.1 Linux: Eine Erfolgsgeschichte
B Unix hatte zu diesem Zeitpunkt schon gut 20 Jahre auf dem Bu-
ckel, aber war das Betriebssystem der Wahl an Universitäten und
überall da, wo Forschung und Entwicklung betrieben wurde – die
technisch-wissenschaftlichen »Workstations« der damaligen Zeit
liefen praktisch alle mit verschiedenen Unix-Versionen.
B Unix selbst hatte – fast wie Linux – als »Hobbyprojekt« von Ken
Thompson und Dennis Ritchie bei den Bell Laboratories, dem
Forschungsinstitut des US-Telekommunikationsgiganten AT&T,
angefangen. Es mauserte sich schnell zu einem sehr nützlichen
System, und da es zum größten Teil in einer höheren Program-
miersprache (C) geschrieben war, konnte es relativ schnell von
der ursprünglichen PDP-11 auf andere Rechnerplattformen por-
tiert werden. Außerdem durfte AT&T in den 1970er Jahren keine
Software verkaufen, so dass Unix ohne Support zu Selbstkosten
»verschenkt« wurde – und da das System klein und übersicht-
lich war, wurde es zur beliebten Fallstudie in den Betriebssystem-
Seminaren der meisten Universitäten.
41
und bauten dabei verschiedene Verbesserungen ein, die als »BSD«
(kurz für Berkeley Software Distribution) in Umlauf kamen. Diverse
Ableger von BSD sind auch heute noch aktuell.
Am 25. August 1991 kündigte Linus sein Projekt öffentlich an und lud
den Rest der Welt zur Mithilfe ein. Zu diesem Zeitpunkt funktionierte
das System als alternativer Betriebssystemkern für Minix.
B Einen richtigen Namen hatte das System damals noch nicht. Linus
nannte es »Freax« (aus »Freak« und »Unix«); er hatte am Anfang
kurz über »Linux« als Name nachgedacht, die Idee aber dann als
zu selbstverliebt abgelehnt. Als Linus’ System auf den FTP-Server
der Universität hochgeladen wurde, benannte Linus’ Kollege Ari
Lemmke, dem der Name »Freax« nicht gefiel, es in eigener Regie
in »Linux« um. Linus stimmte der Änderung später zu.
42
80 MB
2.0
2.1
70 MB
2.2
2.3
60 MB 2.4
Größe von linux-*.tar.bz2
2.5
50 MB 2.6
3.x
40 MB
30 MB
20 MB
10 MB
0 MB
1996 1998 2000 2002 2004 2006 2008 2010 2012 2014
43
B Ebenfalls neu in Linux 2.0 war »Tux«, der Pinguin, als offizielles
Linux-Maskottchen. Linus Torvalds war in Australien von einem
Pinguin angefallen worden, was ihn sehr beeindruckt hatte. Der
sitzende Pinguin mit den gelben Füßen wurde von Larry Ewing
gezeichnet und der Allgemeinheit zur Verfügung gestellt.
Mit Linux 2.6 wurde Anfang 2004 der Entwicklungsprozess neu organi-
siert. Galten vorher Versionsnummern mit ungerader zweiter Stelle (et-
wa »2.3«) als Entwickler-Versionen und solche mit gerader zweiter Stelle
(zum Beispiel »2.0«) als stabile Versionen für Endbenutzer, beschlossen
die Linux-Entwickler, die Entwickler- und die stabilen Versionen künf-
tig nicht mehr so stark divergieren zu lassen. Ab Linux 2.6 gab es keine
separate Entwicklungslinie mehr, sondern Neuerungen fließen jeweils
in die nächste Version ein und werden vor deren offizieller Freigabe
möglichst ausgiebig getestet.
B Man kann sich das ungefähr so vorstellen: Nach der Freigabe von
Linux 2.6.37 sammelt Linus Neuerungen für den nächsten Linux-
Kern, baut sie in seine offizielle Version ein und veröffentlicht die-
se dann als Linux 2.6.38-rc1 (für release candidate 1). Diese Version
wird von diversen Leuten ausprobiert, und Reparaturen und Ver-
besserungen fließen in die Version 2.6.38-rc2 ein und so weiter.
Irgendwann sieht der Code stabil genug aus, dass er als »Linux
2.6.38« offiziell freigegeben werden kann, und der Prozess wie-
derholt sich dann mit der Version 2.6.39.
44
Im Juli 2011 erklärte Linus die damals gerade in Vorbereitung befind-
liche Version 2.6.40 summarisch zur Version 3.0 – nur um die Numme-
rierung zu vereinfachen, umwälzende Neuerungen gab es keine.
Das Projekt »Linux« ist auch heute nicht abgeschlossen. Linux wird
ständig aktualisiert und erweitert, und zwar von Hunderten von Pro-
grammierern auf der ganzen Welt, denen inzwischen mehrere Millio-
nen zufriedene private und kommerzielle Anwender gegenüberstehen.
Man kann auch nicht sagen, dass das System »nur« von Studenten
und anderen Amateuren entwickelt wird – viele Leute, die am Linux-
Kern mitarbeiten, haben wichtige Posten in der Computerindustrie
und gehören zu den fachlich angesehensten Systementwicklern über-
haupt. Inzwischen läßt sich mit Berechtigung behaupten, dass Linux
das Betriebssystem mit der breitesten Hardwareunterstützung über-
haupt ist, nicht nur bezogen auf die Plattformen, auf denen es läuft
(vom Smartphone bis zum Großrechner), sondern auch auf die Trei-
berunterstützung zum Beispiel auf der Intel-PC-Plattform. Linux dient
auch als Test- und Forschungsplattform für neue Betriebssystem-Ideen
in Industrie und Hochschule; es ist zweifellos eines der innovativsten
derzeit verfügbaren Betriebssysteme.
Die Flexibilität von Linux macht es auch zum Betriebssystem der
Wahl für Anwendungen wie Virtualisierung und »Cloud Computing«.
Virtualisierung erlaubt es, auf einem tatsächlichen (»physikalischen«)
Rechner mehrere bis viele »virtuelle« Rechner zu simulieren, die über
ihr eigenes Betriebssystem verfügen und für dort laufende Programme
so aussehen wie »echte« Rechner. Dies führt zu effizienterer Nutzung
von Ressourcen und zu höherer Flexibilität: Die gängigen Infrastruk-
turen für Virtualisierung gestatten es, virtuelle Maschinen sehr schnell
von einem physikalischen Rechner auf einen anderen zu »migrieren«,
und als Betreiber einer entsprechenden Infrastruktur können Sie so sehr
bequem auf Lastsituationen und Ausfälle reagieren. Cloud Computing
45
ist darauf aufbauend die Idee, Rechenleistung nach Bedarf »auf Abruf«
zur Verfügung zu stellen und Firmen damit die Möglichkeit zu geben,
auf großangelegte Rechenzentren zu verzichten, die nur gelegentlich bei
Anfragespitzen tatsächlich voll ausgelastet werden und ansonsten vor
allem Kosten verursachen. Anbieter von Cloud-Computing gestatten ih-
ren Kunden die Nutzung virtueller Maschinen über das Internet, bei Ab-
rechnung auf Basis der tatsächlichen Nutzungsdauer, und das kann ge-
genüber dem Unterhalt eines »realen« Rechenzentrums zu erheblichen
Einsparungen führen, insbesondere wenn man einbezieht, dass Sie als
Kunde nicht nur die Anschaffungskosten, sondern auch die Personal-,
Material- und Stromkosten für den 24/7-Betrieb des Rechenzentrums
vermeiden.
Übungen
C 2.1 [2] Suchen Sie im Internet nach der berühmt-berüchtigten Dis-
kussion zwischen Andrew S. Tanenbaum und Linus Torvalds, in
der Tanenbaum sagt, Linus wäre mit etwas wie Linux bei ihm im
Praktikum durchgefallen. Was halten Sie davon?
46
2.2 Frei oder Open Source?
47
und in Umlauf zu bringen; der Verlag kann damit Geld verdienen und
der Autor muss sich nicht selbst um Vervielfältigung, Werbung, Vertrieb
usw. kümmern, so dass beiden gedient ist.
Auch Software für Computer (die man als eine Art von Schriftwerk
ansehen kann und in der mitunter erhebliche Kreativität steckt) unter-
liegt dem Schutz des Urheberrechts. Das heißt, dass es grundsätzlich
nicht erlaubt ist, ein Programm oder ein komplettes Softwarepaket ein-
fach so zu kopieren, ohne dass der Urheber (der Programmierer oder
dessen Firma) das ausdrücklich gestattet hat.
B In den späten 1970er und 1980er Jahren wurde es mit der zu-
nehmenden Verbreitung von Computern in Büros immer selbst-
verständlicher, Software nicht zu verschenken, sondern zu ver-
kaufen. Nicht nur das – die Softwarefirmen verkauften nur den
ausführbaren Maschinencode, nicht den Quellcode, an dem man
hätte sehen können, wie die Software funktioniert, oder gar Ver-
änderungen hätte machen können. Irgendwann war ein Punkt
erreicht, wo Richard M. Stallman, damals Forscher am MIT, be-
schloss, dieser Entwicklung entgegenzuwirken und an einem
System zu arbeiten, das die Kultur des Teilens, wie sie in den
1960er und 1970er Jahren üblich war, wieder in den Vordergrund
stellen sollte. Dieses »GNU«-System3 ist zwar immer noch nicht
ganz fertig, aber viele Komponenten davon kommen heute in
Linux-Systemen zum Einsatz.
Auf Richard M. Stallman (oft kurz »RMS« genannt) geht das Kon-
zept der »freien Software« zurück. »Frei« heißt in diesem Zusammen-
hang nicht »kostenlos«, sondern dass der Benutzer »frei« ist, verschie-
dene Dinge zu tun, die er mit proprietärer Software nicht könnte oder
dürfte4 . RMS nennt eine Software »frei«, wenn vier Bedingungen, die
»vier Freiheiten«, erfüllt sind:
• Man muss das Programm für jeden beliebigen Zweck benutzen
dürfen (Freiheit 0)
• Man muss studieren können, wie das Programm funktioniert,
und es an seine eigenen Bedürfnisse anpassen können (Freiheit 1)
3 »GNU« ist eine »rekursive« Abkürzung für GNU’s Not Unix.
4 Die Free Software Foundation, Stallmans Stiftung zur Förderung freier Software, nennt
das free as in speech, not as in beer, also »frei wie freie Rede, nicht wie Freibier«.
50
• Man muss das Programm weitergeben dürfen, um seinem Nächs-
ten zu helfen (Freiheit 2)
• Man muss das Programm verbessern und die Verbesserungen
veröffentlichen dürfen, um der Allgemeinheit zu nutzen (Frei-
heit 3).
Wie kann man mit freier Software Geld verdienen, wenn jeder die
Software ändern und weitergeben darf? Eine sehr berechtigte Frage.
Hier sind ein paar Ideen für »Open-Source-Geschäftsmodelle«:
51
• Sie können für die freie Software Zusatzleistungen wie Unterstüt-
zung, Dokumentation oder Training anbieten und sich dafür be-
zahlen lassen (für uns als Linup Front GmbH funktioniert das sehr
gut, und auch das LPI kann anscheinend vom Linux-Zertifizie-
rungsgeschäft einigermaßen leben).
52
läuft es oft darauf hinaus, dass man die proprietäre Version
braucht, weil wichtige Funktionen in der freien Version nicht
zur Verfügung stehen und es zuviel Aufwand wäre, diese in
eigener Regie »nachzurüsten«. Die »freie« Version hat dann
in erster Linie die Rolle eines Werbeträgers, wenn die Her-
stellerfirma als modern und »open-source-freundlich« gel-
ten möchte, ohne das aber wirklich zu meinen.
2.2.2 Lizenzen
Wie wird eine Software zur »freien« oder »Open-Source«-Software? Wir
hatten gesagt, dass gewisse Rechte – etwa das Recht zur Vervielfältigung
oder zur Veränderung eines Werks – dem Urheber des Werks vorbehal-
ten sind, er diese Rechte aber auch an andere weitergegeben kann. Dies
geschieht (wenn es geschieht) auf dem Weg einer »Lizenz«, also eines
juristischen Textes, der festlegt, welche Rechte der Empfänger der Soft-
ware durch das Kaufen, Herunterladen, … an der Software erwirbt.
Schon das Urheberrecht als solches erlaubt es dem Käufer (oder
rechtmäßigem Herunterlader) einer Software, die Software zum Bei-
spiel auf einem Computer zu installieren, aufzurufen und laufen zu
lassen. Das resultiert einfach daraus, dass ihm die Software vom Ur-
heber zugänglich gemacht wurde – schließlich hat es keinen Zweck,
jemandem ein Programm zu verkaufen, das er anschließend nicht be-
nutzen darf. (Umgekehrt hat der, der dem Programmautor Geld für
das Programm gegeben hat, grundsätzlich sogar ein Recht darauf, als
Gegenleistung das Programm benutzen zu dürfen.) Andere Aktionen,
etwa das unkontrollierte Kopieren und Weitergeben oder das Verändern
des Programms, schließt das Urheberrecht dagegen aus, und wenn der
Programmautor jemandem das Recht dazu geben möchte, muss er es
in die Lizenz schreiben.
• Wenn Sie ein neues Programm schreiben, das Teile eines GPL-Pro-
gramms beinhaltet, müssen Sie das neue Programm als »abgelei-
tetes Werk« auch unter die GPL stellen.
56
die Benutzung einer dynamisch ladbaren GPL-Bibliothek
in einem Programm dazu, dass das Programm unter die
GPL fällt, sogar wenn es selber überhaupt keinen Code der
GPL-Bibliothek beinhaltet und darum im Sinne des Urhe-
berrechts auch nicht »abgeleitet« sein kann. Wieviel hiervon
auf Wunschdenken beruht und wieviel tatsächlich urheber-
rechtlich haltbar ist, bedarf grundsätzlich einer gerichtlichen
Klärung.
Die GPL bezieht sich ausschließlich auf die Veränderung und Weiterga-
be der Software und nicht auf deren Einsatz.
Die GPL sagt nichts über den möglichen Preis des Produkts aus. Es ist
absolut legal, dass Sie Kopien von GPL-Programmen verschenken oder
auch Geld dafür verlangen, solange Sie auch den Quellcode mitliefern
oder auf Anfrage verfügbar machen und der Empfänger der Software
auch die GPL-Rechte bekommt. GPL-Software ist damit also nicht un-
bedingt »Freeware«.
Mehr Informationen erhalten Sie durch Lesen der GPL [GPL91], die
übrigens jedem entsprechenden Produkt (auch Linux) beiliegen muss.
Die GPL gilt als konsequenteste der freien Lizenzen in dem Sinne,
dass sie – wie erwähnt – sicherzustellen versucht, dass einmal unter der
58
GPL veröffentlichter Code auch frei bleibt. Es haben schon öfters Firmen
versucht, GPL-Code in ihre eigenen Produkte zu integrieren, die dann
nicht unter der GPL freigegeben werden sollten. Allerdings haben die-
se Firmen bisher immer nach einer nachdrücklichen Ermahnung durch
(meist) die FSF als Rechteinhaberin eingelenkt und die Lizenzbestim-
mungen eingehalten. Zumindest in Deutschland ist die GPL auch schon
gerichtlich für gültig erklärt worden – einer der Linux-Kernelprogram-
mierer konnte vor dem Landgericht Frankfurt ein Urteil gegen die Firma
D-Link (einen Hersteller von Netzwerkkomponenten, hier einem NAS-
Gerät auf Linux-Basis) erwirken, in dem letztere zu Schadensersatz ver-
klagt wurde, weil sie bei der Verbreitung ihres Geräts den GPL-Auflagen
nicht genügte [GPL-Urteil06].
B Ein Prozess, bei dem ein Softwareautor eine Firma verklagt, die
seine GPL-Software vertreibt, ohne sich an die GPL zu halten,
würde aller Wahrscheinlichkeit nach so aussehen:
Richter Was ist jetzt das Problem?
Softwareautor Herr Vorsitzender, die Beklagte hat meine Soft-
ware vertrieben, ohne die Lizenz dafür einzuhalten.
59
Richter (zum Rechtsanwalt der Beklagten) Stimmt das?
An dieser Stelle kann die beklagte Firma »Ja« sagen und der Pro-
zess ist im Wesentlichen vorbei (bis auf das Urteil). Sie kann auch
»Nein« sagen, aber sie muss dann begründen, warum das Urhe-
berrecht für sie nicht gilt. Ein unangenehmes Dilemma und der
Grund, warum wenige Firmen sich diesen Stress machen und die
meisten GPL-Streitigkeiten außergerichtlich geklärt werden.
60
2.2.4 Andere Lizenzen
Außer der GPL gibt es auch noch andere Lizenzen, die im FOSS-Umfeld
üblich sind. Hier ist ein kleiner Überblick:
BSD-Lizenz Die BSD-Lizenz stammt aus dem Umfeld der Unix-Dis-
tribution der University of California in Berkeley und ist absicht-
lich sehr einfach gehalten: Der Empfänger der Software bekommt
im Wesentlichen das Recht, mit der Software zu machen, was er
will, solange er nicht den Eindruck erweckt, als stünde die Uni-
versität (oder im erweiterten Sinne der ursprüngliche Softwareau-
tor) hinter ihm. Eine Haftung für das Programm wird so weit wie
möglich ausgeschlossen. Der Lizenztext muss im Quellcode des
Programms erhalten bleiben und – beim Vertrieb des Programms
oder veränderter Versionen davon in ausführbarer Form – in der
Dokumentation wiedergegeben werden.
61
angepasster Form), und auch große Teile des Betriebssys-
temkerns von OS X auf dem Macintosh beruhen auf BSD.
62
Musik, Filmen, … zu vergrößern, die anderen zur freien Übernahme,
Veränderung und Weitergabe zur Verfügung stehen. Da die gängigen
FOSS-Lizenzen sehr auf Software abgestimmt sind, wurden hierfür die
Creative-Commons-Lizenzen entwickelt, die es Urhebern ermöglichen,
ihre Werke kontrolliert der Allgemeinheit zu übergeben. Dabei kön-
nen sie verschiedene Einschränkungen festlegen, wie dass das Werk
nur unverändert weitergegeben werden darf, dass Änderungen erlaubt
sind, aber (GPL-mäßig) Empfänger der Änderungen wieder Änderun-
gen machen dürfen, oder dass eine kommerzielle Nutzung des Werks
ausgeschlossen ist.
»Public Domain« beschreibt Kulturgüter, die gemeinfrei sind, also kei-
nen Urheberrrechten mehr unterliegen. Während es in der angelsächsi-
schen Rechtstradition möglich ist, ein Werk (also auch eine Software)
ausdrücklich in die public domain zu stellen, geht das in Deutschland
nicht, da das Konzept im deutschen Urheberrecht gar nicht existiert.
Hierzulande werden Werke erst 70 Jahre nach dem Ableben des letz-
ten Urhebers automatisch gemeinfrei. Bis das erste Computerprogramm
auf diesem Weg allgemein nutzbar wird, wird es also noch ein bisschen
dauern.
Übungen
C 2.3 [!1] Welche der folgenden Aussagen über die GPL stimmen
und welche sind falsch?
1. GPL-Programme dürfen nicht verkauft werden.
2. GPL-Programme dürfen von Firmen nicht umgeschrieben
und zur Grundlage eigener Produkte gemacht werden.
3. Der Urheber eines GPL-Programms darf das Programm auch
unter einer anderen Lizenz vertreiben.
4. Die GPL gilt nicht, weil man die Lizenz erst zu sehen be-
kommt, nachdem man das Programm schon hat. Damit Li-
zenzbestimmungen gültig werden, muss man sie vor dem
Erwerb der Software sehen und ihnen zustimmen können.
C 2.4 [2] Vergleichen Sie die »vier Freiheiten« der FSF mit den De-
bian Free Software Guidelines ([Link]
guidelines ) des Debian-Projekts (siehe Abschnitt 2.4.4). Welche De-
finition freier Software gefällt Ihnen besser und warum?
64
2.3 Wichtige freie Programme
2.3.1 Überblick
Linux ist ein leistungsfähiges und elegantes Betriebssystem, aber das
schönste Betriebssystem ist nichts wert ohne Programme, die darauf
laufen. In diesem Abschnitt präsentieren wir eine Auswahl der wich-
tigsten freien bzw. Open-Source-Programme, die auf typischen Linux-
PCs zu finden sind.
B Dass irgendein Programm nicht enthalten ist, heißt nicht, dass wir
das Programm nicht gut finden. Der Platz ist halt begrenzt, und
wir versuchen, vor allem diejenige Software abzudecken, die das
LPI in den Prüfungsrichtlinien erwähnt hat (just in case).
65
nux ersetzen. Wenn Sie das geschickt anfangen5 , merken die Be-
nutzer den Unterschied vielleicht gar nicht.
OpenOffi[Link] ist seit Jahren das Flaggschiff-Produkt der FOSS-Ge-
meinde, wenn es um große Büropakete geht. Es hat vor vielen
Jahren als »StarOffice« angefangen und wurde schließlich von
Sun aufgekauft und (in einer leicht abgespeckten Version) als
freie Software in Umlauf gebracht. OpenOffi[Link] enthält alles,
was man so in einem Office-Paket erwartet – Textverarbeitung,
Tabellenkalkulation, Präsentationsprogramm, Geschäftsgrafik,
Datenbank, … –, und kann auch einigermaßen mit den Datenfor-
maten des großen Mitbewerbers von Microsoft umgehen.
LibreOffice Nachdem Sun von Oracle übernommen wurde und die
Zukunft von OpenOffi[Link] zunächst in den Sternen stand, ta-
ten sich einige der wesentlichen OpenOffi[Link]-Entwickler zu-
sammen und veröffentlichten ihre eigene Version von Open-
Offi[Link] unter dem Namen »LibreOffice«. Die beiden Pakete
werden im Moment nebeneinander her entwickelt (Oracle hat
OpenOffi[Link] der Apache Software Foundation übergeben) –
sicherlich kein optimaler Zustand, aber es ist unklar, ob und wie
es zu einer »Wiedervereinigung« kommen wird.
unterschieben …
66
Chromium ist die FOSS-Variante des Google-Browsers »Chrome«.
Chrome hat in der letzten Zeit angefangen, Firefox mächtig Kon-
kurrenz zu machen – auch Chrom{e,ium} ist ein leistungsfähiger,
sicherer Browser mit zahlreichen Erweiterungen. Vor allem die
Google-Webangebote sind auf den Google-Browser abgestimmt
und laufen dort besonders gut.
Thunderbird ist ein Mail-Programm von der Mozilla Foundation. Es
hat große Teile seines Unterbaus mit dem Firefox-Browser ge-
meinsam und bietet – wie Firefox – einen reichen Fundus an
Erweiterungen für verschiedene Zwecke.
The GIMP ist ein Programm, mit dem Sie Fotos und ähnliche Vorla-
gen bearbeiten können. Es kann noch nicht ganz mit Photoshop
mithalten (zum Beispiel fehlen Funktionen bei der Druckvorstu-
fe), aber ist für viele Anwendungen absolut brauchbar und bietet
zum Beispiel bei der Erstellung von Grafiken für das World Wide
Web ein paar Eigenschaften, die Photoshop nicht genauso bequem
zur Verfügung stellt.
Inkscape Wenn The GIMP das Photoshop von Linux ist, dann ist
Inkscape das Pendant zu Illustrator – eine leistungsfähige Soft-
ware zur Erstellung vektorbasierter Grafiken.
ImageMagick ist ein Softwarepaket, mit dem Sie fast beliebige Grafik-
formate in fast beliebige andere umwandeln können. Außerdem
erlaubt es Ihnen die skriptgesteuerte Manipulation von Grafiken
auf nahezu endlose verschiedene Arten. Genial für Webserver
67
und andere Umgebungen, wo mit Grafiken gearbeitet werden
muss, ohne dass Maus und Monitor zum Einsatz kommen kön-
nen.
Audacity dient als Mehrspurtonband, Mischpult und Schneidestation
für Audiodaten aller Art und ist auch auf Windows und dem Mac
populär.
Cinelerra und andere Programme wie KDenlive oder OpenShot sind
»nichtlineare Videoeditoren«, die Videos von digitalen Camcor-
dern, TV-Karten oder Webcams schneiden, vertonen, mit Effek-
ten versehen und in verschiedenen Formaten (von YouTube bis
zur DVD) ausgeben können.
2.3.4 Server-Dienste
Ohne Linux wäre das Internet nicht wiederzuerkennen: Die Hundert-
tausende Server von Google laufen genauso mit Linux wie die Handels-
systeme der meisten großen Börsen der Welt (die Deutsche Börse genau
wie die Börsen von London und New York), weil nur mit Linux die da-
für nötige Leistung realisierbar ist. Tatsächlich wird die meiste Internet-
Software heute zuerst auf Linux entwickelt, und auch an Universitäten
findet die Forschung in diesem Bereich natürlich auf der quelloffenen
Linux-Plattform statt.
68
Apache ist mit Abstand der beliebteste Web-Server auf dem Internet
– mehr als die Hälfte aller Webseiten laufen auf einem Apache-
Server.
Postfix ist ein sicherer und extrem leistungsfähiger Mailserver, der für
alle Anforderungen vom »Home-Office« bis zum großen Provider
oder DAX-Unternehmen gerüstet ist.
2.3.5 Infrastruktur-Software
Auch innerhalb eines lokalen Netzes macht ein Linux-Server eine gute
Figur: Zuverlässig, schnell und wartungsarm kann man ihn installieren
und vergessen (bis auf die regelmäßigen Sicherungskopien natürlich!).
69
OpenLDAP dient als Verzeichnisdienst zur Strukturierung mittlerer
und großer Netze und erlaubt durch seine leistungsfähigen Fea-
tures zur Verteilung und Replikation von Daten eine hohe Redun-
danz und Geschwindigkeit bei der Abfrage und Aktualisierung.
DNS und DHCP gehören zur grundlegenden Netzwerkinfrastruktur.
Mit BIND unterstützt Linux den Referenz-DNS-Server, und der
ISC-DHCP-Server kann mit BIND kooperieren, um auch in sehr
großen Netze Clients mit Netzparametern wie IP-Adressen zu
versorgen. Dnsmasq ist ein bequem zu administrierender DNS-
und DHCP-Server für kleine Netze.
70
Übungen
C 2.5 [!1] Von welchen FOSS-Programmen haben Sie schon gehört?
Welche davon haben Sie schon selber benutzt? Finden Sie sie bes-
ser oder schlechter als proprietäre Alternativen? Wenn ja, warum?
Wenn nein, warum nicht?
71
2.4 Wichtige Linux-Distributionen
2.4.1 Überblick
Wenn jemand etwas sagt wie »Ich habe Linux auf meinem Rechner«,
meint er damit in der Regel nicht (nur) Linux, den Betriebssystemkern,
sondern eine komplette Softwareumgebung auf der Basis von Linux.
Dazu gehören meist die Shell bash und die Kommandozeilenwerkzeuge
aus dem GNU-Projekt, der [Link]-Grafikserver und eine grafische Ar-
beitsumgebung wie KDE oder GNOME, Produktivitätsprogramme wie
LibreOffice, Firefox oder The GIMP und viele andere nette Software aus
dem vorigen Abschnitt. Es ist natürlich grundsätzlich möglich, sich alle
diese Komponenten selbst aus dem Internet zusammenzusuchen, aber
die meisten Linux-Anwender benutzen eine vorgefertigte Software-
Sammlung oder »Linux-Distribution«.
B Insbesondere CentOS ist so nahe an RHEL dran, dass Red Hat Ih-
nen bei Bedarf Unterstützung für Ihre CentOS-Rechner verkauft,
ohne dass Sie erst RHEL dort installieren müssen.
2.4.3 SUSE
Die Firma SUSE wurde 1992 unter dem Namen »Gesellschaft für Software-
und System-Entwicklung« als Unix-Beratungshaus gegründet und
schrieb sich entsprechend zuerst »S.u.S.E.«. Eines ihrer Produkte war
eine an den deutschen Markt angepasste Version der Linux-Distribu-
tion Slackware (von Patrick Volkerding), die ihrerseits von der ersten
74
kompletten Linux-Distribution, Softlanding Linux System oder SLS, ab-
geleitet war. S.u.S.E. Linux 1.0 erschien 1994 und differenzierte sich
langsam von Slackware, indem beispielsweise Eigenschaften von Red
Hat Linux wie die RPM-Paketverwaltung oder die /etc/sysconfig -Datei
übernommen wurden. Die erste S.u.S.E.-Linux-Version, die nicht mehr
wie Slackware aussah, war die 4.2 von 1996. SuSE (die Punkte wur-
den irgendwann weggelassen) eroberte bald die Marktführerschaft im
deutschsprachigen Raum und veröffentlichte SuSE Linux als »Kiste« in
zwei Geschmacksrichtungen, »Personal« und »Professional«; letztere
war merklich teurer und enthielt unter anderem mehr Software aus
dem Server-Bereich.
Im November 2003 kündigte die US-amerikanische Softwarefirma
Novell an, die SuSE für 210 Millionen Dollar übernehmen zu wollen;
der Handel wurde dann im Januar 2004 perfekt gemacht. (Bei dieser
Gelegenheit wurde auch das »U« groß gemacht.) Im April 2011 wurde
Novell mitsamt SUSE von der Firma Attachmate übernommen. Attach-
mate ist in Bereichen wie Terminalemulation, Systemmonitoring und
Anwendungsintegration aktiv und hat sich im Linux- und Open-Sour-
ce-Bereich bisher nicht besonders hervorgetan. Seitdem wird Novell in
zwei Einheiten weitergeführt, eine davon ist die SUSE.
Auch SUSE hat inzwischen wie Red Hat den Schritt gemacht,
die »Privatkunden«-Distribution zu öffnen und als »openSUSE«
([Link] ) frei verfügbar zu machen (früher gab es
die Distribution immer erst mit einigen Monaten Verzögerung
75
Benutzer
wählen Entwickler
Projektverantwortliche
Projektführer
ernennt ernennt
Delegierte anerkennen
lige
etc. etc.
iwil
Fre Software in the
Public Interest
(SPI)
2.4.4 Debian
Im Gegensatz zu den beiden großen Linux-Distributionsfirmen Red
Hat und Novell/SUSE ist das Debian-Projekt ([Link] )
76
ein Zusammenschluss von Freiwilligen, die es sich zum Ziel gesetzt
haben, eine hochwertige Linux-Distribution unter dem Namen Debian
GNU/Linux frei zur Verfügung zu stellen. Das Debian-Projekt wurde
am 16. August 1993 von Ian Murdock angekündigt; der Name ist eine
Zusammensetzung seines Vornamens mit dem seiner damaligen Freun-
din (jetzt Ex-Frau) Debra (und wird darum »Debb-Ian« ausgesprochen).
Inzwischen umfasst das Projekt über 1000 Freiwillige.
Grundlage von Debian sind drei Dokumente:
• Die Debian Free Software Guidelines (DFSG) definieren, welche Soft-
ware im Sinne des Projekts als frei“ gilt. Das ist wichtig, denn nur
”
DFSG-freie Software kann Teil der eigentlichen Debian-GNU/Li-
nux-Distribution sein. Das Projekt vertreibt auch nichtfreie Soft-
ware, diese ist jedoch auf den Distributionsservern strikt von der
DFSG-freien Software getrennt: Letztere steht in einem Unterver-
zeichnis main , erstere in non- free . (Es gibt auch noch ein Mittelding
namens contrib ; dort findet sich Software, die für sich genommen
DFSG-frei wäre, aber nicht ohne andere nichtfreie Komponenten
funktioniert.)
• Der Social Contract (»Gesellschaftsvertrag«) beschreibt die Ziele
des Projekts.
• Die Debian Constitution (»Verfassung«) beschreibt die Organisati-
on des Projekts (siehe Abbildung 2.2).
77
Vorteil empfunden. Debian GNU/Linux wird vom Projekt aus-
schließlich zum Download zur Verfügung gestellt; Datenträger
sind von Drittanbietern erhältlich.
2.4.5 Ubuntu
Der wahrscheinlich populärste Debian-Ableger ist Ubuntu ([Link]
[Link]/ ), das von der britischen Firma Canonical Ltd. des südafrika-
nischen Unternehmers Mark Shuttleworth angeboten wird. (»Ubuntu«
ist ein Wort aus der Zulu-Sprache und steht in etwa für »Menschlich-
keit gegenüber anderen«.) Das Ziel von Ubuntu ist es, auf der Basis von
Debian GNU/Linux ein aktuelles, leistungsfähiges und verständliches
Linux anzubieten, das in regelmäßigen Abständen erscheint. Dies wird
zum Beispiel dadurch erreicht, dass Ubuntu im Gegensatz zu Debian
GNU/Linux nur drei statt über zehn Rechnerarchitekturen unterstützt
und sich auf eine Teilmenge der in Debian GNU/Linux angebotenen
Software beschränkt.
78
support-Version, herauskommt, für die Canonical Updates über
einen Fünf-Jahres-Zeitraum verspricht.
Einige Ubuntu-Entwickler sind auch im Debian-Projekt aktiv, so
dass es einen gewissen Austausch gibt. Andererseits sind nicht alle
Debian-Entwickler begeistert von den Abkürzungen, die Ubuntu zu-
weilen im Namen des Pragmatismus nimmt, wo Debian vielleicht nach
tragfähigeren, aber aufwendigeren Lösungen suchen würde. Ubuntu
fühlt sich auch nicht im selben Maße der Idee der freien Software ver-
pflichtet; während alle Infrastrukturwerkzeuge von Debian (etwa das
Verwaltungssystem für Fehlerberichte) als freie Software zur Verfügung
stehen, ist das für die von Ubuntu nicht immer der Fall.
Ubuntu will nicht nur ein attraktives Desktop-System anbieten, son-
dern auch im Server-Bereich mit den etablierten Systemen wie RHEL
oder SLES konkurrieren, also stabile Distributionen mit langem Lebens-
zyklus und guter Wartung anbieten. Es ist nicht klar, wie Canonical Ltd.
auf lange Sicht Geld zu verdienen gedenkt; einstweilen wird das Projekt
vor allem aus Mark Shuttleworths Schatulle unterstützt, die seit dem
Verkauf seiner Internet-Zertifizierungsstelle Thawte an Verisign gut ge-
füllt ist …
2.4.6 Andere
Außer den genannten Distributionen gibt es noch viele weitere, et-
wa Mandriva Linux ([Link] ) oder Turbolinux
([Link] ) als kleinere Konkurrenten von Red Hat und
SUSE, Gentoo Linux ([Link] ) als Distribution mit Fokus
auf den Quellcode, zahlreiche »Live-Systeme« für verschiedene Zwecke
von der Firewall bis hin zur Spiele- oder Multimedia-Plattform sowie
sehr kompakte Systeme, die als Router, Firewall oder Rettungssystem
einsetzbar sind.
Erwähnenswert vielleicht einfach aufgrund der Anzahl der »instal-
lierten Systeme« ist Android, das man mit etwas Wohlwollen durchaus
als »Linux-Distribution« ansehen kann. Android besteht aus einem Li-
nux-Betriebssystemkern mit einer Benutzerumgebung von Google auf
79
der Basis von Googles Version von Java (»Dalvik«) anstatt der üblichen
auf GNU, X, KDE usw. basierenden Benutzerumgebung, die die Grund-
lage der meisten »normalen« Distributionen bildet. Ein Android-Smart-
phone oder -Tablet präsentiert sich dem Benutzer also völlig anders als
ein typischer Linux-PC unter openSUSE oder Debian GNU/Linux, ist
aber dennoch im Grunde seines Wesens ein Linux-System.
B Leider war die LSB nicht der durchschlagende Erfolg, mit dem
man ursprünglich gerechnet hatte – sie wurde oft als Ansatz
missverstanden, die Innovation in Linux zu verlangsamen oder
zu stoppen und die Diversität zu verrringern (wobei es in den
80
meisten Distributionen möglich ist, eine LSB-Umgebung parallel
zu und unabhängig von der eigentlichen Umgebung für distri-
butionseigene Software zur Verfügung zu stellen), während die
Software-Drittanbieter, die eigentlich angesprochen werden soll-
ten, es unter dem Strich vorzogen, ihre Pakete für die wichtigen
»Enterprise-Distributionen« wie RHEL und SLES zu »zertifizie-
ren« und nur diesen Plattformen Unterstützung zu gewähren –
es ist also absolut nicht ausgeschlossen, dass SAP oder Oracle
zum Beispiel auch auf Debian GNU/Linux laufen (oder zum
Laufen zu bringen sind), aber die Kosten für große kommerzielle
Softwarepakete wie diese sind so, dass die Lizenzgebühren für
RHEL oder SLES keinen merkbaren Unterschied im Gesamtbild
machen.
81
B Während Windows- und OS-X-Anwender es gewöhnt sind, sich
Software aus den verschiedensten Quellen zusammenzusuchen6 ,
versuchen zumindest die »großen« Distributionen wie Debian,
openSUSE oder Ubuntu ihren Benutzern eine möglichst umfas-
sende Softwareauswahl direkt über die Paketverwaltungswerk-
zeuge zur Verfügung zu stellen. Diese erlauben den Zugriff auf
»Repositories«, also Paketlagerstätten, der Distributionen und
gestatten zum Beispiel eine (mehr oder weniger komfortable)
Suche nach bestimmten Softwarepaketen, die dann bequem – ge-
gebenenfalls mit ihren Abhängigkeiten – über das Netz installiert
werden können.
6 Wobei Apple und auch Microsoft derzeit vehement dabei sind, das von Smartpho-
nes bekannte Konzept des zentralen »App Stores« auch in ihren PC-Betriebssystemen zu
etablieren.
82
Tabelle 2.1: Vergleich der wichtigsten Linux-Distributionen (Stand: Februar 2012)
83
84
Zusammenfassung
• Die erste Version von Linux wurde von Linus Torvalds entwickelt
und als »freie Software« im Internet zur Verfügung gestellt. Heu-
te wirken Hunderte von Entwicklern weltweit an der Aktualisie-
rung und Erweiterung des Systems mit.
• Freie Software erlaubt Anwendern den Einsatz zu beliebigen
Zwecken, die Einsichtnahme in und die Veränderung des Codes
sowie die Weitergabe originalgetreuer oder modifizierter Versio-
nen.
• Lizenzen für freie Software geben dem Empfänger der Software
Rechte, die er sonst nicht hätte, während Lizenzverträge für pro-
prietäre Software versuchen, den Empfänger zum Verzicht auf
Rechte zu bewegen, die er sonst hätte.
• Die GPL ist eine der populärsten Lizenzen für freie Software.
• Andere gängige Lizenzen für freie Software sind die BSD-Lizenz,
die Apache- oder die Mozilla Public License. Creative-Commons-
Lizenzen sind gedacht für andere Kulturgüter außer Software.
• Es gibt eine große Auswahl freier und Open-Source-Programme
für die unterschiedlichsten Anwendungen.
• Es gibt sehr viele verschiedene Linux-Distributionen. Zu den be-
kanntesten gehören Red Hat Enterprise Linux und Fedora, SUSE
Linux Enterprise Server und openSUSE, Debian GNU/Linux und
Ubuntu.
Literaturverzeichnis
85
TD01 Linus Torvalds, David Diamond (Hg.) Just for Fun: Wie ein Freak
die Computerwelt revolutionierte. Hanser Fachbuch, 2001. ISBN
3-446-21684-7.
86
3 Erste Schritte mit Linux
Lernziele
• Einfache Funktionen von Linux ausprobieren
• Dateien mit einem Texteditor anlegen und ändern können
Vorkenntnisse
• Grundlegende Computerkenntnisse mit anderen Betriebssyste-
men sind nützlich
3.1 Anmelden und Abmelden
88
Anmelden in einer grafischen Umgebung Linux-Arbeitsplatzrechner
bieten Ihnen heutzutage, wie sich das gehört, eine grafische Umgebung
an, und auch der Anmeldevorgang spielt sich normalerweise auf dem
Grafikbildschirm ab. Ihr Rechner präsentiert Ihnen einen Dialog, wo Sie
Ihren Benutzernamen und Ihr Kennwort eingeben können.
B Wundern Sie sich nicht, wenn Sie beim Eingeben Ihres Kenn-
worts nur Sternchen oder Punkte sehen. Das bedeutet nicht, dass
Ihr Rechner Ihre Eingabe missversteht, sondern dass er es Leu-
ten schwerer machen möchte, die Ihnen beim Tippen über die
Schulter schauen, um Ihr Kennwort zu erhaschen.
Nach dem Anmelden baut Ihr Rechner eine grafische Sitzung für Sie
auf, in der Sie über Menüs und Icons (Sinnbilder auf dem Bildschirm-
hintergrund) bequemen Zugang zu Ihren Anwendungsprogrammen
bekommen. Die meisten grafischen Umgebungen für Linux unterstüt-
zen eine Sitzungsverwaltung“, die dafür sorgt, dass beim Anmelden so
”
weit wie möglich der Zustand wieder hergestellt wird, den Ihre Sitzung
hatte, als Sie sich zuletzt abgemeldet haben. Auf diese Weise müssen
Sie sich nicht merken, welche Programme Sie laufen hatten, wo deren
Fenster auf dem Bildschirm platziert waren, und welche Dateien Sie
gerade bearbeitet haben.
Abmelden in einer grafischen Umgebung Wenn Sie mit der Arbeit fer-
tig sind oder den Rechner für einen anderen Benutzer frei machen wol-
len, müssen Sie sich abmelden. Das ist auch wichtig, damit die Sitzungs-
verwaltung Ihre aktuelle Sitzung für das nächste Mal sichern kann. Wie
das Abmelden im Detail funktioniert, hängt von Ihrer grafischen Um-
gebung ab, aber in der Regel gibt es irgendwo einen Menüeintrag, der
alles für Sie erledigt. Konsultieren Sie im Zweifel die Dokumentation
oder fragen Sie Ihren Systemadministrator (oder sich gut auskennenden
Kumpel).
89
Anmelden auf der Textkonsole Im Gegensatz zu Arbeitsplatzrechnern
haben Serversysteme oft nur eine Textkonsole oder stehen in zugigen,
lauten Rechnerräumen, wo man sich nicht länger aufhalten möchte als
nötig, so dass man sich lieber über das Netz anmeldet, um auf dem
Rechner zu arbeiten. In beiden Fällen bekommen Sie keinen grafischen
Anmeldebildschirm, sondern der Rechner fragt Sie direkt nach Ihrem
Benutzernamen und Kennwort. Zum Beispiel könnten Sie einfach etwas
sehen wie
rechner login: _
(wenn wir mal annehmen, dass der betreffende Rechner rechner“ heißt).
”
Hier müssen Sie Ihren Benutzernamen eingeben und mit der Eingabe-
taste abschließen. Daraufhin erscheint in ähnlicher Form die Frage nach
dem Kennwort:
Password: _
$ logout
Auf einer Textkonsole zeigt das System nach dem Abmelden wieder die
Startmeldung und eine Anmeldeaufforderung für den nächsten Benut-
zer. Bei einer Sitzung mit der Secure Shell“ über das Netz bekommen
”
Sie einfach wieder die Eingabeaufforderung Ihres lokalen Rechners.
Übungen
C 3.1 [!1] Versuchen Sie sich beim System anzumelden. Melden
Sie sich anschließend wieder ab. (Einen Benutzernamen und ein
Kennwort verrät Ihnen die Dokumentation Ihres Systems oder
Ihr Trainer/Lehrer.)
C 3.2 [!2] Was passiert, wenn Sie (a) einen nicht existierenden Benut-
zernamen, (b) ein falsches Kennwort angeben? Fällt Ihnen etwas
auf? Welchen Grund könnte es dafür geben, dass das System sich
so verhält, wie es sich verhält?
91
3.2 Arbeitsumgebung und Browser
digt.
92
esse der Übersichtlichkeit und Bedienbarkeit feste Vorgaben
zu machen, die nicht oder nur aufwendig zu ändern sind.
• LXDE und XFCE sind »leichtgewichtige« Arbeitsumgebun-
gen. Sie ähneln in ihrem grundsätzlichen Ansatz KDE und
GNOME, aber sind eher auf sparsamen Umgang mit den
Systemressourcen getrimmt und verzichten daher auf ver-
schiedene aufwendige Dienste wie etwa die semantische
Suche.
• Wenn Sie keine komplette Arbeitsumgebung möchten, kön-
nen Sie auch einen beliebigen »Fenstermanager« (window
manager) installieren und Anwendungsprogramme aus ver-
schiedenen Quellen benutzen. Dann sind natürlich gewisse
Abstriche bei der Einheitlichkeit und dem Zusammenwirken
der Programme nötig, die daraus resultieren, dass es histo-
risch kaum Vorgaben für das Aussehen und Benehmen von
grafischen Programmen unter Unix und Linux gab. Früher
– vor KDE & Co., die in diesem Bereich Standards setzten
– war das der Normalfall, aber heute baut die Mehrheit der
Linux-Anwender auf eine der vorgefertigten Umgebungen.
94
3.2.2 Browser
Eines der wichtigsten Programme auf heutigen Computern ist der Web-
Browser. Glücklicherweise sind die beliebtesten Browser Open-Source-
Programme, und Firefox oder Google Chrome stehen Ihnen für Linux
genauso zur Verfügung wie für Windows oder OS X. (Ihre Distribution
bietet Ihnen wahrscheinlich nicht Google Chrome an, sondern die ech-
te Open-Source-Variante »Chromium«, aber das ist kein großer Unter-
schied.) Suchen Sie im Menü für Anwendungsprogramme nach einem
Eintrag wie »Internet«, wo Sie (unter anderem) einen Browser finden
sollten.
Übungen
C 3.3 [!2] Welche Grafikumgebung ist (wenn überhaupt) auf Ihrem
Rechner installiert? Schauen Sie sich um. Öffnen Sie einen Datei-
manager und prüfen Sie, was passiert, wenn Sie mit der rechten
Maustaste auf ein Icon für eine Datei oder ein Verzeichnis klicken.
Was passiert, wenn Sie mit der rechten Maustaste auf den freien
Fensterhintergrund (zwischen den Icons) klicken? Wie können Sie
eine Datei von einem Verzeichnis in ein anderes verschieben? Wie
können Sie eine neue Datei oder ein neues Verzeichnis anlegen?
Wie können Sie eine Datei umbenennen?
C 3.5 [!2] Öffnen Sie ein Terminalfenster und schließen Sie es wieder.
Unterstützt Ihr Terminalfenster-Programm mehrere Sitzungen im
selben Fenster (etwa über »Unterfenster« mit Karteireitern)?
96
3.3 Textdateien anlegen und ändern
Im Übrigen müssen Sie sich ja nicht jetzt im Moment ein für al-
lemal für einen Editor entscheiden. Niemand hält Sie davon ab,
an Ihrem grafischen Arbeitsplatz-PC einen grafischen Editor zu
97
verwenden und etwas wie Nano nur zu benutzen, wenn Sie nicht
anders können.
99
$ nano meinedatei
(das »$ « ist hier nur eine stilisierte Abkürzung für die Eingabeaufforde-
rung – die bei Ihnen vielleicht etwas barocker aussieht –, und Sie müssen
das nicht eintippen. Vergessen Sie aber nicht, das Kommando mit ↩ zu
beenden!) Anschließend sollten Sie etwas sehen, was Abbildung 3.1 äh-
nelt – also ein weitestgehend leeres Fenster mit einer hervorgehobenen
Zeile oben und zwei »Hilfezeilen« unten, die wichtige Kommandos mit
kurzen Erklärungen auflisten. Die Zeile direkt über den Hilfezeilen ist
die »Statuszeile«, wo Meldungen von Nano erscheinen und wo Sie zum
Beispiel Dateinamen zum Speichern eingeben können.
Text speichern Wenn Sie mit dem Eingeben oder Bearbeiten Ihres Tex-
tes fertig sind, können Sie ihn speichern, indem Sie Strg + o drücken
(halten Sie Strg fest und drücken Sie auf o ). Nano fragt Sie in der Sta-
tuszeile nach einem Namen für die Datei, den Sie eingeben und mit ↩
beenden können. (Über Dateinamen erfahren Sie spätestens in Kapitel 6
mehr.) Nano speichert den Text dann in der benannten Datei.
Nano beenden Nano verlassen können Sie mit Strg + x . Wenn Ihr Text
ungespeicherte Veränderungen enthält, fragt Nano Sie noch, ob der Text
gespeichert werden soll; antworten Sie mit j , wenn Sie das möchten
(Nano wird Sie gegebenenfalls nach einem Dateinamen zum Speichern
fragen), oder mit n , um Nano sofort zu verlassen (wobei Ihre unge-
speicherten Änderungen dann flöten gehen).
101
Ausschneiden und Einfügen Mit dem Kommando Strg + k können Sie
die Zeile, in der der Cursor steht, ausschneiden und in einem Puffer
ablegen (Achtung: Es wird immer die komplette Zeile ausgeschnitten,
egal wo in der Zeile der Cursor tatsächlich steht!). Mit Strg + u können
Sie den Inhalt des Puffers dann wieder einfügen – entweder an dersel-
ben Stelle, wenn Sie versehentlich auf Strg + k gekommen sind oder die
Zeile nur kopieren und nicht verschieben wollen, oder auch anderswo
im Text.
102
Text suchen Wenn Sie Strg + w eingeben, fragt Nano Sie in der Sta-
tuszeile nach einem Textstück. Anschließend springt der Cursor an das
von seiner aktuellen Position aus gesehen nächste Auftreten dieses Text-
stücks in Ihrem Text. Das macht es bequem, gezielt Stellen im Text an-
zusteuern.
B Nochmal zurück zum Thema vi (Sie erinnern sich – der Editor der
Linux-Gurus). Wenn Sie Lust auf ein Abenteuer haben, dann stel-
len Sie sicher, dass auf Ihrem System der Editor vim installiert ist
(heutzutage die angesagte vi -Implementierung; den originalen vi
aus BSD benutzt unter Linux praktisch niemand), rufen Sie das
Kommando vimtutor auf und verbringen Sie eine spannende und
instruktive halbe Stunde mit der interaktiven vi -Einführung. (Es
kann sein, dass Sie bei Ihrer Distribution vimtutor als separates Pa-
ket installieren müssen. Fragen Sie notfalls Ihren Systemadmini-
strator oder sonst jemanden, der sich auskennt.)
Übungen
C 3.6 [!2] Starten Sie GNU Nano und geben Sie einen einfachen Text
ein – etwas wie
Rosen sind rot,
Veilchen sind blau,
Linux ist super,
das weiß ich genau.
103
Speichern Sie diesen Text in einer Datei unter dem Namen rosen.
txt .
C 3.7 [2] Schneiden Sie im Text aus der vorigen Aufgabe die Zeile
Linux ist super,
aus und kopieren Sie sie dreimal zurück, so dass der Text jetzt
aussieht wie
Rosen sind rot,
Veilchen sind blau,
Linux ist super,
Linux ist super,
Linux ist super,
das weiß ich genau.
Positionieren Sie anschließend den Cursor auf dem »i« von »ist«
in der ersten der Zeilen, markieren Sie diese Position, navigieren
Sie zum »i« von »ist« in der dritten Zeile und entfernen Sie den
markierten Bereich.
104
Kommandos in diesem Kapitel
105
Zusammenfassung
106
4 Keine Angst vor der Shell
Lernziele
• Die Vorteile einer textorientierten Kommandooberfläche bewer-
ten können
• Mit der Bourne-Again-Shell (Bash) arbeiten
• Struktur von Linux-Kommandos verstehen
Vorkenntnisse
• Grundlegende Kenntnisse im Umgang mit Computern sind hilf-
reich
4.1 Warum?
Für den Anwender ist eine direkte Kommunikation mit dem Linux-
Betriebssystemkern nicht möglich. Das geht nur über Programme, die
ihn über »Systemaufrufe« ansprechen. Irgendwie müssen Sie aber sol-
che Programme starten können. Diese Aufgabe übernimmt die Shell, ein
besonderes Anwendungsprogramm, das (meistens) Kommandos von
der Tastatur liest und diese – zum Beispiel – als Programmaufrufe in-
terpretiert und ausführt. Die Shell stellt damit eine Art »Oberfläche«
für den Computer dar, die das eigentliche Betriebssystem wie eine Nuß-
schale (engl. shell – daher der Name) umschließt, das dadurch nicht di-
rekt sichtbar ist. Natürlich ist die Shell nur ein Programm unter vielen,
die auf das Betriebssystem zugreifen.
1. Ein Kommando von der Tastatur (oder aus einer Datei) einlesen.
2. Das eingegebene Kommando überprüfen.
3. Das Kommando direkt ausführen oder das korrespondierende
Programm starten.
110
Eine Shell können Sie mit dem Kommando exit wieder verlassen. Das
gilt auch für die Shell, die Sie gleich nach dem Anmelden bekommen
haben.
Obwohl es, wie erwähnt, diverse Shells gibt, konzentrieren wir uns
hier auf die Bash als Standard-Shell bei den meisten Linux-Distributio-
nen. Auch die Prüfungen des LPI beziehen sich ausschließlich auf die
Bash.
Übungen
C 4.1 [2] Melden Sie sich ab und wieder an und prüfen Sie die Aus-
gabe des Kommandos »echo $0 « in der »Loginshell«. Starten Sie
mit dem Kommando »bash « eine neue Shell und geben Sie wie-
derum das Kommando »echo $0 «. Vergleichen Sie die Ausgabe der
beiden Kommandos. Fällt Ihnen etwas auf?
111
4.3 Kommandos
2. Der Benutzer legt ein Kommando fest und gibt dieses per Tastatur
oder per Maus ein.
3. Der Rechner führt die erhaltene Anweisung aus.
In einem Linux-System zeigt die Shell eine Eingabeaufforderung (engl.
prompt) auf dem Textbildschirm oder in einem grafischen Terminalpro-
gramm wie xterm oder konsole . an. Das bedeutet, dass sie dazu bereit ist,
einen Befehl entgegenzunehmen. Diese Eingabeaufforderung setzt sich
oft aus Benutzer- und Rechnernamen, dem aktuellen Verzeichnis und
einem abschließenden Zeichen zusammen.
hugo@red:/home > _
In diesem Beispiel befindet sich also der Benutzer hugo auf dem Rechner
red im Verzeichnis /home . (Aus Platzgründen und um den Text nicht zu
sehr auf eine spezielle Linux-Distribution auszurichten, verwenden wir
in diesen Unterlagen die neutrale, traditionelle Eingabeaufforderung »$
«.)
112
englischen Sprache entlehnt und ergeben in ihrer Gesamtheit eine eige-
ne »Kommandosprache«. Kommandos in dieser Sprache müssen gewis-
sen Regeln, einer Syntax, gehorchen, damit sie von der Shell verstanden
werden können.
Um eine Eingabezeile zu interpretieren, versucht die Shell zunächst,
die Eingabezeile in einzelne Wörter aufzulösen. Als Trennelement dient
dabei, genau wie im richtigen Leben, das Leerzeichen. Bei dem ersten
Wort in der Zeile handelt es sich normalerweise um das eigentliche
Kommando. Alle weiteren Wörter in der Kommandozeile sind Parame-
ter, die das Kommando genauer spezifizieren.
$ type echo
echo is a shell builtin
$ type date
date is /bin/date
(echo ist ein nettes Kommando, das einfach nur seine Parameter ausgibt:
115
dateliefert das aktuelle Datum und die Uhrzeit, gegebenenfalls ange-
passt an die aktuelle Zeitzone und Spracheinstellung:
$ date
Mo 12. Mär 09:57:34 CET 2012
$ help type
type: type [-afptP] name [name ...]
For each NAME, indicate how it would be interpreted if used as a
command name.
Übungen
C 4.2 [2] Welche der folgenden Kommandos sind bei der Bash extern
und welche intern realisiert: alias , echo , rm , test ?
Wenn Sie eines dieser Zeichen verwenden wollen, ohne dass es von der
Shell in seiner besonderen Bedeutung interpretiert werden soll, müssen
Sie es maskieren. Hierfür können Sie den Rückstrich »\« zum Maskie-
ren eines einzelnen Sonderzeichens oder einfache oder doppelte Anfüh-
rungszeichen (' …' , " …" ) zum Maskieren mehrerer Sonderzeichen ver-
wenden. Zum Beispiel:
117
Kommandos in diesem Kapitel
118
Zusammenfassung
119
5 Hilfe
Lernziele
• Mit Handbuch- und Infoseiten umgehen können
• HOWTOs kennen und finden können
• Die wichtigsten anderen Informationsquellen kennen
Vorkenntnisse
• Linux-Überblick
• Kenntnisse über Linux auf der Kommandozeile (etwa aus den vor-
angegangenen Kapiteln)
5.1 Hilfe zur Selbsthilfe
B Wenn Sie gerne möchten, dass Ihnen auch für die nicht so gründ-
lich selber recherchierten Fragen und Probleme rund um die Uhr,
sieben Tage die Woche, ein offenes Ohr zur Verfügung steht, müs-
sen Sie auf eines der zahlreichen »kommerziellen« Support-Ange-
bote zurückgreifen. Diese stehen für alle namhaften Distributio-
nen zur Verfügung, teils vom Anbieter der Distribution selbst und
teils von Drittfirmen. Vergleichen Sie die verschiedenen Dienst-
leister und suchen Sie sich einen davon aus, dessen Dienstgüte-
versprechen und Preis Ihnen zusagen.
121
5.2 Der help -Befehl und die --help -Option
B Nicht jedes Kommando reagiert auf --help ; oft heißt die Option -h
oder -? , oder die Hilfe wird ausgegeben, wenn Sie irgendeine un-
gültige Option oder ansonsten illegale Kommandozeile angeben.
Leider gibt es da keine einheitliche Konvention.
122
5.3 Die Handbuchseiten
5.3.1 Überblick
Zu fast jedem kommandozeilenorientierten Programm gibt es eine
»Handbuchseite« (engl. manual page oder kurz manpage), genau wie
für viele Konfigurationsdateien, Systemaufrufe und so weiter. Diese
Texte werden in der Regel bei der Installation einer Software mit instal-
liert und können mit dem Kommando »man ⟨Name⟩« eingesehen werden.
⟨Name⟩ ist dabei der Kommando- oder Dateiname, den Sie erklärt haben
möchten. »man bash « zum Beispiel liefert unter anderem eine Auflistung
der oben erwähnten internen Kommandos der Shell.
Die Handbuchseiten haben für den Anwender allerdings einige
Nachteile: Zum einen liegen viele davon nur in englischer Sprache
vor. Lediglich einige Distributionen enthalten deutsche Übersetzungen,
die allerdings oftmals recht knapp gehalten sind. Zum anderen sind
die Texte oft sehr komplex. Jedes einzelne Wort kann bedeutsam sein,
was dem Einsteiger den Zugang natürlich erschwert. Ferner ist gerade
bei langen Texten die Aufteilung recht unübersichtlich. Dennoch ist der
Wert dieser Dokumentation nicht zu unterschätzen. Statt den Anwen-
der mit einer Unmenge Papier zu überhäufen, ist die Hilfe immer vor
Ort verfügbar.
123
Tabelle 5.1: Gliederung der Handbuchseiten
Abschnitt Inhalt
NAME Kommandoname mit knapper Funktions-
beschreibung
SYNOPSIS Beschreibung der Befehlssyntax
DESCRIPTION Ausführliche Beschreibung der Komman-
dowirkung
OPTIONS Die möglichen Optionen
ARGUMENTS Die möglichen Argumente
FILES Benötigte bzw. bearbeitete Dateien
EXAMPLES Beispiele zur Anwendung
SEE ALSO Querverweise auf verwandte Themen
DIAGNOSTICS Fehlermeldungen des Kommandos
COPYRIGHT Autor(en) des Kommandos
BUGS Bekannte Fehler des Kommandos
5.3.2 Struktur
Der Aufbau der Handbuchseiten folgt lose der in Tabelle 5.1 angegebe-
nen Gliederung. Allerdings enthält nicht jede Handbuchseite alle Punk-
te; vor allem die EXAMPLES kommen oft zu kurz.
Nr. Themenbereich
1 Benutzerkommandos
2 Systemaufrufe
3 Funktionen der Programmiersprache C
4 Gerätedateien und Treiber
5 Konfigurationsdateien und Dateiformate
6 Spiele
7 Diverses (z. B. groff -Makros, ASCII-Tabelle, …)
8 Kommandos zur Systemadministration
9 Kernel-Funktionen
n »Neue« Kommandos
5.3.3 Kapitel
Jede Handbuchseite gehört zu einem »Kapitel« im konzeptuellen Ge-
samthandbuch (Tabelle 5.2). Wichtig sind vor allem die Kapitel 1, 5
und 8. Sie könnnen im man -Kommando eine Kapitelnummer angeben,
um die Suche einzuschränken. So zeigt zum Beispiel »man 1 crontab « die
Handbuchseite zum crontab -Kommando und »man 5 crontab « die Hand-
125
buchseite, die das Format von crontab -Dateien erklärt. Wenn man auf
Handbuchseiten verweist, wird gerne das Kapitel in Klammern ange-
hängt; wir unterscheiden also zwischen crontab (1), der Anleitung für das
crontab -Kommando, und crontab (5), der Beschreibung des Dateiformats.
Mit dem Parameter -a zeigt man die zum Suchbegriff gehörenden
Handbuchseiten aller Kapitel nacheinander an, ohne diesen Schalter
wird nur der erste gefundene Text, also meist der im Kapitel 1, darge-
stellt.
126
Verwandt ist das Kommando whatis (engl. »was ist«). Auch dieses
sucht in allen Handbuchseiten, allerdings nicht nach einem Stichwort,
sondern nach den eingegebenen Namen. Auf diese Weise erscheint ei-
ne kurze Beschreibung des mit dem Namen verbundenen Kommandos,
Systemaufrufs o. ä. – eben der zweite Teil des »NAME«-Abschnitts der
gefundenen Handbuchseite(n). whatis ist äquivalent zu »man -f «.
Übungen
C 5.1 [!1] Schauen Sie sich die Handbuchseite zum Programm ls an.
Benutzen Sie dafür das textbasierte Programm man und – falls vor-
handen – den Konqueror-Browser.
127
Abbildung 5.1: Eine Handbuchseite im Textterminal (oben) und im
Konqueror (unten)
128
5.4 Die Info-Seiten
B Die Idee der Info-Seiten stammt aus dem GNU-Projekt, man fin-
det sie daher vor allem bei Software, die von der FSF veröffent-
licht wird oder anderweitig zum GNU-Projekt gehört. Ursprüng-
lich sollte es im »GNU-System« nur Info-Dokumentation geben;
da GNU aber auch zahlreiche Software integriert, die nicht unter
der Ägide der FSF erstellt wurde, und die GNU-Werkzeuge auch
auf Systemen eingesetzt werden, die einen konservativeren An-
satz pflegen, ist die FSF in vielen Fällen weich geworden.
B Ein Vorteil von Info-Seiten ist, dass man sie (ähnlich wie bei den
Handbuchseiten) in einem Quellformat schreibt, das bequem au-
tomatisch für die Bildschirmanzeige und das Ausdrucken von
Handbüchern im PostScript- oder PDF-Format aufbereitet wer-
den kann. Statt groff wird hier zur Aufbereitung das Programm
TEX verwendet.
129
Übungen
C 5.4 [!1] Schauen Sie sich die Info-Seite zum Programm ls an. Pro-
bieren Sie das textbasierte info und, falls vorhanden, den Konque-
ror-Browser aus.
C 5.5 [2] Info-Dateien realisieren eine primitive (?) Form von Hy-
pertext, ähnlich den HTML-Seiten im World-Wide Web. Warum
werden die Info-Dateien nicht gleich in HTML geschrieben?
130
5.5 Die HOWTOs
131
5.6 Weitere Informationsquellen
132
[Link] Hier erscheinen Ankündigungen neuer (vornehm-
lich freier) Softwarepakete, die meist auch unter Linux zur Verfü-
gung stehen. Daneben gibt es eine Datenbank, in der man nach in-
teressanten Projekten oder Softwarepaketen recherchieren kann.
(Englisch)
Eine Seite, die »Schlagzeilen« an-
[Link] knowledge- [Link]/
derer interessanter Linux-Seiten zusammenträgt (darunter auch
Linux Weekly News oder Freshmeat). (Deutsch/Englisch)
Wenn im WWW oder in USENET-Archiven nichts zu finden ist, gibt
es die Möglichkeit, in Mailinglisten oder USENET-Newsgruppen Fra-
gen zu stellen. Dabei sollten Sie jedoch beachten, dass viele Benutzer sol-
cher Foren verärgert reagieren, wenn Sie Fragen posten, deren Antwor-
ten auch offensichtlich im Handbuch oder in FAQ-Sammlungen (engl.
frequently answered questions) zu finden sind. Versuchen Sie, eine Pro-
blembeschreibung gründlich vorzubereiten und zum Beispiel mit rele-
vanten Auszügen aus Protokolldateien zu untermauern, ohne die eine
»Ferndiagnose« eines komplexen Problems nicht möglich ist (und die
nicht komplexen Probleme können Sie ja sicher selber lösen …).
133
B Eine probate Strategie zum Umgang mit scheinbar unerklärli-
chen Problemen besteht darin, die betreffende Fehlermeldung bei
Google (oder einer anderen Suchmaschine Ihres Vertrauens) ein-
zugeben. Wenn Sie nicht gleich ein hilfreiches Ergebnis erzielen,
dann lassen Sie bei der Anfrage Teile weg, die von Ihrer speziel-
len Situation abhängen (etwa Dateinamen, die es nur auf Ihrem
System gibt). Der Vorteil ist, dass Google nicht nur die gängigen
Webseiten indiziert, sondern auch viele Archive von Mailinglis-
ten, und die Chancen gut stehen, dass Sie auf einen Dialog stoßen,
wo jemand anderes ein sehr ähnliches Problem hatte wie Sie.
134
Kommandos in diesem Kapitel
135
Zusammenfassung
136
6 Dateien: Aufzucht und
Pflege
Lernziele
• Die Linux-Konventionen über Datei- und Verzeichnisnamen ken-
nen
• Die wichtigsten Kommandos zum Umgang mit Dateien und Ver-
zeichnissen beherrschen
• Mit Suchmustern in der Shell umgehen können
Vorkenntnisse
• Arbeit mit der Shell
• Umgang mit einem Texteditor (siehe Kapitel 3)
6.1 Datei- und Pfadnamen
6.1.1 Dateinamen
Eine der wesentlichen Dienste eines Betriebssystems wie Linux besteht
darin, Daten auf dauerhaften Speichermedien wie Festplatten oder
USB-Sticks speichern und später wiederfinden zu können. Um das für
Menschen erträglich zu gestalten, werden zusammengehörende Daten
normalerweise zu »Dateien« zusammengefasst, die auf dem Speicher-
medium unter einem Namen gespeichert werden.
138
Dateinamen dürfen unter Linux »ziemlich lang« sein – eine feste all-
gemeinverbindliche Grenze gibt es nicht, da das Maximum vom »Datei-
system« abhängt, also der Methode, wie genau die Bytes auf der Plat-
te arrangiert sind (davon gibt es unter Linux mehrere). Eine typische
Obergrenze sind aber 255 Zeichen – und da so ein Name auf einem nor-
malen Textterminal gut drei Zeilen einnehmen würde, sollte das Ihren
Stil nicht übermäßig einschränken.
Eine weitere Abweichung zu DOS- bzw. Windows-Rechnern besteht
darin, dass bei Linux Dateien nicht durch entsprechende Endungen cha-
rakterisiert werden müssen. Der Punkt ist in einem Dateinamen also ein
ganz gewöhnliches Zeichen. Ein Text kann daher als [Link] abgespei-
chert werden, aber einfach blabla wäre grundsätzlich ebenso zulässig.
Was nicht heißt, dass Sie keine »Dateiendungen« benutzen sollten – im-
merhin erleichtern solche Kennzeichnungen die Identifizierung des Da-
teiinhaltes.
6.1.2 Verzeichnisse
Da auf demselben Linux-System potentiell viele Benutzer arbeiten kön-
nen, wäre es ein Problem, wenn es jeden Dateinamen nur einmal geben
dürfte. Dem Benutzer Hugo wäre wohl nur schwer klar zu machen, dass
er keine Datei namens [Link] anlegen kann, weil die Benutzerin Susi
schon eine Datei hat, die so heißt. Außerdem muss irgendwie (bequem)
geregelt werden können, dass Hugo nicht alle Dateien von Susi lesen
kann und umgekehrt.
141
Aus diesem Grund unterstützt Linux das Konzept hierarchischer
»Verzeichnisse«, die zum Gruppieren von Dateien dienen. Dateinamen
müssen nicht über das ganze System hinweg eindeutig sein, sondern
nur im selben Verzeichnis. Das bedeutet insbesondere, dass Hugo und
Susi vom System verschiedene Verzeichnisse zugeordnet bekommen
können und darin dann jeweils ihre Dateien so nennen dürfen, wie sie
mögen, ohne aufeinander Rücksicht nehmen zu müssen. Ferner kann
man Hugo den Zugriff auf Susis Verzeichnis verbieten (und umgekehrt)
und muss sich dann nicht mehr um die einzelnen Dateien kümmern,
die dort jeweils stehen.
Verzeichnisse sind bei Linux auch nur Dateien, wenn auch Dateien,
die Sie nicht mit denselben Mitteln bearbeiten können wie »gewöhnli-
che« Dateien. Das bedeutet aber, dass für die Namen von Verzeichnis-
sen dieselben Regeln gelten wie für die Namen von Dateien (siehe vori-
ger Abschnitt). Sie müssen nur noch lernen, dass der Schrägstrich (»/ «)
dazu dient, Dateinamen von Verzeichnisnamen und Verzeichnisnamen
voneinander zu trennen. hugo/[Link] wäre also die Datei [Link] im
Verzeichnis hugo .
Verzeichnisse können andere Verzeichnisse enthalten (das ist das
»hierarchisch« von weiter vorne), wodurch sich eine baumartige Struk-
tur ergibt (naheliegenderweise gerne »Verzeichnisbaum« genannt). Ein
Linux-System hat ein spezielles Verzeichnis, das die Wurzel des Baums
bildet und deswegen »Wurzelverzeichnis« oder neudeutsch root direc-
tory genannt wird. Es hat nach Konvention den Namen »/ « (Schräg-
strich).
$ ./prog
die Shell trotzdem dazu bringen, Ihre Datei als Programm zu starten,
ohne dass Sie einen absoluten Pfadnamen angeben müssen.
145
6.2 Kommandos für Verzeichnisse
$ cd
$ pwd
/home/hugo
Mit dem Kommando pwd (engl. print working directory) können Sie, wie
im Beispiel zu sehen, den absoluten Pfadnamen des aktuellen Verzeich-
nisses ausgeben.
Möglicherweise sehen Sie das aktuelle Verzeichnis auch an Ihrer Ein-
gabeaufforderung; je nach der Voreinstellung Ihres Systems könnte da
etwas erscheinen wie
hugo@red:~/briefe> _
Dabei ist ~/briefe eine Abkürzung für /home/hugo/briefe ; die Tilde (»~ «)
steht für das Heimatverzeichnis des aktuellen Benutzers.
146
Tabelle 6.1: Einige Dateitypenkennzeichnungen in ls
Dateityp Farbe Zeichen (ls -F ) Kennung (ls -l )
gewöhnliche Datei schwarz keins -
ausführbare Datei grün * -
Verzeichnis blau / d
Link cyan @ l
Übungen
C 6.1 [2] Ist cd ein externes Kommando oder als internes Kommando
in die Shell eingebaut? Warum?
C 6.2 [3] Lesen Sie in der Handbuchseite der bash über die Komman-
dos pushd , popd und dirs nach. Überzeugen Sie sich, dass diese Kom-
mandos funktionieren.
147
Tabelle 6.2: Einige Optionen für ls
Option Wirkung
-a oder --all zeigt auch versteckte Dateien an
-i oder --inode gibt die eindeutige Dateinummer
(Inode-Nr.) aus
-l oder --format=long liefert zusätzliche Informationen
--color=no verzichtet auf die Farbcodierung
-p oder -F markiert Dateityp durch angehäng-
te Sonderzeichen
-r oder --reverse kehrt Sortierreihenfolge um
-R oder --recursive durchsucht auch Unterverzeichnis-
se (DOS: DIR/S )
-S oder --sort=size sortiert Dateien nach Größe (größte
zuerst)
-t oder --sort=time sortiert Dateien nach Zeit (neueste
zuerst)
-X oder --sort=extension sortiert Dateien nach Dateityp
148
B Auf Monochrom-Monitoren – auch die gibt es noch – bietet sich
zur Unterscheidung die Angabe der Optionen -F oder -p an. Hier-
durch werden zur Charakterisierung Sonderzeichen an die Datei-
namen angehängt. Eine Auswahl der Zeichen zeigt Tabelle 6.1.
Übungen
C 6.3 [1] Welche Dateien stehen im Verzeichnis /boot ? Hat das Ver-
zeichnis Unterverzeichnisse und, wenn ja, welche?
C 6.4 [2] Erklären Sie den Unterschied zwischen ls mit einem Da-
teinamen als Argument und ls mit einem Verzeichnisnamen als
Argument.
150
C 6.5 [2] Wie können Sie ls dazu bringen, bei einem Verzeichnisna-
men als Argument Informationen über das benannte Verzeichnis
selbst anstatt über die darin enthaltenen Dateien zu liefern?
$ mkdir bilder/urlaub
mkdir: cannot create directory `bilder/urlaub': No such file or directory
$ mkdir -p bilder/urlaub
$ cd bilder
$ ls -F
urlaub/
151
teien oder Unterverzeichnisse) mehr enthalten. Auch hier wird nur das
letzte Verzeichnis in jedem übergebenen Namen entfernt:
$ rmdir bilder/urlaub
$ ls -F
bilder/
Durch Angabe der Option -p können Sie von rechts her alle leeren Un-
terverzeichnisse, die im Namen mit aufgeführt wurden, in einem Schritt
mitbeseitigen.
$ mkdir -p bilder/urlaub/sommer
$ rmdir bilder/urlaub/sommer
$ ls -F bilder
bilder/urlaub/
$ rmdir -p bilder/urlaub
$ ls -F bilder
ls: bilder: No such file or directory
Übungen
C 6.6 [!2] Legen Sie in Ihrem Heimatverzeichnis ein Verzeichnis
grd1- test mit den Unterverzeichnissen dir1 , dir2 und dir3 an.
Wechseln Sie ins Verzeichnis grd1- test/dir1 und legen Sie (et-
wa mit einem Texteditor) eine Datei namens hallo mit dem Inhalt
»hallo « an. Legen Sie in grd1- test/dir2 eine Datei namens huhu mit
dem Inhalt »huhu « an. Vergewissern Sie sich, dass diese Dateien
angelegt wurden. Löschen Sie das Unterverzeichnis dir3 mit rmdir .
Versuchen Sie anschließend, das Unterverzeichnis dir2 mit rmdir
zu löschen. Was passiert und warum?
152
6.3 Suchmuster für Dateien
prog1/p*.c
prog1/p1.c
prog1/paulchen.c
prog1/pop-rock.c
prog1/p.c
(beachten Sie vor allem den letzten Namen im Beispiel – »beliebig lang«
heißt auch »Länge Null«!). Das einzige Zeichen, auf das der Stern nicht
passt, ist – na, fällt’s Ihnen ein? – der Schrägstrich; es ist normalerweise
besser, ein Suchmuster wie den Stern auf das aktuelle Verzeichnis zu
beschränken.
Ein Fragezeichen steht als Suchmuster für genau ein beliebiges Zei-
chen (wieder ohne den Schrägstrich). Ein Muster wie
p?.c
154
p1.c
pa.c
p-.c
p..c
(unter anderem). Beachten Sie, dass es aber ein Zeichen sein muss – die
Option »gar nichts« besteht hier nicht.
Sie sollten sich einen ganz wichtigen Umstand sehr gründlich mer-
ken: Die Expansion von Suchmustern ist eine Leistung der Shell! Die auf-
gerufenen Kommandos wissen normalerweise nichts über Suchmus-
ter und interessieren sich auch nicht die Bohne dafür. Alles, was sie
zu sehen bekommen, sind Listen von Pfadnamen, ohne dass kom-
muniziert wird, wo diese Pfadnamen herkommen – also ob sie direkt
eingetippt wurden oder über Suchmuster entstanden sind.
B Was passiert, wenn die Shell keine Datei findet, die auf das Such-
muster passt? In diesem Fall bekommt das betreffende Komman-
do das Suchmuster direkt als solches übergeben; was es damit an-
fängt, ist seine eigene Sache. Typischerweise werden solche Such-
muster als Dateinamen interpretiert, die betreffende »Datei« wird
aber nicht gefunden und es gibt eine Fehlermeldung. Es gibt aber
auch Kommandos, die mit direkt übergebenen Suchmustern Ver-
nünftiges anfangen können – hier ist die Herausforderung dann
eher, dafür zu sorgen, dass die Shell, die das Kommando aufruft,
sich nicht mit ihrer eigenen Expansion vordrängelt. (Stichwort:
Anführungszeichen)
155
6.3.2 Zeichenklassen
Eine etwas genauere Einschränkung der passenden Zeichen in einem
Suchmuster bieten »Zeichenklassen«: In einem Suchmuster der Form
prog[123].c
passen die eckigen Klammern auf genau die Zeichen, die darin aufge-
zählt werden (keine anderen). Das Muster im Beispiel passt also auf
prog1.c
prog2.c
prog3.c
aber nicht
prog[1-9].c
[A-Z][Link]
Die eckigen Klammern in der ersten Zeile passen auf alle Ziffern, die in
der zweiten Zeile auf alle Großbuchstaben.
prog[A-z].c
156
passt nicht nur auf progQ.c und progx.c , sondern zum Beispiel auch
auf prog_.c . (Schauen Sie in einer ASCII-Tabelle nach, etwa mit
»man ascii «.) Wenn Sie nur »Groß- und Kleinbuchstaben« haben
wollen, müssen Sie
prog[A-Za-z].c
schreiben.
prog[!A-Za-z].c
passt auf alle Namen, bei denen das Zeichen zwischen »g « und ». « kein
Buchstabe ist. Ausgenommen ist wie üblich der Schrägstrich.
157
Allgemein gilt, dass ein Wort auf der Kommandozeile, das einige durch
Kommas getrennte Textstücke innerhalb von geschweiften Klammern
enthält, durch so viele Wörter ersetzt wird, wie Textstücke zwischen den
Klammern stehen, wobei in jedem dieser Wörter der komplette Klam-
merausdruck durch eins der Textstücke ersetzt wird. Dieser Ersetzungs-
vorgang findet einzig und allein auf textueller Basis statt und ist völlig unab-
hängig von der Existenz oder Nichtexistenz irgendwelcher Dateien oder Ver-
zeichnisse – dies im Gegensatz zu Suchmustern, die immer nur solche
Namen produzieren, die tatsächlich als Pfadnamen im System vorkom-
men.
Sie können auch mehr als einen Klammerausdruck in einem Wort
haben, dann erhalten Sie als Ergebnis das kartesische Produkt, einfacher
gesagt alle möglichen Kombinationen:
{a,b,c}{1,2,3}.dat
ergibt
Übungen
C 6.7 [!1] Im aktuellen Verzeichnis stehen die Dateien
prog.c prog1.c prog2.c progabc.c prog
[Link] [Link] [Link] [Link] [Link]
C 6.9 [2] Erklären Sie, warum das folgende Kommando zur ange-
zeigten Ausgabe führt:
$ ls
-l datei1 datei2 datei3
$ ls *
-rw-r--r-- 1 hugo users 0 Dec 19 11:24 datei1
-rw-r--r-- 1 hugo users 0 Dec 19 11:24 datei2
-rw-r--r-- 1 hugo users 0 Dec 19 11:24 datei3
C 6.10 [2] Warum ist es sinnvoll, dass »* « nicht auf Dateinamen mit
Punkt am Anfang passt?
159
6.4 Umgang mit Dateien
$ cp liste liste2
$ cp /etc/passwd .
$ ls -l
-rw-r--r-- 1 hugo users 2500 Oct 4 11:11 liste
-rw-r--r-- 1 hugo users 2500 Oct 4 11:25 liste2
-rw-r--r-- 1 hugo users 8765 Oct 4 11:26 passwd
Im Beispiel haben wir mit cp zunächst eine exakte Kopie der Datei liste
unter dem Namen liste2 erzeugt. Anschließend haben wir noch die Da-
tei /etc/passwd ins aktuelle Verzeichnis (repräsentiert durch den Punkt
als Zielverzeichnis) kopiert. Die wichtigsten der zahlreichen cp -Optio-
nen sind in Tabelle 6.3 aufgelistet.
Statt einer einzigen Quelldatei sind auch eine längere Liste von Quell-
dateien oder die Verwendung von Shell-Suchmustern zulässig. Aller-
dings lassen sich auf diese Art nicht mehrere Dateien in einem Schritt
kopieren und umbenennen, sondern nur in ein anderes Verzeichnis ko-
pieren. Während in der DOS- und Windows-Welt mit »COPY *.TXT *.BAK «
160
Tabelle 6.3: Optionen für cp
Option Wirkung
-b (backup) Legt von existierenden Zieldateien Siche-
rungskopien an, indem an den Namen eine
Tilde angehängt wird
-f (force) Überschreibt bereits existierende Zieldatei-
en ohne Rückfrage
-i (interactive) fragt nach, ob bereits bestehende Dateien
überschrieben werden sollen
-p (preserve) Behält möglichst alle Dateiattribute der
Quelldatei bei
-R (recursive) Kopiert Verzeichnisse mit allen Unterver-
zeichnissen und allen darin enthaltenen
Dateien
-u (update) Kopiert nur, wenn die Quelldatei neuer als
die Zieldatei ist (oder noch keine Zieldatei
existiert)
-v (verbose) Zeigt alle Aktivitäten auf dem Bildschirm
161
von jeder Datei mit der Endung TXT eine Sicherungskopie mit der En-
dung BAK angelegt wird, versagt unter Linux der Befehl »cp *.txt *.bak «
normalerweise unter Ausgabe einer Fehlermeldung.
162
$ mv passwd liste2
$ ls -l
-rw-r--r-- 1 hugo users 2500 Oct 4 11:11 liste
-rw-r--r-- 1 hugo users 8765 Oct 4 11:26 liste2
Im Beispiel ist die ursprüngliche Datei liste2 durch die umbenannte Da-
tei passwd ersetzt worden. Ebenso wie cp fragt auch mv nicht nach, wenn
die angegebene Zieldatei bereits existiert, sondern überschreibt diese
gnadenlos.
Der Befehl zum Löschen von Dateien lautet rm (engl. remove, »entfer-
nen«). Um eine Datei löschen zu dürfen, müssen Sie im entsprechenden
Verzeichnis Schreibrechte besitzen. Daher sind Sie im eigenen Heimat-
verzeichnis der uneingeschränkte Herr im Haus, dort dürfen Sie, gege-
benenfalls nach einer entsprechenden Rückfrage, auch fremde Dateien
löschen (falls es welche gibt).
A Das Schreibrecht auf die Datei selbst ist dagegen zum Löschen völ-
lig irrelevant, genau wie die Frage, welchem Benutzer oder wel-
cher Gruppe die Datei gehört.
rm geht bei seiner Arbeit genauso konsequent vor wie cp oder mv – die
angegebenen Dateien werden ohne Rückfrage oder -meldung unwie-
derbringlich aus dem Dateisystem getilgt. Besonders bei der Verwen-
dung von Platzhaltern sollten Sie darum nur mit großer Vorsicht vor-
gehen. Im Unterschied zur DOS-Welt ist der Punkt innerhalb von Li-
nux-Dateinamen ein Zeichen ohne besondere Bedeutung. Aus diesem
Grund löscht das Kommando »rm * « unerbittlich alle nicht versteckten
Dateien im aktuellen Verzeichnis. Zwar bleiben dabei wenigstens die
Unterverzeichnisse unbehelligt; mit »rm -r * « müssen aber auch diese
daran glauben.
$ rm -i lis*
rm: remove 'liste'? n
rm: remove 'liste2'? y
$ ls -l
-rw-r--r-- 1 hugo users 2500 Oct 4 11:11 liste
Wie das Beispiel zeigt, wird für jede zum Suchmuster passende Datei
einzeln nachgefragt, ob sie gelöscht werden soll (»y « für engl. yes = »ja«)
oder nicht (»n « für engl. no = »nein«).
Neben den bereits beschriebenen Optionen -i und -r sind ferner die bei
cp beschriebenen Optionen -v und -f mit vergleichbarer Wirkung für rm
zulässig.
Übungen
C 6.11 [!2] Legen Sie in Ihrem Heimatverzeichnis eine Kopie der Da-
tei /etc/services unter dem Namen myservices an. Benennen Sie sie
um in [Link] und kopieren Sie sie unter demselben Namen ins
Verzeichnis /tmp . Löschen Sie anschließend beide Kopien der Da-
tei.
C 6.14 [2] Wenn Sie ein Verzeichnis haben, in dem Sie nicht verse-
hentlich einem »rm * « zum Opfer fallen wollen, können Sie dort
eine Datei namens »- i « anlegen, etwa mit
$ > -i
$ ln liste liste2
$ ls -l
-rw-r--r-- 2 hugo users 2500 Oct 4 11:11 liste
-rw-r--r-- 2 hugo users 2500 Oct 4 11:11 liste2
Das Verzeichnis enthält nun scheinbar eine neue Datei liste2 . In Wahr-
heit handelt es sich hier jedoch nur um zwei Verweise auf ein und die-
selbe Datei. Einen Hinweis auf diesen Sachverhalt liefert der Referenz-
zähler, der in der zweiten Spalte der Ausgabe von »ls -l « zu sehen ist.
165
Dessen Wert 2 gibt an, dass diese Datei zwei Namen hat. Ob es sich bei
den beiden Dateinamen nun wirklich um Verweise auf dieselbe Datei
handelt, ist nur mit Hilfe von »ls -i « eindeutig zu entscheiden. In die-
sem Fall muss die in der ersten Spalte angezeigte Dateinummer für bei-
de Dateien identisch sein. Dateinummern, auch Inode-Nummern ge-
nannt, identifizieren Dateien eindeutig auf ihrem Dateisystem:
$ ls -i
876543 liste 876543 liste2
Wenn Sie den Inhalt einer der beiden Dateien verändern, ändert sich der
Inhalt der anderen ebenfalls, da in Wirklichkeit ja nur eine einzige Datei
mit der eindeutigen Nummer 876543 existiert. Wir haben der Datei mit
der Nummer 876543 lediglich einen weiteren Namen gegeben.
Sie sollten sich klar machen, dass es bei einer Datei mit zwei Links
nicht möglich ist, festzustellen, welcher Name »das Original« ist, also
der erste Parameter im ln -Kommando. Beide Namen sind aus der Sicht
des Systems absolut gleichwertig und ununterscheidbar.
166
sind und demnach Inode-Nummern haben, können Sie so verfol-
gen, wie das Dateisystem intern zusammenhängt. (Siehe hierzu
auch Übung 6.20)
Wenn Sie eine der Dateien mit rm »löschen«, reduziert das zunächst
nur die Anzahl der Namen für Datei Nummer 876543 (der Referenzzäh-
ler wird entsprechend angepasst). Erst wenn der Referenzzähler durch
das Entfernen eines Namens den Wert 0 annimmt, wird die Datei tat-
sächlich gelöscht.
$ rm liste
$ ls -li
876543 -rw-r--r-- 1 hugo users 2500 Oct 4 11:11 liste2
B Ganz stimmt es nicht mit dem Löschen der Dateidaten: Wenn der
letzte Dateiname entfernt wird, ist die Datei nicht mehr zugäng-
lich, aber wenn ein Prozess noch mit ihr arbeitet, darf er sie wei-
terbenutzen, bis er sie explizit schließt oder sich beendet. In Unix-
Programmen ist das ein gängiges Idiom für den Umgang mit tem-
porären Dateien, die beim Programmende verschwinden sollen:
Sie erzeugen sie mit Schreib- und Lesezugriff und »löschen« sie
dann gleich wieder, ohne sie jedoch gleich zu schließen. Anschlie-
ßend können Sie Daten hinein schreiben und später an den Datei-
anfang zurückspringen, um sie wieder zu lesen.
B ln können Sie außer mit zwei Argumenten auch mit einem oder
vielen aufrufen. Im ersten Fall wird im aktuellen Verzeichnis ein
Link mit demselben Namen angelegt wie die Ursprungsdatei (die
sinnvollerweise nicht im aktuellen Verzeichnis liegen sollte), im
zweiten Fall werden alle benannten Dateien unter ihrem Namen
167
in das durch das letzte Argument gegebene Verzeichnis »gelinkt«
(denken Sie an mv ).
Das ist noch nicht alles: In Linux-Systemen gibt es zwei Arten von
Links. Das oben stehende Beispiel entspricht dem Standard des Kom-
mandos ln und wird als hard link (engl. »feste Verknüpfung«) bezeich-
net. Zur Identifikation der Datei wird dabei die Dateinummer gespei-
chert. Symbolische Links (oder in Anlehnung an die hard links von eben
auch soft links, »weiche Verknüpfungen«) sind selbst eigentlich Dateien,
in denen aber nur der Name der »Zieldatei« des Links steht; gleichzeitig
wird vermerkt, dass es sich um ein symbolisches Link handelt und bei
Zugriffen auf das Link in Wirklichkeit die Zieldatei gemeint ist. Anders
als bei harten Links »weiß« die Zieldatei nicht, dass ein symbolisches
Link auf sie existiert. Das Anlegen oder Löschen eines symbolischen
Links hat keine Auswirkungen auf die Zieldatei; wird dagegen die Ziel-
datei entfernt, weist der symbolische Link ins Leere (Zugriffe führen zu
einer Fehlermeldung).
Im Gegensatz zu harten Links lassen symbolische Links auch Verwei-
se auf Verzeichnisse zu sowie auf Dateien, die sich im Verzeichnisbaum
auf anderen physikalischen Dateisystemen befinden. In der Praxis wer-
den symbolische Links oft bevorzugt, da sich die Verknüpfungen an-
hand des Pfadnamens leichter nachvollziehen lassen.
168
Um ein symbolisches Link zu erzeugen, müssen Sie dem Kommando
ln die Option -s übergeben:
$ ln -s /var/log kurz
$ ls -l
-rw-r--r-- 1 hugo users 2500 Oct 4 11:11 liste2
lrwxrwxrwx 1 hugo users 14 Oct 4 11:40 kurz -> /var/log
$ cd kurz
$ pwd -P
/var/log
Neben der Option -s zur Erstellung von »soft links« unterstützt das
Kommando ln unter anderem die bereits bei cp besprochenen Optionen
-b , -f , -i und -v .
Um nicht mehr benötigte symbolische Links wieder zu entfernen,
können Sie sie einfach wie gewöhnliche Dateien mit dem Kommando
rm löschen. Diese Operation wirkt auf das Link und nicht das Ziel des
Links:
$ cd
$ rm kurz
$ ls
liste2
Übungen
C 6.15 [!2] Erzeugen Sie eine Datei mit beliebigem Inhalt in Ihrem
Heimatverzeichnis (etwa mit »echo Hallo >~/hallo « oder einem
Texteditor). Legen Sie unter dem Namen link ein hartes Link auf
die Datei an. Überzeugen Sie sich, dass nun zwei Namen für die
Datei existieren. Versuchen Sie den Dateiinhalt mit einem Editor
zu ändern. Was passiert?
C 6.16 [!2] Legen Sie unter dem Namen ~/symlink ein symbolisches
Link auf die Datei aus der vorigen Aufgabe an. Prüfen Sie, ob
169
der Zugriff funktioniert. Was passiert, wenn Sie die Zieldatei des
Links löschen?
C 6.18 [3] Betrachten Sie das folgende Kommando und seine Aus-
gabe:
$ ls -ai /
2 . 330211 etc 1 proc 4303 var
2 .. 2 home 65153 root
4833 bin 244322 lib 313777 sbin
228033 boot 460935 mnt 244321 tmp
330625 dev 460940 opt 390938 usr
C 6.20 [3] Wir haben gesagt, dass harte Links auf Verzeichnisse nicht
erlaubt sind. Welchen Grund könnte es dafür geben?
C 6.21 [3] Woran erkennt man in der Ausgabe von »ls -l ~ «, dass
ein Unterverzeichnis von ~ keine weiteren Unterverzeichnisse hat?
170
Tabelle 6.4: Tastaturbefehle für more
Taste Wirkung
↩ zeigt nächste Zeile an
zeigt nächste Seite an
b zeigt vorherige Seite an
h gibt einen Hilfstext aus
q beendet more
/ ⟨Wort⟩ ↩ sucht nach ⟨Wort⟩
! ⟨Kommando⟩ ↩ führt ⟨Kommando⟩ in Sub-Shell aus
v ruft Editor (vi ) auf
Strg + l zeichnet Bildschirm neu
171
Tabelle 6.5: Tastaturbefehle für less
Taste Wirkung
↓ oder e oder j oder ↩ zeigt nächste Zeile an
f oder zeigt nächste Seite an
↑ oder y oder k zeigt vorherige Zeile an
b zeigt vorherige Seite an
Pos1 oder g an den Textanfang springen
Ende oder ⇑ + g ans Textende springen
p ⟨Zahl⟩ ↩ springt an Position ⟨Zahl⟩ (in
%) des Textes
h gibt einen Hilfetext aus
q beendet less
/ ⟨Wort⟩ ↩ sucht abwärts nach ⟨Wort⟩
n setzt Suche abwärts fort
? ⟨Wort⟩ ↩ sucht aufwärts nach ⟨Wort⟩
⇑ + n setzt Suche aufwärts fort
! ⟨Kommando⟩ ↩ führt ⟨Kommando⟩ in Sub-
Shell aus
v ruft Editor (vi ) auf
r oder Strg + l zeichnet Bildschirm neu
172
serte Version less (engl. für »weniger«2 ) im Einsatz. Nun können Sie sich
mit den Cursortasten wie gewohnt vertikal durch den Text bewegen.
Ferner wurden die Suchroutinen erweitert und ermöglichen die Suche
sowohl textauf- als auch -abwärts. Tabelle 6.5 bietet einen Überblick über
die wichtigsten Tastaturbefehle.
Wie bereits in Kapitel 5 erwähnt, ist less üblicherweise als Anzeige-
programm für man voreingestellt. Alle diese Tastaturkommandos greifen
daher auch bei der Anzeige der Online-Hilfe via man .
173
Wie anhand des Beispiels zu sehen ist, benötigt find einige Angaben,
um seine Aufgabe ordnungsgemäß erledigen zu können.
Test Beschreibung
-name Sucht nach passenden Dateinamen. Hierbei sind alle Son-
derzeichen nutzbar, die von der Shell zur Verfügung ge-
stellt werden. Mit -iname werden dabei Groß- und Klein-
buchstaben gleich behandelt.
-user Sucht nach Dateien, die dem angegebenen Benutzer gehö-
ren. Dabei ist statt des Anwendernamens auch die Anga-
be der eindeutigen Benutzernummer, der UID, möglich.
174
Tabelle 6.6: Testkriterien von find (Forts.)
Test Beschreibung
-group Sucht nach Dateien, die zu der angegebenen Gruppe ge-
hören. Wie bei -user ist hier statt des Gruppennamens
auch die Angabe der eindeutigen Gruppennummer, der
GID, zulässig.
-type Ermöglicht die Suche nach verschiedenen Dateitypen
(siehe Abschnitt 10.2). Dabei werden unterschieden:
b blockorientierte Gerätedatei
c zeichenorientierte Gerätedatei
d Verzeichnis
f normale Datei
l Symbolisches Link
p FIFO (named pipe)
s Unix-Domain-Socket
-size Sucht nach Dateien bestimmter Größe. Zahlenwerte wer-
den dabei als 512-Byte-Blöcke interpretiert, durch ein
nachgestelltes c sind Größenangaben in Byte, durch k in
Kibibyte erlaubt. Vorangestellte Plus- oder Minuszeichen
entsprechen Unter- und Obergrenzen, womit ein Größen-
bereich abgedeckt werden kann. Das Kriterium -size +10k
trifft z. B. für alle Dateien zu, die größer als 10 KiB sind.
-atime (engl. access, »Zugriff«) sucht Dateien nach dem Zeit-
punkt des letzten Zugriffs. Hier sowie für die beiden
nächsten Auswahlkriterien wird der Zeitraum in Tagen
angegeben; …min statt …time ermöglicht eine minutenge-
naue Suche.
-mtime (engl. modification, »Veränderung«) wählt passende Datei-
en über den Zeitpunkt der letzten Veränderung aus.
-ctime (engl. change, »Änderung«) sucht Dateien anhand der
letzten Änderung der Inodes (durch Zugriff auf den In-
halt, Rechteänderung, Umbenennen etc.)
175
Tabelle 6.6: Testkriterien von find (Forts.)
Test Beschreibung
-perm Findet nur Dateien, deren Zugriffsrechte genau mit den
angegebenen übereinstimmen. Die Festlegung erfolgt
mittels einer Oktalzahl, die beim Befehl chmod beschrie-
ben wird. Möchte man nur nach einem bestimmten Recht
suchen, muss der Oktalzahl ein Minuszeichen vorange-
stellt werden, z. B. berücksichtigt -perm -20 alle Dateien,
die Gruppenschreibrechte besitzen, unabhängig von de-
ren übrigen Zugriffsrechten.
-links Sucht nach Dateien, deren Referenzzähler den angegebe-
nen Zahlenwert hat.
-inum Findet Verweise auf die Datei mit der angegebenen Inode-
Nummer.
176
Kompliziertere logische Verknüpfungen von Auswahlkriterien kön-
nen (bzw. sollten) in runde Klammern eingeschlossen werden, um feh-
lerhafte Auswertungen zu vermeiden. Die Klammern müssen Sie natür-
lich vor der Shell verstecken:
$ find . \( -type d -o -name "A*" \) -print
./.
./..
./bilder
./Abfall
$ _
Das Beispiel listet alle Dateien auf dem Bildschirm auf, die entweder
Verzeichnisse repräsentieren oder deren Name mit einem »A « beginnt
oder beides.
Das obenstehende Beispiel sucht nach allen Dateien innerhalb des ak-
tuellen Verzeichnisses, die dem Anwender hugo gehören und führt für
diese das Kommando »ls -l « aus. Mehr Sinn ergibt da schon folgendes:
178
B Die find /xargs -Kombination kommt bei eigenartigen Dateinamen
in Schwierigkeiten, etwa solchen, die Leerzeichen oder gar Zeilen-
trenner enthalten, welche dann als Trennzeichen fehlinterpretiert
werden. Die todsichere Abhilfe dagegen besteht darin, die find -
Option »-print0 « zu benutzen, die wie -print die Namen der ge-
fundenen Dateien ausgibt, diese aber nicht durch Zeilentrenner,
sondern durch Nullbytes voneinander trennt. Da das Nullbyte in
Dateinamen nicht auftauchen kann, ist keine Verwechslung mehr
möglich. xargs muss mit der Option »-0 « aufgerufen werden, um
diese Form der Eingabe zu verstehen:
Übungen
C 6.23 [!2] Finden Sie alle Dateien in Ihrem System, die größer als 1
MiB sind, und lassen Sie deren Namen ausgeben.
C 6.24 [2] Wie können Sie find benutzen, um eine Datei zu löschen,
die einen merkwürdigen Namen hat (etwa mit unsichtbaren Kon-
trollzeichen oder mit Umlauten, die von älteren Shells nicht ver-
standen werden)?
C 6.25 [3] (Beim zweiten Durcharbeiten.) Wie würden Sie beim Ab-
melden dafür sorgen, dass etwaige Dateien in /tmp , die Ihnen ge-
hören, automatisch gelöscht werden?
$ locate [Link]
/home/hugo/Briefe/[Link]
/home/hugo/Briefe/[Link]
/home/hugo/Briefe/[Link]~
$ locate "*/brief.t*"
/home/hugo/Briefe/[Link]
/home/hugo/Briefe/[Link]
$ locate Briefe/oma
/home/hugo/Briefe/[Link]
/home/hugo/Briefe/[Link]~
B Mit der Option »-e « können Sie locate dazu bringen, nur tatsäch-
lich existierende Dateinamen zu liefern, aber den Geschwindig-
keitsvorteil des Programms machen Sie damit zunichte.
Das Programm updatedb baut die Datenbank für locate auf. Da dieser
Vorgang einige Zeit dauern kann, sorgt Ihr Systemverwalter meist da-
für, dass das passiert, wenn das System sonst nicht viel zu tun hat, auf
ständig eingeschalteten Serversystemen zum Beispiel nachts.
Übungen
C 6.26 [!1] README ist ein sehr populärer Dateiname. Geben Sie die ab-
soluten Pfadnamen aller Dateien auf Ihrem System an, die README
heißen.
C 6.28 [1] Überzeugen Sie sich, dass slocate funktioniert, indem Sie
als gewöhnlicher Benutzer nach Dateien wie /etc/shadow suchen.
C 6.29 [!1] Wie heißen auf Ihrem System die Dateien, die die Doku-
mentation für das Kommando »crontab « enthalten?
183
Kommandos in diesem Kapitel
184
Zusammenfassung
185
7 Reguläre Ausdrücke
Lernziele
• Einfache und erweiterte reguläre Ausdrücke verstehen und for-
mulieren können
• Das Kommando grep und seine Varianten fgrep und egrep kennen
Vorkenntnisse
• Grundlegende Kenntnisse über Linux und Linux-Kommandos
(etwa aus den vorhergehenden Kapiteln).
• Umgang mit Dateien und Verzeichnissen (siehe Kapitel 6)
• Umgang mit einem Texteditor (siehe Kapitel 3)
7.1 Reguläre Ausdrücke: Die Grundlagen
Verfahren zur Charakterisierung von Mengen von Zeichenketten, die aus Verkettung von
konstanten Elementen, Alternativen von konstanten Elementen und deren möglicherwei-
se unbegrenzter Wiederholung besteht. Routinen zur Erkennung regulärer Ausdrücke
sind elementare Bestandteile vieler Programme, etwa Compilern für Programmierspra-
chen. Reguläre Ausdrücke tauchten in der Geschichte von Unix schon sehr früh auf; die
meisten frühen Unix-Entwickler hatten einen Hintergrund in theoretischer Informatik, so
dass die Idee ihnen nahelag.
187
a
c
Der Grund dafür besteht darin, dass die meisten Programme zeilenori-
entiert vorgehen und »zeilenübergreifende« Konstruktionen schwieri-
ger zu verarbeiten wären. (Was nicht heißen soll, dass es nicht manch-
mal nett wäre, das zu können.)
Während Shellsuchmuster immer vom Anfang eines Pfadnamens
aus passen müssen, reicht es bei Programmen, die Zeilen aufgrund
von regulären Ausdrücken auswählen, meist aus, wenn der reguläre
Ausdruck irgendwo in einer Zeile passt. Allerdings können Sie diese
Freizügigkeit einschränken: Ein regulärer Ausdruck, der mit dem Zir-
kumflex (»^ «) anfängt, passt nur am Zeilenanfang, und ein regulärer
Ausdruck, der mit dem Dollarzeichen (»$ «) aufhört, entsprechend nur
am Zeilenende. Der Zeilentrenner am Ende jeder Zeile wird ignoriert,
so dass Sie »xyz$ « schreiben können, um alle Zeilen auszuwählen, die
auf »xyz « enden, und nicht »xyz\n$ « angeben müssen.
Schließlich können Sie mit dem Stern (»* «) angeben, dass der da-
vorstehende Ausdruck beliebig oft wiederholt werden kann (auch gar
nicht). Der Stern selbst steht nicht für irgendwelche Zeichen in der Ein-
gabe, sondern modifiziert nur das Davorstehende – das Shellsuchmus-
ter »a*.txt « entspricht also dem regulären Ausdruck »^a.*\.txt$ « (den-
ken Sie an die »Verankerung« des Ausdrucks am Anfang und Ende der
Eingabe und daran, dass ein einzelner Punkt auf alle Zeichen passt).
Wiederholung hat Vorrang vor Aneinanderreihung; »ab* « ist ein ein-
zelnes »a « gefolgt von beliebig vielen »b « (auch keinem), nicht eine be-
liebig häufige Wiederholung von »ab «.
188
7.2 Reguläre Ausdrücke: Extras
Die Beschreibung aus dem vorigen Abschnitt gilt für praktisch al-
le Linux-Programme, die reguläre Ausdrücke verarbeiten. Diverse Pro-
gramme unterstützen aber auch verschiedene Erweiterungen, die ent-
weder Schreibvereinfachungen bieten oder tatsächlich zusätzliche Din-
ge erlauben. Die »Krone der Schöpfung« markieren hier die modernen
Skriptsprachen wie Tcl, Perl oder Python, deren Implementierungen in-
zwischen weit über das hinausgehen, was reguläre Ausdrücke im Sinne
der theoretischen Informatik können.
Einige gängige Erweiterungen sind:
Wortklammern Die Sequenz »\< « passt am Anfang eines Worts (soll
heißen, an einer Stelle, wo ein Nichtbuchstabe auf einen Buchsta-
ben stößt). Analog passt »\> « am Ende eines Worts (da, wo ein
Buchstabe von einem Nichtbuchstaben gefolgt wird).
Gruppierung Runde Klammern (»( …) «) erlauben es, Aneinanderrei-
hungen von regulären Ausdrücken zu wiederholen: »a(bc)* « passt
auf ein »a « gefolgt von beliebig vielen Wiederholungen von »bc «,
im Gegensatz zu »abc* «, das auf »ab « gefolgt von beliebig vielen
Wiederholungen von »c « passt.
Alternative Mit dem vertikalen Balken (»| «) können Sie eine Auswahl
zwischen mehreren regulären Ausdrücken treffen: Der Ausdruck
»Affen(brot|schwanz|kletter)baum « passt genau auf »Affenbrotbaum «2 ,
»Affenschwanzbaum «3 oder »Affenkletterbaum «.
189
Mindestens einmal Vorhandenes Das Pluszeichen (»+ «) entspricht
dem Wiederholungsoperator »* «, bis darauf, dass der vorste-
hende Ausdruck mindestens einmal auftreten muss, also nicht
ganz entfallen darf.
Bestimmte Anzahl von Wiederholungen Sie können in geschweiften
Klammern eine Mindest- und eine Maximalanzahl von Wieder-
holungen angegeben werden: »ab{2,4} « passt auf »abb «, »abbb « und
»abbbb «, aber nicht auf »ab « oder »abbbbb «. Sie können sowohl die
Mindest- als auch die Maximalanzahl weglassen; fehlt die Min-
destanzahl, wird 0, fehlt die Maximalanzahl, so wird »Unendlich«
angenommen.
Rückbezug Mit einem Ausdruck der Form »\ 𝑛« können Sie eine Wie-
derholung desjenigen Teils in der Eingabe verlangen, der auf
den Klammerausdruck Nr. 𝑛 im regulären Ausdruck gepasst hat.
»(ab)\1 « zum Beispiel passt auf »abab «, und wenn bei der Bearbei-
tung von »(ab*a)x\1 « die Klammer auf abba gepasst hat, dann passt
der gesamte Ausdruck auf abbaxabba (und nichts anderes). Weitere
Details finden Sie in der Dokumentation zu GNU grep .
»Bescheidene« Vorgehensweise Die Operatoren »* «, »+ « und »? « sind
normalerweise »gierig«, das heißt, sie versuchen auf so viel der
Eingabe zu passen wie möglich: »^a.*a « bezogen auf die Einga-
be »abacada « passt auf »abacada «, nicht »aba « oder »abaca «. Es gibt
aber entsprechende »bescheidene« Versionen »*? «, »+? « und »?? «,
die auf so wenig der Eingabe passen wie möglich. In unserem
Beispiel würde »^a.*?a « auf »aba « passen. Auch die geschweiften
Klammern haben möglicherweise eine bescheidene Version.
Nicht jedes Programm unterstützt jede Erweiterung. Tabelle 7.1 zeigt
eine Übersicht der wichtigsten Programme. Insbesondere Emacs, Perl
und Tcl unterstützen noch jede Menge hier nicht diskutierte Erweite-
rungen.
190
Tabelle 7.1: Unterstützung von regulären Ausdrücken
grep egrep egrep
Erweiterung (GNU) (GNU) (trad.) vim emacs Perl Tcl
Wortklammern • • • •1 •1 •4 •4
Gruppierung •1 • • •1 •1 • •
Alternative •1 • • •2 •1 • •
Optionales •1 • • •3 • • •
mind. einmal •1 • • •1 • • •
Anzahl •1 • ∘ •1 •1 • •
Rückbezug ∘ • • ∘ • • •
Bescheiden ∘ ∘ ∘ •4 • • •
•: wird unterstützt; ∘: wird nicht unterstützt
Anmerkungen: 1. Wird durch einen vorgesetzten Rückstrich (»\ «)
angesprochen, also z. B. »ab\+ « statt »ab+ «. 2. Braucht keine Klam-
mern; Alternativen beziehen sich immer auf den kompletten
Ausdruck. 3. Benutzt »\= « statt »? «. 4. Ganz andere Syntax (siehe
Dokumentation).
191
Tabelle 7.2: Optionen für grep (Auswahl)
Option Wirkung
-c (count) Liefert nur die Anzahl der passenden Zeilen
-i (ignore) Klein- und Großbuchstaben werden nicht
unterschieden
-l (list) Statt kompletter Zeilen werden nur Dateina-
men ausgegeben
-n (number) Die Zeilennummer der gefundenen Zeilen in
der Eingabe wird mit ausgegeben
-r (recursive) Auch Dateien in Unterverzeichnissen usw.
mit durchsuchen
-v (invert) Nur Zeilen, die das Muster nicht enthalten,
werden ausgegeben
192
lig verschiedene Verfahren zur Auswertung der regulären Aus-
drücke, die je nach deren Gestalt und Umfang sowie der Größe
der Eingabe zu ganz unterschiedlichen Laufzeitergebnissen füh-
ren konnten. Bei der unter Linux üblichen grep -Implementierung
aus dem GNU-Projekt sind alle drei Varianten in Wirklichkeit das-
selbe Programm und unterscheiden sich vor allem in der Syntax
dessen, wonach gesucht werden soll.
Die Syntax von grep erfordert mindestens die Angabe des regulären
Ausdrucks, nach dem gesucht werden soll. Darauf folgt der Name der
Textdatei (oder die Namen der Textdateien), die nach diesem Ausdruck
durchsucht werden soll(en). Wenn kein Dateiname angegeben wurde,
bezieht sich grep auf die Standard-Eingabe (siehe Kapitel 8).
Der reguläre Ausdruck, nach dem die Eingabe durchsucht wird, darf
neben den grundlegenden Bausteinen aus Abschnitt 7.1 auch die meis-
ten Erweiterungen aus Abschnitt 7.2 enthalten. Die Operatoren »\+ «,
»\? « und »\{ « müssen Sie bei grep jedoch mit dem Rückstrich versehen.
(Bei egrep können Sie darauf verzichten.) »Bescheidene« Operatoren gibt
es leider nicht.
Um die Zeilen zu finden, die genau das Wort »Frosch « enthalten (und
nicht irgendwelche Zusammensetzungen wie »Froschkönig «), brauchen
Sie die Wortklammer-Erweiterung:
Es ist auch einfach, alle Zeilen zu finden, die mit »Frosch « anfangen:
194
scher Wörter (gerne als »Wörterbuch« bezeichnet)4 . Wir interessieren
uns für alle Wörter mit drei oder mehr »a «:
$ grep -n 'a.*a.*a' /usr/share/dict/words
8:aardvark
21:abaca
22:abacate
… 7030 andere Wörter …
234831:zygomaticoauricularis
234832:zygomaticofacial
234834:zygomaticomaxillary
ausfallen.
195
Übungen
C 7.1 [2] Sind die Operatoren ? und + in regulären Ausdrücken wirk-
lich nötig?
C 7.2 [!1] Finden Sie in [Link] alle Zeilen, in denen das Wort
»Tochter« oder »Königstochter« vorkommt.
C 7.3 [!2] In der Datei /etc/passwd stehen die Benutzer des Rechners
(meistens jedenfalls). Jede Zeile der Datei besteht aus einer Reihe
von durch Doppelpunkten getrennten Feldern. Das letzte Feld je-
der Zeile gibt die Login-Shell eines Benutzers an. Geben Sie eine
grep -Kommandozeile an, mit der Sie alle Benutzer finden können,
die die Bash als Login-Shell verwenden.
C 7.5 [4] Geben Sie ein Kommando an, das im »Froschkönig« alle
Zeilen sucht und ausgibt, in denen irgendein mindestens vier-
buchstabiges Wort zweimal auftritt.
196
Kommandos in diesem Kapitel
197
Zusammenfassung
198
8 Standardkanäle und
Filterkommandos
Lernziele
• Die Ein- und Ausgabeumlenkung der Shell beherrschen
• Die wichtigsten Filterkommandos kennen
Vorkenntnisse
• Arbeit mit der Shell
• Umgang mit einem Texteditor (Kapitel 3)
• Umgang mit Dateien und Verzeichnissen (Kapitel 6)
8.1 Ein-/Ausgabeumlenkung und
Kommandopipelines
$ grep xyz
eingeben, dann können Sie anschließend Textzeilen auf der Tastatur tip-
pen, und grep wird nur diejenigen durchlassen, die die Zeichenfolge
»xyz« enthalten:
$ grep xyz
abc def
xyz 123
xyz 123
aaa bbb
YYYxyzZZZ
YYYxyzZZZ
Strg + d
202
Umgebung oder eine Sitzung über das Netz etwa mit der Secure
Shell), können Sie über die »Datei« /dev/tty ansprechen – wenn
Sie Daten lesen wollen, meint dies die Tastatur, bei der Ausgabe
den Bildschirm (umgekehrt wäre ziemlich albern). Der Aufruf
$ ls -laF >inhalt
$ _
Falls die Datei inhalt noch nicht existiert, wird sie neu angelegt. Sollte
hingegen bereits eine Datei dieses Namens vorhanden sein, wird deren
Inhalt überschrieben. Das ganze arrangiert die Shell, noch bevor das ge-
wünschte Programm überhaupt gestartet wird – die Ausgabedatei wird
also auch dann angelegt, wenn der eigentliche Programmaufruf falsch
eingetippt wurde oder das Programm überhaupt keine Ausgabe liefert
(die Datei inhalt ist dann anschließend leer).
203
Die Textdatei inhalt können Sie nun wie üblich anschauen, z. B. mit
less :
$ less inhalt
total 7
drwxr-xr-x 12 hugo users 1024 Aug 26 18:55 ./
drwxr-xr-x 5 root root 1024 Aug 13 12:52 ../
drwxr-xr-x 3 hugo users 1024 Aug 20 12:30 fotos/
-rw-r--r-- 1 hugo users 0 Sep 6 13:50 inhalt
-rw-r--r-- 1 hugo users 15811 Aug 13 12:33 [Link]
-rw-r--r-- 1 hugo users 14373 Aug 13 12:33 [Link]
-rw-r--r-- 2 hugo users 3316 Aug 20 15:14 [Link]
Wenn Sie den Inhalt von inhalt genau betrachten, sehen Sie einen Ver-
zeichniseintrag für inhalt mit der Dateigröße 0. Das liegt an der Arbeits-
weise der Shell: Bei der Bearbeitung der Kommandozeile wird zunächst
die Ausgabeumlenkung erkannt und eine neue Datei inhalt angelegt
bzw. deren Inhalt gelöscht. Danach führt die Shell das Kommando, hier
ls , aus, wobei sie die Standardausgabe von ls mit der Datei inhalt statt
dem Bildschirm verbindet.
B Die Datei hat in der ls -Ausgabe die Länge 0, weil das ls -Komman-
do die Dateiinformationen für inhalt abgerufen hat, bevor tatsäch-
lich etwas in die Datei geschrieben wurde – obwohl vor dem be-
treffenden Eintrag eigentlich drei andere Zeilen stehen! Das liegt
daran, dass ls erst sämtliche Verzeichniseinträge liest, sie alpha-
betisch sortiert und erst dann die Ausgabe zu schreiben beginnt.
ls sieht also die von der Shell neu angelegte oder gerade geleerte
Datei inhalt ohne Inhalt.
Wenn Sie die Ausgabe eines Programms ans Ende einer bestehenden
Datei anhängen wollen, ohne dass deren bisheriger Inhalt ersetzt wird,
können Sie den Operator >> benutzen. Wenn diese Datei noch nicht exis-
tiert, wird sie auch hier neu angelegt:
204
$ date >> inhalt
$ less inhalt
total 7
drwxr-xr-x 12 hugo users 1024 Aug 26 18:55 ./
drwxr-xr-x 5 root root 1024 Aug 13 12:52 ../
drwxr-xr-x 3 hugo users 1024 Aug 20 12:30 fotos/
-rw-r--r-- 1 hugo users 0 Sep 6 13:50 inhalt
-rw-r--r-- 1 hugo users 15811 Aug 13 12:33 [Link]
-rw-r--r-- 1 hugo users 14373 Aug 13 12:33 [Link]
-rw-r--r-- 2 hugo users 3316 Aug 20 15:14 [Link]
Wed Oct 22 12:31:29 CEST 2003
Im Beispiel wurde das aktuelle Datum ans Ende der Datei inhalt ange-
fügt.
Eine andere Möglichkeit zur Umleitung der Standardausgabe ei-
nes Programms bieten die »verkehrten« Anführungszeichen ` …` . Man
spricht auch von Kommandosubstitution: Die Standardausgabe eines
Kommandos, das in verkehrten Anführungszeichen steht, wird anstelle
des Kommandoaufrufs in die Befehlszeile eingebaut; ausgeführt wird
dann das, was sich durch diese Ersetzung ergibt. Zum Beispiel:
$ wc -w <[Link]
1255
$ wc -w <[Link] >wortzahl
$ cat wortzahl
1255
B Passen Sie auf: Hier kommt es auf die Reihenfolge an! Die beiden
Kommandos
make >[Link] 2>&1
make 2>&1 >[Link]
Übungen
C 8.1 [2] Mit der Option -U können Sie ls dazu bringen, die Verzeich-
niseinträge unsortiert auszugeben. Trotzdem hat nach dem Kom-
mando »ls -laU >inhalt « der Eintrag für inhalt in der Ausgabeda-
tei immer noch die Länge Null. Woran könnte das liegen?
C 8.2 [!2] Vergleichen Sie die Ausgabe der Kommandos »ls /tmp «
und »ls /tmp >[Link] « (wobei wir mit »Ausgabe« im zweiten
Fall den Inhalt der Datei ls- [Link] meinen). Fällt Ihnen etwas auf?
Falls ja, wie könnte man das Phänomen erklären?
207
C 8.3 [!2] Warum ist es nicht möglich, eine Datei in einem Schritt
durch eine neue Version zu ersetzen, etwa mit »grep xyz datei >da-
tei «?
C 8.4 [!1] Und was ist das Problem mit »cat bla >>bla « (eine nicht-
leere Datei bla vorausgesetzt)?
C 8.5 [2] Wie würden Sie in der Shell eine Meldung so ausgeben,
dass sie auf der Standard-Fehlerausgabe landet?
8.1.3 Kommando-Pipelines
Oft dient die Ausgabeumleitung nur dazu, das Ergebnis eines Pro-
gramms abzuspeichern, um es dann mit einem anderen Kommando
weiterzubearbeiten. Diese Art von Zwischenspeicherung ist jedoch
nicht nur recht mühsam, sondern Sie müssen auch noch daran den-
ken, die nicht mehr benötigten Dateien wieder zu löschen. Linux bietet
daher eine direkte Verknüpfung von Kommandos durch Pipes an: Die
Ausgabe eines Programms wird automatisch zur Eingabe des nächsten
Programms.
Die direkte Verknüpfung mehrerer Befehle zu einer solchen Kom-
mando-Pipeline (»Rohrleitung«) erfolgt mit dem Zeichen | . Statt also
wie im ersten Beispiel dieses Kapitels zunächst den Verzeichnisinhalt
mit dem Kommando »ls -laF « in eine Datei inhalt umzulenken und die-
se dann mit less anzusehen, können Sie diesen Vorgang auch in einem
Schritt ohne Zwischenspeicherung in einer Datei ausführen:
$ ls -laF | less
total 7
drwxr-xr-x 12 hugo users 1024 Aug 26 18:55 ./
drwxr-xr-x 5 root root 1024 Aug 13 12:52 ../
drwxr-xr-x 3 hugo users 1024 Aug 20 12:30 fotos/
-rw-r--r-- 1 hugo users 449 Sep 6 13:50 inhalt
-rw-r--r-- 1 hugo users 15811 Aug 13 12:33 [Link]
208
Abbildung 8.2: Das Kommando tee
209
für den Buchstaben »T«) lässt sich leicht aus Abbildung 8.2 herleiten –
oder Sie denken an ein »T-Stück« in der »Pipeline« …
Die Anweisung tee ohne Parameter legt die gewünschte Datei neu an
oder überschreibt eine vorhandene; mit -a (engl. append, »anhängen«)
lässt sich die Ausgabe an das Ende einer bestehenden Datei anfügen.
Übungen
C 8.6 [!2] Wie würden Sie dasselbe Zwischenergebnis gleichzeitig in
mehrere Dateien schreiben?
210
8.2 Filterkommandos
Eine der Grundlagen von Unix – und damit Linux – ist das »Werk-
zeugkastenprinzip«. Das System verfügt über eine große Menge von
Systemprogrammen, die jeweils eine (konzeptuell) simple Aufgabe er-
ledigen. Diese Programme können dann von anderen Programmen als
»Bausteine« verwendet werden und ersparen es den Autoren jener Pro-
gramme, die entsprechende Funktionalität selbst zu entwickeln. So hat
z. B. nicht jedes Programm eine eigene Sortierfunktion, sondern viele
Programme greifen auf das Kommando sort zurück. Dieser modulare
Aufbau hat mehrere Vorteile:
• Eine Vereinfachung für die Programmierer, die nicht ständig neue
Sortierroutinen schreiben oder zumindest in ihre Programme ein-
bauen müssen.
• Bei einer Fehlerkorrektur oder Optimierung von sort profitieren
alle Programme, die darauf zugreifen, ebenfalls, und das ohne ex-
plizite Anpassung (meistens jedenfalls).
Programme, die ihre Eingabe von der Standard-Eingabe lesen und ihre
Ausgabe auf die Standard-Ausgabe schreiben, heißen Filterkomman-
dos oder kurz »Filter«. Ohne Eingabeumleitung lesen Filter also von
der Tastatur. Zum Beenden der Standard-Eingabe eines solchen Kom-
mandos müssen Sie die Tastenkombination Strg + d eingeben, die der
Terminaltreiber als »Datei-Ende« interpretiert.
B Das gilt wohlgemerkt nur für die Eingabe von Inhalten über die
Tastatur. Textdateien auf der Platte dürfen natürlich das Strg + d
-Zeichen (ASCII 4) enthalten, ohne dass das System glaubt, die
Datei wäre an dieser Stelle zu Ende. Dies im Gegensatz zu ei-
nem gewissen anderen sehr populären Betriebssystem, das tradi-
tionell etwas eigenwillige Vorstellungen von der Bedeutung des
Zeichens Strg + z (ASCII 26) hat, selbst wenn es in einer Textda-
tei steht …
211
Auch viele »gewöhnliche« Kommandos, zum Beispiel das schon ge-
zeigte grep , verhalten sich wie Filter, wenn Sie keine Dateinamen zur
Bearbeitung angeben.
Eine Auswahl der wichtigsten dieser Befehle besprechen wir im Rest
des Kapitels. Einige haben sich dabei eingeschlichen, die keine wasch-
echten Filter-Kommandos sind, aber für alle gilt, dass sie wichtige Bau-
steine von Pipelines bilden.
212
Tabelle 8.2: Optionen für cat (Auswahl)
Option Wirkung
-b (engl. number non-blank lines) Numeriert alle nicht-
leeren Zeilen der Ausgabe, beginnend mit 1.
-E (engl. end-of-line) Zeigt am Ende jeder Zeile der Aus-
gabe ein $ an (gut zum Aufspüren von ansonsten
nicht sichtbaren Leerzeichen).
-n (engl. number) Numeriert alle Zeilen der Ausgabe,
beginnend mit 1.
-s (engl. squeeze) Ersetzt Folgen von Leerzeilen durch
je eine.
-T (engl. tabs) Stellt Tabulatorzeichen als »^I « dar.
-v (engl. visible) Macht Steuerzeichen 𝑐 als »^ 𝑐« und
Zeichen 𝛼 mit Zeichencodes größer als 127 als »M- 𝛼«
sichtbar.
-A (engl. show all) Äquivalent zu -vET .
213
B Es versteht sich, dass mit cat nur Textdateien eine vernünftige
Bildschirmausgabe liefern. Wenn Sie das Kommando auf andere
Dateitypen wie etwa die Binärdatei /bin/cat anwenden, ist es zu-
mindest auf einem Textterminal sehr wahrscheinlich, dass nach
Ende der Ausgabe die Eingabeaufforderung aus unleserlichen
Zeichenkombinationen besteht. In diesem Fall können Sie durch
(blinde) Eingabe von reset den Bildschirmzeichensatz wieder-
herstellen. Beim Umlenken der cat -Ausgabe in eine Datei ist das
natürlich kein Problem.
B Der useless use of cat award (Preis für den überflüssigen Gebrauch
von cat ) wird Leuten verliehen, die cat benutzen, wo es überhaupt
nicht nötig ist. In den meisten Fällen akzeptieren Kommandos Da-
teinamen und lesen nicht nur ihre Standardeingabe, so dass cat
nicht erforderlich ist, nur um ihnen eine einzige Datei auf der
Standardeingabe zu verfüttern. Ein Aufruf wie »cat [Link] |
grep bla « ist unnötig, wenn man genausogut »grep bla [Link] «
schreiben kann. Selbst wenn grep nur seine Standardeingabe le-
sen könnte, wäre »grep bla <[Link] « kürzer und würde keinen
zusätzlichen cat -Prozess involvieren.
Übungen
C 8.7 [2] Wie können Sie prüfen, ob in einem Verzeichnis Datei-
en mit »merkwürdigen« Namen enthalten sind, etwa solche mit
Leerzeichen am Schluss oder mit unsichtbaren Steuerzeichen in
der Mitte?
214
10 Zeilen jeder Datei, deren Name sie als Argument übergeben bekom-
men (ersatzweise wie üblich die ersten oder letzten 10 Zeilen der Stan-
dard-Eingabe). Die Option -n erlaubt es, eine andere Anzahl von Zeilen
auszugeben: »head -n 20 « liefert die ersten 20 Zeilen der Standard-Ein-
gabe, »tail -n 5 [Link] « die letzten 5 Zeilen der Datei [Link] .
Mit der Option -c können Sie angeben, dass nicht Zeilen, sondern
Bytes gezählt werden sollen: »head -c 20 « zeigt die ersten 20 Bytes der
Standard-Eingabe, egal wie viele Zeilen das sind. Wenn Sie an die Zahl
ein »b «, »k « oder »m « (»Blöcke«, »Kibibyte«, »Mebibyte«) anhängen, wird
sie mit 512, 1024 bzw. 1048576 multipliziert.
B Aus Fairnessgründen kann tail auch etwas, was head nicht kann:
Wenn die Zeilenzahl mit »+ « anfängt, zeigt es alles ab der be-
treffenden Zeile:
$ tail -n +3 datei Alles ab Zeile 3
215
Übungen
C 8.8 [!2] Wie würden Sie gezielt nur die 13. Zeile der Eingabe aus-
geben?
C 8.9 [3] Probieren Sie »tail -f « aus: Legen Sie eine Datei an und
rufen Sie »tail -f « für diese Datei auf. Hängen Sie dann in ei-
nem anderen Fenster bzw. auf einer anderen virtuellen Konsole
z. B. mit »echo >>… « etwas an die Datei an und beobachten Sie die
tail -Ausgabe. Wie sieht das ganze aus, wenn tail mehrere Dateien
gleichzeitig beobachtet?
C 8.10 [3] Was passiert mit »tail -f «, wenn die beobachtete Datei
kürzer wird?
wenn Sie nach dem ersten echo in einem anderen Fenster das Kom-
mando
$ tail -f /tmp/hallo
gestartet haben.
216
8.4 Datenverwaltung
$ … | LC_COLLATE=de_DE.UTF-8 sort
möglich. Der Wert von LC_ALL hat Vorrang vor dem Wert von
LC_COLLATE und dieser wiederum Vorrang vor dem Wert von LANG .
Als Nebeneffekt sorgt die deutsche Sortierreihenfolge übrigens
dafür, dass Groß- und Kleinschreibung ignoriert werden.
mit der gerade aktuellen Erweiterung für die Zeichen mit den Codes ab 128, also zum
Beispiel ISO-8859-1, auch bekannt als ISO-Latin-1.
217
Zeichen weiter hinten in der Zeile über deren relative Anordnung. Na-
türlich kann sort Zeilen nicht nur nach der ganzen Zeile, sondern auch
»gezielt« nach den »Spalten« oder Feldern einer (zumindest konzeptu-
ellen) Tabelle sortieren. Die Felder werden beginnend mit 1 numeriert;
mit der Option »-k 2 « würde das erste Feld ignoriert und das zweite Feld
jeder Zeile zum Sortieren herangezogen. Sind die Werte zweier Zeilen
im zweiten Feld gleich, wird der Rest der Zeile angeschaut, wenn Sie
nicht mit etwas wie »-k 2,3 « das letzte anzuschauende Feld angeben.
»-k 2,2 « sortiert nur nach dem Wert der zweiten Spalte. Es ist übrigens
auch erlaubt, im selben Kommando mehrere -k -Optionen anzugeben.
218
Springinsfeld Karlheinz TV Jahnstein 154 Herren
von Traben Gesine TV Jahnstein 26 Damen
Rasbichel Ulla TSV Lahmhausen 117 Damen
Schwitz Sieglinde Sportfreunde Renntal 93 Damen
Rasbichel Katja TSV Lahmhausen 119 Damen
Langbein Leni SV Schnaufenberg 55 Damen
Zielinger Hannes TV Jahnstein 45 Herren
Fluschinsky Käthe Sportfreunde Renntal 57 Damen
$ sort [Link]
Fluschinsky Käthe Sportfreunde Renntal 57 Damen
Flöttmann Fritz Sportfreunde Renntal 217 Herren
Langbein Leni SV Schnaufenberg 55 Damen
Rasbichel Katja TSV Lahmhausen 119 Damen
Rasbichel Ulla TSV Lahmhausen 117 Damen
Schleicher Detlef TSV Lahmhausen 13 Herren
Schulz Hugo SV Schnaufenberg 123 Herren
Schwitz Sieglinde Sportfreunde Renntal 93 Damen
Springinsfeld Karlheinz TV Jahnstein 154 Herren
Zielinger Hannes TV Jahnstein 45 Herren
von Traben Gesine TV Jahnstein 26 Damen
Sie sehen bestimmt die zwei kleinen Probleme in dieser Liste: Einerseits
sollte »Flöttmann« vor »Fluschinsky« einsortiert werden, andererseits
»von Traben« vor »Zielinger«. Beide verschwinden, wenn wir darauf
achten, die deutschen Sortierregeln einzuhalten:
219
Langbein Leni SV Schnaufenberg 55 Damen
Rasbichel Katja TSV Lahmhausen 119 Damen
Rasbichel Ulla TSV Lahmhausen 117 Damen
Schleicher Detlef TSV Lahmhausen 13 Herren
Schulz Hugo SV Schnaufenberg 123 Herren
Schwitz Sieglinde Sportfreunde Renntal 93 Damen
Springinsfeld Karlheinz TV Jahnstein 154 Herren
von Traben Gesine TV Jahnstein 26 Damen
Zielinger Hannes TV Jahnstein 45 Herren
Hier kommt die oben erwähnte Eigenschaft von sort zum Tragen, das
erste einer Folge von Leerzeichen als Trenner zu interpretieren und die
folgenden dem Anfang des nächsten Feldes zuzuschlagen. Wie Sie se-
hen, sind zwar die Vornamen alphabetisch sortiert, aber immer nur in-
nerhalb der jeweils gleich langen Nachnamen. Dies können Sie durch
die Option -b beheben, die Folgen von Leerzeichen so behandelt wie ein
einziges:
220
Flöttmann Fritz Sportfreunde Renntal 217 Herren
Zielinger Hannes TV Jahnstein 45 Herren
Schulz Hugo SV Schnaufenberg 123 Herren
Springinsfeld Karlheinz TV Jahnstein 154 Herren
Rasbichel Katja TSV Lahmhausen 119 Damen
Fluschinsky Käthe Sportfreunde Renntal 57 Damen
Langbein Leni SV Schnaufenberg 55 Damen
Schwitz Sieglinde Sportfreunde Renntal 93 Damen
von Traben Gesine TV Jahnstein 26 Damen
Rasbichel Ulla TSV Lahmhausen 117 Damen
Hier wird die Datei [Link] absteigend (-r ) nach dem zweiten Zei-
chen der zweiten Tabellenspalte, also dem zweiten Buchstaben des Vor-
namens, sortiert (sehr sinnvoll!). Auch in diesem Fall ist es erforderlich,
221
führende Leerzeichen mit -b zu ignorieren. (Der Schönheitsfehler aus
Übung 8.14 manifestiert sich auch hier noch.)
Mit der Option -t (engl. terminate, »begrenzen«) können Sie statt des
Leerzeichens beliebige andere Trennzeichen festlegen. Dies ist funda-
mental eine gute Idee, weil die zu sortierenden Felder dann Leerzeichen
enthalten dürfen. Hier ist eine bequemer zu verwendende (wenn auch
schwerer zu lesende) Fassung unserer Beispieldatei:
Schulz:Hugo:SV Schnaufenberg:123:Herren
Schleicher:Detlef:TSV Lahmhausen:13:Herren
Flöttmann:Fritz:Sportfreunde Renntal:217:Herren
Springinsfeld:Karlheinz:TV Jahnstein:154:Herren
von Traben:Gesine:TV Jahnstein:26:Damen
Rasbichel:Ulla:TSV Lahmhausen:117:Damen
Schwitz:Sieglinde:Sportfreunde Renntal:93:Damen
Rasbichel:Katja:TSV Lahmhausen:119:Damen
Langbein:Leni:SV Schnaufenberg:55:Damen
Zielinger:Hannes:TV Jahnstein:45:Herren
Fluschinsky:Käthe:Sportfreunde Renntal:57:Damen
222
Tabelle 8.3: Optionen für sort (Auswahl)
Option Wirkung
-b (blank) ignoriert führende Leerzeichen im
Feldinhalt
-d (dictionary) sortiert nach Wörterbuch-Kriteri-
en, d. h. nur Buchstaben, Ziffern
und Leerzeichen werden berück-
sichtigt
-f (fold) keine Unterscheidung von Groß-
und Kleinbuchstaben
-i (ignore) nicht druckbare Zeichen werden
ignoriert
-k ⟨Feld⟩[, ⟨Feld’⟩] (key) Sortiere gemäß ⟨Feld⟩ (bis ein-
schließlich ⟨Feld’⟩)
-n (numeric) betrachtet Feldinhalt als Zahl und
sortiert nach dem numerischen
Wert, führende Leerzeichen wer-
den ignoriert
-o datei (output) schreibt Arbeitsergebnis in eine
Datei, deren Name hier mit der
Ursprungsdatei übereinstimmen
darf!
-r (reverse) sortiert absteigend, also von Z
nach A
-t ⟨Zeichen⟩ (terminate) das ⟨Zeichen⟩ dient als Feldtrenn-
zeichen
-u (unique) gibt nur die erste einer Folge von
identischen Zeilen aus
223
Fluschinsky:Käthe:Sportfreunde Renntal:57:Damen
Schwitz:Sieglinde:Sportfreunde Renntal:93:Damen
Natürlich ist auch die Sortierung nach der Startnummer, wenn Sie nichts
anderes sagen, lexikographisch – »117« und »123« stehen vor »13« und
das wiederum vor »154«. Dies läßt sich ändern, indem Sie die Option -n
angeben und dadurch einen numerischen Vergleich erzwingen:
Diese und die wichtigsten anderen Optionen für sort finden sich in Ta-
belle 8.3; es empfiehlt sich in jedem Fall, die Dokumentation des Pro-
gramms genau zu studieren. sort ist ein vielseitiges und leistungsfähiges
Programm, mit dem Sie sich jede Menge Arbeit sparen können.
Das Kommando uniq hat die wichtige Funktion, von unmittelbar auf-
einanderfolgenden »gleichen« Zeilen in der Eingabe nur eine durchzu-
lassen. Wann zwei Zeilen als »gleich« gelten, lässt sich – wie üblich –
durch Optionen einstellen. uniq unterscheidet sich von den meisten der
bisher gesehenen Programme dadurch, dass es keine beliebige Anzahl
von benannten Eingabedateien akzeptiert, sondern höchstens eine; ein
etwaiger zweiter Dateiname wird als Name für die Ausgabedatei an-
gesehen (ersatzweise die Standard-Ausgabe). Wird keine Datei im uniq -
Aufruf benannt, liest uniq , so wie es sich gehört, seine Standard-Eingabe.
224
uniq funktioniert am besten, wenn die Eingabezeilen sortiert sind, so
dass alle gleichen Zeilen hintereinander stehen. Ist das nicht der Fall, so
ist eben nicht gesagt, dass jede Zeile in der Ausgabe nur einmal vor-
kommt:
$ cat uniq-test
Hipp
Hopp
Hopp
Hipp
Hipp
Hopp
$ uniq uniq-test
Hipp
Hopp
Hipp
Hopp
$ sort -u uniq-test
Hipp
Hopp
Übungen
C 8.12 [!2] Sortieren Sie die Teilnehmerliste in [Link] (der
Datei mit Doppelpunkten als Feldtrenner) nach den Vereinsna-
men und innerhalb der Vereine nach den Nach- und Vornamen
der Spieler (in dieser Reihenfolge).
C 8.13 [3] Wie können Sie die Teilnehmerliste aufsteigend nach den
Vereinsnamen und innerhalb der Vereine absteigend nach der
Startnummer sortieren? (Tipp: Dokumentation lesen!)
225
C 8.14 [!2] Was ist der »Schönheitsfehler«, von dem in den Beispie-
len die Rede ist, und warum tritt er auf?
C 8.15 [2] Ein Verzeichnis enthält Dateien mit den folgenden Na-
men:
[Link] [Link] [Link] [Link]
[Link] [Link] [Link] [Link]
[Link] [Link] [Link] [Link]
Geben Sie ein sort -Kommando an, mit dem Sie die Ausgabe von
ls in die »chronologisch richtige« Reihenfolge
[Link]
[Link]
[Link]
[Link]
[Link]
bringen können.
226
Schritt ausgeschnitten werden, können diese als kommaseparierte Liste
festgelegt werden. Auch die Angabe von Spaltenbereichen ist zulässig.
227
$ cut -d: -f 1,4 [Link]
Schulz:123
Schleicher:13
Flöttmann:217
Springinsfeld:154
von Traben:26
Rasbichel:117
Auf diese Weise werden der Meldeliste die Nachnamen der Teilnehmer
(Spalte 1) sowie die Benutzernummern (Spalte 4) entnommen, Trenn-
zeichen ist der Doppelpunkt. Aus Gründen der Übersichtlichkeit ist hier
nur eine verkürzte Ausgabe abgebildet.
Diese Datei kann jetzt bequem mit »sort -n [Link] « nach dem
229
numerischen Wert der Startnummer sortiert werden.
Durch -s (engl. serial, »nacheinander«) werden die angegebenen Da-
teien nacheinander durchlaufen. Zunächst werden alle Zeilen der ersten
Datei mit Trennzeichen zu einer Zeile zusammengefasst, anschließend
alle Zeilen aus der zweiten Datei in der zweiten Zeile usw.
$ cat liste1
Hund
Katze
Maus
$ cat liste2
Ei
Blut
Kakao
$ paste -s liste*
Hund Katze Maus
Ei Blut Kakao
Alle Dateien, deren Name dem Suchmuster liste* entspricht, hier al-
so lediglich liste1 und liste2 , werden von paste zusammengesetzt. Die
Angabe von -s bewirkt, dass jede Zeile dieser Dateien eine Spalte der
Ausgabe ergibt.
Übungen
C 8.16 [!2] Generieren Sie eine neue Version der Datei [Link]
(der mit der festen Spaltenbreite), in der die Startnummer und die
Vereinszugehörigkeit nicht auftauchen.
C 8.17 [!2] Generieren Sie eine neue Version der Datei [Link]
(der mit den durch Doppelpunkt getrennten Feldern), in der die
Startnummer und die Vereinszugehörigkeit nicht auftauchen.
C 8.18 [3] Erzeugen Sie eine Version der Datei [Link] , bei
der die Felder nicht durch Doppelpunkte, sondern durch die Zei-
230
chenkette »,␣ « (Komma gefolgt von einem Leerzeichen) getrennt
sind.
231
Kommandos in diesem Kapitel
232
Zusammenfassung
233
9 Mehr über die Shell
Lernziele
• Shell- und Umgebungsvariable kennenlernen
Vorkenntnisse
• Shell-Grundkenntnisse (Kapitel 4)
• Dateiverwaltung und einfache Filterkommandos (Kapitel 6, Kapi-
tel 8)
• Umgang mit einem Texteditor (Kapitel 3)
9.1 sleep , echo und date
Bevor wir uns mit der eigentlichen Shell beschäftigen, müssen wir
Ihnen noch ein bisschen mehr Material für Experimente geben. Dazu
erklären wir Ihnen hier noch einige ganz einfache Kommandos:
sleep Dieses Kommando tut für die als Parameter angegebene Anzahl
von Sekunden gar nichts. Sie können es benutzen, wenn Sie wollen, dass
Ihre Shell eine »Kunstpause« einlegt:
$ sleep 10
Ca. 10 Sekunden lang passiert nichts
$ _
echo Das Kommando echo gibt seine Argumente aus (sonst nichts),
und zwar durch Leerzeichen getrennt. Es ist aber doch interessant und
nützlich, da die Shell vorher Variablenbezüge (siehe Abschnitt 9.2) und
ähnliches ersetzt:
$ w=Welt
$ echo Hallo $w
Hallo Welt
$ echo Hallo ${w}enbummler
Hallo Weltenbummler
(Das zweite echo illustriert, was Sie machen können, wenn direkt etwas
an den Ausgabewert einer Variable angehängt werden soll.)
$ echo -n Hallo
Hallo$
235
date Das Kommando date (engl. »Datum«) zeigt das aktuelle Datum
sowie die Uhrzeit an. Sie können in weiten Grenzen bestimmen, wie
diese Ausgabe aussehen soll – rufen Sie »date --help « auf oder lesen Sie
mit »man date « die Online-Dokumentation.
$ date
Thu Oct 5 14:26:07 CEST 2006
$ export TZ=Asia/Tokyo
$ date
Tue Oct 5 21:26:19 JST 2006
$ unset TZ
Während jeder Anwender die Systemzeit abfragen darf, ist es nur dem
Systemadministrator root erlaubt, mit dem Befehl date und einem Argu-
ment in der Form MMTThhmm die Systemzeit zu verändern. Im Argument
stehen dabei MM für Monat, TT für Tag, hh für Stunde und mm für Minute.
Optional dazu können noch jeweils zwei Stellen für die Jahreszahl (plus
möglicherweise zwei für das Jahrhundert) sowie die Sekunden (mit ei-
nem Punkt davor) angegeben werden, was aber nur in den seltensten
Fällen notwendig sein dürfte.
$ date
Thu Oct 5 14:28:13 CEST 2006
$ date 08181715
date: cannot set date: Operation not permitted
Fri Aug 18 17:15:00 CEST 2006
236
B Mit dem date -Kommando wird nur die interne Zeit des Linux-
Systems geändert. Diese Zeit wird nicht notwendigerweise in die
CMOS-Uhr auf der Hauptplatine des Rechners übertragen, so
dass es notwendig sein kann, diese mit einem speziellen Kom-
mando zu ändern. Viele Distributionen machen das automatisch,
wenn das System heruntergefahren wird.
Übungen
C 9.1 [!3] Angenommen, jetzt ist der 22. Oktober 2003, 12:34 Uhr und
56 Sekunden. Studieren Sie die Dokumentation von date und ge-
ben Sie die Formatierungsanweisungen an, mit denen Sie die fol-
genden Ausgaben erreichen können:
1. 22-10-2003
2. 03-294 (KW43) (Zweistellige Jahreszahl, fortlaufende Nummer
des Tags im Jahr, Kalenderwoche)
3. 12h34m56s
237
9.2 Shell-Variable und die Umgebung
Die Bash hat – wie die meisten gängigen Shells – Eigenschaften, die
man sonst in Programmiersprachen findet. Zum Beispiel ist es möglich,
Text oder numerische Werte in Variablen abzulegen und später wieder
hervorzuholen. Variable steuern auch verschiedene Aspekte der Funk-
tionsweise der Shell selbst.
In der Shell wird eine Variable durch ein Kommando wie »bla=fasel «
gesetzt (dieses Kommando setzt die Variable bla auf den textuellen Wert
fasel ). Achten Sie darauf, dass vor und hinter dem Gleichheitszeichen
keine Leerzeichen stehen! Verwenden können Sie den Wert der Varia-
blen, indem Sie den Variablennamen mit einem vorgesetzten Dollarzei-
chen benutzen:
$ bla=fasel
$ echo bla
bla
$ echo $bla
fasel
238
Tabelle 9.1: Wichtige Variable der Shell
Variable Bedeutung
PWD Name des aktuellen Verzeichnisses
PS1 enthält die Zeichenkette, die am Beginn jeder Ein-
gabezeile angezeigt wird (den Prompt)
UID enthält die Benutzerkennung
HOME Pfad des Heimatverzeichnisses des Benutzers
PATH Liste von Verzeichnissen, die von der Shell auto-
matisch als Suchpfade für Befehle verwendet wer-
den
LOGNAME enthält den Benutzernamen
Oder Sie definieren eine neue Variable gleich als Shell- und Umgebungs-
variable:
$ export bla=fasel
Die Umgebungsvariablen können Sie sich mit dem Befehl export (oh-
ne Parameter) anzeigen lassen. Auch der Befehl env (ebenfalls ohne Pa-
rameter) zeigt die aktuelle Umgebung an. Alle Shellvariablen (inklusive
diejenigen, die auch in der Umgebung sind) können Sie sich mit dem
Befehl set anzeigen lassen. Die gebräuchlichsten Variablen und ihre Zu-
ordnung sind in Tabelle 9.1 aufgelistet.
B Der Befehl set tut noch viele andere fremdartige und wundervolle
Dinge. Er wird Ihnen in der Linup-Front-Schulungsunterlage Li-
239
nux für Fortgeschrittene wieder begegnen, wo es um Shellprogram-
mierung geht.
$ bla=fasel bash
hat dieselbe Wirkung. Allerdings erlaubt env Ihnen auch das tem-
poräre Entfernen von Variablen aus der Umgebung (wie?).
Wenn Sie von einer Shellvariablen genug haben, können Sie sie mit
dem Befehl unset löschen. Damit verschwindet sie auch aus der Prozess-
umgebung. Wenn Sie eine Variable aus der Umgebung entfernen wollen,
sie aber als Shellvariable beibehalten möchten, verwenden Sie »export
-n «:
240
Übungen
C 9.3 [!2] Überzeugen Sie sich, dass die Übergabe (oder Nicht-
übergabe) von Umgebungs- und Shellvariablen an Kindprozesse
funktioniert wie behauptet, indem Sie die folgende Kommando-
sequenz durchspielen:
241
9.3 Arten von Kommandos – die zweite
$ echo $PATH
/home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
eingeben, weiß die Shell, dass das kein internes Kommando ist (sie kennt
ihre internen Kommandos) und fängt darum an, die Verzeichnisse in
PATH abzusuchen, beginnend am linken Ende. Konkret prüft sie, ob die
folgenden Dateien existieren:
/home/hugo/bin/ls Nein …
/usr/local/bin/ls Immer noch nicht …
/usr/bin/ls Nach wie vor nicht …
/bin/ls Hah, Treffer!
Das Verzeichnis /usr/games wird nicht mehr angeschaut.
Das heißt, zur Ausführung des Kommandos ls wird die Datei /bin/ls
herangezogen.
Wenn Sie wissen wollen, genau welches Programm die Shell für ein
externes Kommando heranzieht, können Sie dafür das Kommando which
verwenden:
$ which grep
/bin/grep
243
B which weiß nichts über die internen Kommandos der Shell; selbst
wenn etwas wie »which test « also »/usr/bin/test « liefert, heißt das
noch lange nicht, dass dieses Programm tatsächlich ausgeführt
wird, denn interne Kommandos haben Vorrang gegenüber exter-
nen. Wenn Sie wissen wollen, was wirklich passiert, müssen Sie
das Shell-Kommando »type « benutzen (Abschnitt 4.3.3).
$ whereis passwd
passwd: /usr/bin/passwd /etc/passwd /etc/[Link] /usr/share/passwd
/usr/share/man/man1/[Link] /usr/share/man/man1/[Link]
/usr/share/man/man5/[Link]
Übungen
C 9.5 [2] Überzeugen Sie sich davon, dass die Kommandosuche der
Shell auch funktioniert, wenn PATH keine Umgebungsvariable, son-
dern »nur« eine Shellvariable ist. Was passiert, wenn Sie PATH kom-
plett entfernen?
C 9.6 [!1] Wie heißen auf Ihrem System die ausführbaren Program-
me, die zur Bearbeitung der folgenden Kommandos herangezo-
gen werden: fgrep , sort , mount , xterm
C 9.7 [!1] Wie heißen auf Ihrem System die Dateien, die die Doku-
mentation für das Kommando »crontab « enthalten?
244
9.4 Die Shell als komfortables Werkzeug
246
Tabelle 9.2: Tastaturkürzel innerhalb der Bash
Tastaturkürzel Funktion
↑ bzw. ↓ durch frühere Kommandos blättern
Strg +r Frühere Kommandos durchsuchen
← bzw. → Cursor in Kommandozeile bewegen
Pos1 oder Strg + a Cursor an Zeilenanfang setzen
Ende oder Strg + e Cursor an Zeilenende setzen
⇐ bzw. Entf Zeichen vor bzw. nach Cursor löschen
Strg + t die beiden Zeichen vor/unter Cursor
tauschen
Strg + l Bildschirm löschen
Strg + c Kommando abbrechen
Strg + d Eingabe beenden (in der Login-Shell:
Abmelden)
Tabelle 9.2 gibt eine Übersicht über die in der Bash möglichen Tasta-
turkürzel.
247
In diesem Fall wird das zweite Kommando ausgeführt, sobald das erste
fertig ist.
248
Umgekehrt wird mit || als »Trennzeichen« das zweite Kommando
nur dann ausgeführt, wenn das erste nicht erfolgreich beendet wurde:
Übungen
C 9.8 [3] Was ist das Problem mit dem Kommando »echo "Hallo!" «?
(Tipp: Experimentieren Sie mit Kommandos der Form »!-2 « oder
»!ls «.)
249
9.5 Kommandos aus einer Datei
$ bash meine-kommandos
Eine solche Datei bezeichnet man auch als Shellskript, und die Shell
hat umfangreiche Möglichkeiten zur Programmierung, die wir hier nur
grob umreißen können. auf die wir an dieser Stelle nicht näher eingehen
können. (Die Linup-Front-Schulungsunterlage Linux für Fortgeschrittene
erklärt die Programmierung von Shellskripten sehr ausführlich.)
B Sie können sich das vorgesetzte bash sparen, indem Sie als erste
Zeile der Skriptdatei die magische Anrufung
#!/bin/bash
$ chmod +x meine-kommandos
(Mehr über chmod und Zugriffsrechte finden Sie in Kapitel 14.) An-
schließend genügt der Aufruf
$ ./meine-kommandos
Wenn Sie ein Shellskript wie oben gezeigt aufrufen – ob mit vorge-
setztem bash oder als ausführbare Datei –, aufrufen, wird es in einer
250
Sub-Shell ausgeführt, also einer Shell, die ein Kindprozess der aktuel-
len Shell ist. Das bedeutet, dass Änderungen zum Beispiel an Shell- oder
Umgebungsvariablen die aktuelle Shell nicht beeinflussen. Nehmen wir
einmal an, die Datei zuweisung enthält die Zeile
bla=fasel
$ bla=blubb
$ bash zuweisung Enthält bla=fasel
$ echo $bla
blubb Keine Änderung; Zuweisung war nur in Sub-Shell
In der Regel wird das als Vorteil empfunden, aber hin und wieder wäre
es schon wünschenswert, Kommandos aus einer Datei auf die aktuelle
Shell wirken zu lassen. Auch das funktioniert: Das Kommando source
liest die Zeilen einer Datei so ein, als ob Sie sie direkt in die aktuelle
Shell tippen würden – alle Änderungen von Variablen (unter anderem)
wirken also auf Ihre aktuelle Shell:
$ bla=blubb
$ source zuweisung Enthält bla=fasel
$ echo $bla
fasel Variable wurde geändert!
Ein anderer Name für das Kommando source ist übrigens ». « (Sie ha-
ben richtig gelesen – Punkt!) Statt
$ source zuweisung
251
B Wie die Programmdateien für externe Kommandos werden auch
die Dateien, die mit source bzw. . gelesen werden sollen, in den
Verzeichnissen gesucht, die die Variable PATH angibt.
252
9.6 Die Shell als Programmiersprache
$ cat hallo
#!/bin/bash
echo Hallo $1, was machst Du $2?
$ ./hallo Hugo heute
Hallo Hugo, was machst Du heute?
$ ./hallo Susi morgen
Hallo Susi, was machst Du morgen?
Die Variable $* enthält alle Parameter auf einmal, und in $# steht die
Anzahl der Parameter:
$ cat parameter
#!/bin/bash
echo $# Parameter: $*
$ ./parameter
0 Parameter:
253
$ ./parameter Hund
1 Parameter: Hund
$ ./parameter Hund Katze Maus Baum
4 Parameter: Hund Katze Maus Baum
$ for i in 1 2 3
> do
> echo Und $i!
> done
Und 1!
Und 2!
Und 3!
Wenn Sie das »in …« weglassen, läuft die Schleife über die Parameter
von der Kommandozeile:
254
$ cat sort-wc
#!/bin/bash
# Sortiere Dateien nach ihrer Zeilenzahl
for f
do
echo `wc -l <"$f» Zeilen in $f
done | sort -n
$ ./sort-wc /etc/passwd /etc/fstab /etc/motd
#!/bin/bash
# grepcp REGEX
rm -rf backup; mkdir backup
for f in *.txt
do
grep $1 "$f" && cp "$f" backup
done
zum Beispiel kopiert nur diejenigen Dateien ins Verzeichnis backup , de-
ren Name auf .txt endet (dafür sorgt die for -Schleife) und die mindes-
tens eine Zeile haben, auf die der reguläre Ausdruck passt, der als Pa-
rameter übergeben wurde.
Nützlich für Fallunterscheidungen ist das Kommando test , das eine
große Auswahl von Bedingungen überprüfen kann. Es liefert den Rück-
gabewert 0 (Erfolg), wenn die Bedingung zutrifft, sonst einen von Null
verschiedenen Rückgabewert (Misserfolg). Betrachten Sie zum Beispiel
255
#!/bin/bash
# filetest NAME1 NAME2 ...
for name
do
test -d "$name" && echo $name: Verzeichnis
test -f "$name" && echo $name: Datei
test -L "$name" && echo $name: Symbolisches Link
done
Mit dem if -Kommando können Sie (bequem und leserlich) mehr als
ein Kommando von einer Fallunterscheidung abhängig machen (Statt
»test …« können Sie auch »[ …] « schreiben):
#!/bin/bash
# filetest2 NAME1 NAME2 ...
for name
do
if [ -L "$name" ]
then
echo $name: Symbolisches Link
elif [ -d "$name" ]
echo $name: Verzeichnis
elif [ -f "$name" ]
echo $name: Datei
256
else
echo $name: Keine Ahnung
fi
done
Mehr Schleifen Bei der for -Schleife liegt die Anzahl der Schleifen-
durchläufe von Anfang an fest (die Anzahl der Wörter in der Liste). Oft
bekommt man es aber mit Situationen zu tun, wo nicht a priori klar ist,
wie oft eine Schleife durchlaufen werden soll. Hierfür bietet die Shell die
while -Schleife an, die (ähnlich wie if ) ein Kommando ausführt, dessen
Erfolg oder Misserfolg darüber entscheidet, wie mit der Schleife verfah-
ren wird: Bei Erfolg werden die »abhängigen« Kommandos ausgeführt,
bei Misserfolg wird nach der Schleife im Skript fortgefahren.
Das folgende Skript liest eine auf der Kommandozeile übergebene
Datei der Form
Liebe Tante Frieda:frieda@[Link]:den tollen Kaffeewärmer
Lieber Onkel Hans:hans@[Link]:den schönen Fußball
und konstruiert aus jeder Zeile eine Dankes-E-Mail (Linux ist halt schon
sehr nützlich fürs wirkliche Leben):
#!/bin/bash
# birthday FILE
257
IFS=:
while read anrede adresse geschenk
do
(echo $anrede!
echo ""
echo "Vielen Dank für $geschenk!"
echo "Ich habe mich sehr darüber gefreut."
echo ""
echo "Viele Grüße,"
echo "Dein Hugo") | mail -s "Vielen Dank!" $adresse
done <$1
Das Kommando read liest dabei die Eingabedatei Zeile für Zeile und teilt
jede Zeile an den Doppelpunkten (Variable IFS ) in die drei Felder anrede ,
adresse und geschenk auf, die im Inneren der Schleife dann als Variable zur
Verfügung stehen. Die Eingabeumleitung für die Schleife steht etwas
konterintuitiv ganz am Ende.
Übungen
C 9.9 [1] Was ist der Unterschied (bei der Schleifenausführung) zwi-
schen
for f; do …; done
und
for f in $*; do …; done
und nicht
wc -l $f
C 9.11 [2] Ändern Sie das grepcp -Skript so, dass es auch die Liste der
zu betrachtenden Dateien von der Kommandozeile übernimmt.
(Tipp: Das Shell-Kommando shift entfernt den ersten Komman-
dozeilenparameter aus $ und läßt alle anderen um eine Position
aufrücken. Nach einem shift ist das vormalige $2 jetzt $1 , $3 ist $2
und so weiter.)
C 9.12 [2] Warum liefert das Skript filetest für ein symbolisches
Link die Ausgabe
$ ./filetest foo
foo: Datei
foo: Symbolisches Link
259
Kommandos in diesem Kapitel
. Liest eine Datei mit Shell-Kommandos so ein, als ob sie auf der
Kommandozeile eingegeben worden wäre bash (1) 251
date Gibt Datum und Uhrzeit aus date (1) 236
env Gibt die Prozessumgebung aus oder startet Programme mit
veränderter Umgebung env (1) 239
export Definiert und verwaltet Umgebungsvariable bash (1) 238
hash Zeigt und verwaltet gesehene“ Kommandos in der bash
”
bash (1) 243
set Verwaltet Shellvariable bash (1) 239
source Liest eine Datei mit Shell-Kommandos so ein, als ob sie auf der
Kommandozeile eingegeben worden wäre bash (1) 251
test Wertet logische Ausdrücke auf der Kommandozeile aus
test (1), bash (1) 255
unset Löscht Shell- oder Umgebungsvariable bash (1) 240
whereis Sucht ausführbare Programme, Handbuchseiten und Quell-
code zu gegebenen Kommandos whereis (1) 244
which Sucht Programme in PATH which (1) 243
260
Zusammenfassung
261
10 Das Dateisystem
Lernziele
• Die Begriffe »Datei« und »Dateisystem« verstehen
• Die verschiedenen Dateitypen kennen
• Sich im Verzeichnisbaum eines Linux-Systems zurechtfinden
• Wissen, wie externe Dateisysteme in den Verzeichnisbaum einge-
bunden werden
Vorkenntnisse
• Linux-Grundkenntnisse (etwa aus den vorherigen Kapiteln)
• Umgang mit Dateien und Verzeichnissen (Kapitel 6)
10.1 Begriffe
Der Begriff Datei steht ganz allgemein für eine abgeschlossene An-
sammlung von Daten. Für die Art der enthaltenen Daten gibt es keine
Einschränkungen; eine Datei kann ein Text sein, der nur wenige Buch-
staben lang ist, aber auch ein viele Megabyte großes Archiv, das das ge-
samte Lebenswerk eines Anwenders umfaßt. Dateien müssen natürlich
nicht unbedingt gewöhnlichen Text enthalten. Bilder, Klänge, ausführ-
bare Programme und vieles andere mehr werden ebenfalls in Form von
Dateien auf dem Datenträger abgelegt. Um herauszufinden, welche Art
von Inhalt eine Datei hat, können Sie den Befehl file verwenden:
B file errät den Typ einer Datei auf der Basis von Regeln, die im
Verzeichnis /usr/share/file stehen. /usr/share/file/magic enthält die
Regeln im Klartext. Sie können eigene Regeln definieren, wenn Sie
sie in /etc/magic ablegen. Näheres verrät magic (5).
264
Tabelle 10.1: Linux-Dateitypen
10.2 Dateitypen
266
Übungen
C 10.1 [3] Suchen Sie in Ihrem System nach Beispielen für die ver-
schiedenen Dateitypen. (Tabelle 10.1 zeigt Ihnen, woran Sie die
betreffenden Dateien erkennen können.)
267
10.3 Der Linux-Verzeichnisbaum
268
$ cd /
$ ls -l
insgesamt 125
drwxr-xr-x 2 root root 4096 Dez 20 12:37 bin
drwxr-xr-x 2 root root 4096 Jan 27 13:19 boot
lrwxrwxrwx 1 root root 17 Dez 20 12:51 cdrecorder
-> /media/cdrecorder
lrwxrwxrwx 1 root root 12 Dez 20 12:51 cdrom -> /media/cdrom
drwxr-xr-x 27 root root 49152 Mär 4 07:49 dev
drwxr-xr-x 40 root root 4096 Mär 4 09:16 etc
lrwxrwxrwx 1 root root 13 Dez 20 12:51 floppy -> /media/floppy
drwxr-xr-x 6 root root 4096 Dez 20 16:28 home
drwxr-xr-x 6 root root 4096 Dez 20 12:36 lib
drwxr-xr-x 6 root root 4096 Feb 2 12:43 media
drwxr-xr-x 2 root root 4096 Mär 21 2002 mnt
drwxr-xr-x 14 root root 4096 Mär 3 12:54 opt
dr-xr-xr-x 95 root root 0 Mär 4 08:49 proc
drwx------ 11 root root 4096 Mär 3 16:09 root
drwxr-xr-x 4 root root 4096 Dez 20 13:09 sbin
drwxr-xr-x 6 root root 4096 Dez 20 12:36 srv
drwxrwxrwt 23 root root 4096 Mär 4 10:45 tmp
drwxr-xr-x 13 root root 4096 Dez 20 12:55 usr
drwxr-xr-x 17 root root 4096 Dez 20 13:02 var
269
/usr/bin installieren und die betreffende Datei beim nächsten Sys-
tem-Upgrade überschrieben wird, sind Sie selber schuld, weil Sie
laut FHS Ihre eigenen Programme nicht nach /usr/bin schreiben
sollen (/usr/local/bin wäre richtig).
270
Systembibliotheken – /lib Hier finden sich die shared libraries der Pro-
gramme in /bin und /sbin in Form von Dateien und (symbolischen)
Links. Shared Libraries sind Programmstücke, die von verschiedenen
Programmen gebraucht werden. Solche gemeinsam verwendeten Bi-
bliotheken sparen eine Menge Systemressourcen, da die meisten Pro-
zesse teilweise gleiche Bestandteile haben und diese Bestandteile dann
nur einmal geladen werden müssen; ferner ist es einfacher, Fehler in
solchen Bibliotheken zu korrigieren, wenn es sie nur einmal im System
gibt und alle Programme den betreffenden Programmcode aus einer
zentralen Datei holen. Unter /lib/modules liegen übrigens auch die Ker-
nelmodule, also Systemkern-Programmcode, der nicht notwendiger-
weise benötigt wird – Gerätetreiber, Dateisysteme, Netzwerkprotokolle
und ähnliches. Diese Module können vom Systemkern bei Bedarf nach-
geladen und prinzipiell nach Gebrauch auch wieder entfernt werden.
271
er besprochen.
Anstelle der Speichergröße stehen hier zwei Zahlen: Die erste ist die
Treibernummer (engl. major device number). Sie kennzeichnet den Ge-
rätetyp und legt fest, welcher Treiber im Kernel für die Verwaltung zu-
ständig ist. So haben zum Beispiel alle SCSI-Festplatten traditionell die
Treibernummer 8. Die zweite Zahl ist die Gerätenummer (engl. minor
device number). Sie dient dem Treiber zur Unterscheidung verschiede-
ner ähnlicher oder verwandter Geräte oder auch zur Kennzeichnung
verschiedener Partitionen einer Platte.
Erwähnenswert sind noch ein paar Pseudogeräte. Das null device,
/dev/null , ist quasi ein Mülleimer für Ausgaben eines Programmes, die
nicht gebraucht werden, aber irgendwohin geleitet werden müssen. Bei
einem Aufruf wie
$ programm >/dev/null
wird die Standardausgabe, die sonst auf dem Terminal erscheinen wür-
de, verworfen. Wird /dev/null gelesen, reagiert es wie eine leere Datei
272
und liefert sofort das Dateiende. Für /dev/null müssen alle Benutzer
Schreib- und Leserechte haben.
Die »Geräte« /dev/random bzw. /dev/urandom liefern zufällige Bytes in
»kryptographischer« Qualität, die erzeugt werden, indem »Rauschen«
im System gesammelt wird – etwa die Zeitabstände zwischen dem Ein-
treffen unvorhersehbarer Ereignisse wie Tastendrücke. Die Daten aus
/dev/random eignen sich zur Erzeugung von Schlüsseln für gängige Ver-
schlüsselungsverfahren. Die Datei /dev/zero liefert Nullbytes in beliebi-
ger Menge; Sie können diese unter anderem zum Erzeugen und zum
Überschreiben von Dateien mit dem Befehl dd verwenden.
273
/etc/issue In der Datei /etc/issue steht der Begrüßungstext, der vor der
Aufforderung zum Anmelden ausgegeben wird. Nach der Instal-
lation eines neuen Systems wird in diesem Text meistens der Na-
me des Herstellers präsentiert.
/etc/motd Hier steht die »Nachricht des Tages« (engl. message of the day),
die nach einer erfolgreichen Anmeldung automatisch auf dem
Bildschirm erscheint, noch bevor die Shell die erste Eingabe-
aufforderung ausgibt. Diese Datei kann der Systemadministrator
verwenden, um aktuelle Informationen und Neuigkeiten weiter-
zugeben1 .
/etc/mtab Dies ist eine Liste aller eingehängten Dateisysteme inklusive
ihrer mount points. /etc/mtab unterscheidet sich von /etc/fstab dar-
in, dass in /etc/mtab alle aktuell eingehängten Dateisysteme auf-
gezählt sind, während in /etc/fstab nur Voreinstellungen und Op-
tionen dafür stehen, welche Dateisysteme wie eingehängt werden
können – typischerweise beim Systemstart, aber auch später. Sie
können natürlich über die Kommandozeile beliebige Dateisyste-
me einhängen können, wo Sie wollen, und das wird hier auch pro-
tokolliert.
/etc/passwd In /etc/passwd findet sich eine Liste aller dem System bekann-
ten Benutzer zusammen mit diversen anderen benutzerspezifi-
schen Informationen. In modernen Systemen befinden sich üb-
rigens trotz des Namens dieser Datei die Kennwörter nicht hier,
sondern in der Datei /etc/shadow . Jene Datei ist für normale Benut-
zer nicht lesbar.
1 Man sagt, dass die einzige Gemeinsamkeit aller Unix-Systeme der Welt die message of
the day ist, die darauf hinweist, dass die Platten zu 98% voll sind und die Benutzer über-
flüssige Dateien entsorgen mögen.
274
Zubehör – /opt Dieses Verzeichnis ist eigentlich dafür gedacht, dass
Drittanbieter fertige Softwarepakete anbieten können, die sich installie-
ren lassen sollen, ohne mit den Dateien einer Linux-Distribution oder
den lokal angelegten Dateien zu kollidieren. Solche Softwarepakete be-
legen ein Unterverzeichnis /opt/ ⟨Paketname⟩. Von Rechts wegen sollte
dieses Verzeichnis unmittelbar nach der Installation einer Distribution
auf einer neuen Platte also völlig leer sein.
B Der Name /usr wird häufig als »Unix system resources« interpre-
tiert, was aber historisch nicht stimmt: Ursprünglich stammt
dieses Verzeichnis aus der Zeit, als in einem Rechner eine klei-
ne schnelle und eine große langsame Festplatte zur Verfügung
stand. Auf die kleine Festplatte kamen alle häufig verwendeten
Programme und Dateien, auf die große langsame (unter /usr ein-
gehängt) große Programme und Dateien, die nicht recht auf die
kleine Platte passten, oder solche, die nicht so oft benötigt wur-
den. Heute können Sie die Trennung anders ausnutzen: Wenn
Sie es geschickt anstellen, können Sie /usr auf eine eigene Parti-
tion legen und diese schreibgeschützt in den Verzeichnisbaum
einbinden. Es ist grundsätzlich sogar möglich, /usr von einem
zentralen Server zu importieren, und so auf Arbeitsplatzrechnern
Plattenplatz zu sparen und die Wartung zu vereinfachen (nur der
zentrale Server muss gegebenenfalls aktualisiert werden), auch
wenn die gesunkenen Plattenpreise das heute nicht mehr nötig
machen. Die gängigen Linux-Distributionen unterstützen es so-
wieso nicht.
Das Fenster zum Kernel – /proc Das ist mit das interessanteste Ver-
zeichnis und auch eines der wichtigsten. /proc ist eigentlich ein Pseu-
do-Dateisystem. Es belegt keinen Platz auf der Festplatte, sondern die
Verzeichnisse und Dateien werden vom Systemkern erzeugt, wenn sich
jemand für ihren Inhalt interessiert. Hier finden Sie sämtliche Informa-
tionen zu den laufenden Prozessen und außerdem weitere Informatio-
nen, die der Kernel über die Hardware des Rechners besitzt. In einigen
Dateien finden Sie zum Beispiel eine komplette Hardwareanalyse. Die
wichtigsten Dateien sind kurz aufgeführt:
/proc/cpuinfoHier sind Informationen über den Typ und die Taktfre-
quenz der CPU enthalten.
276
/proc/devices Hier findet sich eine vollständige Liste der Geräte, die vom
Kernel unterstützt werden mit deren Gerätenummern. Beim Er-
stellen der Gerätedateien wird auf diese Datei zugegriffen.
/proc/dma Eine Liste der belegten DMA-Kanäle. Ist auf heutigen PCI-ba-
sierten Systemen nicht mehr fürchterlich interessant oder wichtig.
/proc/interrupts Eine Liste aller belegten Hardwareinterrupts. Inter-
ruptnummer, Anzahl der bisher ausgelösten Interrupts und die
Bezeichnung der möglichen auslösenden Geräte sind angegeben.
(Ein Interrupt taucht in dieser Liste nur auf, wenn er wirklich von
einem Treiber im Kernel beansprucht wird.)
/proc/ioports Ähnlich wie /proc/interrupts , aber für I/O-Ports.
/proc/kcore Diese Datei fällt ins Auge wegen ihrer Größe. Sie ist der Zu-
gang zum gesamten Arbeitsspeicher des Rechners, quasi ein Ab-
bild des RAM, und wird zum Debugging des Systemkerns ge-
braucht. Diese Datei kann nur mit root -Privilegien gelesen wer-
den. Am besten lassen Sie die Finger davon!
/proc/loadavgDiese Datei gibt drei Zahlen aus, die ein Maß für die Aus-
lastung der CPU innerhalb der letzten 1, 5 und 15 Minuten sind.
Diese Zahlen werden normalerweise vom Programm uptime aus-
gegeben.
/proc/meminfoZeigt die Speicherauslastung und die Auslastung des
Swap-Bereichs an. Diese Datei wird vom Kommando free be-
nutzt.
/proc/mountsWieder eine Liste aller aktuell gemounteten Dateisysteme,
weitestgehend identisch mit /etc/mtab .
/proc/scsi In diesem Verzeichnis findet man eine Datei mit dem Namen
scsi , in der die erkannten Geräte aufgelistet sind. Dann gibt es ein
Unterverzeichnis für jeden Typ von SCSI-Hostadapter im System,
in dem in einer Datei 0 (bzw. 1 , 2 usw. bei mehreren gleichen Ad-
aptern) Informationen über den Adapter gespeichert sind.
277
Enthält die Versionsnummer und das Übersetzungsda-
/proc/version
tum des laufenden Kernels.
B Tendenziell sollen alle Einträge von /proc , die nichts mit einzel-
nen Prozessen zu tun haben, allmählich nach /sys wandern. Al-
lerdings wissen die Götter, wann dieses strategische Ziel erreicht
sein wird.
278
Veränderliche Dateien – /var Hier befinden sich veränderliche Datei-
en, verteilt auf verschiedene Verzeichnisse. Beim Aufruf verschiedener
Programme generiert der Benutzer, meist ohne sich dessen im Detail
bewusst zu sein, Daten. Das geschieht etwa beim Aufruf von man , bei
dem komprimierte Hilfedaten entpackt werden (und die entpackten
Versionen eine Weile aufgehoben werden, nur falls sie gleich wieder
gebraucht werden). Ähnliches erfolgt, wenn gedruckt werden soll: Der
Druckauftrag muss zwischengespeichert werden, zum Beispiel unter
/var/spool/cups . Unter /var/log werden An- und Abmeldevorgänge so-
wie weitere Systemereignisse protokolliert (die Log-Dateien), unter
/var/spool/cron stehen Informationen für das regelmäßige zeitgesteu-
erte Starten von Kommandos, und ungelesene elektronische Post der
Benutzer steht in /var/mail .
B Nur damit Sie es mal gehört haben (es könnte in der Prüfung vor-
kommen): Das Systemprotokoll wird auf Linux-Rechnern norma-
lerweise über den »Syslog«-Dienst geregelt. Ein Programm na-
mens syslogd nimmt Nachrichten von anderen Programmen ent-
gegen und sortiert diese anhand ihrer Herkunft und Priorität (von
»Debugginghilfe« über »Fehler« bis hin zu »Katastrophe, System
schmiert gerade ab«) in Dateien in /var/log ein, wo Sie sie dann fin-
den können. Außer in Dateien kann der Syslog-Dienst seine Nach-
richten auch anderswohin schicken, etwa auf die Konsole oder
über das Netz an einen anderen Rechner, der als zentrale Manage-
ment-Station arbeitet und alle Protokollnachrichten aus Ihrem Re-
chenzentrum konsolidiert.
Dieses Verzeichnis ist eine relativ neue Erfindung, und es ist durchaus
möglich, dass es auf Ihrem System noch nicht existiert. Leider gibt es
keinen guten anderen Platz für Web-Seiten, ein FTP-Angebot oder ähn-
liches, über den man sich einig werden konnte (letzten Endes ja der
Grund für die Einführung von /srv ), so dass auf einem System ohne
/srv diese Daten irgendwo ganz anders liegen können, etwa in Unter-
verzeichnissen von /usr/local oder /var .
280
Zugriff auf CD-ROMs und Disketten – /media Dieses Verzeichnis wird
oftmals automatisch angelegt; es enthält weitere, leere Verzeichnisse,
etwa /media/cdrom und /media/floppy , die als Mountpunkt für CD-ROMs
und Floppies dienen. Je nach Ihrer Ausstattung mit Wechselmedien soll-
ten Sie sich keinen Zwang antun, neue Verzeichnisse wie /media/dvd an-
zulegen, wenn diese als Mountpoints sinnvoll und nicht von Ihrem Dis-
tributionshersteller vorgesehen sind.
B Wenn Sie mehr als ein paar hundert Benutzer haben, ist es aus
Datenschutz- und Effizienzgründen sinnvoll, die Heimatver-
zeichnisse nicht alle als unmittelbare Kinder von /home zu führen.
Sie können in so einem Fall zum Beispiel die primäre Gruppe der
Benutzer als weiteres Unterscheidungskriterium zu Rate ziehen:
/home/support/hugo
/home/entwickl/emil
281
Heimatverzeichnis des Administrators – /root Hierbei handelt es sich
um ein ganz normales Heimatverzeichnis ähnlich denen der übrigen Be-
nutzer. Der entscheidende Unterschied ist, dass es nicht im Ordner /home ,
sondern im Wurzelverzeichnis (/ ) liegt.
Der Grund dafür ist, dass das Verzeichnis /home oftmals auf einem Da-
teisystem auf einer separaten Partition oder Festplatte liegt, aber es soll
sichergestellt sein, dass root auch in seiner gewohnten Umgebung arbei-
ten kann, wenn dieses separate Dateisystem einmal nicht angesprochen
werden kann.
282
Tabelle 10.2: Zuordnung einiger Verzeichnisse zum FHS-Schema
statisch dynamisch
lokal /etc , /bin , /sbin , /lib /dev , /var/log
entfernt /usr , /opt /home , /var/mail
Übungen
C 10.2 [1] Wie viele Programme enthält Ihr System an den »gängi-
gen« Plätzen?
C 10.3 [2] Wird grep mit mehr als einem Dateinamen als Parameter
aufgerufen, gibt es vor jeder passenden Zeile den Namen der be-
treffenden Datei aus. Dies ist möglicherweise ein Problem, wenn
man grep mit einem Shell-Dateisuchmuster (etwa »*.txt «) aufruft,
da das genaue Format der grep -Ausgabe so nicht vorhersehbar ist
und Programme weiter hinten in einer Pipeline deswegen durch-
einander kommen können. Wie können Sie die Ausgabe des Da-
teinamens erzwingen, selbst wenn das Suchmuster nur zu einem
einzigen Dateinamen expandiert? (Tipp: Eine dafür nützliche »Da-
tei« steht im Verzeichnis /dev .)
283
10.4 Verzeichnisbaum und Dateisysteme
284
B Mehr über die Partitionierung und Strategien dafür finden Sie in
der Linup-Front-Schulungsunterlage Linux-Administration I.
B Das Verzeichnis muss dabei nicht einmal leer sein, allerdings kön-
nen Sie auf den ursprünglichen Verzeichnisinhalt nicht mehr zu-
greifen, wenn Sie einen Datenträger »darübergemountet« haben.
(Der Inhalt erscheint wieder, wenn Sie den Datenträger wieder
aushängen.)
B Die »Gerätedatei für das Medium« haben wir weiter oben /dev/
sda1 genannt. Dies ist eigentlich die erste Partition auf der ersten
SCSI-Festplatte im System – der Name kann völlig anders lauten,
285
je nachdem was Sie mit welcher Sorte Medium vor haben. Es ist
aber ein naheliegender Name für USB-Sticks, die vom System aus
technischen Gründen so behandelt werden, als wären sie SCSI-
Geräte.
Eine Datei namens datei auf dem Medium würde dann als /media/usb/
datei im Verzeichnisbaum in Erscheinung treten. Mit einem Kommando
wie
# umount /media/usb Achtung: kein n“
”
286
Kommandos in diesem Kapitel
287
Zusammenfassung
288
11 Dateien archivieren und
komprimieren
Lernziele
• Die Begriffe »Archivierung« und »Komprimierung« verstehen
• Mit tar umgehen können
• Dateien mit gzip und bzip2 komprimieren und entkomprimieren
können
• Dateien mit zip und unzip verarbeiten können
Vorkenntnisse
• Arbeit mit der Shell (Kapitel 4)
• Umgang mit Dateien und Verzeichnissen (Kapitel 6)
• Umgang mit Filtern (Kapitel 8)
11.1 Archivierung und Komprimierung
kompakter als
290
A*4BAA*5C*4AB*5AC
darstellen. Hierbei steht »*4B « für eine Folge von vier »B «. Dieses sim-
ple Verfahren heißt »Lauflängenkodierung« (engl. run-length encoding)
und findet sich heute noch zum Beispiel (mit Änderungen) in Faxgerä-
ten. Die »echten« Komprimierprogramme wie gzip oder bzip2 verwen-
den aufwendigere Methoden.
Während in der Windows-Welt Programme gebräuchlich sind, die
Archivierung und Komprimierung kombinieren (PKZIP, WinZIP &
Co.), werden die beiden Schritte bei Linux und Unix üblicherweise ge-
trennt. Eine gängige Vorgehensweise besteht darin, eine Menge von
Dateien zunächst mit tar zu archivieren und die Ausgabe von tar dann
zum Beispiel mit gzip zu komprimieren – PKZIP & Co. komprimieren
jede Datei einzeln und fassen die komprimierten Dateien dann zu einer
großen zusammen.
Der Vorteil dieses Ansatzes gegenüber dem von PKZIP und seinen
Verwandten besteht darin, dass eine Komprimierung über mehrere der
Originaldateien hinweg möglich ist und so höhere Komprimierungsra-
ten erzielt werden können. Genau dasselbe ist aber auch ein Nachteil:
Wenn das komprimierte Archiv beschädigt wird (etwa durch ein schad-
haftes Medium oder gekippte Bits bei der Übertragung), kann das kom-
plette Archiv ab dieser Stelle unbenutzbar werden.
B Natürlich hält Sie auch unter Linux niemand davon ab, Ihre Da-
teien erst zu komprimieren und sie dann zu archivieren. Leider ist
das nicht so bequem wie die umgekehrte Vorgehensweise.
291
Übungen
C 11.1 [1] Warum verwendet das Beispiel für die Lauflängenkodie-
rung AA statt *2A ?
C 11.2 [2] Wie würden Sie mit dem skizzierten Verfahren zur Lauf-
längenkodierung die Zeichenkette »A*2B****A « darstellen?
292
11.2 Dateien archivieren mit tar
Der Name tar leitet sich von tape archive (Bandarchiv) ab. Einzelne
Dateien werden hintereinander in eine Archivdatei gepackt und mit Zu-
satzinformationen (etwa Datum, Zugriffsrechte, Eigentümer, …) verse-
hen. Obwohl tar ursprünglich für den Einsatz mit Bandlaufwerken kon-
zipiert wurde, können tar -Archive direkt auf die unterschiedlichsten
Medien geschrieben werden. tar -Dateien sind unter anderem der Stan-
dard für die Verbreitung von Linux-Programmquellcodes und anderer
freier Software.
Das unter Linux eingesetzte GNU-tar ist gegenüber den tar -Imple-
mentierungen anderer Unix-Varianten stark erweitert. Mit GNU-tar
können beispielsweise multi-volume archives erstellt werden, die sich
über mehrere Datenträger erstrecken. Prinzipiell sind somit sogar Si-
cherungskopien auf Disketten möglich, was sich allerdings nur bei
kleineren Archiven lohnt.
294
-Z komprimiert oder dekomprimiert das Archiv mit compress (unter Li-
nux normalerweise nicht vorhanden)
-j komprimiert oder dekomprimiert das Archiv mit bzip2
Die Optionssyntax von tar ist etwas ungewöhnlich, da es (wie anders-
wo) möglich ist, mehrere Optionen hinter einem Minuszeichen zu bün-
deln, und zwar (ausgefallenerweise) auch solche wie -f , die einen Pa-
rameter nach sich ziehen. Die Parameter müssen hinter dem »Bündel«
angegeben werden und werden der Reihe nach den entsprechenden Op-
tionen im Bündel zugeordnet.
tar cvf …
Das -c steht dafür, dass das Archiv neu erzeugt werden soll, »-f ~/data.
tar « für den Namen, unter dem das Archiv angelegt werden soll. Die
Option -v ändert am Ergebnis nichts. Sie bewirkt nur, dass der Anwen-
der auf dem Bildschirm eine Übersicht über den Ablauf erhält. (Sollte
eine der zu archivierenden Dateien ein Verzeichnis sein, wird außer dem
Verzeichnis selbst auch der komplette Verzeichnisinhalt erfasst.)
295
Mit tar können auch ganze Verzeichnisse archiviert werden. Es ist
besser, dies vom übergeordneten Verzeichnis aus durchzuführen. Da-
durch werden die zu archivierenden Dateien gleich in einem Verzeich-
nis abgelegt und auch wieder als Verzeichnis extrahiert. Das folgende
Beispiel erklärt das genauer.
# cd /
# tar -cvf /tmp/[Link] /home
296
Auspacken können Sie die Daten mit der Option -x :
297
Übungen
C 11.3 [!2] Legen Sie das Inhaltsverzeichnis Ihres Heimatverzeich-
nisses in einer Datei inhalt ab. Erzeugen Sie aus dieser Datei ein
tar -Archiv. Betrachten Sie die Ursprungsdatei und das Archiv.
Was bemerken Sie?
C 11.4 [2] Legen Sie drei bis vier leere Dateien an und fügen Sie diese
dem gerade erzeugten Archiv hinzu.
C 11.5 [2] Löschen Sie die Originaldateien und entpacken Sie da-
nach den Inhalt des tar -Archivs.
und überlegen Sie, was passiert, wenn etc- [Link] (a) absolute
Pfadnamen enthält und (b) auf einen anderen Rechner übertragen
und dort ausgepackt wird.)
298
11.3 Dateien komprimieren mit gzip
B Das Programm gzip (kurz für »GNU zip «) wurde 1992 veröffent-
licht, um Problemen mit dem Programm compress aus dem Weg zu
gehen, das bei proprietären Unix-Versionen Standard war. compress
beruht auf dem Lempel-Ziv-Welch-Algorithmus (LZW), der un-
ter der Nummer 4,558,302 in den USA patentiert war. Das Pa-
tent gehörte der Firma Sperry (später Unisys) und lief am 20. Ju-
ni 2003 ab. gzip verwendet dagegen das DEFLATE-Verfahren von
Phil Katz [?], das auf einem nicht patentierten Vorläufer von LZW
namens LZ77 nebst dem Huffman-Kodierungsverfahren aufbaut
und von Patentansprüchen frei ist. Außerdem funktioniert es bes-
ser als LZW.
$ gzip [Link]
$ gzip -d [Link]
oder
300
$ gunzip [Link]
Hier wird die komprimierte Datei unter [Link].t statt unter [Link].
gz gespeichert (-S .t ) und der erreichte Kompressionsfaktor ausgegeben
(-v ):
$ gzip -vS .t [Link]
Sollen alle Dateien mit der Endung .tex in einer Datei tex- [Link]
komprimiert werden, dann sieht das so aus:
Erinnern Sie sich daran, dass tar die Originaldateien nicht löscht! Ent-
packt wird mit:
Übungen
C 11.7 [2] Komprimieren Sie das tar -Archiv aus Übung 11.3 mit ma-
ximaler Verkleinerung.
C 11.8 [!3] Sehen Sie sich den Inhalt des komprimierten Archivs an.
Stellen Sie das ursprüngliche tar -Archiv wieder her.
C 11.9 [!2] Wie gehen Sie vor, wenn Sie den gesamten Inhalt Ihres
Heimatverzeichnisses in eine mit gzip komprimierte Datei packen
möchten?
301
11.4 Dateien komprimieren mit bzip2
B Was ist mit bzip ? bzip war ein Vorläufer von bzip2 , der nach der
Blocktransformation statt der Huffman-Kodierung eine arithme-
tische Kodierung einsetzte. Da es rund um arithmetische Kodie-
rung aber jede Menge Softwarepatente gibt, nahm man von die-
sem Verfahren wieder Abstand.
Wie gzip akzeptiert bzip2 einen oder mehrere Dateinamen als Para-
meter zur Komprimierung. Die Dateien werden jeweils durch die kom-
primierte Version ersetzt, deren Name auf .bz2 endet.
Die Optionen -c und -d entsprechen den gleichnamigen Optionen
von gzip . Anders benehmen sich allerdings die »Qualitätsoptionen« -1
bis -9 : Sie bestimmen die Blockgröße, mit der bzip2 bei der Komprimie-
rung arbeitet. Der Standardwert ist -9 , während -1 keinen signifikanten
Geschwindigkeitsvorteil bietet.
303
11.5 Dateien archivieren und komprimieren
mit zip und unzip
304
Und mit der Option -@ liest zip die Namen der zu archivierenden Dateien
von der Kommandozeile:
$ find ziptest | zip -@ test
adding: ziptest/ (stored 0%)
adding: ziptest/testfile (deflated 62%)
adding: ziptest/file2 (deflated 62%)
adding: ziptest/file1 (deflated 66%)
B Wenn Sie zip mit einem existierenden ZIP-Archiv als erstem Pa-
rameter aufrufen und nichts Anderes sagen, werden die zu archi-
vierenden Dateien zusätzlich zum bisherigen Inhalt dem Archiv
hinzugefügt (namensgleiche schon im Archiv vorhandene Dateien
werden dabei überschrieben). zip benimmt sich damit anders als
die weiter oben besprochenen Programme tar und cpio . das weiter
oben besprochene Programm tar . (Nur dass Sie es wissen.) Wenn
Sie ein »sauberes« Archiv wollen, müssen Sie die Datei vorher lö-
schen.
zip kennt jede Menge Optionen, die Sie sich mit »zip -h « oder (aus-
führlicher) mit »zip -h2 « anschauen können. Auch die Manpage zip (1)
hat einiges zu sagen.
Wieder auspacken können Sie ein ZIP-Archiv mit unzip (es darf sich
dabei auch durchaus um ein ZIP-Archiv von einem Windows-Rechner
handeln). Sinnvollerweise werfen Sie zuerst mit der Option -v einen
Blick in das Archiv, um zu schauen, was drinsteht – das erspart Ihnen
möglicherweise unangenehme Überraschungen mit Unterverzeichnis-
sen (oder der Abwesenheit selbiger).
306
35147 Defl:N 12119 66% 2012-02-29 09:01 6677f57c ziptest/file1
-------- ------- --- -------
69402 25121 64% 4 files
Zum tatsächlichen Auspacken genügt es, wenn Sie unzip mit dem Na-
men des Archivs als einzigem Parameter aufrufen:
$ mv ziptest [Link]
$ unzip test
Archive: [Link]
creating: ziptest/
inflating: ziptest/testfile
inflating: ziptest/file2
inflating: ziptest/file1
Mit -d können Sie das Archiv in einem anderen Verzeichnis als dem ak-
tuellen auspacken. Dieses Verzeichnis wird, falls nötig, zuerst angelegt:
$ rm -rf ziptest
$ unzip test ziptest/file1
Archive: [Link]
inflating: ziptest/file1
$ rm -rf ziptest
$ unzip test -x ziptest/file1
Archive: [Link]
creating: ziptest/
inflating: ziptest/testfile
inflating: ziptest/file2
$ rm -rf ziptest
$ unzip test "ziptest/f*"
Archive: [Link]
inflating: ziptest/file2
inflating: ziptest/file1
$ rm -rf ziptest
$ unzip test -x "*/t*"
Archive: [Link]
creating: ziptest/
inflating: ziptest/file2
inflating: ziptest/file1
(Achten Sie auf die Anführungszeichen, die die Suchmuster vor der tat-
sächlichen Shell verstecken, damit unzip sie zu sehen bekommt.) Im Ge-
gensatz zur Shell beziehen sich die Suchmuster auf den kompletten Da-
teinamen (inklusive allfälliger »/ «).
Wie nicht anders zu erwarten, können Sie auch bei unzip eine Viel-
zahl weiterer Optionen angeben. Lassen Sie sich mit »unzip -h « oder
»unzip -hh « die programminterne Hilfe anzeigen oder lesen Sie unzip (1).
308
Übungen
C 11.10 [!2] Legen Sie in Ihrem Heimatverzeichnis einige Dateien
an und verpacken Sie sie in einem zip -Archiv. Betrachten Sie den
Inhalt des Archivs mit »unzip -v «. Entpacken Sie das Archiv wieder
im Verzeichnis /tmp .
C 11.11 [!1] Was passiert, wenn eine Datei, die Sie gerade mit unzip
auspacken wollen, schon im Dateisystem existiert?
309
Kommandos in diesem Kapitel
310
Zusammenfassung
311
12 Einstieg in die
Systemadministration
Lernziele
• Einen Überblick über die Rolle des Systemadministrators haben
• Betriebssystemkern und Prozesse verstehen
• Konzepte der Software-Paketverwaltung kennen
Vorkenntnisse
• Einfache Shell-Benutzung (Kapitel 4)
• Kenntnisse über die Linux-Dateisystemstruktur (Kapitel 10)
12.1 Systemadministration: Grundlagen
In diesem Kapitel erwähnen wir einige Themen, die weniger mit der
unmittelbaren Benutzung eines Linux-Rechners zu tun haben, sondern
zum Beispiel damit, wie Sie sich ein Bild von dem machen können, was
auf dem Rechner so alles läuft (Stichwort: »Warum ist mein Computer
so langsam??«), oder wie die Software auf dem Rechner verwaltet wird.
Es geht uns dabei eher um den groben Überblick als um Details.
313
Der Administrator auf einem Linux-System hat ein besonderes Be-
nutzerkonto, root , zur Verfügung. Dieses Konto ist von den sonst übli-
chen Rechteprüfungen (Kapitel 14) ausgenommen und darf darum zum
Beispiel auf alle Dateien im System zugreifen. Das ist etwa nötig, um
neue Software zu installieren – systemweit installierte Programmdatei-
en dürfen »normale« Benutzer zwar lesen und starten, aber nicht än-
dern, damit Manipulationen zuungunsten anderer Anwender ausge-
schlossen sind. Auch beispielsweise zur Erstellung von Sicherheitsko-
pien muss der Administrator die Dateien aller Benutzer lesen können
(und zum Wiedereinspielen sogar schreiben).
# rm -rf /
A Wenn Sie als root alle Dateien im System lesen können, könnten
Sie natürlich der Versuchung anheimfallen, auf regelmäßiger Ba-
sis zum Beispiel die E-Mail Ihres Chefs oder Ihres Ehegesponses
zu inspizieren. TUN SIE SOWAS NICHT. Es gehört sich nicht (je-
denfalls im Falle Ihres Ehegesponses) und/oder ist verboten (im
Falle Ihres Chefs) und kann Ihnen jede Menge Schwierigkeiten
einbringen, die Ihnen den Spaß an Linux und Systemadministrati-
on, ganz zu schweigen vom Haus- oder Betriebsfrieden, dauerhaft
verderben können. Es spricht nichts dagegen, im Einzelfall und in
Absprache mit den Betroffenen zur Fehlersuche oder -behebung
314
einen kurzen Blick in ein Postfach zu tun – aber lassen Sie es nicht
zur Gewohnheit werden.
Sie sollten es tunlichst vermeiden, sich direkt (am Ende gar auf der
grafischen Oberfläche) als root anzumelden. Verwenden Sie statt des-
sen das Programm su , um in einer Terminalsitzung, die Sie als normaler
Benutzer gestartet haben, eine Shell zu bekommen, die als root läuft:
$ /bin/su -
Passwort: geheim Kennwort für root
# _
Wenn Sie die root -Shell beenden (mit exit oder Strg + d ), landen Sie
wieder in der Shell, in der Sie ursprünglich su aufgerufen haben.
Manche Distributionen versuchen, auf ein separates root -Konto zu
verzichten. Ubuntu zum Beispiel erlaubt dem bei der Installation ange-
legten Benutzer, einzelne Kommandos mit root -Rechten auszuführen,
indem man ein sudo davorstellt, wie in
(dieses Privileg kann der Benutzer bei Bedarf auch anderen Benutzern
einräumen). Für größere Bauarbeiten ist mit »sudo -i « eine Shell zu be-
kommen, die mit Administratorrechten ausgestattet ist.
315
Übungen
C 12.1 [2] Probieren Sie su aus. Warum rufen wir das Programm im
Beispiel über den vollen Pfadnamen auf?
C 12.2 [2] Für su müssen Sie das root -Kennwort wissen. sudo fragt Sie
normalerweise nach Ihrem eigenen Kennwort. Was ist besser?
316
12.2 Die Systemkonfiguration
318
von »Schablonen« (templates) für Konfigurationsdateien, wo bei
der Verteilung die für den Zielrechner passenden Details einge-
setzt werden – damit wird eine manuelle Konfiguration einzelner
Rechner (das »Turnschuhnetz«) völlig überflüssig. Auch das er-
leichtert die Verwaltung großer Systeme, ist aber auch für kleine
Installationen eine definitive Erleichterung.
Übungen
C 12.3 [3] Stöbern Sie ein bisschen in /etc herum. Viele der Dateien
dort haben Handbucheinträge – versuchen Sie mal etwas wie »man
fstab «. Gibt es Dateien in /etc , die Sie als normaler Benutzer nicht
lesen können, und warum?
319
12.3 Prozesse
B Der erste Prozess mit der PID 1 wird beim Systemstart vom
Betriebssystemkern angelegt. Nach Konvention ist das ein Pro-
gramm namens /sbin/init , und man spricht deshalb auch vom
»Init-Prozess«. Der Init-Prozess ist verantwortlich dafür, das Sys-
tem kontrolliert hochzufahren und zum Beispiel weitere Prozesse
für Hintergrunddienste zu starten.
320
ps Informationen über die Prozesse im System können Sie mit dem
Kommando »ps « erhalten. Im einfachsten Fall zeigt ps Ihnen alle Pro-
zesse, die auf Ihrem aktuellen Terminal (oder, heutzutage, im aktuellen
Terminal-Fenster auf Ihrem Grafikbildschirm) laufen:
$ ps
PID TTY STAT TIME COMMAND
997 pts/8 S 0:00 -bash
1005 pts/8 R 0:00 ps
$ _
Die Spalten PID und COMMAND sprechen dabei für sich. TTY gibt den Namen
des Terminals an (»pts/ irgendwas« steht meist für ein Terminalfenster),
TIME die Rechenzeit, die die Prozesse jeweils schon verbraucht haben,
und STAT den »Prozesszustand«.
B Ein Prozess ist bei Linux immer in einem von einer Reihe von Zu-
ständen, namentlich
Lauffähig (runnable, R ) Der Prozess kann Rechenzeit zugeteilt
bekommen.
Schlafend (sleeping, S ) Der Prozess wartet auf ein Ereignis, typi-
scherweise Ein- oder Ausgabe – einen Tastendruck oder Da-
ten von der Platte.
Im Tiefschlaf (uninterruptible sleep, D ) Der Prozess wartet auf
ein Ereignis und kann dabei nicht unterbrochen werden. Pro-
zesse sollten nicht zu lange in diesem Zustand verbleiben,
weil Sie sie sonst nur durch einen Systemneustart loswerden.
Wenn das passiert, deutet das auf einen Fehler hin.
Gestoppt (stopped, T ) Der Prozess wurde von seinem Eigentü-
mer oder einem Administrator zeitweilig angehalten, kann
aber später weiterlaufen.
Zombie (Z ) Der Prozess hat sich eigentlich schon beendet, aber
sein Rückgabewert wurde vom Elterprozess noch nicht ab-
321
geholt, so dass der Prozess nicht richtig »sterben« kann, son-
dern als Untoter im System verbleibt. Zombies sind im Grun-
de kein Problem, da sie außer einem Platz in der Prozessta-
belle keine Ressourcen belegen. Sollte Ihr System von einer
Horde Zombies befallen sein, ist das ein Indiz für einen Feh-
ler in dem Programm, das die Prozesse ursprünglich erzeugt
hat – wenn Sie jenes Programm beenden, verschwinden auch
die Zombies.
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 init [2]
B VSZ und RSS sind nicht dasselbe, weil Teile des Prozesses auf Platte
ausgelagert worden sein könnten. Der auf einem Linux-System
322
verfügbare Arbeitsspeicher läßt sich ja vergrößern, indem man
Auslagerungsspeicher (swap space) auf einer Plattenpartition oder
Datei vorsieht.
free Mit dem Kommando »free « erhalten Sie Auskunft über den Spei-
cher im System:
$ free
total used free shared buffers cached
Mem: 3921956 1932696 1989260 0 84964 694640
-/+ buffers/cache: 1153092 2768864
Swap: 8388604 0 8388604
Die »Mem: «-Zeile verrät Ihnen, dass dieser Rechner an die 4 GiB RAM
hat (unter »total «; für den Betriebssystemkern geht etwas Speicher ab,
der hier nicht auftaucht), der knapp zur Hälfte belegt ist (betrachten
Sie »used « und »free «). Gut 700 MiB verwendet das Betriebssystem zum
Speichern von Festplatten-Daten (die Spalten »buffers « und »cached «),
und in der zweiten Zeile sehen Sie, wie sich das auf den freien und be-
legten Speicher auswirkt. Die dritte Zeile (»Swap: «) beschreibt die Aus-
lastung des Auslagerungsspeichers (auf diesem Rechner 8 GiB).
B Auch free unterstützt eine Reihe von Optionen, etwa um das Aus-
gabeformat freundlicher zu machen:
324
top Das Kommando »top « schließlich ist eine Art Kombination aus
ps und free mit fortlaufender Aktualisierung. Es zeigt eine bildschirm-
füllende Darstellung von System- und Prozesskenndaten an; Abbil-
dung 12.1 zeigt ein Beispiel:
• Im oberen Teil der Ausgabe sehen Sie in der ersten Zeile neben der
aktuellen Uhrzeit die uptime, also die seit dem Systemstart vergan-
gene Zeit (hier nicht ganz drei Stunden) und die Anzahl der ange-
meldeten Benutzer (die Neun hier ist nicht ganz wörtlich zu neh-
men; jede Sitzung in einem Terminalfenster gilt als »Benutzer«).
Rechts auf der ersten Zeile stehen drei Zahlen, die sogenannten
load averages, die die Systemlast charakterisieren.
B Sind die load averages dauerhaft niedriger als die Anzahl der
Prozessorkerne in Ihrem System, heißt das, dass Sie unnö-
tig Geld für einen teuren Prozessor ausgegeben haben. Auf
einem Acht-Kern-System zum Beispiel sind Werte um Acht
(die traditionell einem Systemadministrator kalte Schauer
über den Rücken jagen würden) absolut unbedenklich; Wer-
te, die über lange Zeiträume viel kleiner sind als Acht, sind
traurig.
• Die zweite Zeile gibt die Anzahl der Prozesse an und wie diese
sich auf die Prozesszustände verteilen.
325
• Die dritte Zeile beschreibt in Prozent, womit die CPUs sich be-
schäftigen: »us « ist die Ausführung von Code außerhalb und »sy «
die von Code innerhalb des Betriebssystemkerns. »ni « ist Code au-
ßerhalb des Betriebssystemkerns, der vom Benutzer absichtlich in
der Priorität gesenkt wurde, und »id « ist Untätigkeit. »wa « ist War-
ten auf Ein/Ausgabe, und die anderen drei Spalten sind nicht so
interessant.
• Die beiden folgenden Zeilen entsprechen im Wesentlichen der
Ausgabe von free .
• Der untere Teil des Bildschirms ist eine Prozessliste ähnlich der
von »ps l «. Sie wird (wie der obere Teil) in Abständen von einigen
Sekunden aktualisiert und ist standardmäßig nach dem Anteil an
CPU-Zeit sortiert, den die Prozesse in der Liste jeweils verbrau-
chen (der Prozess, mit dem das System die meiste Zeit verbringt,
führt die Liste an).
B Wenn Sie die Taste m drücken, wird die Liste nach dem
Speicherverbrauch sortiert – der fetteste Prozess steht vorne.
Mit p kommen Sie zur CPU-Zeit-Liste zurück.
Übungen
C 12.4 [1] Mit der ps -Option ax können Sie sich alle Prozesse im
System anzeigen lassen. Betrachten Sie die Liste. Welche Prozesse
können Sie einordnen?
326
anderen Sitzung »ps ax « auf und suchen Sie den Prozess in der
Ausgabe. (Tipp: grep ist Ihr Freund.)
327
12.4 Paketverwaltung
B Hier ist zum Beispiel die Paketaufteilung für die rsvg -Bibliothek
(sie kümmert sich um Grafiken im SVG-Format), à la Debian
GNU/Linux 6.0 (»Squeeze«):
B Wie gut das im Detail klappt, hängt auch (wieder mal) von Ih-
rer Distribution ab. Die Sache kann nämlich komplizierter sein,
als sie zuerst scheint: Die neue Version eines Pakets könnte zum
Beispiel verlangen, dass auch eine Bibliothek (die in ihrem eige-
nen Paket steht) in einer neueren Version installiert ist, und das
kann zu Problemen führen, wenn ein anderes installiertes Pro-
gramm zwingend die alte Version der Bibliothek benötigt. Manch-
mal kann es also sein, dass ein Paket gar nicht aktualisiert werden
kann, ohne dass sich anderswo im System etwas gravierend än-
dern müßte. Gute Paketverwaltungssysteme erkennen solche Si-
tuationen und warnen Sie als Administrator und/oder geben Ih-
nen Eingriffsmöglichkeiten.
329
seinen Ablegern sowie die RPM-Paketverwaltung von Red Hat, SUSE &
Co. Beide lösen im Grunde dieselbe Sorte Problem, unterscheiden sich
aber im Detail, etwa in den Kommandos, die zur Paketverwaltung benö-
tigt werden. Auf einem RPM-basierten System wie RHEL, Fedora oder
openSUSE können Sie sich die Liste aller installierten Pakete zum Bei-
spiel mit dem Kommando
nötig ist.
Programme wie dpkg und rpm bilden heute in der Regel das »Fun-
dament« der Paketverwaltung. Als Administrator verwenden Sie lieber
komfortablere Werkzeuge, die auf den Basisprogrammen aufbauen und
zum Beispiel den bequemen Zugriff auf die Paket-Repositories zulassen
und Abhängigkeiten zwischen Paketen automatisch auflösen. Verbrei-
tet sind in der Debian-Welt zum Beispiel »Aptitude« und »Synaptic«,
während auf der RPM-Seite Red Hat auf ein Programm namens YUM
und SUSE auf eines namens »Zypper« setzt (wobei die SUSE Paketver-
waltung auch in das allgemeine Administrationswerkzeug YaST inte-
griert hat).
Übungen
C 12.7 [2] Wieviele Pakete sind auf Ihrem System installiert? Ver-
wenden Sie den im Text gezeigten rpm - bzw. dpkg -Aufruf und zäh-
len Sie die Zeilen der Ausgabe. (Vorsicht: »dpkg --list « zeigt Ih-
nen auch Pakete, die mal installiert waren, aber entfernt oder von
neueren Versionen überlagert wurden. Zählen Sie also nur dieje-
nigen Zeilen in der Ausgabe, die mit »ii « anfangen.)
331
Kommandos in diesem Kapitel
332
Zusammenfassung
333
13 Benutzerverwaltung
Lernziele
• Das Benutzer- und Gruppenkonzept von Linux verstehen
• Die Struktur und Speicherung von Benutzer- und Gruppendaten
bei Linux kennen
• Die Kommandos zur Verwaltung von Benutzer- und Gruppenda-
ten anwenden können
Vorkenntnisse
• Kenntnisse über den Umgang mit Konfigurationsdateien
13.1 Grundlagen
335
aus diesem Grund eine separate Benutzeridentität (root ) für den Sys-
temadministrator, die es möglich macht, Informationen wie etwa die
Benutzerkennwörter vor »gewöhnlichen« Benutzern geheim zu halten.
Die Plage älterer Windows-Systeme – Programme, die Sie per E-Mail
oder durch ungeschicktes Surfen erhalten und die dann im System al-
le Arten von Schindluder treiben – kann Sie unter Linux nicht ereilen,
da alles, was Sie als gewöhnlicher Benutzer starten können, nicht in der
Position ist, systemweit Schindluder zu treiben.
A Ganz korrekt ist das leider nicht: Hin und wieder werden Fehler in
Linux bekannt, über die ein »normaler Benutzer« theoretisch Din-
ge tun kann, die sonst dem Administrator vorbehalten sind. Diese
Sorte Fehler ist extrem ärgerlich und wird in der Regel sehr zeit-
nah nach dem Finden behoben, aber es kann natürlich sein, dass
so ein Fehler einige Zeit lang unerkannt im System geschlummert
hat. Sie sollten daher bei Linux (wie bei allen Betriebssystemen)
anstreben, von kritischen Systembestandteilen wie dem System-
kern immer die neueste Version laufen zu lassen, die Ihr Distribu-
tor unterstützt.
337
Benutzer haben gleichberechtigten Zugriff auf alle dieser UID ge-
hörenden Dateien, aber jeder kann sein eigenes Kennwort haben.
Sie sollten das aber nicht oder nur mit großer Vorsicht ausnutzen.
338
Verzeichnisse einrichten, die für bestimmte Gruppen gedacht sind und
entsprechende Rechte haben.
Auch Gruppen werden betriebssystemintern durch numerische Ken-
nungen (engl. group IDs, kurz GIDs) identifiziert.
$ id
uid=1000(hugo) gid=1000(hugo) groups=24(cdrom),29(audio),44(video),
2 Die Ausnahme besteht darin, dass der Eigentümer eines Verzeichnisses verfügen
kann, dass neue Dateien und Verzeichnisse in diesem Verzeichnis der Gruppe zugeordnet
werden, der auch das Verzeichnis selbst zugeordnet ist. Aber das nur der Vollständigkeit
halber.
339
1000(hugo)
$ id root
uid=0(root) gid=0(root) groups=0(root)
B Mit den Optionen -u , -g und -G läßt id sich überreden, nur die UID
des Kontos, die GID der primären Gruppe oder die GIDs der se-
kundären Gruppe auszugeben. (Diese Optionen lassen sich nicht
kombinieren). Mit der zusätzlichen Option -n gibt es Namen statt
Zahlen:
$ id -G
1000 24 29 44
$ id -Gn
hugo cdrom audio video
Mit dem Kommando last können Sie herausfinden, wer sich wann
auf Ihrem Rechner angemeldet hat (und im Falle von Anmeldungen
über das Netzwerk, von wo aus):
$ last
hugo pts/1 [Link].c Wed Feb 29 10:51 still logged in
oberboss pts/0 [Link] Wed Feb 29 08:44 still logged in
hugo pts/2 [Link].c Wed Feb 29 01:17 - 08:44 (07:27)
susi pts/0 :0 Tue Feb 28 17:28 - 18:11 (00:43)
reboot system boot 3.2.0-1-amd64 Fri Feb 3 17:43 - 13:25 (4+19:42)
Die dritte Spalte gibt bei Sitzungen über das Netz den Rechnernamen
des ssh -Clients an. »:0 « steht für den grafischen Bildschirm (genauge-
nommen den ersten X-Server – es könnte mehrere geben).
340
B Beachten Sie auch den reboot -Eintrag, der angibt, dass der Rech-
ner neu gestartet wurde. In der dritten Spalte steht hier die Versi-
onsnummer des Linux-Betriebssystemkerns, so wie »uname -r « ihn
liefert.
B Es könnte Sie (mit Recht!) stören, dass diese Sorte doch etwas sen-
sitive Information anscheinend beliebigen Systembenutzern ohne
Weiteres zugänglich gemacht wird. Wenn Sie als Administrator
die Privatsphäre Ihrer Benutzer etwas besser schützen möchten,
als Ihre Linux-Distribution das von sich aus macht, können Sie mit
dem Kommando
das allgemeine Leserecht für die Datei entfernen, in der last die
verräterischen Daten findet. Benutzer, die keine Administratorpri-
vilegien haben, sehen dann nur noch etwas wie
$ last
last: /var/log/wtmp: Permission denied
341
13.1.3 »Natürliche Personen« und Pseudobenutzer
Außer für »natürliche Personen« – die menschlichen Benutzer des Sys-
tems – wird das Benutzer- und Gruppenkonzept auch verwendet, um
die Zugriffsrechte auf gewisse Bereiche des Systems zu strukturieren.
Das bedeutet, dass es neben den persönlichen Konten der »echten« Be-
nutzer wie Ihnen weitere Konten auf dem System gibt, die nicht tat-
sächlichen menschlichen Benutzern zugeordnet, sondern systemintern
für administrative Funktionen zuständig sind. Hier werden funktionale
Rollen definiert, denen eigene Konten und Gruppen zugeordnet wer-
den.
Nach der Installation von Linux finden Sie in den Dateien /etc/passwd
und /etc/group eine ganze Reihe solcher Pseudobenutzer. Die wichtigste
Rolle hat hier der uns schon bekannte Benutzer root mit der gleichnami-
gen Gruppe. UID und GID von root sind 0 (Null).
B Die Sonderrechte von root sind an die UID 0 gekoppelt; die GID 0
hat keine besondere Bedeutung über die normalen Zugriffsrechte
hinaus.
342
Übungen
C 13.1 [1] Wodurch unterscheidet der Betriebssystemkern verschie-
dene Benutzer und Gruppen?
C 13.2 [2] Was passiert, wenn eine UID zweimal mit unterschiedli-
chem Namen vergeben wird? Ist das erlaubt?
343
13.2 Benutzer- und Gruppendaten
344
vor allem wenn der numerische Benutzername nicht mit der
numerischen UID des Kontos übereinstimmt. Programme
wie »ls -l « zeigen nämlich die UID an, wenn es für die be-
treffende UID keinen Eintrag in /etc/passwd gibt, und es ist
nicht unbedingt einfach, UIDs in der ls -Ausgabe von rein
numerischen Benutzernamen zu unterscheiden.
346
B Die sekundären Gruppen (soweit vorhanden) des Benutzers
werden durch entsprechende Einträge in der Datei /etc/group
festgelegt.
⟨GECOS⟩ Dies ist das Kommentarfeld, auch GECOS-Feld genannt.
Einige der hier gezeigten Felder können leer bleiben. Absolut notwen-
dig sind nur Benutzername, UID, GID und Heimatverzeichnis. Für die
meisten Benutzerkonten werden alle diese Felder ausgefüllt sein, aber
Pseudobenutzer benutzen eventuell nur einen Teil der Felder.
Die Heimatverzeichnisse stehen üblicherweise unter /home und hei-
ßen so wie der Benutzername des Besitzers. In der Regel ist das eine
ganz nützliche Übereinkunft, die dazu beiträgt, dass das Heimatver-
zeichnis eines bestimmten Benutzers leicht zu finden ist. Theoretisch
kann ein Heimatverzeichnis aber an beliebiger Stelle im System stehen,
und der Name ist auch beliebig.
B Bei großen Systemen ist es gängig, zwischen /home und dem Benut-
zernamen-Verzeichnis noch eine oder mehrere Zwischenebenen
einzuführen, etwa
348
/home/vorst/heinz Heinz aus dem Vorstand
Beachten Sie, dass Sie als Administrator die Datei /etc/passwd nicht
unbedingt direkt von Hand editieren müssen. Es gibt eine Reihe von
Programmen, die Ihnen bei der Einrichtung und Pflege der Benutzer-
konten helfen.
349
tei lesen dürfen. Wenn Sie sich die Datei als normaler Benutzer anzeigen
lassen wollen, erhalten Sie eine Fehlermeldung.
B Die Verwendung von /etc/shadow ist nicht Pflicht, aber sehr drin-
gend empfohlen. Allerdings kann es Systemkonfigurationen ge-
ben, bei denen die durch Schattenkennwörter erreichte Sicherheit
wieder zunichte gemacht wird, etwa wenn Benutzerdaten über
NIS an andere Rechner exportiert werden (vor allem in heteroge-
nen Unix-Umgebungen).
Für jeden Benutzer ist in dieser Datei wieder genau eine Zeile eingetra-
gen, das Format ist
Zum Beispiel:
root:gaY2L19jxzHj5:10816:0:10000::::
daemon:*:8902:0:10000::::
hugo:GodY6c5pZk1xs:10816:0:10000::::
Frist Die Anzahl von Tagen ausgehend vom Ablauf der ⟨Max⟩-Frist,
nach der das Konto automatisch gesperrt wird, wenn der Be-
nutzer nicht vorher sein Kennwort ändert. (In der Zeit zwischen
dem Ende der ⟨Max⟩-Frist und dem Ende dieser Frist kann der
Benutzer sich anmelden, muss aber sofort sein Kennwort ändern.)
Sperre Das Datum, an dem das Konto definitiv gesperrt wird, wieder in
Tagen seit dem 1. Januar 1970.
Kurz noch ein paar Anmerkungen zum Thema »Verschlüsselung von
Kennwörtern«. Man könnte auf den Gedanken kommen, dass die Kenn-
wörter, wenn sie verschlüsselt sind, auch wieder entschlüsselt werden
können. Einem cleveren Cracker, dem die Datei /etc/shadow in die Hän-
de fällt, würden so sämtliche Benutzerkonten des Systems offen stehen.
Allerdings ist das in Wirklichkeit nicht so, denn die »Verschlüsselung«
der Kennwörter ist eine Einbahnstraße: Es ist nicht möglich, aus der
»verschlüsselten« Darstellung eines Linux-Kennworts die unverschlüs-
selte zurückzugewinnen, da das verwendete Verfahren das wirkungs-
voll verhindert. Die einzige Möglichkeit, die »Verschlüsselung« zu »kna-
cken«, besteht darin, potenzielle Kennwörter zur Probe zu verschlüsseln
und zu schauen, ob dasselbe herauskommt wie das, was in /etc/shadow
steht.
351
B Nehmen wir mal an, Sie wählen die Zeichen Ihres Kennworts aus
den 95 sichtbaren Zeichen des ASCII (es wird zwischen Groß-
und Kleinschreibung unterschieden). Das bedeutet, es gibt 95 ver-
schiedene einstellige Kennwörter, 952 = 9025 zweistellige und so
weiter. Bei acht Stellen sind Sie schon bei 6,6 Billiarden (6, 6 ⋅ 1015 )
Möglichkeiten. Angenommen, Sie könnten 250.000 Kennwörter in
der Sekunde zur Probe verschlüsseln (auf heutiger Hardware ab-
solut nicht unrealistisch). Dann müßten Sie rund 841 Jahre einkal-
kulieren, um alle Möglichkeiten durchzuprobieren.
352
darin, »Zufallstreffer« zu vermeiden, die sich ergeben, wenn Be-
nutzer 𝑋 aus irgendwelchen Gründen einen Blick auf den Inhalt
von /etc/shadow wirft und feststellt, dass sein verschlüsseltes Kenn-
wort genauso aussieht wie das von Benutzer 𝑌 (so dass er sich mit
seinem Klartextkennwort auch als Benutzer 𝑌 anmelden kann). Als
angenehmer Nebeneffekt wird der Plattenplatz für das Cracker-
Wörterbuch aus dem vorigen Absatz um den Faktor 4096 in die
Höhe getrieben.
354
⟨Gruppenname⟩: ⟨Kennwort⟩: ⟨GID⟩: ⟨Mitglieder⟩
root:x:0:root
bin:x:1:root,daemon
users:x:100:
projekt1:x:101:hugo,susi
projekt2:x:102:emil
Die Einträge für die Gruppen root und bin sind Einträge für administra-
tive Gruppen, ähnlich den imaginären Benutzerkonten auf dem System.
Gruppen wie diesen sind viele Dateien auf dem System zugeordnet. Die
anderen Gruppen enthalten Benutzerkonten.
355
Ähnlich wie bei den UIDs werden auch die GIDs von einer bestimm-
ten Zahl an, typischerweise 100, hochgezählt. Für einen gültigen Eintrag
müssen mindestens das erste und dritte Feld (Gruppenname und GID)
vorhanden sein. Durch so einen Eintrag wird einer Gruppennummer,
die in der Kennwortdatei einem Benutzer zugeordnet wurde, ein Grup-
penname gegeben.
Die Felder für Kennwort und/oder Benutzerliste müssen nur für sol-
che Gruppen ausgefüllt werden, die Benutzern als sekundäre Gruppe
zugeordnet sind. Die in der Mitgliederliste eingetragenen Benutzer wer-
den nicht nach einem Kennwort gefragt, wenn sie mit dem Komman-
do newgrp die aktuelle GID wechseln wollen. Wenn im zweiten Feld des
Gruppeneintrags ein verschlüsseltes Kennwort eingetragen ist, können
Anwender ohne Eintrag in der Mitgliederliste sich mit dem Kennwort
legitimieren, um die Gruppenzugehörigkeit anzunehmen.
B Wenn Sie sichergehen wollen, dann sorgen Sie dafür, dass in allen
Gruppenkennwort-Feldern ein Stern (»* «) steht.
356
mationen zur Gruppe festgehalten, beispielsweise die Namen der zum
Ein- und Austragen von Mitgliedern autorisierten Gruppenverwalter.
Übungen
C 13.5 [1] Welchen Wert finden Sie in der zweiten Spalte der Datei
/etc/passwd ? Warum finden Sie dort diesen Wert?
C 13.6 [2] Schalten Sie auf eine Textkonsole um (etwa mit Alt + F1
) und versuchen Sie sich anzumelden, indem Sie Ihren Benutzer-
namen in reiner Großschreibung eingeben. Was passiert?
357
13.3 Benutzerkonten und
Gruppeninformationen verwalten
zum Beispiel wird für den Benutzer Hugo Schulz ein Benutzerkonto na-
mens hugo angelegt und der Gruppe entw zugeordnet. Sein Heimatver-
zeichnis wird als /home/hugo angelegt und die Dateien aus /etc/[Link]
als Grundausstattung dort hineinkopiert.
# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
Die letzten beiden Werte in der Liste lassen sich nicht ändern.
360
B useradd ist ein relativ niedrig ansetzendes Werkzeug. Im »wirkli-
chen Leben« werden Sie als erfahrener Administrator neue Be-
nutzerkonten wahrscheinlich nicht mit useradd , sondern über ein
Shellskript anlegen, das Ihre örtlichen Richtlinien mit berücksich-
tigt (damit Sie nicht immer selber daran denken müssen). Dieses
Shellskript müssen Sie leider selbst erstellen – jedenfalls solange
Sie nicht Debian GNU/Linux oder eine davon abgeleitete Distri-
bution benutzen (siehe unten).
Vorsicht: Zwar bringt jede ernstzunehmende Linux-Distribution ein
Programm namens useradd mit, die Implementierungen unterscheiden
sich jedoch im Detail.
Die Red-Hat-Distributionen enthalten eine ziemlich »gewöhnli-
che« Version von useradd ohne besondere Extras, die die oben be-
sprochenen Eigenschaften mitbringt.
Das useradd der SUSE-Distributionen ist darauf eingerichtet, Be-
nutzer wahlweise in einem LDAP-Verzeichnis statt in /etc/passwd
anzulegen. (Aus diesem Grund wird die Option -D anderweitig
verwendet, so dass sie nicht wie bei den anderen Distributionen
zum Abfragen oder Setzen von Standardwerten zur Verfügung
steht.) Die Details hierzu würden hier etwas zu weit führen.
Bei Debian GNU/Linux und Ubuntu existiert useradd zwar, die of-
fizielle Methode zum Anlegen neuer Benutzerkonten ist jedoch
ein Programm namens adduser (zum Glück gar nicht verwirrend).
Der Vorteil von adduser besteht darin, dass es die Spielregeln von
Debian GNU/Linux einhält und es außerdem ermöglicht, beim
Anlegen von Benutzerkonten auch noch beliebige andere Aktio-
nen für das neue Konto auszuführen. Zum Beispiel könnte au-
tomatisch ein Verzeichnis im Dokumentbaum eines Web-Servers
angelegt werden, in dem der neue Benutzer (und nur dieser) Da-
teien veröffentlichen kann, oder der Benutzer könnte automatisch
zum Zugriff auf einen Datenbankserver autorisiert werden. Die
Details stehen in adduser (8) und [Link] (5).
361
Nach dem Anlegen mit useradd ist das neue Konto noch nicht zugäng-
lich; der Systemverwalter muss erst noch ein Kennwort eintragen. Das
erklären wir als Nächstes.
# passwd hugo
nach einem neuen Kennwort für den Benutzer hugo (Sie müssen es zwei-
mal angeben, da keine Kontrollausgabe erfolgt).
Das passwd -Kommando steht auch normalen Benutzern zur Verfü-
gung, damit sie ihr eigenes Kennwort ändern können (das Ändern der
Kennwörter anderer Benutzer ist root vorbehalten):
$ passwd
Ändern des Passworts für hugo
(aktuelles) UNIX-Passwort: geheim123
Geben Sie ein neues UNIX-Passwort ein: 321mieheg
Geben Sie das neue UNIX-Passwort erneut ein: 321mieheg
passwd: Passwort erfolgreich geändert
Normale Benutzer müssen ihr eigenes Kennwort erst einmal richtig an-
geben, bevor sie ein neues setzen dürfen. Das soll Spaßvögeln das Le-
ben schwer machen, die an Ihrem Computer herumspielen, wenn Sie
mal ganz dringend raus mussten und die Bildschirmsperre nicht einge-
schaltet haben.
passwd dient nebenbei auch noch zur Verwaltung verschiedener Ein-
stellungen in /etc/shadow . Sie können sich zum Beispiel den »Kennwort-
status« eines Benutzers anschauen, indem Sie den Befehl passwd mit der
Option -S aufrufen:
362
# passwd -S franz
franz LK 10/15/99 0 99999 7 0
Das erste Feld ist dabei (wieder mal) der Benutzername, dann folgt der
Kennwortstatus: »PS « oder »P « heißen hier, dass ein Kennwort gesetzt
ist; »LK « oder »L « stehen für ein gesperrtes Konto, und »NP « bezeichnet
ein Konto ganz ohne Kennwort. Die übrigen Felder sind respektive das
Datum der letzten Kennwortänderung, die Mindest- und Höchstfrist in
Tagen für das Ändern des Kennworts, die Warnfrist vor dem Ablauf und
die »Gnadenfrist« für die komplette Sperrung des Benutzerkontos nach
dem Ablauf des Kennworts. (Siehe hierzu auch Abschnitt 13.2.2.)
Ändern können Sie einige dieser Einstellungen über Optionen von
passwd . Hier sind ein paar Beispiele:
363
Um die übrigen Einstellungen in /etc/shadow zu ändern, müssen Sie
das Kommando chage heranziehen:
(chage kann alle Parameter ändern, die passwd ändern kann, und dann
noch ein paar.)
B Wenn Sie sich die Optionen nicht merken können, dann rufen
Sie chage einfach nur mit dem Namen eines Benutzerkontos auf.
Das Programm präsentiert Ihnen dann nacheinander die aktuel-
len Werte zum Bestätigen oder Ändern.
B Sollten Sie das root -Kennwort vergessen haben und gerade nicht
als root angemeldet sein, bleibt Ihnen noch die Möglichkeit, Li-
nux in eine Shell zu booten oder von einer Rettungsdiskette oder
-CD zu booten. Anschließend können Sie mit einem Editor das
⟨Kennwort⟩-Feld des root -Eintrags in /etc/passwd löschen.
364
Übungen
C 13.7 [3] Ändern Sie das Kennwort von Benutzer hugo . Wie ändert
sich die Datei /etc/shadow ? Fragen Sie den Status zu diesem Kenn-
wort ab.
C 13.8 [!2] Der Benutzer trottel hat sein Kennwort vergessen. Wie
können Sie ihm helfen?
C 13.9 [!3] Stellen Sie die Bedingungen für das Kennwort von Benut-
zer hugo so ein, dass er sein Kennwort frühestens nach einer Woche
und spätestens nach zwei Wochen ändern muss. Eine Warnung
soll der Benutzer zwei Tage vor Ablauf dieser Zweiwochenfrist
erhalten. Kontrollieren Sie anschließend die Einstellungen!
Die Option -r sorgt dafür, dass das Heimatverzeichnis des Benutzers mit
Inhalt sowie seine Mailbox in /var/mail entfernt wird, andere Dateien des
Benutzers – etwa crontab -Dateien usw. – müssen von Hand gelöscht wer-
den. Eine schnelle Methode, die Dateien eines bestimmten Benutzers zu
finden und zu löschen, ist der Befehl
365
Ohne die Option -r werden nur die Benutzerdaten aus der Benutzerda-
tenbank gelöscht; das Heimatverzeichnis bleibt stehen.
366
13.3.5 Die Benutzerdatenbank direkt ändern — vipw
Das Kommando vipw ruft einen Editor (vi oder einen anderen) auf, um
die Datei /etc/passwd zu ändern. Gleichzeitig wird die jeweilige Datei ge-
sperrt, so dass während dieser Änderung niemand z. B. mit passwd eben-
falls eine Änderung vornehmen kann (die dann verloren gehen würde).
Mit der Option -s wird /etc/shadow bearbeitet.
Übungen
C 13.10 [!2] Legen Sie den Benutzer test an. Wechseln Sie auf das
Benutzerkonto test und legen Sie mit touch einige Dateien an, ei-
nige davon in einem anderen Ordner als dem Heimatverzeichnis
(etwa /tmp ). Wechseln Sie wieder zurück zu root und ändern Sie
die UID von test . Was sehen Sie, wenn Sie mit ls die Dateien von
Benutzer test auflisten?
C 13.11 [!2] Legen Sie einen Benutzer test1 über das entsprechende
grafische Tool an, einen anderen, test2 , mit Hilfe des Kommandos
useradd und einen weiteren, test3 , von Hand. Betrachten Sie die
Konfigurationsdateien. Können Sie problemlos unter allen drei
Konten arbeiten? Legen Sie unter jedem Konto eine Datei an.
C 13.12 [!2] Löschen Sie das Konto von Benutzer test2 und stellen
Sie sicher, dass es auf dem System keine Dateien mehr gibt, die
dem Benutzer gehören!
C 13.13 [2] Ändern Sie die UID des Benutzers test1 . Was müssen Sie
außerdem tun?
Die Option »-g ⟨GID⟩« ändert die GID der angegebenen Gruppe. Nicht
aufgelöste Gruppenzugehörigkeiten von Dateien müssen danach ma-
nuell angepasst werden. Die Option »-n ⟨Name⟩« weist der angegebenen
368
Gruppe einen neuen Gruppennamen zu. Die GID bleibt dabei unverän-
dert, auch manuelle Anpassungen sind nicht erforderlich.
Auch zum Entfernen der Gruppeneinträge existiert ein Hilfspro-
gramm. Dieses heißt konsequenterweise groupdel :
groupdel ⟨Gruppenname⟩
Übungen
C 13.15 [2] Wozu werden Gruppen gebraucht? Geben Sie mögliche
Beispiele an!
C 13.16 [1] Können Sie ein Verzeichnis anlegen, auf das alle Mitglie-
der einer Gruppe Zugriff haben?
C 13.17 [!2] Erstellen Sie eine zusätzliche Gruppe test . Mitglied die-
ser Gruppe soll nur test1 sein. Setzen Sie ein Gruppenkennwort.
Melden Sie sich als test1 und test2 an und wechseln Sie jeweils in
die neue Gruppe!
370
Kommandos in diesem Kapitel
371
Zusammenfassung
372
14 Zugriffsrechte
Lernziele
• Das Linux-Rechtekonzept beherrschen
• Zugriffsrechte für Dateien und Verzeichnisse vergeben können
• Die Begriffe SUID, SGID und sticky bit kennen
Vorkenntnisse
• Kenntnisse über das Linux-Benutzer- und Gruppenkonzept (siehe
Kapitel 13)
• Kenntnisse über das Linux-Dateikonzept
14.1 Das Linux-Rechtekonzept
374
14.2 Zugriffsrechte auf Dateien und
Verzeichnisse
14.2.1 Grundlagen
Für jede Datei und jedes Verzeichnis im System erlaubt Linux für jede
der drei Kategorien von Benutzern – Eigentümer, Mitglieder der Datei-
gruppe, Rest der Welt – separate Zugriffsrechte. Diese Rechte teilen sich
auf in Leserecht, Schreibrecht und Ausführungsrecht.
Für Dateien bedeuten diese Rechte in etwa das, was ihre Namen aus-
sagen: Wer Leserecht hat, darf sich den Inhalt der Datei anschauen, wer
Schreibrecht hat, darf ihren Inhalt ändern. Das Ausführungsrecht ist
notwendig, um die Datei als Programm starten zu können.
375
Normalerweise hat es wenig Sinn, Schreib- und Ausführungsrecht für
Verzeichnisse getrennt voneinander zu vergeben; in gewissen Spezial-
fällen kann es allerdings nützlich sein.
B Wenn Sie dagegen Schreibrecht auf die Datei, aber nicht auf ihr
Verzeichnis haben, können Sie die Datei nicht komplett löschen.
Sie können aber natürlich die Länge der Datei auf 0 setzen und
damit den Inhalt entfernen, auch wenn die Datei selbst prinzipiell
noch existiert.
376
14.2.2 Zugriffsrechte anschauen und ändern
Informationen darüber, welche Rechte, Benutzer- und Gruppenzuord-
nung für eine Datei gelten, bekommen Sie mit »ls -l «:
$ ls -l
-rw-r--r-- 1 hugo users 4711 Oct 4 11:11 [Link]
drwxr-x--- 2 hugo group2 4096 Oct 4 11:12 testdir
Die Zeichenkette am linken Rand der Tabelle gibt die Zugriffsrechte für
den Eigentümer, die Dateigruppe und den »Rest der Welt« an (das al-
lererste Zeichen ist nur der Dateityp und hat mit den Zugriffsrechten
nichts zu tun). Die dritte Spalte nennt den Benutzernamen des Eigentü-
mers und die vierte Spalte den Namen der Dateigruppe.
In der Rechteliste stehen »r «, »w « und »x « jeweils für ein vorhan-
denes Lese-, Schreib- und Ausführungsrecht. Steht nur ein »- « in der
Liste, dann hat die betreffende Kategorie das betreffende Recht nicht.
»rw-r--r-- « steht also für »Lese- und Schreibrecht für den Eigentümer,
aber nur Leserecht für die Gruppenmitglieder und den Rest der Welt«.
Als Dateieigentümer können Sie mit dem Befehl chmod (von change
mode, »Zugriffsmodus ändern«) die Zugriffsrechte für die Datei setzen.
Dabei können Sie die drei Kategorien durch die Abkürzungen »u « (user)
für den Eigentümer (Sie selbst), »g « (group) für die Mitglieder der Datei-
gruppe und »o « (others) für den »Rest der Welt« bestimmen. Die Rechte
selbst werden durch die schon erwähnten Kürzel »r «, »w « und »x « festge-
legt. Mit »+ «, »- « und »= « können Sie verfügen, ob die benannten Rechte
respektive zusätzlich zu den existierenden vergeben, von den existie-
renden »subtrahiert« oder anstelle der bisherigen gesetzt werden sollen.
Zum Beispiel:
Der Dateieigentümer ist (neben root ) der einzige Benutzer, der die
Zugriffsrechte für eine Datei oder ein Verzeichnis ändern darf. Dieses
Privileg ist unabhängig von den tatsächlichen Dateirechten; der Eigen-
tümer darf sich selbst alle Rechte entziehen, aber hindert sich dadurch
nicht selber daran, sich später wieder Rechte zu erteilen.
Die allgemeine Syntax des chmod -Kommandos ist
B Sie können den Zugriffsmodus einer Datei statt wie eben ange-
geben »symbolisch« auch »numerisch« angeben. In der Praxis ist
das sehr verbreitet, wenn Sie alle Rechte für eine Datei oder ein
Verzeichnis auf einmal setzen wollen, und funktioniert so: Die
drei Rechtetripel werden als dreistellige Oktalzahl dargestellt –
die erste Ziffer beschreibt die Rechte des Eigentümers, die zwei-
te die Rechte der Dateigruppe und die dritte die Rechte für den
»Rest der Welt«. Jede dieser Ziffern ergibt sich aus der Summe
der jeweiligen Rechte, wobei Leserecht 4 zählt, Schreibrecht 2 und
378
Ausführrecht 1. Hier sind ein paar Beispiele für gängige Rechte-
zuordnungen in »ls -l «- und oktaler Darstellung:
rw-r--r-- 644
r-------- 400
rwxr-xr-x 755
B chown unterstützt auch eine veraltete Syntax, bei der anstatt des
Doppelpunkts ein einfacher Punkt verwendet wird.
Auch chown und chgrp unterstützen die Option -R zur rekursiven An-
wendung auf eine ganze Verzeichnishierarchie.
380
Übungen
C 14.1 [!2] Legen Sie eine neue Datei an. Welcher Gruppe ist diese
Datei zugeordnet? Verwenden Sie chgrp , um die Datei einer Ihrer
anderen Gruppen zuzuordnen. Was passiert, wenn Sie die Datei
einer Gruppe zuordnen wollen, in der Sie nicht Mitglied sind?
381
14.3 Eigentum an Prozessen
Linux betrachtet nicht nur die mehr oder weniger festen Daten auf
einem dauerhaften Speichermedium als Objekte, die einem Eigentümer
zugeordnet werden. Auch die Prozesse im System haben einen Eigen-
tümer.
Viele Kommandos, die Sie über die Tastatur eingeben, erzeugen ei-
nen Prozess im Arbeitsspeicher des Rechners. Im normalen Betrieb be-
finden sich immer mehrere Prozesse gleichzeitig im Speicher, die vom
Betriebssystem streng voneinander abgegrenzt werden. Die einzelnen
Prozesse werden mit allen ihren Daten einem Benutzer als Eigentümer
zugeordnet. Dies ist in der Regel der Benutzer, der den Prozess gestartet
hat – auch hier haben Prozesse, die mit Administratorrechten gestartet
wurden, die Möglichkeit, ihre Identität zu ändern, und der SUID-Me-
chanismus (Abschnitt 14.4) kann hier ebenfalls eingreifen.
Die Eigentümer der Prozesse werden vom Programm ps angezeigt,
wenn es mit der Option -u aufgerufen wird.
# ps -u
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
bin 89 0.0 1.0 788 328 ? S 13:27 0:00 [Link]
test1 190 0.0 2.0 1100 28 3 S 13:27 0:00 bash
test1 613 0.0 1.3 968 24 3 S 15:05 0:00 vi [Link]
nobody 167 0.0 1.4 932 44 ? S 13:27 0:00 httpd
root 1 0.0 1.0 776 16 ? S 13:27 0:03 init [3]
root 2 0.0 0.0 0 0 ? SW 13:27 0:00 (kflushd)
382
14.4 Besondere Zugriffsrechte für
ausführbare Dateien
Beim Auflisten der Dateien mit dem Befehl »ls -l « bekommen Sie
bei manchen Dateien neben den bekannten Zugriffsrechten rwx abwei-
chende Anzeigen wie
B Die Bell Labs hatten eine Weile lang ein Patent auf den – von Den-
nis Ritchie erfundenen – SUID-Mechanismus [?]. AT&T hatte Unix
zuerst nur unter der Voraussetzung verteilt, dass nach der Ertei-
lung des Patents Lizenzgebühren erhoben werden würden; we-
gen der logistischen Schwierigkeit, Jahre später von Hunderten
von Unix-Installationen rückwirkend kleine Geldbeträge einzu-
treiben, entschloss man sich jedoch, das Patent der Allgemeinheit
zur Verfügung zu stellen.
Analog zum Set-UID-Bit gibt es auch ein SGID-Bit, mit dem ein Pro-
zess statt mit der Gruppenzugehörigkeit des Aufrufers mit der Grup-
penzugehörigkeit der Programmdatei und den damit verbundenen
Rechten (typischerweise zum Zugriff auf andere Dateien, die dieser
Gruppe zugeordnet sind) ausgeführt wird.
Die SUID- und SGID-Modi werden wie alle anderen Modi einer Da-
tei mit dem Systemprogramm chmod verändert, indem Sie symbolische
Schlüssel wie u+s (setzt das SUID-Bit) oder g-s (löscht das SGID-Bit) an-
geben. Auch in oktalen Modi können Sie diese Bits setzen, indem Sie
eine vierte Ziffer ganz links hinzufügen: Das SUID-Bit hat den Wert 4,
das SGID-Bit den Wert 2 – so können Sie einer Datei den Zugriffsmodus
4755 geben, um sie für alle Benutzer lesbar und ausführbar zu machen
(der Eigentümer darf auch schreiben) und das SUID-Bit zu setzen.
Sie erkennen Programme, die mit den Rechten des Eigentümers oder
der Gruppe der Programmdatei arbeiten, in der Ausgabe von »ls -l «
durch die symbolischen Abkürzungen »s « anstelle von »x « für normal
ausführbare Dateien.
384
14.5 Besondere Zugriffsrechte für
Verzeichnisse
385
Jetzt können Sie das Verzeichnis anlegen und der neuen Gruppe
zuordnen. Eigentümer und Gruppe bekommen alle Rechte, der
Rest der Welt keine; außerdem setzen Sie noch das SGID-Bit:
# cd /home/projekt
# chgrp projekt /home/projekt
# chmod u=rwx,g=srwx /home/projekt
Wenn hugo jetzt eine Datei in /home/projekt anlegt, sollte diese der
Gruppe projekt zugeordnet sein:
$ id
uid=1000(hugo) gid=1000(hugo) groups=101(projekt),1000(hugo)
$ touch /tmp/[Link] Test: gewöhnliches Verzeichnis
$ ls -l /tmp/[Link]
-rw-r--r-- 1 hugo hugo 0 Jan 6 17:23 /tmp/[Link]
$ touch /home/projekt/[Link] Projektverzeichnis
$ ls -l /home/projekt/[Link]
-rw-r--r-- 1 hugo projekt 0 Jan 6 17:24 /home/projekt/[Link]
Das ganze hat nur einen Schönheitsfehler, den Sie erkennen, wenn
Sie sich die letzte Zeile des Beispiels anschauen: Die Datei hat
zwar die richtige Gruppenzugehörigkeit, aber andere Mitglie-
der der Gruppe projekt dürfen sie trotzdem nur lesen. Wenn Sie
möchten, dass alle Mitglieder von projekt schreiben dürfen, müs-
sen Sie entweder nachträglich chmod anwenden (lästig) oder die
umask so setzen, dass das Gruppenschreibrecht erhalten bleibt
(siehe Übung 14.4).
386
hält (wohingegen sie beim Kopieren die Gruppe des Verzeichnisses be-
kommen würde).
Auch das Programm chgrp arbeitet in SGID-Verzeichnissen völlig
normal: der Eigentümer einer Datei kann sie jeder Gruppe zueignen,
der er selbst angehört. Gehört der Eigentümer nicht zu der Gruppe
des Verzeichnisses, kann er die Datei mit chgrp nicht dieser Gruppe
übergeben – dazu muss er sie in dem Verzeichnis neu erzeugen.
Mit diesem t -Modus, dem sticky bit, kann einem Problem begegnet
werden, das bei der gemeinsamen Verwendung öffentlicher Verzeich-
nisse entstehen kann: Das Schreibrecht für das Verzeichnis erlaubt auch
das Löschen fremder Dateien, unabhängig von deren Zugriffsmodus
und Besitzer! Beispielsweise sind die /tmp -Verzeichnisse öffentlicher
Raum, in dem von vielen Programmen temporäre Dateien angelegt
werden. Um darin Dateien anlegen zu können, haben alle Benutzer für
diese Verzeichnisse Schreibrecht. Damit hat jeder Benutzer auch das
Recht, Dateien in diesem Verzeichnis zu löschen.
Normalerweise betrachtet das Betriebssystem beim Löschen oder
Umbenennen einer Datei die Zugriffsrechte auf die Datei selbst nicht
weiter. Wenn auf einem Verzeichnis das sticky bit gesetzt wird, kann
eine Datei in diesem Verzeichnis anschließend nur von ihrem Eigen-
tümer, dem Eigentümer des Verzeichnisses oder root gelöscht werden.
Das sticky bit kann über die symbolische Angabe +t bzw. -t gesetzt oder
gelöscht werden, oktal hat es in derselben Ziffer wie SUID und SGID
den Wert 1.
387
B Das sticky bit bekommt seinen Namen von einer weiteren Bedeu-
tung, die es früher in anderen Unix-Systemen hatte: Seinerzeit
wurden Programme vor dem Start komplett in den Swap-Speicher
kopiert und nach dem Programmlauf wieder daraus entfernt. Pro-
grammdateien, auf denen das sticky bit gesetzt war, wurden dage-
gen auch noch nach dem Programmende im Swap-Speicher lie-
gengelassen. Dies beschleunigte weitere Startvorgänge für dassel-
be Programm, weil der anfängliche Kopiervorgang entfiel. Linux
verwendet wie die meisten heutigen Unix-Systeme demand paging,
holt also nur die wirklich benötigten Teile des Programmcodes di-
rekt aus der Programmdatei und kopiert gar nichts in den Swap-
Speicher; das sticky bit hatte unter Linux niemals seine ursprüng-
liche Sonderbedeutung.
Übungen
C 14.3 [2] Was bedeutet das spezielle Zugriffsrecht »s «? Wo finden
Sie es? Können Sie dieses Recht auf eine selbst erstellte Datei set-
zen?
C 14.4 [!1] Mit welchem umask -Aufruf können Sie eine umask ein-
stellen, die im Projektverzeichnis-Beispiel allen Mitgliedern der
Gruppe projekt das Lesen und Schreiben von Dateien im Projekt-
verzeichnis erlaubt?
C 14.7 [3] Wenn Sie sie für ein paar Minuten mit einer root -Shell
alleine lassen, könnten findige Benutzer versuchen, irgendwo im
388
System eine Shell zu hinterlegen, die sie SUID root gemacht haben,
um auf diese Weise nach Bedarf Administratorrechte zu bekom-
men. Funktioniert das mit der Bash? Mit anderen Shells?
389
Kommandos in diesem Kapitel
390
Zusammenfassung
391
15 Linux im Netz
Lernziele
• Einen Überblick über Netzwerk-Konzepte haben
• Anforderungen dafür verstehen, einen Linux-Rechner in ein loka-
les Netz zu integrieren
• Wichtige Kommandos zur Fehlersuche kennen
• Wichtige Netzwerkdienste kennen
Vorkenntnisse
• Umgang mit Dateien (Kapitel 6) und mit einem Texteditor
• Kenntnisse über die Linux-Dateisystemstruktur (Kapitel 10)
• Vorkenntnisse im TCP/IP-Bereich und Kenntnisse im Umgang
mit Netzwerkdiensten sind nützlich
15.1 Netzwerk-Grundlagen
393
hier in Deutschland kann erkennen, dass Sie tatsächlich ein Bild
bekommen haben und keine (textuelle) Fehlermeldung.
395
B Die IP-Adressen selbst fallen nicht einfach so vom Himmel, son-
dern werden – soweit möglich – mit System vergeben, um die Wei-
terleitung von Daten zwischen verschiedenen Netzen, das soge-
nannte »Routing«, zu vereinfachen. Dazu gleich mehr.
B Das klingt absurd und nutzlos, hat aber durchaus Sinn: Zum
Beispiel könnten Sie an der Entwicklung einer Webseite arbei-
ten, die Mail an Benutzer verschicken können muss (etwa mit
Aktivierungs-Links für Benutzerkonten). Um das auf Ihrem Ent-
wicklungsrechner zu testen, können Sie einen lokalen Mailserver
installieren, der nur auf der Loopback-Adresse Mail annimmt –
für Ihr Projekt reicht das auf jeden Fall aus, aber Sie laufen keine
Gefahr, von irgendwo auf dem Internet mit Spam überschüttet zu
werden.
Bei Rechnern mit Ethernet oder WLAN hat die betreffende Schnittstelle
natürlich auch eine IP-Adresse – jedenfalls wenn der Rechner aktuell im
Netz ist. Außerdem spricht nichts dagegen, den Netzwerkschnittstellen
für Testzwecke oder besondere Konfigurationen weitere Adressen zu-
zuordnen.
Die Herausforderung besteht darin, dafür zu sorgen, dass irgendein
beliebiger Rechner 𝑋 auf dem Internet mit irgendeinem beliebigen an-
deren Rechner 𝑌 kommunizieren kann, solange er nur die IP-Adresse
von 𝑌 kennt. (Wenn 𝑋 in Deutschland steht und 𝑌 in Australien, ist es
nicht 100% offensichtlich, wie die Bytes von 𝑋 zu 𝑌 gelangen sollen.)
Das Zauberwort, das dies möglich macht, ist »Routing«. Und das funk-
tioniert ungefähr so:
• Ihr Rechner 𝑋 kann die IP-Adresse von Rechner 𝑌 herausfinden
(dafür ist das DNS da). Vielleicht ist sie [Link] .
396
• Rechner 𝑋 kann feststellen, dass die IP-Adresse [Link] nicht
im selben lokalen Netz ist wie seine eigene (kein Wunder, Rech-
ner 𝑌 ist ja in Australien). Das heißt, Rechner 𝑋 kann keine Daten
direkt an Rechner 𝑌 schicken (große Überraschung).
• Die Netzwerk-Konfiguration von Rechner 𝑋 enthält eine »Default-
Route«, anders gesagt ein Rezept dafür, wie Rechner 𝑋 mit Da-
ten umgehen soll, die er nicht direkt zustellen kann. Diese De-
fault-Route kann zum Beispiel aussehen wie »Schicke alles, was
Du nicht direkt zustellen kannst, an Rechner 𝑍«. Den Rechner 𝑍
nennt man auch »Default-Gateway«.
• Auch Rechner 𝑍 – vielleicht Ihr DSL-Router – kann die Daten nicht
direkt an Rechner 𝑌 zustellen. Dafür weiß er aber auch, was er mit
Daten machen soll, die nicht für die direkt an ihn angeschlossenen
Rechner wie 𝑋 gedacht sind, nämlich weiterschicken an Ihren In-
ternet-Anbieter.
• Dieses Spiel geht möglicherweise noch über ein paar Ebenen so
weiter, bis Ihre Daten auf einem Rechner landen, der weiß, dass an
10.11. 𝑥. 𝑦 adressierte Daten an den australischen Internetanbieter
(nennen wir ihn mal »Billabong-Net«) geschickt werden sollen,
also werden sie dorthin geleitet.
• Billabong-Net weiß (hoffentlich), wie eingehende Pakete an 10.
11.12.13 an ihr endgültiges Ziel geleitet werden müssen. Der tat-
sächliche Rechner 𝑌 steht zwar vielleicht bei einem Kunden von
Billabong-Net, oder bei einem Kunden dieses Kunden, aber wenn
alles richtig konfiguriert ist, passt das schon.
• Allfällige Antworten von 𝑌 an 𝑋 nehmen prinzipiell den umge-
kehrten Weg.
Die wichtige Beobachtung an dieser Stelle ist, dass der tatsächliche Weg
der Daten von Rechner 𝑋 zu Rechner 𝑌 sich erst während der Zustel-
lung ergibt. Rechner 𝑋 muss keine genaue Streckenführung vorgeben,
397
sondern verläßt sich darauf, dass jede der Stationen unterwegs das Rich-
tige tut. Umgekehrt kommt jeder Rechner mit »lokalem« Wissen aus und
muss nicht für das komplette Internet wissen, was wo ist – was ein Ding
der Unmöglichkeit wäre.
B Im Prinzip ist das so ähnlich wie bei der »gelben Post«. Sie müssen
ja auch nicht wissen, welchen genauen Weg Ihre Geburtstagskar-
te für Tante Susi in Sydney nimmt, sondern Sie stecken nur den
korrekt freigemachten Umschlag in Ihren freundlichen Nachbar-
schafts-Briefkasten.
Unter dem Strich läuft das Ganze darauf hinaus, dass Ihr Linux-
Rechner drei Dinge wissen muss: seine eigene IP-Adresse, welche
Adressen er direkt erreichen kann, und ein Default-Gateway für den
Rest. Welche Adressen Ihr Rechner direkt erreichen kann, wird durch
die Adresse Ihres lokalen Netzes zusammen mit einer »Subnetzmaske«
beschrieben, die heutzutage zumeist als Zahl angegeben wird.
B Stellen Sie sich vor, Ihr Rechner hat die IP-Adresse [Link]
im lokalen Netz [Link]/24 . Dabei ist die 24 die Subnetzmas-
ke – sie gibt an, dass die ersten 24 Bit Ihrer Adresse (also die ersten
drei Oktette, namentlich 192.168.178 ) das Netz selbst adressieren.
Das letzte Oktett (oder die letzten 8 Bit, die zur »32« fehlen) steht
damit für lokale Adressen zur Verfügung. Das heißt, alle Rechner
mit Adressen von [Link] bis [Link] sind – falls sie
überhaupt existieren – direkt lokal erreichbar; für alle anderen IP-
Adressen muss der Default-Gateway (der eine Adresse im lokalen
Netz haben muss) herangezogen werden.
398
B In Wirklichkeit wären in unserem Beispiel die Adressen 192.168.
178.0 und [Link] nicht für Rechner zu benutzen, weil sie
eine Spezialbedeutung haben, aber wir sagen das nur der Voll-
ständigkeit halber.
Diese wichtigen Netzwerkparameter – IP-Adresse, Subnetz(maske)
und Default-Gateway – können Sie grundsätzlich mit der Hand in die
Netzwerkkonfiguration Ihres Rechners eintragen. (Die Details dafür
sind distributionsspezifisch.) Es ist allerdings extrem wahrscheinlich,
dass in Ihrem Netz ein »DHCP-Server« zur Verfügung steht, der Ihrem
Rechner die Netzwerkparameter bei Bedarf zukommen läßt, ohne dass
Sie sich selbst darum kümmern müssen.
Wenn Sie also einen Linux-Rechner als Client ins Netz bringen wol-
len, sollte es normalerweise reichen, ihn einzuschalten und entweder
das Ethernet-Kabel in die dafür vorgesehene Buchse zu stecken oder im
dafür vorgesehenen Menü ein WLAN auszuwählen und gegebenenfalls
das Kennwort dafür einzutippen. Sollte es damit Probleme geben, dann
schreien Sie laut und nachdrücklich nach Ihrem System- oder Netzad-
ministrator.
B Die Adresse des (oder der) DNS-Server kommt als viertes Ele-
ment zu den »wichtigen Netzwerkparametern« aus dem letzten
Abschnitt – IP-Adresse, Subnetz(maske), Default-Gateway – da-
zu, die jeder Linux-Rechner haben sollte.
Ähnlich wie bei den IP-Adressen und Routen muss auch kein DNS-
Server den kompletten Überblick über alle existierenden Namen haben
(dafür sind es inzwischen auch einfach zu viele). In Wirklichkeit gibt es
eine Hierarchie:
• Die »Root-Level-Nameserver« kennen den Teil eines Namens, der
ganz rechts steht – etwa .de oder .com oder .tv oder was es sonst
noch so gibt –, und wissen, welche Nameserver sich mit dem Inhalt
dieser Zonen auskennen.
• Die Nameserver für .de (nur mal so als Beispiel) kennen alle Na-
men der Form [Link] und wissen, welche Nameserver über
die Namen unterhalb dieser Namen Bescheid wissen.
400
B Genaugenommen macht diese Arbeit nicht »Ihr Rechner«, son-
dern der DNS-Server, den Ihr Rechner benutzt. Aber das ändert
nichts am Prinzip.
Natürlich ist das ein ziemlich aufwendiges Verfahren, und darum merkt
Ihr System sich die Ergebnisse von Anfragen für eine Weile. Wenn Sie
einmal herausgefunden haben, dass [Link] der IP-Adresse
[Link] entspricht, wird davon ausgegangen, dass das auch eine
Weile so bleibt, und der Auflösungsprozess erst nach Ablauf dieser Zeit
wieder angestoßen.
B Der Vorteil an der Sache ist, dass wir von der Linup Front GmbH
frei über Namen »unterhalb von« [Link] verfügen und die-
se auch nach Belieben in unseren DNS-Server eintragen können.
Andere Leute holen sie sich direkt von da. Es wäre viel mühsamer,
einen neuen Namen aufwendig beim »Internet-Amt« beantragen
zu müssen und darauf zu warten, dass er dort ins offizielle Ver-
zeichnis eingetragen wird. (Denken Sie mal an Grundbuch-Ände-
rungen und wie lange die dauern.)
15.1.4 IPv6
IP als Kommunikationsprotokoll gibt es schon seit gut 30 Jahren, und
man hat festgestellt, dass einige Annahmen, von denen man seinerzeit
ausgegangen ist, wohl doch etwas naiv waren. Zum Beispiel erlaubt
IPv4 (wie die aktuelle Version des Protokolls heißt) prinzipiell 232 , also
gut 4 Milliarden Adressen. Aufgrund von Einschränkungen des Proto-
kolls sowie verschiedenen Ungeschicklichkeiten bei der Vergabe stehen
aber praktisch keine unbenutzten IPv4-Adressen mehr zur Verfügung –
und in einem Zeitalter, wo (gefühlt) fast jeder ein internetfähiges Mobil-
telefon mit sich herumträgt und noch mehr Leute eins haben wollen, ist
das ein definitives Problem.
Schon seit geraumer Zeit steht IPv6, der designierte Nachfolger von
IPv41 , in den Startlöchern. IPv6 räumt mit einigen Problemen von IPv4
auf, aber die Internet-Anbieter tun sich im Moment noch etwas schwer
damit, IPv6 flächendeckend zur Verfügung zu stellen. Linux kommt mit
IPv6 aber hervorragend zurecht, und da Sie IPv4 und IPv6 durchaus
parallel betreiben können, steht einer IPv6-basierten Infrastruktur in Ih-
rem Unternehmen (oder gar im häuslichen LAN – viele DSL-Router un-
terstützen inzwischen IPv6) im Prinzip nichts im Weg. Hier sind einige
der wesentlichen Eigenschaften von IPv6:
fe80:0:0:0:25a:b6ff:fe9c:406a
402
Die Loopback-Adresse, also das moralische Äquivalent zu 127.0.
0.1 in IPv4, ist ::1 .
403
nen, ohne dass ihre IP-Adressen sich ändern oder bestehende
Verbindungen abgebrochen werden (»Mobile IPv6«).
Kompatibilität Die Einführung von IPv6 betrifft nur IP – Protokolle wie
TCP und UDP oder die darauf aufsetzenden Anwendungsproto-
kolle bleiben unverändert. Außerdem ist es, wie erwähnt, mög-
lich, IPv4 und IPv6 parallel zu betreiben.
Übungen
C 15.1 [!1] Welche Transportprotokolle (außer Ethernet und IEEE-
802.11) kennen Sie? Welche Kommunikationsprotokolle (außer
IP, TCP und UDP)? Welche Anwendungsprotokolle außer den im
Text genannten?
404
15.2 Linux als Netzwerk-Client
15.2.1 Anforderungen
Was nötig ist, um einen Linux-Rechner als (IPv4-)Client in ein existie-
rendes Netz zu integrieren (der einzige für Linux Essentials interessante
Anwendungsfall), haben wir ja schon im vorigen Abschnitt umrissen:
405
Bei den Red-Hat- und von Red Hat abgeleiteten Distributio-
nen stehen Konfigurationsdateien im Verzeichnis /etc/sysconfig/
network- scripts .
# /etc/[Link]
search [Link]
nameserver [Link]
nameserver [Link]
(das »search [Link] « sucht, wenn Sie irgendwo einen Namen ohne
Punkt – etwa www – angegeben haben, automatisch nach »[Link].
com «).
B Wenn Ihr System das Netz automatisch konfiguriert – etwa bei der
Verbindung mit WLANs –, wird der Inhalt von /etc/[Link]
mitunter gnadenlos überschrieben. Schauen Sie gegebenenfalls in
der Dokumentation nach, wie und wo Sie in Ihrer Distribution
Nameserver dauerhaft konfigurieren können.
406
15.2.2 Fehlersuche
Sollte die einfache Methode der Netzwerkkonfiguration (Einstöpseln
bzw. Einbuchen) nicht funktionieren oder sollten anderweitige Pro-
bleme auftauchen – etwa quälend lange Wartezeiten beim Zugriff auf
Web-Seiten oder unerklärliche Verbindungsabbrüche –, dann sollten
Sie einen System- oder Netzadministrator zu Rate ziehen oder generell
jemanden, der sich mit der Materie besser auskennt als Sie. (Jedenfalls
bis Sie die LPIC-2-Prüfungen abgelegt haben; spätestens ab dann wird
man Sie herbeiholen, wenn andere Leute in Schwierigkeiten sind.)
Auf der anderen Seite kommt es immer gut an, wenn Sie selbst die
gängigsten Probleme ausgeschlossen oder den Fehler schon etwas ein-
gegrenzt haben. Das spart Ihrem Administrator möglicherweise Arbeit
oder sorgt zumindest dafür, dass Sie vor ihr oder ihm nicht aussehen wie
ein DAU2 , sondern wie jemand, der für voll genommen werden sollte.
Im Rest dieses Abschnitts erklären wir Ihnen die wichtigsten Werk-
zeuge zur Fehlersuche und wie Sie sie benutzen können.
$ /sbin/ifconfig eth0
eth0 Link encap:Ethernet Hardware Adresse 70:5a:b6:9c:40:6a
inet Adresse:[Link] Bcast:[Link]
Maske:[Link]
inet6-Adresse: 2002:4fee:57e5:0:725a:b6ff:fe9c:406a/64
Gültigkeitsbereich:Global
inet6-Adresse: fe80::725a:b6ff:fe9c:406a/64
Gültigkeitsbereich:Verbindung
UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
RX packets:83769 errors:0 dropped:0 overruns:0 frame:0
TX packets:76525 errors:0 dropped:0 overruns:0 carrier:0
407
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:69767848 (66.5 MiB) TX bytes:10245590 (9.7 MiB)
Interrupt:20 Speicher:d7400000-d7420000
Das »UP « in der fünften Zeile signalisiert, dass die Schnittstelle aktiv ist.
Wenn Sie ifconfig ohne Parameter aufrufen, gibt es Informationen
über alle aktiven Netzwerkschnittstellen auf dem Rechner aus. Mit dem
Parameter -a nimmt es noch die gerade nicht aktiven dazu.
ping Mit dem Kommando ping können Sie auf der untersten Ebene (IP)
prüfen, ob Ihr Rechner mit anderen Rechnern kommunizieren kann. ping
benutzt das Steuerungsprotokoll ICMP, um einen anderen Rechner um
ein »Lebenszeichen« zu bitten. Kommt dieses Lebenszeichen wieder bei
Ihrem Rechner an, wissen Sie, dass (a) Ihr Rechner Daten an den ande-
ren Rechner schicken kann, und (b) der andere Rechner Daten an Ihren
408
Rechner schicken kann (das eine impliziert nicht notwendigerweise das
andere).
Im einfachsten Fall rufen Sie ping mit dem Namen des Rechners auf,
mit dem Sie kommunizieren wollen:
$ ping [Link]
PING [Link] ([Link]) 56(84) bytes of data.
64 bytes from [Link] ([Link]): icmp_req=1 ttl=64 time=3.84 ms
64 bytes from [Link] ([Link]): icmp_req=2 ttl=64 time=5.09 ms
64 bytes from [Link] ([Link]): icmp_req=3 ttl=64 time=3.66 ms
64 bytes from [Link] ([Link]): icmp_req=4 ttl=64 time=3.69 ms
64 bytes from [Link] ([Link]): icmp_req=5 ttl=64 time=3.54 ms
Abbruch mit Strg + c …
--- [Link] ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 3.543/3.967/5.095/0.575 ms
Hier ist alles in Ordnung: Alle fünf abgeschickten Pakete sind wieder
zurückgekommen, die Reihenfolge stimmt, und die Laufzeiten sind im
Rahmen für ein lokales Netz. Wenn Sie statt dessen eine Weile lang
nichts sehen und dann etwas wie
From [Link] icmp_seq=1 Destination Host Unreachable
From [Link] icmp_seq=2 Destination Host Unreachable
From [Link] icmp_seq=3 Destination Host Unreachable
erscheint, dann liegt etwas im Argen – der Zielrechner ist nicht erreich-
bar.
Wenn Sie keine Verbindung zu einem entfernten Rechner im Internet
bekommen, kann das Problem natürlich grundsätzlich irgendwo zwi-
schen Ihnen und dem entfernten Rechner liegen. Wenn Sie methodisch
vorgehen wollen, dann benutzen Sie die folgende Taktik:
• Prüfen Sie mit ping , ob Sie die Loopback-Schnittstelle [Link] er-
reichen können. Wenn das nicht klappt, dann ist mit Ihrem Rech-
ner kapital etwas nicht in Ordnung.
409
• Prüfen Sie mit ping , ob Sie die Adresse der Netzwerkkarte (Ether-
net, WLAN, …) erreichen können, über die Sie gerade mit dem
Internet verbunden sind (oder zu sein glauben). Sie finden die
Adresse bei Bedarf mit etwas wie
$ /sbin/ifconfig eth0
$ /sbin/route
Kernel-IP-Routentabelle
Ziel Router Genmask Flags Metric Ref Use Iface
default [Link] [Link] UG 0 0 0 eth0
link-local * [Link] U 1000 0 0 lo
[Link] * [Link] U 0 0 0 eth0
sehen Sie in der default -Zeile unter Ziel , was Sie verwenden müs-
sen – hier »ping [Link] «.) Wenn das nicht funktioniert, Sie also
Meldungen wie
410
B Zum Beispiel könnte es sein, dass Ihre Default-Route ver-
bogen ist und auf den falschen Rechner zeigt. (Zumindest
bei manueller Konfiguration wäre das denkbar.) Das würde
die Benutzer anderer Rechner, wo die Konfiguration wahr-
scheinlich stimmt, nicht betreffen.
B Sind Sie nicht root , sondern nur ein normaler Benutzer, dann
müssen Sie sich mit einem minimalen Abstand von 0,2 Sekunden
zwischen zwei versandten Paketen zufriedengeben. Das Netz-
werk überfluten dürfen Sie nämlich nur als Administrator.
$ ping6 ::1
411
dig Das Kommando dig dient zum Testen der Namensauflösung über
das DNS. Wenn Sie nichts anderes sagen, versucht es zu einem auf der
Kommandozeile angegebenen Namen eine IP-Adresse zu finden:
$ dig [Link]
;; QUESTION SECTION:
;[Link]. IN A
;; ANSWER SECTION:
[Link]. 3600 IN CNAME [Link].
[Link]. 3600 IN A [Link]
412
; <<>> DiG 9.8.1-P1 <<>> [Link]
;; global options: +cmd
;; connection timed out; no servers could be reached
dann ist etwas faul im Staate Dänemark. Entweder stimmen Ihre Ein-
stellungen in /etc/[Link] nicht, oder der Nameserver tut nicht das,
was er soll.
B Wenn Sie sich mit dem DNS auskennen: Sie können dig auch ver-
wenden, um nach anderen RR-Typen zu suchen als A -Records. Sa-
gen Sie einfach auf der Kommandozeile, was Sie haben wollen:
$ dig [Link] mx
413
(Mit der Option +short liefert dig eine sehr knappe Antwort.)
Natürlich kann dig noch viel mehr, aber das Meiste davon ist nur für
Leute von Interesse, die Nameserver konfigurieren oder am Laufen hal-
ten müssen. Im Zweifel finden Sie mehr Details in dig (1).
netstat Das Kommando netstat ist eine Art Schweizer Messer, das Ih-
nen Informationen aller Art über Ihren Rechner und seine Netzanbin-
dung liefert. Wenn Sie einfach nur
$ netstat
$ netstat -tl
Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 ceol:domain *:* LISTEN
tcp 0 0 [Link]:domain *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 ceol:ipp *:* LISTEN
tcp 0 0 ceol:postgresql *:* LISTEN
tcp 0 0 ceol:smtp *:* LISTEN
eine Liste der TCP-Ports ausgeben zu lassen, auf denen auf dem lokalen
Rechner Serverprogramme auf eingehende Verbindungen lauschen.
B Mit »-u « statt »-t « sehen Sie die UDP-basierten Serverdienste, und
mit »-p « werden auch der Name und die PID des Prozesses aus-
gegeben, der den Dienst erbringt. Letztere funktioniert allerdings
nur, wenn Sie das Kommando als root aufrufen.
B Mit »-n « bekommen Sie das Ganze mit IP-Adressen und Portnum-
mern statt Namen. Manchmal ist das aufschlussreicher, jedenfalls
sofern Sie ein Gefühl für die Portnummern haben:
$ netstat -tln
Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 [Link]:53 [Link]:* LISTEN
tcp 0 0 [Link]:53 [Link]:* LISTEN
tcp 0 0 [Link]:22 [Link]:* LISTEN
415
8 with invalid addresses
0 forwarded
0 incoming packets discarded
145837 incoming packets delivered
138894 requests sent out
16 outgoing packets dropped
172 dropped because of missing route
Icmp:
30 ICMP messages received
0 input ICMP message failed.
Übungen
C 15.4 [!2] Verwenden Sie ping , um sich zu vergewissern, dass Sie
einen wohlbekannten Rechner im Internet erreichen können (viel-
leicht [Link] ).
C 15.6 [2] Die Option +trace von dig bringt das Programm dazu, die
komplette Suchkette für einen Namen zu dokumentieren, begin-
nend bei den Root-Level-Nameservern. Probieren Sie das für eini-
ge interessante Namen aus und prüfen Sie die Zwischenschritte.
416
Kommandos in diesem Kapitel
417
Zusammenfassung
418
A Musterlösungen
Dieser Anhang enthält Musterlösungen für ausgewählte Aufgaben.
1.1 Der Autor dieser Zeilen machte seine ersten Schritte auf einem
»richtigen« Computer 1982 mit einem Apple II plus. Der hatte einen
6502-Prozessor mit der grandiosen Taktfrequenz von 1 MHz und einen
für damalige Verhältnisse gigantischen RAM-Speicher von 48 KiB. Ei-
ne Festplatte gab es nicht, aber dafür 5¼-Zoll-Disketten, auf die jeweils
143 KiB Daten passten – und das pro Seite. Eigentlich sollte man ja nur
eine Seite der Diskette benutzen, aber mit Fingerspitzengefühl oder ei-
nem speziellen Locher war es möglich, eine Schreibschutzkerbe in die
gegenüberliegende Kante der Plastikhülle zu schneiden, damit man die
Diskette wenden konnte. (Bei Preisen von 30 oder mehr Mark für einen
Zehnerpack war das auch bitter nötig.)
2.3
1. Falsch. GPL-Programme dürfen zu beliebigen Preisen verkauft
werden, solange der Käufer den Quellcode bekommt (usw.) und
die GPL-Rechte zugesprochen bekommt.
2. Falsch. Firmen sind herzlich eingeladen, eigene Produkte auf der
Basis von GPL-Software zu entwickeln, nur fallen diese Produkte
auch wieder unter die GPL. Natürlich ist die Firma nicht gezwun-
gen, ihr Produkt an die Allgemeinheit zu verschenken – es genügt,
wenn der Quellcode den tatsächlichen direkten Kunden zugäng-
lich gemacht wird, die auch die ausführbaren Programme gekauft
haben, aber die dürfen damit alles machen, was die GPL ihnen
erlaubt (inklusive die Software an andere Leute weiterverkaufen
oder -verschenken).
3. Richtig.
4. Falsch. Sie dürfen ein Programm beliebig benutzen, ohne dass Sie
die GPL akzeptiert haben. Die GPL regelt erst die Weitergabe der
Software, und Sie können von der GPL vorher Kenntnis nehmen.
(Interaktive Programme sollen Sie ja auf die GPL hinweisen.)
Grundsätzlich gilt natürlich die Feststellung, dass nur solche Be-
stimmungen verbindlich sind, die der Empfänger der Software
vor dem Erwerb (Kauf, …) kennen konnte; da die GPL dem Emp-
fänger aber zusätzliche Rechte gibt, die er sonst überhaupt nicht
hätte – etwa das Recht der originalgetreuen oder modifizierten
Weitergabe –, ist das kein Problem; man kann die GPL völlig links
liegenlassen und darf trotzdem alles mit der Software machen,
was das Urheberrecht zuläßt. Anders sieht das mit den EULAs
proprietärer Programme aus; diese versuchen ein Vertragsver-
hältnis herzustellen, in dem der Käufer ausdrücklich auf Rechte
verzichtet, die er laut Urheberrecht hätte (etwa das Recht, die Pro-
grammstruktur zu analysieren), und sowas geht natürlich, wenn
überhaupt, nur vor dem Kauf.
3.2 Auf dem Textbildschirm gilt, dass in beiden Fällen die Fehlermel-
dung Login incorrect“ erscheint, aber erst nach der Kennwortabfrage.
”
Der Grund dafür ist, dass es sonst einfach wäre, gültige Benutzernamen
zu raten (die, bei denen nicht gleich eine Fehlermeldung erscheint). So,
wie das System jetzt ist, kann ein Cracker“ nicht entscheiden, ob schon
”
der Benutzername ungültig war oder nur das Kennwort falsch ist, was
das Einbrechen ins System deutlich erschwert.
420
4.1 In der Loginshell lautet die Ausgabe »-bash «, in der zusätzlich ge-
starteten »Subshell« dagegen »bash «. Das Minuszeichen am Anfang sagt
der Shell, dass sie sich wie eine Loginshell benehmen soll und nicht wie
eine »normale« Shell, was Auswirkungen auf die Initialisierung hat.
4.2 alias ist ein internes Kommando (geht nicht anders). rm ist ein exter-
nes Kommando. echo und test sind bei der Bash intern, stehen aber auch
als externe Kommandos zur Verfügung, weil andere Shells sie nicht in-
tern implementieren. Bei der Bash sind sie hauptsächlich aus Effizienz-
gründen intern.
5.5 Das Format und die Werkzeuge für Info-Dateien wurden Mitte der
1980er Jahre entwickelt. HTML war da noch überhaupt nicht erfunden.
6.1 Das aktuelle Verzeichnis ist in Linux ein Prozessattribut, das heißt,
jeder Prozess hat sein eigenes aktuelles Verzeichnis (bei DOS ist das ak-
tuelle Verzeichnis eine Eigenschaft des Laufwerks, aber das ist in ei-
nem Mehrbenutzersystem natürlich nicht tragbar). Darum muss cd in
die Shell eingebaut sein. Wenn es ein externes Kommando wäre, wür-
de es in einem neuen Prozess ausgeführt, würde dessen aktuelles Ver-
zeichnis ändern und sich dann prompt beenden, während das aktuelle
Verzeichnis der Shell unverändert bliebe.
421
6.5 Hierfür hat ls die Option -d .
Damit Sie mit rmdir ein Verzeichnis entfernen können, muss dieses (bis
auf die zwangsläufig vorhandenen Einträge ». « und ».. «) leer sein.
422
6.8 »ls « ohne Argumente listet den Inhalt des aktuellen Verzeichnisses
auf. Verzeichnisse im aktuellen Verzeichnis werden nur namentlich auf-
gezählt. »ls « mit Argumenten dagegen (also auch »ls * « – ls bekommt
das Suchmuster ja nicht zu sehen) listet Informationen über die angege-
benen Argumente auf. Für Verzeichnisse heißt das, dass auch der Inhalt
der Verzeichnisse aufgelistet wird.
6.9 Die Datei »- l « (in der Ausgabe des ersten Kommandos zu sehen)
wird von ls als Option verstanden. Darum taucht sie in der Ausgabe des
zweiten Kommandos auch nicht mehr auf, da bei ls mit Pfadnamenar-
gumenten nur die als Argument angegebenen Dateien ausgegeben wer-
den.
6.10 Wenn der Stern auf Dateinamen mit Punkt am Anfang pass-
te, dann würde zum Beispiel das rekursive Lösch-Kommando »rm -r
* « auch den Namen ».. « bearbeiten. Damit würden nicht nur Unter-
verzeichnisse des aktuellen Verzeichnisses gelöscht, sondern auch das
übergeordnete Verzeichnis und so weiter.
6.12 Wenn Sie ein Verzeichnis umbenennen, sind alle darin enthalte-
nen Dateien und Unterverzeichnisse automatisch unter dem neuen Ver-
zeichnisnamen zu finden. Eine -R -Option ist daher vollkommen über-
flüssig.
423
6.13 Der naive Ansatz – etwas wie »rm -file « – schlägt fehl, da rm
den Dateinamen als Folge von Optionen missversteht. Dasselbe gilt für
Kommandos wie »rm "-file" « oder »rm '-file' «. Die folgenden Möglich-
keiten funktionieren besser:
1. Mit »rm ./-file « ist das Minuszeichen nicht mehr am Anfang des
Parameters und leitet so keine Option ein.
2. Mit »rm -- -file « sagen Sie rm , dass nach dem »-- « definitiv kei-
ne Optionen mehr kommen, sondern nur noch Dateinamen. Das
funktioniert auch bei vielen anderen Programmen.
6.14 Im Rahmen der Ersetzung von »* « wird auch die Datei »- i « er-
fasst. Da die Dateinamen bei der Ersetzung in ASCII-Reihenfolge in die
Kommandozeile getan werden, sieht rm eine Parameterliste wie
und hält das »- i « für die Option -i , die es dazu bringt, Dateien nur nach
Rückfrage zu entfernen. Wir hoffen mal, dass das reicht, damit Sie noch-
mal in Ruhe nachdenken.
6.15 Wenn Sie die Datei über das eine Link im Editor aufrufen und än-
dern, sollte anschließend auch unter dem anderen Link der veränderte
Inhalt zu sehen sein. Es gibt allerdings »clevere« Editoren, die Ihre Da-
tei beim Speichern nicht überschreiben, sondern neu abspeichern und
anschließend umbenennen. In diesem Fall haben Sie hinterher wieder
zwei verschiedene Dateien.
424
6.16 Wenn die Zieldatei eines symbolischen Links nicht (mehr) exis-
tiert, dann gehen Zugriffe auf das Link ins Leere und führen zu einer
Fehlermeldung.
6.17 Auf sich selbst. Man kann das Wurzelverzeichnis daran erken-
nen.
6.18 Das Verzeichnis /home liegt auf diesem Rechner auf einer eigenen
Partition und hat im Dateisystem auf jener Partition die Inodenummer 2,
während das Verzeichnis / auf seinem eigenen Dateisystem die Inode-
nummer 2 hat. Da Inodenummern nur dateisystemweit eindeutig sind,
kann in der Ausgabe von »ls -i « durchaus bei verschiedenen Dateien
dieselbe Zahl stehen; das ist kein Grund zur Besorgnis.
$ mkdir -p a/b
$ cd a/b
$ ln .. c
425
zu einer Schleife führen.
6.21 Der Referenzzähler für das Unterverzeichnis hat den Wert 2 (ein
Verweis entsteht durch den Namen des Unterverzeichnisses in ~ , einer
durch das . -Link im Unterverzeichnis selbst). Hätte das Unterverzeich-
nis weitere Unterverzeichnisse, dann würden die .. -Links dieser Ver-
zeichnisse den Referenzzähler in die Höhe treiben.
6.22 Harte Links brauchen fast keinen Platz, da es sich dabei nur um
zusätzliche Verzeichniseinträge handelt. Symbolische Links sind eigene
Dateien und kosten darum zumindest schon mal ein Inode (jede Da-
tei braucht ein eigenes Inode). Dazu kommt der Speicherplatz für den
Namen der Zieldatei. Prinzipiell wird Plattenplatz an Dateien in Einhei-
ten der Blockgröße des Dateisystems vergeben (also 1 KiB und mehr),
aber im ext2 - und ext3 -Dateisystem gibt es eine spezielle Ausnahme für
»kurze« symbolische Links (kleiner als ca. 60 Bytes), die im Inode selber
gespeichert werden und keinen Datenblock brauchen. Fortgeschrittene
Dateisysteme wie das Reiser-Dateisystem gehen von sich aus sehr ef-
fizient mit kurzen Dateien um, so dass auch dort der Platzbedarf für
symbolische Links vernachlässigbar sein dürfte.
Die ⟨Tests⟩ sollten dabei die Datei so eindeutig wie möglich bestimmen.
Das »-maxdepth 1 « sorgt dafür, dass Unterverzeichnisse nicht durchsucht
werden. Im naheliegendsten Fall verschaffen Sie sich mit »ls -i « die In-
odenummer der Datei (zum Beispiel 4711) und löschen Sie dann mit
426
6.25 Schreiben Sie in die Datei .bash_logout in Ihrem Heimatverzeich-
nis etwas wie
find /tmp -user $LOGNAME -type f -exec rm '{}' \;
oder – effizienter –
find /tmp -user $LOGNAME -type f -print0 \
| xargs -0 -r rm -f
6.27 Direkt nach dem Anlegen steht die neue Datei nicht in der Da-
tenbank und wird entsprechend auch nicht gefunden (Sie müssen erst
updatedb laufen lassen). Die Datenbank bekommt auch nichts davon mit,
dass Sie die Datei gelöscht haben, bis Sie wiederum updatedb aufrufen. –
Am geschicktesten rufen Sie updatedb übrigens nicht direkt auf, sondern
über das Shellskript, das auch Ihre Distribution benutzt (etwa /etc/cron.
daily/find bei Debian GNU/Linux). Auf diese Weise stellen Sie sicher,
dass updatedb dieselben Parameter verwendet wie sonst auch immer.
6.28 slocate sollte nur diejenigen Dateinamen ausgeben, auf die der
aufrufende Benutzer auch zugreifen darf. Die Datei /etc/shadow , in der
die verschlüsselten Kennwörter der Benutzer stehen, ist dem System-
verwalter vorbehalten (siehe auch Linux-Administration I).
427
6.29 Sie sollten mit »whereis « zwei Dateien namens /usr/share/man/man1/
[Link] und /usr/share/man/man5/[Link] finden. Die erstere ent-
hält die Dokumentation für das eigentliche crontab -Kommando, die letz-
tere die Dokumentation für das Dateiformat, das Sie mit crontab anlegen
können. (Die Details sind für diese Aufgabe nicht wichtig; siehe Linux
für Fortgeschrittene.)
7.1 Der reguläre Ausdruck 𝑟+ ist nur eine Abkürzung für 𝑟𝑟* , auf +
könnte man also verzichten. Anders sieht es bei ? aus, dafür gibt es kei-
nen Ersatz, jedenfalls wenn man (wie bei grep vs. egrep ) annehmen muss,
dass man statt 𝑟? auch nicht \(\| 𝑟\) sagen kann (GNU-grep unterstützt
das synonyme 𝑟{,1} – siehe Tabelle 7.1 –, aber die grep -Implementierun-
gen herkömmlicher Unixe kennen das nicht).
7.2 Dafür brauchen Sie eine Musterlösung? Machen Sie sich nicht lä-
cherlich. – Naja … weil Sie’s sind …
7.4 Wir suchen nach Wörtern, die mit einer (möglicherweise leeren)
Folge von Konsonanten anfangen, dann kommt ein »a «, dann wieder
möglicherweise Konsonanten, dann ein »e « und so weiter. Wir müssen
vor allem aufpassen, dass uns keine Vokale »durchrutschen«. Der re-
sultierende reguläre Ausdruck ist relativ unappetitlich, darum erlauben
wir uns eine kleine Schreibvereinfachung:
$ k='[^aeiou]*'
$ grep -i ^${k}a${k}e${k}i${k}o${k}u${k}$ /usr/share/dict/words
abstemious
428
abstemiously
abstentious
acheilous
acheirous
acleistous
affectious
annelidous
arsenious
arterious
bacterious
caesious
facetious
facetiously
fracedinous
majestious
429
}
Gib 𝑙 auf die Standardausgabe aus;
Es würde also nach wie vor erst alles gelesen, dann sortiert (oder eben
nicht sortiert) und dann ausgegeben.
Die andere Erklärung ist, dass zum Zeitpunkt des Lesens des inhalt -
Eintrags wirklich noch nichts in die Datei geschrieben wurde; aus Ef-
fizienzgründen puffern die meisten Programme, wenn sie in Dateien
schreiben sollen, ihre Ausgabe intern zwischen und führen tatsächliche
Betriebssystemaufrufe zum Schreiben erst aus, wenn wirklich substan-
zielle Datenmengen (typischerweise 8192 Bytes) zusammengekommen
sind. Dies läßt sich bei Programmen beobachten, die relativ langsam
sehr viel Ausgabe erzeugen; hier wächst eine Ausgabedatei in Schritten
von 8192 Bytes.
8.4 Die Datei wird von vorne gelesen und gleichzeitig hinten um al-
les Gelesene verlängert, sie wächst also, bis sie allen freien Plattenplatz
einnimmt.
431
8.8 Eine Möglichkeit wäre »head -n 13 | tail -n 1 «.
8.10 tail merkt das, gibt eine Warnung aus und macht am neuen Da-
teiende weiter.
Die erste Zeile kommt vom ersten echo ; das zweite echo überschreibt den
kompletten Inhalt der Datei, aber »tail -f « weiß, dass es die ersten sechs
Zeichen der Datei (»Hallo « plus der Zeilentrenner) schon ausgegeben hat
– es wartet nur darauf, dass die Datei länger wird, und liefert lediglich
das, was neu dazu gekommen ist, nämlich »elt « (und ein Zeilentrenner).
8.14 Die Zeile mit dem Namen »von Traben« wird falsch einsortiert,
weil in ihr das zweite Feld nicht wirklich der Vorname ist, sondern das
Wort »Traben«. Wenn Sie sich die Beispiele genau anschauen, werden
Sie feststellen, dass die Sortierung immer stimmt – nur halt für »Traben«
statt »Gesine«. Dies ist ein eindeutiges Argument für die zweite Form
der Beispieldatei, die mit den Doppelpunkten als Trenner.
8.15 Mit »sort -k 1.4,1.8 « können Sie die Zeilen nach der Jahreszahl
sortieren. Sind zwei Zeilen gemäß dem Sortierschlüssel gleich, macht
sort einen »Notvergleich« über die ganze Zeile, der hier dazu führt, dass
innerhalb der Jahre die Monate korrekt sortiert werden. Wenn Sie gerne
sichergehen und ganz explizit sein möchten, können Sie natürlich auch
»sort -k 1.4,1.8 -k 1.1,1.2 « schreiben.
432
8.19 Benutzen Sie etwas wie
cut -d: -f 4 /etc/passwd | sort -u | wc -l
3. %Hh%Mm%Ss
9.2 Wir wissen das auch nicht genau, aber versuchen Sie mal etwas
wie »TZ=America/Los_Angeles date «.
9.5 Starten Sie eine neue Shell und entfernen Sie die Umgebungsva-
riable PATH aus deren Umgebung, ohne jedoch die Variable selbst zu lö-
schen. Versuchen Sie, externe Programme zu starten. – Wenn PATH gar
nicht existiert, startet die Shell keine externen Programme.
433
9.6 Eine systemunabhängige Musterlösung können wir hierfür leider
nicht geben; probieren Sie es selber aus (mit which ).
9.8 Die Bash verwendet Zeichenfolgen der Form »! ⟨Zeichen⟩« zum Zu-
griff auf alte Kommandos (eine Alternative zu den Tastaturfunktionen
wie Strg + r , die sich aus der C-Shell in die Bash hinübergerettet hat).
Die Zeichenfolge »!" « hat aber keine Funktion, sondern gilt als Syntax-
fehler.
9.9 Keiner.
9.10 Wenn der Dateiname als Parameter übergeben wird, fühlt wc sich
bemüßigt, ihn mit der Zeilenzahl auszugeben. Wenn wc von der Stan-
dardeingabe liest, gibt es nur die reine Zeilenzahl aus.
434
Nach dem shift ist das Suchmuster nicht mehr der erste Parameter, und
das wirkt sich auch auf »for f « aus.
9.12 Der -f -Dateitest bezieht sich, wenn er auf ein symbolisches Link
angewendet wird, auf die Datei (oder Verzeichnis oder was auch im-
mer), auf die das Link zeigt. Er ist also auch dann erfolgreich, wenn der
betrachtete Name eigentlich nur ein symbolisches Link ist. (Warum hat
filetest2 dieses Problem nicht?)
und das ist – in Abhängigkeit von Ihrem PATH – Ihre Antwort. (Wenn Sie
als normaler Benutzer angemeldet sind, dann sind die Programme in
/sbin und /usr/sbin in der Regel nicht dabei.)
10.3 Benutzen Sie statt »grep ⟨Muster⟩ *.txt « das Kommando »grep
⟨Muster⟩ *.txt /dev/null «. Damit hat grep immer mindestens zwei Datei-
namenparameter, wobei /dev/null die Ausgabe nicht weiter verfälscht. –
Die unter Linux gebräuchliche GNU-Implementierung von grep unter-
stützt eine Option -H , die dasselbe bewirkt, aber das ist nicht portabel.
435
10.4 Bei cp auf eine existierende Zieldatei wird die Datei zum Schrei-
ben geöffnet und auf die Länge 0 gesetzt, bevor die Quelldaten hineinge-
schrieben werden. Bei /dev/null führt das nur dazu, dass die Quelldaten
verschwinden. Bei mv auf eine existierende Zieldatei wird die Zieldatei
jedoch erst gelöscht – und das ist eine Verzeichnisoperation, die unge-
achtet der besonderen Natur von /dev/null einfach den Namen null aus
dem Verzeichnis /dev entfernt und eine neue Datei namens null mit dem
Inhalt von [Link] dort anlegt.
10.6 Es ist unklug, weil es zum einen nicht richtig funktioniert, zum
zweiten die Daten sowieso nicht sichernswert sind, weil sie sich stän-
dig ändern (man verschwendet also jede Menge Platz auf dem Siche-
rungsmedium und Zeit zum Kopieren), und zum dritten eine solche
Sicherheitskopie überhaupt nicht wieder eingespielt werden kann. Un-
kontrollierte Schreibvorgänge zum Beispiel auf /proc/kcore führen mit
an Sicherheit grenzender Wahrscheinlichkeit zum Systemabsturz.
11.3 Verwenden Sie dazu die Kommandos »ls -l >inhalt « und »tar
-cvf [Link] inhalt «.
Sie werden feststellen, dass das Archiv wesent-
lich größer als das Original ist. Das liegt an den Metadaten des Archivs.
tar komprimiert nicht, sondern archiviert. Aus einer Datei ein Archiv,
das heißt eine Datei zu erstellen, ist nicht wirklich eine brauchbare Idee.
436
11.4 Geben Sie beispielsweise »touch datei{1,2,3} « und »tar -rvf inhalt.
tar datei* «
ein.
11.6 Wenn Sie etc- [Link] auf dem anderen Rechner auspacken (et-
wa weil Sie nachschauen möchten, was drinsteht) und das Archiv abso-
lute Pfadnamen enthält, werden die Daten nicht in ein Unterverzeich-
nis etc des aktuellen Verzeichnisses geschrieben, sondern sie landen im
/etc -Verzeichnis des anderen Rechners. Das ist mit großer Wahrschein-
lichkeit nicht das, was Sie haben wollen. (Natürlich sollten Sie darauf
achten, beim Auspacken eines Archivs mit relativen Pfadnamen nicht ge-
rade in / zu stehen.)
11.7 Falls Sie gzip verwenden möchten, geben Sie »gzip -9 [Link] «
ein.
11.8 Achtung, für mit gzip komprimierte tar -Archive brauchen Sie
zum Manipulieren mit tar die zusätzliche Option -z : »tar -tzf [Link] «
Um das ursprüngliche Archiv wieder herzustellen, benötigen Sie das
Kommando »gunzip [Link] «.
11.11 unzip bietet Ihnen an, die Datei im Archiv zu ignorieren oder
umzubenennen oder die existierende Datei zu überschreiben.
437
11.12 Probieren Sie etwas wie
$ unzip [Link] "a/*" -x "*/*.c"
12.1 Ein einfaches su (ohne /bin/ davor) würde im Prinzip auch klap-
pen. Allerdings ist es sinnvoll, sich das /bin/su anzugewöhnen, weil Sie
dadurch besser gegen »trojanische Pferde« geschützt sind: Ein cleverer
Benutzer könnte in einem Verzeichnis in seinem $PATH ein Programm un-
terbringen, das su heißt und vor dem in /bin gefunden wird. Dann ruft er
Sie wegen irgendeinem vorgeschützten Problem an seinen Rechner, Sie
sagen sich »Das habe ich gleich, ich leihe mir nur mal die Terminalsit-
zung hier aus, um kurz root zu werden«, rufen nichtsahnend »su « auf,
und das Programm Ihres cleveren Benutzers fragt Sie nach dem root -
Kennwort, so wie das echte su es auch machen würde. Bis darauf, dass
es das Kennwort irgendwo in eine Datei sichert, eine Fehlermeldung
ausgibt und sich selbst löscht. Sie denken natürlich, dass Sie sich beim
Kennwort vertippt haben, rufen nochmal »su « auf, bekommen diesmal
das echte Programm und ab hier ist alles OK – bis darauf, dass Ihr cle-
verer Benutzer jetzt das root -Kennwort weiß. Wenn Sie von Anfang an
»/bin/su « benutzen, kann dieser Angriff nicht so einfach funktionieren.
Und auf einem Debian-artigen System sollten Sie etwas verwenden wie
13.2 Das funktioniert, ist aber nicht notwendigerweise eine gute Idee.
Für das System ist das dann derselbe Benutzer, das heißt, alle Dateien
und Prozesse mit der entsprechenden UID gehören beiden Benutzern.
13.4 Wer in der Gruppe disk ist, hat Lese- und Schreibrecht auf die
Platten auf Blockebene. Mit Kenntnissen über die Dateisystemstruktur
ist es einfach, eine Kopie von /bin/sh zu einer SUID-root -Shell (Ab-
schnitt 14.4) zu machen, indem man direkt die Verwaltungsinformatio-
nen auf der Platte ändert. Damit ist Mitgliedschaft in der Gruppe disk
im Wesentlichen äquivalent zu root -Rechten; Sie sollten niemanden in
die Gruppe disk aufnehmen, dem Sie nicht das root -Kennwort verraten
würden.
439
13.5 Dort finden Sie in der Regel ein »x «. Das ist ein Verweis, dass das
Kennwort, welches normalerweise dort stehen würde, in einer anderen
Datei steht, nämlich in der /etc/shadow , die im Gegensatz zu der ersten
Datei nur für root lesbar ist.
13.7 Verwenden Sie den Befehl passwd , wenn Sie als Benutzer hugo ein-
geloggt sind oder »passwd hugo « als root . In der Datei sollte dann ein an-
derer Eintrag im zweiten Feld auftauchen, das Datum der letzten Kenn-
wortänderung (Feld 3) sollte das aktuelle Datum tragen (in welcher Ein-
heit?).
440
13.8 Sie geben ihm mit »passwd trottel « als root ein neues Kennwort,
denn lesen können Sie sein altes auch mit root -Rechten nicht.
13.11 Für jedes der drei Konten sollte je eine Zeile in /etc/passwd und in
/etc/shadowvorhanden sein. Um mit den Konten arbeiten zu können, be-
nötigen Sie nicht unbedingt ein Kennwort (Sie können als root das Pro-
gramm su verwenden), wohl aber, um sich unter der neuen Kennung
einzuloggen. Eine Datei können Sie auch ohne Heimatverzeichnis anle-
gen und zwar in /tmp (falls Sie es vergessen haben, ein Heimatverzeichnis
wäre für einen Benutzer aber schon nicht schlecht).
13.12 Verwenden Sie zum Löschen den Befehl userdel . Um die Dateien
zu löschen verwenden Sie das Kommando »find / -uid ⟨UID⟩ -delete « .
13.13 Verwenden Sie »usermod -u «, dann müssen Sie die Dateien des
Benutzers der neuen UID zuordnen, zum Beispiel mit »find / -uid
⟨UID⟩ -exec chown test1 {} ';' « oder (besser) »chown -R --from= ⟨UID⟩
test1 / «. ⟨UID⟩ ist dabei jeweils die (numerische) alte UID.
441
13.14 Sie können dazu unter anderem /etc/passwd mit vipw editieren,
oder Sie verwenden usermod .
# groupadd test
# gpasswd -a test1 test
Adding user test1 to group test
# gpasswd -a test2 test
Adding user test2 to group test
# gpasswd test
Changing the password for group test
New Password:[Link]/y
Re-enter new password:[Link]/y
442
14.1 Eine neue Datei bekommt die Gruppe, die gerade Ihre primäre
Gruppe ist. Sie können eine Datei keiner Gruppe zuordnen, in der Sie
nicht selber Mitglied sind – es sei denn, Sie sind root .
14.3 Hierbei handelt es sich um das SUID- bzw. SGID-Bit. Die Bits
bewirken, dass ein Prozess die UID/GID der ausführbaren Datei und
nicht des ausführenden Benutzers bekommt. Sie bekommen es mit »ls
-l « angezeigt. Selbstverständlich können Sie alle Rechte von eigenen Da-
teien ändern. Sinnvoll ist zumindest das SUID-Bit aber nur bei echten
ausführbaren Dateien, also nicht bei Shell-Skripten o.ä.
$ umask 007
$ umask -S u=rwx,g=rwx
Sie werden sich vielleicht fragen, was die x -Bits in dieser umask zu su-
chen haben. Für Dateien sind sie in der Tat nicht relevant, da Datei-
en standardmäßig nicht ausführbar erzeugt werden. Allerdings könnte
es sein, dass im Projektverzeichnis auch Unterverzeichnisse erwünscht
sind, und dann ist es sinnvoll, diese gleich so mit Rechten zu versehen,
dass man mit ihnen auch vernünftig arbeiten kann.
443
14.7 Mit der Bash funktioniert das nicht (jedenfalls nicht ohne Weite-
res). Für andere Shells können wir hier nicht sprechen.
15.2 1022 (= 232−22 − 2). Ein nützliches Programm für solche Berech-
nungen – wenn Sie sie nicht im Kopf machen mögen – heißt ipcalc .
15.3 Sie müssen eine Adresse in Deutschland haben und zwei Name-
server angeben können, die die DNS-Daten für die Domain vorhalten.
Normalerweise registrieren Sie de -Namen nicht direkt, sondern über Ih-
ren Internet-Anbieter oder eine andere Firma, die solche Dienstleistun-
gen übernimmt (die zulässige Vergabestelle, das DENIC, redet nicht ger-
ne mit Privatleuten und schreckt diese darum durch absolut astrono-
misch exorbitant wuchermäßige Mondpreise für eine Leistung ab, für
die die anderen Firmen fünf Euro im Jahr oder so verlangen). Diese Fir-
men stellen Ihnen in der Regel gerne die Nameserver zur Verfügung und
bieten unter Umständen sogar einen »Treuhandservice« an, bei dem ein
in Deutschland ansässiger Treuhänder als Domain-»Eigentümer« fun-
giert, wenn Sie nicht selbst in Deutschland wohnen. Außerdem muss
der Domainname anderweitig unbenutzt sein und darf nur Buchstaben,
Ziffern, den Punkt, das Minuszeichen und die in der deutschen Spra-
che üblichen Umlaute enthalten. Manche Namen, insbesondere solche,
die man in die Nähe nationalsozialistischer Propaganda rücken könnte,
werden vom DENIC nicht registriert oder, falls sie doch registriert wur-
den und jemandem auffallen, wieder entfernt – aber dafür gibt es keine
festen Regeln.
444
B Beispieldateien
Als Beispiel verwenden wir an verschiedenen Stellen das Märchen
vom Froschkönig, genauer gesagt »Der Froschkönig oder der eiserne
Heinrich«, aus den »Deutschen Kinder- und Hausmärchen« der Gebrü-
der Grimm. Das Märchen drucken wir hier ganz und in der kompletten
Form so wie in der Datei ab, um Vergleiche mit den Beispielen zuzulas-
sen.
In alten Zeiten, als das Wünschen noch geholfen hat, lebte einmal ein
König, der hatte wunderschöne Töchter. Die jüngste von ihnen war so
schön, daß die Sonne selber, die doch so vieles schon gesehen hat,
sich verwunderte, sooft sie ihr ins Gesicht schien.
Nahe bei dem Schlosse war ein großer, dunkler Wald, und mitten darin,
unter einer alten Linde, war ein Brunnen. Wenn nun der Tag recht heiß war,
ging die jüngste Prinzessin hinaus in den Wald und setzte sich an den Rand
des kühlen Brunnens. Und wenn sie Langeweile hatte, nahm sie eine
goldene Kugel, warf sie in die Höhe und fing sie wieder auf. Das war
ihr liebstes Spiel.
Nun trug es sich einmal zu, daß die goldene Kugel der Königstochter
nicht in die Händchen fiel, sondern auf die Erde schlug und gerade in
den Brunnen hineinrollte. Die Königstochter folgte ihr mit den Augen
nach, aber die Kugel verschwand, und der Brunnen war tief, so tief,
daß man keinen Grund sah.
Da fing die Prinzessin an zu weinen und weinte immer lauter und konnte
sich gar nicht trösten. Als sie so klagte, rief ihr plötzlich jemand
zu: »Was hast du nur, Königstochter? Du schreist ja, daß sich ein
Stein erbarmen möchte.«
Sie sah sich um, woher die Stimme käme, da erblickte sie einen Frosch,
der seinen dicken, häßlichen Kopf aus dem Wasser streckte. »Ach, du
bist's, alter Wasserpatscher«, sagte sie. »Ich weine über meine
goldene Kugel, die mir in den Brunnen hinabgefallen ist.«
»Sei still und weine nicht«, antwortete der Frosch, »ich kann wohl Rat
schaffen. Aber was gibst du mir, wenn ich dein Spielzeug wieder
heraufhole?«
»Was du haben willst, lieber Frosch«, sagte sie, »meine Kleider, meine
Perlen und Edelsteine, auch noch die goldene Krone, die ich trage.«
Der Frosch antwortete: »Deine Kleider, deine Perlen und Edelsteine und
deine goldene Krone, die mag ich nicht. Aber wenn du mich liebhaben
willst und ich dein Geselle und Spielkamerad sein darf, wenn ich an
deinem Tischlein neben dir sitzen, von deinem goldenen Tellerlein
essen, aus deinem Becherlein trinken, in deinem Bettlein schlafen
darf, dann will ich hinuntersteigen und dir die goldene Kugel
heraufholen.«
»Ach, ja«, sagte sie, »ich verspreche dir alles, was du willst, wenn
du mir nur die Kugel wiederbringst.« Sie dachte aber, der einfältige
Frosch mag schwätzen, was er will, der sitzt doch im Wasser bei
seinesgleichen und quakt und kann keines Menschen Geselle sein!
446
»Warte, warte!« rief der Frosch. »Nimm mich mit, ich kann nicht so
laufen wie du!« Aber was half es ihm, daß er ihr sein Quak-quak so
laut nachschrie, wie er nur konnte! Sie hörte nicht darauf, eilte nach
Hause und hatte den Frosch bald vergessen.
Am andern Tag, als sie sich mit dem König und allen Hofleuten zur
Tafel gesetzt hatte und eben von ihrem goldenen Tellerlein aß, da kam,
plitsch platsch, plitsch platsch, etwas die Marmortreppe
heraufgekrochen. Als es oben angelangt war, klopfte es an die Tür und
rief. »Königstochter, jüngste, mach mir auf«
Sie lief und wollte sehen, wer draußen wäre. Als sie aber aufmachte,
saß der Frosch vor der Tür. Da warf sie die Tür hastig zu, setzte sich
wieder an den Tisch, und es war ihr ganz ängstlich zumute.
Der König sah wohl, daß ihr das Herz gewaltig klopfte, und sprach:
»Mein Kind, was fürchtest du dich? Steht etwa ein Riese vor der Tür
und will dich holen?«
»Ach, nein«, antwortete sie, »es ist kein Riese, sondern ein garstiger
Frosch.«
»Ach, lieber Vater, als ich gestern im Wald bei dem Brunnen saß und
spielte, fiel meine goldene Kugel ins Wasser. Als ich deshalb weinte,
hat sie mir der Frosch heraufgeholt. Und weil er es durchaus
verlangte, versprach ich ihm, er sollte mein Spielgefährte werden. Ich
dachte aber nimmermehr, daß er aus seinem Wasser käme. Nun ist er
draußen und will zu mir herein.«
»Königstochter, jüngste,
447
Mach mir auf!
Weißt du nicht, was gestern
Du zu mir gesagt
Bei dem kühlen Brunnenwasser?
Königstochter, jüngste,
Mach mir auf!«
Da sagte der König: »Was du versprochen hast, das mußt du auch halten!
Geh nur und mach ihm auf!«
Sie ging und öffnete die Tür. Da hüpfte der Frosch herein und hüpfte
ihr immer nach bis zu ihrem Stuhl. Dort blieb er sitzen und rief: »Heb
mich hinauf zu dir!« Sie zauderte, bis es endlich der König
befahl. Als der Frosch auf dem Stuhl war, wollte er auf den Tisch, und
als er da saß, sprach er: »Nun schieb mir dein goldenes Tellerlein
näher, damit wir mitsammen essen können.« Der Frosch ließ sich's gut
schmecken, ihr aber blieb fast jeder Bissen im Halse stecken.
Endlich sprach der Frosch: »Ich habe mich satt gegessen und bin
müde. Nun trag mich in dein Kämmerlein und mach dein seidenes Bettlein
zurecht!« Die Königstochter fing an zu weinen und fürchtete sich vor
dem kalten Frosch, den sie sich nicht anzurühren getraute und der nun
in ihrem schönen, reinen Bettlein schlafen sollte.
Der König aber wurde zornig und sprach: »Wer dir geholfen hat, als du
in Not warst, den sollst du hernach nicht verachten!«
Da packte sie den Frosch mit zwei Fingern, trug ihn hinauf in ihr
Kämmerlein und setzte ihn dort in eine Ecke. Als sie aber im Bette
lag, kam er gekrochen und sprach: »Ich will schlafen so gut wie
du. Heb mich hinauf, oder ich sag's deinem Vater!«
Da wurde sie bitterböse, holte ihn herauf und warf ihn gegen die
Wand. »Nun wirst du Ruhe geben«, sagte sie, »du garstiger Frosch!« Als
448
er aber herabfiel, war er kein Frosch mehr, sondern ein Königssohn mit
schönen freundlichen Augen. Der war nun nach ihres Vaters Willen ihr
lieber Geselle und Gemahl. Er erzählte ihr, er wäre von einer bösen
Hexe verwünscht worden, und niemand hätte ihn aus dem Brunnen erlösen
können als sie allein, und morgen wollten sie mitsammen in sein Reich
gehen.
Und wirklich, am anderen Morgen kam ein Wagen herangefahren, mit acht
weißen Pferden bespannt, die hatten weiße Straußfedern auf dem Kopf
und gingen in goldenen Ketten. Hinten auf dem Wagen aber stand der
Diener des jungen Königs, das war der treue Heinrich.
Der treue Heinrich hatte sich so gekränkt, als sein Herr in einen
Frosch verwandelt worden war, daß er drei eiserne Bänder um sein Herz
hatte legen lassen, damit es ihm nicht vor Weh und Traurigkeit
zerspränge.
Der Wagen sollte nun den jungen König in sein Reich holen. Der treue
Heinrich hob ihn und seine junge Gemahlin hinein, stellte sich wieder
hinten hinauf und war voll Freude über die Erlösung seines Herrn. Als
sie ein Stück des Weges gefahren waren, hörte der Königssohn, daß es
hinter ihm krachte, als ob etwas zerbrochen wäre. Da drehte er sich um
und rief:
Noch einmal und noch einmal krachte es auf dem Weg, und der Königssohn
meinte immer, der Wagen bräche. Doch es waren nur die Bänder, die vom
Herzen des treuen Heinrich absprangen, weil sein Herr nun erlöst und
449
glücklich war.
(Die Linup Front GmbH weist ausdrücklich darauf hin, dass die Au-
toren dieser Dokumentation jegliche Tierquälerei verurteilen.)
450
C Linux-
Essentials-Zertifizierung
Das Linux Professional Institute (LPI) ist eine herstellerunabhängige,
nicht profitorientierte Organisation, die sich der Förderung des profes-
sionellen Einsatzes von Linux widmet. Ein Aspekt der Arbeit des LPI ist
die Erstellung und Durchführung weltweit anerkannter, distributions-
unabhängiger Zertifizierungsprüfungen beispielsweise für Linux-Sys-
temadministratoren.
Diese Schulungsunterlage dient zur Vorbereitung auf das Linux-Es-
sentials-Zertifikat. Das LPI schreibt auf seiner Web-Seite hierzu:
Das Ziel des Linux-Essentials-Zertifikats ist, das Grundwis-
sen zu definieren, das für die kompetente Nutzung eines
Linux-Betriebssystems auf einem Desktop-Computersystem
oder auf einem mobilen Gerät notwendig ist. Das dazuge-
hörende Linux-Essentials-Programm wird Jugendlichen und
denjenigen, für die Linux und Open Source neu ist, helfen
und sie dabei unterstützen, den Platz von Linux und Open
Source im größeren Kontext der IT-Branche zu verstehen.
Das LPI hat das für die Prüfung erforderliche Wissen in Form von Prü-
fungszielen (objectives) zusammengestellt und auf seinen Web-Seiten
unter [Link] veröffentlicht.
Der folgenden Tabelle können Sie entnehmen, welche Kapitel in der
Schulungsunterlage den Inhalt welcher Prüfungsziele abdecken. Die
Prüfungsziele selbst sind im Anschluss abgedruckt. Beachten Sie, dass
die Linux-Essentials-Prüfungsziele nicht dazu geeignet oder vorgesehen
sind, einen Einführungskurs in Linux didaktisch zu strukturieren. Aus
diesem Grund orientiert diese Unterlage sich nicht an der Reihenfol-
ge der Prüfungsziele in der Veröffentlichung des LPI, sondern weicht
im Interesse einer verständlicheren und logisch so weit wie möglich
aufeinander aufbauenden Präsentation davon ab.
A Beachten Sie, dass die Prüfungsziele auf den Web-Seiten des LPI
gelegentlich modifiziert werden und zum Beispiel zusätzliche
Informationen dort erscheinen können, die es möglicherweise
(noch) nicht in diese Schulungsunterlage geschafft haben. Lesen
Sie zur Sicherheit die Prüfungsziele beim LPI nach.
Die folgende Tabelle zeigt die Prüfungsziele der Prüfung Linux Es-
sentials und die Kapitel, die diese Prüfungsziele abdecken. Die Zahlen
in der rechten Spalte verweisen auf die Kapitel, die das entsprechende
Material enthalten.
452
Nr Gew Titel LXES
1.1 2 Linux Entwicklung und gängige Betriebssys- 2
teme
1.2 2 Wichtige Open-Source-Anwendungen 2
1.3 1 Open-Source-Software und Lizenzen verste- 2
hen
1.4 2 IuK-Kenntnisse und Arbeiten mit Linux 2–3, 13
2.1 2 Erste Schritte auf der Kommandozeile 4, 6, 9
2.2 2 Die Kommandozeile benutzen, um Hilfe zu 5
finden
2.3 2 Verzeichnisse und Protokolldateien nutzen 6
2.4 2 Erstellen, Verschieben und Löschen von Da- 6
teien
3.1 2 Archivierung von Dateien auf der Komman- 11
dozeile
3.2 4 Suche und Entnahme von Daten aus Dateien 7–8
3.3 4 Befehle in ein Skript umwandeln 3, 9
4.1 1 Wahl eines Betriebssystems 1–2
4.2 2 Computer-Hardware verstehen 1
4.3 3 Datenspeicherung 10
4.4 2 Den Computer ins Netz einbinden 15
5.1 2 Grundlegende Sicherheit und Identifizieren 10, 13
von Benutzertypen
5.2 2 Benutzer und Gruppen erstellen 13
5.3 2 Einstellungen für Dateiberechtigungen und 14
Dateieigentum
5.4 1 Besondere Verzeichnisse und Dateien 6, 10, 14
453
C.2 Prüfungsziele für Linux Essentials
• Android
• Debian
• CentOS
• Lizenzen
• Free Software Foundation (FSF), Open Source Initiative (OSI)
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
Gut zu wissen:
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• Shell-Grundkenntnisse
• Kommandos eingeben und strukturieren
• Mit Optionen arbeiten
• Variable
• Globbing, Wildcard
• Quoting
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• echo
• history
456
• Umgebungsvariable PATH
• which
Gut zu wissen:
• Variablenersetzung
• Steuerungsoperatoren || , && und ;
• Man
• Info
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• man
• info
• Handbuchseiten (man pages)
• /usr/share/doc
• locate
Gut zu wissen:
457
2.3 Verzeichnisse und Protokolldateien nutzen
Gewicht 2
Beschreibung Navigieren in Home- und System-Verzeichnissen und
Protokolldateien an verschiedenen Orten.
Hauptwissensgebiete:
• Dateien, Verzeichnisse
• Versteckte Dateien und Verzeichnisse
• Home
• Absolute und relative Pfade
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
458
• mv , cp , rm , touch
• mkdir , rmdir
• Dateien, Verzeichnisse
• Archive, Komprimieren
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• tar
• Gängige tar -Optionen
• gzip , bzip2
• zip , unzip
Gut zu wissen:
• Kommando-Pipelines
• Eingabe-/Ausgabe-Umleitung
• Wichtigste POSIX-konforme reguläre Ausdrücke (. , [ ] , * , ? )
459
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• find
• grep
• less
• head , tail
• sort
• cut
• wc
Gut zu wissen:
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• /bin/sh
• Variable
• Argumente
• for -Schleifen
460
• echo
• Rückgabewert
• pico , nano , vi (Grundlagen
Gut zu wissen:
• Bash
• if -, while - und case -Kommandos
• Kommandos read , test und [
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• Hardware
461
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
4.3 Datenspeicherung
Gewicht 3
Beschreibung Wo verschiedene Arten von Informationen in einen
Linux-System gespeichert werden.
Hauptwissensgebiete
• Kernel
• Prozess
• syslog , klog , dmesg
• /lib , /usr/lib , /etc , /var/log
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• route
• [Link]
• IPv4, IPv6
• ifconfig
• netstat
• ping
Gut zu wissen:
• ssh
• dig
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• /etc/passwd , /etc/group
463
• id , who , w
• sudo
Gut zu wissen:
• su
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
Gut zu wissen:
• usermod , userdel
• groupmod , groupdel
464
Beschreibung Verstehen und Bearbeiten von Dateiberechtigungen und
Eigentumseinstellungen.
Hauptwissensgebiete
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• ls -l
• chmod , chown
Gut zu wissen:
• chgrp
• Systemdateien, Bibliotheken
• Symbolische Links
Hier ist eine auszugsweise Liste der verwendeten Dateien, Begriffe und
Hilfsprogramme:
• /etc , /var
• /tmp , /var/tmp und Sticky Bit
• ls -d
• ln -s
Gut zu wissen:
465
• Hardlinks
• Setuid/Setgid
466
D Kommando-Index
Dieser Anhang fasst alle im Text erklärten Kommandos zusammen
und verweist auf deren Dokumentation sowie die Stellen im Text, wo
die Kommandos eingeführt werden.
. Liest eine Datei mit Shell-Kommandos so ein, als ob sie auf der
Kommandozeile eingegeben worden wäre bash (1) 251
adduser Komfortables Kommando zum Anlegen neuer Benutzerkonten
(Debian) adduser (8) 361
apropos Zeigt alle Handbuchseiten mit dem angegebenen Stichwort im
NAME“-Abschnitt apropos (1) 126
”
bash Die Bourne-Again-Shell“, ein interaktiver Kommandointer-
”
preter bash (1) 109
bunzip2 Entkomprimierungsprogramm für .bz2 -Dateien
bzip2 (1) 303
bzip2 Komprimierungsprogramm bzip2 (1) 302
cat Hängt Dateien aneinander cat (1) 213
cd Wechselt das aktuelle Arbeitsverzeichnis der Shell
bash (1) 146
chage Setzt Kennwort-Attribute wie Ablaufdatum und Änderungs-
fristen chage (1) 363
chfn Erlaubt Benutzern das Ändern des GECOS-Felds in der Benut-
zerdatenbank chfn (1) 347
chgrp Setzt Gruppenzugehörigkeit von Dateien und Verzeichnissen
chgrp (1) 380
chmod Setzt Rechte für Dateien und Verzeichnisse chmod (1) 377
chown Setzt Eigentümer und Gruppenzugehörigkeit für Dateien und
Verzeichnisse chown (1) 379
convmv Konvertiert Dateinamen zwischen Zeichenkodierungen
convmv (1) 140
cp Kopiert Dateien cp (1) 160
cut Extrahiert Felder oder Spalten aus seiner Eingabe
cut (1) 226
date Gibt Datum und Uhrzeit aus date (1) 115, 236
dig Sucht Informationen im DNS (sehr komfortabel) dig (1) 412
dmesg Gibt den Inhalt des Kernel-Nachrichtenpuffers aus
dmesg (8) 279
dpkg Verwaltungswerkzeug für Debian-GNU/Linux-Pakete
dpkg (8) 330
echo Gibt alle seine Parameter durch Leerzeichen getrennt auf der
Standardausgabe aus bash (1), echo (1) 115
egrep Sucht in Dateien nach Zeilen mit bestimmtem Inhalt, erweiterte
reguläre Ausdrücke erlaubt grep (1) 192
env Gibt die Prozessumgebung aus oder startet Programme mit
veränderter Umgebung env (1) 239
export Definiert und verwaltet Umgebungsvariable bash (1) 238
fgrep Sucht in Dateien nach Zeilen bestimmten Inhalts, keine regulä-
ren Ausdrücke erlaubt fgrep (1) 192
file Rät den Typ einer Datei anhand des Inhalts file (1) 263
find Sucht nach Dateien, die bestimmte Kriterien erfüllen
find (1), Info: find 173
free Zeigt die Speicherauslastung und die Auslastung des Swap-Be-
reichs an free (1) 277, 323
gpasswd Erlaubt Verwaltung von Gruppenmitgliederlisten durch Grup-
penadministratoren und das Setzen des Gruppenkennworts
gpasswd (1) 369
grep Sucht in Dateien nach Zeilen mit bestimmtem Inhalt
grep (1) 192
groff Programm zur druckreifen Aufbereitung von Texten
groff (1) 124
groupadd Fügt Gruppen in die Gruppendatenbank ein
groupadd (8) 368
groupdel Löscht Gruppen aus der Gruppendatenbank
groupdel (8) 369
468
groupmod Ändert Gruppeneinträge in der Gruppendatenbank
groupmod (8) 368
groups Gibt die Gruppen aus, in denen ein Benutzer Mitglied ist
groups (1) 340
gunzip Entkomprimierungsprogramm für .gz -Dateien gzip (1) 300
hash Zeigt und verwaltet gesehene“ Kommandos in der bash
”
bash (1) 243
head Zeigt den Anfang einer Datei an head (1) 214
help Zeigt Hilfe für bash -Kommandos bash (1) 116, 122
id Gibt UID und GIDs eines Benutzers aus id (1) 339
ifconfig Konfiguriert Netzwerk-Schnittstellen ifconfig (8) 405, 407
info Zeigt GNU-Info-Seiten auf einem Textterminal an
info (1) 129
klogd Akzeptiert Protokollnachrichten des Systemkerns
klogd (8) 279
konsole Ein Terminalemulator“ für KDE KDE: help:/konsole 112
”
last Zeige zuletzt angemeldete Benutzer an last (1) 340
less Zeigt Texte (etwa Handbuchseiten) seitenweise an
less (1) 126, 171
ln Stellt ( harte“ oder symbolische) Links her ln (1) 165
”
locate Sucht Dateien über ihren Namen in einer Dateinamensdaten-
bank locate (1) 179
logout Beendet eine Sitzung ( Abmelden“) bash (1) 91
”
ls Listet Dateien oder den Inhalt von Verzeichnissen auf
ls (1) 147
man Zeigt Handbuchseiten des Systems an man (1) 123
manpath Bestimmt den Suchpfad für Handbuchseiten manpath (1) 125
mkdir Legt neue Verzeichnisse an mkdir (1) 151
mkfifo Legt FIFOs (benannte Pipes) an mkfifo (1) 266
mknod Legt Gerätedateien an mknod (1) 265
more Zeigt Textdaten seitenweise an more (1) 171
mv Verschiebt Dateien in andere Verzeichnisse oder benennt sie
um mv (1) 162
469
netstat Liefert Informationen über Netzverbindungen, Server, Routing
netstat (8) 414
paste Fügt verschiedene Eingabedateien zeilenweise aneinander
paste (1) 229
pico Sehr einfacher Texteditor aus dem PINE/Alpine-Paket
pico (1) 98
ping Prüft grundlegende Netzwerk-Konnektivität mit ICMP
ping (8) 408
ping6 Prüft grundlegende Netzwerk-Konnektivität (für IPv6)
ping (8) 411
ps Gibt Prozess-Statusinformationen aus ps (1) 321
pwd Gibt den Namen des aktuellen Arbeitsverzeichnisses aus
pwd (1), bash (1) 146
reset Setzt den Bildschirmzeichensatz auf einen vernünftigen“ Wert
”
tset (1) 213
rm Löscht Dateien oder Verzeichnisse rm (1) 163
rmdir Entfernt (leere) Verzeichnisse rmdir (1) 151
route Verwaltet die statische Routing-Tabelle im Linux-Kern
route (8) 406
rpm Dient zur Paketverwaltung in vielen Linux-Systemen (Red Hat,
SUSE, …) rpm (8) 330
set Verwaltet Shellvariable bash (1) 239
slocate Sucht Dateien über ihren Namen in einer Datenbank und be-
achtet dabei deren Zugriffsrechte slocate (1) 182
sort Sortiert die Zeilen seiner Eingabe sort (1) 217
source Liest eine Datei mit Shell-Kommandos so ein, als ob sie auf der
Kommandozeile eingegeben worden wäre bash (1) 251
split Teilt Dateien in Stücke bis zu einer gegebenen Größe auf
split (1) 293
su Startet eine Shell unter der Identität eines anderen Benutzers
su (1) 315
sudo Erlaubt normalen Benutzern das Aufrufen bestimmter Kom-
mandos mit Administratorprivilegien sudo (8) 315
syslogd Bearbeitet Systemprotokoll-Meldungen syslogd (8) 279
470
tail Zeigt das Ende einer Datei an tail (1) 214
tar Dateiarchivierungsprogramm tar (1) 293
tee Kopiert die Standardeingabe in die Standardausgabe und au-
ßerdem in Dateien tee (1) 209
test Wertet logische Ausdrücke auf der Kommandozeile aus
test (1), bash (1) 255
top Bildschirmorientiertes Programm zur Prozessbeobachtung
und -verwaltung top (1) 325
type Bestimmt die Art eines Kommandos (intern, extern, Alias)
bash (1) 115
uniq Ersetzt Folgen von gleichen Zeilen in der Eingabe durch die
erste solche uniq (1) 224
unset Löscht Shell- oder Umgebungsvariable bash (1) 240
unzip Entkomprimierungsprogramm für (Windows-)ZIP-Archive
unzip (1) 306
updatedb Erstellt die Dateinamensdatenbank für locate
updatedb (1) 181
uptime Gibt die Zeit seit dem letzten Systemstart sowie die CPU-Aus-
lastung aus uptime (1) 277
useradd Fügt neue Benutzerkonten hinzu useradd (8) 359
userdel Entfernt Benutzerkonten userdel (8) 365
usermod Modifiziert die Benutzerdatenbank usermod (8) 366
vi Bildschirmorientierter Texteditor vi (1) 98
vigr Erlaubt das exklusive Ändern von /etc/group bzw. /etc/gshadow
vipw (8) 369
whatis Sucht Handbuchseiten mit dem gegebenen Stichwort in der Be-
schreibung whatis (1) 126
whereis Sucht ausführbare Programme, Handbuchseiten und Quell-
code zu gegebenen Kommandos whereis (1) 244
which Sucht Programme in PATH which (1) 243
xargs Konstruiert Kommandozeilen aus seiner Standardeingabe
xargs (1), Info: find 178
xterm Ein Terminalemulator“ für das X-Window-System
”
xterm (1) 112
471
zip Archivierungs- und Komprimierungsprogramm à la PKZIP
zip (1) 304
472
D Index
Dieser Index verweist auf die wichtigsten Stichwörter in der Schu-
lungsunterlage. Besonders wichtige Stellen für die einzelnen Stichwör-
ter sind durch fette Seitenzahlen gekennzeichnet. Sortiert wird nur nach
den Buchstaben im Indexeintrag; ~/.bashrc“ wird also unter B“ einge-
” ”
ordnet.
474
/etc/group , 342, 346, 354–356, 358, fgrep , 192–193, 244
365–366, 368–369 FHS, 268
/etc/gshadow , 355–356, 368–369, file , 263
371, 471 Filterkommandos, 211
/etc/hosts , 273 find , 173, 176–179, 427
/etc/init.d , 273 -exec (Option), 177–178
/etc/inittab , 273 -maxdepth (Option), 426
/etc/issue , 273 -name (Option), 427
/etc/magic , 263 -ok (Option), 177
/etc/motd , 274 -print (Option), 173, 177–178
/etc/mtab , 274 -print0 (Option), 178
/etc/network/interfaces , 405 finger , 347
/etc/passwd , 196, 209, 231, 274, 317, Firmware, 30
342, 344–346, 348–350, Fox, Brian, 109
354–358, 361, 364–367, Freax, 42
441–442 free , 277, 323–326
/etc/rc.d/init.d , 273 -h (Option), 324
/etc/[Link] , 406, 413 --si (Option), 324
/etc/services , 414 Freeware, 58
/etc/shadow , 183, 274, 345, 349–352, [Link] , 194
355, 358, 362–365, 367, fstab , 319
372, 383, 427, 440–441
/etc/shells , 347 Gailly, Jean-loup, 299
/etc/skel , 359 Gates, Bill, 49
/etc/sysconfig/locate , 181 gcc , 139
/etc/[Link] , 181 Gerätenummer, 272
Ewing, Larry, 42 GNOME, 92
Ewing, Marc, 73 GNU Emacs, 70
exit , 110, 115, 248 Google, 33, 70
export , 238–240 gpasswd , 369
-n (Option), 240 -A (Option), 369
-a (Option), 369
FAQ, 133 -d (Option), 369
Fedora, 73 grep , 124, 190, 192–196, 200, 211,
475
214, 226, 270, 283, 326, head , 214–215
428, 435 -c (Option), 215
--color (Option), 195 -n (Option), 214
-f (Option), 193 - 𝑛 (Option), 215
-H (Option), 435 Heimatverzeichnis, 338
groff , 125–124, 129 help , 116, 122, 243
groupadd , 368 /home , 112, 144, 170, 281–282, 296,
-g (Option), 368 348–349
groupdel , 368–369 HOWTOs, 131
groupmod , 366, 368
- i , 424
-g (Option), 368
id , 339–340, 345, 388
-n (Option), 368
-G (Option), 340
groups , 340
-g (Option), 340
Gruppe, 338
-Gn (Option), 340
administrative, 355
-n (Option), 340
Administrator, 369
-u (Option), 340
Kennwort, 355–356, 369
ifconfig , 405, 407–408, 418
gunzip , 300, 303
-a (Option), 408
gzip , 291, 293–294, 299–303, 311,
info , 129–130
437
inhalt , 207
-1 (Option), 300
init , 273
-6 (Option), 300
Inode-Nummern, 165
-9 (Option), 300
ipcalc , 444
--best (Option), 300
-c (Option), 300 Katz, Phil, 299
-d (Option), 300–301 KDE, 92
--fast (Option), 300 Kennwörter, 337, 345, 350
-l (Option), 300 ändern, 362
-r (Option), 300 Gruppen-, 355–356, 369
-S (Option), 300–301 vergeben, 362
-v (Option), 300 Kernelmodule, 271
klogd , 279
hash , 243 Knoppix, 78
-r(Option), 243 Kommandosubstitution, 205
476
konsole ,
112, 348 (Option), 149
-a
Korn, David, 109 (Option), 150, 422
-d
Krafft, Martin F., 76 (Option), 147
-F
(Option), 165
-i
LANG (Umgebungsvariable), 217 (Option), 149–150, 344, 377
-l
last , 340–341 (Option), 147
-p
LC_ALL (Umgebungsvariable), 217 (Option), 207
-U
LC_COLLATE (Umgebungsvariable), LXDE, 93
217
Lemmke, Ari, 42 Macintosh, 32
less , 126, 171, 173, 203, 208 mail , 347
Lessig, Lawrence (Larry), 62 man , 123, 125–127, 156, 173, 279, 319
/lib , 271 -a (Option), 126
/lib/modules , 271 -f (Option), 126
Linux, 18, 34 -k (Option), 126
Linux Documentation Project, 131 MANPATH (Umgebungsvariable), 125
linux- [Link] , 419 manpath , 125
ln , 165–169, 265 Maskierung, 117
-b (Option), 169 /media , 281
-f (Option), 169 /media/cdrom , 281
-i (Option), 169 /media/dvd , 281
-s (Option), 168–169, 265 /media/floppy , 281
-v (Option), 169 Microsoft, 31–32
locate , 179–184, 427, 471 mkdir , 151, 265, 270
-e (Option), 181 -p (Option), 151
login , 347 mkfifo , 266
LOGNAME (Umgebungsvariable), 427 mknod , 265
logout , 91 /mnt , 281
lost+found , 282 more , 171
ls , 127, 130, 147, 149–150, 155, 158, -l (Option), 171
165, 204, 207, 210, 226, -n ⟨Zahl⟩ (Option), 171
242, 270, 320, 344, 367, -s (Option), 171
375, 377, 421–423, mount , 244, 270
429–430 MS-DOS, 32
477
Murdock, Ian, 76 PDP-11, 18
mv , 162–164, 167, 436 Perens, Bruce, 51
-b (Option), 162 Perl, 189
-f (Option), 162 perl , 228
-i (Option), 162 Pesis, Jeff, 30
-R (Option), 164, 423 pico , 98
-u (Option), 162 ping , 408–411, 416
-v (Option), 162 -f (Option), 411
ping6 , 411
netstat , 414–416 Pipeline, 208
-r (Option), 416 Pipes, 208
-s (Option), 415 popd , 147
newgrp , 355–356
primäre Gruppe, 346
Novell, 75 /proc , 276, 278, 283, 323
/proc/cpuinfo , 276
O’Reilly, Tim, 51
/proc/devices , 276
Olsen, Ken, 18
/proc/dma , 277
/opt , 275, 283
/proc/interrupts , 277
OS X, 31, 35
/proc/ioports , 277
PackageKit, 330 /proc/kcore , 277, 436
passwd , 345, 362–364, 367, 369, 383, /proc/loadavg , 277
440 /proc/meminfo , 277
-l (Option), 363 /proc/mounts , 277
-S (Option), 362 /proc/scsi , 277
-u (Option), 363 Prüfungsziele, 451
passwd -m , 364 ps , 278, 321–323, 325–326, 333, 382
passwd -w , 364 ax (Option), 326
passwd -x , 364 l (Option), 322
paste , 228–229 -u (Option), 382
-d (Option), 229 Pseudobenutzer, 342
-s (Option), 230 Pseudogeräte, 272
PATH (Umgebungsvariable), 144, Puppet, 318
242–244, 251, 260, 433, pushd , 147
435, 471 pwd , 146, 185
478
Python, 189 sleep , 326
slocate , 182–183, 427
Ramey, Chet, 109 sort , 211, 217–218, 220, 224, 226,
rar , 291 233, 244, 255, 280, 432
Raymond, Eric S., 51 -b (Option), 220–221
Red Hat, 73 -k (Option), 217
Red Hat Enterprise Linux, 73 -n (Option), 224
Referenzzähler, 165
-r (Option), 221
reset , 213
-t (Option), 222
Ritchie, Dennis, 41, 384
-u (Option), 479
rm , 116, 163–164, 166, 169, 178, 376,
-u , 225
421, 424
source , 251
-f (Option), 164
split , 293
-i (Option), 163–164, 424
-r (Option), 164 /srv , 280
-v (Option), 164 ssh , 340
rmdir , 151–152, 422 Stallman, Richard M., 50, 54
-p (Option), 152 Standardkanäle, 201
/root , 268, 281–282 sticky bit, 387
route , 406, 410, 416, 418 su , 315–316, 333, 342, 438, 441
rpm , 330–331 sudo , 315–316, 333, 438
Rückgabewert, 248 -i (Option), 315
SUSE, 74
Salt, 318 Symbolische Links, 168
/sbin , 270–271, 275 Synaptic, 330
/sbin/init , 320 /sys , 278
Schattenkennwörter, 345, 349 syslogd , 279
Scientific Linux, 74
set , 239
Seward, Julian, 302 tail ,
214–216, 432
shadow passwords, 345, 349 (Option), 215
-c
Shellskript, 250 -f (Option), 215
Shellvariable, 238 -n (Option), 214
Shuttleworth, Mark, 78–79 - 𝑛 (Option), 215
SkoleLinux, 78 Tanenbaum, Andrew S., 42, 46
479
tar , 291, 293–299, 301, 305, 311, Umgebungsvariable, 238
436–437 EDITOR , 367
-c (Option), 294–295 LANG , 217
-f (Option), 294–295 LC_ALL , 217
-j (Option), 294 LC_COLLATE , 217
-M (Option), 294 LOGNAME , 427
-r (Option), 294 MANPATH , 125
-t (Option), 294, 296 PATH , 144, 242–244, 251, 260,
-u (Option), 294 433, 435, 471
-v (Option), 294–297 TERM , 171
-x (Option), 294, 296 TZ , 236
-Z (Option), 294 VISUAL , 367
-z (Option), 294, 437 uname , 340
Tcl, 189 -r (Option), 340
tee , 209–210, 431 uniq , 224
-a (Option), 210 Unix, 18, 34, 41
[Link] , 225 unset , 240
TERM (Umgebungsvariable), 171 unzip , 304, 306–309, 311, 437
test , 116, 255–256, 421 -d (Option), 307
-f (Option), 435 -h (Option), 308
Thawte, 79 -hh (Option), 308
Thompson, Ken, 41 -v (Option), 306, 309
/tmp , 280, 284, 367, 387, 441 -x (Option), 307
top , 324–327, 333 updatedb , 181–183, 427
Torvalds, Linus, 18, 34, 41–42, 46, uptime , 277
58 useradd , 358–361, 366–368, 441
touch , 367 userdel , 365, 368
Treibernummer, 272 -r (Option), 365
type , 115, 242–243 usermod , 366, 368, 442
TZ (Umgebungsvariable), 236 /usr , 268, 275–276
/usr/bin , 115, 268, 275
Ubuntu, 78 /usr/bin/test , 243
UID, 337 /usr/lib , 275
umask , 388 /usr/local , 275, 280
480
/usr/local/bin , 268 Volkerding, Patrick, 74
/usr/sbin , 275 von Neumann, John, 21
/usr/share , 275
/usr/share/dict/words , 194, 196 Watson, Thomas J., 18
/usr/share/doc , 275 wc , 206, 434
/usr/share/doc/ifupdown/examples/ wc -l , 255
network- [Link] , 405 whatis , 126
/usr/share/file , 263 whereis , 244, 428, 434
/usr/share/file/magic , 263 which , 243, 434
/usr/share/info , 275 Windows, 31, 35
/usr/share/man , 124, 275 Wurzelverzeichnis, 268
/usr/share/zoneinfo , 236
/usr/src , 275
Xandros, 78
xargs , 178
-0 (Option), 178
/var , 279–280, 284
-r (Option), 178
/var/cache/apt , 330
XFCE, 93
/var/lib/dpkg , 330
xterm , 112, 244, 348
/var/lib/rpm , 330
/var/log , 279 YaST, 76, 330
/var/mail , 168, 279, 365 Young, Bob, 73
/var/spool , 284 YUM, 330
/var/spool/cron , 279
/var/spool/cups , 279 zeichenorientierte Geräte, 272
/var/tmp , 280, 284 .zip , 306
Verisign, 79 zip , 291, 304–306, 309, 311
vi , 70, 98, 367 -@ (Option), 304
vigr , 368–369 -0 (Option), 305
-s (Option), 369 -d (Option), 305
vim , 103, 190 -f (Option), 305
vimtutor , 103 -FS (Option), 306
vipw , 367, 369, 442 -h (Option), 306
-s (Option), 367 -h2 (Option), 306
VISUAL (Umgebungsvariable), 367 -r (Option), 304, 306
vmlinuz , 270 -u (Option), 305–306
481
zsh ,
360
Zugriffsmodus, 374
Zypper, 330
482