本指南解释了什么是 应用程式 包管理器以及如何使用 Apk 命令行包管理器和示例进行各种 Alpine Linux 包管理操作。
内容
apk包管理器简介
Apk,代表 一个松 磷阿奇奇 钾eeper,是 Alpine Linux 的默认包管理器。 它用于在正在运行的 Alpine Linux 系统上安装、更新、升级、搜索、列出和删除软件包。 Apk 是 apk-tools
预装在所有 Alpine Linux 版本中的软件包。
Apk 检索包以及有关在线存储库中可用包的信息。 每个存储库都包含一个特殊的索引文件,名为 APKINDEX.tar.gz
. 存储在存储库中的所有软件包都经过数字签名 tar.gz
档案。 他们有扩展 .apk
,并且通常被称为 “一包”.
从 Alpine Linux 3.3 版开始,默认启用了两个存储库。 他们是 – main
和 community
.
这 [main]
存储库由经过彻底测试并得到 Alpine Linux 核心团队官方支持的软件包组成。 这 [community]
存储库包含社区支持的包,这些包从 [testing]
或者 [edge]
存储库。 这 [testing]
存储库通常有新的、损坏的和/或过时的包。 此存储库不提供支持,也不包含在发布快照中。
所有存储库都配置在 /etc/apk/repositories
文件。 让我们看看这个文件的内容 cat
命令:
$ cat /etc/apk/repositories
示例输出:
https://sjc.edge.kernel.org/alpine/edge/main https://sjc.edge.kernel.org/alpine/edge/community
上述文件中的每一行都表示一个存储库。 正如你在上面的输出中看到的,我已经启用 [edge]
存储库,因此它是滚动发布版本。
如果您使用的是稳定版本,您应该已经看到版本号,例如 v3.12
,如下图:
https://sjc.edge.kernel.org/alpine/v3.12/main https://sjc.edge.kernel.org/alpine/v3.12/community
在 Alpine Linux 中安装和管理软件包的 Apk 命令示例
在 Alpine Linux 中使用 apk 进行包管理非常简单直接。 Apk 不包含太多选项,语法更容易记住。
apk包管理器的典型用法是:
apk [<OPTIONS>...] COMMAND [<ARGUMENTS>...]
让我向您展示一些用于日常操作的重要命令。
1.显示apk命令帮助
如果您是 apk 的新手,您可以通过运行以下命令随时查看 apk 命令帮助部分:
$ apk --help
apk 有许多子命令来执行特定操作。 要显示子命令的帮助部分,请运行:
$ apk add --help
2. Alpine Linux 更新包列表
要获取 Alpine Linux 存储库中可用软件包的列表,只需运行:
$ sudo apk update
示例输出:
fetch https://sjc.edge.kernel.org/alpine/edge/main/x86_64/APKINDEX.tar.gz fetch https://sjc.edge.kernel.org/alpine/edge/community/x86_64/APKINDEX.tar.gz v20201218-310-g44bdae590f [https://sjc.edge.kernel.org/alpine/edge/main] v20201218-333-ga9f7a8a644 [https://sjc.edge.kernel.org/alpine/edge/community] OK: 13780 distinct packages available
正如你在上面的输出中看到的,目前有 13780 Alpine 存储库中提供的软件包。 请注意,这些不是本地安装的软件包总数,而是可用软件包的总数。
3. 在 Alpine Linux 中安装包
添加或安装一个包,例如 vim, 在 Alpine Linux 中,只需运行:
$ sudo apk add vim
上面的命令将安装 vim 及其依赖项。
(1/3) Installing xxd (8.2.2137-r0) (2/3) Installing lua5.3-libs (5.3.6-r0) (3/3) Installing vim (8.2.2137-r0) Executing busybox-1.32.0-r8.trigger OK: 163 MiB in 87 packages
同样,您可以通过使用如下空格提及来添加多个包:
$ sudo apk PackageName1 PackageName2
3.1. 安装本地包
如果您已经下载了一个软件包,则可以像下面那样安装它。
$ sudo apk add --allow-untrusted vim-8.2.2137-r0.apk
您还可以安装多个软件包:
$ sudo apk add --allow-untrusted PackageName1.apk PackageName2.apk PackageName3.apk
4. 在 Alpine Linux 中删除包
要从 Alpine Linux 系统卸载或删除已安装的软件包,请运行:
$ sudo apk del vim
此命令将删除 vim 及其依赖项。
(1/3) Purging vim (8.2.2137-r0) (2/3) Purging xxd (8.2.2137-r0) (3/3) Purging lua5.3-libs (5.3.6-r0) Executing busybox-1.32.0-r8.trigger OK: 144 MiB in 84 packages
如果要删除多个包,请用空格分隔提及它们。
5. 在 Alpine Linux 中搜索包
Alpine Linux 存储库包含 13,000 多个软件包。 您可以使用以下命令列出所有可用的软件包及其说明:
$ apk search -v
示例输出:
kleopatra-20.08.3-r0 - Certificate Manager and Unified Crypto GUI py3-libevdev-0.9-r0 - Python3 wrapper around the evdev library telepathy-farstream-dev-0.6.2_git20190919-r0 - Telepathy GLib-based client library that uses Farstream to handle Call channels (development files) vulkan-loader-1.2.137-r0 - Vulkan Installable Client Driver (ICD) Loader mtd-utils-ubi-2.1.2-r0 - MTD utils (UBI and UBIFS commands) hwids-udev-20201207-r0 - Hardware identification databases (udev integration) py3-rsa-4.6-r0 - Pure-Python3 RSA implementation [...]
要仅显示包的总数,请将输出通过管道传输到 wc
命令如下:
$ apk search -v | wc -l
您还可以获得与模式匹配的所有包的列表。 例如,以下命令将显示与搜索词“vim”匹配的所有包。
$ apk search -v 'vim*'
如果您只想显示包含特定术语的包 描述, 跑:
$ apk search -v --description 'disk'
或者,很快使用 -d
转变:
$ apk search -v -d 'disk'
6.在Alpine Linux中显示包详细信息
要显示特定包的详细信息,我们可以使用 info
命令如下:
$ apk info vim
您将看到给定包的简短描述及其托管网站。
示例输出:
vim-8.2.2137-r0 description: Improved vi-style text editor vim-8.2.2137-r0 webpage: https://www.vim.org/ vim-8.2.2137-r0 installed size: 18 MiB gvim-8.2.2137-r0 description: advanced text editor, with GUI gvim-8.2.2137-r0 webpage: https://www.vim.org/ gvim-8.2.2137-r0 installed size: 29 MiB
如您所见,此命令不仅列出了 vim 包的详细信息,还列出了名称中包含模式“vim”的其他包的详细信息。
如果您想要有关给定包及其依赖项的详细信息,请使用 -a
旗帜。
$ apk info -a vim
上述命令将显示以下详细信息:
- 包装说明。
- 包的网站。
- 安装大小(即安装后包所需的大小)。
- 包的内容(即包安装的文件列表)。
- 包依赖,即使用这个包需要哪些包。
- 哪些软件包需要安装此软件包。
- 和更多。
7. 列出 Alpine Linux 中已安装的包
要查看 Alpine Linux 系统中所有已安装软件包的列表,请运行:
$ apk info
示例输出:
lm_sensors man virtualbox-guest-modules-virt musl libcrypto1.1 libssl1.1 apk-tools musl-utils busybox alpine-baselayout [...]
您还可以列出已安装的软件包及其版本号和描述:
$ apk info -vv
示例输出:
lm_sensors-3.4.0-r6 - Collection of user space tools for general SMBus access and hardware monitoring. man-1.14.3-r0 - dummy package for upgrade compatibility. this can safely be removed virtualbox-guest-modules-virt-4.14.167-r0 - VirtualBox Additions kernel modules for virt musl-1.2.2_pre6-r0 - the musl c library (libc) implementation libcrypto1.1-1.1.1i-r0 - Crypto library from openssl libssl1.1-1.1.1i-r0 - SSL shared libraries apk-tools-2.12.0-r3 - Alpine Package Keeper - package manager for alpine musl-utils-1.2.2_pre6-r0 - the musl c library (libc) implementation busybox-1.32.0-r8 - Size optimized toolbox of many common UNIX utilities alpine-baselayout-3.2.0-r8 - Alpine base dir structure and init scripts [...]
仅列出已安装软件包的总数:
$ apk info | wc -l 87
8. Alpine Linux 升级包
要升级特定包,请运行:
$ sudo apk update
$ sudo apk add -u vim
或者,
$ sudo apk add --upgrade vim
要升级所有已安装的软件包,请运行:
$ sudo apk update
$ sudo apk upgrade
您还可以将上述命令组合成一个如下所示的命令:
$ sudo apk -U upgrade
9.升级Alpine Linux
将正在运行的 Alpine Linux 升级到下一个可用版本很容易! Alpine Linux 有两个版本:
- 稳定的
- 滚动释放(边缘)
您可以从当前稳定版本升级到更新版本,也可以将稳定版本转换为滚动发布版本。
以下指南中提供了更详细的说明:
- 如何将 Alpine Linux 升级到最新版本
10. 保留升级包
有时,您希望在升级 Alpine Linux 系统时出于某种原因阻止或保留软件包自动升级。 阻止包裹的原因可能有很多。 例如,应用程序需要特定版本才能正常工作。 或者新软件包可能会破坏您的系统。 因此,您希望在升级系统时忽略升级的软件包。
要保留升级中的特定软件包,请使用以下任一命令:
$ sudo apk add vim=8.2.0-r0
或者,
$ sudo apk add 'vim<8.2.1'
然后,使用命令进行系统升级:
$ sudo apk upgrade
此命令将升级所有软件包,但将 vim 软件包保持在 8.2.0 或更低版本。
您可以稍后将 vim 包升级到当前可用的版本,如下所示:
$ sudo apk add 'vim>8.2.1'
您还可以使用“模糊”版本匹配将版本固定到主要/次要版本。 例如,以下命令将匹配任何以 8.2 开头的 vim 版本。
$ sudo apk add 'vim=~8.2'
相关阅读:
- 如何在 Arch Linux 中忽略正在升级的软件包
- 如何防止软件包在 Debian、Ubuntu 中升级
11.在Alpine Linux中下载包
有时,您想下载特定的软件包但不想安装它。 例如,让我们使用命令下载 vim 包:
$ apk fetch vim
上面的命令将显示来自 Alpine 存储库的 vim 包并将其保存在当前目录中。
$ ls vim-8.2.2137-r0.apk
如果要将包保存在不同的路径中,请使用 -o
转变。
$ apk fetch vim -o ~/Downloads
请注意,此命令不会下载所有必需的依赖项,而只会下载实际的包。
要下载给定的包以及所有必需的依赖项,请使用 -R
(--recursive
) 旗帜:
$ apk fetch -R vim
示例输出:
Downloading xxd-8.2.2137-r0 Downloading ncurses-libs-6.2_p20201219-r0 Downloading musl-1.2.2_pre6-r0 Downloading lua5.3-libs-5.3.6-r0 Downloading vim-8.2.2137-r0 Downloading ncurses-terminfo-base-6.2_p20201219-r0
您可以安装本地下载的软件包,如图 3.1. 安装本地包 部分。
12. 显示包的仓库详细信息
您可能想要查找包来自哪个存储库。 Apk 也有一个子命令。
要显示存储库一个包(例如 vim
) 安装自并将更新自,使用 apk policy
命令:
$ apk policy vim
示例输出:
vim policy: 8.2.2137-r0: lib/apk/db/installed etc/apk/cache https://sjc.edge.kernel.org/alpine/edge/main
如您所见,vim 包已从 [main]
存储库。
13. 显示包和存储库的统计信息
我们可以使用以下命令打印有关已安装软件包和软件包存储库的统计信息:
$ apk stats
示例输出:
installed: packages: 87 dirs: 485 files: 9617 bytes: 171270144 triggers: 5 available: names: 30975 packages: 13773 atoms: num: 9761
14.清理包缓存
默认情况下,所有已安装的包都缓存在 /etc/apk/cache/
目录。 将较新的包添加到缓存时,默认情况下会保留较旧版本的包。
如果你不想要旧版本的包,你可以简单地使用命令清除包缓存:
$ sudo apk cache clean
如果要查看删除了哪些版本,请使用 -v(详细)开关:
$ sudo apk -v cache clean
如果您不小心从缓存中删除了包,可以使用以下命令下载它们:
$ sudo apk cache download
您还可以在单个命令中删除缓存并下载丢失的包:
$ sudo apk cache -v sync
希望这可以帮助。
资源:
- 高山维基
相关阅读:
- 如何在 Alpine Linux 中安装手册页
Alpine LinuxAlpine Package KeeperapkLinuxLinux basicsLinux 命令包管理包管理器