ansible的file模块

ansible的file模块

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

此文章为「ansible笔记(2)之常用模块」的子文章。

file 模块可以帮助我们完成一些对文件的基本操作,比如,创建文件或目录、删除文件或目录、修改文件权限等。

参数说明:

  • path:必须参数,用于指定要操作的文件或目录,在之前版本的 ansible 中,使用 dest 参数或者 name 参数指定要操作的文件或目录,为了兼容之前的版本,使用 destname 也可以;
  • state: :此参数非常灵活,此参数对应的值需要根据情况设定,比如,当我们需要在远程主机中创建一个目录的时候,我们需要使用 path 参数指定对应的目录路径,当我们想要创建一个目录时,需要将 state 的值设置为 directory,当我们想要操作一个文件时,则需要将 state 的值设置为 touch,当我们想要创建软链接文件时,需将 state 设置为 link,想要创建硬链接文件时,需要将 state 设置为 hard,当我们想要删除一个文件时(删除时不用区分目标是文件、目录、还是链接),则需要将 state 的值设置为 absent,"absent" 为缺席之意,当我们想让操作的目标“缺席”时,就表示我们想要删除目标;
  • src:当 state 设置为 link 或者 hard 时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过 src 参数即可指定链接源;
  • force:当 state=link 的时候,可配合此参数强制创建链接文件,当 force=yes 时,表示强制创建链接文件,不过强制创建链接文件分为两种情况,情况一:当你要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当你要创建链接文件的目录中已经存在与链接文件同名的文件时,将 force 设置为 yes,回将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。情况三:当你要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。
  • owner:用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错;
  • mode:用于指定被操作文件的权限,比如,如果想要将文件权限设置为 rw-r-x---,则可以使用 mode=650 进行设置,或者使用 mode=0650,效果也是相同的,如果你想要设置特殊权限,比如为二进制文件设置 suid,则可以使用 mode=4700
  • recurse:当要操作的文件为目录,将 recurse 设置为 yes,可以递归的修改目录中文件的属性;

例 1:在客户机上创建一个名为 testfile 的文件,如果 testfile 文件已经存在,则会更新文件的时间戳,与 touch 命令的作用相同。

$ ansible all -m file -a 'path=/root/testfile state=touch'

例 2:在客户机主机上创建一个名为 testdir 的目录,如果 testdir 目录已经存在,则不进行任何操作。

$ ansible all -m file -a 'path=/root/testdir state=directory'

例 3:在客户机上为 testfile 文件创建软链接文件,软链接名为 linkfile,执行下面命令的时候,testfile 已经存在。

$ ansible all -m file -a 'src=/root/testfile state=link path=/root/testfile.link'

例 4:在客户机上为 testfile 文件创建硬链接文件,硬链接名为 hardfile,执行下面命令的时候,testfile 已经存在。

$ ansible all -m file -a 'src=/root/testfile state=hard path=/root/testfile.hard'

例 5:在创建链接文件时,如果源文件不存在,或者链接文件与其他文件同名时,强制覆盖同名文件或者创建链接文件,参考上述 force 参数的解释。

$ ansible all -m file -a 'path=/root/testfile.link state=link src=/root/testfile force=yes'

例 6:删除远程机器上的指定文件或目录:

$ ansible all -m file -a 'path=/root/testfile state=absent'

例 7:在创建文件或目录的时候指定属主,或者修改远程主机上的文件或目录的属主。

$ ansible all -m file -a 'path=/tmp/testfile state=touch owner=zze'
$ ansible all -m file -a 'path=/tmp/testfile owner=zze'
$ ansible all -m file -a 'path=/tmp/testdir state=directory owner=zze'

例 8:在创建文件或目录的时候指定属组,或者修改远程主机上的文件或目录的属组。

$ ansible all -m file -a 'path=/tmp/testfile state=touch group=zze'
$ ansible all -m file -a 'path=/tmp/testfile group=zze'
$ ansible all -m file -a 'path=/tmp/testdir state=directory group=zze'

例 9:在创建文件或目录的时候指定权限,或者修改远程主机上的文件或目录的权限。

$ ansible all -m file -a 'path=/tmp/testdir/testfile state=touch mode=0644'
$ ansible all -m file -a 'path=/tmp/testdir/testfile mode=0644'
$ ansible all -m file -a 'path=/tmp/testdir mode=0644'

例 10:当操作远程主机中的目录时,同时递归的将目录中的文件的属主属组都设置为 zze

$ ansible all -m file -a 'path=/tmp/testdir/ state=directory owner=zze group=zze recurse=yes'

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/ansible-module-file.html

Buy me a cup of coffee ☕.