dpkg软件包管理器

 8.3 dpkg软件包管理器

dpkg软件包管理器是Ubuntu Linux系统的核心软件管理工具。由于dpkg不负责检查软件包依赖关系,因此,通常使用dpkg安装单个软件包。本节介绍dpkg的基本使用方法。
8.3.1  dpkg软件包管理命令

dpkg是Ubuntu Linux中最基本的命令行软件包管理工具,用于安装、编译、卸载和查询Deb软件包。但是,dpkg存在两个最大缺陷:第一,不能主动从镜像站点获取软件包;第二,安装软件包时,无法检查软件包的依赖关系。因此,在对一个软件组件的依赖关系不清楚的情况下,建议使用APT软件包管理器,如果用户对软件包的依赖关系非常清楚,才可以使用dpkg。

dpkg命令的一般语法格式为:

dpkg  [ -l | -L | -s | -S | -i | -I | -c | -r | -P ]  Debfilename

表8.5列出了部分常用选项。

表8.5                                                        dpkg命令选项说明
选    项 
描    述

-l 
查看当前系统中已安装软件包的信息

-L 
查看当前系统中指定软件包的所安装的相关文件

-s 
查询已安装的指定软件包的详细信息


续表
选    项 
描    述

-S 
查询系统中某个文件所属的软件包

-i 
安装软件包

-I 
查看未安装软件包的信息

-c 
列出Deb软件包中所包含的文件

-r 
卸载Deb软件包,但不删除软件包的配置文件

-P 
完全卸载Deb软件包,包括所有相关配置文件


dpkg将当前系统中所有软件包的详细描述信息保存在配置文件/var/lib/dpkg/status中,包括已安装和曾经安装过的,它是dpkg软件包信息查询操作的主要信息来源。以下是该文件中有关tasksel软件包的片段,包括优先级、版本、适用计算机架构、依赖与冲突的组件等描述信息。

Package: tasksel

Status: install ok installed

Priority: important

Section: admin

Installed-Size: 868

Maintainer: Ubuntu Installer Team ubuntu-installer@lists.ubuntu.com

Architecture: all

Version: 2.59ubuntu2

Depends: debconf (>= 0.5) | debconf-2.0, debconf (>= 1.5.5) | cdebconf (>= 0.106), liblocale-gettext-perl, apt (>= 0.6.45ubuntu14), aptitude (>= 0.2.15-1), tasksel-data

Conflicts: debconf (<< 1.4.27), base-config (<< 2.32)

Size: 56932

Description: Tool for selecting tasks for installation on Debian systems

This package provides 'tasksel', a simple interface for users who

want to configure their system to perform a specific task.

Original-Maintainer: Debian Install System Team <debian-boot@lists.debian.org>

由于每个软件包特性不同,因此各自所拥有的描述项也不尽相同,表8.6列出了常见软件包描述项。

表8.6                                                         软件包描述信息项
描  述  项 
含    义 
实    例

Package 
软件包名称 
tasksel

Status 
软件包状态 
install ok installed

Priority 
软件包优先级 
important

Section 
软件包所属类别 
admin

Installed-Size 
安装后的大小 
868

Maintainer  
维护者 
Ubuntu Installer Team

Architecture 
适用的计算机架构 
all

Version 
软件包版本 
2.59ubuntu2

Replaces 
替代关系的软件包 
/

Provides 
提供关系的软件包 
/

Depends 
依赖关系的软件包 
debconf (>= 0.5) | debconf-2.0, debconf (>= 1.5.5) | cdebconf (>= 0.106), liblocale-gettext-perl, apt (>= 0.6.45ubuntu14), aptitude (>= 0.2.15-1), tasksel-data


续表
描  述  项 
含    义 
实    例

Recommends 
推荐关系的软件包 
/

Conflicts 
冲突关系的软件包 
debconf (<< 1.4.27), base-config (<< 2.32)

Description 
软件包功能描述 
Tool for selecting tasks for installation on Debian systemsThis package provides 'tasksel', a simple interface for users whowant to configure their system to perform a specific task.

