Ansible基本介绍与模块使用

目录

引言

一、Ansible简介

(一)基本概述

(二)主要特点

二、Ansible安装及基本组件

(一)yum安装

(二)编译安装

(三)基本配置信息

1.主配置文件

2.主机清单

3.角色目录

(四)Ansible相关工具

1.ansible临时工具

2.定义主机组

3.验证

三、模块

(一)Command 模块

(二)shell模块

(三)Script模块

(四)copy模块

(五)Get_url 模块

(六)Fetch 模块

(七)File模块

(八)stat模块

(九)unarchive 模块

(十)Archive模块

(十一)Cron 模块

(十二)Yum和 Apt 模块

(十三)Service 模块

(十六)mount模块

(十四)User 模块

(十五)Group 模块

(十六)Lineinfile 模块

(十七)replace 模块

(十八)setup模块


引言

在当今快速发展的IT环境中,自动化已成为运维工作的重要组成部分。Ansible作为一款强大的IT自动化工具,凭借其简洁易用的特性、无需客户端代理的架构以及丰富的模块库,逐渐成为众多企业和开发者青睐的首选解决方案。本文将带您深入探索Ansible的魅力所在,并通过实例了解如何使用它来简化和优化日常运维任务

一、Ansible简介

(一)基本概述

Ansible 是一款开源的 IT 自动化工具,主要用于配置管理、应用部署、任务执行以及多服务器间的协调工作。它由 Michael DeHaan 在 2012 年创建,并于 2015 年被 Red Hat 公司收购,目前是 Red Hat Ansible Automation Platform 的核心组件。

(二)主要特点

Ansible 的主要特点包括

简单易用:基于 YAML 格式的 playbook 定义任务,直观且易于理解。

无代理架构:通过 SSH 连接直接在远程主机上执行任务,无需在目标机器上安装任何代理软件或守护进程。

模块化设计:提供了大量的内置模块,覆盖了操作系统配置、网络设备管理、云计算服务操作等众多领域。用户也可以自定义模块来满足特定需求。

幂等性:许多 Ansible 模块都具有幂等性,即无论执行多少次,只要系统状态达到预期,都不会再做更改,确保了系统的稳定性。

库存管理(Inventory):Ansible 使用 inventory 文件管理要操作的目标主机列表,可以灵活地根据组(groups)和主机变量进行运维操作。

角色(Roles):为了代码复用和组织结构清晰,Ansible 提供了角色的概念,用于将一组相关的任务、文件和模板打包在一起。

动态_inventory:支持从各种源获取动态主机信息,如 EC2 API、OpenStack 或者 CMDB 系统。

安全传输:通过使用 SSH 密钥对等方式保证数据的安全传输。

扩展性强:除了丰富的官方模块库,Ansible 还有一个活跃的社区,不断开发新的模块和插件以支持更多的功能。

一键回滚:部分高级特性如 ansible-bender 支持容器镜像构建时的一键回滚。

二、Ansible安装及基本组件

使用yum安装,或使用python进行编译安装

(一)yum安装

由于本地yum源中并没有Ansible的安装包,需要先下载epel源,或其它源来进行安装

yum  install epel-release.noarch -y   #先下载epel源

yum  install ansible  -y                       #下载ansible

使用ansible  --version命令查看版本信息

(二)编译安装

由于centos7自带的python环境版本比较低,需要进行升级

首先需要升级python以及编译安装所需环境

yum  install wget zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make zlib zlib-devel libffi-devel python3-devel epel-release -y

下载源码包

wget https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tgz

yum  install  -y  python-simplejson  python-paramiko  python-ecdsa  python-markupsafe python-yaml python-jinja2 python-pycrypto python3-setuptools

./configure --prefix=/usr/local/python

(三)基本配置信息

配置文件

/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文 件

/etc/ansible/hosts 主机清单

/etc/ansible/roles/ 存放角色的目录

1.主配置文件

打开/etc/ansible/ansible.cfg文件

[defaults]
'包含Ansible的全局默认设置,如日志文件位置、模块搜索路径、连接超时时间等'

[inventory]
'关于如何解析和管理主机清单文件的设置,比如库存插件的类型、是否允许动态库存等'

