Ubuntu和Debian包管理要点

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

介绍

包管理是 Linux 系统的基本功能之一。 打包格式和包管理工具因发行版而异,但大多数发行版使用两组核心工具之一。

对于基于 Red Hat Enterprise Linux 的发行版(例如 RHEL 本身和 Rocky Linux),RPM 打包格式和打包工具如 rpmyum 很常见。 Debian、Ubuntu 和相关发行版使用的另一个主要系列使用 .deb 打包格式和 aptdpkg 等工具。

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

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

先决条件

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

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

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

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

易于

apt 命令可能是 apt 打包工具套件中最常用的成员。 它的主要目的是与发行版的打包团队维护的远程存储库连接,并对可用的包执行操作。

apt 套件通常通过将信息从远程存储库中提取到本地系统上维护的缓存中来发挥作用。 apt 命令用于刷新本地缓存。 它还用于修改包状态,即从系统中安装或删除包。

通常,apt 将用于更新本地缓存,并对实时系统进行修改。

注意: 在早期版本的 Ubuntu 中,核心 apt 命令被称为 apt-get。 它已经过简化,但出于习惯或向后兼容性,您仍然可以使用 apt-get 调用它。


apt-cache

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

例如,任何时候你想搜索一个特定的包或一个工具来执行特定的功能,apt-cache 是一个很好的起点。 它还可以提供有关程序将针对哪个确切软件包版本的信息。 依赖性和反向依赖性信息是 apt-cache 有用的另一个领域。

磅数

虽然以前的工具专注于管理存储库中维护的包,但 dpkg 命令也可用于对单个 .deb 包进行操作。 dpkg 工具实际上负责上述命令的大部分幕后工作; apt 提供额外的内务管理,而 dpkg 与包本身交互。

apt 命令不同,dpkg 没有自动解决依赖关系的能力。 它的主要特点是能够直接使用 .deb 包,并且能够剖析包并了解其结构的更多信息。 尽管它可以收集有关系统上安装的软件包的一些信息,但您不应将其用作主要的软件包管理器。 在下一步中,您将了解软件包升级最佳实践。

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

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

更新本地包缓存

打包工具所依赖的用于获取包信息的远程存储库一直在更新。 但是,由于历史原因,大多数 Linux 包管理工具都设计为直接使用此信息的本地缓存。 该缓存需要定期刷新。

在执行其他包命令之前,在每个会话中更新本地包缓存通常是一个好主意。 这将确保您使用有关可用软件的最新信息进行操作。 如果您使用陈旧的包信息进行操作,某些安装命令将失败。

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

sudo apt update

这将下拉您正在跟踪的存储库中可用软件包的更新列表。

更新包

apt 命令区分两种不同的更新程序。 第一个更新过程(在本节中介绍)可用于升级不需要删除组件的任何组件。 要了解如何更新并允许 apt 根据需要移除和交换组件,请参阅以下部分。

当您在任何情况下都不想删除任何已安装的软件包时,这可能非常重要。 但是,某些更新涉及更换系统组件或删除冲突文件。 此过程将忽略任何需要删除包的更新:

sudo apt upgrade

第二个过程将更新所有包,即使是那些需要删除包的包。 这通常是必要的,因为包的依赖项发生了变化。

通常,在升级过程中,被删除的包将被功能等效的替换,所以这通常是安全的。 但是,最好留意要移除的包装,以防某些重要组件被标记为要移除。 要执行此操作,请键入:

sudo apt full-upgrade

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

第 3 步 – 下载和安装软件包

搜索包

下载和安装软件包的第一步通常是在您的发行版的存储库中搜索您正在寻找的软件包。

搜索包是一项针对包缓存以获取信息的操作。 为此,请使用 apt-cache search。 请记住,在搜索包之前,您应该使用 sudo apt update 确保本地缓存是最新的:

apt-cache search package

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

例如,如果您搜索 htop,您将看到如下结果:

apt-cache search htop
Outputaha - ANSI color to HTML converter
htop - interactive processes viewer
libauthen-oath-perl - Perl module for OATH One Time Passwords

如您所见,您有一个名为 htop 的包,但您还可以看到另外两个程序,每个程序都在包的完整描述字段中提到 htop(旁边的描述输出只是一个简短的总结)。

从存储库安装包

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

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

sudo apt install package

您可以一次安装多个包,以空格分隔:

sudo apt install package1 package2

如果您请求的包需要额外的依赖项,这些将被打印到标准输出,并且您将被要求确认该过程。 它看起来像这样:

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

如您所见,即使我们的安装目标是 apache2 包,也需要 apache2-data 包作为依赖项。 在这种情况下,您可以按 Enter 或“Y”继续,或按“n”取消。

从存储库安装特定的包版本

