16、Linux软件管理工具rpm详解

  • 1 Linux软件安装概述

    • 安装程序的方式:
    • 软件包概述
    • RPM
    • RPM的缺点
    • RPM包
    • RPM分包
    • RPM命令的使用
  • rpm 包管理
    • 升级注意项
    • 如何安装rpm软件包
    • 如何卸载rpm软件包
    • 如何升级rpm软件包
    • 如何查询rpm软件包
    • 如何查看与rpm包相关的文件和其他信息
    • 如何校验rpm包
    • RPM的数据库

1 Linux软件安装概述

安装程序的方式:

通用二进制格式:直接解压压缩文件,就可以使用。但一定要注意安装平台。 
软件包管理器:如RPM。 
软件包管理器的前端工具:如YUM。 
源代码编译。

软件包概述

软件包的组成部分:

二进制程序,位于 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 等目录中。 
库文件,位于 /lib, /usr/lib, /usr/local/lib 等目录中。Linux中库文件以 .so(动态链接库)或 .a(静态链接库)作为文件后缀名。 
配置文件,位于 /etc 目录中。 
帮助文件:手册, README, INSTALL (/usr/share/doc/)


在没有软件包管理器之前,安装程序,卸载程序是非常繁杂的。

软件包管理工具的特性:

文件清单文件放置路径提供的功能说明依赖关系

软件包管理器内部有一个数据库,其中记载着程序的基本信息,校验信息,程序路径信息等。

RPM

RPM早期被称为RedHat Package Manager,但由于目前RPM非常流行,且已经成为Linux工业标准。所以RPM现在又被称为RPM is Package Manager。 
RPM管理支持事务机制。增强了程序安装卸载的管理。 
RPM的功能:打包、安装、查询、升级、卸载、校验、数据库管理。

RPM的缺点

由于Linux中的程序大多是小程序。程序与程序之间存在非常复杂的依赖关系。RPM无法解决软件包的依赖关系。

RPM包

用RPM工具可以将二进制程序进行打包,包被称为RPM包。RPM包并不是跨平台的。RedHat的RPM包与SUSE的RPM包不能混用。实际上RedHat的安装,初始软件也都是使用RPM包进行安装的。

源程序的命名规范:name-version.tar.{gz|bz2|xz}

版本号:major.minor.release 
例:bash-4.3.1.tar.xz

RPM包的命名规范:name-version-release.os.arch.rpm

name:程序名称。 
version:程序版本号。 
release(发行号):用于标识RPM包本身的发行号,与源程序的release号无关。 
os:即说明RPM包支持的操作系统版本。如el6(即rhel6)、centos6、el5、suse11。 
arch:主机平台。如i686、x86_64、amd64、ppc(power-pc)、noarch(即不依赖平台) 
例:bash-4.3.2-5.el6.x86_64.rpm

RPM分包

在把二进制文件打包时,将主要功能打入主包。将辅助功能打入分包。分包在需要的情况下安装,若不需要就可以不安装。

Application-VERSION-ARCH.rpm        //主包Application-devel-VERSION-ARCH.rpm  //开发子包Application-utils-VERSION-ARHC.rpm  //其它子包Application-libs-VERSION-ARHC.rpm   //其它子包//包之间:可能存在依赖关系,甚至循环依赖

获取需要的RPM包

互联网中RPM常用站点: 
http://mirrors.sohu.com 
http://rpmfind.net 
http://rpm.pbone.net/

RPM命令的使用

RPM常用选项:

-i:表示安装。-v, -vv, -vvv:表示详细信息。-h:以"#"号显示安装进度。-q:查询指定包名。-e:卸载指定包名。-U:升级软件,若未软件尚未安装,则安装软件。-F:升级软件。-V:对RPM包进行验证。--nodeps:忽略依赖关系。--query:查询指定包名。同-q选项。--hash:同-h。--install:表示安装,同-i选项。--test:仅作测试,不真正执行,可用于测试安装,测试卸载。--replacepkgs:重新安装。替换原有的安装。--force:忽略软件包及文件的冲突。--initdb:新建RPM的数据库。--rebuilddb:重建RPM的数据库。--percent:以百分比的形式输出安装的进度。

