Ubuntu 系统下载及安装这件事,看起来是入门第一步,实际上它是整个 Linux 使用体验里最容易翻车的一环。我见过太多人卡在这一步:镜像下到一半断了,U 盘写完开机黑屏,虚拟机里装完发现没网,双系统装完 Windows 引导没了。这些问题单独拎出来都不算难,但堆在一起就足够把一个新手劝退。这篇内容就把从拿到一台机器到系统能正常干活的全过程拆开讲,覆盖版本选择、镜像获取、物理机安装、虚拟机安装、双系统共存,以及装完之后那堆必须做的配置。不管你是完全没碰过 Ubuntu 的小白,还是装过几次但总在细节上栽跟头的老手,都能从里面找到对得上自己场景的部分。
1. 镜像没选对,后面全白费:版本与获取环节的取舍
很多人下载 Ubuntu 的第一反应是去搜索引擎点第一个结果,然后随手下一个版本,结果装完发现软件源慢得要死,或者某个驱动死活装不上。问题往往不是出在安装过程,而是出在下载之前的选择。这一节把版本、架构、下载渠道、校验这四件事按顺序讲清楚。
1.1 LTS 和非 LTS 到底该选哪个
Ubuntu 的发布节奏是固定的:每年 4 月和 10 月各发一版,版本号就是年份加月份,比如 22.04 是 2022 年 4 月,24.04 是 2024 年 4 月。每隔两年 4 月那一版会被标记为 LTS,也就是长期支持版。桌面版 LTS 官方提供五年安全更新,非 LTS 只有九个月。
这个差别在实际使用中影响很大。非 LTS 版本的好处是内核和桌面环境更新,能更早用上新硬件驱动,但九个月之后就没更新了,你得跟着升级到下一版。而 LTS 版本五年内稳定收补丁,第三方软件、显卡驱动、Docker、各种开发工具链对它的适配也最充分。
我的建议很直接:除非你的硬件特别新,新到 LTS 内核认不出网卡或者显卡,否则一律选 LTS。目前主流选择是 22.04 LTS 和 24.04 LTS,后者更新一些,前者生态兼容性验证得更久。至于市面上热词里出现的更新版本,往往还在早期阶段,追求稳定就别急着上。
1.2 镜像下载渠道与速度差异
官方下载地址是 ubuntu.com 的 download 页面,进去之后会看到 Desktop 和 Server 两个入口。桌面版带图形界面,适合日常开发和个人使用;服务器版没有图形界面,装完只有一个命令行,适合跑服务。
从官方源直接下,国内速度通常只有几百 KB 每秒,一个 5GB 左右的 ISO 要下很久。更实用的做法是用国内镜像站。清华 TUNA、中科大 USTC、阿里云这几个镜像站都提供完整的 Ubuntu ISO 同步,速度能跑满带宽。地址规律也简单,基本是镜像站域名/ubuntu-releases/版本号/这个结构。
另外要确认架构。绝大多数笔记本和台式机是amd64,也就是 x86_64。苹果 M 系列芯片、部分开发板是arm64。下载页面上通常会根据你的浏览器 UA 自动推荐,但如果你在别人机器上帮人下,最好自己确认一下。装错架构的表现是启动盘做完根本进不去安装界面。
1.3 校验和与写入前的最后一关
ISO 下完直接写 U 盘是很多人的习惯动作,但这个动作跳过了一步:校验。网络传输过程中文件损坏的概率不高,但一旦损坏,你会在安装到一半时遇到莫名其妙的错误,排查半天还以为是硬件问题。
官方在 ISO 同目录下有一个SHA256SUMS文件,里面记录了每个镜像的哈希值。Linux 或 macOS 下用:
sha256sum ubuntu-24.04-desktop-amd64.isoWindows 下可以用 PowerShell 的Get-FileHash命令。把输出和SHA256SUMS里对应那行对比,完全一致就说明文件没问题。这一步花不了一分钟,但能省掉后面几小时的排查。
注意:如果校验值不一致,别抱侥幸心理,直接重下。曾经有人为了省时间硬装,结果装完系统文件损坏,开机进不去桌面。
2. 启动盘制作与物理机安装:分区和固件设置是最大的坎
镜像准备好之后,如果是要装到实体机器上,接下来就是做启动盘、进 BIOS、分区、安装。这一段的坑密度最高,尤其是固件设置和分区方案这两块,选错了轻则装不上,重则把原来的数据弄丢。
2.1 启动盘工具的对比与制作
Windows 平台上常用的工具有三个:Rufus、balenaEtcher 和 Ventoy。Rufus 体积小、写入快,支持 GPT 和 MBR 两种分区表,做单系统启动盘最省事。balenaEtcher 界面更友好,跨平台,验证写入结果,适合不想折腾的人。Ventoy 的玩法不太一样,它把 U 盘做成一个可以放多个 ISO 的启动盘,之后往里拖 ISO 文件就行,不用反复格式化,适合经常装系统的人。
用 Rufus 时有个细节要注意:分区类型要选 GPT,目标系统选 UEFI,除非你的机器是十年前的老设备只支持 Legacy。选错了会导致开机进不去安装界面。写入模式一般选 ISO 镜像模式即可,DD 模式虽然更底层但会隐藏 U 盘分区。
Linux 或 macOS 下可以用dd命令直接写:
sudo dd if=ubuntu-24.04-desktop-amd64.iso of=/dev/sdX bs=4M status=progress oflag=sync这里的/dev/sdX一定要换成你的 U 盘设备名,写错了会覆盖掉硬盘数据。用lsblk先确认再动手,这一步不能省。
2.2 UEFI 与 Legacy 模式下 BIOS 的关键设置
插上启动盘重启,按 F2、F12、Del 之类的按键进 BIOS。不同品牌按键不一样,联想常见 F12,戴尔 F12,惠普 F9 或 Esc,华硕 F8。进去之后有几个设置必须检查。
第一是启动模式,UEFI 优先,如果你的机器支持就别用 Legacy。第二是 Secure Boot,Ubuntu 官方镜像对 Secure Boot 是兼容的,但如果你后面要装某些第三方内核模块,比如部分显卡驱动,关掉它会省事一些。第三是 Fast Boot,这个功能会跳过部分硬件初始化,可能导致 U 盘识别不到,装系统时先关掉。
还有一个 Intel 平台特有的坑:硬盘控制器模式。不少笔记本出厂默认是 RST 模式,这种模式下 Linux 安装程序看不到硬盘。需要在 BIOS 里把它改成 AHCI。但直接改可能导致 Windows 无法启动,正确做法是先在 Windows 里用安全模式切换驱动,再改 BIOS 设置。这个顺序搞反了会两头都进不去。
2.3 手动分区方案的设计思路
安装程序走到分区这一步,会给你两个选择:自动擦除整盘安装,或者手动分区。如果这块盘只装 Ubuntu,自动分区省事。但要装双系统或者有多个硬盘,就得手动分。
手动分区的核心是搞清楚每个分区干什么用。下面是我常用的方案:
| 挂载点 | 建议大小 | 文件系统 | 用途说明 |
|---|---|---|---|
| /boot/efi | 512MB - 1GB | fat32 | UEFI 启动分区,必须存在 |
| / | 40GB - 60GB | ext4 | 系统本体,装软件都在这 |
| /home | 剩余空间 | ext4 | 用户数据,重装系统可保留 |
| swap | 内存的 1-2 倍或省略 | swap | 休眠和内存不足时用 |
EFI 分区如果机器上已经有 Windows,通常已经有一个 100MB 到 300MB 的,直接复用即可,不用新建。根分区给 40GB 以上,因为 Docker 镜像、编译产物都很占地方。/home单独分出来的好处是系统重装时数据不动,这个习惯一旦养成会省很多事。swap 现在的看法比较灵活,内存 16GB 以上基本可以不单独分,用 swapfile 代替就行。
2.4 安装黑屏、卡死的完整排查链路
安装过程中最常见的两个表现:一是选完启动项直接黑屏,二是安装界面出来了但卡在某个步骤不动。这两个问题的排查路径不一样。
黑屏多半是显卡驱动的问题,尤其是 NVIDIA 独显的机器。安装程序加载了开源显卡驱动,但和你的卡不兼容。解决办法是在 GRUB 启动菜单出现时按e编辑启动参数,找到quiet splash这一段,把它改成nomodeset,然后按 F10 启动。nomodeset的作用是让内核不要过早加载显卡驱动,先用基本的显示模式把安装界面跑起来,装完系统再装正式驱动。
另一个典型场景是热词里提到的"服务器黑屏,但是下面有两个小图标"。这个画面通常出现在安装程序试图进入图形界面但显示输出到了错误的接口。同样用nomodeset能解决大部分情况。如果还不行,检查显示器线是不是插在独显上而系统输出走了集显,换个接口试试。
卡在某个步骤不动,先别急着断电。安装过程会在后台做磁盘操作,慢是正常的。如果超过十几分钟完全没反应,才考虑重启。重启前记下卡在哪一步,重新来过时换一个分区方案或换一个镜像源试试。
3. 虚拟机路线:把折腾成本压到最低的选择
不是每个人都有一台可以随便格盘重装的机器。对于大多数人来说,先在虚拟机里把 Ubuntu 跑起来,熟悉了再考虑装实体机,是成本最低的路径。这一节讲虚拟化软件怎么选、虚拟机里装 Ubuntu 的完整流程,以及快照这个被严重低估的功能。
3.1 VMware 与 VirtualBox 的选型逻辑
VMware Workstation 和 VirtualBox 是虚拟机路线上最常见的两个选择。VMware 的图形性能、拖拽文件、宿主机和虚拟机之间的剪贴板共享做得更顺,安装 Ubuntu 之后装open-vm-tools就能用这些功能。VirtualBox 是开源免费的,功能上不差太多,但 3D 加速和显示性能在某些场景下不如 VMware。
我的判断标准很简单:如果你只是跑命令行、写代码、做实验,VirtualBox 完全够用。如果你要在虚拟机里开图形界面、跑 IDE、看视频,VMware 的体验明显更好。预算允许的话直接上 VMware,省的那些折腾时间值这个钱。
虚拟机创建时有个关键配置容易忽略:内存和磁盘的分配。内存给 4GB 是底线,8GB 以上用着才舒服。磁盘建议选单个文件或者拆分成多个文件都可以,但容量别按默认的 20GB 给,至少 40GB,因为 Ubuntu 加开发工具很快就能吃掉几十个 G。磁盘类型选动态扩展,不会一上来就占用你全部物理空间。
3.2 虚拟机里跑 Ubuntu 的完整流程
创建虚拟机时,操作系统类型选 Linux,版本选 Ubuntu 64-bit。网络模式这一步很有讲究。NAT 模式下虚拟机能上网,但宿主机和其他机器访问不到它,适合只做本地实验。桥接模式下虚拟机相当于局域网里独立一台机器,有自己的 IP,适合需要从外部 SSH 连接的场景。
ISO 挂载之后开机,安装流程和物理机基本一样,唯一区别是分区这一步可以放心用自动分区,因为整块虚拟磁盘都是给它的。安装过程中会提示是否安装第三方软件和更新,建议勾选,能省掉后面装显卡驱动和媒体编解码器的时间。
装完之后第一件事是装增强工具。VMware 下执行:
sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop装完重启,剪贴板共享、分辨率自适应、宿主机拖拽文件这些功能就都能用了。VirtualBox 下对应的是virtualbox-guest-utils和virtualbox-guest-dkms。
3.3 快照和克隆:把试错成本降到接近零
虚拟机最大的价值不是省硬件,而是可以随便折腾。这个价值要靠快照来实现。装完系统、装好常用工具之后,先打一个快照,命名成"干净环境"。之后你想试什么危险操作,比如改系统配置、编译内核、装一堆可能冲突的软件,提前再打一个快照。
出了问题的处理方式就一句:回滚快照,几十秒回到之前的状态。这个方法我用了很多年,它把"把系统搞坏了"这件事从灾难降级成了日常操作。克隆则是快速搞出一台一模一样的新虚拟机,适合做集群实验,比如测试 Harbor 或者搭建多个节点的开发环境。
提示:快照不是越多越好。快照存的是磁盘增量,积累太多会拖慢虚拟机并且占用大量空间。养成习惯,重要的干净状态留一个长期快照,临时快照用完及时删除。
4. 双系统共存:和 Windows 分同一块盘要注意什么
如果你希望 Ubuntu 直接用上全部硬件性能,同时保留 Windows,双系统是常见方案。它的核心难点不在安装,而在顺序、分区和引导这三件事的先后关系。
4.1 安装顺序与磁盘空间腾挪
顺序上,永远是先装 Windows,再装 Ubuntu。因为 Windows 的安装程序会覆盖引导记录,而 Ubuntu 的 GRUB 能识别 Windows 并把它加进菜单。反过来做,你会得到一个直接进 Windows 的机器,还得手动修复 GRUB。
磁盘空间要在 Windows 里提前腾好。打开磁盘管理,压缩卷,从 C 盘或者数据盘里分出一块未分配空间给 Ubuntu。注意这里的关键词是"未分配空间",不要提前格式化成 NTFS,Ubuntu 安装程序需要自己在这块空间上建 ext4 分区。
分多少合适?我的经验是根分区 40GB 起,/home按你打算存多少数据来定。如果只是学习用途,总共 100GB 一般够用。如果你要跑 Docker、编译大型项目、存模型文件,那要往 200GB 以上走。
4.2 引导菜单与系统时间同步
装完之后重启,会看到 GRUB 菜单,列出 Ubuntu 和 Windows 两个选项。如果没看到 Windows,通常是因为 Secure Boot 或者磁盘模式的问题,可以在 Ubuntu 里更新一下 GRUB 配置:
sudo update-grub它会重新扫描硬盘上的操作系统并更新菜单。
双系统还有一个几乎人人都会遇到的小问题:时间错乱。进 Ubuntu 之后发现时间比实际差了 8 小时,回 Windows 又正常,来回切换就来回错。原因是 Windows 默认把硬件时钟当本地时间,Ubuntu 默认当 UTC。统一成一种即可,我一般让 Ubuntu 用本地时间:
timedatectl set-local-rtc 1 --adjust-system-clock改完重启,两边时间就一致了。这个坑不解决不致命,但每次切系统都要被恶心一下。
5. 系统装完之后:那些不做就不顺的必配项
系统能进桌面只是开始。真正决定你这台 Ubuntu 好不好用的,是接下来这一小时的配置工作。这一节把网络、输入法、驱动、权限、环境变量、密码恢复这几个高频问题一次讲透。
5.1 网络配置和 SSH 连不上的排查思路
虚拟机和实体机都可能遇到网络问题。先用ip a看网卡有没有拿到 IP。如果没有,检查虚拟机网络模式是不是 NAT,或者实体机的网线、Wi-Fi 驱动是否正常。实体机常见的情况是无线网卡太新,内核不认,这就需要装驱动或者升级内核。
要从别的机器 SSH 连进来,先在 Ubuntu 上装服务端:
sudo apt update sudo apt install openssh-server sudo systemctl enable --now ssh然后用ip a记下 IP。如果对面用 Xshell 连接时提示超时,按这个顺序排查:先ping看能不能通,能通说明网络没问题;再看 SSH 服务是不是在跑,systemctl status ssh;再看防火墙有没有拦,sudo ufw status,必要的话放行 22 端口;最后确认用户名和密码没输错。NAT 模式下的虚拟机还需要在虚拟机设置里做端口转发,否则宿主机以外的机器根本访问不到它。
5.2 中文输入法的安装与切换
刚装好的 Ubuntu 默认只有英文输入,打中文需要额外配置。最省事的是用系统自带的ibus加拼音:
sudo apt install ibus-pinyin然后在设置里的区域与语言中添加中文输入源。想要更好的中文体验,可以考虑搜狗输入法 Linux 版或者fcitx5。搜狗输入法的安装方法是先下载 deb 包,再用sudo dpkg -i安装,如果提示依赖缺失就补一句sudo apt install -f。
装完搜狗之后可能要设置环境变量让输入法框架生效,在~/.profile或者~/.bashrc里加:
export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx重启或重新登录之后,用 Ctrl+Space 切换中英文。如果切换不生效,先去系统设置的语言支持里把输入法框架选成 fcitx,再重新登录一次。
5.3 显卡驱动、系统架构与硬件信息查看
NVIDIA 显卡的驱动是 Ubuntu 新手最常见的障碍。装之前先用命令看看系统建议你装哪个版本:
ubuntu-drivers devices输出里会列出可用驱动和推荐版本。图省事可以直接:
sudo ubuntu-drivers autoinstall装完重启,用nvidia-smi验证。如果这条命令能输出显卡型号、驱动版本、显存占用,就说明驱动正常工作了。如果报错,多半是 Secure Boot 在拦,进 BIOS 关掉再装。
查系统架构用uname -m,输出x86_64就是 64 位 x86,输出aarch64就是 ARM。查硬件信息用lspci看 PCI 设备,lsusb看 USB 设备,lsblk看磁盘和分区。这几个命令组合起来基本能覆盖日常排查需求。
5.4 权限模型和 sudo 的那些坑
Linux 的权限模型是新手最容易懵的地方。核心概念就三个:用户、组、其他,每种身份对应的读写执行权限。chmod改权限,chown改归属。看到Permission denied的时候,先想清楚是文件权限不够,还是需要sudo。
一个高频的坑是把不该给777的东西给了777。chmod -R 777看起来能解决一切权限问题,实际上会破坏 SSH 密钥、可执行文件、系统目录的安全要求。正确做法是搞清楚文件该有的权限再改。
另一个坑是 Docker。装完 Docker 之后每次运行都要加sudo,很烦。解决办法是把当前用户加进 docker 组:
sudo usermod -aG docker $USER执行完必须重新登录才生效,直接在当前终端里敲命令是没用的,因为组关系在登录时就已经确定了。
5.5 环境变量配置错误的定位与修复
环境变量改错导致命令找不到,是非常典型的问题。常见表现是command not found,或者明明装了某个工具但终端里跑不了。
环境变量的加载顺序按这个优先级:/etc/environment是系统级的,/etc/profile和/etc/profile.d/*.sh是全局登录时加载,~/.profile和~/.bashrc是当前用户的。图形界面下的终端通常读~/.bashrc。
最常见的错误是在追加 PATH 时忘了带上原来的值:
export PATH=/opt/mytool/bin # 错误,原来的 PATH 全丢了 export PATH=/opt/mytool/bin:$PATH # 正确第一种写法会让系统找不到ls、cd之外的几乎所有命令。真出这个问题了也别慌,用绝对路径/usr/bin/vi ~/.bashrc打开文件改回来就行,/usr/bin下的命令不受 PATH 影响。
注意:改环境变量之前先备份一下文件,改完
source ~/.bashrc生效。如果新开的终端都坏掉了,就说明问题在~/.bashrc里,别重启,直接用绝对路径修。
5.6 忘记登录密码的处理办法
密码忘了不用重装系统。重启,在 GRUB 菜单停在 Ubuntu 那一项,按e编辑,找到以linux开头的那行,把末尾的ro quiet splash改成rw init=/bin/bash,按 F10 启动,会进入一个 root 权限的 shell。
接着执行:
passwd 你的用户名按提示输入新密码两次。如果提示文件系统只读,先执行mount -o remount,rw /。改完密码用exec /sbin/init或者直接长按电源重启,正常登录即可。这个方法对物理机和虚拟机都适用,前提是你能进 GRUB 菜单。
6. 开发环境落地:从空系统到能干活
系统配好了,接下来就是让它变成一台能干活的开发机。这一节按工具链、容器、Python 环境、编辑器、嵌入式开发几个方向讲,每个方向只讲最实用的部分。
6.1 gcc、cmake、lua 这些基础工具链
编译环境的基础是build-essential,一个包把 gcc、g++、make、libc 开发头文件全带上了:
sudo apt install build-essential装完用gcc --version验证。有些热词里提到"安装 gcc 失败",大多数情况是软件源没更新或者网络问题,先sudo apt update再装。如果报依赖冲突,看提示里具体缺哪个包,单独装上再重试。
cmake 单独装:
sudo apt install cmake cmake --version如果项目要求更高版本的 cmake,apt 里的版本不够,可以去官网下预编译包或者用 pip 装,但要注意别把系统自带的 cmake 覆盖掉,容易影响其他依赖它的软件。
lua 的安装很直接,sudo apt install lua5.4加luajit基本够用。至于 Redis,如果想要最新版,源码编译是常见做法:下源码包,make然后make install,编译前先确保 build-essential 装好了。有个细节是源码编译出来的 Redis 默认不带系统服务,需要自己写 systemd 配置文件才能开机自启。
6.2 Docker、镜像仓库与容器化环境
Docker 现在几乎是开发机的标配。apt 源里的 docker.io 版本偏旧,想要新版得用官方源。装完记得把用户加进 docker 组,前面讲过了。
镜像拉取慢的话,在/etc/docker/daemon.json里配置镜像加速地址。这个文件没有就新建:
{ "registry-mirrors": ["你的加速地址"] }改完sudo systemctl restart docker重启服务。
Harbor 是私有镜像仓库,适合团队内部用。它依赖 Docker 和 docker-compose,安装方式是下载离线安装包,解压后编辑harbor.yml配置主机名和端口,然后跑./install.sh。装完默认通过 80 端口访问,admin 用户的初始密码在配置文件里能改。第一次部署最容易踩的坑是主机名配置和实际访问地址不一致,导致 push 镜像时报证书或连接错误。
6.3 Miniconda3 与 PyTorch 环境
Python 环境管理推荐 Miniconda3,比完整版 Anaconda 轻很多。下载安装脚本:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh装完它会提示你初始化 shell,选 yes,然后重开终端。用conda create -n myenv python=3.11建环境,conda activate myenv激活。
装 PyTorch 直接去官网复制命令,注意选对 CUDA 版本。如果机器没有 NVIDIA 显卡或者不打算用 GPU,选 CPU 版本就行。装完用一段简单代码验证:
import torch print(torch.__version__) print(torch.cuda.is_available())第二行输出True才说明 GPU 能用。如果显示 False,先确认nvidia-smi正常,再检查装的 PyTorch 是不是 CUDA 版本。conda 环境和系统 Python 别混用,容易出现包版本冲突。
6.4 VSCode 和代码辅助工具
VSCode 在 Ubuntu 上的安装方式有两种,下 deb 包手动装,或者加微软的软件源用 apt 装。后者能自动更新,更省心。装完之后建议装上几个基础插件:中文语言包、Python、C/C++、Remote-SSH。Remote-SSH 这个插件配合前面配好的 SSH 服务,可以让你在 Windows 上用图形化的 VSCode 直接编辑远程 Ubuntu 上的代码,不用来回传文件。
如果你用命令行里的代码辅助工具,安装方式一般是先用 npm 或者官方脚本装好,再配置 API 密钥。这类工具的环境变量通常放在~/.bashrc或者工具自己的配置文件里。需要注意的是这类工具对 Node.js 版本有要求,装之前先node -v看看,版本太低就升级。
至于写 HTML 的需求,VSCode 本身就是很好的 HTML 编辑器,装个 Live Server 插件就能实时预览。想要更轻量的可以用 Bluefish 或者 gedit 加插件,但综合体验还是 VSCode 最均衡。
6.5 Zephyr 等嵌入式开发环境
Zephyr 是嵌入式开发里比较活跃的一个 RTOS。在 Ubuntu 上搭它的环境,核心是 Python 和 west 工具。先保证 Python3 和 pip 正常,然后:
pip install west接着克隆 Zephyr 源码,用 west 初始化并拉取依赖:
west init ~/zephyrproject cd ~/zephyrproject west update依赖拉完之后装 Python 依赖和工具链:
pip install -r zephyr/scripts/requirements.txt工具链(Zephyr SDK)需要单独下载安装包,解压到指定目录再设置环境变量ZEPHYR_SDK_INSTALL_DIR。这一步是嵌入式环境里最容易出问题的,因为环境变量路径不对,编译时会报找不到编译器。用west build -b 开发板型号编译一个示例工程,能通过就说明环境搭好了。
开发板连接到 Ubuntu 之后,用ls /dev/ttyUSB*或者ls /dev/ttyACM*看设备有没有识别。如果没识别,多半是串口芯片驱动的问题,常见的是 CH340 和 CP2102 这两种,需要装对应驱动。另外当前用户要加进dialout组才能访问串口,加完同样要重新登录。
最后分享一个我自己用了很久的习惯:装完一台 Ubuntu 之后,我会把所有配置命令整理成一个 shell 脚本存起来,从软件源、输入法、开发工具到环境变量,一条条写好。下次重装系统,跑一遍脚本,半小时就能把环境恢复。配合前面说的/home单独分区和虚拟机快照,Ubuntu 这块的折腾成本会降得非常低。系统用久了总会想重装一次,但如果有这套东西在,重装就不再是负担了。