重磅推荐
【产品特色】


【编辑推荐】

本书将带您从初探终端开始,学习使用bash(Linux Shell)编写完整的程序。

本书的内容涉及bash 4.x,例如重定向操作符和Shell扩展知识。更新的Shell脚本部分讨论了Shell脚本实践以及避免常见类型的潜在危险故障的方法。



您将学习以下内容:

创建和删除文件、目录和符号链接;

管理系统,包括联网、软件包安装和进程管理;

使用标准输入和标准输出、重定向和管道;

使用文本编辑器 Vi 编辑文件;

编写 Shell 脚本自动执行常见的任务;

使用 grep、cut、paste、patch 和 sed 等对文本文件进行处理。


【内容简介】

本书对Linux命令行进行详细的介绍,全书内容包括4个部分,*部分由Shell的介绍开启命令行基础知识的学习之旅;第二部分讲述配置文件的编辑,如何通过命令行控制计算机;第三部分探讨常见的任务与工具;第四部分全面介绍Shell编程,读者可通过动手编写Shell脚本掌握Linux命令的应用,从而实现常见计算任务的自动化。通过阅读本书,读者将对Linux命令有更加深入的理解,并且可以将其应用到实际的工作中。

本书适合Linux初学人员、Linux系统管理人员及Linux爱好者阅读。


【作者简介】

威廉·肖特斯拥有15年以上的软件从业经验,他是Linux的忠实用户。他在软件开发方面经验丰富,涉及技术支持、质量保证和文档维护。他还是LinuxCommand.org的创建者,LinuxCommand.org是一个Linux教育和宣传网站,提供新闻、评论以及对使用Linux命令行的广泛支持。


【目录】

*部分 学习Shell

第1章 什么是Shell 3
1.1 终端仿真器 3
1.2 小试牛刀 4
1.2.1 命令历史 4
1.2.2 光标移动 4
1.3 几个简单的命令 5
1.4 结束终端会话 6
1.5 总结 6
第2章 导航 7
2.1 理解文件系统树 7
2.2 当前工作目录 8
2.3 列出目录内容 8
2.4 更改当前工作目录 9
2.4.1 *路径名 9
2.4.2 相对路径名 9
2.4.3 一些有用的便捷写法 11
2.5 总结 11
第3章 探索Linux系统 12
3.1 使用ls命令之乐 12
3.1.1 选项与参数 13
3.1.2 进一步了解长格式 14
3.2 使用file命令确定文件类型 15
3.3 使用less命令查看文本文件 15
3.4 按图索骥 17
3.5 符号链接 19
3.6 硬链接 20
3.7 总结 20
第4章 操作文件和目录 21
4.1 通配符 22
4.2 mkdir——创建目录 24
4.3 cp——复制文件和目录 24
4.4 mv——移动和重命名文件 25
4.5 rm——删除文件和目录 26
4.6 ln——创建硬链接和符号链接 27
4.6.1 硬链接 27
4.6.2 符号链接 28
4.7 实战演练 28
4.7.1 创建目录 28
4.7.2 复制文件 29
4.7.3 移动和重命名文件 29
4.7.4 创建硬链接 30
4.7.5 创建符号链接 31
4.7.6 删除文件和目录 32
4.8 总结 34
第5章 和命令打交道 35
5.1 命令究竟是什么 35
5.2 识别命令 36
5.2.1 type—显示命令类型 36
5.2.2 which—显示可执行
文件的位置 36
5.3 获取命令文档 37
5.3.1 help—获取Shell内建
命令的帮助信息 37
5.3.2 --help—显示用法信息 38
5.3.3 man—显示命令的
手册页 38
5.3.4 apropos—显示适合的
命令清单 40
5.3.5 whatis—显示手册页的
简述 40
5.3.6 info—显示程序的info
条目 41
5.3.7 文档文件 42
5.4 使用alias创建自己的命令 42
5.5 总结 44
第6章 重定向 45
6.1 标准输入、标准输出及
标准错误 45
6.2 标准输出重定向 46
6.3 标准错误重定向 47
6.3.1 将标准输出和标准错误
重定向到同一个文件中 48
6.3.2 丢弃用不着的输出结果 48
6.4 标准输入重定向 49
6.5 管道 50
6.5.1 排序列表 51
6.5.2 uniq—报告或忽略
重复行 52
6.5.3 wc—统计文件中换行符、
单词以及字节的数量 52
6.5.4 grep—输出与模式
匹配的行 53
6.5.5 head/tail—输出文件的
开头/结尾部分 53
6.5.6 tee—读取标准输入
并将输出结果写入
标准输出和文件 54
6.6 总结 55
第7章 “Shell眼”看世界 56
7.1 扩展 56
7.1.1 路径名扩展 57
7.1.2 浪纹线扩展 58
7.1.3 算术扩展 59
7.1.4 花括号扩展 60
7.1.5 参数扩展 61
7.1.6 命令替换 61
7.2 引用 62
7.2.1 双引号 62
7.2.2 单引号 64
7.2.3 转义字符 64
7.2.4 反斜线转义序列 65
7.3 总结 65
第8章 高级键盘技巧 66
8.1 编辑命令行 66
8.1.1 光标移动 67
8.1.2 修改文本 67
8.1.3 剪切和粘贴文本 67
8.2 补全功能 68
8.3 命令历史记录 70
8.3.1 搜索历史记录 70
8.3.2 历史扩展 71
8.4 总结 72
第9章 权限 73
9.1 属主、属组以及其他用户 74
9.2 读取、写入和执行 75
9.2.1 chmod—修改文件
模式 76
9.2.2 使用GUI设置文件模式 79
9.2.3 umask—设置默认权限 79
9.2.4 一些特殊的权限 80
9.3 改变用户身份 81
9.3.1 su—以其他用户身份
启动Shell 82
9.3.2 sudo—以其他用户身份
执行命令 83
9.3.3 chown—更改文件属主和
属组 84
9.3.4 chgrp—更改文件属组 85
9.4 行使权限 85
9.5 修改密码 87
9.6 总结 88
第10章 进程 89
10.1 进程的工作方式 90
10.2 查看进程 90
10.3 进程控制 94
10.3.1 中断进程 94
10.3.2 将进程置于后台 95
10.3.3 使进程返回前台 95
10.3.4 停止进程 96
10.4 信号 96
10.4.1 使用kill命令向进程发送
信号 97
10.4.2 使用killall命令向多个
进程发送信号 98
10.5 关闭系统 99
10.6 更多与进程相关的命令 99
10.7 总结 100

