rpm详解——原理,命令详细讲解

news2024/10/5 22:21:38

目录

三个问题

什么是RPM

SRPM (Source RPM)

 RPM软件包

RPM 查询命令

查询已安装的RPM软件信息

查询文件/目录属于哪个RPM软件

查询未安装的RPM包文件

RPM 软件包的安装、卸载 

安装

卸载

RPM 升级与更新 


三个问题

先抛出三个问题,最后简单解释一下。

rpm包是如何得到的?

rpm包是如何制作出来的的?

rpm包在安装时能否指定路径?

下面文字的原理讲解可能有点多,大家只想看命令的话直接阅读RPM命令即可。

什么是RPM

  • RPM 全名 RedHat Package Managerment,是由Red Hat公司提出,被众多Linux发行版本所采用,是一种数据库记录的方式来将所需要的软件安装到到Linux系统的一套软件管理机制。
  • 它会建立统一的数据库文件,详细记录软件包安装 、卸载等变化信息,能够自动分析软件包依赖关系
  • 它最大的特点就是将你要安装的软件先编译过,并且打包成为 RPM 机制的文件,通过打包好的软件里面默认的数据库,记录这个软件要安装的时候必须具备的依赖属性软件。当在你的 Linux 主机安装时,RPM 会先依照软件里面的数据查询Linux 主机的依赖属性软件是否满足,若满足则子以安装,若不满足则不子安装。那么安装的时候就将该软件的信息整个写入 RPM 的数据库中,以便未来的查询、验证与反安装。
     

优点:

  • 由于已经编译完成井且打包完华,所以软件传输与安装上很方便(不需要再重新编译)。
  • RPM 在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装。
  • RPM 本身提供软件版本信息、依赖属性检查、软件用途说明、软件所含文件等信息;便于了解软件
  • RPM 管理使用数据库记录RPM文件的相关参数,便于查询、删除、升级与反安装。

缺点:

  • 由于 RPM 文件是已经打包好的数据,也就是说,里面的数据已经都编译完成了,所以,该软件安装文件几乎只能安装在原本默认的硬件与操作系统版本中。所以你的主机系统环境必须要与当初建立这个软件安装文件的主机环境相同才行。
  • 所以,通常不同的 Linux 发行版所发布的RPM文件,并不能用在其他的 Linux 发行版上。但如果我们真的想要安装其他Linux发行版的RPM软件包怎么办?这时候就该用到我们SRMP。

SRPM (Source RPM)

  • SRPM文件里面含有原始码(Source Code),即SRPM所提供的软件内容并没有进行编译,提供的是源代码
  • SRPM的文件名是以 ***.src.rpm这种格式来命名
  • 虽然SRMP的内容是源代码,但是它仍然含有该软件所需的依赖性软件说明以及所有RPM文件所提供的数据,也提供了参数的配置文件,所以如果我们用的是SRPM的话,安装时,需要先将该软件以RPM管理的方式进行编译,此时SRPM会被编译成RPM文件,然后再将RPM文件安装到Linux系统当中。

RPM软件包

一般来说,在安装RPM类型的文件时,会先去读取文件内记录的设置参数内容,然后将该数据用来对比Linux系统的环境,以找出是否有属性依赖的软件尚未安装的问题。

若环境检查合格,那么RPM文件就被安装到Linux系统上。安装完毕后,该软件的相关信息就被写入到/var/lib/rpm目录下的数据库文件中了。

RPM的数据库:/var/lib/rpm

这个目录内的数据很重要,因为未来如果我们有任何软件升级的需求,查询系统已经安装软件的需求,查询软件详细信息的需求等都是由这个数据库记录提供的

故障原因:

  • 非正常关机、误删除运行中的程序文件
  • RPM数据文件被误写或删除

当RPM数据库损坏时,需要进行数据库重建

  • 格式:rpm  --rebuilddb 或者 rpm --initdb

接下来我们来查看一些放在光盘里RPM包。

 # 通过挂载光盘镜像(可以指定挂载点)来查看Package
