当前位置: 首页 > news >正文

⾃动化运维利器Ansible-基础

Ansible基础

  • 一、工作原理
  • 二、快速入门
    • 2.1 测试所有资产的网络连通性
    • 2.2 发布文件到被管理节点(资产)
  • 三、资产(被管理节点)
    • 3.1 静态资产
      • 3.1.1 自定义资产
      • 3.1.2 自定义资产的使用
      • 3.1.3 资产选择器
  • 四、Ansible Ad-Hoc 命令
    • 4.1 模块类型
      • 4.1.1 command & shell 模块
      • 4.1.2 copy模块
      • 4.1.3 yum_repsitory模块
      • 4.1.4 yum 模块
      • 4.1.5 user模块

按顺序食用,口味更佳
( 1 ) ⾃动化运维利器Ansible-基础
( 2 ) ⾃动化运维利器 Ansible-Playbook
( 3 ) ⾃动化运维利器 Ansible-变量
( 4 ) ⾃动化运维利器AnsiblePlaybook的任务控制
( 5 ) ⾃动化运维利器 Ansible-Jinja2
( 6 ) ⾃动化运维利器 Ansible-最佳实战

一、工作原理

Ansible 是⼀个 IT ⾃动化⼯具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。

Ansible ⽤ Python 编写,尽管市⾯上已经有很多可供选择的配置管理解决⽅案(例如 Salt、Puppet、Chef等),但它们各有优劣,⽽Ansible的特点在于它的简洁。

让 Ansible 在主流的配置管理系统中与众不同的⼀点便是,它并不需要你在想要配置的每个节点上安装⾃⼰的组件。同时提供的另⼀个优点,如果需要的话,你可以在不⽌⼀个地⽅控制你的整个基础架构
在这里插入图片描述

  • 在ANSIBLE 管理体系中,存在"管理节点" 和 “被管理节点” 两种⻆⾊。
  • 被管理节点通常被称为"资产"
  • 在管理节点上,Ansible将 AdHoc 或 PlayBook 转换为Python脚本。并通过SSH将这些Python 脚本传递到被管理服务器上。在被管理服务器上依次执⾏,并实时的将结果返回给管理节点

二、快速入门

Ansible的安装非常简单,此处不再做说明了


管理节点:

  • 172.18.0.2

被管理节点(资产):

  • 172.18.0.3
  • 172.17.0.4

管理节点 和 被管理节点之间的节点已经打通 SSH 信任关系。

2.1 测试所有资产的网络连通性

ansible all -i 172.18.0.3,172.18.0.4 -m ping172.18.0.4 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python":
"/usr/bin/python"},"changed": false,"ping": "pong"
}
172.18.0.3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python":
"/usr/bin/python"},"changed": false,"ping": "pong"
}

注意 -i 参数后⾯接的是⼀个列表(List)。因此当为⼀个被管理节点时,我们后⾯⼀定要加⼀个英⽂逗号(,),告知是List

2.2 发布文件到被管理节点(资产)

touch /tmp/a.conf
ansible all -i 172.18.0.3,172.18.0.4 -m copy -a
"src=/tmp/a.conf dest=/tmp/a.conf"

src(source) 源地址,dest(destination)目标地址


参数解释:

  • all 在 ansible 中称为资产选择器。就是匹配资产(-i 参数指定的清单) 中的⼀部分。

    此处的all -i 172.18.0.3,172.18.0.4 指的是匹配-i 参数指定的清单(172.18.0.3,172.18.0.4)的所有资产。

  • -i 指定Ansible 的资产,也就是被管理服务器。
  • -m 指定要运⾏的模块,例如上述的 ping 模块和 copy 模块。

    模块为ansible提供的,也可以是社区开源的模块。

  • -a 指定模块的参数,模块 ping 没有指定参数, 模块 copy指定了 src 和 dest 参数。

三、资产(被管理节点)

在实际场景中,ansible要管理的服务器往往要多得多。依然使用 -i 参数后⾯⼀个个追加IP显然不合乎常理。

Ansible的资产,主要分为静态资产和动态资产,此处先介绍静态资产。

3.1 静态资产

在 Ansible 中,静态资产(static assets)指的是那些在运行时不会发生变化的资源或配置文件。这些资产通常是预先定义好的,并且在整个 Ansible 运行过程中保持不变。

