Pourquoi existe-t-il des paths différents pour une command dans la section Synopsis d'une page Man?

En regardant la page de manuel de grep j'ai remarqué qu'il y a deux paths différents vers la command. Cela signifie-t-il que j'ai plusieurs outils grep sur mon système? Les lignes de synopsis qui ont le même path sont-elles des exemples d'utilisation différents du même outil? J'utilise 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. 

Une question de suivi: D'où viennent les pages man? Sont-ils générés dynamicment ou font-ils partie d'une installation statique?

Vous dites que vous êtes sur une machine macOS, mais le manuel ressemble grep manuel grep sur une machine Solaris . Voici le manuel de grep sur OSX 10.9 pour comparaison .

Sur Solaris, il existe plusieurs utilitaires avec plusieurs implémentations, et grep est l'un d'entre eux. Ceux dans /usr/bin adhèrent à XPG3, ce qui est court pour "X / Open Portability Guide, Issue 3". La spécification Unix Unix est basée sur XPG4 (ref: Wikipedia X / Open article )

Le grep dans /usr/bin , par exemple, ne supporte pas les expressions régulières étendues, alors que celui de /usr/xpg4/bin fait.

Si un utilitaire comporte plusieurs lignes synopsis dans son manuel, celles-ci décrivent généralement des moyens mutuellement exclusifs d'invoquer l'outil.

Celles-ci:

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

.. montrer que vous pouvez utiliser soit -e ou -f (ou les deux), mais que vous devez utiliser l'un d'entre eux.

Le dernier,

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

… montre que si vous n'utilisez ni -e ni -f , le pattern doit être spécifié sur la command line.

Voir aussi les standards(5) sur Solaris .


Les manuels sont installés «statiquement», c'est-à-dire en tant que files séparés que la command man lit et affiche. Cependant, selon votre système, certains d'entre eux peuvent être des files source groff ou mandoc , d'autres peuvent être pré-formatés en tant que files text, parfois stockés dans un directory frère vers les manuels non formatés. Ils peuvent parfois aussi être compressés. Lisez le manuel de l' man sur votre système ( man man ) pour voir comment les manuels sont manipulés là.

Le plus souvent, les manuels peuvent être trouvés dans /usr/share/man , /usr/local/share/man , ou un tel location.

Les pages manuelles sont formatées dynamicment, mais le contenu est statique. Sa configuration, y compris l'location des pages de manuel préformatées, est généralement définie dans /etc/man.conf .

Dans la partie pertinente sur ma machine 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 

Donc, en regardant dans /usr/share/man/man1 , je vois grep.1 qui définit le contenu de la page de manuel pour grep(1) .