RPM包的查询:

rpm -q:查询某一个RPM包是否已安装rpm -qi:查询某一个RPM包的详细信息rpm -ql:列出某RPM包中所包含的文件。rpm -qf:查询某文件是哪个RPM包生成的。rpm -qa:列出当前系统所有已安装的包

安装或卸载时,可能出现如下类似警告信息:warning:/etc/sysconfig/named created as /etc/sysconfig/named.rpmnew 
该警告信息表示:rpm的配置文件被另存为了一份文件。

rpm 包管理

rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。

**CentOS 系统上使用rpm 命令管理程序包: 
安装、卸载、升级、查询、校验、数据库维护**

如何安装rpm软件包

rpm软件包的安装可以使用程序rpm来完成。执行下面的命令:

[[email protected] ~]# rpm -vih /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm

其中lrzsz-0.12.20-27.1.el6.x86_64.rpm是你要安装的rpm包的文件名,一般置于当前目录下。 
安装过程中可能出现下面的警告或者提示:

... conflict with ... 

可能是要安装的包里有一些文件可能会覆盖现有的文件,缺省时这样的情况下是无法正确安装的可以用rpm --force -i强制安装即可

... is needed by ...... is not installed ... 

此包需要的一些软件你没有安装可以用rpm --nodeps -i来忽略此信息,也就是说rpm -i --force --nodeps可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。 
--test: 测试安装,但不真正执行安装;dry run

[root@localhost ~]# rpm -vih /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm --testwarning: /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEYPreparing...                ########################################### [100%]

如何卸载rpm软件包

使用命令rpm -e包名,包名可以包含版本号等信息,但是不可以有后缀.rpm,比如卸载软件包lrzsz-0.12.20,可以使用下列格式:

[root@localhost ~]# rpm -e lrzsz-0.12.20[root@localhost ~]# rpm -e lrzsz

有时会出现一些错误或者警告:

... is needed by ...

这说明这个软件被其他软件需要,不能随便卸载,可以用rpm -e --nodeps强制卸载

如何升级rpm软件包

升级:

rpm {-U|--upgrade} [install-options]  PACKAGE_FILE ...rpm {-F|--freshen} [install-options]  PACKAGE_FILE ...

upgrade :安装有旧版程序包,则“升级” 
如果不存在旧版程序包,则“安装” 
freshen :安装有旧版程序包,则“升级” 
如果不存在旧版程序包,则不执行升级操作

rpm -Uvh PACKAGE_FILE ...rpm -Fvh PACKAGE_FILE ...

--oldpackage :降级 
--force: 强行升级

升级注意项

注意: 
(1) 不要对内核做升级操作;Linux 支持多内核版本并存,因此,对直接安装新版本内核 
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew) 后保留

如何查询rpm软件包

不安装但是获取rpm包中的文件

[[email protected] ~]# rpm2cpio /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm |cpio -vi[[email protected] ~]# rpm2cpio /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm |cpio -vidm

如何查看与rpm包相关的文件和其他信息

-a: 所有包 
-f: 查看指定的文件由哪个程序包安装生成 
-p rpmfile :针对尚未安装的程序包文件做查询操作; 
--whatprovides CAPABILITY :查询指定的 CAPABILITY由哪个包所提供 
--whatrequires CAPABILITY :查询指定的 CAPABILITY 被哪个包所依赖 
下面所有的例子都假设使用软件包mysql-5.1.73

1、我的系统中安装了那些rpm软件包。

rpm -qa 讲列出所有安装过的包

如果要查找所有安装过的包含某个字符串mysql的软件包

[[email protected] ~]# rpm -qa | grep "mysql"mysql-5.1.73-7.el6.x86_64mysql-libs-5.1.73-7.el6.x86_64

2、如何获得某个软件包的文件全名。

[[email protected] ~]# rpm -q mysqlmysql-5.1.73-7.el6.x86_64

