问题

为什么总有人极力推荐使用命令行操作而非图形界面?

回答
这么说吧,你有没有觉得,当你在手机上点来点去,想做一个稍微复杂点的操作时,经常会卡壳?或者说,你想对很多文件做同样的事情,比如批量重命名,用鼠标一个个点,是不是简直要抓狂?命令行之所以能让一部分人“上瘾”,甚至不遗余力地推荐,是有它深层次的道理的,这背后牵扯到效率、灵活性、可控性以及一种更深层次的理解。

效率,不只是快一点点那么简单

想象一下你在电脑前,需要整理一个项目文件夹,里面有几百个文件,需要根据它们的创建日期、类型来分类,并且可能还需要把某些文件的名字改一改。

图形界面 (GUI): 你可能得打开文件管理器,一个个文件夹点进去,选中文件,右键菜单里找“重命名”,然后手动输入新名字。如果数量多了,还得借助一些第三方软件,下载安装,再学习怎么用。这过程,不说别的,光是鼠标的移动和点击,就消耗了大量时间和精力。而且,一旦你发现有个批量处理的功能没做好,还得一步步撤销,重新来。
命令行 (CLI): 在命令行里,你可能只需要敲几行命令。比如,要查找所有以 `.jpg` 结尾的文件,并把它们复制到另一个文件夹,可能就是一行 `cp .jpg /path/to/destination/`。要批量重命名,很多操作系统都内置了强大的 `rename` 或者可以通过 `ls` 结合 `awk`、`sed` 等工具实现,几行代码下去,几百个文件瞬间搞定。而且,你可以随时停止,修改命令,再执行。

这种效率差异,在处理大量数据、重复性任务或者需要精细控制的时候,会呈指数级放大。命令行更像是一个熟练的工匠手中的精密工具,而图形界面更像是大众化的流水线产品。工具越精良,工匠能创造的价值就越高。

灵活性与强大的组合能力

命令行最大的魅力之一在于它的“组合性”。你可以把各种小程序、命令像乐高积木一样组合起来,创造出强大的工作流。

管道 (Pipes) 和重定向 (Redirection): 这是命令行里最核心的概念之一。你可以把一个命令的输出(屏幕上显示的内容)直接作为另一个命令的输入。例如:
你想查找某个日志文件中包含“error”的行,并且统计一下有多少行:
`cat your_log_file.txt | grep "error" | wc l`
这里,`cat` 命令读取文件内容,`|`(管道)将内容传递给 `grep` 命令,`grep` 过滤出包含“error”的行,`|` 再次将结果传递给 `wc l` 命令,计算行数。这几个命令组合起来,完成了非常具体的操作,而且非常高效。
脚本化: 你可以将一系列常用的命令写成一个脚本(`.sh`、`.bat` 等文件),以后只需要运行这个脚本,就可以自动化完成复杂的任务。这对于开发者、系统管理员来说尤其重要,可以极大地提高工作效率,减少人为错误。你可以写一个脚本来部署服务器,备份数据库,编译代码,甚至自动化你的日常电脑维护。
精确控制: 图形界面往往会抽象掉很多底层细节,你可能不知道某个操作具体做了什么。而命令行让你知道你输入了什么,系统执行了什么,以及为什么会出现错误。你可以精确地指定文件路径、操作参数,甚至是一些只有在命令行才能实现的特殊选项。这种可控性,在处理服务器、网络设备等场景下至关重要。

更少的资源占用和更广阔的应用场景

资源占用: 图形界面需要加载大量的图形元素、窗口管理器、事件处理系统等,这会占用不少内存和CPU资源。而纯粹的命令行界面则非常轻量,它主要负责文本输入和输出的交互。在资源受限的环境下(比如早期服务器、嵌入式设备),或者当你需要最大化性能的时候,命令行优势就非常明显。
远程操作: 大多数服务器和网络设备并没有图形界面。你管理它们唯一的途径就是通过SSH等协议连接到它们的命令行。如果你熟悉命令行,那么管理远程系统将变得非常方便和高效。
自动化与部署: 现代软件开发和IT运维离不开自动化。持续集成/持续部署(CI/CD)流程、自动化测试、配置管理等,都高度依赖命令行工具。像Docker、Kubernetes这些现代化的技术,它们的核心操作和配置都离不开命令行。

学习曲线和“黑客”的浪漫

当然,没有人会否认命令行有学习曲线。初学者看到一堆陌生的字母和符号可能会感到畏惧。图形界面之所以普及,就是因为它直观易懂,上手门槛低。

但是,一旦你跨过了这个门槛,你会发现命令行背后是一种强大而优雅的逻辑。它教会你如何与计算机进行更底层的沟通,如何理解操作系统的运作原理。这是一种“掌控感”,一种“技术能力”的体现。对于那些喜欢钻研技术细节、享受解决问题过程的人来说,命令行提供了一种不同于图形界面的乐趣和成就感。它有点像一个老派的机械表,虽然现代的电子表更方便,但机械表内部精密的齿轮咬合、能量传递的逻辑,本身就充满了魅力。