静态资产本身是⼀个文本文件,⼀个格式类似INI的文件,默认情况下,Ansible的资产⽂件位于 /ect/ansible/hosts,安装方式不同可能没有该文件,手动创建即可。

静态资产可以包括但不限于以下几类:

库存文件(Inventory Files):库存文件定义了目标主机及其分组信息。这些文件是静态的,除非手动修改,否则在 Ansible 运行过程中不会发生变化。

INI格式:
[webservers]
web1.example.com
web2.example.comyaml格式:
all:children:webservers:hosts:web1.example.com:web2.example.com:

变量文件(Variable Files):变量文件包含可以在 playbook 中使用的变量定义。这些文件通常也是静态的,除非手动修改。

app_name: myapp
app_port: 8080

模板文件(Template Files):模板文件用于生成配置文件或其他文本文件。这些模板文件通常是静态的,但在运行时会被 Ansible 渲染成最终的配置文件。(后边介绍)

角色(Roles):角色是一组相关的任务、文件、模板和变量的集合。角色文件夹中的内容通常是静态的,除非手动修改。
Playbook 文件:Playbook 文件定义了一组任务,这些任务将在目标主机上执行。Playbook 文件通常是静态的,除非手动修改。

3.1.1 自定义资产

上述提到的INI格式文件静态资产可以进行自定义,下⾯给出⼀个⾃定义的静态资产实例,然后再具体解释其含义。

cat inventory.ini
1.1.1.1
2.2.2.2
3.3.3.[1:15]
aimyon36.com
ztmy.com
aimyon[05:09].com    //aimyon05.com ....aimyon09.com[web_servers]
192.168.1.2
192.168.1.3
192.168.1.5[dbdb_servers]
192.168.2.2
192.168.2.3
192.168.1.5[alldb_servers]
[alldb_servers:children]
dbdb_servers
web_servers
  • Ansible 的资产⽂件中,可以以IP地址的形式或者主机名(如果使用主机名须配置hosts的映射)的形式存在。
  • Ansible 的资产若连续,可以使⽤[stat:end] 的形式去表达。
  • 可以将服务器按照业务场景定义成组,⽐如dbdb_servers 和web_servers
  • 组和组之间可以存在继承关系,⽐如dbdb_servers 和web_servers 同时继承 alldb_servers 组

3.1.2 自定义资产的使用

ansible all -i inventory.ini ... 
  • -i 参数用来指定资产。
  • 通过 -i 参数指定⾃定义资产的位置即可(可以是全路径,也可以是相对路径)。

列举出所有资产

ansible all -i inventory.ini --list-hostshosts (29):1.1.1.12.2.2.23.3.3.1...略...

列举出选定资产

ansible web_servers -i inventory.ini --listhostshosts (3):192.168.2.2192.168.2.3192.168.1.5

-i 是指定要进行匹配的资产
web_servers 是匹配指定的资产中属于web_servers这个组的资产

3.1.3 资产选择器

有时操作者希望只对资产中的⼀部分服务器进⾏操作,而不是资产中所有服务器。此时可以使⽤ Ansible 的PATTERN资产选择器。

基本语法格式

  • ansible PATTERN -i inventory -m module -a argument

选择⼀台或者多台服务器

ansible 1.1.1.1 -i inventory.ini --list-hostshosts (1):1.1.1.1ansible aimyon36.com -i inventory.ini --listhostshosts (1):aimyon36.comansible 1.1.1.1,2.2.2.2 -i inventory.ini --listhostshosts (2):1.1.1.12.2.2.2

选择⼀组服务器

ansible web_servers -i inventory.ini --list-hostshosts (3):192.168.1.2192.168.1.3192.168.1.5

使用*匹配

ansible 3.3.3.1* -i inventory.ini --list-hostshosts (7):3.3.3.133.3.3.103.3.3.113.3.3.123.3.3.143.3.3.153.3.3.1

使⽤逻辑匹配

ansible 'web_servers:db_servers' -i inventory.ini --list-hosts //web_servers 和 dbdb_servers 的并集hosts (5):192.168.1.2192.168.1.3192.168.1.5192.168.2.2192.168.2.3ansible 'web_servers:&db_servers' -i inventory.ini --list-hosts //web_servers 和 dbdb_servers 的交集hosts (1):192.168.1.5ansible 'web_servers:!db_servers' -i inventory.ini --list-hosts //在 web_servers 中,但是不在 db_servers 中hosts (2):192.168.1.2192.168.1.3

