《精通Unix Shell脚本编程 第2版》PDF下载

  • 购买积分:23 如何计算积分?
  • 作  者:(美)米歇尔著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2010
  • ISBN:9787302218951
  • 页数:877 页
图书介绍:本书每一章都以日常生活中计算机世界里出现的典型UNIX问题作为开始,对每个问题都定义了明确的目标。本书主要面向那些通过命令行方式使用UNIX的用户。

第Ⅰ部分 shell脚本基础 3

第1章 脚本编程快速入门和概述 3

1.1 区分大小写 3

1.2 UNIX特殊字符 3

1.3 shell 4

1.4 shell脚本 4

1.5 函数 4

1.6 运行shell脚本 5

1.7 shell脚本中的注释和风格 6

1.8 控制结构 7

1.9 使用break、continue、exit和return语句 10

1.10 here文档 10

1.11 shell脚本命令 11

1.12 符号命令 13

1.13 变量 13

1.14 命令行参数 14

1.15 shift命令 14

1.16 特殊参数$*和$@ 15

1.17 双引号"、符号?和` 16

1.18 在Solaris中使用awk 16

1.19 正确使用echo命令 17

1.20 shell脚本中的数学 17

1.21 内置的数学函数 18

1.22 文件权限、suid和sgid程序 19

1.23 在远程主机上运行命令 20

1.24 设置陷阱 21

1.25 用户信息命令 22

1.25.1 who命令 22

1.25.2 w命令 22

1.25.3 last命令 23

1.26 ps命令 23

1.27 与用户通信 24

1.28 统一大写或小写文本以方便测试 24

1.29 检测返回代码 25

1.30 基于时间的脚本执行 26

1.30.1 cron表 26

1.30.2 at命令 27

1.31 输出控制 28

1.31.1 静默运行 28

1.31.2 使用getopts解析命令行参数 29

1.31.3 使用后台函数创建一个协作进程 30

1.32 捕获延迟命令输出 31

1.33 逐行处理文件的最快方式 32

1.34 循环中使用命令输出 35

1.35 邮件通知技术 36

1.35.1 使用mail和mailx命令 36

1.35.2 使用sendmail命令来发送外发邮件 36

1.36 创建一个进度指示器 37

1.36.1 一系列圆点 37

1.36.2 一条旋转线 38

1.36.3 运行时间 39

1.37 使用记录文件 39

1.38 创建伪随机数 41

1.39 检查AlX中的失效磁盘分区 42

1.40 自动主机ping 42

1.41 高亮显示文件中的特定文本 43

1.42 使打印机一直打印 44

1.42.1 AIX的“传统”打印机子系统 44

1.42.2 System V和CUPS打印 44

1.43 自动进行FTP文件传输 44

1.44 使用rsync复制数据 44

1.45 捕获大于$MEG的文件列表 46

1.46 捕获用户的按键操作 46

1.47 使用bc实用工具来进行浮点数学运算 47

1.48 数基转换 48

1.48.1 使用typeset命令 48

1.48.2 使用printf命令 48

1.49 使用select命令创建菜单 49

1.50 删除文件中的重复行 51

1.51 删除文件中的空白行 51

1.52 测试NULL变量 51

1.53 直接访问上一个位置参数$#的值 52

1.54 删除命令输出中的列标题 52

1.55 数组 53

1.56 测试字符串 53

1.57 小结 57

第2章 逐行处理文件的24种方法 59

2.1 命令语句 59

2.1.1 使用文件描述符 60

2.1.2 创建一个在时间测试中使用的大文件 60

2.2 逐行处理文件的24种方法 65

2.2.1 方法1:cat_while_read_Line 65

2.2.2 方法2:while_read_LINE_bottom 66

2.2.3 方法3:cat_while_LINE_line 67

2.2.4 方法4:while_LINE_line_bottom 68

2.2.5 方法5:cat_while_LINE_line_cmdsub2 69

2.2.6 方法6:while_LINE_line_bottom_cmdsub2 69

2.2.7 方法7:for_LINE_cat_FILE 70

2.2.8 方法8:for_LINE_cat_FILE_cmdsub2 70

2.2.9 方法9:while_line_outfile 71

2.2.10 方法10:while_read_LINE_FD_IN 72

2.2.11 方法11:cat_while_read_LINE_FD_OUT 73

2.2.12 方法12:while_read_LINE_bottom_FD_OUT 74

2.2.13 方法13:while_LINE_line_bottom_FD_OUT 75

2.2.14 方法14:while_LINE_line_bottom_cmdsub2_FD_OUT 76

2.2.15 方法15:for_LINE_cat_FILE_FD_OUT 77

2.2.16 方法16:for_LINE_cat_FILE_cmdsub2_FD_OUT 78

2.2.17 方法17:while_line_outfile_FD_IN 78

2.2.18 方法18:while_line_outfile_FD_OUT 79

2.2.19 方法19:while_line_outfile_FD_IN_AND_OUT 80

2.2.20 方法20:while_LINE_line_FD_IN 81

2.2.21 方法21:while_LINE_line_cmdsub2_FD_IN 82

2.2.22 方法22:while_read_LINE_FD_IN_AND_OUT 83

2.2.23 方法23:while_LINE_line_FD_IN_AND_OUT 84

2.2.24 方法24:while_LINE_line_cmdsub2_FD_IN_AND_OUT 86

2.3 计时测试各种方法 87

2.3.1 计时脚本 87

2.3.2 每个方法的计时数据 105

2.3.3 计时命令替代方法 113

2.4 使用命令输入和使用文件输入的区别 115

2.5 小结 115

2.6 作业 116

第3章 自动事件通知 117

3.1 自动事件通知的基础 117

3.1.1 使用mail和mailx命令 117

3.1.2 设置邮件别名 119

3.2 外发邮件的问题 120

3.2.1 使用.forward文件创建一个“Bounce”账户 122

3.2.2 使用sendmail命令发送外发邮件 123

3.3 拨号调制解调器软件 124

3.4 SNMP陷阱 124

3.5 小结 125

3.6 作业 125

第4章 进度指示器 127

4.1 使用一系列圆点来指示进度 127

4.2 使用一条旋转线来指示进度 129

4.3 使用运行时间来指示进度 131

4.4 联合反馈方法 133

4.5 其他要考虑的选项 136

4.6 小结 136

4.7 作业 136

第Ⅱ部分 程序员、测试员和分析员脚本第5章 使用记录文件 139

5.1 记录的概念 139

5.1.1 定长记录文件 139

5.1.2 变长记录文件 140

5.2 处理记录文件 141

5.3 记录的任务和记录文件 145

5.3.1 定长记录文件的任务 146

5.3.2 变长记录文件的任务 147

5.4 合并进程 149

5.5 合并记录生成shell脚本 152

5.6 其他需要考虑的问题 162

5.7 小结 162

5.8 作业 163

第6章 自动FTP处理 165

6.1 语法 165

6.2 自动文件传输和远程目录列表 168

6.2.1 使用FTP获得远程计算机上的目录列表 168

6.2.2 从远程计算机上获得一个或多个文件 169

6.2.3 将一个或多个文件传输到远程计算机 173

6.2.4 用变量代替硬编码的密码 176

6.2.5 将FTP脚本修改为使用密码 179

6.3 加密怎么样 185

6.3.1 创建加密密钥 185

6.3.2 创建不需要密码的安全shell访问 186

6.3.3 安全FTP和安全复制语法 186

6.3.4 用autoexpect和expect脚本实现自动FTP 188

6.4 其他要考虑的问题 191

6.4.1 使用命令行开关项控制执行 191

6.4.2 对活动进行记录 192

6.4.3 对脚本增加调试模式 192

6.4.4 把密码读入shell脚本 192

6.5 小结 192

6.6 作业 193

第7章 使用rsync有效复制数据 195

7.1 语法 195

7.2 普通rsync shell脚本 196

7.3 用rsync命令复制多目录文件 197

7.4 用rsync复制多文件系统 212

7.5 用rsync复制Oracle数据库 224

7.6 用rsync复制shell脚本 226

7.7 小结 259

7.8 作业 260

第8章 用Expect和autoexpect实现自动交互 261

8.1 下载和安装Expect 261

8.2 交互脚本或程序会话的基础 263

8.3 用autoexpect自动创建Expect脚本 266

8.4 使用变量 272

8.5 条件测试 274

8.5.1 Expect中的case语句 274

8.5.2 Expect中的if...then...else循环 280

8.5.3 Expect中的while循环 281

8.5.4 Expect中的for循环 282

8.5.5 Expect中的函数 284

8.6 在Sun Blade Chassis和JumpStart中使用Expect脚本 285

8.7 小结 290

8.8 作业 290

第9章 查找大文件和特定类型的文件 291

9.1 语法 291

9.2 记住文件和目录的许可权限 292

9.3 别因文件的大小而吃惊 292

9.4 创建脚本 293

9.5 其他要考虑的问题 298

9.6 小结 298

9.7 作业 298

第10章 进程监视与进程启动前、启动时和进程停止后事件 301

10.1 语法 301

10.2 监视进程的启动 302

10.3 监视进程的结束 303

10.4 当进程启动或停止时进行监视和记录 308

10.5 进程监视的定时执行、显示每个进程的PID、为事件打上时间戳和定时功能 312

10.6 其他要考虑的问题 330

10.6.1 一般性用途 330

10.6.2 要考虑的修改事项 330

10.7 小结 330

10.8 作业 331

第11章 伪随机数和数据的生成 333

11.1 随机数的产生 333

11.2 方法 334

11.2.1 方法1:利用PID和RANDOM shell变量产生一个伪随机数 334

11.2.2 方法2:产生一个在0到32767之间的随机数 335

11.2.3 方法3:产生1到用户定义的最大值之间的数字 335

11.2.4 方法4:产生位于1和用户定义的最大数之间的固定长度的数 336

11.2.5 方法5:使用/dev/random和/dev/urandom字符专用文件 338

11.3 创建伪随机数的shell脚本 341

11.4 创建唯一的文件名 346

11.5 创建一个由随机字符组成的文件 353

11.6 其他要考虑的问题 359

11.7 小结 360

11.8 作业 360

第12章 创建伪随机密码 361

12.1 随机性 361

12.2 创建伪随机密码 362

12.3 语法 362

12.4 建立密码创建脚本 363

12.4.1 出现顺序 364

12.4.2 脚本主体的开始 375

12.5 其他需要考虑的问题 387

12.5.1 密码报表 387

12.5.2 选用哪个密码 387

12.5.3 其他用途 387

12.6 小结 388

12.7 作业 388

第13章 浮点数学运算和bc工具程序 389

13.1 语法 389

13.2 使用bc创建shell脚本 390

13.2.1 创建float_add.ksh shell脚本 390

13.2.2 整数和浮点数的测试 395

13.2.3 用bc命令创建一个数学运算语句 397

13.2.4 使用here文档 398

13.2.5 创建float_subtract.ksh shell脚本 398

13.2.6 使用getopts解析命令行 403

13.2.7 为bc工具创建数学运算语句 405

13.2.8 here文档和提交结果 406

13.2.9 创建float_multiply.ksh shell脚本 407

13.2.10 解析命令行以获取有效数字 412

13.2.11 创建float_divide.ksh shell脚本 413

13.2.12 创建float_average.ksh shell脚本 420

13.3 其他需要考虑的问题 424

13.4 小结 425

13.5 作业 425

第14章 数制转换 427

14.1 语法 427

14.1.1 例1:将十进制转换为十六进制 428

14.1.2 例2:将八进制转换为十六进制 428

14.1.3 例3:十进制数转换为八进制 429

14.1.4 例4:将十进制转换为十六进制 429

14.2 利用脚本解决问题 429

14.2.1 二进制转换为十六进制的shell脚本 429

14.2.2 十进制转换为十六进制的脚本 432

14.2.3 基于十六进制IP地址产生软件授权码的脚本 436

14.2.4 在任何数制之间进行转换的脚本 440

14.2.5 利用getopts分析命令行 445

14.2.6 继续完善脚本 446

14.2.7 主程序的开始 448

14.3 转换数制的简单、可交互的脚本 449

14.4 利用bc工具进行数制转换 454

14.5 其他需要考虑的问题 460

14.6 小结 460

14.7 作业 460

第15章 hgrep:高亮显示的grep脚本 461

15.1 反白显示控制 461

15.2 创建hgrep.Bash shell脚本 463

15.3 其他需要考虑的问题 469

15.4 小结 470

15.5 作业 470

第16章 监视进程和应用程序 471

16.1 监视本地进程 471

