在信息 bash 中找不到 'date' 命令的描述 - 查找可从 shell 调用的所有命令的列表

Can't find description for 'date' command in info bash - find a list of all commands callable from the shell

我会先提到这个 - 这个问题的目的实际上是加强我对 bash 和 info bash 页面的理解,而不是获得有关 date 命令功能的具体答案.

我无法从 info bash 手册的以下索引中找到 任何 提到的 date 命令:

但是,我可以使用 info date 获取有关日期函数的信息。此页面似乎是 BSD 通用命令手册的一部分,但我无法找到该手册的索引页 - 如果我通过键入 'u' 转到包含节点,这会将我带到 'dir'页面而不是我期望的一般命令索引。

我主要担心的是,如果我在 info bash 中找不到有关 date 命令的信息,那么还有哪些其他命令未在 info bash 中列出? Bash?

中是否有我可以使用的所有命令的完整列表

info bashman bash 仅记录 Bash 的 自己的 功能。

外部实用程序 例如 date 与 Bash 本身 无关,即使您可以从Bash呼叫他们。

  • 对于任何给定的外部实用程序,您将在其特定的 maninfo 页面(如果已安装)中找到文档,如您所见。

  • 问题是 Bash 有 so-called builtins 看起来和行为都像外部实用程序在许多方面 - 这些都有特定的帮助主题,您可以使用help调用这些主题;例如,help read,但您也可以在 man bash 中的 SHELL BUILTIN COMMANDS.
    标题下找到它们 此外,一些命令名称,例如echo,存在 both 作为 Bash 内置 作为外部实用程序 (/bin/echo).

虽然 只是 info(没有参数) 显示 外部实用程序的列表,通常在标题Individual utilities下,有问题;取决于您的系统:

  • 列表可能不完整,或者分布在多个位置。

  • 文档可能未提及您系统上安装的实际实用程序。

    • 例如,在 OSX 上,info 主题记录了 GNU 核心实用程序,而 OSX 主要是 附带 BSD 实用程序。
  • 但是,如果您的系统是 Linux 发行版, 使用 GNU 实用程序(这是常态)并且 info 命令是 bash 附带的命令,你可能没问题。

  • 请参阅下文,了解可让您在 $PATH.

  • 中查找所有外部实用程序的命令
  • 另一种获取外部实用程序列表的方法是参考一组POSIX-mandated实用程序;请注意,此列表只是大多数现代平台上安装的实用程序集的 子集 ;同样,单个实用程序描述通常只会描述 - 标准化 - 子集 给定平台版本的该实用程序,因为大多数实用程序实现非标准 扩展 :

    • 转到 Shell & Utilities: Detailed Toc 并搜索标题 Utilities(作为完整标题),其中列出了所有 外部实用程序 和 POSIX-compliant 系统必须有。我找不到直接 link 到按名称列出所有实用程序的页面。
    • POSIX 还要求 builtins(built-in 实用程序)POSIX-compliant shell 必须实现(其中Bash 内置函数是一个 超集 ):

附加信息:

  • 查看给定命令是否为内置,使用,例如:
 $ type read
 read is a shell builtin
  • 查看命令的所有形式,请使用选项-a,例如:
 $ type -a read
 read is a shell builtin
 read is /usr/bin/read

如何在 $PATH 中找到所有(外部)实用程序:

  • 以下命令将输出您的$PATH中所有可执行文件的列表(这可能是一个很长的列表);另请注意,该列表通常会包含 custom-installed;该列表将包含 完整 路径,按目录 :

    分组
    • 该命令查找可由 oother,其余词)安全主体执行的文件,所有预安装的实用程序都应该是;可以想象,还有其他实用程序仅具有 u and/or g 主体的权限属性。
printf '%s' "$PATH" | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm -o=x
  • 如果你想要一个纯粹可执行文件名称的排序列表,使用:
printf '%s' "$PATH" | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm -o=x |
  awk -F/ '{ print $NF }' | sort -u
  • 以上只列出了独特的个名字;具有相同 文件名 的可执行文件的不同副本可能存在于 $PATH 的多个目录中(在这种情况下,其目录位于 第一个 $PATH "wins"); 要查看以出现次数为前缀的重复项列表,请使用:
printf '%s' "$PATH" | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm -o=x |
  awk -F/ '{ print $NF }' | sort | uniq -c | grep -v ' *1'
  • 对于任何有重复的给定名称,您可以使用 which -a <name> 查看所有重复项的完整路径。

最后,tab 完成 可以帮助发现命令:

  • 键入 man 并重复按 Tab 键以列出/循环显示 all 命令;指定命令前缀 - 例如,man dat - 仅列出/循环使用该前缀的 start 的命令(exac行为取决于您的 readline 配置)。

    • 默认情况下,info一起工作(至少在我试过的OSX和Ubuntu系统上来自 Bash).
  • 这也适用于开始键入命令名称以调用

    • 但是,这需要至少键入一个字母,这将匹配限制为名称以该字母开头的命令。
    • 要发现给定文件夹中的所有 可执行文件,请使用:
      • ./<tab> 在当前文件夹中。
      • /usr/bin/<tab>,例如,在特定文件夹中。