总结一下,那些极力推荐命令行的人,并不是说图形界面一无是处。他们只是看到了命令行在特定场景下无与伦比的效率、灵活性和控制力。这是一种对效率的极致追求,一种对技术深度的探索,也是一种对更强大工具的认知和运用。当你需要处理大量重复性任务、进行系统管理、开发自动化流程,或者仅仅是想更深入地理解计算机如何工作时,命令行会是你打开新世界大门的一把钥匙。

网友意见

user avatar

现实中从来不会有人认为手语是比文字语言效率更高更方便的沟通语言。


但却有题主认为用手挥动鼠标是比键盘敲命令更值得推崇的与计算机交流方式。我觉得这才是真正奇怪的思路。


图形界面仅仅在被严格定义的有限的场合具有优势,在绝大多数场合都不会比命令行的表达能力更强。


对于浅度用户来说也许那严格定义的有限场合就已经满足了他对计算机的全部需求。然而对于专业人员很少有说完全不用键盘的。

user avatar

因为对专业人员来说,命令行的确比图形界面强大,方便——就好像专业人员喜欢使用术语而不是拿大白话展开让每个人都“懂”一样。


当然,强行“拽”术语甚至误用错用术语搞后现代文本风,那就是另一回事了:这种行为值得鄙视;但必须注意,该鄙视的是拿术语装X的行为;甚至,和普通人说话时该说人话他们不说人话你也可以鄙视;但对于想成为内行、需要和同行高效交流的人,提倡术语才是明智之举



鼠标是一种更偏模拟量的输入设备,它在输入模糊性的“大概这里”“大概那里”之类信息时非常高效——因为人的思维本身就有一定的模糊性,转换成语言文字甚至具体的纵横坐标等精确指令,反而带来很大的思维负担。


因此,在画图/修图等软件里,鼠标往往比键盘更好用。因为我们真正需要修的可能是画面中模特的“鼻翼两侧”,用键盘就要转换成明确的(81,97)开始的一块不规则区域——可以做到,但为什么不可以是(82,101)呢?


甚至,我该怎么知道模特鼻翼左上角坐标是(81,97)都是个难以解决的问题。这时,不需要动脑子直接可以指上去的鼠标,显然要优越得多。


以上,就是“只能用大白话拽术语纯属装X”的场景。



计算机本质上是个数学机器。精准的使用术语是一个门槛较高的工作。

此时,就好像输入法的联想功能一样,设计一个“上下文菜单”,帮用户选择合适的命令,自然就能大幅提高他们的输入效率、降低记忆负担。


这种情况下,图形界面也是优于命令行的。



但,只要稍进一步,情况就悄悄发生了变化……

和输入法的联想功能一样,如果你需要输入的东西稍微生僻、它就是“联想”不起来呢?

做计算机命令方面的联想,比输入法还要难得多。毕竟后者有海量语料库(但作为专业输入者,你还是需要掌握生僻字的输入方法,不能依赖联想)。但在某个界面上(比如AutoCAD),可行的上下文甚至可能有无限多种。


除非在某个极为狭隘的领域做一些单调重复的简单工作,否则,只依靠程序员拍脑袋给你拍出来的“上下文菜单”,是不可能顺畅完成日常工作的。



你需要做的工作越复杂,“智能联想”能提供的帮助就越少。

同时,为了提高“智能联想”的命中率,我们写程序时,往往不得不尽量减少用户的可调参数——比如,为了照顾普通用户,我们不敢说去除噪点(参数xx半径yy强度zz)、色彩增强(RGBα颜色通道上的各种操作以及另外一大堆参数)等等等等,而是把所有这些放到一起、搞出十几个固定风格让用户选,还告诉用户说这种高科技叫“一键美颜”,结果输出五毛钱特效……你要开照相馆靠这个能应付挑剔的专业顾客?

此时,智能联想不光无法提供帮助,反而成了专业用户的阻碍——想想如果要你用美图秀秀做商业海报,你会不会骂娘呢?你会不会想念PS那吓死普通人的专业菜单?


显然,一旦面对的问题复杂到一定程度——既然你已经是数学家/科学家/计算机专家了,为什么不直接用精确无歧义的术语呢?



把术语都日常化,的确便于科普;但到了学术交流阶段,不说“扭矩是xx牛顿·米”而说“大概像你手掌上放xx本书时手肘受到的力”,不仅是浪费与会专家的时间,实际上也不可能说清楚你真正想表达的“效率-扭矩曲线”这种高端玩意儿了。


计算机领域也一样。


以上是受 @pansz 朋友的启发,这才能够说的一步到位。

pansz:为什么总有人极力推荐使用命令行操作而非图形界面?


以下是原帖内容。因为当时没整理好思路,因此说的比较凌乱。不看也罢


举例来说,我有个硬盘坏了,读取速率经常掉到2m以下,还频频出错。里面有500个G的资料要抢救。拷完得差不多一两天,还得人坐旁边看着,错了停了就重拷,再拷贝时要跳过重复文件(现在还好,win10有跳过文件功能),不然很可能拷到同样位置又出错了。


如果你用图形界面,那么你就需要找一个精确吻合你需要的软件,然后一点……点这下当然很容易,可找软件能累死你,因为这种需求太小众了。小众软件太难找甚至压根没有,就是找到也经常要掏钱买,不过相比搜索难度就不算什么了。


但如果你命令行玩的很熟练,那么很容易就可以组合几个常用命令,轻松完成任务――甚至还可以带断点续传功能、拷完可自动关机。


换句话说,命令行模式的确需要你记忆更多命令、孰知一些通用约定;但这些东西可以作为基础,搭建出任意复杂的功能来。


当然了,这也导致它的入门门槛略高,对非专业用户来说得不偿失;即便专业用户,当针对该领域的软件已经较为完善时,不去用现成的图形界面工具就是舍近求远了。

甚至,组合这类命令本身,往往就要求你有一定的编程基础,对非程序员来说那是加倍的不合算。

当然,如果你已经是程序员,那么学会使用命令行(脚本),起码可以在遇到类似问题时,解放你一两天的时间。


刚才手机答的,现在稍微展开点说一下。


这里有一个图形编程工具,是MIT为儿童学习编程设计的:Scratch - Imagine, Program, Share

你猜为什么它就是比不过python、java、C++呢?


各行各业,做事都免不了要用工具;但工具和工具并不一样。


举例来说吧,你在家做饭,完全可以用这个:

但如果你要开个店卖面条,还用上面那个说明你傻。这玩意儿才值得拥有:

但如果你说我要造面条机……那么你该买的是这个:


很容易发现,越是面向最终消费者的工具,功能就越是单一,操作也越是简便——量面,倒水,一键出面条。弄伤自己?嗯……举起来砸自己脑袋算吗?


越是面向专业人员的工具,功能就越是复杂,操作界面也多了很多按钮/仪表;如果不注意操作规程,就容易不小心弄伤自己。

但是,在付出这些代价的同时,你也得到了极高的生产力、可以做的面条厚薄、宽度的可调范围也大幅增加。


最后,给专业人员制造工具的工具,其复杂度更为“恐怖”,工伤成了家常便饭:

【活着】工伤档案_腾讯新闻_腾讯网

东莞每年因冲床工伤着达数万人 - 上海二锻冲床有限公司


我们再换一个角度。


面条机虽然最终功能单一,但它有机的组合了许多功能,从搅拌和面到面条挤出,一条龙服务……

等等,你说,它也有电机啊,拿来拧个螺丝行不行?


不好意思。它可拧不了螺丝。拧螺丝你得找这个:


你说,还不对啊,这玩意儿能拧任何螺丝、也可以配合各种型号的钻头……面条机能做粉条吗?不都是条状可以吃的东西嘛?


你看,刀锯斧刨锤,这几样凑一块足够做任何木工活了。面条机……


没错,这里还有一个维度:工具的泛用性。


这玩意儿好用不:


好用?我这有个旋翼机,你用它能做飞控吗?

显然不行。做飞控你得找它(以及其它类似的东西):

没错,没那个现成的计算器好用,前者开箱即用,算账全靠它;后者……对不懂计算机的你来说,它和一块砖头没多大区别——还不如砖头好用呢,起码垫脚啦拍人啦拿来就用。这树莓派啊,吃不能吃喝不能喝梳头发都别别扭扭不好用……


但是树莓派有无限可能。


对工具使用者来说,他总是有两个选择方向:方向一是只能做一样的专用工具,方向二则是泛用型的基本工具


专用工具单件学习成本低,使用方便;泛用工具学习成本高,使用不便,甚至常常伴随着危险。


作为生产厂家,你可能会买椅子生产线;但作为一个高级木匠,你肯定选择带锯机、木工机床。因为只有后者才允许你发挥自己全部的专业才能——生产线?我造生产线。

作为木匠,借助木工机床,他是万能的;买条生产线他就只能像没有技术的农民工一样接收半月培训坐生产线旁边当螺丝钉,然后只造同一个型号的椅子(的一个零件的一个面、一个孔)。


换句话说,对专业玩家,学习使用更接近根本、泛用型更强的工具,效率反而是更高的

就好像我们程序员,说白了只会顺序分支循环三种控制结构和与或非三种逻辑——然后借助某种编程语言几十个关键字/运算符表达出来——经过四年学习,便可宣布计算机领域我全能

反之,你要只会玩war3地图编辑器,这个图形界面可强大了——给你八年时间,你能用它清理磁盘吗?


欲速则不达


单件学习效率高的工具,在面对一整个大领域的问题时,往往反而是更难学难用的。

因为做100种家具你就不得不学习使用一百条生产线,每条生产线又有100个位置……你得掌握一万个知识点才可能做出100种不同家具。

