Linux/Unix 命令继承

Linux/Unix 命令继承

所有基本的 Unix 命令是否在包括 Ubuntu 在内的所有 Linux 发行版上都可用,还是只有某些命令被 Linux 继承?此外,GNU 是否有自己的命令,还是包含所有相同的命令?

答案1

存在一种被称为POSIX 标准。它由 Open Group 创建,旨在对命令的执行制定一定的标准应该存在于类 Unix 系统上,系统应实现某些系统调用,以及应存在的基本设备和接口。从这个意义上讲,符合 POSIX 标准的系统应该能够拥有另一个符合 POSIX 标准的系统所具有的实用程序(并且这些实用程序应符合标准行为)。从这个意义上讲,GNU 实用程序和 Ubuntu 符合 POSIX 标准 - 它们确实具有标准概述的内容,尽管它们具有扩展功能的选项(例如-pin command )。cp

这样的“继承”取决于 Linux 发行版是否符合 POSIX 标准,Ubuntu 确实符合该标准。其他发行版不受 Ubuntu 控制,即使它们基于 Ubuntu,Ubuntu 也不一定负责它们如何实现命令。甚至编译 GNU coreutils 也可以以不同的方式完成。因此,不同的发行版可能有 GNU 实用程序,尽管它们的编译方式可能不同。

但是,不要太关注实用程序,而要关注遵循 POSIX 和可移植脚本和编码方式。这包括编写脚本,#!/bin/sh如果您希望它们在不同的操作系统上运行,请遵循标准/bin/sh语法( 哪个可能缺少某些/bin/bash功能,例如数组),并在执行命令时避免使用 GNU 特定的标志。如果你让你的应用程序和脚本可移植,你就不会出错。如果你确实需要高级功能,一定要检查脚本是否在 Ubuntu 上运行(并且它在文件中说明/etc/os-release)或其他地方。

有关主题的附加阅读材料:

答案2

主流发行版(包括 Ubuntu)都包含提供几乎所有可能需要的 Unix 命令版本的软件包。它们可能不是从一开始就安装的,但通常都有可用的版本。

但是,有 2 个细节值得注意。首先,没有通用的 Unix 操作系统。当您问 Linux 是否包含所有这些功能时,您误以为一般来说有 Unix 这样的东西。IBM 或 Berkeley 有竞争性实现。这些东西对命令的响应方式会略有不同。例如,在 Macintosh 上打开一个终端,您就会进入基于 BSD Unix 构建的 Unix 版本。

其次,由于 Ubuntu 是一个开放系统,软件包的作者可能对如何处理参数有不同的看法。令我惊讶的是,每个脚本的作者都决定参数的标点符号。他们是想要“--color=auto”之类的参数,还是想要“--color auto”。许多 GNU/Linux 例程允许您自由地调整命令行参数,因此“mkdir flop/gobble -p”或“mkdir -p flop/gobble”具有相同的效果,但在其他 Unix 上,他们可能坚持参数优先。

您需要阅读每个例程的帮助页面,以了解它们想要什么。这对我来说是最令人失望/沮丧的事情。有些程序,比如“ps”或“tar”,决定不再使用破折号,我们必须注意。现在ps -auxps aux同样的事情,这让我有点恼火。

GNU/Linux 系列程序占了你能找到的最大份额,但并非全部,即使在 GNU/Linux 系列中,我也注意到不同系统之间存在一些奇怪的差异。我最喜欢的程序之一是名为“rename”的 Perl 脚本,它在 Ubuntu 上仍然可用。但是,如果你安装了 Fedora Linux,rename 将被完全不同的东西取代。

相关内容