概述
为方便获取服务器系统及服务相关信息,根据业务实际以及系统相关情况特编写该脚本。
脚本功能
- 可查询服务器主板、BIOS、CPU、内存卡、网卡硬件信息;
- 可查询系统基础信息、SElinux状态、语言编码、启动时间等信息;
- 可查询默认网卡配置信息、外网地址、本地网卡地址等信息;
- 可检查OpenSSH服务版本、运行状态、协议版本、监听端口、信任主机等信息;
- 可查询Firewalld&IPtables防火墙状态、版本、规则信息;
- 可检查JAVA工具部署情况;
- 可检查Sudoers授权信息;
- 可查询UDP&TCP端口监听信息;
- 可查询系统自启动执行命令内容;
- 可查询历史用户登录窗口和时间等信息;
- 可查询最近10个软件安装信息;
- 可查询系统各用户所配置的计划任务;
- 可查询随系统自启动的服务以及当前系统运行的服务;
- 可查询僵尸进程、CPU&内存占用前十进程;
- 可检查SNMP服务运行状态;
- 可检查NTP服务运行状态;
- 可检查Syslog服务运行状态;
- 可检查用户密码过期时间、密码策略;
- 可检查特权用户、空密码用户、相同ID用户、可登录用户列表;
- 可检查磁盘分区、分区大小、可用率等信息;
- 可检查内存使用情况、缓存、交换分区等信息。
脚本内容
#!/bin/bash # Centos7服务器系统及服务信息查询 # Author: admin@lolicp.com # 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 "#==================== \033[33m ${1} !\033[0m ====================#" }
Info_Echo(){ echo -e "#\t${1}\t: \033[33m${2}\033[0m" }
Info_Echo_2(){ echo -e "#\t\t${1}\t: \033[33m${2}\033[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='已部署' fiJAVA版本
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 ];thenecho "/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 ];thenecho "/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 doneInfo_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