我有一个系统,安装后删除了未知数量的软件包。我想了解系统上的变化,仅限于 APT 控制的变化。我知道在某些情况下,标记为的软件包auto
已更改为manual
。我不关心单个文件是否被修改,我只想知道哪些软件包已安装/卸载/标记为手动/标记为自动。
为此,我想manual
从单个分发映像 ( .iso
) 中获取默认在 apt 中安装和标记的软件包列表。
我理解用户在安装时的选择可能会影响此列表。理想情况下,我正在寻找一个核心集。
如果这是不可能的,那么在答案中解释为什么这是不可能的会很有帮助。
读取重复标志后:
我曾尝试在这里阅读。如何找到手动安装的包?
然而,没有一个答案真正回答确定哪些包已被手动安装/卸载的问题。
如何列出默认安装的软件包?指的是.manifest
似乎在后续版本中不存在的文件。至少我无法通过点击找到它。实际上答案似乎已经过时了。
最终答案
其中一条评论提到了http://releases.ubuntu.com
如果您导航到所需的版本,您将找到.manifest
文件。我相信这是我最接近找到答案的地方。感谢@karel的评论。
答案1
理解哪些软件包被标记为“Manual”实际上非常简单:安装 .iso 上的所有包都标记为手动安装。
这是解决 apt 设计的一个老问题的方法:用户很容易在不知不觉中卸载整个系统,而不是卸载他们想要做的微小更改。根本原因是只有 -desktop 元包被标记为“手动”,因此当您删除元包以更改音乐播放器或运行自定义文件管理器时,已安装系统的大量内容就会自动被删除。
今天你仍然会看到这个问题,当用户最小图像错误地删除了他们的整个桌面环境。
寻找.iso 中的软件包列表也相当简单,尽管它的格式不是最有用的:文件列表(包括软件包)位于http://cdimage.ubuntu.com。
例如,如果你想要 17.10 中的文件列表(包括软件包),你可以想 这些 四 文件。
现在你的问题有点不寻常因为你想要信息;大多数人只想用 apt 来修复这个问题。请注意,你所依赖的解决方案(.iso 中的完整软件包列表)似乎有点XY问题,所以让我们也讨论一下解决明显潜在问题(许多软件包也发生了变化)的简单方法:
解决这个问题的简单方法通常是安装(或 --reinstall)ubuntu-desktop
元包。这就是元包存在的原因之一。因此,另一种方法是获取要恢复的更改列表(而不是完整的 iso 包列表)来 --模拟 apt --reinstall ubuntu-desktop
。
答案2
也许还有其他方法可以做到这一点,但我的方法是访问官方Ubuntu 版本网页上,单击 Ubuntu 版本的链接,单击列表中第一个红色的 URL,上面写着(Ubuntu 桌面和服务器)链接后,打开扩展名为 .manifest 的文件(例如:ubuntu-16.04.3-桌面-amd64.manifest)。我通常会将 .manifest 文件下载并保存到硬盘上,而不是在 Web 浏览器的新选项卡中打开它。.manifest 文件可以在任何文本编辑器中本地打开。
.manifest 文件中列出的某些软件包通常仅用于安装 Ubuntu,这些文件在 Ubuntu 安装过程中会被清除。此外,GParted 分区编辑器在 Ubuntu 安装过程中也会被删除,但可以使用 在 Ubuntu 中重新安装sudo apt install gparted
。
答案3
命令
$ gzip -cd /var/log/installer/initial-status.gz | grep "Package:" > initialpackages.txt
initialpackages.txt
将在当前工作目录中命名的文件中生成在安装操作系统期间已安装的所有软件包的列表。
答案4
我认为您想使用/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
。
它获取旧 s 中的压缩文件,history.log
将它们与当前文件一起添加history.log
并通过 grep,使用 apt[-get] install [and/or reinstall] 提取行并显示相当于软件包名称的其余行(-o 标志)。
如果您只希望将包名称放在单独的行上,则需要进行一些修改(例如使用sed
);对于读者来说,这是一个练习!
值得注意的是,在“状态”部分中,突触包管理器(gksu synaptic
或kdesudo synaptic
)有一个“已安装(手动)”列表。如果您将整个列表标记为删除 [不要应用它!!],您应该能够保存标记的更改并以此方式获取包列表。警告:这对我来说是锁定的synaptic
(大概是计算依赖项的删除)。