Pourquoi cette page de manuel a-t-elle la date d'aujourd'hui?

9

Pourquoi une manpage spécifique (dans mon cas, pour la nccommande) aurait-elle la date d'aujourd'hui sans que je fasse de mises à jour du système? En outre, pourquoi le journal de "mise à jour sans assistance" n'affiche-t-il aucune activité spécifique pour cette journée?

2018-03-14 07:47:38,124 INFO Initial blacklisted packages:
2018-03-14 07:47:38,135 INFO Starting unattended upgrades script
2018-03-14 07:47:38,135 INFO Allowed origins are: ['o=LinuxMint,a=qiana-security', 'o=LinuxMintESM,a=qiana']
2018-03-14 07:47:51,767 INFO No packages found that can be upgraded unattended and no pending auto-removals

Voici le pied de page de la ncpage de manuel:

BSD                             March 14, 2018                             BSD

C'est sur Linux Mint 17 (qiana), basé sur Ubuntu 14.04 (fidèle) avec groff 1.22.2 et man-db 2.6.7.1.

ÉDITER

Sorties des commandes demandées:

  1. man -aw nc

    /usr/share/man/man1/nc_openbsd.1.gz
    
  2. ls -ld $(man -aw nc)

    -rw-r--r-- 1 root root 5.7K Dec  4  2012 /usr/share/man/man1/nc_openbsd.1.gz
    

