第1章 欢迎进入Linux和Mac OS X世界 1
1.1 UNIX和GNU-Linux的发展史 2
1.1.1 Linux的起源:UNIX 2
1.1.2 回顾1983年 3
1.1.3 下一场景,1991年 3
1.1.4 自由代码 4
1.1.5 享受乐趣 5
1.2 Linux的优点 5
1.2.1 Linux在硬件公司和开发人员中流行的原因 7
1.2.2 Linux的可移植性 8
1.2.3 C编程语言 8
1.3 Linux概述 9
1.3.1 Linux具有内核编程接口 9
1.3.2 Linux支持多用户 10
1.3.3 Linux支持多任务 10
1.3.4 Linux支持安全的分层文件系统 10
1.3.5 shell:命令解释器和编程语言 11
1.3.6 大量有用的实用程序 12
1.3.7 进程间的通信 13
1.3.8 系统管理 13
1.4 Linux的其他特性 13
1.4.1 GUI:图形用户界面 13
1.4.2 (互联的)网络实用程序 14
1.4.3 软件开发 14
1.5 本章小结 15
练习 15
第Ⅰ部分 Linux和Mac OS X操作系统 19
第2章 入门 19
2.1 本书约定 20
2.2 从终端或终端模拟器登录 21
2.3 在命令行中工作 22
2.3.1 识别当前运行的是哪种shell 23
2.3.2 校正错误 23
2.3.3 重复/编辑命令行 25
2.4 su/sudo:慎用root权限 26
2.5 如何查找相关文档 27
2.5.1 man:显示系统手册页 27
2.5.2 apropos:搜索关键字 29
2.5.3 info:显示实用程序的相关信息 30
2.5.4 --help选项 32
2.5.5 bash help命令 32
2.5.6 获取帮助 33
2.6 关于登录和密码的更多方面 35
2.6.1 如何处理登录失败 36
2.6.2 远程登录:终端模拟器、ssh和拨号连接 36
2.6.3 使用虚拟控制台 37
2.6.4 退出 37
2.6.5 更改密码 37
2.7 本章小结 39
练习 39
高级练习 40
第3章 实用程序 41
3.1 特殊字符 42
3.2 基本工具 43
3.2.1 ls:显示文件名 43
3.2.2 cat:显示文本文件内容 44
3.2.3 rm:删除文件 44
3.2.4 少即多:分屏显示文本文件 44
3.2.5 hostname:显示系统名 45
3.3 文件操作 45
3.3.1 cp:复制文件 45
3.3.2 mv:更改文件名 46
3.3.3 lpr:打印文件 47
3.3.4 grep:查找字符串 47
3.3.5 head:显示文件头部 48
3.3.6 tail:显示文件尾部 49
3.3.7 sort:按顺序显示文件内容 49
3.3.8 uniq:忽略文件中重复的行 50
3.3.9 diff:比较两个文件 50
3.3.10 file:识别文件内容 51
3.4 (管道):实现进程间的通信 51
3.5 4个有用的实用程序 52
3.5.1 echo:显示文本 52
3.5.2 date:显示日期和时间 53
3.5.3 script:记录shell会话信息 53
3.5.4 unix2dos:将Linux文件转换为Windows和Macintosh OS X格式 54
3.6 压缩和归档文件 55
3.6.1 bzip2:压缩文件 55
3.6.2 bzcat和bunzip2:解压缩文件 56
3.6.3 gzip:压缩文件 56
3.6.4 tar:打包和解包文件 57
3.7 定位实用程序 59
3.7.1 which和whereis:定位实用程序 59
3.7.2 locate:搜索文件 61
3.8 显示用户和系统信息 61
3.8.1 who:列出系统上的用户 62
3.8.2 finger:列出系统上的用户 62
3.8.3 uptime:显示系统负载和持续运行时间信息 64
3.8.4 w:列出系统上的用户 64
3.8.5 free:显示内存使用信息 64
3.9 与其他用户通信 65
3.9.1 write:发送消息 65
3.9.2 mesg:拒绝或接受消息 66
3.10 电子邮件 66
3.11 本章小结 67
练习 69
高级练习 69
第4章 Linux文件系统 71
4.1 分层文件系统 72
4.2 目录文件和普通文件 73
4.2.1 文件名 74
4.2.2 工作目录 76
4.2.3 主目录 76
4.3 路径名 76
4.3.1 绝对路径名 77
4.3.2 相对路径名 78
4.4 目录操作 79
4.4.1 mkdir:创建目录 79
4.4.2 cd:更改工作目录 80
4.4.3 rmdir:删除目录 82
4.4.4 使用路径名 82
4.4.5 mv/cp:移动/复制文件 83
4.4.6 mv:移动目录 84
4.4.7 重要的标准目录和文件 84
4.5 访问权限 86
4.5.1 ls-l:显示访问权限 86
4.5.2 chmod:改变访问权限 87
4.5.3 setuid和setgid权限 89
4.5.4 目录访问权限 91
4.6 ACL:访问控制列表 92
4.6.1 启用ACL 92
4.6.2 处理访问规则 93
4.6.3 设置目录的默认规则 95
4.7 链接 97
4.7.1 硬链接 98
4.7.2 符号链接 100
4.7.3 rm:删除链接 102
4.7.4 解引用符号链接 103
4.8 本章小结 106
练习 107
高级练习 109
第5章 shell 111
5.1 命令行 112
5.1.1 简单命令 112
5.1.2 语法 112
5.1.3 处理命令行 116
5.1.4 执行命令行 117
5.1.5 编辑命令行 118
5.2 标准输入和输出 118
5.2.1 作为文件的屏幕 119
5.2.2 作为标准输入的键盘和作为标准输出的屏幕 119
5.2.3 重定向 120
5.2.4 管道 125
5.2.5 链 129
5.3 在后台运行命令 130
5.4 生成文件名/扩展路径名 131
5.4.1 特殊字符“?” 132
5.4.2 特殊字符“*” 133
5.4.3 特殊字符“[]” 134
5.5 内置命令 136
5.6 本章小结 136
练习 137
高级练习 138
第Ⅱ部分 编辑器 143
第6章 vim编辑器 143
6.1 历史 144
6.2 入门:用vim创建和编辑文件 145
6.2.1 启动vim 145
6.2.2 命令模式和输入模式 146
6.2.3 输入文本 147
6.2.4 获取帮助 148
6.2.5 结束编辑会话 150
6.2.6 compatible参数 151
6.3 介绍vim的特性 151
6.3.1 联机帮助 151
6.3.2 术语 152
6.3.3 操作模式 152
6.3.4 显示 153
6.3.5 输入模式下校正文本 153
6.3.6 工作缓冲区 153
6.3.7 行长度与文件大小 154
6.3.8 窗口 154
6.3.9 锁定文件 154
6.3.10 非正常结束编辑会话 155
6.3.11 崩溃后的文本恢复 155
6.4 在命令模式下移动光标 157
6.4.1 按字符移动光标 157
6.4.2 将光标移到某个特定字符 158
6.4.3 按字移动光标 158
6.4.4 按行移动光标 158
6.4.5 按句子和段落移动光标 159
6.4.6 在屏幕内移动光标 159
6.4.7 查看工作缓冲区的不同部分 159
6.5 输入模式 160
6.5.1 插入文本 160
6.5.2 追加文本 160
6.5.3 为输入文本打开行 161
6.5.4 替换文本 161
6.5.5 在输入模式下转义特殊字符 161
6.6 在命令模式下删除和修改文本 161
6.6.1 撤消修改 162
6.6.2 删除字符 162
6.6.3 删除文本 162
6.6.4 修改文本 163
6.6.5 替换文本 164
6.6.6 修改大小写 165
6.7 查找和替换 165
6.7.1 查找字符 165
6.7.2 查找字符串 165
6.7.3 字符串的替换 167
6.8 其他命令 170
6.8.1 连接命令 170
6.8.2 状态命令 170
6.8.3 (句点) 170
6.9 复制、移动和删除文本 170
6.9.1 通用缓冲区 170
6.9.2 命名缓冲区 171
6.9.3 编号缓冲区 172
6.10 文件的读写 172
6.10.1 读文件 172
6.10.2 写文件 173
6.10.3 识别当前文件 173
6.11 参数设置 173
6.11.1 在vim中设置参数 174
6.11.2 在启动文件中设置参数 174
6.11.3. vimrc启动文件 174
6.11.4 参数 175
6.12 高级编辑技巧 178
6.12.1 使用标记 178
6.12.2 编辑其他文件 179
6.12.3 宏与快捷键 179
6.12.4 在vim中执行shell命令 180
6.13 度量单位 181
6.13.1 字符 181
6.13.2 字 182
6.13.3 空白分隔字 182
6.13.4 行 182
6.13.5 句子 183
6.13.6 段落 183
6.13.7 屏幕(窗口) 184
6.13.8 重复因子 184
6.14 本章小结 184
练习 188
高级练习 189
第7章 emacs编辑器 191
7.1 历史 192
7.1.1 演化 192
7.1.2 emacs与vim 193
7.2 入门:开始使用emacs 194
7.2.1 启动emacs 194
7.2.2 退出emacs 196
7.2.3 插入文本 196
7.2.4 删除字符 196
7.2.5 移动光标 197
7.2.6 在光标处编辑 199
7.2.7 保存和检索缓冲区中的内容 199
7.3 基本编辑命令 200
7.3.1 按键的表示与使用 200
7.3.2 键序列和命令 201
7.3.3 META+x:运行不带绑定键的命令 202
7.3.4 数值参数 202
7.3.5 编辑点与光标 202
7.3.6 在缓冲区中滚动 203
7.3.7 删除文本 203
7.3.8 搜索文本 203
7.3.9 通过键盘使用菜单栏 205
7.4 联机帮助 206
7.5 高级编辑 208
7.5.1 撤消修改 208
7.5.2 编辑点、标记和区域 209
7.5.3 剪切与粘贴:移出已剪切文本 211
7.5.4 插入特殊字符 212
7.5.5 全局缓冲区命令 212
7.5.6 访问和保存文件 214
7.5.7 缓冲区 217
7.5.8 窗口 218
7.5.9 前台shell命令 220
7.5.10 后台shell命令 220
7.6 主模式:区分语言的编辑 221
7.6.1 选择主模式 221
7.6.2 自然语言模式 222
7.6.3 C模式 224
7.6.4 定制缩进 226
7.6.5 注释 227
7.6.6 专用模式 228
7.7 定制emacs 229
7.7.1 .emacs启动文件 230
7.7.2 重映射键 230
7.7.3 .emacs文件示例 232
7.8 更多信息 233
7.9 本章小结 233
练习 240
高级练习 241
第Ⅲ部分 shell 245
第8章 bash 245
8.1 背景知识 246
8.2 启动文件 247
8.2.1 登录shell 247
8.2.2 交互式非登录shell 248
8.2.3 非交互式shell 248
8.2.4 建立启动文件 249
8.2.5 “.”(句点)或source:在当前shell中运行启动文件 250
8.3 符号命令 251
8.4 重定向标准错误 251
8.5 编写和执行简单的shell脚本 254
8.5.1 chmod:使文件可执行 254
8.5.2 “#!”指定shell 256
8.5.3 “#”开始一行注释 257
8.5.4 执行shell脚本 257
8.6 控制操作符:命令分隔和命令分组 258
8.6.1 使用分号和换行符分隔命令 258
8.6.2 “|”和“&”分隔命令及其他功能 259
8.6.3 布尔控制操作符&&和‖ 260
8.6.4 ()命令分组 261
8.6.5 “\”继续命令 262
8.7 作业控制 262
8.7.1 jobs:列出作业 263
8.7.2 fg:将作业移到前台运行 263
8.7.3 挂起作业 264
8.7.4 bg:将作业移到后台运行 264
8.8 操作目录栈 265
8.8.1 dirs:显示栈 265
8.8.2 pushd:将目录压入栈中 266
8.8.3 popd:将目录从栈中弹出 267
8.9 参数和变量 267
8.9.1 用户创建的变量 269
8.9.2 变量属性 271
8.9.3 关键字变量 273
8.10 特殊字符 281
8.11 locale 282
8.12 时间 285
8.13 进程 288
8.13.1 进程结构 288
8.13.2 进程标识 289
8.13.3 执行命令 290
8.14 历史机制 291
8.14.1 控制历史机制的变量 291
8.14.2 重新执行和编辑命令 293
8.14.3 Readline库 300
8.15 别名 306
8.15.1 别名中的单引号和双引号 306
8.15.2 别名示例 307
8.16 函数 309
8.17 控制bash的功能和选项 312
8.17.1 bash命令行选项 312
8.17.2 shell的功能 313
8.18 处理命令行 315
8.18.1 历史扩展 316
8.18.2 别名替换 316
8.18.3 解析和扫描命令行 316
8.18.4 命令行扩展 316
8.19 本章小结 325
练习 326
高级练习 328
第9章 tsch 331
9.1 shell脚本 332
9.2 进入和退出tcsh 333
9.3 bash与tcsh的共性 335
9.3.1 命令行扩展(替换) 335
9.3.2 作业控制 340
9.3.3 文件名替换 340
9.3.4 操作目录栈 340
9.3.5 命令替换 340
9.4 重定向标准错误 341
9.5 操作命令行 342
9.5.1 字补全 342
9.5.2 编辑命令行 344
9.5.3 校正拼写 345
9.6 变量 346
9.6.1 变量替换 347
9.6.2 字符串变量 347
9.6.3 字符串变量数组 348
9.6.4 数值变量 349
9.6.5 花括号 351
9.6.6 特殊的变量形式 351
9.6.7 tcsh变量 352
9.7 控制结构 357
9.7.1 if 357
9.7.2 goto 360
9.7.3 中断处理 360
9.7.4 if...then...else 361
9.7.5 foreach 362
9.7.6 while 363
9.7.7 break和continue 364
9.7.8 switch 364
9.8 内置命令 365
9.9 本章小结 368
练习 369
高级练习 370
第Ⅳ部分 编程工具 375
第10章 bash程序设计 375
10.1 控制结构 376
10.1.1 if...then 376
10.1.2 if.then...else 380
10.1.3 if...then...elif 381
10.1.4 for...in 387
10.1.5 for 390
10.1.6 while 392
10.1.7 until 395
10.1.8 break与continue 397
10.1.9 case 398
10.1.10 select 404
10.1.11 Here文档 406
10.2 文件描述符 408
10.2.1 打开文件描述符 408
10.2.2 复制文件描述符 408
10.2.3 文件描述符示例 409
10.2.4 确定文件描述符是否与终端关联 411
10.3 参数 413
10.3.1 位置参数 413
10.3.2 特殊参数 418
10.4 变量 422
10.4.1 shell变量 422
10.4.2 环境、环境变量和继承 422
10.4.3 扩展空变量和未赋值的变量 427
10.4.4 数组变量 428
10.4.5 函数中的变量 429
10.5 内置命令 431
10.5.1 type:显示命令的相关信息 431
10.5.2 read:接受用户输入 431
10.5.3 exec:执行命令或重定向文件描述符 435
10.5.4 trap:捕获信号 437
10.5.5 kill:终止进程 440
10.5.6 eval:扫描、赋值并执行命令行 441
10.5.7 getopts:解析选项 442
10.5.8 部分内置命令列表 444
10.6 表达式 445
10.6.1 算术表达式 445
10.6.2 逻辑表达式(条件表达式) 446
10.6.3 字符串模式匹配 447
10.6.4 运算符 448
10.7 隐式命令行延续 451
10.8 shell程序 452
10.8.1 递归的shell脚本 453
10.8.2 shell的quiz脚本 456
10.9 本章小结 462
练习 463
高级练习 465
第11章 Perl脚本语言 467
11.1 Perl简介 468
11.1.1 更多信息 468
11.1.2 帮助 469
11.1.3 perldoc 469
11.1.4 术语 471
11.1.5 运行Perl程序 471
11.1.6 语法 473
11.2 变量 475
11.2.1 标量变量 477
11.2.2 数组变量 478
11.2.3 哈希变量 481
11.3 控制结构 482
11.3.1 if/unless 482
11.3.2 if...else 484
11.3.3 if...elsif...else 485
11 3.4 foreach/for 485
11.3.5 last和next 487
11 3.6 while/until 488
11.4 处理文件 490
11.5 排序 493
11.6 子例程 494
11.7 正则表达式 497
11.8 CPAN模块 502
11.9 示例 504
11.10 本章小结 507
练习 507
高级练习 508
第12章 Python编程语言 509
12.1 简介 510
12.1.1 调用Python 510
12.1.2 更多信息 512
12.1.3 写标准输出与读标准输入 513
12.1.4 函数和方法 513
12.2 标量变量、列表和字典 514
12.2.1 标量变量 514
12.2.2 列表 515
12.2.3 字典 518
12.3 控制结构 520
12.3.1 if 520
12.3.2 if...else 521
12.3.3 if...elif...else 521
12.3.4 while 522
12.3.5 for 523
12.4 读写文件 524
12.4.1 文件输入和输出 524
12.4.2 异常处理 526
12.4.3 pickle模块 527
12.5 正则表达式 528
12.6 定义函数 530
12.7 使用库 530
12.7.1 标准库 531
12.7.2 非标准库 531
12.7.3 SciPy和NumPy库 531
12.7.4 命名空间 531
12.7.5 导入模块 532
12.7.6 导入函数示例 533
12.8 Lambda函数 534
12.9 列表推导 535
12.10 本章小结 536
练习 537
高级练习 537
第13章 MySQL数据库管理系统 539
13.1 注意 540
13.1.1 语法和惯例 541
13.1.2 更多信息 542
13.2 安装MySQL服务器和客户端 543
13.2.1 Fedora/RHEL(Red HatEnterprise Linux) 543
13.2.2 Debian/Ubuntu/Mint 543
13.2.3 OpenSUSE 543
13.2.4 OS X 544
13.3 客户端选项 544
13.4 配置MySQL 544
13.4.1 为MySQL root用户指定密码 545
13.4.2 删除匿名用户 545
13.4.3 运行安全安装脚本 545
13.4.4 ~/.my.cnf:配置MySQL客户端 545
13.4.5 ~/.mysql_history:保存MySQL历史 546
13.5 创建数据库 546
13.6 添加用户 547
13.7 一些示例 548
13.7.1 登录 548
13.7.2 创建表 549
13.7.3 添加数据 550
13.7.4 获取数据 551
13.7.5 备份数据库 553
13.7.6 修改数据 554
13.7.7 创建第二个表 554
13.7.8 连接查询 556
13.8 本章小结 560
练习 560
第14章 AWK模式处理语言 563
14.1 语法 564
14.2 参数 564
14.3 选项 565
14.4 注意 565
14.5 语言基础 565
14.5.1 模式 566
14.5.2 动作 566
14.5.3 注释 567
14.5.4 变量 567
14.5.5 函数 568
14.5.6 算术运算符 568
14.5.7 关联数组 569
14.5.8 printf 569
14.5.9 控制结构 570
14.6 示例 572
14.7 gawk高级编程 589
14.7.1 getline:控制输入 589
14.7.2 协进程:双向I/O 591
14.7.3 从网络获取输入 593
14.8 本章小结 594
练习 594
高级练习 594
第15章 sed编辑器 595
15.1 语法 596
15.2 参数 596
15.3 选项 596
15.4 编辑器基础 596
15.4.1 地址 597
15.4.2 指令 597
15.4.3 控制结构 598
15.4.4 暂存空间 599
15.5 示例 599
15.6 本章小结 609
练习 609
第Ⅴ部分 安全的网络实用程序 613
第16章 rsync安全复制实用程序 613
16.1 语法 614
16.2 参数 614
16.3 选项 614
16.3.1 注意 616
16.3.2 更多信息 616
16.4 示例 616
16.4.1 使用source-file尾部的斜杠(/) 617
16.4.2 删除文件 618
16.4.3 在远程系统上复制文件 619
16.4.4 镜像目录 620
16.4.5 生成备份 621
16.4.6 恢复文件 623
16.5 本章小结 623
练习 623
第17章 OpenSSH安全通信实用程序 625
17.1 OpenSSH简介 626
17.1.1 OpenSSH的工作原理 627
17.1.2 文件 627
17.1.3 更多信息 628
17.2 运行OpenSSH客户端ssh、scp和sftp 628
17.2.1 指南:使用ssh和scp连接到OpenSSH服务器 629
17.2.2 配置OpenSSH客户端 629
17.2.3 ssh:登录或者在远程系统中执行命令 631
17.2.4 scp:与远程系统互相复制文件 635
17.2.5 sftp:安全的ftp客户端 637
17.2.6 ~/.ssh/config和/etc/ssh/ssh_config配置文件 637
17.2.7 认证密钥:自动登录 638
17.2.8 ssh-agent:保存你的私钥 641
17.3 隧道/端口转发 642
17.3.1 转发X11 642
17.3.2 端口转发 643
17.4 本章小结 644
练习 644
高级练习 644
第Ⅵ部分 命令参考 647
第18章 命令参考 647
18.1 标准倍数后缀 651
18.2 常见选项 652
18.3 sample实用程序 652
18.4 sample(OS X) 653
18.5 aspell 654
18.6 at 658
18.7 busybox 661
18.8 bzip2 664
18.9 cal 666
18.10 cat 667
18.11 cd 669
18.12 chgrp 670
18.13 chmod 672
18.14 chown 676
18.15 cmp 678
18.16 comm 680
18.17 configure 682
18.18 cp 683
18.19 cpio 686
18.20 crontab 691
18.21 cut 693
18.22 date 695
18.23 dd 698
18.24 df 700
18.25 diff 702
18.26 diskutil(OS X) 707
18.27 ditto(OS X) 710
18.28 dmesg 712
18.29 dscl(OS X) 713
18.30 du 715
18.31 echo 718
18.32 expand/unexpand 720
18.33 expr 721
18.34 file 725
18.35 find 726
18.36 finger 732
18.37 fmt 734
18.38 fsck 735
18.39 ftp 739
18.40 gawk 745
18.41 gcc 745
18.42 GetFileInfo(OS X) 749
18.43 grep 751
18.44 gzip 755
18.45 head 757
18.46 ioin 759
18.47 kill 762
18.48 killall 763
18.49 launchctl(OS X) 765
18.50 less 767
18.51 ln 771
18.52 lpr 773
18.53 ls 775
18.54 make 781
18.55 man 787
18.56 mc 790
18.57 mkdir 796
18.58 mkfs 797
18.59 mv 800
18.60 nice 802
18.61 nl 803
18.62 nohup 805
18.63 od 805
18.64 open(OS X) 809
18.65 otool(OS X) 811
18.66 paste 813
18.67 pax 815
18.68 plutil(OS X) 820
18.69 pr 822
18.70 printf 823
18.71 ps 826
18.72 renice 830
18.73 rm 831
18.74 rmdir 833
18.75 rsync 834
18.76 scp 834
18.77 screen 835
18.78 sed 840
18.79 SetFile(OS X) 840
18.80 sleep 841
18.81 sort 843
18.82 split 851
18.83 ssh 853
18.84 sshfs/curlftpfs 853
18.85 stat 856
18.86 strings 857
18.87 stty 858
18.88 sysctl(OS X) 862
18.89 tail 863
18.90 tar 866
18.91 tee 870
18.92 telnet 871
18.93 test 874
18.94 top 876
18.95 touch 879
18.96 tr 881
18.97 tty 884
18.98 tune2fs 885
18.99 umask 887
18.100 uniq 889
18.101 w 891
18.102 wc 892
18.103 which 893
18.104 who 895
18.105 xargs 896
第Ⅶ部分 附录 901
附录A 正则表达式 901
附录B 获取帮助 911
附录C 更新系统 917
附录D Mac OS X注意事项 931
附录E 术语表 943