搜索

16.9. 使用控制台

download PDF

16.9.1. 可用命令

要在控制台中查看可用命令列表,您可以使用 帮助

karaf@root()> help
bundle                            Enter the subshell
bundle:capabilities               Displays OSGi capabilities of a given bundles.
bundle:classes                    Displays a list of classes/resources contained in the bundle
bundle:diag                       Displays diagnostic information why a bundle is not Active
bundle:dynamic-import             Enables/disables dynamic-import for a given bundle.
bundle:find-class                 Locates a specified class in any deployed bundle
bundle:headers                    Displays OSGi headers of a given bundles.
bundle:id                         Gets the bundle ID.
...

您有简短描述的所有命令列表。

您可以使用 tab 键获得所有命令的快速列表:

karaf@root()> Display all 294 possibilities? (y or n)
...

16.9.2. 子 shell 和完成模式

命令具有作用域和名称。例如,命令 feature:list 包含 功能 作为范围,列表 为 name。

OSSM"groups"按范围表示命令。每个范围都组成一个子 shell。

您可以使用其完全限定名称(scope:name)直接执行命令:

karaf@root()> feature:list
...

或在子 shell 中输入命令并键入命令上下文到子 shell:

karaf@root()> feature
karaf@root(feature)> list

您可以通过键入 subshell 名称(以下特性)直接在子 shell 中输入。您可以从子 shell 直接"切换"到另一个:

karaf@root()> feature
karaf@root(feature)> bundle
karaf@root(bundle)>

提示符可显示介于()之间的当前子 shell。

exit 命令进入父子 shell:

karaf@root()> feature
karaf@root(feature)> exit
karaf@root()>

completion 模式定义了 tab 键和 help 命令的行为。

您有三种不同的模式可用:

  • GLOBAL
  • FIRST
  • 子 SHELL

您可以使用 etc/org.apache.karaf.shell.cfg 文件中的 completionMode 属性来定义默认的完成模式。默认情况下,您有:

completionMode = GLOBAL

您还可以使用 shell:completion 命令更改完成模式"在 fly"中(同时使用 Karaf shell 控制台):

karaf@root()> shell:completion
GLOBAL
karaf@root()> shell:completion FIRST
karaf@root()> shell:completion
FIRST

shell:完成 可告知您使用的当前完成模式。您还可以提供您想要的新完成模式。

GLOBAL completion 模式是 CIB 4.0.0 中的默认模式(主要用于转换)。

GLOBAL 模式并不实际使用 subshell:它的行为与之前的 Karaf 版本相同。

当您键入 tab 键时,您所处的子 shell 是什么,补全将显示所有命令和所有别名:

karaf@root()> <TAB>
karaf@root()> Display all 273 possibilities? (y or n)
...
karaf@root()> feature
karaf@root(feature)> <TAB>
karaf@root(feature)> Display all 273 possibilities? (y or n)

FIRST completion 模式是 GLOBAL completion 模式的替代模式。

如果在根级别子 shell 中键入 tab 键,补全将显示命令以及所有子 shell 的别名(如 GLOBAL 模式)。但是,如果您在子 shell 中键入 tab 键,补全将仅显示当前子 shell 的命令:

karaf@root()> shell:completion FIRST
karaf@root()> <TAB>
karaf@root()> Display all 273 possibilities? (y or n)
...
karaf@root()> feature
karaf@root(feature)> <TAB>
karaf@root(feature)>
info install list repo-add repo-list repo-remove uninstall version-list
karaf@root(feature)> exit
karaf@root()> log
karaf@root(log)> <TAB>
karaf@root(log)>
clear display exception-display get log set tail

SUBSHELL 补全模式是真正的子 shell 模式。

如果在 root 级别上键入 tab 键,则 补全会显示子 shell 命令(转至子 shell)以及全局别名。您处于子 shell 中后,如果您键入 TAB 键,则完成将显示当前子 shell 的命令:

karaf@root()> shell:completion SUBSHELL
karaf@root()> <TAB>
karaf@root()>
* bundle cl config dev feature help instance jaas kar la ld lde log log:list man package region service shell ssh system
karaf@root()> bundle
karaf@root(bundle)> <TAB>
karaf@root(bundle)>
capabilities classes diag dynamic-import find-class headers info install list refresh requirements resolve restart services start start-level stop
uninstall update watch
karaf@root(bundle)> exit
karaf@root()> camel
karaf@root(camel)> <TAB>
karaf@root(camel)>
backlog-tracer-dump backlog-tracer-info backlog-tracer-start backlog-tracer-stop context-info context-list context-start context-stop endpoint-list route-info route-list route-profile route-reset-stats
route-resume route-show route-start route-stop route-suspend

16.9.3. 像环境一样的 UNIX

Karaf 控制台提供完整的 Unix 控制台,如环境。

16.9.3.1. help 或 man

我们已看到 help 命令的用法来显示所有可用的命令。

