包管理基础:apt、yum、dnf、pkg

来自菜鸟教程
跳转至:导航、​搜索

介绍

大多数现代类 Unix 操作系统都提供了一种用于查找和安装软件的集中机制。 软件通常以 的形式分发,保存在 存储库 中。 使用包称为 包管理 。 包提供操作系统的核心组件,以及共享库、应用程序、服务和文档。

包管理系统不仅仅可以一次性安装软件。 它还提供了用于升级已安装软件包的工具。 包存储库有助于确保代码已经过审查,可以在您的系统上使用,并且已安装的软件版本已得到开发人员和包维护者的批准。

在配置服务器或开发环境时,通常需要超越官方存储库。 发行版的稳定版本中的软件包可能已经过时,尤其是在涉及新的或快速变化的软件时。 尽管如此,包管理对于系统管理员和开发人员来说是一项至关重要的技能,而用于主要发行版的大量打包软件是一种巨大的资源。

本指南旨在作为在各种发行版上查找、安装和升级软件包的基础知识的快速参考,并应帮助您在系统之间转换这些知识。

包管理系统:简要概述

大多数包系统都是围绕包文件的集合构建的。 包文件通常是一个存档,其中包含已编译的应用程序和软件使用的其他资源,以及安装脚本。 包还包含有价值的元数据,包括它们的 依赖项,安装和运行它们所需的其他包的列表。

虽然它们的功能和优势大体相似,但打包格式和工具因平台而异:

  • 对于 Debian / Ubuntu:由 aptdpkg 安装的 .deb 软件包
  • 对于 Rocky / Fedora / RHEL:由 yum 安装的 .rpm 软件包
  • 对于 FreeBSD:由 pkg 安装的 .txz 软件包

在 Debian 和基于它的系统中,如 Ubuntu、Linux Mint 和 Raspbian,包格式是 .deb 文件。 apt,高级打包工具,提供用于最常见操作的命令:搜索存储库、安装包集合及其依赖项以及管理升级。 apt 命令作为低级 dpkg 实用程序的前端运行,该实用程序处理本地系统上各个 .deb 文件的安装,有时直接调用。

大多数 Debian 派生发行版的最新版本都包含一个 apt 命令,它为传统上由更具体的 apt-get 和 [ X231X]。

Rocky Linux、Fedora 和 Red Hat 家族的其他成员使用 RPM 文件。 这些曾经使用名为 yum 的包管理器。 在最新版本的 Fedora 及其衍生版本中,yum 已被 dnf 取代,这是一个现代化的分支,保留了 yum 的大部分界面。

FreeBSD 的二进制包系统使用 pkg 命令进行管理。 FreeBSD 还提供了 Ports Collection,这是一个本地目录结构和工具,允许用户使用 Makefiles 直接从源代码获取、编译和安装包。 使用 pkg 通常更方便,但有时预编译的包不可用,或者您可能需要更改编译时选项。

更新软件包列表

大多数系统都保留一个本地数据库,其中包含可从远程存储库获得的软件包。 最好在安装或升级软件包之前更新此数据库。 作为此模式的部分例外,dnf 将在执行某些操作之前检查更新,但您可以随时询问是否有可用更新。

  • 对于 Debian / Ubuntusudo apt update
  • 对于 Rocky / Fedora / RHELdnf check-update
  • 对于 FreeBSD 软件包sudo pkg update
  • 对于 FreeBSD 端口sudo portsnap fetch update

升级已安装的软件包

如果没有软件包系统,确保机器上所有安装的软件保持最新将是一项艰巨的任务。 您必须跟踪数百个不同包的上游更改和安全警报。 虽然包管理器并不能解决您在升级软件时遇到的所有问题,但它确实使您能够使用一些命令来维护大多数系统组件。

在 FreeBSD 上,升级已安装的端口可能会引入重大更改或需要手动配置步骤。 在使用 portmaster 升级之前,最好先阅读 /usr/ports/UPDATING

  • 对于 Debian / Ubuntusudo apt upgrade
  • 对于 Rocky / Fedora / RHELsudo dnf upgrade
  • 对于 FreeBSD 软件包sudo pkg upgrade

查找包裹

大多数发行版都为软件包集合提供图形或菜单驱动的前端。 这些是按类别浏览和发现新软件的好方法。 然而,通常最快和最有效的定位包的方法是使用命令行工具进行搜索。

  • 对于 Debian / Ubuntuapt search search_string
  • 对于 Rocky / Fedora / RHELdnf search search_string
  • 对于 FreeBSD 软件包pkg search search_string

注意: 在 Rocky、Fedora 或 RHEL 上,您可以使用 dnf search all 一起搜索包标题和描述。 在 FreeBSD 上,您可以使用 pkg search -D 搜索描述


查看有关特定包的信息

在决定要安装什么时,阅读软件包的详细描述通常很有帮助。 除了人类可读的文本外,这些通常还包括版本号等元数据和包的依赖项列表。

  • 对于 Debian / Ubuntuapt show package
  • 对于 Rocky / Fedora / RHELdnf info package
  • 对于 FreeBSD 软件包pkg info package
  • 对于 FreeBSD 端口cd /usr/ports/category/port && cat pkg-descr

从存储库安装包

一旦你知道了一个包的名字,你通常可以用一个命令来安装它和它的依赖。 通常,您可以通过将它们全部列出来提供多个包来一次安装。

  • 对于 Debian / Ubuntusudo apt install package
  • 对于 Rocky / Fedora / RHELsudo dnf install package
  • 对于 FreeBSD 软件包sudo pkg install package

从本地文件系统安装包

有时,即使软件没有为给定的操作系统正式打包,开发人员或供应商也会提供包文件供下载。 您通常可以使用 Web 浏览器或通过命令行上的 curl 检索这些信息。 一旦一个包在目标系统上,它通常可以用一个命令安装。

在 Debian 派生系统上,dpkg 处理单独的包文件。 如果一个包有未满足的依赖关系,gdebi 通常可以用于从官方存储库中检索它们。

在 Rocky Linux、Fedora 或 RHEL 上,dnf 用于安装单个文件,并且还将处理所需的依赖项。

  • 对于 Debian / Ubuntusudo dpkg -i package.deb
  • 对于 Rocky / Fedora / RHELsudo dnf install package.rpm
  • 对于 FreeBSD 软件包sudo pkg add package.txz

删除一个或多个已安装的软件包

由于包管理器知道给定包提供了哪些文件,因此如果不再需要该软件,它通常可以将它们从系统中彻底删除。

  • 对于 Debian / Ubuntusudo apt remove package
  • 对于 Rocky / Fedora / RHELsudo dnf erase package
  • 对于 FreeBSD 软件包sudo pkg delete package

得到帮助

除了基于 Web 的文档之外,请记住 Unix 手册页(通常称为 手册页 )可用于来自 shell 的大多数命令。 要读取一页,请使用 man

man page

man 中,您可以使用箭头键进行导航。 按/在页面内搜索文本,按q退出。

  • 对于 Debian / Ubuntuman apt
  • 对于 Rocky / Fedora / RHELman dnf
  • 对于 FreeBSD 软件包man pkg
  • 对于 FreeBSD 端口man ports

结论和进一步阅读

本指南概述了可以在系统之间交叉引用的操作,但仅涉及复杂主题的表面。 有关给定系统的更多详细信息,您可以查阅以下资源: