第一部分Linux基础 2
第1章UNIX系统概述 2
1.1 UNIX的发展历史 2
1.1.1 UNIX的产生与发展 2
1.1.2 UNIX的相关标准 3
1.2 GNU的诞生与发展 4
1.2.1自由软件计划GNU 4
1.2.2许可证协议 5
1.2.3自由软件和开源软件 5
1.3 Linux内核 5
1.3.1 Minix操作系统 5
1.3.2 Linux的产生与发展 6
1.3.3 Linux内核版本 6
1.3.4 Linux内核的分类 6
1.4 Linux系统 6
1.4.1 Linux系统的概念 6
1.4.2 GNU/Linux 7
1.4.3 Linux发行版 7
1.5 Linux系统的商业运营模式 8
第2章Shell命令 9
2.1 Shell命令概述 9
2.1.1目录的组织结构 9
2.1.2文件的路径 10
2.1.3 Linux命令的语法结构 10
2.1.4 Shell命令的分类 11
2.1.5联机帮助 11
2.2目录和文件操作 11
2.2.1目录操作 11
2.2.2文件操作 12
2.2.3显示文本文件内容 15
2.2.4硬链接和软链接 16
2.3用户和用户组管理 16
2.3.1用户的分类 16
2.3.2用户组管理 16
2.3.3用户管理 17
2.3.4用户属性的修改 18
2.3.5用户管理相关配置文件 18
2.4文件的权限管理 19
2.4.1文件属性 19
2.4.2权限的修改 21
2.4.3权限验证 22
2.4.4权限掩码umask 23
2.4.5文件和目录权限的计算 23
2.5进程管理 24
2.5.1进程的管理信息 24
2.5.2与进程相关的命令 25
2.6 Linux的备份与恢复 28
2.6.1面向文件的备份与恢复 28
2.6.2面向文件系统的备份 30
2.6.3面向设备的备份与恢复 31
2.7 Linux应用软件包管理 32
2.7.1应用软件包的分类 32
2.7.2 RPM软件包的管理 32
2.8输入输出重定向和管道 33
2.8.1标准输入输出文件的定义 33
2.8.2输入输出重定向 34
2.8.3管道 34
2.9元字符与正则表达式 35
2.9.1元字符 35
2.9.2正则表达式 36
第3章Linux系统的定制 38
3.1磁盘管理 38
3.1.1硬盘的物理结构 38
3.1.2磁盘分区 39
3.1.3分区格式化 41
3.1.4 ext2文件系统 43
3.1.5文件系统的挂载与卸载 44
3.2引导加载程序grub 45
3.2.1引导加载的概念 45
3.2.2引导加载程序grub 46
3.2.3 grub交互命令 47
3.2.4 grub的启动过程 48
3.3 Linux内核定制 49
3.3.1 Linux内核 49
3.3.2定制Linux内核 50
3.4 Linux应用环境的初始化 50
3.4.1引导配置文件inittab 50
3.4.2用户登录 53
第二部分Shell程序设计 56
第4章Shell程序设计 56
4.1 Shell概述 56
4.2 Shell脚本的定义与执行 57
4.3 Shell变量 58
4.3.1 Shell变量的分类 58
4.3.2命令替换 61
4.4输入和输出 62
4.5 Shell中的引号 63
4.5条件表达式 65
4.5.1条件表达式 65
4.5.2命令分隔符 68
4.6判断语句 68
4.6.1条件语句 68
4.6.2分支语句 71
4.7循环语句 73
4.7.1 for循环语句 73
4.7.2 while语句 75
4.7.3 until语句 76
4.8函数 77
第三部分CNU C语言开发环境 82
第5章GNU C开发环境 82
5.1 GNU C编译器 82
5.1.1目标代码的生成 82
5.1.2 GCC概述 83
5.1.3 GNU C编译链接工具 83
5.2项目管理工具——GNU make 85
5.2.1项目管理概述 85
5.2.2基于make工具的项目管理 86
5.2.3 Makefile中的变量 88
5.2.4 Makefile文件中的潜规则 90
5.3创建和使用函数库 92
5.3.1静态库 93
5.3.2共享库 95
5.3.3动态链接库 96
5.4 GNU C函数库——glibc 98
第四部分Linux环境下的C语言编程 102
第6章Linux文件与目录 102
6.1 Linux文件系统概述 102
6.1.1文件系统的概念 102
6.1.2虚拟文件系统 102
6.1.3文件系统的结构 103
6.1.4应用编程接口 104
6.2文件的基本输入输出 105
6.2.1文件操作 105
6.2.2标准输入输出文件的定义 108
6.2.3编程实例 108
6.3文件属性操作 111
6.3.1获得文件属性 111
6.3.2修改文件存取权限 114
6.3.3改变文件的属主和属组 115
6.4目录操作 116
6.4.1目录操作 117
6.4.2浏览目录中的文件 119
6.5标准I/O库 120
6.5.1标准I/O库概述 120
6.5.2文件操作 121
6.5.3格式化输入与输出 124
6.5.4刷新缓冲区 127
6.6 I/O重定向 129
6.6.1文件描述符 129
6.6.2 I/O重定向 129
6.6.3实现重定向的方法 129
第7章Linux信号 133
7.1信号概述 133
7.1.1信号的概念 133
7.1.2应用编程接口 133
7.2 Linux系统中的信号 134
7.2.1 Linux系统中的信号 134
7.2.2信号的分类 136
7.2.3 Linux信号的产生 136
7.2.4信号的处理方式 136
7.2.5信号的处理流程 136
7.3信号的定义 136
7.3.1设置信号的行为 137
7.3.2信号处理函数 139
7.3.3定义多个信号 139
7.3.4信号的阻塞 142
7.4发送信号 143
7.5计时器 146
7.5.1睡眠延迟 146
7.5.2间隔计时器 150
第8章Linux进程 154
8.1 Linux进程概述 154
8.1.1 Linux进程 154
8.1.2应用编程接口 155
8.2进程的地址空间 155
8.2.1进程的地址空间 155
8.2.2环境变量相关操作 159
8.2.3命令行参数的引用 160
8.2.4动态内存管理 161
8.3进程的创建与终止 162
8.3.1创建进程 162
8.3.2程序的启动与结束 164
8.4加载可执行映像 167
8.4.1 ELF格式 167
8.4.2可执行文件的加载 168
8.5进程同步控制 173
8.5.1等待子进程结束 173
8.5.2等待指定子进程 176
8.6 Linux进程环境 179
8.6.1用户和用户组 179
8.6.2进程和进程组 180
8.6.3会话 184
8.6.4守护进程 185
第9章Linux进程通信 187
9.1进程通信概述 187
9.1.1进程通信方式 187
9.1.2应用编程接口 187
9.2管道 188
9.2.1无名管道 188
9.2.2命名管道 192
9.3 IPC概述 193
9.4信号量 193
9.4.1创建信号量 194
9.4.2获得与释放信号量 195
9.4.3信号量的控制操作 197
9.5消息队列 198
9.5.1创建消息队列 199
9.5.2发送消息 200
9.5.3接收消息 201
9.5.4设置消息队列属性 203
9.6共享内存 206
9.6.1创建共享内存 206
9.6.2共享内存映射的建立与释放 207
9.6.3设置共享内存属性 208
第10章 I/O操作模式 212
10.1 I/O操作模式概述 212
10.1.1 I/O操作模式 212
10.1.2应用编程接口 213
10.2同步阻塞I/O模式 214
10.2.1基本概念 214
10.2.2存在的问题 214
10.2.3解决方法 215
10.3同步非阻塞I/O模式 215
10.3.1基本概念 215
10.3.2实现方法 216
10.4多路复用I/O模式 218
10.4.1基本概念 218
10.4.2实现方法 219
10.5信号驱动的I/O模式 221
10.5.1基本概念 221
10.5.2实现方法 221
10.6异步1/O模式 223
10.6.1基本概念 223
10.6.2实现方法 223
10.7内存的I/O映射 227
10.7.1基本概念 227
10.7.2实现方法 227
10.8文件锁 229
10.8.1文件锁的类型 229
10.8.2基于flock函数实现文件锁 230
10.8.3利用fcntl函数实现文件加锁 231
10.9终端I/O 233
10.9.1终端的行为模式 234
10.9.2终端模式的设置 234
10.9.3终端I/O的编程接口 236
参考文献 240