78、 ansible----playbook

news2024/11/24 7:06:00

一、ansible模块

11、防火墙和网络模块:

[root@test1 ~]# ansible 192.168.168.23 -m iptables -a 'chain=INPUT protocol=ICMP source=192.168.168.22 jump=REJECT' -b  ##-b后台,拒绝

在这里插入图片描述

[root@test3 ~]# yum -y install nginx

[root@test3 ~]# systemctl restart nginx.service 

[root@test3 ~]# curl 192.168.168.23
this is nginx!
[root@test1 ~]# ansible 192.168.168.23 -m iptables -a 'chain=INPUT protocol=tcp destination_port=80 jump=REJECT' -b  ##80端口关闭,拒绝访问

删除防火墙策略

[root@test1 ~]# ansible 192.168.168.23 -m iptables -a 'chain=INPUT protocol=tcp destination_port=80 jump=REJECT state=absent' -b

在这里插入图片描述

[root@test1 ~]# ansible 192.168.168.23 -m iptables -a 'chain=INPUT protocol=tcp destination_port=80 jump=ACCEPT' -b  ##放开80端口

firewalld模块

[root@test3 ~]# systemctl start firewalld



[root@test1 ~]# ansible 192.168.168.23 -m firewalld -a 'service=nginx zone=public permanent=true state=enabled immediate=true' -e

[root@test3 ~]# firewall-cmd --get-services | grep nginx##查询不到nginx服务,不支持
[root@test3 ~]# firewall-cmd --get-services | grep http##查询http服务,支持



#### service不支持nginx,启动端口80/tcp

[root@test1 ~]# ansible 192.168.168.23 -m firewalld -a 'port=80/tcp zone=public permanent=true state=enabled immediate=true' -b

在这里插入图片描述

删除端口,防火墙策略

[root@test1 ~]# ansible 192.168.168.23 -m firewalld -a 'port=80/tcp zone=public permanent=true state=disabled immediate=true' -b

在这里插入图片描述

12、配置网卡

