当前位置: 首页 > news >正文

NFS、iSCSI 和lnmp部署操作

目录

(一)基础配置

1.NFS服务安装

2.修改配置文件

3.重载配置文件

4.查看共享目录

5.客户端挂载

6.更换共享目录

7.基础实验

(二)布置lnmp平台

1.php

安装软件

检测

2.连接MySQL

测试

3.软件实施

软件安装配置

(三)iSCSI布置

1.识别磁盘

2.配置另一台

3.Windows连接

4.linux客户端连接

5.服务端测试


# NFS文件存储

关闭防火墙 上下文

(一)基础配置

1.NFS服务安装

 
[root@localhost ~]# yum install -y nfs-utils#服务端客户端都要装
 #查看是否启动[root@nfs-server ~]# netstat -anptul | grep 2049tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   tcp6       0      0 :::2049                 :::*                    LISTEN      -                   [root@nfs-server ~]# netstat -anptul | grep 111tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      17838/rpcbind       tcp        0      0 192.168.157.168:39998   111.13.18.31:443        TIME_WAIT   -                   tcp6       0      0 :::111                  :::*                    LISTEN      17838/rpcbind       udp        0      0 0.0.0.0:111             0.0.0.0:*                           17838/rpcbind       udp6       0      0 :::111                  :::*                                17838/rpcbind    

2.修改配置文件

 [root@nfs-server ~]# vim /etc/exports###默认是空的/data 192.168.157.0/24(rw,sync,no_root_squash)共享的目录 ip   权限,写入方式,降级​重载配置文件 重启  或 exportfs -arv

3.重载配置文件

 #重启  或 exportfs -arv[root@nfs-server ~]# mkdir /data[root@nfs-server ~]# exportfs -arvexportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "192.168.157.0/24:/data".Assuming default behaviour ('no_subtree_check').NOTE: this default has changed since nfs-utils version 1.0.x​exporting 192.168.157.0/24:/data

4.查看共享目录

 #在本地[root@nfs-server ~]# showmount -eExport list for nfs-server:/data 192.168.157.0/24#不在本地 需要指向服务器ip[root@web1 ~]# showmount -e 192.168.157.168Export list for 192.168.157.168:/data 192.168.157.0/24

5.客户端挂载

 
#客户端挂载[root@web1 ~]# mount 192.168.157.168:/data /mnt/[root@web1 ~]# df -Th文件系统                   类型      大小  已用  可用 已用% 挂载点/dev/mapper/openeuler-root ext4       69G  2.1G   63G    4% /devtmpfs                   devtmpfs  4.0M     0  4.0M    0% /devtmpfs                      tmpfs     713M     0  713M    0% /dev/shmtmpfs                      tmpfs     4.0M     0  4.0M    0% /sys/fs/cgrouptmpfs                      tmpfs     285M  5.5M  280M    2% /runtmpfs                      tmpfs     713M     0  713M    0% /tmp/dev/sda2                  ext4      974M  174M  733M   20% /boot/dev/mapper/openeuler-home ext4      125G   24K  119G    1% /home192.168.157.168:/data      nfs4       69G  2.1G   63G    4% /mnt

6.更换共享目录

