Brian W. Kernighan Rob Pike Der UNIX-Werkzeugkasten Programmieren mit UNIX Die deutsche Ausgabe besorgte Prof. Dr. A.-T Schreiner H INFORMATIK! \J i i11 IC i\. Seih gebietet- \ Standorts _ Carl Hanser Verlag München Wien
Xlll Vorwort Vorwort zur deutschen Ausgabe Kapitel 1: UNIX für Anfänger 1 1.1 Die ersten Schritte 2 Grundsätzliches zu Terminals und Tippen - Eine UNIX Sitzung - Anmelden - Kommandos eingeben - Wenn das Terminal verrückt spielt - Tippfehler - Voraustippen - Programm abbrechen - Abmelden - Post - Kommunikation am Terminal - Nachrichten - Das Benutzerhandbuch - Computer-unterstützter Unterricht - Spiele 1.2 Der Alltag: Dateien und allgemeine Kommandos 12 Dateien erzeugen: Der Editor - Was für Dateien sind eigentlich da? - Dateierx ausgeben: "cat" und "pr" - Dateien verlagern, kopieren und löschen: "mv", "cp", "rm" - Was ist ein Dateiname? - Eine Handvoll nützlicher Kommandos - Zusammenfassung der Dateikommandos 1.3 Mehr über Dateien: Kataloge 24 Katalog wechseln: "cd" 1.4 Die Shell,. 28 Abkürzungen für Dateinamen - Ein- und Ausgabe umlenken - Pipelines - Prozesse - Die Umgebung maßschneidern 1.5 Der Rest des UNIX Systems 41 Geschichte und Literaturhinweise 42 Kapitel 2: Das Dateisystem 43 2.1 Grundbegriffe über Dateien 43 2.2 Was ist eine Datei?..., 48 2.3 Kataloge und Dateinamen 51 2.4 Zugriffsschutz : 55 2.5 Der Begriff der Inode 61 2.6 Die Dateihierarchie 67 2.7 Geräte '. 70 Geschichte und Literaturhinweise 75 X/Kapitel 3: Shell-Benutzung 77 3.1 Struktur einer Kommandozeile 77 3.2 Metazeichen 80 Ein Exkurs zu "echo" - Die UNIX und ihr Echo 3.3 Neue Kommandos erzeugen 86 3.4 Kommandoargumente und Parameter 89 3.5 Die Ausgabe eines Programms als Argument 93 3.6 Shell-Variablen 94 _ Q3.7 Mehr über Ein- und Ausgabe-Umlenkung 99 3.8 Schleifen in Shell-Programmen 101 v x
xiv 3.9 Alles sinnvoll verbinden: "bündle" 104 3.10 Warum ist die Shell programmierbar? 106 Geschichte und Literaturhinweise 107 ^/Kapitel 4: Filter 109 4.1 Die "grep"-familie 109 4.2 Andere Filter 114 4.3 Der Pipeline-Editor "sed" 116 4.4 Die Muster- und String-Programmiersprache "awk" 123 Felder - Ausgabe - Muster - Die Muster "BEGIN" und "END" - Arithmetik und Variablen - Programmablauf - Vektoren - Vektoren mit Inhaltadressierung - Strings - Zusammenarbeit mit der Shell - Ein Terminkalender mit Hilfe von "awk" - Was nicht erklärt wurde 4.5 Gute Dateien und gute Filter 140 Geschichte und Literaturhinweise 141 /Kapitel 5: Shell-Programmierung 143 5.1 "cal" nach Maß 143 5.2 Was ist "which"? 148 5.3 Ereignisse abwarten: "while" und "until" Schleifen 154 5.4 Signale abfangen: "trap" 160 5.5 Eine Datei ersetzen: "overwrite" 163 5.6 Prozesse per Namen abbrechen: "zap" 167 5.7 Leerzeichen contra Argumente: "pick" 170 5.8 Neuigkeiten: "news" 173 5.9 Dateiänderungen verfolgen: "get" und "put" 176 5.10 Ein Blick zurück 181 Geschichte und Literaturhinweise 182 ' Kapitel 6: Programmieren mit "stdio" 183 6.1 Standard-Ein- und Ausgabe: "vis" 184 6.2 Kommandoargumente: "vis" Version 2 : 187 6.3 Dateizugriff: "vis" Version 3 189 6.4 Einen Schirm auf einmal: "p" :. 193 6.5 Ein Beispiel: "pick" 199 6.6 Über Fehler und Fehlersuche 200 6.7 Ein Beispiel: "zap" 203 6.8 Im Dialog Dateien vergleichen: "idiff" 206 6.9 Zugriff auf globale Shell-Variablen.;.-. 212 Geschichte und Literaturhinweise 213 Kapitel 7: UNIX Systemaufrufe 215 7.1 Elementare Ein- und Ausgabe 215 Filedeskriptoren - Ein- und Ausgabe für Dateien: "read" und "write" - Dateien erzeugen: "open", "creat", "dose", "unlink" - Fehlerbehandlung: "errno" - Wahlfreier Zugriff: "Iseek" 7.2 Dateisystem: Kataloge 223
xv 7.3 Dateisystem: Der Begriff der Inode 228 Ein Beispiel für Fehlerbehandlung: "sv" 7.4 Prozesse 234 Elementare Prozeßerzeugung: "execlp" und "execvp" - Prozeßsteuerung: "fork" und "wait" 7.5 Signale 239 Zeitintervalle Geschichte und Literaturhinweise 246 Kapitel 8: Programmentwicklung 247 8.L Stufe 1: Eine Rechenmaschine mit vier Operationen 248 v/ Grammatiken - Eine Übersicht zu "yacc" - Das Programm zu Stufe 1 - Änderungen: Ein negatives Vorzeichen - Exkurs zu "make" ^ Stufe 2: Variablen und Fehlerbehandlung 257 Stufe 3: Beliebige Variablennamen; Standardfunktionen 262 Noch ein Exkurs zu "make" - Ein Exkurs zu "lex" 8.4 Stufe 4: Übersetzung für eine Maschine 275 Ein dritter. Exkurs zu "make" 8.5 Stufe 5: Kontrollstrukturen und Vergleiche 284 8.6 Stufe 6: Funktionen und Prozeduren; Ein- und Ausgabe 291 8.7 Qualitätskontrolle 302 8.8 Ein Blick zurück 304 Geschichte und Literaturhinweise 305 Kapitel 9: Dokumentation ; 307 9.1 Das "ms" Makropaket 309 Unformatierte Teile - Änderungen der Schriftart - Verschiedene Kommandos - Das "mm" Makropaket 9.2 Die "troff" Ebene 316 Namen für Zeichen - Änderungen in Schrifttyp und -große - Elementare "troff" Kommandos - Eigene Makros 9.3 Die Preprozessoren "tbl" und "eqn" 321 Tabellen - Mathematische Formeln - Ausgabe erzeugen ' 9.4 Die Manualseite 328 9.5 Andere Werkzeuge zur Textaufbereitung 333 Geschichte und Literaturhinweise 335 Kapitel 10: Epilog 337 Anhang 1: Editor-Kurzbeschreibung 341 Die Grundlagen - Ausflug zur Shell mit "!" - Ausgabe - Suchmuster - Wo sind wir überhaupt? - Anfügen, Ändern, Löschen, Einfügen - Textersatz - Metazeichen und reguläre Ausdrücke - Globale Kommandos - Zeilen verlagern und kopieren - Marken und Zeilennummern - Zeilen zusammenfügen, zerteilen und umbauen - Dateikommandos - Verschlüsselung - Zusammenfassung der Kommandos
xvi Anhang 2: "hoc" Manual 353 Arithmetische Ausdrücke - Anweisungen und Ablauf - Ein- und Ausgabe: "read" und "print" - Funktionen und Prozeduren - Beispiele Anhang 3: "hoc" Protokoll 359 Sachverzeichnis 375 Tabellen (herausnehmbare Kopie) rückwärtiger Umschlag innen