• ansible笔记(4):常用模块之文件操作


    1.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表示。

    recurse:当要操作的文件是目录,当recurse=yes时表示可以递归地修改目录中文件的属性。

    命令演示:

    1.1src参数和dest参数示例:

      将ansible控制机中的/test/copytest文件拷贝到远程主机的/test目录(该目录下已经有一个名为copytest的文件,但是内容与ansible控制机中的不同)。参数因为默认情况下双方的文件名相同时,如果不适用force参数进行设置,默认情况下就是yes,也就是强制性覆盖。

    [root@ansible-control test]# ansible 192.168.10.3 -m copy -a "src=/test/copytest dest=/test"

    1.2content参数示例:

      使用content参数时,它的dest参数跟的必须是一个文件,不能是路径!使用content参数一般是直接覆盖原文件内容。

    [root@ansible-control test]# ansible 192.168.10.3 -m copy -a 'content="aaa bbb ccc " dest=/test/copytest'

    1.3force参数示例:

      将ansible主机中/test/copytest文件复制到远程主机的/test目录中时,如果远程主机中已经存在/test/copytest文件,并且文件内容与ansible主机中的copytest文件的内容不一致,则不执行拷贝操作,远程主机中的/test/copytest文件内容不会被改变。(文件名相同,force=yes:强制覆盖;force=no:不覆盖)

    [root@ansible-control test]# ansible 192.168.10.3 -m copy -a 'content="aaa bbb ccc " dest=/test/copytest force=no'

    1.4backup参数示例: 

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

    [root@ansible-control test]# ansible 192.168.10.3 -m copy -a 'content="aaa bbb ccc " dest=/test/copytest backup=yes'

    1.5owner参数示例:

      用来复制文件时指定该文件的“属主”,必须确保远程主机中存在所指定的“属主”,否则报错。

    1.6group参数示例:

      用来复制文件时指定该文件的“属组”,必须确保远程主机中存在所指定的“属组”,否则报错。

    [root@ansible-control test]# ansible 192.168.10.3 -m copy -a "src=/test/copytest dest=/test/ group=wenhewen"

     1.7mode参数示例:

      在拷贝文件的时候指定文件的权限。此处,将copytest文件复制后将其文件权限设置为“rwx-rwx-rwx”,可用数字表示法(0777)或者字符表示法(u+rwx,g+rwx,o+rwx)。

    [root@ansible-control test]# ansible 192.168.10.3 -m copy -a "src=/test/copytest dest=/test/ mode=0777"

    Linux权限从左到右:U(user)、G(group)、O(others),mode参数也可以这样设置文件权限:

    [root@ansible-control test]# ansible 192.168.10.3 -m copy -a "src=/test/copytest dest=/test/ mode=u+w"

    [root@ansible-control test]# ansible 192.168.10.3 -m copy -a "src=/test/copytest dest=/test/ mode=u-x,o-x"

    [root@ansible-control test]# ansible 192.168.10.3 -m copy -a "src=/test/copytest dest=/test/ mode=u+wx,g+wx,o+wx"

     2.file模块

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

     参数解析:

    path:必须参数,用于指定要操作的文件或目录,在之前版本的ansible中使用dest参数和name参数指定要操作的文件或目录,新版本为了兼容之前的版本,也可以使用dest和name。

    state:此参数非常灵活,此参数对应的值需要根据情况设定,比如,当我们需要在远程主机中创建一个目录的时候,我们需要使用path参数指定对应的目录路径,假设,我想要在远程主机上创建/test/a/b目录,那么我则需要设置path=/test/a/b,但是,我们无法从/test/a/b这个路径看出b是一个文件还是一个目录,ansible也同样无法单单从一个字符串就知道你要创建文件还是目录,所以,我们需要通过state参数进行说明,当我们想要创建的/test/a/b是一个目录时,需要将state的值设置为directory,directory为目录之意,当它与path结合,ansible就能知道我们要操作的目标是一个目录,同理,当我们想要操作的/test/a/b是一个文件时,则需要将state的值设置为touch,当我们想要创建软链接文件时,需将state设置为link,想要创建硬链接文件时,需要将state设置为hard,当我们想要删除一个文件时(删除时不用区分目标是文件、目录、还是链接),则需要将state的值设置为absent,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.1path参数和state参数示例:

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

     [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/filetest state=touch" 

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

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/testdir state=directory"

      (3)在受控主机上创建“软链接文件”,“软链接文件名”为linkfile,其中copytest文件是已经存在的文件。

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/linkfile src=/test/copytest state=link"

      (4)在受控主机上创建“硬链接文件”,硬链接文件名为hardfile,其中copytest文件是已经存在的文件。

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/hardfile src=/test/copytest state=hard"

    2.2force参数示例:

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

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/hardfile src=/test/forcetest state=hard force=yes"

    2.3absent参数示例:

      使用absent参数删除远程主机上的指定文件或者目录。

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/hardfile state=absent"

    2.4owner参数示例:

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

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/aaa state=touch owner=wenhewen"  #创建文件时指定属主

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/bbb owner=wenhewen"   #修改远程主机上的文件的属主

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/testdir state=directory owner=wenhewen"   #创建时/修改远程主机上的目录的属主

    2.5group参数示例:

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

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/aaa state=touch group=wenhewen"  #创建文件时指定属组

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/bbb group=wenhewen"   #修改远程主机上的文件的属组

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/testdir state=directory group=wenhewen"   #创建时/修改远程主机上的目录的属组

    2.6mode参数示例:

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

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/ccc state=touch mode=0644"   #也可以用字符表示,u+rw,g-x,o+x

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/bbb mode=0644"

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/aaa mode=4700"

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/testdir state=directory mode=0644"

     2.7rescue参数示例:

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

    [root@ansible-control test]# ansible 192.168.10.3 -m file -a "path=/test/testdir state=directory owner=wenhewen group=wenhewen recurse=yes"

     

     3.blockinfile模块

      blockinfile模块可以帮助我们在指定的文件中插入一段文本,这段文本是被标记过的,换句话说就是,我们在这段文本上做了记号,以便在以后的操作中可以通过标记找到这段文本,然后修改或者删除它,单单这样描述不是特别容易理解,结合下面的小例子动手做做立马就能够明白了。

    参数解析:

    path:同上

    block:此参数用于指定我们想要操作的那一段文本,此参数有一个别名叫content,使用content或block的作用是相同的。

    marker:假如我们想要在指定文件中插入一段文本,ansible会自动为这段文本添加两个标记,一个开始标记,一个结束标记,默认情况下,开始标记为# BEGIN ANSIBLE MANAGED BLOCK,结束标记为# END ANSIBLE MANAGED BLOCK,我们可以使用marker参数自定义标记,比如,marker=#{mark}test ,这样设置以后,开始标记变成了# BEGIN test,结束标记变成了# END test,没错,{mark}会自动被替换成开始标记和结束标记中的BEGIN和END,我们也可以插入很多段文本,为不同的段落添加不同的标记,下次通过对应的标记即可找到对应的段落。
    state:它有两个可选值,present与absent,默认情况下,我们会将指定的一段文本插入到文件中,如果对应的文件中已经存在对应标记的文本,默认会更新对应段落,在执行插入操作或更新操作时,state的值为present,默认值就是present,如果对应的文件中已经存在对应标记的文本并且将state的值设置为absent,则表示从文件中删除对应标记的段落。

    insertafter:在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的后面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的后面,如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为EOF,表示将文本插入到文档末尾。
    insertbefore:在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的前面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的前面,如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为BOF,表示将文本插入到文档开头。
    backup:是否在修改文件之前对文件进行备份。
    create:当要操作的文件并不存在时,是否创建对应的文件。
    3.1block参数示例:

      在受控主机中将/etc/rc.d/rc.local文件复制到/test目录中,在ansible控制机中向该文本添加“systemctl start mariadb和systemctl start httpd”这两行内容。  

    [root@ansible-control test]# ansible 192.168.10.3 -m blockinfile -a 'path=/test/rc.local block="systemctl start mariadb systemctl start httpd"'

    以下就是blockinfile被标记的文本块,一个是开始标记,一个是结束标记。

    3.2marker参数示例:

      自定义文本块标记,{mark}自动替换成开始标记中的BEGIN和结束标记中的END 

    [root@ansible-control test]# ansible 192.168.10.3 -m blockinfile -a 'path=/test/rc.local block="systemctl start mariadb" marker="#{mark}service to start"'

    3.3删除文本块示例:

      (1)使用block=" "

    [root@ansible-control test]# ansible 192.168.10.3 -m blockinfile -a 'path=/test/rc.local block="" marker="#{mark}service to start"'

       (2)使用state=absent

     [root@ansible-control test]# ansible 192.168.10.3 -m blockinfile -a 'path=/test/rc.local  marker="#{mark}service to start" state=absent'

     3.4insertafter参数和insertbefore参数示例: 

      默认情况下,文本块插入在文件的尾部,我们也可以将文本块插入指定的位置,比如,插入在文件开头,或者根据正则表达式去匹配对应的行,然后将文本块插入到匹配到的行的前头或者后头,示例如下

      如果想要将文本块插入到文档的开头,可以使用insertbefore参数,将其值设置为BOF,BOF表示Begin Of File:

    [root@ansible-control test]# ansible 192.168.10.3 -m blockinfile -a 'path=/test/rc.local block="#####blockinfile test####" marker="#{mark}test for BOF" insertbefore=BOF'

      如果使用如下命令,表示将文本块插入到文档的结尾,与默认操作相同,将insertafter参数设置为EOF表示End Of File:

    [root@ansible-control test]# ansible 192.168.10.3 -m blockinfile -a 'path=/test/rc.local block="#####blockinfile test####" marker="#{mark}test for BOF" insertafter=EOF'

      将文本块添加在"#!/bin/bash"之后:如果要加在之前,只需要将insertafter改为insertbefore。

    [root@ansible-control test]# ansible 192.168.10.3 -m blockinfile -a 'path=/test/rc.local block="#####blockinfile test1####" marker="#{mark}test1" insertafter="#!/bin/bash"'

     3.5backup参数示例:

    [root@ansible-control test]# ansible 192.168.10.3 -m blockinfile -a 'path=/test/rc.local block="****testing*****" marker="#{mark}testing" backup=yes'

     

    3.6create参数示例:

      我们在进行文本块标记插入的操作中,如果指定的文件不存在,使用create=yes参数后,系统会自动新建(创建)该文件。

    [root@ansible-control test]# ansible 192.168.10.3 -m blockinfile -a 'path=/test/no_rc.local block="****testing*****" marker="#{mark}testing" create=yes'

    4.lineinfile模块

      我们可以借助lineinfile模块,确保某一行文本存在于指定的文件中,或者确保从文件中删除指定的文本(即确保指定的文本不存在于文件中),还可以根据正则表达式,替换某一行文本。

    参数解析:

    path:必须参数,指定要操作的文件。
    line: 使用此参数指定文本内容。
    regexp:使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。 
    state:当想要删除对应的文本时,需要将state参数的值设置为absent,absent为缺席之意,表示删除,state的默认值为present 
    backrefs:默认情况下,当根据正则替换文本时,即使regexp参数中的正则存在分组,在line参数中也不能对正则中的分组进行引用,除非将backrefs参数的值设置为yes,backrefs=yes表示开启后向引用,这样,line参数中就能对regexp参数中的分组进行后向引用了,这样说不太容易明白,参考下面的示例命令比较直观一点,backrefs=yes除了能够开启后向引用功能,还有另一个作用,默认情况下,当使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么line对应的内容会被插入到文本的末尾,不过,如果使用了backrefs=yes,情况就不一样了,当使用正则表达式替换对应行时,同时设置了backrefs=yes,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不变,如果没有理解,就按照下面的示例命令,动手操作一下吧,那样更加直观。
    insertafter:借助insertafter参数可以将文本插入到“指定的行”之后,insertafter参数的值可以设置为EOF或者正则表达式,EOF为End Of File之意,表示插入到文档的末尾,默认情况下insertafter的值为EOF,如果将insertafter的值设置为正则表达式,表示将文本插入到匹配到正则的行之后,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数会被忽略。
    insertbefore:借助insertbefore参数可以将文本插入到“指定的行”之前,insertbefore参数的值可以设置为BOF或者正则表达式,BOF为Begin Of File之意,表示插入到文档的开头,如果将insertbefore的值设置为正则表达式,表示将文本插入到匹配到正则的行之前,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数会被忽略。
    backup:是否在修改文件之前对文件进行备份。 
    create:当要操作的文件并不存在时,是否创建对应的文件。
     4.1line参数示例:

       确保指定的 一行文本存在于文件中,如果指定的文本本来就存在于文件中,则不做任何操作,如果不存在,默认在文件的末尾插入这行文本,如下命令表示确保aoteman这行文本存在于/test/linetest文件中。

    [root@ansible-control test]# ansible 192.168.10.3 -m lineinfile -a 'path=/test/linetest line="aoteman" '

     

    4.2regexp参数示例:

      如下命令表示根据正则表达式替换某一行,如果不止一行能够匹配正则,那么只有最后一个匹配正则的行才会被替换,被匹配行会被替换成line参数指定的内容,但是如果指定的表达式没有匹配到任何一行,那么line中的内容会被添加到文件的最后一行。

    [root@ansible-control test]# ansible 192.168.10.3 -m lineinfile -a 'path=/test/linetest regexp="^hello*" line="test text" '   #  ^hello*表示匹配以hello开头的行,如果匹配成功就用line里面的内容直接替换这一行的内容。如果匹配失败,就会将line里面的内容默认添加到文本最后一行。

    4.3backrefs参数示例:  

      如下命令表示根据正则表达式替换某一行,如果不止一行能够匹配正则,那么只有最后一个匹配正则的行才会被替换,被匹配行会被替换成line参数指定的内容,但是如果指定的表达式没有匹配到任何一行,那么则不对文件进行任何操作(不会默认添加到文本最后一行)。

    [root@ansible-control test]# ansible 192.168.10.3 -m lineinfile -a 'path=/test/linetest regexp="^hello*" line="test text 1" backrefs=yes'

     4.4state参数示例:

      (1)根据line参数的内容删除行,如果文件中有多行都与line参数的内容相同,那么这些相同的行都会被删除:

    [root@ansible-control test]# ansible 192.168.10.3 -m lineinfile -a 'path=/test/linetest line="apple" state=absent'   #这里是严格匹配,line=apple

      (2)根据正则表达式删除对应行,如果有多行都满足正则表达式,那么所有匹配的行都会被删除:

    [root@ansible-control test]# ansible 192.168.10.3 -m lineinfile -a 'path=/test/linetest regexp="^test" state=absent'

     【感谢大佬的知识:http://www.zsythink.net/archives/2542】

    5.find模块

      与find命令功能类似,方便我们在远程主机上查找符合条件的文件。

    参数解析:

     

    paths:必须参数,指定在哪个目录中查找文件,可以指定多个路径,路径间用逗号隔开,此参数有别名,使用别名path或者别名name可以代替paths。 
    recurse:默认情况下,只会在指定的目录中查找文件,也就是说,如果目录中还包含目录,ansible并不会递归的进入子目录查找对应文件,如果想要递归的查找文件,需要使用recurse参数,当recurse参数设置为yes时,表示在指定目录中递归的查找文件。
    hidden:默认情况下,隐藏文件会被忽略,当hidden参数的值设置为yes时,才会查找隐藏文件。 
    file_type:默认情况下,ansible只会根据条件查找文件,并不会查找目录或软链接等文件类型,如果想要指定查找的文件类型,可以通过file_type指定文件类型,可指定的文件类型有any、directory、file、link 四种。
    patterns:使用此参数指定需要查找的文件名称,支持使用shell(比如通配符)或者正则表达式去匹配文件名称,默认情况下,使用shell匹配对应的文件名,如果想要使用python的正则去匹配文件名,需要将use_regex参数的值设置为yes。 
    use_regex:默认情况下,find模块不会使用正则表达式去解析patterns参数中对应的内容,当use_regex设置为yes时,表示使用python正则解析patterns参数中的表达式,否则,使用glob通配符解析patterns参数中的表达式。
    contains:使用此参数可以根据文章内容查找文件,此参数的值为一个正则表达式,find模块会根据对应的正则表达式匹配文件内容。 
    age:使用此参数可以根据时间范围查找文件,默认以文件的mtime为准与指定的时间进行对比,比如,如果想要查找mtime在3天之前的文件,那么可以设置age=3d,如果想要查找mtime在3天以内的文件,可以设置age=-3d,这里所说的3天是按照当前时间往前推3天,可以使用的单位有秒(s)、分(m)、时(h)、天(d)、星期(w)。 
    age_stamp:文件的时间属性中有三个时间种类,atime、ctime、mtime,当我们根据时间范围查找文件时,可以指定以哪个时间种类为准,当根据时间查找文件时,默认以mtime为准。
    size:使用此参数可以根据文件大小查找文件,比如,如果想要查找大于3M的文件,那么可以设置size=3m,如果想要查找小于50k的文件,可以设置size=-50k,可以使用的单位有t、g、m、k、b。
    get_checksum:当有符合查找条件的文件被找到时,会同时返回对应文件的sha1校验码,如果要查找的文件比较大,那么生成校验码的时间会比较长。

    5.1contains参数示例:

      在受控主机的/test目录中查找文件内容中包含local字符串的文件,隐藏文件会被忽略,不会进行递归查找。

     

    [root@ansible-control test]# ansible 192.168.10.3 -m find -a 'paths=/test contains=".*local.*" '

     

    5.2recurse参数示例:

      在受控主机的/test目录中查找文件内容中包含local字符串的文件,隐藏文件会被忽略,进行递归查找。

    [root@ansible-control test]# ansible 192.168.10.3 -m find -a 'paths=/test contains=".*local.*" recurse=yes'

    5.3hidden参数和patterns参数示例:

      在受控主机的/test目录中查找以.sh结尾的文件,包括隐藏文件,但是不包括目录或其他文件类型,不会进行递归查找。

    [root@ansible-control test]# ansible 192.168.10.3 -m find -a 'paths=/test patterns="*.sh" hidden=yes '

     

    5.4file_type参数示例:

      在受控主机的/test目录中查找以.sh结尾的文件,包括隐藏文件,包括所有文件类型,比如文件、目录、或者软链接,但是不会进行递归查找。

    [root@ansible-control test]# ansible 192.168.10.3 -m find -a 'paths=/test patterns="*.sh" file_type=any hidden=yes '

    5.5age参数示例:

      (1)在受控主机的/test目录中以及其子目录中查找mtime在4天以内的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。

    [root@ansible-control test]# ansible 192.168.10.3 -m find -a "paths=/test  age=-4d recurse=yes "

      (2)在受控主机的/test目录中以及其子目录中查找atime在2星期以内的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。

    [root@ansible-control test]# ansible 192.168.10.3 -m find -a "paths=/test age=-2w age_stamp=atime recurse=yes "

    5.6size参数示例:

      在受控主机的/test目录中以及其子目录中查找大于2G的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。

    [root@ansible-control test]#ansible 192.168.10.3 -m find -a "paths=/test size=2g recurse=yes"

    5.7get_checksum参数示例:

      在受控主机的/test目录中以及其子目录中查找以.sh结尾的文件,并且返回符合条件文件的sha1校验码,包括隐藏文件。

    [root@ansible-control test]#ansible 192.168.10.3 -m find -a "paths=/test patterns=*.sh get_checksum=yes  hidden=yes recurse=yes"

    6.replace模块 

      replace模块可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被正则匹配到的字符串都会被替换。

    参数解析:

    path:必须参数,指定要操作的文件,2.3版本之前,只能使用dest, destfile, name指定要操作的文件,2.4版本中,仍然可以使用这些参数名,这些参数名作为path参数的别名使用。
    regexp:必须参数,指定一个python正则表达式,文件中与正则匹配的字符串将会被替换。
    replace:指定最终要替换成的字符串。
    backup:是否在修改文件之前对文件进行备份,最好设置为yes。
      (1)把受控主机中的/test/replacetest文件中的所有ASM替换成asm。

    [root@ansible-control test]# ansible 192.168.10.3 -m replace -a 'path=/test/replacetest regexp="ASM" replace=asm'

      (2)把受控主机中的/test/replacetest文件中的所有ASM替换成asm,但是在替换前先进行备份。

    [root@ansible-control test]# ansible 192.168.10.3 -m replace -a 'path=/test/replacetest regexp="asm" replace=ASM backup=yes'

    【感谢大佬知识:http://www.zsythink.net/archives/2560】

      

     

  • 相关阅读:
    软工第1次阅读作业
    软工第0次作业
    第四次博客
    第三次博客
    第二次
    第一次博客
    提问回顾与个人总结
    软件工程结对作业
    软件工程第一次阅读作业
    软件工程第0次个人作业
  • 原文地址:https://www.cnblogs.com/python-wen/p/11243461.html
Copyright © 2020-2023  润新知