统计信息脚本,留个备份
因为环境问题,做了多次过滤,如果想简单实现,也可以使用awk
如简单实现获取硬盘使用率大于10%的分区
awk 以空格或%为分隔符,取倒数第二列,大于10的行!
需要注意的是硬盘统计问题,fdisk或lsblk是所有硬盘(包含未挂载的),df只能统计已经挂载的,可根据需求编辑脚本。
#!/bin/bash
#临时文件名
FILE="devinfo.txt"
echo > $FILE
#主机名称
echo "主机名称:$HOSTNAME " >> $FILE
#IP地址
IPLAN=$(hostname -I | awk -F " " '{printf $1}')
IPWAN=$(curl http://pv.sohu.com/cityjson 2>> /dev/null | awk -F '"' '{print $4}')
echo "内网地址:$IPLAN" >> $FILE
echo "外网地址:$IPWAN" >> $FILE
#内存
#内存统计以M为单位,防止低于1G内存仍然显示M单位
MEM=`free -m |grep "Mem"| awk '{print $2}' `
MEM1=`echo $MEM |cut -d'm' -f1`
#舍五入六时,需先echo变量(printf不支持直接变量)
MEMORY=`echo "$MEM1"|awk '{printf "%.0f ", $MEM1/1024 }'`
echo "物理内存:$MEMORY G" >> $FILE
#物理CPU数量
CPU=`grep 'physical id' /proc/cpuinfo | sort -u | wc -l`
echo "CPU数量:$CPU" >> $FILE
#硬盘数量
#通过lsblk进行统计
DISK=`lsblk |grep disk|wc -l`
#通过fdisk进行统计
#DISK=`fdisk -l |awk '{print $2}'|grep -E "/dev/sd|vd|hd"|wc -l"|wc -l `
echo "硬盘数量:$DISK" >> $FILE
#总容量合计列利用awk'{sum += $2} END {print sum}'
DISKSUM=`fdisk -l|awk '{print $2}'|grep -E "/dev/[sd,hd,vd]"|awk -F":" '{sum += $2} END {print sum}'`
#计量单位
GB=`fdisk -l |cut -d ' ' -f2,3|grep -E "/dev/[sd,hd,vd]"|awk '{print $2}'|uniq|cut -d',' -f1`
echo "合计硬盘容量:$DISKSUM $GB" >>$FILE
#每块硬盘容量
DISKSIZE=`fdisk -l |cut -d ' ' -f2,3|grep -E "/dev/[sd,hd,vd]|/$"|cut -d',' -f1`
echo "$DISKSIZE" >> $FILE
EXT="_"
DAY=`date '+%F'`
#文件名
FILENAME="$IPLAN$EXT$HOSTNAME$EXT$DAY.TXT"
cat $FILE > $FILENAME
rm -f $FILE
cat $FILENAME
echo "##################################################"
echo "信息已保存到 $FILENAME"
echo "##################################################"
———————————————————————————————————————————
第二个文件名带时间
#临时文件名
FILE="info_"
echo > $FILE
#日期时间
DAY=`date '+%F_%T'`
echo $DAY >> $FILE
#cpu10分钟负载
CPU=`top -b -n1 |head -n1|cut -d',' -f4`
echo "CPU-10分钟负载:$CPU" >> $FILE
#内存使用率
#使用printf保留2位小数
MEM=`free -m|awk 'NR==2{printf "%.2f%%",($2-$4)/$2}'`
echo "内存使用率:$MEM " >> $FILE
#使用print不能进行小数位格式化
#MEM1=`free |grep "Mem"|awk '{print $2}'`
#MEM2=`free |grep "Mem"|awk '{print $4}'
`
#MEM=
`awk 'BEGIN{print ('$MEM1'-'$MEM2')/'$MEM1'*100}'
`
#echo "内存使用率:$MEM %" >> $FILE
#注:硬盘使用率,可根据硬盘大小或设备名进行过滤(根据情况自己写选择)
#第一种:过滤大于100000m=10G的硬盘(根据硬盘大小)
#DISK=
`df -m|tail -n +2| awk ' $2>10000 '|awk '{print $5}'|sort -nr|head -n1`
#第二种:过滤包含以/dev/vd,hd,sd和/结尾的硬盘(根据设备名)
DISK=`df -h |grep -E "^/dev/[vd,hd,sd]|/$"|grep -v "/boot"|awk '{print $5}'|sort -nr|head -n1`
echo "硬盘使用率最高:$DISK" >> $FILE
#IP地址
IPLAN=$(hostname -I | awk -F " " '{printf $1}')
echo "内网地址:$IPLAN" >> $FILE
#保存文件名
EXT="_"
cp $FILE{,$IPLAN$EXT`date '+%F_%T'`}
rm -f $FILE
FILENAME=`ls -l ./ |grep $FILE$IPLAN |awk '{print $9}'|tail -n1`
cat $FILENAME
echo "=============================================="
echo "信息已保存到:$FILENAME"
echo "=============================================="
因为我发现虚拟机系统硬盘可能不是SD/VD/HD开头的,也可以通过过滤硬盘大小来实现,所有要根据情况而定
#过滤大于10000M=10G的硬盘
df -m|tail -n +2| awk ' $2>10000 '
发表评论