在日常服务器维护工作中,经常需要处理文件、目录或执行系统命令。Python 的 os 模块提供了与操作系统交互的接口,用起来简单直接,特别适合写一些自动化小脚本。
获取当前工作目录和切换路径
有时候我们需要知道脚本运行时所处的目录,或者想切换到指定路径下进行操作。os.getcwd() 能拿到当前路径,os.chdir() 则用来切换。
import os
print(os.getcwd()) # 输出当前目录
os.chdir('/var/log') # 切换到日志目录
print(os.getcwd()) # 再次打印确认
创建和删除目录
部署服务时常需新建日志或缓存目录。os.mkdir() 可以创建单个目录,os.makedirs() 支持递归创建多级目录。
os.mkdir('backup') # 创建一级目录
os.makedirs('data/temp/files', exist_ok=True) # 存在也不报错
清理临时文件夹时,os.rmdir() 删除空目录,而真正想删内容得配合其他方法,比如 shutil。但判断目录是否存在再动手是好习惯。
if os.path.exists('temp'):
os.rmdir('temp') # 只能删空目录
检查文件和路径状态
写监控脚本时,常要判断某个配置文件是否存在,或者是不是一个真正的文件。os.path.isfile() 和 os.path.isdir() 就派上用场了。
if os.path.isfile('/etc/nginx.conf'):
print('Nginx 配置文件存在')
else:
print('警告:配置文件丢失')
还可以用 os.path.getsize() 查看文件大小,单位是字节,适合做容量预警。
运行系统命令
有些任务 shell 命令更方便,比如重启服务。os.system() 能直接调用终端指令。
os.system('systemctl restart nginx')
虽然方便,但注意别拼接用户输入,容易有安全风险。更推荐用 subprocess 模块替代复杂场景。
遍历目录中的文件
清理过期日志时,往往需要列出某个目录下的所有文件。os.listdir() 返回文件名列表,结合循环就能逐个处理。
files = os.listdir('/var/log/app')
for f in files:
filepath = os.path.join('/var/log/app', f)
if f.endswith('.log') and os.path.getsize(filepath) == 0:
os.remove(filepath) # 删除空的日志文件
环境变量操作
很多服务依赖环境变量,比如数据库地址。os.environ 可以读取或设置它们。
db_host = os.environ.get('DB_HOST', 'localhost')
print(f'连接数据库: {db_host}')
调试时临时改个值也很方便,不用动配置文件。