可以获得系统中安装的mysql软件包全名,从中可以获得当前软件包的版本等信息。这个例子中可以得到信息mysql-3.23.54a-11

3、一个rpm包中的文件安装到那里去了?

[[email protected] ~]# rpm -ql mysql-5.1.73-7.el6.x86_64

注意这里的是不包括.rpm后缀的软件包的名称,也就是说只能用mysql或者mysql-3.23.54a11而不是mysql-3.23.54a-11.rpm。如果只是想知道可执行程序放到那里去了,也可以which,

[root@localhost ~]# which mysql/usr/bin/mysql

4、一个rpm包中包含那些文件。

一个没有安装过的软件包,使用rpm -qlp **.rpm 
一个已经安装过的软件包,还可以使用rpm -ql **.rpm

[[email protected] ~]# rpm -qlp /mnt/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm

5、如何获取关于一个软件包的版本,用途等相关信息?

一个没有安装过的软件包,使用rpm -qip **.rpm 
一个已经安装过的软件包,还可以使用rpm -qi **.rpm

[[email protected] ~]# rpm -qip /mnt/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm warning: /mnt/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEYName        : httpd                        Relocations: (not relocatable)Version     : 2.2.15                            Vendor: CentOSRelease     : 53.el6.centos                 Build Date: Thu 12 May 2016 03:29:17 AM CSTInstall Date: (not installed)               Build Host: worker1.bsys.centos.orgGroup       : System Environment/Daemons    Source RPM: httpd-2.2.15-53.el6.centos.src.rpmSize        : 3133738                          License: ASL 2.0Signature   : RSA/SHA1, Thu 12 May 2016 06:52:29 PM CST, Key ID 0946fca2c105b9dePackager    : CentOS BuildSystem <http://bugs.centos.org>URL         : http://httpd.apache.org/Summary     : Apache HTTP ServerDescription :The Apache HTTP Server is a powerful, efficient, and extensibleweb server.

6、某个程序是哪个软件包安装的,或者哪个软件包包含这个程序。

rpm -qf  `which 程序名` #返回软件包的全名 rpm -qif `which 程序名` #返回软件包的有关信息 rpm -qlf `which 程序名` #返回软件包的文件列表 

