2

Есть ли способ получить текущую скорость сети (как я могу получить с помощью «nload») в скрипте bash? Я бы просто поместил в переменную скорость в момент запуска скрипта. Пример: «./script.sh» выдаст «In: 50Ko/s | Выход: 25Ko/s ».

Спасибо :)

2 ответа2

4

cat /proc/net/dev показывает, сколько байтов было передано на каждом интерфейсе.

Вы могли бы взять несколько образцов и рассчитать текущие килобайты в секунду?

Вот скрипт, который я нашел и немного изменил traffic.sh. Скопируйте его где-нибудь в вашем PATH и измените разрешения на 755 chmod 755 traffic.sh

Использование

traffic.sh eth0

Распечатывает

 Transmitted: 5352K
 Received: 13M
 Total: 19M
 Sleeping 3 to calculate speed...
 Current speed: 690B/s
0

Ниже приведен сценарий, который работает на большинстве встроенных маршрутизаторов Linux, таких как Ubiquiti и OpenWRT-совместимые, и получает подробности из /proc /net /dev.

(И легко изменить на пакеты и т.д.)

#!/bin/sh

SLP=1 # output / sleep interval
DEVICE=$1
IS_GOOD=0
for GOOD_DEVICE in `grep \: /proc/net/dev | awk -F: '{print $1}'`; do
    if [ "$DEVICE" = $GOOD_DEVICE ]; then
        IS_GOOD=1
        break
    fi
done

if [ $IS_GOOD -eq 0 ]; then
    echo "Device not found. Should be one of these:"
        grep ":" /proc/net/dev | awk -F: '{print $1}' | sed s@\ @@g 
    exit 1
fi

while true; do

LINE=`grep $1 /proc/net/dev | sed s/.*://`;
RECEIVED1=`echo $LINE | awk '{print $1}'`
TRANSMITTED1=`echo $LINE | awk '{print $9}'`
TOTAL=$(($RECEIVED1+$TRANSMITTED1))

sleep $SLP

LINE=`grep $1 /proc/net/dev | sed s/.*://`;
RECEIVED2=`echo $LINE | awk '{print $1}'`
TRANSMITTED2=`echo $LINE | awk '{print $9}'`
SPEED=$((($RECEIVED2+$TRANSMITTED2-$TOTAL)/$SLP))
INSPEED=$((($RECEIVED2-$RECEIVED1)/$SLP))
OUTSPEED=$((($TRANSMITTED2-$TRANSMITTED1)/$SLP))

printf "In: %12i KB/s | Out: %12i KB/s | Total: %12i KB/s\n" $(($INSPEED/1024)) $(($OUTSPEED/1024)) $((($INSPEED+$OUTSPEED)/1024)) ;

done;

Скопируйте вышеупомянутое в ваш буфер обмена и затем в терминальной сессии на вашем маршрутизаторе:

$ cat > /tmp/n.sh

затем: Ctrl+V (или правый клик / Вставить)

затем: Ctrl+D

$ chmod +x /tmp/n.sh

$ /tmp/n.sh eth0

Вы также можете вставить его в блокнот, а затем просто повторить вышеописанное, если вам нужно отредактировать его - не у всех встроенных маршрутизаторов есть редактор! Убедитесь, что вы скопировали все с # вверху до готового; внизу.

Возможно, вам придется изменить /bin /bash на /bin /sh или наоборот. Вот еще один пример, который использует /sys: Как получить сетевую статистику в реальном времени в Linux в формате KB /MB /Bytes и для определенного порта или идентификатора процесса приложения?

Источник: https://gist.github.com/dagelf/ab2bad26ce96fa8d79b0834cd8cab549

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .