如何在Ubuntu下检测软件包的安装,删除或更新时间?

时间:2016-06-05 19:22:32

标签: ubuntu daemon dpkg

我正在寻找一种方法来了解在我的C ++应用程序运行时,Ubuntu系统上安装的软件包列表发生了变化。

我有一个守护进程,当系统发生某些变化时,它会告诉其他应用程序,其中一个是已安装软件包的列表。我想跟踪一定数量的软件包,如Apache2,Cassandra,NTP,Postfix ......,以便能够告诉群集中每台计算机上正在运行的内容和未运行的内容。这应该是连续的,因此状态保持最新(至少在一两分钟内。)但是,使用诸如dpkg -l ntp之类的内容读取已安装软件包的列表非常长并且使用了相当多的处理时间,所以我只想在更改安装时运行该命令(这应该是一个相对罕见的事件,假设我们每天最多安排一次安全更新,我不应该运行dpkg -l ...以上每天一次,除非管理员在白天添加/删除项目,否则我需要足够快地检测到这些更改。)

2 个答案:

答案 0 :(得分:1)

您可以通过--pre-invoke--post-invoke挂钩选项添加脚本来跟踪更改。这些应该在获取dpkg锁之前和之后运行,因此从那里运行dpkg-query命令应该是安全的。

请查看dpkg手册页以获取更多详细信息。

答案 1 :(得分:0)

如果您使用apt-getapt,要查看的地点是apt的历史记录日志,请仔细检查文件

/var/log/apt/history.log*

另一方面,dpkg跟踪文件中所有已安装/已删除的软件包:

/var/log/dpkg.log*

我系统的摘录:

Start-Date: 2015-08-04  19:55:15
Commandline: apt-get install youtube-dl
Install: libavresample1:amd64 (9.11-2ubuntu2, automatic), libavfilter3:amd64 (9.11-2ubuntu2, automatic), libquvi7:amd64 (0.4.1-1ubuntu3, automatic), libbs2b0:amd64 (3.1.0+dfsg-2ubuntu2, automatic), libav-tools:amd64 (9.11-2ubuntu2, automatic), libquvi-scripts:amd64 (0.4.21-1, automatic), youtube-dl:amd64 (2014.02.17-1), libmpg123-0:amd64 (1.16.0-1ubuntu1, automatic), libavdevice53:amd64 (9.11-2ubuntu2, automatic), mplayer2:amd64 (2.0-701-gd4c5b7f-2ubuntu2, automatic), libvdpau1:amd64 (0.7-1, automatic), rtmpdump:amd64 (2.4+20121230.gitdf6c518-1, automatic)
End-Date: 2015-08-04  19:55:36

Start-Date: 2015-08-18  14:41:02
Commandline: apt-get install sshpass
Install: sshpass:amd64 (1.05-1)
End-Date: 2015-08-18  14:41:03