Ubuntu 和 Debian 软件包管理要点

介绍

包装格式和包装管理工具因分布而异,但大多数分布使用两种核心工具之一。

对于基于 Red Hat Enterprise Linux 的发行版(如 RHEL 本身和 Rocky Linux),RPM 包装格式和包装工具如rpmyum是常见的。

近年来,有更多的辅助包管理器被设计为与核心aptdpkg工具并行运行:例如, snap提供了更多的可移植性和沙盒,而 Homebrew从macOS移植,提供了指令行工具,可以由个别用户安装,以避免与系统包的冲突。

在本指南中,您将了解系统管理员在 Debian 和 Ubuntu 系统上使用的一些最常见的包管理工具,这些工具可以用作快速参考,当您需要知道如何在这些系统中完成包管理任务时。

前提条件

  • Ubuntu 20.04 或 Debian 服务器和具有 sudo 特权的非 root 用户. 您可以在我们的 Ubuntu 20.04 初始服务器设置 指南中了解有关如何设置具有这些特权的用户的更多信息.

步骤 1 – Debian 包管理工具概述

Debian/Ubuntu 生态系统使用几种不同的包管理工具来管理系统上的软件。

大多数这些工具是相互关联的,并在相同的包数据库上工作,其中一些工具试图为包装系统提供高级接口,而其他实用程序则专注于提供低级功能。

适合

命令apt可能是apt包装工具套件中最常用的成员,其主要目的是与分布的包装团队维护的远程存储库进行接口,并对可用的包装执行操作。

apt套件通常通过将来自远程存储库的信息拖入在本地系统中维护的缓存中进行功能。apt命令用于更新本地缓存。

一般来说,apt将用于更新本地缓存,并对现场系统进行更改。

<$>[注] **注:**在Ubuntu的早期版本中,核心apt命令被称为apt-get

可用性

apt套件的另一个重要成员是apt-cache,该实用程序使用本地缓存来查询有关可用的包及其属性的信息。

例如,任何时候你想搜索一个特定的包或工具,这将执行一个特定的功能,apt-cache是一个很好的开始的地方。它也可以提供有关具体的包版本将被一个程序瞄准的信息。

虽然以前的工具专注于管理存储库中维护的包,但dpkg命令也可以用于单个.deb包操作。

apt命令不同,dpkg没有自动解决依赖的能力,其主要功能是能够直接与.deb包一起工作,并能够分解包并了解其结构的更多信息,尽管它可以收集有关系统上安装的包的某些信息,但您不应该将其用作主要的包管理器。

步骤 2 – 更新包缓存和系统

Debian 和 Ubuntu 包管理工具有助于保持您系统的可用包列表的最新状态,它们还提供了您目前在服务器上安装的各种更新包的方法。

更新本地包缓存

您的包装工具所依赖的远程存储库不断更新,但大多数Linux包管理工具的设计,由于历史原因,可以直接与本地缓存这些信息。

通常,在执行其他包命令之前每次更新本地包缓存是一个好主意,这将确保您使用最新的有关可用的软件的信息。

若要更新本地缓存,请使用apt命令与update子命令:

1sudo apt update

这将下载您正在跟踪的存储库中可用的包的最新列表。

更新包裹

apt命令区分两种不同的更新程序。第一个更新程序(本节涵盖)可用于升级不需要删除组件的任何组件。

当您不希望在任何情况下删除任何已安装的软件包时,这可能非常重要,但是,一些更新包括更换系统组件或删除相矛盾的文件。

1sudo apt upgrade

第二个程序会更新所有包,甚至需要删除包的包。

通常,正在删除的软件包在升级过程中会被功能相应的软件包所取代,所以这通常是安全的。但是,如果某些必不可少的组件被标记为删除,请注意删除的软件包。

1sudo apt full-upgrade

这将更新您的系统上的所有包. 在下一步,您将了解如何下载和安装新包。

步骤 3 – 下载和安装包

搜尋包裹

在下载和安装包时,第一个步骤往往是搜索您正在寻找的包的发行版存储库。

搜索包是针对包缓存信息的操作之一. 要做到这一点,请使用apt-cache search。 请记住,在搜索包之前,您应该使用sudo apt update确保本地缓存处于最新状态:

