http://www.pronix.de -> Bücher -> Bücher aus meiner Feder -> Shell-Programmierung -> Inhaltsverzeichnis

Inhaltsverzeichnis

1 ... Einführung ... 29

1.1 ... Voraussetzungen an den Leser ... 29
... 1.1.1 ... Zielgruppe ... 30
... 1.1.2 ... Notation ... 31
1.2 ... Was ist eine Shell? ... 32
1.3 ... Hauptanwendungsgebiet ... 34
... 1.3.1 ... Was ist ein Shellscript? ... 35
... 1.3.2 ... Vergleich mit anderen Sprachen ... 36
1.4 ... Kommando, Programm oder Shellscript? ... 38
... 1.4.1 ... Shell-eigene Kommandos (Builtin-Kommando) ... 38
... 1.4.2 ... Aliase in der Shell ... 38
... 1.4.3 ... Funktionen in der Shell ... 39
... 1.4.4 ... Shellscripts (Shell-Prozeduren) ... 39
... 1.4.5 ... Programme (binär) ... 39
1.5 ... Die Shell-Vielfalt ... 40
... 1.5.1 ... ksh (Korn-Shell) ... 40
... 1.5.2 ... Bash (Bourne-Again-Shell) ... 41
... 1.5.3 ... zsh (Z-Shell) ... 41
... 1.5.4 ... ash (A-Shell) ... 41
... 1.5.5 ... rbash, rzsh (Restricted Shell) ... 41
... 1.5.6 ... tcsh (TC-Shell) ... 42
... 1.5.7 ... Welche Shell-Variante wird in diesem Buch verwendet? ... 42
... 1.5.8 ... rsh und ssh ... 43
1.6 ... Betriebssysteme ... 43
1.7 ... Crashkurs: einfacher Umgang mit der Kommandozeile ... 44
... 1.7.1 ... Grundlegende Befehle ... 44
... 1.7.2 ... Der Umgang mit Dateien ... 45
... 1.7.3 ... Der Umgang mit Verzeichnissen ... 49
... 1.7.4 ... Datei- und Verzeichnisnamen ... 53
... 1.7.5 ... Gerätenamen ... 53
... 1.7.6 ... Dateiattribute ... 54
1.8 ... Shellscripts schreiben und ausführen ... 57
... 1.8.1 ... Der Editor ... 57
... 1.8.2 ... Der Name des Shellscripts ... 57
... 1.8.3 ... Ausführen ... 58
... 1.8.4 ... Hintergrundprozess starten ... 61
... 1.8.5 ... Ausführende Shell festlegen ... 62
... 1.8.6 ... Kommentare ... 65
... 1.8.7 ... Stil ... 65
... 1.8.8 ... Ein Shellscript beenden ... 66
... 1.8.9 ... Testen und Debuggen von Shellscripts ... 68
... 1.8.10 ... Shellscript, das ein Shellscript erstellt und ausführt ... 69
1.9 ... Vom Shellscript zum Prozess ... 71
... 1.9.1 ... Ist das Shellscript ein Prozess? ... 72
... 1.9.2 ... Echte Login-Shell? ... 73
1.10 ... Datenstrom ... 74
... 1.10.1 ... Ausgabe umleiten ... 75
... 1.10.2 ... Standardfehlerausgabe umleiten ... 77
... 1.10.3 ... Eingabe umleiten ... 80
... 1.10.4 ... Pipes ... 83
... 1.10.5 ... Ein T-Stück mit tee ... 84
... 1.10.6 ... Ersatzmuster (Wildcards) ... 86
... 1.10.7 ... Brace Extension (Bash und Korn-Shell only) ... 90
... 1.10.8 ... Muster-Alternativen (Bash und Korn-Shell only) ... 91
... 1.10.9 ... Tilde-Expansion (Bash und Korn-Shell only) ... 91
1.11 ... Empfehlung ... 92

2 ... Variablen ... 93

