利用shell脚本收集linux系统信息-2020-12-23

需求描述:
编写shell脚本收集系统信息
实现代码:

#!/bin/bash
# 版本:v1.0
# 收集系统信息 by ytchen5
LANG=en
PS3="You choice is: "
oscheck(){
	if [ -z /etc/redhat-release ];then
		REDHAT=`cat /etc/redhat-release | cut -d" " -f1`
	else
		DEBAIN=`cat /etc/issue | grep -E -v "^$"| cut -d" " -f1`
	fi
	if [ ${REDHAT:=abc} == "CentOS" -o ${REDHAT:=abc} == "Red" ];then
		P_M="yum"
	elif [ ${DEBAIN:=abc} == "Ubuntu" -o ${DEBAIN:=abc} == "ubuntu" ];then
		P_M="apt-get"
	else
		echo "Operating system does not support."
		exit 1
	fi
	if [ $LOGNAME != "root" ];then
		echo "please use the root account operation."
		exit 1
	fi
}


tools_check(){
	if ! which vmstat &>/dev/null;then
		echo "vmstat command not found,new the install."
		sleep 1
		oscheck
		$P_M install vmstat*
	fi
	if ! which iostat &>/dev/null;then
		echo "iostat command not found,new the install."
		sleep 1
		oscheck
		$P_M install sysstat
	fi
}

# 收集CPU利用率与负载情况
cpu_load(){
	UTIL=`vmstat | awk '{if(NR==3){print 100 - $15"%"}}'`
	USER=`vmstat | awk '{if(NR==3){print $13"%"}}'`
	SYSTEM=`vmstat | awk '{if(NR==3){print $14"%"}}'`
	IOWAIT=`vmstat | awk '{if(NR==3){print $16"%"}}'`
	echo "UTIL: $UTIL"
	echo "USER: $USER"
	echo "SYSTEM: $SYSTEM"
	echo "IOWAIT: $IOWAIT"
}


# 收集硬盘利用率及负载情况
disk_load(){
	UTIL=`iostat -x -k | awk -F"[ \t]+" 'BEGIN{OFS=": "}/^sd[a-z]+/{print $1,$NF"%"}'`
	READ=`iostat -x -k | awk -F"[ \t]+" 'BEGIN{OFS=": "}/^sd[a-z]+/{print $1,$3"KB"}'`
	WRITE=`iostat -x -k | awk -F"[ \t]+" 'BEGIN{OFS=": "}/^sd[a-z]+/{print $1,$9"KB"}'`
	IOWAIT=`vmstat | awk '{if(NR==3){print $16"%"}}'`

	echo -e "%util: \n$UTIL"

	echo -e "rkB/s: \n$READ"
	
	echo -e "wkB/s: \n$WRITE"

	echo -e "%iowait: \n$IOWAIT"
}

