我想从每个网络适配器获取 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 个 eth,并且我希望每天为它们每个生成日志文件。
谢谢
答案1
也许您可以根据 /sys/class/net/ 目录的内容来设计您的循环?
for iface in /sys/class/net/*
do
grep "${iface##*/}" /proc/net/dev ...
done
如果你需要排除lo
接口,你可以启用扩展的 bash globs(shopt -s extglob
)以允许你使用否定,或者仅将匹配限制为 eth 和 wlan 设备名称
for iface in /sys/class/net/!(lo) ...
for iface in /sys/class/net/{eth,wlan}* ...
答案2
true
您可以使用作为条件来实现连续运行的循环。
while true
do
# Insert commands here
sleep 5 # wait for 5 seconds
done
但是,如果您希望它每天仅获取一次 TX 和 RX,或者每隔几小时获取一次,您可能需要设置一个 cron 作业。
答案3
在/etc/cron.daily中创建一个文件,并赋予其执行权限:
sudo touch /etc/cron.daily/tx-rx-counter
sudo chmod +x /etc/cron.daily/tx-rx-counter
然后编辑并粘贴:
#!/bin/bash
for iface in $(tail -n+3 /proc/net/dev | cut -d: -f1); do
grep $iface /proc/net/dev | awk '{if ($2) print $2}' | awk -v var="$(date +"%Y-%m-%d %r")" '{print $1"&",var";"}' >> /opt/baran/log/baran_RX_usage_$iface_$(date +"%Y-%m-%d")
grep $iface /proc/net/dev | awk '{if ($10) print $10}' | awk -v var="$(date +"%Y-%m-%d %r")" '{print $1"&",var";"}' >> /opt/baran/log/baran_TX_usage_$iface_$(date +"%Y-%m-%d")
done
它将于每天早上 6:25 运行。