Kau*_*ett 6 linux command-line command portability
所有不同的 Linux 发行版都具有相同的命令行吗?我想知道的是相同的命令行适用于所有类型的 Linux 发行版(CentOS、Fedora、Ubuntu 等)还是它们都有不同的命令行?
Kus*_*nda 10
我选择将这个问题解释为关于命令和 shell 跨各种 Linux 发行版的可移植性的问题。“命令行”既可以表示“在 shell 提示符下编写的命令”,也可以表示“shell 本身”。希望这个答案解决了对“命令行”的这两种解释。
大多数 Unix 系统为在 shell 提示符下工作提供了相同的基本实用程序。这些实用程序在很大程度上以相同的方式工作,因为它们是标准化的。此外,用于编写 shell 命令的语法是标准化的(循环、重定向、管道、后台进程、变量赋值、引用等)。该标准称为 POSIX,可以在此处找到(请参阅“Shell & Utilities”部分)。
在大多数 Unices 上(尤其是出于某种原因在 Linux 上),标准实用程序已经扩展了额外的功能,但是应该实现POSIX 标准描述的功能。如果标准实用程序不符合 POSIX 标准,您可能应该提交有关此问题的错误报告。
特别是,shell 本身经常被扩展以提供更方便的交互体验,或者能够提供更高级的 shell 编程设施。shell 与其他任何应用程序一样,具有各种风格(实现)并且bash
是 Linux 系统上最流行的(但它也可用作例如 macOS 上的默认 shell,并且可以安装在任何 Unix 上)。在zsh
和ksh
炮弹也很受欢迎,并提供不同的集扩展,但都应该至少能够使用扩展时,在很大程度上做了什么POSIX标准说使用常见的语法(除了如特殊类型的数组和票友形式的文件名模式匹配等等,尽管其中一些恰好在外壳之间也非常相似)。
至于非标准工具,例如用于执行 POSIX 标准未涵盖的某些特定任务的工具(例如与数据库对话或调整显示器的亮度级别),或者特定于特定 Linux 发行版的工具(可能用于进行包管理)、特定 Linux 发行版的版本或特定硬件架构等,命令的可移植性将取决于安装在支持使用该工具的系统上的正确变体和工具版本工具。
在各种 Linux 发行版中,可用工具和实用程序的分类相当一致,可移植性通常很好(但需要注意的是,发行版和架构特定的工具可能不同或缺失)。在考虑使用和编写应该在其他类型的 Unix 系统上运行的脚本时,了解哪些扩展是特定于 GNU/Linux 工具和实用程序的变体,以及可以预期在“通用POSIX/Unix 系统”。