四、Ansible Ad-Hoc 命令

Ansible Ad-Hoc其实是⼀个概念性的名字,是相对于写Ansible playbook 来说的.类似于在命令⾏敲⼊shell命令和 写shell scripts两者之间的关系。可以⽤于执⾏⼀些临时命令。

如果希望敲⼊⼀些命令去比较快的完成⼀些事情,⽽不需要将这些执⾏的命令特别保存下来, 这样的命令就叫做 ad-hoc 命令。

Ansible提供两种⽅式去完成任务,⼀是 ad-hoc(临时) 命令,⼀是写Ansible playbook(剧本)。前者可以解决⼀些简单的任务, 后者解决较复杂的任务,⽐如做配置管理或部署。

命令格式

  • ansible pattern [-i inventory] -m module -a argument
  • pattern 资产选择器
  • -i 指定资产清单⽂件的位置
  • -m 指定本次Ansible ad-hoc 要执⾏的模块。可以类别成SHELL 中的命令。
  • -a 模块的参数. 可以类⽐成SHELL 中的命令参数

快速入门部分介绍的就是ad-hoc命令,快速入门部分已经介绍了通过ansible筛选出指定的资产进行相应操作,但在实际操作上,我们希望使用到文件传输,修改,服务安装等操作。因此需要引入模块进行操作。

4.1 模块类型

Ansible 模块分三种类型: 核⼼模块(core module)、附加模块(extra module)及用户⾃定义模块(consume module)。

核⼼模块是由Ansible 的官⽅团队提供的。附加模块是由各个社区提供的。例如: OPENSTACK 社区、DOCKER 社区等等。
当核⼼模块和附加模块都⽆法满⾜你的需求时,⽤户可以⾃定义模块。
默认情况下,在安装Ansible 的时候, 核⼼模块和附加模块都已经安装而⽆需⽤户干预。

Ansible 的核⼼模块和附加模块,数量有3000+ 。这样庞⼤的模块数量,对于任何⼀个接触Ansible 的⼈都不可能将其完全记住、掌握使⽤。 因此能够顺利使⽤Ansible 的帮助⽂档,对我们来说是很有必要的。Ansible 的帮助⽂档,由它本身提供的命令ansible-doc 实现。

常用帮助命令

列举出所有的核⼼模块和附加模块

  • ansible-doc -l

查询某个模块的使⽤⽅法

  • ansible-doc modulename

查询某个模块的使⽤⽅法,⽐较简洁的信息

  • ansible-doc -s modulename

4.1.1 command & shell 模块

command & shell 两个模块都是在远程服务器上去执⾏命令。command模块是ad-hoc的默认模块,在执⾏ad-hoc时,若不指定模块的名字则默认使⽤此模块。

ansible all -i hosts -a "echo 'hello'"
172.18.0.4 | CHANGED | rc=0 >>
hello
172.18.0.3 | CHANGED | rc=0 >>
helloansible all -i hosts -m shell -a "echo 'hello'"
172.18.0.4 | CHANGED | rc=0 >>
hello
172.18.0.3 | CHANGED | rc=0 >>
hello

shell 模块可以执⾏SHELL 的内置命令和 特性(⽐如管道符)。
command 模块⽆法执⾏SHELL 的内置命令和特性。

4.1.2 copy模块

copy 模块的主要⽤于管理节点和被管理节点之间的⽂件拷⻉。

常用参数

  • src 指定拷⻉⽂件的源地址
  • dest 指定拷⻉⽂件的⽬标地址
  • backup 拷⻉⽂件前,若原⽬标⽂件发⽣了变化,则对⽬标⽂件进行备份
  • woner 指定新拷⻉⽂件的所有者
  • group 指定新拷⻉⽂件的所有组
  • mode 指定新拷⻉⽂件的权限

copy 管理节点上的 nginx.repo 到被管理节点上

 ansible webservers -i hosts -m copy -a "src=./nginx.repo dest=/etc/yum.repos.d/nginx.repo

