我在哪里可以找到默认分发的软件包列表?

我有一个系统,安装后已删除了未知数量的软件包。 我想了解系统中已经更改的内容仅限于APT控制的更改。 我知道在某些情况下,标记为auto软件包已被更改为manual 。 我不在乎是否修改了单个文件,我只想知道哪些软件包已经安装/卸载/标记为手动/标记为自动。

为此,我想获得一个软件包列表,默认情况下,它将从一个分发映像( .iso )中安装并标记为apt。

我知道安装时用户选择可能会影响此列表。 理想情况下,我正在寻找的是核心集。

如果这是不可能的,那么解释为什么在答案中不可能是有帮助的。

阅读重复标志后:

我试过在这里读书。 如何找到手动安装的包?

但是,没有一个答案实际上回答了确定手动安装/卸载哪些软件包的问题。


如何列出默认安装的软件包? 指的是.manifest文件,它在以后的版本中似乎不存在。 至少我无法通过点击找到它。 实际上答案似乎已经过时了。

最后的答案

隐藏在其中一条评论中的是对http://releases.ubuntu.com的引用。如果您导航到所需的版本,您将找到.manifest文件。 我相信这是我最接近找到答案的。 谢谢@karel的评论。

了解哪些软件包标记为“手动”实际上非常简单:安装.iso上的所有软件包都标记为手动安装。

这是针对apt设计的一个老问题的解决方法:用户无意中卸载整个系统而不是他们想要进行的微小更改太容易了。 根本原因是只有-desktop元数据包被标记为“手动”,所以当您删除元数据包以便可以更改音乐播放器或运行自定义文件管理器时,已安装系统的大块可以自动删除。

今天,当Minimal Image的用户错误地删除了整个桌面环境时,您仍会看到此问题。

查找.iso中的软件包列表也很简单,虽然它不是最有用的格式:文件列表(包括软件包)位于http://cdimage.ubuntu.com 。

例如,如果您想要17.10中的文件列表(包括包),则需要 这 四个 文件 。

现在,你的问题有点不寻常, 因为你需要信息 ; 大多数人只想简单地解决问题。 请注意,您所固定的解决方案(.iso中的完整软件包列表)似乎有点XY问题 ,所以我们还要谈谈解决明显潜在问题的简单方法(许多软件包已更改):

解决问题的简单方法通常是仅安装(或–reinstall) ubuntu-desktop元数据包。 这是元数据包存在的一个原因。 因此,另一种获取更改列表 (而不是完整的iso包列表)的方法是 – 模拟ubuntu-desktop的apt –reinstall。

也许有另一种方法可以做到这一点,但我这样做的方法是访问官方的Ubuntu Releases网页,点击Ubuntu版本的链接,点击列表中的第一个红色URL (Ubuntu桌面和服务器)链接后,并打开具有.manifest扩展名的文件(例如: ubuntu-16.04.3-desktop-amd64.manifest )。 我通常下载并保存.manifest文件到我的硬盘驱动器,而不是在我的Web浏览器的新选项卡中打开它。 .manifest文件可以在任何文本编辑器中本地打开。

我想你想使用/var/log/apt/history.log及其朋友来进行所做的更改:

 zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt(?:-get)? install (?!.*--reinstall)\K.*' 

(从源代码修改)

将使用apt-get install的变体为您提供已在命令行安装的所有软件包。

它获取旧history.log的压缩文件history.log将它们与当前的history.log一起添加并通过grep,使用apt [-get] install [和/或重新安装]提取行并显示行的其余部分(-o flag)相当于包名。

如果你只想在不同的行上包名,那么这需要一点修改(例如用sed ); 为读者练习!

值得注意的是,“状态”部分中的突触包管理器( gksu synaptickdesudo synaptic )具有“已安装(手动)”列表。 如果您标记要删除的整个列表[不要应用它!!],您应该能够保存标记的更改并以此方式获取包列表。 警告:这为我锁定了synaptic (大概计算依赖删除)。