第二部分 配置与环境

第11章 环境 103
11.1 环境中都保存了什么 103
11.1.1 检查环境 104
11.1.2 一些值得注意的环境
变量 105
11.2 如何建立环境 106
11.3 修改环境 108
11.3.1 应该修改哪些文件 108
11.3.2 文本编辑器 109
11.3.3 使用文本编辑器 109
11.3.4 使改动生效 112
11.4 总结 112
第12章 Vi入门 113
12.1 为什么要学习Vi 113
12.2 背景知识 114
12.3 启动和退出Vi 114
12.4 编辑模式 116
12.4.1 进入插入模式 116
12.4.2 保存文件 117
12.5 光标移动 117
12.6 基本编辑 118
12.6.1 追加 118
12.6.2 新建 119
12.6.3 删除 120
12.6.4 剪切、复制及粘贴 121
12.6.5 合并 122
12.7 搜索和替换 122
12.7.1 行内搜索 122
12.7.2 搜索整个文件 122
12.7.3 全局搜索和替换 123
12.8 编辑多个文件 124
12.8.1 在文件之间切换 125
12.8.2 载入更多的文件进行
编辑 125
12.8.3 将一个文件的内容复制到
另一个文件 126
12.8.4 将整个文件插入另一个
文件 127
12.9 保存工作 128
12.10 总结 128
第13章 定制提示符 129
13.1 分解提示符 129
13.2 换一种提示符 131
13.3 增加颜色 132
13.4 移动光标 134
13.5 保存提示符 135
13.6 总结 135

第三部分 常见任务与工具

第14章 软件包管理 139
14.1 打包系统 140
14.2 软件包的工作方式 140
14.2.1 软件包文件 140
14.2.2 仓库 141
14.2.3 依赖性 141
14.2.4 低层和高层工具 141
14.3 常见的软件包管理任务 142
14.3.1 在仓库中查找软件包 142
14.3.2 安装仓库中的软件包 142
14.3.3 安装软件包文件中的
软件包 142
14.3.4 删除软件包 143
14.3.5 通过仓库更新软件包 143
14.3.6 通过软件包文件更新
软件包 144
14.3.7 列举已安装的软件包 144
14.3.8 确定软件包是否已安装 144
14.3.9 显示已安装软件包的
相关信息 145
14.3.10 识别某个文件是哪个
软件包安装的 145
14.4 总结 145
第15章 存储介质 147
15.1 存储设备的挂载与卸载 148
15.1.1 查看已挂载的文件系统
列表 149
15.1.2 确定设备名称 152
15.2 创建新文件系统 154
15.2.1 用fdisk操作分区 154
15.2.2 使用mkfs创建新的文件
系统 156
15.3 文件系统的检查和修复 157
15.4 在设备之间直接移动数据 158
15.4.1 向可刻录CD写入数据 159
15.4.2 创建CD-ROM的ISO
映像文件 159
15.4.3 用文件集合创建ISO
映像文件 159
15.5 写入CD-ROM的ISO映像
文件 160
15.5.1 直接挂载ISO映像
文件 160
15.5.2 擦除可刻录CD 161
15.5.3 刻录映像文件 161
15.6 总结 161
第16章 联网 162
16.1 网络检查与监控 163
16.1.1 ping 163
16.1.2 traceroute 164
16.1.3 ip 165
16.1.4 netstat 165
16.2 通过网络传输文件 166
16.2.1 ftp 167
16.2.2 lftp——更好的ftp 168
16.2.3 wget 168
16.3 与远程主机的安全通信 169
16.3.1 ssh 169
16.3.2 scp与sftp 172
16.4 总结 173
第17章 查找文件 174
17.1 locate——简单的文件查找
方法 174
17.2 find——复杂的文件查找
方法 176
17.2.1 测试条件 176
17.2.2 操作符 178
17.2.3 预定义操作 180
17.2.4 用户自定义操作 182
17.2.5 提高效率 182
17.2.6 xargs 183
17.2.7 实战演练 184
17.2.8 find命令选项 185
17.3 总结 186
第18章 归档与备份 187
18.1 压缩文件 187
18.1.1 gzip 188
18.1.2 bzip2 190
18.2 文件归档 191
18.2.1 tar 191
18.2.2 zip 195
18.3 同步文件与目录 196
18.4 总结 199
第19章 正则表达式 200
19.1 什么是正则表达式 200
19.2 grep 201
19.3 元字符与文字字符 202
19.4 任意字符 203
19.5 锚点 203
19.6 方括号表达式与字符类 204
19.6.1 排除 205
19.6.2 传统的字符范围 205
19.7 POSIX字符类 206
19.8 POSIX基本型正则表达式与
扩展型正则表达式 209
19.9 多选结构 210
19.10 量词 211
19.10.1 ?——匹配0次或1次 211
19.10.2 *——匹配0次或多次 212
19.10.3 ——匹配1次或多次 212
19.10.4 {}——匹配指定次数 213
19.11 实战演练 213
19.11.1 使用grep验证电话号码
列表 213
19.11.2 使用find查找路径名 214
19.11.3 使用locate搜索文件 215
19.11.4 使用Less和Vim搜索
文本 215
19.12 总结 217
第20章 文本处理 218
20.1 文本的应用 219
20.1.1 文档 219
20.1.2 网页 219
20.1.3 电子邮件 219
20.1.4 打印机输出 219
20.1.5 程序源代码 219
20.2 温故知新 220
20.2.1 cat—连接文件并
打印 220
20.2.2 sort—排序 221
20.2.3 uniq—删除重复行 227
20.3 切片和切块 228
20.3.1 cut——从每行中删除
部分内容 229
20.3.2 paste——合并行 231
20.3.3 join——连接两个文件中
具有公共字段的行 233
20.4 比较文本 235
20.4.1 comm——逐行比较两个
已排序的文件 235
20.4.2 diff——逐行比较文件 236
20.4.3 patch——对原文件应用
diff文件 238
20.5 即时编辑 239
20.5.1 tr——转写或删除字符 239
20.5.2 sed——用于文本过滤和
转换的流编辑器 240
20.5.3 aspell——交互式拼写
检查器 247
20.6 总结 250
第21章 格式化输出 251
21.1 简单的格式化工具 251
21.1.1 nl——对行进行编号 252
21.1.2 fold——在指定长度处
折行 254
21.1.3 fmt——一个简单的文本
格式化工具 255
21.1.4 pr——格式化要输出的
文本 258
21.1.5 printf——格式化并输出
数据 259
21.2 文档格式化系统 261
21.3 总结 267
第22章 打印 268
22.1 打印简史 268
22.1.1 “黑暗”时代 269
22.1.2 基于字符的打印机 269
22.1.3 图形化打印机 270
22.2 Linux的打印功能 271
22.3 准备文件打印 271
22.4 将打印作业发送至打印机 272
22.4.1 lpr—以Berkeley风格
打印文件 272
22.4.2 lp—以System V风格
打印文件 273
22.4.3 a2ps—在PostScript
打印机上打印文件 274
22.5 监控打印作业 276
22.5.1 lpstat——显示打印系统
状态 276
22.5.2 lpq——显示打印队列
状态 277
22.5.3 lprm/cancel——取消打印
作业 278
22.6 总结 278
第23章 编译程序 279
23.1 什么是编译 280
23.2 编译C程序 281
23.2.1 获取源代码 281
23.2.2 检查源代码树 283
23.2.3 构建程序 284
23.2.4 安装程序 288
23.3 总结 288