Ce qui est bizarre ...

  1. dpkg -S $(man -aw nc)?

    netcat-openbsd: /usr/share/man/man1/nc_openbsd.1.gz
    
  2. type -a man

    man is /usr/bin/man
    
  3. zgrep docdate $(man -aw nc)

    .Dd $Mdocdate: February 7 2012 $
    
  4. PIED AJOUTÉ strace -f man nc 2>&1 | grep -e '^BSD' -e '"/.*nc'

    ychaouche#ychaouche-PC 14:31:15 ~ $ strace -f man nc 2>&1 | grep -e '^BSD' -e '"/.*nc'
    execve("/usr/bin/man", ["man", "nc"], [/* 87 vars */]) = 0
    lstat("/usr/share/man/man1/nc.1.gz", {st_mode=S_IFLNK|0777, st_size=25, ...}) = 0
    lstat("/usr/share/man/man1/nc.1.gz", {st_mode=S_IFLNK|0777, st_size=25, ...}) = 0
    readlink("/usr/share/man/man1/nc.1.gz", "/etc/alternatives/nc.1.gz", 4095) = 25
    lstat("/etc/alternatives/nc.1.gz", {st_mode=S_IFLNK|0777, st_size=35, ...}) = 0
    readlink("/etc/alternatives/nc.1.gz", "/usr/share/man/man1/nc_openbsd.1"..., 4095) = 35
    lstat("/usr/share/man/man1/nc_openbsd.1.gz", {st_mode=S_IFREG|0644, st_size=5756, ...}) = 0
    stat("/usr/share/man/man1/nc_openbsd.1.gz", {st_mode=S_IFREG|0644, st_size=5756, ...}) = 0
    stat("/usr/share/man/man1/nc_openbsd.1.gz", {st_mode=S_IFREG|0644, st_size=5756, ...}) = 0
    open("/usr/share/man/man1/nc_openbsd.1.gz", O_RDONLY) = 3
    access("/usr/share/man/man1/nc.1.gz", R_OK) = 0
    lstat("/usr/share/man/man1/nc.1.gz", {st_mode=S_IFLNK|0777, st_size=25, ...}) = 0
    lstat("/usr/share/man/man1/nc.1.gz", {st_mode=S_IFLNK|0777, st_size=25, ...}) = 0
    readlink("/usr/share/man/man1/nc.1.gz", "/etc/alternatives/nc.1.gz", 4095) = 25
    lstat("/etc/alternatives/nc.1.gz", {st_mode=S_IFLNK|0777, st_size=35, ...}) = 0
    readlink("/etc/alternatives/nc.1.gz", "/usr/share/man/man1/nc_openbsd.1"..., 4095) = 35
    lstat("/usr/share/man/man1/nc_openbsd.1.gz", {st_mode=S_IFREG|0644, st_size=5756, ...}) = 0
    stat("/usr/share/man/man1/nc_openbsd.1.gz", {st_mode=S_IFREG|0644, st_size=5756, ...}) = 0
    stat("/usr/share/man/man1/nc_openbsd.1.gz", {st_mode=S_IFREG|0644, st_size=5756, ...}) = 0
    open("/usr/share/man/man1/nc_openbsd.1.gz", O_RDONLY) = 3
    stat("/usr/share/man/man1/nc.1.gz", {st_mode=S_IFREG|0644, st_size=5756, ...}) = 0
    stat("/usr/share/man/cat1/nc.1.gz", 0x7fffa49c0940) = -1 ENOENT (No such file or directory)
    stat("/usr/share/man/man1/nc_openbsd.1.gz", {st_mode=S_IFREG|0644, st_size=5756, ...}) = 0
    open("/usr/share/man/man1/nc_openbsd.1.gz", O_RDONLY) = 3
    [pid  3878] stat("/usr/share/man/man1/nc_openbsd.1.gz", {st_mode=S_IFREG|0644, st_size=5756, ...}) = 0
    [pid  3878] access("/usr/share/man/man1/nc_openbsd.1.gz", R_OK <unfinished ...>
    BSD                             March 20, 2018                             BSD
    
  5. strace -f man nc 2>&1 | grep -vwe -1 | grep -o '"/[^"]*"' | sort -u | grep -v /dev/ | xargs sh -c 'zgrep "March 14" "$@"' sh 2> /dev/null

     no output
    

    il semble que la date ne soit pas codée en dur. Il peut s'agir d'une macro générant la date d'aujourd'hui.

  6. env | grep -e ROFF -e MAN -e GRO

    SESSION_MANAGER=local/ychaouche-PC:@/tmp/.ICE-unix/2915,unix/ychaouche-PC:/tmp/.ICE-unix/2915
    MANDATORY_PATH=/usr/share/gconf/default.mandatory.path
    
  7. env -i man nc affiche la date du jour (20 mars 2018)

  8. zcat /usr/share/man/man1/nc_openbsd.1.gz | nroff -mandoc | grep BSD

    ychaouche#ychaouche-PC 06:59:53 ~ $ zcat /usr/share/man/man1/nc_openbsd.1.gz | nroff -mandoc | grep BSD
    NC(1)                     BSD General Commands Manual                    NC(1)
    BSD                             March 20, 2018                             BSD
    ychaouche#ychaouche-PC 07:01:41 ~ $
    
  9. strace -f man nc 2>&1 | grep -vwe -1 | grep -o '"/[^"]*tmac/[^"]*"' | sort -u | xargs ls -lrtd

    ychaouche#ychaouche-PC 17:26:08 /usr/share/man/man1 $ unalias ls
    ychaouche#ychaouche-PC 17:26:12 /usr/share/man/man1 $ unalias xargs
    ychaouche#ychaouche-PC 17:26:14 /usr/share/man/man1 $ unalias grep
    ychaouche#ychaouche-PC 17:26:16 /usr/share/man/man1 $ strace -f man nc 2>&1 | grep -vwe -1 | grep -o '"/[^"]*tmac/[^"]*"' | sort -u | xargs ls -lrtd
    -rw-r--r-- 1 root root  4065 Jan 22  2014 /usr/share/groff/1.22.2/tmac/papersize.tmac
    -rw-r--r-- 1 root root  1860 Jan 22  2014 /usr/share/groff/1.22.2/tmac/andoc.tmac
    -rw-r--r-- 1 root root    71 Jan 22  2014 /usr/share/groff/1.22.2/tmac/unicode.tmac
    -rw-r--r-- 1 root root  1552 Jan 22  2014 /usr/share/groff/1.22.2/tmac/tty.tmac
    -rw-r--r-- 1 root root  5183 Jan 22  2014 /usr/share/groff/1.22.2/tmac/tty-char.tmac
    -rw-r--r-- 1 root root  1145 Jan 22  2014 /usr/share/groff/1.22.2/tmac/troffrc-end
    -rw-r--r-- 1 root root  1387 Jan 22  2014 /usr/share/groff/1.22.2/tmac/troffrc
    -rw-r--r-- 1 root root  4729 Jan 22  2014 /usr/share/groff/1.22.2/tmac/pspic.tmac
    -rw-r--r-- 1 root root 22042 Jan 22  2014 /usr/share/groff/1.22.2/tmac/mdoc/doc-syms
    -rw-r--r-- 1 root root  4048 Jan 22  2014 /usr/share/groff/1.22.2/tmac/mdoc/doc-nroff
    -rw-r--r-- 1 root root 29284 Jan 22  2014 /usr/share/groff/1.22.2/tmac/mdoc/doc-common
    -rw-r--r-- 1 root root  2250 Jan 22  2014 /usr/share/groff/1.22.2/tmac/latin1.tmac
    -rw-r--r-- 1 root root 27860 Jan 22  2014 /usr/share/groff/1.22.2/tmac/hyphen.us
    -rw-r--r-- 1 root root 15678 Jan 22  2014 /usr/share/groff/1.22.2/tmac/hyphenex.us
    -rw-r--r-- 1 root root  1362 Jan 22  2014 /usr/share/groff/1.22.2/tmac/fallbacks.tmac
    -rw-r--r-- 1 root root 73807 Jan 22  2014 /usr/share/groff/1.22.2/tmac/doc.tmac
    -rw-r--r-- 1 root root   537 Jan 22  2014 /usr/share/groff/1.22.2/tmac/composite.tmac
    -rw-r--r-- 1 root root   704 Jan 22  2014 /usr/share/groff/site-tmac/mdoc.local
    ychaouche#ychaouche-PC 17:26:18 /usr/share/man/man1 $
    
ychaouche
la source
C'était hier hier. J'ai mis à jour la description de l'article pour inclure la sortie des commandes demandées.
ychaouche
Le code source de la page de manuel est visible ici (dans la version apparemment installée sur le système de l'OP).
Stephen Kitt
«Homme» est-il aliasé ou remplacé? type -a manla sortie aiderait.
Jeff Schaller
2
@Kiwy, eh bien, c'est un problème intrigant. Et pourrait être causé par un problème plus important.
Stéphane Chazelas
1
-0et ont --delimiter='\n'peu de sens ensemble (l'un définit le délimiteur sur NUL, l'autre sur LF)
Stéphane Chazelas

Réponses:

10

GNU roff ne supportait pas ceux-ci:

 .Dd $Mdocdate: February 7 2012 $

Extension OpenBSD (ici qu'il $Mdocdate: ...$s'agit d'un mot-clé CVS / RCS développé par CVS (qu'OpenBSD utilise pour contrôler la version de leur code) avec la date de la révision manuelle), ce qui entraîne l'extension de la date actuelle au lieu de celle spécifiée. Je peux le reproduire sur Ubuntu 14.04 pour toutes les pages de manuel qui en ont un Mdocdate.

Voir https://savannah.gnu.org/bugs/?42968 implémenté dans https://lists.gnu.org/archive/html/groff-commit/2014-10/msg00092.html (groff version 1.22.3).


Pour les pages de manuel de MirBSD (maintenant MirOS) comme votre paxcpioou mksh, qui utilisent le même $Mdocdate: ...$mot clé CVS, vous trouverez les pages de manuel redéfinissant ( .Ddencapsuler ) la macro mdoc elles-mêmes, afin que les macros du système roff n'aient pas à le prendre en charge:

.\"
.\" Implement .Dd with the Mdocdate RCS keyword
.\"
.rn Dd xD
.de Dd
.ie ^G\\$1^G$Mdocdate:^G \{\
.       xD \\$2 \\$3, \\$4
.\}
.el .xD \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
..
.\"
.\" .Dd must come before definition of .Mx, because when called
.\" with -mandoc, it might implement .Mx itself, but we want to
.\" use our own definition. And .Dd must come *first*, always.
.\"
.Dd $Mdocdate: August 16 2017 $
Stéphane Chazelas
la source
1
C'était un brillant débogage. Merci beaucoup.
ychaouche
1
@ychaouche, maintenant en regardant en arrière, cela aurait dû être l'une des rares choses à regarder, mais pour une raison quelconque, je pensais que votre Mint Qiana était basée sur Ubuntu 16.04 au lieu de 14.04 et ne pouvait pas la reproduire le 16.04
Stéphane Chazelas
En utilisant zgrep comme indiqué dans votre commentaire, j'ai fait une liste de toutes les pages de manuel qui avaient ce "bug": gist.github.com/ychaouche/fabe43225d1692dc325826d2be521bc4 . J'ai vérifié manuellement certains d'entre eux, le bug est là. Mais il semble avoir été corrigé dans Debian 8 (en utilisant 8.10 sur l'un des serveurs, bug pas là.)
ychaouche
man sshmontre ici la date actuelle sur un système Debian 8.10 avec groff 1.22.2-8. Peut-être que vous obtenez le groffpackage à partir d'une version plus récente (stretch a 1.22.3). Tu vois apt-cache policy groff.
Stéphane Chazelas
1
@ychaouche, ce n'est pas vraiment un bug, c'est .Ddqu'OpenBSD a ajouté un nouveau format pour la macro mdoc (qui accepte autrement Month day, year), afin qu'ils puissent y utiliser le mot-clé CVS (ici $Mdocdate: ... $qui est développé par CVS à la date de la révision du document). Ils ont mis à jour leurs propres mdocmacros pour cela et ces modifications ont ensuite été fusionnées dans groff afin que les pages de manuel d'OpenBSD puissent être correctement formatées sur d'autres systèmes.
Stéphane Chazelas