文件模块管什么
文件模块处理文件系统对象本身的状态:创建目录、删除文件、建立或修改软链接、修改权限与属主。权限可以用八进制数字书写,也可以用符号方式描述(例如按属主、属组、其他用户分别设定)。相比直接调用权限修改命令,模块方式的好处是幂等:目标权限已符合要求时不会报告变更,也不会因为重复执行导致权限被反复改写。
基本信息
| 状态参数 | 声明为文件、目录、软链接或不存在 |
|---|---|
| 权限写法 | 八进制数字或符号描述,两种都支持 |
| 属主属性 | 设置属主与属组,可递归应用于目录 |
| 扩展属性 | 支持文件属性与安全上下文相关参数 |
管理要点
- 权限写全:明确属主、属组与权限位,不要依赖目标系统默认值。
- 目录与文件分开:目录通常需要执行位才能进入,文件不需要,二者权限不同。
- 递归慎用:对目录递归改权限会同时影响其下所有内容,先确认范围。
- 软链接语义:修改软链接自身的权限与修改其指向目标的效果不同,必须区分。
- 删除用不存在状态:显式声明目标不存在,重复执行仍然稳定。
- 关键文件收紧:证书与密钥文件权限应尽量收紧,并在任务中固定下来。
- 验证结果:变更后可用状态检查确认权限与属主符合预期。
常见用法
常见用法
- name: 创建目录并设定权限
ansible.builtin.file:
path: /opt/app/logs
state: directory
owner: app # 属主
group: app # 属组
mode: '0750' # 目录需要执行位才能进入
- name: 收紧密钥文件权限
ansible.builtin.file:
path: /etc/app/app.key
state: file
mode: '0600' # 仅属主可读写
- name: 建立软链接
ansible.builtin.file:
src: /opt/app/releases/1.4.2
dest: /opt/app/current
state: link
- name: 删除废弃文件
ansible.builtin.file:
path: /etc/app/legacy.conf
state: absent参数与影响
| 参数 | 作用 | 注意事项 |
|---|---|---|
| 状态 | 声明对象类型或不存在 | 删除操作不可逆 |
| 权限 | 设定权限位 | 八进制写法不受 umask 影响 |
| 属主属组 | 设定归属 | 需对应账号已存在 |
| 递归 | 对目录树生效 | 影响面大,先确认范围 |
| 符号链接 | 建立或修改链接 | 区分链接自身与目标 |
| 扩展属性 | 文件属性与安全上下文 | 依赖文件系统与系统配置 |
对目录递归修改权限是高风险操作:既可能把可执行文件的可执行位去掉导致服务无法启动,也可能把不该开放的目录暴露出去。执行前先确认目标范围。
权限变更后建议在同一个任务链中做一次状态校验,确认结果符合预期;仅依赖任务返回成功并不能保证权限真的被改为目标值。