Please enable Javascript to view the contents

Ubuntu 包依赖与变更管理

 ·  ☕ 2 分钟

1. 查看包依赖

1.1 正向依赖

依赖哪些包

  • 列出依赖
1
apt-cache depends apparmor
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apparmor
  Depends: debconf             # 必须
  Depends: lsb-base            # 必须
 |Depends: debconf             # 必须
  Depends: <debconf-2.0>       # 多选一
    cdebconf
    debconf
  Depends: libc6               # 必须
  Breaks: apparmor-profiles-extra # 不兼容
  Breaks: fcitx-data           # 不兼容
  Breaks: snapd                # 不兼容
  Suggests: apparmor-profiles-extra # 建议安装
  Suggests: apparmor-utils     # 建议安装
  Replaces: fcitx-data         # 用于替代后者
  • 查看已安装的依赖
1
apt-cache depends --installed apparmor
  • 查看详细依赖
1
2
apt show apparmor
dpkg -s apparmor | grep -E '^(Package|Version|Depends|Pre-Depends|Recommends|Suggests|Conflicts|Breaks|Replaces):'

1.2 反向依赖

谁依赖这个包

  • 列出所有可能依赖该包的包
1
apt-cache rdepends golang-github-containers-common
  • 只看已安装的反向依赖
1
apt-cache rdepends --installed golang-github-containers-common
1
2
3
4
5
6
golang-github-containers-common
Reverse Depends:
  skopeo
  podman
  buildah
  podman
  • 解释为什么装了某包
1
aptitude why golang-github-containers-common
1
2
3
i   devscripts  Suggests autopkgtest
p   autopkgtest Suggests podman
p   podman      Depends  golang-github-containers-common
  • 解释为什么没装或不能装
1
aptitude why-not golang-github-containers-common

1.3 依赖树与冲突

模拟安装与文件反查

  • 查看依赖解析树
1
apt-cache showpkg apparmor
  • 模拟安装单个包
1
apt install --simulate apparmor
  • 模拟整次升级
1
apt-get -s upgrade
  • 反查文件属于哪个包
1
dpkg -S /usr/bin/apparmor
  • 列出包安装了哪些文件
1
dpkg -L apparmor

1.4 第三方与非官方源包

Snap、手工安装等需单独排查

  • 查看包来自哪个源
1
apt-cache policy apparmor
  • 查看已配置的 apt 源
1
cat /etc/apt/sources.list /etc/apt/sources.list.d/*.list
  • 查看 Snap 包
1
snap list
  • 查看二进制路径与类型
1
which apparmor && file "$(which apparmor)"

2. 查看包的变更历史

2.1 本机变更记录

最近什么时候装、升、删过

  • 查看 APT 操作历史
1
less /var/log/apt/history.log
  • 查看 dpkg 状态变更
1
less /var/log/dpkg.log
  • 按包名过滤历史
1
2
zgrep -h apparmor /var/log/apt/history.log* /var/log/dpkg.log*
grep -E 'install|upgrade|remove' /var/log/apt/history.log | grep apparmor
  • history.log 记录格式示例
Start-Date: 2026-07-10  14:32:01
Commandline: apt upgrade
Upgrade: apparmor:amd64 (3.0.4-2ubuntu2, 1.18.0-6ubuntu14.5)
End-Date: 2026-07-10  14:32:15

2.2 上游变更记录

这个包在仓库里改过什么

  • 查看 changelog
1
apt changelog apparmor | less
  • 查看可用版本与来源优先级
1
apt-cache policy apparmor
  • 列出仓库中所有可用版本
1
apt-cache madison apparmor

Ubuntu 官方还可查 Launchpad 上对应源码包的 changelog 与 bugs,适合看跨多个版本的修复记录。

2.3 版本差异对比

升级前后文件变化

  • 查看缓存中的 deb 内容
1
dpkg-deb -c /var/cache/apt/archives/apparmor_*.deb | head
  • 导出当前安装的文件列表
1
dpkg -L apparmor > /tmp/apparmor-files.txt

3. 固定包的版本

3.1 锁定版本 hold

禁止指定包被升级

  • 锁定包
1
apt-mark hold apparmor
  • 查看已锁定的包
1
apt-mark showhold
  • 解除锁定
1
apt-mark unhold apparmor

适合核心中间件(apparmor、mysql、内核)及已知有 breaking change 的版本。

3.2 安装时指定版本

安装或降级到指定版本

  • 查找版本
1
apt-cache madison apparmor
  • 模拟安装
1
apt install --simulate apparmor=3.0.4-2ubuntu2
  • 安装指定版本
1
apt install apparmor=3.0.4-2ubuntu2

3.3 升级前预览

先看会动哪些包再执行

  • 列出可升级的包
1
apt list --upgradable
  • 模拟 upgrade
1
apt-get -s upgrade
  • 模拟 dist-upgrade
1
apt-get -s dist-upgrade
  • 安装 apt-listchanges 显示变更说明
1
apt install apt-listchanges

微信公众号
作者
微信公众号