#需要先将服务端 挂载卸掉
[root@web1 ~]# umount /mnt
[root@web1 ~]# df -Th
文件系统                   类型      大小  已用  可用 已用% 挂载点
/dev/mapper/openeuler-root ext4       69G  2.1G   63G    4% /
devtmpfs                   devtmpfs  4.0M     0  4.0M    0% /dev
tmpfs                      tmpfs     713M     0  713M    0% /dev/shm
tmpfs                      tmpfs     4.0M     0  4.0M    0% /sys/fs/cgroup
tmpfs                      tmpfs     285M  5.5M  280M    2% /run
tmpfs                      tmpfs     713M     0  713M    0% /tmp
/dev/sda2                  ext4      974M  174M  733M   20% /boot
/dev/mapper/openeuler-home ext4      125G   24K  119G    1% /home
#在/home 下新建共享目录
[root@nfs-server ~]# cd /home
[root@nfs-server home]# mkdir data
[root@nfs-server home]# ls
data  lost+found
#修改配置文件
[root@nfs-server home]# vim /etc/exports
/home/data 192.168.157.0/24(rw,sync,no_root_squash)
#重载配置文件
[root@nfs-server home]# exportfs -arv
exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "192.168.157.0/24:/home/data".Assuming default behaviour ('no_subtree_check').NOTE: this default has changed since nfs-utils version 1.0.xexporting 192.168.157.0/24:/home/data
#客户端重新挂载
[root@web1 home]# mount 192.168.157.168:/home/data /mnt/
[root@web1 home]# df -Th
文件系统                   类型      大小  已用  可用 已用% 挂载点
/dev/mapper/openeuler-root ext4       69G  2.1G   63G    4% /
devtmpfs                   devtmpfs  4.0M     0  4.0M    0% /dev
tmpfs                      tmpfs     713M     0  713M    0% /dev/shm
tmpfs                      tmpfs     4.0M     0  4.0M    0% /sys/fs/cgroup
tmpfs                      tmpfs     285M  5.5M  280M    2% /run
tmpfs                      tmpfs     713M     0  713M    0% /tmp
/dev/sda2                  ext4      974M  174M  733M   20% /boot
/dev/mapper/openeuler-home ext4      125G   24K  119G    1% /home
192.168.157.168:/home/data nfs4      125G     0  119G    0% /mnt

7.基础实验

让两台web服务器访问相同内容

#安装nginx
[root@web1 home]# yum install -y nginx
#把共享目录 挂载到/usr/share/nginx/html/
[root@web1 html]# mount 192.168.157.168:/home/data /usr/share/nginx/html/
[root@web1 html]# !d
df -Th
文件系统                   类型      大小  已用  可用 已用% 挂载点
/dev/mapper/openeuler-root ext4       69G  2.1G   63G    4% /
devtmpfs                   devtmpfs  4.0M     0  4.0M    0% /dev
tmpfs                      tmpfs     713M     0  713M    0% /dev/shm
tmpfs                      tmpfs     4.0M     0  4.0M    0% /sys/fs/cgroup
tmpfs                      tmpfs     285M  5.5M  280M    2% /run
tmpfs                      tmpfs     713M     0  713M    0% /tmp
/dev/sda2                  ext4      974M  174M  733M   20% /boot
/dev/mapper/openeuler-home ext4      125G   24K  119G    1% /home
192.168.157.168:/home/data nfs4      125G     0  119G    0% /usr/share/nginx/html
#启动nginx
[root@web1 html]# systemctl start nginx
#nfs服务端
[root@nfs-server home]# ls
data  lost+found
[root@nfs-server home]# cd data
[root@nfs-server data]# vim index.html
cc2505
#web2配置
[root@web2 ~]# showmount -e 192.168.157.168
Export list for 192.168.157.168:
/home/data 192.168.157.0/24
[root@web2 ~]# mount 192.168.157.168:/home/data /usr/share/nginx/html/
[root@web2 ~]# systemctl start nginx

测试

web1

web2

(二)布置lnmp平台

1.php

安装软件
 #正常情况应安装以下软件 在上述操作已安装nginx mysql-server[root@web1 html]# yum install -y nginx mysql-server php php-mysqlnd php-fpm###[root@web1 html]# yum install -y php php-mysqlnd php-fpmphp语言 php-mysqlnd连接数据库驱动,php对数据库进行操作  php-fpm 让nginx识别php[root@web1 html]# rpm -ql php-fpm#/etc/php-fpm.d#/etc/php-fpm.d/www.conf#由于openEuler关于php的配置已经配置好 所有不用改配置文件#php-fpm 和 nginx 在同一主机

 [root@web1 conf.d]# systemctl start php-fpm[root@web1 conf.d]# systemctl restart nginx[root@nfs-server data]# vim index.html<?phpphpinfo();?>root@nfs-server data]# mv index.html index.php[root@nfs-server data]# lsindex.php[root@web2 ~]# yum install -y php php-mysqlnd php-fpm[root@web2 ~]# systemctl start php-fpm[root@web2 ~]# systemctl restart nginx
