哈喽各位技术同好,欢迎来到虚拟化时代君(XNHCYL)
收不到推送?别急,先点个⭐星标,系统才知道你是真爱。
我是虚拟化时代君,一个把服务器当朋友的技术宅。这里专注分享 虚拟化 / 云计算 / 运维实战 / 脚本技巧 / 软件工具 / 白嫖资源,能少踩坑的,绝不让你多走一步弯路。
每天更新,不定时掉福利,技术路上我们一起卷。
引言
这是一款专为日常运维设计的轻量级巡检工具,一键运行即可快速检查服务器健康状态,包括:
• 系统基本信息(CPU、内存、磁盘、负载、重启记录)
• 常用运维工具自动补齐(htop、ncdu、iotop 等)
• 磁盘空间分析与清理建议
• 安全补丁检查
• 已知CVE漏洞检测(支持Debian/Ubuntu及RHEL系)
• 网络端口、进程、僵尸进程、登录记录等
• 支持彩色输出,终端友好,无颜色环境自动适配纯文本
使用方式:
1. 保存为 syscheck.sh
2. chmod +x syscheck.sh
3. sudo ./syscheck.sh
(推荐移动到 /usr/local/bin/syscheck 后全局使用:sudo syscheck)
第二章、实现效果图
下面我在的rocky运行的结果,如图所示



