특정 인터페이스에서 수신 및 전송된 데이터에 대한 정보를 출력하는 데 도움이 되는 스크립트를 만들려고 합니다. 시작하는 방법은 다음과 같습니다.
#!/bin/bash
interface=$1
while true; do
ip -s link ls $interface | awk '{ print $1 "\t" $2}'
sleep 10
done
그러나 나는 또한 데이터 변경의 차이를 얻고 싶습니다. 어떻게 출력해야 할지 전혀 모르겠습니다. 즉, 내 스크립트 줄에서 다음을 얻습니다 ip -s link ls $interface | awk '{ print $1 "\t" $2}'
.
2: enp0s3:
link/ether 08:00:27:ad:a6:53
RX: bytes
38134 399
TX: bytes
34722 247
38134
예를 들어, 와 사이의 차이를 얻은 34722
다음 399
일부 파일에 와 사이의 차이를 추가하고 싶습니다 .247
답변1
필요한 작업을 수행하는 추악한 스크립트가 있습니다. 아이디어는 다음과 같습니다.
- 인터페이스 통계를 파일에 저장
- 파일을 한 줄씩 읽기
- 줄에 RX(또는 TX)가 포함되어 있으면 다음 줄에 구문 분석하려는 정보가 포함되어 있음을 의미합니다.
스크립트:
#!/bin/bash
ip -s link ls $interface > ip_stats
RX=0
TX=0
# read file
while read LINE
do
# read RX info form line
if [ $RX -eq 1 ]
then
RX_packets=$(echo $LINE | awk '{print $1}')
RX_bytes=$(echo $LINE | awk '{print $2}')
fi
# see if next line will contain RX stats
if echo $LINE | grep RX
then
RX=1
else
RX=0
fi
# read TX info form line
if [ $TX -eq 1 ]
then
TX_packets=$(echo $LINE | awk '{print $1}')
TX_bytes=$(echo $LINE | awk '{print $2}')
fi
# see if next line will contain TX stats
if echo $LINE | grep TX
then
TX=1
else
TX=0
fi
done < ip_stats
echo RX_packets is $RX_packets
echo TX_packets is $TX_packets
echo RX_bytes is $RX_bytes
echo TX_bytes is $TX_bytes
# make diff
echo packets diff: $(expr $RX_packets - $TX_packets )
echo bytes diff: $(expr $RX_bytes - $TX_bytes )