图书目录

第1篇  Linux Shell基础知识与命令

第1章  Linux和Linux Shell简介 2

1.1  关于Linux 2

1.1.1  什么是Linux 2

1.1.2  谁创建了Linux 3

1.1.3  Linux在日常生活中的应用 3

1.1.4  Linux内核是什么 3

1.1.5  Linux的理念 4

1.2  什么是Linux Shell 4

1.3  Shell的种类 5

1.4  怎样使用Shell 7

1.5  Shell脚本是什么 7

1.6  为什么使用Shell脚本 8

1.7  实例:创建第一个Shell脚本 8

1.8  小结 9

1.9  习题 10

第2章  初识Linux Shell 11

2.1  Bash概述 11

2.1.1  Bash简介 11

2.1.2  Bash的改进 11

2.2  Shell在Linux环境中的角色 12

2.2.1  与登录Shell相关的文件 12

2.2.2  Bash启动脚本 12

2.2.3  实例:定制自己的Bash登录脚本 13

2.2.4  Bash退出脚本 15

2.2.5  实例:定制自己的Bash退出脚本 15

2.2.6  有效地登录Shell的路径 15

2.3  Shell变量 16

2.3.1  变量的类型 16

2.3.2  实例:如何定义变量并给变量赋值 18

2.3.3  变量的命名规则 19

2.3.4  实例:使用echo和printf命令打印变量的值 20

2.3.5  变量的引用 23

2.3.6  实例:export语句的使用 24

2.3.7  实例:如何删除变量 25

2.3.8  实例:如何检查变量是否存在 26

2.4  Shell环境进阶 26

2.4.1  实例:回调历史命令 26

2.4.2  实例:Shell的扩展部分 28

2.4.3  实例:创建和使用别名 30

2.4.4  实例:修改Bash提示符 32

2.4.5  实例:设置Shell选项 34

2.5  小结 37

2.6  习题 38

第3章  常用的Shell(Bash)命令 39

3.1  查看文件和目录 39

3.1.1  ls命令实例:列出文件名和目录 39

3.1.2  cat命令实例:连接显示文件内容 43

3.1.3  less和more命令实例:分屏显示文件 45

3.1.4  head命令实例:显示文件的头部内容 47

3.1.5  tail命令实例:显示文件的尾部内容 48

3.1.6  file命令实例:查看文件类型 49

3.1.7  wc命令实例:查看文件的统计信息 50

3.1.8  find命令实例:查找文件或目录 51

3.2  操作文件和目录 52

3.2.1  touch命令实例:创建文件 52

3.2.2  mkdir命令实例:创建目录 53

3.2.3  cp命令实例:复制文件或目录 54

3.2.4  ln命令实例:链接文件或目录 55

3.2.5  mv命令实例:重命名文件或目录 56

3.2.6  rm命令实例:删除文件或目录 57

3.3  管理文件和目录的权限 58

3.3.1  ls -l:显示文件和目录的权限 58

3.3.2  chmod命令实例:修改权限 59

3.3.3  chown和chgrp命令实例:修改文件的所有者和用户组 61

3.3.4  设置setuid和setgid权限位实例:设置用户和组权限位 63

3.4  文本处理 64

3.4.1  sort命令实例:文本排序 64

3.4.2  uniq命令实例:文本去重 66

3.4.3  tr命令实例:替换或删除字符 68

3.4.4  grep命令实例:查找字符串 69

3.4.5  diff命令实例:比较两个文件 70

3.5  其他常用的命令 72

3.5.1  hostname命令实例:查看主机名 72

3.5.2  w和who命令实例:列出系统登录的用户 73

3.5.3  uptime命令实例:查看系统运行时间 74

3.5.4  uname命令实例:查看系统信息 74

3.5.5  date命令实例:显示和设置系统日期和时间 75

3.5.6  id命令实例:显示用户属性 76

3.6  小结 77

3.7  习题 78

第4章  Shell命令进阶 80

4.1  文件处理和归档 80

4.1.1  paste命令实例:合并文件 80

4.1.2  dd命令实例:备份和复制文件 82

4.1.3  gzip和bzip2命令实例:压缩和归档文件 83

4.1.4  gunzip和bunzip2命令实例:解压缩文件 84

4.1.5  tar命令实例:打包和解包文件 84

4.2  监测和管理磁盘 86

4.2.1  mount和umount命令实例:挂载和卸载存储介质 86

4.2.2  df命令实例:报告文件系统磁盘空间的利用率 88

4.2.3  du命令实例:评估文件空间的利用率 89

4.3  后台执行命令 91

4.3.1  crond和crontab命令实例:执行计划任务 91

4.3.2  at命令实例:在指定时间执行命令 92

4.3.3  &控制操作符实例:将任务放在后台运行 94

4.3.4  nohup命令实例:运行一个对挂起“免疫”的命令 95

4.4  小结 95

4.5  习题 96

第2篇  Shell脚本编程

第5章  Shell编程基础 100

5.1  Shell脚本的第一行“#!” 100

5.2  Shell脚本注释 100

