Linux 哲学的 9 大原则如何影响您

1 位读者喜欢这篇文章。
open source button on keyboard

Opensource.com

上次我在Linux 哲学的影响中讨论了 Linux 哲学的一个相当高层次的观点。关于它有一些非常好的讨论,许多博客联合发布了 Opensource.com 的内容。

我从上一篇文章收到的评论之一是,另一个操作系统在命令行上具有与 Linux 相同的功能。这个人说,你可以添加这个软件来获得这些功能,如果你想要那些功能,可以添加那个软件包。这正说明了我的观点。使用 Linux,这一切都是内置的。你不需要去其他地方来获得 Linux 的强大功能。

许多人留言说,他们可以看到了解 Linux 哲学作为一种历史的好奇心可能很好,但它在 Linux 环境中的日常操作中几乎没有意义。我不敢苟同。原因如下。

九大原则

Linux 哲学有九大原则。

  1. 小即是美
  2. 每个程序只做好一件事
  3. 尽快制作原型
  4. 选择可移植性而非效率
  5. 将数据存储在纯文本文件中
  6. 使用软件杠杆
  7. 使用 Shell 脚本来增加杠杆和可移植性
  8. 避免封闭的用户界面
  9. 将每个程序都做成过滤器

Linux 哲学还有 10 个较小的原则和一些推论也很重要。我将在以后的文章中介绍其中的一些。

这是一个快速的命令行程序示例,它包含了这九大原则中的大多数。

who | awk '{print $1}' | sort | uniq

这个小小的命令行程序执行一个非常简单的任务,即列出当前所有已登录用户,同时只列出每个已登录用户一次。它还消除了 who 命令提供的无关数据。

我不会介绍这个 CLI 程序符合 Linux 哲学的所有方式,但我可以很好地论证它符合其中的大多数原则。

将每个程序都做成过滤器

组成这个命令行程序的每个命令都是一个过滤器。也就是说,每个命令都会接受一个输入,通常来自标准输入,并通过对其进行一些更改来“过滤”数据流,然后将结果数据流发送到标准输出。标准输入和标准输出统称为 STDIO。

who 命令生成一个初始数据流。随后的每个命令都以某种方式更改该数据流,接受标准输入并将修改后的数据发送到标准输出,供下一个命令操作。

小即是美

每个程序只做好一件事

这两个原则是紧密相关的。这个程序中的每个命令都相当小,并且每个命令都执行一个特定的任务。例如,sort 命令只做一件事。它对通过标准输入发送给它的数据流进行排序,并将结果发送到标准输出。它可以执行正序和倒序的数字、字母和字母数字排序。但它不做其他任何事情。它只排序,但在这方面非常非常出色。因为它非常小,如下表所示只有 2614 行代码,所以它也很快。

命令 源代码行数
who 755
awk 3412
sort 2614
uniq 302

选择可移植性而非效率

使用 Shell 脚本来增加杠杆和可移植性

从长远来看,shell 脚本的可移植性可能比用编译语言编写程序所感知的效率更高甚至没有考虑到编译和测试这样一个程序所需的时间因为它们可以在许多其他不兼容的系统上运行。

例如,我曾在北卡罗来纳州立大学的电子邮件系统工作了几年。我负责一组在 Red Hat Linux 主机上运行的 Perl 和 BASH CGI 程序。这些程序为我们所有 100 个县和数百个大大小小的机构的远程用户提供了执行其用户帐户维护的功能。我被要求测试将所有这些程序迁移到在 IBM Z 系列大型机上运行的 Red Hat 的可能性。

我从现有程序、数据和配置文件创建了一个 tarball,将 tarball 复制到大型机上的 Red Hat 实例并解压了它。我对 Apache httpd.conf 文件做了一个配置更改我更改了 Apache 监听的 IP 地址。我启动了 Apache,一切都按预期工作,无需其他更改。这一切大约花了十分钟,并且是真正的可移植性的绝佳示例

如果这些程序是编译的,我就不得不重新编译它们,并删除我们可能已编程的任何特定于硬件的效率。

使用软件杠杆

软件杠杆对我来说意味着几件事。首先,在这个示例的上下文中,它意味着通过使用四个命令行命令,我们正在利用创建这些命令的程序员的工作,他们编写了超过 7,000 行的 C 代码。这是我们不必创建的代码。我们正在利用那些其他未被充分赏识的程序员的努力来完成我们为自己设定的任务。

软件杠杆的另一个方面是,优秀的程序员编写好的代码,伟大的程序员借鉴好的代码。永远不要重写已经编写好的代码。

