网络文件共享服务 FTP

news2025/1/6 19:47:38

一、存储类型

存储类型分为三种

  • 直连式存储:Direct-Attached Storage,简称DAS

  • 存储区域网络:Storage Area Network,简称SAN(可以使用空间,管理也是你来管理)

  • 网络附加存储:Network-Attached Storage,简称NAS(存储和管理空间都在远程)

DAS DAS存储是最常见的一种存储方式,尤其是在中小企业应用中。PC中的硬盘或只有一个外部SCSI接口的JBOD都属于DAS架构。DAS是指存储设备直接连接到服务器总线上,存储设备只与一台独立的主机连接,其他主机不能使用这个存储设备。DAS存储设备与服务器主机之间的连接通道通常采用SCSI连接,DAS存储设备主要是磁盘阵列(RAID: Redundant Arrays of Independent Disks)、磁盘簇JBOD:Just a Bunch Of Disks)等。

NAS  NAS存储就是存储设备通过标准的网络拓扑结构(比如以太网)添加到一群计算机上。与DAS以及SAN不同,NAS是文件级的存储方法。采用NAS较多的功能是用来进行文件共享。NAS存储也通常被称为附加存储,顾名思义,就是存储设备通过标准的网络拓扑结构(例如以太网)添加到一群计算机上。NAS是文件级的存储方法,它的重点在于帮助工作组和部门级机构解决迅速增加存储容量的需求。如今更多的亲们采用NAS较多的功能是用来文档共享、图片共享、电影共享等等,而且随着云计算的发展,一些NAS厂商也推出了云存储功能,大大方便了企业和亲们等个人用户的使用。NAS产品是真正即插即用的产品。NAS设备一般支持多计算机平台,用户通过网络支持协议可进入相同的文档,因而NAS设备无需改造即可用于混合Unix/Windows NT局域网内,同时NAS的应用非常灵活。但NAS有一个关键性问题,即备份过程中的带宽消耗。与将备份数据流从LAN中转移出去的存储区域网(SAN)不同,NAS仍使用网络进行备份和恢复。NAS 的一个缺点是它将存储事务由并行SCSI连接转移了网络上。这就是说LAN除了必须处理正常的最终用户传输流外,还必须处理包括备份操作的存储磁盘请求

SAN  存储区域网络,这个是通过光纤通道或以太网交换机连接存储阵列和服务器主机,最后成为一个专用的存储网络。SAN经过十多年历史的发展,已经相当成熟,成为业界的事实标准(但各个厂商的光纤交换技术不完全相同,其服务器和SAN存储有兼容性的要求)

DASNASSAN
传输类型SCSI、FCIPIP、FC、SAS
数据类型数据块文件数据块
典型应用任何文件服务器数据库应用
优点

磁盘与服务器分离,

便于统一管理

不占用应用服务器资源

广泛支持操作系统

扩展较容易

即插即用,安装简单方便

高扩展性

高可用性

数据集中,易管理

缺点

连接距离短

数据分散,共享困难

存储空间利用率不高

扩展性有限

不适合存储量大的块级应用

数据备份及恢复占用网络带宽

相比NAS成本较高

安装和升级比NAS复杂

三种存储架构的应用场景

  • DAS虽然比较古老了,但是还是很适用于那些数据量不大,对磁盘访问速度要求较高的中小企业

  • NAS多适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低

  • SAN则适用于大型应用或数据库系统,缺点是成本高、较为复杂

SAN和NAS的文件系统区别:

区别:
  客户端应用程序是否具有对存储空间的管理权限

SAN:
  只给用户划分空间,用户自己来管理这个区域。例如指定文件系统的类型等。

NAS:
  文件系统在NSA存储上面,只给用户分配空间,用户不具备对空间的管理权限。用户的通过引用程序直接通过网络就可以访问到上面的文件

二、 FTP 文件传输协议

2.1 FTP工作原理介绍

文件传输协议:File Transfer Protocol 早期的三个应用级协议之一,基于C/S结构

数据传输格式:二进制(默认)和文本

双通道协议:命令和数据连接 21 命令端口(权限,认证) 20数据端口(真实传数据)

