Loading

Shell脚本统计IP访问情况并分析访问日志

有日志 test.log,部分内容如下:

127.0.0.1 - - [14/Jun/2022:13:27:34 +0800] "GET /favicon.ico HTTP/1.1" 404 555 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"

一:统计出每个 IP 的访问量有多少

  • 习题分析:

    根据日志内容,可以看到 IP 地址就是第一段内容,所以只需要把 test.log 的第一段给过滤出来,然后近一步统计每一个 IP 的量即可。

过滤第一段,使用 awk 就可以很容易得到,而统计每个 IP 的访问量则需要排序然后再计算数量,

排序使用 sort 命令,统计每个 IP 访问量用 uniq。

  • 习题答案:

    awk '{print $1}' 1.log |sort -n |uniq -c |sort -n

    Shell 脚本:
    #!/bin/bash
    log=/tmp/access.log
    awk '{print $1}' $log |sort|uniq -c|sort -n -r


  • 答案解析

    1. awk 命令在分段方面还是比较有优势的,这里的{print $1}讲第一段打印出来,awk 可以用-F 指定分隔符,如果不指定分隔符,默认就以空白字符(比如空格、Tab 等),本题中,IP 地址就是在第一段。

    2. sort 命令是排序的命令,-n 选项表示以数字的形式排序,如果不加-n,则以 ASCII 排序,本题中的 IP 地址以数字的形式排序更容易区分。

    3. uniq 命令是用来去重复的,一个文本中如果有多行内容是一模一样的,使用 uniq 命令就可以把相同内容的行给删除掉,只留一行。而-c 选项的作用是计算重复的行数,所以在此题中使用 uniq -c 正好可以计算 IP 地址的访问数量。不过,大家一定要注意,uniq 去重的前提是首先要排序。

    4. 本题答案里最后没得 sort -n 意思是按访问量大小来排序,请求量越大的 IP 排在越后面,如果要想排在前面,可以加一个-r 选项,即 sort –nr

二:如果查看每个进程的内存使用量

第六列 RSS 即是每个进程的内存使用量

脚本思路:grep -v 过滤掉第一行内容,awk获取第六列的值,循环遍历每行的RSS值并相加即可得出所有进程的内存使用量

Shell 脚本:

#!/bin/bash
sum=0
for i in `ps -aux|grep -v "%CPU %MEM"|awk '{print $6}'`
do
sum=$[$sum+$i]
done
echo $sum

 

posted @ 2023-02-07 19:49  Carver大脸猫  阅读(236)  评论(0)    收藏  举报