Linux服务器巡检脚本

  • A+
所属分类:命令脚本

随着手上的云主机越来越多,有些主机承载着比较重要的业务,定期对云主机进行巡检是有必要的。分享一个本人常用的Linux系统巡检脚本,大家可以按实际巡检需要进行精简修改。

运行截图

Linux服务器巡检脚本

Linux服务器巡检脚本

Linux服务器巡检脚本

参考代码

  1. #!/bin/bash  
  2. clear  
  3.   
  4. ####### 通用代码 #######  
  5.   
  6. #检查当前用户是否为root  
  7. if [ $(id -u) != "0" ]; then  
  8. echo "当前用户为普通用户,必须使用root用户运行脚本,五秒后自动退出。"  
  9. echo ""  
  10. sleep 5  
  11. exit  
  12. fi  
  13.   
  14. ####### 通用代码 #######  
  15.   
  16. #使用说明  
  17. echo -e "\033[33m《一键巡检脚本》使用说明\033[0m"  
  18. echo ""  
  19. echo "A.一键巡检脚本仅适用于RHEL/CentOS操作系统,支持4.x、5.x、6.x、7.x各系统版本;"  
  20. echo "B.必须切换为Root管理员用户运行脚本,并且确保本地或者网络yum软件源可以正常使用;"  
  21. echo "C.巡检过程中出显示服务器基础信息,详细报告将使用“主机名+日期”命名并存放在/tmp目录。"  
  22. echo ""  
  23.   
  24. #脚本菜单  
  25. echo -e "\033[36m1: 开始巡检\033[0m"  
  26. echo ""  
  27. echo -e "\033[36m2: 退出脚本\033[0m"  
  28. echo ""  
  29. read -p  "请输入对应数字后按回车开始执行脚本: " install  
  30. if [ "$install" == "1" ];then  
  31. clear  
  32. else  
  33. echo ""  
  34. exit  
  35. fi  
  36.   
  37. ####### 脚本模块 #######  
  38.   
  39. #获取操作系统版本  
  40. get_os() {  
  41. [ -f /etc/redhat-release ] && awk '{print ($1,$3~/^[0-9]/?$3:$4)}' /etc/redhat-release && return  
  42. [ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return  
  43. [ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return  
  44. }  
  45.   
  46. #磁盘使用率  
  47. disk_usage() {  
  48. local total_size=0  
  49. local array=$@  
  50. for size in ${array[@]}  
  51. do  
  52. [ "${size}" == "0" ] && size_t=0 || size_t=`echo ${size:0:${#size}-1}`  
  53. [ "`echo ${size:(-1)}`" == "K" ] && size=0  
  54. [ "`echo ${size:(-1)}`" == "M" ] && size=$( awk 'BEGIN{printf "%.1f", '$size_t' / 1024}' )  
  55. [ "`echo ${size:(-1)}`" == "T" ] && size=$( awk 'BEGIN{printf "%.1f", '$size_t' * 1024}' )  
  56. [ "`echo ${size:(-1)}`" == "G" ] && size=${size_t}  
  57. total_size=$( awk 'BEGIN{printf "%.1f", '$total_size' + '$size'}' )  
  58. done  
  59. echo ${total_size}  
  60. }  
  61.   
  62. #分割线  
  63. next() {  
  64. printf "%-70s\n" "-" | sed 's/\s/-/g'  
  65. }  
  66.   
  67. ####### 巡检模块 #######  
  68.   
  69. #脚本变量  
  70. RED='\033[0;31m'  
  71. GREEN='\033[0;32m'  
  72. YELLOW='\033[0;33m'  
  73. BLUE='\033[0;36m'  
  74. PLAIN='\033[0m'  
  75. date=`date "+%Y%m%d"`  
  76. system_version=`cat /etc/redhat-release`  
  77. rhel4_version=`cat /etc/redhat-release |grep "release 4"|wc -l`  
  78. rhel5_version=`cat /etc/redhat-release |grep "release 5"|wc -l`  
  79. rhel6_version=`cat /etc/redhat-release |grep "release 6"|wc -l`  
  80. rhel7_version=`cat /etc/redhat-release |grep "release 7"|wc -l`  
  81. dmidecode_intall_status=`rpm -qa | grep dmidecode | wc -l`  
  82. pciutils_intall_status=`rpm -qa | grep pciutils | wc -l`  
  83. sysstat_intall_status=`rpm -qa | grep sysstat | wc -l`  
  84. lvm2_intall_status=`rpm -qa | grep lvm2 | wc -l`  
  85. disk=$(disk_usage)  
  86. cpu_model=$( awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' )  
  87. cpu_cores=$( awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo )  
  88. total_ram=$( free -m | awk '/Mem/ {print $2}' )  
  89. uesd_ram=$( free -m | awk '/Mem/ {print $3}' )  
  90. total_swap=$( free -m | awk '/Swap/ {print $2}' )  
  91. uesd_uswap=$( free -m | awk '/Swap/ {print $3}' )  
  92. uptime=$( awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60} {printf("%d days, %d hour %d min\n",a,b,c)}' /proc/uptime )  
  93. load_average=$( w | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//' )  
  94. os=$( get_os )  
  95. arch=$( uname -m )  
  96. lbit=$( getconf LONG_BIT )  
  97. kernel=$( uname -r )  
  98. disk_size1=($( LANG=C df -hPl | grep -wvE '\-|none|tmpfs|devtmpfs|by-uuid|chroot|Filesystem|udev' | awk '{print $2}' ))  
  99. disk_size2=($( LANG=C df -hPl | grep -wvE '\-|none|tmpfs|devtmpfs|by-uuid|chroot|Filesystem|udev' | awk '{print $3}' ))  
  100. disk_total_size=$( disk_usage "${disk_size1[@]}" )  
  101. disk_used_size=$( disk_usage "${disk_size2[@]}" )  
  102. disk_info=$(fdisk -l | grep dev)  
  103. network_adapter_info=$(lspci | grep -i ethernet)  
  104. system_user_list=$(cat /etc/passwd)  
  105. hostname=$(hostname)  
  106. selinux_status=$(getenforce)  
  107. rpm_list=$(rpm -qa)  
  108. iptables_list=$(iptables -L -n)  
  109. process_list=$(ps aux --sort -rss | awk '{print $1,$2,$11}')  
  110. network_established_list=$(netstat -lantp | grep ESTABLISHED | awk '{print $1,$4,$5,$6,$7}')  
  111. route_list=$(netstat -r | grep -v Kernel | grep -v Destination)  
  112. hosts_list=$(cat /etc/hosts)  
  113. last_reboot_list=$(last reboot -10 | grep -v "system boot" | awk '{print $1,$3,$4,$5,$6,$7}')  
  114. lastb_list=$(lastb -10)  
  115. ssh_failed_password=$(cat /var/log/secure | grep "Failed password")  
  116.   
  117. ####### 信息输出 #######  
  118.   
  119. next  
  120. echo -e "中央处理器型号: ${BLUE}$cpu_model ($cpu_cores核心)${PLAIN}${PLAIN}"  
  121. echo -e "物理磁盘使用量: ${BLUE}$disk_total_size GB ($disk_used_size GB 已使用)${PLAIN}"  
  122. echo -e "物理内存使用量: ${BLUE}$total_ram MB ($uesd_ram MB 已使用)${PLAIN}"  
  123. echo -e "虚拟内存使用量: ${BLUE}$total_swap MB ($uesd_uswap MB 已使用)${PLAIN}"  
  124. echo -e "操作系统发行版: ${BLUE}$os${PLAIN}"  
  125. echo -e "操作系统版本号: ${BLUE}$arch ($lbit Bit)${PLAIN}"  
  126. echo -e "操作系统内核号: ${BLUE}$kernel${PLAIN}"  
  127. echo -e "操作系统主机名: ${BLUE}$hostname${PLAIN}"  
  128. echo -e "系统运行总时间: ${BLUE}$uptime${PLAIN}"  
  129. echo -e "系统平均负载率: ${BLUE}$load_average${PLAIN}"  
  130. next  
  131.   
  132. ####### 信息输出 #######  
  133.   
  134. ####### 详细报告 #######  
  135. touch /tmp/Linux_Check.txt  
  136. echo "《Linux操作系统巡检报告》" >> /tmp/Linux_Check.txt  
  137. next >> /tmp/Linux_Check.txt  
  138. echo "处理器型号" >> /tmp/Linux_Check.txt  
  139. echo "" >> /tmp/Linux_Check.txt  
  140. echo "$cpu_model ($cpu_cores核心)" >> /tmp/Linux_Check.txt  
  141. next >> /tmp/Linux_Check.txt  
  142. echo "硬盘使用量" >> /tmp/Linux_Check.txt  
  143. echo "" >> /tmp/Linux_Check.txt  
  144. echo "$disk_total_size GB ($disk_used_size GB 已使用)" >> /tmp/Linux_Check.txt  
  145. next >> /tmp/Linux_Check.txt  
  146. echo "内存使用量" >> /tmp/Linux_Check.txt  
  147. echo "" >> /tmp/Linux_Check.txt  
  148. echo "$total_ram MB ($uesd_ram MB 已使用)" >> /tmp/Linux_Check.txt  
  149. next >> /tmp/Linux_Check.txt  
  150. echo "系统位宽" >> /tmp/Linux_Check.txt  
  151. echo "" >> /tmp/Linux_Check.txt  
  152. echo "$arch ($lbit Bit)" >> /tmp/Linux_Check.txt  
  153. next >> /tmp/Linux_Check.txt  
  154. echo "系统内核" >> /tmp/Linux_Check.txt  
  155. echo "" >> /tmp/Linux_Check.txt  
  156. echo "$kernel" >> /tmp/Linux_Check.txt  
  157. next >> /tmp/Linux_Check.txt  
  158. echo "系统主机名" >> /tmp/Linux_Check.txt  
  159. echo "" >> /tmp/Linux_Check.txt  
  160. echo "$hostname" >> /tmp/Linux_Check.txt  
  161. next >> /tmp/Linux_Check.txt  
  162. echo "运行时长" >> /tmp/Linux_Check.txt  
  163. echo "" >> /tmp/Linux_Check.txt  
  164. echo "$uptime" >> /tmp/Linux_Check.txt  
  165. next >> /tmp/Linux_Check.txt  
  166. echo "平均负载" >> /tmp/Linux_Check.txt  
  167. echo "" >> /tmp/Linux_Check.txt  
  168. echo "$load_average" >> /tmp/Linux_Check.txt  
  169. next >> /tmp/Linux_Check.txt  
  170. echo "硬盘存储" >> /tmp/Linux_Check.txt  
  171. echo "" >> /tmp/Linux_Check.txt  
  172. echo "$disk_info" >> /tmp/Linux_Check.txt  
  173. next >> /tmp/Linux_Check.txt  
  174. echo "网卡" >> /tmp/Linux_Check.txt  
  175. echo "" >> /tmp/Linux_Check.txt  
  176. echo "$network_adapter_info" >> /tmp/Linux_Check.txt  
  177. next >> /tmp/Linux_Check.txt  
  178. echo "系统用户" >> /tmp/Linux_Check.txt  
  179. echo "" >> /tmp/Linux_Check.txt  
  180. echo "$system_user_list" >> /tmp/Linux_Check.txt  
  181. next >> /tmp/Linux_Check.txt  
  182. echo "远程登录错误日志" >> /tmp/Linux_Check.txt  
  183. echo "" >> /tmp/Linux_Check.txt  
  184. echo "$ssh_failed_password" >> /tmp/Linux_Check.txt  
  185. next >> /tmp/Linux_Check.txt  
  186. echo "网络连接" >> /tmp/Linux_Check.txt  
  187. echo "" >> /tmp/Linux_Check.txt  
  188. echo "$network_established_list" >> /tmp/Linux_Check.txt  
  189. next >> /tmp/Linux_Check.txt  
  190. echo "路由表" >> /tmp/Linux_Check.txt  
  191. echo "" >> /tmp/Linux_Check.txt  
  192. echo "$route_list" >> /tmp/Linux_Check.txt  
  193. next >> /tmp/Linux_Check.txt  
  194. echo "Hosts表" >> /tmp/Linux_Check.txt  
  195. echo "" >> /tmp/Linux_Check.txt  
  196. echo "$hosts_list" >> /tmp/Linux_Check.txt  
  197. next >> /tmp/Linux_Check.txt  
  198. echo "重启记录" >> /tmp/Linux_Check.txt  
  199. echo "$last_reboot_list" >> /tmp/Linux_Check.txt  
  200. next >> /tmp/Linux_Check.txt  
  201. echo "登陆失败记录" >> /tmp/Linux_Check.txt  
  202. echo "$lastb_list" >> /tmp/Linux_Check.txt  
  203. next >> /tmp/Linux_Check.txt  
  204. echo "防火墙策略" >> /tmp/Linux_Check.txt  
  205. echo "" >> /tmp/Linux_Check.txt  
  206. echo "$iptables_list" >> /tmp/Linux_Check.txt  
  207. next >> /tmp/Linux_Check.txt  
  208. echo "进程列表" >> /tmp/Linux_Check.txt  
  209. echo "" >> /tmp/Linux_Check.txt  
  210. echo "$process_list" >> /tmp/Linux_Check.txt  
  211. next >> /tmp/Linux_Check.txt  
  212. echo "已装软件" >> /tmp/Linux_Check.txt  
  213. echo "" >> /tmp/Linux_Check.txt  
  214. echo "$rpm_list" >> /tmp/Linux_Check.txt  
  215. next >> /tmp/Linux_Check.txt  
  216. echo -e "\033[33m巡检已完成,巡检报告存放至:/tmp/`hostname`_`date +%Y%m%d`.txt\033[0m"  
  217. next  
  218. mv /tmp/Linux_Check.txt /tmp/`hostname`_`date +%Y%m%d`.txt  
  219. echo  
  220.   
  221. #脚本菜单  
  222. echo -e "\033[36m1: 查看报告\033[0m"  
  223. echo ""  
  224. echo -e "\033[36m2: 退出脚本\033[0m"  
  225. echo ""  
  226. read -p  "请输入对应数字后按回车开始执行脚本: " install  
  227. if [ "$install" == "1" ];then  
  228. cat /tmp/`hostname`_`date +%Y%m%d`.txt | more  
  229. else  
  230. echo ""  
  231. exit  
  232. fi  
  233.   
  234. ####### 详细报告 #######  
  • 微信赞助网站
  • weinxin
  • 支付宝赞助网站
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: