linux--多种包管理工具使用和区别

Linux包管理工具(转)

在正式进入讨论之前,先贴几条非常有用的link:

linux 发行版比较:http://zh.wikipedia.org/wiki/Linux%E5%8F%91%E8%A1%8C%E7%89%88%E6%AF%94%E8%BE%83

linux发行版列表:http://zh.wikipedia.org/wiki/Linux%E5%8F%91%E8%A1%8C%E7%89%88%E5%88%97%E8%A1%A8

linux平台软件包管理:

在 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 -? package.rpm,其中 -? 为操作参数 ( 更多信息,参见下面):

  • -q 在系统中查询软件或查询指定 rpm 包的内容信息
  • -i 在系统中安装软件
  • -U 在系统中升级软件
  • -e 在系统中卸载软件
  • -h 用 #(hash) 符显示 rpm 安装过程
  • -v 详述安装过程
  • -p 表明对 RPM 包进行查询,通常和其它参数同时使用(参见下面两条)
  • -qlp 查询某个 RPM 包中的所有文件列表
  • -qip 查询某个 RPM 包的内容信息

以上参数有些需要组合使用,比如说 rpm -h package.rpm 是没有意义的,但 rpm -ih package.rpm 即表示安装 package 并用 # 符显示安装进度。

# rpm -ivh package.rpm
# rpm -Uvh package.rpm
# rpm -ev package
# rpm -qlp package
# rpm -qlp package
# rpm -qip package
# rpm -qa

以下步骤描述了一个普通用户安装 IBM Lotus Notes V85 ( 以下简称 Notes) 的典型操作过程。 Notes 的 RPM 包名为 ibm_lotus_notes-8.5.i586.rpm 。

  1. 首先查询是否该软件是否已经在系统中存在:

    # rpm -qa | grep ibm_lotus_notes

    如果返回信息为空那么说明该软件还未被安装。

  2. 查询 Notes 软件包内容:

    # rpm -qip ibm_lotus_notes-8.5.i586.rpm 
    
     Name        : ibm_lotus_notes           Relocations: /opt/ibm/lotus/notes
     Version     : 8.5                               Vendor: IBM
     Release     : 20081211.1925             Build Date: Sat 13 Dec 2008 09:38:55 AM CST
     Install Date: (not installed)               Build Host: dithers.notesdev.ibm.com
     Group       : Applications/Office
     Source RPM: ibm_lotus_notes-8.5-20081211.1925.src.rpm
     Size        : 603779427                        License: Commercial
     Signature   : DSA/SHA1, Sat 13 Dec 2008 09:43:02 AM CST, Key ID 314c8c6534f9ae75
     Summary     : IBM Lotus Notes
     Description :
     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 -? Package(.rpm), 其中 -? 为安装参数 ( 更多信息,请查阅帮助 $man rpm):

  • -l 在系统中查询软件内容信息
  • --info 在系统中查询软件或查询指定 rpm 包的内容信息
  • -i 在系统中安装 / 升级软件
  • -r 在系统中卸载软件 , 不删除配置文件
  • -P 在系统中卸载软件以及其配置文件
$ sudo dpkg -i package.deb
$ sudo dpkg -i package.deb ( 和安装命令相同)
$ sudo dpkg -r package.deb # 不卸载配置文件
或
 $ sudo dpkg -P package.deb # 卸载配置文件
$ sudo dpkg-deb -c package.deb
$ dpkg --info package.deb
$ dpkg -l package

以下步骤描述了一个普通用户安装 IBM Lotus Notes V85 ( 以下简称 Notes) 的典型操作过程。 Notes 的 DEB 包名为 ibm_lotus_notes-8.5.i586.deb.

  1. 首先查询是否该软件是否已经在系统中存在:

    $ dpkg -l ibm-lotus-*
    No pakcages found matching ibm-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,错误通常会表现为:

# rpm -ivh package_a.rpm 

 error: Failed dependencies:
        pacakge_b = version info is needed by package_a
$ 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 -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 之前安装于系统中。

$ 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 之前安装于系统中。

所以正确的安装方法如下节所示。

