Ansible基础6——文件模块、jinja2模板

文章目录

  • 一、常用文件模块
    • 1.1 blockinfile模块
    • 1.2 file模块
      • 1.2.1 创建文件并赋予权限
      • 1.2.2 创建目录并赋予权限
      • 1.2.3 创建软连接
      • 1.2.4 删除文件或目录
    • 1.3 fetch模块
    • 1.4 lineinfile模块
    • 1.5 stat模块
    • 1.6 synchronize模块
  • 二、jinja2模板
    • 2.1 构建jinja2模板
    • 2.2 管理jinja2模板
    • 2.3 控制结构
      • 2.3.1 for循环语句
        • 2.3.1.1 for循环+变量
        • 2.3.1.2 for循环+loop.index
        • 2.3.1.3 for循环+条件判断
        • 2.3.1.4 for循环+playbook变量组
        • 2.3.15 for循环+清单文件组
      • 2.3.2 if判断语句
    • 2.4 变量过滤器

一、常用文件模块

模块名称释义
blockinfile插入、更新或删除由可自定义标记线包围的多行文本块
copy将文件从本地或远程计算机复制到受管主机上的某个位置。类似于file模块,copy模块还可以设置文件属性,包括SELinux上下文件。
fetch此模块的作用和copy模块类似,但以相反方式工作。此模块用于从远程计算机获取文件到控制节点,并将它们存储在按主机名组织的文件树中。
file设置权限、所有权、SELinux上下文以及常规文件、符号链接、硬链接和目录的时间戳等属性。此模块还可以创建删除常规文件、符号链接、硬链接和目录。其他多个与文件相关的模块支持与file模块相同的属性设置选项,包括copy模块。
lineinfile确保特定行位于某文件中,或使用反向引用正则表达式来替换现有行。此模块主要在用户想要更改文件的某一行时使用。
stat检索文件的状态信息,类似于Linux中的stat命令。
synchronize围绕rsync命令的一个打包程序,可加快和简化常见任务。synchronize模块无法提供对rsync命令的完整功能的访问权限,但确实最常见的调用更容易实施。用户可能仍需通过run command模块直接调用rsync命令。

1.1 blockinfile模块

  • 模块连接
  • 可以判断受控机上的文件内容,前提是受控机上有这个文件。

1.判断受控机上的文件里是否存在某行内容。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 判断文件内容是否存在
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断文件内容是否存在
      blockinfile:
        path: /opt/qingjun
        block: |
          Are you  like study            ##判断受控机上的/opt/qingjun文件是否存在此行内容,不存在则添加此行。

在这里插入图片描述
2.更新ansible追加进去的文本内容。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 判断文件内容是否存在
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断文件内容是否存在
      blockinfile:
        path: /opt/qingjun
        block: |
          大好河山     ##将之前添加进去的内容换成此行,代表之前添加内容会被删除,再在文件里添加此行。

在这里插入图片描述
3.追加新文件内容。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 判断文件内容是否存在
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断文件内容是否存在
      blockinfile:
        path: /opt/qingjun
        block: |
          大好河山
          华夏九州     ##追加此行内容。

在这里插入图片描述

1.2 file模块

  • 模块连接
  • 功能较多,常用模块,可以创建文件,创建目录,创建软连接,并能添加属主属组和相关权限。

1.2.1 创建文件并赋予权限

1.创建文件,属主属组为qingjun,并添加权限。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/qingjun.txt
        owner: qingjun
        group: qingjun
        mode: '644'
        state: touch

在这里插入图片描述
2.使用符号指定权限创建文件。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/qingjun.txt
        owner: qingjun
        group: qingjun
        mode: u-w,o+w,a+w
        state: touch

在这里插入图片描述

1.2.2 创建目录并赋予权限

1.创建目录,不指定权限就赋予默认权限。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/baimu
        owner: qingjun
        group: qingjun
        state: directory

在这里插入图片描述
2.指定目录权限创建。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/baimu
        owner: qingjun
        group: qingjun
        mode: '0777'       ##指定目录权限创建。
        state: directory

在这里插入图片描述

1.2.3 创建软连接

1.对文件软连接。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        src: /opt/qingjun.txt     ##源文件。
        dest: /opt/baimu/link_qingjun.txt      ##目的地址,自定义连接连接名。
        owner: qingjun
        group: qingjun
        state: link

