Linux程序员与用户指南

Linux程序员与用户指南
作 者: 格拉斯 阿伯雷斯 刘颖
出版社: 清华大学出版社
丛编项: 国外经典教材·计算机科学与技术
版权说明: 本书为出版图书,暂不支持在线阅读,请支持正版图书
标 签: Linux
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Graham Glass毕业于英格兰南安普敦大学,获得了计算机科学和数学的学士学位。他移民到美国后在德州大学达拉斯分校获得了计算机科学的硕士学位。此后他成为一名UNIX/C系统分析师,并大量参与神经网络和并发分布式处理的研究工作。再后来他成了这所大学的教师,讲授包括UNIX、C、汇编语言、编程语言、C++和Smalltalk在内的多门课程。他与别人联手创立了ObjectSpace公司,专门从事于面向对象的培训、咨询和产品开发。他随后又创建了The Mind Electric公司,生产一种名为Glue的Java web服务平台,和一种用于共享的SOA基础结构的平台,叫做Fabric。The Mind Electric公司后来被webMethods公司收购,Graham现在是webMethods公司的首席技术官。Graham在业余时间喜欢读书、跑步、游泳、骑自行车、潜泳、滑雪、旅行,他还有自己的博客。

内容简介

本书是Linux的新老用户和程序员可以信赖的一个指南,书中讲述了Linux最为重要的主题,并用大量实例简明地介绍了100多个广泛使用的Linux实用程序。两位作者Graham Glass和King Ables写作本书时在格式与结构上沿袭了他们以前的大作UNIX for Progranners and Users,这本书在各种课堂环境中大获成功,获得了不同背景的学生与教授的认可。.Glass和Ables以系统的方式讲解了GNU实用程序、shell、联网、Internet、Linux桌面、C编程工具、系统编程,和许多其他知识。书中还用一整章的篇幅介绍Linux的安装,涉及选择和获得分发版和软件包,规划和配置新的Linux系统。..每章开篇概述本章宗旨、学习目标,以及将要学习的实用程序、系统调用和shell命令。每章结束时先回顾知识点,然后进行测验,做各种难度的练习题,最后至少提供一个综合性的项目供读者练手。所有的示例代码和命令都可以从网上下载。...

图书目录

第1章 Linux的定义

1.1 计算机系统 1

1.2 硬件 2

1.2.1 中央处理器(CPU) 2

1.2.2 总线 2

1.2.3 随机存储器(RAM) 3

1.2.4 只读存储器(ROM) 3

1.2.5 外存储器 3

1.2.6 光驱 3

1.2.7 显示器 3

1.2.8 图形卡 3

1.2.9 键盘 3

1.2.10 鼠标 3

1.2.11 打印机 3

1.2.12 磁带 3

1.2.13 调制解调器 4

1.2.14 网络接口 4

1.2.15 其他外围设备 4

1.3 操作系统 4

1.4 软件 4

1.5 共享资源 5

1.6 通信 5

1.7 实用程序 6

1.8 程序员支持 6

1.9 标准 7

1.10 Linux家族 7

1.10.1 UNIX 7

1.10.2 开源软件和自由软件基金 9

1.10.3 Linus 9

1.11 Linux的软件打包 10

1.12 Linux和UNIX的基本方法 10

1.13 Linux的特性 11

1.14 本书内容展望 12

第2章 安装Linux系统

2.1 引言 14

2.2 支持Linux的硬件 15

2.2.1 CPU类型 15

2.2.2 总线结构 15

2.2.3 内存 15

2.2.4 磁盘 16

2.2.5 显示器、键盘和鼠标 16

2.3 选择Linux分发版 16

2.3.1 Debian 17

2.3.2 Fedora 17

2.3.3 Mandrake 18

2.3.4 Slackware 18

2.3.5 SuSe 19

2.3.6 TurboLinux 19

2.4 选择软件包 19

2.4.1 X Window系统 19

2.4.2 桌面环境 20

2.4.3 联网 21

2.4.4 Office工具 22

2.4.5 编程语言和工具 22

2.5 设计系统 22

2.5.1 运行Linux的方式 23

2.5.2 磁盘分区 23

2.5.3 Linux文件系统 24

2.5.4 引导加载程序 26

2.5.5 引导软盘 26

2.6 获得Linux 27

2.6.1 光盘 27

2.6.2 下载 28

2.7 安装Linux 28

2.7.1 获得Linux分发版的文档 28

2.7.2 引导 29

2.7.3 分区工具 29

2.7.4 重新设置Windows分区的大小 30

2.7.5 系统设置 30

2.7.6 引导加载程序 31

第3章 非程序员使用的GNU实用程序

3.1 获得账户 34

3.2 登录 34

3.3 Shells 35

3.4 运行GNU实用程序 35

3.5 输入、输出和错误通道 36

3.6 获得联机帮助:man 36

3.7 特殊字符 38

3.7.1 终止进程:Control-C 39

3.7.2 输入结束:Control-D 39

3.8 设置密码:passwd 39

3.9 登出 40

3.10 浏览文件系统 41

3.11 打印shell的当前工作目录:pwd 41

3.12 绝对路径名和相对路径名 42

3.13 创建文件 43

3.14 列出目录内容:ls 44

3.15 列出文件的内容:cat/more/head/tail 45

3.16 重命名文件:mv 46

3.17 创建目录:mkdir 46

3.18 切换目录:cd 47

3.19 复制文件:cp 48

3.20 编辑文件:vim 49

3.21 删除目录:rmdir 49

3.22 删除文件:rm 50

3.23 打印文件:lp/lpstat/cancel 51

3.24 打印文件:lpr/lpq/lprm 52

3.25 计算文件字数:wc 54

3.26 文件属性 54

3.26.1 文件存储空间 54

3.26.2 文件名 55

3.26.3 文件修改时间 55

3.26.4 文件所有者 55

3.26.5 文件组 55

3.26.6 文件类型 55

3.26.7 文件权限 56

3.26.8 硬链接数 58

3.27 组 58

3.28 列出组:groups 58

3.29 改变文件组:chgrp 59

3.30 修改文件权限:chmod 59

3.31 改变文件所有者:chown 61

3.32 改变组:newgrp 61

3.33 尾声 62

3.34 确定终端类型:tset 62

3.35 改变终端的特性:stty 64

3.36 编辑文件:vim 66

3.36.1 启动vim 66

3.36.2 文本输入模式 66

3.36.3 命令模式 67

3.36.4 内存缓冲区和临时文件 68

3.36.5 常见的编辑功能 68

3.36.6 光标移动 68

3.36.7 删除文本 69

3.36.8 替换文本 70

3.36.9 粘贴文本 70

3.36.10 查找 71

3.36.11 查找/替换 72

3.36.12 保存/加载文件 72

3.36.13 其他操作 73

3.36.14 自定义vim 73

3.36.15 保存自定义设置 74

3.37 编辑文件:emacs 74

3.37.1 启动emacs 74

3.37.2 emacs命令 75

3.37.3 脱困 75

3.37.4 获得帮助 76

3.37.5 退出emacs 76

3.37.6 emacs的模式 76

3.37.7 输入文本 76

3.37.8 常见编辑功能 76

3.37.9 移动光标 76

3.37.10 删除、粘贴和撤销 77

3.37.11 查找 78

3.37.12 查找/替换 78

3.37.13 保存/加载文件 78

3.37.14 其他操作 79

3.38 电子邮件:mail 79

3.38.1 发邮件 80

3.38.2 读邮件 81

3.38.3 联系系统管理员 82

第4章 特权用户使用的GNU实用程序

4.1 引言 85

4.2 过滤文件:egrep,fgrep,grep,uniq 86

4.2.1 过滤模式:egrep/fgrep/grep 86

4.2.2 删除重复行:uniq 89

4.3 排序文件:sort 90

4.4 比较文件:cmp和diff 92

4.4.1 测试同一性:cmp 92

4.4.2 文件差异:diff 93

4.5 查找文件:find 94

4.6 归档文件:cpio,tar和dump/restore 96

4.6.1 复制文件:cpio 96

4.6.2 磁带归档:tar 98

4.6.3 增量备份:dump和restore 100

4.7 调度命令:crontab和at 101

4.7.1 定期执行:crontab 102

4.7.2 一次性执行:at 103

4.8 可编程的文本处理:gawk 105

4.8.1 gawk程序 105

4.8.2 访问单个的域 106

4.8.3 BEGIN和END 106

4.8.4 运算符 107

4.8.5 变量 107

4.8.6 控制结构 107

