Linux/GNU是一款非凡的操作系统,拥有稳定可靠且极其强大的开发环境。作为与操作系统进行沟通的原生界面,shell能够控制整个操作系统的运作,是与Linux进行交互最灵活的手段。
本书向读者展现了如何有效地利用shell完成复杂的任务。作者从shell的基础知识开始,介绍简单命令的用法、对各类文件进行操作,随后讲解文本处理、Web交互、备份、监视以及其他系统管理任务,涵盖初中高三级主题,传授脚本老手经常使用的诸多技巧。书中所有示例均基于具体任务,透彻清晰,通俗易懂。
第3版进行了全面修订,囊括Linux最新发行版新特性,增加了仓储管理、网络分组、动态调用、系统调优、容器、云等100余页篇幅的新内容,极具实用价值,让看似复杂的Linux shell脚本任务迎刃而解。
•通过脚本与Web站点交互
•编写脚本,挖掘并处理Web数据
•使用crontab实现系统备份及其他重复性任务的自动化
•创建、压缩、加密重要数据
•配置并监视以太网和无线网络
•监视并记录网络和系统的活动日志
•系统调优,实现性能优化,提高系统安全性
•鉴别资源占用大户以及网络瓶颈
•使用git或fossil实现版本控制,处理自由开源软件项目
•创建并维护Linux容器和虚拟机
......(更多)
作者简介:
Clif Flynt
Tcl/Tk及Linux用户社区活跃分子,经常在技术会议和用户小组中发表演说。Noumena公司创始人,负责开发定制软件和举办培训课程。另著有Tcl/Tk:A Developer's Guide一书。
Sarath Lakshman
Linux天才程序员、开源软件及GNU/Linux活跃分子。SLYNUX(2005)的开发者而,Linux For You专栏作家。在Fedora、Pardus Linux、PiTiVi、Ubuntu 以及Google编程夏令营等项目中均做出了不可估量的贡献。
Shantanu Tushar
GNU/Linux用户,KDE社区重要贡献者,维护着Calligra Active(用于Tablets的KDE办公文档查看器)、Plasma Media Center以及Gluon Player。Shantanu坚信终有一天编程会变得无比轻松,每个人都会热衷于为计算机编写程序。
译者简介:
门佳
GNU/Linux深度用户,喜欢溯本求源,挖掘技术背后的来龙去脉,对程序语言设计理论、编译技术、操作系统设计与实现、Web开发等领域均有涉猎,译著包括《TCP Sockets编程》《精通JavaScript(第2版)》《Linux命令行与shell脚本编程大全(第3版)》以及本书前两版等。
......(更多)
第1章 小试牛刀 1
1.1 简介 1
1.2 在终端中显示输出 2
1.2.1 预备知识 2
1.2.2 实战演练 4
1.2.3 工作原理 6
1.2.4 补充内容 6
1.3 使用变量与环境变量 7
1.3.1 预备知识 7
1.3.2 实战演练 8
1.3.3 补充内容 9
1.4 使用函数添加环境变量 11
1.4.1 实战演练 11
1.4.2 工作原理 12
1.5 使用shell进行数学运算 12
1.6 玩转文件描述符与重定向 14
1.6.1 预备知识 14
1.6.2 实战演练 15
1.6.3 工作原理 17
1.6.4 补充内容 17
1.7 数组与关联数组 19
1.7.1 预备知识 19
1.7.2 实战演练 20
1.7.3 补充内容 20
1.8 别名 21
1.8.1 实战演练 21
1.8.2 补充内容 22
1.9 采集终端信息 23
1.9.1 预备知识 23
1.9.2 实战演练 23
1.10 获取并设置日期及延时 24
1.10.1 预备知识 24
1.10.2 实战演练 25
1.10.3 工作原理 26
1.10.4 补充内容 27
1.11 调试脚本 27
1.11.1 实战演练 28
1.11.2 工作原理 29
1.11.3 补充内容 29
1.12 函数和参数 29
1.12.1 实战演练 30
1.12.2 补充内容 31
1.13 将一个命令的输出发送给另一个命令 33
1.13.1 预备知识 33
1.13.2 实战演练 34
1.13.3 补充内容 34
1.14 在不按下回车键的情况下读入n个字符 35
1.15 持续运行命令直至执行成功 36
1.15.1 实战演练 36
1.15.2 工作原理 37
1.15.3 补充内容 37
1.16 字段分隔符与迭代器 37
1.16.1 预备知识 38
1.16.2 实战演练 38
1.17 比较与测试 40
1.18 使用配置文件定制bash 43
第2 章 命令之乐 46
2.1 简介 46
2.2 用cat进行拼接 46
2.2.1 实战演练 46
2.2.2 补充内容 47
2.3 录制并回放终端会话 49
2.3.1 预备知识 49
2.3.2 实战演练 49
2.3.3 工作原理 50
2.4 查找并列出文件 50
2.4.1 预备知识 50
2.4.2 实战演练 50
2.4.3 补充内容 51
2.5 玩转xargs 58
2.5.1 预备知识 59
2.5.2 实战演练 59
2.5.3 工作原理 60
2.5.4 补充内容 60
2.6 用tr进行转换 63
2.6.1 预备知识 63
2.6.2 实战演练 64
2.6.3 工作原理 64
2.6.4 补充内容 65
2.7 校验和与核实 67
2.7.1 预备知识 68
2.7.2 实战演练 68
2.7.3 工作原理 68
2.7.4 补充内容 69
2.8 加密工具与散列 71
2.9 行排序 72
2.9.1 预备知识 72
2.9.2 实战演练 72
2.9.3 工作原理 73
2.9.4 补充内容 73
2.10 临时文件命名与随机数 76
2.10.1 实战演练 77
2.10.2 工作原理 77
2.11 分割文件与数据 77
2.11.1 工作原理 78
2.11.2 补充内容 78
2.12 根据扩展名切分文件名 80
2.12.1 实战演练 80
2.12.2 工作原理 80
2.13 多个文件的重命名与移动 82
2.13.1 预备知识 82
2.13.2 实战演练 82
2.13.3 工作原理 83
2.14 拼写检查与词典操作 84
2.14.1 实战演练 84
2.14.2 工作原理 84
2.15 交互输入自动化 85
2.15.1 预备知识 86
2.15.2 实战演练 86
2.15.3 工作原理 86
2.15.4 补充内容 87
2.16 利用并行进程加速命令执行 88
2.16.1 实战演练 88
2.16.2 工作原理 89
2.16.3 补充内容 89
2.17 检查目录以及其中的文件与子目录 89
2.17.1 预备知识 90
2.17.2 实战演练 90
第3 章 以文件之名 92
3.1 简介 92
3.2 生成任意大小的文件 92
3.3 文本文件的交集与差集 94
3.3.1 预备知识 94
3.3.2 实战演练 94
3.3.3 工作原理 96
3.4 查找并删除重复文件 97
3.4.1 预备知识 97
3.4.2 实战演练 97
3.4.3 工作原理 98
3.5 文件权限、所有权与粘滞位 99
3.5.1 实战演练 101
3.5.2 补充内容 102
3.6 将文件设置为不可修改 104
3.6.1 预备知识 104
3.6.2 实战演练 104
3.7 批量生成空白文件 105
3.7.1 预备知识 105
3.7.2 实战演练 105
3.8 查找符号链接及其指向目标 106
3.8.1 实战演练 106
3.8.2 工作原理 107
3.9 枚举文件类型统计信息 107
3.9.1 预备知识 107
3.9.2 实战演练 107
3.9.3 工作原理 108
3.10 使用环回文件 109
3.10.1 实战演练 110
3.10.2 工作原理 111
3.10.3 补充内容 111
3.11 生成ISO及混合型ISO文件 113
3.11.1 预备知识 113
3.11.2 实战演练 113
3.11.3 补充内容 114
3.12 查找并修补文件差异 115
3.12.1 实战演练 115
3.12.2 补充内容 117
3.13 使用head与tail打印文件的前10行和后10行 117
3.14 只列出目录的各种方法 120
3.14.1 预备知识 120
3.14.2 实战演练 120
3.14.3 工作原理 120
3.15 在命令行中使用pushd和popd实现快速定位 121
3.15.1 预备知识 121
3.15.2 实战演练 121
3.15.3 补充内容 122
3.16 统计文件的行数、单词数和字符数 122
3.17 打印目录树 123
3.17.1 预备知识 123
3.17.2 实战演练 123
3.17.3 补充内容 124
3.18 处理视频与图像文件 125
3.18.1 预备知识 125
3.18.2 实战演练 126
第4 章 让文本飞 128
4.1 简介 128
4.2 使用正则表达式 128
4.2.1 实战演练 129
4.2.2 工作原理 131
4.2.3 补充内容 131
4.3 使用grep在文件中搜索文本 132
4.3.1 实战演练 132
4.3.2 补充内容 134
4.4 使用cut按列切分文件 138
4.4.1 实战演练 138
4.4.2 补充内容 139
4.5 使用sed替换文本 140
4.5.1 实战演练 140
4.5.2 补充内容 141
4.6 使用awk进行高级文本处理 144
4.6.1 预备知识 144
4.6.2 实战演练 144
4.6.3 工作原理 144
4.6.4 补充内容 146
4.7 统计特定文件中的词频 149
4.7.1 预备知识 149
4.7.2 实战演练 150
4.7.3 工作原理 150
4.7.4 参考 151
4.8 压缩或解压缩JavaScript 151
4.8.1 预备知识 151
4.8.2 实战演练 152
4.8.3 工作原理 152
4.8.4 参考 153
4.9 按列合并多个文件 153
4.9.1 实战演练 154
4.9.2 参考 154
4.10 打印文件或行中的第n个单词或列 154
4.10.1 实战演练 154
4.10.2 参考 155
4.11 打印指定行或模式之间的文本 155
4.11.1 预备知识 155
4.11.2 实战演练 155
4.11.3 参考 156
4.12 以逆序形式打印行 156
4.12.1 预备知识 156
4.12.2 实战演练 156
4.12.3 工作原理 157
4.13 解析文本中的电子邮件地址和URL 157
4.13.1 实战演练 157
4.13.2 工作原理 158
4.13.3 参考 158
4.14 删除文件中包含特定单词的句子 158
4.14.1 预备知识 158
4.14.2 实战演练 159
4.14.3 工作原理 159
4.14.4 参考 159
4.15 对目录中的所有文件进行文本替换 159
4.15.1 实战演练 160
4.15.2 工作原理 160
4.15.3 补充内容 160
4.16 文本切片与参数操作 160
4.16.1 实战演练 160
4.16.2 参考 161
第5 章 一团乱麻?没这回事! 162
5.1 简介 162
5.2 Web 页面下载 162
5.2.1 预备知识 162
5.2.2 实战演练 163
5.2.3 工作原理 163
5.2.4 补充内容 164
5.3 以纯文本形式下载页面 165
5.3.1 预备知识 165
5.3.2 实战演练 165
5.4 cURL入门 166
5.4.1 预备知识 166
5.4.2 实战演练 166
5.4.3 工作原理 167
5.4.4 补充内容 167
5.4.5 参考 169
5.5 从命令行访问未读的Gmail邮件 170
5.5.1 实战演练 170
5.5.2 工作原理 170
5.5.3 参考 171
5.6 解析网站数据 171
5.6.1 实战演练 171
5.6.2 工作原理 172
5.6.3 参考 172
5.7 图片爬取器及下载工具 172
5.7.1 实战演练 172
5.7.2 工作原理 173
5.7.3 参考 174
5.8 网页相册生成器 174
5.8.1 预备知识 175
5.8.2 实战演练 175
5.8.3 工作原理 176
5.8.4 参考 176
5.9 Twitter命令行客户端 176
5.9.1 预备知识 177
5.9.2 实战演练 177
5.9.3 工作原理 178
5.9.4 参考 179
5.10 通过Web服务器查询单词含义 179
5.10.1 预备知识 179
5.10.2 实战演练 180
5.10.3 工作原理 180
5.10.4 参考 180
5.11 查找网站中的无效链接 181
5.11.1 预备知识 181
5.11.2 实战演练 181
5.11.3 工作原理 182
5.11.4 参考 182
5.12 跟踪网站变动 182
5.12.1 预备知识 182
5.12.2 实战演练 182
5.12.3 工作原理 184
5.12.4 参考 184
5.13 发送Web页面并读取响应 184
5.13.1 预备知识 184
5.13.2 实战演练 185
5.13.3 参考 186
5.14 从Internet下载视频 186
5.14.1 预备知识 186
5.14.2 实战演练 186
5.14.3 工作原理 186
5.15 使用OTS汇总文本 187
5.15.1 预备知识 187
5.15.2 实战演练 187
5.15.3 工作原理 187
5.16 在命令行中翻译文本 187
5.16.1 预备知识 188
5.16.2 实战演练 188
5.16.3 工作原理 188
第6 章 仓储管理 189
6.1 简介 189
6.2 创建新的git仓库 190
6.2.1 预备知识 190
6.2.2 实战演练 190
6.2.3 工作原理 190
6.3 克隆远程git仓库 191
6.4 使用git添加与提交变更 191
6.5 使用git创建与合并分支 192
6.5.1 预备知识 193
6.5.2 实战演练 193
6.5.3 工作原理 193
6.5.4 补充内容 193
6.6 分享工作成果 194
6.7 推送分支 196
6.8 检查git仓库状态 197
6.8.1 实战演练 197
6.8.2 工作原理 198
6.9 查看git历史记录 198
6.10 查找bug 198
6.10.1 实战演练 199
6.10.2 补充内容 199
6.11 快照标签 200
6.12 提交信息规范 201
6.13 使用fossil 202
6.13.1 预备知识 202
6.13.2 实战演练 202
6.14 创建新的fossil仓库 202
6.14.1 实战演练 203
6.14.2 工作原理 203
6.14.3 补充内容 203
6.15 克隆远程fossil仓库 204
6.15.1 实战演练 204
6.15.2 工作原理 204
6.16 打开fossil项目 204
6.16.1 实战演练 204
6.16.2 工作原理 205
6.16.3 补充内容 205
6.17 使用fossil添加与提交变更 205
6.17.1 实战演练 205
6.17.2 补充内容 206
6.18 使用fossil分支与fork 206
6.18.1 实战演练 207
6.18.2 工作原理 207
6.18.3 补充内容 208
6.19 使用fossil分享工作成果 208
6.19.1 实战演练 208
6.19.2 工作原理 209
6.20 更新本地fossil仓库 209
6.21 检查fossil仓库状态 209
6.22 查看fossil历史记录 210
第7 章 B 计划 215
7.1 简介 215
7.2 使用tar归档 215
7.2.1 预备知识 215
7.2.2 实战演练 216
7.2.3 工作原理 216
7.2.4 补充内容 216
7.2.5 参考 220
7.3 使用cpio归档 221
7.3.1 实战演练 221
7.3.2 工作原理 221
7.4 使用gzip压缩数据 222
7.4.1 实战演练 222
7.4.2 补充内容 223
7.4.3 参考 225
7.5 使用zip归档及压缩 225
7.5.1 实战演练 225
7.5.2 工作原理 226
7.6 更快的归档工具pbzip2 226
7.6.1 预备知识 226
7.6.2 实战演练 226
7.6.3 工作原理 227
7.6.4 补充内容 227
7.7 创建压缩文件系统 228
7.7.1 预备知识 228
7.7.2 实战演练 228
7.7.3 补充内容 229
7.8 使用rsync备份系统快照 229
7.8.1 实战演练 229
7.8.2 工作原理 230
7.8.3 补充内容 231
7.9 差异化归档 232
7.9.1 实战演练 232
7.9.2 工作原理 232
7.10 使用fsarchiver创建全盘镜像 233
7.10.1 预备知识 233
7.10.2 实战演练 233
7.10.3 工作原理 234
第8 章 无网不利 235
8.1 简介 235
8.2 网络设置 236
8.2.1 预备知识 236
8.2.2 实战演练 236
8.2.3 补充内容 237
8.2.4 参考 241
8.3 ping! 241
8.3.1 实战演练 241
8.3.2 补充内容 242
8.4 跟踪IP路由 244
8.5 列出网络中所有的活动主机 245
8.5.1 预备知识 245
8.5.2 实战演练 245
8.5.3 工作原理 245
8.5.4 补充内容 246
8.5.5 参考 247
8.6 使用SSH在远程主机上执行命令 247
8.6.1 预备知识 247
8.6.2 实战演练 248
8.6.3 补充内容 249
8.7 在远程主机上执行图形化命令 250
8.7.1 实战演练 250
8.7.2 参考 251
8.8 通过网络传输文件 251
8.8.1 预备知识 251
8.8.2 实战演练 251
8.8.3 补充内容 252
8.8.4 参考 254
8.9 连接无线网络 254
8.9.1 预备知识 254
8.9.2 实战演练 254
8.9.3 工作原理 255
8.9.4 参考 256
8.10 实现SSH的无密码自动登录 256
8.10.1 预备知识 256
8.10.2 实战演练 256
8.11 使用SSH实现端口转发 257
8.11.1 实战演练 257
8.11.2 补充内容 258
8.12 在本地挂载点上挂载远程驱动器 259
8.12.1 预备知识 259
8.12.2 实战演练 259
8.12.3 参考 259
8.13 分析网络流量与端口 259
8.13.1 预备知识 259
8.13.2 实战演练 260
8.13.3 工作原理 260
8.13.4 补充内容 261
8.14 测量网络带宽 261
8.15 创建套接字 262
8.15.1 预备知识 262
8.15.2 实战演练 262
8.15.3 补充内容 263
8.15.4 工作原理 263
8.16 搭建网桥 264
8.16.1 预备知识 264
8.16.2 实战演练 264
8.17 Internet连接共享 265
8.17.1 预备知识 265
8.17.2 实战演练 265
8.17.3 工作原理 266
8.18 使用iptables架设简易防火墙 266
8.18.1 实战演练 267
8.18.2 工作原理 267
8.18.3 补充内容 268
8.19 创建虚拟私有网络 268
8.19.1 预备知识 268
8.19.2 实战演练 269
第9 章 明察秋毫 274
9.1 简介 274
9.2 监视磁盘使用情况 274
9.2.1 预备知识 275
9.2.2 实战演练 275
9.2.3 补充内容 275
9.3 计算命令执行时间 279
9.3.1 实战演练 279
9.3.2 工作原理 281
9.4 收集登录用户、启动日志及启动故障的相关信息 281
9.4.1 预备知识 282
9.4.2 实战演练 282
9.5 列出1小时内占用CPU最多的10个进程 284
9.5.1 预备知识 284
9.5.2 实战演练 284
9.5.3 工作原理 285
9.5.4 参考 286
9.6 使用watch监视命令输出 286
9.6.1 实战演练 286
9.6.2 补充内容 286
9.7 记录文件及目录访问情况 287
9.7.1 预备知识 287
9.7.2 实战演练 287
9.7.3 工作原理 287
9.8 使用syslog记录日志 288
9.8.1 预备知识 288
9.8.2 实战演练 289
9.8.3 参考 289
9.9 使用logrotate管理日志文件 290
9.9.1 预备知识 290
9.9.2 实战演练 290
9.9.3 工作原理 290
9.10 通过监视用户登录找出入侵者 291
9.10.1 预备知识 291
9.10.2 实战演练 291
9.10.3 工作原理 293
9.11 监视远程磁盘的健康情况 293
9.11.1 预备知识 293
9.11.2 实战演练 294
9.11.3 工作原理 295
9.11.4 参考 295
9.12 确定系统中用户的活跃时段 295
9.12.1 预备知识 296
9.12.2 实战演练 296
9.12.3 工作原理 297
9.13 电源使用情况的测量与优化 297
9.13.1 预备知识 298
9.13.2 实战演练 298
9.14 监视磁盘活动 298
9.14.1 预备知识 298
9.14.2 实战演练 299
9.15 检查磁盘及文件系统错误 299
9.15.1 预备知识 299
9.15.2 实战演练 299
9.15.3 工作原理 300
9.16 检查磁盘健康情况 300
9.16.1 预备知识 301
9.16.2 实战演练 301
9.16.3 工作原理 303
9.17 获取磁盘统计数据 303
9.17.1 预备知识 303
9.17.2 实战演练 303
9.17.3 工作原理 304
9.17.4 补充内容 304
第10 章 管理重任 305
10.1 简介 305
10.2 收集进程信息 305
10.2.1 预备知识 305
10.2.2 实战演练 306
10.2.3 工作原理 307
10.2.4 补充内容 307
10.2.5 参考 312
10.3 which、whereis、whatis与file 312
10.4 杀死进程以及发送和响应信号 313
10.4.1 预备知识 313
10.4.2 实战演练 313
10.4.3 补充内容 314
10.5 向用户终端发送消息 316
10.5.1 预备知识 316
10.5.2 实战演练 317
10.6 /proc文件系统 318
10.7 收集系统信息 319
10.8 使用cron进行调度 321
10.8.1 预备知识 321
10.8.2 实战演练 321
10.8.3 工作原理 322
10.8.4 补充内容 323
10.9 数据库的形式及用法 324
10.9.1 预备知识 324
10.9.2 实战演练 325
10.9.3 补充内容 325
10.10 读写SQLite数据库 326
10.10.1 预备知识 326
10.10.2 实战演练 327
10.10.3 工作原理 327
10.10.4 补充内容 327
10.11 读写MySQL数据库 328
10.11.1 预备知识 329
10.11.2 实战演练 329
10.11.3 工作原理 332
10.12 用户管理脚本 333
10.12.1 实战演练 333
10.12.2 工作原理 335
10.13 图像文件的批量缩放及格式转换 336
10.13.1 预备知识 336
10.13.2 实战演练 336
10.13.3 工作原理 338
10.13.4 参考 339
10.14 终端截图 339
10.14.1 预备知识 339
10.14.2 实战演练 340
10.15 集中管理多个终端 340
10.15.1 预备知识 340
10.15.2 实战演练 341
第11 章 觅迹寻踪 342
11.1 简介 342
11.2 使用tcpdump跟踪分组 342
11.2.1 预备知识 342
11.2.2 实战演练 343
11.2.3 工作原理 345
11.3 使用ngrep查找分组 346
11.3.1 预备知识 346
11.3.2 实战演练 346
11.3.3 工作原理 347
11.3.4 补充内容 347
11.4 使用ip跟踪网络路由 347
11.4.1 预备知识 347
11.4.2 实战演练 348
11.4.3 工作原理 349
11.5 使用strace跟踪系统调用 349
11.5.1 预备知识 350
11.5.2 实战演练 350
11.5.3 工作原理 351
11.6 使用ltrace跟踪动态库函数 352
11.6.1 预备知识 352
11.6.2 实战演练 352
11.6.3 工作原理 353
11.6.4 补充内容 353
第12 章 系统调优 355
12.1 简介 355
12.2 识别服务 356
12.2.1 预备知识 356
12.2.2 实战演练 357
12.2.3 补充内容 359
12.3 使用ss收集套接字数据 360
12.3.1 预备知识 360
12.3.2 实战演练 360
12.3.3 工作原理 361
12.4 使用dstat收集系统I/O使用情况 362
12.4.1 预备知识 362
12.4.2 实战演练 362
12.4.3 工作原理 363
12.4.4 补充内容 363
12.5 使用pidstat找出资源占用大户 364
12.5.1 预备知识 364
12.5.2 实战演练 364
12.5.3 工作原理 364
12.6 使用sysctl调优Linux内核 365
12.6.1 预备知识 365
12.6.2 实战演练 365
12.6.3 工作原理 366
12.6.4 补充内容 366
12.7 使用配置文件调优Linux系统 366
12.7.1 预备知识 367
12.7.2 实战演练 367
12.7.3 工作原理 367
12.8 使用nice命令更改调度器优先级 367
12.8.1 实战演练 367
12.8.2 工作原理 368
12.8.3 补充内容 368
第13 章 在云端 369
13.1 简介 369
13.2 使用Linux容器 370
13.2.1 预备知识 370
13.2.2 实战演练 371
13.2.3 工作原理 377
13.3 使用Docker 377
13.3.1 预备知识 377
13.3.2 实战演练 378
13.3.3 工作原理 381
13.4 在Linux中使用虚拟机 381
13.4.1 预备知识 381
13.4.2 实战演练 382
13.5 云端的Linux 382
13.5.1 预备知识 382
13.5.2 实战演练 384
13.5.3 补充内容 384
......(更多)
有一个巧妙的方法可以一方面将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。这一切都可以使用tee来实现。
%-5s指明一个格式为左对齐且宽度为5的字符串替代(-表示左对齐,不用-表示右对齐。.2指定保留2个小数位)
......(更多)