Làm thế nào để có được tốc độ tải lên và tải xuống hiện tại trong thiết bị đầu cuối?


10

Tôi muốn thiết bị đầu cuối xuất tốc độ tải lên và tải xuống hiện tại của kết nối mạng của tôi. Tôi không muốn theo dõi tốc độ trong thời gian thực. Tôi chỉ muốn một giá trị "tĩnh" để có thể ghi nó vào một tập tin.

Làm thế nào để tôi đạt được nó?

Câu trả lời:


14

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 em1nà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.


3
Chúng tôi đi đây. Luộc nó xuống thành một tuyên bố awk. Chiến lợi phẩm.
Oli

11

Đâ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

Lưu ý: trên Ubuntu 18.04 tôi phải sử dụng wlp1s0thay 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.
Daniel Serodio
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.