检测

 
**php-fpm 和 nginx 不在同一主机** 拓展[root@web1 php-fpm.d]# vim www.conf listen = /run/php-fpm/www.sock#改为listen = 192.168.157.169:9000修改listen.allowed_clients = 127.0.0.1

 ​2.连接MySQL

 
#nfs 添加#nfs web1 web2 都 启动mysqlroot@nfs-server data]# lsindex.php  mysql_conn.php[root@nfs-server data]# vim mysql_conn.php <?php$link = mysqli_connect('localhost', 'root', '');if ($link) {echo "connect successful";} else {echo "connect fail ";}mysqli_close($link);?>
测试

3.软件实施

Discuz! 安装向导

#访问http://192.168.157.169/upload
#进入安装界面
#发现权限不够 缺少依赖
#查看php-fpm
[root@web1 php-fpm.d]# ps aux | grep php-fpm
root       45460  0.0  1.9 195744 28644 ?        Ss   20:42   0:00 php-fpm: master process (/etc/php-fpm.conf)
apache     45461  0.0  1.3 196296 19612 ?        S    20:42   0:00 php-fpm: pool www
apache     45462  0.0  1.3 196296 20300 ?        S    20:42   0:00 php-fpm: pool www
apache     45463  0.0  1.6 270292 24568 ?        S    20:42   0:00 php-fpm: pool www
apache     45464  0.0  1.2 196296 18816 ?        S    20:42   0:00 php-fpm: pool www
apache     45465  0.0  1.6 270292 23604 ?        S    20:42   0:00 php-fpm: pool www
apache     68624  0.0  0.9 196296 14472 ?        S    21:52   0:00 php-fpm: pool www
root       69603  0.0  0.5  21988  8104 pts/0    S+   21:55   0:00 grep --color=auto php-fpm
#查看nginx
[root@web1 php-fpm.d]# ps aux | grep nginx
root       62712  0.0  0.2  30404  3256 ?        Ss   21:34   0:00 nginx: master process /usr/sbin/nginx
nginx      62713  0.0  0.4  31416  7228 ?        S    21:34   0:00 nginx: worker process
nginx      62714  0.0  0.4  31416  7152 ?        S    21:34   0:00 nginx: worker process
root       70146  0.0  0.5  21988  7920 pts/0    S+   21:57   0:00 grep --color=auto nginx
#选择用哪个账户
#测试之后发现用apache账户
#在nfs上安装 php-fpm 但是不用启动
[root@nfs-server data]# yum install -y php-fpm
[root@nfs-server data]# cd upload/
#更改属主
[root@nfs-server upload]# chown apache ./ -R
[root@nfs-server upload]# ls -l
总计 108
-rw-r--r--.  1 apache root 2869 2024年 5月20日 admin.php
drwxr-xr-x. 10 apache root 4096 2024年 5月20日 api
-rw-r--r--.  1 apache root  727 2024年 5月20日 api.php
drwxr-xr-x.  2 apache root 4096 2024年 5月20日 archiver
drwxr-xr-x.  2 apache root 4096 2024年 5月20日 config
-rw-r--r--.  1 apache root 1040 2024年 5月20日 connect.php
-rw-r--r--.  1 apache root  106 2024年 5月20日 crossdomain.xml
drwxr-xr-x. 12 apache root 4096 2024年 5月20日 data
-rw-r--r--.  1 apache root 5558 2024年 5月20日 favicon.ico
-rw-r--r--.  1 apache root 2357 2024年 5月20日 forum.php
-rw-r--r--.  1 apache root  906 2024年 5月20日 group.php
-rw-r--r--.  1 apache root 1325 2024年 5月20日 home.php
-rw-r--r--.  1 apache root 6920 2024年 5月20日 index.php
drwxr-xr-x.  5 apache root 4096 2024年 5月20日 install
-rw-r--r--.  1 apache root  998 2024年 5月20日 member.php
-rw-r--r--.  1 apache root 2410 2024年 5月20日 misc.php
-rw-r--r--.  1 apache root 1790 2024年 5月20日 plugin.php
-rw-r--r--.  1 apache root 1086 2024年 5月20日 portal.php
-rw-r--r--.  1 apache root  639 2024年 5月20日 robots.txt
-rw-r--r--.  1 apache root 1755 2024年 5月20日 search.php
drwxr-xr-x. 10 apache root 4096 2024年 5月20日 source
drwxr-xr-x.  7 apache root 4096 2024年 5月20日 static
drwxr-xr-x.  3 apache root 4096 2024年 5月20日 template
drwxr-xr-x.  8 apache root 4096 2024年 5月20日 uc_client
drwxr-xr-x. 13 apache root 4096 2024年 5月20日 uc_server
#然后就可以安装了
软件安装配置
 #web1上 新建 给软件连接用的账户[root@web1 php-fpm.d]# mysqlmysql> create user ultrax@127.0.0.1 identified by '123.com';Query OK, 0 rows affected (0.01 sec)mysql> grant all on ultrax.* to ultrax@127.0.0.1;Query OK, 0 rows affected (0.01 sec)#web2上 新建 给软件连接用的账户[root@web2 php-fpm.d]# mysqlmysql> create user ultrax@127.0.0.1 identified by '123.com';Query OK, 0 rows affected (0.01 sec)mysql> grant all on ultrax.* to ultrax@127.0.0.1;Query OK, 0 rows affected (0.01 sec)#安装软件

 #WEB2[root@web1 ~]# mysqldump --databases ultrax > ultrax.sql[root@web1 ~]# scp ultrax.sql 192.168.157.170:/rootThe authenticity of host '192.168.157.170 (192.168.157.170)' can't be established.ED25519 key fingerprint is SHA256:1+6pwJp4PGRy3pTuY4/lM2+SKaA3eNsCqwvp/0Dd9BQ.This key is not known by any other names.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added '192.168.157.170' (ED25519) to the list of known hosts.​Authorized users only. All activities may be monitored and reported.root@192.168.157.170's password: Permission denied, please try again.root@192.168.157.170's password: ultrax.sql #[root@web2 ~]# mysql < ultrax.sql 