5.3  实例:如何设置脚本的权限并执行脚本 101

5.4  Shell变量进阶 102

5.4.1  Bash的参数扩展 102

5.4.2  Bash的内部变量 106

5.4.3  Bash的位置参数和特殊参数 108

5.4.4  实例:使用declare指定变量的类型 110

5.4.5  Bash的数组变量 111

5.5  Shell算术运算 112

5.5.1  Bash的算术运算符 112

5.5.2  数字常量 114

5.5.3  使用算术扩展和let命令进行算术运算 115

5.5.4  实例:使用expr命令 116

5.6  退出脚本 117

5.6.1  退出状态码 117

5.6.2  实例:使用exit命令 118

5.7  实例:调试脚本 119

5.8  Shell脚本编程风格 121

5.9  小结 122

5.10  习题 123

第6章  Shell的条件执行 124

6.1  条件测试 124

6.1.1  实例:使用test命令 124

6.1.2  if结构的语法格式 129

6.1.3  实例:if…else…fi语句 130

6.1.4  实例:嵌套的if…else语句 131

6.1.5  实例:多级的if…elif…else…fi 132

6.2  条件执行 133

6.2.1  实例:逻辑与&& 133

6.2.2  实例:逻辑或|| 138

6.2.3  实例:逻辑非! 141

6.3  case语句实例 141

6.4  小结 143

6.5  习题 144

第7章  Bash循环 145

7.1  for循环 145

7.1.1  for循环的语法 145

7.1.2  实例:嵌套for循环语句 147

7.2  while循环 148

7.2.1  while循环的语法 148

7.2.2  实例:定义无限while循环 150

7.3  until循环语句实例 152

7.4  select循环语句实例 153

7.5  循环控制 154

7.5.1  实例:break语句 154

7.5.2  实例:continue语句 156

7.6  小结 157

7.7  习题 157

第8章  Shell函数 159

8.1  函数的定义 159

8.2  函数的参数、变量与返回值 160

8.2.1  实例:向函数传递参数 160

8.2.2  本地变量 161

8.2.3  实例:使用return命令 163

8.2.4  实例:函数返回值测试 163

8.3  函数的调用 164

8.3.1  实例:在Shell命令行中调用函数 164

8.3.2  实例:在脚本中调用函数 164

8.3.3  实例:从函数文件中调用函数 165

8.3.4  实例:递归函数调用 168

8.4  实例:将函数放在后台运行 168

8.5  小结 170

8.6  习题 170

第9章  正则表达式 171

9.1  正则表达式简介 171

9.1.1  正则表达式的定义 171

9.1.2  正则表达式的类型 171

9.1.3  POSIX字符类 172

9.1.4  Bash正则表达式比较操作符 173

9.2  正则表达式应用基础 174

9.2.1  实例:使用句点(.)匹配单字符 174

9.2.2  实例:使用插入符号(^)进行匹配 175

9.2.3  实例:使用美元符号($)进行匹配 175

9.2.4  实例:使用星号(*)进行匹配 175

9.2.5  实例:使用方括号([ ])进行匹配 176

9.2.6  实例:使用问号(?)进行匹配 176

9.2.7  实例:使用加号(+)进行匹配 176

9.2.8  实例:使用(?|regex)进行匹配 177

9.2.9  实例:使用(?<=regex) 和(?<!regex)进行匹配 177

9.3  小结 178

9.4  习题 178

第10章  脚本输入处理 180

10.1  参数处理 180

10.1.1  实例:使用case语句处理命令行参数 180

10.1.2  实例:使用shift命令处理命令行参数 184

10.1.3  实例:使用for循环读取多个参数 186

10.1.4  实例:读取脚本名 188

10.1.5  实例:测试命令行参数 189

10.2  选项处理 191

10.2.1  实例:使用case语句处理命令行选项 191

10.2.2  实例:使用getopts处理多命令行选项 193

10.2.3  实例:使用getopt处理多命令行选项 198

10.3  获得用户的输入信息 203

10.3.1  实例:基本信息的读取 203

10.3.2  实例:输入超时 204

10.3.3  实例:隐式地读取用户输入的密码 205

10.3.4  实例:从文件中读取数据 206

10.4  小结 208

10.5  习题 210

第11章  Shell重定向 211

11.1  输入和输出 211

11.1.1  标准输入 211

11.1.2  标准输出 212

11.1.3  标准错误 213

11.2  重定向 214

11.2.1  文件重定向 214

11.2.2  实例:从文件中读取信息 216

11.2.3  实例:从标准输入中读取文本或字符串 220

11.2.4  实例:创建空文件 222

11.2.5  实例:丢弃不需要的输出 223

11.2.6  实例:标准错误重定向 223

11.2.7  实例:标准输出重定向 224

11.2.8  实例:标准错误和输出同时重定向 224

11.2.9  实例:追加重定向输出 225

11.2.10  实例:在单命令行中进行标准输入、输出重定向 225

11.3  文件描述符 226

11.3.1  实例:使用exec命令 226

11.3.2  实例:指定用于输入的文件描述符 228

