Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Vorwort
19
1 Einleitung
21
1.1 Warum Linux?
24
1.1.1 Man muss kein Informatiker sein ...
24
1.1.2 ... aber es hilft
25
1.2 Grundbegriffe: Kernel, Distribution, Derivat
25
1.2.1 Bekannte Distributionen und Derivate
26
1.2.2 Arten von Distributionen
26
1.3 Die Entstehungsgeschichte von Linux
28
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
42
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
65
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
85
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
106
2.5.3 Ein-/Ausgabe für Benutzerprogramme
108
2.5.4 Dateisysteme
109
2.6 Zusammenfassung
111
2.7 Aufgaben
112
3 Erste Schritte
113
3.1 Die Unix-Philosophie
113
3.1.1 Kleine, spezialisierte Programme
114
3.1.2 Wenn du nichts zu sagen hast: Halt die Klappe
116
3.1.3 Die Shell
116
3.1.4 Administration
117
3.1.5 Netzwerktransparenz
117
3.2 Der erste Kontakt mit dem System
120
3.2.1 Booten
120
3.2.2 Login
122
3.2.3 Arbeiten am System
122
3.2.4 Die Linux-Verzeichnisstruktur
123
3.2.5 Das Rechtesystem
128
3.2.6 Herunterfahren
130
3.2.7 Wie Laufwerke bezeichnet werden
131
3.3 Bewegen in der Shell
133
3.3.1 Der Prompt
133
3.3.2 Absolute und relative Pfade
134
3.3.3 pwd
135
3.3.4 cd
135
3.4 Arbeiten mit Dateien
137
3.4.1 ls
137
3.4.2 more, less und most
138
3.4.3 Und Dateitypen?
139
3.5 Der Systemstatus
140
3.5.1 uname
140
3.5.2 uptime
141
3.5.3 date
141
3.6 Hilfe
142
3.6.1 Manpages
142
3.6.2 GNU info
144
3.6.3 Programmdokumentation
145
3.7 Zusammenfassung
145
3.8 Aufgaben
146
4 Grundlagen der Shell
147
4.1 Einführung und Überblick
147
4.1.1 Welche Shells gibt es?
148
4.1.2 Welche Shell für dieses Buch?
149
4.1.3 Die Shell als Programm
149
4.1.4 Der Prompt
150
4.1.5 Shellintern vs. Programm
152
4.1.6 Kommandos aneinanderreihen
153
4.1.7 Mehrzeilige Kommandos
155
4.2 Konsolen
155
4.3 screen
156
4.4 Besseres Arbeiten mit Verzeichnissen
158
4.4.1 Pfade
158
4.4.2 Und das Ganze mit Pfaden ...
160
4.5 Die elementaren Programme
161
4.5.1 echo und Kommandosubstitution
161
4.5.2 sleep
162
4.5.3 Erstellen eines Alias
162
4.5.4 cat
163
4.6 Programme für das Dateisystem
164
4.6.1 mkdir – Erstellen eines Verzeichnisses
164
4.6.2 rmdir – Löschen von Verzeichnissen
165
4.6.3 cp – Kopieren von Dateien
166
4.6.4 mv – Verschieben einer Datei
166
4.6.5 rm – Löschen von Dateien
167
4.6.6 head und tail
167
4.7 Ein- und Ausgabeumlenkung
168
4.7.1 Fehlerausgabe und Verknüpfung von Ausgaben
170
4.7.2 Anhängen von Ausgaben
170
4.7.3 Gruppierung der Umlenkung
171
4.8 Pipes
171
4.8.1 Beispiel: sort und uniq verbinden
172
4.8.2 Beispiel: Zeichen vertauschen
172
4.8.3 Um- und Weiterleiten mit tee
173
4.8.4 Named Pipes (FIFOs)
173
4.9 xargs
174
4.10 Zusammenfassung
175
4.11 Aufgaben
175
5 Prozesse in der Shell
177
5.1 Sessions und Prozessgruppen
177
5.2 Vorder- und Hintergrundprozesse
179
5.2.1 Prozessgruppen mit mehreren Prozessen
181
5.2.2 Wechseln zwischen Vorder- und Hintergrund
181
5.2.3 Jobs – behalten Sie sie im Auge
183
5.2.4 Hintergrundprozesse und Fehlermeldungen
184
5.2.5 Wann ist es denn endlich vorbei?
186
5.3 Das kill-Kommando und Signale
186
5.3.1 Welche Signale gibt es?
187
5.3.2 Beispiel: Anhalten und Fortsetzen eines Prozesses
188
5.4 Prozessadministration
190
5.4.1 Prozesspriorität
190
5.4.2 pstree
191
5.4.3 Prozesslistung mit Details via ps
193
5.4.4 top
196
5.4.5 Timing für Prozesse
198
5.5 Zusammenfassung
199
5.6 Aufgaben
199
6 Reguläre Ausdrücke
201
6.1 Grundlagen und Aufbau regulärer Ausdrücke
201
6.2 grep
203
6.2.1 Aufrufparameter für grep
205
6.2.2 grep -E und egrep
205
6.2.3 Exkurs: PDF-Files mit grep durchsuchen
206
6.3 awk
207
6.3.1 awk starten
207
6.3.2 Arbeitsweise von awk
208
6.3.3 Reguläre Ausdrücke in awk anwenden
209
6.3.4 Einfache Strings
209
6.3.5 Der Punkt-Operator
210
6.3.6 Der Plus-Operator
210
6.3.7 Die Zeichenvorgabe
210
6.3.8 Negierte Zeichenvorgabe
211
6.3.9 Zeilenanfang und -ende
211
6.3.10 awk – etwas detaillierter
212
6.3.11 Zusätzliche Parameter beim Aufruf
214
6.3.12 awk und Variablen
215
6.3.13 Rechenoperationen
216
6.3.14 Bedingte Anweisungen in awk
217
6.3.15 Funktionen in awk
221
6.3.16 Builtin-Funktionen
223
6.3.17 Arrays und String-Operationen
227
6.3.18 Was noch fehlt
228
6.4 sed
228
6.4.1 Erste Schritte
228
6.4.2 sed-Befehle
230
6.4.3 Nach Zeilen filtern
235
6.4.4 Wiederholungen in regulären Ausdrücken
236
6.5 Zusammenfassung
238
6.6 Aufgaben
238
7 Werkzeuge für die Konsole
239
7.1 touch – Zeitstempel von Dateien setzen
239
7.2 cut – Dateiinhalte abschneiden
240
7.3 paste – Dateien zusammenfügen
241
7.4 tac – Dateiinhalt umdrehen
242
7.5 column – Ausgaben tabellenartig formatieren
242
7.6 colrm – Spalten entfernen
243
7.7 nl – Zeilennummern für Dateien
245
7.8 wc – Zählen von Zeichen, Zeilen und Wörtern
245
7.9 od – Dateien zur Zahlenbasis x ausgeben
246
7.10 split – Dateien aufspalten
247
7.11 script – Terminal-Sessions aufzeichnen
248
7.12 bc – der Rechner für die Konsole
249
7.13 Der Midnight Commander
251
7.13.1 Bedienung
252
7.13.2 Verschiedene Ansichten
253
7.14 Zusammenfassung
254
7.15 Aufgaben
255
8 Eigene Shellskripte entwickeln
257
8.1 Grundlagen der Shellskript-Programmierung
257
8.1.1 Was genau ist ein Shellskript?
258
8.1.2 Das erste Shellskript
259
8.1.3 Kommentare
259
8.2 Variablen
260
8.2.1 Rechnen mit Variablen
262
8.2.2 Benutzereingaben für Variablen
264
8.3 Arrays
265
8.3.1 Neue Elemente hinzufügen
265
8.3.2 Array-Länge
265
8.4 Kommandosubstitution und Schreibweisen
265
8.5 Argumentübergabe
267
8.6 Funktionen
268
8.6.1 Eine simple Funktion
269
8.6.2 Funktionsparameter
270
8.6.3 Rückgabewerte
271
8.7 Bedingte Anweisungen
273
8.7.1 Vergleichen von Zahlen
274
8.7.2 Returncodes für Bedingungen nutzen
275
8.7.3 Case-Bedingungen
276
8.8 Schleifen
278
8.8.1 Die while-Schleife
278
8.8.2 Die for-Schleife
279
8.8.3 seq – Schleifen mit Aufzählungen
281
8.8.4 until
281
8.8.5 break – Schleifen abbrechen
282
8.9 Menüs bilden mit select
282
8.10 Temporäre Dateien
284
8.11 Syslog-Meldungen via Shell
286
8.12 Pausen in Shellskripte einbauen
286
8.13 Startskripte
287
8.14 Das Auge isst mit: der Schreibstil
288
8.15 Ein paar Tipps zum Schluss
289
8.16 Weitere Fähigkeiten der Shell
290
8.17 Zusammenfassung
291
8.18 Aufgaben
291
9 Der vi(m)-Editor
293
9.1 vi, vim, gvim und neovim
294
9.2 Erste Schritte
295
9.3 Kommando- und Eingabemodus
296
9.4 Dateien speichern
296
9.5 Arbeiten mit dem Eingabemodus
297
9.6 Navigation
298
9.7 Löschen von Textstellen
299
9.8 Textbereiche ersetzen
300
9.9 Kopieren von Textbereichen
301
9.10 Shiften
301
9.11 Die Suchfunktion
301
9.12 Konfiguration
302
9.13 Distributionen für Vim
303
9.14 Zusammenfassung
304
9.15 Aufgaben
304
10 Grundlegende Administration
305
10.1 Benutzerverwaltung
305
10.1.1 Das Verwalten der Benutzerkonten
305
10.1.2 Benutzer und Gruppen
309
10.2 Installation neuer Software
311
10.2.1 Welches Paketsystem nutzen?
312
10.2.2 Das DEB-Paketsystem
312
10.2.3 Das RPM-Paketsystem
319
10.2.4 Snaps
320
10.2.5 Software-Installation ohne Pakete
323
10.3 Backups erstellen
327
10.3.1 Die Sinnfrage
327
10.3.2 Backup eines ganzen Datenträgers
328
10.3.3 Backup ausgewählter Daten
330
10.4 Logdateien und dmesg
334
10.4.1 /var/log/messages
334
10.4.2 /var/log/wtmp
336
10.4.3 /var/log/Xorg.log
336
10.4.4 syslogd
337
10.4.5 logrotate und DoS-Angriffe
337
10.4.6 tail und head
338
10.5 Weitere nützliche Programme
339
10.5.1 Speicherverwaltung
339
10.5.2 Festplatten analysieren
341
10.5.3 Wer ist eingeloggt?
342
10.5.4 Offene Dateideskriptoren mit lsof
343
10.6 Grundlegende Systemdienste
344
10.6.1 cron
344
10.6.2 at
346
10.7 Manpages
347
10.8 Dateien finden mit find
349
10.8.1 Festlegung eines Auswahlkriteriums
350
10.8.2 Festlegung einer Aktion
353
10.9 Zusammenfassung
354
10.10 Aufgaben
354
11 Netzwerke unter Linux
355
11.1 Etwas Theorie
355
11.1.1 TCP/IP
356
11.1.2 Ihr Heimnetzwerk
357
11.1.3 localhost
358
11.1.4 Layer 2 und Netzmaske
358
11.2 Konfiguration einer Netzwerkschnittstelle
361
11.2.1 Welche Netzwerkschnittstellen gibt es?
361
11.2.2 Konfiguration von Netzwerkkarten mit ip und ifconfig
364
11.2.3 Automatische Konfiguration: DHCP
368
11.3 Routing
369
11.3.1 Was ist Routing?
369
11.3.2 Der Befehl ip route
370
11.4 Netzwerke benutzerfreundlich – DNS
372
11.4.1 DNS
372
11.4.2 Windows und die Namensauflösung
376
11.4.3 Die Datei /etc/services
377
11.5 Firewalls unter Linux
378
11.5.1 ufw
378
11.5.2 firewalld
381
11.6 Secure Shell
383
11.6.1 Das SSH-Protokoll
383
11.6.2 Secure Shell nutzen
385
11.6.3 Der Secure-Shell-Server
389
11.7 Das World Wide Web
390
11.7.1 Das HTTP-Protokoll
391
11.7.2 Einrichten eines NGINX-Webservers
393
11.7.3 Den NGINX verwalten
396
11.8 Windows-Netzwerkfreigaben
397
11.8.1 Die smb.conf-Konfigurationsdatei
398
11.8.2 Benutzer-Setup mit smbpasswd
400
11.8.3 Das Share verbinden
401
11.9 Weitere nützliche Netzwerktools
404
11.9.1 ping
404
11.9.2 netstat
405
11.9.3 nmap
407
11.9.4 tcpdump
409
11.10 Zusammenfassung
410
11.11 Aufgaben
411
12 Softwareentwicklung
413
12.1 Interpreter und Compiler
413
12.1.1 C und C++
414
12.1.2 Python
417
12.1.3 Java
418
12.1.4 Rust
419
12.1.5 Was es sonst noch gibt
420
12.2 Softwarebibliotheken (Shared Libraries)
421
12.2.1 Vorteile der Shared Libraries
421
12.2.2 Statisches Linken für C- und C++
422
12.2.3 Dateien
422
12.3 Make
422
12.3.1 Makefile
423
12.3.2 Makros
427
12.3.3 Shellvariablen in Makefiles
428
12.3.4 Einzelne Targets übersetzen
428
12.3.5 Spezielle Targets
428
12.3.6 Tipps im Umgang mit Make
429
12.4 Die GNU-Autotools
430
12.5 Unix-Software veröffentlichen
434
12.6 Eigene Manpages erstellen
436
12.6.1 groff nutzen
436
12.6.2 Manpages installieren
438
12.7 Versionsmanagement mit Git
440
12.7.1 Ein wenig Theorie zur Einführung
440
12.7.2 Arbeiten mit Git
441
12.8 Docker-Container erstellen
444
12.8.1 Virtualisierung, Container und andere Betriebssysteme
444
12.8.2 Docker-Images bauen
445
12.8.3 Docker-Container starten und verwalten
449
12.8.4 Mit Containern interagieren
450
12.9 Zusammenfassung
451
12.10 Aufgaben
452
A Die Installation planen und durchführen
455
A.1 Hardwareunterstützung
456
A.2 Festplatten und Partitionen
459
A.3 Die Installation durchführen
465
A.4 Eine typische Linux-Installation durchführen
469
A.5 Zusammenfassung
472
Index
473