เหตุใดหน้าคนนี้จึงมีวันที่วันนี้


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

ใช้ Linux Mint 17 (qiana) บน Ubuntu 14.04 (trusty) กับ groff 1.22.2 และ man-db 2.6.7.1

แก้ไข

เอาต์พุตคำสั่งที่ร้องขอ:

  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 แสดงวันที่วันนี้ (20 มีนาคม 2561)

  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

ซอร์สโค้ดของ manpage สามารถมองเห็นได้ที่นี่ (ในเวอร์ชั่นที่ติดตั้งบนระบบของ OP)
Stephen Kitt

'man' aliased หรือ overridden หรือไม่? type -a manการส่งออกจะช่วย
Jeff Schaller

2
@ กีวีดีนั่นเป็นปัญหาที่น่าสนใจ และอาจเกิดจากปัญหาที่ใหญ่กว่า
Stéphane Chazelas

1
-0และ--delimiter='\n'ทำให้ความรู้สึกเล็ก ๆ น้อย ๆ ด้วยกัน (หนึ่งตั้งตัวคั่นเพื่อ NUL, อื่น ๆ เพื่อ LF)
Stéphane Chazelas

คำตอบ:


10

GNU roff ไม่สนับสนุนสิ่งเหล่านี้:

 .Dd $Mdocdate: February 7 2012 $

ส่วนขยาย OpenBSD (ที่นี่$Mdocdate: ...$เป็นคำหลัก CVS / RCS ที่ขยายโดย CVS (ซึ่ง OpenBSD ใช้เพื่อควบคุมเวอร์ชันของรหัส) ด้วยวันที่แก้ไขด้วยตนเอง) ส่งผลให้วันที่ปัจจุบันถูกขยายแทนวันที่ที่ระบุ ฉันสามารถทำซ้ำบน Ubuntu 14.04 Mdocdateสำหรับทุกหน้าคนที่มีเช่น

ดูhttps://savannah.gnu.org/bugs/?42968ดำเนินการในhttps://lists.gnu.org/archive/html/groff-commit/2014-10/msg00092.html (รุ่น Groff 1.22.3)


สำหรับ man pages จาก MirBSD (ตอนนี้ MirOS) เหมือนของคุณpaxcpioหรือmkshซึ่งใช้$Mdocdate: ...$คำสำคัญ CVS เดียวกันคุณจะพบ man man ที่นิยาม.Ddมาโครใหม่ (ตัดคำ) แมโคร mdoc ด้วยตนเองดังนั้นแมโครระบบ roff จึงไม่ต้องสนับสนุน:

.\"
.\" 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 ของคุณใช้ Ubuntu 16.04 แทน 14.04 และไม่สามารถทำซ้ำได้ใน 16.04
Stéphane Chazelas

ใช้ zgrep ดังแสดงในความคิดเห็นของคุณฉันทำรายการของทุกหน้าคนที่มีนี้ "ข้อผิดพลาด": gist.github.com/ychaouche/fabe43225d1692dc325826d2be521bc4 ฉันตรวจสอบด้วยตนเองบางส่วนข้อผิดพลาดอยู่ที่นั่น แต่ดูเหมือนว่าจะได้รับการแก้ไขใน Debian 8 (ใช้ 8.10 บนเซิร์ฟเวอร์ตัวใดตัวหนึ่งไม่มีข้อผิดพลาด)
ychaouche

man sshแสดงวันที่ปัจจุบันบนระบบ Debian 8.10 ที่นี่ด้วย groff 1.22.2-8 บางทีคุณอาจได้รับgroffแพ็คเกจจากรีลีสที่ใหม่กว่า (ยืดได้ 1.22.3) apt-cache policy groffดู
Stéphane Chazelas

1
@ychaouche ไม่ใช่ข้อผิดพลาดจริงๆที่ OpenBSD เพิ่มรูปแบบใหม่สำหรับ.Ddแมโคร mdoc (ซึ่งยอมรับอย่างอื่นMonth day, year) เพื่อให้พวกเขาสามารถใช้คำหลัก CVS ในนั้นได้ (ที่นี่$Mdocdate: ... $ซึ่งขยายโดย CVS จนถึงวันที่แก้ไขเอกสาร) พวกเขาอัพเดทmdocมาโครของตัวเองสำหรับสิ่งนั้นและการดัดแปลงเหล่านั้นถูกรวมเข้าใน Groff เพื่อที่ว่าหน้าคน OpenBSD สามารถจัดรูปแบบได้อย่างถูกต้องในระบบอื่น ๆ
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.