您如何跟踪在 Ubuntu (Linux) 上安装了哪些软件包?

qua*_*ark 38 linux package-management aptitude ubuntu

(这个问题与10458非常相似。有人建议 Fedora 和 Ubuntu/Debian 的不同足以保证不同的答案。)

当我使用任何 Ubuntu 设置时,我会在基线安装之上逐渐安装一些软件包。如果我重新安装,或者如果我需要安装一台新机器,我通常想重新安装那些特定的软件包,并且我想快速完成,以最少的麻烦重新开始工作。据我所知,所有包管理器(apt-get,aptitudesynaptic)都可以告诉我安装了哪些包,并且它们都有日志(尽管每个工具都有不同的日志,这很麻烦)。但没有人能告诉我这包我已经安装,而不是它们的依赖项或系统更新。甚至日志也很棘手,因为我不完全确定我应该从中提取什么,或者如何集成它们(在各种 apt 系列工具的情况下)。这意味着每次我重新安装,甚至只是备份时,我都不确定如何重新创建该列表。

我不一定期望任何工具为我做这件事,但如果他们不这样做,我正在寻找解决方法。即使是 grep 的模式、良好的经验法则或清楚地了解正在记录的内容,也会很有用。这里可能没有“最佳答案”,但好的答案会非常有帮助。


下面的大多数答案提供了我正在寻找的一些近似值,并且在某种程度上是有用的。所选择的是最接近在新系统上重新安装我的工具的合理自动方式的一种,即使有所有警告。

Tel*_*hus 31

在任何基于 Debian 的机器上,这是复制软件包集的一种常用方法。在旧机器上:

dpkg --get-selections "*" > my_favorite_packages
Run Code Online (Sandbox Code Playgroud)

将文件复制my_favorite_packages到新机器(拇指驱动器是一个不错的选择,但scp也可以正常工作)。然后运行此序列(具有 root 权限):

apt-get update
dpkg --set-selections < my_favorite_packages
apt-get -u dselect-upgrade
Run Code Online (Sandbox Code Playgroud)

这不会让您获得您安装的软件包。它还获取它们的依赖关系等。此外,如果两台机器之间的存储库不同,则所有赌注都将取消。

至于日志,apt-get将日志保留在/var/log/apt/history.log(感谢 Tshepang 在评论中更新);dpkg确实(at /var/log/dpkg.log),但它很难解析并且只能以root权限读取;aptitude有一个 at /var/log/aptitude,您可以使用普通用户权限翻阅它。

据我所知,您是对的,这些日志中没有一个专门跟踪您安装的内容,而不是自动安装的依赖项。但是,您可以从aptitude搜索中获取该信息。搜索所有已自动安装的软件包:

aptitude search '~i ~M'
Run Code Online (Sandbox Code Playgroud)

如果你想要你安装的那些(不是自动依赖),否定~M

aptitude search '~i !~M'
Run Code Online (Sandbox Code Playgroud)

如果你想要格式化以便你只有包的名称和“安装”这个词,aptitude也可以这样做。这为您提供了一个准备提供给的列表dpkg --get-selections

aptitude search '~i !~M' -F "%p install"
Run Code Online (Sandbox Code Playgroud)

(我对 RedHat 或基于 RedHat 的系统一无所知。抱歉。Linux本身确实没有一个答案,因为包管理是使不同发行版不同的重要组成部分。)

  • 请注意,APT 现在将日志保存在“/var/log/apt/history.log”中,并被 `apt-get`、`synaptic` 和 `aptitude` 使用(就我所见)。这是从 2010 年初开始的。 (3认同)

Lud*_*erl 7

用于dpkg -l '*' > jaunty.original在新安装的系统上记住所有已安装的软件包。

安装完所有附加软件包后,请执行dpkg -l '*' > mysystem.2009017.

附加包只是不同之处: diff jaunty.original mysystem.2009017

  • 基本思想很强大:使用命令行转储当前安装的应用程序列表,然后使用命令行将这些包安装到新机器上。您可以通过该方法获得非常有创意和具体的效果。 (3认同)