##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 基于 RPM 包管理工具,能够从指定的源空间(服务器,本地目录等)自动下载目标 RPM 包并且安装,可以自动处理依赖性关系并进行下载、安装,无须繁琐地手动下载、安装每一个需要的依赖包。此外,YUM 的另一个功能是进行系统中所有软件的升级。如上所述,YUM 的 RPM 包来源于源空间,在 RHEL 中由 /etc/yum.repos.d/ 目录中的 .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
[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 -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 的全称为 Advanced Packaging Tools 。与 YUM 对应,它最早被设计成 DPKG 的前端软件,现在通过 apt-rpm 也支持 rpm 管理。而本节本节将介绍 APT 作为 DPKG 前端的使用。 APT 的主要包管理工具为 APT-GET,通过此工具可满足和上述 YUM 相似的功能要求。

# 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,其中的多个配置文件依功能分类。

$ 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 。

Alien使用:

Alien 工具可以将 RPM 软件包转换成 DEB 软件包,或把 DEB 软件包转换成 RPM 软件包,以此适应兼容性的需要。注意首先请在系统中安装 alien 。

$ sudo alien -d package.rpm
 $ sudo dpkg -i package.deb
# alien -r package.deb
 # rpm -ivh package.rpm

更多 alien 相关信息请查阅 http://linux.die.net/man/1/alien

 RPM/DEB 的兼容性问题:

本文以 RHEL 5.2 和 Ubuntu 904 为例,基于命令行操作,介绍了 Linux 系统中两大常用软件包管理工具- RPM 与 DPKG 。首先从最底端的 rpm/dpkg 命令操作开始列举了它们的基本使用方法,随后指出了软件的依赖关系以及由此带来的问题,并对此问题的解决方案,也是最流行的 YUM 与 APT 前端软件管理系统进行了操作介绍。最后本文简要说明了当前 RPM/DEB 的兼容性问题的常规解决方法。

  • RPM

    可以。使用 --nodeps 辅助参数,则安装过程将不理会依赖性关系限制,强制安装目标包,如:

    # rpm -i --nodeps package_a.rpm

  • DEB

    可以。使用— force-depends 辅助参数,如:

    $ sudo dpkg -i --force-depends package_a.deb

RPM 中的默认安装规则是不允许同一个包多次安装的,也不允许降级安装。使用 --force 辅助参数将不考虑以上因素,强制安装 RPM 包。但是,--force 无法强制安装一个不满足系统依赖性关系的包 ( 此时需要用到 --nodeps 参数 ) 。使用方法如:

# rpm -i --force package_a.rpm

  • RPM

    是。 RPM 支持 HTTP 和 FTP 协议,如:

    # rpm -Uvh ftp://user:[email protected]/package.rpm

  • DPKG

    最新的基于 DEB 包的系统中,远程安装通常被更先进的 APT 代替。

  • RPM

    是。可以使用 -V 参数进行验证。

  • DPKG

    Debian 系统通常使用 debsums 工具参数进行验证。
  • RPM

    是。可以使用 --import 导入与软件同时发布的 GPG KEY, 接着使用 -K 命令来验证包的安全性,如:

    # rpm --import pub_ibm_lotus_notes.gpg # rpm -K ibm_lotus_notes-8.5.i586.rpm 返回信息 : ibm_lotus_notes-8.5.i586.rpm: (sha1) dsa sha1 md5 gpg OK

  • DPKG

    DPKG 不提供原生的 Key 验证机制。可以使用 debsigs 和 debsigs-verify,详情请见:http://man.ddvip.com/os/debiansecuring-howto/ch7.zh-cn.html

  • RPM

    如果底层数据库损坏,RPM 将无法正常使用。此时最常用的解决方法是重构数据库:

    # rm -f /var/lib/rpm/__* ; rpm -vv --rebuilddb

  • RPM

    DPKG 本身不提供底层数据库恢复机制。它的数据库以文件形式保存在 /var/lib/dpkg 目录中。及时地备份这个目录是最好的预防数据库损坏措施。

  • RPM

    可以。使用 -qf 参数 , 如在安装了 Notes8.5 的系统中:

    # rpm -qf /opt/ibm/lotus/notes/notes 返回信息 : Ibm_lotus_notes-8.5-20081211.1920

  • DPKG

    可以。使用— search 参数 , 如在安装了 Notes8.5 的系统中:

    $ dpkg --search /opt/ibm/lotus/notes/notes 返回信息 : ibm-lotus-notes: /opt/ibm/lotus/notes/notes

  • RPM

    可以。可使用 --last 查询。如:

    rpm -qa --last 返回信息 : 系统中所有软件的安装时间。

  • DPKG

    DPKG 不提供直接的查询参数,但是可以用过查询 dpkg 的日志文件实现这个功能。如:

    cat /var/log/dpkg.log | grep "\ install\ "

时间: 2024-11-03 21:35:40

linux--多种包管理工具使用和区别的相关文章

Linux程序包管理工具简介

一.Linux程序包管理器-RPM RPM 的全称为Redhat Package Manager ,是由Redhat 公司提出的,用于管理Linux 下软件包的软件.Linux 安装时,除了几个核心模块以外,其余几乎所有的模块均通过RPM 完成安装.RPM 有五种操作模式,分别为:安装.卸载.升级.查询和验证. 1.RPM 安装操作 命令: rpm -i 需要安装的包文件名 例: rpm -i example.rpm 安装 example.rpm 包 rpm -iv example.rpm 安装

linux基础--包管理工具yum详解

rpm常用命令 安装 -ivh:安装rpm包 --nodeps:忽略依赖关系强制安装 --replacepkg:无论软件包是否已被安装,都强行安装软件包 卸载 -e:卸载rpm包 --nodeps:忽略依赖关系强制卸载 升级 -Uvh:升级软件包--Update -Fvh:只有安装在系统上的包才会升级 --nodeps:忽略依赖关系升级 查询 -q:查看安装包名称 -qa:查看是否安装指定rpm包 -qf:查找指定文件属于哪个RPM软件包 -qi:查看安装包的详细信息 -qc:查看安装包的配置文

Linux的包管理工具介绍

程序包管理: 将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装.卸载.查询.升级和校验等管理操作: 获取程序包的途径 (1)系统发版的光盘或官方的服务器: CentOS镜像: http://mirrors.aliyun.com http://mirrors.sohu.com http://mirrors.163.com (2) 项目官方站点 (3) 第三方组织: Fedora-EPEL 搜索引擎: http://pkgs.org http://rpmfind

linux yum包管理工具

yum 构成简介 C/S架构:Client --> Server yum仓库 base库:通常为系统发行版所提供的程序包 updates库: extra库: epel库: 数据: 各个rpm包: 元数据: 数据文件 包名.版本信息.各包所包含的文件列表.依赖关系.包分组信息 centos5: xml, centos6,7: sqlite createrepo: 制作yum仓库元数据的工具 yum客户端: 指供repo配置文件,指明仓库访问路径及各种属性信息 主配置文件(中心配置文件):/etc/

2018-3-14Linux系统管理(12) Linux程序包管理(2)yum前端管理工具

我们在之前的章节中讲到了Linux的程序包管理的基础与实现,后面也讲述了RPM包的管理命令实现了管理包的功能,主要用的是rpm命令,那么rpm实现程序管理总结如下:    rpm命令实现程序管理:       安装:-ivh, --nodeps, --replacepkgs       卸载:-e, --nodeps, --replacepkgs       升级:-Uvh, -Fvh, --nodeps, --oldpackage       查询:-q, -qa, -qf, -qi, -qd

linux程序包管理之rpm程序包管理器与yum前端工具

这里主要讲以CentOS为例,rpm程序包管理器的相关内容: CentOS的程序包管理器:   1) 程序包的命名规则:        源代码包:            software_name-VERSION.tar.gz            VERSION:major.minor.release                major:主版本号,通常代表重大功能改进的版本分支:                minor:次版本号,通常代表在某个版本的分支中的某个功能发生变化:     

Linux包管理工具(rpm/dpkg,yum/apt,alien)

概括: rpm/yum  redhat dpkg/apt  debian alien 转换 在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本.软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询.RPM 全称为 Redhat Package Manager,最早由 Red Ha

Linux 包管理工具之RPM详解

讲到包管理工具,先来了解下应用程序接口 (API)与应用程序二进制接口 (ABI). API: 编程接口 Application Program Interface 换句话说也就是你编写"应用程序"时候调用的函数之类的东西.对于内核来说,它的"应用程序"有两种:一种是在它之上的,用户空间的真正的应用程序,内核给它们提供的是系统调用这种接口,比如 read(2),write(2):另一种就是内核模块了,它们和内核处于同一层,内核给它们提供的是导出的内核函数,比如 km

nodejs第三天(核心模块与文件模块,核心模块和文件模块引入的区别,从模块外部访问模块内部,使用exports对象,npm包管理工具package.json文件,模块对象属性,将模块定义分类,npm发布流程,安装淘宝镜像,模块的管理)

核心模块与文件模块 ndejs是一个js运行环境,是一个平台.nodejs基于操作系统,封装了一些功能,http,tcp,udp,i/o模块,path,fs,stream等等 通过nodejs内置的模块,他们就称为核心模块.(他们都是nodejs内置的)http,fs,path等 文件模块:只要写一个js文件,每一个文件都是模块 .(自己写的js文件都被称为文件模块) 核心模块和文件模块引入的区别 核心模块有环境变量做调度 文件模块需要给出文件路径 注意:核心模块是nodejs内置的一些功能模块