[privilege_escalation]
'与权限提升相关的设置,例如sudo或su策略、密码询问等'

[paramiko_connection]
'若使用Paramiko作为连接方式,在此定义相关参数。Paramiko是一个纯Python实现的SSHv2协议库'

[ssh_connection]
'有关通过SSH连接到远程主机的配置选项,包括控制并发连接数、压缩传输数据等'

[persistent_connection]
'关于持久连接的相关设置,这种连接可以复用已建立的SSH会话以提高执行效率'

[accelerate]
'Ansible加速器相关配置,用于在代理服务器上部署加速器以提高网络性能'

[selinux]
'与SELinux安全上下文相关的设置,确保在执行任务时对SELinux标签进行正确处理'

[colors]
'Ansible输出的颜色主题设置,便于用户在终端查看更易读的彩色输出信息'

[diff]
'针对任务执行前后差异对比的设置,启用后可在更改文件或模板时显示详细的差异内容'

主要查看一下defaults的基本配置

inventory
#指定默认的主机清单文件位置,用于定义Ansible要管理的主机列表。
library
#自定义模块库路径,如果需要使用非标准模块,可以在这里指定额外的模块存放目录。
module_utils
#定义自定义模块辅助工具(Module Utilities)的位置。
remote_tmp 和 local_tmp
#分别设置远程主机和本地主机上临时文件的存储路径。
plugin_filters_cfg
#指定插件过滤器配置文件的路径。
forks
#设置并发执行任务的最大数量,即同时控制多少台主机。
poll_interval
#设置轮询间隔时间,当Ansible等待命令或任务在远程主机上完成时,每隔多久检查一次状态。
sudo_user
#默认sudo使用的用户名,如果不指定则默认为root。
ask_sudo_pass 和 ask_pass
#控制是否在运行需要sudo或直接登录密码的任务时询问密码,默认为True。
transport
#指定连接方式,默认为smart,根据实际情况选择SSH或其他方式。
remote_port
#远程主机SSH服务的端口号,默认为22。
module_lang 
#与模块执行的语言环境相关,前者指定了模块运行的语言(通常为C)
module_set_locale
#后者控制是否在执行模块时设置相应的locale。

2.主机清单

用于定义和组织Ansible要管理的远程主机列表。在这个文件中,可以按照组(groups)或单个主机的方式列出目标主机,并可为每个组或主机指定特定的变量。以下是基本的可配置参数

ansible_ssh_host 
#将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port 
#ssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口

ansible_ssh_user 
#默认的 ssh 用户名

ansible_ssh_pass 
#ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)

ansible_sudo_pass 
#sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)

ansible_sudo_exe (new in version 1.8)
#sudo 命令路径(适用于1.8及以上版本)

ansible_connection 
#与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 
#paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 
#来判断'ssh' 方式是否可行.

ansible_ssh_private_key_file
#ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.

ansible_shell_type 
#目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为'csh' 或 'fish'.

ansible_python_interpreter 
#目标主机的python路径.适用于系统中有多个Python, 或者命令路径不是"/usr/bin/python".

3.角色目录

/etc/ansible/roles/ 是Ansible 角色(Role)的默认存放位置。Ansible 角色是一种组织和复用任务、变量、文件、模板和其他资源的标准方法,它有助于保持代码结构清晰,并在多个项目间共享配置

在 /etc/ansible/roles/ 目录下,每个子目录都代表一个角色,其结构通常如下:

├── role1
│   ├── defaults
│   │   └── main.yml  # 默认变量文件
│   ├── files        # 需要复制到远程主机的文件
│   ├── handlers     # 定义处理程序的任务文件
│   ├── meta         # 角色元数据信息,如依赖的角色列表
│   ├── tasks        # 角色的任务列表
│   ├── templates    # Jinja2 模板文件
│   ├── tests        # 测试脚本和数据
│   ├── vars         # 角色特定变量文件
│   └── README.md    # 角色的文档说明
├── role2
│   ...               # 类似于 role1 的结构
└── ...

(四)Ansible相关工具

/usr/bin/ansible

#主程序,临时命令执行工具

/usr/bin/ansible-doc

