Linux rpm 系和 debian 系发展史,相同,不同点详细介绍

下面这篇算是一篇"科普 + 入门扫盲",会分块来讲,方便你理解和以后查阅:


一、为什么会出现 rpm 系和 debian 系这两个大阵营?

1.1 背景:Linux 只是内核,不是"完整系统"

  • Linux 严格来说只是内核(kernel),没有软件管理、没有桌面、没有包管理。
  • 真正给你能用的"系统"是各种发行版(distribution),比如:
    • Debian、Ubuntu、Linux Mint...
    • Red Hat、CentOS、Fedora、openSUSE...
  • 这些发行版要解决一个核心问题:如何统一地安装、升级、卸载软件?
    → 于是就有了"包管理系统"。

1.2 两大主流:RPM 系与 Debian 系

历史上,各家厂商和社区在设计"包管理系统"时,走了两条主路线:

  1. Debian 系

    • 包格式:.deb
    • 底层包工具:dpkg
    • 典型发行版:Debian、Ubuntu、Linux Mint、Kali、Raspbian 等
    • 起源:Debian 项目是最早的社区驱动发行版之一,非常注重自由软件理念和社区规范。
  2. RPM 系

    • 包格式:.rpm
    • 底层包工具:rpm
    • 典型发行版:Red Hat Enterprise Linux (RHEL)、CentOS Stream、Fedora、openSUSE、AlmaLinux、Rocky Linux 等
    • 起源:最早由 Red Hat 提出并开源,后来被 SuSE 等其他发行版采用。

为什么会有两套?

本质上是历史演进 + 社区/公司各自独立发展:

  • 早期并没有统一标准,各家自己发挥;
  • Debian 有自己的一套规范(Debian Policy),Red Hat 也有自己对企业市场的考量(稳定性、商业支持);
  • 两边都积累了庞大的生态、工具链和用户群,很难也没必要强行统一。

目前的现实:

  • Linux 发行版绝大部分都属于这两个阵营之一。
  • 学会这两套,你基本上就能搞定主流 Linux 世界的包管理。

二、rpm 系和 debian 系的核心差异:从"包"讲起

2.1 包格式与底层工具

  • Debian 系

    • 包:.deb
    • 底层工具:dpkg
    • 高层前端:aptapt-getaptitude
  • RPM 系

    • 包:.rpm
    • 底层工具:rpm
    • 高层前端:yum(较旧)、dnf(新一代)、zypper(openSUSE)

可以这么理解:

  • dpkg / rpm:纯粹对"本地包文件"做安装/卸载,不自动解决依赖。
  • apt / yum / dnf / zypper:在 dpkg/rpm 之上做"依赖解析 + 仓库管理"。

2.2 包内部结构与元数据(粗略理解即可)

两家在"包里面存什么信息"上有异曲同工之处,都包含:

  • 二进制文件/库文件
  • 配置文件
  • 依赖信息(需要哪些包)
  • 安装前/安装后脚本(preinst/postinst、pre/post scripts)

只是格式和规范不同:

  • .deb:基于 ar 格式的归档,里边有 control.tar.*data.tar.* 等。
  • .rpm:有 spec 描述文件,构建后生成 rpm,元数据用自己的结构存储。

对普通用户来说:知道"这俩互不兼容"就够了。

Deb 系不直接安装 .rpm,RPM 系不直接安装 .deb

(虽然有 alien 之类的转换工具,但不推荐在正式环境这么干)


三、两大阵营在使用上的主要区别

下面用"日常运维/开发者视角"来比较:

3.1 软件安装与升级命令

Debian 系(以 Ubuntu 为例)

bash 复制代码
# 更新软件源索引
sudo apt update

# 升级已经安装的软件
sudo apt upgrade

# 安装软件
sudo apt install nginx

# 卸载软件(保留配置文件)
sudo apt remove nginx

# 卸载软件并删除配置文件
sudo apt purge nginx

# 安装本地 .deb 文件
sudo dpkg -i xxx.deb

RPM 系(以 RHEL/CentOS/Fedora 为例)

bash 复制代码
# 更新软件包索引 + 升级(yum/dnf 习惯上合在一起)
sudo dnf update
# 或更接近旧习惯的
sudo yum update

# 安装软件
sudo dnf install nginx

# 卸载软件
sudo dnf remove nginx

# 安装本地 .rpm 文件
sudo rpm -ivh xxx.rpm

可以看到:

  • 概念上类似:都有"底层工具 + 高级前端"。
  • 语法风格略有不同,但本质都在做:包查询 → 依赖解析 → 下载 → 安装。

3.2 仓库与软件源配置方式

Debian 系

  • 配置文件主要在:
    • /etc/apt/sources.list
    • /etc/apt/sources.list.d/*.list
  • 官方源 + PPA(Ubuntu 特有) + 第三方源(比如 Docker 的源、NodeSource 等)。

例子(Ubuntu):

text 复制代码
deb http://cn.archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse

RPM 系

  • RHEL/CentOS/Fedora:源配置在:
    • /etc/yum.repos.d/*.repo
  • SUSE/openSUSE:zypper 使用 /etc/zypp/repos.d/*.repo

例子(CentOS/RHEL 系):

ini 复制代码
[base]
name=CentOS-$releasever - Base
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1

差异在于:

  • Debian 系世界常说"apt 源 / 软件源";
  • RPM 系世界常说"repo"(仓库配置文件 [name] 段)。

本质上是类似的概念,只是文件格式与命名习惯不同。


3.3 依赖解决与冲突管理

  • 两边都有依赖解决机制:
    • apt 使用 libapt-pkg
    • yum/dnf 使用 libsolv 等进行 SAT 求解
  • 实际使用体验上,都可以做到:
    • 自动拉依赖
    • 自动卸载不需要的依赖(apt autoremovednf autoremove

细微差别:

  • RPM 系在某些复杂依赖和冲突场景下解决策略不同,因此老一代 RHEL/CentOS 上有时候会碰到"依赖地狱"的印象,但随着 dnf 的采用,这方面已经改善很多。
  • Debian/Ubuntu 上 apt 的一大优势是生态极其庞大、包统一程度高、依赖元数据普遍比较规范。

但对普通用户而言:
只要用官方源 + 常见第三方源,两边体验差异不大。


四、理念和生态层面的区别

4.1 社区驱动 vs 企业驱动(传统印象)

Debian 系:

  • Debian 本身完全社区驱动,有严格的社会契约、自由软件指导原则。
  • Ubuntu 由 Canonical 公司主导,但仍然建立在 Debian 基础上。
  • 整体更"社区化",常被用于个人桌面、科研、开发、教育等场景。

RPM 系:

  • RHEL 是 Red Hat(现已属于 IBM) 的企业产品,有明确的商业支持和认证体系。
  • CentOS 历史上是 RHEL 源码重编译的社区版,现在变成了 CentOS Stream,更偏向"RHEL 下游/上游中间态"。
  • openSUSE 与 SUSE Linux Enterprise 形成类似关系。
  • 更传统地面向企业服务器、数据中心、生产环境。

如今这种边界越来越模糊:

  • 企业也在用 Ubuntu LTS 做服务器;
  • 很多个人用户会用 Fedora、openSUSE 做桌面系统。

但历史印象和"生态定位"还是有点差异:

  • 想做"严肃的企业环境、要官方认证支持" → 往 RPM 家族(RHEL/SUSE)偏。
  • 想要广泛的开源社区生态、包多、教程多 → Debian/Ubuntu 世界非常强势。

4.2 默认配置风格和打包哲学

整体来说(有一定概括性,不是绝对):

  • Debian 系:

    • 打包时倾向于尽可能贴近"上游项目"的默认配置;
    • 注重自由软件原则,有严格的分区:main / contrib / non-free;
    • 为了兼容性、稳定性,经常会长期维护旧版本(stable)。
  • RPM 系(特别是 RHEL):

    • 更侧重稳定、可预测性和企业支持,有大量回移补丁(backport);
    • 包版本号有时较旧,但会补上安全修复;
    • 配置和布局更多考虑"企业场景"的一致性。

举个开发者常碰到的例子:

  • 在 Ubuntu 上包版本会更"新",对开发者友好;
  • 在 RHEL 上包版本可能偏旧,但足够稳定,适合生产环境,只要你不强求"最新特性"。

五、rpm 系和 debian 系的相同点(很重要)

不要被"阵营"迷惑,两者本质上有一堆共同点:

  1. 都是"二进制包 + 元数据 + 仓库 + 依赖解析"的包管理体系;
  2. 都支持从源码构建包,并形成可复现构建;
  3. 都有"基础系统 + 第三方仓库(epel、PPA、COPR等)"的扩展机制;
  4. 都强调:
    • 可升级
    • 可回滚(通过版本管理和日志)
    • 安全更新渠道(security updates)

从"学习成本"的角度:

  • 如果你已经会用 apt,再学 dnf/yum 非常简单;
  • 真正需要注意的,反而是各个发行版自己对 systemd、网络、firewalld 等工具的封装区别。

六、一些延伸相关知识

6.1 包管理 vs 容器(Docker)与跨发行版问题

很多人会问:

既然 rpm 和 deb 两套不兼容,那软件发布要打几个包?

现实中开发者的做法越来越多样:

  1. 传统方式:

    • 分别为 .deb.rpm 打包;
    • 提供 apt/yum 源;
    • 这对于需要跟系统深度集成的软件(数据库、中间件等)仍然很常见。
  2. 容器方式:

    • 不关心宿主机是 Debian 系还是 RPM 系;
    • 都通过 Docker 镜像发布(镜像内部仍然是某个发行版,比如 ubuntu:22.04almalinux:9);
    • 对用户来说:docker pull 即可。
  3. 通用发布方式:

    • 静态编译二进制 + 解压即用(如 Go 程序);
    • 使用 Flatpak、Snap、AppImage 等"跨发行版"打包。

这也是 rpm/deb 两系长期共存又共处的原因之一:

上层发布渠道在变,下层大家各用各的生态即可。


6.2 "系"不等于"发行版完全一样"

  • Debian 系 ≠ 所有操作都和 Debian 一模一样

    • Ubuntu 会加自己的一套工具(add-apt-repository、PPA 等);
    • Kali 会有安全工具仓库、默认策略不同;
    • Linux Mint 有自己的桌面环境和默认配置。
  • RPM 系内部差别同样存在

    • RHEL / CentOS Stream / Alma / Rocky 在兼容性上高度一致;
    • Fedora 更激进,版本更新更快;
    • openSUSE 用 zypperYaST,风格跟 RHEL 家族就有差距。

它们只是"底层包格式和工具链相同、打包体系类似",

但每个发行版还有很多上层差异。


6.3 新一代通用包管理与构建系统

了解一下名字即可:

  • Nix / Guix:函数式包管理,强调可复现、原子升级、回滚等,完全不同于 rpm/deb。
  • Spack / Conda:更偏向科学计算、Python/数据科学生态。
  • Flatpak/Snap:应用级容器包。

这些不会取代 rpm/deb 的系统级角色,但在某些场景(桌面应用、科研环境)会叠加使用。


七、作为用户/运维/开发者应该怎么选和学?

如果你是:

  1. 桌面/日常使用者

    • 推荐:Ubuntu / Linux Mint(Debian 系),资料最多,上手简单。
  2. 准备做运维/后端开发,接触公司生产环境

    • 要至少熟悉两边:
      • Ubuntu Server(Debian 系)
      • AlmaLinux/Rocky Linux(RHEL 兼容的 RPM 系)
    • 学会:
      • apt / dpkg 基本用法
      • dnf / rpm 基本用法
  3. 对打包有兴趣

    • Debian 系:了解 debuild, dpkg-buildpackage, debian/ 目录和 control 文件。
    • RPM 系:了解 .spec 文件、rpmbuild、SRPM。

八、总结一下(帮你记忆)

你可以用这几句话快速记住要点:

  1. 为什么有 rpm 系和 debian 系?

    因为不同社区/公司在早期各自设计了包管理系统和格式,后来都发展成大生态,没法也没必要统一。

  2. 最大实用差异?

    • 包格式不同:.deb vs .rpm
    • 工具命令不同:apt/dpkg vs dnf/yum/rpm
    • 生态侧重点:Debian/Ubuntu 偏社区和开发者,RHEL/SUSE 偏企业和稳定支持。
  3. 本质共同点?

    • 都是"包 + 仓库 + 依赖管理"的完整体系;
    • 功能上高度相似,只是实现和习惯不同。
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式