Ansible 自动化运维工具(完善版)

news2024/11/17 23:32:53

目录

 Ansible概述

Ansible特点

Ansible应用

1、使用者

2、Ansible工具集合

3、作用对象

Ansible的搭建

环境

ansible主机

1、ansible

2、Ansible-doc

Ansible模块

1.command模块

2.shell模块

3.raw模块


 Ansible概述

Ansible是最近非常火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误,Ansible可以通过本身集成的非常丰富的模块实现各种管理任务,其自带模块数量已超过上千个,更为重要的是,它的操作非常简单,即使新手也比较容易上手,Ansible提供的功能却非常丰富,在运维领域,几乎可以实现任何事情。目前属于RedHat公司产品,官方地址:Ansible is Simple IT Automation。

Ansible特点

Ansible自2012年发布以来,很快在全球流行,其特点表现如下:

  1. Ansible基于python开发,运维工程师对其二次开发相对容易
  2. Ansible拥有丰富的内置模块,基本可以满足一切要求
  3. 管理模式非常简单,一条命令可以影响上千台机器
  4. 无客户端模式设计,底层基于SSH通信
  5. Ansible发布后也陆续被AWS,Google,Cloud Platfrom,Microsoft Azure,Cisco,HP,VMware,Twitter等大公司接纳并投入使用

Ansible应用

Ansible没有客户端,也不需要在被管理主机添加任何代理程序,通过SSH完成底层通信,而SSH在Linux的发型版本中默认已经安装并启用,而在Windows系统下则依赖于PowerShell,Ansible要求管理端必须是Linux系统,在管理节点通过应用模块将指令发送到被管理主机上,并在执行完毕后自动删除产生的临时文件,根据Ansible使用过程中不同角色,可将其分为三个部分。

  1. 使用者如何使用Ansible实现自动化运维?
  2. Ansible的工具集,Ansible可以实现的功能?
  3. 作用对象,Ansible可以影响哪些主机?

1、使用者

如图所示:Ansible使用者可以采用多种方式和Ansible交互,图中我们展示了四种方式

  1. CMDB:CMDB系统存储和管理着企业IT架构中的各种配置信息,是构建ITL项目核心工具,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具完成操作者所希望达到的目标。
  2. PUBLIC/PRIVATE方式,Ansible除了丰富的内置模块外,同时提供丰富的API语言接口,如PHP,Pythone,PERL等多种流行语言,基于PUBLIC/PRIVATE,Ansible以API调用的方式运行。
  3. Ad-Hoc命令集,Users直接通过Ad-Hoc命令集调用Ansible工具来完成工作。
  4. Playbooks:Users预先编写好Ansible Playbooks,通过执行Playbooks中预先编排好的任务集按序执行命令。

2、Ansible工具集合

Ansible工具集合了inventory,Moudles,Plugins和API。其中,inventory用来管理设备列表,可以通过分组(不同的业务)实现,对组的调用直接影响组内所有的主机;Moudles是各种执行模块,几乎所有的管理任务都是通过模块来执行的;Plugins提供了各种附加功能;API为编程人员提供了一个调用接口,可以做Ansible的二次开发具体表现如下:

  1. Ansible Playbook:任务脚本,编排定义Ansible任务集的配置文件,由Ansible按序依次执行,通常是JSON格式的YML/YAML文件;
  2. inventory:Ansible管理主机清单
  3. Moudle:Ansible执行命令功能模块,多数为内置的核心模块也可以用户自定义;
  4. Plugins:模块功能的补充,如连接类型插件,循环插件,变量插件,过滤插件等,该功能不常用。
  5. API:提供第三方程序调用的应用程序编程接口;

Ansible:该部分图中表示的,组合inventory,API,Moudles,Plugins可以理解为Ansible

命令工具其核心执行工具。

3、作用对象

Ansible的作用对象不仅仅是Linux和非Linux操作系统的主机,也可以作用于各类PUBLIC/PRIVATE,商业和非商业设备的网络设施。

使用者使用Ansible或Ansible-playbooks时,在服务器终端输入Ansible的Ad-Hoc命令集或playbooks后,Ansible会遵循预先定义安排的规则将Playbooks逐步拆解为Play,再将Play组织成Ansible可以识别的任务,随后调用任务涉及的所有模板和插件,根据inventory中自定义的主机列表通过SSH将任务集以临时文件或命令的形式传输给远程客户端执行并返回执行结果,如果是临时文件则执行完毕后自动删除。