在这里插入图片描述
2.对目录软连接。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        src: /opt/baimu            ##源目录。
        dest: /tmp/link_baimu       ##目标地址,自定义连接目录名称,进入连接目录相当于进入源目录。
        owner: qingjun
        group: qingjun
        state: link

在这里插入图片描述

1.2.4 删除文件或目录

1.删除文件。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/qingjun.txt     ##删除/opt/qingjun.txt文件。
        state: absent

在这里插入图片描述
2.删除目录。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/baimu          ##删除/opt/baimu目录。
        state: absent

在这里插入图片描述

1.3 fetch模块

  • 模块连接
  • 使用fetch模块从受控机上索取文件到本地。

1.将受控机上家目录下的文件传到主控机本地目录。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      fetch:
        src: /root/anaconda-ks.cfg
        dest: /opt

在这里插入图片描述

1.4 lineinfile模块

  • 模块连接
  • lineinfile模块可以确保某一行是否存在文件里,若存在则返回ok,若不存在则文件末尾追加。

1.判断受控机上的/opt/qingjun文件里否存在“baimu"这一行。若存在,则返回ok;若不存在,则在文件末行追加。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      lineinfile:
        path: /opt/qingjun
        line: baimu
        state: present

在这里插入图片描述

1.5 stat模块

  • 模块连接
  • 可以查看受管主机的文件状态。

1.查看受控机/opt/qingjun文件状态。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      stat:
        path: /opt/qingjun
        checksum_algorithm: md5
      register: qingjun
    - debug:
        var: qingjun

在这里插入图片描述
2.获取文件的md5值,若值发生改变,则说明文件内容已被更改过。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      stat:
        path: /opt/qingjun
        checksum_algorithm: md5
      register: qingjun
    - debug: 
        msg: "该文件当前md5值为:{{ qingjun.stat.checksum }}"   ##指定msg参数自定义打印信息。

在这里插入图片描述

1.6 synchronize模块

  • 模块连接
  • synchronize模块需要提前安装rsync工具,主控机和受控机都要安装

1.把主控机上的目录一次性同步到所有受控机。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 主控机安装服务
  hosts: localhost
  gather_facts: no
  tasks:
    - name: 安装rsync服务
      yum:
        name: rsync
        state: present

- name: 受控机安装服务
  hosts: all
  gather_facts: no
  tasks:
    - name: 安装rsync服务
      yum:
        name: rsync
        state: present
    - name: 目录同步
      synchronize:
       src: /etc/ansible/playbook
       dest: /opt/

2.查看受控机同步过来的目录。
在这里插入图片描述

二、jinja2模板

  • jinja2模板常用于将主控机带有变量的模板文件传到受控机时,会将变量改为具体的值。
  • 自定义的jinja2模板的变量,也会在playbook中引用。

2.1 构建jinja2模板

