1069 字
5 分钟
Linux运维工具箱(Python)
项目背景
在学习Linux运维相关知识时,发现日常管理服务器时总是要重复执行很多命令,比如配置网络、安装软件、检查系统状态等。于是就想着能不能写个工具把这些操作自动化,这样以后配置新服务器就方便多了。
最开始是用Shell写的,但是Shell处理复杂逻辑不太方便,后来学了Python就想着用Python重写。花了大概两周时间,边学边写,写出了这个运维工具箱。
主要功能
这个工具箱主要实现了以下功能:
1. 系统信息管理
- 自动识别Linux发行版(支持Ubuntu、CentOS、Rocky Linux等)
- 检查系统版本和配置信息
- 查看系统资源使用情况
2. 网络配置
- 自动配置静态IP地址
- 管理DNS服务器设置
- 支持不同发行版的网络配置方式(Debian系用的是netplan,RedHat系用的是network-scripts)
3. 软件源管理
- 一键更换国内镜像源(清华源、阿里源等)
- 自动备份原有配置
- 根据系统版本选择合适的源地址
4. 服务安装与部署
- 自动安装常用软件(Nginx、Docker等)
- 一键部署开发环境
- 配置系统服务自启动
5. 交互式菜单
使用了简单的菜单系统,操作起来比较直观:
==================================== Linux 运维工具箱 v1.0====================================1. 系统初始化2. 软件安装管理3. 系统配置4. 系统巡检5. 退出====================================技术实现
代码结构
整个工具分成了几个模块:
- 基础工具函数:负责执行命令、检查系统等底层操作
- 系统信息模块:读取和解析系统配置
- 网络配置模块:处理各种网络相关的配置
- 服务管理模块:安装和配置各类服务
- 交互界面模块:提供用户交互菜单
关键技术点
1. 系统识别
通过读取/etc/os-release文件来识别系统信息:
def read_system_info(): os_release_data = {} with open('/etc/os-release') as file: for line in file: if '=' in line: key, value = line.strip().split('=', 1) os_release_data[key] = value.strip().strip('"') return os_release_data2. 命令执行
使用subprocess模块执行系统命令,并处理各种异常情况:
def run_system_command(command_list): try: subprocess.run(command_list, check=True) return True except FileNotFoundError: print(f"找不到命令:{command_list[0]}") return False except subprocess.CalledProcessError: print("命令执行失败") return False3. 跨发行版兼容
不同Linux发行版使用的包管理器不同,需要做适配:
- Debian系(Ubuntu):使用
apt - RedHat系(CentOS、Rocky):使用
yum或dnf
代码里写了自动检测系统类型,然后调用对应的包管理器。
使用方式
快速开始
# 下载工具包wget https://devnu11.pages.dev/file/tools.tar
# 解压tar xf tools.tar
# 赋予执行权限chmod +x check_system.sh ops_toolbox.py wechat.py
# 运行(需要root权限)python3 ops_toolbox.py使用建议
- 建议在虚拟机或测试环境先试用一下
- 某些操作会修改系统配置,使用前最好备份重要数据
- 目前主要测试了CentOS 7/Rocky 9和Ubuntu 22.04
开发过程中的收获
遇到的问题
- 不同发行版差异大:刚开始没想到不同Linux发行版的配置文件位置、命令都不一样,花了不少时间去适配。
- 网络配置复杂:特别是Ubuntu 18.04之后用netplan,配置方式完全不同,研究了好久。
- 错误处理:一开始错误处理做得不好,运行中出错就直接崩溃,后来加了很多异常捕获和提示。
学到的东西
- 熟悉了Python的
subprocess模块,学会了用Python调用系统命令 - 深入了解了Linux系统的配置文件结构和服务管理
- 学会了如何写可维护性更好的代码,比如模块化、加注释
- 明白了做跨平台兼容的重要性
后续计划
这个工具现在还比较简陋,很多地方可以改进:
- 添加更多Linux发行版的支持(Arch、openSUSE等)
- 增加日志记录功能
- 做一个Web界面,这样操作更方便
- 添加配置文件,让用户可以自定义配置
- 写详细的使用文档
项目地址
工具包下载:tools.tar
代码写得比较仓促,可能还有不少bug,如果你发现问题欢迎反馈!
Linux运维工具箱(Python)
https://dev-null-sec.github.io/posts/python运维工具箱/