4.8.7 扩展的正则表达式 108

4.8.8 条件范围 108

4.8.9 域分隔符 108

4.8.10 内建函数 109

4.9 硬链接和软链接:ln 109

4.10 标识shell:whoami 111

4.11 替换用户:su 111

4.12 转换文件 112

4.12.1 压缩文件:gzip和gunzip 112

4.12.2 流编辑:sed 113

4.12.3 转换字符:tr 117

4.12.4 转换下划线序列:ul 118

4.13 查看原始文件内容:od 118

4.14 挂接文件系统:mount和umount 120

4.15 标识终端:tty 120

4.16 测试执行时间:time 121

4.17 自己编写程序:perl 121

4.17.1 获得Perl 122

4.17.2 运行Perl 122

4.17.3 打印文本 122

4.17.4 变量、字符串和整数 123

4.17.5 数组 123

4.17.6 算术和逻辑运算符 125

4.17.7 字符串运算符 126

4.17.8 比较运算符 126

4.17.9 if,while和foreach循环结构 126

4.17.10 文件 127

4.17.11 函数 128

4.17.12 库函数 128

4.17.13 命令行参数 129

4.17.14 现实世界的例子 130

第5章 Linux shell

5.1 引言 135

5.2 选择shell 135

5.3 shell操作 136

5.4 可执行文件对内建命令 137

5.4.1 显示信息:echo 137

5.4.2 切换目录:cd 137

5.5 元字符 137

5.6 重定向 138

5.6.1 输出重定向 138

5.6.2 输入重定向 139

5.7 文件名替换(通配符) 140

5.8 命令替换 142

5.9 序列 143

5.10 组合命令 144

5.11 后台处理 144

5.12 重定向后台进程 145

5.13 shell程序(脚本) 146

5.14 子shell 147

5.15 变量 148

5.16 引用 150

5.17 here文档 150

5.18 作业控制 151

5.18.1 进程状态:ps 151

5.18.2 向进程发送信号:kill 154

5.18.3 等待子进程:wait 155

5.19 查找命令:$PATH 156

5.20 替换标准实用程序 157

5.21 终止和退出码 157

5.22 通用的核心内建命令 158

5.22.1 eval 158

5.22.2 exec 159

5.22.3 shift 159

5.22.4 umask 159

第6章 Bourne Again shell

6.1 引言 164

6.2 启动 164

6.3 变量 164

6.3.1 简单变量的创建/赋值 165

6.3.2 访问简单变量 166

6.3.3 列表变量的创建/赋值 167

6.3.4 访问列表变量 168

6.3.5 建立列表 168

6.3.6 摧毁列表 169

6.3.7 从标准输入读取变量 169

6.3.8 导出变量 170

6.3.9 只读变量 171

6.3.10 预定义变量 172

6.4 命令的快捷方式 173

6.4.1 别名 174

6.4.2 命令历史 174

6.4.3 命令补全 176

6.5 代字号替换 176

6.6 重定向 177

6.7 命令替换 178

6.8 算术运算 178

6.9 条件表达式 179

6.9.1 算术测试 179

6.9.2 字符串比较 179

6.9.3 面向文件的表达式 180

6.10 控制结构 180

6.10.1 case..in..esac 181

6.10.2 if..then..elif..then..else..fi 182

6.10.3 for..do..done 183

6.10.4 while/until..do..done 184

6.10.5 trap 185

6.11 函数 186

6.11.1 使用参数 186

6.11.2 从函数返回 187

6.11.3 访问函数 187

6.11.4 递归 188

6.11.5 共享函数 189

6.12 菜单:select 189

6.13 目录访问和目录堆栈 190

6.14 作业控制 192

6.14.1 指定作业 192

6.14.2 bg 192

6.14.3 fg 193

6.14.4 kill 193

6.15 命令行选项 193

第7章 Korn shell

7.1 引言 196

7.2 启动 197

7.3 变量 198

7.3.1 变量的创建/赋值 198

7.3.2 访问变量 199

7.3.3 从标准输入读取变量 200

7.3.4 导出变量 201

7.3.5 只读变量 202

7.3.6 预定义的局部变量 202

7.3.7 预定义的环境变量 203

7.4 别名 204

7.4.1 给内建命令指定别名 204

7.4.2 删除别名 204

7.4.3 预定义的别名 205

