当前位置: 首页 > news >正文

【Linux】中的软件安装:深入探索RPM、SRPM与YUM

🐇明明跟你说过:个人主页

🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、Linux的起源与发展

2、RPM、SRPM与YUM的简要介绍

二、RPM基础 

1、RPM的定义与起源

2、使用RPM安装软件 

3、使用RPM升级软件

4、使用RPM卸载软件

三、SRPM

1、SRPM是什么

2、SRPM的组成部分

3、 SRPM的用途

四、YUM自动化管理 

1、YUM的定义与特点

2、YUM与RPM的关系 

3、配置YUM仓库 

4、使用YUM安装、卸载软件 


一、引言

1、Linux的起源与发展

1991年,芬兰赫尔辛基大学的学生林纳斯·托瓦兹(Linus Torvalds)开始编写一个新的操作系统内核,这个内核最初被称为“Freax”。他的初衷只是想学习操作系统内核的开发,并为自己的个人计算机编写一个操作系统。然而,当他将这个内核发布在Internet上并开放源代码后,全球各地的程序员开始参与到这个项目中来,共同完善这个内核。最终,这个内核被命名为Linux,这个名字是由Linus Torvalds的名字和Unix操作系统的名字组合而成的。

Linux从一开始就坚持源代码的公开和免费使用,任何人都可以对其进行修改和分发。这种开放性和自由性吸引了大量的开发者和用户,使得Linux逐渐成长并成熟起来。如今,Linux已经发展成为一个性能稳定、功能强大的多用户网络操作系统,支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议。同时,Linux也有上百种不同的发行版,如基于社区开发的Debian、ArchLinux,以及基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。

2、RPM、SRPM与YUM的简要介绍

RPM、SRPM和YUM是与Linux软件包管理相关的重要概念,尤其是在基于Red Hat的发行版(如RHEL、CentOS、Fedora等)中。

1. RPM (Red Hat Package Manager)

RPM 是一种包管理工具,用于安装、升级、卸载、查询和验证Linux系统上的软件包。RPM包通常是预编译的二进制文件,方便用户直接安装。RPM包的文件名通常以 .rpm 结尾。它包含了软件的文件、元数据(如版本号、依赖关系)和脚本(如安装后执行的配置脚本)。


2. SRPM (Source RPM)

SRPM 是RPM的源代码包,通常以 .src.rpm 结尾。SRPM包包含了软件的源代码和一个SPEC文件,该文件定义了如何构建二进制RPM包的过程。开发者或用户可以通过SRPM包重新编译软件,以便在不同的系统上安装或进行定制化。


3. YUM (Yellowdog Updater, Modified)

YUM 是一个高层次的包管理器,用于自动解决RPM包的依赖关系并从指定的仓库中下载安装软件包。它简化了软件包的管理,能够同时处理多个软件包的安装、更新和删除,并自动解决依赖关系。YUM可以从多个软件仓库下载所需的软件包和依赖项。

二、RPM基础 

1、RPM的定义与起源

RPM的定义

  • RPM (Red Hat Package Manager) 是一种开源的包管理系统,最初由Red Hat开发,用于管理Linux操作系统上的软件包。RPM包通常以 .rpm 为扩展名,包含了已编译的二进制文件、软件的元数据(如版本、依赖关系、描述信息)、以及用于安装和配置的脚本。RPM包管理器提供了一套标准化的方式来安装、升级、卸载、查询和验证软件包,使得Linux系统上的软件管理变得更加简单和一致。

RPM的起源

  • RPM的起源可以追溯到1995年,当时Red Hat公司为了解决在Linux系统上管理软件包的复杂性,开发了RPM。它的设计目的是简化软件包的安装和更新过程,并解决软件包依赖的问题。RPM是从较早的包管理系统“RPP (Red Hat Package System)”发展而来的,RPP也由Red Hat开发。
  • 随着时间的推移,RPM逐渐成为多个Linux发行版(如Fedora、CentOS、openSUSE、Mandriva等)的标准包管理系统。由于其开源的特性和广泛的使用,RPM成为了Linux生态系统中一个非常重要的组成部分,不仅仅用于Red Hat系的发行版,也在其他非Red Hat系的发行版中得到了应用和改进。
  • RPM项目后来被社区接管,并由RPM.org维护,继续作为一个独立的开源项目发展。它的设计和实现对Linux软件的分发、管理和自动化部署产生了深远的影响。

 

2、使用RPM安装软件 

使用 rpm 命令可以在Linux系统上安装RPM软件包。安装过程会将RPM包中的文件复制到适当的位置,并执行任何需要的安装脚本。