1apt-cache search package

由于此过程仅仅是查询信息,因此不需要sudo特权,任何进行的搜索都将查看包的名称,以及包的完整描述。

例如,如果你搜索Hop,你会看到这样的结果:

1apt-cache search htop
1[secondary_label Output]
2aha - ANSI color to HTML converter
3htop - interactive processes viewer
4libauthen-oath-perl - Perl module for OATH One Time Passwords

正如你所看到的,你有一个名为hop的包,但你也可以看到另外两个程序,每个程序都在包的完整描述字段中提到hop(输出旁边的描述只是一个简短的摘要)。

安装一个包从休息

要从存储库中安装一个包,以及所有必要的依赖,您可以使用apt命令与install参数。

此命令的参数应该是包名称或名称,如它们在存储库中标记:

1sudo apt install package

您可以同时安装多个包,分隔一个空间:

1sudo apt install package1 package2

如果您的要求包需要额外的依赖,这些将打印到标准输出,并要求您确认程序。

1sudo apt install apache2
 1[secondary_label Output]
 2Reading package lists... Done
 3Building dependency tree       
 4Reading state information... Done
 5The following extra packages will be installed:
 6  apache2-data
 7Suggested packages:
 8  apache2-doc apache2-suexec-pristine apache2-suexec-custom
 9  apache2-utils
10The following NEW packages will be installed:
11  apache2 apache2-data
120 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
13Need to get 236 kB of archives.
14After this operation, 1,163 kB of additional disk space will be used.
15Do you want to continue [Y/n]?

正如你所看到的,即使我们的安装目标是apache2包,则需要apache2-data包作为依赖性,在这种情况下,您可以继续按EnterY,或者通过键入n取消。

从 Repos 安装特定包版本

如果您需要安装特定版本的软件包,您可以提供您想要针对的版本的 =,如下:

1sudo apt install package=version

在这种情况下,版本必须与存储库中可用的软件包版本号之一相匹配,这意味着使用您的分布所使用的版本编程方案。

1apt-cache policy nginx
 1[secondary_label Output]
 2nginx:
 3  Installed: (none)
 4  Candidate: 1.18.0-0ubuntu1.2
 5  Version table:
 6     1.18.0-0ubuntu1.2 500
 7        500 http://mirrors.digitalocean.com/ubuntu focal-updates/main amd64 Packages
 8        500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages
 9     1.17.10-0ubuntu1 500
10        500 http://mirrors.digitalocean.com/ubuntu focal/main amd64 Packages

重组包装

许多包包括安装后配置脚本,这些脚本在安装完成后会自动运行,这些程序通常包括提示管理员做出配置选择。

如果您需要在稍后执行这些(以及其他)配置步骤,您可以使用dpkg-reconfigure命令。

1sudo dpkg-reconfigure package

这将允许您访问您在安装时运行的相同(而且往往更多)提示。

执行包操作的干燥运行

很多时候,你会想看到一个程序的副作用之前没有实际承诺执行命令。 apt 允许你添加 s 旗帜来模拟一个程序。

例如,要查看如果您选择安装软件包会发生什么,您可以键入:

1apt install -s package

这将让你看到所有依赖和系统的变化,如果你删除s旗帜,你可以看到一个通常需要根特权的过程的结果,而不使用sudo

例如,如果你想评估什么将被安装在apache2包中,你可以输入:

1apt install -s apache2
 1[secondary_label Output]
 2NOTE: This is only a simulation!
 3      apt needs root privileges for real execution.
 4      Keep also in mind that locking is deactivated,
 5      so don't depend on the relevance to the real current situation!
 6Reading package lists... Done
 7Building dependency tree       
 8Reading state information... Done
 9The following extra packages will be installed:
10  apache2-data
11Suggested packages:
12  apache2-doc apache2-suexec-pristine apache2-suexec-custom
13  apache2-utils
14The following NEW packages will be installed:
15  apache2 apache2-data
160 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
17Inst apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all])
18Inst apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])
19Conf apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all])
20Conf apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])

您可以获得有关安装的软件包和版本的所有信息,而无需完成实际过程。

这也适用于其他程序,例如进行系统升级:

1apt -s dist-upgrade

默认情况下,apt会提示用户对许多流程进行确认,包括需要额外依赖的安装和包升级。

为了绕过这些升级,并默认接受任何这些提示,您可以在执行这些操作时通过-y旗:

1sudo apt install -y package

这将安装包和任何依赖程序,而不会进一步提示用户,这也可以用于升级程序:

1sudo apt dist-upgrade -y

修复破碎的依赖和包裹

有时,由于依赖性或其他问题,安装可能无法成功完成,其中一个常见的情况是安装具有dpkg.deb 包时,这不会解决依赖性。

apt命令可以通过-f命令来尝试解决这种情况。

1sudo apt install -f

这将搜索未满足的任何依赖性,并尝试安装它们以修复依赖性树. 如果您的安装抱怨存在依赖性问题,那么这应该是尝试解决问题的第一步。

下载从休息的包裹

有主要情况下,从存储库中下载一个包,而不实际安装它可能有帮助,您可以通过运行aptdownload参数来做到这一点。

由于这只是下载一个文件而不会影响实际系统,因此不需要任何sudo特权:

1apt download package

这将下载指定的包(s)到当前目录。

安装一个.deb 包

虽然大多数发行版建议从其维护的存储库安装软件,但一些供应商提供原始.deb 文件,您可以在系统上安装。

要做到这一点,你使用 dpkg. dpkg 主要用于与单个包一起工作. 它不尝试从存储库执行安装,而是在当前目录中寻找 .deb 包,或者提供的路径:

1sudo dpkg --install debfile.deb

重要的是要注意,dpkg工具不执行任何依赖处理,这意味着如果有任何未满足的依赖,安装将失败,但它会标记所需的依赖,所以如果所有依赖在存储库中可用,您可以通过输入以下内容来满足它们:

1sudo apt install -f

这将安装任何未满足的依赖,包括那些标记为dpkg。在下一步,您将了解如何删除您已安装的一些软件包。

步骤 4 – 删除包和删除文件

本节将讨论如何卸载包并清理可能被包操作留下的文件。

删除一个包

若要移除已安装的软件包,您可以使用apt remove,这将删除该软件包安装在系统上的大部分文件,但有一个显著的例外。

此命令将保留配置文件,以便您的配置仍然可用,如果您需要在稍后重新安装应用程序,这是有用的,因为这意味着您自定义的任何配置文件不会被删除,如果您意外删除一个包。

要完成此操作,您需要提供您想要卸载的软件包的名称:

1sudo apt remove package

该包将被卸载,除了您的配置文件。

删除一个包和所有相关的配置文件

如果您想从系统中删除一个包和所有相关文件,包括配置文件,您可以使用apt purge

与上面提到的删除命令不同,清除命令会删除所有内容,如果您不希望保存配置文件,或者您遇到问题并希望从清洁的板块开始,则非常有用。

请记住,一旦您的配置文件被删除,您将无法恢复它们:

1sudo apt purge package

现在,如果您需要重新安装该包,将使用默认配置。

删除不再需要的任何自动依赖

当您使用apt removeapt purge从系统中删除软件包时,将删除软件包的目标。

为了自动删除已安装为依赖程序的任何包,这些包不再需要,您可以使用autoremove命令:

1sudo apt autoremove

如果您想从正在删除的依赖中删除所有相关配置文件,您将想要将--purge选项添加到autoremove命令中。

1sudo apt --purge autoremove

清理过时的文件包

随着分布的包维护者添加和从存储库中删除包,一些包将变得过时。

apt工具可以使用autoclean命令删除本地系统上的任何与不再在存储库中可用的包相关的包文件。

这将释放服务器上的空间,并从本地缓存中删除任何可能过时的包。

1sudo apt autoclean

在下一步中,您将学习查询包的更多方法,而不必安装它们。

步骤5 – 获取有关包裹的信息

每个包包含大量的元数据,可以使用包管理工具访问,本节将展示一些常见的方式来获取有关可用的和安装的包的信息。

若要在您的分布的存储库中显示有关包的详细信息,您可以使用apt-cache show

1apt-cache show nginx