#查看配置文档,模块功能查看工具,相当于man ansible-doc -l |grep 关键字 具体模块名字

/usr/bin/ansible-playbook

#定制自动化任务,编排剧本工具,相当于脚本

/usr/bin/ansible-pull

#远程执行命令的工具

/usr/bin/ansible-vault

#文件加密工具

/usr/bin/ansible-console

#基于Console界面与用户交互的执行工具

/usr/bin/ansible-galaxy

#下载/上传优秀代码或Roles模块的官网平台

1.ansible临时工具

执行一次性操作,其语法为

ansible    <host-pattern>            [-m module_name]     [-a args]
命令      主机或者清单中的组         -m 指定模块      -a  执行的任务

选项作用
--version显示版本
-m module指定模块,默认为command
-v   详细过程 -vv -vvv更详细
--list-hosts显示主机列表,可简写 --list
-C, --check检查,并不执行
-T, --timeout=TIMEOUT执行命令的超时时间,默认10s
-k, --ask-pass提示输入ssh连接密码,默认Key验证
-u, --user=REMOTE_USER执行远程执行的用户,默认root
-b, --become  代替旧版的sudo 切换
--become-user=USERNAME 指定sudo的runas用户,默认为root
-K, --ask-become-pass提示输入sudo时的口令
-f FORKS, --forks FORKS     指定并发同时执行ansible任务的主机数

2.定义主机组

定义一个主机清单,可以对多个主机同时进行操作,在/etc/ansible/hosts文件中添加主机组

语法格式为:

[组名]

ip/域名

……

在文件末尾添加下图信息

[host]

#这个组包含了两个具体的 IP 地址:192.168.83.40 和 192.168.83.50。
#当你执行针对 [host] 组的 Ansible 命令时,这些主机都会受到影响。

[hosts]

#这个组包含了一个范围表达式:192.168.83.[45:50]。
#这是一个主机列表扩展格式,表示从 192.168.83.45 到 192.168.83.50 的一系列主机

 可以使用list参数列出主机

3.验证

ansible默认使用ssh协议连接,所以需要将ssh协议作为客户端配置文件的/etc/ssh/ssh_config中第35行取消注释,将默认的ask改为no,取消公钥验证

这里进行远程连接时还需要输入密码,且同组之中的主机密码必须相同

将ansible的主配置文件中的71行取消注释,不验证密码

Ansible 在首次连接到一个新主机时不会要求用户手动确认其 SSH 主机密钥,而是直接接受任何提供的密钥。

这可以提高自动化任务执行的速度和流程,但在安全性上有所牺牲,因为它可能导致受到中间人攻击的风险增加

建议恢复默认设置,使用ssh-keygen生成公钥验证,进行免密登录

如何使用免密登录,点击下方链接进行查看

ssh远程登录协议-CSDN博客

设置完毕后,就可以直接使用ansible工具了

ansible工具还支持通配符,条件匹配等

三、模块

Ansible 模块是 Ansible 自动化运维工具的核心组件,它们是可重用的、幂等性的代码单元,执行特定的任务并报告状态。每个模块都设计为解决一个具体的系统管理任务,例如安装软件包、管理用户账户、配置服务或处理文件系统操作。

可以使用ansible-doc命令查看支持哪些模块以及模块的详细信息

使用ansible-doc  模块名称  查看某一个模块的详细信息及 使用方法



 

(一)Command 模块

功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项

注意:此命令不支持 $VARNAME < > | ; & 等,可以用shell模块实现

注意:此模块不具有幂等性

比如在定义的host组中所有的主机的/opt目录下,建立test文件

可以在配置文件中修改默认使用的模块

(二)shell模块

功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, >

注意:此模块不具有幂等性

(三)Script模块

功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)

注意:此模块不具有幂等性

(四)copy模块

功能:从ansible服务器主控端复制文件到远程主机

注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件

相关语句

src              #代表源文件路径
dest            #代表文件落地路径
owner         #属主
group          #属组
mode          #代表权限
backup        #如果复制时有同名文件会先备份再复制,只在源文件做修改后生效

content       #指定内容,直接生成目标文件

当文件内容修改后需要再次copy到远端,建议开启备份功能

指定内容建立文件

(五)Get_url 模块

