Shell 脚本编程从入门到精通

爪 爪
爪 爪
爪 爪
编辑
59
文章
0
粉丝
安全运维221,419字数 503阅读1分40秒阅读模式
AI智能摘要
AI 生成的文章内容摘要

一、环境准备

# 安装 Python 3
yum install -y python3

# 创建虚拟环境 python3 -m venv venv source venv/bin/activate

 

# 安装常用库 pip install requests paramiko psutil fabric

---

二、系统监控脚本

Shell 脚本编程从入门到精通

#!/usr/bin/env python3
import psutil
import json

def check_system(): """检查系统状态""" data = { "cpu": psutil.cpu_percent(interval=1), "memory": psutil.virtual_memory().percent, "disk": psutil.disk_usage("/").percent, "network": psutil.net_io_counters() } # 告警判断 if data["cpu"] > 80: print(f"⚠️ CPU 告警:{data['cpu']}%") if data["memory"] > 80: print(f"⚠️ 内存告警:{data['memory']}%") return data

 

if __name__ == "__main__": result = check_system() print(json.dumps(result, indent=2))

---

三、批量执行命令

#!/usr/bin/env python3
from fabric import Connection

hosts = ["server1", "server2", "server3"]

 

for host in hosts: c = Connection(host=host, user="root") result = c.run("uptime") print(f"{host}: {result.stdout.strip()}")

---

四、日志分析脚本

#!/usr/bin/env python3
from collections import Counter

def analyze_log(log_file): """分析 Nginx 访问日志""" ips = [] with open(log_file, "r") as f: for line in f: ip = line.split()[0] ips.append(ip) # 统计 Top 10 top_ips = Counter(ips).most_common(10) for ip, count in top_ips: print(f"{ip}: {count} 次")

 

if __name__ == "__main__": analyze_log("/var/log/nginx/access.log")

---

五、自动备份脚本

#!/usr/bin/env python3
import os
import shutil
from datetime import datetime

def backup_database(): """备份 MySQL 数据库""" today = datetime.now().strftime("%Y%m%d") backup_dir = f"/backup/mysql/{today}" os.makedirs(backup_dir, exist_ok=True) # 执行备份 os.system(f"mysqldump -u root -p --all-databases > {backup_dir}/all.sql") # 压缩 shutil.make_archive(backup_dir, "gztar", backup_dir) # 清理 7 天前备份 os.system(f"find /backup/mysql -mtime +7 -delete") print(f"✅ 备份完成:{backup_dir}.tar.gz")

 

if __name__ == "__main__": backup_database()

---

六、API 监控脚本

#!/usr/bin/env python3
import requests
import time

urls = [ "https://www.it2021.com", "https://www.nxjixie.com" ]

 

for url in urls: try: start = time.time() resp = requests.get(url, timeout=5) elapsed = (time.time() - start) * 1000 status = "✅" if resp.status_code == 200 else "❌" print(f"{status} {url}: {resp.status_code} ({elapsed:.0f}ms)") except Exception as e: print(f"❌ {url}: {str(e)}")

---

七、总结

Python 运维脚本核心:简单、实用、可维护

建议:
1. 使用虚拟环境管理依赖
2. 添加异常处理
3. 记录执行日志
4. 定期清理临时文件

---
作者:爪
分类:编程开发
标签:Python、自动化运维、脚本编写、运维开发、效率工具
发布时间:2026-04-11

历年同日文章
4 月
12
 
爪 爪
  • 本文由 爪 爪 发表于2026年4月12日 01:11:34
评论  22  访客  22
    • 蹦跶的小土豆
      蹦跶的小土豆 0

      标题明明写的是shell,点进来怎么全是Python?这操作有点迷啊。

      • 血月吟游者
        血月吟游者 0

        这种标题党现在太多了,看着就不靠谱。

        • Weaver Wren
          Weaver Wren 1

          虽然标题不对,但代码还是能用的,那个日志分析的脚本逻辑挺简单直接。

            • 暖秋光
              暖秋光 1

              @ Weaver Wren 标题党实锤了,不过代码还算实在。

            • 顽皮猴子
              顽皮猴子 1

              那个备份脚本里密码直接明文真的好吗?感觉不太安全啊。

              • 嘻嘻哈哈侠
                嘻嘻哈哈侠 1

                用fabric批量跑命令确实方便,比写expect脚本省事多了。

                  • 冷场灭火器
                    冷场灭火器 1

                    @ 嘻嘻哈哈侠 fabric这库现在是不是有点过时了?感觉都在用ansible。

                  • 钢铁之翼
                    钢铁之翼 1

                    想问下这个监控脚本能直接在Ubuntu 20.04上跑吗?

                    • 血月栖魂
                      血月栖魂 1

                      标题挂羊头卖狗肉,差评。

                      • 暗瞳
                        暗瞳 1

                        这种告警阈值是不是有点太高了?CPU飙到80%业务早卡死了吧。

                        • SnoutSculpt
                          SnoutSculpt 1

                          正好最近想学Python运维,这几个例子挺实用的,先拿小本本记下来。

                            • 橄榄幽静
                              橄榄幽静 1

                              @ SnoutSculpt 记下来也没用,得动手敲一遍才记得住。

                            • 双子座的灵动
                              双子座的灵动 0

                              那个清理7天前备份的命令,要是路径写错了会不会把系统删挂了?有点慌。

                              • HootHaven
                                HootHaven 1

                                Python是挺简单,但shell处理文本那块还是无可替代的。

                                • 魔渊行者
                                  魔渊行者 1

                                  这告警能不能对接到钉钉或者企业微信?光打印出来谁看得到啊。

                                  • 星辉引路者
                                    星辉引路者 1

                                    新手表示那个虚拟环境咋激活?漏了一步吧。

                                    • 无语子
                                      无语子 0

                                      那个日志分析的,要是日志文件几个G,内存会不会炸?

                                      • 行者之梦
                                        行者之梦 0

                                        这配色看着舒服,代码逻辑也清晰,适合入门。

                                        • 虚拟轨迹
                                          虚拟轨迹 1

                                          mysqldump直接输密码确实不安全,起码搞个配置文件存起来。

                                          • 乖乖猫
                                            乖乖猫 1

                                            API监控那里加个重试机制更稳

                                            • 暗影之渊
                                              暗影之渊 1

                                              标题写shell,内容全是Python?

                                                • 爪 爪
                                                  爪 爪

                                                  @ 暗影之渊 标题党了,但Python做运维也挺实用嘛

                                              匿名

                                              发表评论

                                              匿名网友

                                              拖动滑块以完成验证