2.1 ... Grundlagen ... 93
... 2.1.1 ... Zugriff auf den Wert einer Variablen ... 93
... 2.1.2 ... Variablen-Interpolation ... 94
2.2 ... Zahlen ... 98
... 2.2.1 ... Integer-Arithmetik (Bourne-Shell, Bash und Korn-Shell) ... 99
... 2.2.2 ... Integer-Arithmetik (Bash und Korn-Shell only) ... 101
... 2.2.3 ... bc – Rechnen mit Fließkommazahlen und mathematische Funktionen ... 104
2.3 ... Zeichenketten ... 107
... 2.3.1 ... Stringverarbeitung ... 108
... 2.3.2 ... Erweiterte Funktionen für Bash und Korn-Shell ... 115
2.4 ... Quotings und Kommando-Substitution ... 118
... 2.4.1 ... Single und Double Quotings ... 119
... 2.4.2 ... Kommando-Substitution – Back Quotes ... 121
2.5 ... Arrays (Bash und Korn-Shell only) ... 124
... 2.5.1 ... Werte an Arrays zuweisen ... 125
... 2.5.2 ... Eine Liste von Werten an ein Array zuweisen (Bash) ... 126
... 2.5.3 ... Eine Liste von Werten an ein Array zuweisen (Korn-Shell) ... 126
... 2.5.4 ... Zugreifen auf die einzelnen Elemente eines Arrays ... 126
2.6 ... Variablen exportieren ... 130
2.7 ... Umgebungsvariablen eines Prozesses ... 136
2.8 ... Shell-Variablen ... 137
2.9 ... Automatische Variablen der Shell ... 142
... 2.9.1 ... Der Name des Shellscripts – $0 ... 142
... 2.9.2 ... Die Prozessnummer des Shellscripts – $$ ... 143
... 2.9.3 ... Der Beendigungsstatus eines Shellscripts – $? ... 144
... 2.9.4 ... Die Prozessnummer des zuletzt gestarteten Hintergrundprozesses – $! ... 144
... 2.9.5 ... Weitere vordefinierte Variablen der Shell ... 145
... 2.9.6 ... Weitere automatische Variablen für Bash und Korn-Shell ... 145

3 ... Parameter und Argumente ... 149

3.1 ... Einführung ... 149
3.2 ... Kommandozeilenparameter $1 bis $9 ... 149
3.3 ... Besondere Parameter ... 151
... 3.3.1 ... Die Variable $* ... 151
... 3.3.2 ... Die Variable $@ ... 153
... 3.3.3 ... Die Variable $# ... 153
3.4 ... Der Befehl shift ... 154
3.5 ... Argumente und Leerzeichen ... 156
3.6 ... Argumente jenseits von $9 ... 157
... 3.6.1 ... Beliebig viele Argumente (Bash und Korn-Shell only) ... 158
3.7 ... Argumente setzen mit set und Kommando-Substitution ... 159
3.8 ... getopts – Kommandozeilenoptionen auswerten ... 162
3.9 ... Vorgabewerte für Variablen ... 165

4 ... Kontrollstrukturen ... 169

4.1 ... Bedingte Anweisung mit if ... 169
... 4.1.1 ... Kommandos testen mit if ... 171
... 4.1.2 ... Kommandoverkettung über Pipes mit if ... 173
4.2 ... Die else-Alternative für eine if-Verzweigung ... 177
4.3 ... Mehrfache Alternative mit elif ... 179
4.4 ... Das Kommando test ... 182
... 4.4.1 ... Ganze Zahlen vergleichen ... 183
... 4.4.2 ... Ganze Zahlen vergleichen mit let (Bash und Korn-Shell only) ... 185
... 4.4.3 ... Zeichenketten vergleichen ... 186
... 4.4.4 ... Zeichenketten vergleichen (Bash und Korn-Shell only) ... 191
4.5 ... Status von Dateien erfragen ... 194
4.6 ... Logische Verknüpfung von Ausdrücken ... 197
... 4.6.1 ... Negationsoperator ! ... 198
... 4.6.2 ... Die UND-Verknüpfung (-a und &&) ... 199
... 4.6.3 ... Die ODER-Verknüpfung (-o und ||) ... 201
... 4.6.4 ... Klammerung und mehrere logische Verknüpfungen ... 202
4.7 ... Short Circuit-Tests – ergebnisabhängige Befehlsausführung ... 203
4.8 ... Die Anweisung case ... 206
... 4.8.1 ... Alternative Vergleichsmuster ... 209
... 4.8.2 ... case und Wildcards ... 210
... 4.8.3 ... case und Optionen ... 212
4.9 ... Schleifen ... 213
4.10 ... for-Schleife ... 214
... 4.10.1 ... Argumente bearbeiten mit for ... 215
... 4.10.2 ... for und die Dateinamen-Substitution ... 216
... 4.10.3 ... for und die Kommando-Substitution ... 218
... 4.10.4 ... for und Array (Bash und Korn Shell only) ... 221
... 4.10.5 ... for-Schleife mit Schleifenzähler (Bash only) ... 222
4.11 ... Die while-Schleife ... 224
4.12 ... Die until-Schleife ... 226
4.13 ... Kontrollierte Sprünge ... 229
... 4.13.1 ... Der Befehl continue ... 230
... 4.13.2 ... Der Befehl break ... 231
4.14 ... Endlosschleifen ... 233

5 ... Terminal-Ein- und Ausgabe ... 237

