在虚拟化环境中,将本地文件传输到Linux虚拟机是日常开发、运维或学习中的常见需求,根据虚拟机软件类型(如VMware、VirtualBox)、文件大小及使用场景(图形界面/命令行),可选择不同的传输方法,本文将详细介绍几种主流操作方式,涵盖准备工作、具体步骤及注意事项,帮助用户高效完成文件传输。
使用共享文件夹(推荐,适合频繁传输)
共享文件夹是虚拟机软件提供的便捷功能,通过安装“增强工具”(VMware Tools/VirtualBox Guest Additions),可实现主机与虚拟机之间的文件夹双向映射,支持拖拽、命令行访问,适合频繁传输文件的场景。
适用场景
Windows主机与Linux虚拟机之间频繁传输文件,需支持图形化操作和命令行调用。
准备工作
- 虚拟机软件准备:确保虚拟机已安装对应增强工具(VMware需安装VMware Tools,VirtualBox需安装Guest Additions)。
- Linux系统准备:虚拟机需正常运行图形界面(如GNOME、KDE),且用户具有sudo权限。
操作步骤(以VMware为例)
-
启用共享文件夹功能
在VMware Workstation中,选中虚拟机→右键“设置”→“选项”→“共享文件夹”→勾选“总是启用”→点击“添加”,选择主机需共享的本地文件夹,设置名称(如“host_share”)和权限(“只读”或“完全控制”)。
-
安装VMware Tools
- 虚拟机开机后,在VMware菜单栏点击“虚拟机”→“安装VMware Tools”(若已安装可跳过)。
- 在Linux虚拟机内会自动挂载VMware Tools安装包(通常为
VMwareTools-x.x.x-xxxx.tar.gz
),复制到临时目录并解压:cp /media/$(whoami)/VMware Tools/*.tar.gz /tmp/ cd /tmp tar -zxvf VMwareTools-*.tar.gz
- 进入解压目录,运行安装脚本(默认路径为
vmware-install.pl
):cd vmware-tools-distrib sudo ./vmware-install.pl -d # -d参数使用默认配置,一路回车即可
- 安装完成后重启虚拟机:
sudo reboot
。
-
访问共享文件夹
- 重启后,共享文件夹会自动挂载到
/mnt/hgfs
目录(VMware默认路径),可通过cd /mnt/hgfs
进入,查看或操作主机共享的文件。 - 若需自定义挂载路径,可在
/etc/fstab
中添加条目(如hgfs /mnt/host hgfs defaults 0 0
)。
- 重启后,共享文件夹会自动挂载到
VirtualBox操作差异
- 安装Guest Additions:虚拟机运行后,点击“设备”→“安装增强功能”,Linux内会自动挂载光盘,执行:
sudo mount /dev/cdrom /mnt cd /mnt sudo ./VBoxLinuxAdditions.run
- 访问共享文件夹:默认挂载路径为
/media/sf_共享文件夹名
(如/media/sf_host_share
)。
注意事项
- 增强工具版本需与虚拟机软件版本匹配(如VMware Workstation 16需安装16.x版本的Tools)。
- 共享文件夹权限不足时,可通过
sudo chown -R $USER:$USER /mnt/hgfs
修改所有者。
拖拽/复制粘贴(适合小文件快速传输)
若虚拟机已安装增强工具且运行图形界面,可直接通过拖拽或复制粘贴传输小文件,操作简单直观。
适用场景
传输小型文件(如文档、图片、配置文件),无需复杂配置。
操作步骤
- 确保虚拟机处于活动窗口:拖拽或复制粘贴需虚拟机窗口为当前焦点。
- 直接拖拽:主机选中文件→按住鼠标左键拖至虚拟机桌面或指定文件夹,松开即可完成传输。
- 复制粘贴:主机选中文件→
Ctrl+C
复制→虚拟机目标窗口→Ctrl+V
粘贴。
注意事项
- 部分虚拟机软件(如旧版VMware)可能不支持拖拽特定格式文件(如二进制可执行文件),建议优先使用共享文件夹。
- 大文件(如超过500MB)拖拽可能因缓存不足导致失败,建议改用命令行或共享文件夹。
命令行传输(SCP/FTP,适合无图形界面或大文件)
若虚拟机无图形界面或需远程传输文件,可通过SSH的SCP协议或FTP服务实现高效传输。
适用场景
Linux虚拟机无图形界面、大文件传输、跨网络远程传输。
准备工作
- 虚拟机网络配置:确保虚拟机与主机处于同一局域网(如NAT模式或桥接模式),获取虚拟机IP地址(通过
ip a
或ifconfig
查看)。 - 开启SSH服务:虚拟机需安装并运行SSH服务(默认安装,若未安装可执行
sudo apt install openssh-server
并启动sudo systemctl start ssh
)。
操作步骤(SCP为例)
SCP(Secure Copy)基于SSH协议,支持加密传输,适合命令行操作。
- 从主机传输到虚拟机:
scp 本地文件路径 用户名@虚拟机IP:虚拟机目标路径 # 示例:将主机C:test.txt传输到虚拟机/home/user/目录(用户名为user,虚拟机IP为192.168.1.100) scp "C:test.txt" user@192.168.1.100:/home/user/
- 从虚拟机传输到主机(反向操作):
scp 用户名@虚拟机IP:虚拟机文件路径 本地目标路径 # 示例:将虚拟机/home/user/test.txt传输到主机D:文件夹 scp user@192.168.1.100:/home/user/test.txt "D:文件夹"
传输目录(需加-r参数)
scp -r 本地目录路径 user@虚拟机IP:虚拟机目标路径 # 示例:传输主机D:project目录到虚拟机/home/user/ scp -r "D:project" user@192.168.1.100:/home/user/
注意事项
- 虚拟机IP需固定(可通过DHCP保留或配置静态IP),避免重启后IP变化导致传输失败。
- 防火墙需开放SSH端口(默认22),虚拟机内执行
sudo ufw allow 22
(若使用ufw防火墙)。
网络共享(Samba,适合局域网多设备共享)
若需在局域网内多设备(如Windows、Mac、Linux)间与虚拟机共享文件,可配置Samba服务,实现类似Windows网络邻居的访问方式。
适用场景
局域网内多设备与虚拟机共享文件,需跨平台访问。
准备工作
- 虚拟机安装Samba服务:
sudo apt install samba
。 - 确定需共享的目录(如
/home/share
),并设置权限:sudo chmod 777 /home/share
(生产环境建议限制权限)。
操作步骤
-
配置Samba
- 编辑Samba配置文件:
sudo nano /etc/samba/smb.conf
。 - 在文件末尾添加以下内容:
[share] comment = Shared Folder path = /home/share browseable = yes guest ok = yes writable = yes
- 保存退出(
Ctrl+O
→Enter
→Ctrl+X
),重启Samba服务:sudo systemctl restart smbd
。
- 编辑Samba配置文件:
-
主机访问共享文件夹
- Windows主机:在文件管理器地址栏输入
\虚拟机IPshare
(如\192.168.1.100share
),即可访问虚拟机共享目录。 - Linux主机:安装Samba客户端后,通过
smbclient //虚拟机IP/share -U guest
访问,或直接在文件管理器输入smb://虚拟机IP/share
。
- Windows主机:在文件管理器地址栏输入
注意事项
- 共享目录权限需同时满足Linux系统权限(
chmod
)和Samba配置权限(writable = yes
)。 - 局域网内所有设备需与虚拟机在同一网段,否则无法访问。
根据实际场景选择传输方法:
- 频繁传输/图形化操作:优先使用共享文件夹(需安装增强工具)。
- 小文件快速传输:拖拽或复制粘贴(需虚拟机运行图形界面)。
- 无图形界面/远程传输:SCP命令(需开启SSH服务)。
- 局域网多设备共享:Samba服务(需配置共享目录和权限)。
相关问答FAQs
问题1:共享文件夹提示“权限拒绝”,如何解决?
解答:首先检查虚拟机设置中共享文件夹权限是否为“完全控制”;若权限正常,在Linux内执行以下命令修改文件夹所有者:
# VMware默认路径 sudo chown -R $USER:$USER /mnt/hgfs # VirtualBox默认路径 sudo chown -R $USER:$USER /media/sf_共享文件夹名
若仍无效,可能是增强工具安装不完整,建议重新安装增强工具后重启虚拟机。
问题2:拖拽文件到虚拟机时文件丢失或失败,如何处理?
解答:首先确认虚拟机已安装增强工具(VMware Tools/Guest Additions),若未安装需先安装;若已安装,尝试关闭虚拟机后重新启动;检查文件大小是否超过虚拟机拖拽限制(通常2GB以下);若为Linux主机,可能需安装gvfs-fuse
支持(sudo apt install gvfs-fuse
);若仍失败,改用SCP或共享文件夹方法传输,避免拖拽导致的缓存问题。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/19225.html