基 础篇 1
第1章 入门知识 1
1.1 UNIX系统简介 1
1.1.1 UNIX系统的产生及演变 1
1.1.2 UNIX系统的特点 3
1.2所用系统简介 5
1.2.1 Linux和 Fedora 5
1.2.2 BSD与FreeBSD 5
1.2.3 Sun OS和Solaris 6
1.3系统的开关机 7
1.3.1系统的开启与用户登录 7
1.3.2用户的注销 9
1.3.3系统关闭与重启动 9
1.4在线帮助 12
1.4.1 man手册 12
1.4.2 info 13
习题 14
第2章shell与shell命令 15
2.1 shell基本功能与基本概念 15
2.1.1 shell基本功能 15
2.1.2字符与保留字 16
2.1.3文件命名及文件类型 18
2.1.4目录结构与路径 19
2.1.5 shell命令解释及执行 21
2.1.6命令行编辑特性 21
2.1.7环境变量与变量 22
2.1.8标准流与输入输出重定向 23
2.1.9管道 25
2.1.10引号机制、命令替换与参数替换 25
2.1.11 shell种类 26
2.1.12 shell命令的返回值 27
2.2基本操作命令 27
2.2.1目录基本操作命令 27
2.2.2文件操作基本命令 29
2.2.3文本文件内容处理与编辑基本命令 33
2.2.4进程管理基本命令 42
2.2.5时间管理命令 43
2.2.6文件或目录比较命令 45
2.2.7其他操作命令 47
2.3 shell的启动 51
2.3.1 shell的启动流程和工作过程 51
2.3.2用户登录控制与shell定制 52
习题 52
管 理篇 53
第3章 用户管理和密码管理 53
3.1 UNIX系统的用户和组 53
3.1.1用户与uid 53
3.1.2用户组 53
3.2与用户、组和密码管理相关的文件 53
3.2.1 /etc/passwd 53
3.2.2 /etc/shadow 54
3.2.3 /etc/group 54
3.2.4 skel 55
3.2.5其他文件 55
3.2.6 FreeBSD 9的/etc/masterpasswd文件 55
3.3用户管理命令 56
3.3.1 Fedora和Solaris的用户管理命令 56
3.3.2 FreeBSD 9的用户管理命令 57
3.3.3更改用户的登录shell 58
3.4组管理命令 58
3.4.1 Fedora和Solaris的组管理命令 58
3.4.2 FreeBSD 9的组管理 59
3.5密码管理 59
3.5.1综述 59
3.5.2密码管理命令(passwd) 60
3.5.3用户上锁与解锁 60
3.6与用户身份和位置相关的其他命令 61
3.6.1显示与用户和组相关的信息(id) 61
3.6.2显示已登录用户的信息(who)及本用户名信息(whoami) 61
3.6.3终端接收信息控制(mesg) 62
3.6.4向系统中已登录的所用户发信息(wall) 62
3.6.5显示用户所使用的终端设备(tty) 62
3.6.6不退出系统而将自己切换成其他用户或以其他用户身份工作(su) 63
3.6.7以其他用户身份执行程序(sudo) 64
3.6.8改变进程的根目录(chroot) 66
习题 67
第4章 文件系统及管理 68
4.1硬盘存储结构与分区划分 68
4.2 UNIX文件系统内部结构 71
4.2.1 UNIX文件系统的特点 71
4.2.2 UNIX文件系统的结构 71
4.3文件系统权限及表示 73
4.3.1三类人 73
4.3.2三种权限 73
4.3.3权限表示 74
4.3.4文件默认权限与umask 74
4.4权限管理命令 75
4.4.1 umask 75
4.4.2 chmod 75
4.4.3 chown 76
4.4.4 chgrp 76
4.4.5 ext2+文件系统的新增属性及其管理 76
4.5文件系统管理及使用 77
4.5.1 UNIX/Linux支持的文件系统 77
4.5.2 UNIX/Linux系统使用的存储设备 79
4.5.3文件系统创建 81
4.5.4文件系统的使用 90
4.5.5文件系统的检查、修复与同步 94
4.6.与文件系统管理相关的其他命令 96
4.6.1文件查找命令(find) 96
4.6.2文件复制命令(dd) 98
4.6.3创建文件连接(In) 98
4.6.4特别文件创建(mknod/mkfifo) 99
4.6.5统计磁盘空间和文件系统的使用情况(df) 99
4.6.6统计目录使用磁盘空间情况(du) 100
4.7数据备份与压缩 100
4.7.1数据备份的任务 100
4.7.2文件的压缩与解压缩 101
4.7.3磁盘文件归档管理命令(tar) 103
4.7.4文件系统备份与复制命令(cpio) 105
习题 107
第5章 进程与作业管理 108
5.1程序和进程的概念 108
5.1.1程序、进程、作业和任务 108
5.1.2三类进程 108
5.1.3系统的启动与进程树的形成 109
5.1.4 0#进程与1#进程 109
5.1.5进程状态及转换 110
5.2 UNIX/Linux的进程调度与信号 110
5.2.1调度策略与优先级的计算 111
5.2.2信号与软中断 111
5.3 setuid、 setgid和sticky属性 112
5.3.1 suid和sgid属性 113
5.3.2 sticky属性 114
5.4进程管理与调度命令 114
5.4.1进程或作业的挂起及前/后运行切换(fg/bg/jobs) 114
5.4.2查询进程状态(ps) 115
5.4.3按名称终止进程或所有进程(killall) 116
5.4.4进程查找(pgrep) 117
5.4.5查找进程并向它们发信号(pkill) 118
5.4.6确定使用指定文件或文件系统的进程(fuser) 118
5.4.7让进程抗信号HUP运行(nohup) 119
5.4.8设置程序运行的优先级(nice) 119
5.4.9改变进程的优先级(renice) 120
5.5作业和任务调度 120
5.5.1 at和batch 120
5.5.2 crontab 122
习题 124
第6章 系统安装、启动与管理 125
6.1系统安装 125
6.1.1安装任务与准备 125
6.1.2系统安装和运行所需的基本分区 126
6.1.3安装过程 128
6.1.4虚拟机的安装与使用 128
6.2引导器 128
6.2.1 Linux和Solaris的GRUB引导器 128
6.2.2 GRUB常用术语 129
6.2.3操作界面 129
6.2.4 GRUB 1及其配置 130
6.2.5 GRUB2及其配置 133
6.2.6系统的启动及启动参数修改 136
6.2.7 FreeBSD 9的启动 137
6.3系统的启动过程分析 138
6.3.1 Linux系统的启动过程分析 138
6.3.2 Solaris 11系统的启动过程分析 142
6.3.3 FreeBSD 9系统的启动过程分析 142
6.4服务管理 144
6.4.1 Linux系统的服务管理 144
6.4.2 Fedor 15+ Linux的服务管理 145
6.4.3 Solaris 11的服务管理 150
6.4.4 FreeBSD 9的服务管理 153
6.4.5超级服务器(inetd/xinetd) 154
6.5日志管理 156
6.5.1日志配置文件 156
6.5.2常见日志文件 156
6.5.3文本型日志 157
6.5.4非文本型日志 157
6.5.5内核启动日志 158
6.5.6日志滚动 158
6.6系统管理 158
6.6.1系统管理的任务 158
6.6.2系统管理工具与命令 159
6.6.3内核参数调整 161
习题 162
第7章 软硬件管理及系统的扩充与升级 163
7.1软件包管理 163
7.1.1 UNIX的传统软件包管理 163
7.1.2 Red Hat Linux和Fedora的软件包管理 163
7.1.3 FreeBSD 9的软件包管理 166
7.1.4 Solaris 11的软件包管理 168
7.2系统的升级 173
7.2.1软件包源及升级设置 173
7.2.2软件包管理图形界面 173
7.2.3系统升级 174
7.3硬件管理概述及常见设备 174
7.3.1硬件管理概述 174
7.3.2 Fedora系统说明 175
7.3.3 FreeBSD 9说明 175
7.3.4 Solaris 11说明 176
7.4打印机的管理与使用 176
7.4.1 CUPS软件包安装与服务管理 176
7.4.2 CUPS打印机浏览器管理 178
7.4.3 CUPS打印机的命令界面管理与使用 180
7.4.4打印机使用示例 183
7.5交换区管理 184
7.5.1 Fedora的交换区管理 184
7.5.2 FreeBSD 9的交换设备管理 185
7.5.3 Solaris 11的交换设备管理 186
7.6串口与终端管理 188
7.6.1综述 188
7.6.2串口管理 188
7.6.3 stty与终端设置 188
7.6.4终端类型与能力 190
习题 193
第8章 网络管理与网络应用 194
8.1 TCP/IP概述 194
8.1.1 TCP/IP协议体系结构 194
8.1.2 IP地址 194
8.1.3网络掩码 196
8.1.4端口及服务 196
8.1.5物理地址、逻辑地址和主机名 196
8.2与网络有关的配置文件 197
8.2.1 /etc/hosts 197
8.2.2 /etc/services 198
8.2.3 /etc/resolv.conf 198
8.2.4 /etc/networks 199
8.3 TCP/IP配置 199
8.3.1 TCP/IP网络配置参数与配置方式 199
8.3.2一个通用的TCP/IP网络工具(ifconfig) 199
8.3.3 Fedora 16的网络配置 200
8.3.4 Solaris 11的网络配置 203
8.3.5 FreeBSD 9的网络配置 208
8.4网络管理通用命令 210
8.4.1 ping 210
8.4.2 netstat 211
8.4.3 arp 213
8.4.4 hostname 213
8.4.5 route 214
8.4.6 traceroute 215
8.5网络应用常用命令介绍 216
8.5.1 telnet与ssh 216
8.5.2 ftp 217
8.5.3 mail/mailx 219
8.5.4 nslookup和host 221
8.5.5 finger 221
8.5.6 write 222
8.5.7 talk 222
8.5.8 r-命令 222
8.6常用的网络服务 223
8.6.1 telnet服务器 223
8.6.2 ssh服务器 223
8.6.3 ftp服务器 223
习题 225
编程基础篇 226
第9章bshell编程 226
9.1正则表达式简介 226
9.1.1字符集 226
9.1.2 bshell的模式表达式 229
9.2流编辑(sed) 229
9.2.1功能及用法 229
9.2.2 sed的命令 230
9.2.3 sed示例 231
9.3模式搜索与处理(awk) 232
9.3.1功能及用法 232
9.3.2记录和域 232
9.3.3变量 232
9.3.4操作符 233
9.3.5控制语句 233
9.3.6函数 234
9.3.7 awk程序及执行 235
9.3.8 awk使用示例 235
9.4 Bourne shell及其编程 237
9.4.1特殊字符 237
9.4.2 I/O重定向 237
9.4.3变量与参数 239
9.4.4 shell的状态 240
9.4.5 shell的调用与变量传递 241
9.4.6 shell程序设计 242
9.4.7命令行参数与选项的处理 251
9.4.8 shell脚本程序格式及注意事项 253
9.4.9 shell程序调试 255
9.5 bash简介 255
9.5.1 bash的特色 255
9.5.2 bash部分特点介绍 255
习题 258
第10章C编程基础和方法 259
10.1基本知识 259
10.1.1头文件 259
10.1.2库文件 259
10.1.3系统调用和库函数 260
10.1.4基本数据类型 260
10.1.5错误处理 261
10.2编译器 262
10.2.1 gcc/g++++用法 262
10.2.2 gcc/g++++的工作过程 263
10.2.3 C/C++++程序编译示例 264
10.3静态库及管理 265
10.3.1一个多模块工程示例 265
10.3.2管理静态库 265
10.4共享库的管理 267
10.4.1共享库的搜索及控制 267
10.4.2共享库的配置与查询 267
10.4.3共享库的构建与安装 267
10.4.4共享库的使用 268
10.4.5共享库的使用示例 268
10.5 make与makefile 269
10.5.1 make命令的用法简介 270
10.5.2 makefile文件 270
10.5.3 makefile示例 271
10.6调试器gdb 273
10.6.1 gdb功能 273
10.6.2 gdb的基本内部命令 273
10.6.3程序调试示例 273
10.7其他编程工具简介 274
10.7.1常用库与GNOME/GTK 274
10.7.2 Kdevelop/Qt开发 274
10.7.3 Java开发 275
10.7.4 Perl开发 275
10.7.5数据库开发 276
10.7.6 PHP开发 276
习题 276
开 发篇 277
第11章 文件部分系统调用与标准I/O 277
11.1文件部分系统调用 277
11.1.1文件打开与关闭 277
11.1.2文件的读/写 279
11.1.3简单I/O示例 279
11.1.4文件指针及移动 281
11.1.5文件的共享 283
11.1.6文件的互斥与锁 285
11.1.7 fcntl 286
11.1.8 ioctl 287
11.1.9原子操作 287
11.1.10文件低级I/O示例 287
11.2标准I/O 290
11.2.1流和文件对象 290
11.2.2流的打开与关闭 290
11.2.3标准I/O的缓冲区类型及更改 291
11.2.4格式化I/O 292
11.2.5字符I/O 294
11.2.6行I/O 294
11.2.7二进制I/O 295
11.2.8流定位 295
11.2.9错误判断及清除 296
11.2.10获得文件描述符 296
11.3 FILE对象与文件整数描述符 296
11.3.1 FILE对象与文件整数描述符的关系 296
11.3.2将文件作为标准I/O 297
11.4临时文件 297
11.4.1临时文件的命名规则 297
11.4.2临时文件的使用 297
11.4.3临时文件示例 298
习题 300
第12章UNIX系统进程环境 301
12.1命令行参数 301
12.1.1 C程序的入口:main() 301
12.1.2命令参数处理:getopt() 302
12.1.3命令行参数处理示例 302
12.2环境变量 304
12.2.1环境变量表 304
12.2.2环境变量的访问及设置 304
12.3进程的终止 306
12.3.1 exit和_exit 306
12.3.2 atexit 306
12.4主机信息 307
12.4.1获得系统信息(uname) 307
12.4.2获得或设置主机名 308
12.5用户标识信息 308
12.5.1根据用户标识或用户名获取passwd信息 308
12.5.2搜索passwd文件 309
12.5.3根据组标识或组名获取组信息 309
12.5.4搜索group文件 309
12.5.5用户信息获取示例 310
12.6用户进程标识信息 311
12.6.1获得进程标识信息(getpid和getppid) 311
12.6.2获得用户标识信息(getuid和geteuid) 311
12.6.3获得组标识信息(getgid和getegid) 311
12.6.4用户进程标识信息示例 311
12.7时间和日期信息 312
12.7.1获取系统时间 312
12.7.2显示与转换时间格式 312
12.7.3设置时间 314
12.8日志信息 314
12.8.1日志记录 314
12.8.2日志操作示例 315
习题 315
第13章 文件属性与目录编程 317
13.1文件属性 317
13.1.1文件属性查询(stat、 fstat和lstat) 317
13.1.2文件权限管理(access、 umask、chmod和fchmod) 319
13.2文件链接 321
13.2.1创建硬链接link() 321
13.2.2创建符号链接symlink() 321
13.2.3读取符号链接的内容readlink() 321
13.2.4文件链接示例 321
13.3文件删除 322
13.3.1删除文件unlink() 322
13.3.2删除文件或空目录remove() 323
13.3.3文件删除示例 323
13.4文件主、组管理 323
13.5文件长度及截取 325
13.5.1文件长度 325
13.5.2文件的截取 325
13.6更改文件的时间属性 325
13.6.1 utime() 325
13.6.2 utimes() 326
13.6.3文件长度与时间示例 326
13.7文件的更名与移动 328
13.8目录编程 328
13.8.1获得当前工作目录(getcwd和getwd) 328
13.8.2目录的改变(chdir和fchdir) 328
13.8.3目录的创建(mkdir) 329
13.8.4目录的删除(rmdir) 329
13.8.5目录的其他操作 329
13.8.6目录操作综合示例 330
习题 333
第14章 进程关系与进程控制 334
14.1进程的创建与程序的执行 334
14.1.1进程创建系统调用(fork和vfork) 334
14.1.2 exec()系列函数 336
14.1.3 shell程序的执行及示例 337
14.1.4 system() 339
14.1.5更改用户的uid和gid 340
14.1.6 suid、 sgid与安全程序设计问题 340
14.2子进程退出与进程等待 341
14.2.1子进程退出与僵尸进程 342
14.2.2进程等待(wait和waitpid) 342
14.2.3孤儿进程 344
14.3信号编程 344
14.3.1信号 344
14.3.2信号通信(kill、 signal和raise) 345
14.3.3进程的睡眠、闹钟与非正常终止 347
14.3.4信号集 348
14.4用户登录、进程组与会话期 355
14.4.1进程组 355
14.4.2会话 355
14.4.3控制终端 356
14.4.4作业控制 356
14.5 chroot()编程 357
习题 358
第15章 进程间通信 359
15.1进程间通信简介 359
15.1.1管道 359
15.1.2 IPC 360
15.2管道编程 363
15.2.1匿名管道(PIPE) 363
15.2.2命名管道(FIFO) 366
15.2.3将管道用作标准I/O 369
15.2.4进程管道popen()和pclose() 370
15.3消息队列编程 371
15.3.1消息队列操作函数 371
15.3.2消息队列编程示例 373
15.4共享内存编程 375
15.4.1共享内存操作函数 375
15.4.2共享内存编程示例 376
15.5信号量集编程 378
15.5.1信号量集概述 378
15.5.2信号量的定义及操作 378
15.5.3 UNIX信号量操作函数 379
15.5.4信号量编程示例 380
习题 383
第16章 线程编程基础 384
16.1基本知识 384
16.1.1线程基础 384
16.1.2可重入函数与线程安全 385
16.2线程操作基本函数及简单示例 386
16.2.1线程操作基本函数 386
16.2.2线程操作简单示例 388
16.3线程属性 390
16.3.1线程的属性结构 390
16.3.2属性结构的初始化与清理 391
16.3.3线程属性及修改 391
16.4线程同步 392
16.4.1用信号量实现线程间同步 392
16.4.2使用互斥量实现线程间同步 395
16.4.3使用条件变量实现线程间同步 399
16.5线程参数与多线程并发服务器 402
16.5.1线程参数 402
16.5.2线程返回值 402
16.5.3并发服务器框架 402
习题 403
第17章 终端与curses库编程 404
17.1终端编程 404
17.1.1 temios结构与终端属性 404
17.1.2查询和改变终端设备属性 406
17.1.3波特率设置 408
17.1.4行控制函数 408
17.1.5规范模式 408
17.1.6非规范模式 408
17.1.7规范模式下的密码读取示例 409
17.2终端数据库访问编程 411
17.2.1相关函数 411
17.2.2终端类型设置与性能访问编程示例 412
17.3 curses库编程 414
17.3.1 curses简介 414
17.3.2 curses程序结构 414
17.3.3 curses库及应用 415
17.3.4窗口与子窗体 420
17.3.5键盘与功能键 421
习题 424
第18章 数据库的使用及编程 425
18.1 DBM数据库编程 425
18.1.1 DBM简介 425
18.1.2库函数 426
18.1.3 DBM使用示例 427
18.2 MySQL数据库的使用 432
18.2.1 MySQL的使用 432
18.2.2 MySQL的管理 437
18.3 MySQL数据库的编程 440
18.3.1开发包、头文件和库函数 440
18.3.2 MySQL C API数据类型 440
18.3.3 MySQL C API函数 441
18.3.4 MySQL C API编程示例 447
习题 450
第19章 网络编程 451
19.1网络通信基础 451
19.1.1守候进程及工作方式 451
19.1.2客户机/服务器(C/S)模型 452
19.1.3套接字及基本类型 453
19.1.4头文件及套接字地址结构 453
19.1.5与主机相关的数据结构及函数 454
19.1.6与服务器相关的数据结构及函数 454
19.1.7字节顺序及转换函数 455
19.1.8 IP地址及主机名转换常用函数 455
19.2 TCP编程 457
19.2.1 socket编程常 用函数 457
19.2.2 TCP C/S编程模型 460
19.2.3 TCP编程示例 461
19.2.4 TCP应用说明 465
19.3 UDP编程 466
19.3.1 UDP常用函数 466
19.3.2 UDP C/S通信模型 466
19.3.3 UDP示例程序 467
19.4 C/M/S结构及编程 473
19.4.1 C/M/S结构 473
19.4.2交易型中间件程序结构 473
19.5一个基于线程的并发服务器程序 474
习题 476
参考文献 478