修改ip地址
[root@test1 ~]# ansible 192.168.168.22 -m ansible.builtin.lineinfile -a "path=/etc/sysconfig/network-scripts/ifcfg-ens33 regexp='^IPADDR' line='IPADDR=192.168.168.25'"
查看有没有改成功
[root@test2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.168.25  ##修改成功
NETMASK=255.255.255.0
GATEWAY=192.168.168.2
DNS1=218.2.135.1
DNS2=221.131.143.69
重启网卡
[root@test1 ~]# ansible 192.168.168.22 -a 'systemctl restart network'
回终端查看

在这里插入图片描述

ip地址改回为192.168.168.22
[root@test1 ~]# cd /etc/ansible/
[root@test1 ansible]# ls
ansible.cfg  hosts  roles  test2.sh
[root@test1 ansible]# vim hosts 

192.168.168.25

[root@test1 ansible]# ansible 192.168.168.25 -m ansible.builtin.lineinfile -a "path=/etc/sysconfig/network-scripts/ifcfg-ens33 regexp='^IPADDR' line='IPADDR=192.168.168.22'"

[root@test1 ansible]# ansible 192.168.168.25 -a 'systemctl restart network'

点击xshell,重新连接

ifconfig

在这里插入图片描述

13、script模块:

运行的本地的脚本,把脚本运行的结果输出到目标主机。

[root@test1 ansible]# cd /opt/
[root@test1 opt]# vim test.sh
[root@test1 opt]# chmod 777 test.sh 
[root@test1 opt]# ansible 192.168.168.22 -m script -a '/opt/test.sh'[root@test1 ansible]# cd /opt/
[root@test1 opt]# vim test.sh

#!/bin/bash
echo "hello world!" > /opt/test2.txt

[root@test1 opt]# chmod 777 test.sh 
[root@test1 opt]# ansible 192.168.168.22 -m script -a '/opt/test.sh'

[root@test2 ~]# cd /opt/
[root@test2 opt]# ls
jenkins-2.396-1.1.noarch.rpm  test  test2.txt
[root@test2 opt]# cat test2.txt
hello world!

运行的本地的脚本,把脚本运行的结果输出到目标主机。

[root@test1 opt]# cp test.sh test1.sh
[root@test1 opt]# vim test1.sh

#!/bin/bash
ifconfig > /opt/test3.txt
free -h > /opt/test4.txt
df -h > /opt/test5.txt

[root@test1 opt]# ansible 192.168.168.22 -m script -a '/opt/test1.sh'  ##脚本在本地,脚本里面的命令是在目标主机里面运行

在这里插入图片描述

14、setup模块:

查看目标主机的信息:ip地址,cpu,内核,系统信息。

[root@test1 opt]# ansible 192.168.168.22 -m setup

查看目标主机的cpu

[root@test1 opt]# ansible 192.168.168.22 -m setup -a 'filter=ansible_*processor*'

在这里插入图片描述

[root@test1 opt]# ansible 192.168.168.22 -m setup -a 'filter=ansible_processor'
查看内核版本
[root@test1 opt]# ansible 192.168.168.22 -m setup -a 'filter=ansible_proc_cmdline'
查看内存
[root@test1 opt]# ansible 192.168.168.22 -m setup -a 'filter=ansible_mem*'
查看系统信息
[root@test1 opt]# ansible 192.168.168.22 -m setup -a 'filter=ansible_system'

总结:

  • command和shell
  • copy,yum,user
  • service服务,对服务管理
  • file模块,文件的属性进行修改
  • hostname 改主机名
  • ping模块
指定端口

在这里插入图片描述

这种情况就不再需要传输密钥对,对目标主机生效

在这里插入图片描述

对目标组内所有主机都生效

在这里插入图片描述

利用拼接对web添加多个主机

192.168.168.[1:5] [0:9]

在这里插入图片描述
组嵌套

在这里插入图片描述

二、ansible的脚本:

playbook:剧本

2.1、playbook的组成:

1、Tasks 任务,每个Tasks 就是一个模块

2、variables 变量,存储和传递数据,可以自定义,也可以是全局变量,也可以是脚本外传参。

3、Templates模块,用于生成配置文件和多任务的编排。

4、handlers 处理器,用于满足某些条件时,触发的操作,一般用于重启等操作。

5、roles 角色 组织和封装剧本的过程,角色可以把任务、变量、模块、处理器,组合成一个可用单元。

2.1.1、安装httpd

[root@test1 opt]# vim test1.yaml

- name: first play
#定义这个剧本的名称,可不写
  gather_facts: false
#在执行剧本之前是否收集目标主机的信息,false:不收集,可用加快执行速度,如果不写>,默认就是收集。
  hosts: 192.168.168.22
#指定目标主机,可以是组名,也可以是ip地址
  remote_user: root
#在目标主机的执行用户
  tasks:
    - name: test connection
#定义一个任务的名称,可以自定义
      ping:
#ping就是模块的名称
    - name: close selinux
      command: '/sbin/setenforce 0'
      ignore_errors: true
# 如果在执行任务中报错,返回码非0,报错,task就会停止,ignore_errors:True就会忽略
错误,继续执行下一个任务
    - name: close firewalld
      service: name=firewalld state=stopped
#调用service模块,关闭防火墙
    - name: install httpd
      yum: name=httpd state=latest
#latest,安装当前库中的最新版本的软件
    - name: interview
      shell: echo "this is httpd" > /var/www/html/index.html
#指定shell模块。修改默认的访问页面
      notify: restart httpd
#ansible 在执行任务之后不会立即执行重启,通过notify指令对应的名称传给触发器,让触
发器在任务的最后执行重启,影响执行的效率
  handlers:
    - name: restart httpd
      service: name=httpd state=restarted
      
[root@test1 opt]# ansible-playbook test1.yaml 

在这里插入图片描述

在这里插入图片描述

2.1.2、安装nginx

#安装nginx,传一个配置文件到目标主机,修改默认端口为8080,访问页面的内容 this is nginx 安装方式yum

[root@test1 opt]# yum -y install nginx ##提前下载nginx,传出nginx.conf------在/etc/nginx/nginx.conf

[root@test1 /]# cp /etc/nginx/nginx.conf /opt/nginx.conf

[root@test1 opt]# vim nginx.conf 

 39         listen       8080;
 40         listen       [::]:8080;

[root@test1 opt]# yum -y remove nginx

[root@test1 opt]# vim test2.yaml

- name: second play
#定义这个剧本的名称,可不写
  gather_facts: false
#在执行剧本之前是否收集目标主机的信息,false:不收集,可用加快执行速度,如果不写,默认就是收集。
  hosts: 192.168.168.22
#指定目标主机,可以是组名,也可以是ip地址
  remote_user: root
#在目标主机的执行用户
  tasks:
    - name: test2 connection
#定义一个任务的名称,可以自定义
      ping:
#ping就是模块的名称
    - name: close selinux
      command: '/sbin/setenforce 0'
      ignore_errors: true
# 如果在执行任务中报错,返回码非0,报错,task就会停止,ignore_errors:True就会忽略错误,继续执行下一个任务
    - name: close firewalld
      service: name=firewalld state=stopped
#调用service模块,关闭防火墙
    - name: install nginx
      yum: name=nginx state=latest
#latest,安装当前库中的最新版本的软件
    - name: interview
      shell: echo "this is nginx" > /usr/share/nginx/html/index.html
#指定shell模块。修改默认的访问页面
    - name: nginx.conf
      copy: 'src=/opt/nginx.conf dest=/etc/nginx/nginx.conf'
      notify: restart nginx
#ansible 在执行任务之后不会立即执行重启,通过notify指令对应的名称传给触发器,让触发器在任务的最后执行重启,影响执行的效率
  handlers:
    - name: restart nginx
      service: name=nginx state=restarted
      
[root@test1 opt]# ansible-playbook test2.yaml 

在这里插入图片描述

访问测试

在这里插入图片描述

2.2、#定义变量,引用变量:#脚本当中定义参量

[root@test1 opt]# vim test3.yaml 

#定义变量,引用变量:
#脚本当中定义,以及脚本外传参
- name: second play
  hosts: 192.168.168.22
  remote_user: root
  vars:
    groupname: mysql
    username: nginx1
#定义变量:
  tasks:
    - name: create group
      group:
        name: "{{ groupname }}"
        system: yes
        gid: 306
    - name: create user
      user:
        name: "{{ username }}"
        uid: 306
        group: "{{ groupname }}"
        
        
[root@test1 opt]# ansible-playbook test3.yaml 

在这里插入图片描述

在这里插入图片描述

[root@test1 opt]# vim test3.yaml 

#定义变量,引用变量:
#脚本当中定义,以及脚本外传参
- name: second play
  hosts: 192.168.168.22
  remote_user: root
  vars:
    groupname: mysql
    username: nginx1
#定义变量:
  tasks:
    - name: create group
      group:
        name: "{{ groupname }}"
        system: yes
        gid: 16
    - name: create user
      user:
        name: "{{ username }}"
        uid: 16
        group: "{{ groupname }}"

[root@test1 opt]# ansible-playbook test3.yaml

在这里插入图片描述

在这里插入图片描述

[root@test2 opt]# yum -y remove nginx ##卸载软件,就可覆盖用户和组

在这里插入图片描述

#定义变量,引用变量:
#脚本当中定义,以及脚本外传参
- name: second play
  hosts: 192.168.168.22
  remote_user: root
  become: yes
#先
  vars:
    groupname: mysql
    username: nginx
#定义变量:
  tasks:
    - name: create group
      group:
        name: "{{ groupname }}"
        system: yes
        gid: 306
    - name: create user
      user:
        name: "{{ username }}"
        uid: 306
        group: "{{ groupname }}"

[root@test1 opt]# ansible-playbook test3.yaml

在这里插入图片描述

在这里插入图片描述

2.3、脚本外传参

[root@test1 opt]# ansible-playbook test4.yaml -e 'groupname=test1 username=test1'##脚本外面的优先级比里面高

[root@test1 opt]# vim test4.yaml

#定义变量,引用变量:
#脚本当中定义,以及脚本外传参
- name: second play
  hosts: 192.168.168.22
  remote_user: root
  become: yes
#先
  vars:
    groupname: mysql
    username: nginx
#定义变量:
  tasks:
    - name: create group
      group:
        name: "{{ groupname }}"
        system: yes
        gid: 307
    - name: create user
      user:
        name: "{{ username }}"
        uid: 307
        group: "{{ groupname }}"
        
        
[root@test1 opt]# ansible-playbook test4.yaml -e 'groupname=test1 username=test1'

在这里插入图片描述

在这里插入图片描述

2.4、检查脚本的语法

1、检查脚本语法

[root@test1 opt]# ansible-playbook test3.yaml --syntax-check

2、检查脚本里面的任务个数

[root@test1 opt]# ansible-playbook test3.yaml --list-task

在这里插入图片描述

3、检查对哪些主机生效

[root@test1 opt]# ansible-playbook test3.yaml --list-hosts

在这里插入图片描述

4、指定位置运行

[root@test1 opt]# ansible-playbook test3.yaml --start-at-task='create user' -e 'username=test3 groupname=mysql'  ##此脚本中,组需要存在

在这里插入图片描述

cat /etc/passwd ##查看用户

cat /etc/group ##查看组

[root@test1 opt]# vim test4.yaml 

#定义变量,引用变量:
#脚本当中定义,以及脚本外传参
- name: second play
  hosts: 192.168.168.22
  remote_user: root
  become: yes
#先
  vars:
    groupname: mysql
    username: nginx
#定义变量:
  tasks:
    - name: create group
      group:
        name: "{{ groupname }}"
        system: yes
        gid: 307
    - name: create user
      user:
        name: "{{ username }}"
        uid: 308
        group: "{{ groupname }}"


[root@test1 opt]# ansible-playbook test3.yaml --start-at-task='create user' -e 'username=test3 groupname=mysql'  ##此脚本中,组需要存在

在这里插入图片描述

5、切换用户

#定义变量,引用变量:
#脚本当中定义,以及脚本外传参
- name: second play
  hosts: 192.168.168.22
  remote_user: dn
  become: yes
#先用普通用户执行,但是需要切换到其他的用户,例如切换到管理员
  become_user: root
  vars:
    groupname: mysql
    username: nginx
#定义变量:
  tasks:
    - name: create group
      group:
        name: "{{ groupname }}"
        system: yes
        gid: 307
    - name: create user
      user:
        name: "{{ username }}"
        uid: 308
        group: "{{ groupname }}"

2.5、#如何在脚本中实现条件判断:

#when 满足条件的主机执行,不满足的跳过

[root@test1 opt]# vim test5.yaml 

#如何在脚本中实现条件判断:
#when 满足条件的主机执行,不满足的跳过
- name: this is if
  hosts: all
  remote_user: root
  tasks:
    - name: test when
      debug: msg='条件满足'
#debug相当于echo echo "条件满足"
      when: ansible_default_ipv4.address == "192.168.168.22"

[root@test1 opt]# ansible-playbook test5.yaml



##取反,除了192.168.168.22都执行

[root@test1 opt]# vim test5.yaml 

#如何在脚本中实现条件判断:
#when 满足条件的主机执行,不满足的跳过
- name: this is if
  hosts: all
  remote_user: root
  tasks:
    - name: test when
      debug: msg='条件满足'
#debug相当于echo echo "条件满足"
      when: ansible_default_ipv4.address != "192.168.168.22"   ##取反,除了192.168.168.22都执行

2.6、循环结构

[root@test1 opt]# vim test6.yaml 

#循环结构:absible有多种循环方式,一般都命名为with_items,定义循环的内容。

#with_item 单循环输出:

- name: item test
  hosts: 192.168.168.22
  remote_user: root
  gather_facts: false
  tasks:
    - debug:
        msg: "{{item}}"
      with_items: [a,b,c,d]
#输出item的值,with_items:a b c d 依次传入      

      
[root@test1 opt]# ansible-playbook test6.yaml


#循环结构:absible有多种循环方式,一般都命名为with_items,定义循环的内容。

#with_item 单循环输出:

- name: item test
  hosts: 192.168.168.22
  remote_user: root
  gather_facts: false
  tasks:
    - debug:
        msg: "{{item}}"
      with_items:
        - [a,b,c,d]
        - [1,2,3,4]
#输出item的值,with_items:a b c d 依次传入
[root@test1 opt]# ansible-playbook test6.yaml








#循环结构:absible有多种循环方式,一般都命名为with_items,定义循环的内容。

#with_item 单循环输出:

- name: item test
  hosts: 192.168.168.22
  remote_user: root
  gather_facts: false
  tasks:
    - debug:
        msg: "{{item}}"
      with_list:
        - [a,b,c,d]
        - [1,2,3,4]
#输出item的值,with_items:a b c d 依次传入
#with_list,整个列表作为一个整体,进行输出
[root@test1 opt]# ansible-playbook test6.yaml





#循环结构:absible有多种循环方式,一般都命名为with_items,定义循环的内容。

#with_item 单循环输出:

- name: item test
  hosts: 192.168.168.22
  remote_user: root
  gather_facts: false
  tasks:
    - debug:
        msg: "{{item}}"
      with_together:
        - [a,b,c,d]
        - [1,2,3,4]
#输出item的值,with_items:a b c d 依次传入
#with_list,整个列表作为一个整体,进行输出
[root@test1 opt]# ansible-playbook test6.yaml




#循环结构:absible有多种循环方式,一般都命名为with_items,定义循环的内容。

#with_item 单循环输出:

- name: item test
  hosts: 192.168.168.22
  remote_user: root
  gather_facts: false
  tasks:
    - debug:
        msg: "{{item}}"
      with_together:
        - [a,b,c,d]
        - [1,2,3,4]
        - [A,B,C]
#输出item的值,with_items:a b c d 依次传入
#with_list,整个列表作为一个整体,进行输出
[root@test1 opt]# ansible-playbook test6.yaml


#循环结构:absible有多种循环方式,一般都命名为with_items,定义循环的内容。

#with_item 单循环输出:

- name: item test
  hosts: 192.168.168.22
  remote_user: root
  gather_facts: false
  tasks:
    - debug:
        msg: "{{item}}"
      with_nested:
        - [a,b,c,d]
        - [1,2,3,4]
        - [A,B,C]
#输出item的值,with_items:a b c d 依次传入
#with_list,整个列表作为一个整体,进行输出
[root@test1 opt]# ansible-playbook test6.yaml

#循环结构:absible有多种循环方式,一般都命名为with_items,定义循环的内容。

#with_item 单循环输出:

- name: item test
  hosts: 192.168.168.22
  remote_user: root
  gather_facts: false
  tasks:
    - debug:
        msg: "{{item}}"
      with_nested:
        - [a,b,c,d]
        - [1,2,3,4]
#输出item的值,with_items:a b c d 依次传入
#with_list,整个列表作为一个整体,进行输出
[root@test1 opt]# ansible-playbook test6.yaml



#循环结构:absible有多种循环方式,一般都命名为with_items,定义循环的内容。

#with_item 单循环输出:

- name: item test
  hosts: 192.168.168.22
  remote_user: root
  gather_facts: false
  tasks:
    - debug:
        msg: "{{item}}"
      with_nested:
        - [a,b,c,d]
        - [1,2,3,4]
#输出item的值,with_items:a b c d 依次传入
#with_list,整个列表作为一个整体,进行输出
#with_together,作为整体,以列两两配对输出
#with_nested:每一层都是遍历执行一遍,输出结束
#条件判断,主机的ip
#才会执行,一次性创建4个文件,/opt/a /opt/b /opt/c /opt/d 循环 with_items
[root@test1 opt]# ansible-playbook test6.yaml

#条件判断,主机的ip
#才会执行,一次性创建4个文件,/opt/a /opt/b /opt/c

[root@test1 opt]# vim test11.yaml 

- name: file test
  hosts: all
  remote_user: root
  tasks:
    - name: file when
      file:
        path: "{{ item }}"
        state: touch
      with_items: [/opt/a,/opt/b,/opt/c,/opt/d]
      when: ansible_default_ipv4.address == "192.168.168.22"


[root@test1 opt]# ansible-playbook test11.yaml
[root@test2 opt]# ls
a  c  jenkins-2.396-1.1.noarch.rpm  test2.txt  test4.txt
b  d  test                          test3.txt  test5.txt

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文合集下载丨第十九届全国人机语音通讯学术会议

2024年8月15日至18日,第十九届全国人机语音通讯学术会议(NCMMSC)暨CCF语音对话与听觉专委会2024年学术年会在新疆乌鲁木齐成功召开。 会议论文集下载方式在文末 👇 全国人机语音通讯学术会议作为语音技术领域内的专家、学者及科研…

为什么需要文献综述模板和创建文献综述技巧

为什么需要文献综述模板? 文献综述模板可以作为特定主题的指南。如果您的时间有限,无法进行更多研究,文献综述大纲示例可以为您提供帮助,因为它可以为您提供您打算研究的内容的概述。 甚至各个领域的专业人士也依赖文学评论来了解…

易灵思FPGA-Trion的MIPI设置使用

一、MIPI简介? 不需要各种资料上一大堆对物理层MIPI传输协议的讲解,实话说,我也不是特别能吃透其中的时序,所以不多研究;所有的FGPA如果带MIPI ,那就只研究控制器就行了 ,没必要舍近求远 二、硬…

NVM安装管理node.js版本(简单易懂)

一、前言 1.1 简介 NVM(Node Version Manager)是 node.js 的版本管理器,用 shell 脚本切换机器中不同版本的 nodejs。 Nodejs为什么需要多个版本? 有经验的开发者可能遇到过,某个依赖包明确nodejs是某个版本&#…

深度学习--RNN以及RNN的延伸

循环神经网络(Recurrent Neural Network, RNN)是一类能够处理序列数据的神经网络,在自然语言处理、时间序列分析等任务中得到了广泛应用。RNN能够通过其内部的循环结构,捕捉到序列中前后项之间的关系。下面我将从原理、作用、应用…

【AI绘画】Midjourney提示词详解:精细化技巧与高效实践指南

文章目录 💯Midjourney提示词基础结构1 图片链接1.1 上传流程 2 文字描述3 后置参数 💯Midjourney提示词的文字描述结构全面剖析1 主体主体细节描述2 环境背景2.1 环境2.2 光线2.3 色彩2.4 氛围 3 视角4 景别构图5 艺术风格6 图片制作方法7 作品质量万能…

振动分析-20-振动三要素的理解及决定设备分析水平的因素

1 对频谱分析的定位 一般咨询一个振动问题,很多人往往是要求把各种频谱贴上来看看,却很少有人问,振动过程、检修经历、设备结构、振动位置、振动方向、负荷关系、油温变化、转速影响等等。 刚刚接触振动检测时,对有关频谱分析方面资料如饥似渴,对于早期从事振动诊断的朋…

CentOS 7使用RPM安装MySQL

MySQL是一个开源的关系型数据库管理系统(RDBMS),允许用户高效地存储、管理和检索数据。它被广泛用于各种应用,从小型的web应用到大型企业解决方案。 MySQL提供了丰富的功能,包括支持多个存储引擎、事务能力、数据完整性…

Google Earth Engine(GEE)——计算非监督分类的中的面积和占比

函数: aggregate_sum(property) Aggregates over a given property of the objects in a collection, calculating the sum of the values of the selected property. 对一个集合中的对象的特定属性进行聚合,计算所选属性值的总和。 Arguments: this:collection (Featur…

嵌入式初学-C语言-二九

C语言编译步骤 预处理编译汇编链接 什么是预处理 预处理就是在源文件(如.c文件)编译之前,所进行的一部分预备操作,这部分操作是由预处理程序自动完成,当源文件在编译时,编译器会自动调用预处理指令的解析…

2024年大厂裁员严重,软件测试行业真的饱和了吗?

这短时间以来后台有很多小伙伴说找工作难,并且说软件测试行业饱和了?竟然登上了热榜 那么我今天带大家看看真实的市场行情,往下看 这个是公司联合某厂的HR招聘真实情况,很明显【软件测试】投简历竟然高达9999沟通才1千多&#xf…

【学术会议征稿】第七届土木建筑、水电与工程管理国际学术会议(CAHEM 2024)

第七届土木建筑、水电与工程管理国际学术会议(CAHEM 2024) 2024 7th International Conference on Civil Architecture, Hydropower and Engineering Management (CAHEM 2024) 第七届土木建筑、水电与工程管理国际学术会议(CAHEM 2024&…

【蓝桥杯冲刺省一,省一看这些就够了-C++版本】蓝桥杯STL模板及相关练习题

蓝桥杯历年省赛真题 点击链接免费加入题单 STL map及其函数 map<key,value> 提供一对一的数据处理能力&#xff0c;由于这个特性&#xff0c;它完成有可能在我们处理一对一数据的时候&#xff0c;在编程上提供快速通道。map 中的第一个值称为关键字(key)&#xff0c;…

河南萌新联赛2024第(六)场:郑州大学(ABCDFGHIL)

文章目录 写在前面A 装备二选一&#xff08;一&#xff09;思路code B 百变吗喽思路code C 16进制世界思路code D 四散而逃思路code F 追寻光的方向思路code G 等公交车思路code H 24点思路code I 正义从不打背身思路code L koala的程序思路code 河南萌新联赛2024第&#xff08…

Transformer总结(二):架构介绍(从seq2seq谈到Transformer架构)

文章目录 一、seq2seq应用介绍二、编码器解码器架构2.1 流程介绍2.2 原理说明 三、Transformer整体结构和处理流程3.1 Attention机制在seq2seq中的引入3.2 比较RNN与自注意力3.3 Transformer架构介绍3.4 处理流程3.4.1 编码器中处理流程3.4.2 解码器在训练阶段和预测阶段的差异…

Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明

系统要求 支持x64_64架构、aarch64架构&#xff08;需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9&#xff09;。 功能支持 Linux平台x64_64架构|aarch64架构RTMP直播推送SDK 音频编码&a…

UDP服务端、TCP的c/s模式

一、UDP服务端 socket bind //绑定 recvfrom ssize_t recvfrom(int sockfd, socket的fd void *buf, 保存数据的一块空间的地址 …

网络编程TCP与UDP

TCP与UDP UDP头&#xff1a; 包括源端口、目的地端口、用户数据包长度&#xff0c;检验和 数据。 typedef struct _UDP_HEADER {unsigned short m_usSourPort;    // 源端口号16bitunsigned short m_usDestPort;    // 目的端口号16bitunsigned short m_usLen…

一款B to B Connector的仿真结果与开发样品实测的结果对比

下面是一款B to B 连接器开发初期的CST仿真结果: 回波损耗 插入损耗 时域阻抗 开发样品出来后第三方测试机构的实测结果

Auto CAD 常用指令汇总 [持续更新]

简介 AutoCAD是由美国Autodesk公司开发的一款自动计算机辅助设计软件&#xff0c;广泛应用于建筑、工程、城市规划等多个领域。自1982年发布以来&#xff0c;AutoCAD不断进化&#xff0c;成为行业标准之一。它支持二维绘图和三维建模功能&#xff0c;用户可以精确绘制各种图形&…