Linux就是这个范儿内容源自淘宝技术大学的培训实战。由来自阿里巴巴集团的资深Linux系统专家赵鑫磊和同样来自阿里巴巴集团的支付宝网络技术有限公司的高级专家Jie Zhang(张洁)共同著写。
两位作者用轻松、诙谐的语言讲解了高深的Linux特性。通俗易懂、深入浅出,从Linux设计思想的角度出发,授人以渔。同时,又密切结合应用案例,透彻展示出Linux的系统架构设计是如何在实际中贯穿的,从而让读者真正掌握Linux的强大之处。书中不含较为复杂的技术理论问题,一切从实际出发。
Linux就是这个范儿共分为三个部分:基础篇、进阶篇和扩展篇。通过对Linux的版本选择与安装、基本使用与系统结构、设计哲学与思想、脚本编程与软件开发、内核编译、网络与认证,以及多媒体等几个方面的精彩讲解,将Linux操作系统的灵魂与运用教授给读者。
目录
- 第一部分 基础篇
- 第1章 第一次亲密接触 2
- 1.1 让Linux入驻我们的电脑 2
- 1.1.1 我们用Linux的理由 3
- 1.1.2 选择哪个发行版 4
- 1.1.3 安装系统 6
- 1.1.4 登录系统 15
- 1.2 不一样的图形操作 15
- 1.2.1 没有图形的图形 15
- 1.2.2 架构设计 17
- 1.3 主流桌面环境 18
- 1.3.1 KDE初学者的首选 18
- 1.3.2 GNOME不可磨灭的经典 20
- 1.3.3 XFCE——轻量、简单、高效 21
- 1.3.4 LXDE——更轻,同样精悍 21
- 1.4 返璞归真的命令行 22
- 1.4.1 开始执行命令 22
- 1.4.2 文本和图形的切换 23
- 1.4.3 基础命令的操作 23
- 1.4.4 快捷键 26
- 1.4.5 错误信息 28
- 1.4.6 联机帮助——man很靠谱 30
- 1.4.7 致命的Linux命令 31
- 1.5 结束语 32
- 第2章 融于心而表于行 33
- 2.1 多用户多任务分时操作系统 33
- 2.2 用户的身份 35
- 2.2.1 澡堂子模型 35
- 2.2.2 理解用户角色 36
- 2.2.3 /etc/passwd文件查看用户 37
- 2.2.4 /etc/group文件查看组 38
- 2.2.5 管理用户和组 39
- 2.2.6 夺面双雄——利用sudo假借身份 41
- 2.2.7 我是谁? 44
- 2.3 文件和它与权限的关系 45
- 2.3.1 目录与文件 46
- 2.3.2 文件属性和权限 47
- 2.3.3 文件连接到底是什么 49
- 2.3.4 修改文件的属性和权限 51
- 2.3.5 深入文件权限 52
- 2.3.6 文件的基本操作 54
- 2.3.7 搜索文件 55
- 2.3.8 对文件打包压缩 57
- 2.4 程序的执行问题 58
- 2.4.1 执行程序的方法,以及多任务协调机制 58
- 2.4.2 计划任务 62
- 2.4.3 守护进程及其作用 64
- 2.4.4 全面了解程序信息 66
- 2.5 软件的安装方式 71
- 2.5.1 从源代码安装软件 71
- 2.5.2 利用软件管理工具rpm和dpkg 72
- 2.5.3 更酷的线上升级 73
- 2.6 磁盘的管理方式 76
- 2.6.1 Linux的文件系统——甩Windows几条街 76
- 2.6.2 磁盘的基本操作 78
- 2.6.3 /etc/fstab文件——决定分区的连接 83
- 2.6.4 弹性调整容量——逻辑卷 85
- 2.7 解决上网问题 90
- 2.7.1 了解IP地址 90
- 2.7.2 相关配置文件 91
- 2.7.3 安装网卡 92
- 2.7.4 手工设定IP地址 92
- 2.7.5 自动获取IP地址 93
- 2.7.6 固定IP上网方式 93
- 2.7.7 ADSL拨号上网方式 94
- 2.8 不能割舍的shell 96
- 2.8.1 勤勤恳恳的bash 96
- 2.8.2 环境变量 98
- 2.8.3 bash的配置文件 98
- 2.9 文本处理 101
- 2.9.1 查看文本内容 101
- 2.9.2 正则表达式 101
- 2.9.3 搜索文本的grep 104
- 2.9.4 排序和去重 105
- 2.9.5 文件对比命令——diff 105
- 2.10 结束语 107
- 第3章 一棵“树”的奥秘 108
- 3.1 Linux的文件组织结构 109
- 3.2 基本组织原则 110
- 3.3 根文件系统 111
- 3.3.1 原则与特性 111
- 3.3.2 必备的内容 112
- 3.3.3 可选的内容 113
- 3.4 子目录 113
- 3.4.1 /bin目录——shell命令 113
- 3.4.2 /boot目录——启动过程所需内容 115
- 3.4.3 /dev目录——设置文件 116
- 3.4.4 /etc目录——配置文件 116
- 3.4.5 /home目录——用户专有 118
- 3.4.6 /lib目录——共享库和内核模块 119
- 3.4.7 /media目录——可移动设备 119
- 3.4.8 /mnt目录——临时挂接 120
- 3.4.9 /opt目录——附加软件包 120
- 3.4.10 /root目录——root专有 120
- 3.4.11 /sbin目录——必备的系统软件 121
- 3.4.12 /srv目录——服务进程所需数据 121
- 3.4.13 /tmp目录——临时文件 122
- 3.5 /usr目录组织结构 122
- 3.5.1 /usr/bin目录 123
- 3.5.2 /usr/include目录 123
- 3.5.3 /usr/lib目录 123
- 3.5.4 /usr/local目录 123
- 3.5.5 /usr/sbin目录 124
- 3.5.6 /usr/share目录 124
- 3.5.7 /usr/share/man目录 125
- 3.5.8 /usr/share/misc目录 126
- 3.6 /var目录组织结构 127
- 3.6.1 /var/account目录 128
- 3.6.2 /var/cache目录 128
- 3.6.3 /var/lib目录 128
- 3.6.4 /var/lock目录 128
- 3.6.5 /var/log目录 129
- 3.6.6 /var/mail目录 129
- 3.6.7 /var/opt目录 129
- 3.6.8 /var/run目录 129
- 3.6.9 /var/spool目录 130
- 3.6.10 /var/tmp目录 130
- 3.7 结束语 130
- 第4章 “笨”出来的文化和哲学 131
- 4.1 Unix的文化和哲学 133
- 4.2 “四大笨”之一:万般皆文本 134
- 4.2.1 二进制的烦恼 135
- 4.2.2 文本的快乐 135
- 4.2.3 文本之于配置文件 136
- 4.2.4 文本之于程序组合 137
- 4.2.5 文本之于通信协议 138
- 4.2.6 硬件也文本 138
- 4.3 “四大笨”之二:四处用脚本 139
- 4.3.1 富饶的脚本语言 139
- 4.3.2 为什么不是C 140
- 4.3.3 脚本的不足和混合编程 141
- 4.3.4 强力胶水 141
- 4.3.5 极端的例子 143
- 4.3.6 软件的适度规模 143
- 4.4 “四大笨”之三:规律无处寻 144
- 4.4.1 机制与策略 145
- 4.4.2 接口与引擎 145
- 4.4.3 不用重新造轮子 146
- 4.4.4 内在的支持 146
- 4.4.5 沉默是金,吝啬是银 147
- 4.5 “四大笨”之四:配置乱生根 148
- 4.5.1 什么是不可配的 148
- 4.5.2 配置三元素 149
- 4.5.3 配置文件 150
- 4.5.4 环境变量 151
- 4.5.5 命令行选项 152
- 4.6 什么样的文化 154
- 4.6.1 “傻x”的精明 154
- 4.6.2 “简单”不简单 155
- 4.7 这一切的基础大师的阐释 156
- 第5章 shell脚本编程 159
- 5.1 第一个shell脚本程序 159
- 5.2 编程的基本要素 160
- 5.2.1 变量 162
- 5.2.2 运算 164
- 5.2.3 流程控制 165
- 5.2.4 自定义函数 169
- 5.3 输入和输出 172
- 5.3.1 基本的输出 172
- 5.3.2 命令行参数 172
- 5.3.3 使用read读取文本行 173
- 5.3.4 文件描述符 174
- 5.3.5 格式化输出 175
- 5.4 调试跟踪 175
- 5.4.1 空变量问题 175
- 5.4.2 缺引号问题 176
- 5.4.3 隔离问题 176
- 5.4.4 echo普通中见“伟大” 177
- 5.4.5 “-x”跟踪问题本领高 177
- 5.4.6 assert函数 177
- 5.4.7 Caller命令 178
- 5.4.8 trap命令 178
- 5.5 高级特性 180
- 5.5.1 波浪号“~” 180
- 5.5.2 通配符 180
- 5.5.3 元字符 181
- 5.5.4 转义符 182
- 5.5.5 命令替换 183
- 5.5.6 运算优先级 183
- 5.5.7 文件包含 184
- 5.5.8 eval语句 185
- 5.5.9 内建命令 186
- 5.6 shell脚本编程实战 187
- 5.6.1 守护进程的启动脚本 187
- 5.6.2 读取数据文件和平滑启动nginx 188
- 第6章 微型语言 194
- 6.1 什么是微型语言 194
- 6.2 软件管理的RPM 196
- 6.2.1 构建你的第一个RPM包 197
- 6.2.2 工作原理——分析Spec文件 199
- 6.2.3 依赖关系 203
- 6.2.4 个软件多个包 204
- 6.2.5 小结 206
- 6.3 制作联机帮助文档的Groff 206
- 6.3.1 Groff简介 207
- 6.3.2 Groff的工作方式 208
- 6.3.3 如何制作一份联机帮助文档 213
- 6.3.4 导出联机帮助文档 219
- 6.3.5 小结 220
- 6.4 把文本当数据库的awk 221
- 6.4.1 使用方法 221
- 6.4.2 基本概念 222
- 6.4.3 注释与空白 223
- 6.4.4 字符串 223
- 6.4.5 数值 225
- 6.4.6 变量 228
- 6.4.7 模式与行为 229
- 6.4.8 行为语句 231
- 6.4.9 小结 237
- 6.5 神奇的计算器dc和bc 238
- 6.5.1 历史渊源——最古老的Unix语言dc 238
- 6.5.2 dc简介 239
- 6.5.3 更为常用的bc 244
- 6.5.4 小结 250
- 6.6 不为人知的m4 250
- 6.6.1 m4的历史 251
- 6.6.2 m4的特性 252
- 6.6.3 从Hello World开始 253
- 6.6.4 工作方式 255
- 6.6.5 小结 257
- 6.7 结束语 258
- 第7章 编辑器的纷争 259
- 7.1 独步青云的vi 260
- 7.1.1 我为vi狂 260
- 7.1.2 vi的使用 261
- 7.1.3 vi的高级功能 264
- 7.1.4 跟我一起打造一个IDE 266
- 7.2 横刀立马的Emacs 274
- 7.2.1 Emacs的来历 274
- 7.2.2 Emacs的基本使用 275
- 7.2.3 使用Emacs必知必会 278
- 7.2.4 Lisp语言 279
- 7.2.5 处理中文问题 283
- 7.2.6 跟我一起打造一个IDE 283
- 7.3 结束语 285
- 第8章 我是Makefile 286
- 8.1 GNU make及其基本用法 288
- 8.2 基本概念 289
- 8.2.1 第一个Makefile例子 290
- 8.2.2 目标、条件和命令 291
- 8.2.3 依赖 292
- 8.2.4 工作方式 292
- 8.2.5 基本语法 293
- 8.3 认识规则 294
- 8.3.1 标准规则 294
- 8.3.2 隐式规则 294
- 8.3.3 变量 295
- 8.3.4 自动变量 297
- 8.3.5 模式规则 299
- 8.3.6 假目标 300
- 8.3.7 路径搜索 302
- 8.4 高级特性 303
- 8.4.1 文件包含 303
- 8.4.2 命令 305
- 8.4.3 深入变量 307
- 8.4.4 宏与函数 310
- 8.4.5 条件指令 311
- 8.5 Makefile实战 312
- 8.5.1 自动产生依赖 312
- 8.5.2 递归式的Makefile 315
- 8.5.3 自动产生Makefile 317
- 8.6 结束语 323
- 第二部分 进阶篇
- 第9章 特种文件系统 326
- 9.1 日志和ReiserFS 326
- 9.1.1 理解日志 327
- 9.1.2 ReiserFS——卓越的小文件性能与渺茫的未来 328
- 9.1.3 应用实战 331
- 9.1.4 小结 331
- 9.2 进程文件系统procfs 331
- 9.2.1 神秘的9号计划 332
- 9.2.2 /proc目录 333
- 9.2.3 procfs实战 335
- 9.2.4 小结 339
- 9.3 tmpfs——满足你对“时空”的双重渴望 339
- 9.3.1 背景 340
- 9.3.2 tmpfs文件系统 341
- 9.3.3 tmpfs实战 341
- 9.4 devfs和sysfs 345
- 9.4.1 devfs的由来 345
- 9.4.2 进入devfs 346
- 9.4.3 sysfs的由来 347
- 9.4.4 小结 348
- 9.5 其他特种文件系统 348
- 9.5.1 RelayFS 348
- 9.5.2 debugfs 349
- 9.6 结束语 349
- 第10章 生死与共的“兄弟” 351
- 10.1 死心眼儿的BIOS 352
- 10.2 小肚鸡肠的MBR(主引导记录) 353
- 10.2.1 MBR的结构 353
- 10.2.2 磁盘分区表 353
- 10.2.3 MBR的功能 355
- 10.3 和事佬GRUB(牛B的统一引导加载器) 355
- 10.3.1 Bootloader 355
- 10.3.2 GRUB的功能 356
- 10.3.3 GRUB的工作流程 357
- 10.4 唇齿相依的内核启动参数 358
- 10.4.1 什么是内核启动参数 358
- 10.4.2 内核启动参数的格式 359
- 10.4.3 常用的内核启动参数 359
- 10.5 自力更生的Linux内核 360
- 10.5.1 内核引导协议 360
- 10.5.2 内核为什么要压缩 360
- 10.5.3 startup_32 361
- 10.5.4 start_kernel 362
- 10.5.5 kernel_init 362
- 10.6 及时雨initramfs 363
- 10.6.1 寻找init的问题 363
- 10.6.2 较早的initrd 363
- 10.6.3 为什么选择initramfs 364
- 10.7 “生”、“死”永相伴的init进程 364
- 10.7.1 名不副实 364
- 10.7.2 运行级别 365
- 10.7.3 进入运行级别之前 368
- 10.7.4 进入运行级别 369
- 10.7.5 转换运行级别 371
- 10.8 幕后英雄们 371
- 10.8.1 终端 372
- 10.8.2 getty系列命令 372
- 10.8.3 Display Manager 373
- 10.8.4 伪终端 374
- 10.8.5 配置文件 374
- 10.9 结束语 375
- 第11章 独霸网络的“蜘蛛神功” 376
- 11.1 功夫理论:网络知识 376
- 11.2 “蜘蛛神功”第一层:网络工具 378
- 11.2.1 马步:ifconfig 378
- 11.2.2 掌法:route 380
- 11.2.3 腿功:netstat 381
- 11.2.4 眼力:DNS二把刀 383
- 11.2.5 身法:tcpdump 385
- 11.3 “蜘蛛神功”第二层:套接字 387
- 11.4 内功心法:TCP/IP协议栈初探 388
- 11.4.1 枯树盘根:系统调用 388
- 11.4.2 凝神静态:sockfs文件系统 390
- 11.4.3 气沉丹田:sk_buff 392
- 11.5 临战杂谈 397
- 11.5.1 对UDP的错误的认识 398
- 11.5.2 事半功倍,调节内核参数 399
- 第12章 一个网络一个世界 402
- 12.1 You’ve Got a Mail 402
- 12.1.1 Email服务模式 402
- 12.1.2 架设Postfix服务器 405
- 12.1.3 Email故事的结局 409
- 12.2 联接世界的Web应用 409
- 12.2.1 Web服务器 410
- 12.2.2 数据库 412
- 12.2.3 解释型语言 413
- 12.2.4 架设Web服务器 414
- 12.3 铜墙铁壁真功夫——Linux内核集成的IP信息包过滤系统 419
- 12.3.1 iptables 420
- 12.3.2 netfilter 423
- 12.3.3 实践出真知 426
- 12.3.4 小盒子的秘密 427
- 12.4 分享文件的乐趣 434
- 12.4.1 NFS 438
- 12.4.2 Samba 442
- 12.5 在虚拟与现实之间穿梭——实现安全的连接 446
- 12.5.1 VPN实现方式 447
- 12.5.2 IPSec VPN 448
- 12.5.3 SSL VPN 452
- 第13章 打通任督二脉 455
- 13.1 了解网络驱动 455
- 13.1.1 网络设备闲谈 455
- 13.1.2 ioctl这把刷子 456
- 13.1.3 设备驱动的秘密 459
- 13.2 无线风光在险峰 461
- 13.2.1 WLAN 461
- 13.2.2 Bluetooth 466
- 13.2.3 NFC——近距无线通信 469
- 13.2.4 谜底 474
- 13.3 奇迹是执着创造出来的 474
- 13.3.1 从2.4到2.6 474
- 13.3.2 从2.6到3.0 477
- 第14章 身在江湖 479
- 14.1 C2级安全认证 479
- 14.2 Linux的安全问题 480
- 14.2.1 黑客入侵 480
- 14.2.2 “病毒泛滥” 482
- 14.2.3 拒绝服务攻击 483
- 14.2.4 小结 484
- 14.3 PAM用户认证机制 485
- 14.3.1 什么是PAM(可拔插认证模块) 485
- 14.3.2 PAM的体系结构 485
- 14.3.3 配置PAM 487
- 14.3.4 密码映射 494
- 14.4 应用PAM API 495
- 14.4.1 开发概述 495
- 14.4.2 PAM事务 496
- 14.4.3 事务属性 498
- 14.4.4 用户认证 499
- 14.4.5 认证凭证 500
- 14.4.6 PAM会话 501
- 14.4.7 用户认证流程 502
- 14.4.8 模块开发 507
- 14.4.9 密码的保存 508
- 14.5 安全增强系统 509
- 14.5.1 主动访问控制DAC 509
- 14.5.2 强制访问控制MAC 510
- 14.5.3 SELinux——Linux的MAC实现 511
- 14.6 结束语 515
- 第15章 七种武器 516
- 15.1 长生剑:fork 516
- 15.1.1 从线程说起 516
- 15.1.2 古老而充满活力的进程 520
- 15.1.3 多进程程序开发 523
- 15.1.4 进程间通信的实现 531
- 15.2 离别钩:VFS 537
- 15.2.1 一切都是文件 538
- 15.2.2 一棵有生命的“树” 538
- 15.2.3 VFS简介 539
- 15.2.4 基本数据结构 540
- 15.2.5 sockfs 541
- 15.3 孔雀翎:mmap(内存映射) 543
- 15.3.1 理解mmap 543
- 15.3.2 虚拟内存技术 544
- 15.3.3 应用mmap 548
- 15.4 碧玉刀:epoll(增强I/O复用) 553
- 15.4.1 C10K问题 553
- 15.4.2 epoll的优点 554
- 15.4.3 epoll的工作模式 555
- 15.4.4 正确使用epoll 556
- 15.4.5 用epoll解决C100K问题 561
- 15.5 多情环:udev 564
- 15.5.1 设计理念 564
- 15.5.2 基本构成 565
- 15.5.3 配置文件 566
- 15.5.4 规则 566
- 15.6 霸王枪:LVS 567
- 15.6.1 负载均衡 567
- 15.6.2 一个中国人的勇气 569
- 15.6.3 LVS的特点 570
- 15.6.4 LVS的工作模式 571
- 15.6.5 LVS的负载均衡调度算法 576
- 15.7 拳头:module 578
- 15.7.1 内核中的Web服务 578
- 15.7.2 编写你的第一个module 579
- 15.7.3 module与普通程序的不同 582
- 15.7.4 module与用户通信 584
- 15.7.5 内核加载module的原理 590
- 15.8 结束语 592
- 第16章 谁都可以从头再来——从头开始编译一套Linux系统 593
- 16.1 初识工具链——准备环境的必备工具 594
- 16.1.1 编译器 594
- 16.1.2 连接器 594
- 16.1.3 程序库 595
- 16.1.4 工具链——破解奇特的四角恋 595
- 16.2 准备环境 596
- 16.2.1 宿主系统环境 597
- 16.2.2 生成工具链的binutils 598
- 16.2.3 生成工具链的gcc 599
- 16.2.4 生成工具链的glibc 600
- 16.2.5 解决工具链的一些问题 603
- 16.2.6 第二次生成工具链的binutils 604
- 16.2.7 第二次生成工具链的gcc 605
- 16.2.8 丰富工具链的功能 608
- 16.2.9 整理工具链 610
- 16.2.10 小结 610
- 16.3 生成目标系统的运行环境 611
- 16.3.1 准备工作 611
- 16.3.2 安装glibc 614
- 16.3.3 调整工具链 617
- 16.3.4 安装binutils 617
- 16.3.5 安装gcc 618
- 16.3.6 安装其他基础设施 620
- 16.3.7 系统启动脚本 622
- 16.3.8 结束语 623
- 16.4 定制Linux内核 623
- 16.4.1 内核的make参数 624
- 16.4.2 定制界面 625
- 16.4.3 编译与安装 626
- 16.5 独立运行 627
- 16.5.1 /etc/fstab文件 627
- 16.5.2 使用GRUB配置启动过程 627
- 16.6 结束语 628
- 第三部分 扩展篇
- 第17章 窈窕淑女君子好逑 630
- 17.1 女人心事难捉摸——Linux图形环境 630
- 17.1.1 X Window 630
- 17.1.2 桌面系统 638
- 17.1.3 XOrg 639
- 17.2 云想衣裳花想容——Qt与GTK 644
- 17.2.1 发展历史 644
- 17.2.2 GTK与Qt的比较 646
- 17.2.3 大家闺秀Qt 648
- 17.2.4 小鸟依人GTK 657
- 第18章 这里也是鼓乐笙箫 667
- 18.1 与多媒体的第一次握手 667
- 18.1.1 听声 668
- 18.1.2 看影 669
- 18.1.3 多媒体工作室 674
- 18.2 鼓——ffmpeg 676
- 18.2.1 羞辱柱与软件许可 676
- 18.2.2 多媒体的来龙去脉 678
- 18.2.3 家庭成员 684
- 18.3 乐——MPlayer与VLC 685
- 18.3.1 绿色的MPlayer 685
- 18.3.2 浪漫的VLC 687
- 18.4 笙——FrameBuffer 690
- 18.4.1 原理 691
- 18.4.2 设置FrameBuffer 691
- 18.4.3 文字倒置滚动 692
- 18.5 箫——V4L2与ALSA 697
- 18.5.1 V4L2 698
- 18.5.2 ALSA 703
- 18.6 结束语 707
- 第19章 团结就是力量 708
- 19.1 标准的前世今生 708
- 19.1.1 一场拆分引发的标准 708
- 19.1.2 站在POSIX肩膀上的LSB 709
- 19.1.3 工作组 711
- 19.1.4 标准化流程 712
- 19.2 认证 713
- 19.3 工具 714
- 19.3.1 LSB SDK 715
- 19.3.2 App Checker 716
- 19.3.3 Distribution Checker 718
- 19.3.4 LSB Navigator 720
- 19.3.5 lsb_release的规范定义和实现 720
- 19.4 LSB的前世今生 721
- 19.4.1 吃一堑,长一智 722
- 19.4.2 “哥只是个传说” 723
- 19.4.3 意气风发的LSB5.0 724
- 19.5 结束语 724
- 附录 我的Linux,我做主 725