copy 前, 在被管理节点上对原⽂件进⾏备份

ansible all -i hosts -m copy -a "src=./nginx.repo dest=/etc/yum.repos.d/nginx.repo backup=yes"

copy ⽂件的同时对⽂件进⾏⽤户及⽤户组设置

ansible all -i hosts -m copy -a "src=./nginx.repodest=/etc/yum.repos.d/nginx.repo owner=nobody group=nobody"

copy ⽂件的同时对⽂件进⾏权限设置

ansible all -i hosts -m copy -a "src=./nginx.repo
dest=/etc/yum.repos.d/nginx.repo mode=0755"

4.1.3 yum_repsitory模块

主要用于向被管理节点添加yum仓库源。

常⽤参数

  • name 仓库名称,就是仓库⽂件中第⼀⾏的中括号中名称,必须的参数。
  • description 仓库描述信息,添加时必须的参数
  • baseurl yum存储库 “repodata” ⽬录所在⽬录的URL,添加时必须的参数。它也可以是多个URL的列表。
  • file 仓库⽂件保存到被管理节点的⽂件名,不包含 .repo。默认是 name 的值。
  • state preset 确认添加仓库⽂件, absent 确认删除仓库⽂件。
  • gpgcheck 是否检查 GPG yes|no, 没有默认值,使⽤/etc/yum.conf 中的配置。

添加 epel 源

 ansible dbservers -i hosts -m
yum_repository -a "name=epel
baseurl='https://download.fedoraproject.org/pub/epel/$releasever/$basearch/' 
description='EPEL YUM repo'"
172.18.0.3 | CHANGED => {"ansible_facts": {"discovered_interpreter_python":
"/usr/bin/python"},"changed": true,"repo": "epel","state": "present"}

删除epel源

ansible dbservers -i hosts -m yum_repository -a "name=epel state=absent"
172.18.0.3 | CHANGED => {"ansible_facts": {"discovered_interpreter_python":
"/usr/bin/python"},"changed": true,"repo": "epel","state": "absent"
}

4.1.4 yum 模块

等同于 Linux 上的YUM 命令, 对远程服务器上RPM包进⾏管理。

常用参数

  • name 要安装的软件包名, 多个软件包以英⽂逗号(,) 隔开
  • state 对当前指定的软件安装、移除操作(present installed latest absent removed)
    • present 确认已经安装,但不升级
    • installed 确认已经安装
    • latest 确保安装,且升级为最新
    • absent 和 removed 确认已移除

安装⼀个软件包

ansible webservers -i hosts -m yum -a
"name=nginx state=present"ansible webservers -i hosts -m yum -a
"name=nginx state=latest"ansible webservers -i hosts -m yum -a
"name=nginx state=installed"

安装⼀个软件包组

ansible webservers -i hosts -m yum -a
"name='@Development tools' state=present"

4.1.5 user模块

⽤于在被管理节点上对⽤户进⾏管理。

常⽤参数

  • name 必须的参数, 指定⽤户名
  • password 设置⽤户的密码,这⾥接受的是⼀个加密的值,因为会直接存到 shadow, 默认不设置密码
  • update_password 假如设置的密码不同于原密码,则会更新密码. 在 1.3 中被加⼊
  • home 指定⽤户的家⽬录
  • shell 设置⽤户的 shell
  • comment ⽤户的描述信息
  • create_home 在创建⽤户时,是否创建其家⽬录。默认创建,假如不创建,设置为 no。2.5版本之前使⽤ createhome group 设置⽤户的主组
  • groups 将⽤户加⼊到多个其他组中,多个⽤逗号隔开。默认会把⽤户从其他已经加⼊的组中删除。
  • append yes|no 和 groups 配合使⽤,yes 时,不会把⽤户从其他已经加⼊的组中删除
  • system 设置为 yes 时,将会创建⼀个系统账号
  • expires 设置⽤户的过期时间,值为时间戳,会转为为天数后,放在 shadow 的第 8 个字段⾥
  • generate_ssh_key 设置为 yes 将会为⽤户⽣成密钥,这不会覆盖原来的密钥
  • ssh_key_type 指定⽤户的密钥类型, 默认 rsa, 具体的类型取决于被管理节点
  • state 删除或添加⽤户, present 为添加,absent 为删除;默认值 present
  • remove 当与 state=absent ⼀起使⽤,删除⼀个⽤户及关联的⽬录,⽐如家⽬录,邮箱⽬录。可选的值为: yes/no

