1.1 什么是Linux 1
第一章 Linux的历史和功能简介 1
1.2 Linux的历史 2
1.3 Linux的特点 3
1.4 Linux与自由软件及GNU的关系 4
1.5 Linux的用途 6
1.5.1 个人UNIX工作站 6
1.5.2 X终端客户 6
1.5.3 X应用服务器 6
1.5.4 UNIX开发平台 6
1.5.7 终端服务器、传真服务器、Modem服务器 7
1.6 Linux的发行版本 7
1.5.6 Internet服务器 7
1.5.5 网络服务器 7
1.7 Linux的不足之处 8
第二章 Linux程序开发工具简介 10
2.1 C语言的编译器和调试器 10
2.1.1 GCC的基本用法 11
2.1.2 一些常用的选项 11
2.1.3 优化选项 12
2.1.4 用gdb调试程序 12
2.1.5 图形的调试工具xxgdb 16
2.1.7 grpof 17
2.1.6 cproto 17
2.1.8 其他工具 18
2.2 C++语言简介及其编译器与调试器 18
2.2.1 为什么使用C++ 18
2.2.2 调试C++程序 20
2.2.3 调试异常处理 20
2.2.4 GNU的C++类库 21
2.3 Make 25
2.3.1 Make简介 25
2.3.2 Makefile文件 27
2.3.3 make的内建规则 29
2.3.4 使用autoconf和automake产生makefile 30
2.4 Xwpe 34
2.5 Shell简介 36
2.6 Perl语言简介 36
2.6.1 安装Perl 37
2.6.2 运行Perl脚本 37
2.7 awk简介 38
2.7.1 awk的用途 38
2.7.2 awk的特点 38
2.7.3 awk的历史 38
2.8 小结 39
3.1 vi简介 40
3.1.1 vi基本观念 40
第三章 Linux下的文本编辑器 40
3.1.2 vi的基本命令 41
3.1.3 vi高级应用 42
3.2 Emacs简介 44
3.2.1 GNUEmacs的特点 45
3.2.2 GNUEmacs的基本用法 46
3.2.3 Emacs小结 51
3.3 其他编辑器 51
3.4 小结 52
4.1 Linux的核心 53
第四章 Linux核心与系统调用 53
4.2 系统调用的使用 54
4.3 系统调用与函数的区别 55
4.4 核心程序的结构 56
4.5 小结 57
第五章 Linux的文件系统 58
5.1 操作文件的常用命令 58
5.2 Linux文件系统概述 61
5.3 Ext2文件系统 63
5.4 VFS 68
5.5 /proc文件系统 74
5.6 设备文件 74
5.7.1 文件描述字 75
5.7 操作文件的系统调用 75
5.7.2 open系统调用 76
5.7.3 close系统调用 77
5.7.4 read与write系统调用 77
5.7.5 creat系统调用 77
5.7.6 lseek系统调用 79
5.7.7 dup系统调用 83
5.7.8 link系统调用 85
5.7.9 unlink系统调用 86
5.7.10 fcntl系统调用 86
5.7.11 stat与fstat系统调用 88
5.7.12 access系统调用 93
5.7.13 chmod系统调用 94
5.7.14 chown系统调用 95
5.7.15 chdir系统调用 96
5.7.16 mkdir与rmdir系统调用 96
5.7.17 mknod系统调用 97
5.7.18 mount与umount系统调用 97
5.7.19 ftw系统调用 99
5.8 小结 100
第六章 进程管理 101
6.1 进程的概念 101
6.2 观察进程执行 102
6.3 Linux的进程管理 104
6.3.2 进程调度 107
6.3.1 进程ID 107
6.3.4 虚拟内存处理 109
6.3.3 文件处理 109
6.3.5 创建一个进程 110
6.3.6 执行一个程序 111
6.4 创建进程——fork和clone 112
6.4.1 fork()系统调用 112
6.4.2 system()系统调用 119
6.4.3 clone()系统调用 120
6.5 exec系统调用 121
6.6 进程的优先级 126
6.7.2 获取/设置进程组信息 127
6.7 获取/设置进程信息 127
6.7.1 获取进程的PID号 127
6.8 ptrace()系统调用 129
6.9 Linux的启动过程 129
6.10 小结 130
第七章 进程间通信(IPC) 131
7.1 进程间通信机制简介 131
7.1.1 信号 131
7.1.2 管道 133
7.2 SystemVIPC机制 135
7.2.1 消息队列 136
7.2.2 信号灯(semaphores) 137
7.2.3 共享内存 138
7.3 IPC系统调用 139
7.4 信号处理 139
7.4.1 信号的基本概念 139
7.4.2 信号类型 140
7.4.3 处理信号的系统调用 142
7.5 Linux操纵管道的系统调用 147
7.5.1 pipe()系统调用 147
7.5.2 命名管道 153
7.6 UNIXSystemVIPC机制 158
7.6.1 IPC对象的内容 158
7.6.2 消息队列 159
7.6.3 共享内存 165
7.6.4 信号灯 168
7.7 小结 175
第八章 Linux的多线程编程 176
8.1 简介 176
8.1.1 使用多线程的好处 176
8.1.2 Linux的线程结构 176
8.1.3 Linux线程的缺点 179
8.2 Linux的线程库应用 181
8.2.1 创建线程 181
8.2.2 暂停线程 183
8.2.3 线程同步 185
8.2.4 线程的终止和终止处理程序 192
8.2.5 线程特定数据的处理函数 196
8.2.6 使用信号灯来同步线程 199
8.3 小结 201
第九章 网络编程 203
9.1 TCP/IP简介 203
9.2 Linux中TCP/IP网络的层结构 205
9.3 BSD套接字接口 206
9.4 INET套接字层结构 208
9.4.1 创建一个BSD套接字 208
9.4.2 绑定一个INETBSD套接字 209
9.4.3 连接一个INETBSD套接字 210
9.4.4 监听一个INETBSD套接字 210
9.4.5 接收一个连接请求 211
9.5 IP层 211
9.5.1 套接字缓冲区 211
9.5.2 接收IP包 212
9.5.3 发送IP包 213
9.5.4 数据分组 213
9.6 地址解析协议(ARP) 214
9.7 IP路由 215
9.7.2 传送消息数据库 216
9.7.1 路由缓存 216
9.8 网络编程的基本概念 217
9.8.1 网络地址 217
9.8.2 网络端口 218
9.8.3 套接字 219
9.8.4 客户/服务器模式(C/S) 219
9.9 阻塞与非阻塞 221
9.10 套接字网络编程原理 221
9.11 网络编程的系统调用 223
10.1 什么是Shell 239
10.1.1 DOS中的command.com文件 239
第十章 Linux的Shell 239
10.1.2 Linux中的内核沟通界面 240
10.2 Linux中几种不同的Shell 240
10.2.1 Bash Shell 240
10.2.2 C Shell 241
10.2.3 Korn Shell 241
10.2.4 ash Shell 241
10.2.5 zsh 241
10.3 Shell命令解释程序 242
10.3.1 输入输出重新定向 242
10.3.2 管道线(pipelines) 243
10.3.3 后台进程 244
10.3.4 元字符及特殊字符 245
10.3.5 C Shell的交互功能 247
10.4 Shell的使用 249
10.4.1 Shell的进入与退出 249
10.4.2 Shell的内部指令和外部指令 250
10.5 Shell环境的初始化 251
10.6 小结 253
第十一章 Shell程序设计 254
11.1 Shell程序 254
11.2 Shell程序的变量和基本语法 257
11.2.1 Shell变量 257
11.2.2 test命令 259
11.2.3 控制结构 263
11.2.4 Shell脚本程序中的函数 272
11.3 正则表达式 273
11.3.1 行首匹配符“^”和行尾匹配符“$” 273
11.3.2 单个字符匹配符“.” 274
11.3.3 字符重复匹配符“*” 275
11.3.4 字符类匹配符“?” 277
11.3.5 各种匹配符的组合使用 279
11.4 过滤器 280
11.4.1 三种常见的过滤器 281
11.4.2 过滤器中的重定向及管道 283
11.4.3 输出类过滤器 285
11.4.4 grep命令和fgrep命令 287
11.4.5 grep命令与正则表达式 289
11.5 何时使用Shell程序 290
11.6 小结 291
第十二章 Perl语言简介 292
12.1 Perl的历史 292
12.2 Perl的目标和适用性 292
12.3 基本概念和概览 293
12.4 小结 294
13.1.1 标量变量 295
13.1.2 数组变量 295
13.1 变量 295
第十三章 Perl编程 295
13.2 字符串 296
13.2.1 单引字符串 296
13.2.2 双引字符串 296
13.3 运算符 297
13.3.1 数字运算符 297
13.3.2 字符串运算符 298
13.3.3 运算符的优先级和相关性 299
13.3.4 数字和字符串间的转换 300
13.3.5 标量变量运算符 300
13.3.6 数组运算符 302
13.4.2 条件控制 305
13.4.1 语句块 305
13.4 控制结构 305
13.4.3 循环控制 308
13.4.4 复杂控制结构 310
13.5 关联数组 314
13.5.1 关联数组的变量 314
13.5.2 关联数组的实量表示 314
13.5.3 关联数组操作符 315
13.6 输入输出 316
13.6.1 从STDIN输入 316
13.6.3 向STDOUT输出 317
13.6.2 从<>操作符输入 317
13.7 正则表达式 318
13.7.1 正则表达式的概念 318
13.7.2 正则表达式的简单应用 318
13.7.3 模式 320
13.7.4 有关匹配操作符的详细介绍 324
13.7.5 替换 327
13.8 函数 328
13.8.1 定义用户函数 328
13.8.2 申请用户函数 329
13.8.3 返回值 329
13.8.4 参数 330
13.8.5 函数中的局部变量 332
13.9 格式 334
13.9.1 定义格式 334
13.9.2 申请格式 336
13.9.3 字段句柄 337
13.9.4 页顶格式 340
13.9.5 改变格式的缺省值 341
13.10 文件和目录 343
13.10.1 文件句柄 343
13.10.2 文件句柄操作 344
13.10.3 目录句柄 345
13.10.4 目录句柄操作 345
13.10.5 文件操作 346
13.10.6 目录操作——创建及删除目录 347
13.10.7 权限 348
13.11 进程管理 348
13.11.1 使用system()和exec() 348
13.11.2 使用单引号 350
13.11.3 把进程用作文件句柄 351
13.11.4 使用fork 351
13.11.5 发送和接收信号 353
13.12 小结 354
14.1.3 awk的应用 355
14.1.1 awk的由来 355
14.1.2 awk的版本介绍 355
14.1 基本awk概念 355
第十四章 awk基础 355
14.1.4 awk的特性 356
14.2 命令行和管道 356
14.3 模式和操作 358
14.3.1 模式和操作简介 358
14.3.2 简单正则表达式 359
14.3.3 复合正则表达式 360
14.4 脚本格式 362
14.5 基本运算 363
15.1.1 变量的类型 365
15.1 变量 365
第十五章 awk程序设计 365
15.1.2 预定义变量 366
15.1.3 字符串变量 368
15.2 数组 370
15.3 条件控制 371
15.3.1 if语句 371
15.3.2 if-else语句 372
15.3.3 if-else if语句 372
15.3.4 空语句和条件语句 373
15.4 循环控制 373
15.4.2 for循环 374
15.4.1 do-while循环 374
15.4.3 while循环 375
15.4.4 break和continue语句 376
15.5 输入输出 377
15.5.1 输入 377
15.5.2 输出 379
15.6 函数 381
15.6.1 内部函数 382
15.6.2 自定义函数 383
16.1 安全问题概述 386
16.1.1 网络安全 386
第十六章 安全问题剖析 386
16.1.2 网络安全的特征及其分类 388
16.1.3 安全机制和服务及加密机制 389
16.1.4 TCP/IP协议的安全问题及网络攻击方法 389
16.2 防火墙 390
16.2.1 防火墙的功能 390
16.2.2 防火墙的类型 391
16.2.3 防火墙的安全策略 393
第十七章 用户安全技术 395
17.1 口令安全 395
17.2 文件许可权 395
17.4 umask命令 396
17.5 设置用户ID和同组用户ID许可 396
17.3 目录许可 396
17.6 cp、mv、ln和cpio命令 397
17.7 su和newgrp命令 398
17.8 文件加密 398
17.9 其他安全问题 398
17.10 保持账号安全的要点 400
第十八章 程序员安全技术 402
18.1 系统子程序的安全性 402
18.1.1 I/O子程序 402
18.1.2 进程控制 402
18.1.3 文件属性 403
18.1.4 UID和GID的处理 404
18.2 标准C库子程序的安全性 405
18.2.1 标准I/O 405
18.2.2 /etc/passwd处理 405
18.2.3 /etc/group的处理 406
18.2.4 加密子程序 407
18.2.5 运行Shell 407
18.3 编写C程序的安全性 407
18.4 root程序设计的安全性 409
第十九章 系统管理员安全技术 411
19.1 文件系统安全 411
19.1.1 Linux文件系统概述 411
19.1.3 /etc/mknod命令 412
19.1.2 设备文件 412
19.1.4 安全考虑 413
19.1.5 find命令 413
19.1.6 secure程序 414
19.1.7 ncheck命令 414
19.1.8 安装和拆卸文件系统 414
19.1.9 系统目录和文件 415
19.2 超级用户权限安全 415
19.2.1 增加、删除、移走用户 415
19.2.2 启动系统 416
19.2.6 /etc/profile 417
19.2.5 shutdown命令 417
19.2.4 进入多用户 417
19.2.3 init进程 417
19.3 几个重要文件和执行环境的安全 418
19.3.1 /etc/passwd文件 418
19.3.2 /etc/group文件 419
19.3.3 执行的环境 419
19.4 安全管理及安全审计 421
19.4.1 安全管理 421
19.4.2 安全审计 421
19.5 用户及系统管理员安全意识 424
19.5.1 用户安全意识 424
19.5.2 系统管理员意识 425
19.6 小结 427