第1章 欢迎进入Linux世界 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 Linux的关键 4
1.2 Linux的优点 5
1.2.1 Linux在硬件公司和开发人员中流行的原因 7
1.2.2 Linux的可移植性 7
1.2.3 C编程语言 8
1.3 Linux概述 9
1.3.1 Linux具有内核编程接口 9
1.3.2 Linux支持多用户 9
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操作系统 19
第2章 入门 19
2.1 本书约定 20
2.2 从终端或终端模拟器登录 21
2.3 shell 23
2.3.1 识别当前运行的是哪种shell 23
2.3.2 校正错误 24
2.4 su/sudo:慎用root权限 26
2.5 如何查找相关文档 27
2.5.1 --help选项 27
2.5.2 man:显示系统手册页 28
2.5.3 apropos:搜索关键字 29
2.5.4 info:显示实用程序的相关信息 30
2.5.5 HOWTO文档 32
2.5.6 利用系统获取帮助 32
2.6 登录的更多方面 34
2.6.1 使用虚拟控制台 34
2.6.2 如何处理登录失败 34
2.6.3 退出 34
2.6.4 更改密码 34
2.7 本章小结 36
练习 36
高级练习 37
第3章 实用程序 38
3.1 特殊字符 39
3.2 基本工具 39
3.2.1 ls:显示文件名 40
3.2.2 cat:显示文本文件内容 40
3.2.3 rm:删除文件 41
3.2.4 少即多:分屏显示文件 41
3.2.5 hostname:显示系统名 41
3.3 文件操作 42
3.3.1 cp:复制文件 42
3.3.2 mv:更改文件名 43
3.3.3 lpr:打印文件 43
3.3.4 grep:查找字符串 44
3.3.5 head:显示文件头部 45
3.3.6 tail:显示文件尾部 45
3.3.7 sort:按顺序显示文件内容 46
3.3.8 uniq:忽略文件中重复的行 47
3.3.9 diff:比较两个文件 47
3.3.10 file:识别文件内容 48
3.4 |(管道):实现进程间的通信 48
3.5 4个有用的实用程序 49
3.5.1 echo:显示文本 49
3.5.2 date:显示日期和时间 50
3.5.3 script:记录shell会话信息 50
3.5.4 todos/unix2dos:将Linux和Mac O SX文件转换为Windows格式 51
3.6 压缩和归档文件 52
3.6.1 bzip2:压缩文件 52
3.6.2 bunzip2和bzcat:解压缩文件 53
3.6.3 gzip:压缩文件 54
3.6.4 tar:打包和解包文件 54
3.7 定位命令 57
3.7.1 which和whereis:定位实用程序 57
3.7.2 slocate/locate:搜索文件 58
3.8 获取用户和系统信息 58
3.8.1 who:列出系统上的用户 59
3.8.2 finger:列出系统上的用户 60
3.8.3 w:列出系统上的用户 61
3.9 与其他用户通信 62
3.9.1 write:发送消息 62
3.9.2 mesg:拒绝或接受消息 62
3.10 电子邮件 63
3.11 本章小结 63
练习 65
高级练习 66
第4章 Linux文件系统 67
4.1 分层文件系统 68
4.2 目录文件和普通文件 69
4.2.1 文件名 69
4.2.2 工作目录 72
4.2.3 主目录 72
4.3 路径名 72
4.3.1 绝对路径名 73
4.3.2 相对路径名 74
4.4 目录操作 75
4.4.1 mkdir:创建目录 75
4.4.2 cd:更改工作目录 76
4.4.3 rmdir:删除目录 78
4.4.4 路径名 78
4.4.5 mv/cp:移动/复制文件 79
4.4.6 mv:移动目录 80
4.4.7 重要的标准目录和文件 80
4.5 访问权限 82
4.5.1 ls-l:显示访问权限 82
4.5.2 chmod:改变访问权限 83
4.5.3 setuid和setgid权限 85
4.5.4 目录访问权限 86
4.6 ACL 87
4.6.1 启用ACL 88
4.6.2 处理访问规则 88
4.6.3 设置目录的默认规则 91
4.7 链接 93
4.7.1 硬链接 94
4.7.2 符号链接 96
4.7.3 rm:删除链接 98
4.8 本章小结 98
练习 100
高级练习 101
第5章 shell 102
5.1 命令行 102
5.1.1 语法 103
5.1.2 处理命令行 105
5.1.3 执行命令行 107
5.1.4 编辑命令行 107
5.2 标准输入输出 108
5.2.1 作为文件的屏幕 108
5.2.2 作为标准输入的键盘和作为标准输出的屏幕 109
5.2.3 重定向 110
5.2.4 管道 115
5.3 在后台运行命令 118
5.4 生成文件名/扩展路径名 119
5.4.1 特殊字符“?” 120
5.4.2 特殊字符“*” 121
5.4.3 特殊字符“[]” 122
5.5 内置命令 124
5.6 本章小结 124
练习 125
高级练习 126
第Ⅱ部分 编辑器 131
第6章 vim编辑器 131
6.1 历史 131
6.2 入门:用vim创建和编辑文件 132
6.2.1 启动vim 133
6.2.2 命令模式和输入模式 134
6.2.3 输入文本 135
6.2.4 获取帮助 136
6.2.5 结束编辑会话 138
6.2.6 compatible参数 139
6.3 介绍vim的特性 139
6.3.1 联机帮助 139
6.3.2 术语 140
6.3.3 操作模式 140
6.3.4 显示 141
6.3.5 输入模式下校正文本 141
6.3.6 工作缓冲区 141
6.3.7 行长度与文件大小 142
6.3.8 窗口 142
6.3.9 锁定文件 142
6.3.10 非正常结束编辑会话 142
6.3.11 崩溃后的文本恢复 143
6.4 在命令模式下移动光标 144
6.4.1 按字符移动光标 145
6.4.2 将光标移到某个特定字符 145
6.4.3 按字移动光标 146
6.4.4 按行移动光标 146
6.4.5 按句子和段落移动光标 147
6.4.6 在屏幕内移动光标 147
6.4.7 查看工作缓冲区的不同部分 147
6.5 输入模式 148
6.5.1 插入文本 148
6.5.2 追加文本 148
6.5.3 为输入文本打开行 148
6.5.4替换文本 148
6.5.5 在输入模式下转义特殊字符 149
6.6 在命令模式下删除和修改文本 149
6.6.1 撤销修改 149
6.6.2 删除字符 149
6.6.3 删除文本 150
6.6.4修改文本 151
6.6.5 替换文本 152
6.6.6 修改大小写 152
6.7 查找和替换 152
6.7.1 查找字符 153
6.7.2 查找字符串 153
6.7.3 字符串的替换 155
6.8 其他命令 157
6.8.1 连接命令 157
6.8.2 状态命令 158
6.8.3(句点) 158
6.9 复制、移动和删除文本 158
6.9.1 通用缓冲区 158
6.9.2 命名缓冲区 159
6.9.3 编号缓冲区 160
6.10 文件的读写 160
6.10.1 读文件 160
6.10.2 写文件 161
6.10.3 识别当前文件 161
6.11 参数设置 161
6.11.1 在vim中设置参数 161
6.11.2 在启动文件中设置参数 162
6.11.3 .vimrc启动文件 162
6.11.4 参数 163
6.12 高级编辑技巧 166
6.12.1 使用标记 166
6.12.2 编辑其他文件 166
6.12.3 宏与快捷键 167
6.12.4 在vim中执行shell命令 167
6.13 度量单位 169
6.13.1 字符 169
6.13.2 字 169
6.13.3 空白分隔字 170
6.13.4 行 170
6.13.5 句子 170
6.13.6 段落 171
6.13.7 屏幕(窗口) 172
6.13.8 重复因子 172
6.14 本章小结 172
练习 176
高级练习 177
第7章 emacs编辑器 178
7.1 历史 178
7.1.1 演化 179
7.1.2 emacs与vim 179
7.1.3 命令行emacs和图形emacs 180
7.2 入门:开始使用emacs 181
7.2.1 启动emacs 181
7.2.2 退出emacs 183
7.2.3 插入文本 183
7.2.4 删除字符 183
7.2.5 移动光标 184
7.2.6 在光标处编辑 186
7.2.7 保存和检索缓冲区中的内容 186
7.3 emacs GUI 187
7.4 基本编辑命令 188
7.4.1 按键的表示与使用 188
7.4.2 键序列和命令 189
7.4.3 META+x:运行不带绑定键的命令 190
7.4.4 数值参数 190
7.4.5 编辑点与光标 190
7.4.6 在缓冲区中滚动 191
7.4.7 删除文本 191
7.4.8 搜索 191
7.4.9 通过键盘使用菜单栏 193
7.5 联机帮助 194
7.6 高级编辑 196
7.6.1 撤销修改 196
7.6.2 编辑点标记和区域 197
7.6.3 剪切与粘贴:移出已剪切文本 199
7.6.4 插入特殊字符 200
7.6.5 全局缓冲区命令 200
7.6.6 访问和保存文件 202
7.6.7 缓冲区 204
7.6.8 窗口 206
7.6.9 前台shell命令 207
7.6.10 后台shell命令 208
7.7 主模式:区分语言的编辑 208
7.7.1 选择主模式 209
7.7.2 自然语言模式 209
7.7.3 C模式 212
7.7.4 定制缩进 214
7.7.5 注释 215
7.7.6 专用模式 215
7.8 定制emacs 217
7.8.1 .emacs启动文件 217
7.8.2 重映射键 218
7.8.3 .emacs文件示例 220
7.9 更多信息 221
7.10 本章小结 221
练习 228
高级练习 229
第Ⅲ部分 shell 233
第8章 Bourne Again Shell 233
8.1 背景知识 234
8.2 shell基础 235
8.2.1 启动文件 235
8.2.2 符号命令 238
8.2.3 重定向标准错误 238
8.2.4 编写简单的shell脚本 241
8.2.5 命令分隔和命令分组 244
8.2.6 作业控制 248
8.2.7 操作目录栈 250
8.3 参数和变量 252
8.3.1 用户创建的变量 254
8.3.2 变量属性 256
8.3.3 关键字变量 258
8.4 特殊字符 265
8.5 进程 266
8.5.1 进程结构 266
8.5.2 进程标识 267
8.5.3 执行命令 268
8.6 历史机制 269
8.6.1 控制历史机制的变量 269
8.6.2 重新执行和编辑命令 270
8.6.3 Readline库 278
8.7 别名 283
8.7.1 别名中的单引号和双引号 284
8.7.2 别名示例 285
8.8 函数 287
8.9 控制bash的功能和选项 289
8.9.1 命令行选项 289
8.9.2 shell的功能 290
8.10 处理命令行 292
8.10.1 历史扩展 293
8.10.2 别名替换 293
8.10.3 解析和扫描命令行 293
8.10.4 命令行扩展 293
8.11 本章小结 301
练习 303
高级练习 304
第9章 TC Shell 306
9.1 shell脚本 307
9.2 进入和退出TC Shell 308
9.3 Bourne Again Shell与TC Shell的共性 310
9.3.1 命令行扩展(替换) 310
9.3.2 作业控制 314
9.3.3 文件名替换 315
9.3.4 操作目录栈 315
9.3.5 命令替换 315
9.4 重定向标准错误 315
9.5 操作命令行 316
9.5.1 字补全 316
9.5.2 编辑命令行 318
9.5.3 校正拼写 319
9.6 变量 321
9.6.1 变量替换 321
9.6.2 字符串变量 322
9.6.3 字符串变量数组 323
9.6.4 数值变量 323
9.6.5 花括号 326
9.6.6 特殊的变量形式 326
9.6.7 shell变量 327
9.7 控制结构 332
9.7.1 if 332
9.7.2 goto 334
9.7.3 中断处理 335
9.7.4 if...then...else 335
9.7.5 foreach 337
9.7.6 while 338
9.7.7 break和continue 339
9.7.8 switch 339
9.8 内置命令 340
9.9 本章小结 343
练习 344
高级练习 345
第Ⅳ部分 编程工具 349
第10章 BASH程序设计 349
10.1 控制结构 350
10.1.1 if...then 350
10.1.2 if...then...else 353
10.1.3 if...then...elif 355
10.1.4 for...in 361
10.1.5 for 363
10.1.6 while 364
10.1.7 until 368
10.1.8 break与continue 370
10.1.9 case 371
10.1.10 select 377
10.1.11 Here文档 378
10.2 文件描述符 380
10.3 参数和变量 384
10.3.1 数组变量 384
10.3.2 局部变量 385
10.3.3 特殊参数 388
10.3.4 位置参数 390
10.3.5 扩展空变量和未赋值的变量 394
10.4 内置命令 395
10.4.1 type:显示命令的相关信息 395
10.4.2 read:接受用户输入 396
10.4.3 exec:执行命令 399
10.4.4 trap:捕获信号 402
10.4.5 kill:终止进程 404
10.4.6 getopts:解析选项 405
10.4.7 部分内置命令列表 407
10.5 表达式 408
10.5.1 算术表达式 408
10.5.2 逻辑表达式(条件表达式) 410
10.5.3 字符串模式匹配 410
10.5.4 运算符 411
10.6 shell程序 416
10.6.1 递归的shell脚本 416
10.6.2 shell的quiz脚本 419
10.7 本章小结 426
练习 427
高级练习 428
第11章 Perl脚本语言 430
11.1 Perl简介 431
11.1.1 更多信息 431
11.1.2 帮助 432
11.1.3 perldoc 432
11.1.4 术语 433
11.1.5 运行Perl程序 434
11.1.6 语法 436
11.2 变量 438
11.2.1 标量变量 440
11.2.2 数组变量 441
11.2.3 散列变量 443
11.3 控制结构 445
11.3.1 if/unless 445
11.3.2 if...else 447
11.3.3 if...elsif...else 448
11.3.4 foreach/for 448
11.3.5 while/until 451
11.4 处理文件 452
11.5 排序 456
11.6 子例程 457
11.7 正则表达式 460
11.7.1 语法和“=~”运算符 460
11.7.2 贪婪匹配 462
11.7.3 中断表达式 463
11.8 CPAN模块 465
11.9 示例 467
11.10 本章小结 470
练习 470
高级练习 471
第12章 AWK模式处理语言 472
12.1 语法 473
12.2 参数 473
12.3 选项 473
12.4 注意 474
12.5 语言基础 474
12.5.1 模式 475
12.5.2 动作 475
12.5.3 注释 476
12.5.4 变量 476
12.5.5 函数 476
12.5.6 算术运算符 477
12.5.7 关联数组 477
12.5.8 printf 478
12.5.9 控制结构 478
12.6 示例 481
12.7 gawk高级编程 498
12.7.1 getline:控制输入 498
12.7.2 协进程:双向I/O 500
12.7.3 从网络获取输入 501
12.8 本章小结 502
练习 503
高级练习 503
第13章 sed编辑器 504
13.1 语法 504
13.2 参数 505
13.3 选项 505
13.4 编辑器基础 505
13.4.1 地址 506
13.4.2 指令 506
13.4.3 控制结构 507
13.4.4 暂存空间 508
13.5 示例 508
13.6 本章小结 518
练习 518
第14章 rsync安全复制实用程序 520
14.1 语法 521
14.2 参数 521
14.3 选项 521
14.3.1 注意 523
14.3.2 更多信息 523
14.4 示例 523
14.4.1 使用source-file尾部的斜杠(/) 524
14.4.2 删除文件 525
14.4.3 在远程系统上复制文件 526
14.4.4 镜像目录 527
14.4.5 生成备份 528
14.5 本章小结 530
练习 530
第Ⅴ部分 编程工具 533
第15章 命令参考 533
15.1 标准倍数后缀 537
15.2 常见选项 538
15.3 sample实用程序 538
15.4 sample(OS X) 538
15.5 aspell 539
15.6 at 543
15.7 bzip2 547
15.8 cal 549
15.9 cat 550
15.10 cd 552
15.11 chgrp 553
15.12 chmod 556
15.13 chown 560
15.14 cmp 562
15.15 comm 564
15.16 configure 566
15.17 cp 567
15.18 cpio 570
15.19 crontab 574
15.20 cut 577
15.21 date 579
15.22 dd 581
15.23 df 584
15.24 diff 586
15.25 diskutil(OS X) 591
15.26 ditto(OS X) 593
15.27 dmesg 595
15.28 dscl(OS X) 596
15.29 du 599
15.30 echo 601
15.31 expr 603
15.32 file 607
15.33 find 608
15.34 finger 613
15.35 fmt 615
15.36 fsck 617
15.37 ftp 621
15.38 gawk 627
15.39 gcc 627
15.40 GetFileInfo(OS X) 631
15.41 grep 632
15.42 gzip 636
15.43 head 639
15.44 kill 641
15.45 killall 642
15.46 launchctl(OS X) 644
15.47 less 646
15.48 ln 650
15.49 lpr 652
15.50 ls 654
15.51 make 660
15.52 man 666
15.53 mkdir 669
15.54 mkfs 670
15.55 Mtools 673
15.56 mv 676
15.57 nice 677
15.58 nohup 679
15.59 od 680
15.60 open(OS X) 683
15.61 otool(OS X) 685
15.62 paste 687
15.63 pax 689
15.64 plutil(OS X) 694
15.65 pr 695
15.66 ps 697
15.67 rcp 701
15.68 renice 702
15.69 rlogin 704
15.70 rm 705
15.71 rmdir 706
15.72 rsh 707
15.73 rsync 709
15.74 scp 709
15.75 sed 711
15.76 SetFile(OS X) 711
15.77 sleep 712
15.78 sort 714
15.79 split 722
15.80 ssh 723
15.81 stat 729
15.82 strings 731
15.83 stty 732
15.84 sysctl(OS X) 735
15.85 tail 736
15.86 tar 739
15.87 tee 743
15.88 telnet 744
15.89 test 746
15.90 top 749
15.91 touch 752
15.92 tr 753
15.93 tty 756
15.94 tune2fs 757
15.95 umask 759
15.96 uniq 760
15.97 w 762
15.98 wc 763
15.99 which 764
15.100 who 766
15.101 xargs 768
第Ⅵ部分 附录 773
附录A 正则表达式 773
附录B 获取帮助 782
附录C 更新系统 792
附录D Mac OS X注意事项 807
附录E 术语表 818