1.Linux巡检脚本
支持CentOS & RockyLinux
#!/bin/bash
dnf install bc iotop 2&>/dev/null && yum install bc iotop 2&>/dev/null && apt install bc iotop 2&>/dev/null
function RED(){
echo -e "\033[31m$@\033[0m"
}
function YEL(){
echo -e "\033[33m$@\033[0m"
}
function GRE(){
echo -e "\033[32m$@\033[0m"
}
function PINK(){
echo -e "\033[35m$@\033[0m"
}
function OS_INFO(){
#系统
local OS_NAME=`cat /etc/os-release|awk -F'"' '{if(NR==1) print $2}'`
#版本
local OS_VERSION=`cat /etc/os-release|awk -F'"' '{if(NR==2) print $2}'`
#内核
local OS_KERNEL=`uname -r`
#语言
local OS_LANG=`echo $LANG`
#日期
local OS_DATE=`date +"%Y-%m-%d %H:%M:%S"`
#运行时间
local OS_UPTIME=`uptime | awk -F',' '{sub(/.*up /,"",$1);print $1'}`
#最近一次重启时间
local OS_REBOOT=`last reboot|head -1|awk '{print $5,$6,$7,$8,$10}'`
#最近一次关机时间
local OS_SHUTDOWN=`last -x|grep shutdown|head -1|awk '{print $5,$6,$7,$8,$10}'`
YEL ""
YEL "######################系统信息######################"
YEL "系统:$OS_NAME"
YEL "版本:$OS_VERSION"
YEL "内核:$OS_KERNEL"
YEL "语言:$OS_LANG"
YEL "日期:$OS_DATE"
YEL "运行时间:$OS_UPTIME"
YEL "最近一次重启时间:$OS_REBOOT"
YEL "最近一次关机时间:$OS_SHUTDOWN"
YEL ""
}
function OS_HARDWARE(){
#CPU架构
local CPU_ARCH=`uname -m`
#CPU型号
local CPU_TYPE=`cat /proc/cpuinfo |grep "model name"|uniq|awk -F':' '{sub(/ /,"",$2);print $2}'`
#CPU个数
local CPU_NUM=`cat /proc/cpuinfo |grep 'physical id'|sort|uniq| wc -l`
#CPU核数
local CPU_CORE=`cat /proc/cpuinfo |grep cores|uniq|awk -F ':' '{sub(/ /,"",$2);print $2}'`
#CPU频率
local CPU_MHZ=`cat /proc/cpuinfo |grep "cpu MHz"|uniq|awk -F ':' '{sub(/ /,"",$2);printf "%s MHz\n",$2}'`
#内存容量
local MEM_SIZE=$(echo "scale=2;`cat /proc/meminfo | grep 'MemTotal:' | awk '{print $2}'`/1024/1024"|bc)
#空闲内存
local MEM_FREE=$(echo "scale=2;`cat /proc/meminfo | grep 'MemFree:' | awk '{print $2}'`/1048576"|bc)
#可用内存
local MEM_FREEE=$(echo "scale=2;`cat /proc/meminfo | grep 'MemAvailable:' | awk '{print $2}'`/1048576" | bc)
#内存使用率
local MEM_USE=$(awk 'BEGIN{printf "%.1f%\n",('$MEM_SIZE'-'$MEM_FREEE')/'$MEM_SIZE'*100}')
#SWAP大小
local MEM_SWAP_SIZE=$(echo "scale=2;`cat /proc/meminfo | grep 'SwapTotal:' | awk '{print $2}'`/1048576"|bc)
#SWAP可用
local MEM_SWAP_FREE=$(echo "scale=2;`cat /proc/meminfo | grep 'SwapFree:' | awk '{print $2}'`/1048576"|bc)
#SWAP使用率
local MEM_SWAP_USE=$(awk 'BEGIN{printf "%.1f%\n",('$MEM_SWAP_SIZE'-'$MEM_SWAP_FREE')/'$MEM_SWAP_SIZE'*100}')
#Buffer大小
local MEM_BUF=$(cat /proc/meminfo | grep 'Buffers:' | awk '{printf "%s KB",$2}')
#内存Cache大小
local MEM_CACHE=$(cat /proc/meminfo | grep '^Cached:' | awk '{printf "%s KB",$2}')
#网卡
local NET_DEV=`cat /proc/net/dev | awk 'NR>2 && $1 !~/lo/ {sub(/:/,"");print $1}'|grep -E '^eth|^ens'`
RED "######################硬件信息######################"
RED "CPU架构:$CPU_ARCH"
RED "CPU型号:$CPU_TYPE"
RED "CPU个数:$CPU_NUM"
RED "CPU核数:$CPU_CORE"
RED "CPU频率:$CPU_MHZ"
RED "内存容量:$MEM_SIZE GB"
RED "空闲内存:$MEM_FREE GB"
RED "可用内存:$MEM_FREEE GB"
RED "内存使用率:$MEM_USE"
RED "SWAP大小:$MEM_SWAP_SIZE GB"
RED "SWAP可用:$MEM_SWAP_FREE GB"
RED "SWAP使用率:$MEM_SWAP_USE"
RED "Buffer大小:$MEM_BUF"
RED "内存Cache大小:$MEM_CACHE"
RED "网卡:$NET_DEV"
for i in ${NET_DEV[@]}
do
if [ `ip link show $i|awk 'NR==1 {print $9}'` == 'UP' ];then
RED "网卡:$i 状态:$(ip link show $i|awk 'NR==1 {print $9}') RX:$(ethtool -g $i|grep "RX:"|tail -1|awk '{print $2}') TX:$(ethtool -g $i|grep "TX:"|tail -1|awk '{print $2}') "
else
echo $i &>/dev/null
fi
done
RED ""
}
function OS_NETWORK(){
#主机名
local OS_HOSTNAME=`hostname`
#IP地址
local OS_IPADD=`hostname -I|awk '{print $1}'`
#网关地址
local OS_GATEWAY=`ip route|grep default &>/dev/null && ip route|grep default|awk '{print $3}'|| echo "未配置网关"`
#DNS地址
local OS_DNS=`cat /etc/resolv.conf |grep nameserver|uniq|awk '{printf "%s ",$2}'`
PINK "######################网络信息######################"
PINK "主机名:$OS_HOSTNAME"
PINK "IP地址:$OS_IPADD"
PINK "网关地址:$OS_GATEWAY"
PINK "DNS地址:$OS_DNS"
PINK "网关[$OS_GATEWAY]"
PINK "连接情况: $(ping -t 1 -i 1 -c 5 -W 1 $OS_GATEWAY &>/dev/null && echo '正常通信' || echo '无法通信')"
PINK ""
}
function OS_RESOURCE(){
#系统磁盘列表
local DISK_LIST=(`lsblk | egrep "^[a-z].*" | grep -v "^sr" | awk '{print $1}'`)
#系统磁盘使用率情况
local DISK_PER=(`df -h | awk 'NR>1 && $1 !~/sr/ {gsub(/%/,"",$5);print $5}'`)
#CPU空闲率
local CPU_FREE=$(top -d 1 -n 1 -b | awk 'NR==3{print $8}')
# CPU使用率
local CPU_USE=$(awk 'BEGIN{printf "%.1f%\n",100-'$CPU_FREE'}')
#CPU_TOP_TEN
local CPU_TOP_TEN=$(top -d 1 -n 1 -b | column -t | awk 'NR>=7 && NR<=15')
#当前进程数
local CPU_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $2}')
#当前正在运行进程数
local CPU_RUN_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $4}')
#当前正在休眠进程数
local CPU_SL_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $6}')
#当前停止运行进程数
local CPU_STOP_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print 8}')
#当前僵尸进程数
local CPU_ZOM_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $10}')
GRE "######################系统资源######################"
GRE "CPU使用率:$CPU_USE"
GRE "CPU使用率前十进程信息:"
GRE "$(ps -eo user,pid,pcpu,pmem,args --sort=-pcpu | head -n 10)"
GRE "\n内存使用率前十进程信息:"
GRE "$(ps -eo user,pid,pcpu,pmem,args --sort=-pmem | head -n 10)"
GRE "\n磁盘IO信息:$(iotop -bon 1 &>/dev/null || echo 'iotop 未安装信息获取失败')"
GRE "$(iotop -bon 1 &>/dev/null && iotop -bon 1 | head -n 13)"
GRE "\n磁盘分区使用率是否正常:正常"
for i in ${DISK_LIST[@]}
do
if [[ -z "$(lsblk --nodeps -no serial /dev/$i)" ]]; then
GRE "磁盘:$i 磁盘序列号:获取信息失败"
else
GRE "磁盘:$i 磁盘序列号:$(lsblk --nodeps -no serial /dev/$i)"
fi
done
for i in ${DISK_PER[@]}
do
if [ $i -gt 80 ]; then
RED "某分区磁盘使用率为:$i% > 80% 请及时扩容"
fi
done
GRE "\n系统磁盘分区inode使用情况:"
GRE "$(df -Thi)"
GRE "\n系统当前进程数:$CPU_PROCESSORS"
GRE "系统当前进程运行数:$CPU_RUN_PROCESSORS"
GRE "系统当前休眠进程数:$CPU_SL_PROCESSORS"
GRE "系统当前停止进程数:$CPU_STOP_PROCESSORS"
GRE "系统当前僵尸进程数:$CPU_ZOM_PROCESSORS"
GRE "\n系统当前允许最大fd数量:$(cat /proc/sys/fs/file-nr | awk '{print $3}')"
GRE "系统当前已打开fd数量:$(cat /proc/sys/fs/file-nr | awk '{print $1}')"
GRE "系统单个进程运行打开fd数量:$(ulimit -n)"
GRE "\n系统当前socket连接数:$(netstat -anp &>/dev/null && netstat -anp | wc -l || echo 'net-tools 未安装,获取信息失败')"
GRE "系统 established socket数量: $(netstat -anp &>/dev/null && netstat -anp | grep "ESTABLISHED" | wc -l || echo 'net-tools 未安装,获取信息失败')"
GRE "系统 sync socket数量:$(netstat -anp &>/dev/null && netstat -anp | grep "SYN" | wc -l || echo 'net-tools 未安装,获取信息失败')"
GRE "系统当前已建立socket如下:"
GRE "$(netstat -anp &>/dev/null && netstat -anp | grep ESTABLISHED | awk '{printf " 本地:%-20s <=> 外部:%-22s\n",$4,$5}' || echo '')"
GRE ""
}
function OS_SECURITY(){
#系统所有能登录的用户
local OS_USER=(`cat /etc/passwd | awk -F':' '$NF !~/nologin|sync|shutdown|halt/ {print $1}'`)
#Selinux
local OS_SELINUX=`getenforce`
# 防火墙状态
local OS_FIREWALLD=`service firewalld status &>/dev/null | grep "running" && echo on || echo off`
RED "################################# [ 系统安全巡检区 ] ######################################"
GRE "防火墙状态: $OS_FIREWALLD"
GRE "Selinux状态:${OS_SELINUX}\n"
GRE "系统可登录用户数:$(cat /etc/passwd | awk -F':' '$NF !~/nologin|sync|shutdown|halt/ {print $1}' | wc -l)"
GRE "系统可登录用户:${OS_USER[@]}"
for i in ${OS_USER[@]}
do
GRE "用户 $i 最后1次登录信息: $(lastlog -u $i | awk 'NR==2')"
done
GRE "系统当前登录用户:"
GRE "$(who | sed 's#[()]##g' | awk '{printf " 用户: %10s 终端: %7s 登录时间: %7s %7s 登录IP: %7s\n",$1,$2,$3,$4,$5}')"
}
function OS_SERVICE(){
RED "################################# [ 系统服务巡检区 ] ######################################"
GRE "自行添加"
}
if [ $(id -u -n) != "root" ]; then
ERROR "请以ROOT用户运行这个脚本"
fi
OS_INFO
OS_HARDWARE
OS_NETWORK
OS_RESOURCE
OS_SECURITY
2.输出
[root@localhost ~]# ./check_linux.sh
######################系统信息######################
系统:CentOS Linux
版本:7 (Core)
内核:3.10.0-1160.66.1.el7.x86_64
语言:en_US.UTF-8
日期:2023-05-17 15:57:11
运行时间:139 days
最近一次重启时间:Thu Dec 29 10:36 15:57
最近一次关机时间:Thu Nov 17 16:53 16:54
######################硬件信息######################
CPU架构:x86_64
CPU型号:Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz
CPU个数:1
CPU核数:8
CPU频率:2095.082 MHz
内存容量:15.65 GB
空闲内存:8.26 GB
可用内存:8.26 GB
内存使用率:47.2%
SWAP大小:7.87 GB
SWAP可用:3.39 GB
SWAP使用率:56.9%
Buffer大小:0 KB
内存Cache大小:225948 KB
网卡:eth0
网卡:eth0 状态:UP RX:4096 TX:4096
######################网络信息######################
主机名:localhost
IP地址:192.168.1.250
网关地址:192.168.1.254
DNS地址:223.5.5.5 114.114.114.114
网关[192.168.1.254]
连接情况: 正常通信
######################系统资源######################
CPU使用率:6.2%
CPU使用率前十进程信息:
USER PID %CPU %MEM COMMAND
root 806 1.6 0.0 /bin/bash /usr/local/VMOptimizationTools/sangfor_guest_datareport
root 807 1.3 0.0 /bin/bash /usr/local/VMOptimizationTools/sangfor_sfping
root 1117 1.3 0.0 /bin/bash /usr/local/VMOptimizationTools/sangfor_update_ipc_callback
root 1433 1.3 0.0 /bin/bash /usr/local/VMOptimizationTools/sangfor_vmconfig_ipc_callback
root 2300 1.1 30.6 /home/monitor/tomcat/jdk/jre/bin/java -Djava.util.logging.config.file=/home/monitor/tom cat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeral DHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.Secur ityListener.UMASK=0027 -Djava.awt.headless=true -Dignore.endorsed.dirs= -classpath /home/monitor/tomcat/bin/boots trap.jar:/home/monitor/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/home/monitor/tomcat -Dcatalina.home=/home/moni tor/tomcat -Djava.io.tmpdir=/home/monitor/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 1003 1.0 0.0 /bin/bash /usr/local/VMOptimizationTools/sangfor_vm_proxyd_w
root 803 0.7 0.0 /bin/bash /usr/local/VMOptimizationTools/sangfor_vm_proxyd
root 85148 0.6 3.0 java -Dfile.encoding=utf-8 -Xmx2048m -XX:MaxPermSize=1024m -Xss5m -XX:+UseParallelGC -X X:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:+ExitOnOutOfM emoryError -cp . -jar /opt/apps/backend-1.18.6.jar
root 1189 0.5 0.0 /bin/bash /usr/local/VMOptimizationTools/sangfor_watchdog
内存使用率前十进程信息:
USER PID %CPU %MEM COMMAND
root 2300 1.1 30.6 /home/monitor/tomcat/jdk/jre/bin/java -Djava.util.logging.config.file=/home/monitor/tom cat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeral DHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.Secur ityListener.UMASK=0027 -Djava.awt.headless=true -Dignore.endorsed.dirs= -classpath /home/monitor/tomcat/bin/boots trap.jar:/home/monitor/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/home/monitor/tomcat -Dcatalina.home=/home/moni tor/tomcat -Djava.io.tmpdir=/home/monitor/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 29042 0.1 3.6 /usr/local/tcat/jdk/jre/bin/java -Djava.util.logging.config.file=/usr/local/tcat/conf/l ogging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/usr/local/tcat/bi n/FineCrack.jar -javaagent:/usr/local/tcat/bin/FineCrack.jar -javaagent:/usr/local/tcat/bin/FineCrack.jar -javaag ent:/usr/local/tcat/webapps/webroot/WEB-INF/lib/FineCrack.jar -javaagent:/usr/local/tcat/webapps/webroot/WEB-INF/ lib/FineCrack.jar -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Djava.awt.headless=true -Dignore.endorsed.dirs= -cla sspath /usr/local/tcat/bin/bootstrap.jar:/usr/local/tcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tcat -Dca talina.home=/usr/local/tcat -Djava.io.tmpdir=/usr/local/tcat/temp org.apache.catalina.startup.Bootstrap start
root 85148 0.6 3.0 java -Dfile.encoding=utf-8 -Xmx2048m -XX:MaxPermSize=1024m -Xss5m -XX:+UseParallelGC -X X:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:+ExitOnOutOfM emoryError -cp . -jar /opt/apps/backend-1.18.6.jar
polkitd 86022 0.2 2.5 mysqld
root 532 0.0 0.3 /usr/lib/systemd/systemd-journald
root 25128 0.1 0.2 /usr/local/tcat/jdk/jre/bin/java -Djava.util.logging.config.file=/usr/local/tcat/conf/l ogging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/usr/local/tcat/bi n/FineCrack.jar -javaagent:/usr/local/tcat/bin/FineCrack.jar -javaagent:/usr/local/tcat/webapps/webroot/WEB-INF/l ib/FineCrack.jar -javaagent:/usr/local/tcat/webapps/webroot/WEB-INF/lib/FineCrack.jar -Djdk.tls.ephemeralDHKeySiz e=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListe ner.UMASK=0027 -Djava.awt.headless=true -Dignore.endorsed.dirs= -classpath /usr/local/tcat/bin/bootstrap.jar:/usr /local/tcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tcat -Dcatalina.home=/usr/local/tcat -Djava.io.tmpdir= /usr/local/tcat/temp org.apache.catalina.startup.Bootstrap start
root 2210 0.3 0.2 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-curr ent --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docke r/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp. json --selinux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2
root 2257 0.0 0.2 /usr/sbin/rsyslogd -n
root 2543 0.2 0.0 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-conta inerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim do cker-containerd-shim --runtime docker-runc --runtime-args --systemd-cgroup=true
磁盘IO信息:iotop 未安装信息获取失败
磁盘分区使用率是否正常:正常
磁盘:vda 磁盘序列号:获取信息失败
系统磁盘分区inode使用情况:
Filesystem Type Inodes IUsed IFree IUse% Mounted on
devtmpfs devtmpfs 2.0M 417 2.0M 1% /dev
tmpfs tmpfs 2.0M 1 2.0M 1% /dev/shm
tmpfs tmpfs 2.0M 906 2.0M 1% /run
tmpfs tmpfs 2.0M 16 2.0M 1% /sys/fs/cgroup
/dev/mapper/centos-root xfs 25M 340K 25M 2% /
/dev/vda1 xfs 512K 333 512K 1% /boot
/dev/mapper/centos-home xfs 221M 168K 221M 1% /home
tmpfs tmpfs 2.0M 1 2.0M 1% /run/user/0
overlay overlay 25M 340K 25M 2% /var/lib/docker/overlay2/6e38effcd4011512f280644f2f0aac 6fc2058dff40ede9997c5a587d00bf32b7/merged
overlay overlay 25M 340K 25M 2% /var/lib/docker/overlay2/7d98deda88ac959c420b3d6ad50a08 3504a7bc60fe9e6992a74fd0538a5289a2/merged
shm tmpfs 2.0M 1 2.0M 1% /var/lib/docker/containers/ce22850fc84b867a3455a3652932 cd4cccfd9af4a9537c199c272c88d94dbe27/shm
shm tmpfs 2.0M 1 2.0M 1% /var/lib/docker/containers/925ff26df98f4813f00173cea966 72187452870153f6667166ce512bc582ec74/shm
系统当前进程数:219
系统当前进程运行数:1
系统当前休眠进程数:218
系统当前停止进程数:8
系统当前僵尸进程数:0
系统当前允许最大fd数量:65535
系统当前已打开fd数量:2432
系统单个进程运行打开fd数量:65535
系统当前socket连接数:102
系统 established socket数量: 2
系统 sync socket数量:0
系统当前已建立socket如下:
本地:192.168.1.250:22 <=> 外部:192.168.1.10:61497
本地:192.168.1.250:22 <=> 外部:192.168.1.10:61499
################################# [ 系统安全巡检区 ] ######################################
防火墙状态: off
Selinux状态:Disabled
系统可登录用户数:2
系统可登录用户:root monitor
用户 root 最后1次登录信息: root pts/0 192.168.1.10 Wed May 17 11:42:49 +0800 2023
用户 monitor 最后1次登录信息: monitor pts/0 192.168.1.10 Wed Aug 31 15:54:20 +0800 2022
系统当前登录用户:
用户: root 终端: pts/0 登录时间: 2023-05-17 11:42 登录IP: 192.168.1.10
评论