当前位置: 首页>>技术问答>>正文


如何使用’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
}

Source

编辑

我在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 <none> 2:1.16.1-1
2014-10-08 18:49:34 install libelementary-data:all <none> 0.7.0.55225-1
2014-10-08 18:46:57 install e17:i386 <none> 0.17.6-1
2014-10-08 18:46:56 install libedje-bin:i386 <none> 1.8.6-2.1+b1

第六种办法

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

参考资料

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