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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
|
总结:
文件系统:基础、文件、目录管理,用户及权限管理、bash基本特性: 命令历史、hash、命令补全、路径补全、glob、快捷键、IO重定向、管道、变量、vim、bash编程、变量、配置文件、算术运算、测试、grep,fgrep,egrep、测试、find、特殊权限进程安全上下文、bash编程。
touch,state
mkdir,tree,rmdir,install,cp,rm,mv
用户: 用户认证 useradd,usermod,userdel passwd,chage
组;用户授权机制 groupadd,groupmod,groupdel gpasswd
chfn chsh finger su id
pwck
权限: chmod , chgrp , chown
--reference=IFILE
-R -L
命令历史:启动时,将HISTFILE变量中的文件中的内容加载至内。停止时,将历史中新增加的条目同步至HISTFILE变量中的文件中
hash: 运行命令时,bash提请内核运行为一个进程,bash在PATH变量中查找命令的代码,记录hash中。下次查找时,先找hash中(O1标准),再找PATH
命令补全: 从PATH变量查找
路径补全: 从用户所给目录中找
glob: *任意长度任意字符,? 任意单个字符 , [] 任意范围内的任意单个字符[abc] 或a或b或c , [^] 任意范围外的任意单个字符
快捷键: Ctrl + a 行首, Ctrl + e 行尾, Ctrl + l 清屏, Ctrl + s 暂停屏幕, Ctrl + q 取消暂停, Ctrl + c 撤消命令执行
管道:任何一个打开的文件,都有一个文件描述符追踪。上一个文件的标准输入作为下一个文件的标准输出。最后一个命令在当前shell的子进程中运行
IO: 覆盖,追加,
set
-C 关闭 ,合并 &> , > FILE
2
>&
1
, > FILE1
2
> FILE1
变量: 过程式编程: 选择、循环、顺序 以指令为中心组织数据。 对象式编程:以数据为中心组织指令。 bash过程式编程: magic number ,纯文本 ,
变量类型 内部数据的类型
弱类型 bash , 不申明,直接引用,赋值 ,直接运算隐式转换
强类型 必须申明
变量类型的作用:
内部数据的存储格式
数据的范围
参与的运算
vim
使用:
vim + FILE
vim -o | -O FILE1 FILE2
Ctrl + w 松手后按 : 上,下,左,右
vim FILE1 FILE2 ...
:first :pre :next :last
特性:
syntax on|off
set
ai|noai
set
ic|noic
set
hlsearch | nohlsearch
set
tabstop=#
set
nu|nonu
命令模式
光标跳转:
hjkl
w 行首
e 不在行尾,当前单词行尾。在行尾,下个单词行尾。
b 不在行首,当前单词行首。在行首,上个单词行首。
[] {}
[#][]x
[#]r | R
d[] | dd 删除
y[] | yy 复制
c[] | cc 删除并进入INSERT模式
其他操作
视图: v | V
进入编辑模式
i,I
a,A
o,O
c[],cc
保存并退出文件: ZZ
退出编辑模式: ESC
未行模式: 在命令模式中输入 :
:地址定界s@PATTERN@要替换的内容@g/i
地址定界:
% 全文
# 第#行
#
1
,# 从#
1
至#行的所有内容
/part1/,/part/ 第part1模式所匹配到的内容所在的行起始至第part所匹配的到的内容所在的行结束。正则表达式的元字符
#,/part/
/part/,#
$ 最后一行
#,$ 第#至$行
/part/,$
PATTERN:
支持正则表达式
.
* : .*
\? , \+
\{m,n\} , \{m\},\{n\}
支持(),正则表达式引擎将括号所匹配到内容保存至内置变量中,依次为\
1
,\
2
,....
要替换的内容:
支持后向引用
\
1
,\
2
,....
g/i
g: 当作行有多次出现模式匹配至的内容时,只替换一处
i: 忽略PATTERN的大小写匹配
退出文件:
:wq 保存文件内容并退出
:q 不保存文件内容并退出
bash编程
if
CONDITION; then
if
-ture ## CONDITION执行状态结果为
0
时,执行此分支
fi
if
CONDITION; then
if
-ture
else
if
-
false
## CONDITION执行状态结果非
0
时,执行此分支
fi
if
CONDITION; then
if
-ture
elif CONDITION; then
if
-ture
elif CONDITION; then
if
-ture
...
else
all-
false
## 以上条件均不满足时,执行此分支。只要满足其中一个分支,执行后会自动退出
fi
变量
本地变量 对当前shell有效,对其他无效
环境变量 对当前shell及子shell有效,对其他终端无效
局部变量 在调用函数运行的生命周期中变量有效
位置变量 类似于后向引用,正则表达式引擎存储括号中匹配到内容至内置的变量中。$
1
,$
2
,.... 存储向脚本传递的对应位置的参数,方便调用
特殊变量 $#,$@,$*,$? $*: 当作一个整体。 $@: 参数独立存在。 $?: 当作命令的返回值
本地变量
赋值变量: name=value
将value值存储至name变量名所表示的内存空间中
当value有空格时,需要用引号: name=
"1 2 3"
查看变量:
set
(本地和环境)
引用变量: ${name} 或 $name
${name} 容易与变量名混淆的字符,能作为变量名存在的字符和变量在一起时,需要用到引号
name=pig
echo
"there are some $names"
echo
"there are some ${name}s"
$name 不会产生混淆时,可以使用$name
环境变量
赋值变量: declare -x name=value , export name=value
1
)变量引用实现赋值
name=$mingetty
引用后,存回原处: name=$name
引用后,存回别处: xue=$name
2
)命令引用实现赋值
name=$(COMMAND)
name=`COMMAND`
3
)纯字符
name=value
查看变量
export
printenv
env
引用变量
$name
局部变量: 调用函数片段的生命周期内有效
位置变量
$
0
: 命令本身
$
1
: 向命令传递的第一个参数
$
2
: ...
shift # 换港符
特殊变量
$* 调用所有传递给命令的参数,所有参数当作一个整体
$@ 调用所有传递给命令的参数,每个参数独立存在
$# 传递给命令的参数的个数
$? 命令的执行状态结果
配置文件
全局: profile类
功能:
1
) 脚本
2
) 环境变量
配置文件
/etc/profile, /etc/profile.d
/*.sh, ~/.bash_profile
个人: bashrc类
功能:
1) 别名
2)本地变量
配置文件
/etc/bashrc, ~/.bash_bashrc
登陆式
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
1) su - user 或 su -l user
2) 终端通过账号密码
非登陆式
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
1) su user
2) 脚本
3) 图形界面下启动的终端
读取配置文件
1). 或 source 多次重读时,会重复出现(有副作用)
2)重新登陆终端
算术运算:
+ - * / %
let A=$B+$C
变量引用实现赋值
$[$B+$C]
$(($B+$C))
命令引用实现赋值
$(expr $A % $B)
注意: $(expr $A \* $B)
变量取模:
let A=$RANDOM%$B
测试
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
数值测试:
-eq,-ne
-lt,-le
-gt,-ge
例如:
test $A -lt $B
[ $A -eq $B ]
[[ $A -gt $B ]]
字符测试: 必须都用引号,除了PATTERN,且必须用[[]]
==
!=
~
例如:
test "$A" == "$B"
[ "1" == "$A" ]
[[ "$A" ~ PATTERN ]] PATTER支持正则表达式
-z STRING 是否存在且为空
-n STRING 是否存在且不为空
fgrep,grep,egrep
COMMAND PATTERN file
用PATTERN逐行匹配file中的每一行,将PATTERN匹配到的字符所在的行显示到标准输出
PATTERN 由特殊的元字符组成
不同工具使用不同的正则表达式引擎,或不同的特殊元字符
fgrep 纯文本字符
grep 正则表达式元字符
egrep 扩展正则表达式元字符
perl perl正则表达式元字符
正则表达式字符:
. 任意单个字符
* 对前面单个字符任意次数: .*
\? 前面单个字符0或1次
\+ 前面单个字符至少1次
\{m,n\}
\{m,\}
\{,n\}
\(\) 支持后向引用,正则表达式引擎将括号中的模式匹配到的内容存储在内置的变量中
扩展正则表达式字符
.
*
?
+
{m,n}
{m,}
{,n}
()
| 分组 : c|Cat 表示 c或 Cat (c|C)at表达cat或Cat
文件测试
-t fd
-s 文件有内容
[ -N FILE ] 最近一次查看文件后,是否被修改(重定向或编辑过)
[ FILE -ef IFLE ] 指向同一设备的同一inode
[ FILE -nt IFLE ] FILE是否比IFLE更新或修改时间戳比IFLE的时间戳离现在更近
-ot
-O | -G
-[fdbcLhsp]
-a | -e
-r | -w | -x
find命令
-ls , -delete , -fls /path/to/somefile
-exec ,-ok
find -exec {} \; 所有文件
find | xargs -I {} command {} 单独的文件
{} 代表每一个匹配到的文件
-user USERNAME , -group GRPNAME
-nouser , -nogroup
-uid UID , -gid GID
-name "glob_expr"
-iname "glob_expr"
-regex "expression"
-iregex "expression"
-type {f|d|c|b|l|s|p}
-size [+|-]#[KMG]
-perm [\|-]#
\( expr -a expr \)
-not \( expr -a expr \) 相当于 -not expr -o -not expr
\( expr -o expr \)
-not \( expr -o expr \) 相当于 -not expr -a -not expr
用户对文件的权限
用户同文件的属主,应用属主的权限
同文件的属组,应用属组的权限
应用其他用户的权限
进程的安全上下文
当用户对文件有权限运行为一个进程
进程的属主同用户名
进程的属主同文件的属主,应用属主的权限
同文件的属组,应用属组的权限
应用其他用户的权限
r 文件可用文件查看类命令查看 目录可用ls查看
w 文件可修改 目录可创建或删除目录中的文件
x 文件可运行为一个进程 目录: 可用ls -l 或cd
特殊权限
suid,sgid,sticky
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
suid: 当文件有suid权限时,文件被运行为一个进程后,其进程的属主为文件的的属主
sgid: 当目录有sgid权限时,任何用户在其目录下创建的文件的属组同目录的属组
sticky: 当目录有sticky权限时,目录中不同用户的文件只能由文件对应的用户删除
权限位的映射:
当存在x时,为小写
当不存在x时,为大写
例如:
文件为: rw- r-- ---
给予suid权限后: rwS r-- ---
文件为: rwx r-- ---
给予suid权限后: rws r-- ---
编程
for i in 列表; do
循环体
done
列表:
1) 直接给出
2) glob /etc/lib/*
3) 命令生成 $(ls /)
4) 命令 $(seq start step end) $(seq 1 2 100)
5) {start..end} {1..10}
系统管理
磁盘管理
分区、查看、调整、格式化、挂载、编程
RAID,LVM2
程序包管理
安装、重装、升级、降级、卸载、查询、检验、数据库、缓存
进程管理
htop,vmstat,glances
网络管理
命令行、配置文件、图形
系统启动流程
加电 --> 自检 --> Bootsquence(MBR) --> MBR工作 --> kernel工作 --> 只读切换挂载rootfs --> 运行init,init工作
grub命令
grub-install, chroot /mnt/sysimage --> root(hd0,0) --> setup (hd0)
磁盘管理
分区、查看、调整、格式化、挂载、编程
RAID,LVM2
mdadm -C /dev/md0 -a yes -l {1,0,5,10} -n # -x # /dev/sda{1,2,3}
mdadm -D /dev/md0
mdadm -S /dev/md0
mdadm /dev/md0 -f /dev/sda1
mdadm /dev/md0 -r /dev/sda1
mdadm /dev/md0 -a /dev/sdb1(fd)
/dev/sda{1,2,3}
pvcreate /dev/sda{1,2,3}
vgcreate -s #[KMG] VGNAME /dev/sda{1,2,3}
vgremove VGNAME
vgextend VGNAME /dev/sda4 (8e)
pvmove /dev/sda3 ; vgreduce /dev/sda3
lvcreate -L #[KMG] -n LVNAME VGNAME
lvpath:
/dev/mapper/VGNAME-LVNAME
/dev/VGNAME/LVNAME
lvcreate -L #[KMG] -s -n LVNAME_snap -p r lvpath
扩展:
lvextend -L [+]#[KMG] lvpath
resize2fs lvpath
缩减
umount lvpath
e2fsck -fy lvpath
resize2fs lvpath [-]#[KMG]
lvreduce -L [-]#[KMG] lvpath
mount lvpath DIR
程序包管理
安装、重装、升级、降级、卸载、查询、检验、数据库、缓存
安装:
rpm -ivh FILE.rpm
yum install
dnf install
apt-get install
重装:
rpm -ivh --replacepkgs
yum reinstall
dnf reinstall
apt-get reinstall
升级:
rpm -Uvh(安装或升级) -Fvh(仅能升级)
yum update
dnf update
apt-get update
降级
rpm -Uvh | -Fvh --oldpackages
yum downgrade
dnf downgrade
apt-get downgrade
卸载
rpm -e
yum remove
dnf remove
查询
仓库信息 yum|dnf repolist
程序包:
rpm -q -a
rpm -q -f CAPABILITY 文件由哪个包所提供
rpm -q --whatprovides CAPABILITY 文件或功能由哪个包所提供 yum|dnf --whatprovides CAPABILITY
rpm -q --whatrequires CAPABILITY
包内的信息
rpm -q -i
rpm -q --changlog
rpm -q -L
rpm -q -c, -d
rpm -q --scripts | --triggers | --conflicts
rpm -R 包依赖的功能 yum deplist
rpm --provides 包提供的功能
yum info
校验
rpm -V
rpm --import GPG_FILE
数据库
rpm --initdb 初始化,存在时,不执行任何操作
rpm --rebuildb 重建
缓存
yum clean {all|metadata|packages}
yum --disablerepo= expr_glob --enablerepo= expr_glob
yum --downloadonly --downloaddir=DIR
--noplugins
--nogpgcheck
--version
-q
rpm --nodigest | --nosignature | --import
--nodeps
--noscripts
--nofiledigest
--nomd5
-d
-c
-l
--force
进程管理
htop,vmstat,glances
网络管理
命令行、配置文件、图形
address:
192.168.1.1/24 或 192.168.1.1 255.255.255.0
ifconfig eth0 address [up|down]
ifconfig [IFACE] [up|down]
ifconfig IFACE metric N | mtu N | broadcast BROADCAST | multicast
ip addr
show|flush [dev IFACE] [label LABEL] [scope {global|link|host}] [primary|secondary]
add|del address dev IFACE [broadcast BROADCAST] [label LABEL] [scope {global|link|host}]
route add|del -host|-net address gw GW [dev IFACE] [scope {global|secondary}]
ip route add|del address via VIA dev IFACE [src SRC] [mtu MTU]
ip route show|flush via VIA [dev IFACE] src SRC
ip link show up|dev IFACE
ip link set
[ dev IFACE up|down ]
arp on | arp off
multicast on | multicast off
netstat | ss
-t 、 -u 、 -w
-a , -l , -n , -p
netstat -i
ss -m | -o STATE EXPRESSION
STATE
established
listen
EXPRESSION
'( dport = :ssh or sport = :ssh )'
系统启动流程
加电 --> 自检 --> Bootsquence(MBR) --> MBR工作 --> kernel工作 --> 只读切换挂载rootfs --> 运行init,init工作
1、CPU自举 ,装载ROM特定地址空间中的特定指令,完成自检,显示BIOS界面
2、依据BIOS配置,从上至下查找第一个有MBR的设备或能模拟MBR的设备,完成系统引导
磁盘: MBR
网卡: 通过网卡发送广播,找到dhcp服务器,获取IP和tftpIP,从tftp获取引导程序
3、MBR工作
1)找到MBR,运行MBR,在MBR后有一段空间作为1.5阶段(安装时,自动将1.5阶段放在MBR之后,是os所在分区的文件系统的驱动)
2)step1.5,bootloader通过1.5找到2
3)step2,提供菜单,将用户选择的内核及ramdisk加载至内存中, 将控制权交给kernel
4、kernel工作
1)自解压、展开
2)探测硬件
3)加载驱动(包括ramdisk)
5、ro挂载rootfs
6、运行用户空间第一个程序init
设定默认启动选项
1)系统初始化
2)启动或关闭服务
3)打印登陆提示符(字符终端或图形终端)
bootloader
windows: NT loader
Linux:
1) LILO Linux loader
2) grub grand uniform boot
1系 CentOS 5,6
2系 CentOS 7 (完成重写)
ramdisk分类
1)CentOS 5 ramdisk 将ramdisk加载至磁盘中时,内核将其当作磁盘,会再缓冲一次
2) CentOS 6,7 ramfs 将ramfs加载至磁盘中时,内核直接读取
init分类
CentOS 5 init 配置文件: /etc/inittab
1、大量进程创建、销毁
2、进程的依赖性
CentOS 6 upstart --> init(重命名) 配置文件: /etc/inittab(兼容centos5) /etc/init/*.conf
(BUS)消息总线进行进程间通信,让互相依赖的进程能接近并行起动进程。
dbus机制解决进程间的依赖关系
CentOS 7 systemd
只启动开机需要的服务,其他服务只是告诉你启动了,实际并没有启动。而是在第一次访问时,在临时启动,可实现秒级别启动。
进程管理: htop、glances、vmstat
top:
命令选项: -d 、-b 、-n
-d # 刷新间隔
-b 分批次显示
-n # 显示多少个批次
内建命令: s,k,q l,t,1,m
s 刷新间隔高速
k 杀进程
q quit
l uptime
t task and cpu
1 cpus
m mem and swap
top - 15:01:32 up 2 days, 4:12, 4 users, load average: 0.53, 0.44, 0.29
Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.5%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 1460312k total, 1403796k used, 56516k free, 135724k buffers
Swap: 2047996k total, 1268k used, 2046728k free, 1129308k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
uptime命令: l 控制显示
15:01:32 当前时间
up 2 days 系统在线时长
4 users 在线用户数
load average: 0.53, 0.44, 0.29
过去1,5,15分钟的平均负载
控制CPU及TASK显示: t
Tasks:
137 total, 总进程数
1 running,
136 sleeping,
0 stopped,
0 zombie
Cpu(s): 每个CPU,1
0.0%us,
0.5%sy,
0.0%ni,
99.3%id,
0.0%wa,
0.0%hi,
0.2%si,
0.0%st
控制Mem及Swap显示: m
Mem: 1460312k total, 1403796k used, 56516k free, 135724k buffers
Swap: 2047996k total, 1268k used, 2046728k free, 1129308k cached
htop (Fedora-EPEL)
a affinite cpu 缓存命令率
l list 列出进程打开的文件
s systemcall 进程发起的syscall
glances
服务端: glances -s -B 192.168.1.2 -p 8888 -P 123
客户端: glances -c -p 8888 -P 123 192.168.1.2
b 以字节显示网络速率
m/n/d 控制mount,network,disk模块的显示
t # 延迟间隔
1 每个cpu信息单独显示
-f /path/to/somefile galance显示的结果保存至文件中
-o {HTML|CSV} 文件的格式
vmstat [delay [count]]
delay 刷新延迟
count 刷新次数
-s 显示内存信息
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 1268 695236 169916 471904 0 0 13 46 56 90 7 21 61 10 0
procs
r running
b blocking
memory
swpd swap占用大小
free 空间内存
buff 内存分配为buff占据大小
cache
swap
si swap input 从内存至磁盘中的swap速率
so
io
bi block input 从磁盘至内存
bo
system
in/int interrupt
cs context swtich
cpu
us user space
sy system space
id idle
wa wait
st stole
grub
grub-install --root-directory=DIR DEVICE
DIR 为boot目录的上级目录
/boot --> /
/mnt/boot --> /mnt
DEVICE 磁盘 , 要给哪个磁盘安装grub
boot: linux resuce
chroot /mnt/sysimage
grub
root(hd0,0)
setup (hd0)
(hd#,#)
hd# #表示,第几个磁盘
# 表示,指定磁盘的第几个分区
内核编译
获取硬件信息:
lscpu, lspci, lsusb, lsblk
hal-device
开发环境
下载源码: kernel.org
展开至内核源码树
tar xf linux-VERSION.RELEASE.tar.xz -C /usr/local/src
ln -sv linux-VERSION.RELEASE linux
清理
make clean | mrproper | distclean
内核选项
make config
make menuconfig
make xconfig QT,gnome
make gconfig GTK,KDE
make allnoconfig
make defconfig
编译
make [-j #]
make dir/
make dir/file.[oiSs]
make dir/file.ko
make all [*]
make vmlinux
make modules [M]
make modules_install
make install
screen命令
screen [-S NAME]
exit
Ctrl + a + d
screen -ls
screen -r NUM
光盘启动流程
POST -- MBR(boot.cat) -- isolinux.bin -- kernel(initrd.img) -- anaconda
anaconda程序
运行:配置,安装,配置
配置文件: 命令段,程序包段,脚本段
kickstart文件生成
1、system-config-kickstart 和 xmanager
2、vim编辑
光盘生成命令:
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 i386 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /tmp/myiso
-b 2阶段
-c 1阶段
-o 输出文件
SELinux
配置文件: /etc/selinux/config <--- /etc/sysconfig/selinux
MAC: 强制访问控制
用户对文件的权限--> 进程对文件的权限 --> 文件type是否属于进程的domain的子集
是: 可访问
否:
1)
chcon [-R] -t TYPE FILE
restorecon [-R] FILE
2) 访问记录于/var/log/audit.log
3) setenforing 0
SELinuxTYPE: target: 部分
从permissive/enforing <--> disable:
1)改变配置文件
2)重启
从enforing <--> permissive
setenforing {0|1}
0: permissive
1: enforing
查看状态: getenforing
设定程序功能开启或关闭
获取: getsebool [-a | 程序功能名]
设置: setsebool [-P] SEBOOL=VALUE
-P 设置至规则库中,(找到规则,设定,转换为binary格式)
while语句:
while CONDITION; do
循环体
done
sed工具使用:
全文都会一行一行的加载至pattern space中,
每加载进一行, 首先匹配: 地址定界是否符合,符合:执行command,显示执行后的结果至标准输出.不符合,显示至标准输出.
n 加载一行后,显示后,读取下一行,覆盖本行,行的序号递增
sed [OPTIONS...] '地址定界command;[地址定界command;...]' FILE1 FILE2 ...
OPTIONS:
-i 将模式空间中的内容,写入文件中
-n 不显示默认输出的内容
-r extension reguler expresison
-f /PATH/TO/SOMEFILE
地址定界:
#[,#]
/pat/[,/pat/]
#~#
=
! 取反,在地址定界后
command
d, p, w /PATH/TO/FILE, r /PATH/TO/FILE, a \TEXT, c \TEXT, i \TEXT,
s 分隔符 模式 分隔符 修饰符
s//
s||
s,,
s@@
s##
模式
修饰符:
i/g/w/p
ignore
global
w /path/to/somefile
p 仅显示替换的结果
n,N
g,G get 模式 <-- hold
h,H hold 模式 --> hold
d,D 删除行
until, for, while, break, continue, case
while CONDITION; do
循环体 条件正确进入
done
until ! CONDITION; do
循环体 条件不确进入
done
for ((控制变量初始化;条件判断表达式;控制变量修正表达式)); do
循环体
done
while read line; do
循环体
done < /PATH/TO/SOMEFILE
while true; do
if CONDITION; then
condition
else
break
fi
done
until false; do
if CONDITION; then
break
else
continue
fi
done
case 变量 in
glob|纯字符)
statement
;;
...
*)
statement
;;
esac
函数
函数: 代码片断
函数名: 代码片断的简短名称
调用函数名:进入函数的上下文
函数的生命周期: 调用起始,调用后结束
函数返回状态码: 函数体中最后一个命令执行结束后或return # 返回的#的值
局部变量与本地变量相同时,
局部变量只存活在函数体中
函数/变量/文件名
1) <255
2) 见名知义: small_dog, smallDog
3) 区分大小写
4) 不能有关键字: if, else, then, while 等
函数语法;
funciton f_name {
函数体
}
f_name() {
函数体
}
systemd<CentOS 7的init程序>
完成用户空间的一切事务,但系统调用仍由kernel执行
init新特征:
并行启动进程
按需激活进程: 启动速度快
快照
依赖控制服务启动逻辑
/etc
/usr/lib
/run
/systemd/systemd
.service 管理服务
.target 模拟实现运行级别
.device 定义内核识别的设备
.mount 定义文件系统的挂载点
.socket 进程间通信的文件
.snapshot 管理系统快照
.swap 标识swap设备
.automount 文件系统自动挂载点
.path 定义文件系统中的一个文件或目录
没有脚本灵活
非由systemd启动的进程,systemd无法控制
systemd级别不是完全兼容: 2, 3, 4, multi-user.target 都是单用户模式
systemctl不会读取标准输入数据流
跟用户环境无关(PATH)
unit均受5min超时时长
systemctl {start|stop|restart|status|relaod|reload-or-restart|try-restart} name.service
服务状态:
systemctl list-units --type TYPE [--all]
TYPE:
service 服务的状态
target 运行级别
是否运行:
systemctl is-active name.service
依赖:
systemctl list-dependencies name.service
开机是否自启:
systemctl list-unit-files --type service
is-enabled name.service
设定服务开机是否自启
systemctl enable|diable|reenable name.service
systemctl mask|umask name.service
调整运行级别:
systemctl isolate name.target
设定默认运行级别:
systemctl get-default
systemctl set-default name.target
systemctl rescue|halt|power off|reboot|suspend|hibenate|hybrid-sleep
suspend 挂起
hibenate 保存快照
hybrid-sleep 快照并挂起
bash编程:
过程式编程: c 完成特定功能
选择/循环/顺序
对象编程: 类,多次调用, c++, java
数组:
${array[index]}
index: [0,....]
数值 declare -a
字符 declare -A (bash version 4.0)
赋值:
array[index]=
array=("val1" "val2" "val3" ...)
array=([0]="val1" [1]="val2" [10]="val3" ...)
read -a array
array[${#array[@]}]=
销毁:
unset array[index]
字符串:
知道变量的存储值时可以使用:非通用格式
${var:3} 过3取所有
${var:3:3} 过3取3个
${var: -3} 取后3个
${var#*/
} 左向右,至第一个匹配到/全删除
${
var
##*/} 左向右,至所有匹配到/全删除
var
=/
var
/log/message
基名: echo ${
var
##*/}
${
var
%/*} 右向左,至第一个匹配到/全删除
${
var
%%/*} 右向左,至所有匹配到/全删除
var
=/
var
/log/message
目录名: echo ${
var
%/*}
替换:
${
var
/pattern} 左向右,匹配到pattern的字符串,第一个删除
${
var
/pattern/substi} 左向右,匹配到pattern的字符串,第一个替换
${
var
//pattern} 左向右,匹配到pattern的字符串,所有删除
${
var
//pattern/substi} 左向右,匹配到pattern的字符串,所有替换
${
var
/#pattern} 左向右,匹配到pattern的字符串,首行删除
{
var
/#pattern/substi}
${
var
/%pattern}
{
var
/%pattern/substi}
默认值:
不存在时,返回string
${
var
:-STRING}
${
var
:=STRING}
存在时,返回STRING
${
var
:+STRING}
不存在,报错:
${
var
:?STRING}
配置文件:
# vim file1
HOSTNAME=lcc.org
# vim file.sh
#!/bin/bash
#
[ -f file1 ] && source file1
HOSTNAME=${HOSTNAME:-lcc.org}
if
[ -z ${HOSTNAME:-} ]; then
HOSTNMAE=lcc.org
fi
hostname $HOSTNMAE
install命令创建目录或复制文件
install -d -m MODE -o OWNER -g GROUP FILE
mktemp:创建临时文件或目录
mktemp [-d] [-p DIR] [--tmpdir DIR] [-u] FILE.XXX
XXX 至少
3
个
awk命令
~ /pat/
!~
""
==
""
print item1,item2
printf
"FORMAT"
,item1,item2
%i,%d decimal,interger
%s 字符串
%e 科学计数法
%f floating
%G %e + %f
#[.#] 宽度 .# 精度
+ 符号
- 左对齐: 默认右对齐
模式支持扩展正则
$表示字段
""
中不用使用变量,引用字符
表示行数;NR >= # && NR <= #
取反在PATTERN前
awk [OPTION...]
'PATTERN{ACTION STATEMENT;ACTION STATEMENT;...}'
FILE1 FILE2 ...
-F
''
相当于 -v FS=
''
-v OFS=
''
字段分隔符: FS, OFS
行分隔符: RS, ORS
行:NR, FNR
ARGC 命令行除了program个数
ARGV 将命令行参数保存于ARGV的数组中
if
(condition) {statement} 或
if
(condition) statement
if
(condition) {statement}
else
{statement}
for
(condition) {statement}
while
(condition) {statement} 或
do
{statement}
while
(condition)
next
# awk -F
':'
'{if ($NF != "/bin/bash"){next} else {print $0}}'
/etc/passwd
遍历数组:
for
(i
in
array) {print i,array[i]}
替换:
sub(r,s,t)
gsub(r,s,t) (
"o"
.
"O"
,$
1
)
split($
5
,ARRAY,
"%"
)
|
本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1965815,如需转载请自行联系原作者