安装,升级和卸载应用软件是影响用户对操作系统评价的决定性因素之一。对于日渐流行的 GNU/Linux 操作系统,拥有简洁强大的软件包管理机制功不可没。本文从基本的 rpm/dpkg 命令行出发,以 RHEL 和 UBUNTU 为例,介绍典型 Linux 系统中应用软件的管理和使用。
RPM/DPKG 两大阵营简介
在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本。软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询。
RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成为很多 Linux 系统 (RHEL) 的既定软件标准。与 RPM 进行竞争的是基于 Debian 操作系统 (UBUNTU) 的 DEB 软件包管理工具- DPKG,全称为 Debian Package,功能方面与 RPM 相似。二者之具体比较不在本文范围之内。
RPM 包的安装 / 升级 / 查询 / 卸载
一个 RPM 包包含了已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以 .rpm 扩展名结尾的文件,例如 package.rpm 。对其操作,需要使用 rpm 命令。下面介绍 rpm 工具的参数和使用方法,并以 IBM Lotus Notes 在 RHEL 5.2 安装为例做具体说明。
RPM 命令常用参数
RPM 的常规使用方法为 rpm -? package.rpm,其中 -? 为操作参数 ( 更多信息,请查阅帮助 $man rpm):
·         -q 在系统中查询软件或查询指定 rpm 包的内容信息
·         -i 在系统中安装软件
·         -U 在系统中升级软件
·         -e 在系统中卸载软件
·         -h 用 #(hash) 符显示 rpm 安装过程
·         -v 详述安装过程
·         -p 表明对 RPM 包进行查询,通常和其它参数同时使用,如:
·         -qlp 查询某个 RPM 包中的所有文件列表
·         -qip 查询某个 RPM 包的内容信息
RPM 命令参数使用方法
以上参数有些需要组合使用,比如说 rpm -h package.rpm 是没有意义的,但 rpm -ih package.rpm 即表示安装 package 并用 # 符显示安装进度。
安装 RPM 包
# rpm -ivh package.rpm
升级 RPM 包命令
# rpm -Uvh package.rpm
卸载 RPM 包命令
# rpm -ev package
查询 RPM 包中包含的文件列表命令
# rpm -qlp package
查询 RPM 包中包含的文件列表命令
# rpm -qlp package
查询 RPM 包中包含的内容信息命令
# rpm -qip package
查询系统中所有已安装 RPM 包
# rpm -qa
RPM 包管理示例
以下步骤描述了一个普通用户安装 IBM Lotus Notes V85 ( 以下简称 Notes) 的典型操作过程。 Notes 的 RPM 包名为 ibm_lotus_notes-8.5.i586.rpm 。
1.  首先查询是否该软件是否已经在系统中存在
# rpm -qa | grep ibm_lotus_notes
如果返回信息为空那么说明该软件还未被安装。
2.  查询 Notes 软件包内容:
1.  # rpm -qip ibm_lotus_notes-8.5.i586.rpm
2.
3.  Name        : ibm_lotus_notes           Relocations: /opt/ibm/lotus/notes
4.  Version     : 8.5                               Vendor: IBM
5.  Release     : 20081211.1925             Build Date: Sat 13 Dec 2008 09:38:55 AM CST
6.  Install Date: (not installed)               Build Host: dithers.notesdev.ibm.com
7.  Group       : Applications/Office
8.  Source RPM: ibm_lotus_notes-8.5-20081211.1925.src.rpm
9.  Size        : 603779427                        License: Commercial
10. Signature   : DSA/SHA1, Sat 13 Dec 2008 09:43:02 AM CST, Key ID 314c8c6534f9ae75
11. Summary     : IBM Lotus Notes
12. Description :
13. IBM Lotus Notes software provides a robust ...
复制代码
3.  安装 Notes:
# rpm -ivh ibm_lotus_notes-8.5.i586.rpm
返回信息 :
Preparing...                ########################################### [100%]
1:ibm_lotus_notes        ########################################### [100%]
4.  升级 Notes:
若今后需要基于该版本升级至更高版本的 Notes( 缝 .0 - ibm_lotus_notes-9.0.i586.rpm),则使用 -U 参数:
# rpm -Uvh ibm_lotus_notes-8.5.i586.rpm
在该步骤中如果使用 -i 则系统通常会报文件冲突错误,无法正常安装。
5.  卸载 Notes
注意卸载软件使用软件名称,而不是包文件名:
# rpm -ev ibm_lotus_notes
DEB 包的安装 / 升级 / 查询 / 卸载
一个 DEB 包包含了已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以 .deb 扩展名结尾的文件,例如 package.deb 。对其操作,需要使用 dpkg 命令。下面介绍 dpkg 工具的参数和使用方法,并以 IBM Lotus Notes 在 UBUNTU 904 安装为例做具体说明。
DPKG 命令常用参数
DPKG 的常规使用方法为 dpkg -? Package(.rpm), 其中 -? 为安装参数 ( 更多信息,请查阅帮助 $man rpm):
·         -l 在系统中查询软件内容信息
·         --info 在系统中查询软件或查询指定 rpm 包的内容信息
·         -i 在系统中安装 / 升级软件
·         -r 在系统中卸载软件 , 不删除配置文件
·         -P 在系统中卸载软件以及其配置文件
DPKG 命令参数使用方法
安装 DEB 包命令
$ sudo dpkg -i package.deb
升级 DEB 包命令
$ sudo dpkg -i package.deb ( 和安装命令相同)
卸载 DEB 包命令
$ sudo dpkg -r package.deb # 不卸载配置文件

$ sudo dpkg -P package.deb # 卸载配置文件
查询 DEB 包中包含的文件列表命令
$ sudo dpkg-deb -c package.deb
查询 DEB 包中包含的内容信息命令
$ dpkg --info package.deb
查询系统中所有已安装 DEB 包
$ dpkg -l package
DEB 包管理示例
以下步骤描述了一个普通用户安装 IBM Lotus Notes V85 ( 以下简称 Notes) 的典型操作过程。 Notes 的 DEB 包名为 ibm_lotus_notes-8.5.i586.deb.
1.  首先查询是否该软件是否已经在系统中存在
$ dpkg -l ibm-lotus-*
如果系统中从未安装过 Lotus 产品,那么返回信息为 :
No pakcages found matching ibm-lotus-*
如果系统安装过 Lotus 产品,但已被删除,那么返回信息为 :
pn ibm-lotus-notes none (no description available)
2.  查询 Notes 软件包内容:
$ dpkg --info ibm_lotus_notes-8.5-i586.deb
返回信息 :
new debian package, version 2.0.
size 335012296 bytes: control archive= 231821 bytes.
...
Package: ibm-lotus-notes
Version: 8.5-20081211.1925
Section: IBM
Priority: extra
Architecture: i386
Installed-Size: 619444
Maintainer: IBM Lotus Product
Description: IBM Lotus Notes
IBM Lotus Notes software provides a robust ... ...
3.  安装 Notes:
$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb
返回信息 :
(Reading database ... 151150 files and directories currently installed.)
Preparing to replace ibm-lotus-notes 8.5-20081211.1925
(using ibm-lotus-notes-higher-version.i586.deb) ...
Unpacking replacement ibm-lotus-notes ...
Setting up ibm-lotus-notes (higher-version) ...
4.  升级 Notes:
$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb
返回信息 :
(Reading database ... 151150 files and directories currently installed.)
Preparing to replace ibm-lotus-notes 8.5-20081211.1925
(using ibm-lotus-notes-higher-version.i586.deb) ...
Unpacking replacement ibm-lotus-notes ...
Setting up ibm-lotus-notes (higher-version) ...
5.  卸载 Notes
注意卸载软件使用软件名称,而不是包文件名:
$ sudo dpkg -P ibm-lotus-notes
软件包依赖性关系
由于开源的多态性,Linux 操作系统中的软件之间的依赖性关系处理一直令用户感到头疼。如果 package_a 依赖于 package_b,那么在一个没有安装 package_b 的系统中,package_a 是不被系统推荐安装的,强制安装很可能会导致软件无法正常工作。基于以上 package_a 和 package_b 的关系,在一个干净的系统中 ( 未安装 package_a 或 package_b),欲安装 package_a,错误通常会表现为:
RHEL 5.2
# rpm -ivh package_a.rpm
error: Failed dependencies:
pacakge_b = version info is needed by package_a
Ubuntu 904
$ sudo dpkg -i package_a.deb
dpkg: regarding package_a.deb containing package, pre-dependency problm:
package_a pre-depends on package_b (version info)
dpkg: error processing package_a.deb (--install):
pre-dependency problem - not installing package_a
Errors were encountered while processing:
package_a.deb
查询软件包依赖关系
查询 RPM 包的依赖关系,使用 rpm -qRp:
# rpm -qRp package_a.rpm
package_b = version_info

package_b >= version_info

package_b <= version_info
表明 package_a.rpm 依赖于 version_info 版的 package_b,或者任何高于并包括 version_info 版的 package_b,亦或低于或包括 version_info 版的 package_b 。所以 package_b.rpm 必须在 package_a 之前安装于系统中。
查询 DEB 包的依赖关系,可解读 dpkg --info 结果中的 Pre-Depends 字段:
$ dpkg --info package_a.deb
Pre-depends: package_b (= version_info)
Depends: package_b (= version_info)

Pre-depends: package_b (>= version_info)
Depends: package_b (>= version_info)

Pre-depends: package_b (<= version_info)
Depends: package_b (<= version_info)
表明 package_a.deb 依赖于 version_info 版的 package_b 或者任何高于并包括 version_info 版的 package_b 亦或低于或包括 version_info 版的 package_b. 所以 package_b.deb 必须在 package_a 之前安装于系统中。
所以正确的安装方法如下节所示。
安装方法
对于 package_a,正确的安装方法应该是:
##RPM
# rpm -ivh package_b.rpm
# rpm -ivh package_a.rpm
##DEB
$ sudo dpkg -i package_b.deb
$ sudo dpkg -i package_a.deb
嵌套的依赖关系
如上示例为最理想的依赖关系,实际应用中往往最令用户头疼的是 package_a 依赖于 package_b/c/d/e/f 等多个包 , 而 package_b/c/d/e/f 等包又依赖于 package_b1,b2,b3/c1,c2/d1,d2/e1,e2/f1,f2 等等 ... ... 为保证软件的正常使用,必须找到所有依赖包以及子依赖包并且安装。过多的依赖关系大大降低了 Linux 软件安装的用户友好性。所以针对此类问题,使用了更高级的包管理策略去解决 - Yum/APT 。
更友好的包管理软件 - YUM
YUM
YUM 基于 RPM 包管理工具,能够从指定的源空间(服务器,本地目录等)自动下载目标 RPM 包并且安装,可以自动处理依赖性关系并进行下载、安装,无须繁琐地手动下载、安装每一个需要的依赖包。此外,YUM 的另一个功能是进行系统中所有软件的升级。如上所述,YUM 的 RPM 包来源于源空间,在 RHEL 中由 /etc/yum.repos.d/ 目录中的 .repo 文件配置指定,如 rhel-debuginfo.repo 的内容:
rhel-debuginfo.repo
[rhel-debuginfo]
name=Red Hat Enterprise Linux 5Client - i386 - Debug
baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/i386/Debuginfo/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
YUM 的系统配置文件位于 /etc/yum.conf,内容如:
[main]
cachedir=/var/cache/yum
keepcache=1
debuglevel=2
pkgpolicy=newest
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
exclude= firefox gftp
配置文件用来定义用户期望的 yum 行为,比如,gpgcheck?表明安装时不进行 gpg 验证,exclued=firefox gftp 表明进行系统全软件升级时不升级 firefox 和 gftp 。
YUM 常用命令
安装指定软件 :
# yum -y install package-name
列出系统中已安装软件
# yum list
列出系统中可升级的所有软件
# yum check-update
升级系统中可升级的所有软件
# yum update
升级指定软件
# yum update package-name
在升级过程中接受所有互动问答
# yum -y update
卸载指定软件
# yum remove package-name
更多有关 YUM 的信息,请查阅 http://fedoraproject.org/wiki/Tools/yum 。
更友好的包管理软件 - APT
APT
APT 的全称为 Advanced Packaging Tools 。与 YUM 对应,它最早被设计成 DPKG 的前端软件,现在通过 apt-rpm 也支持 rpm 管理。而本节本节将介绍 APT 作为 DPKG 前端的使用。 APT 的主要包管理工具为 APT-GET,通过此工具可满足和上述 YUM 相似的功能要求。
APT 的软件源定义来自 /etc/apt/sources.list 文件:
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted
注意每次手动修改上述文件后,需要使用 sudo apt-get update 来更新系统的源使新的源数据被当前系统识别。
UBUNTU 中 APT 的配置文件位于 /etc/apt/apt.conf.d,其中的多个配置文件依功能分类。
APT 常用命令
更新源索引
$ sudo apt-get update
安装指定软件
$ sudo apt-get install package-name
下载指定软件的源文件
$ sudo apt-get source package-name
将系统中所有软件升级到最新版本
$ sudo apt-get upgrade
将操作系统连同所有软件升级到最新版本
$ sudo apt-get dist-upgrade
卸载指定软件
$ sudo apt-get remove package-name
更多有关 APT 的信息,请查阅 http://www.debian.org/doc/manuals/apt-howto/index.en.html 。
RPM 与 DEB 的兼容 - Alien
Alien 工具可以将 RPM 软件包转换成 DEB 软件包,或把 DEB 软件包转换成 RPM 软件包,以此适应兼容性的需要。注意首先请在系统中安装 alien 。
在 UBUNTU 中使用 alien 将 rpm 转换为 deb 并安装 :
$ sudo alien -d package.rpm
$ sudo dpkg -i package.deb
在 RHEL 中使用 alien 将 deb 转换为 rpm 并安装 :
# alien -r package.deb
# rpm -ivh package.rpm
更多 alien 相关信息请查阅 http://linux.die.net/man/1/alien
总结
本文以 RHEL 5.2 和 Ubuntu 904 为例,基于命令行操作,介绍了 Linux 系统中两大常用软件包管理工具- RPM 与 DPKG 。首先从最底端的 rpm/dpkg 命令操作开始列举了它们的基本使用方法,随后指出了软件的依赖关系以及由此带来的问题,并对此问题的解决方案,也是最流行的 YUM 与 APT 前端软件管理系统进行了操作介绍。最后本文简要说明了当前 RPM/DEB 的兼容性问题的常规解决方法。

