本指南解释了什么是 APK 包管理器以及如何使用带有示例的 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]
存储库,所以它是滚动发布版本。
如果您使用的是稳定版,您应该已经看到了版本号,因为 example 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 中安装包
添加或安装一个包,对于 example 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
您还可以获得与模式匹配的所有包的列表。 为了 example,以下命令将显示与搜索词“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 中安装手册页