11.3.3  实例:指定用于输出的文件描述符 230

11.3.4  实例:关闭文件描述符 235

11.3.5  实例:打开用于读和写的文件描述符 236

11.3.6  实例:在同一个脚本中使用exec进行输入和输出重定向 237

11.4  小结 238

11.5  习题 240

第12章  管道和过滤器 241

12.1  管道 241

12.1.1  操作符“|”和“>”的区别 241

12.1.2  为什么使用管道 242

12.1.3  实例:使用管道连接程序 242

12.1.4  实例:管道中的输入重定向 244

12.1.5  实例:管道中的输出重定向 245

12.2  过滤器 246

12.2.1  实例:在管道中使用awk命令 247

12.2.2  实例:在管道中使用cut命令 248

12.2.3  实例:在管道中使用grep命令 248

12.2.4  实例:在管道中使用tar命令 249

12.2.5  实例:在管道中使用head命令 250

12.2.6  实例:在管道中使用paste命令 250

12.2.7  实例:在管道中使用sed命令 251

12.2.8  实例:在管道中使用sort命令 252

12.2.9  实例:在管道中使用split命令 253

12.2.10  实例:在管道中使用strings命令 253

12.2.11  实例:在管道中使用tail命令 254

12.2.12  实例:在管道中使用tee命令 254

12.2.13  实例:在管道中使用tr命令 256

12.2.14  实例:在管道中使用uniq命令 257

12.2.15  实例:在管道中使用wc命令 257

12.3  小结 258

12.4  习题 258

第13章  捕获 259

13.1  信号 259

13.1.1  Linux中的信号 259

13.1.2  信号的名称和值 260

13.1.3  Bash中的信号 262

13.2  进程 263

13.2.1  什么是进程 263

13.2.2  前台进程和后台进程 264

13.2.3  进程的状态 265

13.2.4  实例:怎样查看进程 265

13.2.5  实例:向进程发送信号 268

13.2.6  关于子Shell 269

13.3  捕获 273

13.3.1  trap语句 273

13.3.2  实例:使用trap语句捕获信号 275

13.3.3  实例:移除捕获 279

13.4  小结 280

13.5  习题 281

第14章  sed和awk 283

14.1  sed编辑器基础 283

14.1.1  sed简介 283

14.1.2  sed的模式空间 284

14.2  sed的基本命令 285

14.2.1  追加、更改和插入命令 286

14.2.2  删除命令 288

14.2.3  替换命令 288

14.2.4  打印命令 290

14.2.5  打印行号命令 291

14.2.6  读取下一行命令 292

14.2.7  读和写文件命令 293

14.2.8  退出命令 297

14.3  sed命令实例 298

14.3.1  实例:向文件中添加或插入行 298

14.3.2  实例:更改文件中指定的行 300

14.3.3  实例:删除文件中的行 300

14.3.4  实例:替换文件中的内容 302

14.3.5  实例:打印文件中的行 305

14.3.6  实例:打印文件中的行号 308

14.3.7  实例:从文件中读取和向文件中写入 308

14.4  sed与Shell 312

14.4.1  实例:在sed中使用Shell变量 312

14.4.2  实例:从sed输出中设置shell变量 318

14.5  awk基础 319

14.5.1  awk简介 319

14.5.2  awk的基本语法 320

14.5.3  第一个awk命令 321

14.5.4  使用awk打印指定的列 322

14.5.5  从awk程序文件中读取awk命令 322

14.5.6  awk的BEGIN和END块 323

14.5.7  在awk中使用正则表达式 323

14.5.8  awk的表达式和块 323

14.5.9  awk的条件语句 324

14.5.10  awk的变量和操作符 325

14.5.11  awk的特殊变量 326

14.5.12  awk的循环结构 327

14.5.13  awk的数组 328

14.6  awk与Shell 329

14.6.1  实例:在awk中使用Shell变量 329

14.6.2  实例:从awk命令的输出中设置Shell变量 330

14.7  awk命令实例 332

14.7.1  实例:使用awk编写字符统计工具 332

14.7.2  实例:使用awk程序统计文件的总列数 333

14.7.3  实例:使用awk自定义显示文件的属性信息 334

14.7.4  实例:使用awk显示ASCII字符 335

14.7.5  实例:使用awk获取进程号 337

14.8  小结 339

14.9  习题 341

第15章  其他Linux Shell概述 343

15.1  C Shell概述 343

15.1.1  csh简介 343

15.1.2  csh的特性 344

15.1.3  csh的内部变量 345

15.1.4  csh的内部命令 345

15.1.5  tcsh在csh基础上的新特性 349

15.2  Korn Shell概述 358

15.2.1  ksh简介 358

15.2.2  ksh的特性 359

15.2.3  ksh的内部变量 363

15.2.4  ksh的内部命令 365

15.2.5  增强的ksh93u+ 372

15.3  Z Shell概述 376

15.3.1  zsh简介 377

15.3.2  zsh的特性 377

15.3.3  zsh的内部变量 377

15.3.4  zsh的内部命令 378

15.4  小结 378

15.5  习题 379