软件包管理RPM

RPM 

程序包管理器,可实现对程序包的安装、更新、查询和卸载操作,应用广泛

下面通过实际操作来更好的理解RPM的功能

安装程序:

-i  //安装数据包参数

-v  //显示安装过程

-vv  //显示更详细的安装信息

-h  //配合-v更加直观的显示程序安装过程,但是在程序卸载时不能使用

[[email protected] ~]#rpm -ivh /media/CentOS_6.9_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:tree                   ########################################### [100%]  //显示安装进度条

rpm要安装程序包必须得指定程序包的具体路径,否则无法安装

rpm包管理器有一个非常重要的数据库,/var/lib/rpm

程序包名称及版本

包之间的依赖关系

包安装后的文件路径及校验码信息

这些信息都存储在rpm的数据库中,一旦数据库被破坏,包管理就会受到影响,

不仅rpm不能用,yum也不能用

如果我们仅仅是想测试下某个程序包能不能安装,可以使用以下参数

--test  //测试安装,并不真正安装

[[email protected] Packages]#rpm -ivh --test tree-1.5.3-3.el6.x86_64.rpm 
warning: tree-1.5.3-3.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
[[email protected] Packages]#echo $?  //通过$?来验证上述命令是否执行成功,0表示成功,非0表示失败
0
[[email protected] Packages]#

测试安装完成,但是有一个警告,程序包缺少密钥

其实每个程序包安装时RPM都会对其进行身份验证,如果没有导入密钥,RPM认为数据包无法验证就会弹出告警信息。不过这样也不影响安装,如果想要取消这个告警,可以尝试下述方法

[[email protected] ~]#cd /media/CentOS_6.9_Final/
[[email protected] CentOS_6.9_Final]#rpm --import RPM-GPG-KEY-CentOS-6

因为我是挂了光盘,所以进入光盘所在的目录下,找到RPM-GPG-KEY-CentOS-6这个密钥文件,然后导入即可

导入完成之后,再安装程序就不会提示warn警告,我是在centos6下操作,如果是centos7就要进入/run/media/root/CentOS\ 7\ x86_64/这个目录下

当然还有一种自欺欺人的方法,就是不导入密钥,使用参数--nosignature忽略这个警告

因为我使用的是centos6的光盘,GPG-KEY密钥文件也是这个光盘上的,也就是说,这个光盘的rpm程序包经过GPG这个密钥文件再加上hash算法计算,会得到签名信息,也就是一串摘要信息,然后,通过这些摘要信息与rpm数据库对应的校验码进行比较,如果二者一致,说明此数据包信息完整,如果不一致说明此数据包有问题。

所以,如果我从centos7上拷贝一份tree的程序包,那用centos6的密钥文件进行计算,其结果肯定是跟数据库不一致的

已经在centos6上导入了GPG-KEY文件

[[email protected] ~]#rpm -K tree-1.6.0-10.el7.x86_64.rpm   //从centos7拷贝的程序包
tree-1.6.0-10.el7.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#f4a80eb5) 
[[email protected] ~]#rpm -K /misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm 
/misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

-K  验证程序包的完整性

查询程序信息:

-q  是rpm查询必备的参数,需要与其他参数配合使用

-a  查看所有已经安装过的程序

-c  查看程序的配置文件

[[email protected] ~]#rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc

-f  查询指定文件由哪个程序包安装

[[email protected] ~]#rpm -qf /bin/ls
coreutils-8.4-46.el6.x86_64

-l  列出程序包安装后所生成的所有文件

-p  针对还未安装的程序包做查询操作

[[email protected] Packages]#rpm -qpl tree-1.5.3-3.el6.x86_64.rpm   //前提已经把tree卸载了
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz

--whatprovides  指定功能由哪些程序包提供

--whatrequires  指定功能被哪些程序包所依赖

