Я хочу, щоб термінал виводив поточну швидкість завантаження та завантаження мого мережевого з'єднання. Я не хочу стежити за швидкістю в режимі реального часу. Я просто хочу, щоб "статичне" значення могло записати його у файл.
Як я цього досягти?
Я хочу, щоб термінал виводив поточну швидкість завантаження та завантаження мого мережевого з'єднання. Я не хочу стежити за швидкістю в режимі реального часу. Я просто хочу, щоб "статичне" значення могло записати його у файл.
Як я цього досягти?
Відповіді:
Як не дивно, як виглядає найпростіший спосіб /proc/net/dev. Я написав наступне, щоб порівняти цей файл двічі (з другою затримкою), а потім відняти загальні значення байтів. У цьому випадку em1мережевий адаптер, тому просто змініть його на все, що вам потрібно подивитися.
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)
Вихід - два числа. Отримано байтів за секунду, а потім відправлені байти в секунду.
Ось варіант відмінного рішення Олі:
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)
Він надрукує такий же результат, як і підхід Олі:
$ 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
Перше значення - швидкість завантаження в байтах на секунду, а друге - швидкість завантаження. Ви можете отримати більш зручний для людини формат за допомогою:
$ 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замість wlan0. Я не редагуватиму відповідь, бо знаю, що це залежить від дистрибутива.