16.9. 使用控制台
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)安全机制。这意味着,根据连接到控制台的用户,您可以根据用户的组和角色定义、执行某些命令的权限,或者限制参数允许的值。
控制台 安全性在本指南的安全部分 进行了详细。