(三)iSCSI布置

1.识别磁盘

#添加两块磁盘
#热识别
[root@target ~]# for i in `ls /sys/class/scsi_host`;do echo "- - -" >/sys/class/scsi_host/$i/scan;done
[root@target ~]# lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0  200G  0 disk 
├─sda1               8:1    0    1M  0 part 
├─sda2               8:2    0    1G  0 part /boot
└─sda3               8:3    0  199G  0 part ├─openeuler-root 253:0    0   70G  0 lvm  /├─openeuler-swap 253:1    0    2G  0 lvm  [SWAP]└─openeuler-home 253:2    0  127G  0 lvm  /home
sdb                  8:16   0   20G  0 disk 
sdc                  8:32   0   20G  0 disk 
sr0                 11:0    1 1024M  0 rom  
#安装
[root@target ~]# yum install -y scsi-target-utils
#新建target
[root@target ~]# tgtadm -L iscsi -o new -m target -t 1 -T iqn.20250710.com.jx.www:sda 
#查看
[root@target ~]# tgtadm -o show -m target
Target 1: iqn.20250710.com.jx.www:sdaSystem information:Driver: iscsiState: readyI_T nexus information:LUN information:LUN: 0Type: controllerSCSI ID: IET     00010000SCSI SN: beaf10Size: 0 MB, Block size: 1Online: YesRemovable media: NoPrevent removal: NoReadonly: NoSWP: NoThin-provisioning: NoBacking store type: nullBacking store path: NoneBacking store flags: Account information:
ACL information:
#查看
[root@target ~]# tgt-admin -s
Target 1: iqn.20250710.com.jx.www:sdaSystem information:Driver: iscsiState: readyI_T nexus information:LUN information:LUN: 0Type: controllerSCSI ID: IET     00010000SCSI SN: beaf10Size: 0 MB, Block size: 1Online: YesRemovable media: NoPrevent removal: NoReadonly: NoSWP: NoThin-provisioning: NoBacking store type: nullBacking store path: NoneBacking store flags: Account information:ACL information:
#生成lun
[root@target ~]# tgtadm -o new -m logicalunit -t 1 -l 1 -b /dev/sda
#删除lun
[root@target ~]# tgtadm -o delete -m logicalunit -t 1 -l 1 
#新建
#先建target 在建lun
[root@target ~]#tgtadm -L iscsi -o new -m target -t 1 -T iqn.20250710.com.jx.www:sda 
[root@target ~]# tgtadm -o new -m logicalunit -t 1 -l 1 -b /dev/sda
#查看
[root@target ~]# tgt-admin -s
Target 1: iqn.20250710.com.jx.www:sdaSystem information:Driver: iscsiState: readyI_T nexus information:LUN information:LUN: 0Type: controllerSCSI ID: IET     00010000SCSI SN: beaf10Size: 0 MB, Block size: 1Online: YesRemovable media: NoPrevent removal: NoReadonly: NoSWP: NoThin-provisioning: NoBacking store type: nullBacking store path: NoneBacking store flags: LUN: 1Type: diskSCSI ID: IET     00010001SCSI SN: beaf11Size: 214748 MB, Block size: 512Online: YesRemovable media: NoPrevent removal: NoReadonly: NoSWP: NoThin-provisioning: NoBacking store type: rdwrBacking store path: /dev/sdaBacking store flags: Account information:ACL information:
##配置访问ACL
[root@target ~]# tgtadm -L iscsi -m target -o bind -t 1 -I ALL
##保存配置
[root@target ~]# tgt-admin --dump >> /etc/tgt/targets.conf

   