[[email protected] Packages]#rpm -q --whatprovides bash
bash-4.1.2-48.el6.x86_64
[[email protected] Packages]#rpm -q --whatrequires bash
mysql-5.1.73-8.el6_8.x86_64
initscripts-9.03.58-1.el6.centos.x86_64
dracut-004-409.el6_8.2.noarch
rsyslog-5.8.10-10.el6_6.x86_64
cronie-1.4.4-16.el6_8.2.x86_64
autofs-5.0.5-132.el6.x86_64
lvm2-2.02.143-12.el6.x86_64

这两个参数记起来有点费劲,翻译一下就很容记忆了,这两个参数用来查找程序包

--whatprovides  什么程序包提供指定功能,打印的就是提供此功能的程序包

--whatrequires  什么程序包需要指定功能,打印的就是依赖此功能的程序包

-i  查询程序信息,非常非常详细

[[email protected] Packages]#rpm -qi gcc
Name        : gcc                          Relocations: (not relocatable)
Version     : 4.4.7                             Vendor: CentOS
Release     : 18.el6                        Build Date: Wed 22 Mar 2017 12:27:30 AM CST
Install Date: Fri 04 Aug 2017 10:16:33 PM CST      Build Host: c1bm.rdu2.centos.org
Group       : Development/Languages         Source RPM: gcc-4.4.7-18.el6.src.rpm
Size        : 19497604                         License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions
Signature   : RSA/SHA1, Thu 23 Mar 2017 11:01:10 PM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://gcc.gnu.org
Summary     : Various compilers (C, C++, Objective-C, Java, ...)
Description :
The gcc package contains the GNU Compiler Collection version 4.4.
You‘ll need this package in order to compile C code.

卸载程序:

-e  卸载程序

[[email protected] ~]#rpm -e gcc 
error: Failed dependencies:
        gcc is needed by (installed) systemtap-devel-2.9-7.el6.x86_64
        gcc = 4.4.7-18.el6 is needed by (installed) gcc-c++-4.4.7-18.el6.x86_64
        gcc = 4.4.7-18.el6 is needed by (installed) gcc-gfortran-4.4.7-18.el6.x86_64
        gcc = 4.4.4 is needed by (installed) libtool-2.2.6-15.5.el6.x86_64

卸载gcc这个程序失败,因为还有很多依赖包,所以要想卸载gcc必须先把这些依赖包卸载,但这样做不现实

依赖关系,是rpm最大的问题,在安装、卸载程序时都有可能会出现这样的问题

所以为了解决依赖性的问题,又有了yum这个工具,yum是rpm的前端工具,可以自动的识别依赖关系并且执行安装或卸载操作

yum虽然很方便,但还是基于rpm工作的:

yum客户端从yum源下载repodata也就是程序包的元数据列表,并匹配要下载的程序包及其依赖包,然后向yum源发出请求,yum源会将请求的程序包发给客户端,然后yum客户端再把程序包及其依赖包一起进行安装,整个过程对用户透明。yum大概的工作原理就是这样。

以上是我自己的一些学习总结,如果哪里有错误,还请不吝赐教!

时间: 2024-10-06 09:57:17

软件包管理RPM的相关文章

linux软件包管理rpm

程序的组成部分: 二进制部分:一般在/bin./sbin等目录 库:/lib.include 配置文件: /etc 帮助文件:man linux各个目录简要注意点: /etc,/bin,/sbin,/lib 系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统所在的分区上 /usr/ bin sbin lib 操作系统核心功能,可以单独分区 /proc /sys 不能单独分区,默认为空 /dev:设备,不能单独分区 /root:不能单独分区 /var:建议单独分区 /boot:

软件包管理—rpm

基础了解 软件包,顾名思义就是由多个软件组成的软件包. 软件包的组成主要有四大部分: 1.二进制程序.主要存在与系统的/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin. 2.库文件.存在于/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64 3.配置文件.程序的公共配置文件为/etc/ld.so.conf.各个程序的独立的配置文件为

Linux软件包管理{rpm|yum|源码包}2015082901

