Linux 使用一周年纪念
Linux 使用一周年纪念
不知不觉就已经日常使用 Linux 系统一年了。我认为这是我大学生活中一个很重要的组成部分:不断地去折腾操作系统、寻找有趣的软件装在自己的系统上、找到软件的 BUG 给开发者提 issue(实际上许多项目的 bug issue 要求你在他们最新的版本上面测试过后才能报告),在这个过程中对于计算机的认识不断深入。每天基本上电脑不离手,总是会花上那么一些时间尝试去做以前做不到的事情,当然了,也加剧了我的社交剥离(hhhhh)。
我现在快要大四了,也没有课需要上了,几乎没有什么旁的事缠身。这个暑假非常愉快地阅读了很多 CS 方面的书籍,并且有一篇我认为很关键的思想博客在写(难产ing),于是干脆先来写这篇回忆录,或者说纪念博客,来摸一摸鱼。
楔子:从 Minecraft 开服说起
其实第一次接触 Linux 是因为服务器这个概念。那时候大概是高一吧,和一帮朋友玩 Minecraft 和 Terraria,不可避免的就是我们想要联机一起玩,那么服务器就是最关键的要素了。当时应该主要还是依赖了一些提前懂技术的同学,使用宝塔面板搭建了服务器让我们游玩。我当时很好奇这是如何做到的,也因此听说了 Linux 系统,但是当时的 Linux 环境远没有现在好。并且我当时沉迷于数学和物理世界,对计算机也仅限于对撰写简单的算法程序通过 OJ 感兴趣(大部分初学编程的人估计都是这样),因此对于系统方面实在是觉得有趣但是不那么足够 intoxicating,于是不了了之。
后来上了大学,各种各样的降智媒介,越来越多的无效社交,越来越多的形式主义,都让我深恶痛绝。渐渐的,我能感受到的世界的乐趣越来越少了,于是报复性地逛更多论坛和社区去寻找新的刺激,逛完国内的再逛国外的,有了更加开放的思想和对世界的认识。不过那个时候仍然执着于学数学想要转入数学系,因为当时对于我来说,最为刺激的一件事情就是做出一些 nontrivial 的结果发表,并且我不那么热衷于短线的收益。我希望做更加长期主义的事情作为我的事业,数学乃至其他的自然科学是不二之选。或者不如说,数学一直是我心中的热爱,即便现在应该不可能从事纯数学甚至数理统计研究了,我依然不后悔曾经在数学/统计理论学习上花费的大额精力和时间成本。
学会独自解决问题是非常重要的能力,无论是数学上还是解决系统 bug 上,因为有很大的可能你只是一个人在使用 Linux,没有人能够帮忙。并且大多数平台对于你的求助只会提出糟糕的建议,很少有人能够直截了当的按照你的需求提出方案、解决问题(这是非常可怕的事情,我在数学系学生身上也见到过,我无法理解面对别人的提问不正面回答而是先做出评价的行为,并且直接否定别人的需求,这或许就是 Linux 乃至大多数开源项目和开源行为在中国不流行的原因)。
经过深思熟虑之后,我还是转入了能够接触到更多计算机、或者用时髦的话来说 AI 的统计学。AI 是最大的机遇,只要是明眼人就可以看出的机会,因此我押注了未来和自己的兴趣(当时想的很简单,能够结合数学和计算机的,并且能够有机会参与 AI 浪潮的就是统计学了,并且得益于我校工科的孱弱,我几乎没有在纯粹计算机和统计学科上有什么犹豫)。
然后就是一年的学习,参与了学院组织的一个活动,大意是聚集了一帮人想要做出一些成果,现在来看似乎是不那么成功的一个体验科研的项目。我一开始就不怎么看好这个项目,而且我认为对于本科生而言,体验是更重要的要素,因此一开始就没有打算发表论文(不过后面又发生了许多事让我决心 quit,不再想去往统计学学术界,而是更加专心的投身于计算机科学)。大约在一位老师的组里花费了一年时间,可以说我确实接触了很多新的思潮,了解了一些 AI 科研的轮廓,学习了大量不同的理论(不管是新奇但是虚幻的还是传统但是依然有效的),也看了许多论文、复现了不少代码,客观上个人能力确实提高了。
转折:一块硬盘上的 Ubuntu
好像跑题了,但是正是在这一过程(代码复现)中,我再一次地接触到了 Linux,或者更准确的说:It’s Fxxking Ubuntu 22.04。大量的 AI 项目需要使用这个版本,而这个版本已经老的出奇,有些包并不好用,兼容性出现了一些问题。出于想要亲身体验的原因,我在一块硬盘内安装了 Ubuntu 24.04(我认为比 26 和 22 都好一些,并且这里值得说道说道:多亏了我喜欢买固态硬盘来存系统和资料/番剧,现在我手上有两块固态硬盘,卖掉其中一块就可以回原本两块的本金,甚至还能小赚一点)。

Ubuntu 在深度学习领域的权威是毋庸置疑的,对于 N 卡的支持做的最好,并且网络上有着大量的解决方案,是最普及的发行版也是新手入门的好选择(这都是当时看到的帖子里面一致认可的,当然,后面我发现了在 AI 的帮助下安装任何发行版都不是太大的问题了)。再然后是折腾桌面环境和相关的软件(输入法要安装,浏览器也要配置,代理工具依然是必不可少的),一句话总结就是,大概是在 KDE 桌面上把 Ubuntu 弄得一股果味吧。
当时敢这么折腾还有一个原因:我额外配置了一台台式机,即便是安装失败也有 fallback 的方案,所以异常的大胆,就一直发问题给 AI,应该是当时比较先进的模型 Gemini。但是后面又发现了许多低端的训练资源可以白嫖获取,稍微用量大的显卡也应该通过租用服务器得到(也就是说在本机上装载 Ubuntu 不那么必要了,并且当时我的显卡,入门款的 RTX 5060 也没有好到需要专门配置系统给他使用)。
再然后就是一个很重要的转折点了。由于笔记本电脑买的太便宜了,结合 Windows 11 到处拉屎的特点,我的笔记本变得极其卡顿,于是下定决心安装一个本地的 Linux,而不是再通过硬盘——因为硬盘需要占用一个槽位,而那样我就没有办法插两个硬盘进行拷贝了,并且每天出门都携带硬盘总还是有点招摇的。于是干脆直接在本地部署了,那么发行版的选择就是一个重要的决策了。
抉择:发行版大逃杀
提示:发行版无高下,只有 match 与否,只要你用的顺手的发行版就是最好的发行版,与其折腾那些发行版特性不如赶紧沉淀技术。
更多的关于操作系统的批评可以看笔记站的随笔
当时看了非常多的视频来帮助决策,B 站的和油管的,最后我是通过排除法来进行选择的:首先绝对不能是 Ubuntu,因为我深知 snap 的危害和那个系统的无聊程度;其次是不能是 Arch 及其衍生版本(起码不能是本体),因为 Arch 用户每天到各种 Linux 话题底下发 btw,非常讨人厌(虽然最后我使用了 CachyOS 并且觉得非常舒心);最后,它最好能够比较稳定,因为我不那么喜欢去适应最新的版本特性,或许是在 Python 和 AI 研究那里受到的伤害太多了吧,因此一个发行版就变成了一切的答案,NixOS。
很多人说 NixOS 的门槛非常高,不仅需要学习一门额外的语言还需要一个良好的网络环境,但是我想说,作为一个应该安装了五六次 NixOS 的人,其实安装的网络环境只需要学会添加镜像或者使用一条 USB 线共享网络,安装是非常容易的。剩下的步骤如果你不想学习 nix 语言的话让大模型去写就好了,现有的大模型撰写配置文件基本上没有任何问题,而且你通过阅读它写好的配置文件很快就能熟悉对应的接口和语法(本质上这是一门非常简单的语言,根本不像大多数人说的那样学习曲线陡峭,陡峭的原因基本上来源于之前的大模型不够强大以及文档太少了)。没有洁癖的话更是看都不看,提完需求直接 rebuild,能用就行。
它通过声明式的配置保证了系统的几乎一切都可以通过自己的 nix 代码配置,一切都是你的掌控范围,并且有很好的 generations 机制保证只要有一个稳定的构建版本出现,你基本就不用担心它会挂了。而且可以通过 git 来管理配置文件从而在所有的电脑上面都复用,这一点真的很吸引我,因为我始终有一种换代的焦虑:电子产品没有办法使用非常久,一定会发生更换,那么到那个时候,迭代成本和可掌控就变得非常重要(换过手机的都知道,重新装软件、确认所有自己的文件资料已经转移和拷贝是非常费时费力的)。因此我直接就选择了 NixOS,并且直到一年后的今天仍然在使用它撰写现在这篇博客。
可以说它确实很稳定吧,是我使用最长时间的发行版,中间除了我自己的大更新以外需要 rebuild,根本不需要操心系统挂了的问题。但是用下来缺点也是不少的,其中一个很明显的缺点就是不遵循 fhs 架构——要知道很多软件是依赖 fhs 运行的,不遵循 fhs 意味着你需要在使用软件的时候付出比其他普通发行版更多的努力(动态链接器的路径不同),而且还会影响许多工具链的正常工作,比如环境搭建的时候需要付出额外的微调管理成本(对于 Python 极其明显,Rust 和 Go 会相对摩擦小)。还有就是多版本共存时的占用了,虽然 NixOS 已经做了对应的优化,对于相同版本的软件进行指向而不是保存多份,但是仍然占用较大,影响了我的文件存储(512 GB 真的伤不起)。再然后就是包的问题了,看似有很多的包但是大多数都是孤儿包并且质量很差,用起来其实不如使用 flatpak 和 appimage 那些版本。
好处是在这一深入了解系统的过程中,逐渐对系统有了一定的掌控,最后将 Windows 踢出我的使用生态,台式机也转向了 CachyOS。至于为什么是 CachyOS,原因也很简单:性能优化好,有专门的内核优化方便我打游戏,是 Archlinux 的衍生发行版,因此软件是足够新的(到这个时候我的思想已经有了足够大的转变,我是一个每天电脑不离手的人,我为什么要担心滚挂,拥抱变化才是一个好的态度,并且只有采用最新的软件我才能及时给上游的项目维护者提反馈促进他们的开源。至于老生常谈的滚挂和 AUR 投毒事件,我认为只要对于自己选用的软件进行合理的管理,认真阅读 PKGBUILD 防投毒,安装备用 LTS 内核和快照,滚挂在如今也是比较困难的事情了)。至于稳定性,其实正常发行版的稳定性都是有的,只是粒度问题。类似 NixOS 那种类型的稳定性,对于个人乃至绝大部分企业来说是不必要的,即便有强要求原子稳定性的情况,完全可以结合 nix 语言而不是直接引入一个发行版。
结合当前 Agent 强大的能力,我认为撰写一个快速安装脚本来帮助恢复环境也不是多么困难的事情了(这与 NixOS 最大的卖点有些抢占生态位,也是我下定决心未来弃用 NixOS 的原因)。不过我还是要说,正是得益于长时间使用 NixOS,我对于系统的控制是比较敏感的,只要是装了什么软件在系统里面,我一定会让 Agent 记录在对应的文档里面并且添加一个数据库维护,这有效控制了信息熵的扩大。
下面这张图片可以很好地说明我的发行版使用历程:

补充一点吧,选择 Arch 系还有一个很重要的原因是社区生态,对的就是社区生态。虽然传教士小鬼很多,但是里面确实也不乏认真帮助别人的技术大牛,你所遇到的问题可以被很快的解决(比如很多人一提到 Arch 就会说 ArchWiki 多么多么好,但是我想说,有大模型的话其实工作量被精简了相当多,直接让 AI 检索然后反哺的效率是大于自己啃 Wiki 的,不如说 Wiki 也已经被参数化了)。而 NixOS 由于一些原因(似乎有一些社区政治的发生),整个社区实际上不那么团结而且存在大量低质量包和残余的各种 issue 其实无人问津。就拿我自己举例:我用某个软件的 nix 包时遇到了 bug,反馈到对应项目的仓库,维护者的回复是没有相关的环境、并不清楚问题;后来我又发现,打包者技术确实不过关,打包的时候引入了一些额外的错误,而且一些早就在最新版修好的问题,nix 打包者也没有 follow 上游的更新。
折腾实录:桌面、编辑器与虚拟机
谈到 Linux 使用,最先让大多数人注意到的就是桌面环境了。美化桌面环境然后发一张 fastfetch 的截图成为很多人使用 Linux 的源动力,这并不是不好,相反这很大程度上促进了 Linux 推广乃至桌面环境的发展。我甚至认为我去年入坑 Linux 是刚好踩到了时代的转折点:既有 LLM 帮忙,桌面环境也有了很大的优化,很多很好的教程如雨后春笋,就连兼容层也有了很大的进步(参考:如何使用 NixOS 玩明日方舟),赶上好的时代真是相当的幸运。
关于折腾桌面环境我也花了一些功夫,前面也提到过,一开始是使用 Mac 风味的 KDE,然后由于需要一个支持 vim-mode 的 WM,也就是一个能够自由分屏、键盘流、平铺式的桌面管理器,于是我直接选择了当时大火的 Niri 搭配有专门做适配的 Noctalia 组成了 3N 的配置(NixOS + Niri + Noctalia)。有了 Linux 环境之后不得不品的还有 vim/neovim 这类文本编辑器,通过减少鼠标的使用极大地加快了开发速度,长时间使用之后,我也配置出了一套自己的快捷键体系。
还有就是如何将自己的项目用 Git 管理然后适配 fhs 架构,于是可以很好地精简本机的存储,以后迁移可以省下很多的时间。再然后就是对于 CLI 和 TUI 的疯狂青睐,由于 GUI 软件在 NixOS 上的诸多不便,我自己开发的时候就会更加偏向添加 CLI/TUI,并且尽量使用 Go/Rust 这些静态编译的语言以减少系统摩擦。
还有就是对于 KVM/QEMU 的了解。我一直知道有 QEMU 这个项目但是并没使用过(当时帮一位同学配置过具身智能项目的环境,里面用到了 ffmpeg 库,由于上游的一些操作导致这个库当时没法兼容,只好用了一些手段绕过。后来才了解到这个库作者有多强,他的另一个作品 QEMU 同样是享誉世界的开源项目)。后来稍微了解了之后,出于对 Linux 下虚拟机性能的好奇心,我安装了 KVM/QEMU/virtual machine manager 等,成功的补上了全 Linux 的最后一块拼图,也就是轻度的 Office 使用和腾讯会议共享屏幕这类需求。
(出于各种原因 Linux 下的 Office 相关包其实并不好用,存在各种字体漂移和显示问题;腾讯会议更是顶多本机共享一次屏幕,只要稍微波动失效了之后,重新共享是一定失败的,但是看别人共享倒是没什么问题。与之相对比的就是字节系的飞书,由于是校友企业我也白嫖使用了三年相关应用了,感觉良心的多,屏幕共享完全没压力,包括流畅度感觉都要高于腾讯会议,宇宙厂 > 鹅厂有没有懂得,果然搞技术还得是年轻人。)
尾声:工具而已,殊途同归
许多人对于 Linux 的态度是敬而远之的,认为其使用过于困难,只有技术精湛的程序员才会使用,实际上这大错特错。在计算机的世界,一切都是工程,工程无法离开人自己诞生,即便是 LLM,也是在人的命令下工作。那么从智力的回归理论上来说,一定不会有一个能够享誉世界的项目高明到正常人在付出努力后无法使用的情况。事实也支持这个论断:许多人只是一直装着不同的发行版,研究着怎么把系统配置的漂亮,完全没有去真正深入的了解底层的逻辑和利用 Linux 的优势去从事开发工作,但是他们依旧很快乐,因为他们只是把安装和配置 Linux 当作了一种生活的调剂,一种难得的乐趣。人对于觉得乐趣的事情在当时是不觉得困难的,因此很快也得到了收益——他们确实自己用上了 Linux。
再往深里想一层,开源社区大概是这个世界上最接近我心中共产主义理想形态的东西:生产资料(源代码)公有,人人可取、可改、可再发布,劳动的成果(软件)按需分配,几乎任何人都用得起。它和我从小到大被灌输的、只存在于教科书里的那个共产主义完全不同——它是真实的、由无数人深夜用键盘一点一点垒起来的。当你 fork 一个项目、提一个 PR,或者只是在别人的 issue 底下留一句有用的回复,你就成了这个共同体的一分子。商业闭源世界里,公司把代码锁进保险柜;开源世界里,大家把成果摊开共享,谁需要谁拿去。这种精神让我觉得,理想主义大概没有死。
不过对于大部分非计算机的工科同学,由于大部分软件的 Windows 强绑定,基本上是没有办法很好地完全 ALL IN 了,虚拟机终归还是有些麻烦的。
写到这里,其实写作热情已经消退了,因为实在是没什么可写的了。对于计算机来说,操作系统无疑是重要的,但它归根结底应该为使用者服务,终归只是一个工具罢了。不同的发行版用到最后基本上也是殊途同归(也就是一些小特性的区别),如何用它来进行开发和生产才是关键。在这一方面,我有些害怕也很愉快地知道——我还有很长的路要走。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!