两种模式:从服务器角度

  • 主动(PORT style):服务器开启20端口主动连接客户端,传递数据

    命令(控制):客户端:随机port ---> 服务器:21/tcp

    数据:客户端:随机port <---服务器:20/tcp

  • 被动(PASV style):服务端会开启一个 随机端口,被动等待客户端来连接

    命令(控制):客户端:随机port ---> 服务器:21/tcp

    数据:客户端:随机port ---> 服务器:随机port /tcp

服务端 主动 开启 tcp/20 端口 去传输数据给客户端

FTP服务状态码:

1XX:信息 125:数据连接打开
2XX:成功类状态 200:命令OK     230:登录成功
3XX:补充类     331:用户名OK
4XX:客户端错误 425:不能打开数据连接
5XX:服务器错误 530:不能登录

范例:服务器被动模式数据端口

服务器数据端口为:224*256+59

227 Entering Passive Mode (172,16,0,1,224,59)

用户认证:

  • 匿名用户:ftp,anonymous,对应Linux用户ftp root   登录时不需要密码

  • 系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow

  • 虚拟用户:特定服务的专用用户,独立的用户/密码文件

2.2 常见 FTP 相关软件

FTP服务器端软件

Wu-ftpd,Proftpd,Pureftpd,Filezilla Server,Serv-U,Wing FTP Server,IIS

vsftpd:Very Secure FTP Daemon,CentOS 默认FTP服务器

高速,稳定,下载速度是WU-FTP的两倍

ftp.redhat.com数据:单机最多可支持15000个并发

vsftpd官网: https://security.appspot.com/vsftpd.html

2.3 vsftpd 软件介绍

由 vsftpd 包提供,不再由xinetd管理

用户认证配置文件:/etc/pam.d/vsftpd

配置文件:

/etc/vsftpd/vsftpd.conf


使用匿名用户(ftp) 登录上去后 看到的 / 根不是真正的根

/var/ftp/    =     /

vsftpd  匿名用户登录后  这个软件默认的根目录
系统用户登录   根就是系统的根

用户和其共享目录

  • 匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp

  • 系统用户共享文件位置:用户家目录

  • 虚拟用户共享文件位置:为其映射的系统用户的家目录

2.3.1基础操作

安装服务端

yum install vsftpd -y
#安装 ftp  服务器
systemctl start vsftpd
#开启服务

yum install ftp -y
#安装ftp命令

客户端连接服务端

[root@localhost ~]#ftp  192.168.80.10
#  ftp 客户端 工具    服务端地址
Connected to 192.168.80.10 (192.168.80.10).
220 (vsFTPd 3.0.2)

Name (192.168.80.10:root): anonymous   #此处填写用户名  默认使用  ftp  或者匿名用户
                                        #默认没有密码

登录成功

ftp> help   
#可以使用help  查看帮助


ftp> ls   
#可以使用 ls  查看文件列表   查看的是服务器上的列表    100   显示是的 100  服务器的 文件目录


ftp> ls
227 Entering Passive Mode (192,168,91,101,24,148)
#  Passive  消极被动 默认使用  被动模式


ftp> passive  
#可以人为指定被动主动


ftp> get bigfile
#下载大文件,  后可以  使用  ss  -nt   看到又打开一个通道
[root@localhost ~]#ss -nt
State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port                          
ESTAB       4384648 0        192.168.91.100:37722                192.168.91.101:43911              
ESTAB       0      0         192.168.91.100:48250                192.168.91.101:21   

[root@localhost ~]#ss -nt
State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port                         
ESTAB       0      0        192.168.91.100:40574                  192.168.91.101:20                 
ESTAB       0      0        192.168.91.100:48250                  192.168.91.101:21 

2.4 vsftpd服务常见配置

2.4.1 修改默认命令端口

服务端:修改 默认命令端口号

[root@node2 pub]#vim /etc/vsftpd/vsftpd.conf
#随便一行插入
listen_port=2121
[root@node2 pub]#systemctl restart vsftpd
#重启服务
[root@node2 pub]#ss  -ntl
#查看端口

客户端:连接时需要指明 端口号

[root@centos7 ~]#ftp 192.168.91.101 2121
#不需要加  p  选项
2.4.2 主动模式端口
vim /etc/vsftpd/vsftpd.conf