转载于:https://blog.51cto.com/ssdguy/336620

【转载】Linux平台软件包管理完全攻略相关推荐

  1. Linux平台软件包管理rpm、yum---马哥运维笔记

    文章目录 一.预先知识: (一). 软件开发语言有哪些类? 1. 系统级开发 2. 应用级开发 (二). 应用程序的组成部分: 1.程序的组成组成清单 (每个包独有) 2.数据库(公共) (三). 程 ...

  2. [转载]Linux用户管理全攻略(八)

    原文地址:Linux用户管理全攻略(八)作者:ZOL_心蓝蓝 Linux 系统中的超级权限的控制 作者:北南南北 赞助: eTony,pandonny,懒猫, Arch 来自:LinuxSir.Org ...

  3. linux系统scsi硬盘,Linux系统SCSI磁盘管理全攻略(一)

    Linux系统SCSI磁盘管理全攻略(一) 介绍 本系列文章系统.全面地介绍了Linux 的SCSI设备管理机制和整套操作命令.包括以下六大主题:Linux SCSI子系统概述 Linux主机LUN识 ...

  4. <Linux> 软件包管理器yum及编辑器vim的使用

    文章目录 一.yum的背景知识 1. 商业生态 2. 开源生态 3. 软件生态本土化 二.yum 的基本使用 1. 查看软件包 2. 安装.卸载.搜索软件 实现Windows下和Linux下文件互传 ...

  5. LINUX 下播放 DVD 全攻略 (关键字 DVD-ROM LiViD fifo OMS) (转)

    LINUX 下播放 DVD 全攻略 (关键字 DVD-ROM LiViD fifo OMS) (转)[@more@]Linux 下播放 dvd 全攻略 推荐:bfreeboy  发表日期:2001年5 ...

  6. 汽车4S店管理全攻略

    汽车4S店管理全攻略 [详情欢迎访问优企汽车管控论坛] 第一篇整车销售管理 第一章 整车销售的组织结构与职能分工 一.单一的4S(四位一体)公司组织结构 二.代理多品牌的集团公司的组织结构 三.代理单 ...

  7. 微软云计算操作系统Windows Azure 平台——云+端全面攻略

    微软云计算操作系统Windows Azure 平台--云+端全面攻略 Windows Azure Platform 开发入门 在云计算时代,有三个平台非常重要,即开发平台.部署平台和运营平台.Wind ...

  8. Linux下Web服务器架设攻略

    Linux下Web服务器架设攻略 [收藏此页] [打印] [推荐] [挑错] 作者:小云  2004-12-23    内容导航: 概述 [IT168 专稿]今天我们来看看如何将Web服务器架在Lin ...

  9. LINUX 下播放 DVD 全攻略 (关键字 DVD-ROM LiViD fifo OMS)

    LINUX 下播放 DVD 全攻略 推荐:bfreeboy  发表日期:2001年5月23日  阅读次数:68 -------------------------------------------- ...

