如何在Linux上按日期列出已安装的软件包

时间:2020-03-05 15:28:47  来源:igfitidea点击:

有时我们想知道什么时候在操作系统上安装了软件包,也许如果我们是Linux系统管理员,则可能主要是出于审计目的。

在这篇文章中,将介绍如何按日期列出Linux Ubuntu,Debian,CentOS和Arch Linux发行版上已安装的软件包。

在Ubuntu/Debian上按日期列出已安装的软件包

如果我们正在运行Ubuntu,Debian或者任何其他Debian衍生产品,例如Kubuntu,Xubuntu等,则使用的命令将相似。
要列出按日期排序的已安装软件包,请运行:

$grep -i "install" /var/log/dpkg.log

请注意,仅当安装的软件包记录到文件/var/log/dpkg.log时,以上命令才有效。
由于Linux系统默认情况下具有某种日志轮换功能,因此这不适用于已压缩的轮换日志。
要获取软件包的所有安装日期(包括日志已轮换的软件包),请使用以下命令:

$zcat /var/log/dpkg.log.* | grep -i "installed"

输出示例为:

.....
2016-05-23 07:49:41 status installed libxaw7:amd64 2:1.0.13-1
2016-05-23 07:49:41 status installed libxcb-shape0:amd64 1.11.1-1ubuntu1
2016-05-23 07:49:41 status installed x11proto-xext-dev:all 7.3.0-1
2016-05-23 07:49:41 status installed libxext-dev:amd64 2:1.3.3-1
2016-05-23 07:49:41 status installed x11proto-render-dev:all 2:0.11.1-2
2016-05-23 07:49:41 status installed libxrender-dev:amd64 1:0.9.9-0ubuntu1
2016-05-23 07:49:41 status installed libxft-dev:amd64 2.3.2-1
2016-05-23 07:49:41 status installed libxrandr2:amd64 2:1.5.0-1
2016-05-23 07:49:41 status installed x11proto-scrnsaver-dev:all 1.2.2-1

zcat命令读取压缩文件,然后将输出通过管道传递到grep进行过滤。

如果要为知道其名称的某些部分的特定软件包使用grep,则可以将输出再次通过管道传递到grep命令。
请参见下面的示例,该示例搜索apt-mirror软件包的安装日期。

#  zcat /var/log/dpkg.log.* | grep -i "installed" | grep apt-mirror
2016-06-26 09:47:52 status installed apt-mirror:all 0.5.1-1ubuntu1

zg的替代方法是zgrep命令,其功能类似于zcat。
只需将其视为压缩文件的grep命令即可:

# zgrep "installed" /var/log/dpkg.log*
# zgrep "installed" /var/log/dpkg.log* | grep apt-mirror
/var/log/dpkg.log.7.gz:2016-06-26 09:47:52 status installed apt-mirror:all 0.5.1-1ubuntu1

zgrep的优点是它将向我们显示从中获取数据的日志文件。
从上面可以看到,数据是从文件/var/log/dpkg.log.7.gz中提取的。

在CentOS中按日期列出已安装的软件包

对于基于RPM的系统,例如Hat,CentOS,Scientific Linux,Fedora,SUSE,rpm命令用于按日期列出已安装的软件包。
要运行的确切命令是:

# rpm -qa --last

该命令按安装时间列出软件包,最近的列出了最新的软件包。
该命令的输出将如下所示:

libxml2-2.9.1-6.el7_2.3.x86_64 Sat 09 Dec 2016 10:15:00 AM EAT
findutils-4.5.11-5.el7.x86_64 Sat 09 Dec 2016 10:15:00 AM EAT
libgpg-error-1.12-3.el7.x86_64 Sat 09 Dec 2016 10:14:59 AM EAT
libffi-3.0.13-18.el7.x86_64 Sat 09 Dec 2016 10:14:59 AM EAT
libcap-ng-0.7.5-4.el7.x86_64 Sat 09 Dec 2016 10:14:59 AM EAT
libattr-2.4.46-12.el7.x86_64 Sat 09 Dec 2016 10:14:59 AM EAT
libacl-2.2.51-12.el7.x86_64 Sat 09 Dec 2016 10:14:59 AM EAT
dbus-libs-1.6.12-17.el7.x86_64 Sat 09 Dec 2016 10:14:59 AM EAT
sed-4.2.2-5.el7.x86_64 Sat 09 Dec 2016 10:14:58 AM EAT

要搜索特定软件包的安装日期,请在上述命令的末尾添加软件包名称。

# rpm -qa --last postfix3
postfix3-3.2.0-1.gf.el7.x86_64 Thu 25 Jan 2016 01:04:35 AM EAT

从示例。
postfix3软件包已于EAT 2016年5月25日星期四01:04:35安装。

在Arch上按日期列出已安装的软件包

对于Arch Linux及其衍生产品,例如Antergos,Manjaro,Apricity,Ninja OS 等,使用称为expac的alpm数据库数据提取实用程序。
调用expac包括提供格式字符串。
可以使用支持的命令选项和参数来完成输出的进一步格式化。

$expac --timefmt='%F %T' '%l %n'

要根据字符串数值比较输出,请将输出通过管道传递给sort -n命令。

$expac --timefmt='%F %T' '%l %n' | sort -n

最新的将在底部,我们可以通过管道传输输出以获取最新的安装。

$expac --timefmt='%F %T' '%l %n' | sort -n | tail -n 7
2016-01-15 14:41:15 webkitgtk
2016-01-16 09:18:26 babl
2016-01-16 09:18:26 gegl02
2016-01-16 09:18:26 lcms
2016-01-16 09:18:26 libspiro
2016-01-16 09:18:26 libwmf
2016-01-16 09:18:27 gimp