文章目录
- 名词解释
- 事先准备
- 安装 VMware Tools
- 将鼠标焦点从虚拟机中退出
- 共享剪切板
- 共享文件(夹)
- 虚拟机为 Windows
- 虚拟机为 Linux
- 虚拟机快照的创建与加载
- 创建虚拟机快照
- 加载虚拟机快照
- 克隆虚拟机
- 构建宿主机-虚拟机局域网
- 通信原理
- 宿主机为 Windows,虚拟机为 Linux
- 更改宿主机的 USB 连接导向
笔者的运行环境:
VMware Workstation Pro 16
宿主机:Windows 10 教育版
虚拟机:不限
名词解释
-
宿主机:指的是安装运行 VMware Workstation 的计算机。在本文,为 Windows 10。
-
虚拟机:指的是在 VMware Workstation 中安装运行的虚拟机。虚拟机的操作系统不限。
事先准备
需要安装好 VMware Workstation。关于这方面的内容,可见笔者的另一篇博客:
VMware Workstation Pro 16 安装教程:
https://blog.csdn.net/wangpaiblog/article/details/112152218
安装 VMware Tools
VMware Workstation Pro 中的很多功能都需要借助于 VMware Tools 才能实现。VMware Tools 的安装方法如下。
-
触发在 VMware Workstation 中的虚拟机中安装 VMware Tools。


-
在虚拟机中安装 VMware Tools。


-
重启虚拟机。
将鼠标焦点从虚拟机中退出
将鼠标焦点从虚拟机中退出至宿主机的方法时,在虚拟机中使用快捷键 Ctrl + Alt。如果安装了 VMware Tools,也可以无需借助快捷键。
共享剪切板
先按照上面的方法安装 VMware Tools,然后重启虚拟机。重启之后,虚拟机应该可以与宿主机共享剪切板了。
共享文件(夹)
虚拟机为 Windows
Windows 没有提供 SSH 协议的端口 22,因此无法使用 XShell 来直接进行远程连接。不过,Windows 提供了内置的途径。
-
先按照上面的方法安装 VMware Tools,然后重启虚拟机。
-
在宿主机中开启共享权限。


-
按照自己主机的实际情况,打开共享。

-
在虚拟机中也开启共享权限。此步骤和在宿主机中是一样,不再赘述。
-
在 VMware Workstation 中指定宿主机需要共享的文件夹。




-
添加成功后,应该能在 VMware Workstation 中看到效果。

-
在虚拟机中添加刚刚在 VMware Workstation 中指定的共享文件夹。此文件夹将作为虚拟机中的一个驱动器的提供访问。





虚拟机为 Linux
这需要先构建宿主机-虚拟机局域网,在宿主机可以连接虚拟机之后,使用一种文件传输工具(如 Xftp 来完成)。关于这方面的详细内容,请参考本文 构建宿主机-虚拟机局域网 一节。
虚拟机快照的创建与加载
创建虚拟机快照
虚拟机快照保存了当前虚拟机的状态,可用于以后将虚拟机恢复到当前的状态。创建的方法如下图所示。


加载虚拟机快照
加载虚拟机快照的方法如下图所示。不过要注意的是,加载虚拟机快照会使用虚拟机当前的状态丢失,为了以防万一,可以在加载虚拟机快照之前,先保存当前虚拟机的快照。



克隆虚拟机
克隆虚拟机是创建一个一模一样的虚拟机。克隆的方法如下图所示。
-
克隆虚拟机。



-
克隆完成之后,可在 VMware Workstation 虚拟机列表中观察到克隆的虚拟机。

-
克隆完成之后,可在本地文件目录中观察到克隆的虚拟机。

