
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