Ansible的搭建

接下来我们来学习Ansible的安装和部署。Ansible的安装部署非常简单,以RPM安装为例,配置好阿里云的yum源直接安装就可以了,Ansible的管理端只能是Linux,如Redhat,Debian,CentOS。下面介绍在CentOS7.x上安装部署Ansible。 

环境

三台主机

192.168.1.127      ansible

192.168.1.104      client1

192.168.1.139      client2

关闭防火墙规则

ansible主机

rpm -ivh epel-release-latest-7.noarch.rpm       获取/下载epel

[root@ansible yum.repos.d]#  yum -y install ansible       下载ansible

[root@ansible yum.repos.d]# ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg                     查看安装成功没有
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

配置免密

[root@ansible yum.repos.d]# ssh-keygen -t rsa                          获取密钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:zk14Bvu7AMdgMrTTwwac8ehWIU8MwC4ZHZg0nBQIkvs root@ansible
The key's randomart image is:
+---[RSA 2048]----+
|O@=+*=o          |
|Bo+.o@..         |
| =  * @ .        |
|+ .. B + +       |
| o  o . S +      |
|  E.   = *       |
|        + o      |
|         . .     |
|          o.     |
+----[SHA256]-----+

[root@ansible yum.repos.d]# ssh-copy-id root@192.168.1.139                  密钥转发
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.1.139 (192.168.1.139)' can't be established.
ECDSA key fingerprint is SHA256:KUnDzA9EBdTNT0UE3pDB18XcdeWBK780vEkpfsZR7PI.
ECDSA key fingerprint is MD5:f6:96:4e:cc:7f:5d:73:60:d6:e3:22:7c:00:25:32:3a.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.1.139's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.1.139'"
and check to make sure that only the key(s) you wanted were added.

[root@ansible ansible]# ssh-copy-id 192.168.1.104                                 密钥转发
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.1.104 (192.168.1.104)' can't be established.
ECDSA key fingerprint is SHA256:piBqU+u0+t5qsjQT4q0bo3thfDsvUqPyITyru9QgFpI.
ECDSA key fingerprint is MD5:ce:f2:03:71:59:73:26:75:ed:a0:92:32:ed:e3:89:a5.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on the remote system.
        (if you think this is a mistake, you may want to use -f option)

[root@ansible yum.repos.d]# cp /etc/ansible/hosts{,.bak}      做备份
[root@ansible yum.repos.d]# ll /etc/ansible/hosts{,.bak}
-rw-r--r--. 1 root root 1016 1月  16 2022 /etc/ansible/hosts
-rw-r--r--. 1 root root 1016 7月  14 09:13 /etc/ansible/hosts.bak

[root@ansible ~]# vim /etc/ansible/hosts                                         

inventory是Ansible管理主机信息的配置文件,相当于系统的Hosts文件功能,默认存放在/etc/ansible/hosts。在hosts文件中通过分组来组织设备,Ansible通过inventory来定义主机和分组,通过ansible命令中是用选项-i或者--inventory-file指定inventory。

[web]
192.168.1.104
192.168.1.139

实验

 置完成后可以针对hosts定义服务组件进行远程操作,也可以针对组中的指定的某一个或多个主机操作,下面接收如何针对特定的服务器操作

只对192.168.1.0网段主机进行操作。通过通配符限定主机变更

[root@ansible ~]#  ansible 192.168.1.* -m command -a "head -5 /etc/passwd"

nsible的维护命令大多以ansible开头,在终端输入ansible后连续按两次tab键,会补全所有以ansible字母开头的命令,下面介绍Ansible的一些常用命令。

[root@ansible ~]# ansible
ansible               ansible-console-2     ansible-galaxy-2      ansible-pull
ansible-2             ansible-console-2.7   ansible-galaxy-2.7    ansible-pull-2
ansible-2.7           ansible-doc           ansible-inventory     ansible-pull-2.7
ansible-config        ansible-doc-2         ansible-playbook      ansible-vault
ansible-connection    ansible-doc-2.7       ansible-playbook-2    ansible-vault-2
ansible-console       ansible-galaxy        ansible-playbook-2.7  ansible-vault-2.7

1、ansible