构建宿主机-虚拟机局域网
构建宿主机-虚拟机局域网是为了令宿主机与虚拟机、虚拟机与虚拟机之间可以通信。
通信原理
构建宿主机-虚拟机局域网的通信原理是,首先,在 VMware Workstation 上开启 NAT 模式,这样 VMware Workstation 会在宿主机上构建一个虚拟的局域网,如 以太网适配器 VMware Network Adapter VMnet8。然后 VMware Workstation 会在这个虚拟的局域网上构建这个局域网的网关,这是宿主机与虚拟机、虚拟机与虚拟机之间通信的关键。最后,在将虚拟机中将 IP 设置为静态的,并手动设置一个其在此虚拟的局域网的静态 IP,这样一来,宿主机与虚拟机、虚拟机与虚拟机之间通信即可实现。
【提示】
使用 VMware Workstation 的 NAT 模式 建立的局域网只对宿主机与所有的虚拟机之间是互相可见的,但对宿主机所在的局域网是不可见的。也就是说,NAT 模式 只是在宿主机内部开设了一个局域网,但该网络与宿主机所在的局域网不是同一个局域网,而宿主机同时是这两个局域网的成员。
举个例子,假设主机 A 与主机 B 处于同一个局域网中,主机 A 内部开设了若干个虚拟机 a1、a2、a3、...、ai、...、an,主机 B 内部开设了若干个虚拟机 b1、b2、b3、...、bi、...、bn。那么,A 与 B 是可以互相感知的,A 与 ai 是可以互相感知的,ai 之间是可以互相感知的,B 与 bi 是可以互相感知的,bi 之间是可以互相感知的。但 A 与 bi 无法相互感知,B 与 ai 无法相互感知,ai 与 bi 更是无法相互感知。
(为什么笔者在这里使用 感知,而不是通俗易懂的 访问 一词呢?这里感知指的是访问的必要条件,而访问是一种很强的条件,其含义也会因上下文而变化。如果两台位于同一个局域网,那么它们可以是互相感知的,但如果有一方使用防火墙进行了拦截,那么仍然是不能相互访问的。另外,协议、端口号等因素都有可能导致可感知但不能访问)
有读者可能想问,一个宿主机位于两个局域网中,那如何分清一个局域网 IP 属于哪个局域网呢?原因就在于子网掩码。一个 16 位子网掩码的局域网最多可以分为 256 个 24 位子网掩码的局域网。一个 24 位子网掩码的局域网最多可以有 256 台主机。读者下面就可以看到,VMware Workstation 建立的局域网,其子网掩码是 24 位的。而宿主机所在的局域网,其子网掩码是 24 位的。因此,宿主机所在的局域网与 VMware Workstation 建立的局域网,它们的 IP 前 24 位前缀是不同的,所以这不会发生混淆。
宿主机为 Windows,虚拟机为 Linux
这里以宿主机为 Windows,虚拟机为 Linux,宿主机与虚拟机之间的通信为例。
-
检查 VMware Workstation 是否已为宿主机上构建了一个虚拟的局域网。检查的方法是在宿主机(这是为 Windows 10)的命令行中如下命令。
ipconfig

此处对于笔者的环境来说,可以通过 IP 地址与子网掩码看出,笔者此处的虚拟局域网为
192.168.191.XXX。 -
在虚拟机中检查是否曾经已经设置过此虚拟机的 IP。如果之前没有设置过,那么在虚拟机的终端中输入如下命令,应该可以看到与笔者类型的输出。
ifconfig
[XXX@localhost ~]$ ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500ether 00:0c:29:c1:c4:c6 txqueuelen 1000 (Ethernet)RX packets 193 bytes 12435 (12.1 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 2092 bytes 181912 (177.6 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 2092 bytes 181912 (177.6 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255ether 52:54:00:86:d9:8e txqueuelen 1000 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0可以看出,上面字段
ens33中并没有字段inet,这说明本机还没有此虚拟的局域网的 IP。 -
如果没有在虚拟机中设置过 IP,则设置 IP 的方法如下。
首先,在 VMware Workstation 中设置此虚拟的局域网的网关。



-
设置网关。此网关的 IP 只能为一种专用 IP(一般的格式为
192.168.XXX.XXX),需读者按照自身的实际情况自行设置。网关不能与已有的 IP 重复。前面有言,笔者此处的虚拟局域网为
192.168.191.XXX,所以笔者此处设置的网关需要以192.168.191开头。
-
在虚拟机的终端中输入如下命令切换到用户 root,因为之后的操作需要 root 权限。
su root
-
在虚拟机的终端中输入如下命令编辑虚拟机的网卡配置文件
ifcfg-ens33。vi /etc/sysconfig/network-scripts/ifcfg-ens33
【提示】
使用 Linux 的
vi编程器时,在打开文件后,输入按键i后才能进行文本输入。输入完成之后依次输入【ESC】、:wq!、ENTER之后才能保存修改。
-
初始时,笔者的文件
ifcfg-ens33的内容如下。TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME=ens33 UUID=201bcfa6-0892-44ce-b573-c43ca742585b DEVICE=ens33 ONBOOT=no -
在文件
ifcfg-ens33修改或增加如下内容。BOOTPROTO=static # 将 IP 设置为静态的 IPADDR=192.168.191.11 # 静态 IP NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.191.2 # 网关地址 -
在笔者的虚拟机中,修改之后的内容如下。
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME=ens33 UUID=201bcfa6-0892-44ce-b573-c43ca742585b DEVICE=ens33 ONBOOT=yes IPADDR=192.168.191.11 NETMASK=255.255.255.0 GATEWAY=192.168.191.2 -
现在,应该就可以在宿主机中使用 Xshell 访问虚拟机了。
关于如何在 Xshell 远程访问 Linux,可见笔者的另一篇博客:
如何在 Windows 主机上访问本地局域网中的 Linux 主机:
https://blog.csdn.net/wangpaiblog/article/details/120052152
更改宿主机的 USB 连接导向
当设备插入宿主机的 USB 接口时,究竟是宿主机还是虚拟机响应这个连接,这是一个问题。好在 VMware Workstation 提供了选择空间。
默认情况下,VMware Workstation 会先接管 USB 连接,然后令用户在 VMware Workstation 中选择。不过,可以在 VMware Workstation 预先设定 USB 连接的导向。如下图所示。






![[软件工程] 面向对象设计](https://img-blog.csdnimg.cn/20191030151436501.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h6eF9OYW1l,size_16,color_FFFFFF,t_70)