connect_from_port_20=YES 主动模式端口为20
ftp_data_port=20 (默认) 指定主动模式的端口
2.4.3 被动模式端口
pasv_min_port=6000   0为随机分配,端口范围会影响客户端的并发数
pasv_max_port=6010
2.4.4 使用当地时间
vim /etc/vsftpd/vsftpd.conf


use_localtime=YES 使用当地时间(默认为NO,使用GMT)
格林威治        +8   格林威治时间比我们少8小时
2.4.5 匿名用户登录
vim /etc/vsftpd/vsftpd.conf


anonymous_enable=YES 支持匿名用户,CentOS8 默认不允许匿名
no_anon_password=YES 匿名用户略过口令检查 , 默认NO
2.4.6 匿名用户上传
vim /etc/vsftpd/vsftpd.conf


anon_upload_enable=YES 匿名上传,注意:文件系统权限
anon_mkdir_write_enable=YES 匿名建目录

例子:

########客户端#########
ftp> !ls  #使用! 代表 在本地使用命令
abc.txt  anaconda-ks.cfg  initial-setup-ks.cfg	公共  模板  视频  图片	文档  下载  音乐  桌面


ftp> cd  pub
ftp>put abc.txt   #上传 文件,   ftp 默认不允许上传文件, 安全考虑, 人人都传空间,病毒等问题
local: abc.txt remote: abc.txt
227 Entering Passive Mode (192,168,80,7,139,243).
550 Permission denied.


#########服务端########
[root@node2 pub]#vim /etc/vsftpd/vsftpd.conf
#此处是被注释开启就可以了
anon_upload_enable=YES
anon_mkdir_write_enable=YES


这时候回到客户端

ftp> put abc.txt
local: abc.txt remote: abc.txt
227 Entering Passive Mode (192,168,80,7,139,243).
553 Could not create file.

无法上传是因为 没有权限写,在传文件时需要考虑 文件系统权限, 你是远程用户把文件放在磁盘上,需要考虑文件系统的权限

[root@node2 pub]#setfacl -m u:ftp:rwx /var/ftp/pub/
#添加ftp  用户的权限




######客户端#####
ftp> cd pub   ####注意文件夹位置
250 Directory successfully changed.
ftp> put abc.txt 
local: abc.txt remote: abc.txt
227 Entering Passive Mode (192,168,80,7,139,243).
150 Ok to send data.
226 Transfer complete.

###   是可以对ftp的根目录设置权限的  一般是不对根做操作的
###   但是再次登录会有问题

注意:还需要开启文件系统访问的权限,不能给FTP根目录(/var/ftp)写权限否则报如下错误

##########服务端###########
[root@node2 pub]#setfacl -m u:ftp:rwx /var/ftp
#会出错

[root@node2 pub]#setfacl -b /var/ftp
#输入此命令即可解决

#########客户端#########
[root@localhost etc]#ftp 192.168.80.7
Connected to 192.168.80.7 (192.168.80.7).
220 (vsFTPd 3.0.2)
Name (192.168.80.7:root): ftp
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
ftp> 
ftp> cd pub
Not connected.
ftp> ls
Not connected.




anon_world_readable_only=no 只能下载全部读的文件, 默认YES
anon_umask=0333 指定匿名上传文件的umask,默认077,注意:0333中的0不能省略
anon_other_write_enable=YES 可删除和修改上传的文件,默认NO
2.4.7 匿名用户 下载 删除文件

在 vsftpd 软件中 只可以 下载有 读权限的文件, 没有读权限的文件时不可以直接下载的需要修改下面的选项

anon_world_readable_only=NO  只能下载全部读的文件, 默认YES
anon_umask=0333              指定匿名上传文件的umask,默认0077,注意:0333中的0不能省略
anon_other_write_enable=YES  可删除和修改上传的文件,默认NO

例子:

可以下载上传上去的文件 get 

[root@node2 pub]#vim /etc/vsftpd/vsftpd.conf
anon_world_readable_only=NO
anon_umask=0333



