Ansible 常用文件模块详解(copy、file、fetch)

前言

在使用 Ansible 进行自动化运维时,文件操作是最基础且高频的场景。copyfilefetch 是 Ansible 核心的文件管理模块,分别实现文件推送、远程文件 / 目录管理、文件拉取功能,本文基于 openEuler 系统,详细讲解三大模块用法、参数及实操案例,适合运维初学者快速掌握。

一、模块概述

表格

模块 核心功能 数据流向
copy 推送文件 / 目录 本地控制节点 → 远程被管理机
file 管理远程文件 / 目录 / 权限 / 软链接 仅操作远程节点
fetch 拉取文件 远程被管理机 → 本地控制节点

二、copy 模块(本地→远程)

1. 模块作用

将控制节点的文件或目录,复制到远程主机,支持配置权限、备份、覆盖等操作,是批量分发文件的核心模块。

2. 常用参数

  • src:本地源文件 / 目录路径(必填)
  • dest:远程目标路径(必填)
  • owner:指定文件所属用户
  • group:指定文件所属用户组
  • mode:设置文件权限(如 0644、0755)
  • backup:覆盖前备份原文件(yes/no)
  • force:强制覆盖(yes/no,默认 yes)

3. 实操命令(openEuler 环境)

bash

运行

复制代码
# 1. 基础推送:本地文件复制到远程/tmp目录
ansible test03 -m copy -a "src=/home/lcy/first.sh dest=/tmp/"

# 2. 推送并配置权限、属主
ansible test03 -m copy -a "src=/home/lcy/test.txt dest=/opt/ owner=lcy group=lcy mode=0644"

# 3. 覆盖远程文件前自动备份
ansible test03 -m copy -a "src=test.sh dest=/tmp/ backup=yes"

# 4. 推送目录(递归复制整个目录)
ansible test03 -m copy -a "src=/home/lcy/test_dir dest=/opt/"

三、file 模块(远程文件管理)

1. 模块作用

在远程主机上创建 / 删除文件、创建目录、修改权限、创建软链接,不涉及文件传输,纯远程文件管理。

2. 常用参数

  • path:远程文件 / 目录路径(必填)
  • state:文件状态(directory = 创建目录,file = 创建文件,link = 软链接,absent = 删除)
  • owner/group:设置所属用户 / 组
  • mode:修改文件 / 目录权限
  • recurse:递归修改目录权限(yes/no)

3. 实操命令(openEuler 环境)

bash

运行

复制代码
# 1. 远程创建目录
ansible test03 -m file -a "path=/opt/ansible_dir state=directory"

# 2. 创建目录并配置权限、属主
ansible test03 -m file -a "path=/opt/data_dir state=directory owner=lcy group=lcy mode=0755"

# 3. 修改远程文件权限
ansible test03 -m file -a "path=/tmp/first.sh mode=0755"

# 4. 创建软链接
ansible test03 -m file -a "src=/etc/passwd dest=/tmp/passwd_link state=link"

# 5. 删除远程文件/目录(谨慎使用)
ansible test03 -m file -a "path=/tmp/test.txt state=absent"

四、fetch 模块(远程→本地)

1. 模块作用

从远程主机拉取文件到本地控制节点,仅支持拉取文件,不支持目录,默认会按远程主机名创建目录存储文件。

2. 常用参数

  • src:远程源文件路径(必填)
  • dest:本地存储路径(必填)
  • flat:扁平化存储(直接保存文件,不嵌套主机名目录)

3. 实操命令(openEuler 环境)

bash

运行

复制代码
# 1. 基础拉取:远程文件保存到本地(默认嵌套主机名目录)
ansible test03 -m fetch -a "src=/etc/passwd dest=/home/lcy/ansible_files/"

# 2. 扁平化拉取(直接保存文件,推荐使用)
ansible test03 -m fetch -a "src=/tmp/first.sh dest=/home/lcy/ flat=yes"

# 3. 拉取远程配置文件
ansible test03 -m fetch -a "src=/etc/hosts dest=/home/lcy/hosts_bak/ flat=yes"

五、三大模块核心区别

  1. copy:用于本地文件批量推送到远程,适合脚本、配置文件分发;
  2. file:用于远程文件 / 目录的状态管理,不传输文件,侧重权限、目录创建;
  3. fetch:用于远程文件拉取到本地,适合日志、配置文件备份。

六、总结

copyfilefetch 是 Ansible 入门必掌握的基础模块,掌握这三个模块可完成绝大多数文件运维场景。在 openEuler 系统中,Ansible 用法与 CentOS/RHEL 完全兼容,配合 Ad-Hoc 命令可快速实现批量文件操作,提升运维效率。

相关推荐
IT摆渡者1 小时前
VM EXSI7.0存储硬盘故障处理
大数据·linux·github
Narrastory2 小时前
我用 Claude Code 写代码不到 2 小时,却花了 3 天做完这个软件—Vibe Coding 的正确姿势,是设计不是生成
前端·人工智能·github
AI Dog2 小时前
GitHub 项目整体替换与大文件处理指南
github
March.s2 小时前
Nginx 服务器反向代理实战指南
服务器·nginx·github
逛逛GitHub3 小时前
在 Codex 中用这 4 个 SKill,让你拍的照片变高级。
github
Geek-Chow3 小时前
Git 标签与发布流程:轻量标签、附注标签与签名标签
git·tags
wear工程师3 小时前
Git 冲突怎么解决:别只删标记,先看懂暂存区的 1、2、3 阶段
git
村雨遥3 小时前
覆盖提交不等于删除,这才是彻底清除 Git 历史的正确姿势
git·github
FlightYe3 小时前
linux系统编程(八):阻塞与非阻塞IO对比
android·linux·运维·服务器·github·vim
kaixin_啊啊4 小时前
GitHub 开源 Qwen-MM-Plugins 小白入门,给 Codex 装上多模态工具箱
开源·github