如果您需要安装特定版本的软件包,您可以使用 = 提供您想要定位的版本,如下所示:

sudo apt install package=version

在这种情况下,版本必须与存储库中可用的包版本号之一匹配。 这意味着利用您的发行版所采用的版本控制方案。 您可以使用 apt-cache policy package 找到可用的版本:

apt-cache policy nginx
Outputnginx:
  Installed: (none)
  Candidate: 1.18.0-0ubuntu1.2
  Version table:
     1.18.0-0ubuntu1.2 500
        500 http://mirrors.digitalocean.com/ubuntu focal-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages
     1.17.10-0ubuntu1 500
        500 http://mirrors.digitalocean.com/ubuntu focal/main amd64 Packages

重新配置包

许多软件包都包含安装完成后自动运行的安装后配置脚本。 这些通常包括提示管理员进行配置选择。

如果您以后需要执行这些(和其他)配置步骤,可以使用 dpkg-reconfigure 命令。 此命令查看传递给它的包并重新运行包规范中包含的任何配置后命令:

sudo dpkg-reconfigure package

这将允许您访问安装时运行的相同(通常更多)提示。

执行包操作的试运行

很多时候,您会希望在没有实际执行命令的情况下查看过程的副作用。 apt 允许您添加 -s 标志来“模拟”一个过程。

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

apt install -s package

如果您删除 -s 标志,这将让您看到所有依赖项和系统更改。 这样做的一个好处是,您可以查看通常需要 root 权限的进程的结果,而无需使用 sudo

例如,如果您想评估将使用 apache2 软件包安装的内容,您可以键入:

apt install -s apache2
OutputNOTE: This is only a simulation!
      apt needs root privileges for real execution.
      Keep also in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  apache2-data
Suggested packages:
  apache2-doc apache2-suexec-pristine apache2-suexec-custom
  apache2-utils
The following NEW packages will be installed:
  apache2 apache2-data
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all])
Inst apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])
Conf apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all])
Conf apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])

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

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

apt -s dist-upgrade

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

为了绕过这些升级,并默认接受这些提示中的任何一个,您可以在执行这些操作时传递 -y 标志:

sudo apt install -y package

这将安装软件包和任何依赖项,而无需用户进一步提示。 这也可用于升级过程:

sudo apt dist-upgrade -y

修复损坏的依赖项和包

有时,由于依赖关系或其他问题,安装可能无法成功完成。 可能发生这种情况的一种常见情况是使用 dpkg 安装 .deb 包时,它不会解决依赖关系。

apt 命令可以尝试通过将 -f 命令传递给它来解决这种情况。

sudo apt install -f

这将搜索任何不满足的依赖项并尝试安装它们以修复依赖关系树。 如果您的安装抱怨依赖问题,这应该是您尝试解决它的第一步。 如果您无法通过这种方式解决问题,并且您安装了第三方软件包,则应将其删除并寻找更积极维护的更新版本。

从存储库下载包

在某些主要情况下,从存储库下载软件包而不实际安装它可能会有所帮助。 您可以通过使用 download 参数运行 apt 来做到这一点。

因为这只是下载文件而不影响实际系统,所以不需要 sudo 权限:

apt download package

这会将指定的包下载到当前目录。

安装 .deb 包

尽管大多数发行版建议从他们维护的存储库中安装软件,但一些供应商提供了可以安装在系统上的原始 .deb 文件。

为此,您使用 dpkgdpkg 主要用于处理单个包。 它不会尝试从存储库执行安装,而是在当前目录或提供的路径中查找 .deb 包:

sudo dpkg --install debfile.deb

需要注意的是,dpkg 工具没有实现任何依赖处理。 这意味着如果有任何未满足的依赖项,安装将失败。 但是,它标记了所需的依赖项,因此如果所有依赖项都在存储库中可用,您可以通过随后键入以下内容来满足它们:

sudo apt install -f

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

第 4 步 - 删除包和删除文件

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

卸载软件包

要删除已安装的软件包,请使用 apt remove。 这将删除软件包安装到系统的大部分文件,但有一个明显的例外。

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

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

sudo apt remove package

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

卸载软件包和所有关联的配置文件

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

与上面提到的 remove 命令不同,purge 命令删除所有内容。 如果您不想保存配置文件或者遇到问题并希望从头开始,这很有用。

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

sudo apt purge package

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

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

使用 apt removeapt purge 从系统中删除软件包时,将删除软件包目标。 但是,为了满足安装要求而自动安装的任何依赖项都将保留。

为了自动删除作为依赖项安装的任何软件包不再需要任何软件包,您可以使用 autoremove 命令:

sudo apt autoremove

如果您希望从要删除的依赖项中删除所有关联的配置文件,您需要将 --purge 选项添加到 autoremove 命令。 这也将清理配置文件,就像 purge 命令用于有针对性的删除:

sudo apt --purge autoremove

清理过时的软件包文件

当发行版的包维护者在存储库中添加和删除包时,一些包将变得过时。

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

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

sudo apt autoclean

在下一步中,您将了解更多查询包的方法,而无需安装它们。

第 5 步 - 获取有关包的信息

每个包都包含大量可以使用包管理工具访问的元数据。 本节将演示一些常用方法来获取有关可用和已安装软件包的信息。

要在您的发行版存储库中显示有关软件包的详细信息,您可以使用 apt-cache show。 此命令的目标是存储库中的包名称:

apt-cache show nginx

这将显示有关软件包的任何安装候选者的信息。 每个候选人都会有关于其依赖关系、版本、架构、冲突、实际包文件名、包和安装的大小以及详细描述等信息。

OutputPackage: nginx
Architecture: all
Version: 1.18.0-0ubuntu1.2
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 44
Depends: 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)
Filename: pool/main/n/nginx/nginx_1.18.0-0ubuntu1.2_all.deb
…

要显示有关每个候选者的附加信息,包括反向依赖项的完整列表(依赖于查询包的包列表),请改用 showpkg 命令。 这将包括有关此包与其他包的关系的信息:

apt-cache showpkg package

显示有关 .deb 包的信息

要显示有关 .deb 文件的详细信息,可以将 --info 标志与 dpkg 命令一起使用。 此命令的目标应该是 .deb 文件的路径:

dpkg --info debfile.deb

这将向您显示有关相关软件包的一些元数据。 这包括包名称和版本、构建它的架构、所需的大小和依赖项、描述和冲突。

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

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

apt-cache depends nginx
Outputnginx
 |Depends: nginx-core
 |Depends: nginx-full
 |Depends: nginx-light
  Depends: nginx-extras
 |Depends: nginx-core
 |Depends: nginx-full
 |Depends: nginx-light
  Depends: nginx-extras

这将显示有关被列为硬依赖、建议、推荐或冲突的每个包的信息。

如果您需要找出哪些包依赖于某个包,您可以将该包传递给 apt-cache rdepends

apt-cache rdepends package

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

通常,存储库中有多个版本的包,只有一个默认包。 要查看软件包的可用版本,您可以使用 apt-cache policy

apt-cache policy package

这将显示安装了哪个版本(如果有),如果您没有使用安装命令指定版本,则默认安装的包,以及包版本表,以及指示每个版本优先级的权重。

这可用于确定将安装哪个版本以及可用的替代方案。 因为这还列出了每个版本所在的存储库,所以这可用于确定是否有任何额外的存储库正在取代默认存储库中的包。

使用 dpkg -l 显示已安装的软件包

要显示系统上安装的软件包,您有几个单独的选项,它们的输出格式和详细程度各不相同。

第一种方法涉及使用带有 -l 标志的 dpkgdpkg-query 命令。 这两个命令的输出是相同的。 没有参数,它给出了系统上每个已安装或部分安装的软件包的列表。 输出将如下所示:

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

系统上的每个包都会继续输出。 在输出的顶部,您可以看到每行前三个字符的含义。 第一个字符表示所需的包状态。 有可能:

  • u:未知
  • i:已安装
  • r:已移除
  • p:已清除
  • h:保持的版本

第二个字符表示包装系统已知的包装的实际状态。 这些可以是:

  • n:未安装
  • i:已安装
  • c:配置文件存在,但应用程序已卸载。
  • u:解压。 文件已解压缩,但尚未配置。
  • f:软件包安装了一半,这意味着在安装过程中出现故障导致操作停止。
  • w:包正在等待来自单独包的触发
  • p:该包已被另一个包触发。

第三个字符,对于大多数包来说将是一个空格,只有一个潜在的其他选项:

  • r:表示需要重新安装。 这通常意味着包已损坏并处于非功能状态。

其余列包含包名称、版本、体系结构和描述。

显示过滤包的安装状态

如果在 -l 模式之后添加搜索模式,dpkg 将列出包含该模式的所有包(无论是否安装)。 例如,您可以在此处搜索 YAML 处理库:

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

从第一列可以看出,没有安装第三和第四个结果。 这为您提供了与模式匹配的每个包,以及它们当前和所需的状态。

渲染系统上安装的包的另一种方法是使用 dpkg –get-selections

这提供了所有已安装或已删除但未清除的软件包的列表:

dpkg --get-selections

为了区分这两种状态,您可以通过管道将输出从 dpkg 传输到 awk 以便按状态进行过滤。 要仅查看已安装的软件包,请键入:

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

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

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

您可能还想通过 awk 了解有关 管道命令输出的更多信息,

搜索已安装的软件包

