[Ansible实践笔记]自动化运维工具Ansible(一):初探ansibleansible的点对点模式

文章目录

    • Ansible介绍
      • 核心组件
      • 任务执行方式
    • 实验前的准备
      • 更新拓展安装包仓库
      • 在ansible主机上配置ip与主机名的对应关系
      • 生成密钥对
      • 将公钥发送到被管理端,实现免密登录
      • 测试一下是否实现免密登录
    • 常用工具
        • ansible
        • ansible—doc
        • ansible—playbook
      • 主要配置文件
    • Ansible 模块
      • 配置主机清单
      • 配置主配置文件(默认可以不改)
      • Ansible的执行状态
      • Ansible常用模块
        • ping模块
        • group模块
          • 查看group模块的用法
          • 实例:对node1主机组的成员(即server1)创建一个ID为111、名称为IT的组
          • 创建一个gid已经存在的组
          • 删除刚刚创建的组
      • user模块
        • 查看user模块的用法
        • 实例:在主机组node1(server1)上创建一个系统用户zs,家目录为/home/zhangsan,uid为111,附加组为IT,以及给一个注释
        • 删除刚刚的用户zs
      • command模块
        • 查看command模块的使用
        • 实例
          • 1.在所有服务器上创建文件
          • 2.在所有服务器上查询所有以`_test`结尾的文件
          • 3.删除刚刚创建的/root/command_test
      • shell模块
        • 实例
      • script模块
        • 参数说明
        • 实例
      • copy模块
        • 参数解释
        • 实例:将本地/root目录下的文件复制到目标服务器,并改名
        • 将本地文件复制到目标服务器,并指定属组和属主
        • 传输文件时修改权限信息
        • 创建一个文件并直接编辑
      • file模块
        • 查看参数说明
        • 创建目录(指定属组属主以及权限)
        • 创建文件
        • 删除目录/文件
        • 创建软连接
        • 创建硬链接
      • yum模块
        • 查看参数
      • service模块
      • setup模块
      • Selinux模块
        • 参数

Ansible介绍

  • 通过一个机器控制若干个机器
  • 机器间通过ssh协议传送指令
  • 基于模块部署,ansible仅提供框架

核心组件

在这里插入图片描述

组件功能
Ansible核心程序
Host Inventory记录由ansible管理的主机信息(包括端口、密码、IP等)
Playbook存放多个任务的yaml格式文件,定义主机需要调用哪些模块完成功能
Core Modules通过调用核心模块完成ansible任务
Custom Modules完成核心模块不支持的功能
Connetion Plugins用于主机和远程服务器的连接

任务执行方式

  • 点对点

    • 使用单个模块,支持批量执行单条命令
    • 一般用于可快速执行的操作
    • 如对大量服务器执行shell或某个Linux命令
  • 剧本模式

    • 通过编写yaml文件组合多个任务(task)
    • 适用需要执行较为复杂的命令
    • 如对大量服务器配置Nginx的网站服务

实验前的准备

三台机器

主机名及作用IP
ansile(ansible主机)192.168.28.88
server1192.168.28.66
server2192.168.28.77
可以再加几台模拟大场景192.168.28.x

在这里插入图片描述

更新拓展安装包仓库

yum -y install epel-release

在ansible主机上配置ip与主机名的对应关系

# vim /etc/hosts
.....
192.168.28.66 server1
192.168.28.77 server2
.....

生成密钥对

# ansible主机上执行
ssh-keygen -P "" -t rsa # 注意这里的P是大写

在这里插入图片描述

将公钥发送到被管理端,实现免密登录

 ssh-copy-id -i /root/.ssh/id_rsa.pub root@server1
  ssh-copy-id -i /root/.ssh/id_rsa.pub root@server2
  ssh-copy-id -i /root/.ssh/id_rsa.pub root@server3

在这里插入图片描述

测试一下是否实现免密登录

ssh root@server1
exit
ssh root@server2
exit

在这里插入图片描述

常用工具

ansible

常用于执行临时命令

ansible—doc

常用于模块功能的查询

ansible—playbook

角色目录(剧本)

主要配置文件

  • /etc/ansible.cfg:主配置文件
  • /etc/ansible/hosts:主机清单文件
  • /etc/ansible/roles:角色目录

Ansible 模块

配置主机清单

编辑/etc/ansible/hosts文件,在最后面加上被管理端

vim /etc/ansible/hosts
		····
		····繁杂的注释····
		····
[all_servers]  # 这部分没配置主机与IP地址的对应关系时应填写服务器IP
server1        # 如192.168.28.66
server2			        # 如192.168.28.77

[node1]        # ansible靠方框里的名称识别服务器
server1

[node2]
server2
server1

[node3]
server2
server3

配置主配置文件(默认可以不改)

编辑/etc/ansible/ansible.cfg

[defaults]

# some basic default values...

#inventory      = /etc/ansible/hosts             # 定义主机清单文件的位置
#library        = /usr/share/my_modules/          # 定义库文件的存放位置   
#remote_tmp     = ~/.ansible/tmp                # 临时文件的远程存放目录
#local_tmp      = ~/.ansible/tmp                 # 临时文件的本地存放目录
#sudo_user      = root   																		                        # 默认超级用户
#transport      = smart                        # 默认传输选项,smart选项自动选择合适的传输机制
#remote_port    = 22                          # 传输端口

Ansible的执行状态

  • 绿色——>执行成功且不需要做改变的操作
  • 黄色——>执行成功但对目标主机做变更
  • 红色——>执行失败
  • 粉色——>触发警告
  • 蓝色——>显示ansible命令的执行过程

Ansible常用模块

ping模块

测试与主机的联通性

例子

ansible -m ping all_servers

在这里插入图片描述

