#!/usr/bin/env bash############################################################################### console colorC_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#################################################################################### 系统信息检查脚本###################################################################################EOFprintf "${C_RESET}"[[ $(id -u) -gt 0 ]] && echo "请用root用户执行此脚本!" && exit 1sysversion=$(rpm -q centos-release | cut -d- -f3)double_line="==============================================================="line="----------------------------------------------"# 打印头部信息printHeadInfo() {cat << EOF+---------------------------------------------------------------------------------+| 欢迎使用 【系统信息检查脚本】 |+---------------------------------------------------------------------------------+EOF}# 打印尾部信息printFootInfo() {cat << EOF+---------------------------------------------------------------------------------+| 脚本执行结束,感谢使用!|+---------------------------------------------------------------------------------+EOF}options=( "获取系统信息" "获取服务信息" "获取CPU信息" "获取系统网络信息" "获取系统内存信息" "获取系统磁盘信息" "获取CPU/内存占用TOP10" "获取系统用户信息" "输出所有信息" "退出" )printMenu() {printf "${C_BLUE}"printf "主菜单:\n"for i in "${!options[@]}"; doindex=`expr ${i} + 1`val=`expr ${index} % 2`printf "\t(%02d) %-30s" "${index}" "${options[$i]}"if [[ ${val} -eq 0 ]]; thenprintf "\n"fidoneprintf "${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_KernelsCPU型号:$CPU_TypeCPU架构:$CPU_ArchEOF}# 获取服务信息get_service_info() {port_listen=$(netstat -lntup | grep -v "Active Internet")kernel_config=$(sysctl -p 2> /dev/null)if [[ ${sysversion} -gt 6 ]]; thenservice_config=$(systemctl list-unit-files --type=service --state=enabled | grep "enabled")run_service=$(systemctl list-units --type=service --state=running | grep ".service")elseservice_config=$(/sbin/chkconfig | grep -E ":on|:启用" | column -t)run_service=$(/sbin/service --status-all | grep -E "running")ficat << 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}') #KBMemFree=$(grep MemFree /proc/meminfo | awk '{print $2}') #KBlet MemUsed=MemTotal-MemFreeMemPercent=$(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/*; dols ${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/内存占用TOP10get_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:${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_infoecho ${double_line}get_service_infoecho ${double_line}get_cpu_infoecho ${double_line}get_net_infoecho ${double_line}get_mem_infoecho ${double_line}get_disk_infoecho ${double_line}get_process_top_infoecho ${double_line}get_sys_user}main() {while [[ 1 ]]doprintMenuread optionlocal 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.logprintf "${C_GREEN}信息已经输出到 sys.log 中。${C_RESET}\n\n";;"退出")exit ;;*)clearecho "抱歉,不支持此选项" ;;esacdone}######################################## MAIN ########################################printHeadInfomainprintFootInfoprintf "${C_RESET}"