Ansible部署与应用基础

news2024/11/16 6:28:31

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

一、Ansible概述

1.什么是Ansible

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

2.Ansible 的架构组成

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

        其基本框架结构如下图 所示。

由上图可以得出 Ansible 的基本架构由六大件构成。

  Ansible core 核心引擎:即 Ansible 本身;


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


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

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

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

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

3.Ansible与saltstack的对比

(1)Ansible 安装部署简单

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

(2)Saltstack 响应速度快

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

(3)Ansible 更安全

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

(4)对 Windows 的支持

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

(5)Ansible 自身运维比较简单

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

二、安装部署Ansible服务

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

1.系统环境设置

(1)设置各个主机的主机名

按照上表设置各个主机的主机名和hosts文件,此处以node1为例

[root@localhost ~]# hostnamectl set-hostname ansible-node1
[root@localhost ~]# bash
(2)设置各个主机的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
(3)关闭所有主机的防火墙
[root@ansible-node1 ~]# systemctl stop firewalld
[root@ansible-node1 ~]# setenforce 0

2.安装 Ansible(只安装第一台) 

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

(1)设置好主机的 EPEL 源
[root@ansible-node1 ~]# yum install -y epel-release
(2)安装 Ansible 
[root@ansible-node1 ~]# yum -y install ansible
(3)查看 Ansible 软件版本信息
[root@ansible-node1 ~]# ansible --version
(4)查看安装目录 

Ansible 主要相关配置文件在/etc/ansible 日录下

[root@ansible-node1 ~]# cd /etc/ansible/
[root@ansible-node1 ansible]# ll
总用量 24
-rw-r--r--. 1 root root 19985 1月  16 2022 ansible.cfg
-rw-r--r--. 1 root root  1016 1月  16 2022 hosts
drwxr-xr-x. 2 root root     6 1月  16 2022 roles

 3.配置主机清单

        /etc/ansible/hosts 文件中可以定义被管理主机,Ansible 通过读取/etc/ansible/hosts 文件内定义的主机清单批量做一些操作。比如定义一个 websrvs 组,包含一台主机,再定义一个 dbsrvs 组,包含另一台主机,内容如下:

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

 4.设置 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 的环境就部署完成。

5.测试安装结果

[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常用的这些核心模块。

1.command 模块

        Ansibale 管理工具使用-m 选项来指定所使用模块,默认使用 command 模块,即-m 选项省略时会运行此模块,用于在被管理主机上运行命令。例如在被管理主机上执行 date 命令,显示被管理主机时间有三种执行命令的方式来管理写入主机清单中的主机。

(1)使用 IP 地址查看被管理主机日期
[root@ansible-node1 ~]# ansible 192.168.10.102 -m command -a 'date'
192.168.10.102 | CHANGED | rc=0 >>
2024年 09月 21日 星期六 09:07:08 CST
 (2)使用管控主机分别查看被管理 web 和 db 组里面所有主机的日期
[root@ansible-node1 ~]# ansible web -m command -a 'date'
192.168.10.102 | CHANGED | rc=0 >>
2024年 09月 21日 星期六 09:07:31 CST
[root@ansible-node1 ~]# ansible db -m command -a 'date'
192.168.10.103 | CHANGED | rc=0 >>
2024年 09月 21日 星期六 09:07:51 CST
 (3)查看所有被管理主机上的日期
[root@ansible-node1 ~]# ansible all -m command -a 'date'
192.168.10.102 | CHANGED | rc=0 >>
2024年 09月 21日 星期六 09:08:18 CST
192.168.10.103 | CHANGED | rc=0 >>
2024年 09月 21日 星期六 09:08:18 CST
 (4)查看所有被管理主机的/etc/passwd 的最后一行
[root@ansible-node1 ~]# ansible all -a 'tail -l /etc/passwd'

注意:
        若省略-m 选项,默认运行 command 模块。 

2.shell 模块

Ansible 中的 shell 模块可以在被管理主机上运行命令,并支持像管道符等功能的复杂命令。

(1)示例一

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

[root@ansible-node1 ~]# ansible db -m user -a 'name=user1'
192.168.10.103 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 1000, 
    "home": "/home/user1", 
    "name": "user1", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": false, 
    "uid": 1000
}
 (2)示例二

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

[root@ansible-node1 ~]# ansible db -m shell -a 'echo redhat|passwd --stdin user1'
192.168.10.103 | CHANGED | rc=0 >>
更改用户 user1 的密码 。
passwd:所有的身份验证令牌已经成功更新。

 3.user 模块

        Ansible 中的 user 模块用于创建新用户和更改、删除已存在的用户。其中 name 选项用于指明创建的用户名称。主要包括两种状态(state):
present 表示添加(省略状态时默认使用);

absent 表示移除。

(1)在被管理组 db 里所有主机上创建一个 user1 用户
[root@ansible-node1 ~]# ansible db -m user -a 'name=user1'
(2)删除上述创建的用户 user1 
[root@ansible-node1 ~]# ansible db -m user -a 'name="user1" state=absent'
4. cron 模块

Ansible 中的 cron 模块用于定义任务计划。主要包括两种状态(state):
        present 表示添加(省略状态时默认使用);
        absent 表示移除。

(1)添加任务计划

添加任务计划,使得被管理组 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 ~l# ansible db
-m cron
-a'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql backup.sh'

(2)移除上述添加的任务计划
[root@ansible-node1 ~]# ansible db -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state=absent'

5. group 模块

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

(1)被管理组 db 里所有主机创建 mysql 组,gid 为 306
[root@ansible-node1 ~]# ansible db -m group -a 'name=mysql gid=306 system=yes'
 (2)将被管理组 dbsrvs 里所有主机的 mysgl 用户添加到 mysql 组中
[root@ansible-node1 ~]# ansible db -m user -a 'name=mysql uid=306 system=yes group=mysql'

 6.copy 模块

Ansible 中的 copy 模块用于实现文件复制和批量下发文件。其中使用 src 来定义本地源


文件路径;使用 dest 定义被管理主机文件路径;使用 content 则是使用指定信息内容生成目标文件。

 (1)示例一

将本地文件/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-node3 ~]# ll /tmp/fstab.ansible 
-rw-r-----. 1 root root 511 9月  21 09:33 /tmp/fstab.ansible

注意:
        在执行命令的时候,如果看到如下报错:

 "msg ":"Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"

        是因为被管理主机开启了 SELinux,需要在被管理机上安装 libselinux-python 软件包,才可以使用 Ansible 中与 copy、file 相关的函数。

 (2)示例二

将”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 25 9月  21 09:35 /tmp/test.ansible
[root@ansible-node3 ~]# cat /tmp/test.ansible 
Hello Ansible Hi Ansible

 7.file 模块

        Ansible 中使用 file 模块来设置文件属性。其中使用 path 指定文件路径;使用 src 定义源文件路径;使用 name 或 dest 来替换创建文件的符号链接。

(1)示例一

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

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

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

[root@ansible-node3 ~]# ll /tmp/fstab.ansible 
-rw-r--r--. 1 mysql mysql 511 9月  21 09:33 /tmp/fstab.ansible
 (2)示例二

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

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

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

[root@ansible-node3 ~]# ll /tmp/fstab.link 
lrwxrwxrwx. 1 root root 18 9月  21 09:42 /tmp/fstab.link -> /tmp/fstab.ansible

8. ping 模块

Ansible 中使用 ping 模块来检测指定主机的连通性。示例:检测所有被管理主机的连通性。

[root@ansible-node1 ~]# ansible all -m ping
192.168.10.103 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.10.102 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

 9.script 模块

        Ansible 中的 script 模块可以将本地脚本复制到被管理主机上进行运行。需要注意的是使用相对路径指定脚本位置。

(1)示例

编辑一个本地脚本 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

10. yum 模块

Ansible 中的 yum 模块负责在被管理主机上安装与卸载软件包,但是需要提前在每个节点配置自己的YUM 仓库。
其中:
        使用 name 指定要安装的软件包,还可以带上软件包的版本号;否则安装最新的软件包。
        使用 state 指定安装软件包的状态, present、latest 用来表示安装, absent 表示卸载。

 (1)示例一