7.4.4 几个有用的别名 205

7.4.5 被跟踪的别名 205

7.4.6 共享别名 206

7.5 历史 207

7.5.1 命令的编号 207

7.5.2 命令的存储 207

7.5.3 命令重执行 207

7.5.4 编辑命令 208

7.6 编辑命令 209

7.6.1 内建的vi编辑器 209

7.6.2 内建的emacs/gmacs编辑器 211

7.7 算术运算 211

7.7.1 防止元字符的特殊解释 212

7.7.2 测试值 213

7.8 代字号替换 213

7.9 菜单:select 214

7.10 函数 215

7.10.1 使用参数 216

7.10.2 从函数返回 216

7.10.3 上下文 217

7.10.4 局部变量 217

7.10.5 递归 217

7.10.6 共享函数 218

7.11 作业控制 218

7.11.1 jobs 219

7.11.2 指定作业 219

7.11.3 bg 220

7.11.4 fg 220

7.11.5 kill 220

7.12 增强功能 221

7.12.1 重定向 221

7.12.2 管道 222

7.12.3 命令替换 222

7.12.4 变量 222

7.12.5 内建命令 227

7.13 示范项目:junk 232

7.14 命令行选项 234

第8章 C shell

8.1 引言 238

8.2 启动 238

8.3 变量 239

8.3.1 简单变量的创建/赋值 239

8.3.2 访问简单变量 240

8.3.3 列表变量的创建/赋值 240

8.3.4 访问列表变量 241

8.3.5 建立列表 241

8.3.6 预定义局部变量 242

8.3.7 环境变量的创建/赋值 243

8.3.8 预定义的环境变量 243

8.4 表达式 243

8.4.1 字符串表达式 243

8.4.2 算术表达式 244

8.4.3 面向文件的表达式 245

8.5 文件名补全 246

8.6 命令编辑 246

8.7 别名 247

8.7.1 删除别名 248

8.7.2 有用的别名 248

8.7.3 共享别名 248

8.7.4 带参数的别名 248

8.8 历史 249

8.8.1 命令的编号 249

8.8.2 命令的存储 249

8.8.3 读取历史 249

8.8.4 命令重执行 250

8.8.5 访问历史的某个部分 250

8.8.6 访问文件名的某个部分 251

8.8.7 历史替换 252

8.9 控制结构 252

8.9.1 foreach..end 253

8.9.2 goto 253

8.9.3 if..then..else..endif 254

8.9.4 onintr 255

8.9.5 repeat 255

8.9.6 switch..case..endsw 256

8.9.7 while..end 257

8.10 示例项目:junk 258

8.11 增强功能 260

8.11.1 元字符:{} 260

8.11.2 文件名替换 261

8.11.3 重定向 261

8.11.4 管道 262

8.11.5 作业控制 262

8.11.6 终止登录shell 264

8.12 内建命令 264

8.12.1 chdir 264

8.12.2 glob 265

8.12.3 source 265

8.13 目录堆栈 265

8.14 命令行选项 267

第9章 联网与Internet

9.1 引言 270

9.2 组网 270

9.2.1 以太网 270

9.2.2 网桥 271

9.2.3 路由器 271

9.2.4 网关 272

9.3 网络互联 272

9.3.1 包交换 273

9.3.2 IP地址 273

9.3.3 命名 274

9.3.4 路由 274

9.3.5 安全 274

9.3.6 端口和常见服务 276

9.3.7 网络编程 276

9.4 标识网络用户 276

9.4.1 列出用户:users 277

9.4.2 更详细的用户列表:who和w 277

9.4.3 本地主机名:hostname 278

9.4.4 个人数据:finger 278

9.5 与网络用户通信 279

9.5.1 屏蔽通信:mesg 279

9.5.2 一次发送一行文本:write 279

9.5.3 互动交谈:talk 280

9.5.4 把消息发送给所有用户:wall 280

9.6 分发数据 281

9.6.1 在两台Linux或UNIX主机间复制文件:rcp和scp 281

9.6.2 在非Linux/UNIX主机间复制文件:ftp和sftp 282

9.7 分布式处理 284

9.7.1 远程登录:rlogin和slogin 284

9.7.2 执行远程命令:rsh和ssh 285

9.7.3 远程连接:telnet 285

9.8 Internet的演变 287

9.8.1 开端——20世纪60年代 288

