一、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