这个脚本的功能是检测网卡流量,并按规定格式记录在日志中。
具体来说,它做了以下几个步骤:
- 首先,它设置了语言为英文,以保证输出结果是英文,否则会出现bug。
- 然后,它定义了一个logfile变量,用来存储日志文件的路径和名称。日志文件的名称是当天的日期,例如
29.log
。 - 接着,它使用exec命令将后面执行的命令结果输出重定向到logfile日志中。
- 然后,它使用date命令输出当前的日期和时间,格式为
2023-04-14 13:46
。 - 接下来,它使用sar命令统计网卡ens33的流量,单位为kb/s。sar命令的参数是1和59,表示每隔1秒采样一次,共采样59次。然后,它使用grep命令过滤出Average和ens33这两行,表示平均值和网卡名称。最后,它使用awk命令格式化输出结果,将流量单位转换为bps,并按照要求的格式输出网卡名称、输入流量和输出流量。
- 最后,它输出一行分隔符
####################
,表示一次记录的结束。 - 这个脚本使用了一个无限循环while : do … done,因此会一直运行下去。由于执行sar命令需要59秒,因此不需要sleep命令来延迟执行。这样就实现了每分钟记录一次网卡流量的功能。
#!/bin/bash
# 检测网卡流量,并按规定格式记录在日志中
# 规定一分钟记录一次oo
# 日志格式如下所示:
# 2023-10-29 13:46
while :
do
# 设置语言为英文,保障输出结果是英文,否则会出现bugai
LANG=en
logfile=/tmp/`date +%d`.log
# 将下面执行的命令结果输出重定向到logfile日志中
exec >> $logfile
date +"%F %H:%M"
# sar命令统计的流量单位为kb/s,日志格式为bps,因此要*1000*8
sar -n DEV 1 59|grep Average|grep ens33|awk '{print $2,"t","input:","t",$5*1000*8,"bps","n",$2,"t","output:","t",$6*1000*8,"bps"}'
echo "####################"
# 因为执行sar命令需要59秒,因此不需要sleep
done
输出结果:
sar命令
Linux sar命令是一个用来收集、报告或保存系统活动信息的工具。
它可以从多个方面对Linux系统的活动进行报告,比如文件的读写情况、系统调用的使用情况、磁盘I/O、CPU利用率、内存使用状况和进程活动有关的信息等。
它的基本语法是:
sar [options] [-o file]
其中,options是指定要查看的资源类型,例如
- -u表示CPU
- -r表示内存
- -d表示磁盘等
- -o file是指定将结果以二进制格式保存到文件中
- -f file是指定从文件中读取结果
- interval是指定采样间隔
- count是指定采样次数
例如,如果要查看每秒钟一次的CPU使用情况,总共查看三次,可以使用以下命令:
sar -u 1 3
如果要查看9月26日的内存使用情况,可以使用以下命令:
sar -r -f /var/log/sa/sa26
如果要查看网络设备的流量情况,可以使用以下命令:
sar -n DEV