如何管理命令别名¶
Incus 命令行客户端 incus 支持为常用命令添加别名。您可以使用别名作为较长命令的快捷方式,或自动为现有命令添加标志。
别名管理通过 incus alias 命令完成。
在 incus alias 命令中,您可以使用以下子命令
incus alias add添加新的命令别名incus alias list列出所有命令别名incus alias remove删除命令别名incus alias rename重命名命令别名
运行 incus alias --help 以查看所有可用的子命令和参数。
如何添加命令别名¶
要始终在删除实例时提示确认,请为 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 |
|
|
Debian |
|
|
Fedora |
|
|
Ubuntu |
|
|
您可以使用以下命令获取此非 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 -l 或 sudo --login 登录 shell 的语义导致的,它们不会保留任何环境变量。如果您想保留任何环境变量,则应改用 su --preserve-environment 或 sudo --preserve-env。
另一种方法是将环境变量添加到实例的文件系统文件 /etc/environment 中。这样做,任何新的实例登录 shell 都将能够解析此文件并启用任何环境变量。