从技术史看:Unix 从何而来

大家好!我是大聪明-PLUS

如今,许多人认为"Unix"和"Linux"是同一个东西。但从 2024 年起,对于大多数我们认为是"Unix"和"Linux"的发行版来说,情况基本如此。

但 Unix 的历史悠久。如果你只了解我们今天所熟知的 Linux 系统,很难想象"Unix 早期的情况是什么样的",因为自那时以来发生了太多变化。

❯ 从原型到 Unix

让我们回顾一下 Unix 的起源。1969 年,贝尔实验室的研究员 Ken Thompson 正在尝试操作系统设计。

当时,贝尔实验室有一台 PDP-7 计算机,它配备了一些有趣的外设:一个速度非常快(在当时来说)的磁盘驱动器。汤普森对这台驱动器在处理数据时所能达到的最大吞吐量很感兴趣,于是他编写了自己的程序来与硬盘驱动器进行交互。这是一项艰巨的任务:在那个年代,所有程序都是用汇编语言编写的,而编写一个硬盘驱动器驱动程序需要大量的底层代码。

汤普森意识到,这个接口已经投入了大量精力,几乎可以算作一个成熟的操作系统内核了。他估算,只需要三周时间就能完善内核。一周用来创建新的编辑器,一周用来编写汇编程序,一周用来编写内核原型。Unix 操作系统的历史就是从这个原型开始的。

这个早期原型及其蕴含的理念似乎很有意思,于是汤普森和他在贝尔实验室的同事们开始开发它。新系统的唯一设计模式是:多个实用工具,每个工具专注于解决一个问题。贝尔实验室的另一位研究员布莱恩·科尼汉建议将新系统命名为"Unix"------与贝尔实验室几年前也在开发的Multis操作系统形成对比。然而,Multis项目最终失败了,因为该操作系统过于复杂。

❯ 早期 Unix

1971 年 11 月,贝尔实验室编译完成了新操作系统的代码,Unix 第一版应运而生。随后,Unix 第二版于 1972 年 7 月发布,Unix 第三版于 1973 年 2 月发布,Unix 第四版于 1973 年 11 月发布。

这些早期版本的 Unix 与现代 Linux 系统并没有太大区别。我们今天使用 Linux 时所依赖的许多命令在 Unix 第二版中就已经存在。例如,用于显示文件的 cat 命令, 用于管理目录、管理 文件和 控制文件访问的mkdir 和 命令 。df 和 du 命令允许您检查磁盘空间使用情况,而 和 命令 (类似于 cd)允许您浏览文件。此外还有许多其他熟悉的命令rmdir``cp``mv``rm``chmod``chown``ls``chdir``cmp, date``echo``find``ln``man``mount``umount``sort``wc``who

摘自《Unix 第四版》手册。该手册分为几个部分,第一部分涵盖了通用用户命令:

  1. 自定义命令;

  2. 系统调用;

  3. 编程程序;

  4. 特殊文件;

  5. 文件格式;

  6. 用户支持的程序;

  7. 各种各样的;

  8. 支持。

您可能对其中许多命令都很熟悉。它们中的大多数仍然保留在现代 Linux 系统中,但有些已被其他功能几乎与旧命令相同的命令所取代。例如, ar 命令以前用于归档,但现在您可以使用 ziptar

早期版本的 Unix 还包含其他一些至今仍保留但很少使用的命令,例如ar 用于文件归档、 dc 桌面计算器、 ed 文件编辑和校验和 sum 计算的命令。Unix 第二版还支持早期的电子邮件概念(有一个用于电子邮件的命令mail)和一种即时通讯工具:使用命令 mesg 和 , write 您可以通过终端与其他用户交换消息。

使用早期 Unix 版本的程序员使用各种编译器和工具来帮助他们创建新程序。命令as 用于构建程序,而 bas 对于 BASIC 编程,还有诸如 cc (C 编译器)、 db (调试器)、 fc (FORTRAN 编译器)、 ld (链接器)、 nm (列表名称)、( od 八进制转储)、 strip (字符串符号) 和 un (查找未定义符号) 之类的命令。您可能在现代 Linux 系统上认出了这些工具,但其中许多现在都有不同的名称。例如,用于编译 C 程序的命令是gcc

一些 Unix 命令随着时间的推移而发生了变化,但它们的早期版本在 Unix 第二版中很容易辨认。shell sh 支持早期版本的标签 goto和运算符 if。您可能习惯于在 Bash shell 中工作,因为 Bash 语言可以完成所有这些功能以及更多功能。该程序 roff 用于准备文档,是基于几年前出现的 RUNOFF 程序的简化实现。check 和 命令salve 提供与大致相同的文件系统检查fsck,命令 dsw 删除了类似的文件 rm -i,命令 istat 返回 inode 的状态, m6 是最早的宏处理程序之一,并且类似于现代的 m4,并tm 显示系统时间和有关系统保持活动时间的信息。

