侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux dpkg-query命令教程:如何查询软件包的信息(附实例详解和注意事项)

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中软件包的文件查询工具,它可以查询远程软件源中的软件包包含哪些文件,以及文件的路径,大小,权限等。

0

评论区