如何管理命令别名¶
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 都将能够解析此文件并启用任何环境变量。