最新文章

  1. 利用XML配置实体列表
  2. python 命令行参数-python中命令行参数
  3. Pulsar集群搭建部署
  4. 2015211230108《Java程序设计》第10周学习总结
  5. android 虚拟按键 增减和删除的方法
  6. (转)[Android分享] Android中用Ant把ndk的so文件打包进apk
  7. 微博安全是一个系统问题包括服务器安全,应用安全开发注意事项
  8. 微信表情包储服务器,新发现!微信里的表情包,终于能保存到手机和电脑辣!-qq表情在哪个文件夹里...
  9. 太极团队首发:iOS 8.3完美越狱工具发布
  10. php++redius,【答疑】edius中快进播放的快捷键是什么啊? - 羽兔网问答
  11. 无法复制 文件:无法读源文件或磁盘
  12. zynq-7000系列基于zynq-zed的vivado初步设计之使用jtag-uart(MDM)
  13. 动手学深度学习笔记4——微积分自动微分
  14. 豆瓣首席架构师洪强宁谈Python语言
  15. 灰色预测GM(1,1)代码
  16. 校招季--献给前端求职路上的你们(H5+C3)
  17. 五款堪称神器的网页翻译插件,不知道就亏大了!
  18. 在与SQL Server建立连接时出现于网络相关的或特定于实例的错误。
  19. DataFrame交换两列
  20. 记录有关Https、443、SSL、百度地图、云服务器、网易有数BI 等相关知识

热门文章

  1. hooks组件封装 react_react-hooks amp; context 编写可复用react组件的一种实践
  2. 新娘JAVA_Java之趣味编程结婚问题
  3. 新华三社招流程_【面试经验|校招】新华三/产品经理
  4. Spring Boot基础学习笔记:可视化迎新
  5. Python学习笔记:交互对话环境IPython
  6. 数据结构学习笔记:利用栈实现进制转换
  7. Java实训项目:GUI学生信息管理系统(2019)【上】
  8. 禁止i5笔记本按Ctrl+Alt+向下键翻转屏幕
  9. 无心剑英译朱自清《匆匆》
  10. 解决Python shell中Delete-Backspace键乱码问题