企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 1. file file 模块可以帮助我们完成一些对文件的基本操作。比如,**创建文件或目录**、**删除文件或目录**、**修改文件权限**等。 **设置文件的属性相关选项如下:** >### **path参数 :** > > 必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以。 > ### **state参数 :** > 我们想要在远程主机上创建/testdir/a/b目录,那么则需要设置path=/testdir/a/b,但是,我们无法从”/testdir/a/b“这个路径看出b是一个文件还是一个目录,ansible也同样无法单单从一个字符串就知道你要创建文件还是目录,所以,我们需要通过state参数进行说明。 > --state值: > 1)directory:指定要操作的目标是一个目录。 > 2)touch:要操作的目标是一个文件 > 3)link:软连接 > 4)hard:硬链接 > 5)absent:删除 > ### **src参数 :** > 当state设置为link或者hard时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源。 > ### **force参数** : > 当state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。 > 不过强制创建链接文件分为三种情况。 > 情况一:当要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。 > 情况二:当要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。 > 情况三:当要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。 > ### **owner参数** > > 用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。 > ### **group参数** > > 用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。 > ### **mode参数:** > > 用于指定被操作文件的权限,比如,如果想要将文件权限设置为”rw-r-x---“,则可以使用mode=650进行设置,或者使用mode=0650,效果也是相同的。如果想要设置特殊权限,比如为二进制文件设置suid,则可以使用mode=4700。 > ### **recurse参数**: > > 当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性。 ## 2.实例: ### 2.1 创建文件 ``` [root@ansible-manager ~]# ansible ansible-demo3 -m file -a "path=/testdir/testfile1 state=touch" ansible-demo3 | SUCCESS => { "changed": true, "dest": "/testdir/testfile1", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "secontext": "unconfined_u:object_r:default_t:s0", "size": 8, "state": "file", "uid": 0 } ``` ### 2.3 强制创建软连接 在创建链接文件时,如果源文件不存在,或者链接文件与其他文件同名时,强制覆盖同名文件或者创建链接文件,参考上述 force 参数的解释。 ``` [root@ansible-manager ~]# ansible ansible-demo3 -m file -a "path=/testdir/linkfile3 state=link src=/testdir/sourcefile force=yes" ansible-demo3 | SUCCESS => { "changed": true, "dest": "/testdir/linkfile3", "src": "/testdir/sourcefile", "state": "absent" } ``` **返回的 state 为 absent,表示源文件不存在。** ### 2.4 删除远程机器上的指定文件或目录。 ``` [root@ansible-manager ~]# ansible ansible-demo3 -m file -a "path=/testdir/testdir state=absent" ansible-demo3 | SUCCESS => { "changed": true, "path": "/testdir/testdir", "state": "absent" } ``` ### 2.5 用户属性 在创建文件或目录的时候指定属主,或者修改远程主机上的文件或目录的属主。 ``` ansible ansible-demo3 -m file -a "path=/testdir/abc state=touch owner=ding" ansible ansible-demo3 -m file -a "path=/testdir/abc owner=ding" ansible ansible-demo3 -m file -a "path=/testdir/abc state=directory owner=ding" ``` 在创建文件或目录的时候指定属组,或者修改远程主机上的文件或目录的属组。 ``` ansible ansible-demo3 -m file -a "path=/testdir/abb state=touch group=ding" ansible ansible-demo3 -m file -a "path=/testdir/abb group=ding" ansible ansible-demo3 -m file -a "path=/testdir/abb state=directory group=ding" ``` 在创建文件或目录的时候指定权限,或者修改远程主机上的文件或目录的权限。 ``` ansible ansible-demo3 -m file -a "path=/testdir/abb state=touch mode=0644" ansible ansible-demo3 -m file -a "path=/testdir/abb mode=0644" ansible ansible-demo3 -m file -a "path=/testdir/binfile mode=4700" ansible ansible-demo3 -m file -a "path=/testdir/abb state=directory mode=0644" ``` 当操作远程主机中的目录时,同时递归的将目录中的文件的属主属组都设置为ding。 ``` ansible ansible-demo3 -m file -a "path=/testdir/abd state=directory owner=ding group=ding recurse=yes" ```