Original-Maintainer 
原始开发者 
Debian Install System Team

8.3.2  获取已安装软件包的信息

Ubuntu Linux将所有已安装或已卸载的软件包信息都全部记录下来,以便后期的检索。然而这个安装记录非常多,靠手工查询费时费力,使用dpkg工具可以很方便地完成信息提取。
1.查看当前系统中已安装软件包

Ubuntu Linux系统是由非常多的程序组件支撑运行的。查询当前系统中的软件包安装情况,了解某个软件包的安装状态等操作都是经常要做的。“dpkg -l”可以获得当前系统中已安装软件包的信息列表。在此基础上,可以了解某些软件包是否被安装,或计算机系统中软件包的安装数量等。

下面的命令用于查询Vim、tasksel软件包的安装状态。从执行结果可以看到,目前系统中已安装了tasksel,软件包状态是“已安装”(ii表示已安装);而系统并未安装Vim,软件包状态是“未知”(un表示未安装,也无任何描述信息)。

wdl@UbuntuFisher:~$ dpkg  -l  vim  tasksel

期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)

| 当前状态=未(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)

|/ 错误?=(无)/保持(?)/须重装(R)/两者兼有(#) (状态,错误:大写=故障)

||/     名称     版本                简介

+++-===============================================================================

ii   tasksel    2.59ubuntu2        Tool for selecting tasks for installation on Debian system

un   vim          <无>                  (无相关介绍)

如果单独执行“dpkg-l”命令,由于安装的软件包非常多,显示的信息会在屏幕上非常快的滚动过去,对查询信息没有任何意义。因此,巧妙地将dpkg与其他命令结合起来使用,可以实现更多的查询功能,例如“dpkg -l | more”可以分屏显示。下面的命令用于统计当前系统中安装的软件包数量。

wdl@UbuntuFisher:~$ dpkg -l | grep ii | wc –l

1112
2.获取已安装软件包的详细描述信息

若希望进一步了解已安装软件包的详细信息,可以使用“dpkg -s”。可以发现,获取的信息就是该软件包在/var/lib/dpkg/status中的相关内容。当然,如果查询的软件包没有安装,或输入错误,“dpkg -s”会返回错误提示。

以下命令的目的是,查询gnome-terminal命令终端软件的详细描述信息,包括与其存在依赖、替代和冲突等关系的软件包信息。

wdl@UbuntuFisher:~$ dpkg  -s  gnome-terminal

Package: gnome-terminal

Status: install ok installed

Priority: optional

Section: gnome

Installed-Size: 432

Maintainer: Ubuntu Core Developers ubuntu-devel-discuss@lists.ubuntu.com

Architecture: i386

Version: 2.18.0-0ubuntu1

Replaces: gnome-terminal2

Provides: x-terminal-emulator

Depends: libatk1.0-0 (>= 1.13.1), libbonobo2-0 (>= 2.15.0), libc6 (>= 2.5-0ubuntu1), libgconf2-4 (>= 2.13.5), libglade2-0 (>= 1:2.5.1), libglib2.0-0 (>= 2.12.9), libgnome2-0 (>= 2.14.1), libgnomeui-0 (>= 2.17.1), libgnomevfs2-0 (>= 1:2.17.90), libgtk2.0-0 (>= 2.10.3), liblaunchpad-integration0 (>= 0.0patch26), liborbit2 (>= 1:2.14.1), libpango1.0-0 (>= 1.16.1), libpopt0 (>= 1.10), libstartup-notification0 (>= 0.8-1), libvte9 (>= 1:0.16.0), libx11-6, libxrender1, scrollkeeper (>= 0.3.14-5), gnome-control-center (>= 1:2.8.0), gnome-terminal-data (= 2.18.0-0ubuntu1)

Recommends: yelp

Conflicts: gnome-terminal2

Description: The GNOME 2 terminal emulator application

            GNOME Terminal is a terminal emulation application that you can use to

            perform the following actions:.

           - Access a UNIX shell in the GNOME environment.

          - Run any application that is designed to run on VT102, VT220, and xterm terminals..

          GNOME Terminal features the ability to use multiple terminals in a single window (tabs) and

             profiles support.

Original-Maintainer: Guilherme de S. Pastore <gpastore@debian.org>
3.查询已安装软件包的相关文件

在一个软件包安装完成后,其相关文件可能会非常多,且比较分散。若要进行软件配置,非常有必要了解与这个软件包相关的文件到底有哪些,以免出现遗漏。使用“dpkg -L”命令可以查询已安装软件包的相关文件。

命令的执行结果显示了已安装组件——gnome-terminal命令终端的所有相关文件。

wdl@UbuntuFisher:~$ dpkg  -L  gnome-terminal

/.

/usr

/usr/share

/usr/share/doc

/usr/share/doc/gnome-terminal

/usr/share/doc/gnome-terminal/README

/usr/share/doc/gnome-terminal/AUTHORS

/usr/share/doc/gnome-terminal/copyright

/usr/share/doc/gnome-terminal/changelog.gz

/usr/share/doc/gnome-terminal/NEWS.gz

/usr/share/doc/gnome-terminal/changelog.Debian.gz

/usr/share/man

/usr/share/man/man1

/usr/share/man/man1/gnome-terminal.1.gz

/usr/bin

/usr/bin/gnome-terminal

/usr/bin/gnome-terminal.wrapper

/usr/share/man/man1/gnome-terminal.wrapper.1.gz

从以上执行结果可以看到,gnome-terminal是放置在/usr/bin目录下,它的联机帮助与说明文档分别放置在“/usr/share/man”和“/usr/share/doc”目录中。
4.查询某个文件相关软件包

与上面的情况相反,有时用户可能遇到某个文件,不能确定这个文件属于哪个软件包。因此查询与某个文件相关的软件包是非常必要的。使用“dpkg -S”可以将包描述信息与检索关键词匹配的所有软件包罗列出来。

wdl@UbuntuFisher:~$ dpkg  -S  gnome-terminal.wrapper

gnome-terminal:  /usr/share/man/man1/gnome-terminal.wrapper.1.gz

gnome-terminal:  /usr/bin/gnome-terminal.wrapper

以上命令的执行结果显示出与关键词“gnome-terminal.wrapper”匹配的系统中已安装的软件包。
8.3.3  获取软件包的信息

从一个侧面理解Deb软件包,其本质就是一个归档压缩文件,将程序文件、配置文件、man/info帮助页面等文件整合在一个文件中,该特点类似于tar文件。当然Deb软件包是用于安装的,而tar文件只是用于归档。使用dpkg可以查看Deb软件包的描述信息,以及软件包中的内容。

前面介绍过dpkg不能帮助用户下载指定的软件包。因此,用户需要使用wget手动下载软件包。下面命令的目的是,从某个URL地址下载一个软件包g++_4.1.2-9ubuntu2_i386.deb,并保存在当前目录。下面使用dpkg命令执行查询操作,以软件包g++_4.1.2-9ubuntu2_i386.deb为例。

wdl@UbuntuFisher:~$ wget  http://ubuntu.cn99.com/ubuntu/pool/main/g/gcc-defaults/
g++_4.1.2-9ubuntu2_i386.deb

--03:43:17-- http://ubuntu.cn99.com/ubuntu/pool/main/g/gcc-defaults/g++_4.1.2-9
ubuntu2_i386.deb

=> `g++_4.1.2-9ubuntu2_i386.deb.1'

正在解析主机 ubuntu.cn99.com... 61.132.102.124

正在连接 ubuntu.cn99.com|61.132.102.124|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度: 1,440 (1.4K) [application/x-debian-package]

100%[===================================================================>] 1,440 3.88K/s

03:43:30 (3.88 KB/s) - `g++_4.1.2-9ubuntu2_i386.deb' saved [1440/1440]
1.查看软件包的描述信息

获取某个软件包后的第一件事,应该是查看这个软件的基本信息,包括版本、适用的计算机架构、依赖关系等,据此判断下载的软件包是否正确。可以使用“dpkg-I”查看软件包的描述信息,以下命令显示了g++_4.1.2-9ubuntu2_i386.deb软件包的信息。

wdl@UbuntuFisher:~$ dpkg  -I  g++_4.1.2-9ubuntu2_i386.deb

新格式的 debian 软件包,格式版本 2.0。

大小 1440 字节:主控包=962 字节。

 632 字节,  16 行     control

1248 字节,  37 行  *  postinst #!/bin/sh

 107 字节,   9 行  *  prerm #!/bin/sh

Package: g++

Source: gcc-defaults (1.59ubuntu2)

Version: 4:4.1.2-9ubuntu2

Architecture: i386

Maintainer: Ubuntu Core developers ubuntu-devel-discuss@lists.ubuntu.com

Installed-Size: 40

Depends: cpp (>= 4:4.1.2-9ubuntu2), gcc (>= 4:4.1.2-9ubuntu2), g++-4.1 (>= 4.1.2-1), gcc-4.1 (>= 4.1.2-1)

Suggests: g++-multilib

Provides: c++-compiler

Section: devel

Priority: optional

Description: The GNU C++ compiler

            This is the GNU C++ compiler, a fairly portable optimizing compiler for C++..

            This is a dependency package providing the default GNU C++ compiler.

Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>

可以发现,显示结果的形式与/var/lib/dpkg/status中软件包描述内容的形式是基本一致,只是缺少status项。Ubuntu Linux在安装该软件包后,会将这些描述信息追加到/var/lib/dpkg/avaiable文件中保存。
2.查看软件包中的内容

在确认获取了正确的软件包后,在安装之前还应当查看一下该软件包会在系统中安装哪些文件。“dpkg-c”用于显示软件包中包含的文件列表。类似于“tar-tvf”命令显示tar包文件中包含的内容。以下命令列出了在g++_4.1.2-9ubuntu2_i386.deb软件包中包含的文件,这些文件均为链接文件。

wdl@UbuntuFisher:~$ dpkg  -c  g++_4.1.2-9ubuntu2_i386.deb

drwxr-xr-x root/root 0 2007-09-04 08:47 ./

drwxr-xr-x root/root 0 2007-09-04 08:47 ./usr/

drwxr-xr-x root/root 0 2007-09-04 08:47 ./usr/bin/

drwxr-xr-x root/root 0 2007-09-04 08:47 ./usr/share/

drwxr-xr-x root/root 0 2007-09-04 08:47 ./usr/share/man/

drwxr-xr-x root/root 0 2007-09-04 08:47 ./usr/share/man/man1/

drwxr-xr-x root/root 0 2007-09-04 08:47 ./usr/share/doc/

lrwxrwxrwx root/root 0 2007-09-04 08:47 ./usr/bin/i486-linux-gnu-g++ -> g++-4.1

lrwxrwxrwx root/root 0 2007-09-04 08:47 ./usr/bin/g++ -> g++-4.1

lrwxrwxrwx root/root 0 2007-09-04 08:47 ./usr/share/man/man1/i486-linux-gnu-g++.1.gz ->
g++-4.1.1.gz

lrwxrwxrwx root/root 0 2007-09-04 08:47 ./usr/share/man/man1/g++.1.gz -> g++-4.1.1.gz

lrwxrwxrwx root/root 0 2007-09-04 08:47 ./usr/share/doc/g++ -> cpp
8.3.4  安装软件包

可以使用“dpkg-i”命令安装软件包。但要强调的是,dpkg不能自动解决软件包的依赖性问题。在遇到有依赖关系的软件包不存在时,dpkg命令就会中止安装。从下面命令的执行结果可以看到由于依赖关系问题导致安装失败的情况。

wdl@wdl-desktop:~$ sudo  dpkg -i  g++_4.1.1-6ubuntu3_i386.deb

选中了曾被取消选择的软件包 g++。

(正在读取数据库 ... 系统当前总共安装有 88059 个文件和目录。)

正在解压缩 g++ (从 g++_4.1.1-6ubuntu3_i386.deb) ...

dpkg:依赖关系问题使得 g++ 的配置工作不能继续:

g++ 依赖于 g++- 4.1 (>= 4.1.1-2);然而:

未曾安装软件包"g++-4.1"。

dpkg:处理 g++ (--install)时出错:

依赖关系问题 - 仍未被配置

在处理时有错误发生:

g++

因此,dpkg适合于安装独立软件包,例如安装rxvt命令终端。仍然使用wget获得软件包rxvt_1%3a2.6.4-10_i386.deb,然后执行下面的命令完成安装。

wdl@UbuntuFisher:~$ sudo  dpkg  -i  rxvt_1%3a2.6.4-10_i386.deb

选中了曾被取消选择的软件包 rxvt。

(正在读取数据库 ... 系统当前总共安装有 115795 个文件和目录。)

正在解压缩 rxvt (从 rxvt_1%3a2.6.4-10_i386.deb) ...

正在设置 rxvt (2.6.4-10) ...
8.3.5  卸载软件包

使用dpkg可以直接卸载指定的软件包。但要小心,dpkg不会理睬系统中软件间复杂的关联关系,删除指定软件包后,其他与之相关的软件包将置之不理。
1.不完全卸载

所谓不完全卸载,是指删除软件包在系统中的安装文件,而保留原有的配置文件。不完全卸载的目的是,有的用户卸载软件可能是为了升级软件包的版本,在重新安装该软件后,还能使用原有配置文件。

下面使用“dpkg –r”命令卸载rxvt命令终端,但保留rxvt在系统的信息,使用“dpkg-l”命令查看安装前后的状态。

wdl@UbuntuFisher:~$ dpkg -l  |  grep rxvt

ii   rxvt   2.6.4-10 VT102       terminal emulator for the X Window Sys

wdl@UbuntuFisher:~$ sudo dpkg  -r  rxvt

(正在读取数据库 ... 系统当前总共安装有 115823 个文件和目录。)

正在删除 rxvt ...

wdl@UbuntuFisher:~$ dpkg -l  |  grep rxvt

rc   rxvt   2.6.4-10 VT102      terminal emulator for the X Window Sys

从上面的执行结果可以看到,第一次查看rxvt的状态为“安装”状态(状态标记为ii);卸载后,再次查看rxvt,其状态为“删除/仅保存配置”状态(状态标记为rc)。
2.完全卸载

完全卸载就是将删除软件包在系统中的安装文件,包括其配置文件。“dpkg-P”用于干净彻底的删除软件包。下面的命令将完全卸载rxvt命令终端。

wdl@UbuntuFisher:~$ dpkg  -l  rxvt

期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)

