查看网卡流量

查看网卡流量除了用iftop等工具外,我们也可以自己写个脚本,它的优势就是在服务器比较卡的时候查看资源不会占用很多系统资源!

  
  
  
  
  1. #!/bin/bash  
  2. NAME=nic_flow 
  3. PIDFILE=/var/tmp/$NAME.pid  
  4. LOGFILE=/var/tmp/$NAME.log  
  5.  
  6. function start(){  
  7.     if [ -f "$PIDFILE" ]; then  
  8.         echo $PIDFILE  
  9.         exit 2  
  10.     fi  
  11.     for (( ; ; ));do  
  12.         eth=$1  
  13.         [ -z "${eth:-}" ] && eth=eth0 
  14.         time_range=$2  
  15.         [ -z "${time_range:-}" ] && time_range=1        
  16.         ifconfig  | awk '{print $1}' | grep "eth" > /dev/null   
  17.         [ $? -gt 0 ] && echo "wrong NIC device" && exit 10  
  18.         RX_1=$(cat /proc/net/dev | grep "$eth" | awk -F'[ |:]+'  '{print $4}')  
  19.         TX_1=$(cat /proc/net/dev | grep "$eth" | awk '{print $9}')  
  20.         sleep $time_range  
  21.         RX_2=$(cat /proc/net/dev | grep "$eth" | awk -F'[ |:]+'  '{print $4}')  
  22.         TX_2=$(cat /proc/net/dev | grep "$eth" | awk '{print $9}')  
  23.         clear  
  24.         echo  -e "`date +%k:%M:%S`      RX        TX" | tee -a $LOGFILE   
  25.         RX=$((${RX_2}-${RX_1}))  
  26.         TX=$((${TX_2}-${TX_1}))  
  27.         if [[ $RX -lt 1024 ]];then  
  28.             RX="${RX}B/s" 
  29.         elif [[ $RX -gt 1048576 ]];then  
  30.             RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')  
  31.         else  
  32.             RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')  
  33.         fi  
  34.         if [[ $TX -lt 1024 ]];then  
  35.             TX="${TX}B/s" 
  36.  
  37.         elif [[ $TX -gt 1048576 ]];then  
  38.             TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')  
  39.         else  
  40.             TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')  
  41.         fi   
  42.         echo -e " $eth       $RX        $TX " | tee -a $LOGFILE  
  43.     done&   
  44.     echo $! > $PIDFILE  
  45. }   
  46. function stop(){  
  47.     [ -f $PIDFILE ] && kill `cat $PIDFILE` && rm -rf $PIDFILE  
  48. }  
  49.  
  50. case "$1" in  
  51.   start)  
  52.     start $2 $3  
  53.     ;;  
  54.   stop)  
  55.     stop  
  56.     ;;  
  57.   *)  
  58.     echo $"Usage:$0  {start|stop,NIC device(eth*), time_range(s)}"  
  59.     exit 2  
  60. esac 

使用

  
  
  
  
  1. [root@localhost ~]# ./nic_flow.sh start   
  2. 3:38:44      RX        TX  
  3. eth0       3B/s        138B/s   
  4. [root@localhost ~]# ./nic_flow.sh stop 

这个脚本可以接受额外的两个参数:网卡参数和时间间隔参数!

  
  
  
  
  1. [root@localhost ~]# ./nic_flow.sh start lo 5  
  2.  5:50:05      RX        TX  
  3.  lo       2B/s        0B/s   
  4. [root@localhost tmp]# tail  /var/tmp/nic_flow.log   
  5.  5:47:04      RX        TX  
  6.  eth0       1B/s        0B/s   
  7.  5:47:05      RX        TX  
  8.  eth0       1B/s        0B/s   
  9.  5:49:55      RX        TX  
  10.  lo       0B/s        0B/s   
  11.  5:50:00      RX        TX  
  12.  lo       0B/s        0B/s   
  13.  5:50:05      RX        TX  
  14.  lo       2B/s        0B/s  

 

你可能感兴趣的:(shell,网卡,网络流量)