# 收集硬盘的利用率
disk_use(){
	disk_tatle=(`fdisk -l | awk -F"[ :,]" 'BEGIN{ORS=" ";OFS="="}/Disk.*\/dev\/sd[a-z]/{print  $2,$4"G"}'`)
	echo -e "\033[32m磁盘容量:\033[0m"
	for a in ${!disk_tatle[*]}
	do
		echo ${disk_tatle[a]}
	done

	echo -e "\033[32m当前使用:\033[0m"
	for j in ${!disk_tatle[*]}
	do
		sum=0
		sub_disk=`echo ${disk_tatle[j]} | awk -F"=" '{print $1}'`
		sub_disk_size=`echo ${disk_tatle[j]} | awk -F"=" '{print $2}'`
		argv=(`df -Th | awk -F"[ ]"+ 'BEGIN{ORS=" "}{if($1 ~ "'"$sub_disk"'"){print $4}}'`)
		for i in ${!argv[*]}; do
			if [[ ${argv[i]} =~ [0-9]+G$ ]]; then
			sum=$(($sum + `echo ${argv[i]}| awk '{print int($1)}'`))
			elif [[ ${argv[i]} =~ [0-9]+M$ ]]; then
			sum=$(($sum + `echo ${argv[i]}| awk '{print int($1)}'`/1024))
			elif [[ ${argv[i]} =~ [0-9]+K$ ]]; then
			sum=$(($sum + `echo ${argv[i]}| awk '{print int($1)}'`/1024/1024))
			else
				:
			fi
		done
	echo $sub_disk: $sum"G"
	done
	echo -e "\033[32m磁盘剩余:\033[0m"
	sazi=`echo $sub_disk_size| awk '{print int($0)}'`
	echo $sub_disk:$(($sazi-$sum))G
}
# 统计磁盘inode利用率
disk_inode(){
	inode_argv=(`df -i | awk -F"[ ]+" 'BEGIN{OFS="="}/^\/dev\/sd[a-z][0-9]/{print $1,int($5)}'`)
	#inode_argv=(`df -i | awk -F"[ ]+" 'BEGIN{OFS="="}/^\/dev\//{print $1,int($5)}'`)
	for i in ${!inode_argv[*]}
	do
		if [[ ${inode_argv[i]#*=} -gt 80 ]]; then
			echo -e "\033[31m警告:如下磁盘inode资源不足!\033[0m"
			echo "${inode_argv[i]%=*} : ${inode_argv[i]#*=}%"
		else
			echo "${inode_argv[i]%=*} : ${inode_argv[i]#*=}%"
		fi
	done
}

# 收集内存的使用情况
mem_use(){
	mem_total=`free -m | awk -F"[ ]+" '/Mem/{printf "%0.3fG\n",$2/1024}'`
	mem_use=`free -m | awk -F"[ ]+" '/Mem/{printf "%0.3fG\n",$3/1024}'`
	mem_free=`free -m | awk -F"[ ]+" '/Mem/{printf "%0.3fG\n",$4/1024}'`
	mem_cache=`free -m | awk -F"[ ]+" '/Mem/{printf "%0.3fG\n",$6/1024}'`
	echo "内存总量: $mem_total"
	echo "内存使用: $mem_use"
	echo "内存剩余: $mem_free"
	echo "缓存容量: $mem_cache"
}

# 收集TCP使用状态
tcp_status(){
	ss -ant | awk -F"[ ]+" '!/State/{type[$1]++}END{for(i in type) print i,type[i]}'

}


cpu_top10(){
# 显示长格式的
ps aux | awk  '{if($3>0.1){{printf "PID "$2" CPU "$3"%%----> "}for(i=11;i<=NF;i++)if(i==NF)printf $i"\n";else printf $i}}' | sort -t" " -k4 -rn | head -10
# 显示短格式的
#ps aux | awk  '{if($3>0.1){print "PID "$2" CPU "$3"%%----> "$11}}' | sort -t" " -k4 -rn | head -10
}


mem_top10(){
# 长格式显示
#ps aux | awk -F"[ ]+" '{if($4>0.1){{printf "PID: "$2" memory: "$4"%%--->"}for(i=11;i<=NF;i++)if(i==NF)printf $i"\n";else printf $i}}'| sort -brn -t":"  -k3 | head -10
			# sort 
			# -b 忽略分段开头的空格
			# -r 已降序排列
			# -n 按照数值大小排序
			# -t":" 指定字段分割符号 为:
			# -k3 指定按照第3个字段排序
# 短格式显示
ps aux | awk -F"[ ]+" '{if($4>0.1){print "PID: "$2" memory: "$4"%%--->"$11}}'| sort -brn -t":"  -k3 | head -10
}


traffic(){
	eth_list=`ifconfig | grep -E "^$" -A1 | awk -F":" 'BEGIN{ORS=" "}/[^^$|--]/{print $1}'`
		#read -p "please enter the network card name($eth_list):" eth
	select eth in $eth_list;do
		if [[ `ifconfig | grep  -E -c  "\<$eth\>"` -eq 1 ]]; then
			# 接收的网络流量
			begin_RXtraffic=`ifconfig $eth | awk -F"[ ]+" '/RX.*bytes/{print $6}'`
			sleep 1
			end_RXtraffic=`ifconfig $eth | awk -F"[ ]+" '/RX.*bytes/{print $6}'`
			RX=`awk 'BEGIN{printf "%0.1f\n",'$(($end_RXtraffic - $begin_RXtraffic))'/1024/128}'`
			echo -e "Received traffic: \033[32m${RX}MB/s\033[0m"
			
			# 发送的网络流量
			begin_TXtraffic=`ifconfig $eth | awk -F"[ ]+" '/TX.*bytes/{print $6}'`
			sleep 1
			end_TXtraffic=`ifconfig $eth | awk -F"[ ]+" '/TX.*bytes/{print $6}'`
			TX=`awk 'BEGIN{printf "%0.1f\n",'$(($end_TXtraffic - $begin_TXtraffic))'/1024/128}'`
			echo -e "Sending traffic: \033[32m${TX}MB/s\033[0m"
			break
		else
			echo "No network card found, please select again"
		fi
	done
}

main(){
	oscheck
	tools_check
	while true
	do
		select vir in  cpu_load  disk_load  disk_use  disk_inode mem_use tcp_status cpu_top10 mem_top10 traffic quit;do
			case $vir in
			cpu_load)
				clear
				echo "################################"
				for (( i = 1; i <= 3; i++ )); do
					echo -e "\033[32m\tCPU负载:参考数值$i:\033[0m"
					cpu_load
					sleep 1
				done
				echo "################################"
				break
				;;
			disk_load)
				clear
				echo "################################"
				for (( i = 1; i <= 3; i++ )); do
					echo -e "\033[32m硬盘负载:参考数值$i:\033[0m"
					disk_load
					sleep 1
				done
				echo "################################"
				break
				;;
			disk_use)
				clear
				echo "################################"
				disk_use
				echo "################################"
				break
				;;
			disk_inode)
				clear
				echo "################################"
					echo -e "\033[32m硬盘INODE:参考数值:\033[0m"
					disk_inode
				echo "################################"
				break
				;;
			mem_use)
				clear
				echo "################################"
				for (( i = 1; i <= 3; i++ )); do
					echo -e "\033[32m内存使用情况:参考数值$i:\033[0m"
					mem_use
					sleep 1
				done
				echo "################################"
				break
				;;
			tcp_status)
				clear
				echo "################################"
				for (( i = 1; i <= 3; i++ )); do
					echo -e "\033[32mTCP连接状态:参考数值$i:\033[0m"
					tcp_status
					sleep 1
				done
				echo "################################"
				break
				;;
			cpu_top10)
				clear
				echo "################################"
				for (( i = 1; i <= 3; i++ )); do
					echo -e "\033[32mCPU_TOP10:参考数值$i:\033[0m"
					cpu_top10
					sleep 1
				done
				echo "################################"
				break
				;;
			mem_top10)
				clear
				echo "################################"
				for (( i = 1; i <= 3; i++ )); do
					echo -e "\033[32m内存_TOP10:参考数值$i:\033[0m"
					mem_top10
					sleep 1
				done
				echo "################################"
				break
				;;
			traffic)
				clear
				echo "################################"
					traffic
				echo "################################"
				break
				;;
			quit)
				exit
			esac

		done

	done
}
main