再多一种家具?从头学吧。


但如果你学锯刨钻斧,学木工机床,只需掌握至多几十个知识点,你就是万能的。


没错。这里就是图形界面和字符界面设计着重点上的根本不同了。


图形界面就像计算器,你需要什么功能,它就给你什么功能;无论供电、显示甚至长时间不用自动关机节约电量等等,都用不着你操心。


Do not make me think——这是图形界面设计者对它的用户特征的总结。

当然,一旦认为用户需要“Do not make me think”,那么结果必然要走向“禁止用户思考”——除了按钮,你什么都不要知道。让你知道了就说明我“封装”没做好,又劳驾您动脑子了。

久而久之,哪怕你清清楚楚知道后台的一切,你也没办法控制它了——就好像win10饱受诟病的强制更新等机制一样:我笔记本网卡很奇葩,win10驱动下它就是上不了网,只有win7驱动可用;但为了使用win7驱动,我不得不和它那恶心人的“傻瓜机制”斗智斗勇一整天!因为从调查排错到替换驱动,它时时处处拿我这专业人员当傻逼,时时处处给我制造麻烦。最后,强制关闭完整性检查、建立win10版驱动同名目录并给这个目录设置极高访问权,这才阻止了win10做蠢事使得它不再强制把正常的win7换成错误的win10驱动。


如果你确信自己不需要了解背后的原理,确信自己永不必处理软件作者没有想到的奇葩状况,那么傻瓜式的图形界面显然最为适合你。


而字符界面类似树莓派。它不仅给你现成的功能,还给你完成任何功能所必需的基础——你可以把任何现成的功能当成基础组件,用来搭建更酷更炫的东西。


最最极端的例子就是图灵机,或者各种编程语言——没错,这些玩意儿功能简单,简单到了丑陋的地步。以至于仨数字排个序都需要自己写程序才能搞定。

事实上,最最“简单”的机器语言,你得自己做二进制转换;汇编语言可以帮你把“助记符”转换到二进制;C/Java等高级语言可以让你用if/for/class等更为高级的概念直接编程;而更“高级”的脚本语言……你只需像胶水一样把它提供的半成品往一块一粘就好——要什么你就能“粘”出什么。


而命令行的设计思想,就是“搞一种比脚本更高、但比计算器更低的东西”——不,它实际上是把计算器本身都当成一种组件、一个工具,从而允许你自由组合它们。


比如,我可以这样:

call 自动打蛋器 //打出鸡蛋液

call 自动面条机 //加入鸡蛋液做成鸡蛋面

call 电磁炉 //煮面

call iPhone //喊你家的小懒虫起来吃饭


添加细节,调试通过,存成“一键做鸡蛋面.sh”,然后在桌面建立个快捷方式——该吃饭了鼠标一点,一会儿电话打过来你就可以去吃面条了。


如何?酷吧?

N年前,我有张光盘划伤了,数据怎么都读不出来。有个文件时多时少,总是读若干字节就出错。用了当时流行的很多数据恢复软件都读不出来。

但这个故障我很清楚,就是表面稍微擦伤,导致数据难以读出。每次根据激光聚焦点位置的不同,能够读取的数据也各有不同:近一些能读前4k,远一些能读后4k;偏左点能多读接下来的4k,再偏右点又能把尾部4k读出来……总之只要多试,利用激光头的随机误差,就有一定概率能救出全部数据。

可是很遗憾,我找遍了当时各种数据恢复软件,包括很多商业数据恢复工具的破解版,全都无能为力。

后来我都打算自己写程序fseek一把了,忽然想起个主意。于是把光盘路径设定为ftp服务目录,然后用断点续传工具从这个自建ftp站点下载,重试次数无限——这样实际发生的物理行为就是我所期望的场景——果然,仅仅消耗了4、5分钟,就把完整内容读出来了。

当然了,这个其实是用图形界面软件做的。但是这里面有个思想很可贵,就是工具是可以组合起来用的,并不需要别人全给你做出来。有一些基础功能,然后再允许你组合,那么绝大多数任务你自己就可以通过组合搞定。

命令行鼓励你组合使用各种软件——当年的DOS甚至把它们统称“外部命令”——从而得到无限的功能。

只不过,window的命令行是个阉割品,你实际上很难很难借助它粘合各种软件。

这样也好。各种各样的标榜自己可以“数据恢复”的劣质品就可以上架卖了(当然,专业的数据恢复软件还是很强的,只是它可能恰好没有我想要的功能而已)。


再来个例子。

我的笔记本自带硬盘只有320G。对我这种重度使用者来说显然不够。后来又买个1T的希捷deskjet移动硬盘作为补充。但没多久,50G容量的C盘已经满了(当时大部分人分给C盘的容量只有10G左右,很少舍得给20G的,我直接给50G)。

实在忍受不了,买个新硬盘打算升级。
但这个笔记本上有我已经配置好的全套环境,原有的windows还是正版。重新安装实在劳民伤财。

很多高人马上就会想到ghost:把C盘用ghost做个影像,然后把影像写到新硬盘第一个分区;写完用PQ Magic扩大这个分区;然后再在新硬盘上分出D、E区,继续用ghost把旧硬盘其它分区做成映像复制过来——同时按需要用PQ magic扩大分区。

简单说,你得下载(很可能是盗版的)ghost和PQ Magic(其实PQ magic当时已经不支持win7的ntfs分区扩容了,所以你得满世界找替代的、可支持ntfs的软件);然后等着ghost一个个做映像;然后一个个写入映像、修改分区大小……总之,起码5、6个小时离不开电脑。

我的做法是,找个U盘,在上面做Linux live CD。
把新老硬盘同时安装到电脑上(当时就打算用老硬盘做移动硬盘的,所以同时买了移动硬盘盒);使用U盘启动,打开Linux终端,su切换到超级用户(root)。

使用fdisk为新硬盘分区,其中C盘分200G,D、E等分区同样放大;另外又给linux分了几个区,打算做双启动。

然后执行如下命令:
dd if=/dev/sda0 of=/dev/sdb0 bs=16M

dd是Linux下一个强大的数据复制工具;Linux下一切皆文件,因此sata接口上的磁盘a的第0个分区同样可看作一个普通文件,磁盘b情况类似;if=/dev/sda0意思就是以老硬盘最前面的分区为输入;of=/dev/sdb0意思就是以新硬盘最前面的分区为输出;bs=16M意思是一次拷贝16M的数据,这个不同的系统有各自最合适的值,你可以多试几次,看看选用哪个值拷贝速度最快。因为这个命令是把整个分区当文件顺序读写,因此无需频繁寻道,数据复制速度可以一直压着硬盘理论最大值飙车。
dd (Unix) - Wikipedia

还有N个区?很简单,继续往下写dd if=/dev/sda1 of=/dev/sdb1 bs=16M就好了。

然后,继续敲resize2fs /dev/sdb0,它会自动把该分区的文件系统大小调整到和分区实际大小相符。其它分区依此类推。

敲完,存为cpsys.sh,chmod +x,然后多检查几遍,确认没问题,执行./cpsys.sh > cpsys.log

接下来出去逛商场,逛到中午回来,cat cpsys.log | grep Error确认没发生任何错误,关机,拔U盘,拔移动硬盘,启动,一切就和原来一模一样——除了磁盘空间变大之外。

——对不会命令行的你来说,你得知道ghost、知道pqmagic,知道它们是干嘛的、知道它们怎么用(pqmagic不支持了你还得重新找重新学);但对我来说,dd是个日常使用的、熟的不能再熟的普通工具,其它一切一切也都是老熟人。在整个过程中,我不需要学习任何额外知识,“吃老本”就足够了。

因为它们都是泛用型工具。一次投资,终身受益。

说什么IT行业千变万化,说什么IT一日千里,说什么搞IT必须终身学习……
但对掌握了泛用型基础知识的人来说,所谓“日新月异”多半只是新瓶装旧酒——比如说,我敢把ghost叫做“用图形界面打包的、功能单一的dd命令劣化版”,而且的确可以随手用三五行命令把它秒的渣都不剩。PQ Magic同理。

你呢?

什么叫自由?
你所掌握的知识都是你的,可以随意的流淌于指尖,可以轻松惬意的达成你需要的任何目标,这才是自由。
受制于商业软件,人家不给你写你就只能乖乖在电脑前坐5、6个小时;人家不支持了你好不容易死记硬背下来的一切就打了水漂——不会有人真有这么大脸,敢把这个叫“自由”吧?

当然了,我们都知道,面条机是不可能这样组合的。


很简单,并没有一个标准的、为了得到这种自动化而做出的输入输出约定。

因此,哪怕你集齐了打蛋器、面条机、电磁炉、iPhone,你还是召唤不出神龙……哦不,服务不好你家的小懒虫。


图形界面有着同样的窘境:你可以一键做面条、一键煮面;但你必须自己把面粉+水倒入面条机,然后自己把面条放进电磁炉……


这就是我在评论区提到的:你可以勉强用按键精灵去组合图形界面程序,但是你必须考虑界面卡死等等可能。浪费更多机器时间,功能还不稳定。


因为它们压根就没考虑过“程序之间的接口问题”。

而如果你玩的稍微深一些,就知道Windows下的rar、7z等压缩软件,都同时给你安装了个非GUI版本,允许你在命令行通过参数使用它们——允许你把它组合进你的处理流程,这本身就是个极为重要的功能(事实上,很多GUI软件都能接收命令行参数。越是偏工具性的软件就越是不敢忽视这点)


而命令行(特指bash等真正有管道、作业控制等支持的命令行,并不是Windows上那个李莲英……哦不,cmd)从一开始,就考虑了这个协作问题。


学过C语言的,大概都知道main函数有一个返回值,这个值就是给命令行用的(其它编程语言都有类似支持)——0表示成功执行,非零是各种错误码(不同的返回码代表什么也有统一的标准)。

*nix的shell不仅能捕获这个返回值,它甚至还允许你捕获、分析其它软件在标准输出/标准错误上的输出内容,从而达到更深层次的配合。

尤其php、python之类脚本语言,它甚至允许你轻易的把“通过命令行调用其它程序”集成进你的代码(其实C也很容易做到这些,它们甚至有专门的库提供支持)——你完全不必操作字符串、也不必自己写代码完成http下载,丢给grep/wget即可:它们那么强大,你再自己一点点敲一遍,不累吗?


现在,当你买了面条机,你就可以轻易把它们组合起来,从“一键做面条”衍生出“一键做西红柿打卤面”、“一键做酸菜肉丝面”等无穷无尽的功能。


换句话说,命令行牺牲了工具的易用性,提高了入门门槛,以保证其泛用性;而图形界面通过牺牲泛用性,突出了其入门门槛低、易用程度高的优点


当然,理想很丰满,现实很骨感。


命令行的确给“脑子里充满奇思妙想又喜欢捣鼓”的人带来了极大方便;但它本身却因此显得有些复杂了,入门门槛较高。这就使得它成了“专业人员”的玩物,缺乏计算机基础的普通用户只得敬而远之。

很多时候,你必须先是一名程序员,才可能解放命令行的威能;但更多时候,哪怕你就是一名程序员——我只是想做碗面条啊,为什么一定要我先看完这一千多页的鬼手册?


人,总是喜欢偷懒的。

这时候,“点开即用”的图形界面就显得更强大、更方便了。

——我只需要把代码编译成APP,然后挂出去卖就行了;具体的编译步骤、参数什么的,随便选一个不好吗?

——什么破光盘要组合这个组合那个,真有那需求我敲段C/Java代码不就搞定了?

——更多更诡异的需求?买买买!都不掏钱买写程序的不得饿死?


你看,也有道理,对吧。

你呢,你会如何选择?


总之,不同人有不同的需求。单独的一个个图形界面程序足以解决80%以上的问题,而且还不断有新的程序被写出来,覆盖更多的“痛点”。

也许,命令行所致力于解决的那额外20%的问题并不是你的需求;或者你可以忍受一定的不完美、或者你可以等更完美的成品上市。


不过,总有人,总有公司,总有一些业务场景,会遇到“不得不解决20%问题”的时候。

如果你善于组合,那么很可能就能花一两天时间(也可能更长或更短)解决问题;否则,或许你就不得不花十倍百倍的时间从头写出那些基础功能、然后再组合出解决方案——再或者,你也可以提出需求,让软件公司给你定制软件:这个世界上,绝大多数的软件都是组合他人现成的库/程序完成的,不怕多这一个。

这也是为什么office为什么要支持VBA以及微软为何要从OLE到COM到COM+无限次推倒重来……从而把一些“可怕的细节”通过“可怕的编程语言”暴露给无助的非程序员们的根本原因——哪怕因此而导致宏病毒泛滥。

并且,现在Windows也搞power shell了。


没有免费的午餐

要么牺牲易用性来保证泛用性,要么牺牲泛用性来保证易用性——有些困难是本质上的。钱再多,你也不可能两者兼顾。


如果你只需要解决“敲键盘时坐的舒服”的问题,那么千万别理什么椅子生产线什么制造生产线的工具,挑一把让自己感觉最舒服的椅子就行了。

反之,如果你打算自己开家木器厂和别人竞争……你猜如果你这辈子都没见过椅子是怎么生产出来的,几个“小目标”够你赔?

但是,又一个转折,你个做木器厂的,研究汽车发动机干嘛?


当然,这里讨论的是“合理利用手头一切资源”的问题。

也有人觉得敲命令便于装B,另一些人则选择怼这些装X犯。这就是另一回事了。

user avatar

因为命令行本质上是逻辑的文本化描述

同样是文本化描述逻辑的还有代码。这也解释了为什么程序员更喜欢命令行。因为一旦逻辑文本化,那么就可以对逻辑进行抽象,保存,优化,很多人不知道命令是可以保存的,windows 上的bat 脚本见过没?那用记事本打开就是一堆文字而已

别小看这个抽象能力,逻辑是有层次的,当把低层次的逻辑封装起来,就能在更抽象的层次上高效的表达逻辑。而鼠标是难以做到的。

如果逻辑能够保存,就能够获得持久化和分享的能力,以及持续改进的能力,当我们要求计算机执行复杂任务时,往往我们没有办法思考的很全面,这时,如果他人的经验能直接以可执行的文本传播,将节省所有人的时间成本。

通过抽象成不同的层次和持久化,命令行永远能够以一种简单的调用完成鼠标操作远远完不成的任务

user avatar