功能: 用于将文件从http、https或ftp下载到被管理机节点上

相关语句

url        #下载文件的URL,支持HTTP,HTTPS或FTP协议
dest     #下载到目标路径(绝对路径),如果目标是一个目录,就用服务器上面文件的名                  称,如果目标设置了名称就用目标设置的名称
owner  #指定属主
group  #指定属组
mode  #指定权限
force    #如果yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果否,则               只有在目标不存在时才会下载该文件

(六)Fetch 模块

功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录

来自不同远程主机的文件将会被分别存放在本地对应主机名的子目录下。

(七)File模块

file模块用于处理远程主机上的文件和目录操作。它主要用于创建、删除、重命名文件或目录,并可以设置权限、所有权等属性

path       #指定文件路径
state      #文件状态 有:新建(touch) 删除(absent) 文件夹(directory)  连接文件(link)等
src         #源文件
mode     #权限
owner    #属主
group     #属组
recurse   #递归修改目录属性

在/opt/目录下建立一个kysw.txt.文件。指定属主与属组为kysw,设置权限为755

新建目录,指定state为directory

删除文件

创建链接文件,指定路径名称为/opt/kysw-link

递归修改目录的属主与属组

ansible host -m file -a 'path=/opt/kysw.d  owner=kysw group=kysw state=recurse'

(八)stat模块

stat模块用于获取远程主机上文件或目录的详细状态信息。这个模块类似于Linux命令行工具stat,它不改变目标的状态,而是返回关于指定路径的属性,包括但不限于:

文件是否存在
文件大小
所有者和组
权限模式(如:0755)
最后访问、修改和更改的时间戳
是否为符号链接以及指向的位置(如果是符号链接的话)
文件类型(常规文件、目录、符号链接等)

常用的返回值判断

exists: 判断是否存在
isuid: 调用用户的ID与所有者ID是否匹配

(九)unarchive 模块

unarchive模块用于解压缩存档文件(如.tar、.tar.gz、.tgz、.zip等格式的文件),并将其内容展开到指定的目录。

基本参数

copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件
remote_src:和copy功能一样且互斥,yes表示在远程主机,不在ansible主机,no表示文件在ansible主机上
src:源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限

实现有两种用法:

1.将ansible主机上的压缩包传到远程主机后解压至特定目录,设置copy=yes,此为默认值,可省略

2.将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no

远程主机的/mnt目录下会生成解压后的文件

解压远程主机的压缩文件

(十)Archive模块

archive模块用于将一组文件或目录打包成一个存档文件(如.tar、.tar.gz、.zip等格式),并可选择性地将结果存放在远程主机上或者本地控制节点。

(十一)Cron 模块

cron模块用于在远程主机上管理cron定时任务。该模块允许您创建、更新或删除Cron条目,这对于自动化运维工作流程非常有用,特别是在需要确保多台服务器上的定时任务一致时

支持时间:minute(分),hour(时),day(日),month(月),weekday(周)

删除任务

(十二)Yum和 Apt 模块

yum和apt模块分别用于管理基于RHEL/CentOS系列(使用Yum或DNF包管理器)以及基于Debian/Ubuntu系列(使用Apt包管理器)的Linux系统的软件包。

常用参数

name                       所安装的包的名称
state                         present--->安装, latest--->安装最新的, absent---> 卸载软件。
update_cache          强制更新yum的缓存
conf_file                   指定远程yum安装时所依赖的配置文件(安装本地已有的包)。
disable_pgp_check  是否禁止GPG checking,只用于presentor latest。
disablerepo              临时禁止使用yum库。 只用于安装或更新时。
enablerepo               临时使用的yum库。只用于安装或更新时

使用yum模块,可以在远程主机上同时安装软件

使用yum模块安装

查看远程主机

ansible host -m yum -a 'name=* state=lastest exclude=kernel*,foo*'

#升级除kernel和foo开头以外的所有包

ansible host -m yum -a 'name=httpd state=absent'              #删除

(十三)Service 模块

service模块的作用是管理远程主机上的服务

常用参数