客户端:
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,80,7,148,158).
150 Here comes the directory listing.
-rw-------    1 14       50              0 Jan 15 15:54 1258
-rw-r--r--    1 0        0               0 Jan 15 16:20 789
-rw-------    1 14       50           1634 Jan 15 15:57 rpc
226 Directory send OK.
ftp> get 789
local: 789 remote: 789
227 Entering Passive Mode (192,168,80,7,249,85).
150 Opening BINARY mode data connection for 789 (0 bytes).
226 Transfer complete.
ftp> exit
221 Goodbye.
[root@localhost etc]#ls
789

#被下载的文件一定要有读的权限。

可以删除文件

[root@node2 pub]#vim /etc/vsftpd/vsftpd.conf
anon_other_write_enable=YES




ftp> cd pub. 
ftp> ls
ftp> delete abc.txt 
ftp> ls
227 Entering Passive Mode (192,168,91,101,112,18).
150 Here comes the directory listing.
-rw-r--r--    1 0        0        1073741824 Aug 04 08:02 bigfile
-rw-------    1 14       50            471 Aug 04 09:20 dm.sh
226 Directory send OK.
2.4.8 指定匿名用户的上传文件的默认的所有者和权限

匿名用户上传文件默认的所有者是ftp 用户 是可以修改的

chown_uploads=YES        #默认NO
chown_username=zhangsan
chown_upload_mode=0644
2.4.9 Linux系统用户
local_enable=YES 是否允许linux用户登录
write_enable=YES 允许linux用户上传文件
local_umask=022 指定系统用户上传文件的默认权限对应umask

例子: 系统用户登录:使用普通用户登录默认是在 系统用户的 家目录

[root@localhost ~]#ftp 192.168.91.101
Connected to 192.168.91.101 (192.168.91.101).
220 (vsFTPd 3.0.2)
Name (192.168.91.101:root): zhangsan
331 Please specify the password.
Password:
ftp> pwd
257 "/home/zhangsan"


###默认是可以上传下载
要注意目录


#####也可以 去别的目录下载####
权限控制不是很安全

可以把其 禁锢 在 自己的 家目录 中
2.4.10将所有系统用户映射为指定的guest用户
guest_enable=YES 						所有系统用户都映射成guest用户
guest_username=ftp   					配合上面选项才生效,指定guest用户
local_root=/ftproot 					指定guest用户登录所在目录,但不影响匿名用户的登录目录
user_config_dir=/etc/vsftpd/conf.d/ 	每个用户独立的配置文件目录



guest_enable=YES 
guest_username=ftp  
local_root=/ftproot 
user_config_dir=/etc/vsftpd/conf.d/

例子:控制 系统用户等信息

[root@node2 pub]#vim /etc/vsftpd/vsftpd.conf
#最后加入   复制注意空格
guest_enable=YES 
guest_username=ftp   
#local_root=/ftproot    可以注释此行,默认所有用户都在  ftp用户的家目录


ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (192,168,91,101,169,174).
150 Here comes the directory listing.
drwxrwxr-x    2 0        0              34 Aug 05 01:02 pub
226 Directory send OK.

例子: 让每个用户拥有独有配置

[root@node2 pub]#vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/conf.d/ 
#可以自由指定

针对 zhangsan  lisi  用户

[root@node2 data]#mkdir -p /etc/vsftpd/conf.d
#先建立好配置文件夹

#编写子配置文件
[root@node2 data]#vim    /etc/vsftpd/conf.d/lisi
local_root=/data/lisi
[root@node2 data]#vim   /etc/vsftpd/conf.d/zhangsan
local_root=/data/zhangsan


[root@node2 data]#mkdir -p /data/{zhangsan,lisi}
[root@node2 data]#touch  /data/zhangsan/zs.txt
[root@node2 data]#touch  /data/lisi/lisi.txt
#建立两个文件测试使用



#再次登录就不能乱跑了

2.4.11 禁锢系统用户

禁锢所有系统用户在家目录中

vim /etc/vsftpd/vsftpd.conf

chroot_local_user=YES   #禁锢系统用户,默认NO,即不禁锢

禁锢用户开启白名单和黑名单

chroot_list_enable=YES     #默认是NO
chroot_list_file=/etc/vsftpd/chroot_list   #默认值
  
当chroot_local_user=YES和chroot_list_enable=YES时,则chroot_list中用户不禁锢,即白名单,在文件里的不禁锢
当chroot_local_user=NO和chroot_list_enable=YES时, 则chroot_list中用户禁锢,即黑名单,在文件里的 禁锢

