Linux 系统优化是保障服务器稳定运行、提升资源利用效率的关键环节,通过编写自动化脚本,可以批量执行优化任务,减少人工操作失误,提高运维效率,以下从系统资源监控、内核参数调优、服务优化、日志清理及安全加固五个维度,介绍 Linux 优化脚本的编写思路与核心功能。

系统资源监控脚本
资源监控是优化的前提,通过实时或定期收集 CPU、内存、磁盘及网络数据,可快速定位瓶颈,以下是一个基于 Shell 的基础监控脚本示例,关键功能包括:
-
CPU 使用率统计
通过/proc/stat文件计算 CPU 总使用率、用户态、内核态及空闲占比,并输出 5 秒内的平均值。 -
内存使用分析
读取free -m命令结果,区分已用、空闲、缓存及缓冲区内存,避免将缓存误判为可用内存。 -
磁盘 I/O 监控
使用iostat -d -x 1命令,监控磁盘的读写速率、I/O 利用率及响应时间,重点关注高负载磁盘。 -
网络流量统计
通过/proc/net/dev文件统计各网卡的接收(RX)和发送(TX)字节数,计算实时流量。
脚本核心逻辑:
#!/bin/bash
echo "===== 系统资源监控报告 ====="
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "CPU 使用率: $(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}')"
echo "内存使用: $(free -m | awk 'NR==2{printf "%.2f%% (%sMB/%sMB)\n", $3*100/$2, $3, $2}')"
echo "磁盘使用率: $(df -h | awk '$NF=="/"{printf "%s\n", $5}')"
echo "网络流量: $(cat /proc/net/dev | eth0 | awk 'FNR==2 {print "RX: "$2/1024/1024"MB, TX: "$10/1024/1024"MB"}')"
扩展建议:可结合 crontab 定时执行(如每 5 分钟记录一次),并将数据存入日志文件或可视化工具(如 Prometheus + Grafana)。
内核参数调优脚本
内核参数直接影响系统性能,需根据业务场景调整,高并发服务器需优化 TCP 连接数,数据库服务器需调整内存分配策略。
核心优化参数及说明:

| 参数 | 默认值 | 优化建议 | 适用场景 |
|---|---|---|---|
net.core.somaxconn |
128 | 65535 | 高并发 Web 服务 |
net.ipv4.tcp_max_syn_backlog |
1024 | 8192 | 防止 SYN 洪泛攻击 |
vm.swappiness |
60 | 10 | 内存充足的服务器 |
fs.file-max |
65536 | 1000000 | 高文件句柄应用(如数据库) |
脚本实现:
#!/bin/bash # 备份原始配置 cp /etc/sysctl.conf /etc/sysctl.conf.bak # 优化参数 cat >> /etc/sysctl.conf << EOF net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 8192 vm.swappiness = 10 fs.file-max = 1000000 EOF # 加载配置 sysctl -p echo "内核参数优化完成"
注意事项:调优前需测试验证,避免因参数不当导致系统不稳定。
服务优化脚本
关闭不必要的服务可减少资源占用,提升系统安全性,开发环境可禁用 postfix、bluetooth 等服务。
脚本功能:
- 列出所有运行中的服务:使用
systemctl list-units --type=service --state=running。 - 禁用并停止非核心服务:通过
systemctl disable --now命令批量操作。
示例:
#!/bin/bash
# 定义需禁用的服务列表
services=("postfix" "bluetooth" "avahi-daemon" "cups")
for service in "${services[@]}"; do
if systemctl is-active --quiet $service; then
systemctl disable --now $service
echo "已禁用服务: $service"
else
echo "服务 $service 未运行"
fi
done
echo "服务优化完成"
扩展:可结合 chkconfig(CentOS 7 以下)或 systemctl 管理服务,并生成服务状态报告。
日志清理脚本
日志文件增长会占用大量磁盘空间,需定期清理过期日志。
核心逻辑:
- 查找大文件:使用
find /var/log -type f -size +100M查找超过 100MB 的日志文件。 - 清理 N 天前的日志:通过
find /var/log -name "*.log" -mtime +30 -delete删除 30 天前的日志。 - 轮转日志:利用
logrotate工具自动压缩和轮转日志。
脚本示例:

#!/bin/bash
log_dir="/var/log"
# 清理 30 天前的普通日志
find $log_dir -name "*.log" -mtime +30 -exec rm -f {} \;
# 清理大文件(>500MB)
find $log_dir -type f -size +500M -exec ls -lh {} \; | awk '{print "删除大文件: "$9" ("$5")"}' -exec rm -f {} \;
# 轮转系统日志
logrotate -f /etc/logrotate.conf
echo "日志清理完成"
建议:结合 crontab 每周执行一次,并保留最近 7 天的日志以备排查问题。
安全加固脚本
安全是优化的基础,通过加固系统配置可降低风险。
关键措施:
- 修改 SSH 默认端口:将 SSH 端口从 22 改为其他高位端口(如 2222)。
- 禁用 root 远程登录:在
/etc/ssh/sshd_config中设置PermitRootLogin no。 - 更新系统补丁:使用
yum update -y(CentOS)或apt update && apt upgrade -y(Ubuntu)。
脚本实现:
#!/bin/bash
# 修改 SSH 端口
sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
# 禁用 root 登录
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
# 更新系统
if [ -f /etc/redhat-release ]; then
yum update -y
elif [ -f /etc/ubuntu-release ]; then
apt update && apt upgrade -y
fi
# 重启 SSH 服务
systemctl restart sshd
echo "安全加固完成,请重启服务器后生效"
注意:修改 SSH 配置前需确保有其他方式登录服务器(如密钥登录),避免锁屏。
Linux 优化脚本需结合实际业务需求,避免“一刀切”,通过监控定位瓶颈、调优内核参数、精简服务、清理日志及加固安全,可显著提升系统性能,建议在测试环境验证脚本有效性,并通过版本控制工具(如 Git)管理脚本版本,确保优化过程的可追溯性。



















