软件中心将其历史记录存储在哪里?

软件中心将其历史记录存储在哪里?

Ubuntu 软件中心能够根据日期显示已安装/更新/删除的软件包的详细历史记录。

  1. 它从哪里获得这些信息?(/var/log/dpkg.log仅维护 12 个月;我不知道任何 apt-* 或 dpkg 命令可以获取软件包首次安装的日期。)
  2. 我怎么能够复制这些数据以表格/文本的形式由另一个程序处理吗?

答案1

安装/更新/删除的所有软件包的历史记录都位于/var/log/apt:文件中的新历史记录history.log、存档中的旧历史记录、history.log.x.gz文件中。请参阅下图以表格形式在 Ubuntu 软件中心获取此数据:

南加州大学 - 历史

答案2

虽然这些细节相当没用,除非你想确切地了解在特定的日期和时间系统发生了什么变化,否则我觉得发现这些信息所经历的步骤值得记录下来:

我运行strace -e trace=open -f -o usc software-center后得到了软件中心打开的所有文件的列表。然后我像这样过滤它。

cat usc| grep -oP '(?<=open\(").*(?=",)' |egrep -v '\.(so\.([0-9]|cache)|so|pyc|mo|py|png|svg)$'|egrep -v '/usr/lib/(python2.7|x86|girepo)'| egrep -v '/usr/share/(icons|themes)' |egrep -v '/etc/fonts'|egrep -v '(screenshots|reviews)\.ubuntu\.com' |egrep -v fontconfig |sort -u

消除所有不包含数据文件的文件。

其中我发现了一个有趣的文件:~/.cache/software-center/apthistory.p当我打开它时,它看起来像一个 python pickle 文件。尝试加载文件时,我收到未导入的错误softwarecenter.db.history_impl.apthistory。我运行以下命令来查找已打开且路径中包含“softwarecenter”的 python 文件

$cat usc| grep -oP '(?<=open\(").*(?=",)' |grep softwarecenter

并得到了一大堆文件名,包括/usr/share/software-center/softwarecenter/db/history_impl/apthistory.so我编写了以下脚本来读取和处理文件:

#!/usr/bin/python
import sys
import os
import pickle

sys.path.append('/usr/share/software-center')
import softwarecenter.db.history_impl.apthistory

with open(os.path.expanduser('~/.cache/software-center/apthistory.p')) as IFile:
    hist=pickle.load(IFile)

print type(hist[0])
print "earliest apt transaction started on:",hist[-1].start_date
print "installed:"
for PackageStr in hist[-1].install:
    print PackageStr
print "upgraded:"
for PackageStr in hist[-1].upgrade:
    print PackageStr

我通过查找 hist[0] 所属的类找到了必要的属性:help(softwarecenter.db.history_impl.apthistory.AptTransaction)。这让我找到了父类,help( softwarecenter.db.history.Transaction)从那里我弄清楚了如何使用它。

顺便说一句,甚至sudo apt-get installed 的东西也出现在这里。

相关内容