用perl來改寫shell

查看Web服務器的併發請求數及其TCP連接狀態的命令

  1. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  

據說是從新浪互動社區事業部技術總監王老大那兒獲得的,非常不錯。

返回結果一般爲

  1. LAST_ACK 247 (正在等待處理的請求數) 
  2. SYN_RECV 66 
  3. ESTABLISHED 1094 (正常數據傳輸狀態) 
  4. FIN_WAIT1 258 
  5. FIN_WAIT2 629 
  6. TIME_WAIT 4792 (處理完畢,等待超時結束的請求數) 

其他參數說明:

  1. CLOSED:無連接是活動的或正在進行 
  2. LISTEN:服務器在等待進入呼叫 
  3. SYN_RECV:一個連接請求已經到達,等待確認 
  4. SYN_SENT:應用已經開始,打開一個連接 
  5. ESTABLISHED:正常數據傳輸狀態 
  6. FIN_WAIT1:應用說它已經完成 
  7. FIN_WAIT2:另一邊已同意釋放 
  8. ITMED_WAIT:等待所有分組死掉 
  9. CLOSING:兩邊同時嘗試關閉 
  10. TIME_WAIT:另一邊已初始化一個釋放 
  11. LAST_ACK:等待所有分組死掉 

本人shell中awk語法不是特別熟悉,老是關鍵時刻用到這個的時候,不會寫。順便用perl改寫了下,哈哈

  1. #!/usr/bin/perl -w 
  2.  
  3. use strict; 
  4.  
  5. our %hash; 
  6.  
  7. open TCP,'netstat -n|' or die "$!\n"; 
  8.  
  9. while ( <TCP> ) { 
  10.        chomp; 
  11.        next unless /^tcp/; 
  12.  
  13.        if ( exists $hash{(split /\s+/)[5]} ) { 
  14.            $hash{(split /\s+/)[5]} ++; 
  15.        } else { 
  16.            $hash{(split /\s+/)[5]} = 1; 
  17.        } 
  18.  
  19.  
  20. close TCP; 
  21.  
  22. while ( my($key,$val) = each %hash ) { 
  23.        print "$key\t$val\n"; 

一樣的結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章