但是,您还可以使用 help 命令获取有关命令或 man 命令的详细信息,它是 help 命令的别名。您还可以通过将 --help 选项用于 命令,使用另外一种形式来获取命令的帮助。

因此这些命令

karaf@root()> help feature:list
karaf@root()> man feature:list
karaf@root()> feature:list --help

所有都生成相同的帮助输出:

DESCRIPTION
        feature:list

        Lists all existing features available from the defined repositories.

SYNTAX
        feature:list [options]

OPTIONS
        --help
                Display this help message
        -o, --ordered
                Display a list using alphabetical order
        -i, --installed
                Display a list of all installed features only
        --no-format
                Disable table rendered output

16.9.3.2. completion

当您键入 tab 键时,Batton 会尝试完成:

  • subshell
  • commands
  • 别名
  • 命令参数
  • 命令选项

16.9.3.3. Alias

别名是与给定命令关联的另一个名称。

shell:alias 命令创建新别名。例如,为实际 feature:list -i 命令创建 list-installed-features 别名,您可以执行以下操作:

karaf@root()> alias "list-features-installed = { feature:list -i }"
karaf@root()> list-features-installed
Name       | Version | Required | State   | Repository     | Description
------------------------------------------------------------------------------------------------------------------------------
feature    | 4.0.0   | x        | Started | standard-4.0.0 | Features Support
shell      | 4.0.0   | x        | Started | standard-4.0.0 | Karaf Shell
deployer   | 4.0.0   | x        | Started | standard-4.0.0 | Karaf Deployer
bundle     | 4.0.0   | x        | Started | standard-4.0.0 | Provide Bundle support
config     | 4.0.0   | x        | Started | standard-4.0.0 | Provide OSGi ConfigAdmin support
diagnostic | 4.0.0   | x        | Started | standard-4.0.0 | Provide Diagnostic support
instance   | 4.0.0   | x        | Started | standard-4.0.0 | Provide Instance support
jaas       | 4.0.0   | x        | Started | standard-4.0.0 | Provide JAAS support
log        | 4.0.0   | x        | Started | standard-4.0.0 | Provide Log support
package    | 4.0.0   | x        | Started | standard-4.0.0 | Package commands and mbeans
service    | 4.0.0   | x        | Started | standard-4.0.0 | Provide Service support
system     | 4.0.0   | x        | Started | standard-4.0.0 | Provide System support
kar        | 4.0.0   | x        | Started | standard-4.0.0 | Provide KAR (KARaf archive) support
ssh        | 4.0.0   | x        | Started | standard-4.0.0 | Provide a SSHd server on Karaf
management | 4.0.0   | x        | Started | standard-4.0.0 | Provide a JMX MBeanServer and a set of MBeans in

登录时,Apache Karaf 控制台会读取 etc/shell.init.script 文件,您可以在其中创建别名。它类似于 Unix 上的 bashrc 或配置文件文件。

ld = { log:display $args } ;
lde = { log:exception-display $args } ;
la = { bundle:list -t 0 $args } ;
ls = { service:list $args } ;
cl = { config:list "(service.pid=$args)" } ;
halt = { system:shutdown -h -f $args } ;
help = { *:help $args | more } ;
man = { help $args } ;
log:list = { log:get ALL } ;

您可以在此处看到默认可用的别名:

  • ld 是一个显示日志的简短形式(别名至 log:display 命令)
  • lde 是一个显示异常的简短形式(原因为 log:exception-display 命令)
  • la 是一个列出所有捆绑包(别名至 bundle:list -t 0 命令)的简短形式。
  • ls 是一个简短形式,用于列出所有服务(别名至 service:list 命令)
  • CL 是一个简短形式,用于列出所有配置(别名至 config:list 命令)
  • halt 是一个关闭 Apache Karaf(别名至 system:shutdown -h -f 命令的简短形式)
  • help 是一个显示帮助的简短形式(别名为 *:help 命令)
  • man 与帮助相同( 帮助 命令别名)
  • log:list 显示所有日志记录器和级别(别名至 log:get ALL 命令)

您可以在 etc/shell.init.script 文件中创建自己的别名。

16.9.3.4. 密钥绑定

与在大多数 Unix 环境中一样,Patton 控制台支持一些键绑定:

  • 要在命令历史记录中导航的箭头键
  • CTRL-D 注销/shutdown Karaf
  • 使用 CTRL-R 搜索之前执行的命令
  • 使用 CTRL-U 删除行

16.9.3.5. pipe

您可以将一个命令的输出作为输入传送到另一个命令的输出。这是一个管道,使用 | 字符:

karaf@root()> feature:list |grep -i war
pax-war                       | 4.1.4                            |          | Uninstalled | org.ops4j.pax.web-4.1.4  | Provide support of a full WebContainer
pax-war-tomcat                | 4.1.4                            |          | Uninstalled | org.ops4j.pax.web-4.1.4  |
war                           | 4.0.0                            |          | Uninstalled | standard-4.0.0           | Turn Karaf as a full WebContainer
blueprint-web                 | 4.0.0                            |          | Uninstalled | standard-4.0.0           | Provides an OSGI-aware Servlet ContextListener fo

