【Linux】关于 Linux 软件包管理器你知道多少?

235 阅读4分钟

关于 Linux 软件包管理器你知道多少?

对于 Linux 用户来说,软件包管理器(Package Manager)是系统的核心工具之一。
无论是安装新软件、升级系统组件,还是解决依赖问题,包管理器都是不可或缺的。

而且对于Linux来说,“一切皆文件”的原理导致软件包管理器是它的一大特色, 也是非常好用的一个东西。

我们在Windows中,可能下载软件会需要应用商店or浏览器中下载,但是Linux不需要,直接输入指令install就可以下载到大部分你想下载的软件包。

今天就来讲讲软件包管理器的一些知识~


1. 软件包管理器的本质是什么?

简单来说,软件包管理器就是帮你管理软件安装、升级和卸载的工具,它背后的本质包括三个部分:

  1. 软件包仓库(Repository)

    • 软件包以二进制或者源码的形式存储在仓库里。
    • 仓库保证了软件的版本、完整性和依赖关系。
  2. 包数据库(Package Database)

    • 系统本地会维护一张数据库,记录每个已安装包的名称、版本、依赖和文件列表。
    • 包管理器会用它来判断软件是否需要更新或者是否存在冲突。
  3. 依赖管理机制(Dependency Resolver)

    • 软件往往依赖其他库,包管理器会自动下载缺失依赖,确保安装成功。
    • 这也是包管理器的核心能力之一,解决了手动安装依赖的痛点。

哎呀,其实说这些显得好像多专业多难懂似的,其实就是三个:软件包本身、告诉你有哪些软件包、软件包需要依赖啥才可以运行。


2. 常见的 Linux 软件包管理器

不同 Linux 发行版有不同的包管理器,主要可以分为两大类:

2.1 基于 Debian 系列(Ubuntu、Debian 等)

  • 工具aptdpkg

我们常用的就是apt。哎呀,Ubuntu用户可太熟悉了。

  • 软件包格式.deb

  • 特点

    • apt 更高层,自动处理依赖和更新;
    • dpkg 更底层,可以单独安装 .deb 包,但不会自动解决依赖。

示例

sudo apt update           # 更新仓库索引
sudo apt install vim      # 安装软件包
sudo apt remove vim       # 卸载软件包
sudo apt upgrade          # 升级所有可更新的软件包

2.2 基于 RedHat 系列(CentOS、Fedora、RHEL 等)

  • 工具yumdnfrpm

这里就主要是小红帽专用户,然后yum也是CentOS的专用指令了。

  • 软件包格式.rpm

  • 特点

    • dnfyum 的升级版,支持更智能的依赖处理;
    • rpm 用于底层操作,直接安装 .rpm 包。

示例

sudo dnf install git      # 安装软件包
sudo dnf remove git       # 卸载软件包
sudo dnf update           # 更新系统和软件包

2.3 其他类型(说实在的,不常用)

  • Arch Linuxpacman,滚动更新,依赖管理简洁。

  • Gentooemerge,源码编译安装,灵活但耗时。

  • 跨平台管理器snapflatpakbrew(Linux 版)

    • 支持沙盒安装,不依赖系统库,适合最新软件和跨发行版部署。

3. 软件包管理器的原理小揭秘~~~

apt 为例,它的流程大致如下:

  1. 更新索引

    • 访问远程仓库的索引文件,记录软件包版本和依赖信息。
  2. 依赖解析

    • 当你安装软件时,包管理器会扫描依赖树,判断哪些包需要安装或升级。
  3. 下载与安装

    • 下载软件包和依赖,按顺序安装,同时更新本地数据库。
  4. 后处理脚本

    • 有些包需要执行安装后脚本(如初始化配置),包管理器会自动处理。

注意注意!一切的一切都要依赖于远程仓库这个东西,所以当你要下载啥软件的时候,不妨去软件官网看看具体是咋下载,连接到指定仓库才可以下载成功。


4. 为什么包管理器比手动安装强?

  • 自动解决依赖:避免“库地狱”问题。
  • 版本管理:可以方便地升级、回滚软件版本。
  • 安全性:仓库中的包通常经过签名验证,降低安全风险。
  • 系统一致性:保证系统文件和配置不会被随意覆盖。

5. 小结~

其实写这一篇的目的,就是想带大家了解下软件包管理器的原理,但是在日常使用中,大家只需要知道指令该咋使用就ok了~

而且再者,现在大多数可视化界面和一些工具甚至不需要输入指令,还是跟Windows一样的点击安装就行,这样节省了写指令的时间,挺爽~