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

相关推荐
wdfk_prog2 小时前
解决 Linux 使用符号链接的 Git 仓库在 Windows 下无法创建符号链接的问题
linux·windows·git
zoujiahui_20182 小时前
ubuntu使用中的问题
linux·ubuntu·github
一个行走的民2 小时前
git commit 常见类型
git
Rabbit_QL2 小时前
【Git基础】02——分支:在不破坏主线的情况下做实验
大数据·git·elasticsearch
冰凉小脚3 小时前
git查询时间范围内的修改提交文件
git
wd5i8kA8i11 小时前
自研多线程 SSH 极速文件传输助手(附 GitHub 源码)
运维·ssh·github
徐小夕12 小时前
我用 AI 撸了个开源"万能预览器":浏览器直接打开 Office、CAD 和 3D 模型
前端·vue.js·github
Hsm4sxsBp13 小时前
Git 小妙招:本地忽略文件变更,不影响远程仓库
git
码云之上15 小时前
从一个截图函数到一个 npm 包——pdf-snapshot 的诞生记
前端·node.js·github