我正在尝试获取带有版本的软件包名称、拆分软件包和版本、该软件包的供应商、安装时间和日期:
dpkg-query -W -f='${Package}-${version} ${package} ${version} ${Maintainer} ${installtime}\n'
但我得到了软件包名称和版本、拆分软件包和版本以及该软件包的供应商。我无法检索安装时间和日期。
如何通过上述查询获取包安装时间和日期?
答案1
dpkg-query
没有任何字段选项来显示安装日期/时间。换句话说,它dpkg
不存储此信息。在后台,dpkg-query
使用各种文件来/var/lib/dpkg/
获取信息。
以下是可用的字段名称:
Architecture
Bugs
Conffiles (internal)
Config-Version (internal)
Conflicts
Breaks
Depends
Description
Enhances
Essential
Filename (internal, front-end related)
Homepage
Installed-Size
MD5sum (internal, front-end related)
MSDOS-Filename (internal, front-end related)
Maintainer
Origin
Package
Pre-Depends
Priority
Provides
Recommends
Replaces
Revision (obsolete)
Section
Size (internal, front-end related)
Source
Status (internal)
Suggests
Tag (usually not in .deb but in repository Packages files)
Triggers-Awaited (internal)
Triggers-Pending (internal)
Version
还有一些虚拟字段:
binary:Package
binary:Summary
db:Status-Abbrev
source:Package
source:Version
检查man dpkg-query
以获得更广泛的想法。
请注意,您可以查看/var/log/dpkg.log*
软件包的安装日期/时间。还请注意,如果您的软件包是由apt-get
(或兄弟)安装的,您也可以查看apt
历史文件/var/log/apt/history.log*
。
答案2
我用:
sudo dpkg-query -f '${binary:Package}\n' -W > packages_list.txt
答案3
它可以工作,但是我认为它太慢了。
function lspkgs {
local installation_text=$(grep " install " /var/log/dpkg.log*)
for i in $(dpkg-query -f='${Package}\n' -W); do
echo $(dpkg-query -f='${Package}-${version} ${package} ${version} ${Maintainer} ${installtime}\n' -W $i) $(echo "$installation_text" | grep " install $i:" | sort -n | tail -n1 | cut -d' ' -f 1,2)
done
}
命令的输出lspkgs
。
adduser-3.118 adduser 3.118 Debian Adduser Developers <[email protected]> 2022-09-09 03:16:59
alsa-topology-conf-1.2.4-1 alsa-topology-conf 1.2.4-1 Debian ALSA Maintainers <[email protected]> 2022-09-09 11:46:40
alsa-ucm-conf-1.2.4-2 alsa-ucm-conf 1.2.4-2 Debian ALSA Maintainers <[email protected]> 2022-09-09 11:46:42
anacron-2.3-30 anacron 2.3-30 Debian QA Group <[email protected]> 2022-09-09 11:46:44