如何查看debian / ubuntu deb包的更新日志?

我正在运行的Ubuntu,我有一个deb文件安装。 我已经做了deb包,所以我知道有一个debian更新日志(debchange)。 有无论如何看到我安装的任何软件包的debian changelog? 假设我没有访问此软件包的deb源文件,并且没有可用的deb文件。 我可以根据需要安装额外的软件包。

apt-listchanges是一个很好的软件包,但是如果没有deb文件,最好的办法就是从/usr/share/doc/somepackage/changelog.Debian.gz中读取Debian的更新日志。

创build一个shell函数:

 function debchanglog () { zless "/usr/share/doc/$1/changelog.Debian.gz" } 

或者,如果deb也存在于存储库中,并且您想知道旧版本的更新日志,则可以使用apt-get changelog package来读取所有更新日志。 例如openssl:

 apt-get changelog libssl1.0.0 

为了扩展Janne Pikkarainen的回答 ,下面是一个可以用来读取任何给定包的changelog.Debian.gz的别名:

 alias changelog="xargs -I% -- zless /usr/share/doc/%/changelog.Debian.gz <<<" 

它可以像这样使用:

 changelog PACKAGE 

但请注意,这是一个非常恶劣的解决scheme,在大多数情况下不推荐使用。 function或独立脚本是一个更好的解决scheme。

这是一个读取PACKAGE所有可用更新日志的函数:

 changelog(){ if (( $# != 1 )); then echo "Usage: ${FUNCNAME[0]} PACKAGE" return 1 fi find -L "/usr/share/doc/$1" -type f -name 'changelog*.gz' -exec zless {} \; 2>/dev/null } 

这是一个打印PACKAGE的所有可用更新日志的列表的function,并询问用户select哪一个更新:

 changelog(){ if (( $# != 1 )); then echo "Usage: ${FUNCNAME[0]} PACKAGE" return 1 fi local changelog changelogs readarray -t changelogs < <(find -L "/usr/share/doc/$1" -type f -name 'changelog*.gz' 2>/dev/null) if (( ${#changelogs[@]} == 0 )); then return 0 elif (( ${#changelogs[@]} == 1 )); then zless "${changelogs[0]}" return $? fi select changelog in "${changelogs[@]}" EXIT; do case $changelog in '') echo "ERROR: Invalid selection" >&2 continue ;; EXIT) return 0 ;; *) zless "$changelog" return $? ;; esac done }