目录
[1. 确保文件存在](#1. 确保文件存在)
[2. 创建目录](#2. 创建目录)
[3. 删除文件或目录](#3. 删除文件或目录)
[4. 更改文件权限和所有者](#4. 更改文件权限和所有者)
[5. 创建符号链接](#5. 创建符号链接)
[6. 递归更改目录权限](#6. 递归更改目录权限)
[示例 Playbook](#示例 Playbook)
[1. 确保文件存在](#1. 确保文件存在)
[2. 创建目录](#2. 创建目录)
[3. 删除文件或目录](#3. 删除文件或目录)
[4. 更改文件权限和所有者](#4. 更改文件权限和所有者)
[5. 创建符号链接](#5. 创建符号链接)
[6. 递归更改目录权限](#6. 递归更改目录权限)
file
模块用于管理文件和目录的属性,包括创建、删除、更改权限、所有者等。以下是一些常见的用法示例,以及在Playbook中如何使用它。
参数示例
-
path:
- 描述:目标文件或目录的路径。
- 类型:字符串
- 必需:是
- 示例:
path: /path/to/file_or_directory
-
state:
- 描述:设置文件或目录的状态。
- 类型:字符串
- 默认值:
file
- 可选值:
absent
:如果文件或目录存在,则删除它们。directory
:确保路径是一个目录。file
:确保路径是一个文件。link
:确保路径是一个符号链接。touch
:如果文件不存在则创建一个空文件,存在则更新其最后修改时间。
- 示例:
state: directory
-
mode:
- 描述:设置文件或目录的权限模式(类似于 chmod)。
- 类型:字符串
- 示例:
mode: '0755'
-
owner:
- 描述:设置文件或目录的所有者。
- 类型:字符串
- 示例:
owner: username
-
group:
- 描述:设置文件或目录的组。
- 类型:字符串
- 示例:
group: groupname
-
recurse:
- 描述:递归设置目录的权限和所有权。
- 类型:布尔值
- 默认值:
no
- 示例:
recurse: yes
-
src:
- 描述:当
state
为link
时,设置符号链接的源路径。 - 类型:字符串
- 示例:
src: /path/to/source
- 描述:当
-
force:
- 描述:当
state
为link
且目标已经存在时,是否强制替换。 - 类型:布尔值
- 默认值:
no
- 示例:
force: yes
- 描述:当
-
follow
- 描述: 当设置目标属性时,是否跟随符号链接。
- 类型: boolean
- 默认值 :
no
-
checksum
- 描述: 如果路径是文件,强制使用指定的校验和来校验文件内容。
- 类型: string
-
selevel
- 描述: 强制设置文件的SELinux安全级别,通常不需要设置。
- 类型: string
-
serole
- 描述: 强制设置文件的SELinux角色,通常不需要设置。
- 类型: string
-
setype
- 描述: 强制设置文件的SELinux类型,通常不需要设置。
- 类型: string
-
seuser
- 描述: 强制设置文件的SELinux用户,通常不需要设置。
- 类型: string
基本语法
通过 ansible
命令行执行单个任务的方法如下:
ansible <host-pattern> -m file -a "参数1=值1 参数2=值2 ..." [-i inventory]
示例
1. 确保文件存在
确保一个文件存在,如果不存在则创建它:
bash
ansible all -m file -a "path=/tmp/testfile state=touch"
2. 创建目录
创建一个目录,并设置所有者、组和权限:
bash
ansible all -m file -a "path=/tmp/testdir state=directory owner=myuser group=mygroup mode=0755"
3. 删除文件或目录
确保一个文件或目录不存在:
bash
# 删除文件
ansible all -m file -a "path=/tmp/testfile state=absent"
# 删除目录及其内容
ansible all -m file -a "path=/tmp/testdir state=absent"
4. 更改文件权限和所有者
更改文件的权限和所有者:
bash
ansible all -m file -a "path=/tmp/testfile owner=newowner group=newgroup mode=0644"
5. 创建符号链接
创建一个符号链接:
bash
ansible all -m file -a "src=/tmp/original dest=/tmp/link state=link"
6. 递归更改目录权限
递归地更改目录及其内容的权限:
bash
ansible all -m file -a "path=/tmp/testdir state=directory mode=0755 recurse=yes"
示例 Playbook
1. 确保文件存在
- name: Ensure testfile exists
file:
path: /tmp/testfile
state: touch
这个任务确保 /tmp/testfile
存在,如果不存在则创建一个空文件。
2. 创建目录
- name: Ensure testdir exists
file:
path: /tmp/testdir
state: directory
owner: myuser
group: mygroup
mode: '0755'
这个任务创建 /tmp/testdir
目录,并设置目录的所有者、组和权限。
3. 删除文件或目录
- name: Remove testfile if it exists
file:
path: /tmp/testfile
state: absent
- name: Remove testdir if it exists
file:
path: /tmp/testdir
state: absent
这些任务确保相应的文件或目录不存在。如果存在,则删除它们。
4. 更改文件权限和所有者
- name: Change file ownership and permissions
file:
path: /tmp/testfile
owner: newowner
group: newgroup
mode: '0644'
这个任务更改 /tmp/testfile
的所有者、组和权限。
5. 创建符号链接
- name: Create a symbolic link
file:
src: /tmp/original
dest: /tmp/link
state: link
这个任务创建一个从 /tmp/link
到 /tmp/original
的符号链接。
6. 递归更改目录权限
- name: Recursively change directory permissions
file:
path: /tmp/testdir
state: directory
mode: '0755'
recurse: yes
这个任务递归地更改 /tmp/testdir
目录及其内容的权限。