dpkg
“dpkg”是“Debian Packager”的简写。为“Debian”专门开发的套件管理系统,方便软件的安装、更新及移除。所有源自“Debian”的“Linux”发行版都使用“dpkg”,例如“Ubuntu”、“Knoppix”等。
dpkg是Debian软件包管理器的基础,它被伊恩·默多克创建于1993年。dpkg与RPM十分相似,同样被用于安装、卸载和供给.deb软件包相关的信息。
dpkg本身是一个底层的工具。上层的工具,如APT,被用于从远程获取软件包以及处理复杂的软件包关系。“dpkg”是“Debian Package”的简写。
用法
dpkg的用法
1)安装软件
命令行:dpkg-i\u003c.deb file name\u003e
示例:dpkg-iavg71flm_r28-1_i386.deb
2)安装一个目录下面所有的软件包
命令行:dpkg-R
示例:dpkg-R/usr/local/src
3)释放软件包,但是不进行配置
命令行:dpkg–-unpack package_file 如果和-R一起使用,参数可以是一个目录
示例:dpkg–-unpack avg71flm_r28-1_i386.deb
4)重新配置和释放软件包
命令行:dpkg–configure package_file
如果和-a一起使用,将配置所有没有配置的软件包
示例:dpkg–configure avg71flm_r28-1_i386.deb
5)删除软件包(保留其配置信息)
命令行:dpkg-r
示例:dpkg-r avg71flm
6)替代软件包的信息
命令行:dpkg–update-avail \u003cPackages-file\u003e
7)合并软件包信息
dpkg–merge-avail\u003cPackages-file\u003e
8)从软件包里面读取软件的信息
命令行:dpkg-A package_file
9)删除一个包(包括配置信息)
命令行:dpkg-P
10)丢失所有的Uninstall的软件包信息
命令行:dpkg–forget-old-unavail
11)删除软件包的Avaliable信息
命令行:dpkg–clear-avail
12)查找只有部分安装的软件包信息
命令行:dpkg-C
13)比较同一个包的不同版本之间的差别
命令行:dpkg–compare-versions ver1 op ver2
14)显示帮助信息
命令行:dpkg–help
15)显示dpkg的Licence
命令行:dpkg–licence (or) dpkg –license
16)显示dpkg的版本号
命令行:dpkg--version
17)建立一个deb文件
命令行:dpkg-b directory [filename]
18)显示一个Deb文件的目录
命令行:dpkg-c filename
19)显示一个Deb的说明
命令行:dpkg-I filename [control-file]
20)搜索Deb包
命令行:dpkg-l package-name-pattern
示例:dpkg-I vim
21)显示所有已经安装的Deb包,同时显示版本号以及简短说明
命令行:dpkg -l
22)报告指定包的状态信息
命令行:dpkg -s package-name
示例:dpkg -s ssh
23)显示一个包安装到系统里面的文件目录信息
命令行:dpkg -L package-Name
示例:dpkg -L apache2
24)搜索指定包里面的文件(模糊查询)
命令行:dpkg -S filename-search-pattern
25)显示包的具体信息
命令行:dpkg -p package-name
示例:dpkg-p cacti
解析
dpkg使用解析
APT install \u003cpackage\u003e
下载\u003cpackage\u003e 以及所有依赖的包裹,同时进行包裹的安装或升级。如果某个包裹被设置了 hold (停止标志),就会被搁在一边(即不会被升级).更多 hold 细节请看下面.
apt-get remove [--purge] \u003cpackage\u003e
移除\u003cpackage\u003e 以及任何倚赖这个包裹的其它包裹.
--purge 指明这个包裹应该被完全清除 (purged) ,更多信息请看 dpkg -P .
APT update
升级来自Debian镜像的包裹列表,如果你想安装当天的任何软件,至少每天运行一次,而且每次修改了
/etc/apt/sources.list 后,必须执行.
apt-get upgrade [-u]
升级所有已经安装的包裹为最新可用版本。不会安装新的或移除老的包裹。如果一个包改变了倚赖关系而需要安装一个新的包裹,那么它将不会被升级,而是标志为 hold .apt-get update 不会升级被标志为 hold 的包裹 (这个也就是hold的意思).请看下文如何手动设置包裹为 hold .我建议同时使用 '-u' 选项,因为这样你就能看到哪些包裹将会被升级.
APT dist-upgrade [-u]
和 apt-get upgrade 类似,除了 dist-upgrade 会安装和移除包裹来满足倚赖关系。因此具有一定的危险性.
apt-cache search \u003cpattern\u003e
搜索满足\u003cpattern\u003e的包裹和描述.
apt-cache show \u003cpackage\u003e
显示\u003cpackage\u003e的完整的描述.
apt-cache showpkg\u003cpackage\u003e
显示\u003cpackage\u003e许多细节,以及和其它包裹的关系.
dselect
console-apt
gnome-apt
APT 的几个图形前端(其中一些在使用前得先安装).这里 dselect 无疑是最强大的,也是最古老,最难驾驭.
普通Dpkg用法
dpkg-i\u003cpackage.deb\u003e
安装一个Debian包裹文件;如你手动下载的文件.
dpkg-c\u003cpackage.deb\u003e
列出\u003cpackage.deb\u003e的内容.
dpkg-I\u003cpackage.deb\u003e
从\u003cpackage.deb\u003e中提取包裹信息.
dpkg-r\u003cpackage\u003e
移除一个已安装的包裹.
dpkg-P\u003cpackage\u003e
完全清除一个已安装的包裹。和remove不同的是,remove只是删掉数据和可执行文件,purge另外还删除所有的配制文件.
dpkg-L\u003cpackage\u003e
列出\u003cpackage\u003e安装的所有文件清单。同时请看dpkg-c来检查一个.deb文件的内容.
dpkg-s\u003cpackage\u003e
显示已安装包裹的信息。同时请看apt-cache显示Debian存档中的包裹信息,以及dpkg-I来显示从一个.deb文件中提取的包裹信息.
dpkg-reconfigure \u003cpackage\u003e
重新配制一个已经安装的包裹,如果它使用的是 debconf (debconf 为包裹安装提供了一个统一的配制界面).你能够重新配制 debconf 它本身,如你想改变它的前端或提问的优先权。例如,重新配制 debconf ,使用一个 dialog 前端,简单运行:
dpkg-reconfigure --frontend=dialog debconf (如果你安装时选错了,这里可以改回来哟)
echo "\u003cpackage\u003e hold" | dpkg --set-selections
设置 \u003cpackage\u003e 的状态为 hold (命令行方式)
dpkg --get-selections "\u003cpackage\u003e"
取的 \u003cpackage\u003e 的当前状态 (命令行方式)
支持通配符,如:
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 remove --purge amsn
那么状态标志就从 install 变成 purge.
方法二:
在/etc/apt 下手动建一个 preferences 文件
内容:
Package: gaim
松属: version 0.58*
保存
dpkg -S \u003cfile\u003e
在包裹数据库中查找 \u003cfile\u003e,并告诉你哪个包裹包含了这个文件.(注:查找的是事先已经安装的包裹)
从源码建立deb packages
APT source [-b] \u003cpackage\u003e
下载一个源码的包并解开。
你必须在你的/etc/apt/sources.list文件里写入一条 deb-src 的记录才能完成这项工作。
如果你输入了一个-b参数,并且是以root的身份,deb包会被自动的创建。
apt-get build-dep \u003cpackage\u003e
自动下载并安装通过源码创建 \u003cpackage\u003e 时需要的包。
只有apt 0.5以上版本才支持这个功能。
现在woody和以上版本包含了这个功能。
如果你使有一个旧版本的apt,查找依赖性最简单的方法是查看源码包中 debian/control 这个文件,
注意这个路径是相对的,是包内的路径。
普通的用法,结合 APT source -b,例子 (as root):
apt-get build-dep \u003cpackage\u003e
apt-get source -b \u003cpackage\u003e
会下载源码包,建立依赖性,然后尝试编译源码。
dpkg-source -x \u003cpackage.dsc\u003e
如果你手工下载了一个程序的源码包,其中包含了几个类似 .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,
同时为你运行 lintian 和 gpg
修正倚赖关系
dpkg --configure --pending
如果dpkg在APT install upgrade dist-uptradeing 的时候出错退出,
尝试使用此命令来配置已经unpack的包。
然后再用 apt-get install ,upgrade, or dist-upgrade -f ,
然后再用 apt-get install, upgrade, or dist-upgrade.
可能会重复多次,这样通常可以解决大多数的依赖性问题。
(同时,如果提示由于某种原因需要某个特定的包裹,你可以常识安装或卸载这个包)
APT install -f
apt-get upgrade -f
apt-get dist-upgrade -f
尝试修正上述过程中出现依赖性关系
注意 apt-get install -f 不需要 \u003cpackage\u003e 作为参数。
参考资料
dpkg的用法.CSDN博客.2012-11-08
apt和dpkg.CSDN博客.2012-11-08