You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取发行版默认软件包列表及APT管控的系统包变更信息?

嘿,这两个问题都是APT管理系统里的常见需求,我来给你详细拆解解决方案:

问题1:获取某一发行版的默认软件包列表

对于Debian/Ubuntu这类基于APT的发行版,有几种可靠的方法:

  • 借助tasksel工具:这是官方用来管理默认任务组的工具,先执行tasksel --list-tasks查看系统支持的默认任务组(比如ubuntu-desktop是桌面版、server是服务器版),然后用tasksel --task-packages <任务组名称>就能导出该任务组对应的所有默认安装包列表。
  • 查看官方安装镜像的manifest文件:每个发行版的官方安装镜像里都包含一个manifest文件,里面完整列出了该版本默认安装的所有软件包。你可以直接从镜像文件中提取这个文件,或者在安装系统时保留的镜像介质里找到它。
  • 查询Meta包的依赖:发行版的默认安装通常依赖一个核心Meta包(比如Ubuntu的ubuntu-minimal、ubuntu-desktop),执行apt-cache depends <meta包名称>就能看到这个Meta包所依赖的所有软件包,这些就是默认安装的核心组件。

问题2:追踪APT管控的系统变更 & 获取初始默认包列表

1. 追踪安装/卸载/标记变更

APT会详细记录所有系统包操作,你可以通过以下方式快速提取关键信息:

  • 查看APT历史日志:日志文件位于/var/log/apt/history.log,里面清晰记录了每一次apt命令执行的操作,包括安装、卸载、标记包为auto/manual。你可以用过滤命令快速筛选:
    grep -E 'Install:|Remove:|Mark auto:|Mark manual:' /var/log/apt/history.log
    
    如果历史日志被分割成了history.log.1.gz这类归档文件,记得用zcat读取:
    zcat /var/log/apt/history.log.1.gz | grep -E 'Install:|Remove:|Mark auto:|Mark manual:'
    
  • 对比当前标记状态:用apt-mark showmanual获取当前手动标记的包,apt-mark showauto获取自动标记的包。你可以把这些列表和默认状态对比(比如默认情况下,Meta包的依赖大多是auto标记),找出被修改的标记。

2. 获取原本应安装的软件包列表

要对比初始安装状态,你可以结合问题1的方法来实现:

  • 用默认任务组包列表对比:先通过tasksel --task-packages <你的初始任务组>导出默认包列表,然后用当前已安装包列表对比。当前已安装包可以用dpkg --get-selections | grep -v deinstall获取,然后用comm命令对比两个列表:
    # 导出默认包列表到default-packages.txt
    tasksel --task-packages ubuntu-desktop > default-packages.txt
    # 导出当前已安装包到current-packages.txt
    dpkg --get-selections | grep -v deinstall | awk '{print $1}' > current-packages.txt
    # 对比找出缺失的默认包
    comm -23 <(sort default-packages.txt) <(sort current-packages.txt)
    
  • 利用初始manifest文件:如果你保留了安装时的manifest文件,直接用它和当前已安装包列表对比,就能找出被移除的默认包,以及额外安装的包。

内容的提问来源于stack exchange,提问作者Philip Couling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:41:48