基本安装命令:

rpm -ivh package.rpm


选项说明:

  • -i:表示安装软件包。
  • -v:显示详细的安装过程。
  • -h:显示安装进度条。

示例:

rpm -ivh httpd-2.4.6-90.el7.x86_64.rpm


这条命令会安装一个名为 httpd 的软件包(一个Apache HTTP服务器的版本)。

3、使用RPM升级软件

如果系统中已经安装了一个版本的RPM包,可以使用 rpm 命令进行升级。升级会替换旧版本的文件,并保留配置文件的自定义更改。

基本升级命令:

rpm -Uvh package.rpm


选项说明:

  • -U:表示升级软件包,如果软件包未安装,它会执行安装操作。

示例:

rpm -Uvh httpd-2.4.6-97.el7.x86_64.rpm


这条命令将升级 httpd 软件包到新版本。

4、使用RPM卸载软件

卸载已安装的软件包时,可以使用 rpm -e 命令。卸载过程将删除软件包中的所有文件,并执行任何需要的卸载脚本。

基本卸载命令:

rpm -e package_name


选项说明:

  • -e:表示卸载软件包。

示例:

rpm -e httpd


这条命令将卸载名为 httpd 的软件包。

注意事项:

卸载一个软件包时,如果其他软件包依赖于它,RPM将阻止卸载。你需要手动解决依赖关系,或者使用 yum remove 等更高层次的工具自动解决这些问题。

三、SRPM

1、SRPM是什么

SRPM (Source RPM) 是一种特殊类型的RPM包,它包含了软件的源代码以及构建该软件的相关信息和指令。SRPM的文件扩展名通常为 .src.rpm。与标准的二进制RPM包不同,SRPM包并不直接用于安装软件,而是用于重新编译和构建二进制RPM包。

2、SRPM的组成部分

一个SRPM包通常包含以下内容:

1. 源代码:

  • 软件的源代码通常以压缩包的形式(如 .tar.gz、.tar.bz2 等)存放在SRPM中。这些是开发者提供的原始代码。


2. SPEC文件:

  • SPEC文件是SRPM的核心部分,它定义了如何从源代码构建二进制RPM包。SPEC文件包含了软件包的名称、版本、发行版、编译过程、安装脚本、依赖关系、文件列表等信息。


3. 补丁文件(可选):

  • 如果开发者或维护者对源代码进行了任何修改或修补,这些补丁文件也会包含在SRPM中,以便在构建过程中应用到源代码上。


3、 SRPM的用途

SRPM主要用于以下几个场景:

1. 自定义编译:

  • 用户或开发者可以通过SRPM包重新编译软件,以适应不同的硬件架构、操作系统版本,或进行自定义优化。特别是在需要特定编译选项或功能时,SRPM提供了灵活性。


2. 查看或修改源代码:

  • SRPM允许用户查看软件的源代码,了解其工作原理,或进行调试和修改。对于开源软件,这是一个重要的特性。


3. 再分发:

  • 维护者可以基于SRPM修改软件包(如应用补丁或更改配置),然后重新打包成新的二进制RPM包进行分发。这对于企业或社区维护的特定版本非常有用。


4. 学习和开发:

  • 开发者可以通过SRPM学习如何构建和打包软件,并使用它作为开发新软件或贡献开源项目的基础。

四、YUM自动化管理 

1、YUM的定义与特点

YUM的定义

YUM (Yellowdog Updater, Modified) 是一种开源的、高层次的软件包管理工具,广泛用于基于RPM的软件包管理系统中,如Red Hat Enterprise Linux (RHEL)、CentOS、Fedora等发行版。YUM通过简化安装、更新和管理RPM包的过程,尤其是在处理软件包依赖关系时,使得系统管理员和用户能够更加方便地维护Linux系统上的软件。

YUM的特点

YUM具有以下几个显著特点:

1. 自动处理依赖关系:

  • YUM可以自动解析并处理软件包的依赖关系。这意味着当用户安装一个软件包时,YUM会自动检查并安装所有所需的依赖包,避免了手动解决依赖问题的麻烦。


2. 使用远程仓库:

  • YUM能够从远程仓库中下载和安装软件包。这使得软件的安装和更新变得非常方便,只需网络连接,YUM即可从指定的仓库中获取所需的软件包及其依赖项。


3. 方便的软件包更新和升级:

  • YUM可以轻松地更新和升级系统上的所有已安装软件包,确保系统始终保持最新的状态。它还支持通过YUM存储库中的版本信息自动选择适当的软件包进行更新。

 

2、YUM与RPM的关系 

