do, enquanto no bash

1

Eu quero obter RX e TX de cada adaptador de rede, para obter RX e TX de um adaptador de rede, usei estes comandos:

cat /proc/net/dev | grep 'wlan0' |awk  '{if () print }' |  awk -v var="$(date +"%Y-%m-%d %r")" '{print  "&",var";"}' >> /opt/baran/log/baran_RX_usage_$(date +"%Y-%m-%d");
cat /proc/net/dev | grep 'wlan0' |awk  '{if () print }' |  awk -v var="$(date +"%Y-%m-%d %r")" '{print  "&",var";"}' >> /opt/baran/log/baran_TX_usage_$(date +"%Y-%m-%d");

Como você vê, eu coloco o resultado em um arquivo com data (diariamente). Eu quero isso em um loop while para obter 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, eu tenho um adaptador sem fio e 4 eth, e eu quero arquivo de log para cada um deles diariamente.

Obrigado

    
por Morteza Soltanabadiyan 05.04.2014 / 20:23

3 respostas

1

Talvez você possa basear seu loop no conteúdo do diretório / sys / class / net /?

for iface in /sys/class/net/*
do 
  grep "${iface##*/}" /proc/net/dev ...
done

Se você precisar excluir a interface lo , você pode ativar globs de bash estendidos ( shopt -s extglob ) para permitir o uso de negação ou limitar as correspondências aos nomes de dispositivos eth e wlan

for iface in /sys/class/net/!(lo) ...

for iface in /sys/class/net/{eth,wlan}* ...
    
por steeldriver 05.04.2014 / 20:44
1

Você pode ter um loop de execução contínua usando true como condição.

while true
do
    # Insert commands here
    sleep 5 # wait for 5 seconds
done

No entanto, se você deseja obter o TX e o RX apenas uma vez por dia ou uma vez a cada poucas horas, convém configurar um trabalho cron.

    
por saiarcot895 05.04.2014 / 20:29
1

Crie um arquivo em /etc/cron.daily, dê a ele privilégios de execução:

sudo touch /etc/cron.daily/tx-rx-counter
sudo chmod +x /etc/cron.daily/tx-rx-counter

edite-o e cole-o:

#!/bin/bash

for iface in $(tail -n+3 /proc/net/dev | cut -d: -f1); do
    grep $iface /proc/net/dev | awk '{if () print }'   | awk -v var="$(date +"%Y-%m-%d %r")" '{print  "&",var";"}' >> /opt/baran/log/baran_RX_usage_$iface_$(date +"%Y-%m-%d")
    grep $iface /proc/net/dev | awk '{if () print }' | awk -v var="$(date +"%Y-%m-%d %r")" '{print  "&",var";"}' >> /opt/baran/log/baran_TX_usage_$iface_$(date +"%Y-%m-%d")
done

Funcionará diariamente às 6:25.

    
por Eric Carvalho 05.04.2014 / 20:46