如何管理命令别名

Incus 命令行客户端 incus 支持为常用命令添加别名。您可以使用别名作为较长命令的快捷方式,或自动为现有命令添加标志。

别名管理通过 incus alias 命令完成。

incus alias 命令中,您可以使用以下子命令

  • incus alias add 添加新的命令别名

  • incus alias list 列出所有命令别名

  • incus alias remove 删除命令别名

  • incus alias rename 重命名命令别名

运行 incus alias --help 以查看所有可用的子命令和参数。

注意

命令别名_镜像别名_ 不同。镜像别名是镜像的替代名称,通常是更短的名称或该镜像的其他常用助记符。

镜像别名是 Incus API 的服务器端概念,而命令别名纯粹是命令行工具配置的一部分。

如何添加命令别名

要始终在删除实例时提示确认,请为 incus delete 创建一个始终运行 incus delete --interactive 的别名。

以下 incus alias 命令将添加名为 delete 的命令别名,并将调用相同的 Incus 命令,但添加了 --interactive 标志。

incus alias add delete "delete --interactive"

请注意,当您现在运行 incus delete mycontainer 删除名为 myinstance 的实例时,Incus 命令行客户端将用 incus delete --interactive 替换 incus delete,并将改为执行 incus delete --interactive myinstance

当命令别名与 Incus 命令同名时,命令别名将屏蔽 Incus 命令。

如果您想逐字运行同名的 Incus 命令,则需要先删除命令别名。此外,当您使用带参数的命令别名(在本例中为容器的名称)时,除非通过 @ARGS@ 字符串手动将其放置在其他位置,否则 Incus 命令行客户端会将这些参数放置在别名命令的末尾。

最后,命令别名中的命令应用引号括起来。

如何列出所有命令别名

要查看所有已配置的别名,请运行 incus alias list

如何删除命令别名

要删除现有的命令别名,请键入 incus alias remove 并添加该命令别名的名称。

如何重命名命令别名

要重命名现有的命令别名,请键入 incus alias rename,然后添加该现有命令别名的名称,最后添加新命令别名的名称。

内置 shell 别名

Incus 带有 shell 内置命令别名。该别名基于 incus exec 命令,执行 exec @ARGS@ -- su -l

$ incus alias list
+-----------+----------------------+
|   ALIAS   |        TARGET        |
+-----------+----------------------+
| shell     | exec @ARGS@ -- su -l |
+-----------+----------------------+

如果您运行 incus shell myinstance,此命令别名将扩展为 incus exec myinstance -- su -l

-- 结构是命令行工件,指示 Incus 命令行客户端停止处理后续参数,例如后面的 -l。如果没有 --,扩展的命令 incus exec mycontainer su -l 将失败,因为 Incus 命令行客户端将尝试解析 -l 标志。在这种特定情况下,它将失败并出现错误,因为 incus shell 没有 -l 参数。

su -l 命令等同于 su -su --login。它在实例中以 root 用户身份启动登录 shell。该命令读取必要的配置文件以启动用户 root 的登录 shell。

shell 别名内置于 Incus 服务器中。因此,Incus 客户端无法将其删除。如果您尝试删除它,将出现别名不存在的错误。

$ incus alias remove shell
Error: Alias shell doesn't exist
$

如果您使用名称 shell 添加新的命令别名,新的命令别名将屏蔽内置命令别名。也就是说,Incus 命令行客户端将使用您新添加的别名,而内置命令别名将被隐藏。当您删除新添加的别名 shell 时,内置别名将再次出现。

如何使用命令别名在实例中获取非 root shell

一些 Incus 镜像已配置为创建非 root 用户名,如下表所示。

发行版

用户名

镜像

Alpine

alpine

images:alpine/edge/cloud

Debian

debian

images:debian/12/cloud

Fedora

fedora

images:fedora/40/cloud

Ubuntu

ubuntu

images:ubuntu/24.04/cloud

您可以使用以下命令获取此非 root 用户名的实例 shell。

$ incus launch images:debian/12/cloud mycontainer
Launching mycontainer
$ incus exec mycontainer -- su -l debian
debian@mycontainer:~$

通过使用 Incus 命令别名,您还可以创建命令别名以获取该实例的 shell。在此命令别名中,您指定 su -l 到用户名 debian

$ incus alias add debian 'exec @ARGS@ -- su -l debian'
$

最后,您现在可以使用以下便捷命令获取实例的 shell

$ incus debian mycontainer
debian@mycontainer:~$

注意

作为 su 的替代方案,您可以改用 sudo。在这种情况下,命令将如下所示。

 incus alias add debian `exec @ARGS@ -- sudo --login --user debian`

注意

启动系统容器或虚拟机时,Incus 允许指定环境变量。

 incus launch -c environment.MYVARIABLE=myvalue images:debian/12 myinstance

此类实例中的登录 shell 无法访问这些环境变量。这是由于 su -lsudo --login 登录 shell 的语义导致的,它们不会保留任何环境变量。如果您想保留任何环境变量,则应改用 su --preserve-environmentsudo --preserve-env

另一种方法是将环境变量添加到实例的文件系统文件 /etc/environment 中。这样做,任何新的实例登录 shell 都将能够解析此文件并启用任何环境变量。