YUM 和 RPM 是两种用于管理 Linux 系统上软件包的工具,它们之间有着密切的关系,通常在基于 RPM 的 Linux 发行版(如 Red Hat、CentOS、Fedora)中配合使用。

1. 基础关系

  • RPM (Red Hat Package Manager) 是一种底层的包管理工具,用于安装、升级、卸载、查询和验证 RPM 格式的软件包。RPM 直接与软件包进行交互,但它不会自动处理软件包的依赖关系。
  • YUM (Yellowdog Updater, Modified) 是一个基于 RPM 的高层次包管理工具。YUM 使用 RPM 作为底层工具,但在其基础上添加了自动解决依赖关系的能力,并支持从远程仓库中下载安装软件包。

2. 各自的角色

RPM:

  • 软件包安装和管理:RPM 直接操作 .rpm 文件,用于软件包的安装、升级、卸载等。
  • 依赖关系检查:RPM 具有基本的依赖关系检查功能,但如果依赖未满足,会导致安装失败,需要用户手动解决依赖问题。
  • 低级管理工具:RPM 是一个低级工具,适用于需要精细控制软件包管理的场景,如在没有网络连接或需要强制安装某些包时。

YUM:

  • 自动依赖管理:YUM 会自动解决软件包的依赖关系。当用户安装或更新一个包时,YUM 会检查依赖项,并自动下载和安装所需的依赖包。
  • 仓库管理:YUM 从配置的远程仓库中下载和安装软件包,用户只需指定软件包名称而无需手动处理依赖关系或查找依赖包。
  • 系统更新:YUM 能够一次性更新系统上所有已安装的软件包,确保系统保持最新状态。
  • 高级功能:YUM 提供了更多高级功能,如组包安装、插件扩展、历史记录与回滚等,使得软件管理更为简便和灵活。

3. 工作流程

  • YUM 调用 RPM:当用户使用 YUM 安装、更新或卸载软件包时,YUM 会首先从配置的仓库中检索和下载所需的 RPM 包及其依赖包,然后使用 RPM 工具执行实际的软件包管理操作。因此,YUM 是建立在 RPM 之上的,它是 RPM 的一个前端工具。
  • YUM 解决依赖,RPM 执行操作:YUM 负责处理复杂的依赖关系并选择合适的软件包版本,而 RPM 则负责实际的软件包操作,如将文件复制到系统中、执行安装脚本等。

3、配置YUM仓库 

1. 创建或编辑仓库文件:

在 /etc/yum.repos.d/ 目录中创建或编辑 .repo 文件。例如,可以创建一个名为 custom.repo 的文件:

sudo vi /etc/yum.repos.d/custom.repo


2. 配置仓库文件:

在文件中添加如下内容:

[customrepo]
name=Custom Repository
baseurl=http://example.com/repo/
enabled=1
gpgcheck=1
gpgkey=http://example.com/repo/RPM-GPG-KEY-customrepo


配置项说明:

  • baseurl:远程仓库的 URL 地址。
  • gpgkey:GPG 公钥的 URL 地址,用于验证软件包的签名。

3. 清除缓存并更新仓库列表:

同样需要清除缓存并更新 YUM 仓库列表:

yum clean all
yum repolist

 

4、使用YUM安装、卸载软件 

1. 安装软件包:

使用 install 命令安装指定的软件包。如果软件包有依赖关系,YUM 会自动下载并安装所需的依赖包。

sudo yum install package_name


例如,安装 httpd(Apache HTTP 服务器):
 

sudo yum install httpd

2. 卸载软件包:

使用 remove 命令卸载指定的软件包。YUM 会自动处理并卸载该软件包及其不再需要的依赖包。

sudo yum remove package_name


例如,卸载 httpd:

sudo yum remove httpd

 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

相关文章:

【Linux】中的软件安装:深入探索RPM、SRPM与YUM

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Linux的起源与发展 2、RPM、SRPM与YUM的简要介…...

uniapp自定义请求头信息header

添加请求头:uniapp自定义请求头信息header,如下:添加tenant-id参数 代码...

SpringBoot整合Liquibase

1、是什么? Liquibase官网 Liquibase是一个开源的数据库管理工具,可以帮助开发人员管理和跟踪数据库变更。它可以与各种关系型数据库和NoSQL数据库一起使用,并提供多种数据库任务自动化功能,例如数据库迁移、版本控制和监控。Li…...

虚幻5|给武器添加碰撞检测与伤害

本章内容衔接上两章,需要完成上两章才能用本章内容 虚幻5|角色武器装备的数据库学习(不只是用来装备武器,甚至是角色切换也很可能用到)-CSDN博客虚幻5|普通攻击,使用接口更方便-CSDN博客 如有疑问,可访问…...

