每个基于Linux的发行版中可用哪些标准命令?


39

我想知道每个Linux系统中可用的标准命令。

例如,如果您获得了debian / ubuntu / redhat / suse / arch / slackware等,您将始终在其中找到以下命令:

cd,mkdir,ls,echo,grep,sed,awk,ping等

我知道所提到的某些命令是shell内置的,而其他命令却不是,但是它们仍然始终存在(根据我到目前为止的知识和经验)。

另一方面,默认情况下,诸如gawk,parted,traceroute和其他非常著名的命令之类的命令不会安装在不同的Linux发行版中。

我进行了不同的网络搜索,但没有找到直接的答案。

目的是我要创建一个shell脚本,并且应该对系统中是否可用该脚本中使用的命令进行一些检查。如果没有,它将提示用户安装所需的二进制文件。


5
只是提示:“ 应该对脚本中使用的命令在系统中是否可用进行一些检查 ”,听起来很像Autoconf
sr_ 2012年

绝对是自动配置的一个案例……或者更科学的表亲,诺言理论
通配符

@Wildcard,我相信对于这种情况,任何配置管理系统都不过分,除非您希望即使在初次安装后也要进行持续的健全性检查和系统的自我修复。
Vangelis Tasoulas '16

@VangelisTasoulas,我不这么认为。在单用户设置(例如家用计算机)中,为什么需要编写脚本?配置管理可能会过大,但是脚本检查和手动检查也会如此。在您有多个框要确保一致性的情况下,脚本编写不会太过严格,但配置管理也不会过分。还是您只是软件开发人员只想在产品的软件包安装过程中进行完整性检查?是的,这取决于您的方案,但是如果您要管理配置,配置管理工具并不过分。;)
通配符

1
@Wildcard,当我写这个问题时,我正在考虑后者:只是想在安装在一台机器上的过程中运行健全性检查,以确保软件能够正确运行。当然,如果您要管理多个服务器并处理分布式部署等,那么我同意配置管理是长远的方法。
Vangelis Tasoulas '16

Answers:


41

不幸的是,不能保证有任何可用的东西。

但是,大多数系统将具有GNU coreutils。仅此一项就提供了约105条命令。除非它是嵌入式系统,否则您可能可以依靠它们,而嵌入式系统可能会使用BusyBox

你可能还靠的bashcron的GNU的findutilsGNU的grepgzip的iproute2的的iputils男人-DB模块初始化工具网络工具,passwd文件(passwd中影子),procps的焦油util- linux

请注意,某些程序在发行版之间可能会有一些差异。例如,/usr/bin/awk可能是gawkmawk在POSIX模式下/bin/sh可能是破折号bash。在某些较旧的系统上,/usr/bin/host其语法与BIND版本的语法不同,因此最好使用dig

如果您正在寻找一些标准,Linux标准库会定义一些常见的程序,但是并非所有发行版都声称符合该标准,只有在安装了可选的LSB兼容性软件包的情况下,某些发行版才会这样做。例如,我看到的某些系统没有lsb_release默认安装。

除了这一点,通过POSIX标准的命令列表可能会有所帮助。

解决您问题的另一种方法是使用每个发行版的打包工具(例如Red Hat的RPM,Debian的DEB等)来打包脚本,并声明对您需要的任何其他程序或包的依赖关系。这是一项工作,但是这意味着用户将看到一条友好的错误消息,不仅告诉他们缺少了什么,还告诉他们需要安装哪些软件包。

更多信息:


封装和添加依赖 -idea是伟大的,击败潜入Autoconf的手了:)
SR_

2
好答案,我同意一切。我要增加一个额外的警告步骤:考虑到您正在使用的命令的特定版本的其他特定选项...它们可能不适用于所有版本(这在我工作的项目中已经发生)。
JoséNunoFerreira

我不认为在任何地方都有一个包含这些命令列表的纯文本文件吗? pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html可以很容易地转换为该格式,但仍然缺少很多东西。
Dylan Nicholson

7

在非嵌入式Linux系统上,通常可以指望大多数GNU实用程序:

加上util-linux套件和procps套件。请注意,/bin/sh并非总是bash,它可以是功能较少的shell,例如ash的多个fork之一。

Linux标准库定义了预期上的所有符合系统,其特点是一套通用工具。您还可以期望POSIX指定的大多数实用程序。一个明显的例外是pax,它不是许多发行版的默认安装的一部分。

如果您想简化操作,请请求安装lsb_release软件包。许多发行版都有这样的程序包,可以提取LSB所需的所有依赖项。

在嵌入式系统上,所有赌注都没有。嵌入式Linux系统通常运行BusyBox,但是许多实用程序和功能是可选的,因此您几乎可以肯定得到。


6

大多数(如果不是全部)Linux发行版都有一组命令,因此,Unix发行版也将提供这些命令。这些是POSIX标准指定的强制命令。

大多数你举的命令(cdmkdirlsechogrepsedawk,等)都是它。ping作为WhiteWinterWolf正确注释的例外。


1
实际上ping不是POSIX的一部分...
WhiteWinterWolf

POSIX主页状态,他们侧重于确保“在源代码级应用程序的可移植性”,即。据我了解,他们对系统API,系统(包括外壳)行为和可用于配置,编译和安装应用程序以及处理其源代码的命令感兴趣。
WhiteWinterWolf

他们不关心网络工具(“系统配置和资源可用性”是明确地外的范围内),那么无处不在的命令,例如pingifconfigtelnet等不属于本标准(或其他任何一个AFAIK的一部分,他们只是力求与“历史实现”的兼容性)。
WhiteWinterWolf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.