所有 Unix 命令都在 Linux 中重写了吗?

所有 Unix 命令都在 Linux 中重写了吗?

我想知道哪些命令是为Linux重写的,哪些是从Unix保留的?

答案1

看来您混淆了操作系统的两个截然不同的部分。这是可以理解的,因为它们经常被互换使用,但从技术上讲这是不正确的,所以你的问题是基于一个错误的前提。为了充分探索并希望回答您可能想问的问题,需要一堂简短的历史课。

首先是 UNIX。基本上,在那时,UNIX 意味着AT&T UNIX 系统,这是最先出现的。但 AT&T UNIX 变得非自由,因此 Richard Stallman 启动了 GNU 项目来编写一个 Unix 系统自由的。由此得名GNU 不是 Unix,缩写GNU。 GNU 计划于 1983 年公开,1984年开始开发

到了 20 世纪 90 年代初,GNU 从头开始​​重新实现了大部分 UNIX 实用程序。 维基百科列表整个系统的一些组件没有被重写(TeX、X Window System 和 Mach 微内核被作为没有重写的组件的例子),但大多数情况下,用户态工具是从头开始重写的,以达到目标避免重用任何 AT&T(或者更确切地说,非自由)代码,以及通过添加命令行选项来扩展其功能。因此,GNU 实用程序通常比它们最初获得灵感的工具更强大。

那时,GNU 仍然缺少一个重要组成部分:一个操作系统内核,这将允许所有内容在不运行其他操作系统的实际计算机上协同工作。 GNU 计划提供一个名为 HURD 的内核。不幸的是,由于种种原因,它最终迟到了几年。如今,它可以作为GNU赫德

与此同时,1991 年,Linus Torvalds 开始致力于一个玩具项目,该项目最终被称为 Linux。这基本上是一个学习 32 位的学校项目英特尔80386CPU,一开始非常简单,但最终开始演变成一个实际可用的操作系统内核。但它没有任何用户层软件; Linux 本身不提供 shell,除了内核初始化之外没有系统启动工具,没有文本编辑器,没有图形界面,没有什么。内核就像汽车发动机;对于制造一辆有用的汽车至关重要,但它本身毫无用处(对于一辆有用的汽车,你需要车轮、变速箱、转向装置、驾驶员坐的地方、油箱或其他能量储存装置等)。 Linux 内核最终在 GNU 通用公共许可证下分发,与GNU软件相同

于是人们开始将两者配对。你会得到一个类似 Unix 的用户空间,以及一个基于 Unix 思想的内核(包括与POSIX),配有源代码,您可以随意修改,而且不需要任何成本。尤其是之前Linux 发行版变得很普遍,需要一些修补才能让事情正常工作,但它已经完成,足以供那些愿意花一些时间在上面的人使用。

HURD 在 20 世纪 90 年代初期尚未推出,当时 Linux 开始受到爱好者和修补匠的青睐,因此 Linux 内核和主要由 GNU 组成的用户区的组合最受开发人员关注。

此外,如今,许多 Unix 系统都安装或允许管理员轻松安装 GNU 用户空间的一部分。您可能会在非 GNU 系统上看到 GNU bash、GNU 编译器集合、GNU C 库(普通的或修补的)等。

更糟糕的是,一些系统使用 Linux 内核,但根本没有 GNU 用户区。对于一个广泛使用的示例,请考虑安卓操作系统,它基本上是 Linux 内核加上自定义用户空间。

这个很重要因为它极大地模糊了 GNU、Linux 和各种 Unix 之间的界限(只有一个 UNIX,但是 Unix 系统有很多,甚至更多类 Unix 操作系统)。当您询问 Linux 时,您实际上经常是在询问 GNU/Linux 系统。但考虑一下Debian GNU/kFreeBSD,它在 FreeBSD 内核之上运行 GNU 用户区,根本不使用 Linux。或者例如 Solaris,您可以轻松地在其上安装各种 GNU 软件包,包括 coreutils。我认为 Mac OS X 也附带了部分 GNU 用户空间。或者考虑上面提到的Android。

到底,一个可用的 GNU 系统可能运行非 GNU 代码,非 GNU 系统也可能运行 GNU 代码,但是GNU 实用程序不包含非 GNU 代码。

相关内容