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. 本质共同点?

    • 都是"包 + 仓库 + 依赖管理"的完整体系;
    • 功能上高度相似,只是实现和习惯不同。
相关推荐
怪我冷i2 小时前
win11使用minikube搭建K8S集群基于podman desktop( Fedora Linux 43)
linux·kubernetes·ai编程·ai写作·podman
我是谁??2 小时前
Rocky9.2离线安装docker和NVIDIA Container Toolkit训练环境搭建
运维·docker·容器
本贾尼2 小时前
VMware的Ubuntu虚拟机显示网络有限线缆已被拔出的问题以及解决方法
linux·运维·ubuntu
石像鬼₧魂石2 小时前
Cobalt Strike(简称 CS)专业的红队安全测试工具
linux·windows·安全·ubuntu
oMcLin2 小时前
如何在 Linux 上的 aaPanel 中使用 Docker 部署 WordPress 博客:从配置到上线一站式教程
linux·运维·docker
chen_mangoo2 小时前
Android10低电量无法打开相机
android·linux·驱动开发·嵌入式硬件
tianyuanwo2 小时前
Linux 系统日志完全指南:从 syslogd 到 rsyslog 的深度解析
linux·运维·syslog·rsyslog
pengdott2 小时前
Linux用户态与内核态的深度剖析
linux·运维·服务器
ONE_SIX_MIX2 小时前
debian 13 使用 nvidia 官方 apt repo 仓库,获得最新显卡驱动
运维·windows·debian