每个候选人将有有关其依赖性、版本、架构、冲突、实际的包文件名称、包和安装的大小以及详细描述等信息。

 1[secondary_label Output]
 2Package: nginx
 3Architecture: all
 4Version: 1.18.0-0ubuntu1.2
 5Priority: optional
 6Section: web
 7Origin: Ubuntu
 8Maintainer: Ubuntu Developers <[email protected]>
 9Original-Maintainer: Debian Nginx Maintainers <[email protected]>
10Bugs: https://bugs.launchpad.net/ubuntu/+filebug
11Installed-Size: 44
12Depends: nginx-core (<< 1.18.0-0ubuntu1.2.1~) | nginx-full (<< 1.18.0-0ubuntu1.2.1~) | nginx-light (<< 1.18.0-0ubuntu1.2.1~) | nginx-extras (<< 1.18.0-0ubuntu1.2.1~), nginx-core (>= 1.18.0-0ubuntu1.2) | nginx-full (>= 1.18.0-0ubuntu1.2) | nginx-light (>= 1.18.0-0ubuntu1.2) | nginx-extras (>= 1.18.0-0ubuntu1.2)
13Filename: pool/main/n/nginx/nginx_1.18.0-0ubuntu1.2_all.deb
14

要显示有关每个候选人的额外信息,包括完全的反依赖列表(取决于被查询的包的包列表),请使用showpkg命令。

1apt-cache showpkg package

显示关于.deb 包的信息

