Skip to content

Instantly share code, notes, and snippets.

@joemiller
Last active January 12, 2024 15:39
  • Star 77 You must be signed in to star a gist
  • Fork 45 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save joemiller/4069513 to your computer and use it in GitHub Desktop.
shell: quick linux scripts for showing network bandwidth or packets-per-second
#!/bin/bash
if [ -z "$1" ]; then
echo
echo usage: $0 network-interface
echo
echo e.g. $0 eth0
echo
echo shows packets-per-second
exit
fi
IF=$1
while true
do
R1=`cat /sys/class/net/$1/statistics/rx_packets`
T1=`cat /sys/class/net/$1/statistics/tx_packets`
sleep 1
R2=`cat /sys/class/net/$1/statistics/rx_packets`
T2=`cat /sys/class/net/$1/statistics/tx_packets`
TXPPS=`expr $T2 - $T1`
RXPPS=`expr $R2 - $R1`
echo "tx $1: $TXPPS pkts/s rx $1: $RXPPS pkts/s"
done
#!/bin/bash
if [ -z "$1" ]; then
echo
echo usage: $0 network-interface
echo
echo e.g. $0 eth0
echo
exit
fi
IF=$1
while true
do
R1=`cat /sys/class/net/$1/statistics/rx_bytes`
T1=`cat /sys/class/net/$1/statistics/tx_bytes`
sleep 1
R2=`cat /sys/class/net/$1/statistics/rx_bytes`
T2=`cat /sys/class/net/$1/statistics/tx_bytes`
TBPS=`expr $T2 - $T1`
RBPS=`expr $R2 - $R1`
TKBPS=`expr $TBPS / 1024`
RKBPS=`expr $RBPS / 1024`
echo "tx $1: $TKBPS kB/s rx $1: $RKBPS kB/s"
done
@joemiller
Copy link
Author

example:

# sh netspeed.sh  eth0
tx eth0: 6308 kb/s rx eth0: 98 kb/s
tx eth0: 6921 kb/s rx eth0: 109 kb/s
tx eth0: 6773 kb/s rx eth0: 109 kb/s
tx eth0: 6798 kb/s rx eth0: 109 kb/s
tx eth0: 6731 kb/s rx eth0: 105 kb/s
tx eth0: 6805 kb/s rx eth0: 106 kb/s
tx eth0: 6898 kb/s rx eth0: 109 kb/s
tx eth0: 8655 kb/s rx eth0: 134 kb/s
tx eth0: 9659 kb/s rx eth0: 153 kb/s

@MHDS
Copy link

MHDS commented Dec 29, 2016

hi
how can i see the live report like PRTG?

@telemaxx
Copy link

Thanks for sharing.
Works like a charm.

@boina-n
Copy link

boina-n commented Dec 19, 2017

Thanks 💯

@garacil
Copy link

garacil commented Mar 10, 2018

A bug in your scripts. If you represent bytes you need put B. If you like show bits, need pultiply by 8:

TKBPS=`expr $TBPS / 1024 \* 8`
RKBPS=`expr $RBPS / 1024 \* 8`

@garacil
Copy link

garacil commented Mar 10, 2018

You can simply with:

TKBPS=`expr $TBPS / 128`
RKBPS=`expr $RBPS / 128`

@alpc40
Copy link

alpc40 commented Aug 29, 2019

thank you very much

@nicdnepr
Copy link

Hi
nload shows big incomind traffic
How can I see what app generates it?

@joemiller
Copy link
Author

@nicdnepr You could try the nethogs utility for that

@mdobrzyn
Copy link

mdobrzyn commented Jan 7, 2020

@joemiller in netspeed.sh you should use kB/s instead kb/s

@joemiller
Copy link
Author

@mdobrzyn Yep! thanks for pointing that out. Updated.

@joemiller
Copy link
Author

@nicnepr I came across this new (to me, at least) tool written in Rust that will show network usage by application. It's also cross-platform. Might want to check it out.

https://github.com/imsnif/bandwhich

@venomone
Copy link

venomone commented Feb 24, 2022

My version of the script:

#!/bin/bash

# shellcheck disable=SC2034
i=$1
c=$2
e=1

if [ -z "$1" ] || [ -z "$2" ]; then
  echo
  echo usage: "$0" network-interface checkrepeats
  echo e.g. "$0" eth0 10
  echo
  exit
fi

while [ "$e" -le "$c"  ]
do
  # Network Interface Load:
  R1=$(cat /sys/class/net/"$1"/statistics/rx_bytes)
  T1=$(cat /sys/class/net/"$1"/statistics/tx_bytes)
  sleep 1
  R2=$(cat /sys/class/net/"$1"/statistics/rx_bytes)
  T2=$(cat /sys/class/net/"$1"/statistics/tx_bytes)
  TBPS=$(expr $T2 - $T1)
  RBPS=$(expr $R2 - $R1)
  TKBPS=$(expr $TBPS / 1024)
  RKBPS=$(expr $RBPS / 1024)
  # CPU Load:
  CPU_LOAD=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}') # percentage of CPU in use
  MEM_LOAD=$(free | grep Mem | awk '{print $3/$2 * 100.0}') # percentage of Memory in use
  echo "$1 tx: $TKBPS kB/s rx: $RKBPS kB/s, $(nproc) CPUs @ $CPU_LOAD load, $MEM_LOAD% Memory in use"
  (( e++ ))
done

@kfatehi
Copy link

kfatehi commented Dec 24, 2022

very nice, thank you

@mmslavin
Copy link

Thanks you Joe Miller! Been struggling for a way to do this, and all my solutions were very convoluted. Your scripts gave me the clues I needed to pull what I needed in a simple fashion. Very much appreciated!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment