Ubuntu 和 Windows 这两个词放在一起,几乎是每个刚接触 Linux 的人都绕不过去的一道坎。顺便说一句,标题里那个 "Ubantu" 是特别常见的手误写法,正确的拼法是 Ubuntu,下文我统一按正规写法来,省得你以后在搜索引擎里被自动纠错搞懵。我自己是从 Windows 一路用过来的,最早那台笔记本装的是 Windows 7,后来为了跑一个只有 Linux 版本才顺手的编译工具链,被迫在机械硬盘的角落里挤出了 40G 装了个 Ubuntu,结果一装就是好几年。这篇内容我想干的不是写一份教科书式的对照表,而是把这几年在两个系统之间来回横跳的真实体验摊开讲:它们各自在解决什么问题,什么场景下该选谁,装的时候哪些坑是绕不过去的,以及装完之后日常敲命令、搭环境、跑容器这些事在两边到底差在哪。
如果你是完全没碰过 Linux 的新手,看完至少能知道自己该不该折腾、该怎么下手;如果你已经装过但总在权限、驱动、网络这些事情上卡壳,那下面的排查思路可能更对你有用;如果你只是想在 Windows 上顺手用上 Linux 的工具链,我也把这种"不换系统也能干活"的路径讲清楚了。
1. 先搞清楚定位:这两个系统到底在解决什么问题
1.1 从真实的使用场景倒推选择
很多人问"哪个好",这个问题本身就问错了。系统不是用来比高低的,是用来匹配场景的。我的判断标准很简单:看你每天花时间最多的事情是什么。
如果你的日常是 Office 文档、看视频、打游戏、用一堆国内网银和政务客户端、偶尔修个图剪个片,那 Windows 是压倒性的合理选择。不是因为它技术更先进,而是因为绝大多数商业软件的第一优先级就是 Windows,驱动生态也是围绕 Windows 打磨的。显卡驱动、打印机驱动、某些外设的配套工具,厂商在 Windows 上的投入是实打实的。
反过来,如果你的日常是编译代码、跑容器、连远程服务器、处理大量文本、写脚本自动化,那 Ubuntu 会让你舒服很多。原因也不神秘:Linux 的包管理机制让"装一个工具"变成一条命令,而 Windows 上你可能要先搜官网、找安装包、点下一步、勾选路径、重启。单个软件差别不大,但当你的工作涉及几十个工具的时候,这个差距会被放大到难以忍受。
还有一种情况是必须用某个只能在 Linux 上跑的东西,比如某些 ROS 版本、某些深度学习框架的特定算子、某些科研软件。这种情况下其实没什么可纠结的,装就完了,纠结的只是"装在哪台机器上"和"怎么装不把自己搞崩"。
我见过太多人一上来就问"我该不该换 Linux",我的回答永远是:先别想着替代,先想着共存。你不需要立刻做二选一的决定,双系统、虚拟机、子系统这三条路都可以让你先尝到甜头,再决定要不要彻底迁移。
1.2 别把"熟悉"当成"合适"
这里有个特别隐蔽的认知陷阱:很多人把"我用 Windows 用得很熟"当成"Windows 适合我的工作"。这两件事完全不是一回事。
Windows 的很多操作习惯其实是历史包袱。比如盘符这个概念,C 盘 D 盘 E 盘,本质上是早期给每个存储设备分配一个字母的做法,到了今天,一个硬盘分好几个区、插上 U 盘自动变个字母,路径就跟着变,写脚本的时候特别难受。Linux 是从根目录/开始的一棵树,所有设备都挂载到树上的某个节点,路径永远是稳定的,这对自动化和脚本太重要了。
再比如权限。Windows 的权限模型对普通用户几乎是隐形的,你装软件、改系统文件,弹个 UAC 窗口点"是"就过去了。这在个人电脑上体验很好,但当你需要精确控制"谁能读、谁能写、谁能执行",Windows 的图形界面就显得很笨重。Linux 的rwx三组权限、属主属组的概念,第一次接触会觉得麻烦,用熟了你会发现这才是能精确表达意图的方式。
我不是说 Windows 的设计差,而是说:你习惯的东西不等于适合当前任务的东西。换系统的过程,本质上是一次工作习惯的重构,这个成本要提前算进去。
1.3 三种共存方案的取舍逻辑
真要在同一台机器上用两个系统,主流就三种方案,我按"上手难度"和"性能损耗"排一下。
虚拟机是最省心的。装个 VirtualBox 或者用系统自带的方案,创建一台虚拟电脑,分配 CPU 核心和内存给它,然后在里面装 Ubuntu。好处是隔离彻底,搞坏了删掉重来,主系统毫发无伤。坏处是性能有损耗,尤其是图形界面会发涩,跑深度学习基本别想,GPU 直通配置起来也麻烦。适合"我只是想学命令、写写脚本"的人。
双系统是性能最完整的。开机的时候选一下进哪个系统,两边都是裸机性能,显卡驱动各装各的。代价是磁盘要真实分区、切换要重启、两个系统的文件互访需要额外配置,而且安装过程中一旦失手把引导搞坏,可能两个系统都进不去。适合"我确实需要 Linux 的完整性能"的人。
子系统是这几年最受欢迎的折中方案。在 Windows 里开启相关组件,就能直接跑一个轻量化的 Linux 环境,不用重启,文件互通,命令行可以直接调用。它的定位非常清晰:给开发者用。图形界面支持有限,系统级操作受限,但编译代码、跑 Python、用 Docker 完全够。适合"我不想换系统,但我需要 Linux 工具链"的人。
我个人现在的组合是:主力机 Windows 加子系统跑日常开发,另外有一台旧机器装纯 Ubuntu 用来跑长期任务。这个搭配用了两年多,没出过什么大问题。
2. 安装与初次上手:从下载镜像到能进桌面
2.1 镜像获取与启动盘制作
装 Ubuntu 第一步是拿镜像文件,也就是那个.iso结尾的东西。建议直接从官方站点或者国内高校的开源镜像站下载,理由很实在:官方源在国外,下载速度可能几百 KB 每秒,国内镜像站能跑到满速。版本上,长期支持版(LTS)是稳妥选择,比如 22.04 或 24.04 这类,支持周期长、社区资料多,遇到问题一搜一大把。非 LTS 版本新特性多,但踩坑时能找到的答案少。
下载完一定要做一件事:校验文件的哈希值。镜像站通常会提供 SHA256 值,你在本地算一遍对比一下。这一步很多人跳过,但如果下载过程中出现比特翻转,装到一半失败,你会以为是硬件问题,白白折腾半天。Windows 上可以用 PowerShell 跑Get-FileHash命令,Linux 上用sha256sum,对比结果一致再往下一步走。
写启动盘工具我推荐两个方向:一个是 Rufus,体积小、选项清楚、对 Windows 环境友好;另一个是 balenaEtcher,界面极简,选镜像、选 U 盘、点烧录就完事,容错性好。U 盘容量 8G 起步,写之前记得里面数据会被清空。
注意:写盘前把 U 盘里所有文件备份出来。这一步没有回收站,写进去就是覆盖。
还有个容易被忽略的点:如果你打算装双系统,进 BIOS 之前先把 Windows 的"快速启动"关掉,再把 BitLocker 或者设备加密暂停。快速启动会让 Windows 在关机时保持部分状态不落盘,Linux 挂载 NTFS 分区时可能直接报错;设备加密则会让你在改动引导时被要求输入恢复密钥,而那个密钥很多人根本没存过。
2.2 分区方案的几个关键决策
分区是安装过程中最容易翻车的地方。我见过有人把整个硬盘格了才发现还有重要数据没备份,也见过分区表搞乱导致引导彻底丢失的。所以这一段我讲细一点。
先明确一件事:Ubuntu 安装器有一个"与 Windows 共存"的自动选项,它会在空闲空间里自动划分。这个选项对新手的友好度是最高的,但前提是你的磁盘上确实有未分配空间。如果整块盘都被 Windows 占了,你得先在 Windows 的磁盘管理里压缩出一块空闲区域,比如 80G 到 200G,具体看你要装多少东西。
手动分区的话,我一般这么划:
| 挂载点 | 建议容量 | 文件系统 | 说明 |
|---|---|---|---|
| EFI 分区 | 512MB | FAT32 | 如果已有 Windows 的 EFI 分区,直接复用,不要新建 |
| 交换空间 | 内存 ≤16G 给等量,>16G 给 8G | swap | 现在多用交换文件替代,但休眠功能依赖它 |
| 根分区 / | 40G 到 80G | ext4 | 系统本体和软件都装这,太小会很快爆 |
| 家目录 /home | 剩余全部 | ext4 | 个人文件、配置、项目代码都在这 |
把/home单独分出来的好处很实际:以后想重装系统或者换发行版,只要格式化根分区保留家目录,你的配置文件和项目代码全都还在。这一步的收益在第一次重装的时候就能体会到。
引导程序一般装在硬盘的 EFI 分区上,安装器会自动处理。如果你的机器是 UEFI 启动模式,注意别把引导装到 U 盘上,否则拔了 U 盘就进不去系统了。
2.3 首次进入系统的必要配置
装完重启,第一次进桌面,别急着高兴,先做几件必要的事,能省掉后面一大堆麻烦。
第一件是换软件源。默认源在国外,更新速度慢得让人怀疑人生。国内主流的高校镜像站和云厂商镜像站都提供 Ubuntu 的同步,改一下配置文件里的地址就行。改完记得更新一次索引,让系统知道有哪些包可以装。这一步之后,装软件的速度会有质的变化。
第二件是装显卡驱动。如果是带独立显卡的机器,进系统后用系统自带的驱动检测工具看一眼推荐版本,然后一键安装。不装的话,界面操作会卡,外接显示器可能不亮,跑深度学习更是无从谈起。装完要重启。
第三件是输入法。Ubuntu 默认的输入法框架对中文支持一般,我一般会换成更成熟的方案,配合中文输入引擎使用。配置完记得在输入源里添加,不然切不出来。这块的配置在每次重装后都要重来一遍,属于固定动作。
第四件是关于 root 账户。Ubuntu 默认把 root 账户锁着,日常操作靠sudo提权。如果你想临时切到 root 身份,用sudo -i或者sudo su -都可以,前者更干净一些。但我不建议去给 root 设密码然后长期用 root 登录,那等于把系统的最后一道防线拆了。日常就跑普通用户,需要高权限的时候临时提一下,这个习惯能让你少犯很多无法挽回的错误。
3. 日常操作对比:文件、权限、软件安装
3.1 文件系统与路径习惯的差异
这是两个系统差异最直观的地方。
Windows 用盘符加反斜杠,比如C:\Users\你的名字\Documents。Ubuntu 从根开始,一路正斜杠,比如/home/你的名字/Documents。这个区别刚开始只是看起来别扭,但写脚本的时候影响巨大:反斜杠在很多编程语言里是转义字符,写路径的时候要么双写要么加前缀,特别容易出错;正斜杠就没这个问题。我在 Windows 上写批处理脚本的时候,经常要在引号里再处理一层转义,转到 Linux 之后基本没这个烦恼。
还有大小写。Windows 的文件名不区分大小写,Readme.txt和readme.txt是同一个文件。Linux 区分,这是两个完全不同的文件。这个规则在跨系统拷贝代码的时候经常出事,比如某个引用的文件名大小写写错了,在 Windows 下能跑,传到 Linux 服务器上直接报错找不到模块。我现在养成的习惯是:所有文件名一律小写加中划线,从源头规避。
跨系统传文件也是常见需求。几个实用手段:走网络传输协议在两个系统之间直接拖;用共享目录挂载;如果用了子系统方案,Windows 的磁盘会自动挂载到/mnt/c这类路径下,直接在命令行里读写就行,非常方便。传输大文件的时候我一般走网络协议,比图形界面的复制粘贴稳定得多,断点续传也有保障。
提示:在子系统里访问 Windows 文件时,性能会比访问 Linux 内部文件慢一个量级。编译项目、跑数据库这类 IO 密集的事情,务必把工作目录放在 Linux 侧,不要放在挂载的 Windows 目录里。
3.2 权限模型:为什么 Ubuntu 老要 sudo
新手最常问的一个问题就是"为什么老是提示权限不够"。答案在于两个系统对权限的设计哲学不同。
Windows 的权限模型主要是面向账户的,配合 UAC 做提权提示。你平时是以管理员组或者普通用户的身份登录,需要动系统文件时弹个窗口让你确认。这套设计对个人用户很友好,缺点是粒度粗,你想精确控制某个文件谁能读、谁能写,得点进一层层的属性对话框。
Ubuntu 的模型是"属主、属组、其他人"三组身份,每组分别有读、写、执行三个开关,用字符表示就是rwx。一个文件的权限就是一串九位字符,比如-rw-r--r--表示属主可读写、同组可读、其他人可读。这个表达方式一开始看起来很硬核,但一旦习惯了,你会发现它极其精确且易读。
改权限的命令是chmod,可以用字符形式,也可以用数字形式。数字形式里,读是 4、写是 2、执行是 1,加起来就是那一组权限的值。比如755就是属主全权限、其他人读加执行,这是目录和可执行脚本最常见的配置。644是普通文件,属主可读写、其他人只读。
改归属的是chown,格式是属主冒号属组再接文件名。如果你从别的地方拷了一批文件过来,属主变成了别人,跑起来各种诡异报错,chown一下通常就好了。
为什么系统文件要sudo才能改?因为这些文件一旦被误改,整个系统可能起不来。用sudo相当于给每次高危操作加了一道确认,你想想要删一个文件,多敲四个字符的成本,可能就避免了把系统目录删掉的惨剧。我自己就干过一次差点把系统库目录搞没的事,从那以后对sudo有了敬畏。
3.3 软件安装方式的对比
这一块是两个系统体验差距最大的地方,值得单独说。
Ubuntu 的主流方式是包管理器。命令行里一条安装命令,系统会自动去软件源里找、下载、解决依赖、装好、更新索引,全程几秒钟。依赖管理是它最大的优势,你不需要关心某个库要装哪个版本、放哪个目录、要不要配环境变量。卸载也干净,一条命令下去,相关的文件都清理掉。
当然 Ubuntu 也不是只有一种方式。还有面向桌面应用的打包格式、面向通用分发的格式、免安装的单文件格式,以及从源码编译这条路。这几种各有适用场景:包里装着最省事;单文件格式适合那些不常更新、想随手拿来用的工具;源码编译是最后的兜底,当仓库里的版本太旧或者根本没有的时候才用,代价是编译过程可能缺一堆开发库,得一个个补。
Windows 的传统方式是下载安装包双击,好处是所见即所得,坏处是每个软件都自带一套更新机制,几十个软件就有几十个更新提醒,版本管理全靠手动。这几年 Windows 也有了命令行的包管理工具,能一条命令装软件,体验提升不小,但生态覆盖度和 Linux 那边还是差一截,很多专有软件依然只能走安装包。
我整理了一张常用软件的对照,方便你迁移的时候快速找到替代。
| 用途 | Windows 方案 | Ubuntu 方案 |
|---|---|---|
| 包管理 | winget / 厂商安装包 | apt / snap / 单文件包 |
| 文本编辑 | 记事本 / VS Code | VS Code / vim / nano |
| 终端 | PowerShell / cmd | bash / zsh |
| 远程连接 | 各类 SSH 客户端 | 系统自带 ssh 命令 |
| 压缩解压 | 第三方压缩软件 | zip / unzip / tar 命令 |
| 版本控制 | Git for Windows | 一条命令装好 git |
| 容器 | 需要额外组件支撑 | 原生支持,安装即用 |
有一点要提醒:Windows 上的命令行工具和 Linux 上的同名工具,行为可能不一致。最典型的是换行符,Windows 是回车加换行两个字符,Linux 只用一个换行。这个差异会让脚本在跨系统时莫名其妙报错,比如提示某个解释器找不到。解决办法是统一换行符格式,或者用版本控制工具配置自动转换。
4. 开发环境搭建:容器、Python 环境、深度学习
4.1 容器方案在两边怎么选
容器这几年基本成了开发标配,两个系统上都能用,但底层实现差别不小。
Ubuntu 上是原生的容器运行时,直接跑在系统内核上,没有中间层,性能损耗极小,网络和文件系统的行为也最接近生产环境。装的时候一条命令搞定,装完把当前用户加进容器用户组,之后就不需要每次敲命令都提权了。这一点很重要,否则你每敲一条容器命令都要输密码,用一天就崩溃。
Windows 上的情况复杂一些。因为容器技术本质上是依赖 Linux 内核特性的,Windows 必须通过一层虚拟化来提供 Linux 环境。主流的做法是借助子系统或者轻量虚拟机来跑 Linux 内核,然后容器在里面运行。这套方案对开发者来说已经足够好用,尤其是子系统这一路径,启动快、资源占用可控、和 Windows 的文件互通也顺。但它毕竟隔了一层,在文件挂载的性能上能明显感觉到差距,尤其是把项目目录放在 Windows 侧、容器挂载进去的时候,读写会慢很多。
我自己的做法是:项目代码在子系统里,容器也在子系统里,两者在同一个文件系统内交互,性能就正常了。只有必须和 Windows 侧共享的文件才放挂载目录,而且尽量避免让容器频繁读写那些位置。
镜像拉取速度慢是另一个常见痛点。国内有多个公开的镜像加速服务,配置一下就能显著提升拉取速度。配置位置在容器的配置文件里,改完重启服务即可。这一步几乎是必做的,否则拉一个几百兆的镜像要等十几分钟。
离线环境下的安装也值得说一句。有些机器完全不能连外网,这时候需要提前把安装包和依赖准备好,拷贝进去按顺序安装。流程比在线安装繁琐得多,建议提前列一个清单,把每个包和它的依赖都确认清楚,否则装到一半发现缺个东西,又得重新想办法传文件。
4.2 Python 环境与深度学习配置
Python 环境这块,两个系统的核心思路是一样的:用虚拟环境隔离项目依赖,别往系统自带的解释器里乱装东西。系统自带的那个是给操作系统自己用的,你往里装包可能把系统工具搞坏。
我推荐用 conda 系的管理工具,它能同时管 Python 版本和非 Python 的二进制依赖,后者在深度学习场景下特别关键,因为很多计算库的底层其实是编译好的二进制包,用普通的包管理工具装经常遇到编译失败。安装的时候选最小版本,装完自己建环境,别用完整版,那会往系统里塞几百个用不上的包。
深度学习环境的搭建核心是版本匹配。你要让显卡驱动的版本、计算工具的版本、框架编译时依赖的版本三者对得上,任何一个不匹配都可能出现"能导入但用不了显卡"的情况。我的固定流程是:先用显卡状态命令看驱动支持的最高版本,然后去框架官网查对应的安装命令,官方给的命令里已经包含了匹配的依赖版本,照抄最省事。
验证是否用上了显卡很简单:导入框架,然后查一下可用性开关和显卡数量。如果开关是假、数量是零,那就是环境没配好。常见原因有几个:装的是 CPU 版本、驱动版本过旧、或者系统里有多个环境导致版本串了。排查的时候先确认当前用的是哪个环境,再看驱动版本,最后看框架版本,一层层往下查。
Windows 上还有个额外的小麻烦:某些库在 Windows 上的预编译包不全,需要自己编译,而编译又依赖 Visual Studio 的构建工具,装起来一大坨。Ubuntu 上大部分情况直接有现成的包,装起来顺畅得多。这也是很多人把深度学习工作流放在 Linux 上的原因之一。
提示:无论哪个系统,装之前先把版本对应关系查清楚,写在笔记里。这套组合以后重装环境的时候还要用,靠记忆是记不住的。
4.3 其他常用工具链的落地方式
除了容器和 Python,还有几类工具值得单独说。
远程连接是最基础的。Ubuntu 自带命令行连接工具,一行命令就能连服务器,密钥认证配好之后免密码登录,写自动化脚本也方便。Windows 上的命令行工具这几年也内置了连接能力,功能基本够用,但如果要做端口转发、跳板机这类稍微复杂的事情,还是 Ubuntu 上的工具更顺手。
数据库客户端这类图形工具,两个系统上都有对应版本,功能上差别不大。我一般把它装在本地,连远程数据库用,配置好连接信息之后日常使用没什么区别。
版本控制工具两边都有,命令行体验几乎一致。需要注意的是换行符处理和文件权限位的处理,版本控制工具都有配置项可以控制,跨系统协作的团队一定要统一配置,否则每次提交都有一堆莫名其妙的变更。
还有一类是浏览器自动化和网页抓取工具,这类工具在 Ubuntu 上部署更方便,因为可以跑在无图形界面的服务器上,资源占用低。Windows 上跑同样的事情需要额外的虚拟显示支持,配置起来麻烦一些。
5. 常见问题与排查实录
5.1 启动与驱动类问题
双系统装完之后,最经典的问题就是时间不对。Windows 把硬件时钟当成当地时间读,Linux 默认把它当成协调世界时读,两边一换算,系统时间就差了八小时。解决办法有两个方向:要么让 Linux 也按当地时间读硬件时钟,要么让 Windows 按协调世界时读,后者需要改注册表。我一般选前者,一条命令就能设置,改完重启就正常了。
引导丢失是另一个让人心跳加速的问题。常见诱因是 Windows 更新时重建了自己的引导,把原本的启动菜单覆盖了。这时候从 Ubuntu 的启动盘进去,用修复工具重建引导就行。如果启动菜单里两个系统都在,但选 Ubuntu 后黑屏,通常是显卡驱动的问题,可以在启动参数里加个兼容模式先进入系统,再老老实实装好驱动。
驱动签名报错在 Windows 上很常见,尤其是装一些老设备驱动的时候。系统会提示驱动没有经过验证,拒绝加载。这类情况下要先确认驱动的来源可靠,然后临时调整启动策略放行,装完再恢复。长期关闭验证不是一个好选择,会降低系统安全性。
外接显示器和多屏配置在两个系统上的体验差别挺大。Windows 上基本插上就能用,Ubuntu 上偶尔需要手动配置分辨率或者刷新率,尤其是高刷新率显示器,默认可能只给到 60 赫兹,得自己进设置调。N 卡用户还要注意,装了专有驱动之后设置面板的选项才完整。
5.2 权限、网络与命令执行类问题
权限报错是 Ubuntu 新手的高频问题。看到"权限不够"先别急着加提权,先看看这个操作是不是真的需要高权限。改系统配置、装软件、操作挂载的磁盘,这些确实需要;但在自己的家目录里操作文件被拒绝,那就说明文件的属主不对,用改归属的命令处理一下即可。
还有个更隐蔽的情况:脚本明明加了可执行权限,运行还是提示找不到命令。八成是因为当前目录不在系统的可执行搜索路径里。这时候用相对路径运行,或者把它放到标准路径下,就好了。这是出于安全考虑的默认设计,避免你误执行当前目录下的同名恶意程序。
命令执行完窗口一闪就没了,这在 Windows 上特别常见。原因是脚本执行完毕之后控制台自动关闭,你根本来不及看报错。解决方式是在脚本末尾加一个暂停指令,或者干脆从已经打开的终端里手动调用脚本,这样输出就会留在屏幕上。这个技巧看着简单,但能省掉大量"我什么也没看见"的困惑。
网络方面,两个系统的排查思路差不多:先看能不能通,再看名字能不能解析,最后看端口通不通。Ubuntu 上的工具链更丰富一些,尤其是抓包和分析类的工具,命令行的操作效率很高。Windows 上也有对应的工具,只是图形化程度更高,脚本化能力弱一些。
端口被占用是开发中的常见问题。两个系统都有查看端口占用情况的命令,找到进程号之后决定是结束进程还是改端口。我这里踩过的坑是:容器占用的端口和本地服务冲突,而容器里看不到本地的进程,排查的时候要从两边分别看,容易漏。
5.3 常见问题速查表
把上面这些整理成一张表,遇到问题可以直接对照。
| 现象 | 可能原因 | 处理方向 |
|---|---|---|
| 双系统时间差八小时 | 硬件时钟的解读方式不一致 | 统一两侧的时钟读取策略 |
| 开机没有系统选择菜单 | 引导被系统更新覆盖 | 用安装盘重建引导 |
| 选完系统后黑屏 | 显卡驱动未正确加载 | 兼容模式进入后安装驱动 |
| 提示权限不足 | 属主或权限位不对 | 检查归属,必要时提权 |
| 脚本提示命令找不到 | 当前目录不在搜索路径 | 用相对路径或移动位置 |
| 窗口一闪就关 | 脚本执行完自动结束 | 末尾加暂停或手动调用 |
| 容器拉取镜像极慢 | 未配置加速服务 | 配置镜像加速地址 |
| 深度学习用不上显卡 | 版本不匹配或装了精简版 | 核对驱动与框架版本 |
| 子系统内存占用过高 | 默认内存策略过于宽松 | 调整资源配置文件并重启 |
| 跨系统拷贝后报错 | 大小写或换行符不一致 | 统一文件名规范与换行格式 |
有个通用原则值得记住:先复现,再定位,最后才动手改。很多人一遇到问题就开始网上搜解决方案,跟着一通乱改,结果原问题没解决,又引入一堆新问题。正确的顺序是先确认问题的触发条件,能稳定复现之后,再分成几个可能的层次去排查,每次只改一个变量,改完立即验证。这个习惯比记住任何具体命令都值钱。
6. 我在两个系统之间来回折腾的个人体会
用了这几年,我最深的感受是:系统之间的差异,大部分不是能力差异,而是取舍差异。Windows 把兼容性和易用性放在第一位,代价是底层设计上背着历史包袱;Ubuntu 把可控性和一致性放在第一位,代价是学习曲线陡、部分商业软件缺位。你选哪个,本质上是在选你愿意承受哪种代价。
如果你现在还在犹豫,我建议的路径是这样的:先在 Windows 上把子系统开起来,用它跑一两个月的日常开发。你会很快发现自己到底是"需要几个 Linux 命令"还是"真的需要一个完整的 Linux 环境"。前者的话,子系统就够了,别折腾双系统;后者的话,再考虑分区装双系统也不迟。
还有个小技巧分享。不管用哪个系统,都养成把配置过程记录下来的习惯,尤其是那些配一次就忘的步骤,比如某个环境变量的路径、某个服务的启动参数、某个驱动的版本号。我自己的做法是在家目录里维护一个纯文本笔记,每次重装系统之后照着走一遍,比以前凭记忆瞎试快太多了。这个习惯的收益,在你第二次、第三次重装的时候会体现得淋漓尽致。
最后说一个心态上的事。刚接触 Linux 的人容易被各种报错吓退,觉得这系统怎么这么难用。其实大部分报错都是有明确原因的,而且原因通常就写在错误信息里,只是被英文和术语吓住了。把错误信息完整读一遍,复制关键词去搜,十有八九能直接找到答案。这个能力练出来之后,你会发现系统之间的墙其实没那么高。