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}')"

服务器状态脚本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 "==========================================="

专业版运维脚本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
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~


浙公网安备 33010602011771号