327 lines
8.0 KiB
Bash
327 lines
8.0 KiB
Bash
#!/usr/bin/env bash
|
||
|
||
##############################################################################
|
||
# console color
|
||
C_RESET="$(tput sgr0)"
|
||
C_BLACK="\033[1;30m"
|
||
C_RED="\033[1;31m"
|
||
C_GREEN="\033[1;32m"
|
||
C_YELLOW="\033[1;33m"
|
||
C_BLUE="\033[1;34m"
|
||
C_PURPLE="\033[1;35m"
|
||
C_CYAN="\033[1;36m"
|
||
C_WHITE="\033[1;37m"
|
||
##############################################################################
|
||
|
||
printf "${C_PURPLE}"
|
||
cat << EOF
|
||
|
||
###################################################################################
|
||
# 系统信息检查脚本
|
||
# @author: Zhang Peng
|
||
###################################################################################
|
||
|
||
EOF
|
||
printf "${C_RESET}"
|
||
|
||
[[ $(id -u) -gt 0 ]] && echo "请用root用户执行此脚本!" && exit 1
|
||
sysversion=$(rpm -q centos-release|cut -d- -f3)
|
||
double_line="==============================================================="
|
||
line="----------------------------------------------"
|
||
|
||
# 打印头部信息
|
||
printHeadInfo() {
|
||
cat << EOF
|
||
|
||
+---------------------------------------------------------------------------------+
|
||
| 欢迎使用 【系统信息检查脚本】 |
|
||
| @author: Zhang Peng |
|
||
+---------------------------------------------------------------------------------+
|
||
|
||
EOF
|
||
}
|
||
|
||
# 打印尾部信息
|
||
printFootInfo() {
|
||
cat << EOF
|
||
|
||
+---------------------------------------------------------------------------------+
|
||
| 脚本执行结束,感谢使用! |
|
||
+---------------------------------------------------------------------------------+
|
||
|
||
EOF
|
||
}
|
||
|
||
options=("获取系统信息" "获取服务信息" "获取CPU信息" "获取系统网络信息" "获取系统内存信息" "获取系统磁盘信息" "获取CPU/内存占用TOP10" "获取系统用户信息" "输出所有信息" "退出")
|
||
printMenu() {
|
||
printf "${C_BLUE}"
|
||
printf "主菜单:\n"
|
||
for i in "${!options[@]}"; do
|
||
index=`expr ${i} + 1`
|
||
val=`expr ${index} % 2`
|
||
printf "\t(%02d) %-30s" "${index}" "${options[$i]}"
|
||
if [[ ${val} -eq 0 ]]; then
|
||
printf "\n"
|
||
fi
|
||
done
|
||
printf "${C_BLUE}请输入需要执行的指令:\n"
|
||
printf "${C_RESET}"
|
||
}
|
||
|
||
# 获取系统信息
|
||
get_systatus_info() {
|
||
sys_os=$(uname -o)
|
||
sys_release=$(cat /etc/redhat-release)
|
||
sys_kernel=$(uname -r)
|
||
sys_hostname=$(hostname)
|
||
sys_selinux=$(getenforce)
|
||
sys_lang=$(echo $LANG)
|
||
sys_lastreboot=$(who -b | awk '{print $3,$4}')
|
||
sys_runtime=$(uptime |awk '{print $3,$4}'|cut -d, -f1)
|
||
sys_time=$(date)
|
||
sys_load=$(uptime |cut -d: -f5)
|
||
|
||
cat << EOF
|
||
【系统信息】
|
||
|
||
系统: ${sys_os}
|
||
发行版本: ${sys_release}
|
||
系统内核: ${sys_kernel}
|
||
主机名: ${sys_hostname}
|
||
selinux状态: ${sys_selinux}
|
||
系统语言: ${sys_lang}
|
||
系统当前时间: ${sys_time}
|
||
系统最后重启时间: ${sys_lastreboot}
|
||
系统运行时间: ${sys_runtime}
|
||
系统负载: ${sys_load}
|
||
EOF
|
||
}
|
||
|
||
# 获取CPU信息
|
||
get_cpu_info() {
|
||
Physical_CPUs=$(grep "physical id" /proc/cpuinfo| sort | uniq | wc -l)
|
||
Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
|
||
CPU_Kernels=$(grep "cores" /proc/cpuinfo|uniq| awk -F ': ' '{print $2}')
|
||
CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)
|
||
CPU_Arch=$(uname -m)
|
||
cat << EOF
|
||
【CPU信息】
|
||
|
||
物理CPU个数:$Physical_CPUs
|
||
逻辑CPU个数:$Virt_CPUs
|
||
每CPU核心数:$CPU_Kernels
|
||
CPU型号:$CPU_Type
|
||
CPU架构:$CPU_Arch
|
||
EOF
|
||
}
|
||
|
||
# 获取服务信息
|
||
get_service_info() {
|
||
port_listen=$(netstat -lntup|grep -v "Active Internet")
|
||
kernel_config=$(sysctl -p 2>/dev/null)
|
||
if [[ ${sysversion} -gt 6 ]];then
|
||
service_config=$(systemctl list-unit-files --type=service --state=enabled|grep "enabled")
|
||
run_service=$(systemctl list-units --type=service --state=running |grep ".service")
|
||
else
|
||
service_config=$(/sbin/chkconfig | grep -E ":on|:启用" |column -t)
|
||
run_service=$(/sbin/service --status-all|grep -E "running")
|
||
fi
|
||
cat << EOF
|
||
【服务信息】
|
||
|
||
${service_config}
|
||
${line}
|
||
运行的服务:
|
||
|
||
${run_service}
|
||
${line}
|
||
监听端口:
|
||
|
||
${port_listen}
|
||
${line}
|
||
内核参考配置:
|
||
|
||
${kernel_config}
|
||
EOF
|
||
}
|
||
|
||
# 获取系统内存信息
|
||
get_mem_info() {
|
||
check_mem=$(free -m)
|
||
MemTotal=$(grep MemTotal /proc/meminfo| awk '{print $2}') #KB
|
||
MemFree=$(grep MemFree /proc/meminfo| awk '{print $2}') #KB
|
||
let MemUsed=MemTotal-MemFree
|
||
MemPercent=$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")
|
||
report_MemTotal="$((MemTotal/1024))""MB" #内存总容量(MB)
|
||
report_MemFree="$((MemFree/1024))""MB" #内存剩余(MB)
|
||
report_MemUsedPercent=$(free | sed -n '2p' | gawk 'x = int(( $3 / $2 ) * 100) {print x}' | sed 's/$/%/')
|
||
|
||
cat << EOF
|
||
【内存信息】
|
||
|
||
内存总容量(MB): ${report_MemTotal}
|
||
内存剩余量(MB):${report_MemFree}
|
||
内存使用率: ${report_MemUsedPercent}
|
||
EOF
|
||
}
|
||
|
||
# 获取系统网络信息
|
||
get_net_info() {
|
||
pri_ipadd=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
|
||
pub_ipadd=$(curl ifconfig.me -s)
|
||
gateway=$(ip route | grep default | awk '{print $3}')
|
||
mac_info=$(ip link| egrep -v "lo"|grep link|awk '{print $2}')
|
||
dns_config=$(egrep -v "^$|^#" /etc/resolv.conf)
|
||
route_info=$(route -n)
|
||
cat << EOF
|
||
【网络信息】
|
||
|
||
系统公网地址:${pub_ipadd}
|
||
系统私网地址:${pri_ipadd}
|
||
网关地址:${gateway}
|
||
MAC地址:${mac_info}
|
||
|
||
路由信息:
|
||
${route_info}
|
||
|
||
DNS 信息:
|
||
${dns_config}
|
||
EOF
|
||
}
|
||
|
||
# 获取系统磁盘信息
|
||
get_disk_info() {
|
||
disk_info=$(fdisk -l|grep "Disk /dev"|cut -d, -f1)
|
||
disk_use=$(df -hTP|awk '$2!="tmpfs"{print}')
|
||
disk_percent=$(free | sed -n '2p' | gawk 'x = int(( $3 / $2 ) * 100) {print x}' | sed 's/$/%/')
|
||
disk_inode=$(df -hiP|awk '$1!="tmpfs"{print}')
|
||
|
||
cat << EOF
|
||
【磁盘信息】
|
||
|
||
${disk_info}
|
||
|
||
磁盘使用: ${disk_use}
|
||
磁盘使用百分比: ${disk_percent}
|
||
inode信息: ${disk_inode}
|
||
EOF
|
||
}
|
||
|
||
# 获取系统用户信息
|
||
get_sys_user() {
|
||
login_user=$(awk -F: '{if ($NF=="/bin/bash") print $0}' /etc/passwd)
|
||
ssh_config=$(egrep -v "^#|^$" /etc/ssh/sshd_config)
|
||
sudo_config=$(egrep -v "^#|^$" /etc/sudoers |grep -v "^Defaults")
|
||
host_config=$(egrep -v "^#|^$" /etc/hosts)
|
||
crond_config=$(for cronuser in /var/spool/cron/* ;do ls ${cronuser} 2>/dev/null|cut -d/ -f5;egrep -v "^$|^#" ${cronuser} 2>/dev/null;echo "";done)
|
||
cat << EOF
|
||
【用户信息】
|
||
|
||
系统登录用户:
|
||
|
||
${login_user}
|
||
${line}
|
||
ssh 配置信息:
|
||
|
||
${ssh_config}
|
||
${line}
|
||
sudo 配置用户:
|
||
|
||
${sudo_config}
|
||
${line}
|
||
定时任务配置:
|
||
|
||
${crond_config}
|
||
${line}
|
||
hosts 信息:
|
||
|
||
${host_config}
|
||
EOF
|
||
}
|
||
|
||
# 获取CPU/内存占用TOP10
|
||
get_process_top_info() {
|
||
|
||
top_title=$(top -b n1|head -7|tail -1)
|
||
cpu_top10=$(top b -n1 | head -17 | tail -11)
|
||
mem_top10=$(top -b n1|head -17|tail -10|sort -k10 -r)
|
||
|
||
cat << EOF
|
||
【TOP10】
|
||
CPU占用TOP10:
|
||
|
||
${top_title}
|
||
${cpu_top10}
|
||
|
||
内存占用TOP10:
|
||
|
||
${top_title}
|
||
${mem_top10}
|
||
EOF
|
||
}
|
||
|
||
show_dead_process() {
|
||
printf "僵尸进程:\n"
|
||
ps -al | gawk '{print $2,$4}' | grep Z
|
||
}
|
||
|
||
get_all_info() {
|
||
get_systatus_info
|
||
echo ${double_line}
|
||
get_service_info
|
||
echo ${double_line}
|
||
get_cpu_info
|
||
echo ${double_line}
|
||
get_net_info
|
||
echo ${double_line}
|
||
get_mem_info
|
||
echo ${double_line}
|
||
get_disk_info
|
||
echo ${double_line}
|
||
get_process_top_info
|
||
echo ${double_line}
|
||
get_sys_user
|
||
}
|
||
|
||
main() {
|
||
while [[ 1 ]]
|
||
do
|
||
printMenu
|
||
read option
|
||
local index=$[${option} - 1]
|
||
case ${options[${index}]} in
|
||
"获取系统信息")
|
||
get_systatus_info;;
|
||
"获取服务信息")
|
||
get_service_info ;;
|
||
"获取CPU信息")
|
||
get_cpu_info ;;
|
||
"获取系统网络信息")
|
||
get_net_info ;;
|
||
"获取系统内存信息")
|
||
get_mem_info ;;
|
||
"获取系统磁盘信息")
|
||
get_disk_info ;;
|
||
"获取CPU/内存占用TOP10")
|
||
get_process_top_info ;;
|
||
"获取系统用户信息")
|
||
get_sys_user ;;
|
||
"输出所有信息")
|
||
get_all_info > sys.log
|
||
printf "${C_GREEN}信息已经输出到 sys.log 中。${C_RESET}\n\n"
|
||
;;
|
||
"退出")
|
||
exit ;;
|
||
*)
|
||
clear
|
||
echo "抱歉,不支持此选项";;
|
||
esac
|
||
done
|
||
}
|
||
|
||
######################################## MAIN ########################################
|
||
printHeadInfo
|
||
main
|
||
printFootInfo
|
||
printf "${C_RESET}"
|