Linux yum和rpm
Linux 软件管理
在大多数Linux系统中,要对软件进行管理,通常由三种方式,分别是编译安装、包管理工具安装和通过仓库进行安装;
-
编译安装:需要手动解决依赖问题,不适合新手操作;
-
包管理工具安装:安装简单、不自动解决依赖问题,主要是处理单个软件包;
-
通过仓库管理:安装简单、能自动解决依赖问题,处理从仓库中获取和安装软件及其依赖的整个流程;
在Red Hat系列的Linux发行版中,例如redhat、centos、Fedora等使用的包管理工具是RPM,RPM是redhat package manager的缩写,通过RPM这个工具,可以轻松实现对单个软件包的管理。
rpm
RPM这个工具提供了很多使用选项,常用的就是一下几种
-
安装:-i
-
升级:-U
-
卸载:-e
-
查询:-q
安装升级
# 正常安装一个软件包
rpm -ivh xxx.rpm
# 升级一个软件包,如果原本不存在就直接安装
rpm -U xxx.rpm
# 强制安装一个软件包
rpm -i --force xxx.rpm
# 不检查依赖安装一个软件包
rpm -i --nodeps xxx.rpm
卸载操作
# 正常卸载
rpm -e xxx.rpm
查询操作
# 查看某个已安装的软件包
rpm -q
# 查询已安装的包的所有文件
rpm -ql xxx.rpm
# 查询所有已安装的包
rpm -qa
# 查看某个包是否被安装
rpm -q xxx.rpm
# 查询某个文件属于哪个软件包
rpm -qf file_name
yum
yum是Yellowdog Update Modifier的缩写,是基于rpm开发而来,yum提供了命令行界面,用户通过输入相关命令来实现软件包的管理。
要使用yum来进行软件管理,首先就需要yum仓库,yum仓库里面存放两类数据,第一类就是软件包,第二类就是元数据信息。
例如centos,如果不是最小化安装,镜像包里面就带了个离线的yum仓库,除了这种离线的yum仓库外,网络上还有很多现成的。
-
Packages:存放的是rpm软件包
-
repodata:存放的是软件包之间元数据信息和以来关系
yum工作原理
yum是一个C/S架构的基于RPM包管理的前端工具,yum服务端存放软件包相关数据,客户端就是我们的Linux主机。
-
首先客户端通过配置文件里面的配置连接到yum服务端
-
从yum服务端下载repodata文件,并从中检索对应信息,例如要安装mysql这个服务,就会检索安装mysql需要使用的软件包已经相关的依赖包
-
检索到对应的软件包后,会下载到Linux主机上,安装完成后会将这些下载的软件包删除,但是repodata文件会保存下来,后面再检索的时候可以直接通过本地的这个文件检索了。
yum客户端配置
像redhat系列的Linux发行版,出场就装了yum的,我们需要做的就是更改yum的配置文件,这样才能根据配置文件的信息连接到对应的服务端。
yum有两个配置文件,但是主配置文件我们一般不用改,只需要在/etc/yum.repos.d/下加入.repo结尾的配置文件就行了。
每个配置文件一般最少需要四个部分组成;
-
[ XXXX ] 仓库的唯一标识
-
name= XXX 仓库的描述信息
-
baseurl= XXXXX 仓库的地址
-
enabled=1|0 是否启动改仓库,不配置默认启用
-
gpgcheck=0|1 是否开启gpg校验
说明:
-
不指定enabled=1,默认enabled=1,标识启用这个仓库
-
一般情况下不用开启gpg校验,如果要开启,还需要gpgurl=xxx来指定GPG公钥的位置
-
通过baseurl来指定仓库地址的时候,需要在这个路径下存在repodata
-
baseurl支持四种路径(file:// http:// https:// ftp://),如果本地就存在yum仓库,使用file://来进行挂载。
例如:CentOS7 使用本地yum仓库配置yum配置文件
1、挂载本地光盘
[root@centos7 ~]# mkdir /mnt/misc
[root@centos7 ~]# mount /dev/sr0 /mnt/misc

2、写入/etc/fstab持久生效
[root@centos7 ~]# vim /etc/fstab
/dev/cdrom /mnt/misc/ iso9660 defaults 0 0

3、编辑yum的配置文件
vim /etc/yum.repos.d/local.repo
[local]
name=local_repo
baseurl=file:///mnt/misc
enabled=1
gpgcheck=0

4、清除yum缓存,就是删除本地已经存在的repodata文件等,因为旧的仓库元数据缓存可能就与新的仓库配置不匹配了,防止出现找不到软件包或依赖性解析失败。
yum clean all

5、确认仓库是否正常添加并列出
yum repolist

6、安装软件
yum install zip

yum服务端
除了本地镜像中带有一个yum仓库,还可以自建搭建一个yum仓库。最简单的就是用别人的,互连网上有很多在线yum源可以使用,直接将本地配置文件的baseurl指向对应地址即可。但是使用这种方法需要本地Linux主机能访问互连网。
国内常见的在线yum源:
#阿里云
https://mirrors.aliyun.com
#腾讯云
https://mirrors.cloud.tencent.com
#华为云
https://repo.huaweicloud.com/centos
#清华大学
https://mirrors.tuna.tsinghua.edu.cn
以为阿里云为例,为centos7配置yum客户端:
1、访问这个网址,选择操作系统为centos
https://mirrors.aliyun.com

2、根据centos版本选择指定的仓库,这儿有现成的repo文件,直接执行命令下载下来用就行了
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

3、测试是否可以正常使用
这些都是提供的yum源仓库,
4、此时便可进行软件下载了
yum install wget

yum的自带的变量
打开阿里云提供的配置文件,里面存在很多变量,这些变量都是yum自带的变量,会根据系统的信息来确定相关的值。
$releasever: 当前系统的发行版本。指的是OS的主版本号,如:8,7,6
$arch: CPU架构,变量的值通过 uname 命令得出,如:aarch64, i586, i686,x86_64等
$basearch:CPU的架构,系统基础平台;i386, x86_64
$contentdir:表示目录,比如:centos-8,centos-7
$YUM0-$YUM9:自定义变量
例如:
本地Linux主机是Centos7系统,所以这里的为7,$basearch为x86_64
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
说明:
-
basrurl可以一次性指定多个url地址的,换行写
-
在一个 .repo 文件中配置多个仓库,每个仓库的配置都以其唯一的 [repo-id] 开始。
私有yum仓库搭建
可以自己搭建一个yum仓库,只需要将相关的软件包拷贝到服务器上,然后通过createrepo 命令来生成repodata这个元数据信息文件。
createrepo命令格式:
createrepo 存放软件包的目录
例如:
1、先安装apache服务,centos上对应的软件包名叫作httpd
2、去一个在线的yum仓库或者本地光盘中将rpm包拷贝到http根目录的指定目录下
3、使用createrepo 来生成repodata元数据文件
4、给需要使用这个yum源的Linux主机配置yum的.repo 配置文件
5、测试是否正常使用
yum客户端的命令
yum clean all # 清除本地下载的rpm包缓存和repodata文件
yum makecache # 构建仓库的缓存,会下载yum仓库的repodata文件到本地
yum install packeg_name # 下载指定的软件包
yum localinstall packeg_name # 安装本地的rpm包,会自动下载相关依赖
# 只下载 不安装 不指定不指定 --downloaddir 选项,默认存放在/var/cache下
yum install package_name --downloadonly --downloaddir=/path/to/directory
# 使用特定仓库来下载软件包
yum install package_name --enablerepo=repository_name
yum remove package_name # 移除指定的软件包
yum list package # 查看指定的包是否存在yum源中
yum repolist # 查询本地配置了多少个yum源的信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了