Ubuntu和Debian包管理要点
介绍
包管理是 Linux 系统的基本功能之一。 打包格式和包管理工具因发行版而异,但大多数发行版使用两组核心工具之一。
对于基于 Red Hat Enterprise Linux 的发行版(例如 RHEL 本身和 Rocky Linux),RPM 打包格式和打包工具如 rpm
和 yum
很常见。 Debian、Ubuntu 和相关发行版使用的另一个主要系列使用 .deb
打包格式和 apt
和 dpkg
等工具。
近年来,有更多的辅助包管理器被设计为与核心 apt
和 dpkg
工具并行运行:例如,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
文件。
为此,您使用 dpkg
。 dpkg
主要用于处理单个包。 它不会尝试从存储库执行安装,而是在当前目录或提供的路径中查找 .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 remove
或 apt 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
标志的 dpkg
或 dpkg-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
存储库规范的不同部分是:
- deb 或 deb-src:标识存储库的类型。 常规存储库以
deb
标记,而源存储库以deb-src
开头。 - url:存储库的主 URL。 这应该是可以找到存储库的位置。
- 发行代号或套件:这通常是您的发行版本的代码名称,但它可以是用于标识为您的发行版本创建的一组特定包的任何名称。
- 组件名称:用于选择您希望可用的包的标签。 这通常是存储库维护者提供的一个区别,用来表达它所包含的软件的可靠性或许可限制。
您可以在文件中添加这些行。 大多数存储库将包含有关应使用的确切格式的信息。 在其他一些 Linux 发行版上,您可以通过实际安装仅包含该存储库的配置文件的包来添加其他存储库源——这与包管理器的设计工作方式一致。
结论
包管理可能是管理 Linux 系统中最重要的一个方面。 您可以执行许多其他包管理操作,但本教程提供了 Ubuntu 基础知识的基线,其中许多可以通过微小的更改推广到其他发行版。
接下来,您可能想了解更多关于在其他平台上的包管理。