Man

如何查看同一程序的不同版本的手冊頁之間的差異?

  • January 17, 2017

每當我升級我的一個 Linux 機器(即安裝我最喜歡的發行版的下一個版本)時,升級相應的配置文件總是非常耗時,因為在許多情況下我不只是更改發行版的預設配置文件以反映我的情況,但是我非常仔細地製作了自己的配置文件。

到目前為止,在升級時,在這些情況下,我要麼完全從頭開始閱讀相應的手冊頁並從頭開始製作新的配置文件(這很乾淨,但需要付出很多努力),或者我已經比較(想想差異)舊的和新發行版的預設配置文件,當我看到可能很重要的差異時,我已將其“移植”(合併)到我自己的配置文件中(出於多種原因,我對該方法不滿意,其中之一是維護者可能會忽略一個新的配置指令,在我的情況下忽略它可能很危險;但如果我趕時間,它並不總是可以避免的)。

我總是問自己其他人如何應對這個問題。一種想法是將軟體舊版本的手冊頁與新版本的手冊頁進行比較,從而立即查看配置指令或方法的所有差異。

所以這裡有一個問題:是否有人知道手冊頁的特定差異查看器,特別是文本控制台(主要場景將通過沒有 X 的 SSH 工作)?

請注意,我知道有很多差異查看器(我已經閱讀了數十篇​​關於此主題的文章和問答)。我的問題特別是關於提供一些安慰的手冊頁的差異查看器(例如,你告訴它舊手冊頁的基本目錄,然後只需要說“show diff sshd_config”等)。

我也知道我最終可以閱讀相應上游的更改日誌,但我見過很多你不能依賴它的情況(即不是所有的更改都在那裡提到),它更不方便,而且一些發行版嚴重修補上游,所以我會說這不是一個真正的選擇。僅將舊版本的原始碼與新版本的原始碼進行比較以了解新的配置選項似乎太多了,而且對於 Apache、Sendmail 等可能是不可能的。相比之下,比較手冊頁似乎是合理的(如果可能的話)。

有任何想法嗎?

手冊頁一旦更改為人類可讀的形式,就是文本文件,您可以使用適合您的任何工具進行比較。這裡有兩個範例,作為兩個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
)

在每個函式中,我在兩個偽文件之間進行區分<(...),每個偽文件都包含man括號之間的命令結果(這是bash 的 Process Substitution)。

/old/path/to/man是包含舊手冊頁的目錄層次結構。預計它與您的主要手冊目錄(可能)具有相同的輔助 man 級別man1, , … 。更改它以滿足您的需求。man2``/usr/share/man

用法:

diff_man sshd_config
vimdiff_man sshd_config

引用自:https://unix.stackexchange.com/questions/337884