小阿轩yx-Ansible部署与应用基础

news2024/11/16 5:28:11

小阿轩yx-Ansible部署与应用基础

前言

  • 由于互联网的快速发展导致产品更新换代速度逐步增长,运维人员每天都要进行大量的维护操作,按照传统方式进行维护使得工作效率低下。
  • 这时部署自动化运维就可以尽可能安全高效的完成这些工作。

Ansible 概述

什么是 Ansible

  • 是基于 Python 开发
  • 集合了众多优秀运维工具的优点
  • 实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具
  • 默认通过 SSH 协议进行远程命令执行或下发配置
  • 无需部署任何客户端代理软件,使得自动化环境部署变的简单
  • 可同时支持多台主机并行管理,使得管理主机更加便捷

Ansible 的架构组成

  • Ansible 可以看作是一种基于模块进行工作的框架结构,批量部署能力就是由 Ansible 所运行的模块实现的。
  • 简而言之 Ansible 是基于 “模块” 完成各种 “任务” 的。

  • 图中可得出 Ansible 的基本架构由六大件构成

Ansible core 核心引擎

  • 即 Ansilbe 本身;

Host Inventory 主机清单

  • 用来定义 Ansible 所管理的主机,默认是在 Ansible 的 hosts 配置文件中定义被管理主机,同时也支持自定义动态主机清单和指定其它配置文件的位置;

Connect plugin 连接插件

  • 负责和被管理主机实现通信。
  • 除支持使用 SSH 连接被管理主机外,Ansible 还支持其它的连接方式, 所以需要有连接插件将各个主机用连接插件连接到 Ansible;

Playbook(yaml, jinjia2)剧本

  • 用来集中定义 Ansible 任务的配置文件, 即将多个任务定义在一个剧本中由 Ansible 自动执行, 可以由控制主机针对多台被管理主机同时运行多个任务;

Core modules 核心模块

  • 是 Ansible 自带的模块,使用这些模块将资源分发到被管理主机使其执行特定任务或匹配特定的状态;

Custom modules 自定义模块

  • 用于完成模块功能的补充,可借助相关插件完成记录日志、发送邮件等功能。

Ansible 与 SaltStack 的对比

Ansible 安装部署简单

  • 默认情况下,Saltstack 需要安装客户端接收服务器发送过来的命令。
  • Ansible 不需要在被控服务器上部署任何的客户端,直接使用 ssh 通道进行远程命令的执行或者下发配置。

SaltStack 响应速度快

  • 默认情况下,Ansible 使用的是标准的 SSH 协议,Saltstack 使用 ZeroMQ 进行通信和传输。
  • 因此,仅仅从响应速度来讲,Saltstack 比 Ansible 快很多,甚至快十几倍。
  • 在一般运维场景下,Ansible 的响应速度完全可以满足需求。

Ansible 更安全

  • Ansible 使用标准的 SSH 连接传输数据,不需要在远程主机上启动守护进程。
  • 此外,标准的 SSH 数据传输本身就是加密传输,远程主机不易被攻击。

对 Windows 的支持

  • Saltstack 对 Windows 的支持比较友好,Ansible 从 1.7 版本开始加入了对 windows 的支持。
  • 由于Windows 默认没有 SSH,而 Ansible 有依赖 SSH 进行通信,所以在 Windows 下 Ansible 需要依赖 Powershell 来实现远程管理。
  • Ansible 必须使用 Linux 系统运行控制端。

Ansible 自身运维比较简单

  • Saltstack 需要在 Master 和 Minion 主机启动一个守护进程,自身需要检测守护进程的运行状态增加了运维成本。
  • Ansible 和服务器之间用 SSH 进行通信,服务器上值需要运行 SSH 进程就可以进行运维操作。
  • 因此,从工具本身的运维角度来说,Ansible 要比 Saltstack 简单很多。

安装部署 Ansible 服务

  • Ansible 自动化运维环境由控制主机与被管理主机组成。
  • 由于 Ansible 是基于 SSH 协议进行通信的,所以控制主机安装 Ansible 软件后不需要重启或运行任何程序,被管理主机也不需要安装和运行任何代理程序。

角色主机名IP 地址
控制主机ansible-node1192.168.10.101
被管理主机ansible-node2192.168.10.102web
被管理主机ansible-node3192.168.10.103db

系统环境设置

修改每台主机名

主机一

[root@localhost ~]# hostnamectl set-hostname ansible-node1
[root@localhost ~]# bash

主机二

[root@localhost ~]# hostnamectl set-hostname ansible-node2
[root@localhost ~]# bash

主机三

[root@localhost ~]# hostnamectl set-hostname ansible-node3
[root@localhost ~]# bash

三台主机开启回话同步

设置每台主机的 hosts 文件

主机一

[root@ansible-node1]# vim /etc/hosts
##添加每台主机地址
192.168.10.101 ansible-node1
192.168.10.102 ansible-node2
192.168.10.103 ansible-node3

主机二

[root@ansible-node2]# vim /etc/hosts
##添加每台主机地址
192.168.10.101 ansible-node1
192.168.10.102 ansible-node2
192.168.10.103 ansible-node3

主机三

[root@ansible-node3]# vim /etc/hosts
##添加每台主机地址
192.168.10.101 ansible-node1
192.168.10.102 ansible-node2
192.168.10.103 ansible-node3
  • 会话同步三台主机名称注意不一样

关闭所有主机的防火墙、内核机制

主机一

[root@ansible-node1]# systemctl stop firewalld
[root@ansible-node1]# setenforce 0

主机二

[root@ansible-node2]# systemctl stop firewalld
[root@ansible-node2]# setenforce 0

主机三

[root@ansible-node3]# systemctl stop firewalld
[root@ansible-node3]# setenforce 0

关闭会话同步

安装 Ansible(只安装第一台)

  • Ansible 可以使用源码方式进行安装,也可以使用操作系统中 YUM 软件包管理工具进行安装。
  • YUM方式安装 Ansible,需要依赖第三方的 EPEL 源。

设置好主机的 epel 源

[root@ansible-node1 ~]# yum -y install epel-release

安装 Ansible

[root@ansible-node1 ~]# yum -y install ansible

查看 Ansible 软件版本信息

[root@ansible-node1 ~]# ansible --version

进入 ansible 目录

[root@ansible-node1 ~]# cd /etc/ansible

查看安装目录

  • Ansible 主要相关配置文件在/etc/ansible 目录下
[root@ansible-node1 ansible]# ll
总用量
-rw-r--r-- 1 root root 19985 6 月 19 11:04 ansible.cfg    //配置文件
-rw-r--r-- 1 root root 1016 6 月 19 11:04 hosts    //管控主机文件
drwxr-xr-x 2 root root 6 6 月 19 11:04 roles

配置主机清单

  • /etc/ansible/hosts 文件中可以定义被管理主机,Ansible 通过读取 /etc/ansible/hosts 文件内定义的主机清单批量做一些操作。

定义一个 websrvs 组,包含一台主机,再定义一个 dbsrvs 组,包含另一台主机

[root@ansible-node1 ansible]# vim hosts
#在末尾添加如下信息
[web]
192.168.10.102
[db]
192.168.10.103

设置 SSH 无密码登录

  • 为了避免 Ansible 下发指令时需要输入被管理主机的密码,可以通过证书签名达到 SSH无密码登录。

使用 ssh-keygen 产生一对密钥,并通过 ssh-copy-id 命令来发送生成的公钥。

[root@ansible-node1 ~]# ssh-keygen -t rsa
#这一步下面的操作默认回车,直到出现密钥对
[root@ansible-node1 ~]# ssh-copy-id 192.168.10.102
[root@ansible-node1 ~]# ssh-copy-id 192.168.10.103
  • 当然也可以在控制端主机的 hosts 文件里直接写入连接方式、用户、密码也能下发指令。
  • 但是生产环境不建议这么做。因为这样明文密码容易泄露,另外如果被控制主机修改了密码,这里也需要一起更改不方便于管理。
  • 至此 Ansible 的环境就部署完成。

测试安装结果

[root@ansible-node1 ~]# ansible all -m ping

Ansible 命令应用基础

  • Ansible 可以使用命令行的方式进行自动化管理。
  • Ansible 的命令行管理工具都是由一系列模块、参数组成的,使用某些模块或参数之前, 可以在命令后面加上 -h 或 --help 来获取帮助。
  • ansible-doc 工具可以使用 ansible-doc -h 或者 ansible-doc --help 查看其帮助信息。

ansible-doc 工具用于查看模块帮助信息。

主要选项包括

  • -l        用来列出可使用的模块;
  • -s        用来列出某个模块的描述信息和使用示列。

列出所有可用模块

[root@ansible-node1 ~]# ansible-doc -s

列出 yum 模块的描述信息和操作动作

[root@ansible-node1 ~]# ansible-doc -s yum
  • 按q退出
  • Ansible 自带了很多模块,能够下发执行 Ansible 的各种管理任务。

Ansible常用的这些核心模块

command 模块
  • Ansibale 管理工具使用 -m 选项来指定所使用模块,默认使用 command 模块,即 -m 选项省略时会运行此模块,用于在被管理主机上运行命令。

使用 IP 地址查看被管理主机日期

[root@ansible-node1 ~]# ansible 192.168.10.102 -m command -a 'date'

使用管控主机分别查看被管理 web 和 db 组里面所有主机的日期

[root@ansible-node1 ~]# ansible web -m command -a 'date'
[root@ansible-node1 ~]# ansible db -m command -a 'date'

查看所有被管理主机上的日期

[root@ansible-node1 ~]# ansible all -m command -a 'date'

查看所有被管理主机的 /etc/passwd 的最后一行

[root@ansible-node1 ~]# ansible all -a 'tail -l /etc/passwd'
  • 若省略 -m 选项,默认运行 command 模块。
shell 模块
  • Ansible 中的 shell 模块可以在被管理主机上运行命令,并支持像管道符等功能的复杂命令。

在被管理组 db 里所有主机创建用户 user1、uid 和 gid 都为 1001,用户家目录为 /home/user1,shell为 /bin/bash。

[root@ansible-node1 ~]# ansible db -m user -a 'name=user1'

被管理组 dbsrvs 里的所有主机使用无交互模式给用户设置密码。

[root@ansible-node1 ~]# ansible db -m shell -a 'echo redhat passwd --stdin user1'
user 模块
  • Ansible 中的 user 模块用于创建新用户和更改、删除已存在的用户。
  • 其中 name 选项用于指明创建的用户名称。

主要包括两种状态(state)

  • present 表示添加(省略状态时默认使用);
  • absent 表示移除。

在被管理组 db 里所有主机上创建一个 user1 用户

[root@ansible-node1 ~]# ansible db -m user -a 'name="user1"'

删除上述创建的用户 user1

[root@ansible-node1 ~]# ansible db -m user -a 'name="user1" state=absent'
cron 模块
  • Ansible 中的 cron 模块用于定义任务计划。

主要包括两种状态(state)

  • present 表示添加(省略状态时默认使用);
  • absent 表示移除。

添加任务计划

  • 使得被管理组 db 里所有主机每十分钟输出 hello 字符串
[root@ansible-node1 ~]# ansible db -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'

执行任务计划

[root@ansible-node1 ~]# ansible db -a 'crontab -l'

也可以指定更详细的时间

[root@ansible-node1 ~]# ansible db -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysgl" job=/root/mysql_backup.sh'

移除上述添加的任务计划

[root@ansible-node1 ~]# ansible db -m cron 'minute="*/10" job="/bin/echo hello" name="test cron job" state=absent'

group 模块

  • Ansible 中的 group 模块用于对用户进行组管理。

被管理组 db 里所有主机创建 mysql 组,gid 为 306

[root@ansible-node1 ~]# ansible db -m group -a 'name=mysql gid=306 system=yes'

将被管理组 dbsrvs 里所有主机的 mysql 用户添加到 mysql 组中

[root@ansible-node1 ~]# ansible db -m user 'name=mysql uid=306 system=yes group=mysql'
copy 模块
  • Ansible 中的 copy 模块用于实现文件复制和批量下发文件。
  • 使用 src 来定义本地源文件路径;
  • 使用 dest 定义被管理主机文件路径;
  • 使用 content 则是使用指定信息内容生成目标文件。

将本地文件 /etc/fstab 复制到被管理组 db 里的所有主机上的 /tmp/fstab.ansible,并将所有者设置为 root,权限设置为640

[root@ansible-node1 ~]# ansible db -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=root mode=640'

登录被管理主机 ansible-node3,验证上述命令执行结果。

[root@ansible-node1 ~]# ll /tmp/fstab.ansible
-rw-r----- 1 root 541 7月 12 22:23 /tmp/fstab.ansible

执行命令的时,如果看到如下报错

"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren'tinstalled!"
  • 是因为被管理主机开启了 SELinux,需要在被管理机上安装 libselinux-python 软件包,才可以使用 Ansible 中与 copy、file 相关的函数。

将 “Hello Ansible Hi Ansible” 写入到被管理组 db 里所有主机上的 /tmp/ test.ansible 文件中。

[root@ansible-node1 ~]# ansible db -m copy -a 'content="Hello Ansible Hi Ansible\n" dest=/tmp/test.ansible'
  • \n:表示换行

登录被管理主机 ansible-node3,验证上述命令执行结果

[root@ansible-node3 ~]# ll /tmp/test.ansible
-rw-r--r--1 root root 24 7月12 22:27 /tmp/test.ansible

查看结果

[root@ansible-node3 ~]# cat /tmp/test.ansible
Hello Ansible Hi Ansible
file 模块
  • Ansible 中使用 file 模块来设置文件属性。
  • 其中使用 path 指定文件路径;
  • 使用 src 定义源文件路径;
  • 使用 name 或 dest 来替换创建文件的符号链接。

指定用户名 mysql

[root@ansible-node1 ~]# ansible db -m user -a name="mysql"'

设置被管理组 dbsrvs 里所有主机中 /tmp/fstab.ansible 文件的所属主为 mysql,所属组为 mysql,权限为 644。

[root@ansible-node1 ~]# ansible db -m -m file -a owner=mysql group=mysql mode=644 path=/tmp/fstab.ansible'

设置被管理组 dbsrvs 里的所有主机的 /tmp/fstab.link 文件为 /tmp/fstab.ansible 文件的链接文件。

[root@ansible-node1 ~]# ansible db -m file 'path=/tmp/fstab.link src=/tmp/fstab.ansible state=link'

登录被管理主机 ansible-node3,验证上述命令执行结果

[root@ansible-node3 ~]# ll /tmp/fstab.link
lrwxrwxrwx 1 root root 18 7 月 12 22:29 /tmp/fstab.link -> /tmp/fstab.ansible
ping 模块
  • Ansible 中使用 ping 模块来检测指定主机的连通性。

检测所有被管理主机的连通性。

[root@ansible-node1 ~]# ansible all -m ping
script 模块
  • Ansible 中的 script 模块可以将本地脚本复制到被管理主机上进行运行。
  • 需要注意的是使用相对路径指定脚本位置。

编辑一个本地脚本 test.sh,复制到被管理组 db 里所有主机上运行。

[root@ansible-node1 ~]# vim test.sh
echo "hello ansible from script" > /tmp/script.ansible

提升权限

[root@ansible-node1 ~]# chmod +x test.sh

执行

[root@ansible-node1 ~]# ansible db -m script -a 'test.sh

登录被管理主机 ansible-node3 查看执行结果。

[root@ansible-node3 ~]# cat /tmp/script.ansible
hello ansible from script
yum 模块
  • 负责在被管理主机上安装与卸载软件包,但是需要提前在每个节点配置自己的YUM 仓库。
  • 使用 name 指定要安装的软件包,还可以带上软件包的版本号;否则安装最新的软件包。
  • 使用 state 指定安装软件包的状态, present、latest 用来表示安装, absent 表示卸载。

被管理组 db 里所有主机安装 zsh 软件包

[root@ansible-node1 ~]# ansible db -m yum -a 'name=zsh'
  • 登录被管理主机 ansible-node3 查看 zsh 包是否安装。
[root@ansible-node3 ~]# rpm -q zsh
zsh-5.0.2-34.e17_8.2.x86 64

卸载被管理组 dbsrvs 里所有主机上的 zsh 软件包。

[root@ansible-node1 ~]# ansible db -m yum -a 'name=zsh state=absent

登录被管理主机 ansible-node3 査看 zsh 包是否安装

[root@ansible-node3 ~]# rpm -q zsh
未安装软件包 zsh
service 模块
  • Ansible 中使用 service 模块来控制管理服务的运行状态。
  • 使用 enabled 表示是否开机自动启动,取值为 true 或者 false;
  • 使用 name 定义服务名称;
  • 使用 state 指定服务状态,取值有 started、stoped、restarted。

查看被管理组 websrvs 里所有主机 httpd 服务的状态

[root@ansible-node1 ~]# ansible web -m yum -a 'name=httpd'

查看被管理组 web 里所有主机的 httpd 服务是否是开机自动启动状态

[root@ansible-node1 ~]# ansible web -a'systemctl is-enabled httpd'
192.168.10.102 | FAILED | rc=1 >>
disablednon-zero return code

红色提示表示被管理组里所有主机的 httpd 服务并且设置为开机自动启动状态

192.168.10.102 | FAILED | rc=1 >>
disablednon-zero return code

设置远程主机自启动 httpd 服务

[root@ansible-node1 ~]# ansible web -m service -a "enabled=true name=httpd state=started'

査看被管理主机 ansible-node2 的 httpd 状态

[root@ansible-node1 ~l# ansible web -a 'systemctl status httpd'

查看被管理组里所有主机的 httpd 服务是否是开机自动启动状态

[root@ansible-node1 ~]# ansible web -a 'systemctl is-enabled httpd'
setup 模块
  • Ansible 中使用 setup 模块收集、査看被管理主机的 facts(facts 是 Ansible 采集被管理主机设备信息的一个功能)
  • 每个被管理主机在接收并运行管理命令之前,都会将自己的相关信息(操作系统版本、IP 地址等)发送给控制主机。

查看被管理组 db 里所有主机的 facts 信息:

[root@ansible-node1 ~]# ansible db -m setup

小阿轩yx-Ansible部署与应用基础

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

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

相关文章

编程遇到问题了?一个命令让 AI 解决你的困惑!

作为一名程序员,我们在开发过程中常常会遇到各种各样的问题,尤其是在开发新功能或使用新技术时。在这些时候,我们往往会寻求帮助并寻找最佳的解决方案。 去年的时候大家还是在使用百度或者谷歌来搜寻问题的答案,但是今年大家肯定…

MICS:PythonJail沙箱逃逸(持续更新中)

沙箱是一种防护机制,是用来运行不受信任的代码,通常是用户上传的代码,但这些代码可能是恶意代码,而沙箱就是防止恶意代码运行的机制。所谓沙箱逃逸,就是利用相关操作绕过沙箱防护,从而获得目标主机的文件信…

JVM(HotSpot):堆空间(Heap)以及常用相关工具介绍

文章目录 内存结构图二、堆的定义三、堆内存溢出四、堆内存排查工具 内存结构图 二、堆的定义 1、通过new关键字创建的对象,都会放到堆空间中。 2、它是线程共享的,堆中的对象都要考虑线程安全问题。 那有同学肯定会问,方法内通过new创建的…

JavaScript --数字Number的常用方法

toFixed(保留几位小数) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthde…

python编程开发“人机猜拳”游戏

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

UIAutomation:Python 自动获取 QQ 群成员资料

出于兴趣&#xff0c;想要获取 “QQ 群”成员资料&#xff0c;于是乎找到了一个自动化的 Python 仓库&#xff1a;Python-UIAutomation-for-Windows。 目录 1. 简介 1.1 实际环境 1.2 安装/源码 1.2.1 pip安装 1.2.2 源码 2. 代码 2.1 全部代码 2.2 class QQGroupMemb…

16. C++ TinyWebServer项目总结(16. 服务器调制、调试和测试)

主要包括&#xff1a; 使用 tcpdump 抓包&#xff1b;使用 gdb 调试器&#xff1b;使用压力测试工具&#xff0c;模拟现实世界中的高并发请求&#xff0c;测试服务器在高压状态下的稳定性。 最大文件描述符数 Linux 对应用进程能打开的最大文件描述符数量有两个层次的限制&a…

升压站成套设备厂家

那么&#xff0c;本文呢&#xff0c;就是将围绕着升压站设备厂家这个关键词&#xff0c;来为您、为潜在的光伏升压站成套设备的采购们分享 一些干货&#xff0c;以及说说升压站设备生成厂家的情况。 我知道&#xff0c;很多人关注的所谓的升压站设备或许比较的多。比如包括了逆…

Flutter路由

路由作为一种页面切换的能力&#xff0c;非常重要。Flutter 中路由管理有几个重要的点。 Navigator 1.0&#xff1a;Flutter 早期路由系统&#xff0c;侧重于移动端 &#xff0c;命令式编程风格&#xff0c;使用 Navigator.push() 和 Navigator.pop() 等方法来管理路由栈。 N…

序列化流(对象操作输出流)反序列化流(对象操作输入流)

可以把Java中的对象写到本地文件中 序列化流&#xff08;对象操作输出流&#xff09; 构造方法 成员方法 使用对象输出流将对象保存到文件会出现NotSerializableException异常 解决方案&#xff1a;需要让Javabean类实现Serializable接口 Student package myio;import java.…

Claude 的上下文检索功能提升了 RAG 准确率,这会是人工智能革命?

前言 在人工智能领域不断进步的过程中&#xff0c;人们对更准确且具备上下文理解能力的响应的追求&#xff0c;催生了诸多突破性创新。 而 Claude 的上下文检索技术就是其中一项进步&#xff0c;有望显著提升检索增强生成 (RAG) 系统的表现。 可能有同学就要问了&#xff1a;…

DDL 超时,应该如何解决 | OceanBase 用户问题集萃

问题背景 在OceanBase的社区问答里常看到有用户发帖提出DDL超时的问题&#xff0c; 如“执行 DDL 超时&#xff0c;为何调大超时时间不生效&#xff1f;” 。但很多帖子的回答都没有完美解决。因此&#xff0c;这里把相关的解决思路在这里分享给大家。 帖子里对这类问题的描述…

2、 如何提高电脑运行速度 (改虚拟内存)?

改下电脑C磁盘的虚拟内存 方法如下&#xff1a; ① 按下电脑键盘上的 win E 键 &#xff0c; 然后鼠标移动到左边的【此电脑上】 然后&#xff0c;按下鼠标右键&#xff0c;选择【属性】 ② 然后&#xff0c;选择【高级系统设置】 4、选择【高级】&#xff0c;选择性能里面…

SPSS26统计分析笔记——5 卡法检验

1 卡方检验原理 卡方检验由卡尔皮尔逊&#xff08;Karl Pearson&#xff09;于1900年首次提出&#xff0c;是一种针对频数数据&#xff08;定类数据或计数数据&#xff09;的假设检验方法。它通过比较实际观测次数与理论期望次数之间的差异&#xff0c;构造出 χ 2 {\chi^2} χ…

seL4 Threads(四)

官网链接: Threads Threads 这篇教程主要是使用seL4中的threads。 TCB Thread Control Blocks seL4提供了线程代表执行的上下文以及管理处理器时间。seL4中的线程是通过线程控制块对象&#xff08;TCB&#xff09;实现的&#xff0c;每个内核线程都有一个线程控制块。 线程…

linux服务器安装原生的php环境

在CentOS上安装原生的PHP环境相对简单。下面是一个详细的步骤指南&#xff0c;适用于CentOS 7及更高版本。 ### 第一步&#xff1a;更新系统 首先&#xff0c;确保你的系统是最新的&#xff1a; sudo yum update -y ### 第二步&#xff1a;安装EPEL和Remi仓库 1. **安装EP…

Windows内核编程基础(3)

内存分配 在应用层编程时&#xff0c;系统提供了GlobalAlloc/HeapAlloc/LocalAlloc等函数。C/C库提供了malloc函数&#xff0c;以及new操作符在堆上分配内存。 在我前面一个关于Windows页交换文件的博客中&#xff0c;介绍了虚拟内存&#xff0c; 虚拟内存是计算机系统内存管…

古月居全新改版上线:AI 大模型“古月知道”引领 ROS 学习新体验

前言 古月居自成立以来&#xff0c;一直致力于为广大 ROS&#xff08;机器人操作系统&#xff09;爱好者和开发者提供优质的学习资源和社区交流平台。经过长期的用户调研和反馈&#xff0c;我们发现旧版古月居在使用过程中存在一些不便之处。 为了更好地服务大家&#xff0c;…

如何生成谷歌临时邮箱?

谷歌的Gmail作为全球最受欢迎的邮件服务之一&#xff0c;不仅因其稳定性和强大的功能而备受青睐&#xff0c;还因为它支持临时邮箱功能&#xff0c;这一功能能够极大地提升用户在各种场景下的使用灵活性。无论是处理一次性事务、注册新账户还是防止垃圾邮件&#xff0c;Gmail的…

通义模型Prompt调优的实用技巧

1. 目录 1. prompt工程简介 2. Prompt设计 2.1 Prompt主要构成要素 2.2 Prompt编写策略 策略一&#xff1a;对较难被准确遵循的复杂规则可拆分为多条规则&#xff0c;有助于提升效果 策略二&#xff1a;适当冗余关键信息 策略三&#xff1a;使用分隔符给Prompt分段 策…