该模块用于从一个文件中搜索一行,确保该行存在或删除该行。lineinfile
模块主要用于改变一个文件的一行。如果想要改变文件中相似的多行,可以使用replace
模块。如果想要插入/更新/删除一个行块,可以使用blockinfile
模块。其他情形,可以使用copy
或template
模块。
backrefs
state=present
一起使用。如果打开这个标记,那么在line
参数中可以使用 位置分组 和 命名分组,lineinfile
模块会使用regexp
所捕获的分组填充它们。backrefs
会改变模块的一些操作:insertbefore
和insertafter
参数会被忽略。当regexp
不匹配文件中的任何行时,文件不会做任何修改,否则 使用扩展的line
参数 替换 最后一个匹配正则表达式的行。backup
create
state=present
一起使用。如果指定了这个参数,当要修改的文件不存在的时候,会创建它。否则会报错。dest
insertbefore
backrefs=yes
一起使用。当regexp
不匹配文件中的任何行的时候,会将line
参数所指定的行,插入到insertbefore
所指定的正则表达式匹配的行中的最后一行的前面,当insertbefore
所指定的正则表达式不匹配任何行时,会插入到文件的末尾,同时insertbefore
还可以是一个特殊的值:BOF(代表文件的开始);否则,会使用line
参数所指定的行 替换 regexp
所匹配的行中的最后一行。insertafter
insertbefore
类似,不同的是,insertbefore
会将新行插入到其所指定的正则表达式匹配的行中的最后一行的前面,而insertafter
是插入到后面。insertafter
也支持一个特殊的值:EOF
(代表文件的末尾)line
backrefs
参数,那么line
中可以包含 位置分组 或 命名分组,lineinfile
模块会使用regexp
捕获的分组填充它们。mode
mode=0644
或 mode='a+x'
。owner
和 group
-b
提权)regexp
state=present
,这个正则表达式所匹配的行中的最后一行会被替换;对于state=present
,会删除所有匹配的行。
state
validate
%s
来传递的,并且在validate
中必须包含%s
。在校验命令中,不能使用shell的一些特性,比如扩展,管道等。
下面是来自于官方文档的例子:
# 将 /etc/selinux/config 文件中所有匹配 ^SELINUX= 正则表达式的行中的最后一行使用 SELINUX=enforcing 替换;如果regexp不匹配文件中的任何一行,则将line所指定的行插入到文件的末尾 - lineinfile: dest=/etc/selinux/config regexp=^SELINUX= line=SELINUX=enforcing # 将 /etc/sudoers 文件中,所有匹配 ^%wheel 的行删除 - lineinfile: dest=/etc/sudoers state=absent regexp="^%wheel" # 将 /etc/hosts 文件中,所有匹配 ^127\.0\.0\.1 正则表达式的行中的最后一行,替换成 127.0.0.1 localhost,当 ^127\.0\.0\.1 不匹配文件中的任何一行的时候,则将line所指定的行插入到文件的末尾。并将文件的属主设置成root,属组设置成root,将文件的权限设置为0644。 - lineinfile: dest=/etc/hosts regexp='^127\.0\.0\.1' line='127.0.0.1 localhost' owner=root group=root mode=0644 - lineinfile: dest=/etc/httpd/conf/httpd.conf regexp="^Listen " insertafter="^#Listen " line="Listen 8080" - lineinfile: dest=/etc/services regexp="^# port for http" insertbefore="^www.*80/tcp" line="# port for http by default" # Add a line to a file if it does not exist, without passing regexp - lineinfile: dest=/tmp/testfile line="192.168.1.99 foo.lab.net foo" # Fully quoted because of the ': ' on the line. See the Gotchas in the YAML docs. - lineinfile: "dest=/etc/sudoers state=present regexp='^%wheel' line='%wheel ALL=(ALL) NOPASSWD: ALL'" - lineinfile: dest=/opt/jboss-as/bin/standalone.conf regexp='^(.*)Xms(\d+)m(.*)$' line='\1Xms${xms}m\3' backrefs=yes # Validate the sudoers file before saving - lineinfile: dest=/etc/sudoers state=present regexp='^%ADMIN ALL\=' line='%ADMIN ALL=(ALL) NOPASSWD:ALL' validate='visudo -cf %s'
ansible 2.2.1.0
下测试的