发布时间:2026/6/14 18:30:31
别只敲命令了!用Shell脚本把openEuler日常操作自动化(附5个实用脚本)
别只敲命令了用Shell脚本把openEuler日常操作自动化附5个实用脚本在openEuler的日常运维中重复性的命令行操作往往占据了大量时间。想象一下每天手动检查服务状态、逐台服务器清理日志、反复输入相同的软件更新命令——这些操作不仅效率低下还容易因人为疏忽导致错误。事实上80%的日常运维工作都可以通过Shell脚本实现自动化这正是本文要解决的核心问题。对于已经掌握基础命令的中级用户而言Shell脚本是将零散操作转化为标准化工具的关键跳板。不同于简单命令的堆砌脚本化思维能实现条件判断、循环执行和错误处理的完整逻辑链。下面我们将通过5个典型场景的实战案例展示如何用脚本将机械劳动转化为一键式智能操作。1. 自动化运维的基石Shell脚本核心语法1.1 变量与参数传递Shell脚本的威力始于变量的灵活运用。通过变量我们可以将硬编码的值转化为可动态调整的参数#!/bin/bash # 定义备份目录变量 BACKUP_DIR/var/backups TODAY$(date %Y%m%d) # 获取当前日期 LOG_FILE${BACKUP_DIR}/backup_${TODAY}.log环境变量与位置参数的配合使用能让脚本适应不同场景# 使用位置参数$1接收外部输入 target_dir$1 if [ ! -d $target_dir ]; then echo 错误目录 $target_dir 不存在 | tee -a $LOG_FILE exit 1 fi1.2 流程控制结构条件判断和循环是自动化逻辑的核心构件。注意[ ]两侧的空格是语法必需# 多条件判断示例 if [ -f /tmp/lockfile ] [ $(wc -l /var/log/nginx/error.log) -gt 1000 ]; then echo 检测到错误日志过多且存在锁文件 $LOG_FILE # 触发告警逻辑... elif [ ! -f /tmp/lockfile ]; then touch /tmp/lockfile fi # 遍历目录的for循环 for conf_file in /etc/nginx/conf.d/*.conf; do if grep -q ssl_certificate $conf_file; then echo 发现SSL配置: $conf_file fi done1.3 函数封装与模块化将重复代码抽象为函数是专业脚本的标志# 定义日志函数 log_message() { local level$1 local msg$2 echo [$(date %F %T)] [$level] $msg | tee -a $LOG_FILE } # 调用示例 log_message INFO 开始执行备份流程2. 实战案例一智能日志清理脚本2.1 场景痛点分析系统日志的持续增长会快速耗尽磁盘空间。传统解决方案是手动执行rm命令或配置logrotate但存在以下局限无法根据日志内容智能过滤缺乏清理前的完整性检查没有操作审计记录2.2 脚本实现代码以下脚本实现了按时间/大小双维度清理并保留关键错误信息#!/bin/bash # 日志清理工具 v1.2 # 参数$1日志路径 $2保留天数 $3最大容量(MB) LOG_DIR${1:-/var/log} KEEP_DAYS${2:-30} MAX_SIZE${3:-500} # 检查磁盘使用率 disk_usage$(df -h $LOG_DIR | awk NR2 {print $5} | tr -d %) [ $disk_usage -lt 90 ] || { echo 紧急磁盘使用率已达${disk_usage}%立即清理 2 MAX_SIZE$((MAX_SIZE/2)) # 自动调低阈值 } # 主清理逻辑 find $LOG_DIR -type f -name *.log -mtime $KEEP_DAYS -exec rm -v {} \; find $LOG_DIR -type f -size ${MAX_SIZE}M -exec truncate -s ${MAX_SIZE}M {} \; # 关键错误留存 grep -Ei error|fail|critical $LOG_DIR/*.log $LOG_DIR/important_errors.log2.3 进阶技巧日志轮转增强结合crontab实现自动化调度# 每天凌晨执行清理 0 3 * * * /usr/local/bin/log_cleaner.sh /var/log 30 5003. 实战案例二服务状态监控与自愈3.1 服务监控原理通过systemctl检测服务状态当发现异常时尝试自动重启重启失败则记录快照信息通知管理员3.2 完整实现脚本#!/bin/bash # 服务守护脚本 SERVICES(nginx mysql redis) for service in ${SERVICES[]}; do status$(systemctl is-active $service) if [ $status ! active ]; then echo [$(date)] 服务 $service 异常 ($status) /var/log/service_watcher.log # 尝试重启 systemctl restart $service sleep 5 # 验证重启结果 if [ $(systemctl is-active $service) active ]; then echo 成功恢复 $service 服务 else # 收集诊断信息 journalctl -u $service -n 50 /tmp/${service}_failure.log systemctl status $service /tmp/${service}_failure.log # 发送告警需配置邮件或Webhook send_alert $service 服务恢复失败 /tmp/${service}_failure.log fi fi done3.3 监控指标扩展可添加的性能监控维度指标类型检查命令阈值参考CPU使用率top -bn1grep Cpu(s)内存占用free -m剩余10%告警磁盘IO等待iostat -x 1 2await50ms网络连接数ss -sESTAB50004. 实战案例三安全加固自动化脚本4.1 典型加固项密码策略强化无用账户清理SSH安全配置防火墙规则更新4.2 一键加固实现#!/bin/bash # 安全基线配置工具 # 备份原始配置 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak cp /etc/login.defs /etc/login.defs.bak # SSH加固 sed -i s/#PermitRootLogin yes/PermitRootLogin no/ /etc/ssh/sshd_config sed -i s/#PasswordAuthentication yes/PasswordAuthentication no/ /etc/ssh/sshd_config echo AllowUsers admin /etc/ssh/sshd_config # 密码策略 sed -i s/PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/ /etc/login.defs sed -i s/PASS_MIN_LEN.*/PASS_MIN_LEN 12/ /etc/login.defs # 清理无用账户 for user in games ftp; do if id $user /dev/null; then userdel -r $user fi done # 应用变更 systemctl restart sshd5. 实战案例四批量软件更新与依赖检查5.1 更新策略设计先检查可更新软件包排除内核等关键包自动处理依赖关系生成变更报告5.2 智能更新脚本#!/bin/bash # 安全更新工具 # 获取更新列表 UPDATES$(dnf check-update -q | grep -v kernel | awk {print $1}) if [ -z $UPDATES ]; then echo 没有待更新的软件包 exit 0 fi # 生成更新报告 REPORT_FILE/var/log/update_report_$(date %Y%m%d).log echo 待更新软件包 $REPORT_FILE echo $UPDATES $REPORT_FILE # 交互式确认 read -p 发现 ${#UPDATES[]} 个更新是否继续(y/n) confirm if [[ $confirm ! [yY] ]]; then exit 1 fi # 执行更新 dnf update -y ${UPDATES[]} $REPORT_FILE 21 # 检查依赖 echo -e \n更新后依赖检查 $REPORT_FILE dnf repoquery --unsatisfied $REPORT_FILE6. 实战案例五跨服务器文件同步工具6.1 同步方案对比方案优点缺点适用场景rsync增量同步、带宽优化需配置SSH密钥定期备份scp简单直接全量传输小文件快速传输inotifyrsync实时同步系统资源占用高关键目录实时镜像6.2 智能同步脚本#!/bin/bash # 跨服务器同步工具 SRC_DIR/data/important DST_SERVERS(server1 server2) EXCLUDE_FILE/etc/sync_excludes # 检查源目录 [ -d $SRC_DIR ] || { echo 错误源目录不存在; exit 1; } # 遍历目标服务器 for server in ${DST_SERVERS[]}; do echo 开始同步到 $server ... # 使用rsync增量同步 rsync -avz --delete \ --exclude-from$EXCLUDE_FILE \ -e ssh -p 22 -i /root/.ssh/sync_key \ $SRC_DIR/ root$server:$SRC_DIR/ # 校验结果 if [ $? -eq 0 ]; then echo $server 同步成功 else echo $server 同步失败 2 fi done7. 脚本优化与调试技巧7.1 调试模式实践使用set -x激活调试追踪#!/bin/bash set -x # 开启命令回显 DEBUG${DEBUG:-false} # 默认关闭调试 $DEBUG set -x # 条件调试 # 生产环境建议添加的错误处理 set -euo pipefail trap echo 脚本被中断执行清理...; rm -f /tmp/lockfile EXIT7.2 性能优化要点减少子进程调用用内置命令替代awk/sed避免频繁文件IO合并写操作使用关联数组替代多文件处理# 低效写法 for file in *.log; do grep error $file errors.txt done # 优化写法 grep error *.log errors.txt8. 自动化运维体系进阶当单个脚本无法满足需求时需要考虑配置管理工具Ansible剧本可管理脚本的版本和分发任务调度系统通过Kubernetes CronJob实现跨集群调度监控集成将脚本输出接入Prometheus等监控系统# 示例Ansible调用本地脚本 - name: 部署日志清理脚本 hosts: all tasks: - name: 推送脚本 copy: src: /local/scripts/log_cleaner.sh dest: /usr/local/bin/ mode: 0755 - name: 配置cron任务 cron: name: 每日日志清理 minute: 0 hour: 3 job: /usr/local/bin/log_cleaner.sh /var/log/clean.log 21

相关新闻

Arm Mali-C55 ISP架构解析:从芯片设计到影像处理的诗意平衡
2026/6/12 14:04:23

Arm Mali-C55 ISP架构解析:从芯片设计到影像处理的诗意平衡

1. 项目概述:当芯片架构师决定写一首诗“Mali-C55: A Poem”这个标题,初看之下充满了奇妙的冲突感。一边是冷冰冰的、代表着现代计算工业巅峰的GPU IP核型号——Arm Mali-C55,另一边则是人类情感与想象力的古老结晶——诗歌。这并非一个常规的…

阅读更多
大语言模型本地部署与云端API的技术经济性对比
2026/6/2 21:56:28

大语言模型本地部署与云端API的技术经济性对比

1. 大语言模型部署的技术路线选择 当前企业采用大语言模型(LLM)主要面临两种技术路线:云端API服务和本地化部署。这两种方式在技术实现上存在本质差异,直接影响企业的成本结构、数据主权和技术弹性。 云端API服务(如OpenAI、Anthropic等&…

阅读更多
告别依赖地狱:用鱼香ROS脚本一键搞定CARLA-ROS桥接(ROS2 Foxy版)
2026/6/14 12:40:08

告别依赖地狱:用鱼香ROS脚本一键搞定CARLA-ROS桥接(ROS2 Foxy版)

告别依赖地狱:用鱼香ROS脚本一键搞定CARLA-ROS桥接(ROS2 Foxy版)在自动驾驶和机器人仿真领域,CARLA与ROS的联合仿真环境搭建一直是开发者面临的痛点。传统安装流程中,rosdep install的网络问题、依赖包定位困难以及版本…

阅读更多
别再纠结了!Halcon和VisionMaster到底怎么选?给工程师的实战避坑指南
2026/6/14 17:57:54

别再纠结了!Halcon和VisionMaster到底怎么选?给工程师的实战避坑指南

Halcon与VisionMaster终极对决:5个真实项目场景下的选型决策框架在机器视觉领域的技术选型会上,总有一个问题会让会议室陷入短暂的沉默:"我们该用Halcon还是VisionMaster?"这个看似简单的选择题背后,隐藏着算…

阅读更多
[论文学习]LLM 情境学习资料的快速精确遗忘技术:基于 In-Context Learning 与量化 K-Means 的 ERASE 方法
2026/6/14 17:57:54

[论文学习]LLM 情境学习资料的快速精确遗忘技术:基于 In-Context Learning 与量化 K-Means 的 ERASE 方法

Fast Exact Unlearning for In-Context Learning Data for LLMs (A. Muresanu et al., ICML 2025) 核心问题与动机 现代大型语言模型(LLM)训练成本极高,一旦部署后,若因「被遗忘权」(Right to be Forgotten&#xff…

阅读更多
Paperless-ngx多语言配置终极指南:从单语困境到全球化文档管理
2026/6/14 17:57:54

Paperless-ngx多语言配置终极指南:从单语困境到全球化文档管理

Paperless-ngx多语言配置终极指南:从单语困境到全球化文档管理 【免费下载链接】paperless-ngx A community-supported supercharged document management system: scan, index and archive all your documents 项目地址: https://gitcode.com/GitHub_Trending/pa…

阅读更多
如何用Dism++实现Windows系统终极优化:免费专业的完整指南
2026/6/14 17:57:54

如何用Dism++实现Windows系统终极优化:免费专业的完整指南

如何用Dism实现Windows系统终极优化:免费专业的完整指南 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language 你是否曾经为Windows系统越用越慢而烦恼&am…

阅读更多
如何一键解锁九大网盘真实下载地址:终极浏览器扩展使用指南
2026/6/14 17:57:54

如何一键解锁九大网盘真实下载地址:终极浏览器扩展使用指南

如何一键解锁九大网盘真实下载地址:终极浏览器扩展使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…

阅读更多
3步解决Windows安卓应用安装难题:APK-Installer完全指南
2026/6/14 16:57:54

3步解决Windows安卓应用安装难题:APK-Installer完全指南

3步解决Windows安卓应用安装难题:APK-Installer完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows上安装安卓应用一直是技术爱好者和普通用…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/14 0:57:30

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/14 0:57:30

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/14 0:57:30

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/14 0:57:30

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/14 0:57:30

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/14 0:57:30

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
GIT修改用户名
2026/6/14 11:53:59

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/13 15:45:46

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/14 15:49:58

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多