我用了这么多年命令行,现在倾向于认为,除去极端情况,大部分时候用命令行只是因为gui替代品的交互设计不行,或者人力不足以做出好的gui,没有例外。

比如说我在小公司上班用的命令行工具,模糊搜索的时候fzf弹出搜索框,zsh命令补全的选项面板,以及tmux横竖各种切分窗口,vim各种折叠代码和补全窗口,终究不是在命令行参数,而是在交互设计上下工夫,况且折腾半天也不过是一个poor men's gui,君不见Google微微一笑,掏出了自产的webide全家桶。

很多人举例说“我需要远程登录xxx机器然后用终端编程”,本质上是因为linux的远程桌面功能做的太差,开个x forward就卡成翔,远不如rdp方便,所以只好刀耕火种而已。真正涉及到集群管理的时候,各种monitor panel还是用的web console,大家都是用浏览器点进去,图表动画一应俱全,放大缩小一目了然,哪有什么命令行的事。

至于“用pipe组合各种命令行而不复用组件库”本质上是一个糟糕的实践,只是因为这么多年来习惯成自然,改不了了,大家只好将错就错而已。各种bash自动化脚本配合sed awk鬼画符毫无可维护性而言,历史负担越来越重,谁也不敢动,只好奉为圭臬,老人们再教导下一代的命令行使用者,这是一种循环。

