一、Ansibel常用文件模块使用详解

1、file模块

1️⃣:file模块常用的参数列表:

  • path       被管理文件的路径
  • state状态常用参数:
    • absent           删除目标文件
    • touch             如果目标文件不存在,则创建文件;如果存在,则更改目标文件的时间戳
    • directory        创建目录
    • hard               给目标文件创建硬链接(与src一起使用)
    • link                 给目标文件创建软链接(与src一起使用)
  • setype      设置目标文件安全上下文属性
  • owner       设备目标文件的所属主
  • group        设置目标文件的所属组
  • mode         设置文件的权限
    • mode常用的格式:文件:0644    目录:0755   

      • 或者用引号:文件:'0644'    目录:'0755'
      • 也开始指定符号模式:mode: u+rwx    或者  mode: u=r,g=w,o=x   或者:mode: u+r,g+w,o+x
  • src      指定链接文件的路径

2️⃣:演示实例

  • 实例一:使用file模块创建一个文件,文件名file

    [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: create file
    file:
    path: /opt/file
    state: touch
    owner: root
    group: root
    mode: 0644 [root@localhost ~]# ansible all -a 'ls -l /opt'
    client.example.com | CHANGED | rc=0 >>
    total 0
    -rw-r--r--. 1 root root 0 Sep 9 09:56 file
  • 实例二:使用file模块创建一个目录,目录名为dir

    [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: create dir
    file:
    path: /opt/dir
    state: directory
    mode: 0755 [root@localhost ~]# ansible all -a 'ls /opt'
    client.example.com | CHANGED | rc=0 >>
    dir
    [root@localhost ~]# ansible all -a 'ls -l /opt'
    client.example.com | CHANGED | rc=0 >>
    total 0
    drwxr-xr-x. 2 root root 6 Sep 9 09:59 dir
  • 实例三:使用file模块删除刚刚创建的file文件和dir目录

    [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: delete file
    file:
    path: /opt/file
    state: absent - name: delete dir
    file:
    path: /opt/dir
    state: absent [root@localhost ~]# ansible all -a 'ls /opt'
    client.example.com | CHANGED | rc=0 >>
  • 实例四:使用file模块设置file文件的安全上下文,设置类型为:httpd_sys_content_t

    [root@localhost ~]# ansible all -a 'ls -Z /opt/'
    client.example.com | CHANGED | rc=0 >>
    unconfined_u:object_r:usr_t:s0 file [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: set httpd_sys_content_t
    file:
    path: /opt/file
    setype: httpd_sys_content_t [root@localhost ~]# ansible all -a 'ls -Z /opt/'
    client.example.com | CHANGED | rc=0 >>
    unconfined_u:object_r:httpd_sys_content_t:s0 file
  • 注意:使用此方法与使用chcon命令类似,只是临时的更改了文件的安全上下文属性,使用restorecon恢复文件安全上下文环境(restorecon -Rv
  • chcon语法详细使用方法:访问:https://man.linuxde.net/chcon

2、fetch模块

1️⃣:fetch模块常用的参数列表:

  • src        指定目标主机上的文件的路径(必须是文件,不能是目录)
  • dest       指定所索取的文件所要保存的目录

2️⃣:演示实例:

  • 实例:将目标主机上的文件索取到本地

    [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: fetch /opt/file
    fetch:
    src: /opt/file
    dest: /opt [root@localhost ~]# ls /opt/
    client.example.com
    [root@localhost ~]# ls /opt/client.example.com/opt/
    file

3️⃣:说明:使用fetch模块后,索取到本地目录下的文件会自动生成与目标主机的域名或IP地址的目录存放索取的文件

3、lineinfile模块

1️⃣:lineinfile常用的参数列表:

  • path      要修改的目标主机上的文件路径
  • line       要在目标文件中插入或替换的行(必须与state一起使用)
  • state参数常用的选项:
    • present           设置为present,如果目标文件中没有匹配的行,则添加该行;如果没有则略过
    • ansent            设置为absent,如果目标文件中没有匹配的行,则略过;如果有,则删除该行
  • create参数常用的选项:(可与state: present一起使用)
    • yes         设置为yes,如果目标文件不存在,则创建该文件,如果匹配了对应的行,则一并写入该文件
    • no           设置为no,则不创建该文件

2️⃣:演示实例:

  • 实例一:匹配目标文件中没有的行

    [root@localhost ~]# ansible all -a 'cat /opt/file'
    client.example.com | CHANGED | rc=0 >> [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: lineinfile
    lineinfile:
    path: /opt/file
    line: 'aaaaaaaaa'
    state: present [root@localhost ~]# ansible all -a 'cat /opt/file'
    client.example.com | CHANGED | rc=0 >>
    aaaaaaaaa
  • 实例二:匹配目标文件中存在的行

    [root@localhost ~]# ansible all -a 'cat /opt/file'
    client.example.com | CHANGED | rc=0 >>
    aaaaaaaaa [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: lineinfile
    lineinfile:
    path: /opt/file
    line: 'aaaaaaaaa'
    state: absent [root@localhost ~]# ansible all -a 'cat /opt/file'
    client.example.com | CHANGED | rc=0 >> 
  • 实例三:使用create参数创建不存在的文件

    [root@localhost ~]# ansible all -a 'ls /opt'
    client.example.com | CHANGED | rc=0 >> [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: lineinfile
    lineinfile:
    path: /opt/test
    line: 'aaaaaaaaa'
    owner: root
    group: root
    mode: 0644
    create: yes [root@localhost ~]# ansible all -a 'ls /opt'
    client.example.com | CHANGED | rc=0 >>
    test
    [root@localhost ~]# ansible all -a 'ls -l /opt'
    client.example.com | CHANGED | rc=0 >>
    total 4
    -rw-r--r--. 1 root root 10 Sep 9 11:00 test

4、blockinfile模块

1️⃣:blockinfile常用参数列表:

  • path           要修改目标主机上的文件路径
  • block         要插入目标文件的文本(文本块、字符串);在block后面必须接管道符“|”
  • state参数常用的选项:
    • present            设置为present,如果目标文件中没有匹配的文本,则添加该文本;如果存在,则略过
    • absent             设置为absent,如果目标目标文件中没有匹配的文本,则略过;如果存在,则删除
  • create参数常用的选项:
    • yes         设置yes,如果path指定的目标文件不存在,则创建该文件;如果指定的文本块,则一并写到该文件中
    • no           设置no,如果path指定的目标文件不存在,则不创建

2️⃣:演示实例:

  • 实例一:匹配不存在的文本

    [root@localhost ~]# ansible all -a 'cat /opt/file'
    client.example.com | CHANGED | rc=0 >> [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: blockinfile
    blockinfile:
    path: /opt/file
    state: present
    block: |
    aaaaaaaaa
    bbbbbbbbb
    ccccccccc [root@localhost ~]# ansible all -a 'cat /opt/file'
    client.example.com | CHANGED | rc=0 >>
    # BEGIN ANSIBLE MANAGED BLOCK
    aaaaaaaaa
    bbbbbbbbb
    ccccccccc
    # END ANSIBLE MANAGED BLOCK
  • 实例二:匹配已经存在的文件

    [root@localhost ~]# ansible all -a 'cat /opt/file'
    client.example.com | CHANGED | rc=0 >>
    # BEGIN ANSIBLE MANAGED BLOCK
    aaaaaaaaa
    bbbbbbbbb
    ccccccccc
    # END ANSIBLE MANAGED BLOCK [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: blockinfile
    blockinfile:
    path: /opt/file
    state: absent
    block: |
    aaaaaaaaa
    bbbbbbbbb
    ccccccccc [root@localhost ~]# ansible all -a 'cat /opt/file'
    client.example.com | CHANGED | rc=0 >>
  • 实例三:使用create参数创建不存在的文件

    [root@localhost ~]# ansible all -a 'ls /opt'
    client.example.com | CHANGED | rc=0 >> [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: blockinfile
    blockinfile:
    path: /opt/test
    create: yes
    owner: root
    group: root
    mode: 0644
    block: |
    aaaaaaaaa
    bbbbbbbbb
    ccccccccc [root@localhost ~]# ansible all -a 'ls /opt'
    client.example.com | CHANGED | rc=0 >>
    test
    [root@localhost ~]# ansible all -a 'ls -l /opt'
    client.example.com | CHANGED | rc=0 >>
    total 4
    -rw-r--r--. 1 root root 88 Sep 9 11:20 test
    [root@localhost ~]# ansible all -a 'cat /opt/test'
    client.example.com | CHANGED | rc=0 >>
    # BEGIN ANSIBLE MANAGED BLOCK
    aaaaaaaaa
    bbbbbbbbb
    ccccccccc
    # END ANSIBLE MANAGED BLOCK

5、sefcontext模块

1️⃣:使用sefcontext模块需要安装两个包:libselinux-pythonpolicycoreutils-python ;需要在控制节点和受管主机上都安装

2️⃣:在RHEL8上这两个包的包名分别是:python3-libselinuxpolicycoreutils-python-utils

3️⃣:注意:sefcontext模块更新SELinux策略中目标的默认上下文,但不更改现有文件的上下文(可以使用semanage -l 查看)

4️⃣:sefcontextxt常用参数:

  • target            目标文件或目录的路径
  • state参数常用选项:
    • present          设置present,则修改为指定的类型
    • absent            设置absnet ,则删除指定的类型
  • setype          指定目标Selinux类型

5️⃣:演示实例:

  • 首先安装python3-libselinuxpolicycoreutils-python-utils

    [root@client ~]# yum install -y python3-libselinux
    [root@client ~]# yum install -y policycoreutils-python-utils //在受管主机上安装semanage
    [root@localhost ~]# yum install -y policycoreutils-python-utils
  • 实例一:在/opt下创建share目录,修改默认的安全上下文环境
    //在受管主机的/opt下创建share目录
    [root@client ~]# mkdir /opt/share //在受管主机上查看share的安全上下文
    [root@client ~]# ls -Z /opt/
    unconfined_u:object_r:usr_t:s0 share //在受管主机上查看该share目录的默认Selinux安全上下文
    [root@client ~]# semanage fcontext -l | grep /opt/share/ //回车后并没有安全上下文,以为是我们手动创建的,不是系统默认的安全上下文 //使用playbook设施/opt/share的安全上下文
    [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: sefcontext
    sefcontext:
    path: /opt/share
    setype: httpd_sys_content_t
    state: present //执行play后,在受管主机上查看/opt/share的安全上下文
    [root@client ~]# semanage fcontext -l | grep /opt/share
    /opt/share all files system_u:object_r:httpd_sys_content_t:s0 //此时已经创建了默认的Selinu的安全上下文 //再次查看share的安全上下文
    [root@client ~]# ls -Z /opt/
    unconfined_u:object_r:usr_t:s0 share //发现share的安全上下文没有发生改变 //使用restorecon命令恢复share的安全上下文
    [root@client ~]# restorecon -Rv /opt/share/
    Relabeled /opt/share from unconfined_u:object_r:usr_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 //-R:递归恢复 -v:显示操作过程 //再次查看share的安全上下文
    [root@client ~]# ls -Z /opt/
    unconfined_u:object_r:httpd_sys_content_t:s0 share //此时share的安全上下文已经正常 //在share目录里面创建文件或目录,是否继承share的安全上下文属性
    [root@client ~]# mkdir /opt/share/dir
    [root@client ~]# touch /opt/share/file
    [root@client ~]# ll -Z /opt/share/
    total 0
    drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Sep 9 13:18 dir
    -rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 0 Sep 9 13:18 file
    //由此可见,在share里面创建的文件或目录都会继承share的安全上下文属性

      

  • 实例二:删除默认的安全上下文
    //在受管主机上查看share的Selinux默认安全上下文
    [root@client ~]# semanage fcontext -l | grep /opt/share
    /opt/share all files system_u:object_r:httpd_sys_content_t:s0 //使用playbook删除share的默认安全上下文
    [root@localhost ~]# cat playbook.yaml
    ---
    - hosts: all
    gather_facts: no
    tasks:
    - name: sefcontext
    sefcontext:
    path: /opt/share
    setype: httpd_sys_content_t
    state: absent //执行play后在受管主机上查看share的Selinux默认安全上下文
    [root@client ~]# semanage fcontext -l | grep /opt/share //回车后,什么也没有,说明已经删除了

Ansible_常用文件模块使用详解的更多相关文章

  1. Linux常用文件权限命令详解

    pwd pwd命令用于获取当前工作目录的绝对路径. 使用示例: pwd 效果如下图: cd cd命令用于切换工作目录. 使用示例: cd 万猫学社/ 效果如下图: 其中在路径表示时, 一个半角句号(. ...

  2. [转帖]Nginx rewrite模块深入浅出详解

    Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...

  3. Ansible_使用文件模块将修改文件复制到受管主机

    一.描述常用文件模块 1.常用文件模块 模块名称 模块说明 blockinfile 插入.更新或删除由可自定义标记线包围的多行文本块 copy 将文件从本地或远程计算机复制到受管主机上的某个位置.类似 ...

  4. C#文件后缀名详解

    C#文件后缀名详解 .sln:解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需的信息. .csproj:项目文件,创建应用程序所需的引用.数据连接.文件夹和文件的信息. .aspx:W ...

  5. opencart 模块开发详解

    opencart 模块开发详解 由 xiekanxiyang » 2013年 7月 11日 10:17 pm opencart 将页面分成若干模块, 每个模块可以有多个实例(可能这样说不是很恰当) 每 ...

  6. iOS回顾笔记(03) -- 自定义View的封装和xib文件的使用详解

    iOS回顾笔记(03) -- 自定义View的封装和xib文件的使用详解 iOS开发中,我们常常将一块View封装起来,以便于统一管理内部的子控件.如iOS回顾笔记(02)中的"书" ...

  7. VC++常用数据类型及其操作详解

    原文地址:http://blog.csdn.net/ithomer/article/details/5019367 VC++常用数据类型及其操作详解 一.VC常用数据类型列表 二.常用数据类型转化 2 ...

  8. JPEG文件编/解码详解

    JPEG文件编/解码详解(1) JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写.它由国际电话与电报咨询委员会CCITT(The Interna ...

  9. php中读取大文件实现方法详解

    php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...

随机推荐

  1. Class类文件结构--访问标志

    访问标志的位置:在常量池结束之后的两个字节(16位)表示访问标志access_flags. 访问标志的作用:用于标识类或者接口层次的访问信息:比如该Class是类还是接口,是否为public类型.是否 ...

  2. 面试官问PHP四大主流框架的优缺点,看这篇就够了!

    本篇文章我们来讲讲PHP四大框架的优缺点都有哪些,让你们在开发中更好的去选择使用哪款PHP框架去完成项目,废话不多说,我们一起来看看吧!! ThinkPHP ThinkPHP(FCS)是一个轻量级的中 ...

  3. CIE标准色度系统(下)

    四.色温与相关色温 根据绝对黑体光谱分布特性的普朗克定律,由普朗克公式可以计算出黑体对应于某一温度的光谱分布,并由此应用CIE标准色度系统可获得该温度下黑体发光的三刺激值和色品坐标,从而在色品图上得到 ...

  4. 批处理文件设置IP以及DNS

    先附上批处理文件代码(批处理文件怎么创建自己另行百度,这里不再赘述) Echo offecho ==============请输入序号修改办公区===========echo *********1.家 ...

  5. spring-cloud-stream消息驱动的微服务

    Spring Cloud Stream 是 一 个用来为微服务应用构建消息驱动能力的框架. 它可以基于Spring Boot 来创建独立的. 可用于生产的 Spring 应用程序. 它通过使用 Spr ...

  6. .NET HttpWebRequest(请求被中止: 未能创建 SSL/TLS 安全通道)和(基础连接已经关闭: 发送时发生错误)问题查找解决

    前言: 前段时间在对接第三方接口的时候发生了一个非常奇葩的问题,就是使用 .NET Framework 4.6 HttpWebRequest进行网络请求的相关问题.背景,关于调用第三方的接口都是使用使 ...

  7. 6.1vector用法

    目录 一.用法介绍 二.基本用法 三.PAT A1039 一.用法介绍 vector<typename>name; 按照这样的格式进行定义与书写. 注意定义成双数组的情况要加上空格. ve ...

  8. (数据科学学习手札117)Python+Dash快速web应用开发——交互表格篇(下)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  9. 8. Centos 7 图像化界面

    Step 1:安装"X Window System" yum groupinstall "X Window System" 当出现 Complete!说明这里安 ...

  10. (十五)VMware Harbor 标签管理

    1. Harbor提供两种标签用来隔离各种资源(目前只有镜像): 全局级别标签: 由系统管理员管理,用于管理整个系统的镜像.它们可以添加到任何项目下的镜像中. 项目级别标签: 由项目管理员或者系统管理 ...