题 如何在Ubuntu上获取“apt-get install”的历史记录?


我是关于将服务器从一个Ubuntu盒移动到另一个Ubuntu盒。我不是把旧盒子克隆到新盒子里;我正在创建一个新系统,并将根据需要移动数据。我想在新盒子上安装旧盒子上的所有软件。

有没有一种简单的方法可以找到我随时间推出的所有“sudo apt-get install”命令的历史记录?也就是说,dpkg -l显示了所有已安装的软件包,但没有显示安装它们的顶级软件包。如果dpkg有办法给我安装包,我可以在那里找到独特的包;否则,我想要别的东西说“你安装了这24个包”。


71
2017-08-28 00:14




啊哈! 它之前被问过,并且有一个很好的答案。 - Gilles
你能接受以下答案吗?感谢回答的人。 - m-ric
可能重复 如何获取Debian上所有Root / Main安装包的列表 - Rob Moir
这些解决方案仅检查上次日志轮换后发生的情况。他们不会检查所有历史记录。 - Kraang Prime


答案:


apt 历史在于 /var/log/apt/history.log 如上面的评论所述。也就是说,这不会列出使用手动安装的软件包 dpkg 或GUI等 gdebi。查看经历的所有包 dpkg,你可以看看 /var/log/dpkg.log


59
2017-08-28 08:53





http://www.debianadmin.com/clone-your-ubuntu-installation.html

和/var/adm/apt/history.log


6
2017-08-28 00:31



第一个链接中的过程不区分自动安装的软件包和手动安装的软件包。 /var/log/apt/history.log (你的位置错误顺便说一句)几个月后就会旋转掉。 - Gilles
吉尔斯在这两方面都是正确的。我只有大约一个月的日志值,我甚至看不到如何设置日志删除率(这是通过FreeBSD上的'newsyslog'完成的)。所以我仍然没有解决方案,但我有一些指示。我至少可以在克隆文章中查看命令的输出,查找“高级”名称,将它们安装在新名称上,在新框中执行相同操作,将两个结果区分开,然后重复直到满意为止。我仍然会听到更多的想法。 - Paul Hoffman


您可以列出已明确请求安装的软件包 apt-mark

apt-mark showmanual

如果您正在运行Debian的古老版本,这是一种手动方式。

以下命令提供了请求安装的软件包列表,无论是手动还是自动。除非您正在(de)安装软件包,否则这是已安装软件包的列表。

dpkg --get-selections | sed -n 's/\t\+install$//p'

以下命令提供了自动安装的包的超集:

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

将所有内容放在一起,以下命令列出了手动安装的软件包:

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)

4
2017-08-28 08:11



---非常不同的结果 comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u) - Cbhihe
在Debian上,有 apt-mark showmanual 这相当于你的上一个命令。 - maxschlepzig


grep -i "Commandline" /var/log/apt/history.log

显示您使用以下安装的所有软件包: sudo apt-get install xxxxx


1
2018-04-01 22:47



这与@ℝaphink的答案没有太大的不同,应该是对它的评论。 - Karl Richter


而不是tac / head组合,最好使用tail(最后25行):

tail -n 25 /var/log/apt/history.log

0
2017-10-21 16:47



这与@ℝaphink的答案没有太大的不同,应该是对它的评论。 - Karl Richter
而且,它不一样。 tail将按文件中的顺序列出文件中的最后几行。 tac将颠倒顺序,以便最后一行现在是第一行,倒数第二行是第二行,等等。再次,当你说某些事情“更好”而不解释原因时,你似乎有点冒险。我的意思是,根据谁来说“更好”?有什么要求?看起来有点过于自信了。 - Todd Walton


要按降序获取最新安装的软件包列表,我喜欢使用(例如25行):

tac /var/log/apt/history.log |head --lines=25

-1
2017-08-21 10:56



更高效(和更有效)将是: tail -25 /var/log/apt/history.log | tac - agc
这与@ℝaphink的答案没有太大的不同,应该是对它的评论。 - Karl Richter