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 命令可快速实现批量文件操作,提升运维效率。

相关推荐
Flandern11118 小时前
Pull Requests(PR)
学习·github·pr
恋喵大鲤鱼8 小时前
git mv
git·git mv
网络研究院10 小时前
AgentGG:开源的代理式 SAST 扫描器
开源·github·工具·网络研究观·agentgg
凤炎忻11 小时前
【GitHub】GitHub Actions 快速入门
github·自动化运维
Patrick_Wilson12 小时前
Git Worktree 原理详解:从 objects / refs 看懂多分支并行与多 Agent 协作
git·面试·ai编程
逛逛GitHub12 小时前
YouTube 一哥手搓了个 AI 工作台,一周就 5 万多 Star 。
github
七牛云行业应用12 小时前
Codex CLI 和 Codex 桌面端完整教程:两种入口的功能对比与选择指南
前端·后端·github
yaoxiaoganggang12 小时前
克隆 Superpowers 的规则库到你的本地(或者直接作为 Git Submodule)
人工智能·经验分享·git·ai编程
小雨青年12 小时前
GitHub Spark:自然语言能把全栈 AI 应用做到什么程度
人工智能·github
阿里嘎多学长13 小时前
2026-06-08 GitHub 热点项目精选
开发语言·程序员·github·代码托管