RESTful API设计指南:构建高效、可扩展的Web服务

目录 引言 一.RESTful API概述 二.设计原则 2.1. 资源导向 2.2. 使用标准的HTTP方法 2.3. 无状态通信 2.4. 可缓存响应 2.5. 分层系统 2.6. 按需加载代码(可选) 2.7. HATEOAS 三.最佳实践 3.1. 明确资源和子资源 3.2. 使用合适的HTTP状态码 …...

黑马头条vue2.0项目实战(九)——编辑用户资料

目录 1. 创建组件并配置路由 2. 页面布局 3. 展示用户信息 4. 修改昵称 5. 修改性别 6. 修改生日 7. 修改头像 7.1 图片上传预览 7.2 使用纯客户端的方式处理用户头像上传预览 7.3 头像裁切 7.4 纯客户端的图片裁切上传流程 7.5 Cropper.js 图片裁剪器的基本使用 …...

43.【C语言】指针(重难点)(F)

目录 15.二级指针 *定义 *演示 16.三级以及多级指针 *三级指针的定义 *多级指针的定义 17.指针数组 *定义 *代码 18.指针数组模拟二维数组 往期推荐 15.二级指针 *定义 之前讲的指针全是一级指针 int a 1; int *pa &a;//一级指针 如果写成 int a 1; int *pa &a…...

【STM32+HAL】杆球控制系统

一、前言 2017年电赛出了道板球控制系统题目,现写一个简化版本——杆球控制系统,以此记录电赛集训生活。 二、题目分析 最终采取的方案是:OpenMV读取小球的当前位置,并将坐标值传给STM32端,再由32通过电机改变杆的位置…...

用Python实现9大回归算法详解——04. 多项式回归算法

多项式回归 是线性回归的一种扩展,它通过将输入特征的多项式项(如平方、立方等)引入模型中,以捕捉数据中非线性的关系。虽然多项式回归属于线性模型的范畴,但它通过增加特征的多项式形式,使得模型能够拟合非…...

vue打包更新packge.json版本号

VUE项目打包自动更新版本号 此方法只针对 Vue 如果使用其他框架,可以此参照作为参考 一、先看效果 二、创建 buildVersion.js 文件 文件内容 目前只针对3位版本号 递增规则是 每次更新 加一次小版本,10次小版本向前递增一个版本。如:1.0.9 递…...

计算机视觉技术解析:从基础到前沿

第一部分:计算机视觉基础与基本原理 计算机视觉是人工智能领域的一个重要分支,旨在使计算机能够理解和处理图像和视频数据。随着深度学习技术的飞速发展,计算机视觉已经在许多实际应用场景中取得了显著的成果,如图像识别、目标检…...

unity游戏开发003:深入理解Unity中的坐标系

Unity游戏开发 “好读书,不求甚解;每有会意,便欣然忘食。” 本文目录: Unity游戏开发 Unity游戏开发深入理解Unity中的坐标系前言1. 坐标轴2. 左手坐标系3. 世界坐标系 vs. 局部坐标系4. 坐标变换5. 注意事项 总结 深入理解Unity中…...

伊索寓言两则

马和驴 马为自己精美的马具感到骄傲,在大马路上遇见了驴子子正驮着重担挪着步子,挡了路,马儿没法过去,就不耐烦叫道:真想踢你两脚,好让你走快点。驴子沉默不语,但没忘马儿的傲慢。不久后马儿患…...

嵌入式硬件产品开发:编码文件规则

目录 简介 文件内容的一般规则 文件名命名的规则 简介 一个工程是往往由多个文件组成。 这些文件怎么管理、怎么命名都是非常重要的。 文件内容的一般规则 【规则1】每个头文件和源文件的头部必须包含文件头部说明和修改记录。 源文件和头文件的头部说明必须包含的内容和次…...

设计模式 - 组合模式

💝💝💝首先,欢迎各位来到我的博客!本文深入理解设计模式原理、应用技巧、强调实战操作,提供代码示例和解决方案,适合有一定编程基础并希望提升设计能力的开发者,帮助读者快速掌握并灵活运用设计模式。 💝💝💝如有需要请大家订阅我的专栏【设计模式】哟!我会定…...

打靶记录11——Billu_b0x

靶机: https://download.vulnhub.com/billu/Billu_b0x.zip难度: 中(两种攻击路线) 目标: 取得root权限 涉及的攻击方法: 主机发现端口扫描Web信息收集SQL注入(Sqlmap跑不出来)…...