5.1 ... Von Terminals zu Pseudo-Terminals ... 237
5.2 ... Ausgabe ... 239
... 5.2.1 ... Der echo-Befehl ... 240
... 5.2.2 ... print (Korn-Shell only) ... 244
... 5.2.3 ... Der Befehl printf ... 244
... 5.2.4 ... Der Befehl tput – Terminalsteuerung ... 247
5.3 ... Eingabe ... 253
... 5.3.1 ... Der Befehl read ... 253
... 5.3.2 ... (Zeilenweise) Lesen einer Datei mit read ... 255
... 5.3.3 ... Zeilenweise mit einer Pipe aus einem Kommando lesen (read) ... 256
... 5.3.4 ... Here-Dokumente (Inline-Eingabeumleitung) ... 257
... 5.3.5 ... Here-Dokumente mit read verwenden ... 260
... 5.3.6 ... Die Variable IFS ... 261
... 5.3.7 ... Arrays einlesen mit read (Bash und Korn-Shell only) ... 267
... 5.3.8 ... Shell-abhängige Anmerkungen zu read ... 268
... 5.3.9 ... Einzelnes Zeichen abfragen ... 269
... 5.3.10 ... Einzelne Zeichen mit Escape-Sequenzen abfragen ... 270
... 5.3.11 ... Passworteingabe ... 277
5.4 ... Umlenken mit dem Befehl exec ... 278
5.5 ... Filedeskriptoren ... 281
... 5.5.1 ... Einen neuen Filedeskriptor verwenden ... 282
... 5.5.2 ... Die Umlenkung <> ... 285
5.6 ... Named Pipes ... 286
5.7 ... Menüs mit select (Bash und Korn-Shell only) ... 289
5.8 ... dialog und Xdialog ... 294
... 5.8.1 ... Entscheidungsfrage --yesno ... 295
... 5.8.2 ... Nachrichtenbox mit Bestätigung --msgbox ... 296
... 5.8.3 ... Hinweisfenster ohne Bestätigung --infobox ... 297
... 5.8.4 ... Text-Eingabezeile --inputbox ... 298
... 5.8.5 ... Ein einfacher Dateibetrachter --textbox ... 299
... 5.8.6 ... Ein Menü --menu ... 300
... 5.8.7 ... Auswahlliste zum Ankreuzen --checklist ... 301
... 5.8.8 ... Radiobuttons zum Auswählen --radiolist ... 302
... 5.8.9 ... Fortschrittszustand anzeigen --gauge ... 302
... 5.8.10 ... Verändern von Aussehen und Ausgabe ... 304
... 5.8.11 ... Kleines Beispiel ... 304
... 5.8.12 ... Zusammenfassung ... 305
5.9 ... gnuplot – Visualisierung von Messdaten ... 306
... 5.9.1 ... Wozu wird gnuplot eingesetzt? ... 307
... 5.9.2 ... gnuplot starten ... 308
... 5.9.3 ... Das Kommando zum Plotten ... 308
... 5.9.4 ... Variablen und Parameter für gnuplot ... 309
... 5.9.5 ... Ausgabe von gnuplot umleiten ... 310
... 5.9.6 ... Variablen und eigene Funktionen definieren ... 312
... 5.9.7 ... Interpretation von Daten aus einer Datei ... 313
... 5.9.8 ... Alles bitte nochmals zeichnen (oder besser speichern und laden) ... 316
... 5.9.9 ... gnuplot aus einem Shellscript heraus starten (der Batch-Betrieb) ... 317
... 5.9.10 ... Plot-Styles und andere Ausgaben festlegen ... 319
... 5.9.11 ... Tricks für die Achsen ... 325
... 5.9.12 ... Die dritte Dimension ... 329
... 5.9.13 ... Zusammenfassung ... 331

6 ... Funktionen ... 333

6.1 ... Definition ... 333
... 6.1.1 ... Definition (Bash und Korn-Shell only) ... 334
... 6.1.2 ... Funktionsaufruf ... 334
... 6.1.3 ... Funktionen exportieren ... 336
... 6.1.4 ... Aufrufreihenfolge ... 338
... 6.1.5 ... Who is who ... 339
... 6.1.6 ... Aufruf selbst bestimmen ... 339
... 6.1.7 ... Funktionen auflisten ... 340
6.2 ... Funktionen, die Funktionen aufrufen ... 340
6.3 ... Parameterübergabe ... 342
... 6.3.1 ... FUNCNAME (Bash only) ... 345
6.4 ... Rückgabewert aus einer Funktion ... 346
... 6.4.1 ... Rückgabewert mit return ... 346
... 6.4.2 ... Rückgabewert mit echo und einer Kommando- Substitution ... 347
... 6.4.3 ... Rückgabewert ohne eine echte Rückgabe (lokale Variable) ... 349
... 6.4.4 ... Funktionen und exit ... 350
6.5 ... Lokale contra globale Variablen ... 351
... 6.5.1 ... Lokale Variablen (Bash und Korn-Shell only) ... 353
6.6 ... alias und unalias ... 355
6.7 ... Autoload (Korn-Shell only) ... 357

7 ... Signale ... 359

