查看手册页,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 机器,但手册看起来很可疑grep
Solaris 机器上的手册。这是 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]...
...表明如果您既不使用也不使用-e
nor -f
,则pattern
需要在命令行上指定。
也可以看看standards(5)
在 Solaris 上。
手册“静态”安装,即作为命令man
读取和显示的单独文件。但是,根据您的系统,其中一些可能是groff
源mandoc
文件,而另一些可能被预先格式化为文本文件,有时存储在未格式化手册的同级目录中,通常称为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)
。