16.9.3.6. grep, more, find, …​

Karaf 控制台提供一些与 Unix 环境类似的核心命令:

  • shell:alias 为现有命令创建别名
  • shell:cat 显示文件或 URL 的内容
  • shell:clear 清除当前控制台显示
  • shell:completion 显示或更改当前完成模式
  • shell:date 显示当前日期(可选使用格式)
  • shell:每个 参数列表都执行冲突
  • shell:echo echoes 并打印到 stdout 的参数
  • shell:编辑 当前文件或 URL 的文本编辑器
  • shell:env 显示或设置 shell 会话变量的值
  • shell:exec 执行系统命令
  • shell:grep 打印与给定模式匹配的行
  • shell:head 显示输入的第一行
  • shell:history 打印命令历史记录
  • shell:如果 允许您使用条件(如果是,则)在脚本中使用其他块
  • shell:info 会输出有关当前 Karaf 实例的各种信息
  • shell:java 执行 Java 应用程序
  • shell: 无 文件页器
  • shell:logout 断开 shell 与当前会话的连接
  • shell: more is a file pager
  • shell:创建新 Java 对象
  • shell:printf 格式和打印参数
  • shell: sleep sleep for a bit to up
  • shell:排序 写入所有文件到 stdout 的串联
  • shell:源 执行脚本中包含的命令
  • 当执行命令抛出异常时,shell:stack-traces-print 会在控制台中打印完整的堆栈追踪
  • shell:tac 捕获 STDIN,并将其返回为字符串
  • shell:tail 显示输入的最后一行
  • shell:threads 打印当前线程
  • shell:watch 定期执行命令并刷新输出
  • shell:wc 会为每个文件打印换行符、字和字节数
  • shell: when 循环条件为 true

您不必使用 命令的完全限定名称,只要其唯一,就可以直接使用命令名称。因此,您可以使用 'head' 而不是 'shell:head'

同样,您可以使用 help 命令或 --help 选项查找这些命令的详细信息以及这些命令的所有选项。

16.9.3.7. 脚本

Apache Karaf 控制台支持完整的脚本语言,类似于 Unix 上的 bash 或 csh。

每个 (shell:each)命令可以迭代列表:

karaf@root()> list = [1 2 3]; each ($list) { echo $it }
1
2
3
注意

可使用 shell:while 命令编写同一循环:

karaf@root()> a = 0 ; while { %((a+=1) <= 3) } { echo $a }
1
2
3

您可以自行创建列表(如上例中的 ),或者某些命令也可以返回列表。

我们可以注意到,控制台使用名称列表创建了一个"session"变量,您可以使用 $ list 进行访问。

$it 变量是一个与当前对象对应的隐式变量(其中当前迭代的值)。

使用 [] 创建列表时,Apache Karaf 控制台会创建一个 Java ArrayList。这意味着,您可以使用 ArrayList 对象中的方法(如 instance get 或 size):

karaf@root()> list = ["Hello" world]; echo ($list get 0) ($list get 1)
Hello world

在这里,我们可以注意,在对象上调用方法直接使用 (对象方法参数)。此处 ($list get 0) 表示 $list.get(0),其中 $list 是 ArrayList。

class 表示法将显示有关对象的详细信息:

karaf@root()> $list class
...
ProtectionDomain     ProtectionDomain  null
 null
 <no principals>
 java.security.Permissions@6521c24e (
 ("java.security.AllPermission" "<all permissions>" "<all actions>")
)


Signers              null
SimpleName           ArrayList
TypeParameters       [E]

您可以将变量"广播"到指定类型。

karaf@root()> ("hello world" toCharArray)
[h, e, l, l, o,  , w, o, r, l, d]

如果失败,您会看到广播异常:

karaf@root()> ("hello world" toCharArray)[0]
Error executing command: [C cannot be cast to [Ljava.lang.Object;

您可以使用 shell:source 命令"call"一个脚本:

karaf@root> shell:source script.txt
True!

where script.txt contains:

foo = "foo"
if { $foo equals "foo" } {
  echo "True!"
}
注意

编写脚本时空格很重要。例如,以下脚本不正确:

if{ $foo equals "foo" } ...

并使用以下内容失败:

karaf@root> shell:source script.txt
Error executing command: Cannot coerce echo "true!"() to any of []

因为 if 语句后缺少了空格。

对于别名,您可以在 etc/shell.init.script 文件中创建初始化脚本。您还可以使用别名命名脚本。实际上,别名只是脚本。

详情请参阅开发人员指南中的脚本部分。

16.9.4. 安全性

Apache Karaf 控制台支持基于角色的访问控制(RBAC)安全机制。这意味着,根据连接到控制台的用户,您可以根据用户的组和角色定义、执行某些命令的权限,或者限制参数允许的值。

控制台 安全性在本指南的安全部分 进行了详细。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.