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 早得多。

© . All rights reserved.