当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

(此问题与10458非常相似。建议Fedora和Ubuntu /Debian的区别足以保证提供不同的答案。)

当我使用任何Ubuntu安装程序时,我会在基准安装之上逐步安装许多软件包。如果我重新安装,或者需要安装新计算机,通常我想重新安装那些特定的程序包,并且我想尽快地重新安装,以尽量减少麻烦。据我所知,所有软件包管理器(apt-getaptitudesynaptic)都可以告诉我安装了哪些软件包,并且它们都有日志(尽管每个工具都有不同的日志,这很麻烦)。但是它们都不能告诉我我安装了哪些软件包,而不是它们的依赖项或系统更新。即使是日志也很棘手,因为我不确定我应该从中提取什么,或者如何集成它们(对于各种合适的家庭工具而言)。这意味着每次我re-install,甚至只是备份时,我都不知道如何列出re-create。

我不一定期望有任何工具可以为我做这件事,但是如果他们没有’t I’m在寻找解决方法。即使是grep的模式,良好的经验法则或明确记录的确切内容,也会很有用。此处可能没有”best answer”,但是好的会很有帮助。


以下大多数答案提供了我所寻找的大致信息,并且在某种程度上很有用。选择的是最接近我的工具re-installing在新系统上自动完成的方法,即使有所有注意事项。

最佳思路

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

dpkg --get-selections "*" > my_favorite_packages

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

apt-get update
dpkg --set-selections < my_favorite_packages
apt-get -u dselect-upgrade

这并不能使您仅获得已安装的软件包。它还会获取它们的依赖关系,等等。此外,如果两台计算机之间的存储库不同,则所有选择都将关闭。

至于日志,apt-get/var/log/apt/history.log保留了一个日志(感谢Tshepang在评论中进行了更新); dpkg可以(在/var/log/dpkg.log处),但是众所周知,它很难解析,并且只能以root权限读取; aptitude/var/log/aptitude上有一个,您可以使用常规用户权限翻页。

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

aptitude search '~i ~M'

如果只需要安装的组件(而不是auto-dependencies),则取反~M

aptitude search '~i !~M'

如果希望将其格式化为仅包含软件包名称和单词”install”,aptitude也可以这样做。这为您提供了准备送入dpkg --get-selections的列表:

aptitude search '~i !~M' -F "%p install"

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

次佳思路

使用dpkg -l '*' > jaunty.original可以修复全新安装的系统上的所有已安装软件包。

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

其他软件包只是区别:diff jaunty.original mysystem.2009017

第三种思路

实际上,Aptitude非常擅长于此。 Aptitude确实知道何时手动安装或通过依赖项进行安装,并且您可以告诉它删除不再需要的安装项,而仅仅是因为其他依赖于此的项总是使您的系统尽可能小。

有一些软件包构成了Ubuntu安装,ubuntu-minimal,ubuntu-desktop,ubuntu-server等。如果您告诉Aptitude将其标记为手动安装并删除所有其他内容,那么最终您将获得尽可能少的软件包。

我在我的博客的两篇文章中解释了如何完成所有操作:Cleaning up a Debian GNU/LinuxCleaning up a Debian GNU/Linux (or Ubuntu), reprise。简而言之,您正在寻找的答案是:

aptitude search ~i | grep -v "i A"

我上一次使用它时,如果您使用apt-get,则它不起作用。这就是为什么我总是推荐aptitude的原因,据我所知,Debian弃用apt-get来支持aptitude。

我不知道如何在Fedora上执行此操作,您可能应该将其分开而不是一个不同的问题。 Fedora and Ubuntu are different operating systems和应该被这样对待(即使它们共享内核和其他一些东西)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7935.html,未经允许,请勿转载。