2.配置另一台

#新建target
[root@target ~]# tgtadm -L iscsi -o new -m target -t 2 -T iqn.20250710.com.jx.www:sdb
#新建lun
[root@target ~]# tgtadm -o new -m logicalunit -t 2 -l 1 -b /dev/sdb
##配置访问ACL
[root@target ~]# tgtadm -L iscsi -m target -o bind -t 2 -I ALL
##保存配置
[root@target ~]# tgt-admin --dump > /etc/tgt/targets.conf

3.Windows连接

打开iSCSI程序

计算机 右键管理 磁盘管理 重新格式化

4.linux客户端连接
#先安装
[root@web1 ~]# yum install -y scsi-initiator-utils
[root@web1 ~]# systemctl start iscsid
#识别
[root@web1 ~]#  iscsiadm -m discoverydb -t sendtargets -p 192.168.157.168:3260 -D
192.168.157.168:3260,1 iqn.20250710.com.jx.www:sda
192.168.157.168:3260,1 iqn.20250710.com.jx.www:sdb
[root@web1 ~]# lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0  200G  0 disk 
├─sda1               8:1    0    1M  0 part 
├─sda2               8:2    0    1G  0 part /boot
└─sda3               8:3    0  199G  0 part ├─openeuler-root 253:0    0   70G  0 lvm  /├─openeuler-swap 253:1    0    2G  0 lvm  [SWAP]└─openeuler-home 253:2    0  127G  0 lvm  /home
sdb                  8:16   0   20G  0 disk 
sr0                 11:0    1 1024M  0 rom  
#分区
[root@web1 ~]# fdisk /dev/sdb欢迎使用 fdisk (util-linux 2.39.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。设备不包含可识别的分区表。
Created a new DOS (MBR) disklabel with disk identifier 0x224616b8.命令(输入 m 获取帮助):n
分区类型p   主分区 (0个主分区,0个扩展分区,4空闲)e   扩展分区 (逻辑分区容器)
选择 (默认 p):将使用默认回应 p。
分区号 (1-4, 默认  1): 
第一个扇区 (2048-41943039, 默认 2048): 
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039): 创建了一个新分区 1,类型为“Linux”,大小为 20 GiB。命令(输入 m 获取帮助):w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
#格式化
[root@web1 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
创建含有 5242624 个块(每块 4k)和 1310720 个 inode 的文件系统
文件系统 UUID:cd9b36d3-1849-4e5f-b754-9df79dc68d71
超级块的备份存储于下列块:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000正在分配组表:完成                            
正在写入 inode表:完成                            
创建日志(32768 个块):完成
写入超级块和文件系统账户统计信息:已完成 
#挂载
[root@web1 ~]# mount /dev/sddb1 /mnt/
mount: /mnt: 特殊设备 /dev/sddb1 不存在.dmesg(1) may have more information after failed mount system call.
[root@web1 ~]# mount /dev/sdb1 /mnt/
[root@web1 ~]# lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0  200G  0 disk 
├─sda1               8:1    0    1M  0 part 
├─sda2               8:2    0    1G  0 part /boot
└─sda3               8:3    0  199G  0 part ├─openeuler-root 253:0    0   70G  0 lvm  /├─openeuler-swap 253:1    0    2G  0 lvm  [SWAP]└─openeuler-home 253:2    0  127G  0 lvm  /home
sdb                  8:16   0   20G  0 disk 
└─sdb1               8:17   0   20G  0 part /mnt
sr0                 11:0    1 1024M  0 rom   
5.服务端测试
分区
[root@target ~]# fdisk /dev/sda欢迎使用 fdisk (util-linux 2.39.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。该磁盘目前正在使用 - 不建议您重新分区。
推荐您卸载此磁盘上所有的文件系统,并关闭(swapoff)上面的交换分区。命令(输入 m 获取帮助):q
#这个被Windows挂载 不能再用了
#查看另一块 挂载在Linux上的  发现已经分区
[root@target ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.39.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
磁盘型号:VMware Virtual S
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x224616b8设备       启动  起点     末尾     扇区 大小 Id 类型
/dev/sdb1        2048 41943039 41940992  20G 83 Linux命令(输入 m 获取帮助):
#直接挂载
root@target ~]# mount /dev/sdb1 /mnt/
[root@target ~]# lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0  200G  0 disk 
├─sda1               8:1    0    1M  0 part 
├─sda2               8:2    0    1G  0 part /boot
└─sda3               8:3    0  199G  0 part ├─openeuler-root 253:0    0   70G  0 lvm  /├─openeuler-swap 253:1    0    2G  0 lvm  [SWAP]└─openeuler-home 253:2    0  127G  0 lvm  /home
sdb                  8:16   0   20G  0 disk 
└─sdb1               8:17   0   20G  0 part /mnt
sdc                  8:32   0   20G  0 disk 
sr0                 11:0    1 1024M  0 rom
#linux 不能与Windows 共用一块 
#两个linux可以同时挂载一个,但是不能实时同步 需卸载重挂

http://www.dtcms.com/a/284096.html

相关文章:

  • 深度学习之神经网络(二)
  • 神经网络常见激活函数 15-B-SiLU 函数
  • OCR 赋能档案数字化:让沉睡的档案 “活” 起来
  • 无线充电技术详解:原理、芯片选型与应用场景
  • Android开发中Retrofit使用方法与底层原理详解
  • 学习设计模式《十八》——备忘录模式
  • 第5天 | openGauss中一个用户可以访问多个数据库
  • 数据分析:从数据到决策的核心逻辑与实践指南
  • 微信小程序地理定位功能
  • SLG 游戏如何进行防破解和防盗版保护?
  • 从 SEO 到 GEO:解锁 AI 时代的搜索优化新机遇
  • 数据结构:集合操作(Set Operations): 并集(Union)、交集(Intersection)、 差集(Difference)
  • HTTP相关知识
  • os.path 常用的使用方法
  • 高光谱相机有多少种类型?分别有什么特点?
  • Odoo最佳业务实践:从库存管理重构到全链路协同
  • 【数据结构】链表(linked list)
  • slot=“trigger“ 覆盖了组件内部的 ref=“trigger“【详细来龙去脉版 5min】
  • 网络服务(设置邮箱发送告警功能,每1分钟发送一封邮件)
  • CMake综合学习1: Cmake的模块化设计
  • vue3实现web端和小程序端个人签名
  • 《迭代器 VS 生成器:Python 惰性计算的两种实现方案详解》
  • Zabbix 分布式监控系统架构设计与优化
  • 硅谷顶级风投发布《2025年AI实战手册》|附下载
  • 芯谷科技--双四通道模拟/数字多路复用器74HC4052
  • Tcpdump使用
  • linux_线程同步
  • 七彩喜跌倒检测仪:用科技编织银发安全的“隐形防护网”
  • 【Mobx】学习笔记
  • Python-多线程编程