第四部分 编写Shell脚本

第24章 编写*个脚本 291
24.1 什么是Shell脚本 291
24.2 如何创建并执行Shell脚本 292
24.2.1 脚本文件格式 292
24.2.2 可执行权限 293
24.2.3 脚本位置 293
24.2.4 脚本的理想位置 294
24.3 更多的格式技巧 294
24.3.1 长选项 295
24.3.2 缩进与续行 295
24.4 总结 296
第25章 启动项目 297
25.1 *阶段:*小化文档 297
25.2 第二阶段:添加数据 299
25.3 变量与常量 300
25.3.1 为变量与常量赋值 302
25.3.2 here document 304
25.4 总结 306
第26章 自顶向下设计 307
26.1 Shell函数 308
26.2 局部变量 311
26.3 保持脚本执行 312
26.4 总结 315
第27章 流程控制:if分支 316
27.1 if语句 317
27.2 退出状态 317
27.3 使用test 319
27.3.1 文件表达式 319
27.3.2 字符串表达式 322
27.3.3 整数表达式 323
27.4 更现代的test 324
27.5 (())——为整数设计 325
27.6 组合表达式 326
27.7 控制操作符:另一种分支
方式 329
27.8 总结 329
第28章 读取键盘输入 331
28.1 read——从标准输入读取值 332
28.1.1 选项 334
28.1.2 IFS 336
28.2 验证输入 338
28.3 菜单 339
28.4 总结 341
第29章 流程控制:while/until循环 342
29.1 循环 342
29.2 跳出循环 345
29.3 使用循环读取文件 347
29.4 总结 348
第30章 故障诊断 349
30.1 语法错误 349
30.1.1 缺少引号 350
30.1.2 缺少词法单元 351
30.1.3 出乎意料的扩展 351
30.2 逻辑错误 353
30.2.1 防御式编程 353
30.2.2 小心文件名 354
30.2.3 核实输入 355
30.3 测试 355
30.4 调试 357
30.4.1 查找问题区域 357
30.4.2 跟踪 357
30.4.3 在执行过程中检查值 359
30.5 总结 360
第31章 流程控制:case分支 361
31.1 case命令 361
31.1.1 模式 363
31.1.2 执行多次操作 365
31.2 总结 366
第32章 位置参数 367
32.1 访问命令行 367
32.1.1 确定参数个数 369
32.1.2 shift——访问多个参数 369
32.1.3 简单应用 371
32.1.4 在Shell函数中使用
位置参数 371
32.2 批量处理位置参数 372
32.3 一个更完整的应用 374
32.4 总结 377
第33章 流程控制:for循环 380
33.1 for的传统形式 380
33.2 for的C语言形式 383
33.3 总结 384
第34章 字符串与数字 387
34.1 参数扩展 387
34.1.1 基本参数 388
34.1.2 管理空变量扩展 388
34.1.3 返回变量名的扩展 390
34.1.4 字符串操作 390
34.1.5 大小写转换 393
34.2 算术求值与扩展 395
34.2.1 数字基数 395
34.2.2 一元操作符 395
34.2.3 简单算术 395
34.2.4 赋值 397
34.2.5 位操作 399
34.2.6 逻辑操作 399
34.3 bc——任意精度计算器语言 401
34.3.1 使用bc 402
34.3.2 示例脚本 403
34.4 总结 404
第35章 数组 405
35.1 什么是数组 405
35.1.1 创建数组 406
35.1.2 为数组赋值 406
35.1.3 访问数组元素 406
35.2 数组操作 408
35.2.1 输出数组的全部内容 408
35.2.2 确定数组元素的数量 409
35.2.3 查找数组使用的索引 410
35.2.4 向数组尾部添加元素 410
35.2.5 数组排序 410
35.2.6 删除数组 411
35.3 关联数组 412
35.4 总结 412
第36章 其他命令 413
36.1 分组命令与子Shell 413
36.2 陷阱 419
36.3 使用wait实现异步执行 421
36.4 具名管道 423
36.4.1 创建具名管道 423
36.4.2 使用具名管道 424
36.5 总结 424


返回顶部