name参数           #指定需要操作的服务名称,比如 nginx。
state参数            #指定服务的状态,可用值有 started(开启)、stopped(关闭)、restarted(重启)、reloaded(重新加载配置文件)。
enabled参数       #指定是否将服务设置为开机启动项, yes表示设置为开机启动,no不设置

比如管理远程主机上刚安装的nginx服务

(十六)mount模块

mount模块用于管理远程主机上的文件系统挂载。这个模块可以挂载、卸载或重新挂载文件系统,并且能够检查当前的挂载状态

ansible  host  -m mount -a 'path=/mnt fstype=xfs opts=noatime state=unmounted'

#解挂载

ansible host -m mount -a 'src=192.168.83.40:/data/wordpress path=/mnt opts="_netdev" state=mounted'
#永久卸载
ansible host -m mount -a 'src=192.168.83.40:/data/wordpress path=mnt state=absent'

#解除永久挂载

(十四)User 模块

user模块用于管理远程主机上的用户账户。它可以创建、修改或删除用户,以及设置用户的密码、SSH密钥、sudo权限等属性。

comment        #用户的描述信息
createhome    #是否创建家目录
force               #在使用state=absent时, 行为与userdel –force一致.
group             #指定基本组
groups            #指定附加组,如果指定为(groups=)表示删除所有组
home              #指定用户家目录
move_home   #如果设置为home=时, 试图将用户主目录移动到指定的目录
name               #指定用户名
non_unique      #该选项允许改变非唯一的用户ID值
password        #指定用户密码,使用 SHA512 hash
remove            #在使用state=absent时, 行为是与userdel –remove一致
shell                 #指定默认shell
state                #设置帐号状态,不指定为创建,指定值为absent表示删除
system            #当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid                   #指定用户的uid
update_ password 
  always      如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always
  on_create   如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定

示例:

(十五)Group 模块

group 模块用于在远程主机上管理用户组。这个模块可以创建、更新或删除系统中的用户组

查看组文件

删除组

(十六)Lineinfile 模块

lineinfile 模块用于管理远程主机上的文本文件,并确保该文件包含或不包含特定的一行内容。这个模块常用来修改配置文件,确保某个配置项的存在、更新或删除

regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。

常用关键字

path                #指定要操作的文件
regexp            #使用正则表达式匹配对应的行
line                 #修改为新的内容
insertafter      #将文本插入到“指定的行”之后
insertbefore   #将文本插入到“指定的行”之前
state              #删除对应的文本时,需要state=absent
backrefs        #1.支持后向引用、2.当未匹配到内容则不操作文件
backup           #是否在修改文件之前对文件进行备份
create            #当要操作的文件并不存在时,是否创建对应的文件

比如:使用ansible将所有远程主机的selinux设置为默认关闭状态

删除文件中指定的内容

(十七)replace 模块

replace 模块用于查找并替换远程主机上的文本文件中的指定内容。这个模块不同于 lineinfile 模块,它根据正则表达式进行查找和替换,可以处理多行匹配的情况

path                 # 文件路径
regexp             # 要被替换的正则表达式模式
replace            # 替换为的新内容
backup            # 可选参数,如果设置为yes,则在修改文件前创建一个备份

将selinux配置文件中的disabled修改为enforcing

(十八)setup模块

setup模块用于收集远程主机的信息。当执行 ansible <hostname> 或 ansible-playbook -i inventory_file playbook.yml(其中没有明确指定执行的模块)时,Ansible 默认会运行 setup 模块来获取目标主机的基本信息。

这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度

在host组中只有两台机器,就达到1664行,如果主机较多,可能会影响本地主机的运行,可以使用filter参数来指定查看远端主机信息

ansible  [主机组]  -m setup -a  "fiter=参数"

例如查看远端主机的主机名

ansible_all_ipv4_addresse仅显示ipv4的信息
ansible_devices仅显示磁盘设备信息
ansible_distribution显示是什么系统,例:centos,suse等
ansible_distribution_version仅显示系统版本
ansible_machine显示系统类型,例:32位,还是64位
ansible_ethO仅显示eth0的信息
ansible_hostname仅显示主机名
ansible_kernel仅显示内核版本
ansible_lvm显示lvm相关信息
ansible_memtotal_mb显示系统总内存
ansible_memfree_mb显示可用系统内存
ansible_memory_mb详细显示内存情况
ansible_swaptotal_mb显示总的swap内存
ansible_swapfree_mb显示swap内存的可用内存
ansible_mounts显示系统磁盘挂载情况
ansible_processor显示cpu个数(具体显示每个cpu的型号)
ansible_processor_vcpus显示cpu个数(只显示总的个数)
ansible_python_version显示python版本

