-
Notifications
You must be signed in to change notification settings - Fork 5
/
linux.txt
2345 lines (2167 loc) · 73.7 KB
/
linux.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
项目1 安装与配置Linux操作系统 2
1.1 任务1 认识Linux操作系统 2
1.1.1 子任务1 认识Linux的前世与今生 2
1.1.2 子任务2 理解Linux体系结构 3
1.1.3 子任务3 认识Linux的版本 4
1.1.4 Red Hat Enterprise Linux 7 5
1.1.5 863核高基与国产操作系统 5
1.2 任务2 设计与准备搭建Linux服务器 5
1.3 任务3 安装配置VM虚拟机 8
1.4 任务4 安装Red Hat Enterprise Linux 7 12
1.5 任务5 重置root管理员密码 17
1.6 任务6 RPM(红帽软件包管理器) 18
1.7 任务7 yum软件仓库 19
1.8 任务8 systemd初始化进程 20
1.9 任务9 启动shell 21
1.10 项目实录:Linux系统安装与基本配置 23
1.11 练习题 24
1.12 实践习题 25
1.13 超级链接 25
项目2 熟练使用Linux常用命令 26
2.1 任务1 熟悉Linux命令基础 26
2.1.1 子任务1 了解Linux命令特点 26
2.1.2 子任务2 后台运行程序 27
2.2 任务2 熟练使用文件目录类命令 27
2.2.1 子任务1 熟练使用浏览目录类命令 27
2.2.2 子任务2 熟练使用浏览文件类命令 28
2.2.3 子任务3 熟练使用目录操作类命令 30
2.2.4 子任务4 熟练使用cp命令 30
2.2.5 子任务5 熟练使用文件操作类命令 32
2.3 任务3 熟练使用系统信息类命令 36
2.4 任务4 熟练使用进程管理类命令 38
2.5 任务5 熟练使用其他常用命令 41
2.6 项目实录:使用Linux基本命令 43
2.7 练习题 43
2.8 实践习题 44
学习情境二 系统配置与管理
项目3 管理Linux服务器的用户和组 46
3.1 任务1 理解用户账户和组群 46
3.2 任务2 理解用户账户文件和组群文件 47
3.2.1 理解用户账户文件 47
3.2.2 理解组群文件 49
3.3 任务3 管理用户账户 50
3.3.1 新建用户 50
3.3.2 设置用户账户口令 51
3.3.3 维护用户账户 52
3.4 任务4 管理组群 54
3.4.1 维护组群账户 54
3.4.2 为组群添加用户 55
3.5 任务5 使用su命令与sudo命令 55
3.5.1 su命令 55
3.5.2 sudo命令 56
3.6 任务6 使用用户管理器管理用户
和组群 56
3.6.1 sudo命令 56
3.6.2 用户管理器 57
3.7 任务7 使用常用的账户管理命令 58
3.8 企业实战与应用——账号管理实例 60
3.9 项目实录:管理用户和组 61
3.10 练习题 61
项目4 配置与管理文件系统 63
4.1 任务1 全面理解文件系统与目录 63
4.1.1 子任务1 认识文件系统 63
4.1.2 子任务2 理解Linux文件系统
目录结构 64
4.1.3 子任务3 理解绝对路径与相对路径 66
4.2 任务2 管理Linux文件权限 66
4.2.1 子任务1 理解文件和文件权限 66
4.2.2 子任务2 详解文件的各种属性信息 67
4.2.3 子任务3 使用数字表示法修改权限 69
4.2.4 子任务4 使用文字表示法修改权限 70
4.2.5 子任务5 理解权限与指令间的关系 72
4.3 任务3 修改文件与目录的默认权限
与隐藏权限 72
4.3.1 子任务1 理解文件预设权限:umask 72
4.3.2 子任务2 利用umask 73
4.3.3 子任务3 设置文件隐藏属性 74
4.3.4 子任务4 设置文件特殊权限:
SUID、SGID、SBIT 75
4.4 任务4 文件访问控制列表 75
4.4.1 setfacl命令 75
4.4.2 getfacl命令 76
4.5 企业实战与应用 76
4.6 项目实录:配置与管理文件权限 78
4.7 练习题 78
项目5 配置与管理磁盘 80
5.1 任务1 熟练使用常用磁盘管理工具 80
5.2 任务2 配置与管理磁盘配额 86
5.3 任务3 磁盘配额配置的企业案例 87
5.3.1 环境需求 87
5.3.2 解决方案 87
5.4 任务4 在Linux中配置软RAID 91
5.4.1 创建与挂载RAID设备 92
5.4.2 RAID设备的数据恢复 95
5.5 任务5 配置软RAID的企业案例 96
5.5.1 环境需求 96
5.5.2 解决方案 96
5.6 任务6 LVM逻辑卷管理器 98
5.6.1 部署逻辑卷 98
5.6.2 扩容逻辑卷 101
5.6.3 缩小逻辑卷 102
5.6.4 删除逻辑卷 103
5.7 项目实录 103
项目实录1:文件系统管理 103
项目实录2:LVM逻辑卷管理器 104
项目实录3:动态磁盘管理 104
5.8 练习题 105
项目6 配置网络和使用ssh服务 106
6.1 任务1 配置网络服务 106
6.1.1 检查并设置有线处于连接状态 106
6.1.2 设置主机名 106
6.1.3 使用系统菜单配置网络 108
6.1.4 通过网卡配置文件配置网络 109
6.1.5 使用图形界面配置网络 110
6.1.6 使用nmcli命令配置网络 112
6.2 任务2 创建网络会话实例 115
6.3 任务3 绑定两块网卡 118
6.4 任务4 配置远程控制服务 118
6.4.1 配置sshd服务 118
6.4.2 安全密钥验证 120
6.4.3 远程传输命令 122
6.5 项目实录:配置Linux下的TCP/IP
和远程管理 122
6.6 练习题 123
学习情境三 vim编程与调试
项目7 熟练使用vim程序编辑器与shell 126
7.1 任务1 熟练使用vim编辑器 126
7.1.1 子任务1 启动与退出vim 126
7.1.2 子任务2 熟练掌握vim的工作模式 127
7.1.3 子任务3 使用vim命令 128
7.1.4 子任务4 完成案例练习 131
7.2 任务2 熟练掌握shell环境变量 132
7.3 任务3 熟练掌握正则表示法 138
7.3.1 子任务1 掌握grep的高级使用 138
7.3.2 子任务2 练习基础正则表达式 139
7.3.3 子任务3 基础正则表达式的特殊
字符汇总 145
7.4 任务4 掌握输入输出重定向与管道
命令的应用 147
7.4.1 子任务1 使用重定向 147
7.4.2 子任务2 使用管道 148
7.5 项目实录:使用vim编辑器 149
7.6 练习题 150
项目8 学习shell script 151
8.1 任务1 了解shell script 151
8.1.1 子任务1 了解shell script 151
8.1.2 子任务2 编写与执行一个
shell script 152
8.1.3 子任务3 养成撰写shell script的
良好习惯 153
8.2 任务2 练习简单的shell script 154
8.2.1 子任务1 完成简单范例 154
8.2.2 子任务2 了解脚本的运行方式
的差异 156
8.3 任务3 用好判断式 157
8.3.1 子任务1 利用test命令的测试功能 157
8.3.2 子任务2 利用判断符号[] 160
8.3.3 子任务3 使用shell script的默认
变量($0, $1…) 161
8.4 任务4 使用条件判断式 161
8.4.1 子任务1 利用if…then 162
8.4.2 子任务2 利用case...esac判断 166
8.4.3 子任务3 利用function功能 168
8.5 任务5 使用循环(loop) 169
8.5.1 子任务1 while do done, until do done
(不定循环) 169
8.5.2 子任务2 for...do...done
(固定循环) 170
8.5.3 子任务3 for...do...done的数值处理 173
8.6 任务6 对shell script进行追踪
与调试 174
8.7 项目实录:使用shell script编程 175
8.8 练习题 176
项目9 使用gcc和make调试程序 177
9.1 任务1 了解程序的调试 177
9.1.1 子任务1 编译时错误 177
9.1.2 子任务2 运行时错误 178
9.1.3 子任务3 逻辑错误和语义错误 178
9.2 任务2 使用传统程序语言进行编译 178
9.2.1 子任务1 安装GCC 178
9.2.2 子任务2 单一程序:
打印 Hello World 180
9.2.3 子任务3 主程序、子程序链接、
子程序的编译 181
9.2.4 子任务4 调用外部函数库:加入
链接的函数库 182
9.2.5 子任务5 GCC的简易用法
(编译、参数与链接) 184
9.3 任务3 使用make进行宏编译 184
9.3.1 子任务1 为什么要用make 184
9.3.2 子任务2 了解makefile的基本
语法与变量 187
9.4 练习题 189
学习情境四 网络服务器配置与管理
项目10 配置与管理Samba服务器 192
10.1 任务1 认识Samba 192
10.1.1 子任务1 了解Samba应用环境 192
10.1.2 子任务2 了解SMB协议 193
10.1.3 子任务3 掌握Samba的工作原理 193
10.2 任务2 配置Samba服务 193
10.2.1 子任务1 安装并启动Samba服务 193
10.2.2 子任务2 了解Samba服务器配置
的工作流程 194
10.2.3 子任务3 主要配置文件smb.conf 195
10.2.4 子任务4 Samba服务的日志文件
和密码文件 198
10.3 任务3 user服务器实例解析 199
10.4 任务4 配置Samba客户端 201
10.5 项目实录 203
10.6 练习题 204
10.7 实践习题 205
项目11 配置与管理DHCP服务器 206
11.1 DHCP相关知识 206
11.1.1 DHCP服务概述 206
11.1.2 DHCP的工作过程 207
11.1.3 DHCP服务器分配给客户端的
IP地址类型 207
11.2 项目设计及准备 208
11.2.1 项目设计 208
11.2.2 项目需求准备 208
11.3 项目实施 209
11.3.1 任务1 在服务器RHEL 7-1上
安装DHCP服务器 209
11.3.2 任务2 熟悉DHCP主配置文件 210
11.3.3 任务3 配置DHCP的应用案例 213
11.4 项目实录:配置与管理DHCP
服务器 217
11.5 练习题 218
11.6 实践习题 219
项目12 配置与管理DNS服务器 220
12.1 任务1 了解DNS服务 220
12.1.1 子任务1 认识域名空间 220
12.1.2 子任务2 了解DNS服务器
的分类 221
12.1.3 子任务3 掌握DNS查询模式 222
12.1.4 子任务4 掌握域名解析过程 222
12.2 任务2 安装DNS服务 223
12.2.1 子任务1 安装BIND软件包 223
12.2.2 子任务2 DNS服务的启动、停止
与重启,加入开机自启动 224
12.3 任务3 掌握BIND配置文件 224
12.3.1 子任务1 认识全局配置文件 224
12.3.2 子任务2 认识主配置文件 226
12.3.3 子任务3 缓存DNS服务器
的配置 227
12.4 任务4 配置主DNS服务器实例 228
12.4.1 案例环境及需求 228
12.4.2 配置过程 228
12.5 任务5 配置DNS客户端 231
12.6 任务6 使用nslookup测试DNS 232
12.7 项目实录:配置与管理DNS服务 235
12.8 练习题 235
项目13 配置与管理Apache服务器 237
13.1 Web服务的概述 237
13.2 任务1 安装、启动与停止
Apache服务 238
13.2.1 子任务1 安装Apache相关软件 238
13.2.2 子任务2 让防火墙放行,并设置
SELinux为允许 238
13.2.3 子任务3 测试httpd服务是否
安装成功 239
13.3 任务2 认识Apache服务器的
配置文件 239
13.4 任务3 常规设置Apache服务器
的实例 241
13.5 任务4 其他常规设置 244
13.6 任务5 配置虚拟主机 249
13.6.1 子任务1 配置基于IP地址的
虚拟主机 249
13.6.2 子任务2 配置基于域名的
虚拟主机 250
13.6.3 子任务3 基于端口号的虚拟
主机的配置 252
13.7 项目实录:配置与管理Web服务器 254
13.8 练习题 255
13.9 实践习题 255
项目14 配置与管理FTP服务器 257
14.1 相关知识 257
14.1.1 FTP的工作原理 257
14.1.2 匿名用户 258
14.2 项目设计与准备 258
14.3 项目实施 259
14.3.1 任务1 安装、启动与停止
vsftpd服务 259
14.3.2 任务2 认识vsftpd的配置文件 259
14.3.3 任务3 配置匿名用户FTP实例 261
14.3.4 任务4 配置本地模式的常规FTP
服务器案例 263
14.3.5 设置vsftp虚拟账号 266
14.4 项目实录:配置与管理FTP服务器 269
14.5 练习题 270
14.6 实践习题 271
第1章 Linux基础
1.1 UNIX/Linux简介
1.1.1 UNIX简介
1.1.2 UNIX体系结构
1.1.3 Linux简介
1.1.4 Linux版本说明
1.1.5 Linux特点
1.2 库函数与系统调用
1.3 Linux常用命令
1.3.1 用户和用户组命令
1.3.2 文件和目录命令
1.3.3 进程命令
1.3.4 获取帮助信息
1.4 案例1:通过SSH终端登录Linux 系统
1.4.1 分析与设计
1.4.2 实施
1.4.3 运行
习题
第2章 Linux系统开发环境
2.1 Vi编辑器
2.1.1 Vi编辑器的工作模式
2.1.2 Vi编辑器的基本用法
2.1.3 Vi编辑器的高级用法
2.2 GCC编译器
2.2.1 GCC编译器介绍
2.2.2 GCC编译器基本用法
2.3 Makefile文件的使用
2.3.1 Makefile文件
2.3.2 Makefile文件的命名
2.3.3 Makefile文件的调用
2.3.4 Makefile文件的内容
2.3.5 make命令的特殊用法
2.4 GDB调试器
2.4.1 输出调试
2.4.2 GDB调试器
2.5 库
2.5.1 库相关概念
2.5.2 静态库和共享库
2.6 案例2:简易学生成绩计算
2.6.1 分析与设计
2.6.2 实施
2.6.3 编译与运行
习题
第3章 Linux程序设计初步
3.1 程序及进程的存储结构
3.2 变量的类型修饰符
3.3 命令行参数及获取
3.3.1 命令行参数
3.3.2 getopt获取命令行参数
3.4 环境变量
3.4.1 Shell变量
3.4.2 环境变量的相关命令
3.4.3 环境变量函数
3.5 时间管理
3.6 错误代码
3.7 标准I/O与文件I/O
3.8 案例3:设置环境变量
3.8.1 分析与设计
3.8.2 实施
3.8.3 编译与运行
习题
第4章 文件I/O
4.1 文件系统简介
4.1.1 UNIX/Linux文件系统概述
4.1.2 虚拟文件系统(VFS)
4.1.3 索引节点(inode)
4.1.4 文件的类型
4.1.5 文件的访问权限
4.2 访问文件的内核数据结构
4.3 文件基本I/O操作
4.3.1 打开/创建文件
4.3.2 读文件
4.3.3 写文件
4.3.4 文件定位
4.3.5 关闭文件
4.3.6 文件操作举例
4.4 文件访问的同步
4.5 案例4:文件复制命令的实现
4.5.1 分析与设计
4.5.2 实施
4.5.3 编译与运行
习题
第5章 文件属性
5.1 获取文件属性
5.2 用户/组ID与名字的转换
5.2.1 用户和组
5.2.2 获取文件的用户和组的信息
5.3 硬链接与符号链接
5.3.1 硬链接与符号链接的区别
5.3.2 相关的系统调用
5.4 dup/dup2
5.4.1 输入/输出重定向
5.4.2 系统调用dup/dup2
5.5 文件属性的修改
5.5.1 修改文件属性
5.5.2 改变文件所有者及所属组chown/fchown/lchown
5.5.3 改变文件访问权限chmod/fchmod
5.5.4 改变文件时间utime
5.5.5 改变文件长度truncate/ftruncate
5.6 案例5:显示文件长格式信息
5.6.1 分析与设计
5.6.2 实施
5.6.3 编译与运行
习题
第6章 目录文件管理
6.1 目录基本操作
6.1.1 打开目录
6.1.2 读目录
6.1.3 关闭目录
6.2 目录其他操作
6.2.1 切换当前目录
6.2.2 创建目录
6.2.3 删除目录
6.2.4 目录指针定位
6.3 案例6:显示指定目录下文件列表
6.3.1 分析与设计
6.3.2 实施
6.3.3 编译与运行
习题
第7章 进程控制
7.1 进程基本概念
7.1.1 进程和进程控制块
7.1.2 进程标识
7.1.3 用户标识
7.2 进程控制
7.2.1 创建进程
7.2.2 exec*系列函数
7.2.3 进程终止
7.2.4 等待进程结束
7.2.5 system函数
7.3 什么是Shell
7.3.1 用户登录Shell
7.3.2 Shell执行命令
7.4 案例7:实现简单的Shell
7.4.1 分析与设计
7.4.2 实施
7.4.3 编译与运行
习题
第8章 线程
8.1 线程概念
8.2 线程基本操作
8.3 线程间通信
8.4 案例8:线程实例
8.4.1 分析与设计
8.4.2 实施
8.4.3 编译与运行
习题
第9章 信号与管道
9.1 信号
9.1.1 信号的概念
9.1.2 信号的产生
9.1.3 信号的响应方式
9.1.4 sleep函数和pause系统调用
9.1.5 信号集
9.2 管道
9.2.1 管道基本概念
9.2.2 FIFO
习题
第10章 进程间通信
10.1 System V IPC简介
10.2 System V信号量
10.3 System V共享内存
10.4 System V消息队列
习题
第11章 网络编程
11.1 网络编程基本概念
11.1.1 常用网络相关命令和配置文件
11.1.2 软件体系结构
11.1.3 网络协议及OSI参考模型
11.1.4 IP地址和端口
11.1.5 字节顺序
11.1.6 网络数据传输方式
11.2 套接字编程基础
11.2.1 套接字简介
11.2.2 套接字地址结构
11.2.3 面向连接套接字通信过程
11.2.4 面向无连接套接字通信过程
11.3 套接字编程相关系统调用
11.3.1 系统调用socket
11.3.2 系统调用bind
11.3.3 系统调用listen
11.3.4 系统调用accept
11.3.5 系统调用connect
11.3.6 系统调用send
11.3.7 系统调用sendto
11.3.8 系统调用recv
11.3.9 系统调用recvfrom
11.3.10 系统调用close
11.3.11 系统调用shutdown
11.4 案例9:基于网络的进程间通信
11.4.1 分析与设计
11.4.2 实施
11.4.3 编译与运行
11.5 基于UDP的网络编程
11.6 域名解析
11.6.1 域名解析
11.6.2 IP地址形式转换
11.6.3 IP地址与主机名
习题
第12章 综合案例
12.1 Linux网络传输系统
12.1.1 构思
12.1.2 设计
12.1.3 实施
12.1.4 运行
12.2 简易的文件传输系统
12.2.1 构思
12.2.2 设计
12.2.3 实施
12.2.4 运行
习题
附录A Linux主要的系统调用
附录B ASCII码
参考文献
第1章 Linux日常运维管理
1.1 w命令
1.2 vmstat命令
1.3 top命令
1.4 sar命令
1.5 nload命令
1.6 监控I/O性能
1.7 free命令
1.8 ps命令
1.9 查看网络状态
1.10 Linux操作系统下的网络抓包
1.11 Firewalld和Netfilter
1.12 Netfilter 5表5链简介
1.13 iptables语法
1.14 iptables nat表应用
1.15 iptables规则备份与恢复
1.16 Firewalld的9个zone
1.17 Firewalld关于zone的操作
1.18 Firewalld关于services的操作
1.19 Linux任务计划
1.20 Linux系统服务管理工具chkconfig
1.21 systemd管理服务
1.22 unit和target简介
1.22.1 unit简介
1.22.2 target简介
1.23 Linux系统日志
1.23.1 dmesg命令
1.23.2 last命令
1.23.3 lastb命令
第2章 LAMP服务架构
2.1 LAMP服务架构介绍
2.2 MySQL和MariaDB数据库简介
2.3 MySQL和MariaDB数据库安装
2.3.1 MySQL数据库安装
2.3.2 MariaDB数据库安装
2.4 Apache服务安装
2.5 PHP源码编译安装
2.5.1 PHP版本介绍
2.5.2 PHP 5.6源码编译安装
2.5.3 PHP 7.X源码编译安装
2.6 Python源码编译安装
2.6.1 Python 3.6编译安装
2.6.2 安装Python扩展MySQL数据库
2.7 Apache结合PHP进行操作
2.8 Apache默认虚拟主机
2.9 Apache相关配置
2.9.1 Apache用户认证
2.9.2 域名跳转机制
2.9.3 Apache访问日志
2.9.4 静态文件不记录日期和时间
2.9.5 访问日志切割
2.9.6 静态元素过期时间
2.9.7 配置防盗链
2.9.8 访问控制Directory
2.9.9 访问控制FilesMatch
2.9.10 限定某个目录禁止解析PHP
2.9.11 限制user_agent
2.10 PHP相关配置
2.11 安装PHP扩展模块Redis
第3章 LNMP服务架构
3.1 LNMP服务架构简介
3.2 安装MySQL数据库
3.3 安装PHP
3.4 Nginx简介与安装
3.4.1 Nginx简介
3.4.2 Nginx安装
3.4.3 Nginx测试解析PHP
3.5 Nginx相关配置
3.5.1 Nginx默认虚拟主机
3.5.2 Nginx用户认证
3.5.3 Nginx域名跳转
3.5.4 Nginx访问日志
3.5.5 Nginx日志切割
3.5.6 静态文件不记录日期和时间
3.5.7 Nginx设置防盗链
3.5.8 Nginx进行访问控制
3.5.9 Nginx解析PHP相关设置
3.6 Nginx代理
3.7 Nginx负载均衡
3.8 Nginx配置SSL
3.8.1 生成SSL秘钥对
3.8.2 Nginx配置SSL
3.9 php-fpm配置
3.9.1 php-fpm的pool
3.9.2 php-fpm慢执行日志
3.9.3 open_basedir
3.9.4 php-fpm管理进程
3.10 部署phpMyAdmin
3.11 安装&设置Laravel框架
3.12 安装&设置Yii2框架
3.13 安装&设置ThinkPHP 5框架
3.14 安装&设置Django框架
3.14.1 安装Django框架
3.14.2 Django runserver
3.14.3 运行Hello World
3.15 安装&设置Flask框架
第4章 MySQL数据库技术实践
4.1 设置和更改root密码
4.1.1 设置MySQL数据库环境变量
4.1.2 设置MySQL数据库密码
4.1.3 修改MySQL数据库密码
4.1.4 重置MySQL数据库密码
4.2 连接MySQL的几种方式
4.3 MySQL常用命令
4.4 MySQL创建用户及授权
4.5 MySQL数据备份与恢复
4.6 MySQL主从复制监控
4.7 MySQL主从准备工作
4.8 设置MySQL主
4.9 设置MySQL从
4.10 测试MySQL主从同步
第5章 Tomcat服务
5.1 Tomcat介绍
5.2 安装JDK
5.3 安装Tomcat
5.4 设置Tomcat监听80端口
5.5 Tomcat虚拟主机
5.5.1 设置Tomcat虚拟主机
5.5.2 部署一个Java项目
5.6 Tomcat日志
第6章 Linux集群架构
6.1 Linux集群概述
6.2 Keepalived简介
6.3 Keepalived设置高可用集群
6.3.1 集群准备工作
6.3.2 设置Keepalived主服务器
6.3.3 设置Keepalived从服务器
6.3.4 区分主从Nginx服务
6.3.5 测试Keepalived高可用
6.4 负载均衡集群介绍
6.5 LVS介绍
6.6 LVS的调度算法
6.7 NAT模式的LVS搭建
6.7.1 NAT模式搭建准备工作
6.7.2 设置分发器
6.7.3 Real Server安装Nginx服务
6.8 DR模式的LVS搭建
6.8.1 DR模式的准备工作
6.8.2 设置LVS的DR模式
6.8.3 测试LVS的DR模式
6.9 Keepalived+LVS
第7章 Zabbix运维监控
7.1 Linux监控平台简介
7.2 Zabbix监控介绍
7.3 安装Zabbix监控
7.3.1 安装准备工作
7.3.2 ntpdate设置时间同步
7.3.3 安装Zabbix服务器端
7.3.4 Web界面安装Zabbix
7.3.5 修改Admin管理员密码
7.3.6 重置Admin管理员密码
7.3.7 安装Zabbix客户端
7.4 添加监控主机
7.4.1 Web界面添加Host主机
7.4.2 解决Zabbix页面乱码
7.5 使用SMTP发送邮件报警及定制报警
7.5.1 添加Triggers触发器
7.5.2 设置报警邮件发送
7.5.3 设置报警邮件接收
7.5.4 添加报警动作
7.5.5 设置邮件报警铃声
7.5.6 设置微信报警
7.6 Web监控和MySQL监控
7.6.1 Web监控
7.6.2 MySQL监控
7.7 TCP状态监控和Nginx监控
7.7.1 TCP状态监控
7.7.2 Nginx服务监控
7.8 Zabbix主动模式
7.8.1 添加主动模式模板
7.8.2 添加主动模式主机
第8章 NoSQL非关系型数据库
8.1 NoSQL非关系型数据库简介
8.2 Memcached
8.2.1 Memcached简介
8.2.2 安装Memcached
8.2.3 查看Memcached状态
8.2.4 Memcache命令行
8.2.5 Memcached数据的导入和导出
8.2.6 PHP连接Memcached
8.2.7 Memcached中存储Session
8.3 Redis
8.3.1 Redis简介
8.3.2 Redis安装
8.3.3 Redis持久化
8.3.4 Redis数据类型
8.3.5 Redis常用操作
8.3.6 Redis操作键值
8.3.7 Redis安全设置
8.3.8 Redis慢查询日志
8.3.9 PHP安装Redis扩展模块
8.3.10 Redis存储session
8.3.11 Redis主从配置
8.3.12 Redis集群简介
8.3.13 Redis集群搭建与配置
8.3.14 Redis集群操作
8.4 MongoDB
8.4.1 MongoDB简介
8.4.2 安装MongoDB
8.4.3 连接MongoDB
8.4.4 MongoDB用户管理
8.4.5 MongoDB创建集合和数据管理
8.4.6 PHP的MongoDB扩展
8.4.7 PHP的Mongo扩展
8.4.8 测试Mongo扩展
8.4.9 MongoDB副本集简介
8.4.10 MongoDB副本集搭建
8.4.11 MongoDB副本集测试
8.4.12 MongoDB分片介绍
8.4.13 MongoDB分片重要角色
8.4.14 MongoDB分片搭建
8.4.15 MongoDB分片测试
8.4.16 MongoDB备份与恢复
第9章 Jenkins持续化集成
9.1 Jenkins介绍
9.2 Jenkins安装
9.3 Jenkins发布PHP代码
9.4 Jenkins邮件设置
9.5 插件Email-ext
9.6 管理员密码破解
9.7 部署Java项目
9.7.1 部署Java项目之创建私有仓库
9.7.2 部署Java项目之下载Zrlog源码
9.7.3 安装Tomcat
9.7.4 部署Java项目之安装Maven
9.7.5 部署Java项目之安装插件
9.7.6 部署Java项目之构建Job
9.7.7 部署Java项目之手动安装JDK
9.7.8 部署Java项目之发布War包
第10章 Docker容器实践
10.1 Docker简介
10.1.1 Docker主要解决什么问题
10.1.2 Docker的历史
10.1.3 Docker是什么
10.2 Docker和KVM对比
10.3 Docker核心概念
10.4 安装Docker
10.4.1 Mac系统安装Docker
10.4.2 Windows系统安装Docker
10.4.3 CentOS 7系统安装Docker
10.5 Docker镜像管理
10.5.1 下载Docker镜像
10.5.2 设置阿里云Docker加速器
10.5.3 Docker基本命令
10.6 通过容器创建镜像
10.7 通过模板创建镜像
10.7.1 通过模板导入镜像
10.7.2 通过镜像导出文件
10.7.3 通过文件恢复镜像
10.8 Docker的基本管理
10.8.1 Docker容器管理
10.8.2 Docker仓库管理
10.8.3 Docker数据管理
10.9 Docker数据卷备份与恢复
10.9.1 Docker数据卷备份
10.9.2 Docker数据卷恢复
10.10 Docker网络模式与外部访问容器
10.10.1 Docker网络模式
10.10.2 外部访问容器
10.10.3 Operation Not Permitted解决方案
10.11 设置桥接网络
10.12 DockerFile创建镜像
10.12.1 DockerFile格式
10.12.2 DockerFile示例安装Nginx
10.13 docker compose部署服务与示例
第11章 搭建Kubernetes集群
11.1 Kubernetes(K8S)简介
11.2 Kubernetes基本概念
11.3 Kubernetes架构和组件功能
11.3.1 Master组件功能介绍
11.3.2 Node组件功能介绍
11.3.3 三方组件Etcd介绍
11.4 Kubernetes Cluster部署
11.4.1 集群环境规划
11.4.2 安装Docker服务
11.4.3 自签TLS证书
11.4.4 部署Etcd集群
11.4.5 Flannel集群网络工作原理
11.4.6 部署Flannel集群网络
11.4.7 创建Node的Kubeconfig文件
11.4.8 部署Master节点组件
11.4.9 部署Node组件
11.4.10 集群部署Nginx服务
11.5 Kubectl管理工具
11.5.1 Kubectl管理工具远程连接集群
11.5.2 Kubectl管理命令
11.5.3 Kubectl工具管理集群应用
第12章 Kubernetes管理维护与运用
12.1 YAML配置文件管理资源
12.2 Pod管理
12.2.1 Pod基本管理
12.2.2 Pod资源限制
12.2.3 Pod调度约束
12.2.4 Pod重启策略
12.2.5 Pod健康检查
12.2.6 Pod问题定位
12.3 Service
12.3.1 网络代理模式
12.3.2 服务代理
12.3.3 服务发现
12.3.4 发布服务
12.4 Ingress
12.4.1 部署Ingress
12.4.2 HTTP与HTTPS测试
12.4.3 部署Ingress TLS
12.5 数据管理
12.5.1 emptyDir
12.5.2 hostPath
12.5.3 NFS
12.5.4 GlusterFS
12.5.5 PersistentVolume
第13章 Kubernetes高可用架构和项目案例
13.1 Kubernetes Dashboard
13.2 部署集群应用
13.3 Kubernetes高可用架构
13.3.1 高可用架构详解
13.3.2 Master高可用部署
13.4 Kubernetes集群监控
13.5 Kubernetes集群日志管理与应用
13.5.1 日志系统方案介绍
13.5.2 部署ELK Stack
13.5.3 部署Filebeat日志收集工具
第 1章 Linux系统入门1
1.1 Linux的发展历史 1
1.2 Linux发行版 2
1.2.1 Red Hat Linux 2
1.2.2 Debian Linux 3
1.2.3 SuSE Linux 4
1.2.4 优麒麟Linux 4
1.3 Linux内核 5
1.3.1 宏内核和微内核 5
1.3.2 Linux内核概貌 6
1.4 如何学习Linux内核 9
1.5 Linux内核实验入门 10
1.5.1 实验1:在虚拟机中安装优麒麟Linux 18.04系统 10
1.5.2 实验2:给优麒麟Linux系统更换“心脏” 14
1.5.3 实验3:使用定制的内核runninglinuxkernel 15
1.5.4 实验4:如何编译和运行一个ARM Linux内核 19
第 2章 Linux内核基础知识 22
2.1 Linux常用的编译工具 22
2.1.1 GCC工具 22
2.1.2 ARM GCC 23
2.1.3 GCC编译 24
2.2 Linux内核中常用的C语言技巧 25
2.3 Linux内核中常用的数据结构和算法 31
2.3.1 链表 31
2.3.2 红黑树 34
2.3.3 无锁环形缓冲区 36
2.4 Vim工具的使用 38
2.4.1 Vim 8介绍 38
2.4.2 Vim的基本模式 38
2.4.3 Vim中3种模式的切换 39
2.4.4 Vim光标的移动 40
2.4.5 删除、复制和粘贴 41
2.4.6 查找和替换 41
2.4.7 文件相关 41
2.5 git工具的使用 42
2.5.1 安装git 43
2.5.2 git基本操作 43
2.5.3 分支管理 46
2.6 实验 48
2.6.1 实验1:GCC编译 48
2.6.2 实验2:内核链表 51
2.6.3 实验3:红黑树 52
2.6.4 实验4:使用Vim工具 52
2.6.5 实验5:把Vim打造成一个强大的IDE编辑工具 52
2.6.6 实验6:建立一个git本地仓库 60
2.6.7 实验7:解决合并分支冲突 62
2.6.8 实验8:利用git来管理Linux内核开发 65
2.6.9 实验9:利用git来管理项目代码 67
第3章 内核编译和调试 73
3.1 内核配置 73
3.1.1 内核配置工具 73
3.1.2 .config文件 74
3.2 实验1:通过QEMU调试ARM Linux内核 76
3.3 实验2:通过QEMU调试ARMv8的Linux内核 78
3.4 实验3:通过Eclipse+QEMU单步调试内核 81
3.5 实验4:在QEMU中添加文件系统的支持 85
第4章 内核模块 86
4.1 从一个内核模块开始 86
4.2 模块参数 90
4.3 符号共享 92
4.4 实验 93
4.4.1 实验1:编写一个简单的内核模块 93
4.4.2 实验2:向内核模块传递参数 95
4.4.3 实验3:在模块之间导出符号 95
第5章 简单的字符设备驱动 96
5.1 实验1:从一个简单的字符设备开始 97
5.2 字符设备驱动详解 102
5.2.1 字符设备驱动的抽象 102
5.2.2 设备号的管理 104
5.2.3 设备节点 104
5.2.4 字符设备操作方法集 105
5.3 实验2:使用misc机制来创建设备 107
5.4 一个简单的虚拟设备 109
5.4.1 实验3:为虚拟设备编写驱动 109
5.4.2 实验4:使用KFIFO改进设备驱动 112
5.5 阻塞I O和非阻塞I O 115
5.5.1 实验5:把虚拟设备驱动改成非阻塞模式 115
5.5.2 实验6:把虚拟设备驱动改成阻塞模式 118
5.6 I O多路复用 122
5.6.1 Linux的I O多路复用 122
5.6.2 实验7:向虚拟设备中添加I O多路复用支持 123
5.7 实验8:为什么不能唤醒读写进程 128
5.8 实验9:向虚拟设备中添加异步通知 129
5.9 本章小结 133
第6章 系统调用 134
6.1 系统调用概念 134
6.1.1 系统调用和POSIX标准 135
6.1.2 系统调用表 135
6.1.3 用程序访问系统调用 136
6.1.4 新增系统调用 137
6.2 实验 137
6.2.1 实验1:在ARM32机器上新增一个系统调用 137
6.2.2 实验2:在优麒麟Linux机器上新增一个系统调用 138
第7章 内存管理 139
7.1 从硬件角度看内存管理 139
7.1.1 内存管理的“远古时代” 139
7.1.2 分段机制 141
7.1.3 分页机制 142
7.1.4 虚拟地址到物理地址的转换 143
7.2 从软件角度看内存管理 144
7.2.1 free命令 144
7.2.2 从应用编程角度看内存管理 145
7.2.3 从内存布局图角度看内存管理 146
7.2.4 从进程角度看内存管理 150
7.3 物理内存管理 154
7.3.1 物理页面 155
7.3.2 内存管理区 159
7.3.3 分配和释放页面 162
7.3.4 分配小块内存 170
7.4 虚拟内存管理 177
7.4.1 进程地址空间 177
7.4.2 内存描述符mm_struct 178
7.4.3 VMA管理 180
7.4.4 malloc分配函数 183
7.4.5 mmap 185
7.5 缺页异常 188
7.5.1 do_page_fault函数 189
7.5.2 匿名页面缺页异常 190
7.5.3 文件映射缺页中断 190
7.5.4 写时复制缺页异常 191
7.5.5 缺页异常小结 192
7.6 内存短缺 193
7.6.1 页面回收算法 193
7.6.2 OOM Killer机制 194
7.7 内存管理实验 195
7.7.1 实验1:查看系统内存信息 195
7.7.2 实验2:获取系统的物理内存信息 197
7.7.3 实验3:分配内存 199
7.7.4 实验4:slab 200
7.7.5 实验5:VMA 201
7.7.6 实验6:mmap 203
7.7.7 实验7:映射用户内存 203
7.7.8 实验8:OOM 204
第8章 进程管理 205
8.1 进程 205
8.1.1 进程的来由 205
8.1.2 进程描述符 207
8.1.3 进程的生命周期 209
8.1.4 进程标识 212
8.1.5 进程间的家族关系 212
8.1.6 获取当前进程 214
8.2 进程的创建和终止 216
8.2.1 写时复制技术 216
8.2.2 fork()函数 217
8.2.3 vfork()函数 218
8.2.4 clone()函数 218
8.2.5 内核线程 219
8.2.6 do_fork()函数 219
8.2.7 终止进程 221
8.2.8 僵尸进程和托孤进程 222
8.2.9 进程0和进程1 222
8.3 进程调度 223
8.3.1 进程分类 224
8.3.2 进程优先级 224
8.3.3 时间片 225
8.3.4 经典调度算法 225
8.3.5 Linux O(n)调度算法 228
8.3.6 Linux O(1)调度算法 228
8.3.7 Linux CFS调度算法 228
8.3.8 进程切换 233
8.3.9 与调度相关的数据结构 239
8.4 多核调度 241
8.4.1 调度域和调度组 241
8.4.2 负载计算 244
8.4.3 负载均衡算法 245
8.5 实验 246
8.5.1 实验1:fork和clone 246
8.5.2 实验2:内核线程 247
8.5.3 实验3:后台守护进程 247