注意,这里不是引号,而是`,就是键盘左上角的那个键。也可以使用rpm -qilf,同时输出软件包信息和文件列表。

7、某个文件是哪个软件包安装的,或者哪个软件包包含这个文件。 注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以用于可执行程序,也可以用于普通的任何文件。前提是知道这个文件名。首先获得这个程序的完整路径,可以用whereis或者which,然后使用rpm -qf例如:

[root@localhost ~]# whereis lsls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz[root@localhost ~]# rpm -qf /bin/lscoreutils-8.4-43.el6.x86_64

如何校验rpm包

包来源合法性验正及完整性验正:

完整性验正:SHA256 
来源合法性验正:RSA



公钥加密:

对称加密:加密、解密使用同一密钥; 
非对称加密:密钥是成对儿的 
public key: 公钥,公开所有人 
secret key: 私钥,

//导入所需要公钥[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6[root@localhost ~]# rpm -vih /mnt/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm Preparing...                ########################################### [100%]    1:vsftpd                 ########################################### [100%]

命令格式:rpm -V 包名

对已经安装的软件,进行将要。若无输出,则表示已安装的软件没有被修改。若软件被修改,则会输出信关信息。具体请查看RPM相关手册。

RPM的数据库

数据库文件位于:/var/lib/rpm

[[email protected] ~]# cd /var/lib/rpm/[[email protected] rpm]# lsBasenames     __db.002  Dirnames     Installtid    Packages        Pubkeys         Sha1headerConflictname  __db.003  Filedigests  Name          Providename     Requirename     Sigmd5__db.001      __db.004  Group        Obsoletename  Provideversion  Requireversion  Triggername//若库损坏,很多RPM的查询将无法使用。

对损坏的数据库,可以进行数据库重建:

rpm --initdb    #新建数据库rpm --rebuilddb  #重建数据库

注意:重建数据库时间会比较长。

时间: 2024-12-26 11:55:13

16、Linux软件管理工具rpm详解的相关文章

17、Linux软件包管理工具yum详解

yum介绍 yum客户端的使用 配置文件项作说明: 案例repo配置文件. 创建yum源命令(yum-config-manager) yum list相关命令 yum安装 yum更新和升级 yum查找和显示 yum删除程序 查看仓库 实战演练本地yum仓库(光盘) YUM内置变量 创建YUM仓库(http) yum介绍 yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安

Linux软件管理——yum命令详解

1 yum install <softwarename> #安装指定软件 2 yum remove <softwarename> #卸载指定软件 3 yum update <softwarename> #升级指定软件 4 yum search <keyword> #查询含有keyword的所有rpm软件包的描述 5 yum list (all/installed/recent/updates) #列出全部,安装过的,最近的软件 6 yum info <

LINUX&amp;nbsp;软件安装(rpm详解)

转自:http://www.51testing.com/?uid-227476-action-viewspace-itemid-99651 在使用Linux系统的过程中,软件包的安装是避免不了的,在Linux下,软件安装程序的种类很多,安装方法也各式各样,(舒适性自然比不上windows :-))不过我们常见的软件包有两种: 1)含有软件的源代码的压缩包,解压后需要手动编译.这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz). ./configure (配置) make (编

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

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

妈妈再也不用担心我为磁盘管理烦恼了——Linux磁盘管理工具LVM2详解释

一.LVM简介 LVM2(LogicalVolume Manage,Version2):它是Linux环境下对磁盘分区进行管理的一种机制,将一个或多个底层块设备组织成一个逻辑设备.通过LVM管理员可以轻松管理磁盘分区,使用LVM与传统的分区方法相比有很多的优势,如:容量的分配更加灵活.逻辑卷的扩展和缩减更加方便.使用snapshot(快照)来备份数据也非常方便.通过本文你可以快速了解LVM2的使用方法. 二.LVM2使用详解   (该图片来源于网络) PV:Physical Volume 物理卷

linux软件管理工具-yum

Linux各发行版使用的软件包管理命令,如apt-get ,dpkg, rpm ,yum,emerge等等.本文对yum工具进行研究整理. 1.yum简介 1.1 What's yum yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器. 它可以系统管理员交互和自动化地管理RPM软件包, 能够从指定的服务器自动下载RPM包并且安装, 可以自动处理依赖性关系,并且一次安装所有依赖的软体包. 1.2 yum的基本目录 YUM配置文件          /etc/yum.c

Linux磁盘管理之LVM详解

LVM逻辑卷管理 一.LVM简介 二.LVM基本术语 三.LVM相关PV,VG,LV相关命令的使用 四.安装LVM 五.创建和管理LVM 1.创建PV 2.创建VG 3.创建LV 4 .LV的格式化及挂载 六.快照卷snapshot的使用介绍 ================================================================================== 一.LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写

linux软件管理器之——rpm

rpm的全名为"RedHat Package Manager",是一种软件管理机制.顾名思义,这个机制最早是有RedHat公司开发出来的,后来因为实在很好用,包括fedora,centos,suse等知名厂商也使用了这个机制来作为软件安装的管理方式.rpm是以一种数据库记录的方式来将你所需要的软件安装到你的linux系统的一套管理机制. rpm包的命名格式     rpm的命名格式为:name-version-relase.arch.rpm version: major.minor.r

Php学习之依赖管理工具composer详解

本文和大家分享的主要是php中依赖管理工具composer相关用法,一起来看看吧,希望对大家学习php有所帮助. 什么是依赖管理工具 当你引用某个第三方库时,如果这个库使用到了另外一个或若干个第三方库,再或许另外一个第三方库又有其他的依赖,这样的话手动维护你需要下载安装N个包.用来解决由此产生的问题的工具就叫做依赖管理工具. 有哪些常见的依赖管理工具 Java的maven.gradle,NodeJs的npm,IOS的CocoaPods,PHP的composer 大部分编程语言都会有自己的常用依赖