verwenden Sie do,while, um eine Schleife für jeden Netzwerkadapter zu erstellen

verwenden Sie do,while, um eine Schleife für jeden Netzwerkadapter zu erstellen

Ich möchte RX und TX von jedem Netzwerkadapter erhalten. Um RX und TX von einem Netzwerkadapter zu erhalten, habe ich diese Befehle verwendet:

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

Wie Sie sehen, habe ich das Ergebnis in eine Datei mit Datum (täglich) geschrieben. Ich möchte dies in einer While-Schleife, um alle Netzwerkadapter statt nur wlan0 abzurufen, also müssen wir einige Protokolldateien wie diese haben:

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

Wie Sie sehen, habe ich einen WLAN-Adapter und 4 ETH, und ich möchte für jeden davon täglich eine Protokolldatei.

Danke

Antwort1

Wie wäre es mit der Verwendung einfacherer Kernel-APIs?

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

verwandte Informationen