Ansible是生产环境中使用非常频繁的命令之一,主要在以下场景应用

  1. 非固化需求
  2. 临时一次性操作
  3. 二次开发接口调用

非固化需求是指临时性的维护,如查看Rich服务器组的磁盘使用情况,复制一个文件

到其他机器等,类似这些没有规律的,临时需要做的任务,我们称为非固化需求,临时一次性操作

语法: ansible  <host -pattem> [options]

可用选项如下

  • -v(--verbose):输出详细的执行过程信息,可以得到执行过程所有信息
  • -i PATH(inventory=PATH):指定inventory信息,默认为/etc/ansible/hosts
  • -f NUM(--forks=NUM):并发线程数,默认为5个线程
  • --private-key=PRIVATE_KEY_FILE:指定密钥文件
  • -m NAME,--moudle-name=NAME:指定执行时使用的模块
  • -M DIRECTORY(--module-path=DIRECTORY):指定模块存放路径,默认为/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认目录
  • -a ARGUMENTS(--args=ARGUMENTS):指定模块参数
  • -u USERNAME(--user=USERNAME):指定远程主机USERNAME运行命令
  • -l subset(--limit=SUBSET):限定运行主机
  • --list-hosts:列出符合条件的主机列表,不执行任何命令

实验所有主机是否存活

root@ansible ~]# ansible all -f 2 -m ping

这里只有两台,可以按需求调整

查看所有主机列表

[root@ansible ~]# ansible web --list-host
  hosts (2):
    192.168.1.104
    192.168.1.119
[root@ansible ~]# ansible web --list
  hosts (2):
    192.168.1.104
    192.168.1.119

查看web组磁盘使用情况
[root@ansible ~]# ansible web -m command -a "df -hT"
192.168.1.104 | CHANGED | rc=0 >>
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.9M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  1.8G   16G   11% /
/dev/sda1               xfs      1014M  168M  847M   17% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
192.168.1.119 | CHANGED | rc=0 >>
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  898M     0  898M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M  9.7M  900M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  1.8G   16G   11% /
/dev/sda1               xfs      1014M  181M  834M   18% /boot
tmpfs                   tmpfs     182M     0  182M    0% /run/user/0

  1. Rich需要提前在/etc/ansible/hosts文件中定义组
  2. Ansible的返回结果非常友好,一般会用三种颜色执行结果:红色绿色橘黄色,其中红色表示执行过程中有异常,橘黄色表示命令执行后目标有状态变化,绿色表示执行成功且没有对目标机器做修改

2、Ansible-doc

ansible-doc用来查询ansible模块文档的说明,类似于man命令,针对每个模块都有详细的用法说明及应用案例介绍

[root@ansible ~]#  ansible-doc -l | wc -l           查看帮助
3387

[root@ansible ~]# ansible-doc -s shell               查看 shell模块帮助

[root@ansible ~]# ansible-doc -s raw                 raw模块帮助

ansible-playbook

Ansible-playbook是日常应用中使用频率最高的命令,类似于Linux系统中的sh或source命令,用来执行系列任务,其工作机制是,通过读取编写好的playbook文件实现集中处理任务,ansible-playbook命令后跟yml或者yaml格式的playbook文件,playbook文件存放了要执行的任务代码,命令使用方式如下

[root@ansible ~]# vim sdf.yml

---
- name: Play 1
  hosts: all
  tasks:
    - name: Task 1
      command: ip a

- name: Play 2
  hosts: localhost
  tasks:
    - name: Task 2
      debug:
        msg: Hello, World!

 启动

[root@ansible ~]# ansible-playbook sdf.yml 

PLAY [Play 1] *****************************************************************************************

TASK [Gathering Facts] ********************************************************************************
ok: [192.168.1.119]
ok: [192.168.1.104]

TASK [Task 1] *****************************************************************************************
changed: [192.168.1.104]
changed: [192.168.1.119]

PLAY [Play 2] *****************************************************************************************

TASK [Gathering Facts] ********************************************************************************
ok: [localhost]

TASK [Task 2] *****************************************************************************************
ok: [localhost] => {
    "msg": "Hello, World!"
}