在服务器终端直接复制并执行以下命令(会自动创建/覆盖 syscheck.sh 文件,并写入完整脚本内容):
cat > syscheck.sh << 'EOF'#!/bin/bash# ================ 一键 Linux 服务器运维巡检脚本(终极完整版)================# 使用方式:chmod +x syscheck.sh && sudo ./syscheck.sh# 支持:Ubuntu/Debian/CentOS/RHEL/Rocky/AlmaLinux 等# 作者:虚拟化时代君 日期:2026-01-01# ===========================================================================# 自动检测终端是否支持颜色(避免乱码)if [ -t 1 ] && [ "$(tput colors 2>/dev/null || echo 0)" -ge 8 ]; thenRED="\033[91m"GREEN="\033[92m"YELLOW="\033[93m"BLUE="\033[94m"PURPLE="\033[95m"CYAN="\033[96m"BOLD="\033[1m"NC="\033[0m"elseRED=""; GREEN=""; YELLOW=""; BLUE=""; PURPLE=""; CYAN=""; BOLD=""; NC=""fiprint_title() {echo -e "${BLUE}${BOLD}════════════════════════════════════════════════════════════${NC}"echo -e "${PURPLE}${BOLD} $1${NC}"echo -e "${BLUE}${BOLD}════════════════════════════════════════════════════════════${NC}"echo}print_section() {echo -e "${CYAN}${BOLD}▶ $1${NC}"echo}print_status() {case "$1" inok) echo -e "${GREEN}✓ $2${NC}" ;;warn) echo -e "${YELLOW}⚠ $2${NC}" ;;error) echo -e "${RED}✗ $2${NC}" ;;info) echo -e "${CYAN}ℹ $2${NC}" ;;*) echo " $2" ;;esac}print_success() {echo -e "${GREEN}${BOLD}✓ $1${NC}"}clearprint_title "一键 Linux 服务器运维巡检脚本"echo -e "${GREEN}开始时间:$(date '+%Y-%m-%d %H:%M:%S')${NC}\n"# 系统基本信息print_title "系统基本信息"[ -f /etc/os-release ] && . /etc/os-releaseprint_status info "系统版本 : ${PRETTY_NAME:-未知}"print_status info "主机名 : $(hostname)"print_status info "内核版本 : $(uname -r)"print_status info "运行时间 : $(uptime -p)"print_status info "平均负载 : $(uptime | awk -F'load average:' '{print $2}')"print_status info "CPU 型号 : $(grep 'model name' /proc/cpuinfo | head -1 | cut -d: -f2 | xargs)"print_status info "内存信息 : $(free -h | awk '/Mem/{print "总 "$2" | 已用 "$3" | 可用 "$4}')"print_section "Swap 使用情况"free -h | awk '/Swap/{print " 总: "$2" 已用: "$3" 可用: "$4}'swap_used=$(free -m | awk '/Swap/{print $3}' 2>/dev/null || echo 0)[ "$swap_used" -gt 500 ] && print_status warn "Swap 使用较多(${swap_used}MB),建议优化内存"print_section "磁盘分区使用情况"df -hT | grep -vE 'tmpfs|cdrom|loop' | while read fs type size used avail use mount; dousage=$(echo "$use" | tr -d '%')if (( usage > 90 )); thenprint_status error "$mount 分区严重告急:${usage}%"elif (( usage > 80 )); thenprint_status warn "$mount 分区使用率高:${usage}%"elseprint_status ok "$mount ($type) : ${usage}% 已用"fidoneprint_section "最近重启记录"last -x -n 3 reboot shutdown 2>/dev/null | head -n 3 || print_status info "无重启记录"echo# 常用工具补齐print_title "常用运维工具补齐"TOOLS=(htop iotop ncdu lsof tree vim curl wget net-tools psmisc iftop strace)if command -v apt >/dev/null 2>&1; thenPKG_MANAGER="apt"sudo apt update -qq >/dev/null 2>&1sudo apt install -y debsecan "${TOOLS[@]}" >/dev/null 2>&1elif command -v dnf >/dev/null 2>&1; thenPKG_MANAGER="dnf"sudo dnf makecache >/dev/null 2>&1sudo dnf install -y "${TOOLS[@]}" >/dev/null 2>&1elif command -v yum >/dev/null 2>&1; thenPKG_MANAGER="yum"sudo yum makecache >/dev/null 2>&1sudo yum install -y "${TOOLS[@]}" >/dev/null 2>&1elseprint_status warn "不支持的包管理器,跳过工具安装"PKG_MANAGER=""fiprint_section "已补齐的常用工具"cat << 'TOOLS_LIST'htop - 交互式进程查看器iotop - 磁盘 I/O 监控ncdu - 磁盘占用分析神器lsof - 查看打开文件tree - 目录树查看vim - 强大编辑器curl/wget - 网络下载工具net-tools - ifconfig/netstat 等psmisc - killall/pstree 等iftop - 带宽实时监控strace - 系统调用追踪TOOLS_LISTprint_success "所有工具已检查并自动补齐"echo# 磁盘空间分析print_title "磁盘空间分析与清理建议"print_section "查找 /var 下大于 500MB 的大文件"if sudo find /var -type f -size +500M 2>/dev/null | grep -q .; thensudo find /var -type f -size +500M -exec du -h {} \; 2>/dev/null | sort -hr | head -10 | while read size file; doecho -e " ${YELLOW}$size${NC} → $file"doneelseprint_status ok "未发现大于 500MB 的大文件"fiprint_section "推荐清理命令"cat << 'CMD_LIST'sudo journalctl --vacuum-time=30dsudo find /tmp -type f -atime +7 -deleteCMD_LIST[ "$PKG_MANAGER" = "apt" ] && echo "sudo apt autoremove -y && sudo apt autoclean -y"[ -n "$PKG_MANAGER" ] && echo "sudo $PKG_MANAGER autoremove -y && sudo $PKG_MANAGER clean all"echo# 安全补丁检查print_title "安全补丁检查"if [ "$PKG_MANAGER" = "apt" ]; thencount=$(apt list --upgradable 2>/dev/null | grep -c "/" || echo 0)[ "$count" -gt 0 ] && print_status warn "发现 $count 个可升级包" && apt list --upgradable 2>/dev/null | head -10 || print_status ok "系统已是最新"elsecount=$(sudo $PKG_MANAGER updateinfo list security 2>/dev/null | grep -c "security" || echo 0)[ "$count" -gt 0 ] && print_status warn "发现 $count 个安全补丁" && sudo $PKG_MANAGER updateinfo list security | head -10 || print_status ok "无安全补丁"fiecho# CVE漏洞检测print_title "系统已知CVE漏洞检测"print_section "正在扫描所有软件包..."VULN_FOUND=falseif [ "$PKG_MANAGER" = "apt" ] && command -v debsecan >/dev/null 2>&1; thenif sudo debsecan --format detail 2>/dev/null | grep -q "CVE"; thenVULN_FOUND=trueecho -e "${RED}${BOLD}发现CVE漏洞:${NC}"sudo debsecan --format packages | while read pkg suite urgency remote cve; do[[ "$urgency" =~ critical|high ]] && echo -e "${RED}高危 → 包: $pkg | CVE: $cve${NC}" || echo " 包: $pkg | CVE: $cve"doneelseprint_status ok "未发现CVE漏洞"fielseif sudo $PKG_MANAGER updateinfo list security all 2>/dev/null | grep -q "security"; thenVULN_FOUND=trueecho -e "${RED}${BOLD}发现安全漏洞:${NC}"sudo $PKG_MANAGER updateinfo list security all | grep "security" | while read line; dopkg=$(echo "$line" | awk '{print $NF}')advisory=$(echo "$line" | awk '{print $2}')severity=$(echo "$line" | awk '{print $3}')[[ "$severity" =~ Critical|Important ]] && echo -e "${RED}高危 → 包: $pkg | 通告: $advisory${NC}" || echo " 包: $pkg | 通告: $advisory"doneelseprint_status ok "未发现已知漏洞"fifi[ "$VULN_FOUND" = false ] && print_success "恭喜!系统无已知CVE漏洞"echo# 网络端口print_title "当前网络监听端口"sudo ss -tulnp | head -20 || print_status info "无法获取端口信息"echo# 高占用进程print_title "高占用进程 Top 10"print_section "CPU 占用最高"ps -eo pid,user,%cpu,cmd --sort=-%cpu | head -10print_section "内存占用最高"ps -eo pid,user,%mem,cmd --sort=-%mem | head -10print_section "Zombie 进程检查"zcount=$(ps axo stat,ppid,pid,cmd | grep -w Z | wc -l)[ "$zcount" -gt 0 ] && print_status error "发现 $zcount 个僵尸进程" && ps axo stat,ppid,pid,cmd | grep -w Z || print_status ok "无僵尸进程"echo# 登录记录print_title "最近登录记录"last -n 8echo# 结束print_title "运维巡检全部完成!"echo -e "${GREEN}结束时间:$(date '+%Y-%m-%d %H:%M:%S')${NC}\n"echo "运维建议:定期更新系统、关注磁盘和高负载进程、检查异常登录"echo -e "${BLUE}${BOLD}════════════════════════════════════════════════════════════${NC}"EOFchmod +x syscheck.shecho "syscheck.sh 文件已成功创建!"echo "现在运行巡检:sudo ./syscheck.sh"
【以上内容均属虚拟化时代君整理,大家仅供参考!】
资源申明:小编更新资源文章只是为了给大家提供一个绿色学习的平台,如果你在本站看到的任何图片文字有涉及到你的利益以及版权都可以联系小编删除。联系微信:XNHSDJ