例子:

[root@localhost ~]#ftp 192.168.91.101
#禁锢后 会 将lisi用户 的家目录作为根, 默认ftp服务的 家目录 是不能有 写 权限,注意执行权限
Connected to 192.168.91.101 (192.168.91.101).
220 (vsFTPd 3.0.2)
Name (192.168.91.101:root): lisi
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection



##此处 所有的 用户 家目录权限需要修改


#修改用户加目录权限,防止报错500 OOPS: vsftpd: refusing to run with writable root inside chroot()
chmod 555 /home/lisi


因为家目录不能有 写 权限 ,所以我们在家目录下建立一个有写入权限的文件夹用来建立文件即可

setfacl -m u:lisi:rwx /home/lisi/pub/
2.4.12 日志

ftp 默认启动日志

#wu-ftp 日志:默认启用
xferlog_enable=YES #启用记录上传下载日志,此为默认值
xferlog_std_format=YES #使用wu-ftp日志格式,此为默认值
xferlog_file=/var/log/xferlog #可自动生成, 此为默认值



#vsftpd日志:默认不启用
dual_log_enable=YES 使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log 可自动生成, 此为默认值

例子:

###默认格式
[root@node2 zhangsan]#tail -f /var/log/xferlog 
Sat Aug  5 08:48:43 2023 1 ::ffff:192.168.91.100 471 /pub/dm.sh b _ o a <no_password> ftp 0 * c
Sat Aug  5 08:56:46 2023 1 ::ffff:192.168.91.100 0 /pub/abc.txt b _ i a <no_password> ftp 0 * i




###第二种格式
[root@node2 zhangsan]#cat  /var/log/vsftpd.log
Sat Aug  5 15:49:36 2023 [pid 2056] CONNECT: Client "::ffff:192.168.91.100"
Sat Aug  5 15:49:39 2023 [pid 2055] [ftp] OK LOGIN: Client "::ffff:192.168.91.100", anon password "<no_password>"
2.4.13 提示信息
ftpd_banner="welcome to kgc ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt
2.4.14 pam模块实现用户访问
pam_service_name=vsftpd
#pam配置文件:/etc/pam.d/vsftpd

/etc/vsftpd/ftpusers 默认文件中用户拒绝登录,默认是黑名单,但也可以是白名单

例子:

由于ftp是明文传输, 抓取是可可以获取密码的 默认是不让使用root 用户登录的

[root@centos7 ~]#ldd /usr/sbin/vsftpd |grep pam
       libpam.so.0 => /lib64/libpam.so.0 (0x00007fb286c34000)
#修改PAM配置,使ftpusers成为白名单
[root@centos8 ~]#vim /etc/pam.d/vsftpd
#%PAM-1.0
session   optional     pam_keyinit.so   force revoke
#将sense=deny默认是deny 修改为 sense=allow
auth       required     pam_listfile.so item=user sense=allow  file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include     password-auth
account   include     password-auth
session   required     pam_loginuid.so
session   include     password-auth



[root@node2 ~]#vim /etc/vsftpd/ftpusers
#加入此文件默认是 拒绝
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
lisi


[root@node2 vsftpd]#vim /etc/vsftpd/user_list
# 
把root  去掉
2.4.15 传输速率,单位:字节/秒
anon_max_rate=0 匿名用户的最大传输速率,以字节为单位,比如:1024000表示1MB/s
local_max_rate=0 本地用户的最大传输速率
#限速
[root@centos8 ~]#vim /etc/vsftpd/vsftpd.conf
anon_max_rate=1024000
local_max_rate=102400


[root@centos7 ~]#systemctl restart vsftpd
#生成测试文件
[root@centos7 ~]#dd if=/dev/zero of=/var/ftp/pub/bigfile bs=1M count=100
[root@centos7 ~]#dd if=/dev/zero of=/home/wang/bigfile bs=1M count=100
#测试匿名下载速度
[root@centos7 ~]#wget ftp://192.168.91.101/pub/bigfile
--2020-10-30 18:09:02-- ftp://10.0.0.8/pub/bigfile
           => ‘bigfile.3’
