-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathLinuxOps
2294 lines (2042 loc) · 83.1 KB
/
LinuxOps
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
### 文件
**ls:查看当前目录下所有内容,全名list**
```bash
文件属性:
-:普通文件
d:目录文件
b:块设备
c:字符设备文件
l:符号连接文件
p:命令管道
s:套接字文件
文件权限:
9位数字,每3位一组 ,r(可读)、w(可写)、x(可执行)
文件硬链接次数
文件所属主(owner)
文件的属组(group)
文件大小(size),单位默认是字节
文件时间戳:
access time:访问时间
modify time:修改时间
change time:改变的时间,如修改文件属性或文件名
ls常用选项:
-l:显示文件属性,ls -l=ll
-h:做相应的单位转换显示
-a:显示所有文件
-A:显示.和..以为的所有文件
-d:显示目录自身属性
-i:显示文件的缩影接点号码(index node ,inode)
-r:逆序显示文件列表
-R:递归显示文件
```
---------------------------------------------------------------------
**cd:切换目录,全名change directory**
```bash
常用选项:
cd:切回家目录
cd ~:进入用户的家目录
cd -:在当前目录和前一次所在的目录来回切换(经常使用)
cd ..:切换至其父目录
```
---------------------------------------------------------------------
**pwd:打印当前目录,全名print working directory**
---------------------------------------------------------------------
** basename:显示一个目录的基名**
---------------------------------------------------------------------
**mkdir:创建目录,全名make directory**
```bash
常用选项:
-p:递归创建目录
Eg>1.mkdir -p /home/xxf/test
>2.mkdir -p /home/xxf/{x/y,a/b}
-v:打印细节
-m:创建时,设置权限。包括属主属组其他
Eg>mkdir -m 777 -p /home/xxf/test
```
---------------------------------------------------------------------
**rmdir:删除目录,全名remove empty directories**
```bash
常用选项:
-p:删除某目录后,如果其父目录为空,则一并删除之
-v:打印细节
```
---------------------------------------------------------------------
**tree:查看目录树**
```bash
常用选项:
-a:显示所有文件和目录
-A:使用ASNI绘图字符显示树状图而非以ASCII字符组合
-C:在文件和目录清单加上色彩,便于区分各种类型
-d:显示目录名称而非内容
-D:列出文件或目录的更改时间
-f:在每个文件或目录之前,显示完整的相对路径名称
-F:在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号
-g:列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码
-i:不以阶梯状列出文件或目录名称
-I:<范本样式> 不显示符合范本样式的文件或目录名称
-l:如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录
-n:不在文件和目录清单加上色彩
-N:直接列出文件和目录名称,包括控制字符
-p:列出权限标示
-h:同时打印文件和目录大小
Eg>1.tree -h dir
-P:<范本样式> 只显示符合范本样式的文件或目录名称
Eg>1.tree dir -P "*.sh"
-H和-o:将内容保存至指定路径下的指定格式
Eg>1.tree dir -H http://localhost -o out.html
-q:用"?"号取代控制字符,列出文件和目录名称
-s:列出文件或目录大小
-t:用文件和目录的更改时间排序
-u:列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码
-x:将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外
```
---------------------------------------------------------------------
**install:复制文件及设置属性**
```bash
复制模式:
单源复制:
install [OPTION]... [-T] SOURCE DEST
多源复制:
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-d:表示创建目录
Eg>1.install -d dir1 dir2 ...
-m, --mode=MODE:设定目标文件权限,默认为755
-o, --owner=OWNER:设定目标文件属主
-g, --group=GROUP:设定目标文件属组
```
---------------------------------------------------------------------
**mktemp:创建临时文件或目录**
mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来
```bash
常用选项:
-d:创建临时目录
```
---------------------------------------------------------------------
**ln:创建链接**
硬件连接:
1、只能对文件创建,不能应用于目录,文件的硬链接次数为2
2、不能夸文件系统
3、创建硬链接会增加文件被连接的次数
符号连接:
1、可应用于目录
2、可以跨文件系统
3、不会增加被连接文件的连接次数
4、其大小为指定的路径所包含的字符个数
```bash
常用选项:
ln SRC DEST:创建硬链接
-s:创建软连接
-i:显示文件的inode号
-v:显示执行详情
```
---------------------------------------------------------------------
**cat:文件文本查看工具,全名concatenate**
```bash
常用选项:
-s:压缩连续的空白行至一行
-n 显示行号,类似于nl
Eg>1.cat -s -n compare_and_test.sh
#使用tr移除换行符,将连续多个\n压缩成单个
>2.cat compare_and_test.sh | tr -s '\n'
-T:#将制表符显示为^|,在py语言中尤其有用,区分table符号还是空格
Eg>1.cat -T test.py
-E:打印文件每行的结尾符$
```
---------------------------------------------------------------------
**fuser:验证进行正在使用的文件或套接字**
```bash
常用选项:
-v:查看某文件上正在使用的进程
-k:把正在访问的进程给kill了
-km:把挂载点上的进程都关闭掉
```
---------------------------------------------------------------------
**dd:生成任意大小的文件**
```bash
常用选项:
count:表示个数
bs:表示大小
if:输入类型,默认为stdin
of:输出类型,默认为stdout
实例脚本:
1.生成一个100k的测试文件
#if如果不指定该参数,默认情况下dd会从stdin读取输入,同理如果不指定of,那么dd会将stdout作为默认输出
Eg>dd if=/dev/zero bs=100k count=1 of=data.file
```
---------------------------------------------------------------------
**tac:文件文本查看工具,反向**
```bash
常用选项:
-b:打印不包括文件名在内的文件类型信息
Eg>1.file -b $1
实例脚本:
Eg>1.生成文件统计信息
if [ $# -ne 1 ];
then
echo $0 basepath;
echo
fi
path=$1
Eg>2.数组操作
declare -A statarray;
while read line;
do
ftype=`file -b $line`;
let statarray["$ftype"]++;
done< <(find $path -type f -print)
#返回数组的索引列表
echo "-------File type and counts--------"
for ftype in "${!statarray[@]}"
do
echo $ftype:${statarray["$ftype"]}
done
```
---------------------------------------------------------------------
**file:查看文件类型**
```bash
常用选项:
-n:显示行号,类似于nl
-E:打印文件每行的结尾符$
```
---------------------------------------------------------------------
**wc:统计单词长度**
```bash
常用选项:
-l:统计行数
Eg>wc -l file.txt
-c:统计字符数
Eg>wc -c file.txt
-w:统计单词数
Eg>wc -w file.txt
-L:打印最长的行
Eg>wc -L file.txt
```
---------------------------------------------------------------------
**cut:分割文件**
```bash
常用选项:
-d CHAR:以指定的字符为分隔符
-f FIELDS:挑选出的字段
#:指定的单个字段
Eg>cut -f1 -d"\t" data.txt,表示表示显示第1个字段
#-#:连续的多个字段
Eg>cut -f1-3 -d"\t" data.txt,表示表示显示第1个到第3个字段
#,#:离散的多个字段
Eg>cut -f1,3 -d"\t" data.txt,表示表示显示第1个和第3个字段
--complement:类似反选,打印除第几行外其他的行
Eg>cut -f3 --complement file.txt,表示打印除第3行以外的
--output-delimter:输出分隔符
Eg>cut file.txt -c/-b-3 --output-delimter ","
```
---------------------------------------------------------------------
**sort:文本排序,仅仅是对显示文件的排序,而不影响源文件的顺序,是根据ASSII码的字符升序来排列**
```bash
常用选项:
-n:基于数值大小而非字符进行排序
-t CHAR:指定分隔符
-k #:指定排序的列
-C:判断一个文件是否排过序
-r:逆序排序
-o:输出文件
Eg>sort a.txt -o a.txt
-f:忽略字符大小写
-u:重复行只保留一份,这里的复复行:连续且相同
-M:按照月份来进行排序
-b:用于忽略文件中的前导空白字符
-d:以字典方式进行排序
-m:将排过序的文件合并
-z:去除结尾符
实例脚本:
1.判断是否排过序
sort -C file.txt;
if [ $? -eq 0 ];
then
echo Sorted
else
echo Unsorted
fi
2.排序过的文件进行排序,而且合并后不需要在进行排序
sort -m st1 st2
3.按第一列反序排序
#-k,指定排序的列,可结合-nr
#-n表示按照数字,-r表示反序,1表示列的索引
sort -nrk 1 data.txt
4.支持只选用键的某个范围的字符来排序
sort -nk 2,3 data.txt
5.使得sort的输出与以\0作为参数终止符的xargs命令相兼容
sort -z data.txt | xargs -0
6.忽略不必要的字符
sort -bd unsort.txt
7.-u重复行只打印一次
sort data.txt | uniq
等价于:sort -u data.txt
```
---------------------------------------------------------------------
**uniq:报告或移除重复的行**
```bash
常用选项:
-u:只显示唯一行
Eg>uniq -u unsorted.txt
-c:统计各行在文件出现的次数
Eg>sort data.txt | uniq -c
-d:找出重复的行
Eg>sort unsorted | uniq -d
-z:使用\0作为字节终止符,结合xargs使用
Eg>uniq -z file.txt
>uniq -z file.txt | xargs -0 rm
实例脚本:
1.统计每个字符出现的次数
input="ahebhaaaa"
#第一个sed:表示在每个字符后面追加一个换行符,使得每行只出现一个字符,确保我们能够进行sort排序
#第二个sed:最后一个空行会被替换成字符+\n,因为会多出一个换行符在最后形成一个空行,使用这个命令对其进行删除
OUPUT=`echo %input | sed 's/[^.]/&\n/g' | sed '/^$/d' | sort | uniq -c | tr -d ' \n'`
echo $OUTPUT
```
---------------------------------------------------------------------
**diff:查找文件差异并进行修补**
```bash
常用选项:
-u:使用unfied机制,即显示要修改的行的上下文,默认为3行
Eg>diff -u a.txt b.txt
-R:表示在撤销修改时,不会提示用户选择y/n
-N:将所有缺失的文件视为空文件
-a:将所有文件视为文本文件
-u:一体化输出
-r:递归目录下所有文件
实例脚本:
1.生成差异文件
Eg>diff a.txt b.txt
```
---------------------------------------------------------------------
**patch:向文件打补丁**
```bash
实例脚本:
1.patch将变动应用于任一一个文件
Eg>diff -u a.txt b.txt > diff.patch
patch -p1 a.txt < diff.patch
```
---------------------------------------------------------------------
**paste:合并文件**
```bash
常用选项:
-d:设置新的定界符
实例脚本:
1.按列进行合并,默认定界符为制表符,也可以使用-d明确指定
Eg>paste a.txt b.txt
Eg>paste a.txt b.txt -d ","
```
---------------------------------------------------------------------
**comm:逐行比较两个排序过的文件**
```bash
实例脚本:
1.求两个文件的相同和不同
Eg>sort a.txt -o a.txt;
sort b.txt -o b.txt;
comm a.txt b.txt
#输出结果中,第一列为a.txt特有的,第二列为b.txt特有的,第三列为共有的,可以使用-1,-2,-3对相应列进行过滤
2.只显示相同的列
Eg>comm a.txt b.txt -1 -2
3.打印不同的列-3
Eg>comm a.txt b.txt -3
4.去除格式化,合并两列不同的值
Eg>comm a.txt b.txt -3 | sed 's/^\t//'
```
---------------------------------------------------------------------
**split:分割文件**
```bash
常用选项:
-b:指定每个数据的大小,单位可以为k/M/G/c/w
Eg>split -b 10k data.file
-d:表示分割的文件数字结尾,默认是字母
-a:表示长度
Eg>split -b 10k data.file -d -a 4
为分割后的文件指定前缀
Eg>split -b 10k data.file -d -a 4 prefix
-l:不按照数据块大小来分,按照行数来进行分割
Eg>split -l 10 data.file
```
---------------------------------------------------------------------
**csplit:依据指定的条件和字符串匹配选项对文件进行分割**
```bash
常用选项:
-s:表示静默
-n:表示分割后文件名字后缀的数字个数
-f:表示分割后的文件前缀
-b:指定文件格式=前缀+后缀,server+%02d.log
Eg>csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log" ; rm server00.log
```
---------------------------------------------------------------------
**根据扩展名切分文件**
```bash
实例脚本:
1.根据扩展名进行切分文件名
#${VAR%.*},#从左向右执行,表示删除#左边的通配符,非贪婪;##表示执行贪婪模式
2.提取文件名扩展名
file_jpg="sample.jpg"
name=${file_jpg#.*}
3.%提取文件名,%从右向左执行,删除%右侧的通配符,属于非贪婪操作,%%表示执行贪婪操作
file_jpg="sample.jpg"
name=${file_jpg%.*}
```
---------------------------------------------------------------------
**test:测试文件**
需要注意:[]等价于test
```bash
常用选项:
1.文件测试
-f:如果给定的变量包含正常的文件路径或者文件名,则返回真
Eg>[ -f $file_var ]
-x:如果给定的变量包含的文件可执行,则返回为真
Eg>[ -x $var ]
-d:如果给定的变量包含的是目录。则返回为真
Eg>[ -d $var ]
-e:如果给定的变量包含的是文件,则返回为真
Eg>[ -e $var ]
-c:如果给定的变量包含的是一个字符设备文件的路径,则返回为真
Eg>[ -c $var ]
-b:如果给定的变量包含一个块设备文件的路径,则返回为真
Eg>[ -b $var ]
-w:如果给定的变量包含的文件可写,则返回为真
Eg>[ -w $var ]
-r:如果包含的文件可读,则返回为真
Eg>[ -r $var ]
-L:如果包含的文件是一个软连接,则返回为真
Eg>[ -L $var ]
2.字符串测试
=:中间的=两边的空格不能去掉,否则就变成了赋值操作
Eg>[[ $str1 = $str2 ]][[ $str1 == $str2 ]]
Eg>[[ $str1 != $str2 ]][[ $str1 > $str2 ]]
Eg>[[ $str1 < $str2 ]]
-z:如果str1包含的是空字符串,则返回为真
Eg>[[ -z $str1 ]]
-n:如果str1包含的是非空字符串,则返回为真
Eg>[[ -n $str1 ]]
3.数值测试
-eq:等于则为真
-ne:不等于则为真
-gt:大于则为真
-ge:大于等于则为真
-lt:小于则为真
-le:小于等于则为真
实例脚本:
1.测试字符串是否相等
num1="xxf"
num2="xxf"
if test $num1 = $num2
then
echo '两个字符串相等!'
else
echo '两个字符串不相等!'
fi
```
---------------------------------------------------------------------
**stat:查看文件状态**
---------------------------------------------------------------------
**touch:修改文件**
```bash
常用选项:
-c: 指定的文件路径不存在时不予创建;
-a: 仅修改access time;
-m:仅修改modify time;
Eg>1.touch -a/-m filename
-t+STAMP:加时间戳
[[CC]YY]MMDDhhmm[.ss]
-d:指定日期
Eg>1.touch -a/-m filename
实例脚本:
1.批量生成空白文件
for name in {0..100}.txt
do
touch $name
done
#上述{0..100}.txt其他写法
test{0..100}.txt
```
---------------------------------------------------------------------
**cp:拷贝文件**
cp:文件复制,规则:只有最后一个为目标。复制一个文件到一个文件 或者 多个文件
到一个目录!
cp /etc/passwd /tmp/ 复制到目录下并保存原文件名
cp /etc/passwd /tmp/test 看test是文件还是目录,目录:负责到目录内,文件则替换!
```bash
常用选项:
-r:递归复制目录
-i:交互式显示复制
-f:强制复制,覆盖
-p:保留源文件的属性,时间戳
-a:保留源文件的所有属性
-P:复制链接文件时保存为链接(默认是复制链接所指向的文件)
-d:复制时保持链接
-a:归档复制,常用与备份
```
---------------------------------------------------------------------
**scp:Linux之间复制文件和目录,文件是通过ssh加密通道进行传输的**
```bash
常用选项:
-r:递归复制
Eg>1.scp -r /home user@remotehost:/path
-p:在复制时保留文件的权限和模式
Eg>1.scp -r -p /home user@remotehost:/path
```
---------------------------------------------------------------------
**rm:删除文件或目录**
```bash
常用选项:
-i:询问是否确定删除
-f:强制删除
-r: 递归删除,如删除目录时
```
---------------------------------------------------------------------
**mv:移动或重命名文件 **
```bash
常用形式:
mv SRC DEST:当SRC和DEST同目录时,表示重命名
实例脚本:
1.批量重命名
Eg>count=1;
for img in *.jpg *.png
do
new=img-%count.${img##*.}
mv "$img" "$new" 2> /dev/null
if [ $? -eq 0 ];then
echo "rename success"
let count++
fi
done
```
---------------------------------------------------------------------
**rename:用字符串替换的方式批量改变文件名 **
```bash
实例脚本:
1.支持正则
Eg>rename 's/ /_/g'
rename *.jpg *.jpeg
rename 'y/A-Z/a-z/' *
2.结合find一起使用,将所有的mp3文件移动至tmp文件夹下
Eg>find / -type f -name "*.mp3" -exec mv {} /tmp \;
3.将文件名中所有的空格替换成_
Eg>find / -type f -name "*.mp3" -exec rename 's/ /_/g' {}\;
```
---------------------------------------------------------------------
**find:实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找**
```bash
常用选项:
-regex:表示正则表达式
Eg>find / -iregex "\(\.py|\.sh\)$"
-path:使用通配符来匹配文件路径或者文件
-name:使用给定的文件名来进行匹配
-i:表示忽略大小写
-o:表示或者,多条规律条件
Eg>find / -iname "*.sh" -o -name "*.txt"
!:表示取反
Eg>find / ! -name "*.txt"
-maxdepth/-mindepth:递归多级查找
Eg>递归打印当前以及下一级的目录中文件
find / -maxdepth 2 -type f
-type:根据文件类型来进行查找.常见的如下:
f:文件,d:目录,l:链接,c字符设备,b表示块设备,s表示套接字,p表示管道
Eg>find / -type f/d/l/c/b/s/p
根据文件时间来进行查找,常见如下:
按天:
atime:表示访问时间
mtime表示最后一次修改的时间
ctime表示文件元数据最后一次被修改的时间,默认单位为天
按分钟
amin:表示访问时间
mmin:表示最后一次修改的时间
cmin:表示文件元数据最后一次被修改的时间,默认单位为分钟
+:表示大于
-:表示小于
啥都没有表示等于
Eg>find / -atime/-mtime/-ctime +/-/7
-newer:表示用于比较时间戳的参考文件,比file.txt更新的文件
Eg>find / -type f -newer file.txt
-size:文件大小进行搜索,k/M/G,w子(2个字节),b表示块,c表示字节
Eg>find / -size +/-/10k
-delete:删除匹配的行
Eg>find / -type -f -name "*.txt" -delete
-perm:根据权限来进行查找
Eg>find / -type f -perm 644
-user:根据用户来进行查找
Eg>find / -type f -user xiaxuefei
-exec:实现更复杂的功能
-print:输出至标准输出;默认的动作
-ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息
-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
-ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认
-prune:使用过滤器
Eg>find / -type f -name "*.sh" -prune
实例脚本:
1.chown修改属主数组
对于每一个匹配的文件,{}会被替换成相应的文件名
Eg>find / -type f -user root -exec chown xxf {}\;
2.cat把所有*.c文件追加到一个文件中
Eg>find / -type f -name "*.c" -exec cat {} \;>all_c_files.txt
3.cp命令实现文件的复制
Eg>find / -type f -mtime +10 -name "*.c" -exec cp {} OLD \;
4.打印选中的文件
Eg>find / -type f -name "*.txt" -exec printf "Text file:%s\n" {} \;
5.查找/usr目录下不属于root, bin或hadoop的所有文件或目录
Eg>find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
```
---------------------------------------------------------------------
**locate:依赖于事先构建好的索引库**
更新策略:
系统自动实现(周期性任务);
手动更新数据库(updatedb)
```bash
常用选项:
-b:只匹配路径中的基名;
-c:统计出共有多少个符合条件的文件;
-r:BRE
```
---------------------------------------------------------------------
### 命令帮助
**type:显示指定命令所属类型,命令分为内置和外部两种类型**
```bash
常用选项:
type+command
```
---------------------------------------------------------------------
**whatis:输出作为参数的命令的简短描述**
```bash
常用选项:
whatis+command
```
---------------------------------------------------------------------
**whereis:返回命令的路径,而且还会打印其对应的命令手册的位置和源代码的位置**
```bash
常用选项:
whereis+command
-b:仅搜索二进制程序路径
-m:仅搜索使用手册文件路径
```
---------------------------------------------------------------------
**which:找出某个命令的位置**
```bash
常用选项:
which+command
--skip-alias:忽略别名
```
---------------------------------------------------------------------
**printenv:打印环境变量**
---------------------------------------------------------------------
**hash:查看最近命令命中次数,可参照history**
```bash
常用选项:
:列出
-d COMMAND:删除
-r:清空
```
---------------------------------------------------------------------
**history:查看命令历史,同Ctrl+R**
```bash
常用选项:
-c: 清空命令历史
-d offset:删除指定命令历史
-r: 从文件读取命令历史至历史列表中
-w:把历史列表中的命令追加至历史文件中
history #:显示最近的#条命令
常用操作:
!#:再一次执行历史列表中的第#条命令;
!!:再一次执行上一条命令;
!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令;
ESC+.:上条指令,同!$
配置参数:
HISTSIZE:shell进程可保留的命令历史的条数
HISTFILE:持久保存命令历史的文件,见.bash_history
HISTFILESIZE:命令历史文件的大小
HISTCONTROL:命令输出方式
=ignoredups:忽略重复的命令
=ignorespace:忽略以空白字符开头的命令
=ignoreboth:以上两者同时生效
```
---------------------------------------------------------------------
**alias:设置别名**
```bash
常用方式:
alias NAME='COMMAND':仅对当前shell有用
```
---------------------------------------------------------------------
**unalias:取消别名**
```bash
常用方式:
unalias NAME
```
---------------------------------------------------------------------
**more:分屏显示,翻屏至文件尾部后自动退出**
---------------------------------------------------------------------
**less:分屏显示,显示文件信息,默认不退出显示,q即可退出**
```bash
常用选项:
空格:向后翻一屏
b:向前翻一屏
ENTER:向后翻一行
k:向前翻一行
关键字查找
/KEYWORD:查找关键字
n:下一个
N:上一个
```
---------------------------------------------------------------------
**head:查看前n行**
```bash
常用选项:
-n:显示前n行,默认为10
```
---------------------------------------------------------------------
**tail:查看后n行**
```bash
常用选项:
-n:显示后n行,默认为10
Eg>1.tail -n x file.txt
-x:打印前x行之外的所有行
Eg>1.tail -n +x file.txt
-f:动态输出,有新的内容会输出值屏幕
Eg>1.tail -f file.txt
--pid:监视某个进程
Eg>1.pidnum=$(pidof xxx)
>tail -f file.txt --pid $pidnum
```
### 文档
**info:查看命令在线文档**
```bash
常用选项:
info+command
```
---------------------------------------------------------------------
**help:查看命令文档,指内部命令**
```bash
常用选项:
help+command
```
---------------------------------------------------------------------
**man:查看外部命令的帮助文档,在man模式下**
```bash
常用选项:
-M:到指定目录下查找命令手册并打开
man+command
man命令打开手册以后的操作方法:
翻屏:
空格键:向文件尾翻一屏;
b: 向文件首部翻一屏;
Ctrl+d:向文件尾部翻半屏;
Ctrl+u:向文件首部翻半屏;
回车键:向文件尾部翻一行;
k: 向文件首部翻一行;
G:跳转至最后一行;
Eg>1.#G: 跳转至指定行;
>2.1G:跳转至文件首部;
文本搜索:
/keyword:从文件首部向文件尾部依次查找;不区分字符大小写;
?keyword:从文件尾部向文件首部依次查找;
注意:
n: 与查找命令方向相同
N: 与查找命令方向相反
退出:
q
```
---------------------------------------------------------------------
### 时间
在Linux中,系统启动时从硬件读取日期和时间信息;读取完成以后,就不再与硬件相关联;时间分为系统时钟和硬件时钟。
**date:系统时钟**
```bash
常用选项:
%F、%T、%Y、%m、%d、%H、%M、%S、%s: 从1970年1月1号(unix元年)0点0分0秒到命令执行那一刻经过的秒数
Eg>date +%Y
```
---------------------------------------------------------------------
**hwclock:修改硬件时间**
```bash
常用选项:
-w:将系统时间修改为硬件时间,以系统时间为准
-s:将硬件时间修改系统为时间,以硬件时间为准
-r:显示硬件时间,同clock
```
---------------------------------------------------------------------
**cal:日历**
```bash
常用选项:
-m:显示月
-y:显示年
```
---------------------------------------------------------------------
### 用户与组
**基本简介**
```bash
用户管理基础概念:
用户类别:
管理员(0)
普通用户
系统用户组:1-499(CentOS6), 1-999(CentOS7)
登录用户组:500-60000(CentOS6), 1000-60000(CentOS7))
组类别:
组类别1:
管理员组
普通用户组
系统组
登录组
组标识:GroupID, GID
管理员组:0
普通用户组:1-65635
系统用户组:1-499(CentOS6), 1-999(CentOS7)
登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)
名称解析:groupname <--> gid
解析库:/etc/group
组类别2:
用户的基本组
用户的附加组
组类别3:
私有组:组名同用户名,且只包含一个用户;
公共组:组内包含了多个用户;
认证信息:
通过比对事先存储的,与登录时提供的信息是否一致;
password:
/etc/shadow
/etc/gshadow
密码的使用策略:
1、使用随机密码;
2、最短长度不要低于8位;
3、应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类;
4、定期更换;
加密算法:
对称加密:加密和解密使用同一个密码;
非对称加密:加密和解密使用的一对儿密钥;
密钥对儿:
公钥:public key
私钥: private key
单向加密:只能加密,不能解密;提取数据特征码;
定长输出
雪崩效应
常见算法:
md5: message digest, 128bits
sha:secure hash algorithm, 160bits
sha224
sha256
sha384
sha512
在计算之时加salt,添加的随机数
数据库文件:
/etc/passwd:用户的信息库
格式:login:password:uid:gid:comment:home:shell
注释:
name: 用户名
password:可以是加密的密码,也可是占位符x;
UID:
GID:用户所属的主组的ID号;
GECOS:注释信息
directory:用户的家目录;
shell:用户的默认shell,登录时默认shell程序;
/etc/shadow:用户密码
格式:login:encrpted_password:...
注释:
用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段
/etc/group:组的信息库
格式:group:password:gid:user_list
注释:
user_list为该组的用户成员;以此组为附加组的用户的用户列表
密码存储格式:单向加密,并借助于salt完成
```
**who:查看正在运行的用户**
```bash
常用选项:
-b:本次系统启动时间
-r:运行级别
```
---------------------------------------------------------------------
**w:查看登录的用户**
---------------------------------------------------------------------
**whoami:显示当前用户**
---------------------------------------------------------------------
**finger:查看当前用户信息**
```bash
常用选项:
:表示查看当前用户
finger +用户名:查看指定用户名信息
```
---------------------------------------------------------------------
**last:查看最后一次启动及其登录会话信息**
```bash
实例脚本:
last reboot:最后重启时间
```
---------------------------------------------------------------------
**lastb:获取失败的用户登录会话信息**
---------------------------------------------------------------------
**users:查看当前登录的主机列表**
---------------------------------------------------------------------
**id:显示用户的真和有效ID**
```bash
常用选项:
-u: 仅显示有效的UID
-g: 仅显示用户的基本组ID;
-G:仅显示用户所属的所有组的ID
-n: 显示名字而非ID
```
---------------------------------------------------------------------
**su:切换用户,全名switch user**
```bash
常用选项:
登录式切换:会通过读取目标用户的配置文件来重新初始化
su - USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
su USERNAME
注意:管理员可无密码切换至其它任何用户
```
---------------------------------------------------------------------
**chage:更改用户密码过期信息**
```bash
常用选项:
-d:最后一次修改时间
-E:过期时间
-I:非活动时间
-m:最短期限
-M:最长期限
-W:警告时间
```
---------------------------------------------------------------------
**newgrp:临时切换指定的组为基本组**
```bash
常用选项:
-: 会模拟用户重新登录以实现重新初始化其工作环境
```
---------------------------------------------------------------------
**gpasswd:修改组密码**
组密码文件:/etc/gshadow
```bash
常用选项:
-a USERNAME:向组中添加用户
-d USERNAME:从组中移除用户
```
---------------------------------------------------------------------
**groupdel:删除组**