rpm命令详解

程序包的升级:

升级rpm包:

格式:rpm{-U|--upgrade} [install-options] PACKAGE_FILE ...

选项:

-U:表示升级或安装

-F:仅是升级

升级来讲额外的常用选项:

--oldpackage:降级;

(为什么要降级?

当一个程序包升级之后发现各种不兼容,发现各种不好用,因此这时我们就进行回滚操作。将程序在还原至原来的版本。)

--force:强制升级;

(为什么要强制升级?

有些时候我们升级到较新的版本时,因为依赖关系的问题,很有可能存在这样的现状,老版本的程序包被其他的程序包所依赖,但是新的程序包不能满足此前的依赖关系,因为他依赖的功能较老程序有,新版本中程序中没有了,给换了,所以现在升级会出现冲突,甚至会报错,因为升级之后可能会影响到依赖的完整性,这时候我们如果要想忽略这个历依赖关系强制升级,那么我们就需要强制升级。)

升级rpm软件包的真正的用法:

rpm  -Uvh  PACKAGE_FILE......  //后面的省略号表示可以同时安装多个包

rpm  -Fvh  [PACKAGE_FILE......

注意:上面的两个选项-U和-F之间的区别就是,-U是当程序包没有则执行安装操作,有则执行升级操作;而选项-F是原来的程序包有就执行升级,没有则不进行任何操作。

注意:

(1)不要对内核进行升级操作;

(比方说,就想内核4.0的版本,在升级之前必须要重启系统,所以我们一旦对内核进行升级操作,意味着我们就需要重启系统,才能启用新内核,或者是我们即便是现在不重启,那么下一次重启也会启用新内核,万一新内核与我们的版本不兼容怎么办?是不是启动不了了?这么这个时候我们应该怎样办呢?我们就需要进入救援模式了。所以不建议对内核进行升级操作。那么不升级,我有希望测试新版本怎么办?

那么有一个办法,linux支持多内核版本并存,因此我们打算升级内核的时候,我们可以直接进行安装新内核。)

(2)如果某原程序包的配置文件安装后曾被修改过,那么新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名后提供保存,重命名的格式:FILENAME.rpmnew这个表示:原来的文件名字后面跟上“.rpmnew”

升级程序包的演示操作:(在centos7上)

(1)我们去阿里云的镜像网站上下载一个程序包,我们就升级上次安装的zsh他的版本是zsh-4.3.11-4.el6.centos.2.x86_64.rpm,查看现在安装的程序版本,我们可以在命令行中使用命令“rpm  -ql  程序前一个字符”然后tab键补全,我们就能查看我们安装的某程序的版本。

我们进入“mirrors.aliyun.com”这个网站,然后进入下面的目录:

http://mirrors.aliyun.com/centos/7.2.1511/updates/x86_64/Packages/找到zsh的最新版本进行下载。

(2)我们通过Xshell这个远程连接工具将这个程序包复制到linux系统上。

我们将这个程序包复制到root用户的家目录。

第二当我们的系统是linux系统,我们在将“zsh”程序下载后,然后如果是需要将这个程序从一个主机发送到另一个主机上进行安装,那么我们需要使用Xshell工具,在命令行中执行一下命令:

[[email protected] ~]# scp  /root/zsh-5.0.2-14.el7_2.2.x86_64.rpm  192.168.178.131:/root/

The authenticity of host ‘192.168.178.131(192.168.178.131)‘ can‘t be established.

RSA key fingerprint is64:8c:31:ff:e7:e2:58:31:1e:b7:b6:f2:75:fc:e0:8a.

Are you sure you want to continueconnecting (yes/no)? y

Please type ‘yes‘ or ‘no‘: yes

Warning: Permanently added‘192.168.178.131‘ (RSA) to the list of known hosts.

[email protected]‘s password: 需要输入对方的主机的密码

zsh-5.0.2-14.el7_2.2.x86_64.rpm                     100% 2434KB   2.4MB/s  00:00

[[email protected] ~]#

如果是我们将这个程序包拷贝到对方主机上的某个普通用户的家目录下:则对方主机IP前面需要加上这个普通用户的名称,并用@连接,复制普通用户的家目录,我们要注意是/home/USERNAME

[[email protected] ~]# scp zsh-5.0.2-14.el7_2.2.x86_64.rpm [email protected]:/home/dong

[email protected]‘s password:

zsh-5.0.2-14.el7_2.2.x86_64.rpm                     100% 2434KB   2.4MB/s  00:00

[[email protected] ~]#

(3)升级zsh

[[email protected] ~]# rpm -Uvh zsh-5.0.2-14.el7_2.2.x86_64.rpm

警告:zsh-5.0.2-14.el7_2.2.x86_64.rpm: 头V3 RSA/SHA256Signature, 密钥 ID f4a80eb5: NOKEY

准备中...                         ################################# [100%]

正在升级/安装...

1:zsh-5.0.2-14.el7_2.2            ################################# [ 50%]

正在清理/删除...

2:zsh-5.0.2-14.el7                ################################# [100%]

[[email protected] ~]# rpm -q zsh

zsh-5.0.2-14.el7_2.2.x86_64

[[email protected] ~]#

卸载rpm包:

格式:rpm{-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test]PACKAGE_NAME ...

大多数情况下选项“-e”都能完成卸载操作。

注意:我们在安装,升级和查询的时候后面是PACKAGE_FILE,这是时安装程序包的路径;但是卸载的时候是PACKAGE_NAME这是代表程序包的名称。

选项:

--allmatches:表示卸载所有匹配指定名称的程序包的各版本;

--nodeps:忽略依赖关系

--test:测试卸载,dry run干跑模式;

查询:是一个非常重要的功能

格式:

rpm {-q|--query} [select-options][query-options]

rpm  -q 后面跟上[select-options]或[query-options]的子选项

有两类选项:

注意下面的各个选项都要与“-q”选项结合使用

(1)[select-options]的常用选项:

PACKAGE_NAME:查询时,直接指明程序包名。这表示查询指定的程                                                                            序包是否已经安装及其版本。

-a,--all:查询所有已经安装过的包,这是就不需要给包了。

(当我们想查询一个包是否已经安装,但是我们只记得其中                                                                 的几个字符,那么这个“-a”选项就特别有用,我们就可以                                                         结合“grep”命令来进行查找。)

-f,--file后面跟上一个文件路径:这表示查询指定文件是由哪个程序                                                                                                                    包生成的。

-g,--group:表示查询指定的包组中,包含了那些程序包。

-p,--package:表示对未安装的程序包进行查询操作,一般查询什么,                                                                           他需要跟 [query-options][select-options]中的选项结合                                                                     起来使用。

--whatprovidesCAPABILITY:查询指定的功能,是由哪个程序包安装。

--whatrequiresCAPABILITY:查询指定的功能,被谁所依赖。

(2)[query-options]常用选项:

--changelog:查询rpm包的changelog;

-l,--list:程序安装生成的所有文件列表;

-i.info:程序包相关的信息,版本号,大小,所属的包组,等;

-c, --configfiles:查询指定的程序包配置文件;

-d, --docfiles:查询指定的程序包提供的文档;

--provides:列出指定的程序包提供的所有的CAPABILITY(功能)

-R, --requires:表示查询指定程序包的依赖关系;

--scripts:查询指定的程序包自带的脚本片段;

用法:

-qi  PACKAGE, -qf FILE, -qc  PACKAGE,  -ql PACKAGE,  -qd  PACKAGE.

-qpi  PACKAGE_FILE, -qpl  PACAGE_FILE,  -qpc PACKAGE_FILE,.......

演示:“--provides”和“whatprovides”选项的用法:

[[email protected] ~]# rpm -q --provides bash

/bin/bash

/bin/sh

bash = 4.2.46-19.el7

bash(x86-64) = 4.2.46-19.el7

config(bash) = 4.2.46-19.el7

[[email protected] ~]# rpm -q --whatprovides bash

bash-4.2.46-19.el7.x86_64

[[email protected] ~]# rpm -q --whatprovides ‘config(bash)‘                 //因为括号在shell中有特殊                                                                                                                         的意义,所以使用单引号引起来                                                                                                                         表示强引用。

bash-4.2.46-19.el7.x86_64

[[email protected] ~]#

校验:

格式:

rpm{-V|--verify} [select-options] [verify-options]

执行校验操作时,他们表现的意义是什么?

--verify test:

S file Size differs                   //表示文件大小发生改变

M Mode differs (includes permissions and file type)                   //表示文件权限发生改变

5 digest (formerly MD5 sum) differs          //表示MD5码发生了改变

D Device major/minor number mismatch                   //表示主次设备号不匹配

L readLink(2) path mismatch

U User ownership differs            //表示属主改了

G Group ownership differs                  //表示属组改了

T mTime differs          //表示最近的时间戳发生改变

P caPabilities differ             //表示开发功能改了。

[[email protected] ~]# rpm -ivh zsh-5.0.2-14.el7_2.2.x86_64.rpm

警告:zsh-5.0.2-14.el7_2.2.x86_64.rpm: 头V3 RSA/SHA256Signature, 密钥 ID f4a80eb5: NOKEY

准备中...                         ################################# [100%]

正在升级/安装...

1:zsh-5.0.2-14.el7_2.2            ################################# [100%]

[[email protected] ~]# rpm -V zsh                  //校验时我们用大写“-V”选项,校验没有任何信息输                                                                             出,说明我们这个程序包安装成功

[[email protected] ~]#

[[email protected] ~]# rpm -ql zsh                 //查看zsh安装了多少个文件

[[email protected] ~]# file /usr/share/zsh/5.0.2/functions/zfparams  //随便找一个文件看看是什                                                                                                                               么格式

/usr/share/zsh/5.0.2/functions/zfparams: ASCII text

[[email protected] ~]# vim /usr/share/zsh/5.0.2/functions/zfparams  //编辑这个文件,然后在里                                                                                                                                      面仅仅是加一个#

[[email protected] ~]# rpm -V zsh                  //再次进行校验,发现就报错了

S.5....T.   /usr/share/zsh/5.0.2/functions/zfparams  // S.5....T.  这里面的每一个点表示这一个属性,点表示这个属性没有被修改过,如果这个属性被更改了就表示这个属性的特性,或者那个字符,S就表示大小的意思,S出现了就表示大小发生变化了,没出现就表示大小没有发生变化,比方说我们加了一个字符,就表示大小发生变化了,如果是我们仅仅是改了一个字符呢,就可能是大小没有改变,但是任何信息改了,那么他的MD5码就发生改变了,这个5就表示数据指纹信息,

(通过上面的演示例子我们发现,校验的作用:当我们安装一个程序包时,我们发现某个文件被修改了,但是我们自己确认,我们从来没有改过,其实我们到现在为止我们应该知道,在linux中有一个重要的法则,没有消息就是最好的消息。他没有告诉我们有任何错,这表示我们再安装一些程序是成功了,但如果不是加“-v小写”出现的信息,我就要看一下,通常必须引起注意,)

包来源合法性验证和完整性验证:

来源合法性验证:

完整性验证:

获取并导入信任 的包制作者的秘钥:

(其实这个公钥文件我们也可以去目录“/etc/pki/rpm-gpg”下找,因为这个在我们安装安装系统后,会自动将秘钥复制到这个目录下,)

对于cenots发行版来讲:导入文件:

rpm  --import /etc/pki/rpm-gpg/ RPM-GPG-KEY-CentOS-7

验证:

(1)安装次组织签名的程序时,会自动执行验证:

(2)手动验证:rpm  -K  PACKAGE_FILE

所有的数字签名都是用自己的私钥去加密自己程序包对应的数字特征码。

数字签名可以实现两个功能:

(1)来源合法性进行验证

(2)包的完整性进行验证

我们也发现,单向加密和私钥加密并不是对文件进行保密。

(我们现在拿到一个程序包,那么怎样去验证这个程序包是合法的?

首先这个程序包的制作者首先要信任他,这是第一点,那么这个信任的机构做了程序包以后,要在这个程序包上加盖自己的印签,在程序上这就叫数字签名,)

数字签名:

(那么数字签名是怎样实现的呢?

我们之前讲过一个加密方式叫非对称加密,就是他的秘钥是成对出现,一个叫公钥一个叫私钥,公钥加密的只能使用与之配对的私钥解密,反之亦然,那么一个组织或个人在制作一个程序包以后,用自己的私钥去签名,放在这个包后面,公钥就是公开的,所以我们拿着这个公钥能够解密出来,就可以说这就是,那我们加密的是什么数据呢?我们不能加密整个文件,这样人们就看不见这个文件了,这里纯粹就是签名,我们加密的是程序包的校验码,什么是校验码?校验码就是我们先利用单向加密将这个程序包的特征码算出来,我们知道特征码是固定的长度,不管我们的包有多大,特征码都那么长,

所以包的制作者先用单向加密将包的特征码计算出来,定长输出,然后再用自己的私钥去加密这个特征码,这就叫数字签名,并把这个特征码附加在包后面,

那谁能解密?拿到公钥去解密,所以这里的私钥不是处于加密目的的,而是验证目的的,用公钥加密是做来源身份验证的,那公钥解密出来的数据有用吗?

当然有用,我们可以用同样的算法去计算这个文件的特征码,然后跟这个解密出来的特征码进行比对,一样就表示包没有被别人改过。

这里其实我们要明白,当我们只做的程序包,用单向加密算出特征码后,然后再用我们的私钥要将这个特征码进行加密,那么第三者是可以使用我们的公钥将我们的加密的特征码进行解密的,第三者可以更改我们的程序包,并且他也可以更改我们的特征码,但是为什么一般不会改呢,因为一旦改了特征码,他在加密只能使用他自己的私钥进行加密,那么我们的客户用我们的公钥去解密时,就发现这个包不是我们发的,所以就不使用我们的包了,所以很简单一般特征码是不被改变的。)

合法获得公钥其实是最重要的一步:

其实这一步很难,世界上没有万无一失的安全性,互联网上其实是通过CA来实现的,CA叫签证机构,或者叫第三方证书颁发机构,我们现在秩序知道我们需要假设通过一个合法的途径来拿到公钥。至于怎样拿到在后面细讲。

完整性验证:

如果只是对rpm包进行验证的话,我们只需将rpm包的公钥导入进去即可,对于光盘上rpm包的公钥就在光盘上,我们切换到光盘的挂载目录下,ls命令会看到一个文件“  RPM-GPG-KEY-CentOS-7”

那么只需将这个文件导入rpm 包后,以后在安装程序包时就不会出现应该说“NOKEY”了

演示操作:

[[email protected] ~]# rpm -ivh zsh-5.0.2-14.el7_2.2.x86_64.rpm

警告:zsh-5.0.2-14.el7_2.2.x86_64.rpm: 头V3 RSA/SHA256Signature, 密钥 ID f4a80eb5: NOKEY

准备中...                         ################################# [100%]

正在升级/安装...

1:zsh-5.0.2-14.el7_2.2             #################################[100%]

[[email protected] ~]# rpm -e zsh

[[email protected] ~]# rpm --import /media/RPM-GPG-KEY-CentOS-7  //导入用“--import”选项

[[email protected] ~]# rpm -ivh zsh-5.0.2-14.el7_2.2.x86_64.rpm   //再次安装就不会出现NOKEY

准备中...                          #################################[100%]

正在升级/安装...

1:zsh-5.0.2-14.el7_2.2            ################################# [100%]

[[email protected] ~]#

上面是自动进行校验操作,下面我们也可以进行手动校验操作:

[[email protected] ~]# rpm -K zsh-5.0.2-14.el7_2.2.x86_64.rpm   //用选项大写“-K”

zsh-5.0.2-14.el7_2.2.x86_64.rpm: rsa sha1(md5) pgp md5 确定  //pgp:来源合法性;MD5包                                                                                                                           完整性认证之前要将公钥                                                                                                                              导入

[[email protected] ~]#

数据库重建:

这个数据库是不能随便破坏或者手动进行测试的。

我们知道使用命令“rpm  -qa”会显示我们安装了那些程序包,或者使用“rpm  -ql  程序名”会显示这个程序安装时产生的文件,那么我们就想,他是怎样知道我们的程序安装了那些文件,这个rpm正是通过本地的记录的一个数据库来定义的。

对于rpm这个命令来讲他的数据库就是“/var/lib/rpm”

rpm管理器数据库路径:/rpm/lib/rpm

查询操作:通过此处的数据库进行。

获取帮助:

CentOS6:man  rpm

CentOS7:man  rpmdb

以CentOS7为例:

rpm {--initdb|--rebuilddb} [-v] [--dbpathDIRECTORY] [--root DIRECTORY]

--initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当前                                          有时不执行任何操作;

--rebuilddb:重新构建,通过读取当前系统上所有已经安装的程序包进行重                                                 新创建;

--dbpath DIRECTORY:表示地址创建数据库的路径

演示在指定的路径下创建rpm数据库

[[email protected] ~]# mkdir /tmp/rpm

[[email protected] ~]# rpm --initdb --dbpath=/tmp/rpm

[[email protected] ~]# ls /tmp/rpm/

Basenames     __db.002 Group       Obsoletename  Requirename Triggername

Conflictname  __db.003 Installtid  Packages      Sha1header

__db.001      Dirnames Name        Providename   Sigmd5

[[email protected] ~]#

[[email protected] ~]# rpm --rebuilddb --dbpath=/tmp/rpm

[[email protected] ~]# ls /tmp/rpm/              //重建后我们发现__db.002,__db.003,__db.001这些                                                                                文件没有了,其实这些文件是进行事物操作的。

Basenames     Group      Obsoletename  Requirename  Triggername

Conflictname  Installtid Packages      Sha1header

Dirnames      Name        Providename   Sigmd5

[[email protected] ~]#

博客作业:rpm包管理功能全解;

时间: 2024-08-03 05:10:15

rpm命令详解的相关文章

RPM命令详解(安装、升级、卸载)

RPM命令详解(安装.升级.卸载) rpm 常用命令1.安装一个包# rpm -ivh 2.升级一个包# rpm -Uvh 3.卸载一个包# rpm -e 4.安装参数--force 即使覆盖属于其它包的文件也强迫安装--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装. 5.查询一个包是否被安装# rpm -q < rpm package name> 6.得到被安装的包的信息# rpm -qi < rpm package name> 7.列出该包中有哪些文

rpm命令详解(2)

RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种.二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译.安装.源代码包经常以src.rpm作为后缀名. 常用命令组合: -ivh:安装显示安装进度--install--verbose--hash -Uvh:升级软件包--Update: -qpl:列出RPM软件包内的文件信息[Query P

rpm包及rpm 命令详解

一.软件运行环境 API: Application Programming Interface 国际标准 POSIX: Portable OS 执行流程: 程序源代码 –> 预处理 –> 编译 –> 汇编 –> 链接 静态编译:将编译完成的程序代码以及所依赖的库文件一起打包使用 共享(动态)编译:使用独立的外置的库文件,与系统中的其他程序共享库,linux 中以 .so结尾,译为共享对象 ABI: Application Binary Interface 应用程序二进制接口 (Wi

rpm 命令详解

rpm命令是RPM软件包的管理工具. RPM有多种基本的模式:它们是安装.查询.验证.删除等. 安装模式:rpm –i 查询模式:rpm -q 验证模式:rpm –V或 -verify 删除模式:rpm –e 1.安装一个包 rpm -ivh 2.升级一个包 rpm -Uvh 3.移走一个包 rpm -e 4.安装参数 --force 即使覆盖属于其它包的文件也强迫安装 --nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装. rpm -ivh *.rpm --nodeps

select、bash函数初识及rpm命令详解

8月18号,主要学习内容: 一.循环的特殊用法及select 二.bash函数基础 三.rpm命令 一.循环的特殊用法及select 1)while循环的特殊用法(遍历文件的每一行):  while read line; do 循环体 done < /PATH/FROM/SOMEFILE 依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line 2)((-))格式 可以用于算术运算 双小括号方法也可以使bash Shell实现C语言风格的变量操作 #I=10 #((

RPM及其rpm命令详解

前言:       Linux原本只是一个kernel,但为什么我们今天用的linux系统,会有如此强大的功能呢?这是因为在kernel的基础上,发行商给我们安装了很多软件包,使linux系统具有了丰富的功能.      Linux界软件安装的两大主流是:RPM和dpkg.dpkg(Debian Packager)最早是由Debian Linux社区开发,RPM(Redhat Package Manager)是由redhat公司开发,而包括Fedora,CentOS,Suse等大的发行商都使用R

yum和rpm命令详解

rpm,全称RPM Package Manager,是RedHat发布的,针对特定硬件,已经编译好的软件包.安装之后就可以使用,不需要自行编译,以及之前对软件和硬件的检测,目录的配置等动作. yum,全称Yellowdog Updater Modified,是RedHat推出的解决安装.卸载和依赖关系的命令仓库.通过数据库管理所有rpm安装包. 这里,我们只是详细的介绍这两个命令,以及其参数. yum -y install 包名(支持*) :自动选择y,全自动yum install 包名(支持*

linux rpm命令详解

RPM 大全 RPM 有五种基本的操作方式(不包括创建 软件 包): 安装, 卸载, 升级, 查询,和验证. 下面我们就来逐一的讲解吧. 一. 安装RPM包 RPM 软件 包通常具有类似foo-1.0-1.i386.rpm 的文件名. 其中包括 软件 包的名称(foo),版本号(1.0),发行号(1), 和 硬件平台(i386). 安装一个 软件 包只需简单的键入以下命令: $ rpm -ivh foo-1.0-1.i386.rpm foo ###########################

Linux下的JDK安装rpm命令详解

1. 安装程序 #rpm -ivh jdk-7u79-linux-x64.rpm 出现安装协议等,按接受即可. 2.设置环境变量. #vi /etc/profile JAVA_HOME=/usr/java/jdk1.7.0_79PATH=$JAVA_HOME/bin:$PATHCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport JAVA_HOMEexport PATHexport CLASSPATH 3.环境变量生效