Connecting to 10.0.0.8:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /pub ... done.
==> SIZE bigfile ... 104857600
==> PASV ... done.    ==> RETR bigfile ... done.
Length: 104857600 (100M) (unauthoritative)

#测试本地用户下载速度
[root@centos7 ~]#wget ftp://wang:magedu@10.0.0.8/bigfile
--2020-10-30 18:08:04-- ftp://wang:*password*@10.0.0.8/bigfile
           => ‘bigfile’
Connecting to 10.0.0.8:21... connected.
Logging in as wang ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD not needed.
==> SIZE bigfile ... 104857600
==> PASV ... done.    ==> RETR bigfile ... done.
Length: 104857600 (100M) (unauthoritative)
100%
[===============================================================================
======================>] 104,857,600 9.78MB/s   in 10s    
2020-10-30 18:08:14 (9.77 MB/s) - ‘bigfile’ saved [104857600]

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

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

相关文章

kafka系列(二)

本章承接kafka一内容&#xff0c;文章在本人博客主页都有&#xff0c;可以自行点击浏览。 幂等性 请求执行多次&#xff0c;但执行的结果是一致的。 如果&#xff0c;某个系统是不具备幂等性的&#xff0c;如果用户重复提交了某个表格&#xff0c;就可能会造成不良影响。例如…

SecureCRT7中文版安装资源,一键安装

SecureCRT 7 是一款功能强大的终端仿真软件&#xff0c;主要用于安全地远程访问和管理各种网络设备和服务器。 它支持多种协议&#xff0c;如 SSH、Telnet、Rlogin 等&#xff0c;可以连接到不同类型的设备&#xff0c;包括 Unix/Linux 服务器、网络设备、虚拟机等。通过使用 …

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(5)登录认证

指路&#xff08;1&#xff09;&#xff08;2&#xff09;&#xff08;3&#xff09;&#xff08;4&#xff09;&#x1f447; 黑马程序员JavaWeb开发|案例&#xff1a;tlias智能学习辅助系统&#xff08;1&#xff09;准备工作、部门管理_tlias智能学习辅助系统的需求分析-CS…

C++的构造析构函数

前言 本篇文章介绍C的构造函数和虚构函数 写在前面 因为介绍构造函数基本都会设计虚函数和虚基类的使用&#xff0c;可以参考之前的文章&#xff1a; C中的虚函数 C的虚基类 构造函数 每个类都分别定义了它的对象被初始化的方式&#xff0c;类通过一个或几个特殊的成员函数…

蓝牙运动耳机哪款好用?运动用哪种耳机好?2024运动蓝牙耳机推荐

​户外活动、健身运动还是激烈跑步&#xff0c;一款出色的运动耳机能够提升整体运动体验。这些耳机不仅具备出色的防汗和稳定佩戴性能&#xff0c;更通过强劲音质为你注入动力。让我们一同探索几款在各种运动场景中脱颖而出的运动耳机吧。 1.南卡开放式耳机&#xff08;00压&a…

二阶贝塞尔曲线生成弧线