| 当前状态=未(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)

|/ 错误?=(无)/保持(?)/须重装(R)/两者兼有(#) (状态,错误:大写=故障)

||/     名称               版本                简介

ii       rxvt      2.6.4-10 VT102        terminal emulator for the X Window System

wdl@UbuntuFisher:~$ sudo  dpkg  -P  rxvt

(正在读取数据库 ... 系统当前总共安装有 115823 个文件和目录。)

正在删除 rxvt ...

正在清除 rxvt 的配置文件 ...

wdl@UbuntuFisher:~$ dpkg  –l  rxvt

期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)

| 当前状态=未(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)

|/ 错误?=(无)/保持(?)/须重装(R)/两者兼有(#) (状态,错误:大写=故障)

||/     名称               版本                简介

pn     rxvt               <无>                (无相关介绍)

从上面的执行结果可以看到,第一次查看rxvt软件包的状态为“安装”状态(状态标记为ii);完全卸载后,再此查看rxvt,其状态为“清除/未知”状态(状态标记为pn)。
8.3.6  将RPM文件转为Deb文件

在Ubuntu的镜像站点上,提供了几乎所有Deb格式的软件,供用户下载和使用。不推荐用户在Ubuntu Linux中使用Rpm软件包,因为其中存在很多文件格式兼容的问题。

如果用户认为有必要的话,可以使用alien实用程序将Rpm软件包转换为Deb软件包。转换后的软件包通常作为独立软件包,使用dpkg进行安装。不过可能新的Deb软件包仍存在依赖性问题。

wdl@UbuntuFisher:~$ sudo  alien  xine-skins-1.8-1.lvn5.noarch.rpm

warning: xine-skins-1.8-1.lvn5.noarch.rpm: Header V3 DSA signature: NOKEY, key ID a109b1ec

warning: xine-skins-1.8-1.lvn5.noarch.rpm: Header V3 DSA signature: NOKEY, key ID a109b1ec

hostname: Unknown host

xine-skins_1.8-2_all.deb  generated

以上命令的执行结果将一个Rpm软件包转化成了Deb格式的软件包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 dpkg 命令进行 Debian 系统上的软件包管理。以下是一些利用 dpkg 进行软件包管理的命令: 1. 安装软件包:sudo dpkg -i package_name.deb 2. 卸载软件包:sudo dpkg -r package_name 3. 卸载软件包及其配置文件:sudo dpkg -P package_name 4. 显示已安装软件包的信息:dpkg -l package_name 5. 搜索软件包dpkg -S file_name 6. 重新配置软件包:sudo dpkg-reconfigure package_name 7. 显示软件包的详细信息:dpkg -p package_name 8. 展开软件包:sudo dpkg-deb -x package_name.deb directory_name 以上是一些常用的 dpkg 命令,可以用于 Debian 系统上的软件包管理。 ### 回答2: 利用dpkg进行软件包管理的命令有: 1. dpkg -i <package.deb>:安装一个.deb文件,将软件包安装到系统中。 2. dpkg -r <package>:卸载一个软件包,将软件包从系统中移除。 3. dpkg -l:列出系统中所有安装的软件包。 4. dpkg -L <package>:列出一个软件包的所有文件。 5. dpkg -S <file>:查找一个文件属于哪个软件包。 6. dpkg -s <package>:显示一个软件包的详细信息,包括版本号、依赖关系等。 7. dpkg -C:检查系统中的配置文件是否被修改。 8. dpkg-reconfigure <package>:重新配置一个已安装的软件包。 9. dpkg-divert:用于修改和管理系统中的文件。 10. dpkg-deb:用于创建、修改和提取.deb软件包。 以上是一些常用的利用dpkg进行软件包管理的命令,可以帮助用户安装、卸载、查询和配置软件包。 ### 回答3: 在Linux系统中,可以使用dpkg命令进行软件包的安装、卸载、查询等管理操作。下面是常用的dpkg命令: 1. 安装软件包:sudo dpkg -i <package_file>,其中<package_file>是软件包的路径,通过这个命令可以将指定软件包安装到系统中。 2. 升级软件包:sudo dpkg -i <package_file>,如果需要升级已经安装的软件包,可以使用此命令。 3. 卸载软件包:sudo dpkg -r <package_name>,其中<package_name>是要卸载的软件包的名称,通过这个命令可以将指定软件包从系统中卸载。 4. 查询已安装的软件包:sudo dpkg -l,这个命令将列出系统中所有已经安装的软件包列表,包括软件包名称、版本等信息。 5. 查询软件包的详细信息:sudo dpkg -s <package_name>,其中<package_name>是要查询的软件包的名称,通过这个命令可以获取该软件包的详细信息。 6. 查询文件属于哪个软件包dpkg -S <file_name/path>,可以使用此命令来查找指定文件或路径属于哪个软件包。 7. 修复安装失败的软件包:sudo dpkg --configure -a,有时候在安装软件包的过程中可能会出现安装失败的情况,可以使用此命令尝试修复安装。 8. 清理已下载的软件包:sudo apt-get clean,通过这个命令可以删除系统中下载的软件包文件,释放磁盘空间。 这些是利用dpkg命令进行软件包管理时常用的一些命令,可以通过这些命令来方便地进行软件包的安装、卸载、查询等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值