Câu trả lời:
Cách kỳ lạ nhất dường như là nhìn vào /proc/net/dev
. Tôi đã viết như sau để so sánh tệp đó hai lần (với độ trễ thứ hai) và sau đó trừ tổng giá trị byte. Trong trường hợp em1
này là bộ điều hợp mạng, vì vậy chỉ cần thay đổi nó thành bất cứ điều gì bạn cần xem xét.
awk '/em1/ {i++; rx[i]=$2; tx[i]=$10}; END{print rx[2]-rx[1] " " tx[2]-tx[1]}' \
<(cat /proc/net/dev; sleep 1; cat /proc/net/dev)
Đầu ra là hai số. Nhận được byte mỗi giây sau đó gửi byte mỗi giây.
Đây là một biến thể của giải pháp tuyệt vời của Oli's:
awk '{if(l1){print $2-l1,$10-l2} else{l1=$2; l2=$10;}}' \
<(grep wlan0 /proc/net/dev) <(sleep 1; grep wlan0 /proc/net/dev)
Nó sẽ in kết quả giống như cách tiếp cận của Oli's:
$ awk '{if(l1){print $2-l1,$10-l2} else{l1=$2; l2=$10;}}' \
> <(grep wlan0 /proc/net/dev) <(sleep 1; grep wlan0 /proc/net/dev)
401500 30286
Giá trị đầu tiên là tốc độ tải xuống tính bằng byte mỗi giây và thứ hai là tốc độ tải lên. Bạn có thể có được một định dạng thân thiện với con người hơn với:
$ awk '{if(l1){print ($2-l1)/1024"kB/s",($10-l2)/1024"kB/s"} else{l1=$2; l2=$10;}}' \
<(grep wlan0 /proc/net/dev) <(sleep 1; grep wlan0 /proc/net/dev)
398.771kB/s 82.8066kB/s
wlp1s0
thay vì wlan0
. Tôi sẽ không chỉnh sửa câu trả lời vì tôi biết điều này phụ thuộc vào bản phân phối.