文章目录
- 1. sort 排序
- 1.1 -r,-n
- 1.2 -k 按列比较
- 1.3 练习
- 1.3.1 找出/etc下占用空间最大的前5个内容
- 1.3.2 查看/*下所有目录的大小,并取出最大的5个
- 2. uniq 去重
- 2.1 uniq与sort统计次数
- 3. awk
- 4. 日志分析
- 4.1 分析access.log中ip出现的次数并取前5名
- 4.2 分析secure文件中用户登录失败的ip次数,取前五名
- 5. 踩坑记录
- 5.1 ls -l显示的目录数值为啥不准确?
- 6. 思维导图
1. sort 排序
对文件或管道内容按行进行排序。
默认是按照字典序列进行排序。
-n与-h选项不兼容。
[root@oldboy99-Kylin ~/oldboy]# cat sort.txt
0
001
24
222
3456
45
25
43
404
4
235
556
[root@oldboy99-Kylin ~/oldboy]# sort sort.txt
0
001
222
235
24
25
3456
4
404
43
45
556
1.1 -r,-n
- -r:revert,将结果逆序输出
- -n:按照数值比较
[root@oldboy99-Kylin ~/oldboy]# sort -n sort.txt
0
001
4
24
25
43
45
222
235
404
556
3456
[root@oldboy99-Kylin ~/oldboy]# sort -nr sort.txt
3456
556
404
235
222
45
43
25
24
4
001
0
# 和管道结合使用:输出最大的三个数
[root@oldboy99-Kylin ~/oldboy]# sort -nr sort.txt |head -n3
3456
556
404
1.2 -k 按列比较
sort默认按行的数值比较,如果有多列且按列进行比较,需要用-k。
- -k:按指定列排序
[root@oldboy99-Kylin ~/oldboy]# sort sort2.txt -k2n
skx 10
lidao 90
turing 92
malin 99
oldboy 100
1.3 练习
1.3.1 找出/etc下占用空间最大的前5个内容
[root@oldboy99-Kylin ~/oldboy]# ll -h /etc/ |sort -hrk5 |head -n5
-rw-r--r-- 1 root root 677K 6月 23 2020 services
-rw-r--r-- 1 root root 78K 4月 29 20:32 ld.so.cache
-rw-r--r-- 1 root root 66K 4月 22 2020 mime.types
-rw-r--r-- 1 root root 12K 8月 29 2024 nanorc
-rw-r--r-- 1 root root 11K 3月 6 2021 sensors3.conf
1.3.2 查看/*下所有目录的大小,并取出最大的5个
- du -sh:查看指定目录的大小
- -h:用人类可读的单位比较大小
[root@oldboy99-Kylin ~/oldboy]# du -sh /* |sort -hrk1 |head -n5
du: 无法访问 '/proc/1636/task/1636/fd/4': 没有那个文件或目录
du: 无法访问 '/proc/1636/task/1636/fdinfo/4': 没有那个文件或目录
du: 无法访问 '/proc/1636/fd/3': 没有那个文件或目录
du: 无法访问 '/proc/1636/fdinfo/3': 没有那个文件或目录
4.4G /root
3.4G /usr
354M /var
172M /boot
25M /etc
2. uniq 去重
- unique,独一无二的,唯一的
- uniq经常于sort一起使用
- uniq去重时仅是对附件的数据进行去重,所以一般先排序,再去重
- -c:count,计算内容重复出现的次数
[root@oldboy99-Kylin ~/oldboy]# cat uniq.txt
skx
skx
oldboy
skx
oldboy
oldboy
skxoy
oldboy
olboy
oldboy
oldboy
……
[root@oldboy99-Kylin ~/oldboy]# uniq uniq.txt
skx
oldboy
skx
oldboy
skx
oldboy
skx
oldboy
[root@oldboy99-Kylin ~/oldboy]# uniq uniq.txt -c2 skx1 oldboy1 skx2 oldboy8 skx5 oldboy8 skx11 oldboy
2.1 uniq与sort统计次数
[root@oldboy99-Kylin ~/oldboy]# sort uniq.txt |uniq -c19 oldboy19 skx
3. awk
- linux三剑客(awk、sed、grep)老大
- 功能:取列、计算统计
- $:字段引用符
- NF:number of field,字段总数,表示列数
- colume -t:用制表符将结果对其输出
[root@oldboy99-Kylin ~/oldboy]# cat awk.txt
oldboy 10.0.0.1 Lidao996 40
lidao 10.0.0.200 Lidao996 18
xiaozhang 8.8.8.8 Lidao996 16
oldduan 10.0.0.99 Lidao996 20
# 获取第2列数据
[root@oldboy99-Kylin ~/oldboy]# awk '{print $2}' awk.txt
10.0.0.1
10.0.0.200
8.8.8.8
10.0.0.99
# 获取最后一列数据
[root@oldboy99-Kylin ~/oldboy]# awk '{print $NF}' awk.txt
40
18
16
20
[root@oldboy99-Kylin ~/oldboy]# awk '{print $2,$3}' awk.txt |column -t
10.0.0.1 Lidao996
10.0.0.200 Lidao996
8.8.8.8 Lidao996
10.0.0.99 Lidao996
4. 日志分析
- 将压缩包上传至虚拟机并解压。
02-【awk练习文件】access-服务的访问日志-v3.zip等2个文件: https://pan.baidu.com/s/1fEwEsAjja8F9u4yBZPxIAw?pwd=57ec 提取码: 57ec
- unzip:解压以.zip结尾的压缩包
4.1 分析access.log中ip出现的次数并取前5名
- 判断ip的位置,并用awk取出
- 先对ip排序,ip不是数字,不用加选项-n
- 对排序好后的ip去重并统计各个ip出现的次数
- 按照ip出现的次数排序,取所需的数据
[root@oldboy99-Kylin ~/oldboy]# awk '{print $1}' access.log |sort |uniq -c |sort -rnk1 |head -n512049 58.220.223.6210856 112.64.171.981982 114.83.184.1391662 117.136.66.101318 115.29.245.13
4.2 分析secure文件中用户登录失败的ip次数,取前五名
- 用户登录失败的关键词是:Failed
- 按照用户登录失败的关键词查找所需的行
- 再查找ip的位置:ip的位置靠后,就从后计算
- 提取出IP后,就和上面一样,再排序去重-排序
[root@oldboy99-Kylin ~/oldboy]# grep -i 'failed' secure-20161219 |awk '{print $(NF-3)}' |sort |uniq -c|sort -k1nr |head -n568652 218.65.30.2534326 218.65.30.5321201 218.87.109.15418065 112.85.42.10317164 112.85.42.99
5. 踩坑记录
5.1 ls -l显示的目录数值为啥不准确?
ls -l
:显示文件的逻辑大小(实际数据量),但对目录仅显示其本身占用的空间,不包括目录下的文件大小du
:计算目录及其内容的物理磁盘占用空间(基于块分配),因此用du
计算目录大小结果更准确
6. 思维导图
【金山文档】 思维导图 https://www.kdocs.cn/l/co3I7PtpTYQX