问题描述
(此问题与10458非常相似。建议Fedora和Ubuntu /Debian的区别足以保证提供不同的答案。)
当我使用任何Ubuntu安装程序时,我会在基准安装之上逐步安装许多软件包。如果我重新安装,或者需要安装新计算机,通常我想重新安装那些特定的程序包,并且我想尽快地重新安装,以尽量减少麻烦。据我所知,所有软件包管理器(apt-get
,aptitude
和synaptic
)都可以告诉我安装了哪些软件包,并且它们都有日志(尽管每个工具都有不同的日志,这很麻烦)。但是它们都不能告诉我我安装了哪些软件包,而不是它们的依赖项或系统更新。即使是日志也很棘手,因为我不确定我应该从中提取什么,或者如何集成它们(对于各种合适的家庭工具而言)。这意味着每次我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/Linux和Cleaning 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和应该被这样对待(即使它们共享内核和其他一些东西)。