Fork me on GitHub

Linux服务器运维(CentOS8.2)

查看CPU/内存/硬盘

#查看cpu
lscpu
#查看内存
free -h
#查看硬盘
lsblk

#动态监测,top命令/servcat工具/宝塔面板等
top

#一行查询
echo "CPU: $(nproc)核 | MEM: $(grep MemTotal /proc/meminfo | awk '{printf "%.2f GB",$2/1024/1024}') | DISK: $(lsblk -b -dn -o SIZE | awk '{s+=$1} END {printf "%.0f GB",s/1024/1024/1024}')"

image

服务器状态脚本server-info.sh

新建server-info.sh

#!/bin/bash

echo "================ 服务器信息 ================"

# 主机名
echo "主机名: $(hostname)"

# 系统版本
echo "系统: $(cat /etc/os-release | grep PRETTY_NAME | cut -d '"' -f2)"

# 内核
echo "内核: $(uname -r)"

# 运行时间
echo "运行时间: $(uptime -p)"

echo "-------------------------------------------"

# CPU
CPU_MODEL=$(grep "model name" /proc/cpuinfo | head -1 | cut -d ':' -f2 | xargs)
CPU_CORES=$(grep -c processor /proc/cpuinfo)

echo "CPU型号: $CPU_MODEL"
echo "CPU核心: $CPU_CORES"

echo "-------------------------------------------"

# 内存
MEM_TOTAL=$(awk '/MemTotal/ {printf "%.2f GB",$2/1024/1024}' /proc/meminfo)
MEM_USED=$(free -m | awk '/Mem:/ {printf "%.2f GB",$3/1024}')
MEM_FREE=$(free -m | awk '/Mem:/ {printf "%.2f GB",$4/1024}')

echo "内存总量: $MEM_TOTAL"
echo "已使用: $MEM_USED"
echo "空闲: $MEM_FREE"

echo "-------------------------------------------"

# 磁盘
DISK_TOTAL=$(lsblk -b -dn -o SIZE | awk '{s+=$1} END {printf "%.0f GB",s/1024/1024/1024}')

echo "磁盘总容量: $DISK_TOTAL"

df -h --total | grep total | awk '{print "磁盘使用: "$3" / "$2" ("$5")"}'

echo "-------------------------------------------"

# 负载
LOAD=$(uptime | awk -F'load average:' '{print $2}')

echo "系统负载: $LOAD"

echo "-------------------------------------------"

# IP地址
LOCAL_IP=$(hostname -I | awk '{print $1}')

echo "内网IP: $LOCAL_IP"

# 公网IP
PUBLIC_IP=$(curl -s ifconfig.me)

echo "公网IP: $PUBLIC_IP"

echo "==========================================="

image

专业版运维脚本inspect.sh

#!/bin/bash

echo "======================================"
echo "        Linux 服务器巡检报告"
echo "======================================"
echo "时间: $(date)"
echo "主机: $(hostname)"
echo "系统: $(grep PRETTY_NAME /etc/os-release | cut -d '"' -f2)"
echo "内核: $(uname -r)"
echo "运行时间: $(uptime -p)"
echo "--------------------------------------"

# CPU信息
CPU_MODEL=$(grep "model name" /proc/cpuinfo | head -1 | cut -d ':' -f2 | xargs)
CPU_CORES=$(grep -c processor /proc/cpuinfo)

echo "CPU型号: $CPU_MODEL"
echo "CPU核心: $CPU_CORES"

LOAD=$(uptime | awk -F'load average:' '{print $2}')
echo "系统负载:$LOAD"

echo "--------------------------------------"

# 内存检测
MEM_TOTAL=$(awk '/MemTotal/ {printf "%.2f",$2/1024/1024}' /proc/meminfo)
MEM_USED=$(free | awk '/Mem:/ {printf "%.2f",$3/$2*100}')

echo "内存总量: ${MEM_TOTAL}GB"
echo "内存使用率: ${MEM_USED}%"

if (( $(echo "$MEM_USED > 80" | bc -l) )); then
    echo "⚠ 内存使用过高"
fi

echo "--------------------------------------"

# 磁盘检测
echo "磁盘使用情况:"
df -h | grep -v tmpfs | grep -v loop | while read line
do
    usage=$(echo $line | awk '{print $5}' | tr -d '%')
    mount=$(echo $line | awk '{print $6}')

    echo "$line"

    if [ "$usage" -gt 80 ]; then
        echo "⚠ 磁盘空间不足: $mount 使用率 ${usage}%"
    fi
done

echo "--------------------------------------"

# 网络连接
TCP_CONN=$(ss -ant | wc -l)

echo "TCP连接数: $TCP_CONN"

if [ "$TCP_CONN" -gt 10000 ]; then
    echo "⚠ TCP连接数过高"
fi

echo "--------------------------------------"

# 端口监听
echo "监听端口:"
ss -lntp | head

echo "--------------------------------------"

# TOP进程
echo "CPU占用最高的进程:"
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head

echo "--------------------------------------"

echo "内存占用最高的进程:"
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

echo "--------------------------------------"

# 网络IP
LOCAL_IP=$(hostname -I | awk '{print $1}')
PUBLIC_IP=$(curl -s ifconfig.me)

echo "内网IP: $LOCAL_IP"
echo "公网IP: $PUBLIC_IP"

echo "--------------------------------------"

# 系统登录
echo "最近登录用户:"
last | head

echo "--------------------------------------"

# 系统日志错误
echo "最近系统错误日志:"
journalctl -p 3 -n 5 --no-pager 2>/dev/null

echo "======================================"
echo "巡检完成"
echo "======================================"

数据库

导出表结构

忽略bak copy 年份结尾的日志表等

#导出
mysql -h127.0.0.1 -P3306 -uroot -p'密码' -N -e "SHOW TABLES FROM 数据库名称;" \
| awk '!/bak$|copy$|copy1$|2025$|2026$/ {print "mysqldump --host=127.0.0.1 --port=3306 -uroot -p'\''密码'\'' --no-data --skip-comments 数据库名称 "$0" >> 数据库名称_schema.sql"} /bak$|copy$|copy1$|2025$|2026$/ {print $0 >> "数据库名称_ignored_tables.txt"}' \
| bash

#导入
mysql -uroot -p'密码' 数据库名称 < 数据库名称_schema.sql
posted @ 2026-03-10 21:26  秋夜雨巷  阅读(1)  评论(0)    收藏  举报