Skip to main content

Linux如何实时监控网卡流量

·168 words·1 min
Linux Network
Table of Contents

本文将介绍一个简单的Bash脚本,用于实时监控指定网卡的流量情况。这个脚本通过读取/proc/net/dev文件获取网卡的接收(RX)和发送(TX)字节数,并计算每秒的流量。脚本不仅能够实时显示流量,还能将字节数转换为更为直观的单位(如KB、MB、GB),便于用户查看。

先看看脚本


#!/bin/bash
# 设置接口名称
eth="eno1"
# 定义函数:将字节转换为人类可读的单位
bytes_to_human() {
    local bytes=$1
    if (( bytes < 1024 )); then
        echo "${bytes}B"
    elif (( bytes < 1048576 )); then
        printf "%.2fKB" "$(bc <<< "scale=2; $bytes / 1024")"
    elif (( bytes < 1073741824 )); then
        printf "%.2fMB" "$(bc <<< "scale=2; $bytes / 1048576")"
    else
        printf "%.2fGB" "$(bc <<< "scale=2; $bytes / 1073741824")"
    fi
}
# 实时监控流量
while true; do
    # 获取上一次的接收和发送字节数
    RXpre=$(cat /proc/net/dev | grep "$eth:" | awk '{print $2}')
    TXpre=$(cat /proc/net/dev | grep "$eth:" | awk '{print $10}')
    # 等待1秒
    sleep 1
    # 获取当前的接收和发送字节数
    RXnext=$(cat /proc/net/dev | grep "$eth:" | awk '{print $2}')
    TXnext=$(cat /proc/net/dev | grep "$eth:" | awk '{print $10}')
    # 计算差值
    RX=$((RXnext - RXpre))
    TX=$((TXnext - TXpre))
    # 将字节转换为人类可读的单位
    RX_human=$(bytes_to_human $RX)
    TX_human=$(bytes_to_human $TX)
    # 清屏并打印结果
    clear
    echo -e "\t RX `date +%k:%M:%S` TX"
    echo -e "$eth \t $RX_human/s   $TX_human/s"
done

脚本功能概述
#

该脚本实现了实时监控指定网卡(如eno1)的网络流量。它定期读取系统的/proc/net/dev文件,提取网卡的接收和发送字节数,然后计算每秒的流量。流量数据以B/s(字节每秒)、KB/s(千字节每秒)、MB/s(兆字节每秒)或GB/s(千兆字节每秒)等更直观的单位显示。

工作原理
#

  • 接口选择:用户可以通过修改脚本中的eth=“eno1"来指定要监控的网卡接口。常见的网卡名称包括eth0、eno1、wlan0等。
  • 获取流量数据:脚本通过cat /proc/net/dev命令读取当前网络设备的流量数据。该文件包含了系统所有网卡的接收(RX)和发送(TX)字节数。使用grep命令过滤出指定网卡的信息,并使用awk提取字节数。
  • 计算流量差值:通过每秒读取两次字节数并计算差值(即流量的增量),实现实时流量监控。
  • 字节数转化:脚本通过bytes_to_human函数将字节数转换为更加直观的单位(如KB、MB、GB)。
  • 实时显示:每秒更新一次流量,并清屏重新显示,以保持信息的实时性和可读性。

如何使用
#

  • 编辑脚本:打开终端并使用文本编辑器(如nano或vim)创建一个新的脚本文件:
nano monitor_traffic.sh
  • 粘贴脚本:将上述脚本内容粘贴到编辑器中,并保存。
  • 赋予执行权限: 在终端中输入以下命令赋予脚本执行权限:
chmod +x monitor_traffic.sh
  • 运行脚本:执行脚本来开始监控流量:
./monitor_traffic.sh
  • 停止脚本:可以按Ctrl+C停止脚本的执行。

这个简单的Bash脚本能够帮助系统管理员实时监控网络接口的流量情况,并将其以友好的格式显示出来。它可以作为一个基础工具进一步扩展,以满足更多的需求,例如带宽限制、流量分析等。

Related

嵌入式网络接口该怎么设计
·102 words·1 min
Hardware Network Linux SOC MAC
Linux nc 命令详解
·173 words·1 min
Linux NC
Linux NAT and Port Forwarding Explained
·615 words·3 mins
Linux Networking Security System Administration