server2 | SUCCESS => { 
    "ansible_facts": {  
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
# "success"表示Ansible成功执行了任务
#  "ansible_facts"为一个字典,包含ansible任务执行期间收集到的所有事实
# "discovered_interpreter_python" 一个事实,指定目标主机上的python解释器目录为 "/usr/bin/python"
#  "changed": false 表示没有对主机进行任何更改
#  "ping": "pong",一个简单的回应,结果为pong,表示与目标主机连接正常

我们再把server1关掉试试

ansible -m ping all_servers

显示 server1不可达,并且显示红色
group模块

用于创建和修改用户组

查看group模块的用法
ansible-doc -s group

在这里插入图片描述

 gid   #设置用户组ID
 name  #设置组名称
 state #设置组状态,默认为创建,设置为absent为删除
 system #设置为yes表示创建系统组
实例:对node1主机组的成员(即server1)创建一个ID为111、名称为IT的组
 ansible -m group -a "name=IT gid=111 system=yes" node1

在这里插入图片描述

我们将上面的命令再执行一遍

在这里插入图片描述

发现结果由黄色变成了绿色的,这说明ansible具有幂等性,一种操作多次重复执行结果相同

我们到server1上看看 有没有成功

# 查看server1的组的后五行数据
tail -n 5 -f /etc/group
# 或者cat /etc/group

在这里插入图片描述

创建一个gid已经存在的组
 ansible -m group -a "name=false gid=1000 system=yes" node1

在这里插入图片描述

创建失败,并且返回msg"GID1000已经存在"
删除刚刚创建的组
 ansible node1 -m group -a 'name=IT state=absent'

在这里插入图片描述

user模块

用于对用户的创建,修改以及删除操作

查看user模块的用法
ansible-doc -s user

在这里插入图片描述

comment        # 用户的描述信息
create_home    # 是否创建家目录
force          # 在使用state=absent时,与usrdel --force作用一致
group          # 指定基本组
home           # 指定用户家目录
name           # 指定用户名
password       # 指定用户密码
state          # 指定用户状态,state=absent表示删除系统中的用户,但不删除家目录
remove         # 使用state=absent时,搭配使用remove=yes以删除用户家目录及邮件池
shell          # 指定默认shell
state          # 指定帐号状态,不指定为创建,指定为absent表示删除
system         # 创建用户并设置为系统用户
uid            # 指定用户的uid
upgrade_password # 更新用户密码
expires        # 指明密码的过期时间
实例:在主机组node1(server1)上创建一个系统用户zs,家目录为/home/zhangsan,uid为111,附加组为IT,以及给一个注释
 ansible node1 -m user -a "system=yes name=zs home=/home/zhangsan uid=111 group=IT comment='秃头张三'"

在这里插入图片描述

我们发现报错啦

"msg": "Group IT does not exist"
组不存在?想想,咱们刚刚确实把他删啦,那我们就用user组好了
ansible node1 -m user -a "system=yes name=zs home=/home/zhangsan uid=111 group=user comment='秃头张三'"

这回该成功了吧

在这里插入图片描述

到server1再看看

tail -n -10 -f /etc/passwd

在这里插入图片描述

user:x:1000:1000:user:/home/user:/bin/bash
zs:x:111:1000:秃头张三

不行,题目要求的是附加组,那我们要用groups=IT

ansible -m group -a "name=IT gid=111 system=yes" node1

在这里插入图片描述

ansible node1 -m user -a "system=yes name=zs home=/home/zhangsan uid=111 groups=IT  group=user comment='秃头张三'"

在这里插入图片描述

这不就好了吗

注意属组group和附属组groups的区别

我们可以发现passwd文件中是按照用户名:权限:附属组:属组的顺序来进行的

删除刚刚的用户zs
ansible node1 -m user -a "name=zs state=absent remove=yes"

在这里插入图片描述

在这里插入图片描述

command模块

  • Ansible默认使用模块,在远程服务器执行命令
  • 不支持shell特性(不支持管道,变量及重定向)
  • 适用于执行简单、直接的命令
查看command模块的使用
ansible-doc -s command

在这里插入图片描述

cmd        # (必需)要执行的命令
create     # 当指定的文件或目录存在时,不执行命令
removes    # 当指定的文件或目录不存在时,不执行命令
chdir      # 在执行命令前要切换到的目录
f          # 控制同一时间内并发执行的任务数,默认为5
实例
1.在所有服务器上创建文件
ansible all_servers  -a "touch /root/command_test"
# -m command 为默认模块,可缺省

在这里插入图片描述

我们再指定command模块执行一次

 ansible all_servers -m command  -a "touch /root/command_test"

在这里插入图片描述

结果还是执行了,并且是changed状态,这就说明command模块不是幂等的,系统发出警告建议我们用file模块来创建

2.在所有服务器上查询所有以_test结尾的文件
ansible -a "find / -name '*_test' " all_servers

在这里插入图片描述

3.删除刚刚创建的/root/command_test
 ansible -a "rm -r /root/command_test" all_servers

在这里插入图片描述

ansible -a "find / -name 'command_test' " all_servers

在这里插入图片描述

虽然没找到,但是还是显示changed,毕竟执行过find命令嘛,咱理解一下笨蛋模块

shell模块

  • 在远程主机上用shell解释器执行bash命令
  • 相比于command命令,支持性好一些
  • 对于复杂的命令考虑写入脚本,利用script脚本发送到远程主机来执行
实例
ansible -m shell -a"find / -name ifcfg*|grep ens33" all_servers
# shell模块支持管道符

在这里插入图片描述

script模块

发送脚本到远程主机上执行

参数说明
chdir     # 指定远程主机中的目录,执行脚本前会先进入该目录
create     # 当指定的文件存在时,不执行命令
removes    # 当指定的文件不存在时,不执行命令
实例
vim sc_test.sh
#! /bin/bash
for i in {0..5}
do
mkdir -p /root/script_test
touch  /root/script_test/${i}.txt
done
ansible -m script -a "/root/sc_test,sh" node2

在这里插入图片描述

再分别进入server1和server2看看

ssh root@server1
ls&&cd script_test&&ls
# 先查看当前目录(root目录)内容,再进入script_test目录查看其中内容

在这里插入图片描述

copy模块

复制文件到目标组中

参数解释
ansible-doc -s copy

在这里插入图片描述

backup           # 在覆盖之前,将源文件备份,备份文件包含时间信息
content           # 用于替代src,直接设定指定文件的值
dest             # 目的主机存放文件的位置,必填
mode              # 递归设定文件的权限,默认为属主可读可写、其他用户仅可读。可手动指定为777
force           # 强制覆盖目的文件内容,默认为yes
others         # 所有的file模块里的选项都可以使用
src           # 被复制的本地文件路径,路径为目录,则递归复制
ansible -m copy -a "src=/本地文件路径 dest=/远程文件的路径 " 执行的主机组
实例:将本地/root目录下的文件复制到目标服务器,并改名
 ansible node1  -m copy -a "src=/root/centos7.tar.gz  dest=/root/centos.tar.gz"

在这里插入图片描述

我们到node1对应的server1看看

在这里插入图片描述

将本地文件复制到目标服务器,并指定属组和属主

我们先创建一个用户李四(lisa)和组ansible

 ansible node1 -m group -a 'name=ansible system=yes' # 创建ansible组
 ansible node1 -m user -a "name=lisa system=yes home=/home/lisa password=1" # 创建用户lisa并指定密码和家目录
echo "i'am lisa">hello_lisa.txt

将创建的txt文件传输到目标主机的/home/lisa目录下,并指定属主为lisa,属组为ansible

ansible -m copy node1 -a "src=/root/hello_lisa.txt dest=/home/lisa owner=lisa group=ansible"

在这里插入图片描述

 cd /home/lisa&&cat hello_lisa.txt&&ll

在这里插入图片描述

传输文件时修改权限信息
ansible -m copy node1 -a "src=/root/hello_lisa.txt dest=/home/lisa/hello2.txt mode=777"

在这里插入图片描述

我们再到server1上看看

在这里插入图片描述

创建一个文件并直接编辑
ansible -m copy -a "content='hello lisa\n!' dest=/home/lisa/hello_test " node1

在这里插入图片描述

在这里插入图片描述

file模块

对文件进行操作

查看参数说明
ansible-doc -s file

在这里插入图片描述

force     # 两种情况下需要强制创建软连接
			           # 一种是源文件不存在,但在之后会创建;另一种是目标软连接已存在,需要先取消之前的软链,创建新的软链
			           #选项 yes|no
			group    # 定义属组
			mode       # 定义权限
owner     # 定义属主
path       # 定义文件(或目录)路径
recurse    # 递归设置目录的属性
src        #  被链接的源文件路径,只用于state=link的情况
dest       # 被链接到的路径,只用于state=link的情况

几种文件的state

absent         # 删除文件
directory      # 目录不存在则创建目录
file           # 检测文件是否存在,即使不存在,也不会被创建
link           # 创建软链接
hard           # 创建硬链接
touch          # 如果文件不存在则创建;文件已存在则更新修改时间
创建目录(指定属组属主以及权限)
ansible -m file -a "path=/root/test_directory owner=root group=root mode=644 state=directory" node3

在这里插入图片描述
在这里插入图片描述

创建文件
ansible -m file -a "path=/root/test_file owner=root group=root mode=644 state =touch"

在这里插入图片描述
在这里插入图片描述

删除目录/文件
 ansible -m file -a "path=/root/test_file  state=absent" node3
  ansible -m file -a "path=/root/test_directory state=absent" node3
  ansible -m file -a "path=/root/script_test  state=absent" node3

在这里插入图片描述在这里插入图片描述

测试script模块时用的是node1(server1和server2),所以server3本身就没有script_test目录

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

创建软连接
ansible -m file -a "src=/root/test11 dest=/root/test22 state=link" node1

在这里插入图片描述

报错,refusing covert from directory to symlink for /root/test22。字面上看,操作试图将目录转换为符号链接,但是操作系统拒绝了这种转换。这是由于我们已经创建了目录test22了,以至于无法将其覆盖,从而报错

我们直接用上面的ansible指令删除这个不应该存在的目录

ansible -m file node1 -a "path=/root/test22 state=absent"

在这里插入图片描述

 ansible -m file -a "src=/root/test11 dest=/root/test22 state=link" node1

在这里插入图片描述

ssh root@server1
ll

在这里插入图片描述

创建硬链接

我们先在节点上做准备

ansible -m shell -a "cat /root/test.sh" node1
 # 查看在server1上创建好的用于被链接的sh文件

在这里插入图片描述

ansible -m file -a "src=/root/test.sh dest=/root/test3 state=hard" node1 

在这里插入图片描述

ansible -m shell -a "ls -l" node1
# 我们可以看到多了一个链接下面的图是原始的文件状态

在这里插入图片描述

在这里插入图片描述

yum模块

用于yum方式安装服务

查看参数
ansible-doc  -s yum >> yum.txt&&cat yum.txt

在这里插入图片描述

 conf_file            # 设定远程yum安装时所依赖的配置文件。如配置文件没有在默认的位置。 
  disable_gpg_check    # 是否禁止GPG checking,只用于`present' or `latest'。 
  disable repo    # 临时禁止使用yum库。 只用于安装或更新时。      
  enable repo     # 临时使用的yum库。只用于安装或更新时。      
  name            # 安装的包的名称      
  state           # present安装, latest安装新的, absent 卸载软件。      
  update_cache    # 强制更新yum的缓存
我们先看server1上没有tree命令,对该命令进行安装

在这里插入图片描述

ansible -m yum  -a "name=tree state=latest" node1

在这里插入图片描述

ansible -m command  -a "tree" node1

在这里插入图片描述

在server2上安装运行httpd服务

 ansible -m yum  -a "name=httpd state=latest" node2 
 ansible -m service -a "name=httpd state=started" node2

查看端口开放情况

ansible -m command -a "ss -ntl" node2

在这里插入图片描述

使用elinks工具检测是否安装成功(或者在浏览器输入服务器ip都可以实现同样的效果)

elinks 192.168.28.77 # server2 ip

在这里插入图片描述

service模块

用于配置服务

ansible-doc -s service

在这里插入图片描述

arguments         # 命令行提供额外的参数      
  enabled           # 设置开机启动,可以设置为yes或者no。      
  name=             # 服务名称      
  runlevel          # 开机启动的级别,一般不用指定。      
  sleep             # 在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。      
  state     	        # started启动服务, stopped停止服务, restarted重启服务, reloaded重载配置

实例:配置httpt进程开机启动

ansible -m service -a "name=httpd state=enable"

setup模块

获取远程主机的详细信息

ansible -m setup node2
[root@ansible ~]# cat setup.txt
server1 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.122.1",
            "192.168.28.66"
        ],
        "ansible_all_ipv6_addresses": [
            "fe80::2a43:1282:aff6:e078",
            "fe80::6f22:d478:2b46:2ad5"
        ],
        "ansible_apparmor": {
            "status": "disabled"
        },
        "ansible_architecture": "x86_64",
        "ansible_bios_date": "11/12/2020",
        "ansible_bios_version": "6.00",
        "ansible_cmdline": {
            "BOOT_IMAGE": "/boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64",
            "LANG": "zh_CN.UTF-8",
            "crashkernel": "auto",
            "quiet": true,
            "rhgb": true,
            "ro": true,
            "root": "UUID=60bfdc34-a1ba-4afb-b440-d49f68e74eed"
        },
        "ansible_date_time": {
            "date": "2024-10-14",
            "day": "14",
            "epoch": "1728869204",
            "hour": "09",
            "iso8601": "2024-10-14T01:26:44Z",
            "iso8601_basic": "20241014T092644335349",
            "iso8601_basic_short": "20241014T092644",
            "iso8601_micro": "2024-10-14T01:26:44.335349Z",
            "minute": "26",
            "month": "10",
            "second": "44",
            "time": "09:26:44",
            "tz": "CST",
            "tz_offset": "+0800",
            "weekday": "星期一",
            "weekday_number": "1",
            "weeknumber": "42",
            "year": "2024"
        },
        "ansible_default_ipv4": {
            "address": "192.168.28.66",
            "alias": "ens33",
            "broadcast": "192.168.28.255",
            "gateway": "192.168.28.254",
            "interface": "ens33",
            "macaddress": "00:0c:29:1d:af:9f",
            "mtu": 1500,
            "netmask": "255.255.255.0",
            "network": "192.168.28.0",
            "type": "ether"
        },
        "ansible_default_ipv6": {},
        "ansible_device_links": {
            "ids": {},
            "labels": {},
            "masters": {},
            "uuids": {
                "sda1": [
                    "1a629aca-5f4e-446c-8e10-bdecd020da82"
                ],
                "sda2": [
                    "60bfdc34-a1ba-4afb-b440-d49f68e74eed"
                ]
            }
        },
        "ansible_devices": {
            "sda": {
                "holders": [],
                "host": "SCSI storage controller: Broadcom / LSI 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)",
                "links": {
                    "ids": [],
                    "labels": [],
                    "masters": [],
                    "uuids": []
                },
                "model": "VMware Virtual S",
                "partitions": {
                    "sda1": {
                        "holders": [],
                        "links": {
                            "ids": [],
                            "labels": [],
                            "masters": [],
                            "uuids": [
                                "1a629aca-5f4e-446c-8e10-bdecd020da82"
                            ]
                        },
                        "sectors": "16777216",
                        "sectorsize": 512,
                        "size": "8.00 GB",
                        "start": "2048",
                        "uuid": "1a629aca-5f4e-446c-8e10-bdecd020da82"
                    },
                    "sda2": {
                        "holders": [],
                        "links": {
                            "ids": [],
                            "labels": [],
                            "masters": [],
                            "uuids": [
                                "60bfdc34-a1ba-4afb-b440-d49f68e74eed"
                            ]
                        },
                        "sectors": "192935936",
                        "sectorsize": 512,
                        "size": "92.00 GB",
                        "start": "16779264",
                        "uuid": "60bfdc34-a1ba-4afb-b440-d49f68e74eed"
                    }
                },
                "removable": "0",
                "rotational": "1",
                "sas_address": null,
                "sas_device_handle": null,
                "scheduler_mode": "deadline",
                "sectors": "209715200",
                "sectorsize": "512",
                "size": "100.00 GB",
                "support_discard": "0",
                "vendor": "VMware,",
                "virtual": 1
            }
        },
        "ansible_distribution": "CentOS",
        "ansible_distribution_file_parsed": true,
        "ansible_distribution_file_path": "/etc/redhat-release",
        "ansible_distribution_file_variety": "RedHat",
        "ansible_distribution_major_version": "7",
        "ansible_distribution_release": "Core",
        "ansible_distribution_version": "7.9",
        "ansible_dns": {
            "nameservers": [
                "192.168.28.254"
            ]
        },
        "ansible_domain": "",
        "ansible_effective_group_id": 0,
        "ansible_effective_user_id": 0,
        "ansible_ens33": {
            "active": true,
            "device": "ens33",
            "features": {
                "busy_poll": "off [fixed]",
                "fcoe_mtu": "off [fixed]",
                "generic_receive_offload": "on",
                "generic_segmentation_offload": "on",
                "highdma": "off [fixed]",
                "hw_tc_offload": "off [fixed]",
                "l2_fwd_offload": "off [fixed]",
                "large_receive_offload": "off [fixed]",
                "loopback": "off [fixed]",
                "netns_local": "off [fixed]",
                "ntuple_filters": "off [fixed]",
                "receive_hashing": "off [fixed]",
                "rx_all": "off",
                "rx_checksumming": "off",
                "rx_fcs": "off",
                "rx_gro_hw": "off [fixed]",
                "rx_udp_tunnel_port_offload": "off [fixed]",
                "rx_vlan_filter": "on [fixed]",
                "rx_vlan_offload": "on",
                "rx_vlan_stag_filter": "off [fixed]",
                "rx_vlan_stag_hw_parse": "off [fixed]",
                "scatter_gather": "on",
                "tcp_segmentation_offload": "on",
                "tx_checksum_fcoe_crc": "off [fixed]",
                "tx_checksum_ip_generic": "on",
                "tx_checksum_ipv4": "off [fixed]",
                "tx_checksum_ipv6": "off [fixed]",
                "tx_checksum_sctp": "off [fixed]",
                "tx_checksumming": "on",
                "tx_fcoe_segmentation": "off [fixed]",
                "tx_gre_csum_segmentation": "off [fixed]",
                "tx_gre_segmentation": "off [fixed]",
                "tx_gso_partial": "off [fixed]",
                "tx_gso_robust": "off [fixed]",
                "tx_ipip_segmentation": "off [fixed]",
                "tx_lockless": "off [fixed]",
                "tx_nocache_copy": "off",
                "tx_scatter_gather": "on",
                "tx_scatter_gather_fraglist": "off [fixed]",
                "tx_sctp_segmentation": "off [fixed]",
                "tx_sit_segmentation": "off [fixed]",
                "tx_tcp6_segmentation": "off [fixed]",
                "tx_tcp_ecn_segmentation": "off [fixed]",
                "tx_tcp_mangleid_segmentation": "off",
                "tx_tcp_segmentation": "on",
                "tx_udp_tnl_csum_segmentation": "off [fixed]",
                "tx_udp_tnl_segmentation": "off [fixed]",
                "tx_vlan_offload": "on [fixed]",
                "tx_vlan_stag_hw_insert": "off [fixed]",
                "udp_fragmentation_offload": "off [fixed]",
                "vlan_challenged": "off [fixed]"
            },
            "hw_timestamp_filters": [],
            "ipv4": {
                "address": "192.168.28.66",
                "broadcast": "192.168.28.255",
                "netmask": "255.255.255.0",
                "network": "192.168.28.0"
            },
            "ipv6": [
                {
                    "address": "fe80::2a43:1282:aff6:e078",
                    "prefix": "64",
                    "scope": "link"
                },
                {
                    "address": "fe80::6f22:d478:2b46:2ad5",
                    "prefix": "64",
                    "scope": "link"
                }
            ],
            "macaddress": "00:0c:29:1d:af:9f",
            "module": "e1000",
            "mtu": 1500,
            "pciid": "0000:02:01.0",
            "promisc": false,
            "speed": 1000,
            "timestamping": [
                "tx_software",
                "rx_software",
                "software"
            ],
            "type": "ether"
        },
        "ansible_env": {
            "HOME": "/root",
            "KDEDIRS": "/usr",
            "LANG": "zh_CN.UTF-8",
            "LESSOPEN": "||/usr/bin/lesspipe.sh %s",
            "LOGNAME": "root",
            "LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:",
            "MAIL": "/var/mail/root",
            "PATH": "/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin",
            "PWD": "/root",
            "QTDIR": "/usr/lib64/qt-3.3",
            "QTINC": "/usr/lib64/qt-3.3/include",
            "QTLIB": "/usr/lib64/qt-3.3/lib",
            "QT_GRAPHICSSYSTEM_CHECKED": "1",
            "QT_PLUGIN_PATH": "/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins",
            "SELINUX_LEVEL_REQUESTED": "",
            "SELINUX_ROLE_REQUESTED": "",
            "SELINUX_USE_CURRENT_RANGE": "",
            "SHELL": "/bin/bash",
            "SHLVL": "2",
            "SSH_CLIENT": "192.168.28.88 47342 22",
            "SSH_CONNECTION": "192.168.28.88 47342 192.168.28.66 22",
            "SSH_TTY": "/dev/pts/0",
            "TERM": "xterm",
            "USER": "root",
            "XDG_DATA_DIRS": "/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share",
            "XDG_RUNTIME_DIR": "/run/user/0",
            "XDG_SESSION_ID": "30",
            "_": "/usr/bin/python"
        },
        "ansible_fibre_channel_wwn": [],
        "ansible_fips": false,
        "ansible_form_factor": "Other",
        "ansible_fqdn": "server1",
        "ansible_hostname": "server1",
        "ansible_hostnqn": "",
        "ansible_interfaces": [
            "lo",
            "virbr0",
            "virbr0-nic",
            "ens33"
        ],
        "ansible_is_chroot": false,
        "ansible_iscsi_iqn": "iqn.1994-05.com.redhat:34b4de6c161",
        "ansible_kernel": "3.10.0-1160.71.1.el7.x86_64",
        "ansible_kernel_version": "#1 SMP Tue Jun 28 15:37:28 UTC 2022",
        "ansible_lo": {
            "active": true,
            "device": "lo",
            "features": {
                "busy_poll": "off [fixed]",
                "fcoe_mtu": "off [fixed]",
                "generic_receive_offload": "on",
                "generic_segmentation_offload": "on",
                "highdma": "on [fixed]",
                "hw_tc_offload": "off [fixed]",
                "l2_fwd_offload": "off [fixed]",
                "large_receive_offload": "off [fixed]",
                "loopback": "on [fixed]",
                "netns_local": "on [fixed]",
                "ntuple_filters": "off [fixed]",
                "receive_hashing": "off [fixed]",
                "rx_all": "off [fixed]",
                "rx_checksumming": "on [fixed]",
                "rx_fcs": "off [fixed]",
                "rx_gro_hw": "off [fixed]",
                "rx_udp_tunnel_port_offload": "off [fixed]",
                "rx_vlan_filter": "off [fixed]",
                "rx_vlan_offload": "off [fixed]",
                "rx_vlan_stag_filter": "off [fixed]",
                "rx_vlan_stag_hw_parse": "off [fixed]",
                "scatter_gather": "on",
                "tcp_segmentation_offload": "on",
                "tx_checksum_fcoe_crc": "off [fixed]",
                "tx_checksum_ip_generic": "on [fixed]",
                "tx_checksum_ipv4": "off [fixed]",
                "tx_checksum_ipv6": "off [fixed]",
                "tx_checksum_sctp": "on [fixed]",
                "tx_checksumming": "on",
                "tx_fcoe_segmentation": "off [fixed]",
                "tx_gre_csum_segmentation": "off [fixed]",
                "tx_gre_segmentation": "off [fixed]",
                "tx_gso_partial": "off [fixed]",
                "tx_gso_robust": "off [fixed]",
                "tx_ipip_segmentation": "off [fixed]",
                "tx_lockless": "on [fixed]",
                "tx_nocache_copy": "off [fixed]",
                "tx_scatter_gather": "on [fixed]",
                "tx_scatter_gather_fraglist": "on [fixed]",
                "tx_sctp_segmentation": "on",
                "tx_sit_segmentation": "off [fixed]",
                "tx_tcp6_segmentation": "on",
                "tx_tcp_ecn_segmentation": "on",
                "tx_tcp_mangleid_segmentation": "on",
                "tx_tcp_segmentation": "on",
                "tx_udp_tnl_csum_segmentation": "off [fixed]",
                "tx_udp_tnl_segmentation": "off [fixed]",
                "tx_vlan_offload": "off [fixed]",
                "tx_vlan_stag_hw_insert": "off [fixed]",
                "udp_fragmentation_offload": "on",
                "vlan_challenged": "on [fixed]"
            },
            "hw_timestamp_filters": [],
            "ipv4": {
                "address": "127.0.0.1",
                "broadcast": "",
                "netmask": "255.0.0.0",
                "network": "127.0.0.0"
            },
            "ipv6": [
                {
                    "address": "::1",
                    "prefix": "128",
                    "scope": "host"
                }
            ],
            "mtu": 65536,
            "promisc": false,
            "timestamping": [
                "rx_software",
                "software"
            ],
            "type": "loopback"
        },
        "ansible_local": {},
        "ansible_lsb": {},
        "ansible_lvm": {
            "lvs": {},
            "pvs": {},
            "vgs": {}
        },
        "ansible_machine": "x86_64",
        "ansible_machine_id": "0309088104324f4ebda76f55d891b515",
        "ansible_memfree_mb": 2680,
        "ansible_memory_mb": {
            "nocache": {
                "free": 3285,
                "used": 485
            },
            "real": {
                "free": 2680,
                "total": 3770,
                "used": 1090
            },
            "swap": {
                "cached": 0,
                "free": 8191,
                "total": 8191,
                "used": 0
            }
        },
        "ansible_memtotal_mb": 3770,
        "ansible_mounts": [
            {
                "block_available": 22445186,
                "block_size": 4096,
                "block_total": 24105217,
                "block_used": 1660031,
                "device": "/dev/sda2",
                "fstype": "xfs",
                "inode_available": 48030369,
                "inode_total": 48233984,
                "inode_used": 203615,
                "mount": "/",
                "options": "rw,seclabel,relatime,attr2,inode64,noquota",
                "size_available": 91935481856,
                "size_total": 98734968832,
                "uuid": "60bfdc34-a1ba-4afb-b440-d49f68e74eed"
            }
        ],
        "ansible_nodename": "server1",
        "ansible_os_family": "RedHat",
        "ansible_pkg_mgr": "yum",
        "ansible_proc_cmdline": {
            "BOOT_IMAGE": "/boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64",
            "LANG": "zh_CN.UTF-8",
            "crashkernel": "auto",
            "quiet": true,
            "rhgb": true,
            "ro": true,
            "root": "UUID=60bfdc34-a1ba-4afb-b440-d49f68e74eed"
        },
        "ansible_processor": [
            "0",
            "GenuineIntel",
            "Intel(R) Core(TM) i5-10500H CPU @ 2.50GHz",
            "1",
            "GenuineIntel",
            "Intel(R) Core(TM) i5-10500H CPU @ 2.50GHz"
        ],
        "ansible_processor_cores": 2,
        "ansible_processor_count": 1,
        "ansible_processor_threads_per_core": 1,
        "ansible_processor_vcpus": 2,
        "ansible_product_name": "VMware Virtual Platform",
        "ansible_product_serial": "VMware-56 4d 26 77 cf 39 92 a8-db f7 2d 99 b0 1d af 9f",
        "ansible_product_uuid": "77264D56-39CF-A892-DBF7-2D99B01DAF9F",
        "ansible_product_version": "None",
        "ansible_python": {
            "executable": "/usr/bin/python",
            "has_sslcontext": true,
            "type": "CPython",
            "version": {
                "major": 2,
                "micro": 5,
                "minor": 7,
                "releaselevel": "final",
                "serial": 0
            },
            "version_info": [
                2,
                7,
                5,
                "final",
                0
            ]
        },
        "ansible_python_version": "2.7.5",
        "ansible_real_group_id": 0,
        "ansible_real_user_id": 0,
        "ansible_selinux": {
            "config_mode": "enforcing",
            "mode": "enforcing",
            "policyvers": 31,
            "status": "enabled",
            "type": "targeted"
        },
        "ansible_selinux_python_present": true,
        "ansible_service_mgr": "systemd",
        "ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKc8z8qym5Z1/NG9cty+iY/wrzJvGwgnwh+WjAByC6xup2ZNw9AmRCORkvbYlLbd/mBX+ZV96FsZz4ag4WZtMMc=",
        "ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAIHw7Go3U36zwIxwqQiZRvB4N3SuJsXLQIR5Nzoi+6Y+K",
        "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABAQCpLSb01Z88NmbW2ssqX3xgk3LxzJg3W6rhNj6xHd7m4o0S2QLIvA4ut51i+bQRrRE/JOqXgR7p2mUjod2RflrhBHTsBVzOdLtp5iz9k4GLUizajrK2orrey/FSFMcmVs27eeGSyd9Qukj4QfGxq/ydB/PoaYgv5T8zSVH9zcXAGkXsAyQtqFHDBbPSbqcnWAMjO/0+YL2eHOAKjaeJU434FbuRRdKP7UIE+ILeYkt6xPtJ+TRQPfXES62iRICUb46thcfFHDU7vVM+gcuLCtAO8W0aJXmJRaGZooDy0htAdRLlxc0tbeH3M+ksTuOKg+gyTXkKb5iSIwegJ10vYEN/",
        "ansible_swapfree_mb": 8191,
        "ansible_swaptotal_mb": 8191,
        "ansible_system": "Linux",
        "ansible_system_capabilities": [
            "cap_chown",
            "cap_dac_override",
            "cap_dac_read_search",
            "cap_fowner",
            "cap_fsetid",
            "cap_kill",
            "cap_setgid",
            "cap_setuid",
            "cap_setpcap",
            "cap_linux_immutable",
            "cap_net_bind_service",
            "cap_net_broadcast",
            "cap_net_admin",
            "cap_net_raw",
            "cap_ipc_lock",
            "cap_ipc_owner",
            "cap_sys_module",
            "cap_sys_rawio",
            "cap_sys_chroot",
            "cap_sys_ptrace",
            "cap_sys_pacct",
            "cap_sys_admin",
            "cap_sys_boot",
            "cap_sys_nice",
            "cap_sys_resource",
            "cap_sys_time",
            "cap_sys_tty_config",
            "cap_mknod",
            "cap_lease",
            "cap_audit_write",
            "cap_audit_control",
            "cap_setfcap",
            "cap_mac_override",
            "cap_mac_admin",
            "cap_syslog",
            "35",
            "36+ep"
        ],
        "ansible_system_capabilities_enforced": "True",
        "ansible_system_vendor": "VMware, Inc.",
        "ansible_uptime_seconds": 5028,
        "ansible_user_dir": "/root",
        "ansible_user_gecos": "root",
        "ansible_user_gid": 0,
        "ansible_user_id": "root",
        "ansible_user_shell": "/bin/bash",
        "ansible_user_uid": 0,
        "ansible_userspace_architecture": "x86_64",
        "ansible_userspace_bits": "64",
        "ansible_virbr0": {
            "active": false,
            "device": "virbr0",
            "features": {
                "busy_poll": "off [fixed]",
                "fcoe_mtu": "off [fixed]",
                "generic_receive_offload": "on",
                "generic_segmentation_offload": "on",
                "highdma": "off [requested on]",
                "hw_tc_offload": "off [fixed]",
                "l2_fwd_offload": "off [fixed]",
                "large_receive_offload": "off [fixed]",
                "loopback": "off [fixed]",
                "netns_local": "on [fixed]",
                "ntuple_filters": "off [fixed]",
                "receive_hashing": "off [fixed]",
                "rx_all": "off [fixed]",
                "rx_checksumming": "off [fixed]",
                "rx_fcs": "off [fixed]",
                "rx_gro_hw": "off [fixed]",
                "rx_udp_tunnel_port_offload": "off [fixed]",
                "rx_vlan_filter": "off [fixed]",
                "rx_vlan_offload": "off [fixed]",
                "rx_vlan_stag_filter": "off [fixed]",
                "rx_vlan_stag_hw_parse": "off [fixed]",
                "scatter_gather": "on",
                "tcp_segmentation_offload": "on",
                "tx_checksum_fcoe_crc": "off [fixed]",
                "tx_checksum_ip_generic": "on",
                "tx_checksum_ipv4": "off [fixed]",
                "tx_checksum_ipv6": "off [fixed]",
                "tx_checksum_sctp": "off [fixed]",
                "tx_checksumming": "on",
                "tx_fcoe_segmentation": "off [requested on]",
                "tx_gre_csum_segmentation": "on",
                "tx_gre_segmentation": "on",
                "tx_gso_partial": "on",
                "tx_gso_robust": "off [requested on]",
                "tx_ipip_segmentation": "on",
                "tx_lockless": "on [fixed]",
                "tx_nocache_copy": "off",
                "tx_scatter_gather": "on",
                "tx_scatter_gather_fraglist": "on",
                "tx_sctp_segmentation": "off [requested on]",
                "tx_sit_segmentation": "on",
                "tx_tcp6_segmentation": "on",
                "tx_tcp_ecn_segmentation": "on",
                "tx_tcp_mangleid_segmentation": "on",
                "tx_tcp_segmentation": "on",
                "tx_udp_tnl_csum_segmentation": "on",
                "tx_udp_tnl_segmentation": "on",
                "tx_vlan_offload": "on",
                "tx_vlan_stag_hw_insert": "on",
                "udp_fragmentation_offload": "off [requested on]",
                "vlan_challenged": "off [fixed]"
            },
            "hw_timestamp_filters": [],
            "id": "8000.5254002f459b",
            "interfaces": [
                "virbr0-nic"
            ],
            "ipv4": {
                "address": "192.168.122.1",
                "broadcast": "192.168.122.255",
                "netmask": "255.255.255.0",
                "network": "192.168.122.0"
            },
            "macaddress": "52:54:00:2f:45:9b",
            "mtu": 1500,
            "promisc": false,
            "stp": true,
            "timestamping": [
                "rx_software",
                "software"
            ],
            "type": "bridge"
        },
        "ansible_virbr0_nic": {
            "active": false,
            "device": "virbr0-nic",
            "features": {
                "busy_poll": "off [fixed]",
                "fcoe_mtu": "off [fixed]",
                "generic_receive_offload": "on",
                "generic_segmentation_offload": "on",
                "highdma": "off [fixed]",
                "hw_tc_offload": "off [fixed]",
                "l2_fwd_offload": "off [fixed]",
                "large_receive_offload": "off [fixed]",
                "loopback": "off [fixed]",
                "netns_local": "off [fixed]",
                "ntuple_filters": "off [fixed]",
                "receive_hashing": "off [fixed]",
                "rx_all": "off [fixed]",
                "rx_checksumming": "off [fixed]",
                "rx_fcs": "off [fixed]",
                "rx_gro_hw": "off [fixed]",
                "rx_udp_tunnel_port_offload": "off [fixed]",
                "rx_vlan_filter": "off [fixed]",
                "rx_vlan_offload": "off [fixed]",
                "rx_vlan_stag_filter": "off [fixed]",
                "rx_vlan_stag_hw_parse": "off [fixed]",
                "scatter_gather": "on",
                "tcp_segmentation_offload": "off",
                "tx_checksum_fcoe_crc": "off [fixed]",
                "tx_checksum_ip_generic": "off [requested on]",
                "tx_checksum_ipv4": "off [fixed]",
                "tx_checksum_ipv6": "off [fixed]",
                "tx_checksum_sctp": "off [fixed]",
                "tx_checksumming": "off",
                "tx_fcoe_segmentation": "off [fixed]",
                "tx_gre_csum_segmentation": "off [fixed]",
                "tx_gre_segmentation": "off [fixed]",
                "tx_gso_partial": "off [fixed]",
                "tx_gso_robust": "off [fixed]",
                "tx_ipip_segmentation": "off [fixed]",
                "tx_lockless": "on [fixed]",
                "tx_nocache_copy": "off",
                "tx_scatter_gather": "on",
                "tx_scatter_gather_fraglist": "on",
                "tx_sctp_segmentation": "off [fixed]",
                "tx_sit_segmentation": "off [fixed]",
                "tx_tcp6_segmentation": "off [requested on]",
                "tx_tcp_ecn_segmentation": "off [requested on]",
                "tx_tcp_mangleid_segmentation": "off",
                "tx_tcp_segmentation": "off [requested on]",
                "tx_udp_tnl_csum_segmentation": "off [fixed]",
                "tx_udp_tnl_segmentation": "off [fixed]",
                "tx_vlan_offload": "on",
                "tx_vlan_stag_hw_insert": "on",
                "udp_fragmentation_offload": "off [requested on]",
                "vlan_challenged": "off [fixed]"
            },
            "hw_timestamp_filters": [],
            "macaddress": "52:54:00:2f:45:9b",
            "mtu": 1500,
            "promisc": true,
            "timestamping": [
                "rx_software",
                "software"
            ],
            "type": "ether"
        },
        "ansible_virtualization_role": "guest",
        "ansible_virtualization_type": "VMware",
        "discovered_interpreter_python": "/usr/bin/python",
        "gather_subset": [
            "all"
        ],
        "module_setup": true
    },
    "changed": false
}

