zaa*_*deh 5 debian dpkg apt package-management
我正在将我的 Debian 系统更新到一个新的主要版本,由于 Debian 以拥有 Linux 发行版中最大的软件存储库之一而闻名,我很想知道自上一个版本以来添加了哪些软件包。目前我正在从 Debian 10 "Buster" 更新到 Debian 11 "Bullseye"。
这样的列表是否由 Debian 项目人员维护,否则如何构建它,可能使用 APT 查询?
显然只看到版本更新的包不应该被计算在内。看看哪些软件包已被删除也会很有趣。
我认为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)
Run Code Online (Sandbox Code Playgroud)
这两个部分对您来说会很有趣:“新包”(列出了所有新的包aptitude)和“过时和本地创建的包”(列出了存储库中不再可用的所有已安装包)。按f和Enter清除新软件包列表;“新包”部分将消失。
现在将您的存储库更新到新的主要版本,然后aptitude再次运行:它将显示新包,如果您已从配置中完全删除旧版本的存储库,则会显示过时的包。要查看某个部分的内容,请使用箭头键滚动到该部分并按Enter; 您还可以使用[一次展开所有小节。
如果您已经更新,甚至升级,您仍然可以获得以下信息:编辑您的源以指向以前的版本,运行apt update,然后aptitude forget-new,再次编辑您的源以指向新版本,然后apt update再次运行。
您可以通过关注离开NEW 队列的包的 RSS 提要来跟踪进入发行版(但不一定是给定版本)的包。还跟踪包删除(对于整个发行版,同样不是特定版本)。
有所有包的列表....
“buster”中的所有 Debian 软件包 https://packages.debian.org/buster/? https://packages.debian.org/buster/allpackages?format=txt.gz?89,969 行(包)
“bullseye” https://packages.debian.org/bullseye/ 中的所有 Debian 软件包 ? 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
Run Code Online (Sandbox Code Playgroud)
整理新包的问题在于,许多包的描述文本也发生了变化。
我的目标是在对我的系统进行任何更改之前先了解新 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/\([^)]+\)/-/')
Run Code Online (Sandbox Code Playgroud)
为了获得更好的 GUI 体验,diff可以将该命令替换为meld.
有些软件包的名称中包含版本号,这使得使用正则表达式难以删除,例如linux-image-4.19.0-12-amd64. 因此,请分享任何可能导致更易于阅读的输出的修改。
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |