四、awk
陣列命令生產實戰拓展
4.1
統計apache
日誌單ip
訪問請求數排名(這個常用,考試也常考)
假設apache
日誌內容
access.log
內容為:
法一:
[root@oldboy /]# awk ' end ' access.log |sort -rn -k2
10.0.0.41 3
10.0.0.47 2
10.0.0.46 2
10.0.0.42 2
10.0.0.43 1 #
提示$1
為第乙個域的內容。
-k2
為對第二個字段排序,即對數量排序。
法2:
[root@oldboy /]# awk '' access.log|sort|uniq -c |sort -rn -k1
3 10.0.0.41
2 10.0.0.47
2 10.0.0.46
2 10.0.0.42
1 10.0.0.43
法3:
[root@oldboy /]# sed's/- -.*$//g' access.log|sort|uniq -c|sort -rn -k1
3 10.0.0.41
2 10.0.0.47
2 10.0.0.46
2 10.0.0.42
1 10.0.0.43
sed管道後的第乙個
sort
是讓所有一樣的
ip挨著,因為
uniq -c
只能對相鄰的
ip行去重計數。
此題的解答可以有
10幾種,前面的課程我們已經帶大家細講了,這裡就不一一講解了。
解答:通過前面的命令,我們可以找到什麼
ip的訪問
apache
比較頻繁,一般單個
ip訪問數量過百,就值得懷疑了,如果短時間內上萬
pv訪問,說明就不正常了,可以採取相應的處理手段,比如封掉此
ip,此法要慎重,否則,可能會有誤封問題,因為,國內的大多數公司還是
nat上網的,出口乙個ip。
dos***的客戶端
ipnetstat -n >test.log
的結果:
active internet connections (w/o servers)
proto recv-q send-q local addressforeign addressstate
tcp00 124.123.3.79:80219.85.194.23:12004syn_recv
tcp00 124.123.3.77:80183.8.74.57:3276syn_recv
tcp00 124.123.3.77:80124.236.0.214:63191syn_recv
tcp00 124.123.3.77:80121.31.42.148:2338time_wait
tcp01023 124.123.3.77:8061.178.184.222:62683fin_wait1
tcp00 124.123.3.77:80222.79.242.74:7416time_wait
tcp04839 124.123.3.77:80121.31.42.148:30638fin_wait1
tcp00 124.123.3.77:80183.10.154.60:37282time_wait
tcp01 124.123.3.77:8059.49.174.176:26913closing
tcp00 124.123.3.77:80121.31.42.148:1787time_wait
tcp0174 124.123.3.77:80183.8.74.57:1165closing
[root@oldboy ~]# awk-f '[ :]+' ' end ' test.log |sort -rn -k2
121.31.42.148 3
183.8.74.57 2
foreign 1
61.178.184.222 1
59.49.174.176 1
222.79.242.74 1
219.85.194.23 1
183.10.154.60 1
124.236.0.214 1
1)結果中的字元等,你可以進一步過濾。
2) 深入淺出三劍客之awk
必殺技一例
3)實際生產中,我們過濾出已經建立連線的狀態established,然後,應用上述命令處理,完整命令可能為:
netstat -an|awk-f '[ :]+' ' end '|sort -rn -k2
[leo@lvs-1-1 ~]$ netstat -an|grep est|awk ''|cut -d : -f 1|grep -v "^$"|awk ' end '|sort -rn -k2|head -10
ip:220.181.125.69----- 51
ip:121.9.222.164----- 38
ip:121.9.222.158----- 38
ip:121.9.222.156----- 38
ip:121.9.222.161----- 36
ip:121.9.222.160----- 32
ip:121.9.222.159----- 32
ip:121.9.222.162----- 31
ip:61.163.7.200----- 29
ip:115.193.163.61----- 27
netstat -an|grep est|awk-f '[ :]+' ' end '|sort -rn -k2
注意,這裡過濾的是已經建立連線的的連線,即狀態established。
netstat -an|grep est|awk-f '[ :]+' ' end '|sort -rn -k2
注意,這裡過濾的是已經建立連線的的連線,即狀態established。
對於命令結果中,單
ip結尾的數大的,可以認為是不正常的訪問。如
121.31.42.148 100
,表示乙個ip有
100個連線
一般來說可以懷疑不正常,當**壓力大時,可以考慮限制或封掉這些冒似非法
ip,當然,也不排除,企業裡多個使用者用乙個出口
ip訪問。
壯士扼腕,有時也是必須的,否則,可能**整體影響更大,甚至癱瘓。有時,各種搜尋引擎的爬蟲是很瘋狂的,通過本例及上面的案例,我們可以再負載
io高時,能夠進行臨時應對,當然,這不是長久的方法,優化網路和伺服器,部署大規模集群伺服器才是較好的解決之道。
見
awk實戰3 awk陣列技巧
awk乙個神奇而又強大的功能,絕對是乙個開發利器,效率直選 希望這裡的一些總結能幫到那些存在困惑的人 awk實戰1 基礎語法說明 awk實戰2 流程控制語句總結 awk實戰3 awk陣列技巧 awk實戰4 函式系列 算數函式說明 awk實戰5 函式系列 基本字串函式 awk實戰6 函式系列 字串函式...
shell 之awk 關聯陣列高階應用
最近由於資料遷移過,有些使用者資訊需要再次確認下,也許資料量比較大,但是需要最終確認的比如說是使用者id和其對應的使用者積分數,這樣就會導致出現文字a 老的資料 文字b 新的資料 比如 1101 1231102 1111103 1451104 152 這是文字a.txt 文字b.txt如下 1101...
六 一維陣列與經典應用
陣列 陣列 儲存一組想同型別的資料 陣列的基本要素 1.陣列型別 int string double 2.陣列識別符號 變數名 3.陣列的元素 陣列中需要儲存的值 4.元素下標 從0開始 陣列長度固定不變,避免越界。1.宣告陣列 inta 2.分配空間 a new int 5 3.賦值 a 0 8 ...