标题：深入浅出Linux工具与编程
图书信息
深入浅出Linux工具与编程  余国平著
ISBN 978-7-121-13750-1
2011 年7 月出版
定价：79.000 元
16开
568页
内 容 简 介
本书系统地论述了Linux 工具与编程的相关知识。全书内容可分为两部分：Linux 知识的初级部分和高级部分。其中初级部分包括Linux 操作系统介绍、Linux 命令说明、Linux 常见实用工具（正则表达式、find、sed、awk）、Shell 编程、Linux C 语言程序设计、Linux C 语言开发工具（vi 与vim 编辑器、gcc、Makefile 和gdb）；高级部分包括Linux 进程编程（Linux 进程、Linux 线程、管道与信号、消息队列、信号量和共享内存）、Linux 文件编程、网络编程和XML 编程。
本书初级部分适合高等院校相关专业学生和Linux 爱好者学习，高级部分适合Linux 行业资深从业人员学习。
前  言
作者在软件行业从业了十年，先后通过了国家软件水平等级考试的《高级程序员》级别和《系统分析师》级别，参加了大型行业软件如银行核心业务系统、前置系统、数据仓库、金卡工程、银行大小额现代化支付、中间件、支付宝银行端接口等一系列项目设计、开发、测试和实施工作，具有丰富的软件编程经验，同时，一直在多家企业负责新员工的培训工作，对企业员工培训有较多的心得。新员工在大量繁多的技术面前常碰到应该学什么、怎么学的问题；各种技术与工具知识点怎么分优先级和重点问题；技术玻璃纸难以突破，水平难以提高的问题，等等。在企业里，员工怎样在时间有限、精力有限的情况下掌握好实用和有用的技术，满足企业用人的需要？作者总结的经验是培训教材的导向必须注重目的性、思想性、实践性、典型性和实用性，以任务驱动式培训和以目标管理为方法，用图文和言简意赅的语言描述技术思想，用经典程序说明技术思想，用多个项目实战案例解释如何高水平运用技术思想。
模仿是人们快速提高自身能力的捷径，本书的许多程序十分经典，采用实际编程使用的架构，读者可以作为编程模板应用于实践。本书的编排注重易学习性、可模仿性和实战性，其中模板化编程案例和规范化练习可以让在读者短时间内把书本知识变成自身的能力。本书也是一本技术思想深厚的图书，书中的许多内容来源于作者十年技术积累的总结，本书有些技术概念的概括来源于作者多年的思考和感悟，项目案例来源于作者从业的实际项目中。
本书由长期从事一线开发的技术人员编写完成，书中内容通俗易懂，作者力求让Linux技术变得简单，读者在阅读本书后能大大增加学习Linux技术的信心。本书把繁多的Linux技术进行了浓缩，能大大节约读者的学习时间和学习成本。本书注重对技术概念简要概括，更注重技术实现，书中的一些技术细节的概括来源于作者多年工作经验的总结。没有理论，实践是盲目的；没有实践，理论是空洞的。本书力求用言简意赅的理论让读者掌握技术的精髓，用经典程序和项目案例使读者加深对技术理论的理解。本书用精练的概念总结技术，用通俗易懂的语言说明技术，用精心的模板程序和项目案例实现技术。
本书内容
第1篇  Linux命令及其工具本篇包括Linux操作系统介绍、Linux命令说明、Linux常见实用工具（正则表达式、find、sed、awk）说明及实例练习、Shell编程语法说明及编程实例。
第2篇  Linux C语言程序设计本篇包括C语言基础、C语言控制结构、C语言函数、C语言数组、结构体及指针、C语言预编译、格式化I/O函数、字符串和内存操作函数、字符类型测试函数、字符串转换函数、Linux C语言开发工具（vi与vim编辑器、gcc、Makefile和gdb）。本篇多次运用堆栈表格对程序运行进行解释，这对于理解计算机语言运行机理非常重要。只有理解的才是最深刻的，理解其运行机理，可以触类旁通、一通百通，移植到理解C++语言和Java等语言。
第3篇  Linux进程本篇包括Linux编程基本概念、Linux进程、Linux线程、管道与信号、消息队列、信号量和共享内存。Linux进程章节中守护进程模板和数据仓库多进程处理案例可以应用到实际项目中。本篇Linux进程间通信程序范例是实际项目中精简的Demo程序，程序模型和使用方法与实际项目中类似。
第4篇  Linux文件本篇包括Linux文件编程，该部分内容对文件函数进行了分类总结，并提供了典型范例。
第5篇  网络编程本篇包括网络知识基础、Socket编程。Socket编程章节包括TCP并发服务器案例、TCP迭代服务器案例、文件服务器案例、UDP服务器编程、UDP广播、UDP多播、UNIX/Linux域套接字编程等。
第6篇  XML编程本篇包括XML概念、XML语法、XPath语法、libxml编程、支付宝银行端接口XML项目案例。本篇内容是目前市面上对Linux下XML编程总结非常全面的图书，在实际项目开发中有较大的借鉴意义。
本书特色
1．零起点的企业级培训教程读者。只需具有大学计算机专业及相关专业一般水平，即可对本书进行阅读和练习。本书内容通俗易懂，图文并茂，注重知识点的总结概括和分类。知识结构注重层层递进，以达到让读者在低起点向专家迈进的目的。有Linux从业基础部分（如Linux C语言程序设计），有Linux从业素质能力培养部分（如Linux命令及其工具、Linux C语言开发工具），也有Linux编程专家水平能力训练部分（如Linux进程编程、Linux文件编程、Linux进程间通信、网络编程与XML编程）。本书涵盖了Linux原理篇、命令篇、工具篇和程序篇。
专业就是“简单的事情”重复做，做到专业，就是把复杂的事情简单化，其方法为分类、分层、总结、模板化和流程化。而本书正是致力于这一目的，把复杂的技术简单明了地呈现在读者面前，帮助读者成为专业人士。
2．大量的企业级实训内容。本书的许多章节是作者关于企业级培训的实训内容，知识点注重目标明确、言简意赅、分清主次、项目导向，以求达到简洁不简单的效果。本书属于企业级实训教程，以Linux行业从业素质能力培养为导向，以实际应用为目标，以简洁的理论和经典练习为过程，以期达到快速提高读者的职业水平和职业能力。本书采用Linux行业素质能力模型的训练方法，即将Linux从业知识点逐条列出，并把知识点整合到规范化练习案例中，以达到让读者通过模仿练习快速把知识变为能力的目的。如本书Linux工具与命令章节，读者只要按照练习，即可达到Linux行业从业所需的中级水平，而Shell章节按照练习即可快速提高到Linux行业老员工的水平。本书这些企业级培训内容能帮助读者在短时间内学到实用且够用的Linux开发知识。
3．学什么，怎么学。一门技术是很难在短时间内学好的，但通常可以快速学会常用和关键的技术。本书以实用论为导向，丢弃了项目开发中用不到的众多技术细节。
本书注重理论联系实际，作者把自己十年的项目经验整合到本书中，将Linux从业的知识进行分类、总结，并辅以案例讲解，许多知识点都以实际工作所需知识为准，也是以作者所掌握的主要和重点知识为准。
书中的许多章节配有典型程序和规范化案例练习，学完理论后按照案例练习，即可达到技术的提升。本书内容的选取完全参照作者十年从业经验所用到的知识，言简意赅的图文讲解和规范化案例练习告诉读者怎么学。
4．多个实用项目案例。本书包含多个经典的项目案例，如Shell章节的备份脚本、C语言章节的实用日志库、Linux进程章节数据仓库多进程案例、网络章节的实用文件服务器和实用通信库、XML章节支付宝银行端接口项目的XPath库。这些案例具有较大的实用参考价值。
5．XML章节填补市场空白。XML是软件行业经常使用的技术，经常应用在数据交换、Web服务、内容管理、电子商务、配置脚本等许多方面。目前市面上的图书缺少针对XML开发技术的案例介绍，本书对这部分内容进行了专门的总结，同时提供了丰富的练习和经典的项目案例。
6．能快速学习提高的培训教程。时间是人类发展的空间，赢得时间就是赢得个人发展的空间。在个人的职业生涯中，一步领先常常可以做到步步领先。读者只要静下心来用一个月时间对阅读本书，并进行练习，就可以大大提高Linux技术编程水平。
由于作者水平有限，书中错漏之处在所难免，恳请读者批评指正。
目  录
第1篇  Linux命令及其工具
第1章  Linux系统与命令 2
1.1  Linux操作系统 2
1.1.1  Linux重要概念 2
1.1.2  Linux组成 3
1.1.3  Linux目录结构 3
1.1.4  Linux操作系统的组成 5
1.1.5  Linux用户管理 6
1.1.6  Linux文件管理 6
1.2  Linux命令 7
1.2.1  Linux命令帮助 7
1.2.2  Linux命令的符号及意义 8
1.2.3  Linux命令 9
第2章  Linux常用实用工具 18
2.1  正则表达式 18
2.2  find查找命令 20
2.2.1  find语法 20
2.2.2  find实例练习 22
2.3  sed 24
2.3.1  sed语法 24
2.3.2  sed实例练习 26
2.4  awk 29
2.4.1  awk语法 29
2.4.2  awk实例练习 36
第3章  Shell编程 40
3.1  Shell环境变量 40
3.1.1  环境变量说明 40
3.1.2  用户常用的系统环境变量 41
3.1.3  用户登录脚本示例 42
3.2  Shell的符号、变量及运行 43
3.2.1  Shell中的符号及其含义 43
3.2.2  “反引号命令替换 44
3.2.3  Shell变量 45
3.2.4  Shell脚本执行 50
3.2.5  Shell退出状态 50
3.3  Shell的输入和输出 51
3.3.1  Shell的输入 51
3.3.2  Shell的输出 52
3.4  Shell测试条件 53
3.5  Shell的流程控制结构 57
3.5.1  if语句 57
3.5.2  case语句 59
3.5.3  while语句 60
3.5.4  until语句 61
3.5.5  for语句 62
3.5.6  跳转语句 64
3.6  Shell数组 64
3.7  Shell函数 65
3.8  I/O重定向 67
3.9  Shell内置命令 68
3.10  实用Shell脚本 73
第2篇  Linux C语言程序设计
第4章  C语言基础 76
4.1  C语言基本概念 76
4.2  常量与变量 84
4.3  运算符 89
4.4  C语言控制结构 96
4.4.1  if语句 97
4.4.2  switch语句 100
4.4.3  goto语句 101
4.4.4  while语句 102
4.4.5  do-while语句 103
4.4.6  for语句 104
4.4.7  break和continue语句 106
第5章  C语言函数 107
5.1  函数简述 107
5.2  函数变量 110
5.3  函数定义与调用 110
5.3.1  函数定义 110
5.3.2  函数的参数与返回值 111
5.3.3  函数调用 115
第6章  C语言数组、结构体及指针 119
6.1  C语言数组 119
6.1.1  数组概述 119
6.1.2  一维数组 120
6.1.3  二维数组 124
6.1.4  字符数组 127
6.1.5  冒泡法排序 128
6.2  C语言结构 129
6.2.1  结构概念 129
6.2.2  结构变量 131
6.3  指针 134
6.3.1  指针概念 134
6.3.2  sizeof、void、const说明 139
6.3.3  指针变量作为函数参数 140
6.3.4  指针的运算 142
6.3.5  指向数组的指针变量 144
6.3.6  数组名作为函数参数 146
6.3.7  函数指针变量 148
6.3.8  返回指针类型函数 149
6.3.9  指向指针的指针 150
6.3.10  结构指针 150
6.3.11  动态存储分配 152
6.3.12  指针链表 153
6.3.13  指针数据类型小结 154
第7章  C语言预处理 156
7.1  define宏定义 156
7.2  typedef重定义 157
7.3  inline关键字 158
7.4  条件编译 158
7.5  头文件的使用 159
第8章  格式化I/O函数 161
8.1  格式化输出函数 161
8.1.1  输出函数原型 161
8.1.2  输出函数格式说明 162
8.2  格式化输入函数 165
8.2.1  输入函数原型 165
8.2.2  输入函数格式说明 165
第9章  字符串和内存操作函数 169
9.1  字符串操作函数说明 169
9.2  字符串函数操作 170
9.3  字符类型测试函数 179
9.4  字符串转换函数 180
第10章  标准I/O文件编程 182
10.1  文件打开方式 183
10.2  标准I/O函数说明及程序范例 185
第11章  Linux C语言开发工具 200
11.1  vi与vim 200
11.1.1  vi与vim概述 200
11.1.2  指令模式 201
11.1.3  末行模式 207
11.1.4  vim个人使用经验 210
11.1.5  vim的使用 211
11.1.6  文件编码 214
11.1.7  vi与vim模拟练习 217
11.2  gcc 218
11.2.1  gcc简要说明 218
11.2.2  gcc参数 220
11.3  Makefile 224
11.3.1  Makefile简介 225
11.3.2  Makefile语法 227
11.3.3  Makefile的运行 231
11.3.4  Makefile的扩展话题 232
11.4  gdb 233
11.4.1  gdb语法 233
11.4.2  gdb调试 238
第3篇  Linux进程
第12章  Linux进程编程 242
12.1  Linux进程编程基本概念 242
12.1.1  登录 242
12.1.2  文件和目录 243
12.1.3  输入和输出 243
12.1.4  程序与进程 244
12.1.5  ANSI C 245
12.1.6  用户标识 247
12.1.7  出错处理 247
12.1.8  Linux信号、时间值与系统调用 249
12.2  Linux进程环境 256
12.3  Linux进程控制 267
12.4  进程关系 289
12.5  守护进程与多进程并发案例 293
12.5.1  守护进程的编写 293
12.5.2  多进程并发项目案例 296
第13章  Linux线程编程 300
13.1  线程简要说明 300
13.2  线程主要函数 302
13.3  线程编程 308
13.3.1  线程创建 308
13.3.2  终止线程 310
13.3.3  线程互斥 312
13.3.4  线程同步 315
第14章  Linux进程间通信——管道与信号 318
14.1  进程间通信概述 318
14.2  管道 319
14.2.1  pipe管道 320
14.2.2  标准流管道 324
14.2.3  命名管道（FIFO） 325
14.3  信号 328
14.3.1  信号概述 328
14.3.2  信号的发送和捕捉函数 332
14.3.3  信号的处理 337
第15章  System V进程间通信 346
15.1  System V进程间通信的键值 346
15.2  消息队列 350
15.2.1  消息队列简要说明 351
15.2.2  消息队列函数 352
15.2.3  消息队列使用程序范例 355
15.3  信号量 360
15.3.1  信号量简要说明 360
15.3.2  信号量函数 361
15.3.3  信号量应用程序示例 364
15.4  共享内存 366
15.4.1  共享内存简要说明 366
15.4.2  共享内存函数 368
15.4.3  共享内存应用范例 370
第4篇  Linux文件
第16章  Linux文件编程 376
16.1  文件系统函数 376
16.2  初级文件I/O函数 392
16.3  标准I/O的缓冲和刷新 399
第5篇  网络编程
第17章  网络知识基础 402
17.1  网络体系结构及协议 402
17.1.1  网络体系结构概念 402
17.1.2  TCP/IP模型 405
17.1.3  网络分类与广域网 407
17.1.4  网络地址 410
17.2  TCP/IP协议簇报文格式 412
第18章  Socket编程 416
18.1  套接字说明及函数说明 416
18.1.1  套接字说明 416
18.1.2  Socket地址说明及转换函数 419
18.1.3  Socket主要函数说明 424
18.2  TCP套接字编程 432
18.2.1  TCP套接字编程模型 432
18.2.2  迭代服务器编程 436
18.2.3  并发服务器编程 437
18.3  TCP文件服务器项目案例 443
18.4  UDP编程 458
18.4.1  普通UDP服务器编程 458
18.4.2  UDP广播 461
18.4.3  UDP多播 464
18.5  原始套接字 469
18.5.1  原始套接字说明 469
18.5.2  原始套接字举例 471
18.6  本地进程间套接字 478
18.6.1  非命名UNIX域套接字管道 478
18.6.2  UNIX域套接字 479
18.7  I/O编程模型 483
第6篇  XML编程
第19章  XML概念与语法 490
19.1  XML概述 490
19.2  XML语法 493
19.3  XPath语法 503
19.3.1  XPath基本语法 503
19.3.2  XPath位置路径 508
19.3.3  XPath示例 514
第20章  libxml编程 518
20.1  libxml编程基础 518
20.1.1  libxml的安装 518
20.1.2  libxml主要的数据类型 519
20.1.3  libxml的主要函数说明 522
20.1.4  XML常见操作 530
20.2  libxml高级编程进阶 536
20.2.1  理解DOM树 536
20.2.2  libxml编程实例练习 541
20.2.3  支付宝银行端接口XML项目
案例 547
附录 552
参考文献 555