所收集的信息会被存储在变量中,这些变量可以在后续的任务中作为条件判断或者动态生成配置文件内容的基础

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

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

相关文章

【Linux】自动化构建工具-make/Makefile

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. 认识make/Makefile3. 了解make/Makefile原理3.1 依赖关系和依赖方法3.2 make检测的顺序3.3 PHONY:XXX 4. makefile内置符号 1. 前言 在上一篇中已经了解了【Linux】编译器-gcc/g使用&#xff0c;这次来一起…

01|模型IO:输入提示、调用模型、解析输出

Model I/O 可以把对模型的使用过程拆解成三块&#xff0c;分别是输入提示&#xff08;对应图中的Format&#xff09;、调用模型&#xff08;对应图中的Predict&#xff09;和输出解析&#xff08;对应图中的Parse&#xff09;。这三块形成了一个整体&#xff0c;因此在LangCha…

idea将非UTF-8的properties修改为UTF-8编码的文件

需求背景 由于项目初始化时&#xff0c;properties文件的编码格式为ASCII编码格式&#xff0c;此时用idea打开该文件会默认展示UTF-8的编码内容&#xff0c;其中汉字可以正常展示&#xff0c;但是使用notepad打开却依旧时ASCII编码格式 idea配置 打开idea-setting-editor-f…

TCP - 传输控制协议

TCP - 传输控制协议 是一种面向连接的可靠传输协议。 特点&#xff1a; TCP是面向连接&#xff08;虚连接&#xff09;的传输层协议。 每一条TCP连接有且只能有两个端点。 可靠、有序、无丢弃和不重复。 TCP协议提供全双工通讯。 发送缓存 存放发送方TCP准备发送的数据。T…

Springboot笔记-01

简化spring应用开发&#xff0c;约定大于配置 简化Spring应用开发的一个框架&#xff1b; 整个Spring技术栈的一个大整合&#xff1b; J2EE开发的一站式解决方案&#xff1b; 优点&#xff1a; 快速创建独立运行的spring项目以及于主流框架集成 使用嵌入式的Servlet容器&#x…

Reactor线程模型

线程模型 一、背景1.socket网络通信2.IO模型与线程模型3.线程模型分类3.1 阻塞模型3.2 Reactor模型3.3 Proactor模式 二、阻塞模型1.代码示例 三、Reactor模型1.单Reactor单线程1.1 处理过程1.2 优缺点1.3 代码示例 2.单Reactor多线程2.1 处理机制2.2 优缺点 3.主从Reactor3.1 …

深度学习_卷积

卷积 卷积&#xff08;Convolution&#xff09;是数学和计算机科学中的一个重要概念&#xff0c;特别在信号处理和图像处理中应用广泛。在信号处理领域&#xff0c;卷积是两个函数之间的一种数学操作&#xff0c;它表示两个函数的重叠部分的积分量。 在图像处理中&#xff0c…

JavaScript数组排序sort自定义函数不生效

背景 刷LeetCode时&#xff0c;遇到一道简单的数组排序题&#xff1a; 问题 想着直接用js的数组sort自定义排序即可&#xff0c;奈何测试用例运行总是不通过&#xff0c;返回的一直都是原数组。 代码排查 复制代码到Firefox浏览器控制台运行&#xff0c;结果输出的是正确结果&a…

搭建Hadoop集群(完全分布式运行模式)

目录 一、准备模板机(最小化安装)二、配置一台纯净的模板机修改主机名固定IP地址通过yum安装方式安装必要的软件关闭防火墙且禁止自启修改hosts映射文件创建普通用户 并让他能用sudo命令在/opt下创建software和module完成 三、搭建完全分布式运行模式3.1克隆第一台机器hadoop10…

基于PCA(主成分分析)的人面识别,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

