等风等雨等雨停头像

APT 仓库包查看方法文档

1. 背景与问题

系统里同时存在两类包信息:

  1. 远程仓库中的包(来自 sources.list 配置的源,下载索引缓存在 /var/lib/apt/lists/)

  2. 本机已安装的包(记录在 dpkg 数据库 /var/lib/dpkg/status)

很多命令(如 apt-cache show、apt-cache policy)会同时显示这两类信息,容易让人误以为“仓库里有多个版本”。本文档说明三个常用数据源/命令的差异,并给出“只看仓库包”的推荐方法。


2. 三个数据源/命令对比

项目apt-cache showapt-cache policy/var/lib/apt/lists/*Packages
数据来源APT 已知的所有版本(仓库 + 本机 dpkg)APT 版本表(仓库 + dpkg/status)仅远程仓库索引缓存文件
是否含本机已安装记录✅(有 Status: install ok installed 段落)✅(Installed: 和 *** 行)❌
是否含远程仓库版本✅✅✅
显示候选版本❌✅(Candidate:)❌
显示优先级❌✅(500 / 100 等)❌
显示下载信息✅(Filename、Size、SHA256)❌✅(同 show 的字段)
输出格式多段完整元数据结构化摘要原始 Packages 索引(每包一段)
适合场景看某包某版本的完整字段(大小、依赖、校验值、配置文件)判断“升级会装哪个版本、为什么”列出仓库里有哪些包、有哪些版本

3. apt-cache show <包名>

作用

列出 APT 已知的该包所有版本的完整元数据,每个版本一段。

示例

bash

apt-cache show app

输出(节选):

text

Package: app
Version: 0.1.20261022.98
Architecture: arm64
Depends: libc6, libcurl4, libmd0, libuuid1
Filename: pool/main/a/app/app_0.1.20261022.98_arm64.deb
Size: 44662288
SHA256: c5db...
Description: Edge node application

Package: app
Status: install ok installed
Version: 0.1.20261014.97
Conffiles:
 /etc/logrotate.d/example/example-logrotate ...
 /etc/nginx/conf.d/example-nginx.conf ...
Description: Edge node application

如何区分两段

  • 仓库版本:有 Filename、Size、SHA256/SHA1/MD5sum,没有 Status: 字段。

  • 本机已安装版本:有 Status: install ok installed,没有 Filename/Size/校验值。

⚠️ 注意:apt-cache show 出现两段 不代表仓库里有两个版本。其中一段是本机 dpkg 记录。

适用

  • 想了解某版本的大小、依赖、校验值、配置文件列表。

  • 升级前确认包内容。


4. apt-cache policy <包名>

作用

显示 APT 的版本决策信息:已安装版本、候选版本、所有版本来源及优先级。

示例

bash

apt-cache policy app

输出:

text

app:
  Installed: 0.1.20261014.97
  Candidate: 0.1.20261022.98
  Version table:
     0.1.20261022.98 500
        500 https://artifacts.example.com/application stable/main arm64 Packages
 *** 0.1.20261014.97 100
        100 /var/lib/dpkg/status

字段含义

字段含义
Installed:本机 dpkg 已安装版本
Candidate:执行 apt install/upgrade 时会安装的版本
Version table:APT 已知的所有版本、来源、pin 优先级
***标记当前已安装版本
500普通仓库默认优先级
100已安装版本(dpkg/status)默认优先级

如何判断远程仓库版本

Version table 中来源为仓库 URL(如 https://... stable/main)的行才是远程仓库版本;来源为 /var/lib/dpkg/status 的是本机记录。

适用

  • 判断“现在升级会装哪个版本”。

  • 排查“为什么候选版本不是最新”的优先级问题。


5. /var/lib/apt/lists/*Packages(仓库索引缓存)

作用

apt update 会把每个源的 Packages 索引下载到 /var/lib/apt/lists/。这些文件只包含远程仓库的包,不含本机已安装记录。

文件命名规律

text

<主机名>_<路径>_dists_<发行版>_<组件>_binary-<架构>_Packages

例如:

text

artifacts.example.com_application_dists_stable_main_binary-arm64_Packages

常用命令

列出所有仓库中的所有包名(去重):

bash

grep -h '^Package:' /var/lib/apt/lists/*Packages | awk '{print $2}' | sort -u

只看某个源:

bash

ls /var/lib/apt/lists/ | grep example
grep '^Package:' /var/lib/apt/lists/*example*Packages | awk '{print $2}' | sort -u

看包名 + 版本:

bash

awk '/^Package:/{p=$2} /^Version:/{print p, $2}' /var/lib/apt/lists/*Packages

只看某个源的包名 + 版本:

bash

awk '/^Package:/{p=$2} /^Version:/{print p, $2}' /var/lib/apt/lists/*example*Packages

示例输出

text

agent 0.9.0
app 0.1.20261022.98
cli 1.2.3

适用

  • 列出仓库里到底有哪些包(最准确,完全不含系统包)。

  • 确认仓库里某包有几个版本(同一包名出现多次即多版本)。

  • 脚本化处理(grep/awk 友好)。

⚠️ 注意:这些文件是 apt update 的缓存。若刚改过源或很久没 update,内容可能过期。执行 apt update 后再读。


6. 选型建议

你的目的推荐
只看仓库里有哪些包、几个版本grep '^Package:' /var/lib/apt/lists/*Packages | awk '{print $2}' | sort -u
看某仓库源的包名+版本awk '/^Package:/{p=$2} /^Version:/{print p,$2}' /var/lib/apt/lists/*<源关键字>*Packages
看某包完整元数据(大小/依赖/校验值/配置文件)apt-cache show <包名>(注意区分仓库段与 installed 段)
判断升级会装哪个版本、为什么apt-cache policy <包名>
数某包在远程仓库有几个版本apt-cache madison <包名>(每行一个仓库版本)

7. 常见误区

  1. apt-cache show 出现两段 ≠ 仓库有两个版本
    一段是仓库版本,一段是本机已安装记录(看 Status: 和 Filename 区分)。

  2. apt list --upgradable -a 的 “1 additional version”
    多出来的通常是本机 now 已安装版本,不是仓库里的第二个版本。

  3. apt-cache policy 的 Version table 含 /var/lib/dpkg/status
    该行是本机记录,不是远程仓库版本。远程仓库版本看来源为 URL 的行。

  4. /var/lib/apt/lists/*Packages 是缓存
    改源后需 apt update 刷新,否则看到的是旧索引。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_30531921/article/details/169250115

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--