第一章 Linux内核及其引导 1
1.1 Linux内核概述 1
1.2 系统引导 2
第二章 Linux进程管理 8
2.1 概述 8
2.2 Linux进程 8
2.3 进程系统调用 14
2.3.1 子进程的创建:fork()系统调用 15
2.3.2 进程的并发 15
2.3.3 进程的终止:exit系统调用 16
2.3.4 进程的同步:wait系统调用 17
2.4 进程调度 17
2.4.1 调度原理 18
2.4.2 调度时机 18
2.4.3 调度标识的设置 18
2.4.4 调度策略与优先数的计算 18
2.4.6 task_struct结构成员 19
2.4.5 调度的实现 19
2.4.7 调度管理器 20
2.4.8 部分源程序分析 21
2.4.9 多处理器系统中的调度 22
2.5 进程状态转换图 22
2.5.1 进程状态 22
2.5.2 进程的控制 24
2.6.2 举例 25
2.6.1 概述 25
2.6 软中断信号 25
2.6.3 软中断信号的处理步骤 26
2.7 进程虚空间描述 27
第三章 进程间通信(IPC) 29
3.1 信号 29
3.2 管道 30
3.3 其它IPC机制 31
3.3.1 等待队列 31
3.3.2 文件加锁 32
3.4.1 消息队列 33
3.4 UNIX系统V IPC机制 33
3.4.2 信号机 34
3.4.3 共享内存 36
3.4.4 UNIX本地套接字 38
第四章 内存管理 39
4.1 概述 39
4.2 内存管理系统调用接口 39
4.3 虚拟内存技术 40
4.3.1 请求分页与交换 41
4.3.2 访问控制 43
4.3.3 Linux分页表 44
4.3.4 请求换页 45
4.4 页面分配和解除分配 46
4.5 内存映射 50
4.6 高速缓存 50
4.6.1 缓冲区高速缓存 50
4.6.3 交换高速缓存 51
4.6.4 硬件高速缓存 51
4.6.2 页面高速缓存 51
第五章 文件系统 53
5.1 概述 53
5.2 虚拟文件系统(VFS) 55
5.2.1 VFS内部工作机制 55
5.2.2 /proe文件系统 61
5.3 EXT2文件系统 61
5.3.1 EXT2数据结构 63
5.3.3 数据块组描述子 67
5.3.2 EXT2目录 67
5.3.4 EXT2文件系统中的文件操作 68
5.4 缓存 69
5.4.1 VFS Inode缓存 69
5.4.2 目录缓存 70
5.4.3 缓冲区缓存 70
5.5 控制台文件操作 71
5.6 模块 72
5.6.1 源代码简述 73
5.6.2 加载模块 73
5.6.3 卸载模块 75
第六章 设备驱动 76
6.1 概述 76
6.1.1 驱动程序和内核 77
6.1.2 功能及特点 78
6.2 设备驱动管理 78
6.3 设备驱动分类描述 80
6.3.1 字符设备 80
6.3.2 块设备 83
6.3.3 网络设备 86
6.4 设备驱动程序的相互调用 90
6.5 设备驱动程序的实例研究 91
6.5.1 设备假想 91
6.5.2 工作次序 92
6.5.3 实例ramdisk.c 92
第七章 特殊设备Socket的设备驱动程序 99
7.1 概述 99
7.2 源程序分析 100
8.2 监视系统状态 130
第八章 内核监视和系统调整 130
8.1 概述 130
8.3 监视CPU 131
8.4 监视内存 132
8.5 监视进程 134
8.6 监视磁盘和文件系统 136
8.7 监视网络 136
8.8 端口监视 139
8.8.1 端口监视器 139
8.8.2 配置端口监视器和服务 139
8.8.3 记账服务 140
8.8.4 进程调度 141
第九章 Shell原理 142
9.1 Shell原理 142
9.2 Shell命令结构 142
9.3 Shell控制结构 143
9.3.1 if结构 143
9.3.3 case结构 144
9.3.2 for结构 144
9.4 Shell运行环境 145
9.5 其他Shell 146
第十章 再次讨论Linux的开机过程 147
10.1 开机过程 147
10.1.1 设定LILO 147
10.1.3 加载内核至内存 148
10.1.4 磁盘检查 148
10.1.2 加电过程 148
10.1.5 单用户模式 149
10.1.6 多用户模式 149
10.2 文件配置 149
10.2.1 父进程init 150
10.2.2 子进程的调度——inittab文件 151
10.3 自动作业控制 155
10.3.1 系统启动时的作业控制 155
10.3.2 用户登录时的自动作业控制 160
10.4.1 定期重复运行作业命令cron 161
10.4 三种作业自动控制的命令 161
10.4.2 特定日期运行一次的作业(at) 163
10.4.3 系统低负荷时运行一次的作业(batch) 163
第十一章 网络系统 164
11.1 内核源代码 164
11.2 Linux与计算机网络 164
11.3 Linux网络互联 166
11.3.1 TCP/IP 166
11.3.3 Socket通信 168
11.3.2 Socket 168
11.4 IP层 171
11.4.1 sk buff 171
11.4.2 数据报文的传递 174
11.4.3 接收和发送IP包 175
11.4.4 网络地址到物理地址的映射(ARP) 178
11.4.5 IP路由 179
第十二章 常见问题解答——启动和用户 182
12.1 如何从主引导记录中删除LILO并且重建原先的Windows MBR 182
12.2 如何在MBR中重建LILO 182
12.3 用软盘来引导系统(拷贝LILO到软盘) 183
12.5 如何设定大硬盘的LILO 184
12.4 如何设定安装前系统的硬件检测(CMOS)参数 184
12.6 为什么要做Rescue(急救)盘 185
12.7 如何在Linux下做一张类似Windows中的dos启动盘 185
12.8 如何制作一张RedHat Linux引导盘 186
12.9 如何在login之前执行预定进程 186
12.10 在Linux的非图形界面下如何增加一个用户 187
12.11 Linux有哪些对用户操作的简单而又有效的指令 189
13.2 如何用通配符指定文件 191
第十三章 常见问题和解答——文件和目录 191
13.1 如何识别文件的扩展名 191
13.3 如何查找当前目录和改变目录 192
13.4 如何使用登录目录的缩写 193
13.5 如何建立和删除目录 193
13.6 快速进入某些目录 193
13.7 RedHat下显示彩色目录列表 193
13.12 把man或info的信息存为文本文件 194
13.11 删除无用的core文件 194
13.9 显示命令文件的路径 194
13.8 显示文件的类型 194
13.10 查找文件 194
13.13 用当前路径作提示符 195
13.14 压缩可执行文件 195
13.15 查看Linux启动时的信息 195
13.16 处理文件名内含有特殊字符的文件 197
13.17 一次处理整个目录 197
13.18 如何防止rm*误删文件 197
13.20 如何使用文件列表 198
13.19 一些特殊而实用的删除文件的方法 198
13.21 如何查看文件属性 199
13.22 如何统计文件 199
13.23 如何加密文件 199
13.24 如何移动、拷贝文件和目录 200
13.25 如何比较文件和目录 201
13.26 如何在文件中实现自由查找 201
13.27 如何设定文件的权限 203
13.28 如何使用vi剪切、删除、粘贴文件内容 204
13.29 如何使用cut剪切、粘贴文件 205
13.30 如何使用tar和cpio进行文件备份和恢复 206
13.31 如何查找一个用户信息 206
13.32 如何监测是否有人在查询自己 206
13.33 如何为某些用户设定严格的Shell 207
13.34 如何记录不成功的登录企图 207
13.35 如何为一个账户设定生存期限 207
13.36 如何实现系统账务和进行系统检查活动 208
13.37 如何终止某些用户的进程 208
13.38 如何在软盘上创建msdos/ext2文件系统等 209
13.39 如何使用压缩和解压缩命令 209
第十四章 常见问题解答——X Window 212
14.1 如何配置XFree86 212
14.2 如何确定显示卡信息 218
14.3 如何定制X Window管理器 220
14.7 如何强行退出X Window 222
14.6 如何后台运行X Window程序 222
14.4 如何使X Window支持AGP显卡 222
14.5 如何启动后直接进入X Window 222
第十五章 常见问题解答——硬件要求及疑难解析 223
15.1 硬件要求 223
15.1.1 主板和CPU要求 223
15.1.2 内存要求 223
15.1.3 硬盘驱动控制的要求 223
15.1.5 显示器以及视频适配器的要求 224
15.1.6 其它硬件 224
15.1.4 硬盘空间要求 224
15.1.7 以太网卡 225
15.2 疑难解析 225
15.2.1 启动安装介质所遇到的问题 225
15.2.2 硬件问题 226
15.2.3 安装软件时遇到的问题 228
15.2.4 Linux安装后出现的问题 229
15.3 编译内核 230
第十六章 常见问题解答——网卡 239
16.1 如何手动设置网卡 239
16.2 如何在一个Linux系统中安装两块网卡及如何实现网卡的自动检测 240
第十七章 常见问题解答——SLIP和PPP 243
17.1 串行协议和SLIP 243
17.1.1 dip 243
17.1.2 slattach 243
17.1.3 dip和slip的选择 243
17.1.4 拨号 244
17.1.5 配制 244
17.2 PPP 247
17.2.1 PPP简介 247
17.2.2 PPP功能 248
17.2.3 利用Linux系统配置PPP 248
17.2.4 配置MODEM和串口 249
17.2.5 使用root权限设置PPP连接文件 250
17.2.6 PPP服务器认证 252
17.2.7 建立PPP连接 253
17.2.8 常见问题及解答 253
附录17A 配置两块NE2000网卡心得 254
17.2.9 使用PPP连接两个局域网 254
附录17B 如何在一台Linux单机上拨号上网 255
第十八章 常见问题解答——TCP/IP 258
18.1 使用TCP/IP 258
18.1.1 Internet协议族 258
18.1.2 TCP/IP基础 259
18.1.3 TCP/IP Internet程序包 259
18.2 网络配置 266
18.2.1 常用命令 266
18.2.2 域名服务 268
18.3 IP Alias技术 270
第十九章 常见问题解答——UUCP系统 271
19.1 引言 271
19.2 UUCP系统概述 271
19.3 UUCP网络 272
19.3.1 网络的结构 272
19.3.2 uuname命令的使用 272
19.4 命令 273
19.4.1 uucp命令 273
19.4.2 cu命令 274
19.4.3 ct命令 277
19.4.4 UUTO命令 277
19.4.5 uupick命令 278
19.4.6 unstat命令 279
19.4.7 UUX远程执行命令 280
第二十章 常见问题解答——邮件系统 281
20.1 如何使用邮件系统 281
20.2 邮件的地址 281
20.3 阅读电子邮件 282
20.4 发送电子邮件 284
20.5 有效地使用电子邮件 285
20.6 邮件系统的管理 286
第二十一章 常见问题解答——NFS,DFS,RFS 289
21.1 NFS 289
21.1.1 引言 289
21.1.2 安装NFS 289
21.1.3 启动NFS 290
21.1.4 配置NFS 291
21.1.5 NFS服务 293
21.1.6 NFS的安全性 293
21.1.7 如何访问远程文件 294
21.1.8 NFS的故障检修与系统崩溃 294
21.1.9 NFS不能做什么 295
21.2 DFS管理 295
21.3 RFS 296
21.3.1 RFS基础 296
21.3.2 RFS管理 297
第二十二章 Linux在网管系统和MIS系统集成方面的应用 301
22.1 概述 301
22.2 网络管理系统 301
22.2.1 基本组成 301
22.2.2 基于SNMP的网络管理模型 302
22.2.3 SNMP协议结构 302
22.3 Linux下数据库的安装 303
22.3.1 Informix的安装 303
22.3.2 安装oracle 311