Linux dpkg-query命令介绍
dpkg-query命令是Debian Linux中软件包的查询工具,它从dpkg软件包数据库中查询并显示软件包的信息。查询软件包时,软件包的名称支持通配符,如 tree* 将查询所有以 tree 开头的软件包。dpkg-query命令可以用来执行以下几种任务:
- 列出系统上安装的所有软件包。
- 检查特定软件包的状态。
- 显示特定软件包的信息,如版本和描述。
- 根据名称或其他属性搜索软件包。
dpkg-query命令是dpkg命令的一个前端,它可以运行dpkg-deb和dpkg-query两个工具的操作。dpkg-deb工具用来显示.deb软件包的信息,dpkg-query工具用来显示dpkg数据库的信息。dpkg-query命令可以自动识别这两个工具的选项,并运行相应的操作。
Linux dpkg-query命令适用的Linux版本
dpkg-query命令适用于所有基于Debian的Linux发行版,如Ubuntu,Mint,Kali等。如果你使用的是其他类型的Linux发行版,如Red Hat,CentOS,Fedora等,你可能需要使用rpm或yum等命令来管理软件包。
Linux dpkg-query命令的基本语法
dpkg-query命令的基本语法如下:
dpkg-query [选项] 操作
dpkg-query命令接受一个操作和零个或多个选项。操作可以是dpkg-deb或dpkg-query的操作,选项可以是dpkg-query的选项或dpkg-deb的选项。
Linux dpkg-query命令的常用选项或参数说明
dpkg-query命令的常用选项或参数如下表所示:
选项 | 参数 | 说明 |
---|---|---|
-l | [软件包名模式...] | 列出所有与一个或多个模式匹配的已知软件包,不论它们的状态。如果没有给出软件包名模式,列出所有在/usr/local/var/lib/dpkg/status中的软件包,除了标记为未安装的软件包。软件包名模式支持通配符。 |
-W | [软件包名模式...] | 与-l选项类似,但是输出可以使用--showformat选项来自定义。默认的输出格式是每个匹配的软件包一行,每行包含软件包名和安装版本,用制表符分隔。 |
-s | [软件包名...] | 报告指定软件包的状态。这只是显示安装软件包状态数据库中的条目。如果没有指定软件包名,它将显示状态数据库中的所有软件包条目(从dpkg 1.19.1开始)。 |
-L | [软件包名...] | 列出从软件包名安装到系统的文件。 |
-b | [目录] | 从目录中构建一个.deb软件包。 |
-c | [软件包.deb] | 列出软件包的内容。 |
-I | [软件包.deb] | 显示软件包的信息。 |
-S | [模式] | 在安装的软件包中搜索模式。 |
-R | 无 | 在目标目录和子目录中递归地处理操作。 |
--log | [文件] | 将状态变更更新记录到文件中。 |
--no-act | 无 | 显示输出而不提交更改。在操作之前使用。 |
Linux dpkg-query命令的实例
下面是一些使用dpkg-query命令的实例,你可以根据自己的需要尝试运行它们。
实例1:列出系统上安装的所有软件包
要列出系统上安装的所有软件包,可以使用-l选项,不带任何参数。这将显示每个软件包的名称,版本,描述,以及一些状态标志。
[linux@bashcommandnotfound.cn ~]$ dpkg-query -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii accountsservic 0.6.55-0ubun amd64 query and manipulate user account
ii acl 2.2.53-6ubun amd64 access control list - utilities
ii acpi-support 0.143 amd64 scripts for handling many ACPI ev
ii acpid 1:2.0.32-1ub amd64 Advanced Configuration and Power
ii adduser 3.118ubuntu2 all add and remove users and groups
...
实例2:检查特定软件包的状态
要检查特定软件包的状态,可以使用-s选项,后跟一个或多个软件包名。这将显示软件包的名称,版本,状态,以及一些其他信息。
[linux@bashcommandnotfound.cn ~]$ dpkg-query -s bash
Package: bash
Status: install ok installed
Priority: required
Section: shells
Installed-Size: 6144
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Multi-Arch: foreign
Version: 5.0-6ubuntu1
Replaces: bash-completion (<< 20060301-0ubuntu4)
Provides: sh
Depends: base-files (>= 2.1.12), debianutils (>= 2.15)
Pre-Depends: libc6 (>= 2.28), libtinfo6 (>= 6)
Recommends: bash-completion (>= 1:2.10-1ubuntu1)
Suggests: bash-doc
Conflicts: bash-completion (<< 20060301-0ubuntu4)
Conffiles:
/etc/skel/.bashrc 1f8b6a9c3b0c9c317f65f1b7e0d8e9e8
/etc/skel/.profile 5f111ec3c1cfc1c78c463a9f01507b81
/etc/skel/.bash_logout 22bfb8c1d12e478c1fda31d9b48e9b9c
Description: GNU Bourne Again SHell
Bash is an sh-compatible command language interpreter that executes
commands read from the standard input or from a file. Bash also
incorporates useful features from the Korn and C shells (ksh and csh).
.
Bash is ultimately intended to be a conformant implementation of the
IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).
Original-Maintainer: Matthias Klose <doko@debian.org>
实例3:显示特定软件包的信息
要显示特定软件包的信息,如版本和描述,可以使用-W选项,后跟一个或多个软件包名。这将显示软件包的名称和安装版本,用制表符分隔。你可以使用--showformat选项来自定义输出格式,例如,你可以使用%{name} %{version} %{description}\n来显示软件包的名称,版本和描述,用空格分隔,并换行。
[linux@bashcommandnotfound.cn ~]$ dpkg-query -W bash
bash 5.0-6ubuntu1
[linux@bashcommandnotfound.cn ~]$ dpkg-query -W --showformat='${name} ${version} ${description}\n' bash
bash 5.0-6ubuntu1 GNU Bourne Again SHell
实例4:列出从特定软件包安装到系统的文件
要列出从特定软件包安装到系统的文件,可以使用-L选项,后跟一个或多个软件包名。这将显示软件包中的每个文件的绝对路径。
[linux@bashcommandnotfound.cn ~]$ dpkg-query -L bash
/.
/bin
/bin/bash
/usr
/usr/share
/usr/share/doc
/usr/share/doc/bash
/usr/share/doc/bash/README.Debian
/usr/share/doc/bash/changelog.Debian.gz
...
实例5:根据名称或其他属性搜索软件包
要根据名称或其他属性搜索软件包,可以使用-S选项,后跟一个或多个模式。这将显示所有包含模式的软件包的名称和描述。模式可以是文件名,软件包名,正则表达式,或者任何软件包控制文件中的字段。
[linux@bashcommandnotfound.cn ~]$ dpkg-query -S bash
bash: /usr/share/man/man7/bash-builtins.7.gz
...
实例6:从目录中构建一个.deb软件包
要从目录中构建一个.deb软件包,可以使用-b选项,后跟一个目录名。这将创建一个以目录名为基础的.deb软件包文件。目录中必须包含DEBIAN子目录,其中包含控制文件和其他可选的文件,如preinst,postinst,prerm,postrm等。
[linux@bashcommandnotfound.cn ~]$ dpkg-query -b hello
dpkg-deb: building package 'hello' in 'hello.deb'.
实例7:列出软件包的内容
要列出软件包的内容,可以使用-c选项,后跟一个.deb软件包文件名。这将显示软件包中的每个文件的相对路径,以及一些属性,如权限,所有者,组,大小等。
[linux@bashcommandnotfound.cn ~]$ dpkg-query -c hello.deb
drwxr-xr-x root/root 0 2023-04-06 11:54 ./
drwxr-xr-x root/root 0 2023-04-06 11:54 ./usr/
drwxr-xr-x root/root 0 2023-04-06 11:54 ./usr/bin/
-rwxr-xr-x root/root 32 2023-04-06 11:54 ./usr/bin/hello
drwxr-xr-x root/root 0 2023-04-06 11:54 ./usr/share/
drwxr-xr-x root/root 0 2023-04-06 11:54 ./usr/share/doc/
drwxr-xr-x root/root 0 2023-04-06 11:54 ./usr/share/doc/hello/
-rw-r--r-- root/root 170 2023-04-06 11:54 ./usr/share/doc/hello/changelog.Debian.gz
-rw-r--r-- root/root 144 2023-04-06 11:54 ./usr/share/doc/hello/copyright
实例8:显示软件包的信息
要显示软件包的信息,可以使用-I选项,后跟一个.deb软件包文件名。这将显示软件包的控制信息,如软件包名,版本,描述,依赖关系等。
[linux@bashcommandnotfound.cn ~]$ dpkg-query -I hello.deb
new Debian package, version 2.0.
size 1024 bytes: control archive=256 bytes.
128 bytes, 3 lines control
Package: hello
Version: 1.0
Architecture: all
Maintainer: Linux User <linux@bashcommandnotfound.cn>
Installed-Size: 4
Depends: bash
Section: utils
Priority: optional
Description: A simple hello world program
This is a demo package that prints hello world to the standard output.
Linux dpkg-query命令的注意事项
- dpkg-query命令只能查询本地的dpkg数据库,不能查询远程的软件源。如果你想查询远程的软件源,你可以使用apt-cache或apt-file等命令。
- dpkg-query命令不能安装或卸载软件包,只能查询软件包的信息。如果你想安装或卸载软件包,你可以使用dpkg或apt等命令。
- 如果你输入的软件包名或模式不存在或不匹配,dpkg-query命令会返回一个错误,并退出。你可以使用-v选项来显示更多的错误信息。
- 如果你输入的操作或选项不正确,dpkg-query命令会显示一个用法信息,并退出。你可以使用-h或--help选项来显示帮助信息。
- 如果你输入的命令不是dpkg-query,而是dpkg,你可能会遇到bash: dpkg-query: command not found的错误。这是因为dpkg-query命令不在你的PATH环境变量中,你需要使用绝对路径或相对路径来运行它,例如/usr/bin/dpkg-query或./dpkg-query。
Linux dpkg-query命令的相关命令
dpkg-query命令与以下几个命令有关,你可以使用它们来管理和查询软件包。
dpkg命令
dpkg命令是Debian Linux中软件包的安装和卸载工具,它可以安装,卸载,配置,查询,验证,比较,更新,打包和清理软件包。
apt命令
apt命令是Debian Linux中软件包的高级管理工具,它可以执行dpkg命令的大部分功能,同时还可以自动处理软件包的依赖关系,下载软件包,搜索软件包,升级系统等。
apt-cache命令
apt-cache命令是Debian Linux中软件包的缓存查询工具,它可以查询远程软件源的信息,如软件包的名称,版本,描述,依赖关系,大小,下载地址等。
apt-file命令
apt-file命令是Debian Linux中软件包的文件查询工具,它可以查询远程软件源中的软件包包含哪些文件,以及文件的路径,大小,权限等。
评论区