linux命令

linux命令大全

文件常见处理工具

文件内容查看命令

cat

  • 打印文本文件
1
格式:cat [option]...file...
1
2
3
4
5
6
常见选项
-E:显示行结束符$
-A:显示所有控制符
-n:对一行进行编号
-b:非空行编号
-s:压缩联系的空行成一行
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
[22:56:46 root@localhost ~]#cat -E zhang2.sh 
#!/bin/bash$
# **********************************************************$
#$
# * Author : 张雪龙$
# * Email : 1024320609@qq.com$
# * Create time : 2022-07-20 15:52$
# * Filename : zhang2.sh$
# * Description : $
#$
# **********************************************************$
$
$
$
echo 第一个参数 $1 $
echo 第二个参数 $2 $
echo 第三个参数 $3 $
echo 第十个参数 ${10} $
echo 第所有参数 $* $
echo 第所有参数 $@$
Hello vim$
Hello vim2$
[22:57:02 root@localhost ~]#cat -A zhang2.sh
#!/bin/bash$
# **********************************************************$
#$
# * Author : M-eM-<M- M-iM-^[M-*M-iM->M-^Y$
# * Email : 1024320609@qq.com$
# * Create time : 2022-07-20 15:52$
# * Filename : zhang2.sh$
# * Description : $
#$
# **********************************************************$
$
$
$
echo M-gM-,M-,M-dM-8M-^@M-dM-8M-*M-eM-^OM-^BM-fM-^UM-0 $1 $
echo M-gM-,M-,M-dM-:M-^LM-dM-8M-*M-eM-^OM-^BM-fM-^UM-0 $2 $
echo M-gM-,M-,M-dM-8M-^IM-dM-8M-*M-eM-^OM-^BM-fM-^UM-0 $3 $
echo M-gM-,M-,M-eM-^MM-^AM-dM-8M-*M-eM-^OM-^BM-fM-^UM-0 ${10} $
echo M-gM-,M-,M-fM-^IM-^@M-fM-^\M-^IM-eM-^OM-^BM-fM-^UM-0 $* $
echo M-gM-,M-,M-fM-^IM-^@M-fM-^\M-^IM-eM-^OM-^BM-fM-^UM-0 $@$
^[[1;32mHello vim^[[0m$
^[[1;34mHello vim2^[[0m$

[22:57:24 root@localhost ~]#cat -n zhang2.sh
1 #!/bin/bash
2 # **********************************************************
3 #
4 # * Author : 张雪龙
5 # * Email : 1024320609@qq.com
6 # * Create time : 2022-07-20 15:52
7 # * Filename : zhang2.sh
8 # * Description :
9 #
10 # **********************************************************
11
12
13
14 echo 第一个参数 $1
15 echo 第二个参数 $2
16 echo 第三个参数 $3
17 echo 第十个参数 ${10}
18 echo 第所有参数 $*
19 echo 第所有参数 $@
20 Hello vim
21 Hello vim2
[22:58:05 root@localhost ~]#cat -b zhang2.sh
1 #!/bin/bash
2 # **********************************************************
3 #
4 # * Author : 张雪龙
5 # * Email : 1024320609@qq.com
6 # * Create time : 2022-07-20 15:52
7 # * Filename : zhang2.sh
8 # * Description :
9 #
10 # **********************************************************



11 echo 第一个参数 $1
12 echo 第二个参数 $2
13 echo 第三个参数 $3
14 echo 第十个参数 ${10}
15 echo 第所有参数 $*
16 echo 第所有参数 $@
17 Hello vim
18 Hello vim2


nl

  • 显示行号,相当于cat -b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[22:59:18 root@localhost ~]#nl zhang2.sh 
1 #!/bin/bash
2 # **********************************************************
3 #
4 # * Author : 张雪龙
5 # * Email : 1024320609@qq.com
6 # * Create time : 2022-07-20 15:52
7 # * Filename : zhang2.sh
8 # * Description :
9 #
10 # **********************************************************



11 echo 第一个参数 $1
12 echo 第二个参数 $2
13 echo 第三个参数 $3
14 echo 第十个参数 ${10}
15 echo 第所有参数 $*
16 echo 第所有参数 $@
17 Hello vim
18 Hello vim2

tac

  • 逆向显示文本内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[23:00:41 root@localhost ~]#tac zhang2.sh 
Hello vim2
Hello vim
echo 第所有参数 $@
echo 第所有参数 $*
echo 第十个参数 ${10}
echo 第三个参数 $3
echo 第二个参数 $2
echo 第一个参数 $1



# **********************************************************
#
# * Description :
# * Filename : zhang2.sh
# * Create time : 2022-07-20 15:52
# * Email : 1024320609@qq.com
# * Author : 张雪龙
#
# **********************************************************
#!/bin/bash

rev

  • 将同一行的内容逆向显示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[23:01:56 root@localhost ~]#rev  zhang2.sh 
hsab/nib/!#
********************************************************** #
#
龙雪张 : rohtuA * #
moc.qq@9060234201 : liamE * #
25:51 02-70-2202 : emit etaerC * #
hs.2gnahz : emaneliF * #
: noitpircseD * #
#
********************************************************** #



1$ 数参个一第 ohce
2$ 数参个二第 ohce
3$ 数参个三第 ohce
}01{$ 数参个十第 ohce
*$ 数参有所第 ohce
@$ 数参有所第 ohce
m0[iv olleHm23;1[
0[miv olleHm43;1[

hexdump

  • 查看非文本文件内容(二进制文件)
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
[23:04:16 root@localhost ~]#hexdump -c -n 512  /bin/passwd 
0000000 177 E L F 002 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000010 003 \0 > \0 001 \0 \0 \0 0 5 \0 \0 \0 \0 \0 \0
0000020 @ \0 \0 \0 \0 \0 \0 \0 200 { \0 \0 \0 \0 \0 \0
0000030 \0 \0 \0 \0 @ \0 8 \0 \n \0 @ \0 037 \0 036 \0
0000040 006 \0 \0 \0 004 \0 \0 \0 @ \0 \0 \0 \0 \0 \0 \0
0000050 @ \0 \0 \0 \0 \0 \0 \0 @ \0 \0 \0 \0 \0 \0 \0
0000060 0 002 \0 \0 \0 \0 \0 \0 0 002 \0 \0 \0 \0 \0 \0
0000070 \b \0 \0 \0 \0 \0 \0 \0 003 \0 \0 \0 004 \0 \0 \0
0000080 p 002 \0 \0 \0 \0 \0 \0 p 002 \0 \0 \0 \0 \0 \0
0000090 p 002 \0 \0 \0 \0 \0 \0 034 \0 \0 \0 \0 \0 \0 \0
00000a0 034 \0 \0 \0 \0 \0 \0 \0 001 \0 \0 \0 \0 \0 \0 \0
00000b0 001 \0 \0 \0 005 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
00000c0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
00000d0 350 \ \0 \0 \0 \0 \0 \0 350 \ \0 \0 \0 \0 \0 \0
00000e0 \0 \0 \0 \0 \0 \0 \0 001 \0 \0 \0 006 \0 \0 \0
00000f0 350 j \0 \0 \0 \0 \0 \0 350 j \0 \0 \0 \0 \0
0000100 350 j \0 \0 \0 \0 \0 < 005 \0 \0 \0 \0 \0 \0
0000110 H 006 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000120 002 \0 \0 \0 006 \0 \0 \0 \0 k \0 \0 \0 \0 \0 \0
0000130 \0 k \0 \0 \0 \0 \0 \0 k \0 \0 \0 \0 \0
0000140 200 002 \0 \0 \0 \0 \0 \0 200 002 \0 \0 \0 \0 \0 \0
0000150 \b \0 \0 \0 \0 \0 \0 \0 004 \0 \0 \0 004 \0 \0 \0
0000160 220 002 \0 \0 \0 \0 \0 \0 220 002 \0 \0 \0 \0 \0 \0
0000170 220 002 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000180 \0 \0 \0 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 \0 \0
0000190 004 \0 \0 \0 004 \0 \0 \0 260 002 \0 \0 \0 \0 \0 \0
00001a0 260 002 \0 \0 \0 \0 \0 \0 260 002 \0 \0 \0 \0 \0 \0
00001b0 D \0 \0 \0 \0 \0 \0 \0 D \0 \0 \0 \0 \0 \0 \0
00001c0 004 \0 \0 \0 \0 \0 \0 \0 P 345 t d 004 \0 \0 \0
00001d0 < W \0 \0 \0 \0 \0 \0 < W \0 \0 \0 \0 \0 \0
00001e0 < W \0 \0 \0 \0 \0 \0 244 \0 \0 \0 \0 \0 \0 \0
00001f0 244 \0 \0 \0 \0 \0 \0 \0 004 \0 \0 \0 \0 \0 \0 \0
0000200

分页查看文件内容

more

  • 可分页查看文件,配合管道实习输出信息的分页
1
格式: more [option...] file...
1
-d:显示翻页及退出提示

less

  • 实现分页查看文件或stdin输出,less命令是man命令使用的分页器
1
2
3
查看less有用的命令
/文本 搜索 文件
n/N 跳到下一个或上一个匹配

显示文本前面或后面的行内容

  • 显示文件或标准输入的前面文件
1
格式:head [option]... [file]...
1
2
3
4
选项
-c #:指定获取前#个字节
-n #:指定获取前#行,#如果是负数,表示从文件头取到倒数第#前,默认打开前10
-#:同上
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
[23:14:17 root@localhost ~]#head -n -5  zhang2.sh 
#!/bin/bash
# **********************************************************
#
# * Author : 张雪龙
# * Email : 1024320609@qq.com
# * Create time : 2022-07-20 15:52
# * Filename : zhang2.sh
# * Description :
#
# **********************************************************



echo 第一个参数 $1
echo 第二个参数 $2
echo 第三个参数 $3
[23:14:17 root@localhost ~]#head -n -5 zhang2.sh
#!/bin/bash
# **********************************************************
#
# * Author : 张雪龙
# * Email : 1024320609@qq.com
# * Create time : 2022-07-20 15:52
# * Filename : zhang2.sh
# * Description :
#
# **********************************************************

[23:14:17 root@localhost ~]#head -n -5 zhang2.sh
#!/bin/bash
# **********************************************************
#
# * Author : 张雪龙
# * Email : 1024320609@qq.com
# * Create time : 2022-07-20 15:52
# * Filename : zhang2.sh
# * Description :
#
# **********************************************************

[23:14:26 root@localhost ~]#head -n 5 zhang2.sh
#!/bin/bash
# **********************************************************
#
# * Author : 张雪龙
# * Email : 1024320609@qq.com

[23:15:26 root@localhost ~]#head -c 5 zhang2.sh
#!/bi[23:17:13 root@localhost ~]#


tail

  • 和head相反,查看文件或标准输入的倒数行
  • 格式
1
tail [option]...[file]...
  • 选项
1
2
3
4
5
6
7

-c #:指定获取后#字节
-n #:指定获取后#行,如果#是负数,表示从第#行开始到文件结束
-#:同上
-f:跟踪显示文件fd新追加的内容,常用于日志监控,相当于:--follow=descriptor,当文件删除再新建同名文件,将 无法继续跟踪文件
-F:跟踪文件名,相当于:--follow=name --retry,当文件删除在新建同名文件,将可以继续跟踪文件
tailif: 类似 tail -f,当文件不增长是并不访问文件,节约资源,centos8已无此工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[23:17:40 root@localhost ~]#tail -c 20 zhang2.sh 
1;34mHello vim2
[23:27:25 root@localhost ~]#tail -n 5 zhang2.sh
echo 第十个参数 ${10}
echo 第所有参数 $*
echo 第所有参数 $@
Hello vim
Hello vim2
[23:28:56 root@localhost ~]#tail -f zhang2.sh


echo 第一个参数 $1
echo 第二个参数 $2
echo 第三个参数 $3
echo 第十个参数 ${10}
echo 第所有参数 $*
echo 第所有参数 $@
Hello vim
Hello vim2
echo tail -f command

cut

  • 按列抽取文本
  • 格式
1
cut [option]...[file]...
  • 常用选项
1
2
3
4
5
6
7
8
9

-d delimit:指明分隔符,默认tab
-f fileds:
#:第#个字段,案例:3
#,#[,#]:离散的多个字段,例如:1,3,6
#-#:连续的多个字段,例如1-6
混合使用:1-3,7
-c:按字符切割
--output-delimiter=string指定输出分隔符
  • 案例
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
[23:37:14 root@localhost ~]#cut -d: -f1,3,5 passwd 
root:0:root
bin:1:bin
daemon:2:daemon
adm:3:adm
lp:4:lp
sync:5:sync
shutdown:6:shutdown
halt:7:halt
mail:8:mail
operator:11:operator
games:12:games
ftp:14:FTP User
nobody:65534:Kernel Overflow User
dbus:81:System message bus
systemd-coredump:999:systemd Core Dumper
systemd-resolve:193:systemd Resolver
tss:59:Account used for TPM access
polkitd:998:User for polkitd
geoclue:997:User for geoclue
rtkit:172:RealtimeKit
pipewire:996:PipeWire System Daemon
pulse:171:PulseAudio System Daemon
qemu:107:qemu user
usbmuxd:113:usbmuxd user
unbound:995:Unbound DNS resolver
gluster:994:GlusterFS daemons
rpc:32:Rpcbind Daemon
avahi:70:Avahi mDNS/DNS-SD Stack
chrony:993:
saslauth:992:Saslauthd user
libstoragemgmt:991:daemon account for libstoragemgmt
dnsmasq:983:Dnsmasq DHCP and DNS server
radvd:75:radvd user
sssd:982:User for sssd
cockpit-ws:981:User for cockpit web service
cockpit-wsinstance:980:User for cockpit-ws instances
colord:979:User for colord
rpcuser:29:RPC Service User
setroubleshoot:978:
flatpak:977:User for flatpak system helper
gdm:42:
clevis:976:Clevis Decryption Framework unprivileged user
gnome-initial-setup:975:
tcpdump:72:
sshd:74:Privilege-separated SSH
zxl:1000:zxl
mysql:123:
zhangxuelong:1001:
zhangsan:1002:
test01:1003:
test02:1004:
apache:48:Apache

[23:37:52 root@localhost ~]#cut -d: -f1-3,5 passwd
root:x:0:root
bin:x:1:bin
daemon:x:2:daemon
adm:x:3:adm
lp:x:4:lp
sync:x:5:sync
shutdown:x:6:shutdown
halt:x:7:halt
mail:x:8:mail
operator:x:11:operator
games:x:12:games
ftp:x:14:FTP User
nobody:x:65534:Kernel Overflow User
dbus:x:81:System message bus
systemd-coredump:x:999:systemd Core Dumper
systemd-resolve:x:193:systemd Resolver
tss:x:59:Account used for TPM access
polkitd:x:998:User for polkitd
geoclue:x:997:User for geoclue
rtkit:x:172:RealtimeKit
pipewire:x:996:PipeWire System Daemon
pulse:x:171:PulseAudio System Daemon
qemu:x:107:qemu user
usbmuxd:x:113:usbmuxd user
unbound:x:995:Unbound DNS resolver
gluster:x:994:GlusterFS daemons
rpc:x:32:Rpcbind Daemon
avahi:x:70:Avahi mDNS/DNS-SD Stack
chrony:x:993:
saslauth:x:992:Saslauthd user
libstoragemgmt:x:991:daemon account for libstoragemgmt
dnsmasq:x:983:Dnsmasq DHCP and DNS server
radvd:x:75:radvd user
sssd:x:982:User for sssd
cockpit-ws:x:981:User for cockpit web service
cockpit-wsinstance:x:980:User for cockpit-ws instances
colord:x:979:User for colord
rpcuser:x:29:RPC Service User
setroubleshoot:x:978:
flatpak:x:977:User for flatpak system helper
gdm:x:42:
clevis:x:976:Clevis Decryption Framework unprivileged user
gnome-initial-setup:x:975:
tcpdump:x:72:
sshd:x:74:Privilege-separated SSH
zxl:x:1000:zxl
mysql:x:123:
zhangxuelong:x:1001:
zhangsan:x:1002:
test01:x:1003:
test02:x:1004:
apache:x:48:Apache


[23:38:40 root@localhost ~]#df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 1871176 0 1871176 0% /dev
tmpfs 1899296 0 1899296 0% /dev/shm
tmpfs 1899296 9648 1889648 1% /run
tmpfs 1899296 0 1899296 0% /sys/fs/cgroup
/dev/sda2 104806400 5954468 98851932 6% /
/dev/sda5 99564036 727228 98836808 1% /data
/dev/sda1 1038336 259948 778388 26% /boot
tmpfs 379856 12 379844 1% /run/user/42
tmpfs 379856 0 379856 0% /run/user/0
[23:39:56 root@localhost ~]#df | cut -c 45-46

0
0
1
0
6
1
26
1
0

[23:40:58 root@localhost ~]#echo {1..5}
1 2 3 4 5
[23:43:22 root@localhost ~]#echo {1..5} | cut -d " " -f1-5 --output-delimiter="+"
1+2+3+4+5
[23:44:06 root@localhost ~]#echo {1..5} | cut -d " " -f1-5 --output-delimiter="+"|bc
15

paste

  • 合并多个文件同行好的列到一行
  • 格式
1
paste [option]...[file]...
  • 常用选项
1
2
-d #分隔符:指定分隔符,默认用tab
-s #所有行合并成一行显示
  • 案例
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
[23:50:07 root@localhost ~]#cat p2.txt 
1
2
3
4
5
6
7
[23:50:12 root@localhost ~]#cat p1.txt
a
b
c
d
e
f
g
[23:50:31 root@localhost ~]#paste p1 p2
paste: p1: 没有那个文件或目录
[23:50:42 root@localhost ~]#paste p1.txt p2.txt
a 1
b 2
c 3
d 4
e 5
f 6
g 7

[23:51:42 root@localhost ~]#paste -d":" p1.txt p2.txt
a:1
b:2
c:3
d:4
e:5
f:6
g:7

[23:52:17 root@localhost ~]#paste -s p1.txt p2.txt
a b c d e f g
1 2 3 4 5 6 7
[23:53:23 root@localhost ~]#paste -s -d "_" p1.txt p2.txt
a_b_c_d_e_f_g
1_2_3_4_5_6_7

[00:02:15 root@localhost ~]#cat user.txt
zhangsan
zxl
zhangxuelong
[00:02:31 root@localhost ~]#cat password.txt
123
321
123
[00:02:36 root@localhost ~]#paste -d ":" user.txt password.txt | chpasswd
[00:02:42 root@localhost ~]#

分析文本的工具

wc

  • 文本数据统计
  • 选项
1
2
3
4
-l:只计数行数
-w:只计数单词总数
-c:只计数字节总数
-L:显示文件中最长行的长度
  • 案例
1
2
3
4
5
6
7
8
9
10
11
12
13
[00:05:34 root@localhost ~]#wc passwd 
52 111 2830 passwd
[00:05:46 root@localhost ~]#cat passwd |wc
52 111 2830
[00:06:07 root@localhost ~]#cat passwd |wc -l
52
[00:06:26 root@localhost ~]#cat passwd |wc -c
2830
[00:06:30 root@localhost ~]#cat passwd |wc -m
2830
[00:06:35 root@localhost ~]#cat passwd |wc -L
94

sort

  • 文本排序
  • 格式
1
sort [option] file(s)
  • 常用选项
1
2
3
4
5
6
7
8
-r:执行反方向(由下至上)整理
-R:随机排序
-n:执行按数字大小整理
-h:人类可读排序,如:2K 1G
-f:选项忽略(fold)字符串的字符大小写
-u:选项(独特,unique),合并重复项,即去重
-t:c选项使用c做为字段界定符
-k #:选项安装使用c字符分隔的#列来整理能够使用多次
  • 案例
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
#按照uid(第三列)数字由大到小排序,并只显示3行
[00:06:48 root@localhost ~]#cat passwd |sort -t ":" -k3 -nr | head -n 3
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
test02:x:1004:1004::/home/test02:/bin/bash
test01:x:1003:1003::/home/test01:/bin/bash

#统计http访问量
[00:19:31 root@localhost ~]#head /var/log/httpd/access_log
192.168.100.1 - - [21/Jul/2022:11:07:35 +0800] "GET /favicon.ico HTTP/1.1" 404 196 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
192.168.100.1 - - [21/Jul/2022:11:07:36 +0800] "GET / HTTP/1.1" 403 199691 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
192.168.100.1 - - [21/Jul/2022:11:07:36 +0800] "GET /poweredby.png HTTP/1.1" 200 5714 "http://192.168.100.30/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
192.168.100.1 - - [21/Jul/2022:11:07:36 +0800] "GET /icons/poweredby.png HTTP/1.1" 200 643 "http://192.168.100.30/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
192.168.100.1 - - [21/Jul/2022:11:09:35 +0800] "GET / HTTP/1.1" 200 49 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
192.168.100.1 - - [21/Jul/2022:11:09:35 +0800] "GET /favicon.ico HTTP/1.1" 404 196 "http://192.168.100.30/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
192.168.100.1 - - [21/Jul/2022:11:10:27 +0800] "GET /favicon.ico HTTP/1.1" 404 196 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
192.168.100.1 - - [21/Jul/2022:11:10:27 +0800] "-" 408 - "-" "-"
192.168.100.1 - - [21/Jul/2022:11:10:27 +0800] "GET /favicon.ico HTTP/1.1" 404 196 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
192.168.100.1 - - [21/Jul/2022:11:10:28 +0800] "GET /favicon.ico HTTP/1.1" 404 196 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
[00:19:43 root@localhost ~]#cut -d " " -f1 | head
^C
[00:21:08 root@localhost ~]#cut -d " " -f1 /var/log/httpd/access_log | head
192.168.100.1
192.168.100.1
192.168.100.1
192.168.100.1
192.168.100.1
192.168.100.1
192.168.100.1
192.168.100.1
192.168.100.1
192.168.100.1
[00:21:27 root@localhost ~]#cut -d " " -f1 /var/log/httpd/access_log |sort -u
192.168.100.1
192.168.100.30

#统计分区使用率
[00:22:32 root@localhost ~]#df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 1871176 0 1871176 0% /dev
tmpfs 1899296 0 1899296 0% /dev/shm
tmpfs 1899296 9648 1889648 1% /run
tmpfs 1899296 0 1899296 0% /sys/fs/cgroup
/dev/sda2 104806400 5981732 98824668 6% /
/dev/sda5 99564036 727228 98836808 1% /data
/dev/sda1 1038336 259948 778388 26% /boot
tmpfs 379856 12 379844 1% /run/user/42
tmpfs 379856 0 379856 0% /run/user/0
[00:33:17 root@localhost ~]#df | cut -c "45-46"|sort -rn|head -n1
26

面试题:两个文件a.txt ,b.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
[00:38:13 root@localhost ~]#cat a.txt b.txt 
100
200
300
400
500
800
100
500
300
400
600
800
100
200
600
[00:38:32 root@localhost ~]#cat a.txt b.txt |sort -u
100
200
300
400
500
600
800

uniq

  • 去重命令,uniq命令从输入中删除前后相接的重复的行
  • 格式
1
uniq [option]...[file]...
  • 常见选项
1
2
3
-c:显示每行重复出现的次数
-d:仅显示重复过的行
-u:仅显示不曾重复的行
  • 案例
1
2
3
4
5
6
7
8
9
10
#统计http访问量次数
[00:39:15 root@localhost ~]#cut -d " " -f1 /var/log/httpd/access_log |uniq -c | sort -rn
16 192.168.100.1
14 192.168.100.1
5 192.168.100.30
3 192.168.100.1
1 192.168.100.30
1 192.168.100.30
1 192.168.100.1

diff

  • 命令比较两个文件之间的区别
  • 选项
1
-u:选项来输出统一的(unified)different格式文件,最适用于补丁文件
  • 案例
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
[01:34:42 root@localhost ~]#diff a.txt b.txt 
1,2d0
< 100
< 200
5c3
< 500
---
> 600
8c6,7
< 500
---
> 200
> 600
[01:34:58 root@localhost ~]#diff -u a.txt b.txt
--- a.txt 2022-07-23 00:37:40.166152947 +0800
+++ b.txt 2022-07-23 00:38:13.457150762 +0800
@@ -1,8 +1,7 @@
-100
-200
300
400
-500
+600
800
100
-500
+200
+600

[01:35:12 root@localhost ~]#diff -u a.txt b.txt > f.patch
[01:36:28 root@localhost ~]#rm -f b.txt
[01:36:40 root@localhost ~]#patch -b a.txt f.patch
patching file a.txt
[01:37:41 root@localhost ~]#cat a.txt a.txt.orig
300
400
600
800
100
200
600
100
200
300
400
500
800
100
500


patch

  • 复制在其他文件中进行的改变(要谨慎适用)
  • 选项
1
-b:选项来自动备份改变了的文件
  • vimidff

  • 相当于 vim -d

  • 案例

1
2
3
4
5
6
[01:38:06 root@localhost ~]#which vimdiff 
/usr/bin/vimdiff
[01:41:15 root@localhost ~]#ll /usr/bin/vimdiff
lrwxrwxrwx. 1 root root 3 922 2021 /usr/bin/vimdiff -> vim
[01:41:32 root@localhost ~]#vimdiff a.txt a.txt.orig
还有 2 个文件等待编辑

image-20220723014509036

cmp

  • 查看二进制文件的不同
  • 案例
1
2
3
4
5
6
7
8
9
10
11
[01:43:03 root@localhost ~]#cmp /bin/ls /bin/dir 
/bin/ls /bin/dir 不同:第 793 字节,第 1 行
[01:51:39 root@localhost ~]#hexdump -s 790 -cn 30 /bin/ls
0000316 U \0 274 313 L 027 Q l j 232 325 234 > 301 233 4
0000326 | 203 # l 004 302 \0 \0 \0 \0 003 \0 \0 \0
0000334
[01:53:09 root@localhost ~]#hexdump -s 790 -cn 30 /bin/dir
0000316 U \0 J 257 260 035 q B 266 347 340 376 . 345 } 372
0000326 347 Z < 365 206 216 \0 \0 \0 \0 003 \0 \0 \0
0000334

正则表达式

  • 基本表达式
  • 扩展表达式

基本正则表达式元字符

字符匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.:匹配任意单个字符(\n)外,可以是一个汉字或其他国家的文字
[]:匹配指定范围的任意单个字符,示例:[zhang]、[0-9]、[a-z]、[a-zA-Z]
[^]:匹配指定范围外的人员单个字符,示例[^zhang]
[:alnum:]:字母和数字
[:alpha:]:表示因为大小写字符,可以是a-z,A-Z
[:lower:]:表示小写字母,等价于[a-z]
[:upper:]:表示大小字母,等价于[A-Z]
[:blank:]:表示空白字符
[:space:]:包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:]:不可打印的控制字符
[:digit:]:十进制数字
---------------------------------------------------------------------------
\s:匹配任何空白字符,包括空格、制表符(水平和垂直)、换行符、换页符等等,等价于[\f\r\t\v],主要Unicode正则 表达式会匹配全角空格符
\S:匹配任何非空白字符,等价于[^\f\r\t\v]
\w:匹配任意一个字母,数字,下划线,汉字,其他国家文字的字符,等价于[_[:alnum:]字]

\W:匹配任意非一个字母,数字,下划线,汉字,其他国家文字的字符,等价于[^_[:alnum:]字]
  • 案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[02:12:38 root@localhost ~]#ls /etc/ |grep 'rc[.0-6]'
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
[02:13:00 root@localhost ~]#ls /etc/ |grep 'rc[.0-6]\.'
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d

匹配次数

  • 用在要指定次数的字符后面,用于指定前面电子阀要出现的次数
1
2
3
4
5
6
7
8
9
*:匹配前面字符的任意次数,包括0次,贪婪模式:尽可能长的匹配
.*:任意长度的任意字符
\?:匹配其前面的字符出现0次或1次,即可有可无
\+:匹配其前面的字符出现最少1次,即:肯定大于等于1
\{n\}:匹配前面的字符N
\{m,n\}:匹配前面的字符至少m次,最多n
\{,\n}:匹配前面的字符最多n次,<=n
\{n,\}:匹配前面的字符不少于n

案例

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
[14:03:27 root@localhost data]#ls
aaa.txt aa.txt abc.txt acb.txt ada.txt ad.txt aed.txt afc.txt agb.txt ddda.log
aab.txt aba.txt abd.txt acc.txt adb.txt aea.txt ae.txt afd.txt agc.txt
aac.txt abb.txt ab.txt acd.txt adc.txt aeb.txt afa.txt af.txt agd.txt
aad.txt '[abc][ab][abc].log' aca.txt ac.txt add.txt aec.txt afb.txt aga.txt ag.txt
[14:03:30 root@localhost data]#ls | grep "a\?.txt"
aaa.txt
aab.txt
aac.txt
aad.txt
aa.txt
aba.txt
abb.txt
abc.txt
abd.txt
ab.txt
aca.txt
acb.txt
acc.txt
acd.txt
ac.txt
ada.txt
adb.txt
adc.txt
add.txt
ad.txt
aea.txt
aeb.txt
aec.txt
aed.txt
ae.txt
afa.txt
afb.txt
afc.txt
afd.txt
af.txt
aga.txt
agb.txt
agc.txt
agd.txt
ag.txt
[14:03:55 root@localhost data]#ls | grep "a\+.txt"
aaa.txt
aa.txt
aba.txt
aca.txt
ada.txt
aea.txt
afa.txt
aga.txt
[14:06:10 root@localhost data]#ls | grep "a\{2,\}.txt"
aaa.txt
aa.txt
[14:07:03 root@localhost data]#ls | grep "a\{,2\}.txt"
aaa.txt
aab.txt
aac.txt
aad.txt
aa.txt
aba.txt
abb.txt
abc.txt
abd.txt
ab.txt
aca.txt
acb.txt
acc.txt
acd.txt
ac.txt
ada.txt
adb.txt
adc.txt
add.txt
ad.txt
aea.txt
aeb.txt
aec.txt
aed.txt
ae.txt
afa.txt
afb.txt
afc.txt
afd.txt
af.txt
aga.txt
agb.txt
agc.txt
agd.txt
ag.txt
[14:07:16 root@localhost data]#ls | grep "a\{1,2\}.txt"
aaa.txt
aa.txt
aba.txt
aca.txt
ada.txt
aea.txt
afa.txt
aga.txt
[14:07:44 root@localhost data]#ls | grep "a.*.txt"
aaa.txt
aab.txt
aac.txt
aad.txt
aa.txt
aba.txt
abb.txt
abc.txt
abd.txt
ab.txt
aca.txt
acb.txt
acc.txt
acd.txt
ac.txt
ada.txt
adb.txt
adc.txt
add.txt
ad.txt
aea.txt
aeb.txt
aec.txt
aed.txt
ae.txt
afa.txt
afb.txt
afc.txt
afd.txt
af.txt
aga.txt
agb.txt
agc.txt
agd.txt
ag.txt
[14:08:13 root@localhost data]#ls | grep "aaa*.txt"
aaa.txt
aa.txt

  • 匹配正负数
1

位置锚定

  • 位置锚定可以用于定位出现的位置
1
2
3
4
5
6
7
8
^:行首锚定,用于模式的最左侧
$:行尾锚定,用于模式的最右侧
^<PATTERN>$:用于模式匹配最右侧
^$:空行
^[[:space:]]*$:空白行
\< 或 \b:词首锚定,用于单词模式的左侧
\> 或 \b:词尾锚定,用于单词模式的右侧
\<PATTERN>:匹配整个单词
  • 案例
1
2
3
4
5
6
[14:31:34 root@localhost data]#grep '^[^#]' /etc/fstab 
UUID=23a498b0-3783-46e4-b55f-fdb1e1c699bb / xfs defaults 0 0
UUID=39c438a4-ad8d-4c9c-a001-7794dc13131a /boot xfs defaults 0 0
UUID=6c74e5a8-ebc9-4329-8454-b838f5833073 /data xfs defaults 0 0
UUID=b65aa78c-be4d-4c68-a276-c31aee04579a none swap defaults 0 0

shell编程

if

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
[01:19:16 root@localhost ~]#vim chengji.sh

1 #!/bin/bash
2 # **********************************************************
3 #
4 # * Author : 张雪龙
5 # * Email : 1024320609@qq.com
6 # * Create time : 2022-07-24 00:36
7 # * Filename : chengji.sh
8 # * Description :
9 #
10 # **********************************************************
11
12 read -p "请输入你的成绩: " score
13 [[ $score =~ ^(100|[0-9]{1,2})$ ]] || { echo "请输入合法的分数!" ; exit ; }
14 if [ $score -lt 60 ] ;then
15 echo "及格!"
16 elif [ $score -lt 80 ] ;then
17 echo "良好!"
18 elif [ $score -lt 100 ] ;then
19 echo "优秀!"
20 else
21 echo "不及格!"
22 fi


[02:11:55 root@localhost ~]#vim BMI.sh

1 #!/bin/bash
2 # **********************************************************
3 #
4 # * Author : 张雪龙
5 # * Email : 1024320609@qq.com
6 # * Create time : 2022-07-24 01:58
7 # * Filename : BMI.sh
8 # * Description :
9 #
10 # **********************************************************
11
12 read -p "请输入你的身高(m): " HIGH
13 if [[ ! "$HIGH" =~ ^[0-2]([.][0-9]{2})?$ ]] ;then
14 echo "请输入身高有误!"
15 exit 1
16 fi
17 read -p "请输入你的体重(kg): " WEIGHT
18 if [[ ! "$WEIGHT" =~ ^[0-9]{0,3}$ ]] ;then
19 echo "请输入体重有误!"
20 exit 2
21 fi
22
23 BMI=` echo $WEIGHT/$HIGH^2|bc `
24
25 if [ $BMI -le 18 ] ;then
26 echo "你太瘦了!"
27 elif [ $BMI -le 28 ] ;then
28 echo "你身材很棒!!"
29 else
30 echo "你太胖了!"
31 fi


case

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
[04:19:17 root@localhost ~]#vim menu.sh

11
12 echo -en "\E[$[RANDOM%7+31];1m"
13
14 cat <<EOF
15 请选择!
16 1)备份数据库
17 2)清理日志
18 3)软件升级
19 4)删库跑路
20 EOF
21
22
23 read -p "请输入上面数字1-5: " MENU
24 [[ $MENU =~ ^[1-5]$ ]] || { echo "请输入正确的数字!" ; exit ; }
25
26 case $MENU in
27 1)
28 echo "备份数据库"
29 exit
30 ;;
31 2)
32 echo "清理日志"
33 exit
34 ;;
35 3) echo "软件升级"
36 exit
37 ;;
38 4)
39 echo "删库跑路"
40 exit
41 ;;
42 *)
43 echo "输入错误!"
44 esac
45 echo -en "\E[0m"

for

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
[04:42:39 root@localhost ~]#bash jjcfb.sh 
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
[04:42:41 root@localhost ~]#vim jjcfb.sh

1 #!/bin/bash
2 # **********************************************************
3 #
4 # * Author : 张雪龙
5 # * Email : 1024320609@qq.com
6 # * Create time : 2022-07-24 04:34
7 # * Filename : jjcfb.sh
8 # * Description :
9 #
10 # **********************************************************
11
12
13 for i in {1..9} ;do
14 for j in `seq $i` ;do
15 echo -e "$i*$j=$[i*j]\t\c"
16 done
17 echo ""
18 done
19 exit

修改提示符格式范例

1
2
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"

提示符格式说明:

1
2
3
4
5
6
7
8
9
\e 控制符\033
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
! 命令历史数

开机后命令历史数


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!