查看網卡流量除了用iftop等工具外,我們也可以自己寫個腳本,它的優勢就是在服務器比較卡的時候查看資源不會佔用很多系統資源!
- #!/bin/bash
- NAME=nic_flow
- PIDFILE=/var/tmp/$NAME.pid
- LOGFILE=/var/tmp/$NAME.log
- function start(){
- if [ -f "$PIDFILE" ]; then
- echo $PIDFILE
- exit 2
- fi
- for (( ; ; ));do
- eth=$1
- [ -z "${eth:-}" ] && eth=eth0
- time_range=$2
- [ -z "${time_range:-}" ] && time_range=1
- ifconfig | awk '{print $1}' | grep "eth" > /dev/null
- [ $? -gt 0 ] && echo "wrong NIC device" && exit 10
- RX_1=$(cat /proc/net/dev | grep "$eth" | awk -F'[ |:]+' '{print $4}')
- TX_1=$(cat /proc/net/dev | grep "$eth" | awk '{print $9}')
- sleep $time_range
- RX_2=$(cat /proc/net/dev | grep "$eth" | awk -F'[ |:]+' '{print $4}')
- TX_2=$(cat /proc/net/dev | grep "$eth" | awk '{print $9}')
- clear
- echo -e "`date +%k:%M:%S` RX TX" | tee -a $LOGFILE
- RX=$((${RX_2}-${RX_1}))
- TX=$((${TX_2}-${TX_1}))
- if [[ $RX -lt 1024 ]];then
- RX="${RX}B/s"
- elif [[ $RX -gt 1048576 ]];then
- RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')
- else
- RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')
- fi
- if [[ $TX -lt 1024 ]];then
- TX="${TX}B/s"
- elif [[ $TX -gt 1048576 ]];then
- TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')
- else
- TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')
- fi
- echo -e " $eth $RX $TX " | tee -a $LOGFILE
- done&
- echo $! > $PIDFILE
- }
- function stop(){
- [ -f $PIDFILE ] && kill `cat $PIDFILE` && rm -rf $PIDFILE
- }
- case "$1" in
- start)
- start $2 $3
- ;;
- stop)
- stop
- ;;
- *)
- echo $"Usage:$0 {start|stop,NIC device(eth*), time_range(s)}"
- exit 2
- esac
使用
- [root@localhost ~]# ./nic_flow.sh start
- 3:38:44 RX TX
- eth0 3B/s 138B/s
- [root@localhost ~]# ./nic_flow.sh stop
這個腳本可以接受額外的兩個參數:網卡參數和時間間隔參數!
- [root@localhost ~]# ./nic_flow.sh start lo 5
- 5:50:05 RX TX
- lo 2B/s 0B/s
- [root@localhost tmp]# tail /var/tmp/nic_flow.log
- 5:47:04 RX TX
- eth0 1B/s 0B/s
- 5:47:05 RX TX
- eth0 1B/s 0B/s
- 5:49:55 RX TX
- lo 0B/s 0B/s
- 5:50:00 RX TX
- lo 0B/s 0B/s
- 5:50:05 RX TX
- lo 2B/s 0B/s