APT and Dpkg 快速参考表

本文详细介绍APT与Dpkg的常用命令及用法,包括安装、更新、删除软件包等操作,以及如何解决依赖关系问题。

转自:http://i18n.linux.net.cn/others/APT_and_Dpkg.php

普通 APT 用法

apt-get install <package>
下载 <package> 以及所有倚赖的包裹,同时进行包裹的安装或升级。如果某个包裹被设置了 hold (停止标志,就会被搁在一边(即不会被升级)。更多 hold 细节请看下面。

apt-get remove [--purge] <package>

移除 <package> 以及任何倚赖这个包裹的其它包裹。
--purge 指明这个包裹应该被完全清除 (purged) ,更多信息请看 dpkg -P。

apt-get update

升级来自 Debian 镜像的包裹列表,如果你想安装当天的任何软件,至少每天运行一次,而且每次修改了
/etc/apt/sources.list 后,必须执行。

apt-get upgrade [-u]

升级所以已经安装的包裹为最新可用版本。不会安装新的或移除老的包裹。如果一个包改变了倚赖关系而需要安装一个新的包裹,那么它将不会被升级,而是标志为 holdapt-get update 不会升级被标志为 hold 的包裹 (这个也就是 hold 的意思)。请看下文如何手动设置包裹为 hold。我建议同时使用 '-u' 选项,因为这样你就能看到哪些包裹将会被升级。

apt-get dist-upgrade [-u]

apt-get upgrade 类似,除了 dist-upgrade 会安装和移除包裹来满足倚赖关系。因此具有一定的危险性。

apt-cache search <pattern>
搜索满足 <pattern> 的包裹和描述。

apt-cache show <package>

显示 <package> 的完整的描述。

apt-cache showpkg <package>
显示 <package> 许多细节,以及和其它包裹的关系。

dselect
console-apt
aptitude
gnome-apt

APT 的几个图形前端(其中一些在使用前得先安装)。这里 dselect 无疑是最强大的,也是最古老,最难驾驭。

普通 Dpkg 用法

dpkg -i <package.deb>
安装一个 Debian 包裹文件,如你手动下载的文件。

dpkg -c <package.deb>

列出 <package.deb> 的内容。

dpkg -I <package.deb>

从 <package.deb> 中提取包裹信息。

dpkg -r <package>

移除一个已安装的包裹。

dpkg -P <package>

完全清除一个已安装的包裹。和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件。

dpkg -L <package>

列出 <package> 安装的所有文件清单。同时请看 dpkg -c 来检查一个 .deb 文件的内容。

dpkg -s <package>

显示已安装包裹的信息。同时请看 apt-cache 显示 Debian 存档中的包裹信息,以及 dpkg -I 来显示从一个 .deb 文件中提取的包裹信息。

dpkg-reconfigure <package>

重新配制一个已经安装的包裹,如果它使用的是 debconf (debconf 为包裹安装提供了一个统一的配制界面)。你能够重新配制 debconf 它本身,如你想改变它的前端或提问的优先权。例如,重新配制 debconf,使用一个 dialog 前端,简单运行:

dpkg-reconfigure --frontend=dialog debconf (如果你安装时选错了,这里可以改回来哟:)

echo "<package> hold" | dpkg --set-selections
设置 <package> 的状态为 hlod (命令行方式)

dpkg --get-selections "<package>"

取的 <package> 的当前状态 (命令行方式)

支持通配符,如:
Debian:~# dpkg --get-selections *wine*
libwine                                         hold
libwine-alsa                                    hold
libwine-arts                                    hold
libwine-dev                                     hold
libwine-nas                                     hold
libwine-print                                   hold
libwine-twain                                   hold
wine                                            hold
wine+                                           hold
wine-doc                                        hold
wine-utils                                      hold

例如:
大家现在用的都是 gaim-0.58 + QQ-plugin,为了防止 gaim 被升级,我们可以采用如下方法:

方法一:
Debian:~# echo "gaim hold" | dpkg --set-selections
然后用下面命令检查一下:
Debian:~# dpkg --get-selections "gaim"
gaim                                            hold
现在的状态标志是 hold,就不能被升级了。

如果想恢复怎么办呢?
Debian:~# echo "gaim install" | dpkg --set-selections
Debian:~# dpkg --get-selections "gaim"
gaim                                            install
这时状态标志又被重置为 install,可以继续升级了。

同志们会问,哪个这些状态标志都写在哪个文件中呢?
在 /var/lib/dpkg/status 里你也可以通过修改这个文件实现 hold。

有时你会发现有的软件状态标志是 purge,不要奇怪。
如:事先已经安装了 amsn,然后把它卸了。
apt-get remove --purge amsn
那么状态标志就从 install 变成 purge。


方法二:
在/etc/apt 下手动建一个 preferences 文件
内容:
Package: gaim
Pin: version 0.58*
保存
更详细内容请看:

http://linuxsir.com/bbs/showthread.php?s=&threadid=22601

dpkg -S <file>
在包裹数据库中查找 <file>,并告诉你哪个包裹包含了这个文件。(注:查找的是事先已经安装的包裹)

从源码建立 deb packages

apt-get source [-b] <package>
下载一个源码的包并解开。
你必须在你的 /etc/apt/sources.list 文件里写入一条 deb-src 的记录才能完成这项工作。
如果你输入了一个 -b 参数,并且是以 root 的身份,deb 包会被自动的创建。

apt-get build-dep <package>
自动下载并安装通过源码创建 <package> 时需要的包。
只有apt 0.5以上版本才支持这个功能。
现在woody和以上版本包含了这个功能。
如果你使有一个旧版本的apt,查找依赖性最简单的方法是查看源码包中 debian/control 这个文件,
注意这个路径是相对的,是包内的路径。

普通的用法,结合 apt-get source -b,例子 (as root):

apt-get build-dep <package>
apt-get source -b <package>

会下载源码包,建立依赖性,然后尝试编译源码。

dpkg-source -x <package.dsc>
如果你手工下载了一个程序的源码包,其中包含了几个类似 .orig.tar.gz ,.dsc ,
以及 .diff.gz 之类的文件,
那么你就可以对 .dsc 文件使用这个命令来 unpack 源码包。

dpkg-buildpackage
从 Debian 源码树建立一个 deb 包。你必须在 source tree 的主目录才能生效。例如:

dpkg-buildpackage -rfakeroot -uc -b

这里 '-rfakeroot' 指定命令使用 fakeroot 程序来模仿 root 权限 [来实现所有者(ownership)目的],
'-uc' 表示 "Don't cryptographically sign the changelog",'-b' 代表只建立二进制包。

debuild
一个快速打包脚本类似 dpkg-buildpackage,能自动的识别是否使用 fakeroot,
同时为你运行 lintiangpg

修正倚赖关系

dpkg --configure --pending
如果 dpkg 在 apt-get install upgrade dist-uptradeing 的时候出错退出,
尝试使用此命令来配置已经 unpack 的包。
然后再用 apt-get install,upgrade,或者 dist-upgrade -f,
然后再用 apt-get install,upgrade,或者 dist-upgrade。

可能会重复多次,这样通常可以解决大多数的依赖性问题。
(同时,如果提示由于某种原因需要某个特定的包裹,你可以常识安装或卸载这个包)

apt-get install -f
apt-get upgrade -f
apt-get dist-upgrade -f
尝试修正上述过程中出现依赖性关系
注意 apt-get install -f 不需要 <package> 作为参数。
<think>我们正在讨论的是`dpkg -p`命令,根据用户当前的问题,他明确想了解的是`dpkg -p package`命令的使用方法和作用。注意,之前我们讨论过`dpkg-preconfigure -p`,但现在用户明确指向了`dpkg -p`,所以我们需要调整焦点。 根据引用[2]的内容,其中提到了dpkg命令的用法,但是并没有直接列出`-p`选项。不过,在标准的dpkg命令中,`-p`或`--print-avail`选项用于显示软件包的详细信息。 因此,我们需要明确: - `dpkg -p package_name` 等同于 `dpkg --print-avail package_name` - 该命令用于显示指定软件包的详细信息,包括版本、依赖关系、描述等,无论该软件包是否已安装(只要在软件包数据库中存在)。 下面将详细说明: ### 1. **命令格式** ```bash dpkg -p package_name ``` 或 ```bash dpkg --print-avail package_name ``` ### 2. **作用** 该命令用于从`/var/lib/dpkg/available`文件中读取并显示指定软件包的详细信息。这个文件包含了所有可用软件包的信息(注意:在较新的系统中,这个文件可能不存在,因为dpkg现在使用其他方法来获取可用包信息,但命令仍然有效)。 ### 3. **输出内容** 执行该命令后,会显示软件包的详细信息,通常包括以下字段: - **Package**: 包名称 - **Status**: 状态(但注意,这个命令显示的是可用包的信息,而不是当前安装状态) - **Priority**: 优先级 - **Section**: 所属分类 - **Installed-Size**: 安装后大小 - **Maintainer**: 维护者 - **Architecture**: 架构 - **Version**: 版本 - **Depends**: 依赖的软件包 - **Description**: 详细描述 ### 4. **使用示例** 以查看`apt`软件包的信息为例: ```bash dpkg -p apt ``` 输出示例(部分): ``` Package: apt Status: install ok installed Priority: important Section: admin Installed-Size: 4068 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Architecture: amd64 Version: 2.0.9 Depends: adduser, gpgv | gpgv2 | gpgv1, libapt-pkg6.0 (>= 2.0.9), libc6 (>= 2.15), libgcc-s1 (>= 3.0), libgnutls30 (>= 3.6.12), libseccomp2 (>= 2.4.0), libstdc++6 (>= 5.2), debian-archive-keyring, init-system-helpers (>= 1.18~) Suggests: apt-doc, aptitude | synaptic | wajig, dpkg-dev (>= 1.17.2), gnupg | gnupg2 | gnupg1, powermgmt-base Breaks: apt-utils (<< 2.0.9) Replaces: apt-utils (<< 2.0.9) Description: commandline package manager This package provides commandline tools for searching and managing as well as querying information about packages as a low-level access to all features of the libapt-pkg library. . These include: * apt-get for retrieval of packages and information about them from authenticated sources and for installation, upgrade and removal of packages together with their dependencies * apt-cache for querying available information about installed as well as installable packages * apt-cdrom to use removable media as a source for packages * apt-config as an interface to the configuration settings * apt-key as an interface to manage authentication keys ... ``` ### 5. **注意事项** - 如果软件包不存在,会显示错误信息:`dpkg-query: package 'package_name' is not available`。 - 该命令查询的是软件包数据库中的信息,而不是当前安装状态(尽管输出中会有一个Status字段,但它反映的是在数据库中的状态,通常已安装的包会显示`install ok installed`,但即使未安装,只要在可用包列表中,也会显示信息,但状态可能是`not-installed`或类似)。 - 与`dpkg -l`(列出已安装包)不同,`dpkg -p`可以显示未安装但可用的包的信息,前提是这些包的信息在本地数据库中存在(例如,通过`apt update`更新了包列表)。 ### 6. **与相关命令的区别** - `dpkg -l package_name`:简要列出已安装包的状态和版本。 - `dpkg -L package_name`:列出已安装包的文件。 - `dpkg -s package_name`:显示已安装包的详细状态信息(包括版本、依赖等,但仅限于已安装的包)。 注意:`dpkg -p`和`dpkg -s`的区别: - `dpkg -p`:显示可用包的信息(无论是否安装)。 - `dpkg -s`:显示已安装包的当前状态(包括安装状态、错误信息等)。 ### 7. **引用说明** 以上解释参考了dpkg的man手册内容,以及引用[2]中关于dpkg命令的基本介绍[^2]。 ### 相关问题 §§相关问题§§ 1. `dpkg -p`和`dpkg -s`命令有什么区别? 2. 如何更新本地的软件包信息数据库以便`dpkg -p`可以获取最新信息? 3. 在Debian/Ubuntu系统中,除了dpkg还有哪些命令可以查看软件包信息? </think>### Linux系统中`dpkg -p`命令详解 `dpkg -p`命令用于**查看指定软件包的详细信息**,是Debian/Ubuntu系统中软件包管理的核心工具之一。以下是完整解析: #### 1. 命令格式 ```bash dpkg -p <package_name> ``` 或等价形式: ```bash dpkg --print-avail <package_name> ``` #### 2. 核心作用 - 显示软件包的**完整元数据信息** - 查询内容来自本地软件包数据库 (`/var/lib/dpkg/available`) - 无论软件包是否安装均可查询(只要存在于本地数据库) - 替代命令: ```bash apt show <package_name> # 基于APT的查询方式 ``` #### 3. 输出结果解析(以`dpkg -p apt`为例) ```plaintext Package: apt # 包名 Status: install ok installed # 安装状态 Priority: important # 优先级 Section: admin # 软件分类 Installed-Size: 4068 # 安装大小(KB) Maintainer: Ubuntu Developers <ubuntu-devel@lists.ubuntu.com> Architecture: amd64 # 支持架构 Version: 2.4.9 # 版本号 Depends: adduser, gpgv, libapt-pkg6.0 (>= 2.4.9)... # 依赖包 Recommends: ca-certificates # 推荐依赖 Suggests: apt-doc, gnupg # 建议依赖 Conflicts: apt-transport-https (<< 2.4.9) # 冲突包 Description: commandline package manager # 描述 This package provides commandline tools for searching... ``` [^2] #### 4. 典型使用场景 1. **查看软件包属性**: ```bash dpkg -p firefox ``` 2. **检查依赖关系**(结合grep): ```bash dpkg -p nginx | grep "Depends" # 输出:Depends: libc6, libpcre3, zlib1g... ``` 3. **验证软件包版本**: ```bash dpkg -p python3 | grep Version # 输出:Version: 3.10.6-1~22.04 ``` 4. **查看未安装包信息**(需先更新数据库): ```bash sudo apt update # 刷新数据库 dpkg -p <未安装包名> ``` #### 5. 注意事项 - **数据库更新**:首次使用前需执行 `sudo apt update` 更新本地包数据库 - **错误处理**: - 包不存在时报错:`dpkg-query: package 'xxx' is not available` - 需确认包名大小写(如`apt`正确,`APT`错误) - 与`dpkg -l`区别: ```bash dpkg -l apt # 简略信息(状态+版本) dpkg -p apt # 完整元数据 ``` #### 6. 技术原理 该命令从以下数据库文件读取信息: - `/var/lib/dpkg/available` - 可用包列表 - `/var/lib/dpkg/status` - 已安装包状态[^2] 输出内容实际由deb包内的`control`文件定义,打包流程详见引用[3][^3][^4] ### 常见问题解答 **Q:如何查看软件包描述但不安装?** A:使用 `dpkg -p <包名> | grep -A 10 "Description"` **Q:为什么查询新包提示不存在?** A:需先运行 `sudo apt update` 更新本地数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值