从零开始的云计算生活——第十四天,困难重重,安全管理。
一·故事背景
在前面的基本无操作内容后,来到了大头内容,安全管理!其中的防火墙相关的内容更是重中之重,要好好掌握,熟练运用。
二·SELinux安全上下文
1·SELinux 简介
a. SELinux(Security-Enhanced Linux)
是Linux内核的强制访问控制(MAC)安全子系统,由美国国家安全局(NSA)与开源社区合作开发。其核心目标是通过精细化权限管理,提升系统安全性,防止恶意程序或用户越权访问敏感资源。
b.核心思想
最小权限原则:进程/用户只能访问其明确需要的资源。
基于标签的访问控制:所有资源(文件、端口、进程)被赋予安全上下文(Security Context)。
c.工作模式
Enforcing(强制模式)
严格执行策略,拒绝违规操作并记录日志(默认生产环境模式)
Permissive(宽容模式)
仅记录违规行为但不阻止,用于策略调试或兼容性测试
Disabled(禁用模式)
完全关闭 SELinux,系统回归传统 DAC 权限控制(不推荐,降低安全性)
2·基础操作命令
① 查看SELinux状态
getenforce# 查看当前模式
sestatus# 详细状态(模式/策略类型)
② 切换工作模式
setenforce 0# 切换到Permissive模式
setenforce 1# 切换到Enforcing模式
注意:setenforce仅临时生效,永久修改需编辑 /etc/selinux/config 文件。
3·安全上下文(Security Context)
① 查看上下文
ls -Z /var/www/html # 查看文件/目录的上下文
ps -Z -C httpd# 查看进程的上下文
② 修改上下文
chcon命令
选项 | 说明 | 示例消息 |
---|---|---|
-t, --type TYPE | 设置安全上下文的类型部分 | 已将 file.txt 的类型更改为 httpd_sys_content_t |
-u, --user USER | 设置安全上下文的用户部分 | 已将 file.txt 的用户更改为 system_u |
-r, --role ROLE | 设置安全上下文的角色部分 | 已将 file.txt 的角色更改为 object_r |
--reference=FILE | 使用指定文件的安全上下文 | 已从 ref_file 复制上下文到 target_file |
-R, --recursive | 递归处理文件和目录 | 已递归更改 dir/ 及其内容的上下文 |
-h, --help | 显示帮助信息 | 显示帮助菜单 |
-v, --verbose | 显示操作详情 | 正在更改 file.txt 的安全上下文 |
--version | 显示版本信息 | chcon (GNU coreutils) 8.32 |
semanage 命令
子命令/选项 | 用途说明 | 常用选项 | 示例消息/操作 |
---|---|---|---|
semanage login | 管理SELinux用户与Linux账户的映射关系 | -a (添加)、-d (删除)、-m (修改) | 将用户 user1 映射到 SELinux 用户 staff_u |
semanage user | 管理SELinux用户及其角色和权限 | -a、-d、-R (角色)、-L (限制) | 创建新SELinux用户 web_user 并分配角色 httpd_role |
semanage port | 管理网络端口与SELinux类型的绑定关系 | -a、-d、-t (类型)、-p (协议) | 将TCP端口 8080 绑定到 http_port_t 类型 |
semanage interface | 管理网络接口与SELinux类型的绑定关系 | -a、-d、-t | 将接口 eth1 绑定到 netif_t 类型 |
semanage module | 管理SELinux策略模块(启用/禁用) | -a、-d、-e (启用)、-D (禁用) | 启用策略模块 my_custom_module |
semanage fcontext | 管理文件/目录的默认SELinux上下文规则 | -a、-d、-t、-s (范围) | 添加规则:/webapps(/.*)? 的上下文类型为 httpd_sys_content_t |
semanage boolean | 管理SELinux布尔值(开关策略功能) | -1 (查看)、--on、--off | 启用布尔值 httpd_can_network_connect |
semanage dontaudit | 管理dontaudit规则(是否记录特定访问拒绝事件) | --on、--off | 关闭对 sshd 的 dontaudit 规则 |
-h / --help | 显示帮助信息 | - | 显示子命令的帮助菜单 |
-v / --verbose | 显示详细操作信息 | - | 显示添加端口 8080 的详细过程 |
-n / --noheading | 输出时隐藏列标题 | - | 仅显示端口列表数据,无标题行 |
三·Linux防火墙-Firewalld
1·概述
按表现形式划分:
软件防火墙: 集成在系统内部,Linux系统: iptables、firewalld、ufw; windows系统下: windows defender
硬件防火墙: 华为防火墙、思科防火墙、奇安信防火墙、深信服防火墙等
按技术划分:
包过滤防火墙: 检查数据包的源IP、目的IP、源端口、目的端口、TCP的syn控制位
七层防火墙:除了上述检查外,还会检查数据内容
防火墙的作用:
阻止来自网络外部的攻击、进行流量控制
2、 Linux防火墙
① 防火墙结构
用户态:
iptables: 使用iptables命令对防火墙规则进行管理,必须深度理解网络技术和四表五链,对于初 学者或者网络技术不达标的人员不友好
firewalld:使用firewall-cmd命令对防火墙进行管理,采用的是区域划分的形式。不需要连接底层 的四表五链,对于初学者比较友好
ufw: 使用ufw命令对防火墙进行管理,命令简单易懂。(默认未安装)
内核态:
四表: 从内核->用户的顺序: raw -> mangle -> nat -> filter
五链: input、output、forward、prerouting、postrouting
② firewalld防火墙
区域分类,功能
九大区域:
block: 阻塞区域 (拒绝任何流量,但给出回应)
dmz: 非军事化管理区域(内部的服务器放于该区域)
drop: 丢弃区域(丢弃一切流量,不给出任何回应)
external: 外部区域 (连接外部网络,例如: internet网络
home: 家庭区域
internal: 内部区域 (连接内部网络)
public:公共区域,默认区域
trusted: 完全信任区域 
work: 工作区域
命令分类:
查看命令
firewall-cmd --list-all --zone=public #查看指定区域的详细信息
添加命令
firewall-cmd --add-port=80/tcp --zone=public #添加端口到指定区域
修改命令
firewall-cmd --change-interface=ens224 --zone=internal #修改网络接口所属区域
删除命令
firewall-cmd --remove-port=80/tcp --zone=public #删除端口到指定区域
保存规则
firewall-cmd --runtime-to-permanent #一次性保存所有规则
案例:①禁止外部主机ping本机
本机ip:192.168.71.132
②允许外部主机访问本机的http服务
本机ip:192.168.71.132 ens160
#######环境配置 开始#########
##本机安装httpd服务
#改变SElinux的规则
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y httpd
##启动httpd服务
[root@localhost ~]# systemctl start httpd
##修改httpd服务的监听IP
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.80.128:80
##重启httpd服务
[root@localhost ~]# systemctl restart httpd
##验证服务监听状态
[root@localhost ~]# netstat -naptu | grep :80
tcp00 192.168.80.128:800.0.0.0:* LISTEN5884/httpd
#######环境配置 结束#########
#防火墙配置
[root@localhost ~]# firewall-cmd --change-interface=ens34 --zone=dmz
success
##客户端验证访问##
[root@localhost ~]# curl 192.168.80.128
curl: (7) Failed connect to 192.168.80.128:80; 拒绝连接
##发现无法访问###
#服务端查看dmz区域信息
[root@localhost ~]# firewall-cmd --list-all --zone=dmz
#发现没有放心http服务
#配置dmz区域http服务放行策略
[root@localhost ~]# firewall-cmd --add-service=http --zone=dmz
success
四·网络知识补充
在学习Iptables之前,必须要了解一些关于网络的知识,这样就方便学习Iptables命令
1.交换机配置(交换机又称交换设备)
① 以太网MAC地址

单播MAC地址: 是指第一个字节的最低位是0的MAC地址,代表了一块特定的网卡。
组播MAC地址: 是指第一个字节的最低位是1的MAC地址,代表了一组网卡。
广播MAC地址: 是指每一位都是1的MAC地址,广播MAC地址是组播MAC地址的一个特例,代表了所有网卡。
广播/组播地址只能作为目的地址使用 。

② Ethernet II帧格式

- 前导码(Preamble):7字节
- 功能:用于同步发送方和接收方的时钟,确保数据传输的时序一致。
- 帧起始定界符(Start Frame Delimiter, SFD):1字节
- 功能:标识帧的正式开始,通常为二进制模式
10101011
。
- 功能:标识帧的正式开始,通常为二进制模式
- 目的地址(Destination Address):6字节
- 功能:存储目标设备的MAC地址(如
00:1A:2B:3C:4D:5E
),用于路由帧到正确的接收方。
- 功能:存储目标设备的MAC地址(如
- 源地址(Source Address):6字节
- 功能:存储发送方设备的MAC地址,用于标识帧的来源。
- 类型(Type/Length):2字节
- 功能:标识上层协议的类型,例如:
0800H
(十六进制)表示IP协议(用于互联网数据传输)。0806H
表示ARP协议(用于地址解析)。
- 注意:该字段有时也用于表示数据字段的长度,但图中明确标注为“类型”。
- 功能:标识上层协议的类型,例如:
- 数据(Data):46–1500字节
- 功能:承载实际传输的上层数据(如IP数据包)。最小长度46字节是为了确保帧总长度满足最小要求(64字节),避免冲突;最大1500字节是标准以太网的最大传输单元(MTU)。
- 帧校验序列(Frame Check Sequence, FCS):4字节
- 功能:用于错误检测,通常使用CRC(循环冗余校验)算法。接收方计算校验和,如果与FCS不匹配,则丢弃帧以请求重传。
③ 交换机工作原理
1·构建网络
运行Cisco Packet Tracer软件,先添加一个交换机和三个主机,配置ip地址


点击交换机,进入用户模式

打开模拟模式
2.模式切换
从用户模式进入特权模式

从特权模式进入全局配置模式

3.连通
初始状态

此时使用1.1ping一下另外一台主机1.2

MAC地址学习(源MAC)
广播未知数据帧

接收方回应,交换机再次学习MAC地址
此时通过交换机,1.2收到信息,1.3拒绝信息,交换机是广播,然后再返回1.1,此时交换机接收了两个信息

④交换机以太网接口的工作模式
a.交换机以太网接口双工模式
单工 :两个数据站之间只能沿单一方向传输数据
半双工:两个数据站之间可以双向数据传输,但不能同时进行
全双工:两个数据站之间可双向且同时进行数据传输
b.交换机以太网接口速率
接口连接时进行协商
协商失败则无法正常通信
2·路由器配置
网络层作用: 定位,路由,流控; 封装IP头部
① IP数据包格式
字段名 | 位数 | 功能说明 |
---|---|---|
版本(Version) | 4 bit | 标识IP协议版本(如IPv4值为4 ,IPv6值为6 )。 |
首部长度(IHL) | 4 bit | 表示IP首部长度(单位:4字节)。最小值为5 (20字节),最大值为15 (60字节)。 |
优先级与服务类型(ToS) | 8 bit | 定义数据包优先级和服务类型(如延迟、吞吐量优化),现被DSCP(差分服务)取代。 |
总长度(Total Length) | 16 bit | 整个IP数据报的长度(首部+数据),单位:字节。最大值为65535字节。 |
标识符(Identification) | 16 bit | 唯一标识一个数据报。分片时,同一数据报的所有分片共享此标识符。 |
标志(Flags) | 3 bit | 控制分片: 第1位:保留位(0) 第2位:禁止分片(DF,1=禁止) 第3位:更多分片(MF,1=后续还有分片) |
段偏移量(Fragment Offset) | 13 bit | 分片后,当前片在原数据中的偏移位置(单位:8字节)。 |
生存时间(TTL) | 8 bit | 数据报最大经过的路由器数。每经过一个路由器减1,归0时被丢弃(防环路)。 |
协议号(Protocol) | 8 bit | 标识上层协议类型:6 =TCP,17 =UDP,1 =ICMP,89 =OSPF等。 |
首部校验和(Header Checksum) | 16 bit | 仅校验IP首部是否传输错误(不包含数据部分)。 |
源地址(Source IP) | 32 bit | 发送方的IPv4地址(如192.168.1.10 )。 |
目标地址(Destination IP) | 32 bit | 接收方的IPv4地址(如10.0.0.2 )。 |
可选项(Options) | 可变 | 扩展功能(如时间戳、路由记录),一般为空(IPv6已删除此字段)。 |
数据(Data) | 可变 | 上层协议数据(如TCP段、ICMP消息等)。 |
MAX TTL(每经过一个路由器减1):
windows: 64
linux:128
网络设备:255
② 广播与广播域
a.广播与广播域
广播:将广播地址做为目的地址的数据帧
广播域:网络中能接收到同一个广播所有节点的集合
b.MAC地址广播
广播地址为FF-FF-FF-FF-FF-FF
c.IP地址广播
广播MAC地址为FF-FF-FF-FF-FF-FF
广播IP地址为IP地址网段的广播地址
通信方式 | 目标设备数 | 地址类型 | 典型协议 | 适用场景 |
---|---|---|---|---|
广播 | 域内全部设备 | MAC全F / IP全1 | ARP, DHCP | 局域网设备发现 |
单播 | 单一指定设备 | 具体MAC或IP地址 | HTTP, FTP | 点对点精准通信 |
组播 | 特定组内设备 | IPv4 D类地址(224.0.0.0起) | OSPF, IPTV流媒体 | 高效一对多分发(如视频会议) |
③ 路由的概念


3·传输层协议
① TCP(Transmission Control Protocol ),传输控制协议
TCP是面向连接的、可靠的进程到进程通信的协议
TCP提供全双工服务,即数据可在同一时间双向传输
TCP报文段
TCP将若干个字节构成一个分组,叫报文段(Segment)
TCP报文段封装在IP数据报文中

名称 | 描述 |
序号 | 发送端为每个字节进行编号,便于接收端正确重组 |
确认号 | 用于确认发送端的信息 |
窗口大小 | 用于说明本地可接收数据段的数目,窗口大小是可变的 |
SYN | 同步序号位,TCP需要建立连接时将该值设为1 |
ACK | 确认序号位,当该位为1时,用于确认发送方的数据 |
FIN | 当TCP断开连接时将该位置为1 |
维度 | 三次握手 | 四次挥手 |
---|---|---|
目的 | 建立可靠双向连接 | 安全终止全双工连接 |
交互次数 | 3次 | 4次 |
合并可能性 | SYN与ACK可合并(SYN-ACK) | ACK与FIN通常不可合并 |
状态复杂性 | 简单(仅SYN_SENT /SYN_RCVD ) | 复杂(含TIME_WAIT /CLOSE_WAIT ) |
本质原因 | 避免历史连接冲突 | 适应全双工数据流异步关闭 |
端口 | 协议 | 说 明 |
21 | FTP | FTP服务器所开放的控制端口 |
23 | TELNET | 用于远程登录,可以远程控制管理目标计算机 |
25 | SMTP | SMTP服务器开放的端口,用于发送邮件 |
80 | HTTP | 超文本传输协议 |
110 | POP3 | 用于邮件的接收 |
② UDP(User Datagram Protocol ),用户数据报协议
无连接、不可靠的传输协议
花费的开销小
UDP报文的首部格式
UDP长度:用来指出UDP的总长度,为首部加上数据。
校验和:用来完成对UDP数据的差错检验,它是UDP协议提供的唯一的可靠机制
端口 | 协议 | 说 明 |
69 | TFTP | 简单文件传输协议 |
111 | RPC | 远程过程调用 |
123 | NTP | 网络时间协议 |
总结
今日的重点是firewall的操作,但是目前最实用的还是明日的iptables,重点是Iptables的运用,明日会继续更新。
本次更新了在学习Iptables之前的网络知识,掌握好更容易理解Iptables命令,这一部分是很重要的,希望可以多多回顾,为之后打下基础。
相关文章:

从零开始的云计算生活——第十四天,困难重重,安全管理。
一故事背景 在前面的基本无操作内容后,来到了大头内容,安全管理!其中的防火墙相关的内容更是重中之重,要好好掌握,熟练运用。 二SELinux安全上下文 1SELinux 简介 a. SELinux(Security-Enhanced Linux&…...
迁移学习模型构建指南(Python实现)
迁移学习模型构建指南(Python实现) 一、迁移学习概述 迁移学习是一种机器学习方法,通过将预训练模型的知识迁移到新任务中,显著提升模型性能和训练效率。其核心思想是:模型在大型数据集上学习到的通用特征(如边缘、纹理、形状)可被复用至相关任务。 迁移学习类型: 特…...

【设计模式-4.6】行为型——状态模式
说明:本文介绍行为型设计模式之一的状态模式 定义 状态模式(State Pattern)也叫作状态机模式(State Machine Pattern),允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类…...
【LeetCode 热题100】动态规划实战:打家劫舍、完全平方数与零钱兑换(LeetCode 198 / 279 / 322)(Go语言版)
💰 动态规划实战:打家劫舍、完全平方数与零钱兑换(LeetCode 198 / 279 / 322) 本篇博客一次性带你掌握三道 LeetCode 中经典的动态规划(DP)题目: 🏠 198. 打家劫舍(Hou…...

换ip是换网络的意思吗?怎么换ip地址
在数字化时代,IP地址作为我们在网络世界的"身份证",其重要性不言而喻。许多人常将"换IP"与"换网络"混为一谈,实际上两者虽有联系却存在本质区别。本文将澄清这一概念误区,并详细介绍多种更换IP地址…...
【软件】在 macOS 上安装 MySQL
在 macOS 上安装 MySQL 有多种方法,以下是两种常见的安装方式:通过 Homebrew 安装和通过安装包安装。以下是详细的步骤: 一、通过 Homebrew 安装 MySQL Homebrew 是 macOS 的包管理器,使用它安装 MySQL 非常方便。 1.安装 Home…...

手机归属地查询接口如何用Java调用?
一、什么是手机归属地查询接口? 是一种便捷、高效的工具,操作简单,请求速度快。它不仅能够提高用户填写地址的效率,还能帮助企业更好地了解客户需求,制定个性化的营销策略,降低风险。随着移动互联网的发展…...

随笔20250530 C# 整合 IC卡读写技术解析与实现
以下是一个完整、最简化的 FeliCa 读取整合示例(无需 SDK,基于 PCSC NuGet 包),你可以直接运行这个控制台程序,验证能否识别 RC-S300 并读取卡片 UID: 🧪 示例说明 📦 使用 NuGet 包…...
循环神经网络(RNN):为什么它能处理时序数据?它真的能减轻过拟合吗?
循环神经网络(RNN):为什么它能处理时序数据?它真的能减轻过拟合吗? 在深度学习领域,循环神经网络(RNN, Recurrent Neural Network)是一种非常重要的神经网络结构,尤其适…...
JVM与JMM深度解析:从Java 8到Java 21的演进
文章目录 第一部分:JVM基础概念与架构JVM是什么?JVM整体架构运行时数据区类加载机制执行引擎 第二部分:Java内存模型(JMM)什么是Java内存模型JMM的核心问题主内存与工作内存内存间交互操作重排序与happens-before原则v…...

基于爬取的典籍数据重新设计前端界面
1.BooksView(书籍列表页) 2.ClassicsView(目录页) 3.管理员端...
基于C++的IOT网关和平台5:github项目ctGateway开发指南
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。 源码指引:github源码指引_初级代码游戏的博客-CSDN博客 系…...

揭秘 NextJS Script 组件
揭秘 NextJS Script 组件 Next.js 的 Script 组件是对原生 <script> 标签的增强封装,主要区别和优势如下: 自动优化加载策略(支持按需/延迟加载)避免重复加载内置性能优化(如预加载、回调钩子)简化…...
网络安全防御指南:全方位抵御暴力破解攻击
在数字化时代,网络安全威胁如影随形,暴力破解攻击(又称“爆破”)作为黑客常用的入侵手段,正时刻觊觎着系统的薄弱环节。想象一下,攻击者如同不知疲倦的“数字小偷”,利用自动化工具疯狂尝试成千…...

【C++/Linux】TinyWebServer前置知识之IP协议详解
目录 IPv4地址 分类 IP数据报分片 IP 协议在传输数据报时,将数据报分为若干分片(小数据报)后进行传输,并在目的系统中进行重组,这一过程称为分片(Fragmentation)。 IP模块工作流程编辑 I…...
mac安装brew时macos无法信任ruby的解决方法
背景 在使用如下脚本安装brew时,遇到安装ruby,macos不信任外部软件,在安全性点击信任仍然无法安装。 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"如何解决 本地安装好符…...

Codeforces Round 1028 (Div. 2)(A-D)
题面链接:Dashboard - Codeforces Round 1028 (Div. 2) - Codeforces A. Gellyfish and Tricolor Pansy 思路 要知道骑士如果没了那么这个人就失去了攻击手段,贪心的来说我们只需要攻击血量少的即可,那么取min比较一下即可 代码 void so…...

记录一个梦,借助大语言模型图片生成
梦见家门口有一条大河,但大河和其它景物都是灰暗没有鲜艳色彩很普通的梦中场景。大河似乎是长江的支流,但也可能有一个响亮的名字似乎是金沙江。 突然看到一条金红色的龙在快速游动,不敢相信自己的眼睛,因为一直不相信有这种生物…...

android binder(二)应用层编程实例
一、binder驱动浅析 从上图看出,binder的通讯主要涉及三个步骤。 在 Binder Server 端定义好服务,然后向 ServiceManager 注册服务在 Binder Client 中向 ServiceManager 获取到服务发起远程调用,调用 Binder Server 中定义好的服务 整个流…...
HTML 等价字符引用:系统化记忆指南
HTML 等价字符引用:系统化记忆指南 在 HTML 中,字符引用(Character Entity References)用于表示保留字符或特殊符号。我将提供一个系统化的方法来记忆这些重要实体,并解释它们的实际应用。 什么是等价字符引用? HTML 字符引用有两种形式: 命名实体:&entity_name…...

【深度学习】17. 深度生成模型:DCGAN与Wasserstein GAN公式深度推导
深度生成模型:DCGAN与Wasserstein GAN公式深度推导 深度卷积生成对抗网络 DCGAN 在原始 GAN 框架中,生成器和判别器通常使用全连接层构建,这限制了模型处理图像的能力。为此,Radford 等人在 2016 年提出了 DCGAN(Deep Convoluti…...
Ubuntu终端性能监视工具
目录 工具1:nvidia-smi 工具2:nvtop 工具3:nvitop 工具1:nvidia-smi nvidia-smi 如果希望自动刷新这个命令,可以输入如下命令: nvidia-smi -l 工具2:nvtop nvtop 安装方法: …...

设计模式——命令设计模式(行为型)
摘要 本文介绍了命令设计模式,这是一种行为型设计模式,用于将请求封装为对象,实现请求的解耦和灵活控制。它包含命令接口、具体命令、接收者、调用者和客户端等角色,优点是解耦请求发送者与接收者,支持命令的排队、记…...
鸿蒙OSUniApp智能商品展示实战:打造高性能的动态排序系统#三方框架 #Uniapp
UniApp智能商品展示实战:打造高性能的动态排序系统 引言 在电商应用开发中,商品展示和智能排序是提升用户体验的关键因素。随着HarmonyOS生态的发展,用户对应用的性能和交互体验要求越来越高。本文将深入探讨如何在UniApp中实现一个性能优异…...

03 APP 自动化-定位元素工具元素定位
文章目录 一、Appium常用元素定位工具1、U IAutomator View Android SDK 自带的定位工具2、Appium Desktop Inspector3、Weditor安装:Weditor工具的使用 4、uiautodev通过定位工具获取app页面元素有哪些属性 二、app 元素定位方法 一、Appium常用元素定位工具 1、U…...

PABD 2025:大数据与智慧城市管理的融合之道
会议简介 2025年公共管理与大数据国际会议(ICPMBD 2025)确实在海口举办。本次会议将围绕公共管理与大数据的深度融合、数据分析在公共管理中的应用、大数据驱动的政策制定与优化等议题展开深入研讨。参会者将有机会聆听前沿学术报告,分享研究…...

Golang持续集成与自动化测试和部署
概述 Golang是一门性能优异的静态类型语言,但因其奇快的编译速度,结合DevOps, 使得它也非常适合快速开发和迭代。 本文讲述如何使用Golang, 进行持续集成与自动化测试和部署。主要使用了以下相关技术: dep: 进行包的依赖管理gin…...
三套知识系统的实践比较:Notion、Confluence 与 Gitee Wiki
在过去几年中,我们团队先后使用过三套企业知识系统:Notion、Confluence 和 Gitee Wiki。每一套系统上线初期都带来一阵热情,但最终能真正融入研发流程、持续活跃的,只有最后一个。 我们不是要为某个平台背书,而是希望…...

mysql离线安装教程
1.下载地址: https://downloads.mysql.com/archives/community/ 2.上传安装包到系统目录,并解压 tar -xvf mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar3.检查系统中是否存在mariadb的rpm包 rpm -qa|grep mariadb存在则删除 rpm -e xxx4.解压完后执行如下命令安装 sudo rpm -iv…...
OpenGL 3D 编程
OpenGL 是一个强大的跨平台图形 API,用于渲染 2D 和 3D 图形。以下是 OpenGL 3D 编程的入门基础。 一. 环境设置 安装必要的库 GLFW: 用于创建窗口和处理输入 GLEW 或 GLAD: 用于加载 OpenGL 函数 GLM: 数学库,用于 3D 变换 // 基本 OpenGL 程序结构示例 #include <GL/g…...