42-Ansible-Inventory

文章目录

          • Ansible基本概述
            • 手动运维时代(原始社会)
            • 自动化运维时代
            • 自动化运维工具的优势
            • Ansible的功能及优点
          • Ansible的架构
            • Ansible的执行流程
          • 安装Ansible
            • Ansible配置文件生效顺序
          • Ansible inventory主机清单
            • Ansible基于免秘钥方式管理客户端
          • 小结
          • Ansible-Adhoc
          • ad-hoc常用模块
          • Ansible playbook
          • YAML语法

Ansible基本概述
什么是Ansible?Ansible是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。
手动运维时代(原始社会)
在之前,我们学习了如何安装nginx。但是我们使用的是yum安装的方式,在以前,运维需要规范,需要统一配置管理,我们只能使用源码安装方式,便于我们去管理,源码安装,如果是单台还好,一会也就装完了,如果此时,生产环境压力骤增,需要扩展100台web节点(源码安装100台nginx)我们该如何操作?
#1.安装依赖
yum install pcre-devel openssl-devel -y#2.进入安装目录
cd /usr/local/tools#3.创建nginx用户
useradd nginx -M -s /sbin/nologin#4.解压
tar xf nginx-1.6.3.tar.gz#5.进入nginx程序目录
cd nginx-1.6.3#6.生成
./configure --prefix=/usr/local/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module#7.编译
make#8.安装
make install#9.做软链接
ln -s /usr/local/nginx-1.6.3/ /usr/local/nginx

以上步骤还只是安装,那还要部署代码呢?修改配置文件?优化?启动?那还工作个毛线啊,一天啥也不用干了,就装nginx吧。

自动化运维时代
只需要一条命令,搞定100台集群

在这里插入图片描述

自动化运维工具的优势

在这里插入图片描述

Ansible的功能及优点
1.远程执行
批量执行远程命令,可以对多台主机进行远程操作2.配置管理
批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理,和启停3.事件驱动
通过Ansible的模块,对服务进行不同的事件驱动
比如:
1)修改配置后重启
2)只修改配置文件,不重启
3)修改配置文件后,重新加载
4)远程启停服务管理4.管理公有云
通过API接口的方式管理公有云,不过这方面做的不如saltstack.
saltstack本身可以通过saltcloud管理各大云厂商的云平台。5.二次开发
因为语法是Python,所以便于运维进行二次开发。6.任务编排
可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署7.跨平台,跨系统
几乎不受到平台和系统的限制,比如安装apache和启动服务在Ubuntu上安装apache服务名字叫apache2
在CentOS上安装apache服务名字叫httpd在CentOS6上启动服务器使用命令:/etc/init.d/nginx start
在CentOS7上启动服务器使用命令:systemctl start nginx
Ansible的架构
1、连接插件connection plugins用于连接主机 用来连接被管理端
2、核心模块core modules连接主机实现操作, 它依赖于具体的模块来做具体的事情
3、自定义模块custom modules根据自己的需求编写具体的模块
4、插件plugins完成模块功能的补充
5、剧本playbookansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6、主机清单inventor定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块

在这里插入图片描述

Ansible的执行流程
1.Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务。
2.首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块。
3.其次Ansible会通过连接插件连接对应的主机并推送对应的任务列表。
4.最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行。
安装Ansible
主机名	  wanIP	       lanIP	  角色
m01	    10.0.0.61	172.16.1.61	Ansible控制端
web01	10.0.0.7	172.16.1.7	Ansible被控端
web02	10.0.0.8	172.16.1.8	Ansible被控端1.需要配置epel仓库
2.安装Ansible  #注意:ansible只安装不启动
[root@m01 ~]#yum install -y ansibleAnsible参数:
-i			#主机清单文件路径,默认是在/etc/ansible/hosts  使用-i指定主机清单的位置
-m			#使用的模块名称,默认使用command模块
-a			#使用的模块参数,模块的具体动作#3.查看Ansible版本及模块路径
[root@m01 ~]# ansible --version
ansible 2.7.1config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)][root@m01 ~]#cat /etc/ansible/hosts 
10.0.0.7 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass='1'[root@m01 ~]#ansible 10.0.0.7 -m ping	#ping不通需要关闭Ansible指纹检查
10.0.0.7 | FAILED! => {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
}修改主机配置文件:跳过指纹检测
[root@m01 ~]#grep -n "host_key_checking" /etc/ansible/ansible.cfg 
71:host_key_checking = False
Ansible配置文件生效顺序
1. $ANSIBLE_CONCFIG
2. ./ansible.cfg
3. ~/.ansible.cfg
4. /etc/ansible/ansible.cfg
Ansible inventory主机清单

