이 매뉴얼 페이지에 오늘 날짜가있는 이유는 무엇입니까?


9

특정 man페이지 (내 경우에는 nc명령에 대한)가 시스템을 업데이트하지 않고 오늘 날짜를 가진 이유는 무엇 입니까? 또한 "무인 업데이트"로그에 해당 날짜의 특정 활동이 표시되지 않는 이유는 무엇입니까?

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

nc매뉴얼 페이지의 바닥 글입니다 .

BSD                             March 14, 2018                             BSD

그것은 groff 1.22.2 및 man-db 2.6.7.1이있는 Ubuntu 14.04 (trusty)를 기반으로 한 Linux Mint 17 (qiana)에 있습니다.

편집하다

요청 된 명령 출력 :

  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
    

어느 것이 이상하다 ...

  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. 추가 된 풋터 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
    

    날짜가 하드 코딩되지 않은 것 같습니다. 오늘 날짜를 생성하는 매크로 일 수 있습니다.

  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 오늘 날짜 표시 (2018 년 3 월 20 일)

  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

맨 페이지의 소스 코드는 여기 (OP 시스템에 설치된 버전)에서 볼 수 있습니다 .
Stephen Kitt

'사람'이 별칭이거나 재정의됩니까? type -a man출력이 도움이 될 것입니다.
Jeff Schaller

2
@Kiwy, 그것은 흥미로운 문제입니다. 더 큰 문제로 인해 발생할 수 있습니다.
Stéphane Chazelas

1
-0--delimiter='\n'(한 세트 NUL로 구분, LF에 다른) 거의 감지 함께합니다
스테판 Chazelas가

답변:


10

GNU roff는 다음을 지원하지 않았습니다.

 .Dd $Mdocdate: February 7 2012 $

OpenBSD 확장 (여기서 $Mdocdate: ...$CVS (OpenBSD에서 코드를 버전 관리하는 데 사용)에 의해 확장 된 CVS / RCS 키워드)은 수동 개정 날짜로 지정되어 현재 날짜가 지정된 날짜 대신 확장됩니다. 나는 그것을 가진 모든 맨 페이지에 대해 우분투 14.04에서 그것을 재생할 수 있습니다 Mdocdate.

https://lists.gnu.org/archive/html/groff-commit/2014-10/msg00092.html(groff 버전 1.22.3)에 구현 된 https://savannah.gnu.org/bugs/?42968를 참조 하십시오 .


동일한 CVS 키워드 를 사용하는 paxcpioor 와 같은 MirBSD (현재 MirOS) 의 매뉴얼 페이지의 경우 매뉴얼 페이지에서 mdoc 매크로 자체를 재정의 (포장) 하므로 roff 시스템 매크로는이를 지원하지 않아도됩니다.mksh$Mdocdate: ...$.Dd

.\"
.\" 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 $

1
그것은 훌륭한 디버깅이었습니다. 고마워
ychaouche

1
@ychaouche, 이제 되돌아 보면, 몇 가지 살펴 봐야 할 것이지만, 어떤 이유로 Mint Qiana가 14.04 대신 Ubuntu 16.04를 기반으로하고 16.04에 재현 할 수 없다고 생각했습니다
Stéphane Chazelas

귀하의 의견에 표시된 것처럼 zgrep을 사용 하여이 "버그"가있는 모든 매뉴얼 페이지 목록을 만들었습니다 : gist.github.com/ychaouche/fabe43225d1692dc325826d2be521bc4 . 나는 그들 중 일부를 수동으로 확인했다. 버그가있다. 그러나 데비안 8에서 수정 된 것 같습니다 (서버 중 하나에서 8.10 사용, 버그 없음)
ychaouche

man sshgroff 1.22.2-8과 함께 데비안 8.10 시스템의 현재 날짜를 보여줍니다. 어쩌면 groff새로운 릴리스에서 패키지 를 얻을 수 있습니다 (스트레치 1.22.3). 참조하십시오 apt-cache policy groff.
Stéphane Chazelas

1
@ychaouche, 그것은 실제로 버그가 아니며 OpenBSD가 .Ddmdoc 매크로에 새로운 형식을 추가 Month day, year했기 때문에 (그렇지 않으면을 받아들입니다 ) CVS 키워드를 사용할 수 있습니다 (여기서는 $Mdocdate: ... $CVS에 의해 문서 개정 날짜까지 확장되었습니다). 그들은 mdoc그것을 위해 그들 자신의 매크로를 업데이트했고 , 그 수정은 나중에 groff로 병합되어 OpenBSD 매뉴얼 페이지가 다른 시스템에서 올바르게 포맷 될 수있었습니다.
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.