13. 文件传输与NFS网络文件系统¶
本章节主要讲述如何将文件在PC主机以及板卡上进行文件的传输。
本章节内容依赖网络传输,需要我们配置板卡的网络环境,具体可查看下列章节配置板卡及电脑
本章着重介绍以下方法进行使用
MobaXterm
FileZilla
nfs
tftp
13.1. MobaXterm¶
该方法需要下载 《MobaXterm》 软件。
注意
使用cat用户SSH登录只能传输/home/cat目录下的文件,如果需要传输到其他目前,可以使用root账户登录,具体参考 《root用户SSH登录》 。

优点:可以轻松的在控制linux的同时,也能进行文件的传输
缺点:仅支持SFTP协议文件传输,无法正确传输链接文件,对于源码移植会有碍
13.2. FileZilla¶
FileZilla软件获取
PC上需要安装的是客户端,安装完后打开
注意
使用cat用户SSH登录只能传输/home/cat目录下的文件,如果需要传输到其他目前,可以使用root账户登录,具体参考 《root用户SSH登录》 。

优点:支持的传输协议比较多,较为精细的目录架构,可以让文件传输更方便
缺点:无法正确传输链接文件,对于源码移植会有碍
FileZilla支持的传输协议如下:

13.3. SCP¶
SCP 是 Secure Copy Protocol(安全复制协议)的缩写,它是一种基于 SSH(Secure Shell)的网络协议,用于在计算机之间安全地传输文件。SCP 提供了加密的传输过程,确保数据传输过程中不会被未授权的第三方截获或篡改。
13.3.1. PC(Ubuntu)和鲁班猫SCP传输¶
1 2 | # xxx为文件名,192.168.103.151为鲁班猫IP,/home/cat为鲁班猫接收目录
scp xxx cat@192.168.103.151:/home/cat
|
演示如下:

13.4. TFTP/FTP/SFTP¶
FTP是File Transfer Protocol的缩写,即文件传输协议,是Internet上使用比较广泛的文件传送协议,为应用层的文件传输协议。主要作用是在服务器和客户端之间实现文件的传输和共享。FTP协议运行在TCP连接上,保证了文件传输的可靠性。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。
TFTP是Trivial File Transfer Protocol的缩写,即简单文件传输协议,是TCP/IP协议族中一种简单的文件传输协议,用来在客户端与服务器之间进行文件传输。TFTP只支持文件传输,不支持交互,没有庞大的命令集,也没有目录列表功能,以及不能对用户进行身份鉴别。
TFTP和FTP一个主要的区别就是它没有交互式,且不进行身份验证。
SFTP是Secure File Transfer Protocol的缩写,即安全文件传输协议,是一种基于可靠数据流(data stream),提供文件存取和管理的网络传输协议。SFTP要求客户端用户必须由服务器进行身份验证,并且数据传输必须通过安全通道(SSH)进行,即不传输明文密码或文件数据。
13.4.1. Windows端查看支持的网络传输传输协议¶
按快捷键 Win+R ,在弹出的运行窗口中输入 powershell 或 cmd。下面以 powershell 为例进行演示。
FTP:

TFTP:
注意
Windows电脑可能没开启TFTP服务,可以参考以下链接进行开启: https://guanjia.qq.com/knowledge-base/content/1150

SFTP:

使用终端进行文件传输操作比较繁琐,这里就不作详细说明了,有需求的可自行百度。
13.5. NFS¶
NFS就是Network File System的缩写,即网络文件系统,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
13.5.1. 搭建局域网环境¶
在本应用场景中开发主机和板卡需要通过网络互相访问,另外由于NFS文件系统 暴露到公网需要处理很多安全问题,为简化操作,我们把开发主机和板卡连接到 局域网络。关于网络连接相关知识,可参考 《网络连接及静态配置》 和 《网络共享》 章节。
注意
下面的测试需要鲁班猫板卡的PC电脑运行在同一局域网下,可以通过互ping测试进行验证。
13.5.2. Windows与鲁班猫NFS传输¶
下面的演示,鲁班猫作为nfs服务器,windows作为nfs客户端
13.5.2.1. 鲁班猫服务端操作¶
13.5.2.1.1. 安装和配置NFS服务端¶
主机的Ubuntu系统默认没有安装NFS服务,需要使用如下命令安装和配置NFS服务端:
1 2 3 4 5 6 | #安装NFS服务
sudo apt install nfs-kernel-server
#配置/etc/exports,添加共享的目录
sudo vim /etc/exports
#在文件最后一行添加需要共享的目录
/home/cat *(rw,sync,no_root_squash,no_subtree_check)
|
配置如下:

