我如何知道我正在查看的手册页是否正确?

我如何知道我正在查看的手册页是否正确?

例如,

[fakename]$ type echo
echo is a shell builtin

man echo给了我 GNU coreutils 版本的echo.判断我正在查看的手册页是否正确(即如果我直接调用它就会得到的实用程序)的最简单方法是什么?

答案1

你不知道,真的。并非没有手册页之外的知识。

对于echo(and printf, and test, ...) 来说,它通常是 shell 内置的,因此您需要了解这一点并阅读 shell 的文档。 (而且echo在不同的实现中是众所周知的不同,改用printf.)

在大多数(如果不是全部)shell 中,您可以使用 来查找某些内容是否是内置的 ,例如will print 。 (type commandtype echoecho is a shell builtintype由 POSIX 指定但是例如也支持它,尽管它是非 POSIXy 的。)在 Bash 中,你会读到man bash在线文档,或使用内置命令help(这是 Bash 特有的,您需要知道它的存在)。

即使命令是不是一个内置命令,可能有多个同名命令,rename这是一个著名的例子(参见为什么 Debian/Ubuntu 上的重命名实用程序与其他发行版(例如 CentOS)上的重命名实用程序不同?)。现在,您的操作系统应该具有实际安装的实用程序的正确手册页,例如在 Debian 中,“替代方案”系统当命令替代项更改时,也会更新相应的手册页。但如果你读过在线手册页,你需要意识到这一点。

许多实用程序都有一个命令行选项,--version它可能会告诉您该命令是什么实现。 (但并非几乎所有实用程序都有它。我认为它最初是 GNUism,所以 GNU 实用程序以及那些碰巧复制自定义的实用程序都有它。)在 的情况下rename,它恰好可以区分两种不同的实现:

debian$ rename --version
/usr/bin/rename using File::Rename version 0.20
centos$ rename --version
rename (util-linux-ng 2.17.2)

除此之外,您的系统可能有一个与实用程序同名的别名或函数,通常用于修改实用程序的行为。在这种情况下,手册页中提供的默认值可能不适用。的别名很常见,添加到或 的ls别名也很常见。但也会告诉您是否是别名或函数。-irmmvtype foofoo

答案2

如果您想要内置命令的手册,那么您需要查看 shell 的手册。该命令将与所有其他内置命令一起记录在其中(或者至少会提供对内置命令文档所在位置的引用)。

  • bash:man bashhelp echo从交互式bashshell 中。
  • zsh:(man zsh读了一会儿之后,man zshbuiltin
  • fish:(man fish读了一会儿之后,help echo

您获得的man echo文档手册/bin/echo,即外部的 echo命令。当您echo在没有显式路径的情况下使用时,不会使用此命令。

答案3

应该可以通过提供完整路径(您可以使用 获得which echo)来调用非 shell 内部版本。 shell 内部没有单独的联机帮助页;有关这些内容的文档,您需要查找 shell 的联机帮助页。您上面提到的“type”命令是确定您将获得的内容的最佳方法。

答案4

man分为以下部分:

  1. 一般部分
  2. 系统调用
  3. 库函数
  4. 文件格式
  5. 游戏和屏保
  6. 各种各样的
  7. 系统管理

根据您要查找的内容,您可以man像这样调用以避免混淆:man section command

有关更多信息,您可以实际使用man man

相关内容