1. 虚拟机装Ubuntu到底解决什么问题
1.1 什么场景真正需要虚拟机而不是直接装双系统
我见过太多人搜索“Vmware配置ubuntu”,点进去之后发现教程只讲了一小半,装完系统就没了。其实你搜这个关键词,背后大概率是这几类需求:学校课程要求用Linux做实验,公司给了一台Windows电脑但你得在Linux环境里跑服务,或者你单纯想体验一下Ubuntu又不敢动现有系统。
先说结论:虚拟机和双系统是两回事,选错了能把你折腾到怀疑人生。双系统是给那种“我确定接下来几个月主力就是Ubuntu、Windows偶尔用”的人准备的,但它有个致命问题——启动引导一旦出问题,Windows可能直接进不去,新手处理起来非常狼狈。而VMware虚拟机是在Windows里开一个隔离环境,Ubuntu只是里面一个“窗口里的系统”,坏了删掉重建就行,完全不影响宿主机。所以如果你只是学习、测试、跑课程作业,虚拟机是更稳的选择。
我还见过一类人问“虚拟机是不是很卡”,这其实不完全取决于软件,而取决于你的硬件资源分配。VMware本身在做资源转换的中间层,CPU和内存被虚机分走之后,宿主机和虚机之间是有争夺的。以我实测的体验,只要你的物理机内存不低于16GB、CPU是近五年内的i5/R5起步,给Ubuntu分配4核8GB内存跑日常开发是完全流畅的,和装双系统几乎没有体感差别。
1.2 版本选型:VMware Workstation Pro与Ubuntu的黄金组合
版本选型是很多人忽略但极其关键的一步。我强烈建议用VMware Workstation Pro 17,不要用那些“精简版”“绿色版”“学习版”,原因只有一个:你后面会遇到快照、克隆、共享文件夹、USB设备透传这些高级功能,精简版把这些功能砍掉不说,还可能附带绑定全家桶。VMware社区里绕来绕去的老版本也尽量别用——老版本对新CPU的虚拟化指令支持不完整,装Ubuntu新内核时会出现莫名其妙的“Kernel panic”或CPU过热报错。
Ubuntu这边,长期支持版才是首选。现在最稳的是Ubuntu 22.04 LTS,它发布于2022年4月,官方维护到2027年,中间还会滚动更新小版本,社区资料极其丰富,踩过的坑随便搜都能搜到答案。不要因为好奇心去装24.04之类的非LTS或者每天更新的Dev版本,它的内核、桌面环境、apt源解析链路都可能比22.04更激进,遇到问题排查成本高好几倍。对新手来说“资料好找”比“版本新”重要得多。
下载Ubuntu镜像时一定认准官方渠道,不要从第三方下载站拿ISO,那些站点经常只换壳不换内容,有的甚至偷偷塞了修改过的installer脚本。官网有CDN加速,国内下载速度通常也不差,但如果你下载慢得无法接受,可以去国内高校的开源镜像站拿同一个官方文件,校验SHA256一致就行。
1.3 配置前的物料清单
开始动手之前,先把下面这些东西准备好,别中途卡住再去找:
- VMware Workstation Pro 17安装包,建议去官网获取正式版本
- Ubuntu 22.04.4 LTS桌面版ISO镜像,大小约4.5GB
- Windows宿主机预留至少60GB空闲磁盘空间(虚拟磁盘会随着使用增长,别只留40GB,后面装Docker镜像、编译缓存都吃磁盘)
- 宿主机BIOS里确保开启了Intel VT-x或AMD-V虚拟化(这个很关键,后面排查启动报错时你会发现高频原因就是它没开)
我把版本选型和物料列在第一部分,是因为太多人栽在起跑线上——用错了安装源,装了错误版本,后面所有步骤都跟着白费。这一部分你只要照抄就行,等你熟练了再尝试非主流版本也不迟。
2. 创建虚拟机时的关键配置不能凭感觉
2.1 新建向导中那些选项的隐藏含义
VMware创建虚拟机有两种入口,一种直接拖拽ISO到主界面,另一种是新建向导。我推荐第二种,因为你能在创建阶段就把资源分配好,而不是装完系统再回过头改配置。
打开Workstation Pro,选择“创建新的虚拟机”,第一页让你选“典型”还是“自定义”。这里直接选典型,自定义里面的硬件细节后面随时能改,典型向导它自动把常见参数设好,省时省力。接下来会问安装来源,选择“安装程序光盘映像文件(iso)”,浏览选中你下载的Ubuntu ISO。
下个关键点是“客户机操作系统”选择,这里别手滑选错:Linux → Ubuntu 64位。VMware会根据这个选项决定固件类型(BIOS还是UEFI)和虚拟硬件模型,选错的话安装界面可能出现GRUB引导错乱。继续往下,设置虚拟机名称。名称本身没特別要求,但建议用“Ubuntu-22.04-Dev”这种带版本号的格式,方便你以后开好几台虚拟机时一眼认出是哪台,不用点进设置里看系统信息。
2.2 CPU、内存、磁盘怎么分配才不卡
这是整篇博文最该抄作业的部分。给你一套我实测稳定的分配参数表:
| 宿主机配置 | 推荐虚机CPU | 推荐虚机内存 | 推荐磁盘 | 场景 |
|---|---|---|---|---|
| 16GB内存 + 6核以上 | 4核 | 8GB | 80GB | 日常学习、写代码、跑数据库 |
| 32GB内存 + 8核以上 | 6核 | 16GB | 120GB | Docker、编译大型项目、跑多个服务 |
| 8GB内存(老机器) | 2核 | 4GB | 40GB | 纯命令行学习、基础命令实验 |
内存分配是数学题。物理机16GB,你给虚拟机8GB,再算上Windows自身占用6~7GB,剩余空间就非常紧张了,宿主机会开始把内存页交换到磁盘,整个系统都变得迟钝。所以我上面给的“16GB宿主机给8GB”是取平衡点的方案——既能跑桌面版Ubuntu的GNOME环境,又不至于让Windows卡到不能打字。
磁盘分配有两个细节容易踩坑:第一,虚拟磁盘不是一创建就占满,它是按需增长格式。你给虚拟机设了80GB上限,刚开始实际占用可能只有10GB,所以建议“把上限设大一点”,留成长空间;第二,如果你后续计划在这台虚拟机上跑Docker,扩容磁盘的路径比较折腾——虽然可以后期在VMware设置里调大,但分区表要用GParted这类工具去调整,成本远高于一开始就多分配一点。宁可设大用不到,也不要设小后期折腾。
2.3 虚拟机设置里容易被忽视的三个优化项
向导走完只是创建了空壳,真正影响使用体验的细节在“编辑虚拟机设置”里。
第一个是“处理器”标签里的“虚拟化引擎”选项。如果你的CPU支持Intel VT-x/AMD-V,这里有个“虚拟化Intel VT-x/EPT”或“虚拟化AMD-V/RVI”的可选项。这个选项的作用是让虚拟机内部可以再跑虚拟机(嵌套虚拟化)。如果你打算在Ubuntu里再用Docker,Docker并不是虚拟机而是容器,理论上不需要这个选项,但有些Docker镜像基于KVM构建,开了这个选项兼容性更好,建议直接勾上。
第二个是“显示器”标签。“加速3D图形”很多人不勾,导致Ubuntu桌面动画掉帧、窗口拖动像幻灯片。这个选项会借助宿主机的GPU资源做OpenGL渲染,GNOME桌面开启后明显流畅很多。但注意,如果宿主机是核显(没有独立显卡),勾了这个提升也有限,至少不会变卡。
第三个是“USB控制器”默认设置为USB 2.0。如果你想向Ubuntu里传文件,默认的USB 2.0速度只有几十MB/s,传输大文件很痛苦。手动改成USB 3.1,实测传单个4GB文件能跑满磁盘速度,效率差距巨大。
2.4 挂载ISO引导安装的两种途径
创建向导时如果选了ISO路径,虚拟机会自动挂载并直接从光盘启动。但如果你已经建好了虚拟机,后来又想装系统,就得手动挂载:打开虚拟机设置 → 硬件 → CD/DVD → 使用ISO映像文件,选中Ubuntu的ISO。
这里有个真坑:挂载完ISO后,开机可能会直接显示“Operating system not found”,而不是进入安装界面。原因通常是启动顺序问题。开机瞬间不断按F2进入虚拟机的BIOS,把“CD-ROM Drive”挪到第一位,或者开机时快速按ESC调出启动菜单直接选CD光驱。我调试过的虚拟机里,十台有七八台都是这个原因,不用瞎折腾重装。
另外有个习惯建议:Ubuntu安装完成正常启动后,记得在虚拟机设置里把CD/DVD的“启动时连接”取消勾选,或者直接选择“使用物理驱动器”,让ISO不再参与每次启动流程,省得开机加载光盘时额外等待几秒。
3. 安装Ubuntu 22.04时的几个分水岭
3.1 分区方案怎么抉择:整块磁盘还是手动分区
Ubuntu安装到分区那一步时会问你“Install Ubuntu alongside… (与现有系统共存)”或“Erase disk and install Ubuntu (清除整个磁盘并安装)”。在VMware虚拟机里,虚拟磁盘是独立的,宿主机的Windows分区不会被碰,所以别怕“清除磁盘”这个选项——它清除的是虚拟磁盘,不是物理机硬盘。
如果你只是把Ubuntu当日常使用的系统,直接选“清除整个磁盘并安装Ubuntu”就行,安装程序会自动创建EFI分区、swap交换分区、ext4根分区。但如果你打算用这台虚拟机做开发,我建议选“手动分区”,因为自动方案给根分区留的空间可能不够大。
手动分区的推荐布局是这样的:在空闲空间上先创建一个200~500MB的EFI系统分区(挂载点/boot/efi,类型FAT32),这主要给UEFI引导用;然后创建一个等于物理内存大小的swap区(类型swap,例如8GB内存就做8GB swap);剩下全部空间分给根分区(挂载点/,类型ext4)。有些人会单独分一个/home,这在物理机上确实方便重装系统保护数据,但在虚拟机里意义不大——快照功能已经能帮你备份整台系统,单独分/home反而容易把空间切碎,根分区不够用。
提示:如果你是第一次安装、还不太理解分区概念,那就选“清除整个磁盘并安装Ubuntu”,安装完用“Disk Usage Analyzer”看一下空间分布,等摸熟Linux的分区逻辑后再尝试手动分区,避免瞎分导致以后扩容困难。
3.2 用户密码和全盘加密的取舍
Ubuntu安装时有一个“加密Ubuntu安装”的选项,勾选后需要设置一个加密密钥,开机必须先输入密钥才能加载系统。在物理机或云服务器上,这功能非常重要——硬盘丢了别人也读不出数据。但在虚拟机上,这个功能的收益就很低了。
原因有两点。第一,VMware的虚拟磁盘文件(vmdk)就在宿主机硬盘上,如果宿主机本身不安全,虚拟机的磁盘文件直接拷走慢慢暴力破解,加密密钥的意义也很有限;第二,加密会增加每次开机的等待时间和CPU开销,虚拟机本来就是你随意创建销毁的临时环境,没必要额外加这一道锁。所以我的建议是:不勾选全盘加密,保持默认无加密,这样以后遇到忘记密码之类的故障还能通过单用户模式重置,带加密的情况下恢复流程会复杂很多。
用户名建议使用全小写英文单词,不要带空格和特殊符号,因为很多开发工具、Docker容器名称、node_modules路径都假定用户名是标准的英文标识符。我见过有人起了个带“.”的用户名,结果编译某些软件时脚本直接报错。用户名还会影响home目录路径(如/home/username),之后配SSH、装环境变量都会用到这个路径,越规范越好。
3.3 安装完成后的首次启动要做什么
系统装完自动重启,虚拟机会从虚拟硬盘启动。首次看到Ubuntu欢迎界面时先别急着点“Next”一路到底。第一步建议等待桌面完全加载,右键打开“Settings”检查两个东西——网络是否已经连上(右上角网络图标应该不是问号),以及“About”里确认系统确实识别了你的CPU核数和内存大小。如果网络图标显示问号或感叹号,大概率是虚拟网卡没拉到IP,先启用网络再继续,别跳过这步,后面所有apt命令都依赖网络。
首次进系统后,它会提示你连接Online Accounts(Google、Microsoft等)、启用Livepatch、帮助改进Ubuntu之类的引导项。在虚拟机里,Online Accounts你根本用不到,Livepatch只对Ubuntu Pro订阅用户有意义,这些全部选择“Skip / Don't enable”。以我装过几十次的经验,这些引导项只会在配置环节浪费你的时间,而不会给你带来任何实际收益。
初次启动还有一件许多人忘记的事:让系统自动更新到最新补丁。Terminal里依次执行sudo apt update和sudo apt upgrade -y,看到“upgraded X packages”后重启一次,让内核和驱动都到位,再继续装其它软件。如果你跳过这一步直接装开发工具,可能会在编译时遇到一些因为内核头文件版本过旧导致的诡异报错,排错成本非常高。
3.4 VMware Tools的选择:别再用旧方法装显卡驱动
很多老教程讲到这一节会告诉你“安装VMware Tools可以增强显示、复制粘贴、文件拖拽”,然后让你从虚拟机菜单里“Install VMware Tools”挂载一个ISO进去执行vmware-install.pl。这方法在旧版本VMware里确实管用,但到了VMware Workstation Pro 17加上Ubuntu 22.04这个组合,它有更好的替代方案——直接安装open-vm-tools-desktop。
原理是:open-vm-tools是VMware Tools的开源版本,已经包含在Ubuntu官方软件源里,而且对Wayland显示服务器的支持比闭源版更好。你在VMware里手动安装闭源VMware Tools,经常遇到的问题是版本太旧、与内核模块不匹配,每次内核升级后还得重装一次。而open-vm-tools会跟随系统更新,一劳永逸。
安装命令很简单:
sudo apt update sudo apt install open-vm-tools-desktop -y sudo reboot装完后,虚拟机窗口里的“自适应分辨率”“文件夹拖拽共享”“剪贴板互粘”大都直接生效。如果你发现拖拽文件依然不工作,去虚拟机设置里确认“共享文件夹”功能已开启,或者在Ubuntu端检查/mnt/hgfs目录是否已挂载。这一步是很多人装完Ubuntu后觉得“鼠标乱飞、窗口无法自适应”的根源,先解决它能省后续大量痛苦。
4. 系统装完才是配置的开始
4.1 网络模式:NAT还是桥接,各自适用场景
Ubuntu装好后,VMware默认的虚拟网络模式是NAT。它的工作机制是虚拟网卡通过宿主机做一次地址转换来访问外网,虚拟机自己拿到的IP是内网地址(通常192.168.x.x)。NAT模式下,虚拟机可以访问外网(比如apt update、浏览器上网),但外部设备无法直接访问虚拟机里的服务。
桥接模式则不同,虚拟机像是直接插在你家路由器上的一块独立网卡,它会从路由器获取一个与宿主机同一网段的IP。这样局域网的其它设备(包括你的手机)都可以直接访问虚拟机上跑的服务。如果你只是日常学习,NAT模式的“能出去但进不来”反而更安全——起码不会有其他人在局域网上嗅探你虚拟机里的端口。如果你想练一下SSH远程登录或者把虚拟机里的Web服务开放给局域网测试,再切换到桥接。
切换路径:虚拟机设置 → 网络适配器 → 勾选“桥接模式”,同时在“复制物理网络连接状态”前打勾,这样宿主机拔插网线时虚拟机网络不至于断掉。改完之后到Ubuntu里sudo dhclient -r && sudo dhclient重新获取IP,或者直接重启系统,确保拿到新IP。我遇到过一种情况:网卡从NAT切到桥接后IP还是旧的,导致网关不通,把网络适配器断开重连一次就好,不算疑难杂症。
还有人在虚拟机里配了静态IP,结果换了个网段就连不上网了。虚拟机环境的IP稳定性好,NAT模式下完全没必要手动配静态IP沿用DHCP就行,被VMware默认网关接管后稳定性足够高。
4.2 apt换源:为什么必须换、怎么换、换了会踩什么坑
这是“Vmware配置ubuntu”热搜词背后最大的隐性需求。默认安装完Ubuntu,软件源指向的是国外官方服务器,在大陆网络环境下 apt update 的速度时快时慢,经常卡在某某PPA几秒钟不动。换源的本质是让 apt 从国内镜像服务器拉包,这些镜像服务器同步了Ubuntu官方软件仓库,内容一致,但物理距离近,速度能提升到几十MB/s。
官方最稳妥的换源方式是编辑/etc/apt/sources.list(Ubuntu 22.04默认可能用/etc/apt/sources.list.d/ubuntu.sources文件,注意确认路径)。国内高校镜像站都提供了换源脚本或配置文件,直接照着对应系统的文档下载替换即可。以阿里云镜像为例,把仓库地址里的archive.ubuntu.com或security.ubuntu.com换成mirrors.aliyun.com,同时保留jammy和jammy-updates、jammy-security这些仓库类别。
换源后的第一个动作一定是sudo apt update,让它重新拉取索引。这一步如果报错“The repository ... is not signed”或者“Failed to fetch”之类的,十有八九是源文件里混入了不该有的多行仓库地址,或者你把deb-src也写进去了但没有启用对应组件。把源文件改回干净状态,按镜像站文档给的原始文本粘贴,不要自由发挥。
换源还有一个常见坑:只换了主仓库没换security仓库,导致系统安全更新还是从国外拉,apt upgrade时速度依然慢。注意你的源文件里一定要包含security那一行,并把它的地址也换成镜像站。检查方法很简单——apt update后没有任何warning,update输出尾部出现“Reading package lists... Done”才算真正干净。
4.3 基础配置:中文输入法、防火墙、通用开发工具
中文输入法是新手高频踩坑区。装完Ubuntu默认是IBus输入框架,你可以直接在“设置 → 键盘 → 输入源”里点“+”添加“Chinese (intelligent pinyin)”。按理说这已经够用,但有些桌面环境里智能拼音的候选框不跟随光标,用起来很别扭。如果遇到这种情况,可以安装fcitx5框架和其拼音模块。安装完注销重登,在输入法里切换为fcitx5再添加拼音即可。这一步不是必须换,但如果你每天要打大量中文,体验差异还是很大的。
防火墙方面,Ubuntu默认装有ufw,但默认状态是inactive(不拦截任何流量)。虚拟机安全性主要取决于用途:如果只是为了学习开发,保持默认就行;如果你要在里面跑MySQL、Redis之类对外服务,建议开启ufw并按需放行端口:
sudo ufw enable sudo ufw allow ssh sudo ufw allow 3306/tcp sudo ufw status verbose开发工具里有两个高频安装项:curl、git、build-essential(里面包含gcc/g++/make)。build-essential对编译非常重要,很多源码安装的第一步都要求有这个工具集。如果你在虚拟机上还要用Visual Studio Code连接远程开发,可以顺手装一个openssh-server,后面配合VSCode的Remote-SSH扩展非常舒服。
4.4 快照:配置前的保命操作
在整个配置过程中,有一件事你必须在任何可能会破坏系统的操作前做——创建VMware快照(Snapshot)。快照类似于游戏里的存档,它会记下当前虚拟机的磁盘状态、内存状态和硬件配置,之后无论你在系统里做了什么,装了什么乱七八糟的软件、改了哪个配置文件、删了哪个库,都能一键恢复到快照时刻。
在VMware主界面点“虚拟机 → 快照 → 拍摄快照”,命名建议直接写当前配置的阶段,比如“Before-apt-mirror”“After-nginx-install”,恢复时一眼就能定位。我自己的习惯是:系统刚刚装完、基础工具装齐之后立刻拍一个“Base-Clean”快照。这个快照就是我的“系统出厂状态”,以后每个月或者要尝试高风险操作时,要么直接回溯到这个状态,要么在当前状态再拍一个临时快照。
快照虽然好用,但要注意两点:第一,快照会占用宿主机磁盘空间,一个快照可能占几GB到十几GB不等,而且快照保留的是差异数据,时间越久占空间越大,建议平时只保留两三个快照,确定稳定后把中间过程快照删掉;第二,不要在虚拟机开机状态下对磁盘做大改动的同时拍快照,比如正在执行dd写整个磁盘,这时快照的一致性很难保证,恢复时可能出现文件系统损坏。核心原则就一句话:改动前必快照,稳定后清快照。
5. 开发环境的搭建顺序与避坑
5.1 安装gcc失败的常见原因与解决
“ubuntu安装gcc失败”在热搜里出现不是偶然,我见过太多人直接在Terminal里敲sudo apt install gcc,然后看到一大串“Unable to locate package gcc”或者其他依赖错误。
通常不是gcc这个包不存在,而是源没有更新到位。新装的Ubuntu系统,软件索引可能是空的,直接安装任何包都会提示locate不到。解决办法很简单:
sudo apt update sudo apt install gcc g++ make如果更新源之后仍然报错,检查你换了哪个镜像源,把/etc/apt/sources.list(或/etc/apt/sources.list.d/ubuntu.sources)的内容和镜像站文档对照一遍。经常出现的错误是仓库路径复制时把版本代号写错,比如把jammy写成jellyfish,导致apt update搜索不到包。确认版本代号最简单的方法是执行lsb_release -a,输出结果里会显示当前Ubuntu版本代号,用它来对照源文件。
还有一种情况是gcc确实装了,但运行gcc --version提示command not found。这种多发生在PATH环境变量被污染时(比如之前折腾过Java环境变量),但很少见。先检查是否在/usr/bin下:
ls -l /usr/bin/gcc*如果文件不存在,说明安装并没有成功落地。如果文件存在但命令找不到,说明PATH里少了/usr/bin这个默认路径,这往往是环境变量配置错误导致的问题,下一节会专门讲。
5.2 nodejs与git安装,以及source命令的坑
在Ubuntu上配开发环境,常见的顺序是先装基础编译工具,再装git、nodejs。git的安装很直接:
sudo apt install git -y git config --global user.name "YourName" git config --global user.email "you@example.com"不配全局用户信息的话,第一次git commit会强制你补这些字段,少不了一轮折腾。
nodejs就有意思了。Ubuntu软件源里的nodejs版本往往偏旧,22.04默认源里可能是v12或v18这种较老版本。如果你只是跑一些工具脚本,旧版本也能用;但如果你要跑现代框架(Vite、Next.js、Express等),建议通过NodeSource源安装最新LTS版。常见安装方式是加入NodeSource的仓库:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs这里容易翻车的是网速拉跨导致setup_20.x脚本下载失败,或者脚本依赖ca-certificates没装齐。把ca-certificates先装上再执行脚本会顺很多。
装完nodejs后,npm install -g安装全局包时可能会遇到权限报错,这通常是npm全局目录不属于当前用户。两种解法:一是用sudo装全局包,二是给npm配置用户级目录。我推荐后者,因为sudo装npm包往往带来后续所有node命令都需要sudo的连锁麻烦:
mkdir -p ~/.npm-global npm config set prefix ~/.npm-global echo "export PATH=$PATH:$HOME/.npm-global/bin" >> ~/.bashrc source ~/.bashrc最后一个source ~/.bashrc是高频坑点。很多教程直接告诉你要执行source ~/.bashrc让环境变量生效,但如果你是用图形界面打开的Terminal,通常Terminal在启动时已经加载过一次bashrc,修改后再source一次直接生效。如果你是在脚本里source,注意脚本环境是bash的子shell,source之后环境变量只在当前shell会话里生效,新开的终端窗口才能永久使用。忘记这一步,你敲node -v会提示command not found,然后又开始怀疑人生。
5.3 MySQL安装后的初始化与远程访问陷阱
MySQL在Ubuntu里的安装不算难,一条sudo apt install mysql-server就完事。但安装之后的几步不走对,你会遇到“ERROR 1698 (28000): Access denied for user 'root'@'localhost'"或者完全连不上服务的问题。
Ubuntu下的MySQL root用户默认使用auth_socket插件认证,这意味着只有系统root用户(通过sudo)登录MySQL才能绕过密码,直接sudo mysql进去。这不是bug,是一个比较稳妥的安全默认值。但它让开发变得别扭——你写代码时不想每次都用sudo去连数据库。所以通常我会创建一个普通应用账号:
sudo mysql CREATE USER 'dev'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'dev'@'localhost'; FLUSH PRIVILEGES;关于远程访问,MySQL默认只监听127.0.0.1,如果你想从宿主机Windows的Navicat或其他客户端连接虚拟机里的MySQL,需要改配置文件让MySQL监听所有网卡。在Ubuntu 22.04的MySQL 8.0版本中,配置文件在/etc/mysql/mysql.conf.d/mysqld.cnf,把bind-address = 127.0.0.1改成bind-address = 0.0.0.0,然后重启MySQL。
远程访问还要在MySQL里给账号加主机范围,把'dev'@'localhost'改成'dev'@'%':
CREATE USER 'dev'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%'; FLUSH PRIVILEGES;同时确认一下第4.3节里ufw防火墙是否放行了3306端口。我见过最典型的封闭式报错:“Can't connect to MySQL server on 192.168.x.x (10060)”——不是MySQL挂了,而是防火墙拦了3306。
5.4 Docker安装与用户组权限
搜索热词里“ubuntu安装docker”出现频率很高。Ubuntu 22.04装Docker用官方仓库比apt源自带的版本更新更及时:
sudo apt update sudo apt install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y还没完。装完docker后直接执行docker ps大概率会得到“permission denied while trying to connect to the Docker daemon socket”。这是因为当前用户不在docker组里。Docker daemon socket默认只有root和docker组的用户能访问,你需要把用户加进docker组:
sudo usermod -aG docker $USER然后重点是注销并重新登录,或者重启虚拟机。许多新手加了组不重启,直接在同一个终端里试,还是会失败,这是最典型的Docker“群组权限未生效”案例。重新登录后执行id -nG,输出列表里包含docker就说明加成功了。
另外,Docker在VMware虚拟机里运行还有一个性能问题:默认存储驱动是overlay2,在虚拟磁盘上表现正常。但如果你在给虚拟机分配的磁盘太小,镜像拉取或者容器写数据时很容易把磁盘塞满,然后Docker给出“No space left on device”的报错。预防方法就是第2.2节里提醒的初始磁盘分配给大一点。
5.5 VSCode与Java/Maven环境变量配置经验
如果你习惯用VSCode做开发,在Ubuntu上有两种方案:一是直接在虚拟机里安装Linux版VSCode,二是Windows宿主机装VSCode,通过Remote-SSH扩展连接虚拟机开发。两种我都用过,在虚拟机里开原生VSCode对资源占用更重,远程模式更轻快,而且提速可以直接复用Windows的图形加速。个人更推荐第二种。
搜索热词里还有“vscode配置c/c++环境”“vscode python环境配置”,实际上在虚拟机里的坑和Windows上差不多:装对应语言插件,配置launch.json与tasks.json。核心区别在于——虚拟机里的gcc/g++编译路径在/usr/bin/gcc,VSCode默认也能探测到;而Python的venv虚拟环境路径则取决于你建venv时的目录,别把Windows习惯带进来,注意路径区分。
Java环境变量是另一个高频坑。Ubuntu上安装OpenJDK很简单:
sudo apt install openjdk-17-jdk -y但如果你需要手动配置JAVA_HOME(比如跑Maven),就需要知道OpenJDK实际安装路径。用which java找到路径后回溯到上级目录,比如/usr/lib/jvm/java-17-openjdk-amd64,然后写进~/.bashrc:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATHMaven装好后同样把它加到PATH里。这里有个血泪教训:千万别把export PATH=$PATH:/usr/bin这种把自己手动改坏——如果你把某一行PATH配置写错,比如把$PATH漏掉,当前终端会立即丢失所有命令路径,连ls都用不了。万一这种情况发生,别慌,用绝对路径/usr/bin/echo $PATH查看当前值,再用/bin/vi改回~/.bashrc,或者直接/bin/export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin临时救急。这就是热词里“ubuntu环境变量配置错误”最常见的止损路径。
6. 高频故障排查速查
6.1 忘记登录密码怎么重置
这个坑在热词里排名靠前,我甚至认为很多人需要“Vmware配置ubuntu”教程就是因为密码忘了满世界找重置方法。虚拟机忘记密码比物理机好处理,因为你能通过VMware的“重启虚拟机”按钮快速重启。
重置Ubuntu密码的原理是进入恢复模式的root shell。重启虚拟机,在引导菜单(GRUB菜单)处快速连按Esc或Shift,进入GRUB后选择“Advanced options for Ubuntu”,然后选择带“(recovery mode)”的内核条目。接着在recovery menu里选择“root”,此时能拿到root权限的shell。
拿到root shell后执行:
mount -o remount,rw / passwd your_username然后重启用新密码登录。遇到过两个小问题:一是GRUB菜单一闪而过根本按不出来,这通常是VMware虚拟机的BIOS启动太快,可以在虚拟机设置里把“开机启动时延迟”调大,或者按住Shift不放直到菜单出现;二是在recovery mode里文件系统是只读的,直接执行passwd会报错,必须先执行那一行重挂载命令让它可写,这在很多教程里都没提到。
6.2 环境变量配置错误导致命令找不到
环境变量问题的自救要领就三条:第一,别慌;第二,记住绝对路径也可以执行命令;第三,修复优先于重装。
如果你在一个终端里改了~/.bashrc后立刻source,源文件有语法错误,比如漏了引号或者$PATH写错,当前终端马上所有命令提示not found。此时请直接打开一个新终端(新终端会重新加载bashrc,如果bashrc彻底坏掉,新终端也会失效),用绝对路径打开编辑器:
/usr/bin/nano ~/.bashrc把出错的哪一行注释或删除,保存退出。如果连新终端都不行,就用终端顶部菜单打开“Preferences”,用不加载配置的方式启动一个干净shell(/bin/bash --noprofile),再手动修复文件。
这类问题的根因通常是复制粘贴时把Windows下的回车符带进来,bash解析时行为异常。检查方法:/usr/bin/cat -A ~/.bashrc,如果行尾出现^M$就说明有Windows换行符,用/usr/bin/sed -i 's/\r$//' ~/.bashrc清理后再source。
6.3 显卡驱动卸载不掉的处理思路
热词里“ubuntu显卡驱动卸载不掉”比较有意思,因为这个问题在物理机上更常见,但虚拟机也会被波及。虚拟机的显卡是虚拟的,Ubuntu默认会加载VMware虚拟显卡驱动,集成在open-vm-tools里。如果你手动装了闭源NVIDIA驱动(宿主机是N卡且不小心在虚拟机里也装了NVIDIA驱动),就会遇到卸载不掉、重启黑屏等麻烦。
处理思路其实简单:因为虚拟机的显卡不是真实N卡,闭源NVIDIA驱动在这环境里毫无用处,直接卸载:
sudo apt purge nvidia* sudo apt autoremove sudo reboot如果你的Ubuntu版本对虚拟显卡驱动支持不完善,卸载后分辨率锁死在800x600也不要担心,再执行sudo apt install xserver-xorg-video-fbdev和open-vm-tools-desktop就能恢复。这个问题的本质是“虚拟机里装啥驱动都拦不住系统崩溃”,回归虚拟显卡驱动是正解。
6.4 虚拟机启动故障速查表
把Launch阶段的高频故障整理成表,方便你排查时对照。这一部分的信息不算新鲜,但都是我在胶水环境里反复验证过的结论:
| 现象 | 常见原因 | 解决方案 |
|---|---|---|
| 启动报“This host supports Intel VT-x but Intel VT-x is disabled”或AMD-V类似字样 | 宿主机BIOS关闭了虚拟化 | 重启进BIOS,打开Intel VT-x/AMD-V,再启动VMware |
| 卡在开机logo或黑屏 | VMware版本与ISO内核不兼容 | 升级VMware 17最新版,或改用22.04.4镜像 |
| 安装时网络不可用 | NAT适配器未正确连接 | 虚拟机设置里把网络适配器改为NAT并重连 |
| 安装完后无法自适应分辨率 | 缺少open-vm-tools-desktop | 安装并重启 |
| 系统整体卡顿 | 分配给虚拟机的硬件资源不足 | 调大内存/CPU核数,关闭3D加速 |
| 磁盘占用暴涨、虚拟磁盘文件膨胀 | 快照过多或磁盘碎片 | 删除旧快照,定期用sudo fstrim -v /回收空间 |
| 虚拟机关机按钮无效 | 内核模块冲突或busy状态 | 在Terminal执行sudo shutdown -h now,而不是用VMware挂起 |
还有一个常被人忽略的启动问题:虚拟机无法关机,一直卡住。遇到这种情况,先在宿主机里开任务管理器看vmware进程是否卡死,卡死就强制结束进程,别直接拔电。如果只是系统挂起,尝试用Ctrl+Alt+Delete登录界面发关机指令,仍不行就快照恢复。
7. VM里的Ubuntu还能怎么玩
写完上面这些,我的一个直接建议是:虚拟机里的Ubuntu装好之后,别急着急着“到此为止”,用顺手之后完全可以拿它干更多事情。快照回到干净状态后,把每次踩坑修复的过程再走一遍,形成自己的“初始化脚本”也是一种练习。我在实际使用中体会最深的是:虚拟机的价值在于随意折腾,反正坏了大不了回快照,所以每次新需求都值得先在里面试试再决定要不要铺到物理机上。
最后再分享一个小技巧:给虚拟机拍快照之前先执行一次sudo sync,把文件系统缓存写入磁盘,确保快照捕获到的数据是一致的。这个细节极少有人注意,但能避免不少恢复时文件残留的问题。VMware加Ubuntu这套组合,一旦把资源分配和快照策略用顺了,它就是你开发工作流里最稳定、最不起眼的工具之一。