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

Pau*_*man 114 dpkg apt

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

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

rap*_*ink 95

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


Gil*_*il' 12

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

apt-mark showmanual
Run Code Online (Sandbox Code Playgroud)

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

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

dpkg --get-selections | sed -n 's/\t\+install$//p'
Run Code Online (Sandbox Code Playgroud)

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

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'
Run Code Online (Sandbox Code Playgroud)

总而言之,以下命令列出了手动安装的软件包:

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)
Run Code Online (Sandbox Code Playgroud)


小智 8

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

和 /var/adm/apt/history.log

  • 第一个链接中的过程不区分自动安装的包和手动安装的包。`/var/log/apt/history.log`(顺便说一句,你的位置错了)将在几个月后轮换。 (5认同)

Cra*_*raZ 5

我还以这种方式“greping” tar.gz -ed 历史文件:

zgrep -E "Commandline: apt(|-get) install" /var/log/apt/history.log*
Run Code Online (Sandbox Code Playgroud)

如果你也需要时间戳,只需添加一个额外的参数-B1