Ansible自动化工具
一、Ansible概述
1.1 什么是Ansible
Ansible 是一个开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它让你可以通过编写简单的 YAML 文件(剧本,Playbooks),轻松管理和配置多个服务器。Ansible 的特点是无代理架构,它通过 SSH 连接到远程主机,不需要在目标服务器上安装任何软件。
除了 Ansible,常用的 IT 自动化和配置管理工具还有很多,如Chef、Puppet、SaltStack
1.2 Ansible 的特性
-
批量管理与部署 Ansible 能够轻松管理数以千计的主机。管理员不再需要逐一登录每个主机执行操作,而只需在控制节点上执行命令,Ansible 会自动将这些命令应用于所有目标主机。这极大提高了运维效率,尤其在处理大规模基础设施时。
-
模块化架构
Ansible 采用基于模块的工作机制。Ansible 本身并不执行任务,而是通过调用各种模块来完成具体操作。例如:每个模块都是功能独立的,可以针对不同的任务进行调用,使得 Ansible 的功能非常强大和灵活。
- copy 模块用于将文件从控制节点复制到远程主机。
- service 模块用于管理服务的启动、停止和重启。
-
无代理特性(Agentless)Ansible 的一大亮点是其无代理的架构。用户只需在控制节点上安装 Ansible,而不需要在被管理的每个主机上安装任何额外的服务或代理。Ansible 通过 SSH 连接到远程主机,执行命令并返回结果。这使得 Ansible 的部署和使用变得异常简单。
- 幂等性(Idempotence)Ansible 的许多模块具有幂等性,这意味着多次执行同一操作不会改变系统的最终状态。例如,如果一个服务已经在运行,执行启动服务的命令不会产生任何副作用。这使得 Ansible 在自动化管理时更加安全可靠。
1.3 Ansible 的工作流程
- 解析 Playbook:Ansible 首先解析 Playbook 文件,读取其中的 hosts、tasks、variables 等信息。
- 选择目标主机:根据 Inventory 文件选择符合条件的目标主机。
- 建立 SSH 连接:通过 SSH 与目标主机建立连接,使用提供的用户凭证(如密钥或密码)
- 执行任务:Ansible 按照 Playbook 中的顺序执行任务,每个任务会在目标主机上执行相应的模块(如 apt、yum、copy 等)。
- 处理结果:每个任务执行完后,Ansible 会收集返回的结果并进行处理,包括成功、失败或改变的状态。
1.4 Ansible 特点
-
简单部署
Ansible 的部署过程非常简单,只需在控制节点上安装 Ansible,远程主机无需做任何操作。 -
基于 SSH 的管理
默认情况下,Ansible 使用 SSH 协议连接和管理远程设备,这种方式安全可靠。 -
集中化管理
Ansible 提供主从架构,用户可以集中管理多个节点,降低了运维复杂性。 -
功能强大与扩展性
Ansible 的配置简单,同时功能强大,支持用户自定义模块和插件,能够满足各种复杂的自动化需求。 -
通过 API 和自定义模块扩展
用户可以通过 API 和 Python 自定义模块轻松扩展 Ansible 的功能,以适应特定的业务需求。 -
使用 Playbooks
Playbooks 允许用户定制复杂的配置和状态管理,支持更灵活的自动化方案。 -
支持云计算和大数据环境
Ansible 对云计算平台(如 AWS、Azure 等)和大数据框架(如 Hadoop、Spark 等)有很好的支持,能够有效管理云基础设施。
二、Ansible
在进行 Ansible 的使用之前,我们需要在管理端安装 Ansible。假设我们的管理端 IP 为 192.168.10.23
,被管理端 IP 分别为 192.168.10.14
和 192.168.10.15
。
2.1 管理端安装 Ansible
首先,安装 EPEL(Extra Packages for Enterprise Linux)源,然后安装 Ansible:
# 安装 EPEL 源
yum install -y epel-release# 安装 Ansible
yum install -y ansible
2.2 Ansible 目录结构
安装完成后,Ansible 的主要目录结构如下:
2.3 配置主机清单
在 /etc/ansible
目录中配置主机清单 hosts
,定义需要管理的主机:
cd /etc/ansible
vim hosts# 配置组名和被管理主机
[webservers]
192.168.10.14[dbservers]
192.168.10.15
2.4 配置密钥对验证
为了实现免密登录,我们需要生成 SSH 密钥对并将公钥复制到被管理的主机上:
# 生成 SSH 密钥对
ssh-keygen -t rsa # 一路回车# 将公钥复制到被管理主机
sshpass -p 'your_password' ssh-copy-id root@192.168.10.14
sshpass -p 'your_password' ssh-copy-id root@192.168.10.15
三、Ansible 命令行模块
Ansible 的命令行格式如下:
ansible <组名> -m <模块> -a <参数列表>
使用 ansible-doc
可以使用 ansible-doc
命令列出所有已安装的模块:
ansible-doc -l # 列出所有模块
3.1 command 模块
command
模块用于在远程主机执行命令,不支持管道和重定向等 shell 特性。
# 查看 command 模块的描述
ansible-doc -s command# 在指定 IP 执行命令
ansible 192.168.10.14 -m command -a 'date'
ansible webservers -m command -a 'date'
常用参数:
chdir
:在远程主机上运行命令前切换到指定目录。creates
:判断指定文件是否存在,如果存在,则不执行后续操作。removes
:判断指定文件是否存在,如果存在,则执行后续操作。
ansible all -m command -a "chdir=/home ls ./"
3.2 shell 模块
shell
模块用于在远程主机执行命令,支持管道等 shell 特性。
# 查看 shell 模块的描述
ansible-doc -s shell# 使用 shell 模块执行命令
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}")'
3.3 cron 模块
cron
模块用于在远程主机定义任务计划。
# 查看 cron 模块的描述
ansible-doc -s cron# 添加计划任务
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="jqg crontab"'# 列出计划任务
ansible webservers -a 'crontab -l'# 移除计划任务
ansible webservers -m cron -a 'name="jqg crontab" state=absent'
3.4 user模块 (用户管理)
常用参数:
name
: 用户名,必选state
: 创建或删除账号 (present
创建,absent
删除)system
: 是否为系统账号 (yes|no
)uid
: 用户IDgroup
: 用户基本组shell
: 默认使用的shellmove_home
: 移动现有的家目录 (yes|no
)password
: 用户密码(建议加密)comment
: 用户注释信息remove
: 删除账号时是否删除家目录 (yes|no
)
ansible dbservers -m user -a 'name="test01"' # 创建用户test01
ansible dbservers -m user -a 'name="test01" state=absent' # 删除用户test01
3.5 group模块 (用户组管理)
常用参数:
name
: 组名gid
: 组IDsystem
: 是否为系统组 (yes|no
)
ansible dbservers -m group -a 'name=kgc gid=1111 system=yes' # 创建kgc组
ansible dbservers -m user -a 'name=jqg uid=1111 system=yes group=kgc' # 将jqg用户添加到kgc组
3.6 copy模块
文件复制
常用参数:
dest
: 目标路径(绝对路径)src
: 源文件路径mode
: 文件权限owner
: 文件属主group
: 文件属组content
: 复制的内容(不能与src一起使用)
ansible dbservers -m copy -a 'src=/home/cs.txt dest=/home/cs.txt owner=root mode=640'
ansible dbservers -m copy -a 'content="helloworld" dest=/home/hello.txt'
3.7 file模块 (文件属性设置)
常用参数:
path
: 文件路径owner
: 文件属主group
: 文件属组mode
: 文件权限state
: 文件状态 (present
/absent
/link
)
ansible dbservers -m file -a 'owner=jqg group=kgc mode=644 path=/home/hello.txt' # 修改文件权限
ansible dbservers -m file -a 'path=/home/hello.link src=/home/hello.txt state=link' # 创建链接文件
ansible dbservers -m file -a "path=/home/abc.txt state=touch" #创建文件
ansible dbservers -m file -a "path=/home/abc.txt state=absent" #删除文件
3.8 hostname 模块
用于管理远程主机上的主机名
ansible dbservers -m hostname -a "name=host-jqg" #设置主机名
3.9 ping模块
用于检测远程主机的连通性
ansible all -m ping #测试连通性
3.10 yum模块
用于在远程主机上安装与卸载软件包
ansible webservers -m yum -a 'name=tree' #安装软件包
ansible webservers -m yum -a 'name=tree state=absent' #卸载软件包
3.11 service/systemd 模块
用于管理远程主机上的服务运行状态
name
: 被管理的服务名称state
: 服务的状态,started
(启动)、stopped
(停止)、restarted
(重启)enabled
: 是否设置为开机自启,yes
或no
runlevel
: 如果设定了enabled
,则定义在哪些运行目标下自启动(例如:runlevel=5
)
ansible webservers -a 'systemctl status nginx' #查看服务状态
ansible webservers -m service -a 'enabled=true name=nginx state=started' #启动服务并设置开机自启
3.12 script 模块
用于在远程主机上执行本地脚本
使用步骤:
- 创建名为
test.sh
的 shell 脚本
#!/bin/bash
echo "hello ansible from script" > /home/script.txt
- 赋予脚本执行权限
chmod +x test.sh
- 使用
ansible
命令运行脚本,针对webservers
主机组。
ansible webservers -m script -a 'test.sh'
- 检查远程主机上的输出文件
ansible webservers -a 'cat /home/script.txt'
3.13 setup 模块
用于收集远程主机的事实信息(系统详细信息)
使用步骤:
- 从
webservers
组的所有主机收集事实。
ansible webservers -m setup
- 使用
filter
选项获取dbservers
组中主机的 IPv4 地址
ansible dbservers -m setup -a 'filter=*ipv4'
四、Ansible Inventory 主机清单
在日常的运维管理中,Ansible 是一个非常强大的自动化运维工具,能简化大量的配置管理、部署和维护工作。而在 Ansible 中,Inventory(主机清单)是其核心组成部分之一,负责管理主机及其变量。本文将带你深入了解 Ansible 的 Inventory 文件如何使用,如何通过分组和变量来管理主机。
4.1 Ansible Inventory 的基本概念
Ansible 的 Inventory 是一个包含你要管理的主机和相关配置信息的文件。它允许你将主机分成不同的组,并为每个主机和组定义特定的属性和变量。
4.1.1 主机分组
在 Inventory 中,你可以将主机分组,使得同一组的主机可以共享相同的配置。这样就能对不同的主机集群进行精细化管理。
例如,以下配置定义了两个主机组:
[webservers]
192.168.192.70:2222 # 这里指定了连接端口
192.168.192.[5:7]0[dbservers]
db-[a:f].host # 匹配主机名为 db-a.host 到 db-f.host
4.1.2 使用主机列表
当你有多个相似的主机时,可以使用列表的方式来简化配置。
[webservers]
192.168.192.[5:7]0
上面的例子表示 192.168.10.12
到 192.168.10.15
的四台主机都属于 webservers
组。
4.2 定义 Inventory 变量
在 Ansible 中,除了对主机进行分组外,你还可以为主机或者主机组定义变量,这些变量可以控制远程连接的各种参数(如 IP、端口、用户、密码等)。
4.2.1 主机变量
可以为每台主机指定连接的相关信息。
[webservers]
192.168.192.60 ansible_port=22 ansible_user=root ansible_password=123456
配置表示主机 192.168.192.60 使用 root 用户和 123456 密码通过 SSH 的 22 端口连接。
4.2.2 组变量
还可以为整个组中的所有主机定义统一的变量。
[webservers:vars]
ansible_user=root
ansible_password=123456
这样配置后,webservers
组中的所有主机都会使用相同的用户名和密码
4.2.3 全局变量
为所有主机定义一些通用的变量,可以使用 [all:vars],
这会为所有主机默认使用 22 端口。
[all:vars]
ansible_port=22
4.3组嵌套
在实际应用中,可能需要通过子组来组织主机。比如,有 nginx
组和 apache
组,然后将这两个组放在一个大的组 webs
下面。
[nginx]
192.168.192.50
192.168.192.60
192.168.192.70[apache]
192.168.192.[8:9]0[webs:children] # webs 组包含了 nginx 组和 apache 组的所有主机
nginx
apache
在这个配置中,webs
组是 nginx
和 apache
两个组的父组,表示 webs
组下的所有主机即是这两个子组的所有主机。
总结
- 主机分组:将主机分为不同的组,方便管理。
- 主机与组变量:为不同的主机和主机组定义连接信息和其他配置变量。
- 组嵌套:通过
children
关键词将多个子组放在一个父组下,实现更细致的分组管理。- 变量的应用:可以为所有主机定义全局变量,也可以为单个主机或主机组指定特定变量。
五、ansible playbook 剧本
5.1 什么是 ansible playnook
Playbook 是一个 YAML 格式的脚本,用来描述一系列的任务(Tasks),这些任务会按顺序在被管理的主机上执行。通过 Playbook,用户可以轻松地定义基础设施配置或应用程序部署的步骤。
5.2 playbook 基本组成部分
Playbook 主要由以下部分组成:
- Tasks:任务,是通过调用 Ansible 模块来执行的操作。
- Variables:变量,可以让 Playbook 更加灵活。
- Templates:模板,用来动态生成配置文件等内容。
- Handlers:处理器,在某些任务发生变更后触发。
- Roles:角色,用来将任务、变量、模板等按角色进行模块化组织。
示例:创建一个playbook
---
- name: first play # Play 的名称gather_facts: false # 是否收集 facts,默认为 truehosts: webservers # 指定目标主机组remote_user: root # 在远程主机上执行任务的用户tasks: # 任务列表- name: test connection # 自定义任务名称ping: # 使用 ping 模块检查连接- name: disable selinuxcommand: '/sbin/setenforce 0' # 禁用 SELinuxignore_errors: True # 忽略错误- name: disable firewalldservice: name=firewalld state=stopped # 停止 firewalld 服务- name: install httpdyum: name=httpd state=latest # 安装 httpd- name: install configuration file for httpdcopy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf # 复制配置文件notify: "restart httpd" # 通知处理器重新启动 httpd- name: start httpd serviceservice: enabled=true name=httpd state=started # 启动 httpd 服务handlers: # 处理器定义- name: restart httpdservice: name=httpd state=restarted # 重新启动 httpd
运行playbook
使用 ansible-playbook
命令运行 Playbook:
ansible-playbook test1.yaml
常用选项:
-k
:交互输入 SSH 密码。-K
:交互输入 sudo 密码。-u
:指定远程执行的用户。--syntax-check
:检查 Playbook 语法是否正确。--list-task
:列出 Playbook 中的任务。--list-hosts
:列出 Playbook 的目标主机。--start-at-task
:从指定任务开始执行。
示例:下载httpd并启动
5.3 定义、引用变量
定义与引用变量
在 Playbook 中可以使用 vars
来定义变量,并在任务中引用它们。
在命令行定义变量
你可以通过命令行传递变量
可以通过
-e
传递一个简单的变量
需要将原先用户的uid替换掉,否则报错
5.4条件判断与循环
When 条件判断
通过 when
指令可以实现条件执行任务:
- name: shutdown hostcommand: /sbin/shutdown -r nowwhen: ansible_default_ipv4.address == "192.168.192.60" # 判断主机 IP
循环 (Loop)
可以使用 with_items
或 loop
来实现任务的循环执行:
tasks:- name: create directoriesfile:path: "{{item}}"state: directorywith_items:- /home/test1- /home/test2
或者更复杂的循环:
- name: add usersuser: name={{item.name}} state=present groups={{item.groups}}with_items:- name: test1groups: wheel- name: test2groups: root
5.5 Templates 模块
Jinja2 是基于 Python 的模板引擎,它允许通过引用变量来动态生成配置文件。在 Ansible 中,template
模块用于将 Jinja2 模板应用于 Playbook。以下是如何使用 Jinja2 模板自动化配置 Apache HTTP 服务器的示例。
①准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
vim /opt/httpd.conf.j2
Listen {{http_port}} #42行,修改
ServerName {{server_name}} #95行,修改
DocumentRoot "{{root_dir}}" #119行,修改
②修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量
vim /etc/ansible/hosts
[dbservers]
192.168.192.50 http_port=192.168.192.50 server_name=www.benet.com:80 root_dir=/var/www/html
③编写 playbook
vim apache.yaml
---
- hosts: dbserversremote_user: rootvars:- package: httpd- service: httpdtasks:- name: install httpd packageyum: name= "{{package}}" state=latest- name: install configure filetemplate: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.confnotify:- restart httpd- name: create root dirfile: path=/var/www/html state=directory- name: start httpd serverservice: name= "{{service}}" enabled=true state=startedhandlers:- name: restart httpdservice: name= "{{service}}" state=restarted
5.6 tags 标签
在 Ansible 中,可以为任务定义标签(tags
),并通过命令行参数 --tags
来控制任务的执行范围。这对于只执行特定任务或跳过某些任务非常有用。
①编写带有 Tags 的 Playbook
创建一个带有 tags
的 Playbook 文件 daemon6.yaml
:
---
- hosts: dbserversremote_user: roottasks:- name: copy filecopy: src=/opt/kgc.txt dest=/home/kgc.txttags:- copy # 仅在指定运行 'copy' 标签时执行此任务- name: touch test1 filefile: path=/home/kgc2.txt state=touchtags:- always # 无论运行哪一个标签,始终执行此任务 - name: touch test2 filefile: path=/home/kgc3.txt state=touchtags:- touch
在这个 Playbook 中,tags
允许你控制任务的执行。only
标签的任务只有在命令行显式指定时才会执行,而 always
标签表示无论执行什么标签,这个任务都会被执行。
②执行带有 Tags 的 Playbook
使用 --tags
选项只执行带有 copy 标签的任务:
只触发了 “copy”和“always” 部分内容:
如果不指定tags,则都触发
相关文章:

Ansible自动化工具
一、Ansible概述 1.1 什么是Ansible Ansible 是一个开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它让你可以通过编写简单的 YAML 文件(剧本,Playbooks),轻松管理和配置多个服务器。Ansible 的特点是无…...

Flutter Container组件
Over the past few years, I’ve been fortunate to collaborate with interior designers, and there’s a distinct flair to their approach to crafting captivating interiors. It’s not just about arranging furniture randomly; they meticulously plan layouts, sele…...

IPv6 DNS简介
IPv6网络中的每台主机都是由IPv6地址来标识的,用户只有获得待访问主机的IPv6地址,才能够成功实现访问操作。对于用户来讲,记住主机的IPv6地址是相当困难的,因此设计了一种字符串形式的主机命名机制,这就是域名系统。用…...

【Python-AI篇】数据结构和算法
1. 算法概念 1.1 什么是数据结构 存储,组织数据的方式 1.2 什么是算法 实现业务目的的各种方法和思路算法是独立的存在,只是思想,不依附于代码和程序,可以使用不同语言实现(java,python,c&a…...

VideoCLIP-XL:推进视频CLIP模型对长描述的理解
摘要 对比语言-图像预训练(CLIP)已被广泛研究并应用于众多领域。然而,预训练过程中对简短摘要文本的重视阻碍了CLIP理解长描述的能力。在视频方面,这个问题尤为严重,因为视频通常包含大量详细内容。在本文中ÿ…...

【vue】vue-router_ vue3路由管理器
代码获取 vue-router_ vue3路由管理器 ⼀、基本介绍 1. 单⻚应⽤程序介绍 1.1 概念 单⻚应⽤程序:SPA(Single Page Application)是指所有的功能都在⼀个HTML⻚⾯上实现 1.2 具体⽰例 单⻚应⽤⽹站: ⽹易云⾳乐 https://music.163.com/ 多⻚应⽤⽹…...

昇思MindSpore进阶教程--Diffusion扩散模型(上)
大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 正文 关于扩散模型(Diffusi…...

Nginx:proxy_pass指令
proxy_pass 指令在 Nginx 中是实现反向代理和负载均衡的重要指令。 一. 反向代理 在反向代理的场景下,proxy_pass 指令用于将接收到的请求转发给另一个后端服务器。后端服务器地址可以是 IP 地址加端口、域名加端口、或者一个完整的 URL。 注意事项 proxy_pass …...

【AI学习】Mamba学习(十):HiPPO总结
前面用五篇文章陆续学了HiPPO框架。 这里再进行一下总结。 总结 HiPPO,高阶多项式投影,high-order polynomial projection operators 为了解决从序列数据中建模和学习的问题,尤其是长序列,十万甚至百万长度的序列,使…...

AI编程新纪元:Cursor与V0引领的技术变革
#1024程序员节 | 征文# AI编程新纪元:Cursor与V0引领的技术变革 作为一名SAP业务顾问,虽然我懂一些ABAP开发,但是我对于前后端开发是完全不懂的,我一直对前后端开发怀有浓厚兴趣,总想着自己能开发出一些好玩的东西&…...

python——类
问:小编为什么突然开始发python?难道C语言你不行了? 废话少说,让我们进入python中的类的学习!! (一)基本知识 (1)掌握类的概念 1、类的定义: 即…...

走廊泼水节——求维持最小生成树的完全图的最小边权和
题目 思考 代码 #include <bits/stdc.h> using namespace std; const int N 6010; const int M N; int p[N], sz[N]; struct edge{int a;int b;int c;bool operator < (const edge& v) const{return c < v.c;} }e[M]; int find(int x) {if(p[x] ! x) p[x] …...

LC:动态规划-买卖股票
文章目录 121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II714. 买卖股票的最佳时机含手续费309. 买卖股票的最佳时机含冷冻期 121. 买卖股票的最佳时机 链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 使用贪心,…...

FLINK SQL 任务参数
在Flink SQL任务中,参数配置对于任务的性能和稳定性至关重要。以下是对运行时参数、优化器参数和表参数的详细解析: 一、运行时参数 运行时参数主要影响Flink作业在执行过程中的行为。以下是一些关键的运行时参数: 并行度(Para…...

HCIP——以太网交换安全(四)DHCP Snooping
目录 一、DHCP Snooping的知识点 二、DHCP Snooping实验拓扑 三、总结 一、DHCP Snooping的知识点 1.1、DHCP snooping 概述: ①DHCP Snooping使能DHCP的一种安全特性,用于保证DHCP客户端从合法的DHCP服务端获取IP地址。DHCP服务器记录DHCP客户端IP…...

k8s worker 节点关机 sts 管理的 pod 无法迁移
背景 1.28.2 版本 k8s 中的一台 worker 节点内存异常,需要关机换内存,正好可以测试一下 pod 的迁移。 发现 deployment 管理的 pod 是能够重新创建飘到其他节点上的,但是 statefulset 管理的 pod 一直处于 Terminating 状态无法迁移&#…...

排序04 视频播放建模
视频播放时长 用p拟合y,t是用户的实际观看时长,用y和p熵作为损失函数,使得p接近y。 输出z,对z做sigmoid变换。 exp(z)可以视为对播放时长的预估 视频完播 回归方法 二元分类方法 调整:预估完播率不能直接使用...

【常见大模型API调用】第三篇:清华智谱--智谱AI
1. 公司及模型介绍 智谱AI是一家由清华大学计算机系知识工程实验室的技术成果转化而来的AI知识智能技术开发商。智谱AI致力于打造新一代认知智能大模型,专注于做大模型的中国创新。 2024年1月16日,智谱AI在首届技术开放日上发布了新一代基座大模型GLM-…...

LayerSkip – Meta推出加速大型语言模型推理过程的技术
我们提出的 LayerSkip 是一种端到端的解决方案,可加快大型语言模型(LLM)的推理速度。 首先,在训练过程中,我们采用了层间丢弃技术(layer dropout),早期层间丢弃率较低,后期层间丢弃率较高。 其次…...

环境变量与本地变量(Linux)
引言 在当今的计算机技术领域,Linux操作系统以其稳定性和灵活性而广受欢迎。它不仅是服务器和开发者的首选平台,也是探索计算机科学和系统编程的宝库。在这个强大的操作系统中,环境变量与本地变量扮演着至关重要的角色,它们是管理…...

【完-网络安全】Windows防火墙及出入站规则
文章目录 防火墙入站和出站的区别域网络、专用网络、公用网络的区别 防火墙 防火墙默认状态一般是出站允许,入站阻止。 入站和出站的区别 入站就是别人来访问我们的主机,也就是正向shell的操作 出站就是反向shell,主机需要主动连接kali&am…...

Vue学习记录之十七 css中样式穿透及新特征介绍
一、scoped原理 在vue页面的css中,有一个设置为scoped,使用以后dom的节点会出现下面的规则。其实我们打完包就是一个html页面,如果不做处理,将会导致css混乱。 给HTML的DOM节点加一个不重复data属性(形如:data-v-123)来表示他的唯一性在每句css选择器的末尾(编译后的生成的…...

Nature 正刊丨海洋涡旋中常见的地下热浪和寒潮
01摘要 由于全球变暖,极端海洋温度事件变得越来越普遍,造成了灾难性的生态和社会经济影响1,2,3,4,5。尽管基于卫星观测对表层海洋热浪(MHW)和海洋寒潮(MCS)进行了广泛的研究6,7,但我们对这些极…...

代码随想录算法训练营第六十二天| prim算法,kruskal算法
训练营六十二天打卡,图论比较难,坚持下来胜利就在眼前! 53.卡码网【寻宝】 题目链接 解题过程 没做过类似的题目,跟着答案敲了一遍最小生成树 可以使用 prim算法 也可以使用 kruskal算法计算出来。prim算法 是从节点的角度 采用…...

Newstar_week1_week2_wp
week1 wp crypto 一眼秒了 n费马分解再rsa flag: import libnum import gmpy2 from Crypto.Util.number import * p 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297…...

今天我们研究一段代码(异或位运算)
let a 18 // 甲 let b 20 // 乙a a ^ b b a ^ b a a ^ b console.log("a",a) // a 20 console.log("b",b) // b 18今天我们就研究上面这一段代码,简单解释一下,初始化一个a 18 b 20, 中间经过了三次的异或之后…...

pycharm中使用ctrl+鼠标滚轮改变字体大小
文章目录 pycharm使用ctrl鼠标滚轮改变字体大小1.打开pycharm选择file2.选择setting4.选择keymap,然后再右边的输入框中输入increase进行增大字体4.鼠标选择后,点击添加鼠标快捷方式,然后设置鼠标滚轮往上增大字体。5.设置缩小字体࿰…...

【算法-动态规划】打家劫舍专题
文章目录 1.打家劫舍1.1一维数组1.2三变量法1.3双数组法 2.打家劫舍22.1双数组法2.2 三变量法 3.打家劫舍33.1动态规划3.2双变量法 4.删除相邻数字的最大分数4.1双状态数组4.2一维数组4.3三变量法 1.打家劫舍 198. 打家劫舍 - 力扣(LeetCode) 1.1一维数…...

关于技术管理者的一些思考
前 言 在软件开发领域,当一名资深工程师有机会成为一名技术管理者的时候,通常他/她的反应是什么?兴奋、担扰、无奈还是推托,具体是什么心情也许对结果并不重要,更加重要是在一刻,我们一定要问问我们内心的…...

Alpha-CLIP: A CLIP Model Focusing on Wherever You Want CVPR 2024
在原始的接受RGB三通道输入的CLIP模型的上额外增加了一个alpha通道。在千万量级的RGBA-region的图像文本对上进行训练后,Alpha-CLIP可以在保证CLIP原始感知能力的前提下,关注到任意指定区域。 GitHub - SunzeY/AlphaCLIP: [CVPR 2024] Alpha-CLIP: A CLI…...