CentOS软件包管理 Linux程序安装有三种方式: 1.  二进制包安装 a.RPM b.YUM 2.  源码包安装 (1)二进制包管理: RPM CentOS上的二进制包为rpm格式,并且rpm软件包管理程序也叫做rpm(RPM is Package Manager) RPM包管理方式的优点是:安装简单方便,因为软件已经编译完成打包完毕,安装只是个验证环境和解压的过程.此外通过RPM方式安装的软件,RPM工具都会记录软件的安装信息至数据库中(/var/lib/rpm),这样方便了软件日后的

Linux软件包管理——rpm

/etc, /bin, /sbin, /lib, /usr/share/man /etc, /bin, /sbin, /lib:系统启动就需要用到的程序,这些目录不能挂载在额外的分区,必须在根文件系统分区上 /usr/ bin sbin lib 操作系统核心功能,可以单独分区 /usr/local 建议单独分区 bin sbin lib etc man /opt:第三方默认安装位置,现在大多数为/usr/local目录下 /proc:不能单独分区,默认为空 /sys:不能单独分区,默认为空 /d

linux下系统软件包管理(rpm、yum、源码包安装)

1. rpm工具rpm全称为Redhat Package Manager,红帽软件包管理工具,设计理念是开放的,不仅仅是在RedHat平台上,在SUSE上也是可以使用的. rpm包名字构成由-和.分成了若干部分,如abrt-cli-2.0.8-15.el6.centos.i686.rpm,abrt-cli是包名,2.0.8-15是版本号,el6指的是redhat企业版6,centos指的是这是在centos上用的,i686指的是平台类型.有些rpm包并没有写具体的平台而是noarch,这代表这个

五、软件包管理RPM与YUM

5.1.程序包管理器 程序包管理器的基本功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装.卸载.查询.升级和校验等管理操作:其文件组成一般可以分为两类: 1).程序的组成组成清单 (每个包独有):文件清单. 安装或卸载时运行的脚本2).数据库(公共):程序包名称及版本.依赖关系:功能说明:安装生成的各文件的文件路径及校验码信息:软件包的组成部分. 软件包安装后,一般分布到如下一些目录: RPM 全名是『RedHat Package Manager ,R

linux系统-软件包管理-Rpm安装补充管理

一 RPM软件包的安装管理 1 查询选项: (1) -a 查询已经安装的软件包 (2) -f 查询文件所属的软件包 (3) -i 显示软件包的信息 (4) -l 显示软件包的文件列表 (5) -d 显示被标记为文档的列表 (6) -c 显示被标记为配置文件的文件列表 二 RPM查询应用案列 1 查询文件所属的软件包:rpm - qf 2 查询软件包信息:           rpm -qi  rpm -qip 3 查询软件包的安装文件:rpm -qd 4 查询软件包的配置文件:rpm -qc 三

软件包管理rpm和yum

rpm的使用: 安装的包相关包信息会保存在/var/lib/rpm目录下的文件中 安装参数: -i install安装 -v 显示详细信息 -h 打印####号 -V 校验软件包,会到/var/lib/rpm下进行校验 常用 rpm -ivh 软件包安装(包全名) 查询参数: -q query查询 -i 拆线已安装报的详细信息 -l 查询安装的包的所有路径 -a 查询所有安装的包 -p 查询未安装的软件包的相关信息 -R 查询软件包的依赖性 -f  反向查找文件是由那个软件包安装的 rpm -V

软件包管理rpm、yum及编译安装

库文件 查看二进制程序所依赖的库文件 ldd /PATH/TO/BINARY_FILE 管理及查看本机装载的库文件 ldconfig 加载库文件 /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件 名及文件路径映射关系 配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 缓存文件:/etc/ld.so.cache rpm(RedHat Package Manager) 程序包管理器: 功能:将编译好的应用程序的各组成文件打包一个或几个

linux软件包管理——rpm包管理

软件运行环境API:Application Programming Interface 应用程序接口(应用程序和操作系统之间的接口) 凡是符合该api标准的应用程序都可以在支持该api的操作系统上编译通过 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接  静态编译:自身包含所有需要调用的库文件  动态编译:自身不包含,需要时调用共享库文件(.so文件)ABI:Application Binary Interface 应用程序二进制接口 规定了二进制文件的格式.