我正在将我的 Debian 系统更新到新的主要版本,并且由于 Debian 因拥有 Linux 发行版中最大的软件存储库之一而闻名,我很想知道自上一个版本以来添加了哪些软件包。目前我正在从 Debian 10“Buster”更新到 Debian 11“Bullseye”。
这样的列表是由 Debian 项目人员维护的,否则如何可能使用 APT 查询来构建它?
显然,只看到版本更新的软件包不应该被计算在内。看看哪些软件包被删除了也很有趣。
答案1
我认为apt
不能单独告诉你,但aptitude
可以。如果您还没有安装它,然后运行它前你的更新。你会看到这样的屏幕:
Actions Undo Package Resolver Search Options Views Help
C-T: Menu ?: Help q: Quit u: Update g: Preview/Download/Install/Remove Pkgs
aptitude 0.8.11 @ XXX
--- Upgradable Packages (62)
--- New Packages (2778)
--- Installed Packages (6452)
--- Not Installed Packages (202276)
--- Obsolete and Locally Created Packages (51)
--- Virtual Packages (84017)
--- Tasks (217)
您会感兴趣的两个部分是“新软件包”(列出了 的所有新软件包aptitude
)和“过时的和本地创建的软件包”(列出了存储库中不再可用的任何已安装的软件包)。按f和Enter清除新包列表; “新包”部分将消失。
现在将您的存储库更新到新的主要版本,然后aptitude
再次运行:它将显示新的软件包,如果您已从配置中完全删除旧版本的存储库,则会显示过时的软件包。要查看某个部分的内容,请使用箭头键滚动到该部分,然后按Enter;您还可以使用[一次展开所有小节。
如果您已经更新甚至升级,您仍然可以获得此信息:编辑源代码以指向以前的版本,运行apt update
,然后aptitude forget-new
再次编辑源代码以指向新版本,然后apt update
再次运行。
您可以通过以下方式跟踪进入发行版(但不一定是给定版本)的包软件包的 RSS 提要离开新队列。还跟踪包裹移除情况(对于整个发行版,同样不是特定版本)。
答案2
有所有包的列表......
“buster”中的所有 Debian 软件包 https://packages.debian.org/buster/→ https://packages.debian.org/buster/allpackages?format=txt.gz→ 89,969 行(包)
“bullseye”中的所有 Debian 软件包 https://packages.debian.org/bullseye/→ https://packages.debian.org/bullseye/allpackages?format=txt.gz→ 96,201 行(包)
看起来 Debian 11 中添加了 6,332 个软件包,但一些旧软件包被删除,因此计数不太正确。
保存文本列表。为了使比较更容易,请删除括号中显示的软件包版本:
sed -e 's/([^()]*)//g' 10-buster > all-10
sed -e 's/([^()]*)//g' 11-bullseye > all-11
## run diff, and "grep the news" = +lines
diff -u all-10 all-11 | grep -E "^\+" > news-in-11.txt
## remove patterns "....modules-5.10.0-7 ..."
sed -i.bak '/modules-5.10.0-7/d' ./copy.of_news-in-11.txt
整理新包的问题是许多包的描述文本也发生了变化。
答案3
我的目标是在对我的系统进行任何更改之前先了解新 Debian 版本中即将发生(和发生)的情况。我还希望将列表保持在尽可能少的数量,因为 Debian 版本的变化非常巨大。
虽然其他发布的答案很棒,但通过借鉴它们,我想出了以下命令。它从 Debian 网站获取属于不同版本的软件包名称列表,尽可能删除版本号和空格等不必要的信息,并使用diff
.因此,一个版本中存在而不是另一个版本中存在的所有包名称都会被标记和着色,反之亦然。
这就是我想出的:
diff --color=auto --side-by-side --width=$COLUMNS \
--suppress-common-lines --ignore-case --ignore-all-space \
<(curl https://packages.debian.org/buster/allpackages?format=txt.gz | zcat | sed -E 's/\([^)]+\)/-/') \
<(curl https://packages.debian.org/bullseye/allpackages?format=txt.gz | zcat | sed -E 's/\([^)]+\)/-/')
为了获得更好的 GUI 体验,diff
可以将该命令替换为meld
.
有些软件包的名称中包含版本号,这使得使用正则表达式难以删除,例如linux-image-4.19.0-12-amd64
.因此,请分享任何可能导致更易于阅读的输出的修改。