自动化运维工具——Ansible(六)——文件操作之copy模块

在前文的示例中,我们已经了解了ping模块与fetch模块,那么接下来几篇文章中,我们来了解一些新的模块,这些模块都是常用的操作文件的模块

1. copy模块介绍

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

2. 常用参数

此处我们介绍一些copy模块的常用参数,然后再给出对应示例。

  • 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表示。

3. 使用示例

3.1 示例一

将ansible主机中/testdir/copytest文件复制到远程主机的/opt目录下

#server1中

cd /testdir/
touch copytest
vim copytest
cat copytest
hello-word

在这里插入图片描述

#server4中

cd /opt/
touch copytest
vim copytest 
cathello-ansible
copytest

在这里插入图片描述

测试:
server1中:

ansible testB -m copy -a "src=/testdir/copytest dest=/opt/"  

在这里插入图片描述

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

扫描二维码关注公众号,回复: 10714161 查看本文章

在这里插入图片描述

再次执行(幂等性):
在这里插入图片描述

3.2 示例二

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

#server1中
ansible testB -m copy -a 'content="aaa\nbbb\n" dest=/opt/test'

在这里插入图片描述

#server4中
cd /opt/
ls
cat test 

在这里插入图片描述

3.3 示例三

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

# server4中
echo "hello kaiser" >>copytest 
cat copytest

# server1中
cat copytest

在这里插入图片描述
在这里插入图片描述

#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ force=no" 

在这里插入图片描述

在这里插入图片描述

3.4 示例四

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

#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ backup=yes"  

在这里插入图片描述

在这里插入图片描述

3.5 示例五

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

#server4中
useradd kaiser
id kaiser

在这里插入图片描述

#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ owner=kaiser"  

在这里插入图片描述
在server4主机:
在这里插入图片描述

3.6 示例六

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

#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ group=kaiser"  

在这里插入图片描述
在server4主机:
在这里插入图片描述

3.7 示例七

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

#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ mode=0640"  

在这里插入图片描述

在server4主机:
在这里插入图片描述

发布了190 篇原创文章 · 获赞 27 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45775963/article/details/105082768
今日推荐