Linux如何實(shí)時(shí)監(jiān)控網(wǎng)卡流量?
本文將介紹一個(gè)簡(jiǎn)單的Bash腳本,用于實(shí)時(shí)監(jiān)控指定網(wǎng)卡的流量情況。這個(gè)腳本通過(guò)讀取/proc/net/dev文件獲取網(wǎng)卡的接收(RX)和發(fā)送(TX)字節(jié)數(shù),并計(jì)算每秒的流量。腳本不僅能夠?qū)崟r(shí)顯示流量,還能將字節(jié)數(shù)轉(zhuǎn)換為更為直觀的單位(如KB、MB、GB),便于用戶查看。

先看看腳本:
#!/bin/bash
# 設(shè)置接口名稱
eth="eno1"
# 定義函數(shù):將字節(jié)轉(zhuǎn)換為人類可讀的單位
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
}
# 實(shí)時(shí)監(jiān)控流量
while true; do
    # 獲取上一次的接收和發(fā)送字節(jié)數(shù)
    RXpre=$(cat /proc/net/dev | grep "$eth:" | awk '{print $2}')
    TXpre=$(cat /proc/net/dev | grep "$eth:" | awk '{print $10}')
    # 等待1秒
    sleep 1
    # 獲取當(dāng)前的接收和發(fā)送字節(jié)數(shù)
    RXnext=$(cat /proc/net/dev | grep "$eth:" | awk '{print $2}')
    TXnext=$(cat /proc/net/dev | grep "$eth:" | awk '{print $10}')
    # 計(jì)算差值
    RX=$((RXnext - RXpre))
    TX=$((TXnext - TXpre))
    # 將字節(jié)轉(zhuǎn)換為人類可讀的單位
    RX_human=$(bytes_to_human $RX)
    TX_human=$(bytes_to_human $TX)
    # 清屏并打印結(jié)果
    clear
    echo -e "\t RX `date +%k:%M:%S` TX"
    echo -e "$eth \t $RX_human/s   $TX_human/s"
done1、腳本功能概述
該腳本實(shí)現(xiàn)了實(shí)時(shí)監(jiān)控指定網(wǎng)卡(如eno1)的網(wǎng)絡(luò)流量。它定期讀取系統(tǒng)的/proc/net/dev文件,提取網(wǎng)卡的接收和發(fā)送字節(jié)數(shù),然后計(jì)算每秒的流量。流量數(shù)據(jù)以B/s(字節(jié)每秒)、KB/s(千字節(jié)每秒)、MB/s(兆字節(jié)每秒)或GB/s(千兆字節(jié)每秒)等更直觀的單位顯示。
2、工作原理
- 接口選擇:用戶可以通過(guò)修改腳本中的eth="eno1"來(lái)指定要監(jiān)控的網(wǎng)卡接口。常見的網(wǎng)卡名稱包括eth0、eno1、wlan0等。
 - 獲取流量數(shù)據(jù):腳本通過(guò)cat /proc/net/dev命令讀取當(dāng)前網(wǎng)絡(luò)設(shè)備的流量數(shù)據(jù)。該文件包含了系統(tǒng)所有網(wǎng)卡的接收(RX)和發(fā)送(TX)字節(jié)數(shù)。使用grep命令過(guò)濾出指定網(wǎng)卡的信息,并使用awk提取字節(jié)數(shù)。
 - 計(jì)算流量差值:通過(guò)每秒讀取兩次字節(jié)數(shù)并計(jì)算差值(即流量的增量),實(shí)現(xiàn)實(shí)時(shí)流量監(jiān)控。
 - 字節(jié)數(shù)轉(zhuǎn)化:腳本通過(guò)bytes_to_human函數(shù)將字節(jié)數(shù)轉(zhuǎn)換為更加直觀的單位(如KB、MB、GB)。
 - 實(shí)時(shí)顯示:每秒更新一次流量,并清屏重新顯示,以保持信息的實(shí)時(shí)性和可讀性。
 
3、如何使用
- 編輯腳本:打開終端并使用文本編輯器(如nano或vim)創(chuàng)建一個(gè)新的腳本文件:
 
nano monitor_traffic.sh- 粘貼腳本:將上述腳本內(nèi)容粘貼到編輯器中,并保存。
 - 賦予執(zhí)行權(quán)限: 在終端中輸入以下命令賦予腳本執(zhí)行權(quán)限:
 
chmod +x monitor_traffic.sh運(yùn)行腳本:執(zhí)行腳本來(lái)開始監(jiān)控流量:
./monitor_traffic.sh停止腳本:可以按Ctrl+C停止腳本的執(zhí)行。
這個(gè)簡(jiǎn)單的Bash腳本能夠幫助系統(tǒng)管理員實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)接口的流量情況,并將其以友好的格式顯示出來(lái)。它可以作為一個(gè)基礎(chǔ)工具進(jìn)一步擴(kuò)展,以滿足更多的需求,例如帶寬限制、流量分析等。















 
 
 
 
 
 
 