/etc/ansible/hosts 是Ansible默认主机清单文件,用于定义被管理主机的认证信息,例如:ssh登录用户名、密码以及key相关信息。inventory文件中填写需要被管理的主机与主机组信息。还可以自定义inventory主机清单的位置,使用-i指定文件位置即可。

方法一:基于ssh
[root@m01 ~]#cat /etc/ansible/hosts 
10.0.0.7 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass='1'
#测试是否管理客户端 使用:ping模块
[root@m01 ~]#ansible 10.0.0.7 -m ping
10.0.0.7 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}方法二:使用主机方式,使用别名方式管理客户端
[root@m01 ~]#cat /etc/ansible/hosts 
web02 ansible_ssh_host=10.0.0.8 ansible_ssh_pass='1'[root@m01 ~]#ansible web02 -m ping
web02 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
[root@m01 ~]#cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6方法三:使用区间的方式管理客户端
[root@m01 ~]#vim /etc/ansible/hosts 
10.0.0.[7:8] ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass='1'
#表示客户端包含 :10.0.0.7和10.0.0.8 [root@m01 ~]#ansible 10.0.0.8 -m ping
10.0.0.8 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}方法四:设置小组方式:[小组名称]
[root@m01 ~]#cat /etc/ansible/hosts 
[webs]
web01 ansible_ssh_host=10.0.0.7 ansible_ssh_pass='1'
web02 ansible_ssh_host=10.0.0.8 ansible_ssh_pass='1'
[root@m01 ~]#
[root@m01 ~]#ansible webs -m ping
web01 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
web02 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}#设置多个小组:
[root@m01 ~]#vim /etc/ansible/hosts 
[webs]
web01 ansible_ssh_host=10.0.0.7 ansible_ssh_pass='1'
web02 ansible_ssh_host=10.0.0.8 ansible_ssh_pass='1'[dbs]
10.0.0.51 ansible_ssh_pass=1[root@m01 ~]#ansible dbs -m ping
10.0.0.51 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}#查看组内成员列表
[root@m01 ~]#ansible webs -m ping --list-hostshosts (2):web01web02
Ansible基于免秘钥方式管理客户端
1.生成秘钥对
[root@m01 ~]#ssh-keygen
2.拷贝到客户端
[root@m01 ~]#ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.7
[root@m01 ~]#ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.8
3.配置主机清单
[root@m01 ~]#cat /etc/ansible/hosts 
10.0.0.7
10.0.0.8
测试:
[root@m01 ~]#ansible 10.0.0.7 -m ping
10.0.0.7 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
[root@m01 ~]#ansible 10.0.0.8 -m ping
10.0.0.8 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}使用all表示所有客户端:
[root@m01 ~]#ansible all -m ping
10.0.0.8 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
10.0.0.7 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}#设置小组:
[root@m01 ~]#vim /etc/ansible/hosts 
[webs]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8[root@m01 ~]#ansible webs -m ping
web02 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
web01 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}#设置包含多个组:
[root@m01 ~]#vim /etc/ansible/hosts 
[webs]
web01 ansible_ssh_host=10.0.0.7[dbs]
web02 ansible_ssh_host=10.0.0.8[lnmp:children]
webs
dbs[root@m01 ~]#ansible webs -m ping
web01 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
[root@m01 ~]#ansible dbs -m ping
web02 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
小结
inventory 主机清单
基于ssh
1)基于用户名+端口+密码
2)基于免秘钥vim /etc/ansible/hosts
10.0.0.7							#指定单台主机
web01 ansible_ssh_host=10.0.0.7		#使用别名
[webs]								#指定小组
10.0.0.7
10.0.0.8[dbs]								#指定多个组
10.0.0.51
10.0.0.31[lnmp:children]
webs
dbs
Ansible-Adhoc
什么是ad-hoc?
ad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存。ad-hoc模式的使用场景
比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等··
ad-hoc常用模块
command				#执行shell命令(不支持管道等特殊字符)
shell				#执行shell命令
scripts				#执行shell脚本
yum_repository		#配置yum仓库
yum					#安装软件
copy				#变更配置文件
file				#建立目录或者文件
service				#启动与停止服务
mount				#挂载设备
cron				#定时任务
get_url				#下载软件
firewalld			#防火墙
selinux				#selinux
第一个模块:command模块 不支持管道,不建议使用
第二个模块:shell 在不知道使用什么模块的时候使用shell模块
第三个模块:scripts 执行脚本时候
第四个模块:yum:
yum:name:nfs-utils 软件的名称state:动作present:安装absent:卸载latest:最新版本
安装nfs-utils
1.开启10.0.0.31
2.配置Ansible-host
[root@m01 ~]#cat /etc/ansible/hosts 
nfs ansible_ssh_host=10.0.0.31
3.设置免秘钥
[root@m01 ~]#ssh-keygen
[root@m01 ~]#ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.31[root@m01 ~]#ansible nfs -m yum -a 'name=nfs-utils state=present'
nfs | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "msg": "", "rc": 0, "results": ["1:nfs-utils-1.3.0-0.68.el7.2.x86_64 providing nfs-utils is already installed"]
}卸载nfs-utils
[root@m01 ~]#ansible nfs -m yum -a 'name=nfs-utils state=absent'配置nfs-utils启动nfs-utils#查看Ansible帮助文档:
[root@m01 ~]#ansible-doc yum
/EXA创建文件file模块:
[root@m01 ~]#cat /etc/ansible/hosts 
nfs ansible_ssh_host=10.0.0.31
[webs]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8[root@m01 ~]#ansible webs -m file -a 'path=/root/ansible.txt state=touch'
[root@m01 ~]#ansible webs -m file -a 'path=/root/ansible state=directory'
[root@m01 ~]#ansible webs -m file -a 'path=/root/oldboy state=directory mode=055 owner=root group=root'
Ansible playbook
playbook即剧本,兵书之意,playbook是由以下部分组成的	
play:定义的是主机的角色。(主角还是配角,找哪个明星)
task:定义的是具体执行的任务(角色的台词和动作)
playbook:由一个或者多个play(角色)组成,一个play(角色)可以包含多个task(台词动作)简单理解为:使用不同的模块完成一件事情
在Ansible中“剧本文件”是yml结尾的文件
在saltStack中“剧本文件”是以sls结尾的文件
但是语法,使用的都是yaml语法
playbook 功能比ad-hoc更全,是对ad-hoc的一种编排
playbook 能很好的控制先后执行顺序,以及依赖关系
playbook 语法展现更加直观
playbook 可以持久使用,ad-hoc 无法持久使用
YAML语法
语法描述
缩进YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用TAB
冒号以冒号结尾的除外,其他所有冒号后面所有必须有空格
短横线表示列表项,使用一个短横杠加一个空格,多个项使用同样的缩进级别作为同一列表
yum:name: vsftpdstate: present1.环境准备:
10.0.0.31
2.配置Ansible-host
[root@m01 ~]#cat /etc/ansible/hosts 
nfs ansible_ssh_host=10.0.0.31
3.设置免秘钥
[root@m01 ~]#ssh-keygen
[root@m01 ~]#ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.31
[root@m01 ~]#mkdir -p ansible
[root@m01 ansible]#cat nfs.yml 
- hosts: nfs						#操作的客户端tasks:							#定义tasks- name: Install NFS Serveryum:							#yum模块安装nfs-utils服务name: nfs-utilsstate: present- name: Configure NFS Server		#配置nfs服务copy:content: "/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)"dest: /etc/exports- name: Configure group www		#添加www用户、用户组group:name: wwwgid: 666state: present- name: Add user wwwuser:name: wwwuid: 666group: wwwshell: /sbin/nologincreate_home: false- name: Create /data				#创建必要的数据file:path: /datastate: directorygroup: wwwowner: www- name: Start NFS					#启动nfs服务systemd: name: nfsstate: startedenabled: yes[root@m01 ansible]#ansible-playbook --syntax-check nfs.yml		#检测语法是否正确,什么都不显示表示没问题。#执行play-book
[root@m01 ansible]#ansible-playbook nfs.yml yam模块:
yum:name: 指定包的名称(nfs-utils)state: 动作 [present|absent|lastest]copy模块:
copy:src: 源文件(在Ansible服务器)dest: 拷贝到客户端的具体位置owner: 属主group: 属组content: “字符串”
案例:将61的exports文件拷贝到31的家目录 属主属组为bin 权限为600  
- name: Configure NFS Servercopy:src: exportsdest: /root/exportsowner: bingroup: binmode: 0600
案例:将content中的字符串定向到目标位置- name: Configure NFS Servercopy:content: "/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)"dest: /etc/exportsgroup模块:
group:name:		#组名称gid:  	#组idstate:	#动作创建|删除[present|absent]user模块:
user:name: 		#用户名称uid: 			#UIDgroup: 		#属组[GID|组名称]shell: 		#指定解释器[/bin/bash|/sbin/nologin]create_home:  #是否创建家目录 false true案例:创建www用户和用户组- name: Configure group wwwgroup:name: wwwgid: 666state: present- name: Add user wwwuser:name: wwwuid: 666group: wwwshell: /sbin/nologincreate_home: falseflie模块:
file:path:创建的位置state:touch 创建文件 directory 创建目录 absent 删除文件或目录group: 属组owner: 属主mode: 权限recurse: 递归授权案例:[root@m01 ansible]#cat test.yml 
- hosts: web01tasks:- name: testfile:path: /root/teststate: directoryowner: wwwgroup: wwwrecurse: yes- name: filefile: path: /root/test/test.txtstate: touchsystemd模块:
systemd:name: nfs			#服务名称state: started	#启动 停止 重加载[started|stoped|reloaded]enabled: yes		#是否开机自启 [yes|no]案例:- name: Start NFSsystemd:name: nfsstate: startedenabled: yes
mount模块:
mount:path: /mnt				#挂载到本地的位置src: 172.16.1.31:/data	#挂载的路径fstype: nfs				#挂载类型state: present			#挂载并写入fstabcrontab模块:
cron:	name: "ntpdate"		#描述信息minute: "*/5"			#每隔5分钟job: "ntpdate ntp1.aliyun.com &> /dev/null"	#具体执行的命令state: present		#动作,创建present  删除absentunarchive模块:unarchive:src: /root/hehe.tar.gz		#压缩包的位置dest: /root/				#解压的目的位置remote_src: yes				#压缩包文件是否在客户端。加了此参数 hehe.tar.gz 在目标服务器,如果不加此参数默认在Ansible服务器上查找hehe.tar.gz

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

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

