Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Vorwort
19
1 Einleitung
21
1.1 Warum Linux?
23
1.1.1 Man muss kein Informatiker sein ...
24
1.1.2 ... aber es hilft
24
1.2 Grundbegriffe: Kernel, Distribution, Derivat
25
1.2.1 Bekannte Distributionen und Derivate
25
1.2.2 Arten von Distributionen
26
1.3 Die Entstehungsgeschichte von Linux
27
1.3.1 Die Entstehung von Unix
28
1.3.2 BSD wird ins Leben gerufen
30
1.3.3 Die Geburtsstunde von Linux
32
1.3.4 Die Kernelversionen
34
1.3.5 Stallman und das GNU-Projekt
36
1.3.6 Geschichte der Distributionen
38
1.4 Zusammenfassung
41
1.5 Aufgaben
41
2 So funktioniert Linux
43
2.1 Grundlagen
44
2.1.1 Prozessor
44
2.1.2 Speicher
46
2.1.3 Fairness und Schutz
50
2.1.4 Programmierung
52
2.1.5 Benutzung
60
2.2 Aufgaben eines Betriebssystems
61
2.2.1 Abstraktion
62
2.2.2 Virtualisierung
62
2.2.3 Ressourcenverwaltung
66
2.3 Prozesse, Tasks und Threads
66
2.3.1 Definitionen
67
2.3.2 Lebenszyklen eines Prozesses
73
2.3.3 Implementierung
81
2.4 Speichermanagement
86
2.4.1 Paging
86
2.4.2 Hardware
88
2.4.3 Organisation des Adressraums
91
2.5 Eingabe und Ausgabe
102
2.5.1 Hardware und Treiber
102
2.5.2 Interaktion mit Geräten
107
2.5.3 Ein-/Ausgabe für Benutzerprogramme
109
2.5.4 Dateisysteme
110
2.6 Zusammenfassung
112
2.7 Aufgaben
113
3 Erste Schritte
115
3.1 Die Unix-Philosophie
115
3.1.1 Kleine, spezialisierte Programme
116
3.1.2 Wenn du nichts zu sagen hast: Halt die Klappe
118
3.1.3 Die Shell
118
3.1.4 Administration
119
3.1.5 Netzwerktransparenz
119
3.2 Der erste Kontakt mit dem System
122
3.2.1 Booten
122
3.2.2 Login
123
3.2.3 Arbeiten am System
124
3.2.4 Die Linux-Verzeichnisstruktur
125
3.2.5 Das Rechtesystem
129
3.2.6 Herunterfahren
132
3.2.7 Wie Laufwerke bezeichnet werden
133
3.3 Bewegen in der Shell
135
3.3.1 Der Prompt
135
3.3.2 Absolute und relative Pfade
136
3.3.3 pwd
137
3.3.4 cd
137
3.4 Arbeiten mit Dateien
139
3.4.1 ls
139
3.4.2 more, less und most
140
3.4.3 Und Dateitypen?
141
3.5 Der Systemstatus
142
3.5.1 uname
142
3.5.2 uptime
143
3.5.3 date
143
3.6 Hilfe
144
3.6.1 Manpages
144
3.6.2 GNU info
147
3.6.3 Programmdokumentation
147
3.7 Zusammenfassung
148
3.8 Aufgaben
148
4 Grundlagen der Shell
149
4.1 Einführung und Überblick
149
4.1.1 Welche Shells gibt es?
150
4.1.2 Welche Shell für dieses Buch?
151
4.1.3 Die Shell als Programm
151
4.1.4 Der Prompt
152
4.1.5 Shellintern vs. Programm
154
4.1.6 Kommandos aneinanderreihen
155
4.1.7 Mehrzeilige Kommandos
157
4.2 Konsolen
157
4.3 screen
158
4.4 Besseres Arbeiten mit Verzeichnissen
160
4.4.1 Pfade
160
4.4.2 Und das Ganze mit Pfaden ...
162
4.5 Die elementaren Programme
163
4.5.1 echo und Kommandosubstitution
163
4.5.2 sleep
164
4.5.3 Erstellen eines Alias
164
4.5.4 cat
165
4.6 Programme für das Dateisystem
166
4.6.1 mkdir – Erstellen eines Verzeichnisses
166
4.6.2 rmdir – Löschen von Verzeichnissen
167
4.6.3 cp – Kopieren von Dateien
168
4.6.4 mv – Verschieben einer Datei
168
4.6.5 rm – Löschen von Dateien
169
4.6.6 head und tail
169
4.7 Ein- und Ausgabeumlenkung
170
4.7.1 Fehlerausgabe und Verknüpfung von Ausgaben
172
4.7.2 Anhängen von Ausgaben
172
4.7.3 Gruppierung der Umlenkung
173
4.8 Pipes
173
4.8.1 Beispiel: sort und uniq verbinden
174
4.8.2 Beispiel: Zeichen vertauschen
174
4.8.3 Um- und Weiterleiten mit tee
175
4.8.4 Named Pipes (FIFOs)
175
4.9 xargs
176
4.10 Zusammenfassung
177
4.11 Aufgaben
177
5 Prozesse in der Shell
179
5.1 Sessions und Prozessgruppen
179
5.2 Vorder- und Hintergrundprozesse
181
5.2.1 Prozessgruppen mit mehreren Prozessen
183
5.2.2 Wechseln zwischen Vorder- und Hintergrund
183
5.2.3 Jobs – behalten Sie sie im Auge
185
5.2.4 Hintergrundprozesse und Fehlermeldungen
187
5.2.5 Wann ist es denn endlich vorbei?
188
5.3 Das kill-Kommando und Signale
188
5.3.1 Welche Signale gibt es?
189
5.3.2 Beispiel: Anhalten und Fortsetzen eines Prozesses
191
5.4 Prozessadministration
192
5.4.1 Prozesspriorität
192
5.4.2 pstree
193
5.4.3 Prozesslistung mit Details via ps
195
5.4.4 top
198
5.4.5 Timing für Prozesse
200
5.5 Zusammenfassung
201
5.6 Aufgaben
201
6 Reguläre Ausdrücke
203
6.1 Grundlagen und Aufbau regulärer Ausdrücke
203
6.2 grep
205
6.2.1 Aufrufparameter für grep
207
6.2.2 grep -E und egrep
207
6.2.3 Exkurs: PDF-Files mit grep durchsuchen
208
6.3 awk
209
6.3.1 awk starten
209
6.3.2 Arbeitsweise von awk
210
6.3.3 Reguläre Ausdrücke in awk anwenden
211
6.3.4 Einfache Strings
211
6.3.5 Der Punkt-Operator
212
6.3.6 Der Plus-Operator
212
6.3.7 Die Zeichenvorgabe
212
6.3.8 Negierte Zeichenvorgabe
213
6.3.9 Zeilenanfang und -ende
213
6.3.10 awk – etwas detaillierter
214
6.3.11 Zusätzliche Parameter beim Aufruf
216
6.3.12 awk und Variablen
217
6.3.13 Rechenoperationen
218
6.3.14 Bedingte Anweisungen in awk
219
6.3.15 Funktionen in awk
223
6.3.16 Builtin-Funktionen
225
6.3.17 Arrays und String-Operationen
229
6.3.18 Was noch fehlt
230
6.4 sed
230
6.4.1 Erste Schritte
230
6.4.2 sed-Befehle
232
6.4.3 Nach Zeilen filtern
237
6.4.4 Wiederholungen in regulären Ausdrücken
238
6.5 Zusammenfassung
240
6.6 Aufgaben
240
7 Werkzeuge für die Konsole
241
7.1 touch – Zeitstempel von Dateien setzen
241
7.2 cut – Dateiinhalte abschneiden
242
7.3 paste – Dateien zusammenfügen
243
7.4 tac – Dateiinhalt umdrehen
244
7.5 column – Ausgaben tabellenartig formatieren
244
7.6 colrm – Spalten entfernen
245
7.7 nl – Zeilennummern für Dateien
247
7.8 wc – Zählen von Zeichen, Zeilen und Wörtern
247
7.9 od – Dateien zur Zahlenbasis x ausgeben
248
7.10 split – Dateien aufspalten
249
7.11 script – Terminal-Sessions aufzeichnen
250
7.12 bc – der Rechner für die Konsole
251
7.13 Der Midnight Commander
253
7.13.1 Bedienung
254
7.13.2 Verschiedene Ansichten
255
7.14 Zusammenfassung
256
7.15 Aufgaben
257
8 Eigene Shellskripte entwickeln
259
8.1 Grundlagen der Shellskript-Programmierung
259
8.1.1 Was genau ist ein Shellskript?
260
8.1.2 Wie legen Sie los?
260
8.1.3 Das erste Shellskript
261
8.1.4 Kommentare
261
8.2 Variablen
262
8.2.1 Rechnen mit Variablen
264
8.2.2 Benutzereingaben für Variablen
266
8.3 Arrays
267
8.3.1 Neue Elemente hinzufügen
267
8.3.2 Array-Länge
267
8.4 Kommandosubstitution und Schreibweisen
267
8.5 Argumentübergabe
269
8.6 Funktionen
270
8.6.1 Eine simple Funktion
271
8.6.2 Funktionsparameter
272
8.6.3 Rückgabewerte
273
8.7 Bedingte Anweisungen
275
8.7.1 Vergleichen von Zahlen
276
8.7.2 Returncodes für Bedingungen nutzen
277
8.7.3 Case-Bedingungen
278
8.8 Schleifen
280
8.8.1 Die while-Schleife
280
8.8.2 Die for-Schleife
281
8.8.3 seq – Schleifen mit Aufzählungen
283
8.8.4 until
283
8.8.5 break – Schleifen abbrechen
284
8.9 Menüs bilden mit select
284
8.10 Temporäre Dateien
286
8.11 Syslog-Meldungen via Shell
288
8.12 Pausen in Shellskripte einbauen
288
8.13 Startskripte
289
8.14 Das Auge isst mit: der Schreibstil
290
8.15 Ein paar Tipps zum Schluss
292
8.16 Weitere Fähigkeiten der Shell
292
8.17 Zusammenfassung
293
8.18 Aufgaben
293
9 Der vi(m)-Editor
295
9.1 vi, vim, gvim und neovim
296
9.2 Erste Schritte
297
9.3 Kommando- und Eingabemodus
298
9.4 Dateien speichern
298
9.5 Arbeiten mit dem Eingabemodus
299
9.6 Navigation
300
9.7 Löschen von Textstellen
301
9.8 Textbereiche ersetzen
302
9.9 Kopieren von Textbereichen
303
9.10 Shiften
303
9.11 Die Suchfunktion
303
9.12 Konfiguration
304
9.13 Zusammenfassung
305
9.14 Aufgaben
305
10 Grundlegende Administration
307
10.1 Benutzerverwaltung
307
10.1.1 Das Verwalten der Benutzerkonten
307
10.1.2 Benutzer und Gruppen
311
10.2 Installation neuer Software
313
10.2.1 Welches Paketsystem nutzen?
314
10.2.2 Das DEB-Paketsystem
314
10.2.3 Das RPM-Paketsystem
321
10.2.4 Softwareinstallation ohne Pakete
322
10.3 Backups erstellen
325
10.3.1 Die Sinnfrage
325
10.3.2 Backup eines ganzen Datenträgers
327
10.3.3 Backup ausgewählter Daten
329
10.4 Logdateien und dmesg
332
10.4.1 /var/log/messages
332
10.4.2 /var/log/wtmp
334
10.4.3 /var/log/Xorg.log
335
10.4.4 syslogd
335
10.4.5 logrotate und DoS-Angriffe
335
10.4.6 tail und head
336
10.5 Weitere nützliche Programme
337
10.5.1 Speicherverwaltung
337
10.5.2 Festplatten analysieren
339
10.5.3 Wer ist eingeloggt?
340
10.5.4 Offene Dateideskriptoren mit lsof
341
10.6 Grundlegende Systemdienste
342
10.6.1 cron
343
10.6.2 at
344
10.7 Manpages
345
10.8 Dateien finden mit find
347
10.8.1 Festlegung eines Auswahlkriteriums
348
10.8.2 Festlegung einer Aktion
351
10.9 Zusammenfassung
352
10.10 Aufgaben
352
11 Netzwerke unter Linux
353
11.1 Etwas Theorie
353
11.1.1 TCP/IP
354
11.1.2 Ihr Heimnetzwerk
356
11.2 Konfiguration einer Netzwerkschnittstelle
358
11.2.1 Welche Netzwerkschnittstellen gibt es?
358
11.2.2 Konfiguration von Netzwerkkarten mit ip und ifconfig
361
11.2.3 Automatische Konfiguration: DHCP
365
11.3 Routing
366
11.3.1 Was ist Routing?
366
11.3.2 Der Befehl ip route
367
11.4 Netzwerke benutzerfreundlich – DNS
369
11.4.1 DNS
369
11.4.2 DNS und Linux
371
11.4.3 Windows und die Namensauflösung
373
11.4.4 Die Datei /etc/services
374
11.5 Firewalls unter Linux
375
11.5.1 ufw
375
11.5.2 firewalld
378
11.6 Secure Shell
380
11.6.1 Das SSH-Protokoll
380
11.6.2 Secure Shell nutzen
383
11.6.3 Der Secure-Shell-Server
387
11.7 Das World Wide Web
388
11.7.1 Das HTTP-Protokoll
388
11.7.2 Einrichten eines Apache-Webservers
392
11.7.3 Den Apache verwalten
396
11.8 Windows-Netzwerkfreigaben
397
11.8.1 Die smb.conf-Konfigurationsdatei
398
11.8.2 Benutzersetup mit smbpasswd
400
11.8.3 Das Share verbinden
401
11.9 Dateien tauschen mit klassischem FTP
404
11.9.1 Das FTP-Protokoll
404
11.9.2 ftp
406
11.10 Weitere nützliche Netzwerktools
407
11.10.1 ping
408
11.10.2 netstat
409
11.10.3 nmap
411
11.10.4 tcpdump
413
11.11 Zusammenfassung
414
11.12 Aufgaben
415
12 Softwareentwicklung
417
12.1 Interpreter und Compiler
417
12.1.1 C und C++
418
12.1.2 Python
420
12.1.3 Java
422
12.1.4 Was es sonst noch gibt
423
12.2 Shared Libraries
424
12.2.1 Vorteile der Shared Libraries
424
12.2.2 Statisches Linken
424
12.2.3 Dateien
425
12.3 Debugging
425
12.3.1 Vorbereitung
426
12.3.2 Konsolenarbeit
427
12.4 Make
430
12.4.1 Makefile
431
12.4.2 Makros
435
12.4.3 Shellvariablen in Makefiles
436
12.4.4 Einzelne Targets übersetzen
436
12.4.5 Spezielle Targets
436
12.4.6 Tipps im Umgang mit Make
437
12.5 Die GNU-Autotools
438
12.6 Unix-Software veröffentlichen
442
12.7 Manpages erstellen
444
12.7.1 groff nutzen
444
12.7.2 Manpages installieren
446
12.8 Versionsmanagement mit Git
448
12.8.1 Eine kurze Einführung
448
12.9 Docker-Container erstellen
452
12.9.1 Virtualisierung, Container und andere Betriebssysteme
452
12.9.2 Docker-Images bauen
453
12.9.3 Docker-Container starten und verwalten
457
12.9.4 Mit Containern interagieren
458
12.10 Zusammenfassung
459
12.11 Aufgaben
460
13 Umgang mit dem Raspberry Pi
463
13.1 Die Hardware
463
13.1.1 Schnittstellen
465
13.1.2 Zubehör
466
13.2 Die Inbetriebnahme
468
13.2.1 Linux-Distributionen für den Raspberry Pi
468
13.2.2 SD-Karte mit einem Image bespielen
469
13.3 Der Raspberry Pi als Homeserver
470
13.3.1 Die initiale Konfiguration mit raspi-config
471
13.3.2 Die Grundlagen
473
13.3.3 Die weitere Konfiguration
474
13.4 Der Raspberry Pi als Mediacenter
475
13.4.1 Kodi konfigurieren
476
13.4.2 Freigaben einbinden – Filme, Serien und Musik
476
13.4.3 Add-ons konfigurieren
479
13.5 Zusammenfassung
480
13.6 Aufgaben
480
A Die Installation planen und durchführen
481
A.1 Die Anforderungen an Ihre Hardware
482
A.2 Hardwareunterstützung
482
A.3 Festplatten und Partitionen
485
A.4 Die Installation durchführen
491
A.5 Eine typische Linux-Installation durchführen
495
A.6 Zusammenfassung
498
Index
499