被管理组 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.el7_8.2.x86_64
(2)示例二 

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

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

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

[root@ansible-node3 ~]# rpm -q zsh
未安装软件包 zsh
11. service 模块

        Ansible 中使用 service 模块来控制管理服务的运行状态。其中使用 enabled 表示是否开机自动启动,取值为 true 或者 fa1se:使用 name,定义服务名称:使用 state 指定服务状态,取值有 started.
stoped、restarted。

(1)示例一

查看被管理组 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 服务并且设置为开机自动启动状态。 

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

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

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

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

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

[root@ansible-node1 ~]# ansible web -a 'systemctl is-enabled httpd'

12.setup 模块

        Ansible 中使用 setup 模块收集、査看被管理主机的 facts(facts 是 Ansible 采集被管理主机设备信息的一个功能)。每个被管理主机在接收并运行管理命令之前,都会将自己的相关信息( 操作系统版本、IP 地址等)发送给控制主机。
查看被管理组 db 里所有主机的 facts 信息:

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

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

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

相关文章

Linux中使用cp命令的 -f 选项,但还是提醒覆盖的问题

问题: linux 在执行cp的命令的时候,就算是执行 cp -f 也还是会提醒是否要进行替换。 问题原因: 查看别名,alias命令,看到cp的别名为cp -i,那就是说cp本身就是自带覆盖提醒,就算我们加上-f 的…

《机器人SLAM导航核心技术与实战》第1季:第9章_视觉SLAM系统

视频讲解 【第1季】9.第9章_视觉SLAM系统-视频讲解 【第1季】9.1.第9章_视觉SLAM系统_ORB-SLAM2算法(上)-视频讲解 【第1季】9.1.第9章_视觉SLAM系统_ORB-SLAM2算法(下)-视频讲解 【第1季】9.2.第9章_视觉SLAM系统_LSD-SLAM算法…

TikTok提示“Network is out of reach”怎么处理?

当TikTok提示“Network is out of reach”时,意味着应用无法连接到互联网。导致这一问题的常见原因包括网络连接不稳定、地理限制或网络设置与应用不兼容等。解决方法有:拔除手机卡、关闭手机定位服务、切换至稳定的海外IP网络等。使用TikTok专用网络也可…

用户态缓存:链式缓冲区(Chain Buffer)

目录 链式缓冲区(Chain Buffer)简介 为什么选择链式缓冲区? 代码解析 1. 头文件与类型定义 2. 结构体定义 3. 宏定义与常量 4. 环形缓冲区的基本操作 5. 其他辅助函数 6. 数据读写操作的详细实现 7. 总结 8. 结合之前的内容 9. 具…

利用LRZ压缩与Base64编码实现高效文件上传

引言 在当今互联网时代,文件上传已成为众多在线服务不可或缺的一部分,尤其是在社交媒体平台上的照片分享和云存储服务中的文档管理等场景,高效且安全的文件上传机制对于保障用户体验至关重要。 为此,本文将介绍一种结合了LRZ压缩…

汇川AM400脉冲轴控制(轴控功能块ST源代码)

汇川AM400如何和编程软件通信连接 汇川AM400PLC如何和编程软件通信连接_汇川am400读取程序-CSDN博客文章浏览阅读159次。本文介绍了如何使用CODESYS编程软件与汇川AM400PLC进行通信连接,包括扫描网络、修改IP地址、刷新日志和下载监控程序的步骤。同时,文章提到了CODESYS编程…

灯塔:JavaScript

Web标准也称为网页标准,由一系列的标准组成,大部分由W3C(World Wide Web Consortium,万维网联盟)负责制定。 三个组成部分: HTML:负责网页的基本结构(页面元素和内容)。 CSS&…

go 安装依赖超时

一、配置代理 go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.io,direct go get github.com/unidoc/unioffice

ODrive电机驱动算法VScode环境配置笔记教程