相关文章

Go语言runtime/trace工具全面解析

基本概念与功能 Go语言的runtime/trace是Go标准库中内置的性能分析工具,主要用于追踪和可视化Go程序的运行时行为。它能够记录程序执行期间的各种事件,包括goroutine调度、系统调用、垃圾回收(GC)、网络I/O、锁等待等关键信息。 trace工具的核心功能包括: goroutine生命周期…

Docker(自写)

Docker程序是跑在操作系统上的,而操作系统上又装了各种不同版本的依赖库和配置程序依赖环境,环境不同,程序就可能跑不起来,如果我们能将环境和程序一起打包docker就是可以将程序和环境一起打包并运行的工具软件基础镜像DockerFile…

深度拆解 OpenHarmony 位置服务子系统:从 GNSS 到分布式协同定位的全链路实战

1. 系统概述 OpenHarmony 的“定位子系统”就是硬件服务子系统集里的 “位置服务子系统”(Location SubSystem)。它向下对接 GNSS/GPS、基站、Wi-Fi 等定位模组,向上以 标准位置 API 形式为应用提供 实时位置、轨迹、地理围栏 等能力,并可与分布式软总线联动,实现 跨设备…

React Native基本用法

1,index调用registerComponent,把appName注入到React Native的根节点。 2,package.json是全局大管家,package-lock.json锁定版本,不会手动编辑,通过install安装 3, bebal.config.json bebal.config.json是翻…