9.8.2 Intenet的标准化——20世纪

70年代 288

9.8.3 重新架构和重新命名Internet--

20世纪90年代 290

9.8.4 web--20世纪90年代 293

9.9 使用当今的Internet 297

9.9.1 URL 297

9.9.2 web搜索 297

9.9.3 查找用户和域 298

第10章 Linux桌面

10.1 引言 300

10.1.1 图形用户界面 301

10.1.2 MIT 301

10.2 X服务器 301

10.2.1 屏幕几何学 302

10.2.2 安全性和授权 302

10.3 桌面环境 303

10.3.1 CDE 304

10.3.2 GNOME 304

10.3.3 KDE 304

10.4 窗口管理器 305

10.4.1 焦点 305

10.4.2 程序启动 305

10.4.3 打开和关闭窗口 306

10.4.4 选择 306

10.5 控件 308

10.5.1 菜单 308

10.5.2 按钮 309

10.5.3 复选框/单选按钮 309

10.5.4 滚动条 309

10.6 桌面操作 310

10.6.1 弹出根菜单 310

10.6.2 打开和关闭窗口 310

10.6.3 最小化窗口 310

10.6.4 最大化窗口 311

10.6.5 移动窗口 311

10.6.6 重新调整窗口大小 311

10.6.7 升起或降低窗口 311

10.6.8 弹出窗口菜单 311

10.7 客户端应用程序 311

10.7.1 xclock 311

10.7.2 xterm 312

10.8 X客户端的标准参数 312

10.8.1 几何学 312

10.8.2 前景和背景 313

10.8.3 标题 313

10.8.4 iconic 313

10.9 高级话题 313

10.9.1 复制和粘贴 313

10.9.2 联网功能 314

10.9.3 应用程序资源 315

第11章 C编程工具

11.1 C语言 318

11.2 C编译器 319

11.3 单模块程序 319

11.3.1 编译C程序 320

11.3.2 修改的程序清单 321

11.3.3 运行C程序 321

11.3.4 覆盖默认的可执行文件名 322

11.4 多模块程序 322

11.4.1 可重用的函数 322

11.4.2 创建可重用的函数 322

11.4.3 分别编译和连接模块 324

11.4.4 重用反向函数 324

11.5 归档模块:ar 325

11.5.1 创建或添加文件 326

11.5.2 追加文件 326

11.5.3 获得内容表 326

11.5.4 删除文件 327

11.5.5 抽取文件 327

11.5.6 从命令行维护归档 327

11.5.7 建立归档索引 328

11.5.8 共享库 328

11.6 管理依赖性:make 328

11.6.1 makefile 329

11.6.2 make规则的次序 330

11.6.3 运行make 330

11.6.4 make规则 331

11.6.5 强制编译 332

11.6.6 宏 332

11.6.7 使用make维护归档 333

11.6.8 make的其他功能 334

11.7 GNU分析器:gprof 334

11.8 调试器:gdb 335

11.8.1 准备程序进行调试 336

11.8.2 进入调试器 336

11.8.3 运行程序 337

11.8.4 列出程序 338

11.8.5 设置断点 339

11.8.6 单步执行代码 341

11.8.7 检查变量值 341

11.8.8 问题所在 342

11.9 移除特殊代码:strip 343

第12章 系统编程

12.1 引言 346

12.2 错误处理:perror() 347

12.3 普通文件的管理 349

12.3.1 文件管理基础知识 349

12.3.2 第一个例子:reverse 350

12.3.3 reverse的工作原理 351

12.3.4 reverse.c:程序清单 352

12.3.5 打开文件:open() 356

12.3.6 读文件:read() 357

12.3.7 写文件:write() 358

12.3.8 在文件中移动:lseek() 359

12.3.9 关闭文件:close() 360

12.3.10 删除文件:unlink() 360

12.3.11 第二个例子:monitor 361

12.3.12 monitor的工作方式 362

12.3.13 monitor.c:清单 362

12.3.14 获得文件信息:stat() 369

12.3.15 读目录信息:opendir(),readdir()和closedir() 370

12.3.16 其他各种文件管理系统调用 371

12.3.17 改变文件所有者/文件组:chown() 371

12.3.18 修改文件权限:chmod() 372

12.3.19 复制文件描述符:dup() 372

12.3.20 文件描述符操作:fcntl() 373