验证结果:

################################
	CPU负载:参考数值1:
UTIL: 12%
USER: 10%
SYSTEM: 3%
IOWAIT: 0%
	CPU负载:参考数值2:
UTIL: 12%
USER: 10%
SYSTEM: 3%
IOWAIT: 0%
	CPU负载:参考数值3:
UTIL: 12%
USER: 10%
SYSTEM: 3%
IOWAIT: 0%
################################
硬盘负载:参考数值1:
%util: 
sda: 0.78%
sdb: 0.36%
rkB/s: 
sda: 37.58KB
sdb: 113.35KB
wkB/s: 
sda: 3.62KB
sdb: 58.79KB
%iowait: 
0%
硬盘负载:参考数值2:
%util: 
sda: 0.78%
sdb: 0.36%
rkB/s: 
sda: 37.58KB
sdb: 113.34KB
wkB/s: 
sda: 3.62KB
sdb: 58.79KB
%iowait: 
0%
硬盘负载:参考数值3:
%util: 
sda: 0.78%
sdb: 0.36%
rkB/s: 
sda: 37.58KB
sdb: 113.33KB
wkB/s: 
sda: 3.62KB
sdb: 58.78KB
%iowait: 
0%
################################
################################
磁盘容量:
/dev/sda=465.78G
/dev/sdb=111.81G
当前使用:
/dev/sda: 9G
/dev/sdb: 14G
磁盘剩余:
/dev/sdb:97G
################################
硬盘INODE:参考数值:
/dev/sdb5 : 4%
/dev/sdb1 : 0%
/dev/sda1 : 1%
################################
内存使用情况:参考数值1:
内存总量: 15.368G
内存使用: 2.565G
内存剩余: 10.452G
缓存容量: 2.350G
内存使用情况:参考数值2:
内存总量: 15.368G
内存使用: 2.565G
内存剩余: 10.448G
缓存容量: 2.354G
内存使用情况:参考数值3:
内存总量: 15.368G
内存使用: 2.564G
内存剩余: 10.447G
缓存容量: 2.354G
################################
TCP连接状态:参考数值1:
ESTAB 17
LISTEN 12
TIME-WAIT 1
TCP连接状态:参考数值2:
ESTAB 17
LISTEN 12
TIME-WAIT 1
TCP连接状态:参考数值3:
ESTAB 14
LISTEN 12
TIME-WAIT 4
################################
CPU_TOP10:参考数值1:
PID 10438 CPU 27.2%----> /usr/lib/firefox/firefox-new-window
PID 10641 CPU 20.3%----> /usr/lib/firefox/firefox-contentproc-childID4-isForBrowser-prefsLen7335-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 4018 CPU 4.0%----> /usr/bin/gnome-shell
PID 3859 CPU 3.6%----> /usr/lib/xorg/Xorgvt2-displayfd3-auth/run/user/1000/gdm/Xauthority-backgroundnone-noreset-keeptty-verbose3
PID 10689 CPU 3.2%----> /usr/lib/firefox/firefox-contentproc-childID5-isForBrowser-prefsLen7401-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 5990 CPU 2.2%----> /snap/sublime-text/97/opt/sublime_text/sublime_text
PID 10614 CPU 1.9%----> /usr/lib/firefox/firefox-contentproc-childID3-isForBrowser-prefsLen7181-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 10512 CPU 1.1%----> /usr/lib/firefox/firefox-contentproc-childID1-isForBrowser-prefsLen1-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 10761 CPU 1.0%----> /usr/lib/firefox/firefox-contentproc-childID6-isForBrowser-prefsLen7448-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 43 CPU 0.5%----> [ksmd]
CPU_TOP10:参考数值2:
PID 10438 CPU 27.1%----> /usr/lib/firefox/firefox-new-window
PID 10641 CPU 20.3%----> /usr/lib/firefox/firefox-contentproc-childID4-isForBrowser-prefsLen7335-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 4018 CPU 4.0%----> /usr/bin/gnome-shell
PID 3859 CPU 3.6%----> /usr/lib/xorg/Xorgvt2-displayfd3-auth/run/user/1000/gdm/Xauthority-backgroundnone-noreset-keeptty-verbose3
PID 10689 CPU 3.2%----> /usr/lib/firefox/firefox-contentproc-childID5-isForBrowser-prefsLen7401-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 5990 CPU 2.2%----> /snap/sublime-text/97/opt/sublime_text/sublime_text
PID 10614 CPU 1.9%----> /usr/lib/firefox/firefox-contentproc-childID3-isForBrowser-prefsLen7181-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 10512 CPU 1.1%----> /usr/lib/firefox/firefox-contentproc-childID1-isForBrowser-prefsLen1-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 10761 CPU 1.0%----> /usr/lib/firefox/firefox-contentproc-childID6-isForBrowser-prefsLen7448-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 43 CPU 0.5%----> [ksmd]
CPU_TOP10:参考数值3:
PID 10438 CPU 27.0%----> /usr/lib/firefox/firefox-new-window
PID 10641 CPU 20.3%----> /usr/lib/firefox/firefox-contentproc-childID4-isForBrowser-prefsLen7335-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 4018 CPU 4.0%----> /usr/bin/gnome-shell
PID 3859 CPU 3.6%----> /usr/lib/xorg/Xorgvt2-displayfd3-auth/run/user/1000/gdm/Xauthority-backgroundnone-noreset-keeptty-verbose3
PID 10689 CPU 3.2%----> /usr/lib/firefox/firefox-contentproc-childID5-isForBrowser-prefsLen7401-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 5990 CPU 2.2%----> /snap/sublime-text/97/opt/sublime_text/sublime_text
PID 10614 CPU 1.9%----> /usr/lib/firefox/firefox-contentproc-childID3-isForBrowser-prefsLen7181-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 10512 CPU 1.1%----> /usr/lib/firefox/firefox-contentproc-childID1-isForBrowser-prefsLen1-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 10761 CPU 1.0%----> /usr/lib/firefox/firefox-contentproc-childID6-isForBrowser-prefsLen7448-prefMapSize229608-parentBuildID20201211215739-appdir/usr/lib/firefox/browser10438truetab
PID 43 CPU 0.5%----> [ksmd]
################################
1) lo
2) virbr0
3) virbr1
4) vnet0
5) vnet1
6) vnet2
7) wlp3s0
You choice is: 7
Received traffic: 39.0MB/s
Sending traffic: 0.3MB/s
################################
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值