LoraConfig target modules加入embed_tokens(64)

LoraConfig target modules加入embed_tokens 更好且成本更低的方法 嵌入层(embedding layer)的 lora_embedding_A 和 lora_embedding_B 头部(head)是否需加入目标模块列表 用户警告 解除权重绑定 解绑以后是随机权重,怎么办 更好且成本更低的方法 “有没有一种更好且成本…

笔记共享平台|基于Java+vue的读书笔记共享平台系统(源码+数据库+文档)

笔记共享平台|读书笔记共享平台系统 目录 基于Javavue的读书笔记共享平台系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取 博主介绍:✌️大厂码农|毕设布道师&#xff…

【VSCode】VSCode为Java C/S项目添加图形用户界面

为Java C/S项目添加图形用户界面 现在我们来为它添加图形用户界面(GUI)。我将使用Java Swing库创建一个简单的GUI,因为它内置于Java标准库中,无需额外依赖。 客户端GUI实现 首先,我们将修改客户端代码,添加一个Swing GUI界面&…

【云原生】Docker 搭建Kafka服务两种方式实战操作详解

目录 一、前言 二、Docker 搭建kafka介绍 2.1 Docker 命令部署 2.2 使用Docker Compose 部署 2.3 使用 Docker Swarm 2.4 使用 Kubernetes 2.5 部署建议 三、Docker 搭建kafka操作方式一 3.1 前置准备 3.2 完整操作过程 3.2.1 创建docker网络 3.2.2 启动zookeeper容…