PLAY RECAP ********************************************************************************************
192.168.1.104              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.1.119              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Ansible playbook 的执行结果。结果分为几个部分:

  1. PLAY [Play 1]PLAY [Play 2] 是 playbook 中定义的两个 plays 的名称。
  2. TASK [Gathering Facts] 是一个内置的任务,用于收集主机的基本信息,如 IP 地址、操作系统等。
  3. TASK [Task 1]TASK [Task 2] 是你在 playbook 中定义的具体任务。
  4. ok: [192.168.1.119]ok: [192.168.1.104] 表示任务在这两台主机上成功执行。
  5. changed: [192.168.1.104]changed: [192.168.1.119] 表示任务在这两台主机上执行了变更。
  6. ok: [localhost] 表示任务在本地主机成功执行。
  7. "msg": "Hello, World!" 是任务执行结果中的一条 debug 信息,它打印了 "Hello, World!"。
  8. PLAY RECAP 列出了每个主机的执行结果汇总,包括执行成功的任务数、变更的任务数、不可达的主机数等。

综合来看,这个执行结果表示 playbook 中的任务在指定的主机上成功执行,并且有一些任务执行了变更操作。最后,打印了一个 debug 信息 "Hello, World!"。

ansible-console

ansible-console是ansible为用户提供的一款交互式工具,类似于Windows中的cmd以及Linux中的shell,用户可以在ansible-console虚拟出来的终端上做像shell一样使用ansible内置的各种命令,这为习惯于使用shell交互方式的用户提供了良好的体验,在终端输入ansible-console命令后显示如下

[root@ansible ~]# ansible-console
Welcome to the ansible console.
Type help or ? to list commands.

root@all (2)[f:5]$ cd web
root@web (2)[f:5]$ list
192.168.1.104
192.168.1.119
root@web (2)[f:5]$ exit

所有操作与shell类似,而且支持Tab键补全,按快捷键Ctrl+D或Ctrl+C即可退出当前的虚拟终端

Ansible模块

1.command模块

command模块在远程主机执行命令,但是不支持管道,重定向等shell的特征,常用参数如下(不支持管道,不建议使用)。

  1. chdir:在远程主机上运行命令前要提前进入的目录
  2. creates:在命令运行时创建一个文件,如果文件已经存在,则不会创建任务
  3. removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务
  4. executable:指明运行命令的shell程序

实验案例

1.在所有主机上运行“ls./”命令,运行前切换到/home目录。操作如下。

准备一下环境:在两台主机上分别创建Rich用户否则/home下是空的查看不到效果

[root@ansible ~]#  ansible web -m command -a "useradd web"          创建
192.168.1.119 | CHANGED | rc=0 >>

192.168.1.104 | CHANGED | rc=0 >>

[root@client1 home]# ll                          查看
总用量 0
drwx------. 2 sd  sd  62 6月  19 21:55 sd
drwx------. 2 web web 62 7月  14 10:52 web

[root@clint2 home]# ll                               查看
总用量 0
drwx------. 2 sd  sd  62 6月  16 16:50 sd
drwx------. 2 web web 62 7月  14 10:52 web

[root@ansible ~]# ansible web -m command -a "chdir=/home ls -l"                      也可在ansible主机查看
192.168.1.104 | CHANGED | rc=0 >>
总用量 0
drwx------. 2 sd  sd  62 6月  19 21:55 sd
drwx------. 2 web web 62 7月  14 10:52 web
192.168.1.119 | CHANGED | rc=0 >>
总用量 0
drwx------. 2 sd  sd  62 6月  16 16:50 sd
drwx------. 2 web web 62 7月  14 10:52 web

[root@ansible ~]# ansible web -m command -a "uptime"
192.168.1.104 | CHANGED | rc=0 >>
 10:54:40 up  2:25,  5 users,  load average: 0.00, 0.01, 0.05
192.168.1.119 | CHANGED | rc=0 >>
 10:54:40 up  2:22,  5 users,  load average: 0.04, 0.04, 0.05

2.shell模块

shell模块在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令,和command模块的区别是它支持shell特征,如管道,重定向等。

实验案例

1、重定向

[root@ansible ~]# ansible web -m shell -a "echo 123 > 1.txt"
192.168.1.104 | CHANGED | rc=0 >>

192.168.1.119 | CHANGED | rc=0 >>

[root@client1 ~]# ll
总用量 8
-rw-r--r--. 1 root root    4 7月  14 10:55 1.txt

[root@clint2 ~]# ll
总用量 8
-rw-r--r--. 1 root root    4 7月  14 10:55 1.txt