类似的话题

  • 回答
    这么说吧,你有没有觉得,当你在手机上点来点去,想做一个稍微复杂点的操作时,经常会卡壳?或者说,你想对很多文件做同样的事情,比如批量重命名,用鼠标一个个点,是不是简直要抓狂?命令行之所以能让一部分人“上瘾”,甚至不遗余力地推荐,是有它深层次的道理的,这背后牵扯到效率、灵活性、可控性以及一种更深层次的理.............
  • 回答
    关于为什么有人极力想消除目前舆论上的性别对立,这背后其实牵涉到非常复杂且多层面的原因。与其说是“消除”,不如说更准确的说法是“缓解”或“寻求更健康的对话方式”。那些努力这样做的人,他们看到的不仅仅是网上的争吵,而是这种对立可能带来的真实世界的负面影响,以及对整个社会进步的阻碍。我们可以从几个角度来细.............
  • 回答
    你看啊,要说为什么这么多人对韩国电影情有独钟,而且是那种“极力推崇”的程度,这可不是一两句话能概括完的。这背后啊,其实是韩国电影在很多方面都做得非常到位,触动了不少人的心弦。我跟你慢慢道来:首先,韩国电影最让人津津乐道的,就是它那“敢拍”的精神,以及由此带来的题材的广度和深度。 咱们中国观众,或者说.............
  • 回答
    人们对那些极力劝说他人吃素的人心生反感,这其实是一个挺复杂的问题,涉及到个人选择、价值观传递、社会互动以及一些潜藏的心理机制。单拿“牛吃草,妨碍它长肌肉了吗?”这个比喻来解释,虽然有点意思,但未免过于简化了。咱们不妨从几个角度来聊聊,看看为什么会这样。首先,最根本的一点是,尊重个人选择。吃饭这事儿,.............
  • 回答
    关于“为什么总有人捧老三国并且贬新三国”的问题,需要从历史、文学、文化、改编动机等多角度进行分析。以下是一个较为系统的解释: 一、“老三国”与“新三国”的界定1. “老三国”的核心 《三国演义》:元末明初小说家罗贯中创作的长篇历史小说,是中国四大名著之一,以“三国”历史为背景,融合了大量民.............
  • 回答
    您提出的“为什么总有人觉得目前依靠核弹可以毁灭世界?”这个问题,触及了一个非常深刻且普遍存在的担忧。这种担忧并非空穴来风,而是源于核武器在理论上和实践中都展现出的巨大破坏力,以及历史事件留下的深刻印记。我们可以从以下几个方面来详细阐述:一、核武器的超凡破坏力: 瞬间释放的巨大能量: 核武器,无论.............
  • 回答
    很多人认为二战英国海军很弱,这是一种相对狭隘甚至有些偏颇的看法。事实上,英国皇家海军在二战中依然是世界领先的海军力量之一,并在战争初期和中期扮演了至关重要的角色,尤其是在保卫大英帝国、阻止德国入侵以及支援盟军反攻等方面。然而,这种“弱”的说法之所以存在,可能是由于以下几个原因,我们可以从多个角度来详.............
  • 回答
    “为什么总有人喜欢为资本家辩护?”这个问题非常有意思,也触及了社会经济领域中一个非常普遍且复杂的话题。喜欢为资本家辩护的人群构成非常多样,他们辩护的理由和出发点也各不相同。理解这一点,需要我们深入分析资本主义制度的运作、人们的价值观、信息传播方式以及历史文化等多个层面。以下我将尝试从不同角度进行详细.............
  • 回答
    挑起性别对立是一个复杂且多层面的现象,背后可能涉及多种动机和因素。要详细解释这个问题,我们可以从以下几个角度进行分析:一、 深刻的社会历史根源:父权制与权力结构 历史上的性别不平等: 在绝大多数人类历史时期,社会结构都受到父权制的深刻影响。这意味着男性在政治、经济、社会、文化等各个领域拥有主导地.............
  • 回答
    “日本反战败不反战”的说法,虽然有一定的观察基础,但并非绝对准确,也容易引起误解。更准确地说,这种说法反映了对日本社会在二战后的反思程度、对战争的反感以及对特定战争(太平洋战争)的反思上存在的复杂性和多面性。为了详细解释这一点,我们可以从以下几个方面来剖析:一、 为什么会产生“反战败不反战”的说法?.............
  • 回答
    在讨论“为什么总有人为抗战时期的日本(鬼子)洗白”这个问题时,我们需要理解这是一个复杂且敏感的议题,涉及历史认知、情感因素、民族情感、宣传策略,甚至现实的国际关系。以下是一些可能的原因,我将尽量详细地阐述:一、 历史认知与解读的差异 史观的不同: 民族主义史观: 强调国家民族的屈辱与.............
  • 回答
    “台湾自古以来不可分割的一部分”和“外蒙古”在历史叙述中的不同对待,反映了中国在不同历史时期对这两个地区主权主张的侧重点、国际承认情况以及地缘政治考量。要详细解释,需要从历史、政治和国际法的角度来分析。一、 台湾的历史叙述与主权主张的形成“台湾自古以来不可分割的一部分”这一说法的形成,是一个复杂且动.............
  • 回答
    关于二战中日本和德国普通百姓是否“被军国主义政府裹挟身不由己,无力改变,所以无罪”的说法,这是一个复杂且充满争议的议题,涉及历史、政治、道德和个人责任等多个层面。认为他们“无罪”的观点并非没有道理,但同样存在很多反驳的理由。下面我们将详细展开分析,看看为什么会有这样的说法,以及这些说法的背后逻辑是什.............
  • 回答
    你提出的问题非常关键,也触及到了很多关于医学认知和争论的核心。之所以会出现“将现代医学统称为西医,并以此反对中医”的现象,背后涉及了历史、文化、科学、社会等多个层面的复杂原因。下面我将尽量详细地解释这些原因: 一、 历史渊源:现代医学的“西方”根源最直接和根本的原因在于现代医学的历史发展轨迹。 .............
  • 回答
    “拿上冷兵器就能单杀老虎”这种想法,虽然在一些人的脑海中挥之不去,并且有时会成为网络上的谈资,但绝大多数时候,这是一种基于对老虎能力和人类自身限制的严重误判,并可能源于以下几个方面的混合原因:一、 对老虎能力和力量的低估(最核心原因): 压倒性的身体优势: 体型与体重: 成年东北虎(.............
  • 回答
    很多人之所以会觉得“不生孩子人类就会灭亡”,这背后是一个复杂的多重因素交织的心理和社会认知。我们可以从以下几个层面来详细解读:一、 生物学本能与繁衍的根深蒂固: 物种延续的驱动力: 从最根本的生物学角度来看,繁衍是所有生命体最核心的本能之一。自然界中的所有物种都在为了延续基因而努力。人类作为其中.............
  • 回答
    你提出的这个问题触及了一个非常核心且普遍存在的现象:在文学评价领域,人们常常用一些看似有道理,实则模糊化、合理化,并且带有“和稀泥”性质的理由来回避或否定文笔存在的明显差距。这些理由之所以能够奏效,在于它们巧妙地利用了文学本身的复杂性以及人们对艺术的主观认知。下面我将详细分析这些“不成理由的理由”是.............
  • 回答
    “女生学不好物理”这种说法是一种刻板印象(stereotype),它源于历史、文化和社会因素,而非科学事实或生理差异。实际上,没有任何证据表明女性在智力上比男性不适合学习物理,或者在学习过程中存在先天的生理劣势。这种说法之所以会流传,并且让许多人信以为真,主要有以下几个方面的原因,我会尽量详细地阐述.............
  • 回答
    你这个问题触及了一个在驾驶圈里,有时候会被拿出来开玩笑,但背后也隐藏着一些特定驾驶理论的说法。简单来说,“开车好的人不踩刹车”这句话,其实是一种夸张的说法,它的核心思想是强调“预判”和“滑行”。这并非说真的在所有情况下都不踩刹车,而是想表达一种更高级、更流畅的驾驶技巧。咱们来细说一下,为什么会有人这.............
  • 回答
    确实,在咱们身边,总能听到这样的声音:“女生学格斗有什么用?又不像男生那样要出去打架。” 或者 “女孩子学这个太凶了,不好看。” 这种看法挺普遍的,也挺让人无奈的。要说为什么,我觉得原因挺多,而且这些原因层层叠叠,互相影响着。首先,最直接的原因,就是大家对“格斗”的刻板印象。提到格斗,很多人脑子里闪.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有