前言
在使用 VMware 运行 Linux 虚拟机时,如何在虚拟机中访问宿主机的共享文件夹 是许多小伙伴关心的问题。VMware 提供了共享目录功能(Shared Folders),但默认情况下,并不会自动挂载到 Linux 虚拟机上。
今天,给大家分享一个实用的 Bash 脚本 mount_vmware_shared_folders.sh,让你一键挂载共享目录,无缝访问宿主机文件,提升工作效率!
为什么要挂载 VMware 共享目录?
在 Linux 虚拟机中使用 VMware 共享目录,可以带来很多便利: 轻松访问主机文件:无需麻烦地传输文件,直接在虚拟机中操作主机的共享文件夹。 提高文件管理效率:避免频繁使用 scp、rsync 或 U 盘拷贝,减少时间浪费。 适用于开发和调试:共享项目目录,代码在宿主机和虚拟机之间自由切换。
如果你已经开启了 VMware 共享目录功能,但发现 虚拟机中 /mnt/hgfs 目录是空的,那么这个脚本就是你需要的解决方案!
脚本解析:如何一步步挂载共享目录?
1. 启用严格模式,确保脚本可靠运行
set -euo pipefail
作用:
-e:如果命令失败,脚本会立即退出,避免后续错误。
-u:如果使用了未定义的变量,脚本会报错,避免意外错误。
-o pipefail:确保管道中的所有命令都正确执行,否则脚本会退出。
这样可以确保脚本执行时更加稳定,减少意外情况的发生。
2. 定义挂载目录
MOUNT_POINT="/mnt/hgfs"
作用:
VMware 共享目录通常默认挂载到 /mnt/hgfs,但有时需要手动执行挂载。
这个变量定义了共享目录的目标挂载路径,后续命令都会基于它操作。
3. 检查 vmhgfs-fuse 是否已安装
if ! command -v vmhgfs-fuse &>/dev/null; then
echo "Error: vmhgfs-fuse 命令未找到,请确保已安装 open-vm-tools" >&2
exit 1
fi
作用:
vmhgfs-fuse 是 VMware 提供的 FUSE(用户态文件系统)工具,它负责将共享目录挂载到 Linux 系统中。
这里通过 command -v 检查 vmhgfs-fuse 是否可用,如果未找到,则提示用户需要安装 open-vm-tools,并终止脚本执行。
如何安装 open-vm-tools?如果你遇到 Error: vmhgfs-fuse 命令未找到,可以运行以下命令安装它:
sudo apt-get update
sudo apt-get install -y open-vm-tools open-vm-tools-desktop
如果你使用的是 CentOS/RHEL,可运行:
sudo yum install -y open-vm-tools open-vm-tools-desktop
安装完成后,重新运行脚本即可!
4. 创建挂载点(如果不存在)
if [ ! -d "$MOUNT_POINT" ]; then
echo "创建挂载点 $MOUNT_POINT ..."
sudo mkdir -p "$MOUNT_POINT"
fi
作用:
如果 /mnt/hgfs 目录不存在,脚本会自动创建它,确保挂载点可用。
mkdir -p 作用:即使目录已存在,也不会报错,避免意外中断。
5. 检查共享目录是否已经挂载
if mount | grep " on $MOUNT_POINT " &>/dev/null; then
echo "共享目录已经挂载在 $MOUNT_POINT"
exit 0
fi
作用:
通过 mount | grep 判断 /mnt/hgfs 是否已被挂载,如果已挂载,则直接退出,不重复操作。
这样可以避免用户多次执行脚本时重复挂载,提高脚本的健壮性。
6. 挂载共享目录
echo "正在挂载 VMware 共享目录到 $MOUNT_POINT ..."
sudo vmhgfs-fuse .host:/ "$MOUNT_POINT" -o allow_other
作用:
vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
.host:/ 是 VMware 共享目录的标识,它会将所有共享的目录挂载到 /mnt/hgfs。
-o allow_other 允许其他用户访问挂载的共享目录,否则默认只有 root 能访问。
如果共享目录成功挂载,用户就可以在 /mnt/hgfs 看到宿主机的共享文件了!
7. 挂载成功与失败的处理
if [ $? -eq 0 ]; then
echo "成功挂载 VMware 共享目录。"
else
echo "挂载失败,请检查 open-vm-tools 是否正确安装或配置。" >&2
exit 1
fi
作用:
if [ $? -eq 0 ]; then ... 用于检测上一条命令(挂载命令)的执行状态。
如果成功,则提示用户“挂载成功”;如果失败,则给出可能的错误原因。
使用方法:一键运行,轻松挂载!
只需 3 步,即可在 Linux 虚拟机中访问主机共享文件
1️⃣ 下载脚本,并赋予执行权限
chmod +x mount_vmware_shared_folders.sh
2️⃣ 运行脚本(需要 root 权限)
sudo ./mount_vmware_shared_folders.sh
3️⃣ 验证挂载是否成功
ls /mnt/hgfs
如果看到共享目录列表,说明挂载成功! 🎉
遇到问题?这里有解决方案!
脚本运行后,/mnt/hgfs 仍然为空?可能的原因: 检查 VMware 设置
确保你在 VMware 中 已启用共享文件夹功能(VM > Settings > Shared Folders)。
检查 open-vm-tools 是否正确安装
dpkg -l | grep open-vm-tools
如果没有安装,请参考 3. 检查 vmhgfs-fuse 是否已安装 章节进行安装。
重启虚拟机后再试
sudo reboot
总结:为何这个脚本如此实用?
✅一键挂载,无需手动输入命令✅ 自动检测 VMware 环境,防止误操作✅ 智能检查是否已挂载,避免重复挂载✅ 适用于所有主流 Linux 发行版
适用场景:✅ 你想要在 Linux 虚拟机中访问主机文件? ✅ 共享目录 /mnt/hgfs 没有自动挂载? ✅ 你厌倦了每次都手动挂载? 👉 用这个脚本,一行命令解决问题!
上一条:Redis使用规范
下一条:VMware Workstation Pro虚拟机