如何使用’aptitude’查看在给定日期安装的软件包?

有没有人知道在使用aptitude (或apt-get )时是否有一种简单的方法可以找到安装的软件包列表,按日期排序?

我安装了一堆软件包来尝试新的东西,但它没有用完。 我想删除所有这些软件包,以取回一些磁盘空间。

我试过看一下下载的.deb文件列表,但这似乎是一种倒退的方式(虽然它确实有效)。

不幸的是,dpkg(包处理程序aptitude工作在上面)并没有专门保存包的安装日期,尽管有添加它的想法。 但是,可以通过查看写入目录/var/lib/dpkg/info的文件的日期戳来找到安装日期。

我已将aptitude配置为写入日志( /var/log/aptitude )。 它产生这样的输出;

 Aptitude 0.4.11.11: log report Mon, Feb 9 2009 13:21:28 +0100 IMPORTANT: this log only lists intended actions; actions which fail due to dpkg problems may not be completed. Will install 6 packages, and remove 0 packages. 4096B of disk space will be used =============================================================================== [UPGRADE] apt 0.7.20.1 -> 0.7.20.2 [UPGRADE] apt-utils 0.7.20.1 -> 0.7.20.2 [UPGRADE] base-passwd 3.5.19 -> 3.5.20 [UPGRADE] libgnutls26 2.4.2-5 -> 2.4.2-6 [UPGRADE] libpq5 8.3.5-1 -> 8.3.6-1 [UPGRADE] ucf 3.0015 -> 3.0016 =============================================================================== Log complete. 

这显示了aptitude安装的确切日期和包。 要配置它,请遵循aptitude参考;

 Option:Aptitude::Log Default:/var/log/aptitude Description: If this is set to a nonempty string, aptitude will log the package installations, removals, and upgrades that it performs. If the value of Aptitude::Log begins with a pipe character (ie, ``|''), the remainder of its value is used as the name of a command into which the log will be piped: for instance, |mail -s 'Aptitude install run' root will cause the log to be emailed to root. To log to multiple files or commands, you may set this option to a list of log targets. 

您将在aptitude手册页中找到指向aptitude参考的链接。

有一种简单的方法可以查看所有包的安装日期。 只需执行:

 grep " install" /var/log/dpkg.log* 

因此,您将获得具有确切日期和时间的所有已安装软件包的列表。

感谢您的评论引导我找到解决方案。

我在网上发现了这个。 它从dpkg日志文件中创建dpkg的历史记录。

看起来很简单。

 function apt-history(){ case "$1" in install) cat /var/log/dpkg.log | grep 'install ' ;; upgrade|remove) cat /var/log/dpkg.log | grep $1 ;; rollback) cat /var/log/dpkg.log | grep upgrade | \ grep "$2" -A10000000 | \ grep "$3" -B10000000 | \ awk '{print $4"="$5}' ;; *) cat /var/log/dpkg.log ;; esac } 

资源

编辑

我在Ubuntu 8.10 Server上尝试过这个脚本,效果很好。 你能提供一些信息吗,你是如何解决问题的?

  • 使用dpkg日志

     locate dpkg.log | xargs cat {} | grep " install " 
  • 或者,如果您没有locate

     find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install " 
  • 使用sort来确保基于时间的正确订购

     locate dpkg.log | xargs cat {} | grep " install " | sort 
  • 使用tac (反向cat )*,例如获取最新的4个条目

     locate dpkg.log | xargs cat {} | grep " install " | sort | tac | head -n4 

例如,对于最后一个命令,我得到:

 2014-10-08 18:56:12 install xorg-server-source:all  2:1.16.1-1 2014-10-08 18:49:34 install libelementary-data:all  0.7.0.55225-1 2014-10-08 18:46:57 install e17:i386  0.17.6-1 2014-10-08 18:46:56 install libedje-bin:i386  1.8.6-2.1+b1 

您还可以通过检查/var/log/apt/term.log和旧文件term.log.1.gz等来追踪以前的操作。 它具有时间戳并在安装期间完成消息的记录。

[回答实际问题],是的,有一种简单的方法来查找在特定日期安装的软件包,即使它是使用apt-get在终端内完成的。

如果您安装可从Ubuntu软件中心免费安装的Synaptic Package Manager,则只需打开其FILE菜单并选择“History”选项。 在那里,您将找到按日期组织的所有添加和删除的应用程序包的记帐,无论它们是如何安装或删除的。

确实有一个’官方’的pkginstall.sh脚本可以做到这一点。 按照官方文档中的说明进行操作。 简而言之,从上面的链接下载脚本,确保它是可执行的,然后运行:

~/pkginstalls.sh

这将在您的主目录中创建包含按日期排序的所有已安装软件包的pkginstalls.txt文件。

顺便说一下,这是脚本的内容:

 #!/bin/bash #pkginstalls.sh #creates text file with a list of all packages installed by date #first append all info from archived logs i=2 mycount=$(ls -l /var/log/dpkg.log.*.gz | wc -l) nlogs=$(( $mycount + 1 )) while [ $i -le $nlogs ] do if [ -e /var/log/dpkg.log.$i.gz ]; then zcat /var/log/dpkg.log.$i.gz | grep "\ install\ " >> $HOME/pkgtmp.txt fi i=$(( $i+1 )) done #next append all info from unarchived logs i=1 nulogs=$(ls -l /var/log/dpkg.log.* | wc -l) nulogs=$(( $nulogs - $nlogs + 1 )) while [ $i -le $nulogs ] do if [ -e /var/log/dpkg.log.$i ]; then cat /var/log/dpkg.log.$i | grep "\ install\ " >> $HOME/pkgtmp.txt fi i=$(( $i+1 )) done #next append current log cat /var/log/dpkg.log | grep "\ install\ " >> $HOME/pkgtmp.txt #sort text file by date sort -n $HOME/pkgtmp.txt > $HOME/pkginstalls.txt rm $HOME/pkgtmp.txt exit 0