要显示有关.deb 文件的详细信息,您可以使用 --info' 旗帜与 dpkg' 命令. 该命令的目标应该是到 `.deb' 文件的路径:

1dpkg --info debfile.deb

这将向您展示有关该软件包的一些元数据,其中包括软件包的名称和版本,其所构建的架构,所需的大小和依赖性,描述和冲突。

要具体列出依赖(该包依赖的包)和逆依赖(依赖该包的包),您可以使用apt-cache实用程序。

对于常规的依赖信息,您可以使用依赖子命令:

1apt-cache depends nginx
 1[secondary_label Output]
 2nginx
 3 |Depends: nginx-core
 4 |Depends: nginx-full
 5 |Depends: nginx-light
 6  Depends: nginx-extras
 7 |Depends: nginx-core
 8 |Depends: nginx-full
 9 |Depends: nginx-light
10  Depends: nginx-extras

這將顯示關於每個列為硬依賴,建議,建議或衝突的包的資訊。

如果您需要找出哪些包取决于特定包,您可以将该包传输到apt-cache rdepends:

1apt-cache rdepends package

显示已安装和可用的包版本

通常,存储库中有多个版本的软件包,其中有一个默认软件包. 若要查看可用的软件包版本,您可以使用apt-cache 策略:

1apt-cache policy package

这将向您显示所安装的版本(如果有),如果您未指定安装命令的版本,将默认安装的软件包,以及完整的软件包版本表,以表示每个版本的优先级的重量。

因为这也列出了每个版本所在的存储库,所以可以用来确定是否有任何额外的存储库正在取代默认存储库的包。

显示安装的包装与 dpkg -l

要显示在您的系统上安装的软件包,您有几个单独的选项,这些选项在输出格式和口语程度上有所不同。

第一种方法是使用dpkgdpkg- Query命令,标记为-l。这两个命令的输出是相同的,没有任何论点,它会列出系统上每个安装或部分安装的包的列表。

1dpkg -l
 1[secondary_label Output]
 2Desired=Unknown/Install/Remove/Purge/Hold
 3| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
 4|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
 5||/ Name Version Architecture Description
 6+++-===========================================-=======================================-============-=====================================================================================================================
 7ii account-plugin-generic-oauth 0.10bzr13.03.26-0ubuntu1.1 amd64 GNOME Control Center account plugin for single signon - generic OAuth
 8ii accountsservice 0.6.34-0ubuntu6 amd64 query and manipulate user account information
 9ii acl 2.2.52-1 amd64 Access control list utilities
10ii acpi-support 0.142 amd64 scripts for handling many ACPI events
11ii acpid 1:2.0.18-1ubuntu2 amd64 Advanced Configuration and Power Interface event daemon
12. . .

输出继续在系统上的每个包. 在输出的顶部,你可以看到每个行上的前三个字符的含义. 第一个字符表示想要的包的状态。

  • u: Unknown
  • i: Installed
  • r: Removed
  • p: Purged
  • h: Version held

第二个字符表示包装系统所知道的包装的实际状态,这些可能是:

  • n:未安装
  • i:已安装
  • c:配置文件存在,但应用程序已卸载
  • u:未包装.文件已卸载,但尚未配置
  • f:该包已半安装,这意味着通过安装中断操作的一部分故障
  • w:该包正在等待一个单独的包 的触发器
  • p:该包已被另一个包 触发

第三个字符,这将是大多数包的空白空间,只有一个潜在的其他选项:

  • r:这表明需要重新安装,这通常意味着软件包已被破坏并处于非功能状态

其他列包含包名称、版本、架构和描述。

显示过滤包的安装状态

如果您在-l模式后添加搜索模式,则dpkg会列出包含该模式的所有包(不论已安装或未安装)。

1dpkg -l libyaml*
 1[secondary_label Output]
 2Desired=Unknown/Install/Remove/Purge/Hold
 3| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
 4|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
 5||/ Name Version Architecture Description
 6+++-===============-============-============-===================================
 7ii libyaml-0-2:amd 0.1.4-2ubunt amd64 Fast YAML 1.1 parser and emitter li
 8ii libyaml-dev:amd 0.1.4-2ubunt amd64 Fast YAML 1.1 parser and emitter li
 9un libyaml-perl    <none>                    (no description available)
10un libyaml-syck-pe <none>                    (no description available)
11ii libyaml-tiny-pe 1.51-2 all Perl module for reading and writing

正如您可以从第一个列中看到的,第三和第四个结果没有安装,这会给你每个匹配模式的包,以及它们的当前和想要的状态。

在您的系统上安装的软件包的替代方式是dpkg -get-selections

这里列出了安装或删除但未清除的所有包的列表:

1dpkg --get-selections

要区分这两个状态,您可以将输出从dpkgawk以按状态过滤。

1dpkg --get-selections | awk '$2 ~ /^install/'

要获取尚未清除配置文件的删除包列表,您可以代替键入:

1dpkg --get-selections | awk '$2 !~ /^install/'

你也許想了解更多關於 piping command output through awk,

搜索已安装的包

要搜索您已安装的软件包库,您可以在 - get-selections选项后添加一个软件包过滤器字符串,这支持与wildcards匹配。

1dpkg --get-selections libz*

您可以再次使用上一节中的awk表达式进行过滤。

通过一个包安装的列表文件

要找出哪个文件是由一个包负责的,你可以使用-L旗与dpkg命令:

1dpkg -L package

这将打印由包控制的每个文件的绝对路径. 这将不包括由包内的流程生成的任何配置文件。

要找出哪个包负责您的文件系统中的某个文件,您可以通过-S旗的dpkg命令的绝对路径。

这将打印出安装该文件的软件包:

1dpkg -S /path/to/file

请记住,通过后安装脚本移动到位置的任何文件都无法通过此技术将其绑定到包中。

查找哪个包提供一个文件而不安装它

使用dpkg,您可以使用-S选项查找哪个软件包拥有文件,但有时您可能需要知道哪个软件包提供文件或命令,即使您可能没有安装相关软件包。

要做到这一点,您需要安装一个名为apt-file的实用程序,它维护了自己的信息库,其中包括数据库中的每个由包控制的文件的安装路径。

apt-file包作为正常安装:

1sudo apt update
2sudo apt install apt-file

现在,更新工具的数据库并通过键入搜索文件:

1sudo apt-file update
2sudo apt-file search /path/to/file

这只适用于由包直接安装的文件位置。通过安装后脚本创建的任何文件都无法查询。下一步,您将学习如何导入和导出已安装的包列表。

步骤 6 – 系统之间传输包列表

很多时候,您可能需要从一个系统备份安装的包列表,并使用它来在不同的系统上安装相同的包列表。

如果您需要将一个系统上安装的套件复制到另一个系统,则首先需要导出您的包列表。

您可以将安装的包列表导出到一个文件,将 dpkg --get-selections 的输出重定向到文本文件:

1dpkg --get-selections > ~/packagelist.txt

你可能还想了解更多有关 输入和输出重定向的信息。

此列表可以复制到第二台机器并导入。

您还可能需要备份您的源列表和您信任的密钥列表,您可以通过创建一个新目录并将其从系统配置中复制到 /etc/apt/ 来备份您的源:

1mkdir ~/sources
2cp -R /etc/apt/sources.list* ~/sources

您为从第三方存储库安装包所添加的任何密钥都可以使用apt-key exportall导出:

1apt-key exportall > ~/trusted_keys.txt

您现在可以将packagelist.txt文件、目录和trusted_keys.txt文件转移到另一个计算机进行导入。

进口包列表

如果您使用dpkg --get-selections创建了包列表,如上所示,您也可以使用dpkg命令在其他计算机上导入包。

首先,您需要添加可信密钥,并执行您从第一个环境复制的源列表,假设您备份的所有数据已被复制到新计算机的主目录,您可以键入:

1sudo apt-key add ~/trusted_keys.txt
2sudo cp -R ~sources/* /etc/apt/

接下来,从新计算机清除所有非必不可少的包的状态,以确保您正在将更改应用到清洁的板块上。

1sudo dpkg --clear-selections

这将标记所有非必不可少的软件包卸载。您应该更新本地的软件包列表,以便您的安装将有您打算安装的所有软件的记录。

您应该确保安装删除选项工具. 此工具维护自己的数据库,因此您还需要在继续之前更新它:

1sudo apt update
2sudo apt install dselect
3sudo dselect update

接下来,您可以应用当前列表的顶部的包列表来配置哪些包应该保留或下载:

1sudo dpkg --set-selections < packagelist.txt

此设置为正确的包状态. 若要应用更改,请运行 apt dselect-upgrade:

1sudo apt dselect-upgrade

这将下载并安装任何必要的软件包,还会删除任何被标记为删除选择的软件包。最终,您的软件包列表应该与以前的计算机相匹配,尽管配置文件仍需要复制或修改。

在下一步和最后一步中,您将了解如何使用第三方包存储库。

步骤7 – 添加存储库和PPA

虽然大多数发行版提供的默认存储库集通常是最易于维护的,但有时额外的来源可能有用。

Ubuntu 上的传统存储库的替代品是 PPA,或 p personal package archives. 其他 Linux 味道通常使用不同但相似的第三方存储库概念。

将 PPA 添加到您的系统允许您使用您常用的包管理工具来管理它们的包,这可以用来提供不包含在分布的存储库中更新的包,请注意只添加您信任的 PPA,因为您将允许非标准维护者为您的系统建立包。

要添加 PPA,您可以使用add-apt-repository命令. 目标应该包含标签 ppa:,然后是 PPA 所有者的名称在 Launchpad上),一个 slash 和 PPA 名称:

1sudo add-apt-repository ppa:owner_name/ppa_name

您可能会被要求接受包裹的密钥。之后,PPA将被添加到您的系统中,允许您使用正常的apt命令来安装包裹。在搜索或安装包裹之前,请确保更新您的本地缓存,并提供有关新PPA的信息:

1sudo apt update

您也可以直接编辑存储库配置. 您可以编辑 /etc/apt/sources.list 文件,或将新列表放到 /etc/apt/sources.list.d 目录中。

1sudo nano /etc/apt/sources.list.d/new_repo.list

在文件中,您可以使用以下格式添加新存储库的位置:

1[label /etc/apt/sources.list.d/new_repo.list]
2deb_or_deb-src url_of_repo release_code_name_or_suite component_names

仓库规格的不同部分是:

  • deb或deb-src:这标识了存储库的类型。常规存储库标记为 deb,而源存储库开始为 deb-src
  • url:该存储库的主要 URL 应该是存储库可以找到的位置
  • 发布代码名称或套件:这通常是您的发行版本的代码名称,但它可以是用于识别您发行版本创建的特定包的名称
  • 组件名称:您希望提供的选择包的标签。

在一些其他Linux发行版中,您可以通过实际安装包含仅为该存储库一个配置文件的包来添加额外的存储源,这与包管理器设计的方式一致。

结论

您可以执行许多其他包管理操作,但本教程为您提供了Ubuntu基础知识的基线,其中许多可以用微小的变化将其一般化到其他发行版。

接下来,您可能想了解更多关于 其他平台上的包装管理

Published At
Categories with 技术
comments powered by Disqus