首页 > 代码库 > 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:
【如何卸载程序包】
语法使用格式:rpm 选项 包名(这里的选项为-e。意为卸载)
例如,我们卸载刚才安装的gcc
注:如果包的配置文件被修改过,卸载时包的配置文件将被重命名并保存)
卸载时如果被其他包所依赖:1、将依赖于此包的所有包一并卸载
2、忽略依赖关系 后加--nodeps
【如何升级程序包】
命令适用语法:rpm 选项 包路径
升级或安装使用的选项为:-Uvh
单纯升级使用的选项为:-Fvh
注:升级或版本冲突,使用--force选项强制升级
注:不应该对内核进行升级,内核只能安装。linux系统允许多内核并存。
【rpm包的查询操作】
1、查询某包是否安装:rpm -q 包名
如:查询gcc包是否安装
2、查询所有已安装的包:rpm -qa
如:
3、查询已安装包的描述信息:rpm -qi 包名
如:查询groff包的描述信息
4、查询已安装包的生成文件:rpm -ql 包名
如:查询groff的生成文件
查询安装生成的配置文件:rpm -qc 包名
查询安装生成的帮助文件:rpm -qd 包名
查询安装的相关脚本:rpm -q --scripts 包名
5、查询某文件是有那个包安装生成的:rpm -qf 文件名
6、查询尚未安装的包:rpm 选项 -p 路径包文件
选项有 -qpi描述信息
-qpl生成文件
-qpc生成配置文件
-qpd生成帮助文件
-qpf文件路径
【程序包校验】
检查包安装后生成的文件属性是否发生变化
rpm -V 包名
【显示共享库依赖关系】
使用语法:ldd 命令文件路径
如:查看ls命令的依赖关系
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 重建
直接重建,覆盖原有的数据库