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
英文地址,請注明出處:http://en.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)來提升語音識別系統…