Selinux模块

管理远程主机的selinux配置

参数
ansible-doc -s selinux 

在这里插入图片描述

policy   # 要使用的selinux策略的名称
state     # 配置selinux的模式   enforcing(强制模式)、permissive(宽容模式)、disabled(禁用)三种模式
configfile # 配置selinux文件的路径

例子:设置selinux防火墙为强制模式

ansible -m selinux -a "policy=targeted state=enforcing" node1

在这里插入图片描述

可以看出来server1本身就是配置的enforcing模式

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安装Maven配置以及构建Maven项目(2023idea)

一、下载Maven绿色软件 地址:http://maven.apache.org/download.cgi 尽量不要选择最高版本的安装,高版本意味着高风险的不兼容问题,选择低版本后续问题就少。你也可以选择尝试。 压缩后: 打开后: 在该目录下新建mvn-…

【算法练习】最小生成树

题意&#xff1a;【模板】最小生成树 方法1&#xff1a;Prim算法(稠密边用优&#xff09; #include <bits/stdc.h> using namespace std; int n,m,u,v,d,ans; bool f[5001]; vector<pair<int,int>> a[5001];//用结构体和重载比直接定义小根堆似乎还快一点点…

局部变量和全局变量(Python)

引入例子拆解 源码 class A:def __init__(self):self.test 0def add(c, k):c.test c.test 1k k 1def main():Count A()k 0for i in range(0, 25):add(Count, k)print("Count.test", Count.test)print("k", k)main() 运行结果如下图 代码解析 这…

