
Quero obter RX e TX de cada adaptador de rede, então, para obter RX e TX de um adaptador de rede, usei estes comandos:
cat /proc/net/dev | grep 'wlan0' |awk '{if ($2) print $2}' | awk -v var="$(date +"%Y-%m-%d %r")" '{print $1"&",var";"}' >> /opt/baran/log/baran_RX_usage_$(date +"%Y-%m-%d");
cat /proc/net/dev | grep 'wlan0' |awk '{if ($10) print $10}' | awk -v var="$(date +"%Y-%m-%d %r")" '{print $1"&",var";"}' >> /opt/baran/log/baran_TX_usage_$(date +"%Y-%m-%d");
Como você pode ver, coloquei o resultado em um arquivo com data (diariamente). Eu quero que isso em um loop while obtenha todos os adaptadores de rede em vez de apenas wlan0, então devemos ter alguns arquivos de log como:
opt/baran/log/baran_TX_usage_wlan0_2014-01-01
opt/baran/log/baran_RX_usage_wlan0_2014-01-01
opt/baran/log/baran_TX_usage_eth0_2014-01-01
opt/baran/log/baran_RX_usage_eth0_2014-01-01
opt/baran/log/baran_TX_usage_eth1_2014-01-01
opt/baran/log/baran_RX_usage_eth1_2014-01-01
opt/baran/log/baran_TX_usage_eth2_2014-01-01
opt/baran/log/baran_RX_usage_eth2_2014-01-01
opt/baran/log/baran_TX_usage_eth3_2014-01-01
opt/baran/log/baran_RX_usage_eth3_2014-01-01
Como você pode ver, tenho um adaptador sem fio e 4 eth, e quero um arquivo de log para cada um deles diariamente.
Obrigado
Responder1
Que tal usar APIs de kernel mais fáceis?
for iface in /sys/class/net/*; do
# might want to filter out the 'lo' interface
read rx_bytes < "$iface"/statistics/rx_bytes
read tx_bytes < "$iface"/statistics/tx_bytes
day="$(date +"%Y-%m-%d")"
time="$(date +"%r")"
printf "%s& %s %s;" "$rx_bytes" "$day" "$time" >> /opt/baran/log/baran_RX_usage_"$day"
printf "%s& %s %s;" "$tx_bytes" "$day" "$time" >> /opt/baran/log/baran_TX_usage_"$day"
done