7.1 ... Grundlagen zu den Signalen ... 359
7.2 ... Signale senden – kill ... 363
7.3 ... Eine Fallgrube für Signale – trap ... 364
... 7.3.1 ... Einen Signalhandler (Funktion) einrichten ... 367
... 7.3.2 ... Mit Signalen Schleifendurchläufe abbrechen ... 370
... 7.3.3 ... Mit Signalen das Script beenden ... 371
... 7.3.4 ... Das Beenden der Shell (oder eines Scripts) abfangen ... 371
... 7.3.5 ... Signale ignorieren ... 373
... 7.3.6 ... Signale zurücksetzen ... 373

8 ... Rund um die Ausführung von Scripts und Prozessen ... 375

8.1 ... Prozessprioritäten ... 375
8.2 ... Warten auf andere Prozesse ... 376
8.3 ... Hintergrundprozess wieder hervorholen ... 377
8.4 ... Hintergrundprozess schützen ... 378
8.5 ... Subshells ... 379
8.6 ... Mehrere Scripts verbinden und ausführen (Kommunikation zwischen Scripts) ... 381
... 8.6.1 ... Datenübergabe zwischen Scripts ... 381
... 8.6.2 ... Rückgabe von Daten an andere Scripts ... 383
... 8.6.3 ... Scripts synchronisieren ... 386
8.7 ... Jobverwaltung ... 388
8.8 ... Shellscripts zeitgesteuert ausführen ... 391
8.9 ... Startprozess- und Profildaten der Shell ... 396
... 8.9.1 ... Arten von Initialisierungsdateien ... 397
... 8.9.2 ... Ausführen von Profildateien beim Start einer Login-Shell ... 398
... 8.9.3 ... Ausführen von Profildateien beim Start einer Nicht-Login-Shell (Bash und Korn-Shell) ... 400
... 8.9.4 ... Zusammenfassung alle Profil- und Startup-Dateien ... 402
8.10 ... Ein Shellscript bei der Ausführung ... 404
... 8.10.1 ... Syntaxüberprüfung ... 404
... 8.10.2 ... Expansionen ... 404
... 8.10.3 ... Kommandos ... 404
8.11 ... Shellscripts optimieren ... 406

9 ... Nützliche Funktionen ... 409

9.1 ... Der Befehl eval ... 409
9.2 ... xargs ... 412
9.3 ... dirname und basename ... 414
9.4 ... umask ... 415
9.5 ... ulimit (Builtin) ... 416
9.6 ... time ... 418
9.7 ... typeset ... 419

10 ... Fehlersuche und Debugging ... 421

10.1 ... Strategien zum Vermeiden von Fehlern ... 421
... 10.1.1 ... Planen Sie Ihr Script ... 421
... 10.1.2 ... Testsystem bereitstellen ... 422
... 10.1.3 ... Ordnung ist das halbe Leben ... 423
10.2 ... Fehlerarten ... 425
10.3 ... Fehlersuche ... 426
... 10.3.1 ... Tracen mit set -x ... 427
... 10.3.2 ... DEBUG und ERR-Signal ... 429
... 10.3.3 ... Variablen und Syntax überprüfen ... 434
... 10.3.4 ... Eine Debug-Ausgabe hinzufügen ... 434
... 10.3.5 ... Debugging-Tools ... 435

11 ... Reguläre Ausdrücke und grep ... 437

11.1 ... Reguläre Ausdrücke – die Theorie ... 437
... 11.1.1 ... Elemente für reguläre Ausdrücke (POSIX-RE) ... 438
11.2 ... grep ... 441
... 11.2.1 ... Wie arbeitet grep? ... 442
... 11.2.2 ... grep mit regulären Ausdrücken ... 443
... 11.2.3 ... grep mit Pipes ... 448
... 11.2.4 ... grep mit Optionen ... 449
... 11.2.5 ... egrep (extended grep) ... 452
... 11.2.6 ... fgrep (fixed oder fast grep) ... 453
... 11.2.7 ... rgrep ... 453

12 ... Der Stream-Editor sed ... 455

12.1 ... Funktions- und Anwendungsweise von sed ... 455
... 12.1.1 ... Wohin mit der Ausgabe? ... 457
12.2 ... Der sed-Befehl ... 459
12.3 ... Adressen ... 460
12.4 ... Kommandos, Substitutionsflags und Optionen von sed ... 462
... 12.4.1 ... Das a-Kommando – Zeile(n) anfügen ... 465
... 12.4.2 ... Das c-Kommando – Zeilen ersetzen ... 466
... 12.4.3 ... Das d-Kommando – Zeilen löschen ... 467
... 12.4.4 ... Die Kommandos h, H, g, G und x – Arbeiten mit den Puffern ... 467
... 12.4.5 ... Das Kommando i – Einfügen von Zeilen ... 469
... 12.4.6 ... Das p-Kommando – Patternspace ausgeben ... 470
... 12.4.7 ... Das Kommando q – Beenden ... 471
... 12.4.8 ... Die Kommandos r und w ... 471
... 12.4.9 ... Das Kommando s – substitute ... 473
... 12.4.10 ... Das Kommando y ... 477
12.5 ... sed-Scripts ... 478

13 ... awk-Programmierung ... 483

13.1 ... Einführung und Grundlagen von awk ... 483
... 13.1.1 ... History und Versionen von awk ... 484
... 13.1.2 ... Die Funktionsweise von awk ... 485
13.2 ... Aufruf von awk-Programmen ... 486
... 13.2.1 ... Grundlegender Aufbau eines awk-Kommandos ... 486
... 13.2.2 ... Die Kommandozeilen-Optionen von awk ... 488
... 13.2.3 ... awk aus der Kommandozeile aufrufen ... 489
... 13.2.4 ... awk in Shellscripts aufrufen ... 489
... 13.2.5 ... awk als eigenes Script ausführen ... 491
13.3 ... Grundlegende awk-Programme und -Elemente ... 491
... 13.3.1 ... Ausgabe von Zeilen und Zeilennummern ... 492
... 13.3.2 ... Felder ... 493
13.4 ... Muster (bzw. Adressen) von awk-Scripts ... 498
... 13.4.1 ... Zeichenkettenvergleiche ... 498
... 13.4.2 ... Vergleichsausdrücke ... 499
... 13.4.3 ... Reguläre Ausdrücke ... 501
... 13.4.4 ... Zusammengesetzte Ausdrücke ... 504
... 13.4.5 ... BEGIN und END ... 504
13.5 ... Die Komponenten von awk-Scripts ... 506
... 13.5.1 ... Variablen ... 507
... 13.5.2 ... Arrays ... 512
... 13.5.3 ... Operatoren ... 515
... 13.5.4 ... Kontrollstrukturen ... 522
13.6 ... Funktionen ... 527
... 13.6.1 ... Mathematische Funktionen ... 527
... 13.6.2 ... Funktionen für Zeichenketten ... 529
... 13.6.3 ... Funktionen für die Zeit ... 533
... 13.6.4 ... Systemfunktionen ... 535
... 13.6.5 ... Ausgabefunktionen ... 535
... 13.6.6 ... Eingabefunktion ... 536
... 13.6.7 ... Benutzerdefinierte Funktionen ... 539
13.7 ... Empfehlung ... 542

14 ... Linux-UNIX-Kommandoreferenz ... 543

14.1 ... Kurzübersicht ... 544
14.2 ... Dateiorientierte Kommandos ... 551
... bzcat – Ausgabe von bzip2-komprimierten Dateien ... 551
... cat – Datei(en) nacheinander ausgeben ... 551
... chgrp – Gruppe von Dateien oder Verzeichnissen ändern ... 552
... cksum/md5sum/sum – eine Prüfsumme für eine Datei ermitteln ... 552
... chmod – Zugriffsrechte von Dateien oder Verzeichnissen ändern ... 553
... chown – Eigentümer von Dateien oder Verzeichnissen ändern ... 554
... cmp – Dateien miteinander vergleichen ... 555
... comm – zwei sortierte Textdateien miteinander vergleichen ... 555
... cp – Dateien kopieren ... 556
... csplit – Zerteilen von Dateien (kontextabhängig) ... 556
... cut – Zeichen oder Felder aus Dateien herausschneiden ... 557
... diff – Vergleichen zweier Dateien ... 557
... diff3 – Vergleich von drei Dateien ... 558
... dos2unix – Dateien vom DOS- in UNIX-Format umwandeln ... 559
... expand – Tabulatoren in Leerzeichen umwandeln ... 559
... file – den Inhalt von Dateien analysieren ... 559
... find – Suchen nach Dateien ... 560
... fold – einfaches Formatieren von Dateien ... 561
... head – Anfang einer Datei ausgeben ... 562
... less – Datei(en) seitenweise ausgeben ... 562
... ln – Links auf eine Datei erzeugen ... 563
... ls – Verzeichnisinhalt auflisten ... 563
... more – Datei(en) seitenweise ausgeben ... 564
... mv – Datei(en) und Verzeichnisse verschieben oder umbenennen ... 564
... nl – Datei mit Zeilennummer ausgeben ... 564
... od – Datei(en) hexadezimal bzw. oktal ausgeben ... 565
... paste – Dateien spaltenweise verknüpfen ... 565
... pcat – Ausgabe von pack-komprimierten Dateien ... 565
... rm – Dateien und Verzeichnisse löschen ... 566
... sort – Dateien sortieren ... 566
... split – Dateien in mehrere Teile zerlegen ... 567
... tac – Dateien rückwärts ausgeben ... 568
... tail – Ende einer Datei ausgeben ... 568
... tee – Ausgabe duplizieren ... 569
... touch – Anlegen von Dateien oder Zeitstempel verändern ... 569
... tr – Zeichen ersetzen bzw. Umformen von Dateien ... 569
... type – Kommandos klassifizieren ... 569
... umask – Dateierstellungsmaske ändern bzw. ausgeben ... 570
... uniq – doppelte Zeilen nur einmal ausgeben ... 570
... unix2dos – Dateien vom UNIX- in DOS-Format umwandeln ... 570
... wc – Zeilen, Wörter und Zeichen einer Datei zählen ... 571
... whereis – Suche nach Dateien ... 571
... zcat, zless, zmore – (seitenweise) Ausgabe von gunzip-komprimierten Dateien ... 571
14.3 ... Verzeichnisorientierte Kommandos ... 572
... basename – gibt den Dateianteil eines Pfadnamens zurück ... 572
... cd – Verzeichnis wechseln ... 572
... dircmp – Verzeichnisse rekursiv vergleichen ... 572
... dirname – Verzeichnisanteil eines Pfadnamens zurückgeben ... 572
... mkdir – ein Verzeichnis anlegen ... 572
... pwd – Ausgeben des aktuellen Arbeitsverzeichnisses ... 573
... rmdir – ein leeres Verzeichnis löschen ... 573
14.4 ... Verwaltung von Benutzern und Gruppe ... 573
... exit, logout – eine Session (Sitzung) beenden ... 573
... finger – Informationen zu anderen Benutzern abfragen ... 574
... groupadd, groupmod, groupdel – Gruppenverwaltung (distributionsabhängig) ... 574
... groups – Gruppenzugehörigkeit ausgeben ... 575
... id – eigene Benutzer- und Gruppen-ID ermitteln ... 575
... last – An- und Abmeldezeit eines Benutzers ermitteln ... 575
... logname – Name des aktuellen Benutzers anzeigen ... 575
... newgrp – Gruppenzugehörigkeit kurzzeitig wechseln (betriebssystemspezifisch) ... 575
... passwd – Passwort ändern bzw. vergeben ... 576
... useradd/adduser, userdel, usermod – Benutzerverwaltung (distributionsabhängig) ... 576
... who – eingeloggte Benutzer anzeigen ... 577
... whoami – Name des aktuellen Benutzers anzeigen ... 577
14.5 ... Programm- und Prozessverwaltung ... 578
... at – Kommando zu einem bestimmten Zeitpunkt ausführen lassen ... 578
... batch – Kommando irgendwann später ausführen lassen ... 578
... bg – einen angehaltenen Prozess im Hintergrund fortsetzen ... 579
... cron/crontab – Programme in bestimmten Zeitintervallen ausführen lassen ... 579
... fg – einen angehaltenen Prozess im Vordergrund fortsetzen ... 579
... jobs – Anzeigen angehaltener bzw. im Hintergrund laufender Prozesse ... 580
... kill – Signale an Prozesse mit einer Prozessnummer senden ... 580
... killall – Signale an Prozesse mit einem Prozessnamen senden ... 580
... nice – Prozesse mit anderer Priorität ausführen lassen ... 580
... nohup – Prozesse beim Beenden einer Sitzung weiterlaufen lassen ... 581
... ps – Prozessinformationen anzeigen ... 581
... pgrep – Prozesse über ihren Namen finden ... 582
... pstree – Prozesshierachie in Baumform ausgeben ... 582
... renice – Priorität laufender Prozesse verändern ... 583
... sleep – Prozesse suspendieren (schlafen legen) ... 583
... su – Ändern der Benutzerkennung (ohne Neuanmeldung) ... 583
... sudo – Programm als anderer Benutzer ausführen ... 584
... time – Zeitmessung für Prozesse ... 585
... top – Prozesse nach CPU-Auslastung anzeigen (betriebssystemspezifisch) ... 585
14.6 ... Speicherplatzinformationen ... 585
... df – Abfrage des benötigten Speicherplatzes für die Dateisysteme ... 585
... du – Größe eines Verzeichnisbaums ermitteln ... 586
... free – verfügbaren Speicherplatz (RAM und Swap) anzeigen (betriebssystemabhängig) ... 587
... swap – Swap-Space anzeigen (nicht Linux) ... 587
14.7 ... Dateisystem-Kommandos ... 587
... badblocks – überprüft, ob ein Datenträger defekte Sektoren hat ... 587
... cfdisk – Partitionieren von Festplatten ... 588
... dd – Datenblöcke zwischen Device (Low Level) kopieren (und konvertieren) ... 588
... dd_rescue – fehlertolerantes Kopieren von Dateiblöcken ... 590
... dumpe2fs – zeigt Informationen über ein ext2/ext3- Dateisystem an ... 591
... e2fsck – repariert ein ext2/ext3-Dateisystem ... 591
... fdformat – formatiert eine Diskette ... 592
... fdisk – Partitionieren von Speichermedien ... 593
... fsck – Reparieren und Überprüfen von Dateisystemen ... 594
... mkfs – Dateisystem einrichten ... 595
... mkswap – eine Swap-Partition einrichten ... 596
... mount, umount – An- bzw. Abhängen eines Dateisystems ... 597
... parted – Partitionen anlegen, verschieben, vergrößern oder verkleinern ... 598
... prtvtoc – Partitionstabellen ausgeben ... 598
... swapon, swapoff – Swap-Datei oder Partition (de)aktivieren ... 598
... sync – alle gepufferten Schreiboperationen ausführen ... 598
14.8 ... Archivierung und Backup ... 599
... bzip2/bunzip2 – (De-)Komprimieren von Dateien ... 599
... compress/uncompress – (De-)Komprimieren von Dateien ... 600
... cpio, afio – Dateien und Verzeichnisse archivieren ... 600
... crypt – Dateien verschlüsseln ... 603
... dump/restore bzw. ufsdump/ufsrestore – Vollsicherung bzw. ... gzip/gunzip – (De-)Komprimieren von Dateien ... 606
... mt – Streamer steuern ... 607
... pack/unpack – (De-)Komprimieren von Dateien ... 607
... tar – Dateien und Verzeichnisse archivieren ... 608
... zip/unzip – (De-)Komprimieren von Dateien ... 612
14.9 ... Systeminformationen ... 613
... cal – zeigt einen Kalender an ... 613
... date – Datum und Uhrzeit ... 614
... uname – Rechnername, Architektur und OS ausgeben ... 614
... uptime – Laufzeit des Rechners ... 615
14.10 ... System-Kommandos ... 615
... dmesg – letzte Boot-Meldung des Kernels anzeigen ... 615
... halt – alle laufenden Prozesse beenden ... 615
... reboot – alle laufenden Prozesse beenden und System neu starten ... 615
... shutdown – System herunterfahren ... 616
14.11 ... Druckeradministration ... 617
14.12 ... Netzwerkbefehle ... 618
... arp – Ausgeben von MAC-Adressen ... 618
... ftp – Dateien zu einem anderen Rechner übertragen ... 618
... hostname – Rechnername ermitteln ... 624
... ifconfig – Netzwerkzugang konfigurieren ... 624
... mail/mailx – E-Mails schreiben und empfangen (und auswerten) ... 626
... uuencode/uudecode – Text- bzw. Binärdateien codieren ... 627
... netstat – Statusinformationen über das Netzwerk ... 628
... nslookup (host/dig) – DNS-Server abfragen ... 628
... ping – Verbindung zu anderem Rechner testen ... 629
... ssh – sichere Shell auf anderem Rechner starten ... 630
... scp – Dateien kopieren zwischen unterschiedlichen Rechnern ... 632
... rsync – Replizieren von Dateien und Verzeichnissen ... 633
... traceroute – Route zu einem Rechner verfolgen ... 635
14.13 ... Benutzerkommunikation ... 636
... wall – Nachrichten an alle Benutzer verschicken ... 636
... write – Nachrichten an andere Benutzer verschicken ... 636
... mesg – Nachrichten auf die Dialogstation zulassen oder unterbinden ... 636
14.14 ... Bildschirm- und Terminalkommandos ... 637
... clear – Löschen des Bildschirms ... 637
... reset – Zeichensatz für ein Terminal wiederherstellen ... 637
... setterm – Terminal-Einstellung verändern ... 637
... stty – Terminal-Einstellung abfragen oder setzen ... 638
... tty – Terminal-Name erfragen ... 639
... tput – Terminal- und Cursorsteuerung ... 639
14.15 ... Online-Hilfen ... 640
... apropos – nach Schlüsselwörtern in man-Seiten suchen ... 640
... info – GNU-Online-Manual ... 640
... man – die traditionelle Online-Hilfe ... 640
... whatis – Kurzbeschreibung zu einem Kommando ... 641
14.16 ... Alles rund um PostScript-Kommandos ... 642
14.17 ... Gemischte Kommandos ... 642
... alias/unalias – Kurznamen für Kommandos vergeben bzw. ... bc – Taschenrechner ... 642
... printenv bzw. env – Umgebungsvariablen anzeigen ... 643