创建⽤户并设置密码

pass=$(echo "123456" | openssl passwd -1 -stdin)
ansible all -i hosts -m user -a "name=foo password=${pass}"

创建⽤户 yangge, 并且为其创建密钥对,并且密钥类型为:ecdsa

ansible all -i hosts -m user -a "name=yangge
generate_ssh_key=yes ssh_key_type=ecdsa"

创建⽤ tom, 并且设置其有效期到 2020年4⽉15⽇, 加⼊到组db_admin 中, 不改变⽤户原有假如的组。

 ansible dbservers -i hosts -m user -a
"name=tom expires=$(date +%s -d 20200415)
gorups=db_admin append=yes"

本章节Ansible-基础就介绍到这,相信看到这已经能够用ansible在资产服务器上执行一些简单的命令了,关于ansible的模块,可以自行查看文档了解,此处不再介绍了,说再多用不到也白扯 - - #

按顺序食用,口味更佳
( 1 ) ⾃动化运维利器Ansible-基础
( 2 ) ⾃动化运维利器 Ansible-Playbook
( 3 ) ⾃动化运维利器 Ansible-变量
( 4 ) ⾃动化运维利器AnsiblePlaybook的任务控制
( 5 ) ⾃动化运维利器 Ansible-Jinja2
( 6 ) ⾃动化运维利器 Ansible-最佳实战

相关文章:

⾃动化运维利器Ansible-基础

Ansible基础 一、工作原理二、快速入门2.1 测试所有资产的网络连通性2.2 发布文件到被管理节点(资产) 三、资产(被管理节点)3.1 静态资产3.1.1 自定义资产3.1.2 自定义资产的使用3.1.3 资产选择器 四、Ansible Ad-Hoc 命令4.1 模块类型4.1.1 command & shell 模块4.1.2 cop…...

若依笔记(十一):芋道多租户限制与修改

目录 多租户实现 哪些表是多租户的? YudaoTenant自动装载类 租户隔离的sql在哪? 如何修改成无租户隔离 全局修改 表级别 请求RUL级别 芋道比若依多了租户概念,这也是因为它增加很多业务系统,首先后台管理系统肯定是多租户的,这意味着如商城系统的产品管理SPU、库存…...

hive 统计各项目下排名前5的问题种类

实现指定某项目下的数据效果图如下所示: 其中 ABCDE 为前5名的问题种类,其中A问题有124个(出现了124次) 数据说明: 整个数据集 包含很多项目一个项目 包含很多问题一个问题 选项 可认为是 类别值,所有出…...

HBase 安装与基本操作指南

以下是关于 Apache HBase 安装、配置以及简单操作的详细指南: HBase 简介 Apache HBase 是一个基于 Hadoop 的分布式数据库,擅长处理大规模、结构化的海量数据。它采用行列式存储方式,与 Hadoop 和 HDFS 紧密结合,是支持大数据实…...

Spring Boot应用中的文件压缩与解压技术实践

在构建Spring Boot应用时,文件压缩与解压是处理大量数据、优化存储和传输速度的常用技术。本文旨在深入探讨Spring Boot应用中文件压缩与解压的实现方法,包括常见压缩算法的选择、Spring Boot中的实现策略以及实际应用场景中的最佳实践。 引言 随着大数…...

D69【 python 接口自动化学习】- python 基础之数据库

day69 Python 执行 SQL 语句 学习日期:20241115 学习目标: MySQL 数据库﹣- Python连接redis 学习笔记: redis数据库的用途 使用Python访问redis数据库 使用Python对redis数据库进行读写操作 总结 1. redis是一款高性能的键…...

410. 分割数组的最大值

目录 题目解法 题目 给定一个非负整数数组 nums 和一个整数 k &#xff0c;你需要将这个数组分成 k 个非空的连续子数组&#xff0c;使得这 k 个子数组各自和的最大值 最小。 返回分割后最小的和的最大值。 子数组 是数组中连续的部份。 解法 int splitArray(vector<in…...

Azure pipeline 通过git命令修改文件

