由于linux环境下全新安装测试的需要,决定使用虚拟机来解决,正好win10 pro自带了Hyper-v 虚拟机,然后主机bios里开启虚拟指令支持,关闭hyper-v的uefi安全启动项,选择一个本地的ubuntu 20.04.6.iso当安装镜像,启动虚拟机。
ubuntu 20.04虚拟机默认安装成功后,想从win10 本地向虚拟机传输文件,发现复制黏贴不可用,然后尝试用u盘,作为共享媒体挂载进去,没找到了挂载方法,网上那些文章,说在显示设置下拉有共享设置,好吧,对方是win10虚拟机里开win10系统的虚拟,而不是Linux,linux环境下没有这个选择,还有说u盘先要usb设备脱机,说实话,磁盘管理里根本没有u盘脱机的选择,只有硬盘可以,这些教程真的尝试过吗?根本就没有的选项,尝试右下角弹出u盘,但是hyper-v里还是无法添加u盘,折腾了老半天,可是我就是想简单的传输个文件到linux虚拟机里,不想折腾什么rdp远程usb直通之类的。
然后放弃了这个想法,然后我决定通过FTP解决,步骤如下:
【1】先给hyper-v 设置里, 启用网络,虚拟交换机,如下图:
选择Default switch模式就可以了,不建议勾选VLAN,否则可能导致问题.
【2】 在win10本机上开启FTP服务器,我用的是自己开发的XFile服务器程序,如下图:
这里会显示服务器的内网ipv4地址,这里是192.168.1.4,这个就是FTP服务器地址
【3】 关键的一步来了,这里我载了一个跟头
在linux虚拟机上,打开自己的主目录,也就是home目录下的用户子目录,然后右键菜单,打开命令行,这样,下载的ftp资源会存放在用户子目录下,
这里的重点和误区,在默认的default switch模式下,win10是网关,因此,实际上虚拟机器可以访问网关192.168.1.4,但是网关是无法连接到虚拟服务器的,在这个模式下,port连接模式会失败,必须启用passive,而linux下的ftp命令行,默认是port模式,如果你到网络上去查找资料,你会发现基本全是错的离谱的,让你输入pasv来进入被动模式,错了,大错特错,这里是让ftp命令行程序进入被动模式,而不是发送一个pasv指令,因此正确的方法是输入本地指令passive,让ftp命令行进入被动模式; 此外,ftp命令行默认采用的是text模式传输文件,也就是tar二进制文件等会通通使用text模式传输,和Ftp file zilla client客户端几乎犯的是同一个错误,在这种模式下,\n会被转换成\r\n,二进制文件会损坏,大小都不一样了,因此必须强制ftp客户端使用二进制模式传输,也就是binary本地指令,我开始的时候就犯了这个错,以为ftp命令行默认就是二进制模式,结果是文本模式。
因此,linux终端下ftp客户端访问win10下ftp服务器的操作次序如下:
先登录 user xxxxxxxx
pass xxxxxxxx
然后立即输入 passive ,在尝试列表前必须先切换到被动模式,注意是passive,而不是网上那些垃圾教程里的pasv.
然后,你就可以使用ls 或者dir等指令切换目录了,在使用get 获取服务器上的文件前,必须输入 binary 本地指令,让linux ftp命令行进入二进制模式传输,这样才能保证传输的文件的一致性。
上传也是一样,网上很多文章关于hyper-v虚拟机下的命令行linux ftp操作都错到离谱,你真按那些所谓的教程去解决,估计头发没了还想不明白到底是哪里错了.