используйте do,while для создания цикла для каждого сетевого адаптера

используйте do,while для создания цикла для каждого сетевого адаптера

Я хочу получить RX и TX от каждого сетевого адаптера, поэтому для получения RX и TX от одного сетевого адаптера я использовал следующие команды:

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");

Как видите, я поместил результат в файл с датой (ежедневно). Я хочу, чтобы это было в цикле while, чтобы получить каждый сетевой адаптер, а не только wlan0, поэтому у нас должны быть некоторые файлы журналов, например:

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

Как видите, у меня один беспроводной адаптер и 4 Ethernet, и мне нужен ежедневный лог-файл для каждого из них.

Спасибо

решение1

А как насчет использования более простых API ядра?

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

Связанный контент