什么被认为是古老而强大的命令?

什么被认为是古老而强大的命令?

我遇到了 awk 和 sed 这两个术语,awk 会遍历所有行并在一行满足特定条件时执行任务,sed 可以在输入流进一步输出之前对其进行操作。我个人不知道使用它们的目的是什么,但我注意到它们被称为强大的甚至神圣的命令。除了这两个之外,还有哪些命令/应用程序具有这样的状态?

答案1

对某些“旧”命令进行分类的一种方法(尽管不是为了“更强大”)是它们是内置命令,这意味着从 shell 调用的命令或函数,直接在 shell 本身中执行,而不是在外部执行shell 将加载并执行的可执行程序。
示例包括注销、cd、回显和历史记录。

您可以查看命令是否是内置命令

builtin [command]

例如

builtin echo

没有输出意味着它是一个内置的(使用unix哲学什么都没有就ok了)

如果命令不是内置命令,例如 ls 那么

builtin ls

返回错误-bash builtin: cp: not a shell builtin

至于“最强大”的命令,例如sedawk,我实际上会从问题中删除它,因为它看起来非常主观,并且不太可能产生明确的论点。

答案2

要定义“强大”的命令,必须首先确定它的含义。

第一个要求是普遍性。有些工具非常专注于一件事,但可以解决非常广泛的问题。gnuplot是一个非常基本的绘图工具,非常好用,即使在科学界,您也几乎不需要其他任何东西。一个可以处理正则表达式的工具几乎可以用于任何事情,这确实是sed非常强大的原因。您可以进行格式之间的转换、数据提取、解析、搜索、替换以及几乎任何您能想象到的操作。awk很相似,但也非常不同:它更适合结构化数据,根据模式逐行解析,并且更接近更传统的编程语言(具有更多控制流等)。一旦掌握了这些工具,您就可以用它们解决任何问题:两者都是图灵完备的,原则上可以解决任何问题,即使它与字符串处理无关 - 通用性是最高级别的力量:您可以做任何事情。但你必须“想要”尝试和玩它。由此得出下一个要求。

第二个组成部分是遗留和传统:已经存在了 40 年并且背后有庞大代码库的命令也是最稳定(长期开发)、最可靠的(他们无法停止开发它们或更改功能,因为 40 年的历史)脚本会崩溃),而且有大量的大师可以创造奇迹。这意味着,广为人知且被许多人首选使用的工具不一定是一开始最好的工具,而是“坚持”的工具。然而,如果很多人使用它,它可能还不错,尽管有些事情可以做得更好。年龄在这里很重要:python作为一种语言非常强大,但还没有达到旧工具包的状态gnu- 它仍然给人一种新奇的感觉。bash是一个黄金标准,不仅因为它直观且功能强大,还因为它几乎在任何地方都作为默认 shell 提供,并且每个人都使用它。

崇拜地位在这里非常重要:人们为成为某些极客亚文化的一部分而感到自豪。我可以直接告诉你,当我掌握了emacs和时latex,我感觉真的很酷,并且vi几乎立即对 产生了仇恨:部分原因是它对我个人来说确实不是一个直观的界面,但当然,当你发现时,这种感觉会得到加强其他人也有同样的感觉。我想说的是,一个强大的工具在社交方面也同样强大:一个鲜为人知或设计不佳的工具无法激起人们如此强烈的情绪(无论是消极的还是积极的 - 它们只是平淡无奇)。我提到的一些工具拥有可以与星际迷航相比较的追随者——对于一款软件来说,这是一个不错的成就。awk可以被认为是 的前身perl,并且perl肯定有追随者:大多数人都认为它的perl易读性很差并且有很多笨拙的怪癖。它也是目前最强大的以弦乐为中心的语言,但如果没有狂热的地位,大多数人可能会更快放弃它,而不是玩耍并尝试拯救世界并使用与本应咀嚼的相同工具做饭一堆网页。

最后,人们喜欢一致性、优雅和个性……一个工具的功能可能很强大,但没有人愿意使用它,因为它感觉不合适。一个强大的工具必须是直观的,至少对于喜欢使用它的人来说是这样。我并不是在这里发起口水战,但大多数读者肯定会发现他们自己的不幸和笨拙设计的例子。

简而言之:为明确的目的而精心设计、通用、大量遗产和追随者,以及......一个“灵魂”。这就是我的定义。

相关内容