Shell寫起來(lái)很簡(jiǎn)單,效果卻很神奇,你可以先嘗試執(zhí)行一下這條命令:
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
會(huì)得到類似下面的結(jié)果,具體數(shù)字會(huì)有所不同:
LAST_ACK 1SYN_RECV 14ESTABLISHED 79FIN_WAIT1 28FIN_WAIT2 3CLOSING 5TIME_WAIT 1669
也就是說(shuō),這條命令可以把當(dāng)前系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài)分類匯總。
下面解釋一下為啥要這樣寫:
一個(gè)簡(jiǎn)單的管道符連接了netstat和awk命令。
------------------------------------------------------------------
先來(lái)看看netstat:
netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT
你實(shí)際執(zhí)行這條命令的時(shí)候,可能會(huì)得到成千上萬(wàn)條類似上面的記錄,不過(guò)我們就拿其中的一條就足夠了。
------------------------------------------------------------------
再來(lái)看看awk:
/^tcp/
濾出tcp開(kāi)頭的記錄,屏蔽udp, socket等無(wú)關(guān)記錄。
state[]
相當(dāng)于定義了一個(gè)名叫state的數(shù)組
NF
表示記錄的字段數(shù),如上所示的記錄,NF等于6
$NF
表示某個(gè)字段的值,如上所示的記錄,$NF也就是$6,表示第6個(gè)字段的值,也就是TIME_WAIT
state[$NF]
表示數(shù)組元素的值,如上所示的記錄,就是state[TIME_WAIT]狀態(tài)的連接數(shù)
++state[$NF]
表示把某個(gè)數(shù)加一,如上所示的記錄,就是把state[TIME_WAIT]狀態(tài)的連接數(shù)加一
END
表示在最后階段要執(zhí)行的命令
for(key in state)
遍歷數(shù)組
print key,"\t",state[key]
打印數(shù)組的鍵和值,中間用\t制表符分割,美化一下。
解釋完了,如果這樣你還看不明白命令,那我也無(wú)能為力了。
聯(lián)系客服