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