【Linux】rpm和yum包管理
1.安装包和程序关系
用一个形象的示例解释在计算机中安装包和程序的关系:
程序=想要的玩具(如微信,qq)。本质是存储在硬盘上,等待被CPU执行的代码和数据
安装包=快递盒。快递盒中包含玩具的零部件、说明书、以及安装工具。目的是为了将玩具组装好,即将软件安装到你的电脑上。
| Windows概念 | Linux对应概念 | 说明 |
|---|---|---|
| 安装包 (.exe / .msi) | RPM包 (.rpm) / DEB包 (.deb) | 这就是“快递盒”,里面装着编译好的程序文件。 |
| 双击安装包 | rpm -ivh或yum install | 执行安装过程,把文件解压到系统指定位置。 |
| 程序的安装位置 | /usr/bin/、/usr/lib/、/etc/ | Linux没有C盘,它把可执行命令放/usr/bin,库文件放/usr/lib,配置文件放/etc。 |
| 程序启动入口 (.exe) | 命令(如nginx、python) | 在Linux里,程序本体通常不叫.exe,而是一个无后缀的二进制文件(如/usr/bin/nginx),你在终端敲命令就是在运行它。 |
| 快捷方式 | 软链接 (ln -s) | 相当于Windows的桌面快捷方式。 |
在Linux环境下:
RPM包(快递盒):不会永久存放,用yum下载暂存在/var/cache,装完就删除
程序(玩具):安装后,它的可执行命令永久存放在
/usr/bin/下,库文件在/usr/lib下。你想用的时候,直接在终端敲命令名(如nginx),系统就去/usr/bin/里找到它并运行。
2.Linux包管理器下载流程
2.Linux包管理器下载流程
第一步(下载):当你敲下
yum install nginx时,系统会根据软件源(Repo)里的地址,把nginx.rpm这个“快递盒”下载到本地的缓存目录/var/cache里。第二步(校验):下载完后,系统会核对这个包的MD5/SHA256校验码,确保下载过程没损坏,防止文件不完整。
第三步(解压安装):系统调用底层的
rpm工具,把这个“快递盒”拆开,把里面的程序本体(可执行文件)解压到/usr/bin/,把配置文件放到/etc/,把库文件放到/usr/lib/。同时把安装信息写入本地的RPM数据库(方便以后卸载)。第四步(缓存保留):安装完成后,原始的
.rpm文件并不会被自动删除。它会默认留在缓存目录里。
3.镜像和本地源
镜像(Mirror):指的是“内容完全一致”。它是官方仓库在别的服务器上的一份克隆副本。
本地源(Local Repo):指的是“位置在本地”。它是相对于你的电脑而言,处在内网或本机硬盘上的软件仓库。
①“本地源”的“本地”是相对于“公网(Internet)”而言的,绝不是相对于“本机(这台物理机)”。
②只要这个源服务器和你的测试机在同一个内网(局域网)里,IP地址能互通(ping通),它就叫做“本地源”。
③你
yum install时,流量是走内网(局域网)还是走公网(互联网)?走内网,就叫使用本地源;走公网,就叫使用远程镜像源。
它们的关系是:本地源通常是通过“同步(克隆)”一个远程镜像来搭建的。
在本地配置文件查看当前所访问源类型:
你打开 Linux 的源配置文件(
/etc/yum.repos.d/xxx.repo),里面的baseurl=后面跟的地址,直接说明了它们的身份:
如果
baseurl=后面是互联网地址(如https://mirrors.aliyun.com):这就是在访问公共镜像。如果
baseurl=后面是内网IP(如http://192.168.1.100/centos)或file:///mnt/cdrom:这就是在访问本地源。
4.rpm
rpm用于互联网下载包的打包及安装工具,包含在某些Linux分发版中,处理具有.RPM扩展名的文件。RPM是redHat Package Manager的缩写,类似windows的setup.exe
4.1简单查询指令
rpm -qa
功能描述:查询已安装的rpm列表
(注:上面2提到的缓存目录/var/cache中保存的是下载的.rpm文件本身,当这些rpm文件被RPM工具解压安装后,系统在数据库写入这条安装记录,此时rpm -qa就能查到此条记录)
应用示例:查询当前系统是否安装了firefox
rpm -q 软件包名
功能描述:查询软件包是否安装
应用实例:指定查询firefox是否安装
rpm -qi 软件包名
功能描述:查询软件包的详细信息
应用实例:查询firefox安装包详细信息
rpm -ql 软件包名
功能描述:查询软件包中的文件
应用实例:查看firefox软件包在本机所安装的文件
rpm -qf 文件全路径名
功能描述:查询文件所属的软件包
应用实例:
eg1 查询gcc文件属于哪个软件包
eg2 查询gcc目录属于哪个软件包
注:
在 Linux 文件系统中,一个目录可以被多个 RPM 软件包同时声明为“自己的”(在打包规范中用
%dir标记)。
/lib/gcc是所有 GCC 相关工具链存放子文件的“大本营”。为了互不冲突,C 编译器、C++ 编译器、Fortran 编译器、数学库等都会把各自的子目录或文件放进去。因此,在安装时,它们都会在 RPM 数据库里登记:“我也拥有/lib/gcc这个目录”。当你用
rpm -qf查询目录(而不是具体文件)时,RPM 会把所有登记过拥有该目录的包全部列出来,所以就出现了你看到的 5 个。
4.2 删除指令
rpm -e 软件包名
功能描述:删除软件,将安装包解压进系统的文件和注册表信息全部删除。
注:
如果其他软件包依赖于要卸载的软件包,则卸载时会产生错误信息
应用实例:删除firefox
4.3 安装指令
rpm -ivh RPM包全路径名称
功能描述:安装rpm包,即安装软件
参数说明:
i(install) 安装
v(verbose)提示
h(hash)进度条
应用实例:安装firefox
5.yum
yum也是包管理器,底层调用rpm。能够自动从yum源下载并安装软件包到本地,同时可以自动处理依赖性关系,并且一次性安装所有依赖的软件包。
5.1 基本指令
yum list | grep xx软件包
功能描述:查询yum服务器是否有指定的软件包
应用实例:查询yum是否有firefox
yum install xx软件包
功能描述:安装指定的软件包
应用实例:使用yum 安装firefox
yum remove xx软件包
功能描述:卸载指定的软件包,并自动处理依赖关系,将不再被其他软件使用的依赖包一并移除。
参数说明:
-y 自动确认,跳过卸载过程中的交互式确认提示
应用实例:卸载firefox
与 rpm -e 的区别:
rpm -e卸载时如果遇到其他软件包依赖该软件,会直接报错并停止卸载;而yum remove会自动分析依赖关系,把需要一并移除的依赖包也处理掉,卸载过程更省心。
6. rpm和yum区别
| rpm | yum | |
|---|---|---|
| 数据源 | 本地.rpm文件 | 网络 yum 源仓库 |
| 依赖处理 | ❌不处理,缺依赖直接报错 | ✅自动下载安装全部依赖 |
| 卸载 / 安装 | 直接操作本地包 | 联网解析,底层调用 rpm |
| 使用场景 | 手里已经有 rpm 文件,离线操作 | 绝大多数日常安装、升级软件 |
总结:
yum底层还是调用 rpm 去安装软件,但是 yum 多了这些能力:
- 联网访问 yum 源仓库,自动下载
.rpm- 自动分析依赖,把所有需要的包一并下载,调用 rpm 批量安装
- 处理升级,自动解决版本冲突
