首页 > 代码库 > linux之程序包管理器(rpm)

linux之程序包管理器(rpm)

linux下的程序包可支持多种工具编写的,如C、C++、PERL等。

但是这种高级语言编写出来的代码是我们人能看懂的,但是计算机是看不懂的,那么计算机怎么执行,怎么了解人要它做什么呢?

这就需要我们做一些转换了,把人能读懂的语言让机器也能识别,这个过程就是由编译器完成的,通常是吧代码语言转换成二进制语言。

过程:预处理、编译、汇编、链接

一个程序的运行大部分时间是离不开的。

什么是库呢?库也是一种程序,只不过与其他程序不同,库没有执行入口,不能独立运行,只能被其他独立运行的程序调用的时候才能执行。说白了库就是为其他程序服务的。)

库的分类:开发库、运行库

可想而知开发库是程序猿用的,而用户只用到了运行库。

那么我们来了解一下源代码吧。

API:一种源代码,能够兼容任何环境。(就是说不关你事那种硬件平台都可以)

ABI:一种源代码,但与API不同,ABI严重依赖于硬件环境。(如果是不同的设备则会出现无法运行的状况,就好比电脑格式的软件无法在手机上运行一样)

所以:如果要移植一款软件时最好是API。

注:有些程序是不依赖于硬件运行的,依赖于虚拟机运行。(可跨平台运行)



那么接下来说说程序包的组成格式都用哪些吧!

程序包组成格式:

              二进制程序:存放位置(/bin、/sbin、/uer/bin、/uer/local/bin、/uer/local/sbin)

              库文件(开发库、运行库):存放位置(/lib64我们以64位系统为例、/uer/lib64、/uer/local/lib64)

              配置文件:存放位置(/etc、/uer/local/APP/etc或conf)

              帮助文件:存放位置(/uer/share/man、/uer/local/share/man、/uer/local/APP/man)




切入正题,程序包管理器主要分为:数据库和程序组成清单文件

数据库:程序名及版本、依赖关系

程序组成清单:文件清单、装卸载时运行的脚本



程序包管理器的功能:将编译好的程序打包成一个文件或有限的几个文件,可用于实现安装、卸载、升级、查询、校验、数据库管理等功能。

值得注意的是,程序间的依赖关系繁杂,由众多单一的小程序组合完成复杂任务。(和库的调用有关,程序运行时需要调用库,有些程序则需要调用其他程序的库,所以就形成了依赖关系)




【如何使用RPM包】

 RPM包命名格式:名称-版本号-relase号.平台.rpm(relase:源代码包制作成rpm的修订号)

                  版本号包括主版本号、次版本号、修订号


【获取rpm的途径】

1、发行商的光盘或站点服务器

2、镜像:http://mirrors.163.com

         http://mirrors.sohu.com

3、项目官网:源代码、rpm包

4、第三方机构或个人制作并公布的rpm包

   http://rpmfind.net

   http://rpm.pbone.net


【rpm包的合法性验证】

包制作者制作完成之后会附加数字签名于包上;包的制作者使用单向加密提取原始数据的特征码,而后                                           使用自己的私钥加密这段特性码,附加原始数据后面。

验正过程:

         前提:必须有可靠机制获取到包制作者的公钥;

       1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;

       2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作                   比对,相同,则意味着完整性没问题;


【如何安装rpm包】

命令语法格式:rpm  选项  文件包路径

             其中的选项有:-i  安装

                           -v  显示详细过程

                           -h  使用#号显示安装进度

                           ivh组合  安装并显示详细过程和进度

                           --tost  测试(不真正安装,仅是测试是否能够安装)

                           --nodeps  安装时忽略依赖关系

例如我们安装一下gcc:

wKioL1PU-TbCvwYZAAAk3ylgNCU686.jpg


【如何卸载程序包】

语法使用格式:rpm  选项  包名(这里的选项为-e。意为卸载)

例如,我们卸载刚才安装的gcc

wKioL1PU-c2DmHVFAAA0naVSwIE886.jpg


注:如果包的配置文件被修改过,卸载时包的配置文件将被重命名并保存)


卸载时如果被其他包所依赖:1、将依赖于此包的所有包一并卸载

                          2、忽略依赖关系  后加--nodeps

【如何升级程序包】

命令适用语法:rpm  选项  包路径

              升级或安装使用的选项为:-Uvh

              单纯升级使用的选项为:-Fvh

注:升级或版本冲突,使用--force选项强制升级

注:不应该对内核进行升级,内核只能安装。linux系统允许多内核并存。


【rpm包的查询操作】

 1、查询某包是否安装:rpm -q 包名

如:查询gcc包是否安装

wKioL1PU_NzQUONwAABLaQLJ1-g556.jpg


2、查询所有已安装的包:rpm -qa

如:

wKiom1PU_B2z10sXAAFGJVN9MWI453.jpg


3、查询已安装包的描述信息:rpm -qi 包名

如:查询groff包的描述信息

wKioL1PU_dSDrohLAAG3J0h1cfY327.jpg


4、查询已安装包的生成文件:rpm -ql 包名

如:查询groff的生成文件

wKioL1PU_kChLEUOAADfFGSKlJI481.jpg


查询安装生成的配置文件:rpm -qc 包名

查询安装生成的帮助文件:rpm -qd 包名

查询安装的相关脚本:rpm -q --scripts 包名

5、查询某文件是有那个包安装生成的:rpm -qf 文件名

6、查询尚未安装的包:rpm 选项  -p 路径包文件

                 选项有 -qpi描述信息

                        -qpl生成文件

                        -qpc生成配置文件

                        -qpd生成帮助文件

                        -qpf文件路径


【程序包校验】

 检查包安装后生成的文件属性是否发生变化

rpm -V 包名



【显示共享库依赖关系】

使用语法:ldd 命令文件路径

如:查看ls命令的依赖关系

wKioL1PVAJ3Sc5-XAAHNRgxXK1Y988.jpg


rpm包来源合法性及完整性检验:

    前提:在当前系统上导入包的制作者的公钥

导入:

rpm --import 文件路径

        rpm -qa gpg-pubkey*  显示所有已经导入的gpg格式的公钥

        rpm -qi gpg-pubkey-NAME  显示密钥的详细信息


【检查包】

手动检查:

rpm -K 包文件路径

rpm --checksig 包文件路径

不检查包完整性:

       rpm -K --nodigest

不检查来源合法性:

       rpm -K --nosignature


【数据库重建】

数据库目录:/var/lib/rpm

重建:

     rpm --initdb  初始化

     如果事先没有库,会新建一个;如果有,则不新建

     rpm --rebuilddb  重建

     直接重建,覆盖原有的数据库