第一次用命令行是在大学的时候,Linux实验课。老师说”在这个黑窗口里敲命令”,我敲了ls,然后敲了cd,然后删掉了一个不该删的文件。

那时候觉得命令行是上古遗物,会被淘汰的。现在回头看,命令行不仅没被淘汰,反而成了程序员和高级用户的标配技能。

这条认知转变花了我很多年。

为什么命令行让人害怕

命令行让人害怕,主要是因为它不直观。

图形界面告诉你”这里有个按钮,按下去会发生这个”。你看得见,所以有安全感。命令行只是白纸黑字,什么提示都没有,你得自己知道该敲什么。

这种”不知道该敲什么”的感觉很糟糕。像是在黑暗里摸索,不知道出口在哪里。很多人学命令行学一半就放弃了,不是因为太难,是因为不知道学来干嘛——图形界面明明够用。

我的经历是,学命令行最有效的方式是”先用起来”。不是为了学命令而学命令,而是遇到一个具体的、图形界面搞不定或者搞起来很慢的事,然后用命令行解决它。

比如,我需要在五十个文件里搜索某个关键词,图形界面的搜索功能每次只能搜一个文件夹。这个时候命令行的一句话就搞定了:

grep -r "关键词" /path/to/folder

用过这一次,就知道命令行能干嘛了。之后遇到类似的场景,自然会想起来。

命令行的思维模式

用多了命令行之后,我开始理解它背后的思维模式。这种模式跟图形界面很不一样。

第一,组合优于粘合。图形界面里,你用鼠标点击完成一个操作,这个操作就结束了,下次同样的操作还得再点一遍。命令行里,你把几个命令组合起来,形成一个管道,这个管道可以保存下来复用。

比如,我想找出项目里所有包含”TODO”注释的文件,并按修改时间排序:

grep -rl "TODO" . | xargs ls -lt | head -20

这个命令我可以存成一个脚本,下次想不起来怎么写的时候翻一下就行。

第二,可复用优于临时方案。图形界面里的操作往往是临时的,这次点了,下次的同样操作还得重来。命令行里的操作天然是可复用的——你敲的命令可以存起来、分享出去、自动化执行。

第三,文本优于二进制。命令行处理的都是文本,文本是通用的、开放的、可搜索的。图形界面里的数据往往是特定格式的,导出迁移都比较麻烦。

这个”文本优于”的原则,不只是命令行适用,日常生活中也很有用。比如我用Markdown写笔记而不是Word,用CSV而不是Excel(除非需要复杂计算),用纯文本配置文件而不是图形化配置界面。

命令行让我重新理解计算机

用命令行用多了之后,我对”用计算机”这件事有了新的理解。

图形界面是一种”伪装成简单”的复杂。表面上点击就能完成操作,但背后隐藏了大量的抽象和妥协。开发者为了让操作看起来简单,把很多细节藏起来了。用户不需要知道发生了什么,只需要知道怎么点。

命令行是一种”透明”的复杂。所有东西都是可见的,没有隐藏,没有magic。你敲的每个命令都是真实的操作系统调用,你操作的每个文件都是真实的文件系统路径。这种透明性让你真正理解计算机在做什么。

举个例子,我以前用图形界面的压缩工具压缩文件,从来不知道压缩格式有什么区别。用了命令行之后,才知道tar和zip的区别,才知道gzip和bzip2的差异,才知道tar.gz和tgz是一回事。这些知识在图形界面里永远不会接触到。

命令行的局限

当然,命令行不是万能的。

需要大量图形交互的操作,比如图像编辑、视频剪辑,用命令行就很不现实。图形界面的”所见即所得”在某些场景下确实是优势。

另外,命令行对新手不友好,这是事实。图形界面降低了学习门槛,这是它的价值,不能因为命令行更”高级”就否认这一点。

我的观点是:两种工具各有适用场景。日常操作用图形界面没问题,省精力。但遇到重复性高的、批量处理的、需要精确控制的场景,命令行是更好的选择。

关键是知道什么时候该用什么工具,而不是非此即彼。

命令行教会我的通用道理

最后说一个有意思的发现:命令行的一些原则,其实可以迁移到其他领域。

“可复用优于临时方案”——这个原则用在工作流程上,意味着要建立模板、建立流程、建立文档,不要每次遇到同类问题都重新想一遍。

“透明优于隐藏”——这个原则用在沟通上,意味着要尽可能让信息透明,不要靠”我知道就行了”来维持效率。

“组合优于单点”——这个原则用在团队协作上,意味着要把独立的工具和流程组合起来,形成一个高效的系统,而不是一个工具解决所有问题。

想明白这些之后,我觉得命令行不只是一个工具,它代表了一种做事方式。这种方式强调可控性、可复用性和透明性,这些在任何领域都是好东西。

现在让我回到命令行——有个服务器的SSH连接断了,我要去看看是什么问题。

大概是网络波动,也有可能是服务挂了。先ping一下,看看通不通。

种下你的想法

在花园里留下一条评论,和这篇文章一起生长。

COMMENTS