# **文件互通** 做编程开发,经常需要将文件在不同的机器之间来回倒腾,比如安装了vmware之后,经常需要在宿主机(Widndows)和Ubuntu之间转移文件。 ![](images/WEBRESOURCEc0365553cbf46976d46016c7ee3ca7d4image.png) ## **1. 共享文件夹** 使用共享文件来互通win和ubuntu的文件是最简单的,方法如下: - 点击虚拟机设置按钮,找到想要共享给虚拟机的文件夹。下图以Downloads文件夹为例,将其设置为Windows与Ubuntu的共享文件夹: ![](images/WEBRESOURCE87605d40f8f547059d14da7cde016f1astickPicture.png) - 打开命令终端,输入 cd /mnt/hgfs 进入共享文件夹,通过命令ls,便可看到Downloads ```bash gec@ubuntu:~$ cd /mnt/hgfs/ gec@ubuntu:/mnt/hgfs$ ls Downloads gec@ubuntu:/mnt/hgfs$ ``` - 通过在终端输入不同的命令,就可以在Ubuntu内部操作宿主机的共享文件了。 若重启虚拟机共享文件夹消失可[参考博客](https://blog.csdn.net/gcc110/article/details/134050511?spm=1001.2014.3001.5501) ``` 在Ubuntu创建一个脚本文件:gnome-text-editor mount_hgfs 将 sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other 写入mount_hgfs文件中 ctrl+s保存后关闭软件在终端给文件添加权限:chmod +x mount_hgfs 将文件移动到/bin:mv mount_hgfs /bin 重启系统后在终端输入命令:mount_hgfs 即可将消失的共享文件重新加载 ``` ## **2. samba文件共享** samba是Linux下的一款网络磁盘服务,在ubuntu安装samba,并做好恰当的配置,即可在其他系统中方便地访问ubuntu系统的文件。 ![](images/WEBRESOURCEe2fd4c540d704f1c9530a4d4ecb9e21estickPicture.png) **安装 samba** ```cpp gec@ubuntu:~$ sudo apt install samba ``` **配置 samba** ``` gec@ubuntu:~$ sudo vi /etc/samba/smb.conf # 在上述samba的配置文件的末尾追加如下信息: # [share] 是 Windows 主机看到的samba文件夹的名称,可以任意修改 # path 是 Ubuntu 主机通过 samba 共享出去的路径 [share] path=/home/gec/shareDir browseable=yes writable=yes public=yes available=yes ``` 上述配置文件追加的信息中[share]是对共享文件的重命名,可以随意修改,path就是通过 samba 服务共享出去的目录路径。 **重启 samba** 配置好smb.conf之后,重新加载配置文件并重启samba服务: ``` gec@ubuntu:~$ sudo service smbd reload gec@ubuntu:~$ sudo service smbd restart ``` **连接 samba** 以上述配置为例,在网络配置通畅的情况下,在windows系统中可以在运行窗口直接输入ubuntu系统的网络IP来直接访问ubuntu系统中的 /home/gec/shareDir 目录: 访问ubuntu中的samba共享目录(假设ubuntu的IP地址是160) ![](images/WEBRESOURCE6a19fe5c92be4a82b3da492a6e02d38astickPicture.png) **注意** ``` gec@ubuntu:~$ sudo chmod 777 /home/gec/shareDir ``` 另外注意到,Windows 的共享文件夹本质上也是 samba 服务,因此在 Ubuntu 中也可以通过 samba 访问。 ![](images/WEBRESOURCEecb316b50a0142919418cf4383305defstickPicture.png) **在windows中设置共享文件夹** 要想把某个文件夹共享给 ubuntu,只需要右键设置指定文件夹的共享属性即可,选择“特定用户”,在弹出的窗口中选择“Everyone”即可,如下图所示: ![](images/WEBRESOURCEe544d03066fb43a595fa2645f30b1ea7image.png) **在ubuntu中访问共享文件夹** 安装 smbclient 工具: ``` gec@ubuntu:~$ sudo apt install smbclient ``` 查看windows中共享的文件夹: ``` # 命令格式 gec@ubuntu:~$ smbclient -L windows主机IP -U 用户名%密码 # 例如: gec@ubuntu:~$ smbclient -L 192.168.90.2 -U Administrator%12345678 Sharename Type Comment --------- ---- ------- ADMIN$ Disk 远程管理 C$ Disk 默认共享 IPC$ IPC 远程 IPC Users Disk xyz Disk gec@ubuntu:~$ gec@ubuntu:~$ ``` 可以看到,上述共享出来的文件夹  **挂载windows的共享文件夹分区** ``` # 命令格式: gec@ubuntu:~$ sudo mount -t cifs -o rw -o username=xxx,password=xxx //windows主机IP/共享文件夹名称 挂载点 # 例如: gec@ubuntu:~$ sudo mount -t cifs -o rw -o username=Administrator,password=12345678 //192.168.90.2/xyz /opt/ ``` 这样,就可以在ubuntu中访问windows的共享文件夹了。CQ2402 (file://Gec-li/cq2402) ## **3. FTP文件传输** FTP是一种网络协议,在文件传输领域被广泛使用,采用该协议的各种FTP服务端和客户端不胜枚举,例如Linux下的vsftpd服务器,Windows下的FlashXP客户端。 Ubuntu中的 vsftpd 的含义是 very security FTP daemon(即非常安全的FTP服务器),我们可以在ubuntu中配置vsftpd服务端,然后在windows中使用FTP客户端来达到文件互联互通的目的。 ![](images/WEBRESOURCE1cfd0409b18343c5aa0e4a742863553dstickPicture.png) 通过 FTP 上传下载文件 **安装 vsftpd** ``` gec@ubuntu:~$ sudo apt install vsftpd ``` **配置 vsftpd** ``` gec@ubuntu:~$ sudo vi /etc/vsftpd.conf # 在上述配置文件中,找到 write_enable=YES ,将其前面的井号去掉就可以了 ``` **重启 vsftpd** ``` gec@ubuntu:~$ sudo service vsftpd reload gec@ubuntu:~$ sudo service vsftpd restart ``` **查看运行状态** ``` gec@ubuntu:~$ sudo service vsftpd status vsftpd.service - vsftpd FTP server Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-06-07 15:31:08 CST; 9s ago Process: 25797 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS) Process: 25805 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS) Main PID: 25806 (vsftpd) Tasks: 1 (limit: 4631) CGroup: /system.slice/vsftpd.service └─25806 /usr/sbin/vsftpd /etc/vsftpd.conf 6月 07 15:31:08 aidevelop-vm systemd[1]: Starting vsftpd FTP server... 6月 07 15:31:08 aidevelop-vm systemd[1]: Started vsftpd FTP server. gec@ubuntu:~$ // 卸载软件 gec@ubuntu:~$ sudo apt remove --purge vsftpd ``` 注意到,上述输出信息中有active(running)字样,表示ubuntu中的vsftpd已经在正常运行,这时就可以启动windows中的ftp客户端去连接FTP服务了。 ![](images/WEBRESOURCE7295dea05fc1433a8128ebc8ec091265stickPicture.png) 下载 FlashFXP54_3970_Setup.exe(7MB): - - # 「课堂练习1」 在ubuntu中安装并配置好vsftpd,使用一款windows的FTP客户端工具(比如winScp)跟ubuntu互联互通。 ![](images/WEBRESOURCE26ef4b2a78ff2c28a0dacd2f72cd1fceimage.png) ### 使用WinSCP文件传输(推荐) 在Ubuntu安装ssh服务 ```bash gec@ubuntu:~$ sudo apt install ssh ``` SCP是文件传输中非常常用的命令,他可以在Linux和Windows之间传输文件,但该命令需要输入复杂的命令行参数,因此我们推荐使用图形界面的WinSCP工具。 下载 WinSCP-5.17.10-Setup.exe(10MB): - - 使用 WinSCP 连接 Ubuntu 打开 WinSCP,输入ubuntu的IP地址、用户名、密码,点击登录按钮,即可连接到ubuntu: ![](images/WEBRESOURCE911e5cc27c401553aa3ef8b3f7a8d352image.png) 成功连接到远程 Ubuntu 系统: ![](images/WEBRESOURCEe54e5e49800c59dd7043655d8afddc0aimage.png) 使用 WinSCP 传输文件 连接成功后,就可以在ubuntu和windows之间传输文件了,如下图所示: ![](images/WEBRESOURCEabbcafc8a41effea663a62f333e9a737image.png) ## **4. TFTP文件传输** 在开发板与电脑网络互通的情况下,采用tftp的方式来传输文件是最高效的一种方式,tftp的全称是 tiny FTP,可见此工具专用于文件传输,其所为tiny意指匿名传输,是一种轻量级的FTP工具。 1. 在windows中安装tftp服务器,可根据系统实际情况下载对应版本: - tftpd32.zip - tftpd64.zip 1. 启动tftpd,选择准备传送到开发板的文件的所在目录和与开发板联通的网卡: tftpd配置界面 ![](images/WEBRESOURCEeab95646301b4b9093879917fcf38fffstickPicture.png) 1. 假设在上述 C:\EFI 文件夹下有文件example.txt,在开发板中可执行如下命令下载该文件: ``` [root@root:~]# tftp 192.168.9.65 -gr example.txt ``` 1. 如果想要将开发板的文件发送到tftpd服务端,命令如下: ``` [root@root:~]# tftp 192.168.9.65 -pr example.txt ```