¿Por qué hay diferentes routes para un command en la sección Sinopsis de una página de manual?

Al mirar la página man para grep , noté que hay dos paths diferentes para el command. ¿Esto significa que tengo múltiples herramientas grep en mi sistema? ¿Son las líneas de sinopsis que tienen la misma ruta solo ejemplos de uso diferentes de la misma herramienta? Estoy usando 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. 

Una pregunta de seguimiento: ¿De dónde vienen las páginas de manual? ¿Se generan dinámicamente o son parte de una installation estática?

Usted dice que está en una máquina macOS, pero el manual se parece sospechosamente al manual grep en una máquina Solaris . Aquí está el manual para grep en OSX 10.9 para comparación .

En Solaris, hay varias utilidades con implementaciones múltiples, y grep es una de ellas. Los que están en /usr/bin adhieren a XPG3, que es la abreviatura de "X / Open Portability Guide, Issue 3". La especificación de Single Unix se basa en XPG4 (ref: Wikipedia X / artículo abierto )

El grep en /usr/bin no admite, por ejemplo, expresiones regulares extendidas, mientras que el que está en /usr/xpg4/bin sí lo hace.

Si una utilidad tiene varias líneas de sinopsis en su manual, estas generalmente describen forms mutuamente excluyentes de invocar la herramienta.

Estas:

 /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]... 

.. demuestre que puede usar -e o -f (o ambos) pero que debe usar uno de ellos.

El último,

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

… muestra que si no usa ni -e ni -f , entonces el pattern debe especificarse en la línea de command.

Ver también standards(5) en Solaris .


Los manuales se instalan "estáticamente", es decir, como files separados que el command man lee y muestra. Sin embargo, dependiendo de su sistema, algunos de ellos pueden ser files fuente groff o mandoc , mientras que otros pueden formatearse previamente como files de text, a veces almacenados en un directory hermano en los manuales sin formatear, a menudo llamados algo así como cat . A veces también pueden estar comprimidos. Lea el manual del man en su sistema ( man man ) para ver cómo se manejan los manuales allí.

Muy a menudo, los manuales se pueden encontrar en /usr/share/man , /usr/local/share/man , o en alguna de esas ubicaciones.

Las páginas del manual tienen un formatting dynamic, pero el contenido es estático. Su configuration, incluida la location de las páginas del manual preformateadas, se define típicamente en /etc/man.conf .

En parte relevante en mi máquina 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 requinetworking. # # 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 

Entonces, mirando en /usr/share/man/man1 , veo grep.1 que define el contenido de la página de manual para grep(1) .