一、wc 统计¶
word count/calcuate 统计文件中单词情况,大小,行数, 未来工作中用于统计行数
简单使用是统计文件的行数,未来还可以统计一些命令的结果有多少行(个).
| wc选项 | 说明 |
|---|---|
| -l | 统计行数 |
#案例04 统计/etc/services文件有多少行
wc -l /etc/services
11176 /etc/services
说明:未来wc使用案例,一般都是配合其他命令,可以取出xxxx次数. 还可以放在脚本中进行判断.
案例05 统计系统用户登录错误次数
#1. 过滤出日志中错误信息
$ grep 'Failed password' /var/log/secure
Jul 19 09:32:44 oldboy-83-lnb-v2 sshd[7082]: Failed password for root from 10.0.0.1 port 65157 ssh26 Jul 19 09:32:55 oldboy-83-lnb-v2 sshd[7082]: Failed password for root from 10.0.0.1 port 65157 ssh2
#2. 交给wc -l 统计次数
grep命令的结果传递给wc -l命令
grep 'Failed password' /var/log/secure | wc -l
管道符号说明:
#格式说明
命令1 | 命令2
#命令说明
把前一个命令的结果,传递给后面的命令使用管道符号 |
二、排序去重组合¶
未来生产环境,统计日志,日志分析,系统信息统计,必备命令。
- sort:排序
- uniq: 去重并统计次数
2.1 sort-排序¶
| sort 选项 | 说明 |
|---|---|
| -n | number把要排序的内容当做是 数字 ,按照数字大小进行排 序,默认是升序排序(小大). |
| -k | 指定某一列,根据某一列进行排序. |
| -r | u7[iITeY€²-oldreverse逆序排序 |
| -t | 指定分隔符,只能指定1个字符. 默认是空格. |
2.1.1 基本数字排序¶
案例06 对文件中的数字进行排序
[root@oldboy ~]# cat day005-06-sort.txt
99
1
10
23
3
0000
02
9
19
#按照数字的第一位进行排序(不常用)
[root@oldboy ~]# sort day005-06-sort.txt
0000
02
1
10
19
23
3
9
99
#按照数字的大小进行排序(常用,默认从小到大)
[root@oldboy ~]# sort -n day005-06-sort.txt
0000
1
02
3
9
10
19
23
99
#按照数字的大小进行排序(常用,从大到小)
[root@oldboy ~]# sort -rn day005-06-sort.txt
99
23
19
10
9
3
02
1
0000
注意:sort默认是按照字母/字符进行对比,会造成数字对比失败.使用-n进行解决
2.1.2 对文件中某一列进行排序¶
案例07 对文件中某一列进行排序
[root@oldboy ~]# vim day005-07-sort.txt
lidao 18
wang 16
15w 38
#对第二列数字进行从小到大的排序
[root@oldboy ~]# sort -n -k 2 day005-07-sort.txt
wang 16
lidao 18
15w 38
[root@oldboy ~]# sort -nk 2 day005-07-sort.txt
wang 16
lidao 18
15w 38
#对第二列数字进行从大到小的排序
[root@oldboy ~]# sort -rnk 2 day005-07-sort.txt
15w 38
lidao 18
wang 16
企业面试题: ll /etc/ 取出大小最大的前5个.
#方法01 :对ll /etc/第5列进行逆序排序
ll /etc/ |sort -rnk5 |head -5
#方法02 默认排序,取出最后5个
ll /etc/ |sort -nk5 |tail -5
2.1.3 指定分隔符进行排序¶
案例07-2: 对passwd文件的第3列进行排序(逆序)
[root@oldboy ~]# cp /etc/passwd .
[root@oldboy ~]# ls
anaconda-ks.cfg day005-06-sort.txt day005-07-sort.txt oldboy-a.txt oldboy-b.txt passwd
[root@oldboy ~]# sort -t ':' -rnk3 passwd
zq:x:1000:1000:zq:/home/zq:/bin/bash
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
2.1.4 多列排序¶
案例08 通过sort对多列进行同时排序
[root@oldboy ~]# cat >day005-08-sort.txt<<EOF
oldboy 40 linux学院 20000
oldboy 40 linux学院 30000
oldgirl 22 linux学院 30000
oldgirl 22 linux学院 10000
oldli 18 linux学院 21000
old6 8 linux学院 15000
old5 8 linux学院 25000
old4 7 linux学院 30000
old3 7 linux学院 4040
old2 7 linux学院 30300
old1 7 linux学院 50000
EOF
#将第二列数字从大到小排序
[root@oldboy ~]# sort -rn -k2 day005-08-sort.txt
oldboy 40 linux学院 30000
oldboy 40 linux学院 20000
oldgirl 22 linux学院 30000
oldgirl 22 linux学院 10000
oldli 18 linux学院 21000
old6 8 linux学院 15000
old5 8 linux学院 25000
old4 7 linux学院 30000
old3 7 linux学院 4040
old2 7 linux学院 30300
old1 7 linux学院 50000
#对第二列数字和第四列数字从大到小排序(优先对第2列排序,第4列是辅助的,也就是说在第2列数字相同的情况下再进行第4列数字排序)
[root@oldboy ~]# sort -rn -k2 -k4 day005-08-sort.txt
oldboy 40 linux学院 30000
oldboy 40 linux学院 20000
oldgirl 22 linux学院 30000
oldgirl 22 linux学院 10000
oldli 18 linux学院 21000
old5 8 linux学院 25000
old6 8 linux学院 15000
old1 7 linux学院 50000
old2 7 linux学院 30300
old4 7 linux学院 30000
old3 7 linux学院 4040
企业面试题:以.为分隔符对第3列和第4列排序
$ cat a.txt
192.168.1.1
192.168.1.22
192.168.1.3
192.168.3.1
192.168.3.22
192.168.3.3
192.168.2.1
192.168.2.22
192.168.2.3
192.168.5.1
192.168.5.22
192.168.5.3
$ sort -t '.' -n -k3,3 -k4,4 a.txt
192.168.1.1
192.168.1.3
192.168.1.22
192.168.2.1
192.168.2.3
192.168.2.22
192.168.3.1
192.168.3.3
192.168.3.22
192.168.5.1
192.168.5.3
192.168.5.22
2.2 uniq¶
去重(去掉重复的留下唯一的)
| uniq命令选项 | 命令说明 |
|---|---|
| uniq -c | 去重并显示次数(重复次数),一般和sort结合使用 |
#新建测试文件
[root@oldboy ~]# vim uniq.txt
oldboy
oldboy
oldboy
oldboy
lidao
lidao
smile
blood
blood
oldboy
oldboy
lidao
lidao
lidao
smile
smile
smile
blood
blood
#1、先对数据进行排序,相同的数据会在一起
[root@oldboy ~]# sort uniq.txt
blood
blood
blood
blood
lidao
lidao
lidao
lidao
lidao
oldboy
oldboy
oldboy
oldboy
oldboy
oldboy
smile
smile
smile
smile
#2、然后通过uniq -c去重并统计次数
[root@oldboy ~]# sort uniq.txt | uniq -c
4 blood
5 lidao
6 oldboy
4 smile
#3、然后可以对uniq -c结果进行排序(最大的在最上面,降序排列)
[root@oldboy ~]# sort uniq.txt | uniq -c | sort -rn
6 oldboy
5 lidao
4 smile
4 blood
2.3 企业实战案例-日志分析⭐⭐¶
要求:分析日志/var/log/secure日志
上传到Linux中(lrzsz)
yum install -y lrzsz
- rz上传到linux中(拖拽)
- sz从linux下载到windows中
案例09 统计secure-ip.txt文件中每个ip出现的次数并取出前5
1.通过sort处理下
2.去重uniq -c
3.sort对次数进行排序
4.head取出5
sort secure-ip.txt |uniq -c |sort -rn |head -5
68652 218.65.30.25
34326 218.65.30.53
21201 218.87.109.154
18065 112.85.42.103
17164 112.85.42.99