15 ... Die Praxis ... 645

15.1 ... Alltägliche Lösungen ... 646
... 15.1.1 ... Auf alphabetische und numerische Zeichen prüfen ... 646
... 15.1.2 ... Auf Integer überprüfen ... 647
... 15.1.3 ... echo mit oder ohne -n ... 649
15.2 ... Datei-Utilities ... 650
... 15.2.1 ... Leerzeichen im Dateinamen ersetzen ... 650
... 15.2.2 ... Dateiendungen verändern ... 651
... 15.2.3 ... Nach veränderten Dateien in zwei Verzeichnissen vergleichen ... 653
15.3 ... Systemadministration ... 654
... 15.3.1 ... Benutzerverwaltung ... 655
... 15.3.2 ... Systemüberwachung ... 673
15.4 ... Backup-Strategien ... 679
... 15.4.1 ... Warum ein Backup? ... 679
... 15.4.2 ... Sicherungsmedien ... 681
... 15.4.3 ... Varianten der Sicherungen ... 681
... 15.4.4 ... Bestimmte Bereiche sichern ... 682
... 15.4.5 ... Backup über ssh mit tar ... 683
... 15.4.6 ... Daten mit rsync synchronisieren ... 689
... 15.4.7 ... Dateien und Verzeichnisse per E-Mail versenden ... 693
... 15.4.8 ... Startup-Scripts ... 695
15.5 ... World Wide Web und HTML ... 702
... 15.5.1 ... Analysieren von access_log (Apache) ... 703
... 15.5.2 ... Analysieren von error_log (Apache) ... 707
15.6 ... CGI (Common Gateway Interface) ... 710
... 15.6.1 ... CGI-Scripts ausführen ... 711
... 15.6.2 ... CGI-Environment ausgeben ... 712
... 15.6.3 ... Einfache Ausgabe als Text ... 713
... 15.6.4 ... Ausgabe als HTML formatieren ... 716
... 15.6.5 ... Systeminformationen ausgeben ... 718
... 15.6.6 ... Kontaktformular ... 720
... 15.6.7 ... Noch ein Tipp ... 724

