大多数发行版上默认安装的 CLI 工具集

roc*_*ort 3 defaults command

在编写 shell 脚本时,为了获得尽可能多的可移植性,人们可能想要尝试并坚持使用可能已经安装在目标系统上的命令行工具。

我们可以评估特定工具,如本例所示:
是否存在默认安装中没有 awk 的 Unix 版本?

我们也可以按目标发行版进行搜索,例如:
Debian 中默认安装了哪些软件包?[...]

与这种一次搜索一个命令/发行版相比,是否有任何官方的或某种既定的命令集如果没有被授予,但至少很可能安装在任何 *nix 系统上?如果我们将其缩小到 Linux 会怎样?

Gil*_*il' 5

任何可以合理地称为 Unix 或类 Unix 的东西都有POSIX实用程序。您通常可以假设这些实用程序存在,它们支持列出的选项,并且它们的行为如所示。有一些限制:

  • 标记为可选的功能可能并非随处可见。
  • 最近添加的功能可能还没有无处不在。检查“更改历史记录”部分。
  • 软件有bug。任何给定的系统通常会在少数极端情况下偏离规范。有时开发人员或发行版维护人员并不关心偏离规范。除了经验之外,没有其他办法可以发现这一点。

以下是您在许多 Linux 发行版上可能会遇到的限制:

  • ed并且pax经常从默认安装中丢失。
  • 工作控制的极端情况往往在 ksh 之外表现得很奇怪。

如果您仅限于非嵌入式 Linux,您可以做出一些额外的假设。

  • 大多数发行版遵循Filesystem Hierarchy Standard,该标准规定了 POSIX 之外的许多实用程序。
  • bash 可用。但/bin/sh可能不是bash。
  • 大多数 POSIX 实用程序是GNU coreutils实现,它提供了很多扩展。
  • util-linux可用(但一些实用程序可能会被具有相同名称且可能具有不同选项的实用程序的另一个实现替换)。

嵌入式 Linux 上,shell 和实用程序通常来自BusyBox。因为 BusyBox 是为小型系统设计的,所以它故意省略了一些特性,包括 POSIX 强制要求的特性。BusyBox 有很多编译时配置选项,因此您无法真正预测给定系统上可用的内容。如果您想最大限度地提高对嵌入式 Linux 的可移植性,当您使用某个实用程序时,请在 BusyBox 中查看其源代码并避免使用条件编译保护下的选项。如果安装完全缺少该实用程序,这将无济于事。