linux 访问日志ip排序,Linux通过日志文件统计IP访问次数排序
假設我的日志文件內容如下:
218.92.217.53 - - [22/Nov/2017:17:26:27 +0800] "GET /images/rand HTTP/1.0" 200 1785 "https://www.baidu.com/index.shtml" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)" "sso.baidu.com" 36.105.87.151 4000
182.118.27.97 - - [22/Nov/2017:17:26:28 +0800] "GET /images/rand HTTP/1.0" 200 1588 "https://www.baidu.com/index.shtml" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Tablet PC 2.0; .NET4.0C; InfoPath.3; .NET4.0E; CIBA)" "sso.baidu.com" 123.158.3.19 4000
218.92.217.53 - - [22/Nov/2017:17:26:28 +0800] "GET /images/rand HTTP/1.0" 200 1668 "https://www.baidu.com/index.shtml" "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)" "sso.baidu.com" 115.153.175.138 3000
218.92.217.51 - - [22/Nov/2017:17:26:28 +0800] "GET /images/rand HTTP/1.0" 200 1501 "https://www.baidu.com/index.shtml" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "sso.baidu.com" 125.67.186.42 3000
218.92.217.53 - - [22/Nov/2017:17:26:28 +0800] "GET /images/rand HTTP/1.0" 200 1720 "https://www.baidu.com/index.shtml" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)" "sso.baidu.com" 27.17.66.35 3000
182.118.27.97 - - [22/Nov/2017:17:26:28 +0800] "GET /images/rand HTTP/1.0" 200 1718 "https://www.baidu.com/index.shtml" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0)" "sso.baidu.com" 113.0.64.155 5000
218.92.217.51 - - [22/Nov/2017:17:26:28 +0800] "GET /images/rand HTTP/1.0" 200 1762 "https://www.baidu.com/index.shtml" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)" "sso.baidu.com" 183.8.202.141 3000
其中倒數第二個字段是客戶端真實IP地址,現在我想根據客戶IP統計訪問次數,看看是否有異常攻擊。就可以寫一個shell命令如下:
cat logs/baidu.access.log | awk '{print $(NF-1)}' | sort | uniq -c | sort -k 1 -n -r|head -10
解釋一下上面的命令,
cat logs/baidu.access.log就是輸出我要統計的日志。
awk后面跟一個指令,awk '{print $(NF-1)}'就是打印出日志內容的第幾列。$1就是第一列,$(NF)就是總列數,那么我要根據倒數第二列統計,就是$(NF-1)。
sort就是對內容進行排序,默認是自然順序排序。
uniq指令用于排重,而是只適用于相鄰兩行相同的情況。所以一般結合sort使用。即先sort排序再排重。
uniq -u是只顯示唯一的記錄行。uniq -c是顯示有重復記錄的情況。
sort -k 1 -n -r這個指令,參看下面sort指令參數的詳細說明
sort選項與參數:
-f ?:忽略大小寫的差異,例如 A 與 a 視為編碼相同;
-b ?:忽略最前面的空格符部分;
-M ?:以月份的名字來排序,例如 JAN, DEC 等等的排序方法;
-n ?:使用『純數字』進行排序(默認是以文字型態來排序的);
-r ?:反向排序;
-u ?:就是 uniq ,相同的數據中,僅出現一行代表;
-t ?:分隔符,默認是用 [tab] 鍵來分隔;
-k ?:以哪個區間 (field) 來進行排序的意思
所以 sort -k 1 -n -r 指令的意思就是對第一列按照純數字逆序排序。
這個純數字是哪里來的呢?是uniq -c來的,原來剩下一列就是IP了,當執行uniq -c指令時,它會統計重復記錄的次數并把這次數顯示在第一列。所以現在有兩列了,第一列是重復次數,第二列是IP。所以這里是按照重復次數排序。
head -10這個不用說了吧,顯示前10行。
同理,如果你要統計URL的訪問情況就awk url那一列就行了。
總結
以上是生活随笔為你收集整理的linux 访问日志ip排序,Linux通过日志文件统计IP访问次数排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白户办信用卡最高额度 大额信用卡申请技巧
- 下一篇: modbus与硬件对接Java_java