定义格式:

  • {% EXPR %}:用于事实表达式或脚本逻辑。
  • {{ EXPR }}:用于向最终用户输出表达式或变量的结果。
  • {# COMMENT #}:不会在最终文件里出现,是jinja2文件本身的注释。

注意事项:

  1. 必须使用template模块,因为它可以修改变量值。
  2. 在jinja2模板文件里使用for语句和if语句,playbook中使用loop语句和when语句。

1.主控机定义模板文件,模板文件里面可以取事实,可以取变量。取的事实值,将会再传到受控机上时把对应的事实值改为受控机本机的信息。可以先使用setup模块查看收集的事实。

[root@localhost playbook]# cat file/hosts.j2 
{# redis配置文件模板 #}
hostname: {{ ansible_facts.hostname }}
redis_ip: {{ ansible_facts.default_ipv4.address }}

2.编写playbook,将本地的file/hosts模板文件传到受控机的/etc/hosts文件。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all,localhost
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /etc/hosts

3.执行playbook,受控机验证。
在这里插入图片描述

2.2 管理jinja2模板

  • 加文件提示,让管理员在操作受控机上的配置文件时,知道这个文件时ansible生成的,不能擅自修改。

1.修改ansible配置文件ansible_managed参数,自定义文件输出提示内容,最后就会在受控机上生成的配置文件里添加这行注释。
在这里插入图片描述
2.修改jinja2模板。
在这里插入图片描述
3.编写playbook。
在这里插入图片描述

2.3 控制结构

  • 用户可以在模板文件中使用jinja2控制结构,以减少重复输入,为play中的每个主机动态输入条目,或者有条件地将文本插入到文件中。

2.3.1 for循环语句

  • 使用{% 自定义逻辑 %}表示执行逻辑。
  • {{ 变量 }} 表示取的变量值将会输出到受控机文件内。

2.3.1.1 for循环+变量

1.jinja2模板定义逻辑,使用for循环变量users里的值,变量user作为输出内容。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# 循环语句 #}
{% for user in users %}      ##for表示开始。
{{ user }}
{% endfor %}      ##endfor表示结束。

2.playbook定义users变量循环体。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all
  vars:
    users:        ##将对users变量下的内容进行循环。
      - zhangsan
      - lisi
      - wangwu
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /opt/qingjun

3.执行playbook,查看受控机上输出的文件,文件里的内容正是playbook里的users变量下的内容,如何循环使用jinja2模板定义。
在这里插入图片描述

2.3.1.2 for循环+loop.index

1.配合loop.index使用,取当前循环索引。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# 循环语句 #}
{% for user in users %}
{{ loop.index }}
{% endfor %} 

在这里插入图片描述

2.3.1.3 for循环+条件判断

  • 对playbook中的变量进行循环,取出不是qingjun的内容,将其输出到受控机的/opt/qingjun文件里。

1.playbook定义变量循环体。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all
  vars:
    users:
      - zhangsan
      - lisi
      - wangwu
      - qingjun
      - shito
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /opt/qingjun

2.jinja2模板定义循环逻辑。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# 循环语句 #}
{% for user in users if not user == "qingjun" %}
number user:{{ loop.index }} ,{{ user }}
{% endfor %} 

3.执行playbook,查看受控机文件内容。
在这里插入图片描述

2.3.1.4 for循环+playbook变量组

  • 在playbook中定义变量组,编写jinja2模板文件时可以根据变量组名称应用取其中的值。

1.playbook中定义变量循环体,同时定义两个组,qingjun组和baimu组。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all
  vars:
    group:
      qingjun:
        - zhangsan
        - lisi
        - wangwu
      baimu:
        - skasdk
        - shito
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /opt/qingjun

2.定义jinja2模板文件,对playbook里的qingjun组里的内容进行循环。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# 循环语句 #}
{% for name  in group['qingjun'] %}           ##playbook中的变量组group,其中有个qingjun组。
number user:{{ loop.index }} ,{{ name }}
{% endfor %} 

3.执行playbook,受控机查看文件内容。
在这里插入图片描述

2.3.15 for循环+清单文件组

  • jinja2模板文件中使用groups引用清单文件中的组,根据组名取其中的值,不会取变量值,所以只会取出主机ip。

1.清单文件里由两个组,mq和qq。可以根据主机组名称来取值。
在这里插入图片描述
2.编写playbook,虽然仍然存在变量组,但在后面的jinja2模板文件里不再引用。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all
  vars:
    group:
      qingjun:
        - zhangsan
        - lisi
        - wangwu
      baimu:
        - skasdk
        - shito
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /opt/qingjun

3.定义jinja2模板文件,对清单文件里的mq组内容进行循环。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# 循环语句 #}
{% for name  in groups['mq'] %}           ##清单文件中的组mq。
number user:{{ loop.index }} ,{{ name }}
{% endfor %} 

4.执行playbook,受控机查看文件内容。
在这里插入图片描述

2.3.2 if判断语句

  • if语句与前面的when语句作用相同,当满足条件时则输出内容;不满足条件时,则不输出内容。

1.定义jinja2模板文件,自定义判断条件。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# if判断语句 #}
{% if 1 >2   %}     ##自定义判断条件,当为true时,则输出内容到文件里;当为false时,则不做输出。
number user:{{ ansible_facts['default_ipv4']['address']  }}
{% endif %} 

2.编写playbook,把jinja2文件内容传输到受控机的/opt/qingjun文件里。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /opt/qingjun

3.执行playbook,受控机查看文件内容。
在这里插入图片描述
4.此时改变jinja2中的判断规则,条件为true时,则将内容输出到受控机。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# if判断语句 #}
{% if 1 < 2   %}       ##条件为真,输出内容到受控机。
number user:{{ ansible_facts['default_ipv4']['address']  }}
{% endif %} 

在这里插入图片描述

2.4 变量过滤器

  • 变量过滤器也是编写jinja2模板文件,在里面写一些可以优化输出内容格式的参数语句,方便客户阅读。
  • 格式:{{ 变量 | to_json }}

1.输出内容为普通json格式,参数to_json。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# if判断语句 #}
{% if 1 < 2   %}
{{ ansible_facts['default_ipv4'] | to_json   }}
{% endif %} 

在这里插入图片描述
2.输出为方便阅读的json格式,参数to_nice_json。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# if判断语句 #}
{% if 1 < 2   %}
{{ ansible_facts['default_ipv4'] | to_nice_json }}
{% endif %} 

在这里插入图片描述
3.输出为yaml格式,参数to_yaml和to_nice_yaml。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# if判断语句 #}
{% if 1 < 2   %}
{{ ansible_facts['default_ipv4'] | to_nice_yaml }}
{% endif %} 

在这里插入图片描述
4.限制注入变量格式,只能是字符串型,参数from_json和from_yaml。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/25489.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MAYLAND HOME官网上线 | LTD家居家装行业案例分享

​一、公司介绍 在MAYLAND HOME&#xff0c;我们为我们对质量和服务的承诺感到自豪。我们相信我们的成功与客户的满意度直接相关&#xff0c;这就是为什么我们努力超越您的期望&#xff0c;我们承担的每一个项目。无论您是想升级您的家庭还是企业&#xff0c;我们都会在这里帮助…

冈萨雷斯DIP第5章知识点

图像增强&#xff1a;主要是一种 主观处理&#xff0c;而图像复原很大程度上是一种 客观处理。 5.1 图像退化/复原处理的一个模型 如图5.1 本章把图像退化建模为一个算子 H \mathcal{H} H 该算子 与一个加性噪声项 η ( x , y ) η(x,y) η(x,y) 共同对输入图像 f ( x , y…

MKS SERVO4257D 闭环步进电机_系列2 菜单说明

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口&#xff0c;支持MODBUS-RTU通讯协议&#xff0c;内置高效FOC矢量算法&#xff0c;采用高精度编码器&#xff0c;通过位置反馈&am…

开源情报搜集系统的核心技术

随着科技快速发展&#xff0c;科研方向的开源情报搜集系统的应用越来越广泛。为了满足科研工作者的需求&#xff0c;开发人员大力研发了许多功能强大的科研开源情报系统。这些系统不仅可以帮助科研人员更加高效地获取、管理和利用科研信息资源&#xff0c;还能为他们提供全方位…

原来CSS的登录界面可以变得这么好看

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页&#xff1a;几何小超 &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目…

Sequelize:Node.js 中的强大 ORM 框架

❤️砥砺前行&#xff0c;不负余光&#xff0c;永远在路上❤️ 目录 前言优势&#xff1a;提高效率&#xff0c;不用SQL即可完成数据库操作。 那什么是 Sequelize&#xff1f;主要特性&#xff1a;1、模型定义和映射&#xff1a;2、关联和联接&#xff1a;3、事务管理&#xff…

【网络协议详解】——DNS系统协议(学习笔记)

目录 &#x1f552; 1. DNS的作用&#x1f552; 2. 域名结构&#x1f552; 3. 域名分类&#x1f552; 4. 域名空间&#x1f552; 5. 域名服务器类型&#x1f558; 5.1 根域名服务器&#x1f558; 5.2 顶级域名服务器&#x1f558; 5.3 权限域名服务器&#x1f558; 5.4 本地域名…

英睿达内存条正品鉴别教程(镁光颗粒)

我们打算买一款二手镁光颗粒的英睿达内存条,需要从正面内存标签上的条形码、字串,从背面颗粒上的两行字符一一分析、检查、鉴别,最终确认是否正品,以及内存条等级如何。通过本片文章,您能学会如何进行镁光颗粒的英睿达内存条正品鉴别。 一、标签检查 首先,用百度条形码…

[数据集][目标检测]目标检测数据集大白菜数据集VOC格式1557张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1557 标注数量(xml文件个数)&#xff1a;1557 标注类别数&#xff1a;1 标注类别名称:["cabbage"] 每…

mysql查询语句执行过程及运行原理命令

Mysql查询语句执行原理 数据库查询语句如何执行&#xff1f; DML语句首先进行语法分析&#xff0c;对使用sql表示的查询进行语法分析&#xff0c;生成查询语法分析树。语义检查&#xff1a;检查sql中所涉及的对象以及是否在数据库中存在&#xff0c;用户是否具有操作权限等视…

Spring Boot 数据库操作Druid和HikariDataSource

目录 Spring Boot 数据库操作 应用实例-需求 创建测试数据库和表 进行数据库开发&#xff0c; 在pom.xml 引入data-jdbc starter 参考官方文档 需要在pom.xml 指定导入数据库驱动 在application.yml 配置操作数据源的信息 创建bean\Furn.java 测试结果 整合Druid 到…

编码,Part 1:ASCII、汉字及 Unicode 标准

个人博客 编码的历史由来就懒得介绍了&#xff0c;只需要知道人类处理文本信息是以字符为基本单位&#xff0c;而计算机在最底层只认识 0/1&#xff0c;所以当计算机要为人类存储/呈现字符时&#xff0c;就需要有一个规则&#xff0c;在字符和 0/1 序列之间建立映射关系&#…

Java经典笔试题—day14

Java经典笔试题—day14 &#x1f50e;选择题&#x1f50e;编程题&#x1f36d;计算日期到天数转换&#x1f36d;幸运的袋子 &#x1f50e;结尾 &#x1f50e;选择题 (1)定义学生、教师和课程的关系模式 S (S#,Sn,Sd,Dc,SA &#xff09;&#xff08;其属性分别为学号、姓名、所…

网络通信IO模型上

计算机组成 计算机由软件和硬件组成&#xff0c;软件包括CPU、内存等&#xff0c;硬件包括主板&#xff0c;磁盘&#xff0c;IO设备&#xff08;网卡、鼠标、键盘等&#xff09;、电源按钮。 内核程序加载过程 当接通电源的时候1、BIOS就会把它的一段代码放入了内存当中&#…

压缩感知重构算法之正交匹配追踪算法(OMP)

算法的重构是压缩感知中重要的一步&#xff0c;是压缩感知的关键之处。因为重构算法关系着信号能否精确重建&#xff0c;国内外的研究学者致力于压缩感知的信号重建&#xff0c;并且取得了很大的进展&#xff0c;提出了很多的重构算法&#xff0c;每种算法都各有自己的优缺点&a…

C语言---初识指针

1、指针是什么 指针是什么&#xff1f; 指针理解的2个要点&#xff1a; ​ 1、指针是内存中一个最小单元的编号&#xff0c;也就是地址。 ​ 2、平时口语中说的指针&#xff0c;通常指的是指针变量&#xff0c;是用来存放内存地址的变量 总结&#xff1a;指针就是地址&#xff…

Kali-linux Arpspoof工具

Arpspoof是一个非常好的ARP欺骗的源代码程序。它的运行不会影响整个网络的通信&#xff0c;该工具通过替换传输中的数据从而达到对目标的欺骗。本节将介绍Arpspoof工具的 使用。 9.8.1 URL流量操纵攻击 URL流量操作非常类似于中间人攻击&#xff0c;通过目标主机将路由流量注…

Sentinel的另外三种流控模式(附代码详细介绍)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将详细介绍Sentinel的其他三种流控模式&#xff0c;后续文章将详细介绍Sentinel的其他知识。 如果文章有什么需要改进的地方还请大佬不吝赐教&#x1f44f;&#…

vue面试题汇总

HTML篇CSS篇JS篇TypeScript篇前端面试题汇总大全&#xff08;含答案超详细&#xff0c;HTML,JS,CSS汇总篇&#xff09;-- 持续更新前端面试题汇总大全二&#xff08;含答案超详细&#xff0c;Vue&#xff0c;TypeScript&#xff0c;React&#xff0c;Webpack 汇总篇&#xff09…

04_Cenos安装Docker

docker安装文档&#xff1a; ubuntu&#xff1a;https://docs.docker.com/engine/install/ubuntu/ centos&#xff1a;https://docs.docker.com/engine/install/centos/ debian&#xff1a;https://docs.docker.com/engine/install/debian/ cenos安装Docker前提&#xff1a; 必…