公众号旧文

Linux 里的 cat 是猫吗?

作者:胖子阅读 —

转眼我接触 Linux 已经两个月了,一直在用的命令,却从来没有深究过。

比如 cat 是猫吗?

今天得空就研究了一下,发现实际上它和动物没有任何关系。

cat 这个命令来源于英文单词 concatenate,意思是“连接”。

在 Unix/Linux 里,它的作用是把文件内容读出来输出到终端,或者把多个文件拼接在一起。

因此,从功能上来说,它更像一个数据搬运工,而不是猫。

不过由于名字刚好是猫,久而久之就成了程序员之间的一个小梗。

有趣的是,这种玩梗式命名在 Unix 世界里并不少见。

比如还有一个命令叫 tac,其实就是把 cat 倒过来写。

它的功能也非常对称:

cat 是从上到下输出文件内容,tac 是从下到上倒序输出。

一个是正着看,一个是反着看,连名字都体现了这种关系。

这种设计体现了 Unix 的一个核心理念:

工具要简单、直接,同时尽量保持一致性。

除了 cat 和 tac,还有很多类似风格的命令,比如 head 和 tail,一个查看文件开头几行,一个查看文件结尾几行。

在常用命令中,grep 的名字格外奇怪。

它既不像一个单词,也看不出明显的含义。

实际上,grep 的来源可以追溯到早期的 Unix 编辑器 ed。

在这个编辑器里,有一个命令写作 g/re/p。

意思是:

在全局范围内查找符合某个正则表达式的内容,并把它们打印出来。

后来,这个功能被单独做成了一个工具,名字就直接沿用了这个缩写,变成了 grep。

所以,grep 并不是一个人为设计的单词,而是历史遗留下来的命令碎片。

类似的命名方式还有 awk。

这个名字并不是功能描述,而是来自三位作者的姓氏首字母:

Alfred Aho、Peter Weinberger 和 Brian Kernighan

这种命名方式在今天看来有点随意,但在当时却很常见。

再比如 sed,其实是 stream editor(流编辑器)的缩写,强调它是对数据流进行处理的工具。

这些看似奇怪的名字,记录了 Unix 的发展历史,也体现了一种独特的工程文化:

不追求花哨,只追求实用,同时也不忘留下一点幽默感。

扩展阅读


Linux 免密登录简明教程

服务器断联后恢复,怎么知道是啥时候断的?

AI 最大的问题不是替你做,而是让你不想做

Tailscale 简明安装/登录/使用教程

胖子百科公众号,即日起开始接投稿,请直接发送稿件到公众号菜单联系方式中的电子邮箱,文章发布后7日内的收入将全部打给投稿人。