概述 本文分享一个二阶贝塞尔曲线曲线生成弧线的算法。 效果 实现 1. 封装方法 class ArcLine {constructor(from, to, num 100) {this.from from;this.to to;this.num num;return this.getPointList();}getPointList() {const { from, to } thisconst ctrlPoint thi…

车灯芯片 H5028L 12V 24V 48V 60V 72V 80V 100V转9V 12V 高低亮 远近光恒流芯片

车灯芯片是车辆照明系统中的重要组成部分&#xff0c;通常采用LED&#xff08;发光二极管&#xff09;技术。以下是车灯芯片的工作原理&#xff1a; LED原理&#xff1a; 车灯芯片主要采用LED作为光源。LED是一种半导体器件&#xff0c;当电流通过LED芯片时&#xff0c;电子和…

(C语言)用函数指针数组实现计算器

一、运算结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现目录函数&#xff1b; void menum() {//打印目录&#xff1b;printf("***********************************************\n");printf("***…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十二)

购物车相关 1.添加购物车1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.2 代码开发1.2.1 DTO设计1.2.2 Controller层1.2.3 Service层接口1.2.4 Service层实现类1.2.5 Mapper层 2. 查看购物车2.1 需求分析和设计2.1.1 产品原型2.1.2 接口设计 2.2 代码开发2.2.…

安科瑞电动汽车充电桩运维平台 ——安科瑞 顾烊宇

充电桩其功能类似于加油站里面的加油机&#xff0c;可以固定在地面或墙壁&#xff0c;安装于公共建筑&#xff08;公共楼宇、商场、公共停车场等&#xff09;和居民小区停车场或充电站内&#xff0c;可以根据不同的电压等级为各种型号的电动汽车充电。充电桩的输入端与交流电网…

HCIA 网络基础:

应用层 抽象语言-->编码 表示层 编码-->二进制 会话层 建立会话&#xff0c;提供绘画地址。 应用于程序内部进行区分&#xff0c;没有统一标准 上三层主要是软件层面&#xff08;应用 程序处理数据&#xff09; 下四层主要负责数据传输 传输层 端口号 分段 &#xff…

PHP+MySQL组合开发:微信小程序万能建站源码系统 附带完整的搭建教程

随着移动互联网的快速发展&#xff0c;微信小程序已成为企业进行移动营销的重要工具。然而&#xff0c;对于许多中小企业和个人开发者来说&#xff0c;开发一个功能完善、用户体验良好的小程序是一项复杂的任务。罗峰给大家分享一款微信小程序万能建站源码系统。该系统采用PHPM…

C++设计模式-- 2.代理模式 和 外观模式

文章目录 代理模式外观模式角色和职责代码演示一&#xff1a;代码演示二&#xff1a;外观模式适用场景 代理模式 代理模式的定义&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合 或不能直接引用另一个对象&#xff0c;而代…

Controller层自定义注解拦截request请求校验

一、背景 笔者工作中遇到一个需求&#xff0c;需要开发一个注解&#xff0c;放在controller层的类或者方法上&#xff0c;用以校验请求参数中(不管是url还是body体内&#xff0c;都要检查&#xff0c;有token参数&#xff0c;且符合校验规则就放行)是否传了一个token的参数&am…

旧衣回收小程序搭建:降低企业成本,提高回收效率!

在人们环保意识提升下&#xff0c;旧衣回收行业受到了大众的关注&#xff0c;同时旧衣回收具有门槛低、利润大的优势。在我国&#xff0c;回收行业不仅帮助普通人就业获利&#xff0c;还对环保做出了较大贡献。因此&#xff0c;旧衣回收行业成为了当下的热门商业模式&#xff0…

C#,入门教程(19)——循环语句(for,while,foreach)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(18)——分支语句&#xff08;switch-case&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124039953 一、for循环 当老师进入教室&#xff0c;从门口开始分别按行、列点名&#xff0c;看看哪位翘课&…

详细介绍如何使用T5实现文本摘要:微调和构建 Gradio 应用程序-含完整源码

对高效文本摘要的需求从未如此迫切。无论您是正在处理冗长研究论文的学生还是浏览新闻文章的专业人士,快速提取关键见解的能力都是非常宝贵的。T5 是一种因多项 NLP 任务而闻名的预训练语言模型,擅长文本摘要。使用 T5 的文本摘要与 Hugging Face API 是无缝的。然而,对 T5 …

二、基础篇 vue计算属性和侦听器

计算属性 模板内的表达式非常便利&#xff0c;但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如&#xff1a; <div id"example">{{ message.split().reverse().join() }} </div> 在这个地方&#xff0c;模板不…

【松叶漫话】来聊聊ChatGPT 和文心一言吧

两大AI助手的较量 在当今信息技术飞速发展的时代&#xff0c;人工智能助手成为我们生活中不可或缺的一部分。ChatGPT和文心一言作为两大代表性的AI助手&#xff0c;在智能回复、语言准确性、知识库丰富度等方面各有千秋。本文将就这两位AI助手的特点进行深入比较&#xff0c;为…

深入解析多目标优化技术:理论、实践与优化

本文深入探讨了多目标优化技术及其在机器学习和深度学习中的应用&#xff0c;特别聚焦于遗传算法的原理和实践应用。我们从多目标优化的基础概念、常见算法、以及面临的挑战入手&#xff0c;进而详细介绍遗传算法的工作原理、Python代码实现&#xff0c;以及如何应用于实际的机…