早期 Unix 系统的其他命令长期以来被保留下来,并用于支持不再存在的系统。例如,Unix 第二版手册描述了与 Honeywell 6070 大型机通信的工具,包括 dpd (通过电话提供数据服务)、 tss (与分时系统通信)以及 opr (离线)文件打印到 Honeywell 6070 系统。

❯ 文本处理

在Unix的第一个版本发布之后,汤普森试图发明一个更强大的系统,以便他能够继续使用Unix。不幸的是,他的管理层不愿投资操作系统研究,因为公司已经因与Multics的失败合作而遭受重创。购买新计算机系统的请求被拒绝了。

但 Unix 团队最终还是抽出时间处理了这件事。大约在同一时间,法律部门正计划购买一套新的文档准备系统,以帮助他们提交专利申请,这需要特定的格式。但他们想买的新软件还没有准备好。Unix 团队提出了一项协议:专利部门为他们购买一台新的 PDP-11 电脑,Unix 专家则负责升级文字处理器roff,实现准备专利申请所需的所有缺失功能。

此外,从技术上讲,没有人会研究操作系统。

这就是为什么 Unix 第二版还包含许多用于处理文档和打印的工具,包括 nroff 版本 roffov 用于拼版打印页面、 pr 用于印前以及 type 用于在打字机等 TeleType 机器上打印页面的工具。

后来,当公司购置了一台照排机时,Unix 团队重写了 nroff,将其变成了troff排版 版本 roff)------该命令包含在 Unix 第 4 版中。其他文本处理工具也支持troff。例如,该工具 eqn 可以生成科学文档的公式并tbl 用于格式化表格。

其他如今已习以为常的 Unix 特性出现在 Unix 的后续版本中。一个典型的例子是使用 管道 将一个命令作为输入传递给另一个命令。该特性首次出现在 Unix 第三版中。管道使得创建充当过滤器的新程序成为可能。例如,该命令 grep允许比较文本文件并搜索匹配项(Unix 第四版),以及 tee 保存管道命令的中间输出(Unix 第五版)。在 Unix 第七版中,该命令sh最终被提供更多功能的 Bourne Shell 取代。

❯ Unix 中的常见根源

我们很少会思考日常生活中使用的 Linux 命令的起源。这些命令诞生于计算机运行缓慢、内存以千字节为单位的时代。那时的工具必须小巧且高度专业化。

从最初的 Unix 到现代 Linux 发行版,可用的命令行选项范围发生了显著变化。随着计算机速度的提升和内存的充裕,每个工具都开始承担越来越多的工作。例如,ls Unix 第二版中的命令仅支持五个选项: 以 -l格式 列出 、 按时间而非名称排序、 列出所有文件、 显示每个文件的大小以及 列出目录名称而非其内容。现代GNU 命令不仅支持这些原始选项,还支持超过 50 个扩展选项。-t``-a``-s``-d``ls

所有现代类 Unix 系统的起源都可以追溯到最初的 Unix。Linux 就是这样一个系统,它使用 GNU 工具链。GNU 工具链基于 Unix 工具。2024 年,Linux 不再出现在最初的 Unix 架构中,原因很简单:Linux 现在支持 Unix 诞生之初无法想象的架构和工具。但使用命令行的一般原则与 20 世纪 70 年代 Unix 首次开发时大致相同。下次您使用 []ls列出目录中的文件时,请记住,您使用的是已有五十多年历史的工具。

相关推荐
励志不掉头发的内向程序员2 小时前
【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 进程概念
linux·运维·服务器·开发语言·学习
---学无止境---3 小时前
Linux中内核堆栈跟踪函数dump_stack的实现
linux
早起的年轻人3 小时前
CentOS 8系统盘大文件查找方法
linux·运维·centos
心灵宝贝3 小时前
Linux CentOS 7 安装 zip-3.0-11.el7.x86_64.rpm 详细步骤(命令行教程)(附安装包)
linux·运维·centos
挺6的还3 小时前
50.Reactor反应堆模式
linux
Thexhy4 小时前
在Centos的Linux中安装Windows10系统
linux·运维·经验分享·学习·centos
Lzc7744 小时前
Linux的Socket编程之UDP
linux·socket编程之udp
zimoyin5 小时前
Linux 程序使用 STDOUT 打印日志导致程序“假死”?一次线上 Bug 的深度排查与解决
linux·运维·bug
杜子不疼.5 小时前
【Linux】操作系统的认识
linux·运维·服务器