使用语音模块的开发智能家居产品(使用雷龙LSYT201B 语音模块)

在这篇博客中&#xff0c;我们将探讨如何使用 LSYT201B 语音模块 进行智能设备的语音交互开发。通过这个模块&#xff0c;我们可以实现智能设备的语音识别和控制功能&#xff0c;为用户带来更为便捷和现代的交互体验。 1. 语音模块介绍 LSYT201B 是一个基于“芯片算法”的语音…

GS-SLAM Dense Visual SLAM with 3D Gaussian Splatt 论文阅读

项目主页 2024 CVPR (highlight) https://gs-slam.github.io/ 摘要 本文提出了一种基于3D Gaussian Splatting方法的视觉同步定位与地图构建方法。 与最近采用神经隐式表达的SLAM方法相比&#xff0c;本文的方法利用实时可微分泼溅渲染管道&#xff0c;显著加速了地图优化和…

一天工作量压缩成半天!5个ChatGPT高效工作法则!

在信息爆炸的时代&#xff0c;高效的生活方式成为了许多人的追求。如何利用科技手段提升效率&#xff0c;成为了一个热门话题。ChatGPT&#xff0c;作为一款强大的语言模型&#xff0c;为我们提供了全新的解决方案。本文将深入探讨如何利用 ChatGPT 改变你的生活&#xff0c;助…

【SSM详细教程】-13-SpringMVC详解

精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

SQL实战训练之,力扣:1532最近的三笔订单

目录 一、力扣原题链接 二、题目描述 三、建表语句 四、题目分析 五、SQL解答 六、最终答案 七、验证 八、知识点 一、力扣原题链接 1532. 最近的三笔订单 二、题目描述 客户表&#xff1a;Customers ------------------------ | Column Name | Type | --------…

Redis进阶:Spring框架中利用Redis实现对象的序列化存储

前言 由于Redis只能提供基于字符串型的操作&#xff0c;而Java中使用的却以类对象为主&#xff0c;所以需要Redis存储的字符串和Java对象相互转换。如果我们自己编写这些规则&#xff0c;工作量是比较大的&#xff0c;因此本文介绍如何使用Spring框架快速实现Java数据类型在Red…

Flask-SocketIO 简单示例

用于服务端和客户端通信&#xff0c;服务端主动给客户端发送消息 前提&#xff1a; 确保安装了socket库&#xff1a; pip install flask-socketio python-socketio服务端代码 from flask import Flask from flask_socketio import SocketIO import threading import timeap…

计算机网络:网络层 —— IPv4 地址的应用规划

文章目录 IPv4地址的应用规划定长的子网掩码变长的子网掩码 IPv4地址的应用规划 IPv4地址的应用规划是指将给定的 IPv4地址块 (或分类网络)划分成若干个更小的地址块(或子网)&#xff0c;并将这些地址块(或子网)分配给互联网中的不同网络&#xff0c;进而可以给各网络中的主机…