DBeaver中禁用PostgreSQL SSL的配置指南

在DBeaver中为PostgreSQL连接禁用SSL是一个常见的配置,特别是当你的数据库服务器未启用SSL或遇到连接问题时。我来为你详细讲解操作步骤和注意事项。 🛠️ DBeaver中禁用PostgreSQL SSL的配置指南 详细步骤 打开驱动设置:在DBeaver中创建新的…

数组去重【JavaScript】

数组去重,并且key和val相同的对象视为相同的,需要去重。主函数:/*** 数组去重* 两个属性相同的对象也认为是相同的* param {Array} arr* return {Array} */ function uniqueArray(arr) {const result []// outer: 标签,标记外层循…

基于单片机设计的智能停车系统_271

文章目录 一、前言 1.1 项目介绍 【1】项目开发背景 【2】设计实现的功能 【3】项目硬件模块组成 【4】设计意义 【5】国内外研究现状 【6】摘要 1.2 设计思路 1.3 系统功能总结 1.4 开发工具的选择 【1】设备端开发 【2】上位机开发 1.5 参考文献 1.6 系统框架图 1.7 系统原理…

for in+逻辑表达式 生成迭代对象,最后转化为列表 ——注意list是生成器转化为列表,但[生成器]得到的就是一个列表,其中包含一个生成器元素

(int(digit) ** 2 for digit in str(n))这个不是 数组(list),而是一个 生成器表达式 (generator expression)。它的作用是:str(n) 把数字 n 转成字符串,例如 n 82 → "82"。for digit in str(n) 遍历字符串中的每个字符 → "…

通信算法之321:verilog中generate if 用法-综合掉无用分支

文章目录 一.示例代码 二.优缺分析 三. generate - case 一.示例代码 提示:参考 // 根据添加/补偿频偏的标志,确定使用的频偏wire signed [WIDTH-1 : 0] freq;generateif(FREQ_FLAG == 1b1) beg

Shell 入门

目录 一、Shell 是什么 二、 .sh 脚本调用 .py 脚本 Python 核心逻辑脚本(data_processor.py) Shell 脚本(pipeline.sh) 三、常见命令 四、.sh脚本 1. 简单例子 2. 进阶例子 3. 猜数字游戏 一、Shell 是什么 Shell 的本…

UNet改进(36):融合FSATFusion的医学图像分割

1. 注意力机制的理论基础 1.1 空间注意力机制 空间注意力机制模拟人类视觉系统,能够关注图像中的显著区域。其核心思想是根据特征图的空间位置生成权重图,突出重要区域并抑制无关信息。常见的实现方式是通过沿通道维度的池化操作获取空间统计信息,然后通过卷积层生成空间注…

docker安装kafka、zookeeper详细步骤

Kafka 简介 Kafka 是一个分布式流处理平台,由 LinkedIn 开发并开源,主要用于高吞吐量的实时数据管道和流处理。 核心特性 高吞吐量:支持每秒百万级消息处理,适合大数据场景。 持久化存储:消息可持久化到磁盘,并支持多副本备份。 分布式架构:支持水平扩展,通过分区(P…

Photoshop - Ps 编辑图像

使用基本图像编辑技术,让图像展现出最好的一面。1.修剪和拉直使用裁剪工具,可以修剪边缘,更改图像的形状和大小,甚至可以对图像进行拉直和弯曲的操作。2.改善亮度和色彩点击菜单栏-编辑-调整-亮度/对比度,调整图像的亮…

SpringBoot 配置文件在运维开发中的应用

在 SpringBoot 项目的运维开发工作里,配置文件相关知识是绕不开的重要内容。它关乎着项目在不同环境下的灵活部署、参数调整,直接影响着应用的稳定性与可维护性。接下来,我们就从临时属性、属性加载优先顺序、配置文件分类这几个维度&#xf…

雷卯国产化之SE3401完全替代AOS的AO3401

上海雷卯PMOS型号SE3401 pin to pin替代AOS型号AO3401,已经有很多客户选用 SE3401替代AO3401,客户可以获得更好的价格和更快的交期。特别是在一些受空间收下限的小电子设备很受青睐。参数对比如下:以下是SE3401(P沟道MOSFET&#…

多语言与零样本语音识别新突破:基于发音特征分类的方法

多语言与零样本语音识别新突破:基于发音特征分类的方法 在语音识别领域,多语言和零样本(zero-shot)语言的识别一直是一个极具挑战性的课题。近期,京都大学的研究团队提出了一种全新的方法,通过引入国际音标(IPA)和发音特征(Articulatory Features)来提升语音识别系统…