一、在cubemx上配置sd和fatfs示例演示

一、sd和fatfs的配置流程界面 1、选择sd4bits 根据自己的sd卡的硬件插槽进行选择。 2、fatfs配置由于使用的是sd卡所以直接选择sd选项 3、程序中对sd卡的初始化需要进行改动,直接使用默认的参数sd卡是挂载不上的。 4、在sd卡挂载好后,就可以使用文件系统…...

C++ 语言特性02 - 命名空间

一:概述 现代C中的命名空间是什么? C中的命名空间允许用户在命名空间范围内对类、方法、变量和函数等实体进行分组,而不是在全局范围内使用。这可以防止大型项目中的类、方法、函数和变量之间发生命名冲突。命名空间将开发人员编写的代码组织…...

drools规则引擎 规则配置文件drl语法使用案例

前提:环境搭建,参考博文springboot整合drools规则引擎 示例入门-CSDN博客案例1,商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分订单pojo编写 package cn.beijing.model;import lom…...

C++编程:高性能通信组件Capnproto与Protobuf的对比分析

文章目录 0. 概要1. 测试环境2. 测试方法3. 测试结果及分析3.1 延迟测试3.2 吞吐量测试3.3 稳定性测试3.4 一对二测试记录3.5 二对一测试记录3.6 Inter-process 单个点开销分析 4. CapnProto 与 Protobuf 的对比测试总结 0. 概要 本文主要探讨了两种高性能通信组件&#xff1a…...

【Python读书数据,并计算数据的相关系数、方差,均方根误差】

为了处理Python中的读书数据(假设这里指的是一系列关于书籍阅读量或评分的数据),并计算这些数据的相关系数、方差以及均方根误差(RMSE),我们首先需要明确数据的结构。这里,我将假设我们有一组关…...

垃圾收集器G1ZGC详解

G1收集器(-XX:UseG1GC) G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征. G1将Java堆划分为多个大小相等的独立区域(Region),JVM目…...

AI芯片:高性能卷积计算中的数据复用

随着深度学习的飞速发展,对处理器的性能要求也变得越来越高,随之涌现出了很多针对神经网络加速设计的AI芯片。卷积计算是神经网络中最重要的一类计算,本文分析了高性能卷积计算中的数据复用,这是AI芯片设计中需要优化的重点之一&a…...

gitlab修改默认访问端口

GitLab 自带了一个 Nginx 服务器实例,用于处理 HTTP 和 HTTPS 请求。这个内置的 Nginx 服务器被配置为与 GitLab 应用程序实例一起工作,并且它负责处理所有前端的网络通信。 通过yum或者apt安装Gitlab时,nginx通常是被自带安装并配置好的。 …...

python——异常

Python 中的异常及继承关系 在 Python 中,异常用于表示程序在运行过程中遇到的错误,所有异常类最终都继承自 BaseException。通过异常处理,我们可以捕获和处理这些错误,避免程序崩溃。 Python 异常继承关系图 BaseException-- …...

【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统

使用TensorFlow.js在浏览器中进行情感分析是一个非常实用的应用场景。TensorFlow.js 是一个用于在JavaScript环境中训练和部署机器学习模型的库,使得开发者能够在客户端直接运行复杂的机器学习任务。对于情感分析,我们可以使用预先训练好的模型来识别文本…...

Python——扩展数据类型

Python 的扩展数据类型是对内置数据类型的增强,旨在解决特定需求,提供更高级的功能。我们来看一些常见的扩展数据类型及其原理、用途,并通过示例逐步讲解。 1. collections.namedtuple namedtuple 是增强的元组,允许用名称访问元…...

JavaScript 详解——Vue基础

第一章 JavaScript简介 为什么学习javascript ? JavaScript 是全球最流行的编程语言。 JavaScript 是属于 Web 的编程语言。 JavaScript 是 web 开发者必学的三种语言之一: HTML 定义网页的内容 CSS 规定网页的布局 JavaScript 对网页行为进行编程 …...

机械行业数字化生产供应链产品解决方案(十二)

我们为机械行业提供的数字化生产供应链解决方案通过集成物联网、人工智能和大数据技术,打造了一套智能化的生产和供应链管理系统,实现了从设计、生产到物流的全程数字化、智能化。该系统通过实时数据采集与分析,优化生产计划和资源配置&#…...

Git——命令集合

Git命令集合 1. 基本操作 1.1 创建版本库 初始化本地仓库:git init添加文件到仓库:git add | git add file file2… | git add.提交文件到本地仓库:git commit -m “message” 1.2 版本回退 查看状态: git status查看全部修改…...