ansible 通过 file 模块管理远程目录与权限,支持创建(state=directory)、修改属性、删除(state=absent)、创建符号/硬链接(state=link/hard),具备幂等性;需注意 mode 八进制写法、recurse 递归设置、selinux 参数及 force 覆盖等关键选项。

Ansible 管理远程目录与权限主要靠 file 模块完成,它是最常用、最直接的文件系统操作模块,支持创建、删除、修改权限、属主、SELinux 上下文等,且具备幂等性——重复执行不会引发意外变更。
创建目录并设置归属与权限
用 state=directory 创建目录,同时指定所有者、组和权限(八进制或符号模式):
-
owner和group可写用户名/组名或 UID/GID 数字 -
mode推荐用八进制(如0755),注意开头的0不可省略,否则会被解析为十进制 -
recurse: yes配合state=directory可递归设置子目录权限(但不自动创建父目录)
示例:确保 /opt/app/logs 目录存在,属主为 appuser,组为 appgroup,权限为 0750:
ansible.builtin.file:
path: /opt/app/logs
state: directory
owner: appuser
group: appgroup
mode: '0750'
修改已有目录的权限与属性
只需提供 path 和要变更的属性,无需指定 state(默认保持原类型):
- 若路径是目录,会更新其权限、属主、时间戳等,不影响内容
- 可用
setype或seuser调整 SELinux 上下文(需目标主机启用 SELinux) -
follow: no可避免对符号链接本身做操作(默认跟随链接)
示例:将 /var/www/html 的组改为 www-data,权限收紧为 0755:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
ansible.builtin.file:
path: /var/www/html
group: www-data
mode: '0755'
删除目录或清空内容
使用 state=absent 删除整个目录(含所有子项),类似 rm -rf;若只想清空内容,需配合 shell 模块或 find 命令:
-
state=absent对目录是递归删除,不可逆,请谨慎使用 - 如需保留空目录,可先用
shell清空再用file重设权限 - 对软链接,
state=absent仅删除链接本身,不删源文件
示例:彻底移除临时构建目录:
- name: Remove build artifactsansible.builtin.file:
path: /tmp/build-{{ ansible_date_time.date }}
state: absent
创建符号链接与硬链接
用 state=link 或 state=hard 创建链接,必须提供 src(源路径)和 dest(目标路径):
-
src是相对于dest所在目录的路径,或写绝对路径更稳妥 -
force: yes允许覆盖已存在的目标(如旧链接或文件) - 硬链接不能跨文件系统,且不能链接目录;符号链接无此限制
示例:为配置文件创建统一入口:
- name: Create config symlinkansible.builtin.file:
src: /etc/myapp/config-prod.yml
dest: /etc/myapp/config.yml
state: link
force: yes