12.3.21 控制设备:ioctl() 374

12.3.22 创建硬链接:link() 375

12.3.23 创建特殊文件:mknod(),mkdir()和mkfifo() 376

12.3.24 清空文件系统缓冲区:sync() 376

12.3.25 截短文件:truncate() 377

12.4 进程管理 377

12.4.1 创建新进程:fork() 378

12.4.2 孤儿进程 380

12.4.3 终止进程:exit() 381

12.4.4 僵尸进程 382

12.4.5 等待子进程:wait() 382

12.4.6 区分进程:exec 383

12.4.7 改变目录:chdir() 384

12.4.8 改变优先级:nice() 385

12.4.9 访问用户ID和组ID 386

12.4.10 示例程序:后台处理 386

12.4.11 重定向 387

12.5 信号 388

12.5.1 信号类型 389

12.5.2 定义的信号 389

12.5.3 POSIX信号 389

12.5.4 终端信号 390

12.5.5 请求闹钟信号:alarm() 390

12.5.6 处理信号:signal() 390

12.5.7 保护关键代码,束缚中断处理程序 392

12.5.8 发送信号:kill() 392

12.5.9 子进程的死亡 393

12.5.10 挂起和恢复进程 394

12.5.11 进程组和控制终端 395

12.6 进程间通信 399

12.6.1 管道 399

12.6.2 套接字 405

第13章 Linux内核

13.1 引言 425

13.2 内核基本 426

13.2.1 内核子系统 426

13.2.2 进程和文件 427

13.2.3 和内核交流 427

13.2.4 系统调用 427

13.2.5 用户模式和内核模式 428

13.2.6 同步与非同步处理 429

13.2.7 对中断的中断 431

13.3 文件系统 431

13.3.1 磁盘架构 431

13.3.2 虚拟文件系统 434

13.3.3 i节点 434

13.3.4 文件系统的布局 436

13.3.5 坏块 437

13.3.6 目录 438

13.3.7 把路径名转换为i节点号 438

13.3.8 挂接文件系统 439

13.4 进程管理 440

13.4.1 可执行文件 440

13.4.2 第一批进程 441

13.4.3 内核进程和用户进程 441

13.4.4 进程层次结构 441

13.4.5 进程状态 441

13.4.6 处理内核数据 442

13.4.7 任务列表 443

13.4.8 调度程序 444

13.5 虚拟内存 444

13.5.1 页表 444

13.5.2 调页 445

13.5.3 内存-映射文件 445

13.5.4 交换 446

13.5.5 分配和收回 446

13.5.6 加载可执行文件:execl()/execv() 447

13.5.7 复制进程:fork() 447

13.6 输入和输出 447

13.6.1 I/O对象 448

13.6.2 I/O系统调用 448

13.6.3 I/O缓冲 448

13.6.4 普通文件I/O 449

13.6.5 目录文件I/O 451

13.6.6 挂接文件系统 452

13.6.7 文件名的转换 452

13.6.8 特殊文件I/O 453

13.7 进程间通信 455

13.7.1 信号 455

13.7.2 管道 457

13.7.3 套接字 458

第14章 系统管理

14.1 引言 462

14.2 成为超级用户 462

14.2.1 使用su 462

14.2.2 使用sudo 462

14.3 启动Linux 463

14.3.1 Linux内核 463

14.3.2 运行级别 464

14.3.3 init 464

14.3.4 引导脚本 464

14.4 停止Linux 465

14.5 维护文件系统 465

14.5.1 文件系统的完整性 465

14.5.2 磁盘空间 466

14.5.3 创建新的文件系统 467

14.5.4 备份文件系统 468

14.6 维护用户账户 468

14.6.1 密码文件 469

14.6.2 组文件 470

14.7 安装新软件 470

14.8 外部设备 471

14.9 网络接口 472

14.10 自动执行任务 472

14.11 可调优的内核参数 473

14.11.1 /proc文件系统 473

14.11.2 sysctl实用程序 474

14.12 安全性问题 474

附录A 正则表达式与系统函数

A.1 正则表达式 477

A.1.1 文本 477

A.1.2 模式 478

A.2 扩展的正则表达式 478

A.3 修改的Backus-Naur符号 479

A.4 实用程序和内建的shell命令 480

A.5 系统调用和库函数 484

附录B 参考文献