软件包管理要点:apt、yum、dnf、pkg

介绍

大多数现代的Unix类型操作系统提供一个集中机制来查找和安装软件. 软件通常以包装形式分发,存储在包装库中。

包管理系统不仅仅是一次性安装软件,还提供了升级已安装的软件包的工具。包存库有助于确保代码已被测试用于您的系统,并且已安装的软件版本已得到开发人员和包维护者的批准。

在配置服务器或开发环境时,往往需要超越官方存储库。在一个发行版的稳定版本中的包可能过时,尤其是在涉及到新的或快速变化的软件的情况下。

本指南旨在为各种发行版找到、安装和升级包的基本知识提供快速参考,并应该帮助您在系统之间翻译这些知识。

包装管理系统:简要概述

大多数包系统都是围绕包文件的集合构建的。包文件通常是包含软件所使用的编译应用程序和其他资源的档案,以及安装脚本。

虽然它们的功能和优势在很大程度上相似,但包装格式和工具因平台而异:

  • 对于 Debian/Ubuntu: .debaptdpkg 安装的包* 对于 Rocky/Fedora/RHEL: .rpmyum 安装的包* 对于 FreeBSD: .txzpkg 安装的包

在 Debian 和基于 Debian 的系统中,如 Ubuntu、Linux Mint 和 Raspbian,包的格式是.deb 文件。 `apt' 是先进的包装工具,提供用于大多数常见操作的命令:搜索存储库,安装包集及其依赖,并管理升级。

大多数Debian衍生发行版的最近版本包括一个单一的apt命令,它为传统上通过更具体的apt-getapt-cache处理的常见操作提供了简洁和统一的界面。

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

FreeBSD 的二进制包系统由pkg命令管理。FreeBSD 还提供 Ports Collection,一个本地目录结构和工具,允许用户使用 Makefiles 直接从源头接收、编译和安装包,通常使用pkg更方便,但偶尔无法使用预编译的包,或者您可能需要更改编译时间选项。

更新包列表

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

  • 对于 Debian / Ubuntu: sudo apt update
  • 对于 Rocky / Fedora / RHEL: dnf check-update
  • 对于 FreeBSD 包: sudo pkg update
  • 对于 FreeBSD 端口: sudo portsnap fetch update

升级安装的包

确保计算机上安装的所有软件都保持最新状态,如果没有软件包系统,这将是一个巨大的任务,您将不得不跟踪上游的变化和数百个不同的软件包的安全警报,而软件包管理器并不能解决您在升级软件时遇到的每一个问题,但它确实允许您通过几个命令维护大多数系统组件。

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

  • 对于 Debian / Ubuntu: sudo apt upgrade
  • 对于 Rocky / Fedora / RHEL: sudo dnf upgrade
  • 对于 FreeBSD 包: sudo pkg upgrade

找到一个包

大多数发行版都提供图形或菜单驱动的包集前端,这些可以是搜索类别和发现新软件的好方法,但是,最快、最有效的方法是使用命令行工具搜索包。

  • 对于 Debian / Ubuntu: apt search_string
  • 对于 Rocky / Fedora / RHEL: dnf search_string
  • 对于 FreeBSD 包: pkg search_string

<$>[注] **注:**在Rocky、Fedora或RHEL上,您可以使用DNF搜索所有一起搜索包标题和描述,在FreeBSD上,您可以使用pkg搜索 -D <$>搜索描述。

查看有关特定包的信息

在决定要安装什么时,通常有助于阅读包的详细描述,以及可人读的文本,这些内容通常包括版本号和包依赖的列表等元数据。

  • 对于 Debian / Ubuntu: apt show package
  • 对于 Rocky / Fedora / RHEL: dnf info package
  • 对于 FreeBSD Packages: pkg info package
  • 对于 FreeBSD Ports: cd /usr/ports/category/port && cat pkg-descr

从仓库中安装一个包

一旦你知道一个包的名称,你通常可以用一个命令来安装它及其依赖,一般来说,你可以通过列出它们全部来提供多个包来同时安装。

  • 对于 Debian / Ubuntu: sudo apt install package
  • 对于 Rocky / Fedora / RHEL: sudo dnf install package
  • 对于 FreeBSD Packages: sudo pkg install package

从本地文件系统中安装一个包

有时,即使软件尚未正式为特定操作系统包装,开发者或供应商会提供可下载的软件包文件. 您通常可以通过您的 Web 浏览器或在命令行上的弯曲来获取这些文件。

在 Debian 衍生系统中,dpkg处理个别的包文件,如果一个包具有未满足的依赖性,则gdebi通常可以用来从官方存储库中获取它们。

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

  • 对于 Debian / Ubuntu: sudo dpkg -i package.deb
  • 对于 Rocky / Fedora / RHEL: sudo dnf install package.rpm
  • 对于 FreeBSD Packages: sudo pkg add package.txz

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

由于包管理器知道哪个文件是由一个数据包提供的,它通常可以清洁地从系统中删除它们,如果软件不再需要。

  • 对于 Debian / Ubuntu: sudo apt remove package
  • 对于 Rocky / Fedora / RHEL: sudo dnf erase package
  • 对于 FreeBSD Packages: sudo pkg delete package

求助

除了基于 Web 的文档,请记住,Unix 手册页面(通常称为 man 页面)可用于大多数壳中的命令。

1man page

中,您可以使用箭头键导航。 按 / 以搜索页面中的文本,并按 q 以停止。

  • 对于 Debian / Ubuntu: man apt
  • 对于 Rocky / Fedora / RHEL: man dnf
  • 对于 FreeBSD 包: man pkg
  • 对于 FreeBSD 端口: man 端口

结论和进一步阅读

本指南概述了可以在系统之间进行交叉引用的操作,但只对复杂主题的表面进行扫描。

Published At
Categories with 技术
comments powered by Disqus