APT 仓库包查看方法文档

1. 背景与问题

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

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

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

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


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

项目 apt-cache show apt-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 '/^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 刷新,否则看到的是旧索引。

相关推荐
DYWorker0016 小时前
第 1-1 课:启动编排:内核如何把自己装配起来
linux
wacsii7 小时前
【Linux基础开发工具(五)】Git版本控制器从入门到实战:核心操作三板斧与新手避坑指南
linux·运维·服务器
水饺编程7 小时前
第2章:Linux 基础,解压缩【.tar.gz】压缩包
linux·c语言·汇编
luoqice7 小时前
telnet登录linux实时查看xx.log日志
linux
技术小事8 小时前
Surface 装 Ubuntu 双系统
linux·运维·ubuntu
额额额对了8 小时前
【项目实战】从IMX6ULL环境监测到N647 AI视觉加速
linux·开发语言·嵌入式硬件
dingdingfish8 小时前
TLPI 第49章 读书笔记:Memory Mapping
linux·mmap·munmap·tlpi·msync
EVEN-09139 小时前
Linux-进程(2)
linux·运维·服务器
u0109053599 小时前
(永久免费)树莓派 / 香橙派等开发板,安装神卓互联巴比达内网穿透安装教程(Linux ARM 版 V9.4.1)
linux·运维·arm开发