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 |