[root@zabbix_server ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
 
[root@kafka01 ~]# ll /dev/cdrom
lrwxrwxrwx 1 root root 3 12月 21 20:10 /dev/cdrom -> sr0
 
光驱:读光盘的一个设备(驱动器) --> cdrom
/dev/cdrom 对应光驱的设备文件 --> dev/sr

挂载成功之后,可以去挂载点查看文件
Centos8的系统中Packages再AppStream下,7的系统直接在mnt下就可以找到
[root@kafka01 ~]# cd /mnt/AppStream/Packages/


# Packages里的包基本都是rpm的包,列一点点如下

[root@kafka01 Packages]# ls openssh-askpass-8.0p1-5.el8.x86_64.rpm
openssh-askpass-8.0p1-5.el8.x86_64.rpm 

一般命名格式:

openssh-askpass

8.0p1

5

.el8

x86_64

.rpm

软件名称

软件版本信息

发布的次数

企业版的Linux8

硬件平台

扩展名

​ 

el --> enterprise     el8 --> 企业版的Linux 8

noarch --> no architecture --> 不区分架构,即没有任何硬件等级上的限制,一般这种类型的RPM文件中没有二进制程序文件存在,常出现的就是属于shell脚本方面的软件

RPM 查询命令

查询已安装的RPM软件信息

格式:rpm -q[子选项] [软件名]
用法:结合不同子选项完成不同查询

  • -qa:查看系统中已安装的所有RPM软件包列表
  • -qi:查看指定软件的详细信息(information)
  • -ql:列出该软件所有的文件与目录所在的完整文件名(list)
  • -qc:列出该软件所有的配置文件(找出在/etc下的文件)
  • -qd:列出该软件所有的说明文件(找出与man相关的文件)
  • -qR:列出与该软件有关的依赖软件所含的文件(Required)

查询文件/目录属于哪个RPM软件

  • rpm -qf 文件或目录名

查询未安装的RPM包文件

格式:rpm -qp[子选项] [RPM包文件]
用法:-qp后接的所有参数与上面说明的一致,但用途仅在找出某个RPM文件内的信息,而非已安装的软件信息

  • -qpi:通过.rpm包文件查看该软件的详细信息
  • -qpl:查看.rpm安装包内所包含的目录、文件列表
  • -qpc:查看.rpm安装包内包含的配置文件列表
  • -qpd:查看.rpm安装包内包含的文档文件列表

接下来随意列举几个应用一下命令

[root@kafka01 ~]# rpm -qa
[root@kafka01 ~]# rpm -qi nginx
[root@kafka01 etc]# rpm -ql nginx
[root@kafka01 etc]# rpm -qf dhcp
dhcp-client-4.3.6-44.0.1.el8.x86_64
 
[root@zabbix_server ~]# rpm -qpl /mnt/Packages/zsh-5.0.2-34.el7_8.2.x86_64.rpm |more
 
# 查看openssh的安装包
[root@kafka01 ~]# rpm -qa|grep openssh
openssh-8.0p1-5.el8.x86_64
openssh-server-8.0p1-5.el8.x86_64
openssh-clients-8.0p1-5.el8.x86_64
 
[root@kafka01 ~]# rpm -ql openssh-server
/etc/pam.d/sshd

RPM 软件包的安装、卸载 

安装

rpm -ivh xx.rpm

卸载

rpm -e zsh

 选项与参数:

  • -i:install 安装
  • -v:查看更详细的安装信息
  • -h:显示安装进度
  • -e:erase 卸载清除安装包

依赖关系

  1. 安装有依赖关系的多个软件时,被依赖的软件包需要先安装 --> 需要同时指定多个.rpm包文件进行安装
  2. 卸载有依赖关系的多个软件时,依赖其他程序的软件包需要先卸载 --> 同时指定多个软件吗进行卸载
  3. yum可以自动解决依赖关系,但rpm安装需要我们自己去解决依赖关系
  4. 结合 "--nodeps"可以忽略依赖关系,但可能导致软件异常

辅助选项

  • --force:强制安装所指定的rpm软件包
  • --nodeps:安装、升级或卸载软件时,忽略依赖关系
  • --replacefiles:在安装过程中出现某个文件已经被安装在你的系统上的信息,或出现版本不合的信息,可以用这个参数直接覆盖文件
  • --replacekgs:重新安装某个已经安装过的软件。防止安装RPM文件时因为某软件已安装导致无法继续安装
  • --test:测试软件是否可以被安装到用户的Linux环境中
  • 建议:尽量安装时直接使用 -ivh 就好,尽量不要使用--force暴力安装,否则可能会发生很多不可预期的问题

RPM 升级与更新 

格式:rpm [选项] [RPM包文件]…

选项与参数

  • -i:安装一个新的rpm软件包
  • -U:升级某个rpm软件,若原本未装,则进行安装
    • 需要自己提供高版本的软件包,不会自动去帮助到哪里下载
  • -F:更新某个rpm软件,若原本未装,则放弃安装

所以最后,大家应该就能知道这些问题的答案了

rpm包是如何得到的?

  • 镜像文件里
  • 官方网站(mysql、docker等)
  • 第三方网站  Rpmfind mirror
  • 自己制作

rpm包是如何制作出来的的?

  • 通过源码包制作出来的,具体制作方法的话大家可以去官网查询一下,难点是写配置文件

rpm包在安装时能否指定路径?

  • 和Windows不一样,不能自己指定,Linux里的每个目录都有一定含义,rpm安装之后,会将这个软件内的文件分配到目录下,这里简单给一些目录的相关意义

典型应用程序的目录结构 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/666297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HiveSQL 电商场景TopK统计

数据准备 CREATE TABLE test.test2 ( user_id string, shop string ) ROW format delimited FIELDS TERMINATED BY \t; INSERT INTO TABLE test.test2 VALUES ( u1, a ), ( u2, b ), ( u1, b ), ( u1, a ), ( u3, c ), ( u4, b ), ( u1, a ), ( u2, c ), ( u5, b ), ( u4, b )…

基于人工智能的AI理发师能帮托尼老师做什么?

BarberGPT是一个人工智能理发师,它可以让您在照片上尝试不同的发型。您只需要上传您的照片,标记您的头发,然后就可以看到惊人的变化。BarberGPT使用了先进的深度学习技术,可以根据您的脸型、肤色和发质生成适合您的发型。BarberGP…

国产监控数据库产品lepus最新版学习和部署(V5.1)

目录 lepus是什么? 二进制安装(最新v5.1) 1.基础环境 2.安装NSQ 3.NSQ消息测试 4.安装lepus 5.初始化数据库 6.修改配置文件 7.启动服务组件 8.安装lepus-console 9.运行和访问控制台 lepus是什么? Lepus数据库监控系统…

Docker容器应用为工业连接提供了新选择

一 智能数据管理 Docker容器应用可灵活部署在异构计算平台上,且仅需占用少量的资源,这可为工业4.0提供一种新的数据集成方案。Docker容器应用程序是提供特定功能的小型软件模块,可在自动化领域中用于智能数据管理。而Softing推出的一个新产品…

简要介绍 | CUDA底层原理:加速高性能计算的关键技术

注1:本文系“简要介绍”系列之一,仅从概念上对CUDA的底层原理进行非常简要的介绍,不适合用于深入和详细的了解。 CUDA底层原理:加速高性能计算的关键技术 CUDA Refresher: The GPU Computing Ecosystem | NVIDIA Technical Blog 1…

通过SECS/GEM平台实现半导体设备与EAP系统互联

在半导体电子和光伏行业大量的设备需要通过SECS/GEM协议与EAP系统进行互联。 常见的设备互联需求主要分为以下几类: 1.生产过程自动化:设备通过EAP下发指令进行切换程序、条码或RFID标签采集、Foup自动加载与卸载、晶圆生产加工自动化,减少…

6 种方式读取 Springboot 的配置,老司机都这么玩(原理+实战)

从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一,但就是这么常用的功能,仍然有很多开发者在这个方面踩坑。 我整理了几种获取配置属性的方式,目的不仅是要让大家学会如何使用,更重要的是弄清配置加载、读取的底层…

Windows WSL子系统Ubuntu22.04安装Nvidia显卡驱动

最近在研究AI,如果在Linux系统中部署的话需要重装系统,有些麻烦,又不想折腾。所以闲置很久没研究的WSL又拿起来研究了,当然部署ai还需要显卡驱动的支持,就必须先安装显卡驱动。 还没有安装过WSL的童鞋可以看我之前发布…

在 javascript 中清除 canvas 画布

文章目录 在 JavaScript 中清除画布在 HTML 中使用 JavaScript 创建画布 我们使用 canvas 来绘制图形。 它提供了多种绘制的方法,如圆形、方框、文字、添加图片等,我们在使用canvas时需要清除它并在上面绘制。 本文介绍如何在 JavaScript 中清除画布。 …

LogicFlow:自定义 bpmn 用户节点(1)

切入正题之前,首先我们先了解下面板上面节点的几个重要属性,如下图: 虽然 logicflow 内置插件里面有用户节点(bpmn:userTask),但是你若是想实现下面这种形式,就需要自己重新写个节点了。 上面…

MongoDB_5.0.18下载及安装(CentOS7)

文章目录 MongoDB安装(Centos7)1、下载地址2、安装流程2.1 下载server包2.2 安装server包2.3 修改默认mongod.conf配置文件2.4 启动服务2.5 这样就可以通过远程工具进行链接使用,创建mongodb用户,详细请查看其他文档 3、分享远程工…

球王梅西的力量

这次阿根廷来中国参加友谊赛,场内场外都有很多值得大众思考的,无论是对主办方的各种吐槽,还是对球迷近乎疯狂的追星行为,又或者是疫情放开后,大众积压已久的情绪,好象以往国外球队来,无论是顶级…

Axure教程——滑动拼图解锁

本文将教大家如何用AXURE中的动态面板制作拼图解锁 一、效果 预览地址:https://74wxu6.axshare.com 二、功能 拖动图片到指定位置提示“验证成功”,如果没到指定位置则提示“验证没成功,请重新验证” 三、制作 1、制作拼图 加入底部验证图…

【Python 随练】乒乓球比赛名单

题目: 两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a 说他不和 x 比,c 说他不和 x,z 比,请编程序找出三队赛手的名单。 简介:…

【软考-中级】系统集成项目管理工程师【总】

持续更新中。。。。。。。。。。。。。。。 学习目标:完成2023上半年 软件中考任务 目标23年5月 考试前 完成 相关知识点学习 和练习 核心 十五至尊图: 上面图是考试的核心,需要背下来 一、信息化知识(重点)一般…

Selenium Web自动化测试框架实践

目录 前言: 项目背景 功能实现 项目架构 浏览器driver定义 用例运行前后的环境准备工作 工具方法模块 Pageobject页面对象封装 执行测试用例   前言: Selenium是一个基于Web的自动化测试框架,可以通过模拟用户在浏览器上的操作,…

直接选择排序及其稳定性分析

直接选择排序 直接选择排序是一种很直观的排序方法。其操作是这样:先在未排序的序列中选择最小的元素(或最大的元素),把它与第一个元素交换,放在第一个位置,再在剩余未排序序列中选择第二小的,…

驾驭Dubbo:探索其核心概念与突出特性,助力分布式系统升级

1、Dubbo简介 Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服…

147-Prolixe-KeygenMe#1

Exeinfo查壳,发现没有壳,是Delphi程序 OD字符串搜索,找到关键位置,发现一个关键的call,和一个strcmp比较函数。 进入关键call进行分析,结合IDA。 分析这个call,发现输入的name字符串长度必须…

北欧又一国家布局量子

光子盒研究院 6 月 8 日,挪威奥斯陆城市大学、Simula 研究实验室在内的QCNorway研讨会团队撰写了一份立场文件,其中,对新兴的挪威量子战略提出了建议。 “世界正在接近一场量子革命——一个为期40年的梦想,利用量子力学的现象使计…