我如何查看debian / ubuntu deb软件包的变更日志?


19

我正在运行Ubuntu,并且安装了一个deb文件。我之前制作过deb软件包,所以我知道有一个debian变更日志(debchange)。无论如何,我是否可以查看我已安装的任何软件包的debian changelog?假设我无权访问此软件包的deb源文件,并且我没有可用的deb文件。如果需要,我可以安装其他软件包。


5
查看apt-get已安装软件包的更改:apt-get changelog <package>
jfs

@JFSebastian apt-get没有这样的命令。
gipi 2013年

2
@gipi:apt-get changelog apt | grep -C5 'apt-get changelog'表明此命令是在apt (0.8.9ubuntu1) natty(2010)中引入的。您可以获取源代码(毕竟它是开源的):运行apt-get source apt并查找cmdline/apt-get.cc文件并查看DoChangelog()函数(顺便说一句,查看DoMoo()函数)。
jfs

奇怪的是,我有(debian)apt 0.9.12.1,此命令不可用。
gipi

Answers:


22

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

apt-get changelog libssl1.0.0

这绝对是Debian Jessie和Ubuntu中2016年的相关答案:)
Dmitri DB

这是正确的答案。
Teekin

12

apt-listchanges是一个不错的软件包,但是最好的选择是没有一个deb文件,最好是从/usr/share/doc/somepackage/changelog.Debian.gz中读取Debian更改日志。

使用以下命令创建一个shell函数:

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

正如OP所暗示的,debchange实际上是devscripts中用于创建变更日志条目的现有工具。因此,我强烈建议您选择其他名称。另外,$0可能不会达到您的期望。就我而言,它将始终执行zless /usr/share/doc/bash/changelog.Debian.gz。根据您的情况,将其替换bash为您要执行的shell或脚本的名称。
2015年

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
}

这是一个打印所有可用变更日志包的列表并查询用户以选择要读取的日志的函数:

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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.