Vue学习日记 Day7 —— json-server工具、基于VueCli自定义创建项目、postcss插件

一、前一天Vuex总结 1、state作用&#xff1a;存放数据定义&#xff1a;state:{//数据 }使用&#xff1a;//放在data下(1)根节点直接访问this.$store.state.数据名(2)模块直接访问this.$store.state.模块名.数据名(3)根节点辅助函数mapState([所需要的数据])(4)模块辅助…

JDK21虚拟线程

目录 虚拟线程 话题 什么是平台线程&#xff1f; 什么是虚拟线程&#xff1f; 为什么要使用虚拟线程&#xff1f; 创建和运行虚拟线程 使用线程类和线程创建虚拟线程。生成器界面 使用Executor.newVirtualThreadPerTaskExecutor&#xff08;&#xff09;方法创建和运行…

【一】【单片机】有关LED的实验

点亮一个LED灯 根据LED模块原理图&#xff0c;我们可以知道&#xff0c;通过控制P20、P21...P27这八个位置的高低电平&#xff0c;可以实现D1~D8八个LED灯的亮灭。VCC接的是高电平&#xff0c;如果P20接的是低电平&#xff0c;那么D1就可以亮。如果P20接的是高电平&#xff0c;…

CSS基础属性(学习笔记)

一、CSS介绍 CSS即层叠样式表/级联样式表&#xff0c;简称样式表 html&#xff1a;写网页结构内容 css&#xff1a;写网页样式 实现了内容与表现的分离&#xff0c;提高了代码的重用性和维护性 CSS注释不被浏览器解析&#xff0c;给开发人员一个标注 快捷键&#xff1a;ctrl/ 语…

YOLOv5独家改进:block改进 | RepViTBlock和C3进行结合实现二次创新 | CVPR2024清华RepViT

💡💡💡本文独家改进:CVPR2024 清华提出RepViT:轻量级新主干!从ViT角度重新审视移动CNN,RepViTBlock和C3进行结合实现二次创新 改进结构图如下: 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创…

FTP文件传输协议

FTP 文章目录 FTP1. ftp简介2. ftp架构3. ftp数据连接模式4. 用户认证5. vsftpd5.1 vsftpd安装5.2 配置匿名用户ftp5.2.1上传&#xff08;下面使用的是FileZilla软件&#xff09;5.2.2下载5.2.3创建5.2.4删除 5.3配置本地&#xff08;系统&#xff09;用户ftp5.3.1上传5.3.2下载…

Qt教程 — 3.4 深入了解Qt 控件:Input Widgets部件(3)

目录 1 Input Widgets简介 2 如何使用Input Widgets部件 2.1 Dial 组件-模拟车速表 2.2 QScrollBar组件-创建水平和垂直滚动条 2.3 QSlider组件-创建水平和垂直滑动条 2.4 QKeySequenceEdit组件-捕获键盘快捷键 Input Widgets部件部件较多&#xff0c;将分为三篇文章介绍…

网络基础知识-DNS与DHCP+网络规划与设计故障诊断+嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记&#xff0c;未经本人许可&#xff0c;请勿转载&#xff0c;如发现本笔记内容的错误还望各位不吝赐教&#xff08;笔记内容可能有误怕产生错误引导&#xff09;。 本章的主要内容见下图&#xff1a; 本章知识和计算机…

创意二维码营销案例:帕森斯设计学院在巴黎市中心搭建“沙滩度假地”

作为一个专业的艺术设计学院&#xff0c;帕森斯设计学院&#xff08;Parsons School of Design, The New School&#xff09;以其卓越的教学质量和创新的设计理念享誉全球。 每年的夏天&#xff0c;帕森斯设计学院都会举办一个暑期短期项目&#xff0c;面向全球学生&#xff0…

AI时代,Matter如何融入与服务中国智能家居市场,助力中国企业出海?

随着智能家居产业的飞速发展&#xff0c;丰富多样的智能家居产品为消费者带来了便利的同时&#xff0c;因为不同品牌、不同产品之间的协议与标准不统一&#xff0c;导致消费者体验产生割裂&#xff0c;本来想买个“智能”家居&#xff0c;结果买了个“智障”家居&#xff0c;这…