1、ODrive基本介绍 ODrive 是一个开源的优秀电机控制器项目,旨在为各种应用提供高性能、高可靠性的电机控制解决方案。这个项目是专门用于驱动无刷直流电机(BLDC)和永磁同步电机(PMSM)的高性能开源伺服控制系统。ODriv…

AI绘制调整虚线教程

1、打开ai的软件,执行菜单栏中的文件—新建,新建一个大小任意的画板,画板大小根据自己的需要来设置。 2、选择工具箱中的直线段工具,将填充设置为无,描边设置为黑色,描边大小稍微设置大一点,画一…

【学习笔记】STM32F407探索者HAL库开发(五)F407时钟系统配置

【学习笔记】STM32F407探索者HAL库开发(四)F407时钟系统配置 1 F407_CubeMX时钟树配置(传送门)2 STM32F407时钟树2.1 STM32F407时钟系统图2.2 STM32F103时钟树简图2.2.1 高速部分2.2.2 低速部分 2.3 时钟源2.3.1 外部时钟源2.3.2 …

SOCKS5、HTTP 代理IP协议有何区别?

在网络通信领域,代理服务器的选择对于数据安全和传输效率至关重要。SOCKS5代理和HTTP代理作为两种常用的代理类型,各自具有独特的特点和适用场景。本文将深入探讨SOCKS5代理与HTTP代理的区别、特性及应用场景,为用户提供选择指南。 一、SOCK…

数据结构:二叉树(一)

ps:偷懒了几天,接着更新 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的…

MODIS/Landsat/Sentinel下载教程详解【常用网站及方法枚举】

⛄前言 在当今快速发展的地球观测时代,遥感技术作为获取地球表面及其环境信息的重要手段,正以前所未有的广度和深度改变着我们对自然界的认知与管理方式。MODIS(Moderate-resolution Imaging Spectroradiometer,中分辨率成像光谱…

【全网最全】2024华为杯研赛D题完整代码建模过程+py代码(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 点击链接加入【2024华为杯研赛资料汇总】:https://qm.qq.com/q/XzdIsvbiM0 https://qm.qq.com/q/XzdIsvbiM0 问题一 .在众多描述地理环境的变…

科研绘图系列:R语言箱线图和连线图(boxplot linechart)

文章目录 介绍加载R包导入数据画图1画图2画图3画图4系统信息介绍 箱线图表示组间差异,连线图表示数据波动。 加载R包 library("here") library("tidyverse") library("ggpubr") library("scales"

Git从了解到操作

Git常用命令 基本的linux命令 ls / ll 查看当前目录( ls 是查看目录有哪些文件夹,ll 是查看隐藏文件)cat 查看文件内容touch 创建文件vi vi编辑器 (使用 vi 编辑器是为了方便展示效果,也可以记事本、editPlus、notPad等其它编辑器) 备注 Git GUl: Gi…

数值计算 --- 平方根倒数快速算法(0x5f3759df,这是什么鬼!!!)

平方根倒数快速算法 --- 向Greg Walsh致敬&#xff01; 写在最前面&#xff1a; 上图中的这段代码出自一个早期的3D游戏<雷神之锤>的源代码&#xff0c;它实现的功能就是计算一个数x的平方根的倒数&#xff1a; 这段代码之所以称之为经典&#xff0c;私以为主要是因为以下…

51单片机——LED灯篇

一、LED与单片机P2管脚相连 二、点亮一个LED灯 #include <STC89C5xRC.H> void main() { P2 0xFE; //1111 1110 } P2有8个管脚&#xff0c;对应8个二进制位。 LED灯右侧接电源是正极&#xff08;1&#xff09;&#xff0c;左侧给负极&#xff08;0&#xff09;即可…

SpringBoot教程(三十) | SpringBoot集成Shiro权限框架(shiro-spring 方式)

SpringBoot教程&#xff08;三十&#xff09; | SpringBoot集成Shiro权限框架&#xff08;shiro-spring方式&#xff09; 一、 什么是Shiro二、Shiro 组件核心组件其他组件 三、流程说明shiro的运行流程 四、SpringBoot 集成 Shiro1. 添加 Shiro 相关 maven2. 添加 其他 maven3…