个人用云计算学习笔记 --18(NFS 服务器、iSCSI 服务器)

文章目录

  • [NFS 服务器](#NFS 服务器)
    • [一、NFS 服务基础概念](#一、NFS 服务基础概念)
    • [二、NFS 与 RPC 的关联](#二、NFS 与 RPC 的关联)
      • [1. NFS 的端口特性](#1. NFS 的端口特性)
      • [2. RPC 的作用](#2. RPC 的作用)
    • [三、NFS 服务部署(基于 RHEL8)](#三、NFS 服务部署(基于 RHEL8))
      • [1. 软件包基础](#1. 软件包基础)
      • [2. 部署步骤(命令行)](#2. 部署步骤(命令行))
    • [四、NFS 导出配置(服务端共享规则)](#四、NFS 导出配置(服务端共享规则))
      • [1. 配置文件说明](#1. 配置文件说明)
      • [2. 客户端指定方式(常用)](#2. 客户端指定方式(常用))
      • [3. 核心导出选项](#3. 核心导出选项)
      • [4. 配置生效命令](#4. 配置生效命令)
    • [五、NFS 导出监视(服务端)](#五、NFS 导出监视(服务端))
    • [六、NFS 客户端配置](#六、NFS 客户端配置)
      • [1. 客户端操作步骤(命令行)](#1. 客户端操作步骤(命令行))
      • [2. 持久化挂载(重启后仍生效)](#2. 持久化挂载(重启后仍生效))
  • [iSCSI 服务器](#iSCSI 服务器)
    • [一、iSCSI 服务基础](#一、iSCSI 服务基础)
      • [1. 概念定义](#1. 概念定义)
      • [2. 关键特性](#2. 关键特性)
    • [二、iSCSI 核心组件](#二、iSCSI 核心组件)
    • [三、iSCSI Target 配置(服务端)](#三、iSCSI Target 配置(服务端))
      • [1. 前期准备:部署软件与基础配置](#1. 前期准备:部署软件与基础配置)
      • [2. targetcli 工具特性](#2. targetcli 工具特性)
      • [3. 核心配置步骤(交互式示例)](#3. 核心配置步骤(交互式示例))
        • [(1)配置 backstore 对象](#(1)配置 backstore 对象)
        • [(2)配置 Target IQN](#(2)配置 Target IQN)
        • [(3)配置 LUN](#(3)配置 LUN)
        • [(4)配置 ACL(允许客户端访问)](#(4)配置 ACL(允许客户端访问))
        • [(5)配置 Portal(指定监听 IP)](#(5)配置 Portal(指定监听 IP))
      • [4. 非交互式配置(命令行模式)](#4. 非交互式配置(命令行模式))
    • [四、iSCSI 客户端配置(访问存储)](#四、iSCSI 客户端配置(访问存储))
    • 五、故障处理
      • [1. 登录失败(发现成功但登录失败)](#1. 登录失败(发现成功但登录失败))
    • 六、多路径访问(提升可用性与性能)

NFS 服务器

一、NFS 服务基础概念

工作逻辑

  • 客户端视角:NFS 客户端(多为应用服务器,如 web 服务器)通过 "挂载(mount)" 操作,将 NFS 服务端的共享目录挂载到本地挂载点,从本地看,该共享目录如同自身磁盘分区 / 目录,实际存储在远端服务端。
  • 企业应用场景 :在企业集群架构中,主要用于存储视频、图片、附件等静态资源,例如中小网站的 BBS 图片、用户头像、上传附件等,统一存放在 NFS 共享目录中。

二、NFS 与 RPC 的关联

1. NFS 的端口特性

NFS 支持功能多,每个功能需启动对应程序并占用端口,但端口不固定,随机使用未被占用的小于 1024 的端口,导致客户端无法直接获取服务端端口。

2. RPC 的作用

  • 全称:远程过程调用(Remote Procedure Call)。
  • 核心功能:注册 NFS 各功能对应的端口,并向客户端汇报,使客户端能连接到正确端口;同时定义进程间网络交互通信机制,让客户端无需了解服务器底层通信协议即可请求服务。
  • 关键组件 :依赖portmap服务实现端口注册与映射。

三、NFS 服务部署(基于 RHEL8)

1. 软件包基础

NFS 服务由nfs-utils软件包提供,RHEL8 默认已安装,若需手动安装可执行对应命令。

2. 部署步骤(命令行)

步骤 操作目的 执行命令
1 安装nfs-utils软件包 [root@server~]# dnf install -y nfs-utils
2 准备共享目录所属用户(指定 UID=1000,避免权限问题) 1. 创建用户:[root@server~]# useradd -u 1000 laoma2. 设置密码:`[root@server~]# echo redhat passwd --stdin laoma`
3 创建共享目录并设置权限 1. 创建目录:[root@server~]# mkdir /shares/nfs2. 更改所有者:[root@server~]# chown laoma /shares/nfs
4 启用并启动 NFS 服务 [root@server~]# systemctl enable nfs-server --now
5 配置防火墙(开放 NFS 相关服务端口) 1. 永久开放服务:[root@server~]# firewall-cmd --permanent --add-service=nfs --add-service=rpc-bind --add-service=mountd2. 重载防火墙:[root@server~]# firewall-cmd --reload

四、NFS 导出配置(服务端共享规则)

1. 配置文件说明

  • 主配置文件/etc/exports
  • 辅助配置目录/etc/exports.d/,该目录下以.exports结尾的文件均生效,相比直接编辑主文件,更易管理且能降低配置破坏风险。
  • 语法规则 :每一行对应一个 "导出点",格式为[共享目录路径] [客户端1] [选项1] [客户端2] [选项2]...,且禁止将 SMB 共享目录作为 NFS 共享目录,否则可能导致文件损坏或一致性问题。

2. 客户端指定方式(常用)

客户端类型 示例 说明
可解析 DNS 主机名 /shares/nfs client.redhat.fun client.redhat.fun主机可挂载该目录
DNS 通配符 /shares/nfs *.redhat.fun redhat.fun域下所有主机可访问
IPv4 地址 /shares/nfs 10.1.8.11 10.1.8.11这一 IP 可访问
IPv4 网络 /shares/nfs 10.1.8.0/24/shares/nfs 10.1.8.0/255.255.255.0 10.1.8.0/24网段所有主机可访问
IPv6 地址 /shares/nfs fde2:6494:1e09:2::20 仅该 IPv6 地址主机可访问
IPv6 网络 /shares/nfs fde2:6494:1e09:2::/64 该 IPv6 网段所有主机可访问
多客户端 /shares/nfs 10.1.8.0/24 client.redhat.fun *.example.net 多个客户端用空格分隔,均能访问

3. 核心导出选项

选项 功能说明 示例
rw 允许客户端读 / 写访问(默认是ro只读) /shares/nfs client.redhat.fun(rw)(该主机有读写权限)
no_root_squash 禁用 "root 用户映射":默认客户端 root 用户访问时,服务端将其视为nobody用户;启用此选项后,客户端 root 可拥有服务端实际 root 权限(RHEL7 映射nfsnobody,RHEL8 映射nobody /shares/nfs client.redhat.fun(rw,no_root_squash)

4. 配置生效命令

修改导出配置后,需执行以下命令使更改生效:

  • 方式 1:[root@server~]# exportfs -r(重新读取配置)
  • 方式 2:[root@server~]# systemctl reload nfs-server(重载 NFS 服务)
  • 方式 3:[root@server~]# exportfs -av(显示详细信息并生效)

五、NFS 导出监视(服务端)

通过exportfs命令查看当前导出状态:

  • 查看导出的目录与客户端:[root@server~]# exportfs,示例输出:/shares/nfs 10.1.8.0/24
  • 查看导出目录及选项(含默认选项):[root@server~]# exportfs -v,示例输出:/shares/nfs 10.1.8.0/24(sync,rw,secure,no_root_squash,...)

六、NFS 客户端配置

1. 客户端操作步骤(命令行)

步骤 操作目的 执行命令
1 安装nfs-utils软件包 [root@client~]# dnf install -y nfs-utils
2 创建与服务端一致 UID 的用户(避免权限问题) [root@client~]# useradd -u 1000 laoma
3 查看服务端提供的共享目录 [laoma@client~]$ showmount -e serverserver为服务端主机名 / IP),示例输出:Export list for server: /shares/nfs 10.1.8.0/24
4 创建本地挂载点并挂载 1. 创建挂载点:[root@client~]# mkdir /mnt/nfs2. 挂载 NFS 共享:[root@client~]# mount -t nfs server:/shares/nfs /mnt/nfs
5 权限验证 1. root 用户无权限创建文件:[root@client~]# touch /mnt/nfs/root-f1(提示Permission denied)2. laoma 用户有权创建文件:[laoma@client~]$ touch /mnt/nfs/laoma-f1

2. 持久化挂载(重启后仍生效)

编辑/etc/fstab文件,添加以下内容:

复制代码
server:/shares/nfs /mnt/nfs nfs defaults 0 0
  • 格式说明:[服务端共享路径] [本地挂载点] [文件系统类型] [挂载选项] [dump备份标记] [fsck检查顺序]

iSCSI 服务器

一、iSCSI 服务基础

1. 概念定义

  • SCSI:小型计算机系统接口,是计算机与硬盘、光驱、打印机等智能设备的连接标准。
  • iSCSI(Internet Small Computer System Interface):又称 IPSAN,由 IBM 研发,将 SCSI 接口与以太网技术结合,基于 TCP/IP 协议连接服务端(Target)和客户端(Initiator),实现 SCSI 数据包在互联网传输,最终让服务端为客户端提供存储服务。

2. 关键特性

  • 网络要求:通常使用专用 10Gb 以太网或更高速网络,以最大化性能。
  • 流量安全:数据中心内 SAN 流量一般不加密(提升性能),若需 WAN 安全,管理员可通过 IPsec 加密流量。
  • 架构模式:采用 C/S 架构,客户端的 iSCSI 目标显示为本地未格式化 SCSI 块设备,与 SCSI 布线、FC 直连等方式连接的设备功能等同。

二、iSCSI 核心组件

组件名称 英文全称 功能说明 关键要求 / 格式
发起者 Initiator iSCSI 客户端,可软件部署或使用 iSCSI HBA 硬件,需唯一标识 必须有唯一 IQN
目标 Target iSCSI 服务器上的存储资源,提供块设备或逻辑单元(LUN) 需唯一 IQN,一台服务器可提供多个目标,多数目标仅提供一个设备
全球唯一名称 IQN(iSCSI Qualified Name) 标识 Initiator 和 Target 的全球唯一名称 格式:iqn.YYYY-MM.com.reversed.domain:name_string例:iqn.2024-12.cloud.qy:disk1,YYYY-MM 为创建年月,确保唯一性
门户 Portal 指定服务器监听的地址和端口 例:172.25.250.50:3260
逻辑单元号 LUN(Logical Unit Number) 代表 Target 提供的块设备 每个 Target 可提供一个或多个 LUN
访问控制列表 ACL(Access Control List) 限制客户端访问 Target 的权限 通过 Initiator 的 IQN 实现访问控制
目标门户组 TPG(Target Portal Group) Target 的完整配置集合 包含 Portal、LUN 和 ACL,多数 Target 用一个 TPG,高级配置可多个
发现 Discovery 查询服务器上的 Target 列表 客户端获取可连接 Target 的必要步骤
登录 Login 客户端向 Target 验证身份 验证通过后可使用 Target 提供的块设备

三、iSCSI Target 配置(服务端)

1. 前期准备:部署软件与基础配置

  1. 安装软件 :使用dnf install -y targetcli安装 targetcli 工具(提供 targetcli 命令)。

  2. 启用服务 :通过systemctl enable --now target启用并启动 target 服务。

  3. 配置防火墙

    :开放 iSCSI 目标服务端口,命令如下:

    bash 复制代码
    firewall-cmd --permanent --add-service=iscsi-target
    firewall-cmd --reload

2. targetcli 工具特性

  • 支持交互式非交互式执行。
  • 采用分层树组织目标对象,支持 Linux 常用导航命令(cd、ls、pwd)。
  • 支持 Tab 键补全,配置保存在/etc/target/saveconfig.json(退出交互式模式自动保存,非交互式需显式执行targetcli saveconfig)。

3. 核心配置步骤(交互式示例)

(1)配置 backstore 对象

backstore 是 Target 的存储来源,有 4 种类型:

类型 说明 示例命令
block 服务器中的块设备(磁盘、分区、逻辑卷) cd /backstores/block``create myblock1 /dev/vdb(创建名为 myblock1,关联 /dev/vdb 的 block 对象)
fileio 本地文件系统中的常规文件(作为磁盘映像) cd /backstores/fileio``create myfile1 /data/disk.img 10G(创建 10G 大小的文件映像)
pscsi 物理 SCSI 设备,允许客户端访问服务器物理 SCSI 设备 cd /backstores/pscsi``create mypscsi1 /dev/sdc
ramdisk 内存中的磁盘设备,数据不持久(重启丢失) cd /backstores/ramdisk``create myram1 5G(创建 5G 内存磁盘)
(2)配置 Target IQN

进入 iscsi 目录创建 IQN:

bash 复制代码
cd /iscsi
create iqn.2024-12.cloud.qy:disk1  # 创建IQN为iqn.2024-12.cloud.qy:disk1的Target

创建后自动生成默认 TPG(含监听所有 IP 的 Portal:0.0.0.0:3260)。

(3)配置 LUN

将 backstore 对象映射为 LUN,供客户端访问:

bash 复制代码
cd /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/luns
create /backstores/block/myblock1  # 将myblock1映射为LUN 0
(4)配置 ACL(允许客户端访问)

通过客户端 IQN 授权访问,客户端 IQN 存储在/etc/iscsi/initiatorname.iscsi

bash 复制代码
cd /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/acls
create iqn.2021-05.fun.redhat.server:client  # 允许该IQN的客户端访问
(5)配置 Portal(指定监听 IP)

删除默认全 IP 监听,配置指定 IP:

bash 复制代码
cd /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/portals
delete 0.0.0.0 3260  # 删除默认Portal
create 10.1.8.10 3260  # 配置监听10.1.8.10:3260

4. 非交互式配置(命令行模式)

直接通过一条命令完成配置,示例:

bash 复制代码
# 创建backstore
targetcli /backstores/block create myblock1 /dev/vdb
# 创建Target IQN
targetcli /iscsi create iqn.2024-12.cloud.qy:disk1
# 配置LUN
targetcli /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/luns create /backstores/block/myblock1
# 配置ACL
targetcli /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/acls create iqn.2021-05.fun.redhat.server:client
# 配置Portal
targetcli /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/portals delete 0.0.0.0 3260
targetcli /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/portals create 10.1.8.10 3260
# 保存配置
targetcli saveconfig

四、iSCSI 客户端配置(访问存储)

1. 前期准备:安装与配置启动器

  1. 安装软件:

    安装 iscsi-initiator-utils 包,包含 iscsi、iscsid 服务及配置文件:

    bash 复制代码
    dnf install -y iscsi-initiator-utils
  2. 配置客户端 IQN:

    客户端 IQN 默认生成在

    复制代码
    /etc/iscsi/initiatorname.iscsi

    可修改:

    bash 复制代码
    vim /etc/iscsi/initiatorname.iscsi
    # 修改为:InitiatorName=iqn.2021-05.fun.redhat.server:client(需与服务端ACL授权的IQN一致)
  3. 配置 iscsid.conf:

    复制代码
    /etc/iscsi/iscsid.conf

    存储目标连接默认设置(超时、重试、认证信息等),修改后需重启 iscsid 服务:

    bash 复制代码
    systemctl restart iscsid

2. 连接 iSCSI 目标

(1)发现目标

获取服务器上的 Target 列表,portal_ip为服务端 Portal IP:

bash 复制代码
iscsiadm -m discovery -t st -p portal_ip[:port]  # 未指定port默认3260
# 示例:iscsiadm -m discovery -t st -p 10.1.8.10
# 输出:10.1.8.10:3260,1 iqn.2024-12.cloud.qy:disk1
(2)登录目标

登录发现的 Target,成功后目标设备显示为本地块设备:

bash 复制代码
iscsiadm -m node -T Target_IQN -p portal_ip[:port] -l
# 示例:iscsiadm -m node -T iqn.2024-12.cloud.qy:disk1 -p 10.1.8.10:3260 -l
(3)验证设备

查看已连接的 iSCSI 设备:

bash 复制代码
# 方式1:查看iSCSI会话信息
iscsiadm -m session -P 3
# 方式2:查看磁盘设备
ls -l /dev/disk/by-path/*iscsi*
# 方式3:查看系统日志
dmesg | grep iscsi
tail /var/log/messages | grep iscsi

3. 格式化与持久化挂载

(1)格式化设备

若设备为空,可格式化(如 XFS 格式):

bash 复制代码
mkfs.xfs /dev/sdc  # /dev/sdc为iSCSI设备(需根据实际情况替换)
(2)持久化挂载
  • 核心原则 :不使用设备名(/dev/sd*,可能因启动顺序变化),改用 UUID;添加_netdev选项(确保网络就绪后挂载)。

  • 步骤:

    1. 获取设备 UUID:lsblk --fs(查看设备对应的 UUID)。

    2. 编辑

      复制代码
      /etc/fstab
      bash 复制代码
      vim /etc/fstab
      # 添加:UUID="3d49d1dd-8209-43a1-a106-4de328762e00" /data xfs defaults,_netdev 0 0
    3. 验证挂载:mount -a(无报错则成功,重启后自动挂载)。

    4. 确保 iscsi 服务开机启动:systemctl enable iscsi(默认已启用)。

4. 断开目标连接

  1. 卸载挂载点:umount /data(/data 为挂载点)。

  2. /etc/fstab删除对应行。

  3. 注销目标:

    bash 复制代码
    iscsiadm -m node -T iqn.2024-12.cloud.qy:disk1 -p 10.1.8.10:3260 -u
  4. 删除本地记录(避免开机自动登录):

    bash 复制代码
    iscsiadm -m node -T iqn.2024-12.cloud.qy:disk1 -p 10.1.8.10:3260 -o delete

五、故障处理

1. 登录失败(发现成功但登录失败)

  • 常见原因:客户端 IQN 与服务端 ACL 授权的 IQN 不匹配;iscsid 服务缓存旧 IQN。

  • 解决步骤:

    1. 验证客户端 IQN:cat /etc/iscsi/initiatorname.iscsi,确保与服务端 ACL 的 IQN 一致。

    2. 重启 iscsid 服务(清除缓存):

      bash 复制代码
      systemctl stop iscsid
      # 重新发现目标
      iscsiadm -m discovery -t st -p 10.1.8.10
      # 重新登录
      iscsiadm -m node -T iqn.2024-12.cloud.qy:disk1 -l

六、多路径访问(提升可用性与性能)

1. 概念与作用

  • 多路径 :服务器与存储阵列通过多个物理连接(如双网卡、双 Portal)使用虚拟设备,实现路径冗余 (单路径故障不影响连接)和带宽聚合(提升性能)。
  • 核心组件 :由 dm-multipath 子系统提供,包含 multipathd 进程(管理多路径)和 multipath 命令行工具,软件包为device-mapper-multipath

2. 服务端准备(配置双 Portal)

  1. 配置双网络(如 10.1.8.10 和 10.1.1.10)。

  2. 为 Target 配置双 Portal:

    bash 复制代码
    # 进入Target的Portal目录
    targetcli /iscsi/iqn.2024-08.fun.linux.server:webapp/tpg1/portals
    # 创建第二个Portal
    create 10.1.1.10 3260
    # 验证:ls (显示两个Portal:10.1.8.10:3260和10.1.1.10:3260)

3. 客户端配置多路径

(1)安装与启用
  1. 安装软件包:dnf install -y device-mapper-multipath

  2. 生成配置文件:

    • 新环境(无配置文件):mpathconf --enable(生成/etc/multipath.conf)。
    • 已有配置文件:mpathconf --enable --with_multipathd y --with_chkconfig y(修改配置)。
  3. 启动服务:

    bash 复制代码
    systemctl start multipathd
    systemctl enable multipathd
(2)多路径设备位置
  • 管理用/dev/mapper/,支持自定义别名(通过multipath.confalias选项),或默认命名为mpathN(N 为数字)。
  • 系统内部用/dev/dm-N(禁止直接管理使用)。

4. 多路径监控与策略

(1)监控命令
  • multipath -ll:显示详细多路径拓扑,包含设备信息、路径组(path group)、路径状态(active/ready/failed 等)。

  • 示例输出解析:

    plaintext 复制代码
    Clusterstorage (3600140559c2883e039048cbbce4320b4) dm-0 LIO-ORG,myblock1
    size=4.0G features='0' hwhandler='0' wp=rw
    |-+- policy='service-time 0' prio=1 status=active  # 活跃路径组
    | `- 2:0:0:0 sdb 8:16 active ready running        # 活跃路径
    `-+- policy='service-time 0' prio=1 status=enabled # 备用路径组
      `- 3:0:0:0 sda 8:0 active ready running         # 备用路径
(2)路径组策略
策略名称 说明 配置示例(multipath.conf)
failover(故障转移) 每个路径组 1 个路径,同一时刻仅 1 个路径活跃,故障时切换到备用路径 multipaths { multipath { wwid 3600140559c2883e039048cbbce4320b4 alias Clusterstorage path_grouping_policy failover } }
multibus(多总线) 所有路径聚合到 1 个路径组,负载均衡(需存储控制器支持 active-active) multipaths { multipath { wwid 3600140559c2883e039048cbbce4320b4 alias Clusterstorage path_grouping_policy multibus } }
(3)故障切换逻辑
  • 备用路径故障 :活跃路径组不变,备用路径状态变为failed faulty offline
  • 活跃路径故障 :活跃路径组变为备用(状态enabled),备用路径组变为活跃(状态active)。
  • 故障恢复:恢复的路径仍为备用,需手动切换回活跃路径。

5. 多路径配置文件(/etc/multipath.conf)

(1)配置结构与优先级
  • 结构 :包含 5 个核心部分,优先级从高到低为:multipaths > devices > defaults

  • 各部分作用:

    部分 作用 示例
    blacklist 定义不允许使用的多路径设备 blacklist { devnode "^sd[a-z]" # 排除所有sd开头设备 wwid 1234567890abcde # 排除指定WWID设备 }
    blacklist_exceptions 定义需包含的设备(即使在 blacklist 中) blacklist_exceptions { device { vendor "IBM" product "s/390.*" } }
    defaults 所有多路径的默认配置 defaults { path_selector "service-time 0" # 路径选择算法:服务时间最短 path_grouping_policy failover # 默认故障转移策略 user_friendly_names yes # 启用友好名称 }
    devices 指定特定设备类型的配置(覆盖 defaults) devices { device { vendor "COMPAQ" product "S110 (C) COMPAQ" path_grouping_policy multibus path_checker readsector0 } }
    multipaths 指定单个多路径的配置(覆盖 devices 和 defaults) multipaths { multipath { wwid 3600140559c2883e039048cbbce4320b4 alias Clusterstorage path_grouping_policy failover } }
(2)关键配置项
  • path_selector :路径选择算法,如service-time 0(服务时间最短)、round-robin 0(轮询)、queue-length 0(队列长度最短)。
  • path_checker :路径健康检查方式,如directio(默认)、readsector0(读取扇区 0)。
  • user_friendly_names :是否启用友好名称(yes/no),yes时设备名为mpathNno时为 WWID。
  • queue_if_no_path :路径全故障时是否阻塞 IO(yes/no),集群环境建议no,避免 IO 挂起影响其他节点。

6. 多路径设备管理

(1)增加分区
  1. 对多路径设备(如/dev/mapper/Clusterstorage)创建分区:fdisk /dev/mapper/Clusterstorage
  2. 所有节点执行partprobe(刷新分区信息)。
  3. 若未生成分区设备,执行kpartx -a /dev/mapper/Clusterstorage(创建 dm 设备)。
(2)删除多路径
  1. 删除所有路径(断开 iSCSI 连接)。
  2. 执行multipath -F(清空所有多路径设备,适用于测试或清理旧配置)。
  3. 若需删除单个设备:multipath -f 设备名(如multipath -f Clusterstorage)。
相关推荐
广药门徒3 小时前
Linux驱动开发与BuildRoot是什么关系与其的应用场景
linux·运维·驱动开发
czhc11400756633 小时前
Linux108 shell:.bashrc 正则表达式:. * .* ^ $ ^$ [ ] [^] ^[] ^[^ ] \< \>
linux·正则表达式
肥肠可耐的西西公主3 小时前
后端(JavaWeb)学习笔记(CLASS 1):maven
笔记·学习·maven
野猪疯驴3 小时前
Linux shell学习(更新中....)
linux·shell
kfepiza3 小时前
Spring的三级缓存原理 笔记251008
笔记·spring·缓存
努力学习的小廉3 小时前
深入了解linux网络—— TCP网络通信(下)
linux·网络·tcp/ip
Bruce_Liuxiaowei6 小时前
MQTT协议在物联网环境中的安全风险与防范指南
运维·网络·物联网·安全·网络安全
DKPT6 小时前
JVM栈溢出和堆溢出哪个先满?
java·开发语言·jvm·笔记·学习
Rock_yzh9 小时前
AI学习日记——参数的初始化
人工智能·python·深度学习·学习·机器学习