2、测试管道符

过滤client端mac地址严格遵守文档格式 要不会报错

[root@ansible ~]# ansible web -m shell -a 'ifconfig ens33 | awk "/ether/{print $2}"'
192.168.1.104 | CHANGED | rc=0 >>
        ether 00:0c:29:13:d2:b5  txqueuelen 1000  (Ethernet)
192.168.1.119 | CHANGED | rc=0 >>
        ether 00:0c:29:44:9f:54  txqueuelen 1000  (Ethernet)

3.raw模块

最原始的方式运行命令(不依赖python,仅通过ssh实现)

清除yum缓存

[root@ansible ~]# ansible web -m raw -a "yum clean all"
192.168.1.119 | CHANGED | rc=0 >>
已加载插件:fastestmirror
正在清理软件源: base epel extras updates
Cleaning up list of fastest mirrors
Shared connection to 192.168.1.119 closed.

192.168.1.104 | CHANGED | rc=0 >>
已加载插件:fastestmirror
正在清理软件源: base epel extras updates
Cleaning up list of fastest mirrors
Shared connection to 192.168.1.104 closed.

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

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

相关文章

Verdi分析有限状态机

Verdi平台包括最先进的结构可视化和分析工具&#xff0c;其中&#xff0c;nTrace用于源代码&#xff0c;nWave用于波形&#xff0c;nSchema用于原理图/逻辑图&#xff0c;nState用于有限状态机&#xff08;FSM&#xff09;。本节将对nState的使用进行介绍。 为了简单起见&#…

软件测试(测试用例 )—— 写用例无压力

软件测试——用例篇 一、概念 测试用例的基本概念&#xff1a; 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合&#xff0c;这组集合包含&#xff1a;测试环境、操作步骤、测试数据、预期结果等要素 。 主要步骤&#xff1a; 测试…

企业数字化营销怎么做?企业数字化营销系统怎么选择?

数字化营销是在不改变原有营销本质的前提下&#xff0c;借助数字化平台&#xff0c;把营销集成在系统或者说平台&#xff0c;通过平台的整合发力&#xff0c;改变传统营销压力及规避一些营销困难&#xff0c;实现数据留痕平台&#xff0c;用数据反哺运营与营销&#xff0c;让营…

jdk动态代理案例和实现原理

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

visio插入mathtype保存时报错“DOS共享冲突”解决方案

软件版本 软件版本VisioMicrosoft Visio 专业版2019WordMicrosoft Office LTSC 专业增强版 2021MathType7.4.10.53WindowsWindows 10 家庭中文版 22H2 19045.3208 现象 无论是从Word直接“粘贴”到Visio或从Visio“插入→对象”插入“MathType 7.0 Equation”&#xff0c;在…

如何为SoC做ARM CPU适配——以裸核使用malloc为例

本文任务&#xff1a;为陌生的SoC平台编写基础软件&#xff0c;适配 malloc() 函数 0 如何为SoC做ARM CPU适配 今时不同往日&#xff0c;我们平时开发/娱乐接触到的消费级MCU/MPU基本山都是包含处理核与一系列外设的SoC。如果熟悉裸片开发&#xff0c;一定会在厂家提供的标准…

运营工具篇

既然要做点事&#xff0c;至少要先做到万事俱备只欠东风。 我们也不用把研发产品看得太神圣&#xff0c;比如拿一张纸做出来一个会旋转的纸杯&#xff0c;碰巧有一群人喜欢它并且愿意为它付费&#xff0c;那么剩下要做的是什么&#xff1f;把这个纸杯量产并送到目标用户面前。…

Baklib团队拜访深证通,加强与合作企业沟通

2023年7月11日&#xff0c;Baklib商务经理、运营经理拜访了深圳证券通信有限公司&#xff08;以下简称为&#xff1a;深证通&#xff09;。 2023年7月11日&#xff0c;Baklib商务经理、运营经理拜访了深圳证券通信有限公司&#xff08;以下简称为&#xff1a;深证通&#xff09…

Java程序员需要掌握的前端知识(一)

对于前端知识&#xff0c;需要进一步巩固和加强&#xff0c;进入企业之后&#xff0c;要具备一定的接口调试&#xff0c;参数接收的能力&#xff0c;以及单体页面的开发&#xff0c;这里我学习一下前端知识巩固一下自身的技术栈和水平。本次笔记是跟学黑马的同名课程&#xff0…

