我想列出安装和升级包列表以及日期和存储库名称

我想列出安装和升级包列表以及日期和存储库名称

我想列出安装和升级包列表,包括日期和 repo 名称。

我的服务器中有多个 repo,我想每天扫描并列出安装了哪些包、何时安装以及使用了哪个 repo。请帮帮忙。

我在这里需要的是使用下面的命令在 RHEL 中执行的操作,与我在 Ubuntu 中需要的相同,您能帮我一下吗?

repoquery -a --installed --qf "%{ui_from_repo} | %{name} | %{release} | %{INSTALLTIME}" | grep '^@MY_REPONAME' |  awk -F "|" '{print strftime("%Y-%m-%d", $4)}' | sort -t '|' -k1  | tail -1`

示例输出。

软件包名称 | Repo_Name | 安装日期

答案1

Ubuntu 系统上的 apt 和 dpkg 数据库不跟踪日期。因此,基于 Debian 的系统没有类似的 apt 命令。

这些信息位于您系统的 apt 日志 (/var/log/apt/) 中。您必须编写一个脚本来解析这些日志并以您喜欢的输出格式显示数据。

请记住与其他人分享您的脚本,以便他们也可以使用它。

答案2

这是我的问题的答案,我们需要采取一些棘手的行动。

步骤 1:根据日期收集已安装和更新包。

for x in $(ls -1t /var/log/dpkg.log*);do zcat -f $x |tac |grep -e " install " -e " upgrade "; done | awk -F ":a" '{print $1 " :a" $2}' | column -t | awk '{print $1" "$2" "$4" "$7}' | grep -i "2021-12-18" > /tmp/pkg.list

步骤2:根据我们复制的 /tmp/pkg.list 文件的包名称进行一些循环来获取 repo 名称。

cat /tmp/pkg.list | while read a b c d ; do repo=`apt-cache showpkg $c | grep $d | head -1 | awk '{print $2}' | sed -r 's/(\(|\))//g'`; echo $a $b $c $d $repo;done

相关内容