16.2 利用安全shell和远程shell进行远程监控 473

16.2.1 检查活动的Oracle数据库 479

16.2.2 使用autoexpect产生一个expect脚本 482

16.2.3 检查HTTP服务器/应用程序是否运行 487

16.3 等待进程执行完毕 488

16.4 其他需要考虑的问题 489

16.4.1 echo的正确用法 489

16.4.2 应用程序API和SNMP陷阱 490

16.5 小结 490

16.6 作业 491

第Ⅲ部分 系统管理员脚本第17章 文件系统的监视 495

17.1 语法 495

17.2 为监视添加异常功能 500

17.3 剩余空间方法 506

17.4 使用带异常功能的MB剩余空间方法 509

17.5 已用百分比——MB剩余空间和大型文件系统 513

17.6 在AIX、Linux、HP-UX、OpenBSD和Solaris上运行文件系统脚本 522

17.6.1 不同操作系统命令语法和输出之间的差异 523

17.6.2 编写中性shell(shell-neutral)脚本 528

17.7 其他应考虑的问题 537

17.7.1 事件通知 537

17.7.2 自动执行 538

17.7.3 修改egrep语句 538

17.8 小结 538

17.9 作业 539

第18章 监视页面调度和交换空间 541

18.1 语法 542

18.1.1 AIX的lsps命令 542

18.1.2 HP-UX下的swapinfo命令 543

18.1.3 Linux下的free命令 543

18.1.4 OpenBSD下的swapctl命令 544

18.1.5 Solaris下的swap命令 544

18.2 编写shell脚本 544

18.2.1 AIX分页监视器 544

18.2.2 HP-UX交换空间监视器 549

18.2.3 Linux交换空间监视器 554

18.2.4 OpenBSD交换空间监视器 557

18.2.5 Solaris交换空间监视器 560

18.2.6 5合1分页和交换空间监视器 564

18.3 其他需要考虑的问题 572

18.3.1 事件通知 572

18.3.2 日志文件 572

18.3.3 预约监视 572

18.4 小结 572

18.5 作业 573

第19章 系统负荷监视 575

19.1 在Linux上安装系统统计程序 576

19.2 语法 577

19.2.1 uptime命令的语法 578

19.2.2 iostat语法 579

19.2.3 sar的命令语法 582

19.2.4 vmstat命令的语法 584

19.3 利用脚本解决问题 587

19.3.1 使用uptime命令测量系统负荷 587

19.3.2 使用sar命令测量系统负荷 591

19.3.3 使用iostat命令测量系统负荷 596

19.3.4 使用vmstat测量系统负荷 601

19.4 其他需要考虑的问题 604

19.4.1 尝试为用户检测任何可能的问题 605

19.4.2 向用户显示CPU占用程序列表 605

19.4.3 收集用于描绘曲线的大量数据 605

19.5 小结 605

19.6 作业 606

第20章 对陈旧磁盘分区的监视(AIX特有) 607

20.1 AIX逻辑卷标管理器 607

20.2 命令和方法 608

20.2.1 磁盘子系统命令 608

20.2.2 方法1:在LV级监视陈旧PP 608

20.2.3 方法2:在PV级监视陈旧分区 613

20.2.4 方法3:带重新同步功能的VG、LV和PV监视 616

20.3 其他需要考虑的问题 622

20.3.1 SSA磁盘 622

20.3.2 日志文件 623

20.3.3 自动执行 623

20.3.4 事件通知 623

20.4 小结 623

20.5 作业 624

第21章 打开/关闭SSA磁盘识别指示灯 625

21.1 语法 625

21.1.1 hdisk转换为pdisk 626

21.1.2 标识一个SSA磁盘 626

21.2 脚本编写过程 626

21.2.1 用法函数和用户反馈函数 627

21.2.2 控制函数 630

21.2.3 完整的shell脚本 635

21.3 其他需要考虑的问题 646

21.3.1 错误日志 646

21.3.2 交叉引用 646

21.3.3 Root访问和sudo 646

21.4 小结 647

21.5 作业 647

第22章 带失败通知的自动主机ping测试 649

22.1 语法 649

22.2 编写shell脚本 650

22.2.1 定义变量 651

22.2.2 创建陷阱 653

22.2.3 完整的shell脚本 653

22.3 其他需要考虑的问题 660

