我对新生的呼吁之一是,尽快使用Linux。私下很多同学问我,为什么用Linux,很重要吗?简单来说,我的回答有三点:

专业性

我们是学习CS的人,不仅仅是计算机的使用者。尽快了解计算机系统的各种知识非常重要,而如果只用Windows则会有很多的局限性。Linux是开源系统,学习它有助于我们更了解操作系统的基础原理与技术。Windows不开源,它是没办法讨论学习的系统。

效率

Linux的使用模式与Windows的可见即可得模式完全不同,前者效率更高。开始的时候大家很疑惑,总是觉得不可思议,怎么老是在一个小黑窗里面敲打键盘怎么可能比五颜六色拉拉鼠标高效?这里可以举很多的实例,希望看了帖子的同学帮我补充。简单的一个例子,如果删除五千个文件,是拉鼠标快,还是敲一个命令快?由此可以引申出相关的实例,比如,要删除某一个时刻之前建立的大于多少m小于多少m的文件且分布在不同子目录下的文件怎么做才方便呢?当然是写一个脚本来帮忙了。

开源文化

我把使用Linux是投身开源文化(社区)的起步。关于开源文化,请看我之前说的 。另外,怎么在一种持续可发展的平台上建立自己的技术体系是值得思考的问题,在这个帖子我也说到了一些,现在看来似乎论述得并不够。

写的很快,可能不够严谨。希望有兴趣的同学补充、讨论。一句话,还是忽悠所有的新生,无论AI还是NE还是CS,Linux尽快用起来。

    觉得可以从我们与计算机打交道的方式来看,大致上可以分成这两个话题讨论:关于图形用户界面(GUI)和命令行界面(CLI);关于商业与开源。

    倒不是说 Linux 效率就一定更高,关键的在于它背后的 CLI 的操作模式和 Unix 哲学。Linux 下 CLI 和 Unix 哲学的贯彻可以说是甩其它的系统好几条街。在现实很多不确定性之中,CLI 很多时候不能很好地覆盖一些直觉的问题,所以需要 GUI(现在电脑也不只有字符终端)。

    程序员的出发点是技术的深入,很难去做那些兼容世界的众多不确定性的问题,以此为代表的 Linux 也更重 CLI 的部分,GUI 相比于 Windows 和 macOS 来看是比较落后的。

    GUI 的关键在于一种兼容,更贴近与人的直觉。Windows 一开始就往大多数用户的日常直觉的需求去靠拢。它的名字本身就叫 Windows,也代表着它一开始是强调 GUI 方向去发展,甚至连一个好看好用的终端工具都没。这在商业上是非常强势,鼓吹 GUI 之下,直接占领了绝大部分的江山,形成垄断优势。

    只有 GUI 并不能代表一切,特定的 UI 局限于特定的场景。面向商业的 Windows 也由此搞出了很多奇奇怪怪的 UI,加之考虑历史遗留的兼容问题,就像一个大杂烩,结果连直觉的问题也没有很好地处理好。一个简单的软件堆满了各种按钮,更新一个版本按钮位置又得变化一下,用起来也各种懵逼。因为这样的历史包袱,它存在许多浪费学习者时间的因素,且因为是闭源系统,在其下讨论和研究计算机的组成与学习,就像是纸上谈兵。

    与电脑打交道不可能只有 CLI 或者只有 GUI。人最终是靠下意识的直觉去与电脑打交道,同时也需要配合 CLI 去解决许多计算机本身擅长解决的问题。即使是极致设计角度出发的 macOS 也有一个 Terminal.app。

    可以说 Mac 是两者优势的综合体,而作为程序猿,如果只在 macOS 环境下工作学习,没有深入使用 CLI 的经验,很难体会到 CLI 的高效。所以说,走程序的道路,肯定离不开 Linux 的折腾学习的。

    随着硬件性能的提高,移动互联网占领强势地位,如今在日常需求这一领域早已被 iOS 和 Android 瓜分,PC 更多定位是面向专业化的工作工具,工作的重心也渐渐从客户端走向浏览器,UI 相关的领域也逐渐被自带跨平台属性的 Web 前端技术蚕食,直接原生桌面开发的效益越来越低。

    Windows 在 GUI 领域的垄断优势已经不在,微软挣扎几年搞的 UWP 平台也不温不火,于是也开始拥抱起了 Web。在这个背景之下 Linux 体系在 GUI 的弱势也能靠此弥补,所以说现在在 Linux 也是可以比较舒服地使用的(至少在编程方面的需求已经完全覆盖了)。

    另外,从 WSL 翻译 Linux syscall 到 WSL 2 直接跑 Linux 内核,还有 VSCode,TypeScript,甚至为了优化 Wondows 的CLI 体验着手开发 Windows 下的终端软件 Windows Terminal 等一系列的动作可以看出,微软早已在开源方向靠拢。在人类知识开放共享的大背景之下,软件领域的商业拥抱开源也是一个趋势所在。

    另外还想到的是,国内的巨头像微信这种防火墙下的畸形产物,也无不依赖着 Web 技术的方方面面(比如说在安卓端的X5内核只是定制的 Chromium),抱着一种模仿的姿态,带着商业的负担,注定着难以在计算机核心技术领域中搞出大风浪。

    由此可见,开放最终会战胜封闭,拥抱开源才是明智之举~

    21 天 后

    第一次接触Linux的时候,装了Ubuntu,切身感受就是:打开了新世界的大门。

      wzpan 我也是如此!而且,走进了这道门就不想回头了。

      yu178 像我这种不怎么用Windows的人来说,真的随意吧。

        yu178 哈哈,探索未知这种事情也很难在一开始就规划好的啦,计算机的优势大概就是有机会能反反复复地 debug了~

        师兄,感谢你!我的linux已经安装成功了!但是在你step2最后推荐的那篇用双系统安装而不是虚拟机的教程中,在根目录分区时突然出现/root分区,好像/root是不用分的?我有点搞不懂,又或许是我错了😂

          yu178 这时候得艾特一下作者@gou4shi1 🌚
          /root 是 root 用户的主目录,一般不用挂到特定的分区吧

          Bintou 是拉鼠标快,还是敲一个命令快?由此可以引申出相关的实例

          例 1 :将项目代码所有以 .js 为后缀的文件全部重命名为 .ts 后缀

          for file in src/**/*.js; do
              git mv "$file" "${file%.js}.ts"
          done

          命令行解放生产力,不用在图形界面一个一个文件重命名了😀


          例 2 :在项目代码所有以 .vue 为后缀的文件中,将代码中的 <script> 替换为 <script lang="ts">
          比如我有一个文件叫 test.vue ,它的内容类似

          <script>
          import Vue from 'vue';
          
          export default Vue.extend({});
          </script>

          这样的文件有很多,可能几百个。我想全部替换 <script lang="ts"> ,只需要在命令行运行如下命令

          sed -i "" "s/<script>/<script lang=\"ts\">/g" `grep "<script>" -rl src/**/*.vue`

          一键完成所有操作😀

            hsxfjames 太溜了,最近刚好开始入门 ts,然后,文件还不多,还没达到那个深入学 shell 写命令的阈值,就手动重命名了🤪

            5 个月 后

            请问各位Linux怎么入门的呢?我一直用的Windows系统,最近想换成Linux系统,主要是csapp的讲解都是基于Linux的。可是当我看到一篇180多页的Linux命令行教程的时候,我就放弃了。这个一般人根本玩不转啊

              freshman
              学Linux的第一步就是用起来!没必要完全看完教程再用,就好比从来没有人看完电视机说明书才看电视一样。要相信Linux还是有“人性”的系统。推荐看看Hahack的教程,比较短,很久以前在学院131讲过一次。

              freshman 同楼上,放开手脚搞就对了,出问题解决不了的话可以一起看

              Linux 就像一座山,看起来荆棘遍布,但其实过去有很多人爬过,并且留下了地图,带上你的刀,大胆地去闯就好啦

              1 年 后

              看到老师今天在级群分享了这个话题,想起今天挺感慨的一件事。

              大概是,刷文章时遇到一个叫做 patch-package 的 npm 包,然后分享给了同事,大家惊叹于其设计的nb。想来,如果之前有玩过 Linux 的话,应该很容易联想到其中的 diff 和 patch 工具,以及依赖它衍生出来的 Git 等等,这个东西也是它在前端生态的一个衍生产物;若之前未有接触,可能会很懵逼为何它的设计如此复杂,又有何考虑,可能在细节中迷失乃至于失去耐心。

              或许可以这么说,Unix 与 Linux 在某些角度大概也是计算机历史长河中的一点脉络所在。关注事物的本源,因而也得以源远流长。

              freshman
              我觉得linux最多的几个功能如下:
              1、你可以对照成windows的
              打开系统盘 打开文件夹 查看文件 编辑文件 右键查看属性 删除文件 移动文件
              2、查看进程 查看网络情况 等

              windows就是鼠标点点点 linux就是命令行执行吧 当然linux也有gui ,但是一般都不会用到gui、除非是某种特定场景吧
              那么这些命令就是类似于
              1、cd cat vim ls rm move....
              2、 nestat ps ifconfig
              等。
              然后这些命令 在windows也可以用命令行去实现 你可以对照看看 都是什么命令,这样子你就更容易理解linux。

              当学会这些就能日常使用了,对于不同内核可能有不同的命令 比如像apt yum ifconfig等

                © 2018-2025 0xFFFF