Ansible入门—安装部署及各个模块应用案例(超详细)
目录
前言
一、环境概况
修改主机名(可选项)
二、安装部署
1.安装epel扩展源
2.安装Ansible
3.修改Ansible的hosts文件
4.生成密钥
三、Ansible模块使用介绍
Command模块
Shell模块
User模块
Copy模块
File模块
Hostname模块
Yum模块
Service和System模块
Setup 模块
四、playbook
前言:
1.ansible-playbook介绍
2.playbook yml文件格式介绍
playbook实例
1.在目标主机上安装docker,使用docker部署nginx
前言
Ansible 是一种开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它采用简单易懂的 YAML 语法和基于 SSH 协议的远程执行,能够实现快速、可靠的自动化配置和部署。
Ansible 的一些主要特点和功能:
-
简单易用: Ansible 使用 YAML 格式的声明性语言,使得编写和阅读 Playbooks(Ansible 的配置文件)变得非常直观和易于理解。无需编写复杂的脚本或程序代码,就可以完成大部分配置和部署任务。
-
无代理架构: Ansible 采用基于 SSH 的无代理架构,不需要在目标主机上安装任何额外的代理或客户端软件。这简化了部署和管理过程,并提供了更强的安全性。
-
模块化: Ansible 提供了丰富的模块库,用于执行各种操作,如包管理、文件操作、服务管理、用户管理等。模块化的设计使得用户可以轻松地扩展和定制 Ansible,以满足特定的自动化需求。
-
剧本化: Ansible 使用 Playbooks 来描述配置和部署任务。Playbooks 是用 YAML 编写的文本文件,可以定义一系列任务和主机组,以及执行这些任务的顺序和条件。这使得用户可以将复杂的配置和部署过程分解为可管理的、可重用的剧本。
-
多平台支持: Ansible 可以在多种操作系统和云平台上运行,包括 Linux、Windows、macOS、VMware、AWS、Azure、Google Cloud 等。这使得 Ansible 成为一个通用的自动化工具,可用于管理多样化的 IT 环境。
-
可扩展性: Ansible 可以集成到现有的工具链和流程中,并与其他自动化和编排工具(如 Jenkins、Kubernetes)进行集成。此外,Ansible 还具有丰富的插件和扩展机制,可以根据需要进行功能定制和扩展。
一、环境概况
192.168.159.128 ------------> Ansible服务端(管理端)
192.168.159.129 ------------> 客户端(受控端)
修改主机名(可选项)
修改Ansible服务端的主机名,客户端不修改
hostnamectl set-hostname ansible.serverhostname ansible.serverreboot后永久生效
二、安装部署
1.安装epel扩展源
yum install -y epel-release
2.安装Ansible
yum install -y ansible
3.修改Ansible的hosts文件
cd /etc/ansible/ tree . ├── ansible.cfg #ansible的配置文件,默认即可 ├── hosts #ansible的主机清单,用于存储需要管理的远程主机的相关信息,需要编辑 └── roles/ #公共角色目录,默认即可
vim hosts#webservses行取消注释,添加被控端IP [webservers] ## alpha.example.org ## beta.example.org 192.168.159.129 ## 192.168.1.110
4.生成密钥
Ansible 的工作原理是通过 SSH 连接到远程主机,在目标主机上执行预定义的任务或命令,所以需要配置免密
ssh-keygenssh-copy-id root@192.168.159.129
三、Ansible模块使用介绍
现在开始ansible就已经可以开始使用了
- 查看Ansible版本
[root@ansible ansible]# ansible --version ansible 2.9.27config 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, Jun 20 2023, 11:36:40) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] [root@ansible ansible]#
- 查看
ping
和
telnet
模块的简要描述和摘要ansible-doc -s ping ansible-doc -s telnet
- 用于查看有关
telnet
模块的文档,类似于man手册ansible-doc telnet
Command模块
格式
ansible <hosts> -m command -a "<command>"
ansible webservers -m command -a "free -h" ansible 192.168.159.129 -m command -a "free -h" ansible all -m command -a "free -h" ansible webservers -a "uname -a"
<hosts>可以使用以上三种方式指定
- webservers:hosts配置文件中的【webservers】组执行某些命令
- 实际IP:指定IP运行某些命令
- all:代表所有hosts主机,包含hosts配置文件中的【dbservers】组
Shell模块
格式
ansible <hosts> -m shell -a "<command>"
ansible all -m shell -a "for i in {1..5}; do touch \$i.txt;done && ls -la *.txt"
1.上述示例当中的touch命令部分为什么在$符号前面要加上转义符?
ansible webservers -m shell -a "df -hT|grep '/$' | awk '{print $6}'"ansible webservers -m shell -a "df -hT|grep '/$' | awk '{print \$6}'"
2.上述示例当中的awk命令部分为什么在$符号前面要加上转义符?
解释:为了确保 $6 不被解释为命令行变量,而是作为字符串的一部分传递给远程主机执行,需要使用转义符 \ 进行转义。\$6 的目的是将 $6 这个字符串传递给远程主机而不被本地 Shell 解释为变量
所以正确写法是这样的:
ansible all -m shell -a "for i in {129,130}; do ping -c 1 192.168.159.\$i; done"
!!!错误写法示范:
User模块
格式
ansible <hosts> -m user -a "<options>"
<hosts>: 指定要管理用户的目标主机,可以是单个主机或者主机组的名称。 -m user: 通过 -m 参数指定要使用的模块为 user。 -a "<options>": 使用 -a 参数传递模块的选项。选项可以是创建用户、修改用户属性或删除用户等操作。user 模块的常用选项包括:name: 指定用户的名称。password: 指定用户的密码(已加密)。state: 指定用户的状态,present表示创建,absent表示删除。groups: 指定用户所属的组。shell: 指定用户的登录 Shell。system=yes|no: 是否为系统账号。uid: 用户uidmove_home=yse|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动password: 用户的密码,建议使用加密后的字符串comment: 用户的注释信息remove=yes|no: 当state=absent时,是否删除用户的家目录comment: 指定用户的注释信息。
ansible webservers -m user -a 'name="wang" state=present password=123456 groups=root shell="/sbin/nologin"' ansible webservers -m command -a 'grep "wang" /etc/shadow'
Copy模块
格式:
ansible <hosts> -m copy -a "<options>"
<hosts>: 指定要复制文件的目标主机,可以是单个主机或者主机组的名称。 -m copy: 通过 -m 参数指定要使用的模块为 copy。 -a "<options>": 使用 -a 参数传递模块的选项。选项包括源文件路径、目标文件路径、权限等。copy 模块的常用选项包括:src: 指定源文件或目录的路径。可以是绝对路径或相对路径。dest: 指定目标文件或目录的路径。可以是绝对路径或相对路径。mode: 指定目标文件的权限模式,例如 0644。owner: 指定目标文件的所有者。group: 指定目标文件的所属组。backup: 指定是否创建备份文件。force: 指定是否强制复制,即使目标文件已经存在。
ansible webservers -m copy -a 'src="/root/shdir/xin.sh" dest="/root/xin_bak.sh" owner=root group=root mode=777' ansible webservers -m shell -a "bash /root/xin_bak.sh"
File模块
格式:
ansible <hosts> -m file -a "<options>"
<hosts>: 指定要操作文件的目标主机,可以是单个主机或主机组的名称。 -m file: 通过 -m 参数指定要使用的模块为 file。 -a "<options>": 使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。file: 模块的常用选项包括:path: 指定要操作的文件或目录的路径。可以是绝对路径或相对路径。mode: 指定文件的权限模式,例如 0644。owner: 指定文件的所有者。group: 指定文件的所属组。state: 指定文件的状态,可以是 file(文件存在)、directory(目录存在)或 absent(文件不存在)。recurse: 指定是否递归地应用更改到目录及其子目录。follow: 指定是否跟随符号链接进行更改。
ansible webservers -m file -a 'path="/root/xin_bak.sh" owner=root group=root mode=755 state=file' ansible webservers -m command -a "ls -la /root/xin_bak.sh"
Hostname模块
格式:
ansible <hosts> -m copy -a "<options>"
ansible webservers -m hostname -a "name=test" ansible webservers -m command -a "hostname"
Yum模块
格式:
ansible <hosts> -m yum -a "name=<package_name> state=<state>"
<hosts>: 指定要操作文件的目标主机,可以是单个主机或主机组的名称。
-m file: 通过 -m 参数指定要使用的模块为 file。
-a "<options>": 使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。yum: 模块的常用选项包括:name: 要安装的包的名字state: present(安装)、absent(卸载)或 latest(更新为最新版本)。update_cache: 是否刷新 YUM 缓存。默认情况下为 yes,表示会自动更新缓存。设置为 no 则不刷新缓存。 disable_gpg_check: 是否禁用 GPG 检查。默认为 no,表示会进行 GPG 检查。设置为 yes 则禁用 GPG 检查。enablerepo 和 disablerepo: 控制仓库的启用和禁用。可以指定要启用或禁用的仓库名称。多个仓库以逗 号分隔。installroot: 指定要安装软件包的根目录路径。conf_file: 指定要使用的 YUM 配置文件路径。vars: 用于传递额外的变量给 Ansible。
ansible webservers -m yum -a 'name=dnsmasq state=present'
ansible webservers -m shell -a "systemctl restart dnsmasq && systemctl enable dnsmasq && systemctl status dnsmasq"
Service和System模块
格式:
ansible <hosts> -m service -a "name=<service name> enabled=<yes/no> state=<state>"
<hosts>: 指定要操作文件的目标主机,可以是单个主机或主机组的名称。 -m file: 通过 -m 参数指定要使用的模块为 file。 -a "<options>": 使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。service: 模块的常用选项包括:name: <服务名称>state: <服务状态>,started|stopped|restartedenabled: <是否自启动>,yes|nopattern: <进程匹配模式>.(点): 匹配任意单个字符。*: 匹配前一个字符的零次或多次重复。+: 匹配前一个字符的一次或多次重复。?: 匹配前一个字符的零次或一次重复。^: 匹配字符串的开始位置。$: 匹配字符串的结束位置。[]: 用于定义字符集,匹配其中的任意一个字符。(): 创建捕获组,用于分组匹配。sleep: <等待时间>timeout: <超时时间>runlevel: <运行级别>args: <额外参数>system: 模块命令格式:name: <项名称>state: <系统状态>value: <要设置的值>,started|stopped|restartedenabled: <是否自动加载>,yes|noregenerate: <是否重新生成>system_file: <系统文件路径>runtime_file: <运行时文件路径>config_file: <配置文件路径>
Setup 模块
格式:
ansible <hosts> -m setup -a "name=<service name> enabled=<yes/no> state=<state>"
<hosts>: 指定要操作文件的目标主机,可以是单个主机或主机组的名称。
-m file: 通过 -m 参数指定要使用的模块为 file。
-a "<options>": 使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。setup: 模块的常用选项包括:gather_subset: 指定要收集的子集信息的列表。默认情况下,会收集所有可用的信息。可以使用 hardware, network, virtual, ohai, facter, ohai_timed, puppet, vagrant 或 all 来指定子集。fact_path: 用于指定自定义信息(facts)路径的列表。Ansible 会搜索这些路径以查找自定义事实。filter: 过滤已收集的信息(facts),仅返回匹配指定模式的结果。gather_timeout: 设置收集事实的超时时间,单位为秒。gather_timeout_multiplier: 用于调整超时时间的倍数,默认为 1。gather_timeout_retry: 在超时后重试的次数,默认为 1。cache_valid_time: 设置缓存的有效时间,单位为秒。fact_caching: 启用或禁用缓存功能,可以是 memory、jsonfile、json、yaml 或 text。
filter常用的过滤参数
ansible_all_ipv4_addresses ipv4的所有地址 ansible_all_ipv6_addresses ipv6的所有地址 ansible_date_time 获取到控制节点时间 ansible_default_ipv4 默认的ipv4地址 ansible_distribution 系统 ansible_distribution_major_version 系统的大版本 ansible_distribution_version 系统的版本号 ansible_domain 系统所在的域 ansible_env 系统的环境变量 ansible_hostname 系统的主机名 ansible_fqdn 系统的全名 ansible_machine 系统的架构 ansible_memory_mb 系统的内存信息 ansible_os_family 系统的家族 ansible_pkg_mgr 系统的包管理工具 ansible_processor_cores 系统的cpu的核数(每颗) ansible_processor_count 系统cpu的颗数 ansible_processor_vcpus 系统cpu的总个数=cpu的颗数*CPU的核数 ansible_python 系统上的python
ansible webservers -m setup -a "gather_subset=hardware"
ansible webservers -m setup -a "filter=*device_link*"
四、playbook
前言:
1.ansible-playbook介绍
Playbook是一个包含一系列任务的YAML文件,用于描述和定义Ansible的配置、部署和管理操作。
ansible-playbook
命令的基本格式:ansible-playbook <playbook_file> [options]
其中
<playbook_file>
是指定要运行的Playbook文件的路径。一些常用的选项:
-i, --inventory <inventory_file>:指定主机清单文件的路径。默认情况下,Ansible会使用 /etc/ansible/hosts 文件作为主机清单。 -l, --limit <pattern>:限制运行Playbook的主机范围,可以使用模式匹配。例如,--limit webservers 将只在名为 "webservers" 的主机上运行Playbook。 -e, --extra-vars <extra_vars>:传递额外的变量给Playbook。可以使用 -e 选项多次来传递多个变量。例如,-e "var1=value1" -e "var2=value2"。 -t, --tags <tags>:只运行带有指定标签的任务。可以使用 -t 选项多次来指定多个标签。例如,-t tag1 -t tag2。 -s, --sudo:以sudo权限运行Playbook。需要在目标主机上配置好sudo权限。 -K, --ask-become-pass:在运行Playbook之前,提示输入sudo密码。
2.playbook yml文件格式介绍
缩进: yaml使用一个固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tab键
冒号: 以冒号结尾的除外,其他所有冒号后面所有必须有空格,冒号必须是英文冒号。
短横线: 表示列表项,使用一个短横线加一个空格作为一个列表项,多个项使用同样的缩进级别作为同一列表。
--- 表示YAML文档的开始 -name: 定义该playbook名字hosts: 主机,可以是all,也可以是组,也可以是具体的IPbecome: yes/no 执行某个任务的时候,尝试切换成特权用户,这个可加可不加gather_facts: yes/no 获取目标主机的信息tasks: - name:任务名字module:模块,例如 command、yum、copy、file等模块Options1:参数1Options2:参数2...... #每个模块都有一组参数介绍,这些参数被用来控制模块的行为和执行结果。name:任务名称,用于在输出中标识任务。state:指定状态,通常可以设置为 present、 absent 或 latest,表示目标应该处于的状态。enabled:指定服务是否应该在启动时启用或禁用。args:指定传递给命令或脚本的参数列表。
playbook实例
1.在目标主机上安装docker,使用docker部署nginx
--- - name: docker_nginx installhosts: webserversgather_facts: yes #获取主机信息tasks:- name: setup memorysetup:filter: "ansible_memory_mb" #获取主机内存- name: setup datesetup:filter: "ansible_date_time" #获取主机时间- name: copy docker.repocopy: #copy模块,将本地的docker-ce.repo拷贝到目标主机上,权限644src: "/tmp/docker-ce.repo"dest: "/etc/yum.repos.d/docker-ce.repo"owner: rootgroup: rootmode: "0644"- name: install dockeryum: #yum模块,分别安装ce,ce-cli,containerd.io name:- docker-ce- docker-ce-cli- containerd.iostate: latest- name: start firewalld service: #service模块,开启自启firewalldname: firewalldstate: startedenabled: yes- name: start docker service: #同上,开启自启dockername: dockerstate: startedenabled: yes- name: pull nginxcommand: "docker pull nginx" #command模块,pull镜像- name: create nginx_html_directoryfile: #file模块,state指定directory,创建该目录path: "/usr/share/nginx/html"state: directoryowner: rootgroup: rootmode: "0755"- name: touch nginx_index #同上,state指定touch,创建该文件file:path: "/usr/share/nginx/html/index.html"state: touchowner: rootgroup: rootmode: "0644"- name: copy nginx_indexcopy: #copy模块,拷贝index文件到目标主机src: "/usr/share/nginx/html/index.html"dest: "/usr/share/nginx/html/index.html"owner: rootgroup: rootmode: "0644"- name: start nginx_container #command模块,run一个nginx镜像command: "docker run --name mynginx -p 8080:80 -v /usr/share/nginx/html/index.html:/usr/share/nginx/html/index.html -d nginx"- name: get nginx_html #get_url模块,访问8080端口get_url:url: "http://localhost:8080"dest: "/tmp/nginx.html"
运行结果:
ansible-playbook docker.yml
访问nginx测试:
ansible webservers -m command -a " curl -k -v http://localhost:8080"
相关文章:

Ansible入门—安装部署及各个模块应用案例(超详细)
目录 前言 一、环境概况 修改主机名(可选项) 二、安装部署 1.安装epel扩展源 2.安装Ansible 3.修改Ansible的hosts文件 4.生成密钥 三、Ansible模块使用介绍 Command模块 Shell模块 User模块 Copy模块 File模块 Hostname模块 Yum模块 Se…...

Spring Boot 3系列之-启动类详解
Spring Boot是一个功能强大、灵活且易于使用的框架,它极大地简化了Spring应用程序的开发和部署流程,使得开发人员能够更专注于业务逻辑的实现。在我们的Spring Boot 3系列之一(初始化项目)文章中,我们使用了Spring官方…...
muduo源码剖析之Timer定时器
简介 Timer 类是 muduo 网络库中的一个定时器类,用于在指定的时间间隔后执行某个任务。 Timer 类提供了一系列的方法来创建、启动、停止和删除定时器,以及设置定时器的时间间隔和回调函数等。 在 muduo 网络库中,Timer 类被广泛应用于各种…...

CocosCreator:背景滚动 、背景循环滚动
.CocosCretor版本3.2.1 编辑器VScode 制作游戏背景的循环滚动 import { _decorator, Component, Node } from cc; const { ccclass, property } _decorator;ccclass(MoveingSceneBg) export class MoveingSceneBg extends Component {property(Node)bg01: Node null!;proper…...

中远麒麟堡垒机SQL注入漏洞复现
简介 中远麒麟堡垒机用于运维管理的认证、授权、审计等监控管理,在该产品admin.php处存在SQL 注入漏洞。 漏洞复现 FOFA语法: body"url\"admin.php?controlleradmin_index&actionget_user_login_fristauth&username" 或者 c…...

ActiveMq学习⑨__基于zookeeper和LevelDB搭建ActiveMQ集群
引入消息中间件后如何保证其高可用? 基于zookeeper和LevelDB搭建ActiveMQ集群。集群仅提供主备方式的高可用集群功能,避免单点故障。 http://activemq.apache.org/masterslave LevelDB,5.6版本之后推出了LecelDB的持久化引擎,它使…...
Ansible概述以及模块
目录 一、Ansible概述: 1. Ansible是什么: 2. Ansible的作用: 3. Ansible的特性: 二、Ansible 环境安装部署: 1. 管理端安装 ansible: 2. ansible 目录结构: 3. 配置主机清单: 4. 配置密钥对验证: 三、an…...

Cannot run program “D:\c\IntelliJ IDEA 2021.1.3\jbr\bin\java.exe“
如果你的idea在打开后出现了这个故障 Cannot run program "D:\c\IntelliJ IDEA 2021.1.3\jbr\bin\java.exe" (in directory "D:\c\IntelliJ IDEA 2021.1.3\bin"): CreateProcess error2, 系统找不到指定的文件。 打开IDEA的设置 file --> settings --&…...

案例-注册页面(css)
html页面用css控制样式,画一个注册页面。 页面最终效果如下: 页面代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title> <style>*{…...
Ansible--playbook 剧本
一、playbook: playbook是剧本的意思通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。 1.1 playbook的组成: Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行Variables…...
Vue3.0路由拦截
全局路由器拦截:官方叫导航守卫 index.js路由器 import { createRouter, createWebHistory } from "vue-router"; //导入vue-router路由模块,createWebHashHistor函数const routes [{path: "/", //路径: redirect: "/Films" //涉…...

EtherCAT转EtherNET/IP协议网关控制EtherCAT伺服驱动器的方法
只需一步,将你的EtherCAT协议设备转换为EthernetIP协议! 捷米特JM-ECTM-EIP网关,这款专为EtherCAT协议设备设计的转接装置,可以轻松地将EtherCAT设备数据采集的数据转换成EthernetIP协议。而且,我们的网关接口非常灵活…...
钉钉内嵌H5遇到的一些问题
基于钉钉内核开发的政务云APP,在里面开发H5应用时会遇到一些莫名其妙的BUG 标题1、React打包H5时,安卓手机白屏的问题。 1、钉钉安卓使用 UC3.0 内核,版本比较低 2、React Vite TS 打包的H5应用的安卓端无法正常使用 3、添加 build 配置项…...

LeetCode 热题100——链表专题(二)
一、环形链表 141.环形链表(题目链接) 思路:使用快慢指针,慢指针走一步,快指针走俩步,如果是环形链表,那么快慢指针一定相遇,如果不是环形结构那么快指针或者快指针的next一定先为N…...
【Rust日报】2023-11-06 ESP上使用 Rust实现 SNTP协议
ESP上使用 Rust实现 SNTP协议 在这篇文章中,作者使用 ESP 和 Rust 使用 SNTP 协议将设备系统时间与网络时间同步。 SNTP 是 Simple Network Time Protocol 的缩写,它是一种用于在计算机系统之间通过分组交换、可变延迟数据网络进行时钟同步的网络协议。S…...

LibreOJ - 2874 历史研究 (回滚莫队)
回滚莫队就是在基础莫队的前提下,用更多的增加操作代替了减操作。 分成两种情况 1、一个询问的整个区间都在一个块儿里;这种情况直接暴力求即可,因为在一个块儿里,时间复杂度不会高。 2、一个询问的整个区间不在一个块儿里&#…...

人工智能-卷积神经网络之多输入多输出通道
多输入多输出通道 每个图像的多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来代表红、绿和蓝。 但是到目前为止,我们仅展示了单个输入和单个输出通道的简化例子。 这使得我们可以将输入、卷积核和输出看作二维张量。 当我们添加通道时,我们的输…...
Open3D(C++) Umeyama算法求两个点云的变换矩阵
目录 一、算法原理1、原理概述2、主要函数3、算法源码4、参考文献二、代码实现1、详细过程2、调用函数三、结果展示四、相关链接一、算法原理 1、原理概述 原版英文论文有很详细的公式推导过程,考虑到论文年代久远,存在下载困难问题。因此,这里给出论文中的推导过程截图。...
【C++】从入门到精通第二弹——类的构造与析构函数
这里写目录标题 类的构造函数类的析构函数 写在最前面的话 ——构造函数和析构函数是两个特殊的成员函数,都没有返回值,构造函数名和类名相同,析构函数名只是在类名前加上 ~ 构造函数主要用来在创建对象时给对象中的数据成员赋值,…...
C#8.0本质论第十一章--异常处理
C#8.0本质论第十一章–异常处理 11.1多异常类型 用关键字throw抛出异常实例,所选的异常类型应该能最好地说明发生异常的背景。 11.2捕捉异常 发生异常时,会跳转到与异常类型最匹配的catch块执行,匹配度由继承链决定。 从C#6.0起…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...