概述
为方便获取服务器系统及服务相关信息,根据业务实际以及系统相关情况特编写该脚本。
脚本功能
- 可查询服务器主板、BIOS、CPU、内存卡、网卡硬件信息;
- 可查询系统基础信息、SElinux状态、语言编码、启动时间等信息;
- 可查询默认网卡配置信息、外网地址、本地网卡地址等信息;
- 可检查OpenSSH服务版本、运行状态、协议版本、监听端口、信任主机等信息;
- 可查询Firewalld&IPtables防火墙状态、版本、规则信息;
- 可检查JAVA工具部署情况;
- 可检查Sudoers授权信息;
- 可查询UDP&TCP端口监听信息;
- 可查询系统自启动执行命令内容;
- 可查询历史用户登录窗口和时间等信息;
- 可查询最近10个软件安装信息;
- 可查询系统各用户所配置的计划任务;
- 可查询随系统自启动的服务以及当前系统运行的服务;
- 可查询僵尸进程、CPU&内存占用前十进程;
- 可检查SNMP服务运行状态;
- 可检查NTP服务运行状态;
- 可检查Syslog服务运行状态;
- 可检查用户密码过期时间、密码策略;
- 可检查特权用户、空密码用户、相同ID用户、可登录用户列表;
- 可检查磁盘分区、分区大小、可用率等信息;
- 可检查内存使用情况、缓存、交换分区等信息。
脚本内容
#!/bin/bash
# Centos7服务器系统及服务信息查询
# Author: admin@ym68.cc
# Date: 2021-12-10
# Version: 0.0.2
# Description: 该脚本用于查询服务器硬件及系统服务信息
# 设置脚本语言
Old_LANG=$LANG
LANG="en_US.utf8"
# 查看系统版本
System_Release_D=`sed -n 's/.*release[[:space:]]([0-9]).[0-9].*/1/p' /etc/redhat-release`
Info_Header(){
echo -e "#==================== 33[33m ${1} ! 33[0m ====================#"
}
Info_Echo(){
echo -e "#t${1}t: 33[33m${2} 33[0m"
}
Info_Echo_2(){
echo -e "#tt${1}t: 33[33m${2} 33[0m"
}
# 检查If判断是否为空
Check_If_Not_Code_Null(){
if [ ! -z "${2}" ];then
Info_Echo_2 "${1}" "${2}"
fi
}
# 检查服务状态
Check_Service_Status(){
if [[ ${System_Release_D} -eq 7 ]];then
# 服务检查
systemctl is-active ${1}
else
if [ -e "/etc/init.d/$1" ];then
if [ `/etc/init.d/${1} status 2>/dev/null | grep -E "is running|正在运行" | wc -l` -ge 1 ];then
echo "active"
else
echo "inactive"
fi
else
echo "unknown"
fi
fi
}
# 安装必要的依赖
Init_Install_Packages_Name_List=(pciutils nmap-ncat)
for Install_Packages_Name in ${Init_Install_Packages_Name_List[@]};do
Check_Install_Info=`rpm -q "${Install_Packages_Name}"`
if [[ "${Check_Install_Info}" =~ "is not installed" ]];then
yum -y install "${Install_Packages_Name}" &> /dev/null
fi
done
# 服务器硬件信息
Hardware_Information(){
Info_Header "服务器设备信息"
# 服务器序列号
System_Serial_Number=`dmidecode -s system-serial-number`
if [ -z "${System_Serial_Number}" ];then
System_Serial_Number=`cat /proc/device-tree/serial-number`
fi
# 服务器型号
System_Product_Name=`dmidecode -s system-product-name|egrep -v '^#|^$'|head -1`
if [ -z "${System_Product_Name}" ];then
System_Product_Name=`cat /proc/device-tree/model`
fi
# 服务器制造商
System_Manufacturer=`dmidecode -s system-Manufacturer`
# 服务器硬件类型
System_Server_Hardware_Type=`dmesg |awk '/virtualized kernel on/ {if($8 == ""){print $7}else{print $7,$8}}'`
if [ -z "${System_Server_Hardware_Type}" ];then
System_Server_Hardware_Type=`lscpu|awk -F'[: ]+' '/Virtualization/{print $2}'`
fi
Info_Echo "服务器序列号" "${System_Serial_Number}"
Info_Echo "服务器制造商" "${System_Manufacturer}"
Info_Echo "服务器型号" "${System_Product_Name}"
Info_Echo "服务器硬件类型" "${System_Server_Hardware_Type}"
Info_Header "BIOS信息"
# Bios信息
System_Bios_Info=`dmidecode -t bios`
# Bios厂商
System_Bios_Vendor_Info=`echo "${System_Bios_Info}" |awk -F':[[:space:]]' '/Vendor/ {print $2}'|sort|uniq`
# Bios版本
System_Bios_Version_Info=`echo "${System_Bios_Info}" |awk -F':[[:space:]]' '/Version/ {print $2}'|sort|uniq`
# Bios发布时间
System_Bios_Release_Date_Info=`echo "${System_Bios_Info}" |awk -F':[[:space:]]' '/Release Date/ {print $2}'|sort|uniq`
Info_Echo "Bios厂商" "${System_Bios_Vendor_Info}"
Info_Echo "Bios版本" "${System_Bios_Version_Info}"
Info_Echo "Bios发布时间" "${System_Bios_Release_Date_Info}"
Info_Header "CPU硬件信息"
CPU_Info=`cat /proc/cpuinfo`
# CPU架构
CPU_Arch_Info=`uname -m`
# 物理CPU数量
CPU_Physical_Sum_Info=`echo "${CPU_Info}"|grep "^physical id"| sort | uniq | wc -l`
# CPU物理线程数
CPU_Cores_Sum_Info=`echo "${CPU_Info}"|grep "^cpu cores"|uniq| awk -F':[[:space:]]' '{print $2}'`
# CPU逻辑线程数
CPU_Processor_Info=`echo "${CPU_Info}"|awk '/^processor/ {processor[$2]++} END { for (sum in processor) {print processor[sum]}}'`
if [ "${CPU_Physical_Sum_Info}" = 0 -a "${CPU_Processor_Info}" -gt 0 -a -z "${CPU_Cores_Sum_Info}" ];then
# CPU物理线程数
CPU_Physical_Sum_Info=1
CPU_Cores_Sum_Info=$CPU_Processor_Info
fi
Info_Echo "CPU架构类型" "${CPU_Arch_Info}"
Info_Echo "物理CPU数量" "${CPU_Physical_Sum_Info}"
Info_Echo "CPU总物理核心数" "${CPU_Physical_Sum_Info} * ${CPU_Cores_Sum_Info}"
Info_Echo "CPU总逻辑线程数" "${CPU_Processor_Info}"
# CPU物理ID列表
CPU_Device_Physical_Id_List=`echo "${CPU_Info}"|awk -F':[[:space:]]' '/^physical id/ {print $2}'|sort |uniq`
if [ -z "${CPU_Device_Physical_Id_List}" ];then
Info_Echo "CPU硬件型号" "`echo "${CPU_Info}"|awk -F':[[:space:]]' '/^Hardware/ {print $2}'`"
fi
for CPU_Device_Physical_Id in ${CPU_Device_Physical_Id_List};do
# CPU硬件信息
CPU_Device_All_Info=`echo "${CPU_Info}"|grep -A 15 -B 9 "^physical id.*${CPU_Device_Physical_Id}"`
# CPU设备型号
CPU_Device_Model_Name_Info=`echo "${CPU_Device_All_Info}" |awk -F':[[:space:]]' '/^model name/ {print $2}'|sort|uniq`
# CPU缓存大小
CPU_Device_Cache_Size_Info=`echo "${CPU_Device_All_Info}" |awk -F':[[:space:]]' '/^cache size/ {print $2}'|sort|uniq`
# CPU逻辑线程数
CPU_Device_Siblings_Info=`echo "${CPU_Device_All_Info}" |awk -F':[[:space:]]' '/^siblings/ {print $2}'|sort|uniq`
# CPU物理核心数
CPU_Device_Cpu_Cores_Info=`echo "${CPU_Device_All_Info}" |awk -F':[[:space:]]' '/^cpu cores/ {print $2}'|sort|uniq`
# CPU硬件查询
CPU_Device_Processor_Info=`dmidecode -t processor|grep -v '[[:space:]][[:space:]]' |grep -A 22 -B2 "CPU.$((${CPU_Device_Physical_Id}+1))"|grep -B 30 "^$"`
if [ -z "${CPU_Device_Processor_Info}" ];then
# CPU硬件查询
CPU_Device_Processor_Info=`dmidecode -t processor|grep -v '[[:space:]][[:space:]]' |grep -A 22 -B2 "CPU.$((${CPU_Device_Physical_Id}+1))"`
if [ -z "${CPU_Device_Processor_Info}" ];then
# CPU硬件查询
CPU_Device_Processor_Info=`dmidecode -t processor|grep -v '[[:space:]][[:space:]]' |grep -A 22 -B2 "Socket.$((${CPU_Device_Physical_Id}+1))"`
if [ -z "${CPU_Device_Processor_Info}" ];then
# CPU硬件查询
CPU_Device_Processor_Info=`dmidecode -t processor|grep -v '[[:space:]][[:space:]]' |grep -A 22 -B2 "CPU.${CPU_Device_Physical_Id}"`
fi
fi
fi
# CPU最大速率
CPU_Device_Processor_Max_Speed=`echo "${CPU_Device_Processor_Info}" |awk -F':[[:space:]]' '/Max Speed:/ {print $2}'`
# CPU当前速率
CPU_Device_Processor_Current_Speed=`echo "${CPU_Device_Processor_Info}" |awk -F':[[:space:]]' '/Current Speed:/ {print $2}'`
# CPU序列号
CPU_Device_Processor_ID=`echo "${CPU_Device_Processor_Info}" |awk -F':[[:space:]]' '/[[:space:]]ID:/ {print $2}'`
Info_Echo "CPU硬件型号" "${CPU_Device_Model_Name_Info}"
Info_Echo_2 "CPU物理ID" "${CPU_Device_Physical_Id}"
Check_If_Not_Code_Null "CPU序列号" "${CPU_Device_Processor_ID}"
Info_Echo_2 "CPU缓存大小" "${CPU_Device_Cache_Size_Info}"
Info_Echo_2 "CPU物理核心数" "${CPU_Device_Cpu_Cores_Info}"
Info_Echo_2 "CPU逻辑线程数" "${CPU_Device_Siblings_Info}"
Check_If_Not_Code_Null "CPU最大速率" "${CPU_Device_Processor_Max_Speed}"
Check_If_Not_Code_Null "CPU当前速率" "${CPU_Device_Processor_Current_Speed}"
done
Info_Header "内存硬件信息"
# 总内存数
System_Memory_Total_Number=`awk -F":[[:space:]]" '/^MemTotal:/ {print $2}' /proc/meminfo|awk '{print $1/1024/1024}'`
Info_Echo "当前内存" "${System_Memory_Total_Number} G"
# 最大支持内存
System_Memory_Maximum_Capacity=`dmidecode -t memory |awk -F':[[:space:]]' '/Maximum Capacity:/ {print $2}'|uniq`
Info_Echo "最大支持内存" "${System_Memory_Maximum_Capacity}"
# 内存条总插槽数
System_Memory_Number_Of_Devices=`dmidecode -t memory |awk -F':[[:space:]]' '/Number Of Devices:/ {print $2}'|uniq`
Info_Echo "内存条总插槽数" "${System_Memory_Number_Of_Devices}"
# 内存条序列号列表
Memory_Device_Serial_Number_List=`dmidecode -t memory |awk -F':[[:space:]]' '/Serial Number/{print $2}'|egrep -v 'NO[[:space:]]|_SerNum|Not'`
# 内存条数量
Memory_Device_Number=`echo "${Memory_Device_Serial_Number_List}"|wc -l`
Info_Echo "已插内存条条数" "${Memory_Device_Number}"
Old_IFS=$IFS
IFS=$'n'
for Memory_Device_Serial_Number in ${Memory_Device_Serial_Number_List};do
# 内存条硬件信息
Memory_Device_Info=`dmidecode -t memory |grep -A '7' -B '15' "${Memory_Device_Serial_Number}"`
# 存储大小
Memory_Device_Size_Info=`echo "${Memory_Device_Info}"|awk -F':[[:space:]]' '/Size:/ {print $2}'`
# 设备制造商
Memory_Device_Manufacturer_Info=`echo "${Memory_Device_Info}"|awk -F':[[:space:]]' '/Manufacturer:/ {print $2}'`
# 设备部件序号
Memory_Device_Part_Number_Info=`echo "${Memory_Device_Info}"|awk -F':[[:space:]]' '/Part Number:/ {print $2}'`
# 设备部件序号
Memory_Device_Speed_Info=`echo "${Memory_Device_Info}"|awk -F':[[:space:]]' '/^[[:space:]]Speed:/ {print $2}'`
Info_Echo "内存条序列号" "${Memory_Device_Serial_Number}"
Info_Echo_2 "内存条频率" "${Memory_Device_Speed_Info}"
Info_Echo_2 "内存条大小" "${Memory_Device_Size_Info}"
Info_Echo_2 "内存条制造商" "${Memory_Device_Manufacturer_Info}"
Info_Echo_2 "设备部件序号" "${Memory_Device_Part_Number_Info}"
done
IFS=$Old_IFS
Info_Header "网卡硬件信息"
# 网卡名称列表
Network_Device_Name_List=`ls /sys/class/net/`
for Network_Device_Name in ${Network_Device_Name_List};do
Info_Echo "网卡设备名称" "${Network_Device_Name}"
# 网卡设备信息
Network_Device_Info=`ethtool ${Network_Device_Name} 2>&1`
# 网卡开启状态
Network_Device_Link_Detected_Info=`echo "${Network_Device_Info}"|awk -F':[[:space:]]' '/Link detected:/{print $2}'`
# 网卡接口类型
Network_Device_Port_Info=`echo "${Network_Device_Info}"|awk -F':[[:space:]]' '/Port:/{print $2}'`
# 网卡工作速率
Network_Device_Speed_Info=`echo "${Network_Device_Info}"|awk -F':[[:space:]]' '/Speed:/{print $2}'`
# 网卡工作模式
Network_Device_Duplex_Info=`echo "${Network_Device_Info}"|awk -F':[[:space:]]' '/Duplex:/{print $2}'`
# 网卡设备驱动信息
Network_Device_Driver_Info=`ethtool -i ${Network_Device_Name} 2>&1`
# 网卡设备驱动类型
Network_Device_Driver_Type_Info=`echo "${Network_Device_Driver_Info}"|awk -F':[[:space:]]' '/^driver:/{print $2}'`
# 网卡设备驱动版本
Network_Device_Driver_Version_Info=`echo "${Network_Device_Driver_Info}"|awk -F':[[:space:]]' '/^version:/{print $2}'`
# 网卡设备总线信息
Network_Device_Driver_Bus_Info_Info=`echo "${Network_Device_Driver_Info}"|awk -F':[[:space:]]' '/^bus-info:/{print $2}'|grep -Ev 'N/A|^tap'`
Check_If_Not_Code_Null "网卡接口类型" "${Network_Device_Port_Info}"
Check_If_Not_Code_Null "网卡工作模式" "${Network_Device_Duplex_Info}"
Info_Echo_2 "网卡开启状态" "${Network_Device_Link_Detected_Info}"
Check_If_Not_Code_Null "网卡工作速率" "${Network_Device_Speed_Info}"
Check_If_Not_Code_Null "网卡驱动类型" "${Network_Device_Driver_Type_Info}"
Check_If_Not_Code_Null "网卡驱动版本" "${Network_Device_Driver_Version_Info}"
Check_If_Not_Code_Null "网卡总线信息" "${Network_Device_Driver_Bus_Info_Info}"
if [ ! -z "${Network_Device_Driver_Bus_Info_Info}" ];then
Network_Device_All_Info=`lspci -s "${Network_Device_Driver_Bus_Info_Info}" -vv 2>&1`
# 网卡设备名称
Network_Device_Name_Info=`echo "${Network_Device_All_Info}" |awk -F':[[:space:]]' '/Ethernet controller:/ {print $2}'`
# 网卡设备序列号
Network_Device_Device_Serial_Number_Info=`echo "${Network_Device_All_Info}" |awk -F'Device Serial Number[[:space:]]' '/Device Serial Number/ {print $2}'`
Info_Echo_2 "网卡硬件型号" "${Network_Device_Name_Info}"
Check_If_Not_Code_Null "网卡设备序列号" "${Network_Device_Device_Serial_Number_Info}"
fi
done
}
# 基础系统信息
System_Info(){
Info_Header "系统信息"
# 获取当前主机名
Host_Name=`uname -n`
# 操作系统
Operating_System=`uname -o`
# 系统内核
System_Kernel=`uname -r`
# 操作系统发行版本
System_Release=`cat /etc/redhat-release`
# SElinux状态
SELinux_Status=`/usr/sbin/sestatus | awk '/^SELinux status:/ {print $3}'`
# 系统启动时间
System_Start=`who -b|awk '{print $3,$4}'`
Info_Echo "主机名称" "${Host_Name}"
Info_Echo "操作系统" "${Operating_System}"
Info_Echo "系统内核" "${System_Kernel}"
Info_Echo "发行版本" "${System_Release}"
Info_Echo "SElinux状态" "${SELinux_Status}"
Info_Echo "语言/编码" "${Old_LANG}"
Info_Echo "启动时间" "${System_Start}"
}
# 网络信息
Network_Info(){
Info_Header "网络信息"
# 默认网卡名称
Network_Device_Default_Name=`route -n |awk '/^0.0.0.0/ {print $8}'`
# 获取外网IP
External_Network_Address=`curl -s --connect-timeout 2 http://ip.42.pl/raw`
Info_Echo "默认出口网卡" "${Network_Device_Default_Name}"
Info_Echo "外网地址" "${External_Network_Address}"
# DNS服务器地址
Network_Resolv=`awk '/^nameserver/ {print $2}' /etc/resolv.conf| tr 'n' ',' | sed 's/,$//'`
# 网关IP
Network_Getway_Address=`route -n|awk '/^0/ {print $2}'`
Info_Echo "DNS地址" "${Network_Resolv}"
Info_Echo "网关地址" "${Network_Getway_Address}"
# 网卡名称列表
Network_Device_Name_List=`ls /sys/class/net/`
for Network_Device_Name in ${Network_Device_Name_List};do
Info_Echo "网卡名称" "${Network_Device_Name}"
# 获取默认网卡IPv4&IPv6地址
Domanin_Server_Ip_List=`ip addr show ${Network_Device_Name}|awk -F'[ ]+' '/inet/{print $3}' `
for Domanin_Server_Ip in ${Domanin_Server_Ip_List};do
Info_Echo_2 "本地地址" "${Domanin_Server_Ip}"
done
done
}
# SSH检查信息
SSH_Check_Info(){
Info_Header "OpenSSH检查"
# SSH服务版本
Sshd_Service_Version=`ssh -V 2>&1|awk -F'[ ,]+' '{print $1}'`
# SSH监听端口
Sshd_Port=`sshd -T 2>&1|awk '/^port/ {print $2}'`
# SSH允许远程ROOT登录
Sshd_Permit_Root_Login=`sshd -T 2>&1|awk '/^permitrootlogin/ {print $2}'`
# SSH运行状态
Server_Sshd_Running_Status=`Check_Service_Status "sshd"`
# SSH协议版本
Sshd_Protocol_Version=`nc -v -i 0.01 127.0.0.1 ${Sshd_Port} 2>&1|awk -F'-' '/^SSH/{print $2}'`
# SSH密码登陆
Sshd_Password_Authentication=`sshd -T 2>&1|awk '/^passwordauthentication/ {print $2}'`
# 信任主机配置
Sshd_Authorized_Keys_File=`sshd -T 2>&1|awk '/^authorizedkeysfile/ {print $2}'`
# 空密码登陆
Sshd_Permit_Empty_Passwords=`sshd -T 2>&1|awk '/^permitemptypasswords/ {print $2}'`
Info_Echo "SSHD服务版本" "${Sshd_Service_Version}"
Info_Echo "SSHD运行状态" "${Server_Sshd_Running_Status}"
Info_Echo "SSHD协议版本" "${Sshd_Protocol_Version}"
Info_Echo "监听端口" "${Sshd_Port}"
Info_Echo "ROOT远程登录" "${Sshd_Permit_Root_Login}"
Info_Echo "SSH密码登陆" "${Sshd_Password_Authentication}"
Info_Echo "空密码登陆" "${Sshd_Permit_Empty_Passwords}"
Info_Echo "信任主机配置" "${Sshd_Authorized_Keys_File}"
# 主机登陆用户列表
Passwd_List_Info=`cat /etc/passwd`
# 信任主机列表
Sshd_Login_Bash_User_List=`echo "${Passwd_List_Info}"|awk -F':' '//bin/bash/ {print $1}'`
for Sshd_Login_Bash_User in ${Sshd_Login_Bash_User_List};do
# 信任主机配置文件绝对路径
Sshd_Authorize_File=`echo "${Passwd_List_Info}"|awk -F':' "/^${Sshd_Login_Bash_User}/ {print \$6"/${Sshd_Authorized_Keys_File}"}"`
if [ -f "${Sshd_Authorize_File}" ];then
# 信任主机名称
Sshd_Authorized_Host=`awk '{print $3}' $Sshd_Authorize_File 2>/dev/null | tr 'n' ',' | sed 's/,$//'`
Check_If_Not_Code_Null "${Sshd_Login_Bash_User}免密授权" "${Sshd_Authorized_Host}"
fi
done
}
# 防火墙检查
Firewall_Check(){
Info_Header "防火墙检查"
# Firewalld版本
Firewalld_Version=`firewall-cmd --version 2>&1`
# Firewalld防火墙运行状态
Server_Firewalld_Running_Status=`Check_Service_Status "firewalld"`
# Firewalld默认节点
Firewalld_Default_Zone=`firewall-cmd --get-default-zone 2>&1`
# Firewalld地址伪装功能
Firewalld_Masquerade=`firewall-cmd --zone=${Firewalld_Default_Zone} --list-all 2>&1|awk -F':[[:space:]]' '/masquerade:/ {print $2}'`
Info_Echo "Firewalld防火墙运行状态" "${Server_Firewalld_Running_Status}"
if [ "${Server_Firewalld_Running_Status}" = 'active' ];then
Info_Echo "Firewalld版本" "${Firewalld_Version}"
Check_If_Not_Code_Null "Firewalld地址伪装功能" "${Firewalld_Masquerade}"
Info_Echo "Firewalld默认节点" "${Firewalld_Default_Zone}"
# Firewalld服务端口
Firewalld_Ports_List=`firewall-cmd --zone=${Firewalld_Default_Zone} --list-ports 2>&1`
Check_If_Not_Code_Null "Firewalld开放端口" "${Firewalld_Ports_List}"
# Firewalld高级规则
Firewalld_Rich_Rules_List=`firewall-cmd --zone=${Firewalld_Default_Zone} --list-rich-rules 2>&1`
Old_IFS=$IFS
IFS=$'n'
for Firewalld_Rich_Rules in ${Firewalld_Rich_Rules_List};do
Info_Echo_2 "Firewalld高级规则" "${Firewalld_Rich_Rules}"
done
# 还原分隔符
IFS=$Old_IFS
fi
# IPtables_版本
IPtables_Version=`iptables --version 2>&1|awk '{print $2}'`
# iptables防火墙运行状态
Server_IPtables_Running_Status=`Check_Service_Status "iptables"`
# Input列表
IPtables_Input_List=`iptables -n -L INPUT 2>&1`
# Input开放列表
IPtables_Input_ACCEPT_List=`echo "${IPtables_Input_List}" |awk -F'[ :.]+' '/^ACCEPT/ {if ($4 == "0"){print}}'`
# IPtables开放端口
IPtables_Input_ACCEPT_Port=`echo "${IPtables_Input_ACCEPT_List}"|awk -F'[[:space:]]dpt:' '{print $2}'|sort |uniq|grep -v '^$'| tr 'n' ',' | sed 's/,$//'`
# IPtables开放端口范围
IPtables_Input_ACCEPT_Ports=`echo "${IPtables_Input_ACCEPT_List}"|awk -F'[[:space:]]dpts:' '{print $2}'|sort |uniq|grep -v '^$'| tr 'n' ',' | sed 's/,$//'`
Info_Echo "IPtables版本" "${IPtables_Version}"
Info_Echo "IPtables防火墙运行状态" "${Server_IPtables_Running_Status}"
Check_If_Not_Code_Null "IPtables开放端口" "${IPtables_Input_ACCEPT_Port}"
Check_If_Not_Code_Null "IPtables开放端口范围" "${IPtables_Input_ACCEPT_Ports}"
}
# JAVA检查
Java_Check(){
Info_Header "JAVA检查"
# 检查java是否部署
Check_Java_Install_Info=`which java 2>&1`
if [[ "${Check_Java_Install_Info}" =~ "which: no" || -z "${Check_Java_Install_Info}" ]];then
Check_Java_Install_Info_D='未部署'
else
Check_Java_Install_Info_D='已部署'
fi
# JAVA版本
Java_Version=`java -version 2>&1|awk -F'[ "]+' '/version/ {print $3}'`
Info_Echo "JAVA状态" "${Check_Java_Install_Info_D}"
Check_If_Not_Code_Null "JAVA版本" "${Java_Version}"
Check_If_Not_Code_Null "JAVA家目录" "${JAVA_HOME}"
}
# Sudoers检查
Sudoers_Check(){
Info_Header "Sudoers检查"
# Sudoers配置文件
Sudoers_Conf_Info=`egrep -v "^#|Defaults|^$" /etc/sudoers`
Old_IFS=$IFS
IFS=$'n'
for Sudoers_Conf in ${Sudoers_Conf_Info};do
# 授权用户
Sudoers_User=`echo "${Sudoers_Conf}"|awk '{print $1}'`
# 授权主机
Sudoers_Host=`echo "${Sudoers_Conf}"|awk '{print $2}'`
# 授权命令
Sudoers_Order=`echo "${Sudoers_Conf}"|awk '{print $3}'`
# 授权类型
Sudoers_Order_T=`echo "${Sudoers_Order}"|awk -F':' '{print $1}'`
# 授权命令列表
Sudoers_Order_D_List=`echo "${Sudoers_Order}"|awk -F':' '{print $2}'|sed -n 's/,/n/gp'`
if [ -z "${Sudoers_Order_T}" ];then
Sudoers_Order_T=$Sudoers_Order
fi
Info_Echo "授权用户" "${Sudoers_User}"
Info_Echo_2 "授权主机" "${Sudoers_Host}"
Info_Echo_2 "授权类型" "${Sudoers_Order_T}"
for Sudoers_Order_D in ${Sudoers_Order_D_List};do
Info_Echo_2 "授权命令" "${Sudoers_Order_D}"
done
done
# 还原分隔符
IFS=$Old_IFS
}
# 端口监听检查
Port_Answer_Check(){
Info_Header "端口监听检查"
# 端口接听列表
Network_Answer_Port_Info_List=`ss -ntxulp | column -t|awk 'NR>1'`
Old_IFS=$IFS
IFS=$'n'
for Network_Answer_Port_Info in ${Network_Answer_Port_Info_List};do
# 网络监听类型
Network_Answer_Type=`echo "${Network_Answer_Port_Info}"|awk '{print $1}'`
# 网络监听状态
Network_Answer_Status=`echo "${Network_Answer_Port_Info}"|awk '{print $2}'`
# 本地地址及端口
Network_Answer_Local_Port=`echo "${Network_Answer_Port_Info}"|awk '{print $5}'`
# 对端地址及端口
Network_Answer_Peer_Address_Port=`echo "${Network_Answer_Port_Info}"|awk '{print $6}'`
if [ "${Network_Answer_Type}" = 'tcp' -o "${Network_Answer_Type}" = 'udp' ];then
# 显示监听端口的进程
Network_Answer_Peer_Process_Info=`echo "${Network_Answer_Port_Info}"|awk '{print $7}'`
else
# 显示监听端口的进程
Network_Answer_Peer_Process_Info=`echo "${Network_Answer_Port_Info}"|awk '{print $9}'`
fi
# 监听端口服务
Network_Answer_Peer_Process_Command=`echo "${Network_Answer_Peer_Process_Info}"|awk -F'[ ",=)]+' '{print $2}'`
# 监听进程Pid
Network_Answer_Peer_Process_Pid=`echo "${Network_Answer_Peer_Process_Info}"|awk -F'[ ",=)]+' '{print $4}'`
Network_Answer_Peer_Process_Fd=`echo "${Network_Answer_Peer_Process_Info}"|awk -F'[ ",=)]+' '{print $6}'`
Info_Echo "本地地址及端口" "${Network_Answer_Local_Port}"
Info_Echo_2 "网络监听类型" "${Network_Answer_Type}"
Info_Echo_2 "监听端口服务" "${Network_Answer_Peer_Process_Command}"
Info_Echo_2 "监听进程Pid" "${Network_Answer_Peer_Process_Pid}"
Info_Echo_2 "网络监听状态" "${Network_Answer_Status}"
Info_Echo_2 "对端地址及端口" "${Network_Answer_Peer_Address_Port}"
done
# 还原分隔符
IFS=$Old_IFS
}
# 自启动检查
Auto_Start_Check(){
Info_Header "自启动检查"
rc_File_List=`find /etc/rc.d/ -type f`
IFS=$'n'
Old_IFS=$IFS
for Up_File in $rc_File_List;do
if [ -f "${Up_File}" ];then
# 本地自启动信息
Local_Start_List=`egrep -v '^#|^$' "${Up_File}"`
Info_Echo "自启动文件" "${Up_File}"
for Local_Start in ${Local_Start_List};do
Info_Echo_2 "启动命令" "${Local_Start}"
done
fi
done
# 还原分隔符
IFS=$Old_IFS
}
# 用户登陆检查
User_Login_Check(){
Info_Header "用户登陆检查"
# 历史登陆用户信息
History_Login_User_Info_List=`who /var/log/wtmp|tail`
Old_IFS=$IFS
IFS=$'n'
for History_Login_User_Info in ${History_Login_User_Info_List};do
#echo "${History_Login_User_Info}"
# 历史登陆用户名称
History_Login_User_Name=`echo "${History_Login_User_Info}"|awk '{print $1}'`
# 历史登陆窗口
History_Login_Window=`echo "${History_Login_User_Info}"|awk '{print $2}'`
# 历史登陆时间
History_Login_Date=`echo "${History_Login_User_Info}"|awk '{print $3,$4}'`
# 历史登陆IP
History_Login_Address=`echo "${History_Login_User_Info}"|awk -F'[()]+' '{print $2}'`
Info_Echo "登陆用户" "${History_Login_User_Name}"
Info_Echo_2 "历史登陆窗口" "${History_Login_Window}"
Info_Echo_2 "历史登陆时间" "${History_Login_Date}"
Info_Echo_2 "历史登陆地址" "${History_Login_Address}"
done
# 还原分隔符
IFS=$Old_IFS
}
# 软件包安装检查
Packages_Install_Check(){
Info_Header "软件包安装检查"
Packages_Install_Info_List=`rpm -qa --last | head | column -t|awk '{print $1}'`
Old_IFS=$IFS
IFS=$'n'
for Packages_Install_Info in ${Packages_Install_Info_List};do
# 软件安装时间
Packages_Install_Date=`rpm -qi "${Packages_Install_Info}"|awk -F':[[:space:]]' '/^Install Date/ {print $2}'|sed -r 's/[[:space:]]Build.*//g'|xargs -i date -d "{}" "+%Y-%m-%d %H:%M:%S"`
# 软件打包时间
Packages_Build_Date=`rpm -qi "${Packages_Install_Info}"|awk -F':[[:space:]]' '/^Build Date/ {print $2}'`
Info_Echo "安装包" "${Packages_Install_Info}"
Info_Echo_2 "软件安装时间" "${Packages_Install_Date}"
Info_Echo_2 "软件打包时间" "${Packages_Build_Date}"
done
# 还原分隔符
IFS=$Old_IFS
}
# 计划任务检查
Scheduled_Task_Check(){
Info_Header "计划任务检查"
# 系统登陆SHELL列表
System_Login_Shell_List=`grep -Ev "/sbin/nologin|^#|^$" /etc/shells|sed -n 's#/#\/#gp'`
for System_Login_Shell in ${System_Login_Shell_List};do
System_Login_User_List=`awk -F':' "/${System_Login_Shell}/ {print \$1}" /etc/passwd`
for System_Login_User in ${System_Login_User_List};do
System_User_Crontab_List=`crontab -l -u "${System_Login_User}" 2>/dev/null|grep -v '^#'`
if [ ! -z "${System_User_Crontab_List}" ];then
Info_Echo "用户" "${System_Login_User}"
Old_IFS=$IFS
IFS=$'n'
for System_User_Crontab in ${System_User_Crontab_List};do
Info_Echo_2 "生效任务" "${System_User_Crontab}"
done
# 还原分隔符
IFS=$Old_IFS
fi
done
done
# 检索计划任务配置文件
# find /etc/cron* -type f | xargs -i ls -l {} | column -t
}
# 服务检查
System_Service_Check(){
Info_Header "自启服务检查"
if [[ "${System_Release_D}" -eq 7 ]];then
# 开机启动的服务列表
System_Enable_Service_Info_List=`systemctl list-unit-files --type=service --state=enabled --no-pager | awk '/.service/ {print $1}'`
# 运行的服务列表
System_Running_Service_Info_List=`systemctl list-units --type=service --state=running --no-pager | awk '/.service/ {print $1}'`
else
# 开机启动的服务列表
System_Enable_Service_Info_List=$(/sbin/chkconfig | grep -E ":on|:启用"|awk '{print $1}')
# 运行的服务列表
System_Running_Service_Info_List=`/sbin/service --status-all 2>/dev/null | grep -E "is running|正在运行"|awk '{print $1}'`
fi
for System_Enable_Service_Info in ${System_Enable_Service_Info_List};do
Info_Echo "服务 ${System_Enable_Service_Info/.service} 状态" "Enabled"
done
Info_Header "运行服务检查"
for System_Running_Service_Info in ${System_Running_Service_Info_List};do
Info_Echo "服务 ${System_Running_Service_Info/.service} 状态" "Running"
done
}
# 服务进程检查
Service_Process_Check(){
Info_Header "服务进程检查"
# 僵尸进程
Zombie_Process_Check_Sum=`ps -ef | grep defunct | grep -v grep | wc -l`
Info_Echo "僵尸进程数量" "${Zombie_Process_Check_Sum}"
Info_Header "内存占用前10"
# 内存占用前10
Process_Memory_Info_List=`ps ax -o ruser=userForLongName -e -o pid,%mem,rss,start,time,command| sort -k3rn | head -n 10`
Old_IFS=$IFS
IFS=$'n'
for Process_Memory_Info in ${Process_Memory_Info_List};do
# 进程PID
Process_Memory_Pid=`echo "${Process_Memory_Info}"|awk '{print $2}'`
# 程序运行路径
Process_Running_Path=`lsof -p ${Process_Memory_Pid} -a -d txt +c 15|awk 'NR>1 {print $9}'`
# 进程名称
Process_Memory_Command=`lsof -p ${Process_Memory_Pid} -a -d txt +c 15|awk 'NR>1 {print $1}'`
# 运行用户
Process_Memory_Running_User=`echo "${Process_Memory_Info}"|awk '{print $1}'`
# 内存使用率
Process_Memory_Use_Rate=`echo "${Process_Memory_Info}"|awk '{print $3}'`
# 物理内存使用
Process_Memory_RSS=`echo "${Process_Memory_Info}"|awk '{print $4}'`
# 运行时间
Process_Memory_Time=`echo "${Process_Memory_Info}"|awk '{print $5,$6,$7}'`
Process_Memory_Time_1=`echo "${Process_Memory_Time}"|grep '^[0-9]'`
if [ -z "${Process_Memory_Time_1}" ];then
Process_Memory_Time=`echo "${Process_Memory_Time}"|xargs -i date -d "{}" "+%Y-%m-%d %H:%M:%S"`
else
# 进程运行时间
Process_Memory_Time=`echo "${Process_Memory_Info}"|awk '{print $5}'|xargs -i date "+%Y-%m-%d {}"`
fi
Info_Echo "运行PID" "${Process_Memory_Pid}"
Info_Echo_2 "运行用户" "${Process_Memory_Running_User}"
Info_Echo_2 "运行时间" "${Process_Memory_Time}"
Info_Echo_2 "内存使用率" "${Process_Memory_Use_Rate}%"
Info_Echo_2 "物理内存使用" "$((${Process_Memory_RSS}/1024))M"
Info_Echo_2 "进程名称" "${Process_Memory_Command}"
Info_Echo_2 "程序运行路径" "${Process_Running_Path}"
done
# 还原分隔符
IFS=$Old_IFS
Info_Header "CPU占用前10"
# CPU占用前10
Process_CPU_Info_List=`ps ax -o ruser=userForLongName -e -o pid,%cpu,start,time,command| sort -k3rn | head -n 10`
Old_IFS=$IFS
IFS=$'n'
for Process_CPU_Info in ${Process_CPU_Info_List};do
# 运行PID
Process_CPU_Pid=`echo "${Process_CPU_Info}"|awk '{print $2}'`
# 程序运行路径
Process_Running_Path=`lsof -p ${Process_CPU_Pid} -a -d txt +c 15|awk 'NR>1 {print $9}'`
# 进程名称
Process_CPU_Command=`lsof -p ${Process_CPU_Pid} -a -d txt +c 15|awk 'NR>1 {print $1}'`
# 运行用户
Process_CPU_User=`echo "${Process_CPU_Info}"|awk '{print $1}'`
# CPU使用率
Process_CPU_Use_Rate=`echo "${Process_CPU_Info}"|awk '{print $3}'`
# 进程运行时间
Process_CPU_Running_Time=`echo "${Process_CPU_Info}"|awk '{print $4,$5,$6}'`
Process_CPU_Running_Time_1=`echo "${Process_CPU_Running_Time}"|grep '^[0-9]'`
if [ -z "${Process_CPU_Running_Time_1}" ];then
Process_CPU_Running_Time=`echo "${Process_CPU_Running_Time}"|xargs -i date -d "{}" "+%Y-%m-%d %H:%M:%S"`
else
# 进程运行时间
Process_CPU_Running_Time=`echo "${Process_CPU_Info}"|awk '{print $4}'|xargs -i date "+%Y-%m-%d {}"`
fi
Info_Echo "运行PID" "${Process_CPU_Pid}"
Info_Echo_2 "运行用户" "${Process_CPU_User}"
Info_Echo_2 "进程运行时间" "${Process_CPU_Running_Time}"
Info_Echo_2 "CPU使用率" "${Process_CPU_Use_Rate}%"
Info_Echo_2 "进程名称" "${Process_CPU_Command}"
Info_Echo_2 "程序运行路径" "${Process_Running_Path}"
done
# 还原分隔符
IFS=$Old_IFS
}
# SNMP服务检查
SNMP_Service_Check(){
Info_Header "SNMP服务检查"
# SNMP服务状态
SNMP_Service_Status=`Check_Service_Status snmpd`
Info_Echo "服务状态:" "${SNMP_Service_Status}"
#if [ -e /etc/snmp/snmpd.conf ];then
# echo "/etc/snmp/snmpd.conf"
# echo "--------------------"
# cat /etc/snmp/snmpd.conf 2>/dev/null | grep -v "^#" | sed '/^$/d'
#fi
}
# NTP服务检查
NTP_Service_Check(){
Info_Header "NTP服务检查"
# ntpd服务状态
Ntpd_Service_Status=`Check_Service_Status ntpd`
Info_Echo "服务状态:" "${Ntpd_Service_Status}"
#if [ -e /etc/ntp.conf ];then
# echo "/etc/ntp.conf"
# echo "-------------"
# egrep -v '^#|^$' /etc/ntp.conf
#fi
}
# Syslog服务检查
Syslog_Service_Check(){
Info_Header "Syslog服务检查"
# ntpd服务状态
Rsyslog_Service_Status=`Check_Service_Status rsyslog`
Info_Echo "服务状态:" "${Rsyslog_Service_Status}"
#echo "/etc/rsyslog.conf"
#echo "-----------------"
#cat /etc/rsyslog.conf 2>/dev/null | grep -v "^#" | grep -v "^\$" | sed '/^$/d' | column -t
}
# 用户密码检查
User_Passwd_Check(){
Info_Header "密码过期检查"
# 系统密码
Passwd_List_Info=`cat /etc/passwd`
# 系统登陆SHELL列表
System_Login_Shell_List=`grep -Ev "/sbin/nologin|^#|^$" /etc/shells|sed -n 's#/#\/#gp'`
for System_Login_Shell in ${System_Login_Shell_List};do
System_Login_User_List=`awk -F':' "/${System_Login_Shell}/ {print \$1}" /etc/passwd`
for System_Login_User in ${System_Login_User_List};do
Get_User_Expiry_Date=$(/usr/bin/chage -l $System_Login_User | awk -F':[[:space:]]' '/Password expires/{print $2}')
if [[ ${Get_User_Expiry_Date} = 'never' ]];then
Info_Echo_2 "${System_Login_User}" "永不过期"
else
password_expiry_date=$(date -d "${Get_User_Expiry_Date}" "+%s")
current_date=$(date "+%s")
diff=$(($password_expiry_date-$current_date))
let DAYS=$(($diff/(60*60*24)))
Info_Echo_2 "${System_Login_User}" "${DAYS}天后过期"
fi
done
done
Info_Header "密码策略检查"
Info_Echo "最晚过期天数" "`awk '/^PASS_MAX_DAYS/ {print $2}' /etc/login.defs`"
Info_Echo "最早过期天数" "`awk '/^PASS_MIN_DAYS/ {print $2}' /etc/login.defs`"
Info_Echo "最短密码长度" "`awk '/^PASS_MIN_LEN/ {print $2}' /etc/login.defs`"
Info_Echo "密码过期提醒" "`awk '/^PASS_WARN_AGE/ {print $2}' /etc/login.defs`"
}
# 用户信息检查
User_Info_Check(){
Info_Header "用户信息检查"
# 主机登陆用户列表
Passwd_List_Info=`cat /etc/passwd`
Root_User_List=`echo "${Passwd_List_Info}"|awk -F':' '{if($3 == 0){print $1}}'| tr 'n' ',' | sed 's/,$//'`
Info_Echo "特权用户" "${Root_User_List}"
Info_Header "空密码用户检查"
# 系统登陆SHELL列表
System_Login_Shell_List=`grep -Ev "/sbin/nologin|^#|^$" /etc/shells|sed -n 's#/#\/#gp'`
for System_Login_Shell in ${System_Login_Shell_List};do
System_Login_User_List=`awk -F':' "/${System_Login_Shell}/ {print \$1}" /etc/passwd`
for System_Login_User in ${System_Login_User_List};do
# 系统登录用户名称
System_Login_User_Name=`awk -F: "/${System_Login_User}/ {if(\$2 == "!!"){print \$1}}" /etc/shadow`
Check_If_Not_Code_Null "空密码用户" "${System_Login_User_Name}"
done
done
Info_Header "相同用户UID检查"
# 重复用户ID列表
System_Login_User_ID_List=`cut -d: -f3 /etc/passwd | sort | uniq -c | awk '$1>1{print $2}'`
for System_Login_User_ID in $System_Login_User_ID_List;do
# 用户名称列表
System_Login_User_Name=$(awk -F: 'ORS="";$3=='"$System_Login_User_ID"'{print "",$1}' /etc/passwd)
Info_Echo "用户名ID ${System_Login_User_ID}" "${System_Login_User_Name}"
done
Info_Header "用户列表"
# 系统登陆SHELL列表
System_Login_Shell_List=`grep -Ev "/sbin/nologin|^#|^$" /etc/shells|sed -n 's#/#\/#gp'`
for System_Login_Shell in ${System_Login_Shell_List};do
# 系统用户列表
System_Login_User_List=`awk -F':' "/${System_Login_Shell}/ {print \$1}" /etc/passwd`
for System_Login_User in ${System_Login_User_List};do
# 系统用户最后登录时间
System_User_Last_Login="$(who --users /var/log/wtmp|awk "/^${System_Login_User}[[:space:]]/ {print $3,$4}"|tail -n1)"
if [ -z "${System_User_Last_Login}" ];then
System_User_Last_Login="No Last Login"
fi
# 用户ID
System_User_Uid=`echo "${Passwd_List_Info}"|awk -F':' "/^${System_Login_User}:/ {print \$3}"`
# 用户组ID
System_User_Group_Uid=`echo "${Passwd_List_Info}"|awk -F':' "/^${System_Login_User}:/ {print \$4}"`
# 用户组名称
System_User_Group_Name=`awk -F':' "{if (\$3 == ${System_User_Group_Uid}){print \$1}}" /etc/group`
# 用户家目录
System_User_Home_Path=`echo "${Passwd_List_Info}"|awk -F':' "/^${System_Login_User}:/ {print \$6}"`
Info_Echo "用户名称" "${System_Login_User}"
Info_Echo_2 "用户ID" "${System_User_Uid}"
Info_Echo_2 "用户家目录" "${System_User_Home_Path}"
Info_Echo_2 "用户SHELL" "`echo "${System_Login_Shell}"|sed -n 's#\/#/#gp'`"
Info_Echo_2 "最后登录时间" "${System_User_Last_Login}"
Info_Echo_2 "用户组名称" "${System_User_Group_Name}"
Info_Echo_2 "用户组ID" "${System_User_Group_Uid}"
done
done
}
# 磁盘检查
Get_Disk_Check(){
Info_Header "磁盘检查"
#查看已挂载磁盘空间剩余
Disk_Info=`df -TP`
#查看磁盘信息
Disk_Info_Name=`echo "${Disk_Info}" |awk '/^// {print $1}'`
for Disk_Name in $Disk_Info_Name;do
# 磁盘分区
Disk_Name_D=`echo "${Disk_Name}"|sed -n 's#/#\/#gp'`
# 可用率
Disk_Info_D=`echo "${Disk_Info}" |awk "/${Disk_Name_D}/ {print \$5/\$3*100}" |awk -F. '{print $1}'`
# 分区大小
Disk_Size=`echo "${Disk_Info}" |awk "/${Disk_Name_D}/ {print \$3/1024/1024}"`
# 磁盘可用
Disk_Size_Available=`echo "${Disk_Info}" |awk "/${Disk_Name_D}/ {print \$5/1024/1024}"`
Info_Echo "磁盘分区" "${Disk_Name}"
Info_Echo_2 "分区大小" "${Disk_Size}G"
Info_Echo_2 "剩余可用率" "${Disk_Info_D}%"
Info_Echo_2 "可用空间" "${Disk_Size_Available}G"
done
#df -hiP | sed 's/Mounted on/Mounted/'> /tmp/inode
#df -hTP | sed 's/Mounted on/Mounted/'> /tmp/disk
#join /tmp/disk /tmp/inode | awk '{print $1,$2,"|",$3,$4,$5,$6,"|",$8,$9,$10,$11,"|",$12}'| column -t
}
# 内存检查
Memory_Check(){
Info_Header "内存使用检查"
System_Memory_Info=`cat /proc/meminfo`
# 总内存大小
System_Memory_Total_Number=`echo "${System_Memory_Info}"|awk -F":[[:space:]]" '/^MemTotal:/ {print $2}'|awk '{print $1/1024/1024}'`
# 剩余内存
System_Memory_Free_Number=`echo "${System_Memory_Info}"|awk -F":[[:space:]]" '/^MemFree:/ {print $2}'|awk '{print $1/1024}'`
# 已使用内存
System_Memory_Use_Number=`echo|awk "{print ${System_Memory_Total_Number}-(${System_Memory_Free_Number}/1024)}"`
# 可用内存
System_Memory_Available_Number=`echo "${System_Memory_Info}"|awk -F":[[:space:]]" '/^MemAvailable:/ {print $2}'|awk '{print $1/1024}'`
# 内核页缓存使用
System_Memory_Cached_Number=`echo "${System_Memory_Info}"|awk -F":[[:space:]]" '/^Cached:/ {print $2}'|awk '{print $1/1024}'`
# 内核缓冲区使用
System_Memory_Buffers_Number=`echo "${System_Memory_Info}"|awk -F":[[:space:]]" '/^Buffers:/ {print $2}'|awk '{print $1/1024}'`
# Slab可回收内存 SUnreclaim部分板坯,可能被收回,如高速缓存。
System_Memory_SReclaimable_Number=`echo "${System_Memory_Info}"|awk -F":[[:space:]]" '/^SReclaimable:/ {print $2}'|awk '{print $1/1024}'`
# 缓存区总和
System_Memory_Cached_Buffers_SReclaimable_Number=`echo|awk "{print ${System_Memory_Cached_Number}+${System_Memory_Buffers_Number}+${System_Memory_SReclaimable_Number}}"`
# Slab不可回收内存
System_Memory_SUnreclaim_Number=`echo "${System_Memory_Info}"|awk -F":[[:space:]]" '/^SUnreclaim:/ {print $2}'|awk '{print $1/1024}'`
# 交换分区总大小
System_Memory_Swap_Total_Number=`echo "${System_Memory_Info}"|awk -F":[[:space:]]" '/^SwapTotal:/ {print $2}'|awk '{print $1/1024}'`
# 交换分区剩余内存
System_Memory_Swap_Free_Number=`echo "${System_Memory_Info}"|awk -F":[[:space:]]" '/^SwapFree:/ {print $2}'|awk '{print $1/1024}'`
# 交换分区已使用内存
System_Memory_Swap_Use_Number=`echo|awk "{if(${System_Memory_Swap_Total_Number}-${System_Memory_Swap_Free_Number} != 0){print ${System_Memory_Swap_Total_Number}-(${System_Memory_Swap_Free_Number}/1024)}else{print 0}}"`
# 交换分区缓存
System_Memory_Swap_Cached_Number=`echo "${System_Memory_Info}"|awk -F":[[:space:]]" '/^SwapCached:/ {print $2}'|awk '{print $1/1024}'`
Info_Echo "总内存大小" "${System_Memory_Total_Number}G"
Info_Echo_2 "已使用内存" "${System_Memory_Use_Number}G"
Info_Echo_2 "剩余内存" "${System_Memory_Free_Number}M"
Check_If_Not_Code_Null "可用内存" "${System_Memory_Available_Number}"
Info_Echo "缓存区总和" "${System_Memory_Cached_Buffers_SReclaimable_Number}M"
Info_Echo_2 "内核页缓存使用" "${System_Memory_Cached_Number}M"
Info_Echo_2 "内核缓冲区使用" "${System_Memory_Buffers_Number}M"
Info_Echo_2 "Slab可回收内存" "${System_Memory_SReclaimable_Number}M"
Info_Echo_2 "Slab不可回收" "${System_Memory_SUnreclaim_Number}M"
Info_Echo "交换分区总大小" "${System_Memory_Swap_Total_Number}M"
Info_Echo_2 "交换分区剩余内存" "${System_Memory_Swap_Free_Number}M"
Info_Echo_2 "交换分区已使用内存" "${System_Memory_Swap_Use_Number}G"
Info_Echo_2 "交换分区缓存" "${System_Memory_Swap_Cached_Number}G"
}
Cpu_Check(){
Info_Header "CPU使用检查"
#默认时间间隔
TIME_INTERVAL=1
# 上一次系统CPU全部使用信息
Last_System_CPU_Usage_Total_Info=`awk '/^cpu[0-9]{0,9}[[:space:]]/ {print $1,$2,$3,$4,$5,$6,$7,$8}' /proc/stat`
sleep ${TIME_INTERVAL}
# 新的系统CPU全部使用信息
New_System_CPU_Usage_Total_Info=`awk '/^cpu[0-9]{0,9}[[:space:]]/ {print $1,$2,$3,$4,$5,$6,$7,$8}' /proc/stat`
# 系统CPU核心名称列表
System_CPU_Name_List=`awk '/^cpu/ {print $1}' /proc/stat`
for System_CPU_Name in ${System_CPU_Name_List};do
# 上一次系统CPU使用信息
Last_System_CPU_Usage_Info=`echo "${Last_System_CPU_Usage_Total_Info}"|awk "/^${System_CPU_Name}[[:space:]]/ {print \$2,\$3,\$4,\$5,\$6,\$7,\$8}"`
# 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
Last_System_CPU_USER_BUSY=$(echo $Last_System_CPU_Usage_Info | awk '{print $1}')
# 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
Last_System_CPU_SYS_BUSY=$(echo $Last_System_CPU_Usage_Info | awk '{print $3}')
# 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies)
Last_System_CPU_SYS_IDLE=$(echo $Last_System_CPU_Usage_Info | awk '{print $4}')
# CPU时间
Last_System_CPU_TOTAL_CPU_T=$(echo $Last_System_CPU_Usage_Info | awk '{print $1+$2+$3+$4+$5+$6+$7}')
# CPU使用
Last_System_CPU_CPU_USAGE=$(echo $Last_System_CPU_Usage_Info | awk '{print $1+$2+$3}')
# 新的系统CPU使用信息
New_System_CPU_Usage_Info=`echo "${New_System_CPU_Usage_Total_Info}"|awk "/^${System_CPU_Name}[[:space:]]/ {print \$2,\$3,\$4,\$5,\$6,\$7,\$8}"`
# 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
New_System_CPU_USER_BUSY=$(echo $New_System_CPU_Usage_Info | awk '{print $1}')
# 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
New_System_CPU_SYS_BUSY=$(echo $New_System_CPU_Usage_Info | awk '{print $3}')
# 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies)
New_System_CPU_SYS_IDLE=$(echo $New_System_CPU_Usage_Info | awk '{print $4}')
# CPU时间
New_System_CPU_TOTAL_CPU_T=$(echo $New_System_CPU_Usage_Info | awk '{print $1+$2+$3+$4+$5+$6+$7}')
# CPU使用
New_System_CPU_CPU_USAGE=$(echo $New_System_CPU_Usage_Info | awk '{print $1+$2+$3}')
# 系统空闲时间
SYSTEM_IDLE=`echo ${New_System_CPU_SYS_IDLE} ${Last_System_CPU_SYS_IDLE} | awk '{print $1-$2}'`
# 系统使用时间
SYSTEM_BUSY=`echo ${New_System_CPU_SYS_BUSY} ${Last_System_CPU_SYS_BUSY} | awk '{print $1-$2}'`
# 用户使用时间
USER_BUSY=`echo ${New_System_CPU_USER_BUSY} ${Last_System_CPU_USER_BUSY} | awk '{print $1-$2}'`
# 用户+系统+nice时间
TOTAL_BUSY=`echo ${New_System_CPU_CPU_USAGE} ${Last_System_CPU_CPU_USAGE} | awk '{print $1-$2}'`
# CPU总时间
TOTAL_TIME=`echo ${New_System_CPU_TOTAL_CPU_T} ${Last_System_CPU_TOTAL_CPU_T} | awk '{print $1-$2}'`
# CPU总时间百分比
CPU_USAGE=`echo ${TOTAL_BUSY} ${TOTAL_TIME} | awk '{printf "%.2f", $1/$2*100}'`
# 用户时间百分比
CPU_USER_USAGE=`echo ${USER_BUSY} ${TOTAL_TIME}|awk '{printf "%.2f", $1/$2*100}'`
# 系统时间百分比
CPU_System_Usage=`echo ${SYSTEM_BUSY} ${TOTAL_TIME} |awk '{printf "%.2f", $1/$2*100}'`
if [ "${System_CPU_Name}" = 'cpu' ];then
Info_Echo "CPU总体使用率" "${CPU_USAGE}%"
Info_Echo_2 "用户使用率" "${CPU_USER_USAGE}%"
Info_Echo_2 "系统使用率" "${CPU_System_Usage}%"
else
Info_Echo "${System_CPU_Name} 使用率" "${CPU_USAGE}%"
Info_Echo_2 "用户使用率" "${CPU_USER_USAGE}%"
Info_Echo_2 "系统使用率" "${CPU_System_Usage}%"
fi
#echo "${System_CPU_Name} Usage:${CPU_USAGE}% UserUsage:${CPU_USER_USAGE}% SysUsage:${CPU_System_Usage}%"
done
}
case $1 in
all)
# 服务器硬件信息
Hardware_Information
# 基础系统信息
System_Info
# 网络信息
Network_Info
# SSH检查信息
SSH_Check_Info
# 防火墙检查
Firewall_Check
# JAVA检查
Java_Check
# Sudoers检查
Sudoers_Check
# 端口监听检查
Port_Answer_Check
# 自启动检查
Auto_Start_Check
# 用户登陆检查
User_Login_Check
# 软件包安装检查
Packages_Install_Check
# 计划任务检查
Scheduled_Task_Check
# 服务检查
System_Service_Check
# 服务进程检查
Service_Process_Check
# SNMP服务检查
SNMP_Service_Check
# NTP服务检查
NTP_Service_Check
# Syslog服务检查
Syslog_Service_Check
# 用户密码检查
User_Passwd_Check
# 用户信息检查
User_Info_Check
# 磁盘检查
Get_Disk_Check
# 内存使用检查
Memory_Check
# CPU使用检查
Cpu_Check
;;
check)
# 防火墙检查
Firewall_Check
# Sudoers检查
Sudoers_Check
# 端口监听检查
Port_Answer_Check
# 自启动检查
Auto_Start_Check
# 用户登陆检查
User_Login_Check
# 计划任务检查
Scheduled_Task_Check
# 用户密码检查
User_Passwd_Check
# 用户信息检查
User_Info_Check
;;
*)
echo "all|check"
esac
# 还原系统语言
LANG=$Old_LANG
文章来源于互联网:[原创]Centos服务器系统及服务信息查询Shell脚本