22.3.1 $PINGLIST的变量长度限制问题 660

22.3.2 对文件/etc/hosts而不是程序列表文件进行ping测试 661

22.3.3 日志 661

22.3.4 “Unknown Host”通知 662

22.3.5 通知方法 662

22.3.6 利用cron表项自动执行shell脚本 662

22.4 小结 663

22.5 作业 663

第23章 制作系统配置镜像 665

23.1 语法 665

23.2 编写shell脚本 668

23.3 其他需要考虑的问题 695

23.4 小结 695

23.5 作业 695

第24章 sudo的编译、安装、配置和使用 697

24.1 对sudo的需求 697

24.2 在Solaris上配置sudo 698

24.3 下载和编译sudo 698

24.4 编译sudo 698

24.5 配置sudo 710

24.6 使用sudo 716

24.7 在shell脚本中使用sudo 717

24.8 使用sudo记录日志文件syslog 720

24.9 sudo日志文件 724

24.10 小结 724

24.11 作业 725

第25章 脱离打印队列地狱:保持打印机持续工作 727

25.1 系统V与BSD、CUPS打印系统 727

25.1.1 AIX打印控制命令 728

25.1.2 CUPS——通用UNIX打印系统 736

25.1.3 HP-UX打印控制命令 739

25.1.4 Linux打印控制命令 741

25.1.5 Solaris打印控制命令 748

25.2 整合所有脚本片段 753

25.3 其他需要考虑的问题 762

25.3.1 日志记录 762

25.3.2 异常处理功能 763

25.3.3 维护 763

25.3.4 调度 763

25.4 小结 763

25.5 作业 764

第26章 那些讨厌的SOX审计 765

26.1 期待的东西 765

26.2 如何与审计师一起工作 766

26.3 审计师想看的东西 766

26.4 一些好用的命令 767

26.4.1 使用id命令 767

26.4.2 使用find命令 768

26.4.3 使用awk和cut命令 769

26.4.4 使用sed命令 774

26.4.5 使用dirname和basename命令 775

26.5 其他需要考虑的问题 776

26.6 小结 776

26.7 作业 777

第27章 使用Dirvish和rsync创建快照类型的备份 779

27.1 Dirvish如何工作 779

27.2 配置Dirvish 780

27.2.1 Dirvish的安装 781

27.2.2 修改Dirvish的配置文件master.conf 783

27.2.3 为每个文件系统备份创建default.conf文件 784

27.3 进行全系统备份 785

27.4 在命令行使用Dirvish 786

27.5 控制Dirvish的菜单界面shell脚本 787

27.5.1 运行所有备份 789

27.5.2 进行特殊备份 790

27.5.3 定位和恢复镜像 791

27.5.4 备份镜像的过期和删除 791

24.5.5 使用sed修改summary文件 792

27.5.6 添加一个新的备份 794

27.5.7 移除备份 798

27.5.8 管理Dirvish备份bank 800

27.6 整合所有代码 802

27.7 使用dirvish_ctrl shell脚本 825

27.7.1 运行定义在Runall:stanza上的所有备份 826

27.7.2 运行一个特定备份 826

27.7.3 定位和恢复文件 827

27.7.4 删除过期备份和使备份过期 829

27.7.5 添加一个新的Dirvish备份vault 832

27.7.6 移除一个Dirvish vault 836

27.7.7 管理Dirvish备份Bank 837

27.7.8 添加一个新Dirvish备份Bank 837

27.7.9 移除一个Dirvish备份Bank 838

27.8 其他需要考虑的问题 838

27.9 小结 839

27.10 作业 839

第28章 对用户按键进行监视和审计 841

28.1 语法 841

28.2 脚本解决方案 843

28.2.1 将用户行为记入日志 843

28.2.2 启动监视会话 844

28.2.3 日志库位置 844

28.2.4 脚本 845

28.2.5 对root级活动进行日志记录 847

28.2.6 监视其他管理员用户 852

28.3 其他需要考虑的问题 855

28.3.1 邮发审计日志 855

28.3.2 压缩 856

28.3.3 是否需要更好的安全性 856

28.3.4 通知用户 857

28.3.5 Sudoers文件 857

28.4 小结 857

28.5 作业 857

28.6 结束语 858

附录A Web站点上的内容 859