开源软件在各个层面上的一个巨大优势,从内核到 GNU 和其他实用程序,一直到复杂的应用程序,在于那里有大量编写良好且经过测试的源代码,几乎可以完成您想做的任何事情。只需找到您需要的片段并将它们包含在您自己的代码中。我在不同的程序中多次使用我自己的代码。当其他人的代码满足我的需求时,我也会使用很多。无论哪种方式,它都为我节省了大量工作,并使我免于重新发明完全好用的代码。

影响

本文并非旨在作为编程教程。相反,它旨在说明 Linux 哲学如何影响和指导系统管理员和开发人员的日常工作。

我们是几十年代码的受益者,这些代码由那些真正了解自己在做什么并且非常投入的人们精心设计、深思熟虑和编写的。地球上最好的代码是使用这些原则编写的。

仅 GNU 实用程序就代表了 Richard Stallman 和其他程序员为向任何想要使用它们的人提供开放、免费的 Unix 实用程序而投入的大量时间和精力。这些 GNU 实用程序被 Linus Torvalds 纳入了最初的 Linux 发行版中。它们共同构成了 GNU/Linux,并为我们提供了一个非常强大且有用的操作系统和实用程序的来源。

GNU/Linux 为我们提供了免费和开放的工具,使我们能够执行极其复杂和富有创造性的任务,其中许多任务是使用任何其他工具都无法完成的。许多 这些小型的“只做好一件事”的GNU 实用程序是使用 STDIO 设计的,因此它们可以以大型、单体实用程序的程序员永远无法想象的方式组合在一起。事实上,这些 GNU 实用程序的程序员自己也不知道它们可以以几乎无限的组合方式组合在一起以执行他们无法想象的任务。然而,这些超过 40 年历史的实用程序仍然在世界各地的计算机上大量日常使用。

下次我将给您布置一个挑战。

参考文献

  1. Eric Raymond:Unix 编程艺术 http://www.catb.org/~esr/writings/taoup/html/index.html
  2. Mike Gancarz:Linux 和 Unix ;Digital Press,2003 年,ISBN 1-55558-273-7
  3. 维基百科:http://en.wikipedia.org/wiki/Unix_philosophy
  4. 俄勒冈州立大学:http://web.engr.oregonstate.edu/~traylor/ece474/lecture_verilog/beamer/linux_philosophy.pdf
标签
David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。他自 1996 年以来一直从事 Linux 和开源软件工作,自 1969 年以来一直从事计算机工作。他是“系统管理员的 Linux 哲学”的坚定支持者和传播者。

6 条评论

很好的演示,但我没有看到标题中说的这对任何人有何影响。

我完全同意。不幸的是,这些原则每天都在被破坏,而且不是被 Linux 生态系统之外的人,而是被内部的人破坏。口头上会说遵守这些原则,但新系统和软件设计的自然创造性吸引力却与之背道而驰。

我怀疑现在编写和丢弃的软件比以往任何时候都多。编程方面已经发生了代际转变,就像婴儿潮一代与那些见证了 20 世纪 30 年代大萧条的人之间的隔阂一样明显。这是由硬件的进步推动的。

Linux 哲学已经进入了我们对美国建国文献所处的相同领域。是的,受到尊敬,但在实践中,为了适应当前的议程而被辩论和篡改。总是会有对老生常谈的诉求,但它们今天的含义与过去不同。

自 1996 年以来,我一直在试验和/或使用 Linux。我的工作围绕着 Linus Torvalds 的创造。他让我有饭吃。我同意这些原则正在被破坏。但是,我不认为所有原则都具有绝对的普遍性,能服务于更大的利益。可能需要承认这些原则的有效例外情况。能够求助于命令行非常好而且必要。被迫求助于命令行就不是那么好了。这剥夺了用户的选择权。我知道很多充满激情的人不会同意。没问题。我不认为有什么东西能像 Linux 用户对 Linux 的热情那样充满激情。这是一件好事。考虑一下某些软件中心(就我个人而言,我对软件中心并不完全满意)中没有的软件,比如 Ubuntu 上的软件。为自己编译程序,了解必要的开关或权限和/或导航依赖地狱是各种 Linux 版本未能满足我自己的用户友好性和选择原则的地方。最后,如果能够在任何版本的 XWindows GUI 中下载程序并双击安装,那就太好了。在那之前,操作系统不会像它需要的那样友好。这是一个充满热情的 Linux 爱好者的看法。

回复 作者 Eli Cummings (未验证)

系统管理员已经习惯了
但总结得很好

这些原则非常适合命令行和脚本,但将它们中的许多原则应用于基于 GUI 的应用程序会非常笨拙。那些应用程序与传统的 Unix shell 的小程序是截然不同的野兽,甚至将它们进行比较都是愚蠢的。

这些是 UNIX 哲学的原则,它比 Linux 早得多。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.