2023IKCEST第五届“一带一路”国际大数据竞赛--社交网络中多模态虚假 媒体内容核查top11

比赛链接&#xff1a;https://aistudio.baidu.com/competition/detail/1030/0/introduction PPT链接&#xff1a;https://www.ikcest.org/bigdata2024/zlxz/list/page.html 赛题 社交网络中多模态虚假媒体内容核查 背景 随着新媒体时代信息媒介的多元化发展&#xff0c;各种内容…

Handler、Looper、message进阶知识

Android Handler、Looper、Message的进阶知识 在Android开发中&#xff0c;Handler、Looper和Message机制是多线程通信的核心。为了深入理解并优化它们的使用&#xff0c;尤其是在高并发和UI性能优化中&#xff0c;可以利用一些高级特性。 1. Handler的高阶知识 Handler在基本…

基于SpringBoot的“心灵治愈交流平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“心灵治愈交流平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能界面图 登录、用户注册界面图 心灵专…

从“摸黑”到“透视”:AORO A23热成像防爆手机如何改变工业检测?

在工业检测领域&#xff0c;传统的检测手段常因效率低下、精度不足和潜在的安全风险而受到诟病。随着科技的不断进步&#xff0c;一种新兴的检测技术——红外热成像技术&#xff0c;正逐渐在该领域崭露头角。近期&#xff0c;小编对一款集成红外热成像技术的AORO A23防爆手机进…

