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

相关推荐
不怕犯错,就怕不做1 小时前
git prune 自动删除本地记录中那些远程已经不存在的分支引用
linux·服务器·git
峰向AI6 小时前
GenOffice:开源 Office 套件,字节级保留、本地转换、BYOK模式
github
ELI_He9997 小时前
如何还原已经推送的提交
git
其实防守也摸鱼7 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
m4Rk_8 小时前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github
️学习的小王8 小时前
Git项目提交忽略文件怎么做?以Python项目为例,详解.gitignore
git·python·elasticsearch
其实防守也摸鱼8 小时前
免杀与持久化入门:从载荷免杀到隐蔽通道的完整指南
运维·服务器·数据库·安全·github·copilot·渗透
sec_jay8 小时前
一个面向有限本地语料库的、单智能体、工具调用型 Agentic RAG 原型--关于agent的实践调研报告
github
愚蠢得人8 小时前
Git Worktree实用指南:同时开发两个分支,不再反复切换
git
goplaysource11 小时前
IPTV 频道去重:用哈希解决"同一个频道出现十遍"的问题
github