【Ansible】模块详解
一、ansible概述
1.1 ansible介绍
Ansible 是一个基于 Python 开发的配置管理和应用部署工具,近年来在自动化管理领域表现突出。它集成了许多传统运维工具的优点,几乎可以实现 Pubbet 和 Saltstack 所具备的功能。
1.2 ansible能做什么
批量处理。Ansible 可以对成千上万的主机进行批量配置、部署和管理。例如,以前需要登录到每一台主机上执行一个或多个操作,而使用 Ansible 时,只需在一个指定的控制节点上操作,便可完成所有主机的任务。
基于模块工作。Ansible 的工作原理基于模块,它提供了一种执行框架,但本身并不执行任务。实际执行操作的是 Ansible 的模块,例如,copy 模块用于将文件复制到远程主机,service 模块用于管理服务的启动、停止和重启等。
1.3 ansible两大特性
(1)无代理。Ansible 的一个显著特点是 Agentless(无代理),它像普通命令一样工作,并不是 C/S 软件。只需在一个控制节点主机上安装一次 Ansible,而远程主机无需安装 Ansible 或其他额外的服务,通常通过 SSH 连接来控制远程主机。
(2)幂等性。Ansible 的另一个突出特性是大多数模块都具备幂等性(idempotence)。幂等性指的是无论执行多少次相同操作,结果始终相同。举例来说,执行 systemctl stop xxx 命令停止服务时,如果目标服务已处于停止状态,命令不会再做任何操作,因此多次执行 stop 命令的结果始终是服务保持停止状态,它是幂等的,而 systemctl restart xxx 则不是。
1.4 ansible架构
Ansible 管理节点和远程主机节点间通过SSH协议进行通信。所以配置Ansible的时候,只需保证从Ansible 管理节点通过SSH协议能够连接到被管理的远程节点即可。注意,SSH必须配置为公钥认证登录方式,而非密码认证。
Ansible可以同时管理Red Hat系的Linux、Debian系的Linux以及Windows 主机。Ansible的工作原理如图所示:
1.5 为什么选择ansible
在使用时,用户通过服务器终端输入命令或 playbook,系统根据预定规则将 playbook 拆解成 play,再组织成 Ansible 可识别的任务,调用模块和插件。
任务通过 SSH 连接发送到远程主机执行,并返回结果,执行完毕后,临时文件会自动删除,可以有效地节省内存。
Ansible 的许多模块在执行时会先检查目标节点是否需要执行某项任务,因此,用户可以放心地让 Ansible 执行任务。大多数情况下,重复执行同一任务不会带来副作用。
二、Ansible部署
服务器类型 | IP地址 | 安装软件 |
Ansible管理服务器 | 192.168.166.11 | Ansible |
被管理客户端 | 192.168.166.12 | ...... |
被管理客户端 | 192.168.166.13 | ...... |
2.1 服务器安装ansible服务
[root@localhost ~]#yum install -y epel-release
[root@localhost ~]#yum install -y ansible[root@localhost ~]# cd /etc/ansible/
[root@localhost ansible]# ls
ansible.cfg hosts roles
----------------------------------------------------------------
ansible.cfg # ansible的配置文件,一般无需修改
hosts # ansible的主机清单,用于存储需要管理的远程主机的相关信息
roles # 公共角色目录
2.2 配置主机清单
vim /etc/ansible/hosts
[webservers] #配置组名
192.168.166.12 #组里包含的被管理主机IP地址或主机名(主机名需要先修改/etc/hosts文件)
[dbservers]
192.168.166.13
2.3 配置密钥对验证
#生成密钥对(一路回车)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
#导入对方主机
ssh-copy-id root@192.168.166.12
ssh-copy-id root@192.168.166.13
三、Ansible命令模块
命令格式:ansible <组名> -m <模块> -a <参数列表>
ansible-doc -l #查询所有已安装的模块,按q退出
#总共有三千多个模块,我们只需要学习我们常用的就好了
3.1 command模块
在远程主机执行命令,不支持管道,重定向等shell的特性。
ansible-doc -s command #-s 列出指定模块的描述信息和操作动作
ansible 192.168.80.11 -m command -a 'date' #指定 ip 执行 date
ansible webservers -m command -a 'date' #指定组执行 date
ansible dbservers -m command -a 'date'
ansible all -m command -a 'date' #all 代表所有 hosts 主机
ansible all -a 'date' #如省略 -m 模块,则默认运行 command 模块
3.1.1 示例:chdir
#在远程主机上运行命令前提前进入目录
[root@localhost opt]# ansible dbservers -m command -a 'chdir=/opt ls ./'
192.168.166.13 | CHANGED | rc=0 >>
ceph-release-1-1.el7.noarch.rpm
rh
3.1.2 示例:creates
#判断指定文件是否存在,如果存在,不执行后面的操作
[root@localhost opt]# ansible dbservers -m command -a 'creates=/opt/123.txt echo helloworld >/opt/123.txt '
192.168.166.13 | CHANGED | rc=0 >>
helloworld >/opt/123.txt#切换dbservers查看
[root@dbservers opt]# ls
123.txt rh
3.1.3 示例:removes
#判断指定文件是否存在,如果存在,执行后而的操作
[root@localhost opt]# ansible dbservers -m command -a 'removes=/opt/123.txt touch /opt/123.txt'
[WARNING]: Consider using the file module with state=touch rather than running 'touch'. If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
192.168.166.13 | CHANGED | rc=0 >>[root@localhost opt]# ansible dbservers -m command -a 'removes=/opt/123.txt rm -f /opt/123.txt'
[WARNING]: Consider using the file module with state=absent rather than running 'rm'. If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
192.168.166.13 | CHANGED | rc=0 >>[root@localhost opt]# ansible dbservers -m command -a 'removes=/opt/123.txt touch /opt/123.txt'
192.168.166.13 | SUCCESS | rc=0 >>
skipped, since /opt/123.txt does not exist
3.2 shell模块
在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell 下打开一个子shell运行命令(支持管道符号等功能)
ansible-doc -s shell
#写入helloworld到123.txt
[root@localhost opt]# ansible dbservers -m shell -a 'echo helloworld >/opt/123.txt '
192.168.166.13 | CHANGED | rc=0 >>
#过滤IP地址
[root@localhost ~]# ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2{print $2}") | cut -d " " -f2'
192.168.166.13 | CHANGED | rc=0 >>
192.168.166.13


3.3 cron模块
在远程主机定义任务计划,其中有两种状态(state):present表示添加(可以省略),absent表示移除。
ansible-doc -s cron #查看相关说明,按q退出常用参数:
minute/hour/day/month/weekday:分/时/日/月 /周
job:任务计划要执行的命令
name :任务计划的名称#每两个月的10号的早上和晚上十点的第十分钟执行一次复制系统内核日志到/opt/
linux:10 10,22 10 */2 * /usr/bin/cp /var/log/messages /opt
ansible:
[root@localhost opt]# ansible dbservers -m cron -a 'minute="10" hour="10,20" day="10" month="*/2" job="/usr/bin/cp /var/log/messages /opt" name="test crontab"'
192.168.166.13 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": true, "envs": [], "jobs": ["test crontab"]
}
#查看任务列表
[root@localhost opt]# ansible dbservers -a 'crontab -l'
192.168.166.13 | CHANGED | rc=0 >>
#Ansible: test crontab
10 10,20 10 */2 * /usr/bin/cp /var/log/messages /opt
[root@localhost opt]#
#切换到dbservers上传查看
[root@localhost opt]# crontab -l
#Ansible: test crontab
10 10,20 10 */2 * /usr/bin/cp /var/log/messages /opt


3.4 user模块
用户管理模块
ansible-doc -s user常用的参数:
name :用户名,必选参数
state=present|absent:创建账号或者删除账号,present表示创建,absent 表示删除
system=yes|no:是否为系统账号
uid: 用户uid
group:用户基本组
groups:附加组
shell:默认使用的shell
move_home=yse|no:如果设置的家日录已经存在,是否将已经存在的家日录进行移动
password:用户的密码,建议使用加密后的字符串
comment:用户的注释信息
remove=yes|no:当state=absent时, 是否删除用户的家目录ansible webservers -m user -a 'name="test001"' #创建
ansible webservers -m command -a 'tail -1 /etc/passwd' #查看确认
ansible webservers -m user -a 'name="test001" state=absent' #删除
ansible webservers -m command -a 'tail -1 /etc/passwd' #查看确认
3.5 group模块
用户组管理的模块
ansible-doc -s group #查看相关文档ansible dbservers -m group -a 'name=mysql gid=300 system=yes'
ansible dbservers -m command -a 'tail -1 /etc/group'
ansible dbservers -m user -a 'name="test002" uid=300 system=yes group=mysql'
ansible dbservers -m command -a 'tail -2 /etc/passwd'
ansible dbservers -a 'id test002'
#创建mysql组
[root@localhost ~]# ansible dbservers -m group -a 'name=mysql gid=306 system=yes'
192.168.166.13 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": true, "gid": 306, "name": "mysql", "state": "present", "system": true
}
#查看已创建的组
[root@localhost ~]# ansible dbservers -a 'tail /etc/group'
192.168.166.13 | CHANGED | rc=0 >>
postfix:x:89:
sshd:x:74:
tcpdump:x:72:
zyz:x:1000:zyz
cephadm:x:1001:
nscd:x:28:
screen:x:84:
ldap:x:55:
ceph:x:167:
mysql:x:306:
#将test02用户添加到mysql组中
[root@localhost ~]# ansible dbservers -m user -a 'name=test02 uid=306 system=yes group=mysql'
192.168.166.13 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": true, "comment": "", "create_home": true, "group": 306, "home": "/home/test02", "name": "test02", "shell": "/bin/bash", "state": "present", "system": true, "uid": 306
}
#查看用户所属组
[root@localhost ~]# ansible dbservers -a 'tail /etc/passwd'
192.168.166.13 | CHANGED | rc=0 >>
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zyz:x:1000:1000:zyz:/home/zyz:/bin/bash
cephadm:x:1001:1001::/home/cephadm:/bin/bash
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
nslcd:x:65:55:LDAP Client User:/:/sbin/nologin
ldap:x:55:55:OpenLDAP server:/var/lib/ldap:/sbin/nologin
ceph:x:167:167:Ceph daemons:/var/lib/ceph:/sbin/nologin
test02:x:306:306::/home/test02:/bin/bash
[root@localhost ~]# ansible dbservers -a 'id test02'
192.168.166.13 | CHANGED | rc=0 >>
uid=306(test02) gid=306(mysql) 组=306(mysql)
[root@localhost ~]#
3.6 copy模块
用于复制指定主机文件到远程主机上
ansible-doc -s copy #查看相关文档##常用参数
dest:指出复制文件的日标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode:指出复制时,目标文件的权限
owner:指出复制时,目标文件的属主
group:指出复制时,目标文件的属组
content:指出复制到目标主机上的内容,不能与src一起使用##测试创建文件并修改权限
ansible dbservers -a 'mkdir /test'
ansible dbservers -m copy -a 'src=/etc/passwd dest=/test/passwd.bak owner=root mode=640'
ansible dbservers -a 'ls -l /test'##测试创建文件并写入内容
ansible dbservers -m copy -a 'content="this is test txt" dest=/test/test.txt'
ansible dbservers -a 'ls -l /test'
ansible dbservers -a 'cat /test/test.txt'
3.7 file模块
设置文件属性
ansible-doc -s file#修改文件的属主属组权限等
ansible dbservers -m file -a 'owner=zhangsan group=mysql mode=777 path=/opt/123.txt'
ansible dbservers -a 'ls -l /opt'##设置/opt/123.txt.bak 为 /opt/123.txt 的链接文件
ansible dbservers -m file -a 'path=/opt/123.txt.link src=/opt/123.txt state=link'ansible dbservers -m file -a 'path=/opt/abc.txt state=touch' #创建一个文件
ansible dbservers -m file -a 'path=/opt/abc.txt state=absent' #删除一个文件
3.7.1 修改属主和属组及权限
3.7.2 创建软链接
3.7.3 创建文件,并删除文件
3.8 hostname 模块
用于管理远程主机上的主机名
ansible dbservers -m hostname -a 'name=testhost'
3.9 ping 模块
ansible all -m ping
3.10 yum 模块
在远程主机上安装与卸载软件包
ansible-doc -s yumansible webservers -m yum -a 'name=httpd' #安装服务
ansible webservers -m yum -a 'name=httpd state=absent' #卸载服务
3.11 service/systemd 模块
用于在远程主机上管理服务的运行状态
ansible-doc -s service##常用的参数
name:被管理的服务名称。
state=started | stopped | restarted:动作包含启动关闭或者重启。
enabled=yes | no:表示是否设置该服务开机自启。
runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动。ansible webservers -m service -a 'name=httpd enabled=true state=started' #安装服务并设为开机自启
systemctl is-enabled httpd.service #被控制端查看是否设为开机自启
3.12 script 模块
实现远程批量运行本地 shell 脚本
ansible-doc -s scriptvim test.sh #编写一个脚本
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt #在script.txt中写入指定内容chmod +x test.sh #赋予权限
ansible dbservers -m script -a 'test.sh' #实现远程运行本地的脚本
ansible dbservers -a 'cat /opt/script.txt' #查看生成的文档内容
3.13 setup 模块
facts组件是用来收集被管理节点信息的,使用 setup 模块可以获取这些信息
ansible-doc -s setupansible webservers -m setup #获取webservers组主机的facts信息
ansible webservers -m setup -a 'filter=*ipv4' #使用filter可以筛选指定的facts信息
相关文章:
【Ansible】模块详解
一、ansible概述 1.1 ansible介绍 Ansible 是一个基于 Python 开发的配置管理和应用部署工具,近年来在自动化管理领域表现突出。它集成了许多传统运维工具的优点,几乎可以实现 Pubbet 和 Saltstack 所具备的功能。 1.2 ansible能做什么 批量处理。An…...
深入理解C/C++内存管理:从基础到高级优化实践
一、内存区域划分与基础管理机制 栈(Stack) 栈由系统自动管理,用于存储函数调用时的局部变量、参数及返回地址。其特点是高效但空间有限(通常1-8MB),遵循后进先出(LIFO)…...
两台服务器之前共享文件夹
本文环境 服务器A:ubuntu24.22系统 IP:10.0.8.1 服务器B:ubuntu24.22系统 IP:10.0.8.10 本操作旨在将服务器B的/opt/files目录共享给服务器A得/opt/files 在 B 服务器上设置共享 安装 NFS 服务: sudo apt -y install nfs-kernel-server编辑/etc/exports文件&…...
stm32之USART
目录 1.引入1.1 通信接口1.2 串口 2.USART2.1 简介2.2 框图2.3 基本机构图2.4 数据帧2.5 波特率发生器2.6 数据包2.6.1 数据模式2.6.2 HEX数据包2.6.3 文本数据包2.6.4 HEX数据包接收2.6.5 文本数据包接收 3.结构体和相关API3.1 结构体3.2 API3.2.1 **初始化相关函数**void USA…...
使用 systemd 管理 Linux 服务:配置与自动重启指南
使用 systemd (推荐,适用于大多数 Linux 发行版) systemd 是现代 Linux 系统中最常用的服务管理器。它能可靠地管理进程,并在进程崩溃时自动重启。 创建 systemd 服务文件: 创建一个文件,例如 /etc/systemd/system/app.service…...
【计算机视觉】Car-Plate-Detection-OpenCV-TesseractOCR:车牌检测与识别
Car-Plate-Detection-OpenCV-TesseractOCR:车牌检测与识别技术深度解析 在计算机视觉领域,车牌检测与识别(License Plate Detection and Recognition, LPDR)是一个极具实用价值的研究方向,广泛应用于智能交通系统、安…...
《Spring Boot 3.0全新特性详解与实战案例》
大家好呀!今天让我们轻松掌握Spring Boot 3.0的所有新特性!🚀 📌 第一章:Spring Boot 3.0简介 1.1 什么是Spring Boot 3.0? Spring Boot 3.0就像是Java开发者的"超级工具箱"🧰&…...
二叉树的深度
二叉树的深度是指从根节点到叶子节点的最长路径上的节点数。 一、最大深度 104. 二叉树的最大深度 - 力扣(LeetCode) 最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 //递归法 /*** Definition for a binary tree node.* public class T…...
科技创业园共享会议室线上预约及智能密码锁系统搭建指南
为科技创业园区的运营管理者,我深知高效利用会议室资源的重要性。2023年第三季度,我们园区启动会议室智能化改造项目,经过三个月的实践,成功将32间共享会议室升级为"线上预约智能门锁"管理模式。现将改造经验分享如下&a…...
自定义prometheus exporter实现监控阿里云RDS
# 自定义 Prometheus Exporter 实现多 RDS 数据采集## 背景1. Prometheus 官网提供的 MySQL Exporter 对于 MySQL 实例只能一个进程监控一个实例,数据库实例很多的情况下,不方便管理。 2. 内部有定制化监控需求,RDS 默认无法实现,…...
LeetCode 3342.到达最后一个房间的最少时间 II:dijkstra算法(和I一样)
【LetMeFly】3342.到达最后一个房间的最少时间 II:dijkstra算法(和I一样) 力扣题目链接:https://leetcode.cn/problems/find-minimum-time-to-reach-last-room-ii/ 有一个地窖,地窖中有 n x m 个房间,它们呈网格状排布。 给你一…...
iOS创建Certificate证书、制作p12证书流程
一、创建Certificates 1、第一步得先在苹果电脑上创建一个.certSigningRequest的文件。首先打开钥匙串,使用快捷键【command空格】——输入【钥匙串】回车(找不到就搜一下钥匙串访问使用手册) 2、然后在苹果电脑的左上角菜单栏选择【钥匙串…...
特殊配合力(SCA)作为全基因组关联分析(GWAS)的表型,其生物学意义和应用价值
生物学意义 解析非加性遗传效应 特殊配合力(SCA)主要反映特定亲本组合的杂交优势,由非加性遗传效应(如显性、超显性、上位性)驱动。显性效应涉及等位基因间的显性互作,上位性效应则涉及不同位点间的基因互作。通过SCA-GWAS,可以定位调控这些非加性效应的关键基因组区域…...
Python实例题:Python快速获取斗图表情
目录 Python实例题 题目 python-get-meme-imagesPython 快速获取斗图表情脚本 代码解释 get_meme_images 函数: download_images 函数: 主程序: 运行思路 注意事项 Python实例题 题目 Python快速获取斗图表情 python-get-meme-im…...
探索表访问方法功能:顺序扫描分析
引言 在之前的文章中,我们讨论了 PostgreSQL 表访问方法 API 的基础知识以及堆元组(heap tuple)与元组表槽(Tuple Table Slot,简称 TTS)之间的区别。 本文将深入探讨 PostgreSQL 核心如何通过特定的 API …...
RISC-V CLINT、PLIC及芯来ECLIC中断机制分析 —— RISC-V中断机制(一)
在长期的嵌入式开发实践中,对中断机制的理解始终停留在表面层次,特别当开发者长期局限于纯软件抽象层面时,对中断机制的理解极易陷入"知其然而不知其所以然"的困境,这种认知的局限更为明显;随着工作需要不断…...
Idea Code Templates配置
Templates配置 配置位置模板案例 配置位置 Settings->Editor->File and Code Templates模板案例 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#endimport com.ktools.common.dataprocess.DataProcess; import com.ktools…...
fakebook
解题方法: 一.用御剑扫描后台,查看robot.txt文件,发现是一个/user.php.bak,备份文件,我们访问这个文件 <?phpclass UserInfo {public $name "";public $age 0;public $blog "";public function __co…...
英伟达Blackwell架构重构未来:AI算力革命背后的技术逻辑与产业变革
——从芯片暴力美学到分布式智能体网络,解析英伟达如何定义AI基础设施新范式 开篇:当算力成为“新石油”,英伟达的“炼油厂”如何升级? 2025年3月,英伟达GTC大会上,黄仁勋身披标志性皮衣,宣布了…...
用 Rust 搭建一个优雅的多线程服务器:从零开始的详细指南
嘿,小伙伴们!今天咱们来聊聊怎么用 Rust 搭建一个牛气哄哄的多线程服务器,还能在需要的时候优雅地关机。为啥要用 Rust 呢?因为 Rust 是个超级靠谱的语言,它能保证内存安全,写并发代码的时候不用担心那些让…...
今日行情明日机会——20250509
上证指数今天缩量,整体跌多涨少,走势处于日线短期的高位~ 深证指数今天缩量小级别震荡,大盘股表现更好~ 2025年5月9日涨停股主要行业方向分析 一、核心主线方向 服装家纺(消费复苏出口链驱动) • 涨停家数…...
ESP32开发入门(七):HTTP开发实践
一、HTTP协议基础 1.1 什么是HTTP? HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从服务器传输超文本到本地浏览器。它是一种无状态的请求/响应协议,工作…...
【强化学习】强化学习算法 - 马尔可夫决策过程
马尔可夫决策过程 (Markov Decision Process, MDP) 1. MDP 原理介绍 马尔可夫决策过程 (MDP) 是强化学习 (Reinforcement Learning, RL) 中用于对序贯决策 (Sequential Decision Making) 问题进行数学建模的标准框架。它描述了一个智能体 (Agent) 与环境 (Environment) 交互的…...
数据结构【二叉搜索树(BST)】
二叉搜索树 1. 二叉搜索树的概念2. 二叉搜索树的性能分析3.二叉搜索树的插入4. 二叉搜索树的查找5. 二叉搜索树的删除6.二叉搜索树的实现代码7. 二叉搜索树key和key/value使用场景7.1 key搜索场景:7.2 key/value搜索场景: 1. 二叉搜索树的概念 二叉搜索…...
振动临近失效状态,怎么频谱会是梳子?
这是一个破坏性试验的终末期振动波形。左边时域,右边频域。这是咋回事,时域看起来原本很正常的冲击信号,怎么频域是那个鬼样子。 同一组波形,放大后的频域 - 低频部分: 一个解释:...
橡胶制品行业质检管理的痛点 质检LIMS如何重构橡胶制品质检价值链
橡胶制品广泛应用于汽车、医疗、航空等领域,其性能稳定性直接关联终端产品的安全性。从轮胎耐磨性测试到密封件耐腐蚀性验证,每一项检测数据都是企业参与市场竞争的核心筹码。然而,传统实验室管理模式普遍面临设备调度混乱、检测流程追溯断层…...
【CTFSHOW_Web入门】命令执行
文章目录 命令执行web29web30web31web32web33web34web35web36web37web38web39web40web41web42web43web44web45web46web47web48web49web50web51web52web53web54web55web56web57web58web59web60web61web62web63web64web65web66web67web68web69web70web71web72web73web74web75web7…...
三维底座+智能应用,重构城市治理未来
在“数字中国”战略的引领下,住房和城乡建设领域正迎来一场深刻的数字化转型浪潮。2024年《“数字住建”建设整体布局规划》的发布,明确提出以“CIM”(城市信息模型)为核心,构建城市三维数字底座,推动住建行…...
养生:塑造健康生活的良方
养生是一场贯穿生活的自我关爱行动,从饮食、运动、睡眠到心态调节,每一个环节都对健康有着深远影响。以下为你带来全面且实用的养生策略。 饮食养生:科学搭配,呵护肠胃 合理规划三餐,遵循 “早营养、午均衡、晚清淡”…...
docker 镜像的导出和导入(导出完整镜像和导出容器快照)
一、导出原始镜像 1. 使用 docker save 导出完整镜像 适用场景:保留镜像的所有层、元数据、标签和历史记录,适合迁移或备份完整镜像环境。 操作命令 docker save -o <导出文件名.tar> <镜像名:标签>示例:docker save -o milvu…...
NestJS 框架深度解析
框架功能分析 NestJS 是一个基于 Node.js 的渐进式框架,专为构建高效、可扩展的服务器端应用程序而设计。其核心理念结合了 面向对象编程(OOP)、函数式编程(FP) 和 函数式响应式编程(FRP)&…...
游戏引擎学习第267天:为每个元素添加裁剪矩形
仓库已满:https://gitee.com/mrxiao_com/2d_game_6 新仓库:https://gitee.com/mrxiao_com/2d_game_7 回顾并为今天的内容定下基调 我们今天的主要目标是对游戏的调试“Top List”进行改进,也就是用来显示游戏中耗时最多的函数或模块的性能分析列表。昨天我们已经实…...
基于阿里云DataWorks的物流履约时效离线分析
基于阿里云DataWorks的物流履约时效离线分析2. 数仓模型构建 ORC和Parquet区别: 压缩率与查询性能 压缩率 ORC通常压缩率更高,文件体积更小,适合存储成本敏感的场景。 Parquet因支持更灵活的嵌套结构,压缩率略…...
web 自动化之 selenium 元素四大操作三大切换等待
文章目录 一、元素的四大操作二、三大切换&等待1、切换窗口:当定位的元素不在当前窗口,则需要切换窗口2、切换iframe:当定位的元素在frame/iframe,则需要切换 一、元素的四大操作 1、输入 2、点击 3、获取文本 4、获取属性 import time…...
前端取经路——性能优化:唐僧的九道心经
大家好,我是老十三,一名前端开发工程师。性能优化如同唐僧的九道心经,是前端修行的精髓所在。在本文中,我将为你揭示从网络传输到渲染优化的九大关键技术,涵盖HTTP协议、资源加载策略、缓存控制等核心难题。通过这些实…...
前端工程化和性能优化问题详解
选自己熟悉的内容当作重难点,最好是前端相关的 以下是面向前端面试官介绍前端工程化和性能优化问题的结构化回答框架,结合行业标准和实战经验进行整合: 一、前端工程化核心解析 定义与目标 前端工程化是通过工具链和规范化流程,将…...
【应急响应】- 日志流量如何分析?
【应急响应】- 日志流量如何下手?https://mp.weixin.qq.com/s/dKl8ZLZ0wjuqUezKo4eUSQ...
8b10b编解码仿真
一、基本概念 8B/10B编码(8-bit to 10-bit encoding)是一种将8位数据(包括数据字符和控制字符)转换为10位符号(Symbol)的编码技术,由IBM工程师Al Widmer和Peter Franaszek于1983年提出。其核心思…...
软件工程之面向对象分析深度解析
前文基础: 1.软件工程学概述:软件工程学概述-CSDN博客 2.软件过程深度解析:软件过程深度解析-CSDN博客 3.软件工程之需求分析涉及的图与工具:软件工程之需求分析涉及的图与工具-CSDN博客 4.软件工程之形式化说明技术深度解…...
常见标签语言的对比
XML、JSON 和 YAML 是常见的数据序列化格式 相同点 结构化数据表示 三者均支持嵌套结构,能描述复杂的数据层级关系(如对象、数组、键值对)。跨平台兼容性 均为纯文本格式,可被多种编程语言解析,适用于跨系统数据交换…...
【Linux】环境变量(图文)
目录 一、main函数的参数解释: 1、argc和argc的解释 2、为什么要这样设置? 3、注意: 4、命令行计算器: 二、认识环境变量 三、见见环境变量 1、执行一个程序的前提 2、指令:echo $PATH 3、为什么系统自带的指令…...
基于OpenCV的人脸识别:EigenFaces算法
文章目录 引言一、概述二、代码解析1. 准备工作2. 加载训练图像3. 设置标签4. 准备测试图像5. 创建和训练识别器6. 进行预测7. 显示结果 三、代码要点总结 引言 人脸识别是计算机视觉领域的一个重要应用,今天我将通过一个实际案例来展示如何使用OpenCV中的EigenFac…...
跟我学C++中级篇——STL容器的查找对比
一、C标准库的查找 在C的STL中,对容器或相关序列的查找中,有两种方式,一种是std::find,另外一种是std::search。而且在它们的基础上,还衍生出std::find_if、std::find_if_not、std::find_end等和std::search_n、range…...
解构C++高级命名空间:构建空间作用域·控制兼容
前引:C作为C语言的继承者,也是其掘墓人。在编程语言的演化长河中,C始终游走在【兼容】与【革新】的路上。C程序员眼中(高效直接)的全局函数,对于C开发者来说是【命名空间污染的炸弹】,如果C未发…...
怎么判断是不是公网IP?如何查看自己本地路由器是内网ip还是公网?
在网络世界中,IP 地址如同每台设备的 “门牌号”,起着至关重要的标识作用。而 IP 地址又分为公网 IP 和私网 IP,准确判断一个 IP 属于哪一类,对于网络管理、网络应用开发以及理解网络架构等都有着重要意义。接下来,我们…...
微服务中 本地启动 springboot 无法找到nacos配置 启动报错
1. 此处的环境变量需要匹配nacos中yml配置文件名的后缀 对于粗心的小伙伴在切换【测试】【开发】环境的nacos使用时会因为这里导致项目总是无法启动成功...
android-ndk开发(11): 安装 repo 命令
1. 长话短说 mkdir ~/soft/bin curl -L https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo chmod x repo~/.pathrc 添加: export PATH$PATH:~/soft/bin2. 短话长说 repo 的官方介绍页面: https://gerrit.googlesource.com/git-repo/ repo 的官方下载地…...
【设计模式】GoF设计模式之策略模式(Strategy Pattern)
设计模式之策略模式 Strategy Pattern V1.0核心概念角色代码示例程序运行结果代码讲解 适用范围 V1.0 核心概念 策略模式是一种行为型设计模式,其核心思想是业务类执行某个动作时,可以使用该动作的不同的实现,并在程序运行中可以切换使用该…...
QT6(35)4.8定时器QTimer 与QElapsedTimer:理论,例题的界面搭建,与功能的代码实现。
(112) (113)模仿随书老师给的源代码搭建的, LCD 显示的部分不一样 : (114)以下开始代码完善: 关联定时器的信号与槽函数 : (115)…...
用Python监控金价并实现自动提醒!附完整源码
💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【星海网址导航】💻香港大宽带-4H4G 20M只要36/月👉 点此查看详情 在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价。但黄金价格实时波动频繁…...