如何查看同一程序不同版本的手册页之间的差异?

如何查看同一程序不同版本的手册页之间的差异?

每当我升级我的 Linux 机器(即安装我最喜欢的发行版的下一个版本)时,升级相应的配置文件总是非常耗时,因为在许多情况下,我不只是更改发行版的默认配置文件来反映我的情况,但我非常仔细地制作了自己的配置文件。

到目前为止,在升级时,在这些情况下,我要么从头开始完全阅读相应的手册页,并从头开始制作新的配置文件(这很干净,但需要花费很多精力),要么我比较了(认为差异)旧的和新发行版的默认配置文件,当我看到一个可能很重要的差异时,我已将其“移植”(合并)到我自己的配置文件中(出于多种原因,我对该方法不满意,其中之一是维护者可能会忽略一个新的配置指令,在我的情况下忽略它可能很危险;但如果我很着急,它并不总是可以避免的)。

我总是问自己其他人如何应对这个问题。一种想法是将旧版本软件的手册页与新版本的手册页进行比较,从而立即看到配置指令或方法中的所有差异。

所以问题是:有人知道手册页的特定差异查看器,特别是文本控制台(主要场景是通过 SSH 而不使用 X 工作)?

请注意,我知道有很多差异查看者(我已经阅读了数十篇有关此主题的文章和问答)。我的问题特别是关于手册页的 diff 查看器,它提供了一些安慰(例如,您告诉它旧手册页的基本目录,然后只需说“show diff sshd_config”或类似内容)。

我也知道我最终可以阅读相应上游的更改日志,但我见过很多情况,你不能依赖它(即没有提到所有的更改),它更不方便,并且一些发行版严重修补上游,所以我想说这并不是一个真正的选择。仅仅为了找出新的配置选项而将旧版本的源代码与新版本的源代码进行比较似乎太多了,对于 Apache、Sendmail 等,这似乎是不可能的。相反,比较手册页似乎是合理的(如果可能的话)。

有任何想法吗?

答案1

手册页一旦更改为人类可读的形式,就是文本文件,您可以使用任何适合您的工具进行比较。以下是两个示例,作为bash两个工具的两个函数:diffvimdiff。让它们适应您最喜欢的工具。

vimdiff

vimdiff_man() { vimdiff -R <(man --manpath="/old/path/to/man" "$1") <(man "$1"); }

并排diff放置,以适应您的屏幕宽度:

diff_man() (
    width="${COLUMNS:-80}"
    export MANWIDTH=$((width / 2 - 2))
    diff -y -W"$width" <(man --manpath="/old/path/to/man" "$1") <(man "$1") | less
)

在每个函数中,我在两个伪文件之间进行比较,每个文件都包含括号之间<(...)的命令结果(这是manbash 的进程替换)。

/old/path/to/man是包含旧手册页的目录层次结构。预计它具有与您的主要手册目录相同的辅助人员级别man1,...。更改它以满足您的需求。man2/usr/share/man

用法:

diff_man sshd_config
vimdiff_man sshd_config

答案2

抱歉,大家,我无法抗拒这个......修改已接受的答案,如下所示:

diff -y -w -W 150 <(links -dump  "http://man.he.net/?topic=grep&section=all" |less |fold -s -w 70) <(man grep |less |fold -s -w 70)

您可以并排比较本地安装的手册页和在线手册页......我只是喜欢它并想分享它。

当然,您可以将 man.he.net 替换为您最喜欢的在线手册页查看器(即https://manpages.debian.org)。

这甚至还很好用:

diff -y -w -W 150 <(links -dump "https://www.mankier.com/?q=grep" |less |fold -s -w 70) <(man grep |less |fold -s -w 70)

PS:-w 是忽略所有空白并仅比较行所必需的。在这两种情况下都使用 less 来在读取和比较过程中使用统一的格式。

相关内容