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

Inhaltsverzeichnis

 1 ... Einführung ... 29
 1.1 ... Anforderung an den Leser ... 29
 1.2 ... Anforderung an das Betriebssystem ... 30
 1.3 ... Von UNIX ... ... 30
 1.4 ... ... zu Linux ... 32
 1.5 ... Der Compiler GCC - eine kurze Einführung ... 33
 1.5.1 ... GCC erhöre uns - der Aufruf ... 33
 1.5.2 ... Was befiehlst du - Meister? ... 34
 1.5.3 ... Klassifikation der Dateitypen ... 37
 1.6 ... POSIX, X/OPEN und ANSI C ... 37
 1.7 ... Übersicht zum Buch ... 39
 1.8 ... Schreibkonventionen ... 41
 1.9 ... Notationsstil ... 42
 1.10 ... Weitere Hilfen ... 42
 2 ... E/A-Funktionen ... 43
 2.1 ... Elementare E/A-Funktionen ... 43
 2.2 ... Filedeskriptor ... 44
 2.2.1 ... Verwaltung für offene Deskriptoren ... 45
 2.3 ... Funktionen, die den Filedeskriptor verwenden ... 46
 2.3.1 ... Datei öffnen - open() ... 46
 2.3.2 ... Anlegen einer neuen Datei - creat() ... 51
 2.3.3 ... Datei schließen - close() ... 52
 2.3.4 ... Schreiben von Dateien - write() ... 52
 2.3.5 ... Lesen von Dateien - read() ... 55
 2.3.6 ... Schreib-/Lesezeiger positionieren - lseek() ... 57
 2.3.7 ... Duplizieren von Filedeskriptoren - dup() und dup2() ... 59
 2.3.8 ... Ändern oder Abfragen der Eigenschaften eines Filedeskriptors - fcntl() ... 61
 2.3.9 ... Record Locking - Sperren von Dateien einrichten ... 66
 2.3.10 ... Multiplexing E/A - select() ... 75
 2.3.11 ... Unterschiedliche Operationen - ioctl() ... 78
 2.3.12 ... Lesen und Schreiben mehrerer Puffer - writev() und readv() ... 79
 2.3.13 ... Übersicht zu weiteren Funktionen, die den Filedeskriptor verwenden ... 80
 2.4 ... Standard-E/A-Funktionen ... 84
 2.4.1 ... Der FILE-Zeiger ... 84
 2.4.2 ... Öffnen und Schließen von Dateien ... 85
 2.4.3 ... Formatierte Ausgabe ... 86
 2.4.4 ... Formatierte Eingabe ... 87
 2.4.5 ... Binäres Lesen und Schreiben ... 88
 2.4.6 ... Zeichen- und zeilenweise Ein-/Ausgabe ... 88
 2.4.7 ... Status der Ein-/Ausgabe überprüfen ... 89
 2.4.8 ... Stream positionieren ... 90
 2.4.9 ... Puffer kontrollieren ... 91
 2.4.10 ... Datei löschen und umbenennen ... 92
 2.4.11 ... Temporäre Dateien erstellen ... 93
 2.5 ... Mit Verzeichnissen arbeiten ... 94
 2.5.1 ... Ein neues Verzeichnis anlegen - mkdir() ... 94
 2.5.2 ... In ein Verzeichnis wechseln - chdir(), fchdir() ... 95
 2.5.3 ... Ein leeres Verzeichnis löschen - rmdir() ... 97
 2.5.4 ... Format eines Datei-Eintrags in struct dirent ... 97
 2.5.5 ... Einen Verzeichnisstream öffnen - opendir() ... 99
 2.5.6 ... Lesen aus dem DIR-Stream - opendir()und Schließen des DIR-Streams - closedir() ... 100
 2.5.7 ... Positionieren des DIR-Streams ... 103
 2.5.8 ... Komplettes Verzeichnis einlesen - scandir() ... 104
 2.5.9 ... Ganze Verzeichnisbäume durchlaufen - ftw() ... 108
 2.6 ... Fehlerbehandlung ... 112
 2.7 ... Ausblick ... 114
 3 ... Attribute von Dateien und Verzeichnissen ... 115
 3.1 ... Struktur stat ... 115
 3.1.1 ... Dateiart und Zugriffsrechte einer Datei erfragen - st_mode ... 116
 3.1.2 ... User-ID-Bit und Group-ID-Bit - st_uid und st_gid ... 119
 3.1.3 ... Inode ermitteln - st_ino ... 120
 3.1.4 ... Linkzähler - st_nlink ... 120
 3.1.5 ... Größe der Datei - st_size ... 124
 3.1.6 ... st_atime, st_mtime, st_ctime ... 125
 4 ... Zugriff auf Systeminformationen ... 129
 4.1 ... Informationen aus dem /proc-Verzeichnis herausziehen ... 129
 4.2 ... Hardware-/Systeminformationen ermitteln ... 131
 4.2.1 ... CPU-Informationen - /proc/cpuinfo ... 131
 4.2.2 ... Geräteinformationen - /proc/devices ... 132
 4.2.3 ... Speicherauslastung - /proc/meminfo ... 132
 4.2.4 ... Weitere Hardware-Informationen zusammengefasst ... 132
 4.3 ... Prozessinformationen ... 135
 4.3.1 ... /proc/$pid/cmdline ... 136
 4.3.2 ... /proc/$pid/environ ... 137
 4.3.3 ... /proc/self ... 137
 4.3.4 ... /proc/$pid/fd/ ... 138
 4.3.5 ... /proc/$pid/statm ... 139
 4.4 ... Kernel-Informationen ... 139
 4.4.1 ... /proc/locks ... 145
 4.4.2 ... /proc/modules ... 145
 4.5 ... Filesysteme ... 146
 4.5.1 ... /proc/mounts ... 146
 4.6 ... Weiterführendes ... 146
 5 ... Devices - eine einfache Verbindung zur Hardware ... 149
 5.1 ... Die Gerätedateitypen ... 149
 5.2 ... Die Gerätedateinummern ... 150
 5.3 ... Zugriff auf die Gerätedateien ... 151
 5.4 ... Gerätenamen ... 152
 5.5 ... Spezielle Gerätedateien ... 153
 5.6 ... Gerätedateien in der Praxis einsetzen ... 154
 5.6.1 ... CD auswerfen und wieder schließen ... 156
 5.6.2 ... CD-ROM-Fähigkeiten ... 157
 5.6.3 ... Audio-CD abspielen - komplett und einzelne Tracks - Pause, Fortfahren und Stopp ... 157
 5.6.4 ... Aktuellen Status der Audio-CD ermitteln ... 161
 5.6.5 ... Das komplette Listing ... 163
 6 ... System- und Benutzerdateien ... 169
 6.1 ... Die Datei /etc/passwd ... 169
 6.1.1 ... Die Datei /etc/passwd auswerten ... 170
 6.1.2 ... getpwuid und getpwnam - einzelne Abfrage von /etc/passwd ... 171
 6.1.3 ... getpwent, setpwent und endpwent - komplette Abfragevon /etc/passwd ... 173
 6.2 ... Die Datei /etc/shadow ... 174
 6.2.1 ... Die Datei /etc/shadow auswerten ... 175
 6.2.2 ... getspent, setspent und endspent - komplette Abfrage von /etc/shadow ... 176
 6.3 ... Die Datei /etc/group ... 179
 6.3.1 ... Die Datei /etc/group auswerten ... 180
 6.3.2 ... getgrnam und getgrgid - einzelne Einträge aus /etc/group abfragen ... 180
 6.3.3 ... getgrent, setgrent und endgrent - alle Einträge in /etc/group abfragen ... 182
 6.4 ... uname - Informationen zum lokalen System erfragen ... 183
 6.5 ... Das Verzeichnis /etc/skel und Network Information Service (NIS) ... 184
 6.6 ... Dateien für Netzwerkinformationen ... 184
 7 ... Dämonen, Zombies und Prozesse ... 187
 7.1 ... Was ist ein Prozess? ... 187
 7.2 ... Prozesskomponente ... 188
 7.2.1 ... Prozessnummer (PID) ... 189
 7.2.2 ... Prozessnummer des Vaterprozesses (PPID) ... 189
 7.2.3 ... Benutzer- und Gruppennummer eines Prozesses (UID, EUID, GID, EGID) ... 189
 7.2.4 ... Prozessstatus ... 190
 7.2.5 ... Prozesspriorität ... 191
 7.2.6 ... Timesharing-Prozesse ... 191
 7.2.7 ... Prozessauslagerung ... 195
 7.2.8 ... Steuerterminal ... 195
 7.3 ... Prozesse überwachen - ps, top, kpm ... 196
 7.4 ... Lebenszyklus eines Prozesses ... 198
 7.5 ... Umgebungsvariablen eines Prozesses ... 200
 7.5.1 ... Einzelne Umgebungsvariablen abfragen ... 201
 7.5.2 ... Umgebungsvariable verändern oder hinzufügen - putenv() und setenv() ... 202
 7.5.3 ... Löschen von Umgebungsvariablen - unsetenv() und clearenv() ... 205
 7.6 ... Ressourcenlimits eines Prozesses ... 206
 7.6.1 ... Mehr Sicherheit mit Ressourcenlimits ... 209
 7.7 ... Prozesserkennung ... 209
 7.8 ... Erzeugung von Prozessen - fork() ... 211
 7.8.1 ... Pufferung ... 214
 7.8.2 ... Was wird vererbt und was nicht? ... 218
 7.8.3 ... Einen Prozess mit veränderter Priorität erzeugen ... 218
 7.9 ... Warten auf einen Prozess ... 220
 7.10 ... Die exec-Familie ... 226
 7.10.1 ... execl() ... 227
 7.10.2 ... execve() ... 228
 7.10.3 ... execv() ... 228
 7.10.4 ... execle() ... 229
 7.10.5 ... execlp() ... 229
 7.10.6 ... execvp() ... 229
 7.10.7 ... Kindprozesse mit exec-Aufruf überlagern ... 230
 7.11 ... Kommandoaufrufe aus dem Programm - system() ... 231
 7.12 ... Dämonprozesse ... 232
 7.12.1 ... Wie ein Prozess zum Dämon wird ... ... 233
 7.12.2 ... Dämon, sprich mit uns ... ... 233
 7.12.3 ... Protokollieren von Dämonen - syslog() ... 234
 7.12.4 ... syslog() in der Praxis ... 236
 7.12.5 ... Den Dämon, den ich rief ... ... 238
 7.13 ... Rund um die Ausführung von Prozessen ... 242
 7.13.1 ... Einen Dämon beim Booten mit einem init-Skript starten ... 242
 7.13.2 ... Hintergrundprozesse und Jobkontrolle ... 249
 7.13.3 ... Prozesse zeitgesteuert ausführen (cron-Jobs) ... 252
 7.14 ... Zusammenfassung und Ausblick ... 254
 8 ... Signale ... 255
 8.1 ... Grundlage zu den Signalen ... 255
 8.1.1 ... Signalmaske ... 257
 8.1.2 ... Signale und fork() ... 257
 8.1.3 ... Signale und exec ... 258
 8.1.4 ... Übersicht zu den Signalen ... 258
 8.2 ... Das neue Signalkonzept ... 260
 8.2.1 ... Wozu ein »neues« Signalkonzept? ... 260
 8.3 ... Signalmenge initialisieren ... 260
 8.4 ... Signalmenge hinzufügen oder löschen ... 261
 8.5 ... Signale einrichten oder erfragen ... 261
 8.5.1 ... Einen Signalhandler einrichten, der zurückkehrt ... 265
 8.6 ... Signal an den eigenen Prozess senden - raise() ... 267
 8.7 ... Signale an andere Prozesse senden - kill() ... 267
 8.8 ... Zeitschaltuhr einrichten - alarm() ... 268
 8.9 ... Prozesse stoppen, bis ein Signal eintritt - pause() ... 268
 8.10 ... Prozesse für eine bestimmte Zeit stoppen - sleep() und usleep() ... 269
 8.11 ... Signalmaske erfragen oder ändern - sigprocmask() ... 269
 8.12 ... Prozess während einer Änderung der Signalmaske stoppen - sigsuspend() ... 270
 8.13 ... Prozesse synchronisieren ... 271
 9 ... IPC - Interprozesskommunikation ... 275
 9.1 ... Unterschiedliche Interprozesskommunikations-Techniken im Überblick ... 276
 9.1.1 ... (Namenlose) Pipes ... 276
 9.1.2 ... Benannte Pipes (FIFO-Pipes) ... 277
 9.1.3 ... Message Queue (Nachrichtenspeicher) ... 278
 9.1.4 ... Semaphore ... 279
 9.1.5 ... Shared Memory (gemeinsamer Speicher) ... 279
 9.1.6 ... STREAMS ... 280
 9.1.7 ... Sockets ... 281
 9.1.8 ... Lock Files (Sperrdateien) ... 281
 9.1.9 ... Dateisperren (Record Locking) ... 281
 9.2 ... Gründe für IPC ... 282
 9.3 ... Pipes ... 283
 9.3.1 ... Eigenschaften von Pipes ... 283
 9.3.2 ... Pipes einrichten - pipe() ... 283
 9.3.3 ... Eigenschaften von elementaren E/A-Funktionen bei Pipes ... 287
 9.3.4 ... Standard-E/A-Funktionen mit pipe ... 287
 9.3.5 ... Pipes in einen anderen Prozess umleiten ... 289
 9.3.6 ... Filterprogramm erstellen mithilfe einer Pipe ... 292
 9.3.7 ... Einrichten einer Pipe zu einem anderen Prozess - popen() ... 295
 9.3.8 ... Mail versenden mit Pipes und Sendmail ... 296
 9.3.9 ... Drucken über eine Pipe mit lpr ... 299
 9.3.10 ... Benannte Pipes - FIFOs ... 303
 9.4 ... System-V-Interprozesskommunikation ... 318
 9.4.1 ... Gemeinsamkeiten der SysV-Mechanismen ... 318
 9.4.2 ... Ein Objekt einrichten, eine Verbindung herstellen und das Objekt wieder löschen ... 320
 9.4.3 ... Datenaustausch zwischen nicht verwandten Prozessen ... 320
 9.5 ... Semaphore ... 321
 9.5.1 ... Lebenszyklus eines Semaphors ... 321
 9.5.2 ... Ein Semaphor öffnen oder erstellen - semget() ... 324
 9.5.3 ... Abfragen, ändern oder löschen der Semaphormenge - semctl() ... 325
 9.5.4 ... Operationen auf Semaphormengen - semop() ... 326
 9.5.5 ... Semaphore im Vergleich mit Sperren ... 328
 9.6 ... Message Queues ... 328
 9.6.1 ... Eine Message Queue öffnen oder erzeugen - msgget() ... 329
 9.6.2 ... Nachrichten versenden - msgsnd() ... 329
 9.6.3 ... Eine Nachricht empfangen - msgrcv() ... 330
 9.6.4 ... Abfragen, ändern oder löschen einer Message Queue - msgctl() ... 331
 9.7 ... Shared Memory ... 339
 9.7.1 ... Ein Shared-Memory-Segment erstellen oder öffnen - shmget() ... 339
 9.7.2 ... Ein Shared-Memory-Segment abfragen, ändern oder löschen - shmctl() ... 340
 9.7.3 ... Ein Shared-Memory-Segment anbinden (attach) - shmat() ... 341
 9.7.4 ... Ein Shared-Memory-Segment loslösen - shmdt() ... 341
 9.7.5 ... Client-Server-Beispiel - Shared Memory ... 342
 10 ... Threads ... 349
 10.1 ... Unterschiede zwischen Threads und Prozessen ... 349
 10.2 ... Thread-Bibliotheken ... 350
 10.3 ... Kernel- und User-Threads ... 351
 10.4 ... Scheduling und Zustände von Threads ... 351
 10.5 ... Die grundlegenden Funktionen zur Thread-Programmierung ... 352
 10.5.1 ... pthread_create - einen neuen Thread erzeugen ... 352
 10.5.2 ... pthread_exit - einen Thread beenden ... 353
 10.5.3 ... pthread_join - auf das Ende eines Threads warten ... 354
 10.5.4 ... pthread_self - die ID von Threads ermitteln ... 354
 10.5.5 ... pthread_equal - die ID von zwei Threads vergleichen ... 359
 10.5.6 ... pthread_detach - einen Thread unabhängig machen ... 361
 10.6 ... Die Attribute von Threads und das Scheduling ... 362
 10.7 ... Threads synchronisieren ... 367
 10.7.1 ... Mutexe ... 370
 10.7.2 ... Condition-Variablen (Bedingungsvariablen) ... 377
 10.7.3 ... Semaphore ... 387
 10.7.4 ... Weitere Synchronisationstechniken im Überblick ... 390
 10.8 ... Threads abbrechen (canceln) ... 391
 10.9 ... Erzeugen von Thread-spezifischen Daten (TSD-Data) ... 395
 10.10 ... pthread_once - Codeabschnitt einmal ausführen ... 398
 10.11 ... Thread-safe (thread-sichere Funktionen) ... 400
 10.12 ... Threads und Signale ... 401
 10.13 ... Zusammenfassung und Ausblick ... 405
 11 ... Netzwerkprogrammierung ... 407
 11.1 ... Einführung ... 407
 11.2 ... Aufbau von Netzwerken ... 408
 11.2.1 ... ISO/OSI und TCP/IP - Referenzmodell ... 408
 11.2.2 ... Das World Wide Web (Internet) ... 410
 11.3 ... TCP/IP - Aufbau und Struktur ... 411
 11.3.1 ... Netzwerkschicht (Datenübertragung) ... 412
 11.3.2 ... Internetschicht ... 412
 11.3.3 ... Transportschicht (TCP, UDP) ... 412
 11.3.4 ... Anwendungsschicht ... 413
 11.4 ... TCP Socket ... 414
 11.5 ... Kommunikationsmodell ... 415
 11.6 ... Grundlegende Funktionen zum Zugriff auf die Socket-Schnittstelle ... 416
 11.6.1 ... Ein Socket anlegen - socket() ... 416
 11.6.2 ... Verbindungsaufbau - connect() ... 418
 11.6.3 ... Socket mit einer Adresse verknüpfen - bind() ... 420
 11.6.4 ... Auf Verbindungen warten - listen() und accept() ... 421
 11.6.5 ... Senden und empfangen von Daten (1) - write() und read() ... 422
 11.6.6 ... Senden und empfangen von Daten (2) - send() und recv() ... 422
 11.6.7 ... Verbindung schließen - close() ... 423
 11.7 ... Aufbau eines Clientprogramms ... 424
 11.7.1 ... Zusammenfassung Clientanwendung und Quellcode ... 426
 11.8 ... Aufbau des Serverprogramms ... 427
 11.8.1 ... Zusammenfassung: Serveranwendung und Quellcode ... 429
 11.9 ... IP-Adressen konvertieren, manipulieren und extrahieren ... 432
 11.9.1 ... inet_aton(), inet_pton() und inet_addr() ... 432
 11.9.2 ... inet_ntoa() und inet_ntop() ... 433
 11.9.3 ... inet_network() ... 434
 11.9.4 ... inet_netof() ... 435
 11.9.5 ... inet_lnaof() ... 435
 11.9.6 ... inet_makeaddr() ... 435
 11.10 ... Namen und IP-Adressen umwandeln ... 438
 11.10.1 ... Name-Server ... 439
 11.10.2 ... Informationen zum Rechner im Netz - gethostbyname und gethostbyaddr ... 439
 11.10.3 ... Service-Informationen - getservbyname() und getservbyport() ... 443
 11.11 ... Der Puffer ... 446
 11.12 ... Standard-E/A-Funktionen verwenden ... 447
 11.12.1 ... Pufferung von Standard-E/A-Funktionen ... 448
 11.13 ... Parallele Server ... 448
 11.14 ... Syncrones Multiplexing - select() ... 462
 11.15 ... POSIX-Threads und Netzwerkprogrammierung ... 481
 11.16 ... Optionen für Sockets setzen bzw. erfragen ... 485
 11.16.1 ... setsockopt() ... 486
 11.16.2 ... getsockopt() ... 486
 11.16.3 ... Socket-Optionen ... 486
 11.17 ... UDP ... 489
 11.17.1 ... Clientanwendung ... 491
 11.17.2 ... Serveranwendung ... 492
 11.17.3 ... recvfrom() und sendto() ... 492
 11.17.4 ... bind() verwenden oder weglassen ... 496
 11.18 ... Unix-Domain-Sockets (IPC) ... 496
 11.18.1 ... Die Adressstruktur von Unix-Domain-Sockets ... 497
 11.18.2 ... Lokale Sockets erzeugen - socketpair() ... 500
 11.19 ... Multicast-Socket ... 502
 11.19.1 ... Anwendungsgebiete von Multicast-Verbindungen ... 509
 11.20 ... Nicht blockierende I/O-Sockets ... 509
 11.21 ... Etwas zu Streams und TLI, Raw Socket, XTI ... 512
 11.21.1 ... Raw Socket ... 512
 11.21.2 ... TLI und XTI ... 513
 11.21.3 ... RPC (Remote Procedure Call) ... 513
 11.22 ... IPv4 und IPv6 ... 514
 11.22.1 ... IPv6 - ein wenig genauer ... 515
 11.23 ... Netzwerksoftware nach IPv6 portieren ... 515
 11.23.1 ... Konstanten ... 515
 11.23.2 ... Strukturen ... 516
 11.23.3 ... Funktionen ... 516
 11.24 ... Sicherheit und Verschlüsselung ... 517
 12 ... MySQL und PostgreSQL ... 519
 12.1 ... Relationales Datenbanksystem ... 519
 12.2 ... Relationaler Datenbankserver ... 521
 12.3 ... SQL-Server im Überblick ... 522
 12.4 ... MySQL ... 522
 12.4.1 ... Anwendungsgebiete von MySQL ... 523
 12.4.2 ... Schnittstellen von MySQL ... 524
 12.4.3 ... Installation von MySQL ... 524
 12.4.4 ... MySQL-Server starten und stoppen ... 524
 12.4.5 ... Konfigurationsdatei my.cnf ... 525
 12.4.6 ... Kommandozeilenwerkzeuge für und von mysql ... 526
 12.4.7 ... Grafische Clients ... 530
 12.4.8 ... MySQL-Crashkurs ... 530
 12.4.9 ... Datentypen ... 531
 12.4.10 ... Datenbank anlegen, verwenden und löschen ... 534
 12.4.11 ... Tabelle anlegen ... 535
 12.4.12 ... Schlüsselfelder (Tabellen anlegen) ... 536
 12.4.13 ... Indices ... 537
 12.4.14 ... Tabellentypen (Tabellen anlegen) ... 538
 12.4.15 ... Autowerte definieren ... 538
 12.4.16 ... Tabellen umbenennen und ändern ... 538
 12.4.17 ... Daten einfügen, ändern und löschen ... 540
 12.4.18 ... Daten importieren ... 542
 12.4.19 ... Datenausgabe ... 543
 12.4.20 ... NULL ist 0 oder undefiniert? ... 545
 12.4.21 ... Unscharfe Suche ... 545
 12.5 ... MySQL C-API ... 546
 12.5.1 ... Verbindung mit dem MySQL-Server aufbauen ... 547
 12.5.2 ... Aufgetretene Fehler ermitteln - mysql_errno() und mysql_error() ... 549
 12.5.3 ... Schließt die Verbindung zum Server - mysql_close() ... 550
 12.5.4 ... Erstes Beispiel ... 550
 12.5.5 ... Verschiedene Informationen ermitteln ... 555
 12.5.6 ... Datenbanken, Tabellen und Felder ausgeben (MYSQL_RES) ... 558
 12.5.7 ... Ergebnismenge zeilenweise bearbeiten (MYSQL_ROW) ... 560
 12.5.8 ... Ergebnismenge spaltenweise einlesen (und ausgeben) (MYSQL_FIELD) ... 562
 12.5.9 ... Ein Beispiel ... 566
 12.5.10 ... Ergebnismenge - weitere Funktionen ... 572
 12.5.11 ... Befehle an den Server - mysql_query() und mysql_real_query() ... 573
 12.5.12 ... Weitere Funktionen ... 577
 12.5.13 ... Veraltete Funktionen ... 582
 12.6 ... Beispiel eines Newssystems mit MySQL ... 583
 12.6.1 ... Die Headerdatei my_cgi.h ... 584
 12.6.2 ... (Pseudo-)Planung ... 589
 12.6.3 ... Datenbank und Tabellen anlegen ... 589
 12.6.4 ... MySQL-Clients mit GUI ... 608
 12.6.5 ... Randnotiz ... 609
 12.7 ... Neue SQL-Funktionen für die Shell - MySQL erweitern ... 609
 12.8 ... MySQL-Funktionen mit der UDF-Schnittstelle entwerfen ... 610
 12.8.1 ... UDF-Sequenzen ... 612
 12.8.2 ... UDF_INIT-Struktur ... 612
 12.8.3 ... UDF_ARGS-Struktur ... 613
 12.8.4 ... Rückgabewert ... 614
 12.8.5 ... Benutzerdefinierte Funktionen erstellen ... 615
 12.8.6 ... Benutzerdefinierte Funktion kompilieren, installieren und ausführen ... 617
 12.9 ... PostgreSQL - objektrelationales Datenbankverwaltungssystem ... 619
 12.9.1 ... PostgreSQL im Vergleich zu MySQL ... 619
 12.9.2 ... Unterschiede in der Syntax zwischen MySQL und PostgreSQL ... 620
 12.9.3 ... PostgreSQL installieren ... 621
 12.9.4 ... Konfigurationsdateien bei PostgreSQL - (postgresql.conf, pg_hba_conf) ... 622
 12.9.5 ... CRASHKURS PostgreSQL ... 624
 12.9.6 ... PostgreSQL C-API - libpg ... 631
 12.9.7 ... Umgebungsvariablen und Passwortdatei ... 651
 12.9.8 ... PostgreSQL und Threads ... 652
 12.9.9 ... Ausblick ... 652
 13 ... Terminal E/A und Benutzerschnittstellen für die Konsole ... 653
 13.1 ... termios ... 653
 13.1.1 ... Terminalattribute bearbeiten ... 654
 13.1.2 ... Flags setzen und löschen ... 659
 13.1.3 ... Terminalidentifizierung ... 665
 13.1.4 ... Geschwindigkeitskontrolle - Baudrate von Terminals einstellen ... 667
 13.2 ... terminfo ... 671
 13.2.1 ... terminfo verwenden ... 672
 13.2.2 ... terminfo initialisieren - setupterm() ... 673
 13.2.3 ... Eigenschaften eines Terminals (Finden von capnames) - tigetflag(), tigetnum() und tigetstr() ... 674
 13.2.4 ... Mit terminfo-Eigenschaften arbeiten - putp(), tputs(), tparm() ... 677
 13.3 ... ncurses - Halbgrafik ... 679
 13.3.1 ... ncurses initialisieren ... 680
 13.3.2 ... Tastaturmodus und Ein- und Ausgabe ... 681
 13.3.3 ... Eigenschaft der Fenster ... 691
 13.3.4 ... Scrolling ... 693
 13.3.5 ... Attribute und Farben setzen ... 696
 13.3.6 ... Fensterroutinen ... 700
 13.3.7 ... Mausprogrammierung mit ncurses ... 706
 14 ... GTK+ ... 715
 14.1 ... Was ist GTK+? ... 715
 14.1.1 ... Was sind GDK und Glib? ... 716
 14.1.2 ... Schnittstellen von GTK+ zu anderen Programmiersprachen ... 717
 14.1.3 ... GTK+ und GNOME ... 717
 14.1.4 ... GTK+ Version 1.2 und 2.x ... 717
 14.1.5 ... GTK+ - Aufbau des Kapitels ... 718
 14.2 ... GTK+-Anwendungen übersetzen ... 719
 14.3 ... Eine Einführung in die Glib-Bibliothek ... 720
 14.3.1 ... Datentypen ... 720
 14.3.2 ... Routinen ... 721
 14.3.3 ... Assertions-Funktionen ... 723
 14.3.4 ... Speicherverwaltung ... 725
 14.3.5 ... Stringbearbeitung ... 727
 14.3.6 ... Selbstverwaltender Stringpuffer ... 731
 14.3.7 ... Timer ... 734
 14.3.8 ... Dynamische Arrays ... 736
 14.3.9 ... Listen, Hashtabellen und binäre Bäume ... 740
 14.3.10 ... Ausblick Glib ... 740
 14.4 ... Grundlagen der GTK+-Programmierung ... 741
 14.4.1 ... Die Umgebung initialisieren ... 741
 14.4.2 ... Widgets erzeugen und ggf. die Attribute setzen ... 742
 14.4.3 ... Eine Callback-Funktion einrichten, um Events abzufangen ... 743
 14.4.4 ... Eine GTK+-Anwendung beenden ... 745
 14.4.5 ... Die hierarchische Anordnung der Widgets definieren ... 747
 14.4.6 ... Widgets anzeigen ... 748
 14.4.7 ... Signale und Events abfangen und bearbeiten - (Events-)Verarbeitungsschleife ... 748
 14.4.8 ... GTK+ und Umlaute (Zeichenkodierung) ... 749
 14.5 ... Fenster - GtkWindow ... 750
 14.5.1 ... Dialogfenster (Dialogboxen) ... 753
 14.5.2 ... GtkMessageDialog ... 757
 14.6 ... Anzeige-Elemente ... 758
 14.6.1 ... Text - GtkLabel ... 760
 14.6.2 ... Trennlinie - GtkSeparator ... 763
 14.6.3 ... Grafiken - GtkImage ... 764
 14.6.4 ... Statusleiste - GtkStatusbar ... 764
 14.6.5 ... Fortschrittsbalken - GtkProgressBar ... 765
 14.7 ... Behälter ... 765
 14.7.1 ... Boxen - GtkBox ... 765
 14.7.2 ... Aufteilungen, Register und Button-Box ... 767
 14.7.3 ... Tabellen - GtkTable ... 773
 14.7.4 ... Ausrichtung - GtkAlignment ... 776
 14.8 ... Buttons und Toogled-Buttons ... 777
 14.8.1 ... Buttons allgemein ... 783
 14.8.2 ... Radio-Buttons (GtkRadioButton) ... 783
 14.8.3 ... GtkRadioButton, GtkCheckButton und GtkToggleButton ... 784
 14.8.4 ... Signale für Buttons (GtkButton) ... 784
 14.9 ... Dateneingabe ... 785
 14.9.1 ... Textfelder - GtkEntry ... 791
 14.9.2 ... Schieberegler - GtkScale ... 792
 14.9.3 ... Zahlenfelder - GtkSpinButton ... 793
 14.9.4 ... Einstellungen - GtkAdjustment ... 794
 14.9.5 ... GtkEditable ... 795
 14.10 ... Menü und Toolbar ... 795
 14.10.1 ... Menü - GtkItemFactory ... 800
 14.10.2 ... Toolbar - GtkToolbar ... 805
 14.10.3 ... Options-Menü - GtkOptionsMenu ... 808
 14.10.4 ... Combo-Boxen - GtkCombo ... 808
 14.11 ... Mehrzeiliger Text ... 812
 14.11.1 ... Text(editor) - GtkTextView, GtkTextBuffer ... 820
 14.11.2 ... Scrollendes Fenster - GtkScrolledWindow ... 823
 14.12 ... Auswählen (Selection) ... 824
 14.12.1 ... Dateiauswahl - GtkFileSelection ... 831
 14.13 ... Events ... 833
 14.14 ... Weitere Widget- und GTK+-Elemente im Überblick ... 838
 14.14.1 ... Bäume und Listen ... 838
 14.14.2 ... Lineale ... 839
 14.14.3 ... Zwischenablage (Clipboard) ... 839
 14.14.4 ... Drag and Drop ... 839
 14.14.5 ... Stock Items - Repertoire-Einträge ... 839
 14.14.6 ... Signale ... 839
 14.14.7 ... Ressource-Files ... 839
 14.14.8 ... Widget-Entwicklung ... 839
 14.14.9 ... GDK ... 840
 15 ... Übersicht über weitere beliebte GUI-Bibliotheken ... 841
 15.1 ... gtkmm - GTK+ für C++ ... 841
 15.1.1 ... Programmbeispiel ... 842
 15.1.2 ... GUI-Designer GLADE für GTK+ und gtkmm ... 844
 15.2 ... wxWidget ... 845
 15.2.1 ... Programmbeispiel ... 845
 15.2.2 ... GUI-Designer wxFormBuilder ... 847
 15.3 ... FLTK ... 848
 15.3.1 ... Programmbeispiel ... 848
 15.3.2 ... GUI-Designer FLUID ... 849
 15.4 ... Qt ... 849
 15.4.1 ... Programmbeispiel ... 850
 15.4.2 ... Der GUI-Designer von Qt ... 851
 15.5 ... Die niedrige Ebene - X-Window-Programmierung ... 852
 15.6 ... Multimediabibliotheken ... 852
 15.6.1 ... SDL ... 852
 15.6.2 ... Allegro ... 853
 15.6.3 ... OpenGL (bzw. Mesa 3D) ... 854
 15.6.4 ... Programmbeispiel ... 855
 16 ... Werkzeuge für Programmierer ... 859
 16.1 ... Der Compiler gcc ... 859
 16.1.1 ... Standardgebrauch des gcc ... 861
 16.1.2 ... Linken von Programmbibliotheken ... 861
 16.1.3 ... Dateien, die GCC kennt ... 862
 16.1.4 ... Ausgabedateien bei jedem einzelnen Schritt der Übersetzung erstellen ... 863
 16.1.5 ... Noch mehr Optionen ... 864
 16.1.6 ... Optionen für Warnmeldungen ... 864
 16.1.7 ... Präprozessor-Optionen ... 865
 16.1.8 ... Debuggen und Profiling ... 865
 16.1.9 ... Optimierungsflags ... 865
 16.2 ... Make ... 866
 16.2.1 ... Erzeugen eines Makefiles ... 868
 16.2.2 ... Variablen, Makros und Abkürzungen ... 874
 16.2.3 ... Implizite Regeln ... 876
 16.2.4 ... Musterregeln ... 878
 16.2.5 ... make zur Installation verwenden ... 878
 16.2.6 ... make-Optionen ... 879
 16.2.7 ... Ausblick ... 880
 16.3 ... Bibliotheken erstellen ... 880
 16.3.1 ... Statische Bibliotheken erstellen ... 880
 16.3.2 ... Dynamische Bibliotheken (Shared Libraries) erstellen ... 883
 16.3.3 ... Dynamisches Nachladen von Bibliotheken ... 886
 16.4 ... RPM ... 888
 16.4.1 ... Einführung in RPM ... 889
 16.4.2 ... Verzeichnisse, die RPM benötigt ... 890
 16.4.3 ... Ein eigenes RPM-Paket erstellen ... 891
 16.4.4 ... Sources ... 891
 16.4.5 ... Die Spec-Datei ... 892
 16.4.6 ... Paket erstellen ... 895
 16.4.7 ... Das Paket installieren ... 897
 16.5 ... RCS und CVS ... 898
 16.5.1 ... Software-Configuration-Management-Systeme (SCM) ... 899
 16.5.2 ... RCS ... 899
 16.5.3 ... CVS ... 908
 16.6 ... Zeitmessung von Programmen ... 923
 16.6.1 ... Einfache Zeitmessung mit TIME - Laufzeit von Prozessen ... 923
 16.6.2 ... Profiling mit GPROF - Laufzeit von Funktionen ... 924
 16.6.3 ... Analyse mit GCOV ... 927
 16.7 ... Debuggen mit gdb und ddd ... 929
 16.8 ... STRACE - Systemaufrufe verfolgen ... 939
 16.9 ... Memory Leaks und unerlaubte Speicherzugriffe ... 942
 16.9.1 ... efence ... 942
 16.9.2 ... valgrind ... 945
 16.10 ... Ausblick ... 948
 17 ... Shellprogrammierung ... 951
 17.1 ... Was ist eine Shell und was kann sie? ... 951
 17.2 ... Was sind Shellskripts und wann ist ihr Einsatz sinnvoll? ... 951
 17.3 ... Wann brauche ich keine Shellskripts? ... 953
 17.4 ... Verschiedene Shelltypen ... 953
 17.4.1 ... Erweiterungen der Bourne-Shell (sh) ... 954
 17.4.2 ... Erweiterung der C-Shell (csh) ... 955
 17.4.3 ... Welche Shell sollte man kennen? ... 955
 17.5 ... Shellskripts ausführen ... 955
 17.5.1 ... Shellskript im Hintergrund ausführen ... 956
 17.5.2 ... Die Bedeutung der Subshell ... 956
 17.5.3 ... Die ausführende Shell festlegen ... 958
 17.5.4 ... Shellskript beenden ... 963
 17.6 ... Vom Shellskript zum Prozess ... 964
 17.7 ... Datenstrom (Stream) umleiten ... 965
 17.7.1 ... Standardausgabe umleiten ... 965
 17.7.2 ... Standardfehlerausgabe umleiten ... 966
 17.7.3 ... Standardausgabe und Standardfehlerausgabe verknüpfen ... 967
 17.7.4 ... Standardeingabe umleiten ... 968
 17.7.5 ... Pipes ... 969
 17.7.6 ... Standardausgabe in zwei Richtungen mit tee ... 970
 17.7.7 ... Zusammenfassung der verschiedenen Umlenkungen ... 971
 17.8 ... Ersatzmuster (Namen-Expansion) zur Suche verwenden ... 972
 17.8.1 ... Beliebige Zeichenfolge * (Asterisk) ... 972
 17.8.2 ... Beliebiges Zeichen ? ... 973
 17.8.3 ... Zeichenbereiche einschränken ... 973
 17.8.4 ... Brace Extension (nur Bash und Korn-Shell) ... 974
 17.8.5 ... Tilde-Expansion (nur Bash und Korn-Shell) ... 975
 17.8.6 ... Zusammenfassung zu den Ersatzmustern ... 975
 17.9 ... Variablen ... 976
 17.9.1 ... Zahlen ... 979
 17.9.2 ... Zeichenketten ... 984
 17.9.3 ... Arrays (nur Bash und Korn-Shell) ... 989
 17.9.4 ... Variablen exportieren ... 991
 17.9.5 ... Die Umgebungsvariablen (Shellvariablen) ... 994
 17.9.6 ... Auto-Variablen der Shell ... 995
 17.10 ... Quotings ... 997
 17.10.1 ... Single und Double Quotings ... 997
 17.10.2 ... Kommandosubstitution (Back Quotes) ... 998
 17.11 ... Kommandozeilenargumente ... 999
 17.11.1 ... Kommandozeilenparameter $1 bis $9 ... 1000
 17.11.2 ... Variable Anzahl von Parametern auswerten ... 1001
 17.11.3 ... Die Anzahl der Argumente überprüfen ... 1001
 17.11.4 ... Der Befehl shift ... 1002
 17.11.5 ... Argumente für die Kommandozeile setzen - set ... 1003
 17.11.6 ... Kommandozeilenoptionen auswerten ... 1004
 17.12 ... Kontrollstrukturen ... 1006
 17.12.1 ... Die if-Anweisung ... 1006
 17.12.2 ... Die else-Alternative für die if-Verzweigung ... 1010
 17.12.3 ... Mehrfache Alternative mit elif ... 1010
 17.12.4 ... Das Kommando test ... 1011
 17.12.5 ... Dateistatus ermitteln ... 1015
 17.12.6 ... Ausdrücke logisch verknüpfen ... 1017
 17.12.7 ... Verzweigungen mit case ... 1020
 17.12.8 ... Schleifen ... 1022
 17.13 ... Terminal-Eingabe und -Ausgabe ... 1028
 17.13.1 ... Ausgabe ... 1028
 17.13.2 ... Eingabe ... 1031
 17.13.3 ... Umlenkungen mit exec und File-Deskriptoren erzeugen ... 1043
 17.13.4 ... Named Pipes ... 1046
 17.13.5 ... Menü mit select (nur Bash und Korn-Shell) ... 1047
 17.14 ... Funktionen ... 1050
 17.14.1 ... Funktionsaufruf ... 1050
 17.14.2 ... Externe Funktionen verwenden ... 1050
 17.14.3 ... Parameterübergabe ... 1051
 17.14.4 ... Rückgabewert aus einer Funktion ... 1052
 17.15 ... Signale ... 1054
 17.15.1 ... Signale senden ... 1054
 17.15.2 ... Signale in einem Shellskript abfangen - trap ... 1055
 17.15.3 ... Signal-Handler einrichten ... 1056
 17.15.4 ... Signale ignorieren oder zurücksetzen ... 1057
 17.16 ... Prozess- und Skriptausführung ... 1058
 17.16.1 ... Auf Prozesse warten ... 1058
 17.16.2 ... Hintergrundprozess hervorholen ... 1058
 17.16.3 ... Jobverwaltung ... 1059
 17.16.4 ... Explizite Subshell verwenden ... 1060
 17.16.5 ... Kommunikation zwischen Shellskripten ... 1061
 17.16.6 ... Skripte zeitgesteuert ausführen ... 1065
 17.17 ... Ein Shellskript bei der Ausführung ... 1065
 A ... Sicherheit unter Linux ... 1067
 A.1 ... Viren und Trojaner ... 1067
 A.2 ... Der Superuser (su) ... 1068
 A.3 ... Überlaufen von Logfiles ... 1068
 A.4 ... Zugriffsrechte auf Dateien ... 1069
 A.5 ... Das SUID-Bit ... 1069
 A.6 ... Programme ohne Ausführrechte ... 1071
 A.7 ... Buffer Overflow (Pufferüberlauf) ... 1071
 A.8 ... Race Condition ... 1073
 A.9 ... Temporäre Dateien ... 1074
 A.10 ... chroot ... 1075
 A.11 ... Umgebungsvariablen ... 1076
 A.12 ... Zugriffsrechte - häufig gemachte Fehler ... 1079
 A.13 ... system() und popen() ... 1079
 A.14 ... Offene Filedeskriptoren ... 1080
 A.15 ... Core Dump ... 1082
 A.16 ... SQL Injection ... 1083
 A.17 ... Filedeskriptor-Überlauf mit select() ... 1085
 B ... Funktionsreferenz ... 1087
 B.1 ... ANSI C ... 1087
 B.1.1 ... <assert.h> - Testmöglichkeiten in einem Programm ... 1088
 B.1.2 ... <ctype.h> - Zeichenklassifizierung/Umwandlung ... 1088
 B.1.3 ... <errno.h> - Fehler-Konstanten ... 1089
 B.1.4 ... <float.h> - Eigenschaften und Limits für Gleitpunkttypen ... 1090
 B.1.5 ... <limits.h> - Limits, Konstanten ... 1091
 B.1.6 ... <locale.h> - Länderspezifische Eigenheiten ... 1091
 B.1.7 ... <math.h> - Mathematische Funktionen ... 1094
 B.1.8 ... <setjmp.h> - Nicht-lokale Sprünge ... 1095
 B.1.9 ... <signal.h> - Signale ... 1096
 B.1.10 ... <stdarg.h> - Variabel lange Argumentenliste ... 1096
 B.1.11 ... <stddef.h> - Standarddefinitionen ... 1097
 B.1.12 ... <stdio.h> - Standard Ein-/Ausgabe-Funktionen ... 1098
 B.1.13 ... <stdlib.h> - Nützliche Funktionen (gemischt) ... 1100
 B.1.14 ... <string.h> - String-Bearbeitungsfunktionen ... 1102
 B.1.15 ... <time.h> - Datum und Uhrzeit ... 1104
 B.2 ... ANSI C99 ... 1105
 B.2.1 ... <iso646.h> - Zur Verwendung von Zeichensätze im ISO646-Format (NA1) ... 1105
 B.2.2 ... <wchar.h> - (NA1) ... 1106
 B.2.3 ... <wctype.h> (NA1) ... 1106
 B.2.4 ... <complex.h> - Funktionen zur Manipulation komplexer Zahlen ... 1107
 B.2.5 ... <fenv.h> - Kontrolle der Gleitpunkzahlen-Umgebung ... 1107
 B.2.6 ... <inttypes.h> - Für genauere Integertypen ... 1109
 B.2.7 ... <stdbool.h> - Boolesche Datentypen in C ... 1109
 B.2.8 ... <stdint.h> - Definiert verschiedene Integertypen ... 1109
 B.2.9 ... <math.h> - Neue Funktionen ... 1110
 B.2.10 ... <tgmath.h> - Typengenerische Mathematik-Funktionen ... 1112
 B.3 ... Elementare E/A-Funktionen ... 1112
 B.3.1 ... Limits-Konstanten ... 1112
 B.3.2 ... Elementare E/A-Funktionen ... 1113
 B.4 ... Fortgeschrittene E/A-Funktionen ... 1114
 B.4.1 ... Multiplexing Ein-/Ausgabe - select() ... 1114
 B.4.2 ... Memory Mapped Ein-/Ausgabe ... 1115
 B.5 ... Verzeichnisse ... 1120
 B.6 ... Attribute von Dateien und Verzeichnissen ... 1122
 B.6.1 ... Funktionen zum Erfragen der Dateiattribute ... 1123
 B.6.2 ... Funktionen zum Erfragen oder Setzen bestimmter Zugriffsrechte ... 1124
 B.7 ... Links ... 1124
 B.8 ... Prozess und Prozessverwaltungsfunktionen ... 1125
 B.8.1 ... Umgebungsvariablen (Environment) eines Prozesses ... 1125
 B.8.2 ... Ressourcen-Limits eines Prozesses abfragen oder setzen ... 1125
 B.8.3 ... Prozesserkennung erfragen bzw. setzen ... 1125
 B.8.4 ... Prozesssteuerung ... 1126
 B.9 ... Signale - Das neue Signalkonzept ... 1126
 B.9.1 ... Signalmengen ... 1126
 B.9.2 ... (POSIX) Signalhandler-Funktionen ... 1127
 B.9.3 ... Übersicht zu den Signalen ... 1127
 B.9.4 ... Signale senden und Prozesse suspendieren ... 1129
 B.10 ... Interprozesskommunikationen ... 1129
 B.10.1 ... Pipes ... 1129
 B.10.2 ... FIFO (Benannte Pipe) erzeugen ... 1130
 B.11 ... Sys-V-Interprozesskommnunikationen ... 1130
 B.11.1 ... Message Queue ... 1130
 B.11.2 ... Semaphor ... 1131
 B.11.3 ... Shared Memory ... 1131
 B.12 ... Threadprogrammierung ... 1132
 B.12.1 ... Thread-Verwaltung ... 1132
 B.12.2 ... Attribute von Threads und das Scheduling erfragen ... 1133
 B.12.3 ... Attribute und das Scheduling von Threads setzen ... 1133
 B.12.4 ... Mutex-Variablen ... 1133
 B.12.5 ... Attribute von Mutexe ... 1134
 B.12.6 ... Condition Variablen ... 1135
 B.12.7 ... Threads beenden ... 1135
 B.13 ... Netzwerkprogrammierung ... 1135
 B.13.1 ... Grundlegende Socket-Funktionen ... 1135
 B.13.2 ... Konvertieren zur richtigen Byteanordnung ... 1138
 B.13.3 ... Abfragen von Netzwerknummern und Internetadressen ... 1139
 B.13.4 ... Hostnamen aus der Host-Datenbank ermitteln ... 1140
 B.13.5 ... Service-Datenbank ... 1140
 B.14 ... MySQL C-API ... 1141
 B.14.1 ... Übersetzen einer Anwendung ... 1141
 B.14.2 ... Die MySQL C-API ... 1141
 B.14.3 ... Datentypenübersicht der C-API ... 1145
 B.15 ... PostgreSQL C-API ... 1146
 B.15.1 ... Übersetzen einer Anwendung ... 1146
 B.15.2 ... Eine Verbindung zum PostgreSQL-Server herstellen ... 1146
 B.15.3 ... Status und Informationen zur Verbindung ermitteln ... 1147
 B.15.4 ... Verbindung beenden oder wieder aufnehmen ... 1147
 B.15.5 ... SQL-Anfragen an den Server machen und den Status auswerten ... 1148
 B.15.6 ... Ergebnis einer SQL-Anfrage auswerten ... 1148
 B.15.7 ... Rückgabe des Anfrageergebnisses auslesen ... 1149
 B.15.8 ... Ergebnisse anderer Befehle ermitteln ... 1149
 B.16 ... Weitere Funktionsreferenzen auf der Buch-CD ... 1149
 C ... Linux-Unix-Kommandoreferenz ... 1151
 C.1 ... Dateiorientierte Kommandos ... 1151
 C.1.1 ... bzcat - Ausgabe von bzip2-komprimierten Dateien ... 1151
 C.1.2 ... cat - Datei(en) nacheinander ausgeben ... 1151
 C.1.3 ... chgrp - Gruppe von Dateien oder Verzeichnissen ändern ... 1152
 C.1.4 ... cksum/md5sum/sum - eine Prüfsumme für eine Datei ermitteln ... 1152
 C.1.5 ... chmod - Zugriffsrechte von Dateien oder Verzeichnissen ändern ... 1153
 C.1.6 ... chown - Eigentümer von Dateien oder Verzeichnissen ändern ... 1154
 C.1.7 ... cmp - Dateien miteinander vergleichen ... 1154
 C.1.8 ... comm - zwei sortierte Textdateien miteinander vergleichen ... 1154
 C.1.9 ... cp - Dateien kopieren ... 1155
 C.1.10 ... csplit - Zerteilen von Dateien (kontextabhängig) ... 1156
 C.1.11 ... cut - Zeichen oder Felder aus Dateien herausschneiden ... 1156
 C.1.12 ... diff - Vergleichen zweier Dateien ... 1156
 C.1.13 ... diff3 - Vergleich von drei Dateien ... 1157
 C.1.14 ... dos2unix - Dateien vom DOS- in UNIX-Format umwandeln ... 1157
 C.1.15 ... expand - Tabulatoren in Leerzeichen umwandeln ... 1158
 C.1.16 ... file - den Inhalt von Dateien analysieren ... 1158
 C.1.17 ... find - Suchen nach Dateien ... 1159
 C.1.18 ... fold - einfaches Formatieren von Dateien ... 1159
 C.1.19 ... head - Anfang einer Datei ausgeben ... 1160
 C.1.20 ... less - Datei(en) seitenweise ausgeben ... 1160
 C.1.21 ... ln - Links auf eine Datei erzeugen ... 1161
 C.1.22 ... ls - Verzeichnisinhalt auflisten ... 1161
 C.1.23 ... more - Datei(en) seitenweise ausgeben ... 1161
 C.1.24 ... mv - Datei(en) und Verzeichnisse verschieben oder umbenennen ... 1161
 C.1.25 ... nl - Datei mit Zeilennummer ausgeben ... 1162
 C.1.26 ... od - Datei(en) hexadezimal bzw. oktal ausgeben ... 1162
 C.1.27 ... paste - Dateien spaltenweise verknüpfen ... 1163
 C.1.28 ... pcat - Ausgabe von pack-komprimierten Dateien ... 1163
 C.1.29 ... rm - Dateien und Verzeichnisse löschen ... 1163
 C.1.30 ... sort - Dateien sortieren ... 1163
 C.1.31 ... split - Dateien in mehrere Teile zerlegen ... 1164
 C.1.32 ... tac - Dateien rückwärts ausgeben ... 1164
 C.1.33 ... tail - Ende einer Datei ausgeben ... 1165
 C.1.34 ... tee - Ausgabe duplizieren ... 1165
 C.1.35 ... touch - Anlegen von Dateien oder Zeitstempel verändern ... 1165
 C.1.36 ... tr - Zeichen ersetzen bzw. Umformen von Dateien ... 1166
 C.1.37 ... type - Kommandos klassifizieren ... 1166
 C.1.38 ... umask - Dateierstellungsmaske ändern bzw. ausgeben ... 1166
 C.1.39 ... uniq - doppelte Zeilen nur einmal ausgeben ... 1167
 C.1.40 ... unix2dos - Dateien vom UNIX- in DOS-Format umwandeln ... 1167
 C.1.41 ... wc - Zeilen, Wörter und Zeichen einer Datei zählen ... 1167
 C.1.42 ... whereis - Suche nach Dateien ... 1167
 C.1.43 ... zcat, zless, zmore - (seitenweise) Ausgabe von gunzip-komprimierten Dateien ... 1168
 C.2 ... Verzeichnisorientierte Kommandos ... 1168
 C.2.1 ... basename - gibt den Dateianteil eines Pfadnamens zurück ... 1168
 C.2.2 ... cd - Verzeichnis wechseln ... 1168
 C.2.3 ... dircmp - Verzeichnisse rekursiv vergleichen ... 1168
 C.2.4 ... dirname - Verzeichnisanteil eines Pfadnamens zurückgeben ... 1168
 C.2.5 ... mkdir - ein Verzeichnis anlegen ... 1168
 C.2.6 ... pwd - Ausgeben des aktuellen Arbeitsverzeichnisses ... 1169
 C.2.7 ... rmdir - ein leeres Verzeichnis löschen ... 1169
 C.3 ... Verwaltung von Benutzern und Gruppe ... 1169
 C.3.1 ... exit, logout - eine Session (Sitzung) beenden ... 1169
 C.3.2 ... finger - Informationen zu anderen Benutzern abfragen ... 1169
 C.3.3 ... groupadd, groupmod, groupdel - Gruppenverwaltung (distributionsabhängig) ... 1170
 C.3.4 ... groups - Gruppenzugehörigkeit ausgeben ... 1170
 C.3.5 ... id - eigene Benutzer- und Gruppen-ID ermitteln ... 1170
 C.3.6 ... last - An- und Abmeldezeit eines Benutzers ermitteln ... 1170
 C.3.7 ... logname - Name des aktuellen Benutzers anzeigen ... 1171
 C.3.8 ... newgrp - Gruppenzugehörigkeit kurzzeitig wechseln (betriebssystemspezifisch) ... 1171
 C.3.9 ... passwd - Passwort ändern bzw. vergeben ... 1171
 C.3.10 ... useradd/adduser, userdel, usermod - Benutzerverwaltung (distributionsabhängig) ... 1172
 C.3.11 ... who - eingeloggte Benutzer anzeigen ... 1172
 C.3.12 ... whoami - Name des aktuellen Benutzers anzeigen ... 1172
 C.4 ... Programm- und Prozessverwaltung ... 1173
 C.4.1 ... at - Kommando zu einem bestimmten Zeitpunkt ausführen lassen ... 1173
 C.4.2 ... batch - Kommando irgendwann später ausführen lassen ... 1173
 C.4.3 ... bg - einen angehaltenen Prozess im Hintergrund fortsetzen ... 1174
 C.4.4 ... cron/crontab - Programme in bestimmten Zeitintervallen ausführen lassen ... 1174
 C.4.5 ... fg - einen angehaltenen Prozess im Vordergrund fortsetzen ... 1174
 C.4.6 ... jobs - Anzeigen angehaltener bzw. im Hintergrundlaufender Prozesse ... 1174
 C.4.7 ... kill - Signale an Prozesse mit einer Prozessnummer senden ... 1174
 C.4.8 ... killall - Signale an Prozesse mit einem Prozessnamen senden ... 1174
 C.4.9 ... nice - Prozesse mit anderer Priorität ausführen lassen ... 1175
 C.4.10 ... nohup - Prozesse beim Beenden einer Sitzung weiterlaufen lassen ... 1175
 C.4.11 ... ps - Prozessinformationen anzeigen ... 1175
 C.4.12 ... pgrep - Prozesse über ihren Namen finden ... 1176
 C.4.13 ... pstree - Prozesshierachie in Baumform ausgeben ... 1176
 C.4.14 ... renice - Priorität laufender Prozesse verändern ... 1176
 C.4.15 ... sleep - Prozesse suspendieren (schlafen legen) ... 1177
 C.4.16 ... su - Ändern der Benutzerkennung (ohne Neuanmeldung) ... 1177
 C.4.17 ... sudo - Programm als anderer Benutzer ausführen ... 1178
 C.4.18 ... time - Zeitmessung für Prozesse ... 1178
 C.4.19 ... top - Prozesse nach CPU-Auslastung anzeigen (betriebssystemspezifisch) ... 1178
 C.5 ... Speicherplatzinformationen ... 1179
 C.5.1 ... df - Abfrage des benötigten Speicherplatzes für die Dateisysteme ... 1179
 C.5.2 ... du - Größe eines Verzeichnisbaums ermitteln ... 1179
 C.5.3 ... free - verfügbaren Speicherplatz (RAM und Swap) anzeigen (betriebssystemabhängig) ... 1180
 C.5.4 ... swap - Swap-Space anzeigen (nicht Linux) ... 1180
 C.6 ... Dateisystem-Kommandos ... 1180
 C.6.1 ... badblocks - überprüft, ob ein Datenträger defekte Sektoren hat ... 1180
 C.6.2 ... cfdisk - Partitionieren von Festplatten ... 1181
 C.6.3 ... dd - Datenblöcke zwischen Device (Low Level) kopieren (und konvertieren) ... 1181
 C.6.4 ... dd_rescue - fehlertolerantes Kopieren von Dateiblöcken ... 1183
 C.6.5 ... dumpe2fs - zeigt Informationen über ein ext2/ext3-Dateisystem an ... 1183
 C.6.6 ... e2fsck - repariert ein ext2/ext3-Dateisystem ... 1184
 C.6.7 ... fdformat - formatiert eine Diskette ... 1184
 C.6.8 ... fdisk - Partitionieren