/home/cat
是你要共享的目录,注意使用空格与后面的配置隔开*
是通配所有的nfs客户端ip,如果是192.168.1.*网段,可以配置成192.168.1.0/24rw
是可读可写,具体的权限还受文件系统的rwx及用户身份影响。sync
是同时将数据写入到内存与硬盘中,保证不丢失数据no_root_squash
是当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员no_subtree_check
不检查子目录权限,默认配置。
13.5.2.1.2. 重启NFS服务¶
配置完后重启NFS服务:
1 2 3 4 5 6 | #重新加载/etc/exports
sudo /etc/init.d/nfs-kernel-server reload
#重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart
#查看挂载点
showmount -e
|

13.5.2.1.3. 查看用户uid¶
1 2 3 4 | #查看root用户id
id root
#查看cat用户id
id cat
|

可以看出root用户的uid和gid都为0,cat用户的uid和gid都为1000。
13.5.2.2. Windows客户方操作¶
13.5.2.2.1. 启用nfs服务¶

13.5.2.2.2. 伪造UID¶
因为NFS服务没有用户验证的功能,所以会将客户端映射成匿名用户,造成的现象是你连上nfs服务后对于共享目录属于其他人,一般只有只读权限,所以就要伪造UID,让nfs认为你是该目录的所有者,这样就有读写权限。
上述鲁班猫操作中已经获得了root用户和cat用户的id了,下面演示在Windows修改注册表为cat用户的id。
按 Win+R
键,在弹出的运行窗口中输入 regedit
。在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default
下新建两个QWORD(64)位值,添加值 AnonymousGid
,值为1000, AnonymousUid
,值为1000。然后 重启
。

13.5.3. Linux与鲁班猫NFS传输¶
下面的演示,鲁班猫作为nfs服务器,虚拟机的Ubuntu22.04系统作为nfs客户端,测试的虚拟机软件为VMware。
13.5.3.1. 鲁班猫服务端操作¶
鲁班猫端操作与上述的《Windows与鲁班猫NFS传输》内容中的 鲁班猫服务端操作 一致,此处不进行重复介绍。
13.5.3.2. Linux客户端操作¶
13.5.3.2.1. 配置虚拟机网络模式¶
如果开发主机是安装在虚拟机上,注意要在VMware把网络配置 改成“桥接模式”,见下图,若修改了该配置,需要重启虚拟机才生效。

根据开发主机的ip和子网掩码,我们可以判断开发主板处于192.168.103.*的网段中, 我们只要保证开发主机网络也在同一个局域网网段中,就能让它们通信。
13.5.3.3. 安装NFS客户端¶
开发主机开启NFS服务后,我们还需要在板卡安装NFS客户端,来让板卡使用NFS服务。
执行安装NFS客户端命令:
1 | sudo apt install -y nfs-common
|
查看NFS服务器(鲁班猫)的共享目录
在板卡上执行“showmount -e +“NFS服务器IP””命令。这里的NFS服务器IP为鲁班猫IP,虚拟机的IP为192.168.103.147,处于同一局域网。
1 | showmount -e 192.168.103.129
|
如下图:

13.5.3.3.1. 临时挂载NFS文件系统¶
使用mount命令挂载NFS服务器的共享目录到/mnt目录下:
注意
需要把下面的192.168.103.129设置为用户实际网络环境下的NFS服务器IP(鲁班猫IP)
1 | sudo mount -t nfs 192.168.103.129:/home/cat /mnt
|

以上命令使用的各个参数如下:
-t nfs
:指定挂载的文件系统格式为nfs。192.168.103.129
:指定NFS服务器的IP地址。/home/cat
:指定NFS服务器的共享目录。/mnt
:本地挂载目录,即要把NFS服务器的共享目录映射到当前虚拟机的/mnt目录下。最好新建一个文件夹用于挂载。
使用这种方式挂载目录只是临时的,板卡在重启后需要重新挂载该NFS目录才能访问。
13.5.3.3.2. 取消挂载¶
我们完成文件的传输之后,或者NFS服务端掉线了,此时不需要挂载NFS服务端目录,可以对目录使用umount命令取消挂载,示例如下:
1 | sudo umount /mnt
|

注意
使用该命令时以要取消挂载的目录作为参数即可,没有输出表示执行正常。如果在当前挂载的目录进行umount操作,会提示“device is busy”。建议取消挂载时,先切换到家目录“~”,在进行umount操作。