背景

检查单台虚拟机实时流量

需求

主要是根据/proc/net/dev 文件做循环取值

设计思路

通过查看/proc/net/dev文件中的网卡流量大小,并且每1秒进行一次(新流量-旧流量的计算),得出网卡的实时流量。

  1. #!/bin/bash
  2. NIC=$1 #设置变量 存储网卡名称
  3. echo -e "In ------- Out" #-e 处理特殊字符
  4. while true; do #持续循环获取
  5. OLD_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev) #通过awk 匹配到网卡这一列 获取接收的数据包
  6. OLD_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev) #通过awk 匹配到网卡这一列 获取传输的数据包
  7. sleep 1 #经过1秒后
  8. NEW_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev) #再次获取接收的包
  9. NEW_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev) #再次获取传输的包
  10. IN=$(printf "%.1f%s" "$((($NEW_IN-$OLD_IN)/1024))" "kb/s") #查看差值 就能获取实时流量
  11. OUT=$(printf "%.1f%s" "$((($NEW_OUT-$OLD_OUT)/1024))" "KB/S")
  12. echo "$IN $OUT"
  13. sleep 1
  14. done