16 ... GUIs mit Tcl/Tk ... 725

16.1 ... Was ist und was kann Tcl/Tk? ... 725
16.2 ... Ein Tcl/Tk-Skript starten ... 726
16.3 ... Variablen ... 728
16.4 ... Einfache Ausgabe ... 729
16.5 ... Substitutionsmechanismen ... 729
... 16.5.1 ... Variablensubstitution ... 729
... 16.5.2 ... Befehlssubstitution ... 730
... 16.5.3 ... Backslashsubstitution ... 730
16.6 ... Mathematische Ausdrücke ... 731
16.7 ... Programmstrukturen ... 731
... 16.7.1 ... Verzweigungen ... 732
... 16.7.2 ... Schleifen ... 733
... 16.7.3 ... Prozeduren (Funktionen) ... 735
16.8 ... Listen ... 736
16.9 ... Stringverarbeitung ... 736
16.10 ... Dateizugriff ... 736
... 16.10.1 ... open ... 737
... 16.10.2 ... puts ... 737
... 16.10.3 ... gets ... 738
... 16.10.4 ... read ... 739
16.11 ... Der Rest ... 739
16.12 ... Das Tk-Toolkit ... 739
16.13 ... Eine Einführung ... 740
16.14 ... Eine einfache Schaltfläche – button ... 741
16.15 ... Einzeiliges Textfeld – entry ... 742
16.16 ... Mehrzeiliger Text und ein Menü – text und menu ... 743
16.17 ... Mit Ereignissen verbinden – bind ... 747
16.18 ... Layoutmanager (Geometriemanager) – grid und pack ... 749
... 16.18.1 ... pack ... 749
... 16.18.2 ... grid ... 752
16.19 ... Eine Scrollleiste – scrollbar ... 754
16.20 ... Weitere Eingabe-Widgets – radiobutton, checkbutton, scale und spinbox ... 755
... 16.20.1 ... radiobutton ... 755
... 16.20.2 ... checkbutton ... 756
... 16.20.3 ... scale ... 756
... 16.20.4 ... spinbox ... 757
... 16.20.5 ... Beispiel ... 758
16.21 ... frame und labelframe ... 760
16.22 ... Listen – listbox ... 760
16.23 ... Darstellen von Grafiken – canvas ... 762
16.24 ... Ein geteiltes Fenster – panedwindow ... 763
16.25 ... Widgetübersicht ... 764
16.26 ... Dialoge (tk_) ... 765
16.27 ... Tile-Erweiterung (ttk_) ... 765
16.28 ... Weitere Empfehlungen ... 766

A ... Anhang ... 769

A.1 ... Shell-Builtin-Befehle ... 769
A.2 ... Externe Kommandos ... 771
A.3 ... Shell-Optionen ... 772
A.4 ... Shell-Variablen ... 773
A.5 ... Kommandozeile editieren ... 778
A.6 ... Wichtige Tastenkürzel (Kontrolltasten) ... 780
A.7 ... Initialisierungsdateien der Shells ... 781
A.8 ... Signale ... 782
A.9 ... Sonderzeichen und Zeichenklassen ... 784
A.10 ... Die Buch-DVD ... 785