为什么手册页的概要部分中的命令有不同的路径?

为什么手册页的概要部分中的命令有不同的路径?

查看手册页,grep我注意到该命令有两种不同的路径。这是否意味着我grep的系统上有多个工具?具有相同路径的概要行是否只是同一工具的不同使用示例?我在用OS X 10.10.5

NAME
     grep - search a file for a pattern

SYNOPSIS
     /usr/bin/grep [-bchilnsvw] limited-regular-expression
          [filename]...

     /usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx] -e pattern_list...
          [-f pattern_file]... [file]...

     /usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx]
          [-e pattern_list]... -f pattern_file... [file]...

     /usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx] pattern
          [file]...

DESCRIPTION
     The grep utility searches  text  files  for  a  pattern  and
     prints  all lines that contain that pattern.  It uses a com-
     pact non-deterministic algorithm.

后续问题:手册页从哪里来?它们是动态生成的还是静态安装的一部分?

答案1

你说你使用的是 macOS 机器,但手册看起来很可疑grepSolaris 机器上的手册这是 OSX 10.9 上的手册grep以供比较

在 Solaris 上,有多个具有多种实现的实用程序,并且grep是其中之一。其中的内容/usr/bin遵循 XPG3,它是“X/Open Portability Guide,Issue 3”的缩写。 Single Unix 规范基于 XPG4(参考:维基百科X/打开文章

grep例如, XPG3/usr/bin不支持扩展正则表达式,而 XPG4grep/usr/xpg4/bin支持。

如果实用程序在其手册中有几行概要行,那么这些概要行通常描述了调用该工具的互斥方式。

这些:

/usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx] -e pattern_list...
      [-f pattern_file]... [file]...

 /usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx]
      [-e pattern_list]... -f pattern_file... [file]...

..表明您可以使用其中一个-e-f(或两者),但您必须使用其中之一。

最后一个,

 /usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx] pattern
      [file]...

...表明如果您既不使用也不使用-enor -f,则pattern需要在命令行上指定。

也可以看看standards(5)在 Solaris 上


手册“静态”安装,即作为命令man读取和显示的单独文件。但是,根据您的系统,其中一些可能是groffmandoc文件,而另一些可能被预先格式化为文本文件,有时存储在未格式化手册的同级目录中,通常称为cat.它们有时也可能被压缩。阅读man您系统上的手册 ( man man) 以了解如何处理手册。

/usr/share/man大多数情况下,手册可以在、/usr/local/share/man、 或类似位置找到。

答案2

手册页的格式是动态的,但内容是静态的。它的配置,包括实际预格式化手册页的位置,通常在/etc/man.conf.

在我的 MacOS 机器上的相关部分:

# Every automatically generated MANPATH includes these fields
#
MANPATH   /usr/share/man
MANPATH   /usr/local/share/man
MANPATH   /usr/X11/man
#
# Uncomment if you want to include one of these by default
#
# MANPATH /opt/*/man
# MANPATH /usr/lib/*/man
# MANPATH /usr/share/*/man
# MANPATH /usr/kerberos/man
#
# Set up PATH to MANPATH mapping
#
# If people ask for "man foo" and have "/dir/bin/foo" in their PATH
# and the docs are found in "/dir/man", then no mapping is required.
#
# The below mappings are superfluous when the right hand side is
# in the mandatory manpath already, but will keep man from statting
# lots of other nearby files and directories.
#
MANPATH_MAP   /bin            /usr/share/man
MANPATH_MAP   /sbin           /usr/share/man
MANPATH_MAP   /usr/bin        /usr/share/man
MANPATH_MAP   /usr/sbin       /usr/share/man
MANPATH_MAP   /usr/local/bin      /usr/local/share/man
MANPATH_MAP   /usr/local/sbin     /usr/local/share/man
MANPATH_MAP   /usr/X11/bin        /usr/X11/man
MANPATH_MAP   /usr/bin/X11        /usr/X11/man
MANPATH_MAP   /usr/bin/mh     /usr/share/man

因此,查看/usr/share/man/man1,我看到grep.1它定义了 手册页的内容grep(1)

相关内容