Linux运维*一.Linux基础---19、rpm程序包管理器

本文深入解析程序包管理的基础概念,包括API接口、源码到执行程序的流程,以及rpm包管理器的使用方法。涵盖了编译方式、程序包构成、依赖关系处理,和rpm命令的具体操作,如安装、卸载、升级、查询和校验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、程序包管理基础

1、API接口:

在不同的开发环境中,编写程序时会调用内核kernel或者库文件,不同系统的库文件不同(Linux、Windows等),为了增强开发程序的兼容性,不同库使用统一标准的API接口,使得不同开发环境开发的程序能够兼容

 

2、源码到程序执行的流程:

源码(文本) ---> 预处理 ---> 编译(编译器) ---> 汇编(汇编代码)---> 机器指令

 

3、编译方式:

静态编辑:

把编译器封装到程序中,程序执行时不需要依赖外部编译器

兼容性强,但程序体积大

共享编译:

程序内无编译器,而是通过连接到运行环境中的lib共享库里的编译器进行编译

兼容性弱,但程序体积小

 

4、二进制应用程序的组成部分

二进制文件

库文件

配置文件

帮助文件

 

5、程序包管理

将编译好的应用程序的各个组件,如二进制文件、库文件、配置文件、帮助文件等程序文件统一打包成为程序包,实现程序的简化安装、安装追踪、查询、升级、拆卸等管理功能

 

6、程序包管理器的作用

将编译好的应用程序的各个组件,如二进制文件、库文件、配置文件、帮助文件等程序文件统一打包成为程序包,实现程序的简化安装、安装追踪、查询、升级、拆卸等管理功能

程序包的构成:

