Ansible模块介绍——文件操作模块(上)

简介: Ansible模块介绍——文件操作模块

文件操作模块

file模块

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

  • path参数:必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以。
  • state参数:Path=“路径” state= touch|directory|link|hard|absent
    此参数非常灵活,此参数对应的值需要根据情况设定,比如,当我们需要在远程主机中创建一个目录的时候,我们需要使用path参数指定对应的目录路径,假设,我想要在远程主机上创建/testdir/a/b目录,那么我则需要设置path=/testdir/a/b,但是,我们无法从"/testdir/a/b"这个路径看出b是一个文件还是一个目录,ansible也同样无法单单从一个字符串就知道你要创建文件还是目录,所以,我们需要通过state参数进行说明
  • 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,可以递归的修改目录中文件的属性。

示例

创建文件

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

ansible test70 -m file -a "path=/testdir/testfile state=touch"

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

ansible test70 -m file -a "path=/testdir/testdir state=directory"

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

ansible test70 -m file -a "path=/testdir/linkfile state=link src=/testdir/testfile"  

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

ansible test70 -m file -a "path=/testdir/hardfile state=hard src=/testdir/testfile"

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

ansible test70 -m file -a "path=/testdir/linkfile state=link src=sourcefile force=yes"

删除文件

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

ansible test70 -m file -a "path=/testdir/testfile state=absent"

更改属主属组

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

ansible test70 -m file -a "path=/testdir/abc state=touch owner=zj"
ansible test70 -m file -a "path=/testdir/abc state=directory owner=zj"
ansible test70 -m file -a "path=/testdir/abc owner=zj"

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

ansible test70 -m file -a "path=/testdir/abb state=touch group=zj"  
ansible test70 -m file -a "path=/testdir/abb group=zj"  
ansible test70 -m file -a "path=/testdir/abb state=directory group=zj"  

更改权限

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

ansible test70 -m file -a "path=/testdir/111 state=touch mode=755"
ansible test70 -m file -a "path=/testdir/111dir mode=755"
ansible test70 -m file -a "path=/testdir/111file mode=755"
ansible test70 -m file -a "path=/testdir/111 state=directory mode=755"

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

ansible test70 -m file -a "path=/testdir/abd state=directory owner=zsy group=zsy recurse=yes" 

copy模块

见名知义,copy模块的作用就是拷贝文件,它与fetch模块类似,不过,fetch模块是从远程主机中拉取文件到ansible主机,而copy模块是将ansible主机上的文件拷贝到远程主机中。

  • src参数:用于指定需要copy的文件或目录
  • dest参数:用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数
  • content参数:当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
  • force参数: 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
  • backup参数: 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
  • owner参数:指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
  • group参数: 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
  • mode参数: 指定文件拷贝到远程主机后的权限,如果你想将权限设置为"rw-r–r–",则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。

示例

复制(覆盖)

1.将ansible主机中/testdir/copytest文件复制到远程主机的/opt目录下,注意,如果copytest文件已经存在于远程主机的/opt目录中,并且远程主机中的copytest与ansible主机中copytest文件内容不同,那么使用如下命令时,远程主机中的copytest文件将被覆盖。

ansible test70 -m copy -a "src=/testdir/copytest dest=/opt/ force=yes"

复制(不覆盖)

2.将ansible主机中/testdir/copytest文件复制到远程主机的/opt目录中时,如果远程主机中已经存在/opt/copytest文件,并且文件内容与ansible主机中的copytest文件的内容不一致,则不执行拷贝操作,远程主机中的/opt/copytest文件内容不会被改变。

ansible test70 -m copy -a "src=/testdir/copytest dest=/opt/ force=no"

创建文件编辑内容

3.在远程主机的/opt目录下生成文件test,test文件中有两行文本,第一行文本为aaa,第二行为bbb,当使用content指定文件内容时,dest参数对应的值必须是一个文件,而不能是一个路径。

ansible test70 -m copy -a 'content="aaa\nbbb\n" dest=/opt/test' 

文件存在备份源文件在复制

4.将ansible主机中/testdir/copytest文件复制到远程主机的/opt目录中时,如果远程主机中已经存在/opt/copytest文件,并且文件内容与ansible主机中的copytest文件的内容不一致,会执行拷贝操作,但是在执行拷贝操作之前,会将远程主机中的原文件重命名,以作备份,然后再进行拷贝操作。

ansible test70 -m copy -a "src=/testdir/copytest dest=/opt/ backup=yes"

复制文件指定文件属主属组权限

5.拷贝文件时,指定文件的属主,需要注意,远程主机上必须存在对应的用户。

ansible test70 -m copy -a "src=/testdir/copytest dest=/opt/ owner=zsy"

6.拷贝文件时,指定文件的属组,需要注意,远程主机上必须存在对应的组。

ansible test70 -m copy -a "src=/testdir/copytest dest=/opt/ group=zsy"

7.拷贝文件时,指定文件的权限

ansible test70 -m copy -a "src=/testdir/copytest dest=/opt/ mode=0640"


相关文章
|
2月前
|
缓存 Shell Linux
[ansible]常用内置模块
[ansible]常用内置模块
|
3月前
|
Shell 应用服务中间件 Linux
Ansible的常用模块
Ansible的常用模块
56 6
|
3月前
|
Shell 数据安全/隐私保护
Ansible Ad-hoc,命令执行模块
Ansible Ad-hoc,命令执行模块
31 1
|
3月前
|
运维 Linux 应用服务中间件
Linux之自动化运维工具ansible、ansible模块(2)
Linux之自动化运维工具ansible、ansible模块(2)
|
3月前
|
运维 Linux Shell
Linux之自动化运维工具ansible、ansible模块(1)
Linux之自动化运维工具ansible、ansible模块(1)
|
5月前
|
算法 安全 Linux
Ansible 中的copy 复制模块应用详解
Ansible 中的copy 复制模块应用详解
307 1
|
11月前
|
网络安全 数据安全/隐私保护
ansible的get_url模块
ansible的get_url模块
121 1
|
9天前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible实战应用
【9月更文挑战第24天】在现代IT基础设施的快速迭代与扩展中,自动化运维成为提升效率、保障稳定性的关键。本文将深入探讨Ansible这一流行的自动化工具,通过实际案例分析其如何简化日常运维任务,优化工作流程,并提高系统的可靠性和安全性。我们将从Ansible的基础概念入手,逐步深入到高级应用技巧,旨在为读者提供一套完整的Ansible应用解决方案。
|
15天前
|
运维 Ubuntu 应用服务中间件
自动化运维之路:Ansible实战指南
【9月更文挑战第18天】在追求效率和稳定性的今天,自动化运维已成为IT领域的热门话题。本文将引导你通过实际案例学习如何使用Ansible进行自动化配置管理、任务执行和流程编排,从而提升你的工作效率并减少人为错误。我们将从基础概念出发,逐步深入到高级应用,让你能够轻松掌握这一强大的自动化工具。
|
4天前
|
运维 持续交付 开发工具
自动化运维工具:Ansible入门教程
【8月更文挑战第60天】在现代IT运维管理中,自动化工具的使用已成为提高生产效率、减少人为错误和确保环境一致性的重要手段。本文将介绍Ansible——一款流行的开源自动化运维工具,通过其简单易学的语法和强大的功能,帮助读者快速入门并实现自动化部署和管理。我们将从Ansible的基本概念讲起,逐步深入到实际的代码示例,展示如何利用Ansible简化日常的运维任务。无论你是新手还是有经验的系统管理员,这篇文章都将为你提供实用的知识和技巧,让你轻松驾驭Ansible,开启自动化运维之旅。