步骤及解释 设置git用户名 git config --global user.email "useremail" git config --global user.name "username" 获取branch $branch "$(Build.SourceBranch)" -replace "refs/heads/" "$(Build.SourceBranch)"&a…...

LeetCode74. 搜索二维矩阵(2024冬季每日一题 6)

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…...

BPMN 2.0详细介绍

BPMN 2.0&#xff08;Business Process Model and Notation 2.0&#xff09;是一个标准化的图形化建模语言&#xff0c;用于描述业务流程和工作流。它是由 Object Management Group (OMG) 制定的&#xff0c;旨在提供一种标准化的方式&#xff0c;帮助企业和开发者清晰地建模、…...

web——upload-labs——第四关——.htaccess文件绕过

先尝试直接上传一个普通的一句话木马 显示此文件不允许上传&#xff0c;这道题并没有提示不允许上传什么后缀的文件&#xff0c;经过尝试&#xff0c;基本上所有后缀能够被解析为php语句执行的文件都不能成功上传。试试正常的图片能不能上传&#xff1a; 我们再来试试图片马能不…...

36.矩阵格式的等差数列 C语言

第一行&#xff0c;每个数差2&#xff0c;之后是3、4、5&#xff0c;最后一行是10 仅仅是练习目的 #define _CRT_SECURE_NO_WARNINGS // 禁用在 Visual Studio 中有关不安全函数的警告 #include <stdio.h> // 引入标准输入输出库int main() {int i; // 外层循环的变量…...

Java 语言的强大特性

一、面向对象 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;Java 完全遵循这一范式&#xff0c;并具备封装、继承和多态三大核心特性。 1. 封装 封装是将数据和操作封装在类中&#xff0c;通过访问修饰符&#xff08;如 public、private、protected&am…...

ElementUI的日期组件中禁止选择小时、分钟、秒

分不同版本&#xff0c;如果你是elementplus&#xff0c;也就是vue3版本&#xff0c;你就直接可用方案1&#xff1b;如果你是vue2版本&#xff08;扒拉了一下源码&#xff0c;组间不支持&#xff09;&#xff0c;方案2、3都行&#xff0c;具体看自己需求。 1、‌使用:disable-…...

4.2 Android NDK 基础概念

1 JavaVM和JNIEnv JNI 定义了两个关键数据结构&#xff0c;JavaVM和JNIEnv。这两者本质上都是指向函数表指针的指针。&#xff08;在 C 版本中&#xff0c;它们是具有指向函数表的指针的类&#xff0c;以及指向该表的每个 JNI 函数的成员函数。&#xff09;JavaVM提供了“调用接…...

PIL包在Python图像处理中的应用

诸神缄默不语-个人CSDN博文目录 PIL&#xff08;Python Imaging Library&#xff09;是Python中一个强大的图像处理库&#xff0c;尽管其已不再更新&#xff0c;但其后续版本Pillow提供了更多的功能和更好的兼容性。本文将重点介绍Pillow库中的open()函数、fromarray()函数以及…...

ArcGIS Pro ADCore DAML

ArcGIS Pro ADCore DAML ArcGIS Pro SDK - ADCore.daml https://download.csdn.net/download/szy13323042191/89997391...

Clip结合Faiss+Flask简易版文搜图服务

一、实现 使用目录结构&#xff1a; templates ---upload.html faiss_app.py 前端代码&#xff1a;upload.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&quo…...

【机器学习】数学知识:欧式距离(Euclidean Distance)和曼哈顿距离(Manhattan Distance)

欧式距离和曼哈顿距离是两种常用的距离度量方法&#xff0c;用于衡量两点之间的相似性或差异性。它们在几何分析、数据挖掘、机器学习等领域有广泛应用。 1. 欧式距离 概念 欧式距离&#xff08;Euclidean Distance&#xff09;是最常见的直线距离度量方法&#xff0c;源于欧…...

Redis 概 述 和 安 装

安 装 r e d i s: 1. 下 载 r e dis h t t p s : / / d o w n l o a d . r e d i s . i o / r e l e a s e s / 2. 将 redis 安装包拷贝到 /opt/ 目录 3. 解压 tar -zvxf redis-6.2.1.tar.gz 4. 安装gcc yum install gcc 5. 进入目录 cd redis-6.2.1 6. 编译 make …...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...