(1、程序的组成清单

文件清单

安装或者拆卸时运行的脚本

(2、数据库(公共)

程序包名称及版本

依赖关系

功能说明

安装生成的各文件的文件路径及校验码信息

(3、程序数据

 

程序包管理器:

管理器:rpm

管理器前端工具:yum

 

7、常见的程序包管理器

debin公司:

管理器:deb

程序包格式:.dpt

redhat公司:

管理器:rpm------redhat packet manager

程序包格式:.rpm

 

8、源代码文件及rpm包命名格式

源代码文件命名格式:

name-version.tar.gz

name-version.tar.bz2

name-version.tar.xz

version:major.minor.release(主版本.次版本.发行版)

rpm包命名格式:

name-version-release.os.arch.rpm

- version # 版本号(主版本.次版本.发行版)

- release # 包发行号

- os # 操作系统

- arch # 运行平台(x86:i386、i486 、i586 、i686、x86_64、amd64)

- rpm # 文件后缀名

示例:

[root@localhost ~]# rpm -qa | grep python-2.7

python-2.7.5-68.el7.x86_64

python # 包名

2.7.5 # 发行版本号(major:2、minor:7、release:5)

68 # 包的release号

el7 # 操作系统:企业级redhat

x86_64 # 运行平台

 

9、主包、子包、包依赖关系

主包:用于实现程序主要功能的包

app01-version-release.os.arch.rpm

子包:用于实现程序额外附加功能的包

app01-devel-version-release.os.arch.rpm

包依赖关系:程序运行可能需要依赖于另外一个程序,被依赖的程序包叫依赖包

 

10、程序包的获取方式:

(1、系统发行版的光盘或者官方的服务器镜像;

(2、第三方服务器镜像

教育服务器镜像(清华、北大)

阿里云镜像:http://mirrors.aliyun.com

搜狐镜像:http://mirrors.sohu.com

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

(3、项目官方站点

(4、第三方组织社区站点

Fedora-EPEL

GitHub

(5、搜索引擎

 

 

 

 

 

二、ldd命令及ldcongif命令

ldd /path/to/file #查看二进制程序文件所依赖的库文件

示例:

[root@localhost ~]# ldd /bin/cat

linux-vdso.so.1 => (0x00007fff12890000)

libc.so.6 => /lib64/libc.so.6 (0x00007f20eb858000)

/lib64/ld-linux-x86-64.so.2 (0x00007f20ebc25000)

 

ldconfig -p 或 /sbin/ldconfig -p #显示已经装载到缓存的所有可用库文件及文件路径映射关系

示例:

[root@localhost ~]# ldconfig -p | grep libGL

libGL.so.1 (libc6,x86-64) => /lib64/libGL.so.1

 

ldconfig 或 /sbin/ldconfig # 根据库文件的缓存配置文件重读缓存

库文件的缓存配置文件:

/etc/ld.so.conf

/etc/ld.so.conf.d/*.conf

库文件的缓存文件:

/etc/ld.so.cache

示例:

[root@localhost ~]# cat /etc/ld.so.conf.d/dyninst-x86_64.conf

/usr/lib64/dyninst

[root@localhost ~]#

[root@localhost ~]# ldconfig

 

 

 

 

三、rpm包管理器的使用

1、程序包来源合法性及完整性校验

校验文件:

程序包的制作者会使用MD5或者SHA算法对做好的程序包进行计算,得到程序包的特征码,并用私钥加密,安装前用户使用公钥解密并计算比较特征码,若不同则说明包被篡改过,不完整,或被植入病毒(所以进行校验前首先需要信任程序包的制作者)

公钥的导入:

rpm --import  /path/to/poblickeyfile公钥

 

程序包的校验:

使用rpm安装程序包,此时会使用刚刚导入的密钥进行校验

 

2、程序包的安装及拆卸

格式:rpm 选项 /path/to/file.rpm

常用选项:

-i 或 --install # 安装指定程序包(若有依赖包,需要先逐一安装依赖包)

-v # 显示安装过程

-h # 显示安装进度

-e # 拆卸程序包

--face # 强制安装

--test # 测试程序包是否能被安装,不真正执行安装

--nodeps # 忽略依赖关系强行安装(容易造成安装后程序无法正常运行)

--replacepkgs # 程序安装

--nosignature # 不检查来源合法性

--nodigest # 不检查包的完整性

--noscipts # 安装时不执行程序包脚本

--nopre #不执行安装前脚本%pre

--nopost #不执行安装后脚本%post)

--nopreun # 不执行卸载前脚本%preun)

--nopostun # 执行卸载后脚本%postun)

 

常用选项搭配:

rpm -i --test /path/to/file.rpm # 测试程序包是否能安装

rpm -ivh /path/to/file.rpm # 安装程序包,并显示进度

rpm -ivh --replacepkgs /path/to/file.rpm # 重新安装程序包,并显示进度

rpm -evh /path/to/file.rpm # 拆卸程序包,并显示进度

 

示例:

[root@localhost ~]# ll

total 48

-rw-r--r--. 1 root root 47508 Jul 4 2014 tree-1.6.0-10.el7.x86_64.rpm

 

[root@localhost ~]# rpm -i --test tree-1.6.0-10.el7.x86_64.rpm

[root@localhost ~]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm

Preparing... ################################# [100%]

Updating / installing...

1:tree-1.6.0-10.el7 ################################# [100%]

 

[root@localhost ~]# rpm -ivh --replacepkgs tree-1.6.0-10.el7.x86_64.rpm

Preparing... ################################# [100%]

Updating / installing...

1:tree-1.6.0-10.el7 ################################# [100%]

 

[root@localhost ~]# rpm -evh tree

Preparing... ################################# [100%]

Cleaning up / removing...

1:tree-1.6.0-10.el7 ################################# [100%]

 

 

3、程序包的升级及降级

格式:rpm 选项 /path/to/file.rpm

常用选项:

-U # 升级程序包(若不存在旧的程序包,则重新安装程序包)

-F # 升级程序包(若不存在旧的程序包,则不执行)

--oldpacage # 降级程序包(用旧版的程序包替换新的程序包)

 

4、程序包安装情况校验

格式:rpm 选项 /path/to/file.rpm

常用选项:

-V # 执行校验操作

        --nodeps           #不检查依赖关系

        --nodigest         #不检查完整性

        --nofiles            #不检查生成文件

        --noscripts        #不检查脚本模块

        --nosignature   #不检查来源合法性

        --nolinkto          #不检查连接

        --nofiledigest   #不检查MD

        --nosize             #不检查大小

        --nouser            #不检查属主

        --nogroup        #不检查属组

校验结果:

SM5DLUGTP

S:大小改变

M:权限改变(属主、属组)

5:MD5码不同

D:设备文件主次设备号不同

L:路径不同

U:属主不同

G:属组不同

T:最后一次修改时间不同

P:功能不匹配

示例:

[root@localhost ~]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm

Preparing... ################################# [100%]

Updating / installing...

1:tree-1.6.0-10.el7 ################################# [100%]

 

[root@localhost ~]# rpm -V tree

 

5、程序包的安装情况查询

格式:rpm 选项 /path/to/file.rpm

常用选项:

-q # 进行程序包安装情况查询操作

-a # 查询所有已安装程序包

-f # 查询指定文件由那个程序包生成

-g # 查询指定包组的程序包

-P # 查询未安装的程序包信息(结合查询选项可查看未安装程序包的详细信息)

--whatprovides # 查询指定功能或文件是由那个程序包提供的

--whatrequires # 查询指定功能或文件有那些依赖程序包

--changelog # 查询rpm包的修改日志

-c # 查询指定程序包有哪些配置文件

--conflicts # 查询指定程序包可能会和那些程序发生冲突

-d # 查询程序包安装生成的文档

-i # 查询查询包的概要信息

-L # 查询包的许可证文件

-l # 查询包安装生成的所有文件

--scripts # 查询程序包的脚本

--triggers # 查询包的触发器脚本

-R # 查询包所依赖的库文件

--provides # 查看程序包所提供的功能

示例:

[root@localhost ~]# rpm -q tree

tree-1.6.0-10.el7.x86_64

 

[root@localhost ~]# rpm -qa | grep tree

tree-1.6.0-10.el7.x86_64

 

[root@localhost ~]# rpm -qd tree

/usr/share/doc/tree-1.6.0/LICENSE

/usr/share/doc/tree-1.6.0/README

/usr/share/man/man1/tree.1.gz

 

[root@localhost ~]# rpm -qi tree

Name : tree

Version : 1.6.0

Release : 10.el7

Architecture: x86_64

Install Date: Tue 03 Mar 2020 02:13:52 PM CST

Group : Applications/File

Size : 89505

License : GPLv2+

Signature : RSA/SHA256, Fri 04 Jul 2014 01:36:46 PM CST, Key ID 24c6a8a7f4a80eb5

Source RPM : tree-1.6.0-10.el7.src.rpm

Build Date : Tue 10 Jun 2014 03:28:53 AM CST

Build Host : worker1.bsys.centos.org

Relocations : (not relocatable)

Packager : CentOS BuildSystem <http://bugs.centos.org>

Vendor : CentOS

URL : http://mama.indstate.edu/users/ice/tree/

Summary : File system tree viewer

Description :

The tree utility recursively displays the contents of directories in a

tree-like format. Tree is basically a UNIX port of the DOS tree

utility.

 

[root@localhost ~]# rpm -q -l tree

/usr/bin/tree

/usr/share/doc/tree-1.6.0

/usr/share/doc/tree-1.6.0/LICENSE

/usr/share/doc/tree-1.6.0/README

/usr/share/man/man1/tree.1.gz

 

 

6、rpm包管理器的数据库

rpm管理程序包时候,会将相关数据存储到数据库文件:/var/lib/rpm

[root@localhost ~]# cd /var/lib/rpm

[root@localhost rpm]# ls

Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5

Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername

 

如果以上文件损坏,有的查询操作将无法进行,需要读取原程序信息重建数据库

rpm --initdb # 初始化数据库(存在数据库则不进行操作、不存在则进行重建初始化)

rpm --rebuilddb # 重建数据库(无论数据库存在与否,都进行重建)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值