FineReport 分栏报表

将报表中的数据根据所需要的展示的样式将数据进行分栏展示列分栏 报表中数据是横向扩展的,超过一页的数据会显示在下一页,而每页下面会有很大的一片空白区域,不美观且浪费纸张。希望在一页中第一行扩展满后自动到下一行继续扩展 1、新建数据集 SELECT * FROM 公司股票2、内…

C++游戏开发中的多线程处理是否真的能够显著提高游戏性能?如果多个线程同时访问同一资源,会发生什么?如何避免数据竞争?|多线程|游戏开发|性能优化

目录 1. 多线程处理的基本概念 1.1 多线程的定义 1.2 线程的创建与管理 2. 多线程在游戏开发中的应用 2.1 渲染与物理计算 3. 多线程处理的性能提升 3.1 性能评估 3.2 任务分配策略 4. 多线程中的数据竞争 4.1 数据竞争的定义 4.2 多线程访问同一资源的后果 4.3 避…

交换机:端口安全与访问控制指南

为了实现端口安全和访问控制&#xff0c;交换机通常通过以下几种机制和配置来保护网络&#xff0c;防止未经授权的访问和恶意攻击。 01-端口安全 定义及功能 端口安全功能允许管理员限制每个交换机端口可以学习的MAC地址数量。 通过绑定特定的MAC地址到交换机的某一端口上&a…

微信小程序的日期区间选择组件的封装和使用

组件化开发是一种将大型软件系统分解为更小、更易于管理和复用的独立模块或组件的方法。这种方法在现代软件开发中越来越受到重视&#xff0c;尤其是在前端开发领域。微信小程序的日期区间选择组件的使用 wxml 代码 <view><view bind:tap"chooseData">…

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中&#xff0c;Pod 的状态为 CrashLoopBackOff 表示某个容器在启动后崩溃&#xff0c;Kubernetes 尝试重启该容器&#xff0c;但由于持续崩溃&#xff0c;重启的间隔时间逐渐增加。下面将详细介绍 CrashLoopBackOff 状态的原因、解决方案及相关命令的输出解释。 …