原文链接:https://www.tecmint.com/linux-package-management/

去年 8 月(原文时间:2018-09-19),Linux 基金会宣布了 LFCS 认证(Linux 基金会认证系统管理员),这对世界各地的系统管理员来说是一个绝佳的机会,可以通过基于性能的考试来证明他们有能力在 Linux 系统的整体操作支持方面取得成功。经过 Linux 基金会认证的系统管理员拥有专业知识,可确保有效的系统支持、一级故障排除和监控,包括最终在需要时将问题升级给工程支持团队。

本文是 10 个教程长系列的第 9 部分,今天在本文中我们将指导大家了解 LFCS 认证考试所需的 Linux 包管理。

Package Management(包管理)

简而言之,包管理是一种在系统上安装和维护(包括更新和可能删除)软件的方法。

在 Linux 的早期,程序仅作为源代码以及所需的手册页、必要的配置文件等分发。如今,大多数 Linux 发行商默认使用预先构建的程序或称为软件包的程序集,将其提供给准备在该发行版上安装的用户。然而,Linux 的奇迹之一仍然是可以获得要研究、改进和编译的程序的源代码。

How package management systems work(包管理系统如何工作)

如果某个包需要某个资源(例如共享库)或另一个包,则称其具有依赖性。所有现代包管理系统都提供某种依赖性解析方法,以确保安装包时,也会安装其所有依赖项。

Packaging Systems(包管理系统)

现代 Linux 系统上安装的几乎所有软件都可以在 Internet 上找到。它可以由发行版供应商通过中央存储库提供(其中可以包含数千个包,每个包都是专门为发行版构建、测试和维护的),也可以以源代码形式提供,可以手动下载和安装。

由于不同的发行版系列使用不同的软件包系统(Debian:.deb / CentOS:.rpm / openSUSE:专为 openSUSE 构建的 .rpm),因此用于一种发行版的软件包将与另一种发行版不兼容。然而,大多数发行版可能属于 LFCS 认证涵盖的三个发行版系列之一。

High and low-level package tools(高级和低级包工具)

为了有效地执行包管理任务,需要知道将有两种类型的可用实用程序:低级工具(在后端处理包文件的实际安装、升级和删除)和高级工具(负责确保执行依赖性解析和元数据搜索(“关于数据的数据”)任务)。

发行版低级工具高级工具
Debian 及其衍生品dpkgapt-get/aptitude
CentOSrpmyum
openSUSErpmzypper

dpkg 是基于 Debian 系统的低级包管理器。它可以安装、删除、提供有关和构建 *.deb 包的信息,但无法自动下载和安装其相应的依赖项。

apt-get 是 Debian 及其衍生版本的高级包管理器,提供了一种使用命令行从多个源检索和安装包(包括依赖项解析)的简单方法。与 dpkg 不同,apt-get 不直接使用 *.deb 文件,而是使用包的正确名称。

aptitude 是基于 Debian 系统的另一个高级包管理器,可用于以快速、简单的方式执行管理任务(安装、升级和删除包,还自动处理依赖项解析)。它提供了与 apt-get 相同的功能以及其他功能,例如提供对包的多个版本的访问。

rpm 是符合 Linux Standard Base (LSB) 的发行版使用的包管理系统,用于低级别的包处理。就像 dpkg 一样,它可以查询、安装、验证、升级和删除软件包,并且更常被基于 Fedora 的发行版使用,例如 RHEL 和 CentOS。

yum 向基于 RPM 的系统添加了自动更新和包管理以及依赖项管理的功能。作为一个高级工具,如 apt-get 或 aptitude,yum 与存储库一起使用。

Common Usage of Low-Level Tools(低级工具的常见用法)

使用低级工具执行的最常见任务如下:

  1. 从编译的(*.deb 或 *.rpm)文件安装软件包

这种安装方法的缺点是不提供依赖关系解析。当发行版存储库中没有此类软件包,因此无法通过高级工具下载和安装时,我们很可能会选择从已编译的文件安装此类软件包。由于低级工具不执行依赖关系解析,因此如果我们尝试安装具有未满足依赖关系的包,它们将退出并出现错误。

# dpkg -i file.deb [Debian and derivative]# rpm -i file.rpm [CentOS / openSUSE]

注意:请勿尝试在 CentOS 上安装为 openSUSE 构建的 *.rpm 文件,反之亦然!

  1. 从编译文件升级包

同样,只有当中央存储库中没有已安装的软件包时,我们才会手动升级该软件包。

# dpkg -i file.deb [Debian and derivative]# rpm -U file.rpm [CentOS / openSUSE]
  1. 列出已安装的软件包

当我们第一次接触已经运行的系统时,很可能想知道安装了哪些软件包。

# dpkg -l [Debian and derivative]# rpm -qa [CentOS / openSUSE]

如果想知道是否安装了特定的软件包,可以将上述命令的输出通过管道传输到 grep,如在 Linux 中操作文件 – 本系列的第 1 部分中所述。假设我们需要验证 Ubuntu 系统上是否安装了 mysql-common 软件包。

# dpkg -l | grep mysql-common

另一种确定软件包是否已安装的方法。

# dpkg --status package_name [Debian and derivative]# rpm -q package_name [CentOS / openSUSE]

例如,让我们看看我们的系统上是否安装了 sysdig 软件包。

# rpm -qa | grep sysdig

  1. 找出哪个包安装了某个文件
# dpkg --search file_name# rpm -qf file_name

例如,哪个软件包安装了pw_dict.hwm?

# rpm -qf /usr/share/cracklib/pw_dict.hwm

Common Usage of High-Level Tools(高级工具的常见用法)

使用高级工具执行的最常见任务如下。

  1. 搜索包

aptitude update 将更新可用包的列表,并且 aptitude search 将执行对 package_name 的实际搜索。

# aptitude update && aptitude search package_name

在 search all 选项中,yum 不仅会在包名称中搜索 package_name,还会在包描述中搜索 package_name。

# yum search package_name# yum search all package_name# yum whatprovides "*/package_name"

假设我们需要一个名为 sysdig 的文件。要知道我们必须安装的包,让我们运行一下。

# yum whatprovides "*/sysdig"

whatprovides 告诉 yum 搜索将提供与上述正则表达式匹配的文件的包。

# zypper refresh && zypper search package_name[On openSUSE]
  1. 从存储库安装包

安装软件包时,在软件包管理器解决所有依赖关系后,系统可能会提示确认安装。请注意,运行更新或刷新(根据所使用的包管理器)并不是绝对必要的,但出于安全和依赖性原因,使已安装的包保持最新是一个很好的系统管理实践。

# aptitude update && aptitude install package_name [Debian and derivatives]# yum update && yum install package_name [CentOS]# zypper refresh && zypper install package_name [openSUSE]
  1. 删除包

选项“删除”将卸载软件包,但保留配置文件完整,而“清除”将从系统中删除该程序的所有痕迹。

# aptitude remove / purge package_name# yum erase package_name
---Notice the minus sign in front of the package that will be uninstalled, openSUSE ---# zypper remove -package_name 

默认情况下,大多数(如果不是全部)包管理器都会提示您是否确定要在实际执行卸载之前继续卸载。请仔细阅读屏幕上的信息,以免遇到不必要的麻烦!

  1. 显示包的信息

以下命令将显示有关birthday package的信息。

# aptitude show birthday # yum info birthday# zypper info birthday

Summary(概括)

作为系统管理员,包管理是你无法忽视的事情。您应该准备好随时使用本文中描述的工具。希望您发现它对您准备 LFCS 考试和日常任务很有帮助。