要在已安装的软件包库中搜索特定软件包,您可以在 --get-selections 选项之后添加软件包过滤器字符串。 这支持与通配符匹配。 同样,这将显示系统上已安装或仍有配置文件的所有软件包:

dpkg --get-selections libz*

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

列出软件包安装的文件

要找出一个包负责哪些文件,可以使用 -L 标志和 dpkg 命令:

dpkg -L package

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

要找出哪个包负责文件系统中的某个文件,可以使用 -S 标志将绝对路径传递给 dpkg 命令。

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

dpkg -S /path/to/file

请记住,通过安装后脚本移动到适当位置的任何文件都不能使用此技术绑定回包。

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

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

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

正常安装 apt-file 包:

sudo apt update
sudo apt install apt-file

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

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

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

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

很多时候,您可能需要从一个系统备份已安装软件包的列表,并使用它在不同的系统上安装一组相同的软件包。 这也有助于备份目的。 本节将演示如何导出和导入包列表。

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

您可以通过将 dpkg --get-selections 的输出重定向到文本文件来将已安装包的列表导出到文件:

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

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

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

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

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

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

apt-key exportall > ~/trusted_keys.txt

您现在可以将 packagelist.txt 文件、sources 目录和 trusted_keys.txt 文件传输到另一台计算机进行导入。

导入包列表

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

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

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

接下来,清除新计算机中所有非必需包的状态。 这将确保您将更改应用到全新的状态。 这必须使用 root 帐户或 sudo 权限完成:

sudo dpkg --clear-selections

这将标记所有非必要的软件包以进行卸载。 您应该更新本地软件包列表,以便您的安装将包含您计划安装的所有软件的记录。 实际的安装和升级过程将由一个名为 dselect 的工具来处理。

您应确保已安装 dselect 工具。 此工具维护自己的数据库,因此您还需要更新它才能继续:

sudo apt update
sudo apt install dselect
sudo dselect update

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

sudo dpkg --set-selections < packagelist.txt

这会设置正确的包状态。 要应用更改,请运行 apt dselect-upgrade

sudo apt dselect-upgrade

这将下载并安装任何必要的软件包。 它还将删除任何标记为取消选择的包。 最后,您的软件包列表应该与之前的计算机匹配,尽管仍然需要复制或修改配置文件。 您可能需要使用 etckeeper 之类的工具从 /etc 目录迁移配置文件。

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

第 7 步 - 添加存储库和 PPA

尽管大多数发行版提供的默认存储库集通常是最易于维护的,但有时其他资源可能会有所帮助。 在本节中,您将学习如何配置您的打包工具以查阅其他资源。

Ubuntu 上传统存储库的替代方案是 PPA,或 p 个人 package a 存档。 其他 Linux 风格通常使用不同但相似的第三方存储库概念。 通常,PPA 的范围比存储库小,并且包含由 PPA 所有者维护的重点应用程序集。

将 PPA 添加到您的系统允许您使用常用的包管理工具来管理它们包含的包。 这可用于提供未包含在发行版存储库中的更多最新软件包。 请注意只添加您信任的 PPA,因为您将允许非标准维护人员为您的系统构建包。

要添加 PPA,您可以使用 add-apt-repository 命令。 目标应包括标签 ppa:,后跟 Launchpad 上的 PPA 所有者名称、斜线和 PPA 名称:

sudo add-apt-repository ppa:owner_name/ppa_name

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

sudo apt update

您还可以直接编辑存储库配置。 您可以编辑 /etc/apt/sources.list 文件或在 /etc/apt/sources.list.d 目录中放置一个新列表。 如果你走后一条路线,你创建的文件名必须以 .list 结尾:

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

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

/etc/apt/sources.list.d/new_repo.list

deb_or_deb-src url_of_repo release_code_name_or_suite component_names

存储库规范的不同部分是:

  • debdeb-src:标识存储库的类型。 常规存储库以 deb 标记,而源存储库以 deb-src 开头。
  • url:存储库的主 URL。 这应该是可以找到存储库的位置。
  • 发行代号或套件:这通常是您的发行版本的代码名称,但它可以是用于标识为您的发行版本创建的一组特定包的任何名称。
  • 组件名称:用于选择您希望可用的包的标签。 这通常是存储库维护者提供的一个区别,用来表达它所包含的软件的可靠性或许可限制。

您可以在文件中添加这些行。 大多数存储库将包含有关应使用的确切格式的信息。 在其他一些 Linux 发行版上,您可以通过实际安装仅包含该存储库的配置文件的包来添加其他存储库源——这与包管理器的设计工作方式一致。

结论

包管理可能是管理 Linux 系统中最重要的一个方面。 您可以执行许多其他包管理操作,但本教程提供了 Ubuntu 基础知识的基线,其中许多可以通过微小的更改推广到其他发行版。

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