2-5 构建聚合工程

父项目 新建 子模块 创建 父项目的pom文件 自动添加了模块引用 1. 聚合工程里可以分为顶级项目&#xff08;顶级工程、父工程&#xff09;与子工程&#xff0c;这两者的关系其实就是父子继承的关系 子工程在maven里称之为模块&#xff08;module&#xff09;&#xff0c;模…

redis和mongodb数据库的基本操作

目录 一、redis基本操作 1、 string类型数据的命令操作&#xff1a; 2、 list类型数据的命令操作&#xff1a; 3、 hash类型数据的命令操作 4、Keys相关的命令操作 二、MongoDB 基本操作作业 1. 查找练习 2.增加、更新、删除作业 &#xff1a; 3.使用之前的grade数据库…

【开发者指南】MyEclipse是如何支持AngularJS的?

MyEclipse在2015 CI 7版本中就引入了对AngularJS的支持&#xff0c;接着往下看&#xff0c;本文将介绍它包含的功能特性。 MyEclipse v2023.1.1离线版下载 1. 支持AngularJS MyEclipse对AngularJS的初始支持在MyEclipse 2015 CI 7中可用&#xff0c;后续版本将提供更多的Ang…

linux进程间通信的本质

因为进程间具有独立性&#xff0c;你们想用进行进程间通信&#xff0c;难度还是比较大的。 进程间通信的本质就是让不同的进程看到同一份资源。 为什么要进行进程间通信——交互数据、控制、通知等目标 进程间通信的技术背景 进程是具有独立性的。虚拟地址空间页表 保证进程运…

Java基础---常用类大全以及各数据结构的方法大全

目录 前言 一、Math类 二.Scanner类 三、String类、StringBuilder和StringBuffer类 &#x1f496;String类 &#x1f496;StringBuilder和StringBuffer 四.Arrays类 五.Random类 六.时间类 七.ArrayList顺序表 八、LinkedList与链表 九.Stack栈和Queue队列 十.Pri…

UE5 DLC

前言 在网上找了很多文档,并没有介绍DLC如何创建,但是对比多篇文档后,可以总结为DLC也是Pak包,本质上还是补丁包,B站上有一篇视频介绍了: [UE4]如何在虚幻4游戏里添加DLC的教程(中英机翻)_哔哩哔哩_bilibili 但是也感觉不对,因为要改Build.cs文件。故研究了一下插件式…

【python】python五月国内社会消费品零售总额数据分析(代码+数据+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、51CTO技术博主 &#x…

ARM微控制器 AM2432BSEFHIALXR、AM2432BSFFHIALV技术参数(32位MCU)

1、AM2432BSEFHIALXR 32位MCU采用293引脚FCCSP封装&#xff0c;工作频率最高可达800MHz。该微控制器专为需要结合处理和实时通信的工业应用而构建&#xff0c;例如远程I/O模块和电机驱动器。 核心处理器&#xff1a;ARM Cortex-M4F&#xff0c;ARM Cortex-R5F 内核规格&#xf…

2.数据结构--空间复杂度

文章目录 一、空间复杂度讲解二、计算下列经典例题的空间复杂度1.冒泡排序的空间复杂度 O(1)2.斐波那契递归的空间复杂度 O(N)3.计算阶乘递归的空间复杂度 O(N) 三、时间复杂度和空间复杂度的对比四、常见的函数的时间复杂度和空间复杂度的总结 一、空间复杂度讲解 1.空间复杂…

复习第五课 C语言-初识数组

目录 【1】初识数组 【2】一维数组 【3】清零函数 【4】字符数组 【5】计算字符串实际长度 练习&#xff1a; 【1】初识数组 1. 概念&#xff1a;具有一定顺序的若干变量的集合 2. 定义格式&#xff1a; 数组名 &#xff1a;代表数组的首地址&#xff0c;地址常量&…

【iOS】ARC内存管理

内存管理 内存管理的思考方式iOS底层内存管理方式1. tagged pointer2. on-pointer iSA--非指针型iSA3. SideTables&#xff0c;RefcountMap&#xff0c;weak_table_t 内存管理有关修饰符__strong修饰符对象的所有者和对象的生命周期__strong对象相互赋值方法参数中使用__strong…