我正在运行 Ubuntu,并且安装了一个 deb 文件。我之前制作过 deb 软件包,所以我知道有一个 debian 变更日志 (debchange)。有没有办法查看我安装的任何软件包的 debian 变更日志?假设我无法访问此软件包的 deb 源文件,并且我没有可用的 deb 文件。如果需要,我可以安装额外的软件包。
答案1
或者,如果 deb 也在存储库中,并且您想要了解旧版本的变更日志,则可以使用 来apt-get changelog package
读取所有变更日志。例如对于 openssl:
apt-get changelog libssl1.0.0
答案2
apt-listchanges
是一个很好的软件包,但如果没有 deb 文件,你最好的选择很可能是阅读 Debian 更新日志/usr/share/doc/somepackage/changelog.Debian.gz。
使用以下命令创建 shell 函数:
function debchanglog () {
zless "/usr/share/doc/$1/changelog.Debian.gz"
}
答案3
延续 Janne Pikkarainen 的回答,这里有一个别名,可以用来读取任何给定包的 changelog.Debian.gz:
alias changelog="xargs -I% -- zless /usr/share/doc/%/changelog.Debian.gz <<<"
它可以像这样使用:
changelog PACKAGE
但请注意,这是一个非常不成熟的解决方案,在大多数情况下不推荐使用。函数或独立脚本是更好的解决方案。
这是一个读取 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 的所有可用更改日志的列表,并询问用户选择要读取的更改日志:
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
}
答案4
在 Ubuntu 18.04+ 中,的现代版本apt
可以执行以下操作(而不是apt-get
):
ubuntu18-04:~% apt changelog nginx
nginx (1.14.0-0ubuntu1.9) bionic-security; urgency=medium
* SECURITY UPDATE: DNS Resolver issues
- debian/patches/CVE-2021-23017-1.patch: fixed off-by-one write in
src/core/ngx_resolver.c.
- debian/patches/CVE-2021-23017-2.patch: fixed off-by-one read in
src/core/ngx_resolver.c.
- CVE-2021-23017
...