16.9. 使用控制台
16.9.1. 可用命令 复制链接链接已复制到粘贴板!
要在控制台中查看可用命令列表,您可以使用 帮助 :
您有带有简短描述的所有命令列表。
您可以使用 tab 键获取所有命令的快速列表:
karaf@root()> Display all 294 possibilities? (y or n) ...
karaf@root()> Display all 294 possibilities? (y or n)
...
16.9.2. subshell 和 completion 模式 复制链接链接已复制到粘贴板!
命令具有范围和名称。例如,命令 具有 scope,feature:list并列出 为 name。
2008 年按范围"组"命令。每个范围组成一个子 shell。
您可以使用全限定名称(scope:name)直接执行命令:
karaf@root()> feature:list ...
karaf@root()> feature:list
...
或者,在子 shell 中输入命令上下文到子 shell:
karaf@root()> feature karaf@root(feature)> list
karaf@root()> feature
karaf@root(feature)> list
请注意,您可以通过输入子 shell 名称(此处为 功能)直接输入子 shell。您可以直接从子 shell "switch" 改为另一个:
karaf@root()> feature karaf@root(feature)> bundle karaf@root(bundle)>
karaf@root()> feature
karaf@root(feature)> bundle
karaf@root(bundle)>
提示符显示()之间的当前子 shell。
exit 命令进入父子 shell:
karaf@root()> feature karaf@root(feature)> exit karaf@root()>
karaf@root()> feature
karaf@root(feature)> exit
karaf@root()>
完成模式定义了 tab 键和 help 命令的行为。
您有三种不同的模式可用:
- 全局
- 第一个
- SUBSHELL
您可以使用 etc/org.apache.karaf.shell.cfg 文件中的 completionMode 属性来定义默认的完成模式。默认情况下,您有:
completionMode = GLOBAL
completionMode = GLOBAL
您还可以使用 shell:completion 命令更改完成模式"实时" (使用 Karaf shell 控制台):
karaf@root()> shell:completion GLOBAL karaf@root()> shell:completion FIRST karaf@root()> shell:completion FIRST
karaf@root()> shell:completion
GLOBAL
karaf@root()> shell:completion FIRST
karaf@root()> shell:completion
FIRST
shell: 补全 可以告知您当前使用的完成模式。您还可以提供您想要的新完成模式。
GLOBAL 完成模式是 Karaf 4.0.0 中的默认模式(主要用于转换目的)。
GLOBAL 模式并不实际使用 subshell:它与之前 Karaf 版本的行为相同。
当您输入 tab 键时,无论您在哪个子 shell 中,都会显示所有命令和所有别名:
FIRST 完成模式是 GLOBAL 完成模式的替代选择。
如果您在 root 级别 subshell 上输入 tab 键,则完成将显示所有子 shell 中的命令和别名(如 GLOBAL 模式)。但是,如果您在子 shell 中键入了 tab 键,则完成将仅显示当前子 shell 的命令:
SUBSHELL completion 模式是实际的子 shell 模式。
如果您在根级别上输入 tab 键,则完成会显示子 shell 命令(转至子 shell)和全局别名。在子 shell 中后,如果您键入 TAB 密钥,则完成会显示当前子 shell 的命令:
16.9.3. Unix 比如环境 复制链接链接已复制到粘贴板!
Karaf 控制台提供完整的 Unix 环境,如环境。
16.9.3.1. help 或 man 复制链接链接已复制到粘贴板!
我们已经看到了使用 help 命令来显示所有可用的命令。
但是,您也可以使用 help 命令获取有关命令或 help 命令的 man 命令的详细信息,该命令是 help 命令的别名。您还可以通过在命令中使用 --help 选项使用另一个表单来获取命令帮助。
因此这些命令
karaf@root()> help feature:list karaf@root()> man feature:list karaf@root()> feature:list --help
karaf@root()> help feature:list
karaf@root()> man feature:list
karaf@root()> feature:list --help
所有都生成相同的帮助输出:
16.9.3.2. completion 复制链接链接已复制到粘贴板!
当您输入 tab 键时,wam 会尝试完成:
- subshell
- commands
- 别名
- 命令参数
- 命令选项
16.9.3.3. Alias 复制链接链接已复制到粘贴板!
别名是与给定命令关联的另一个名称。
shell:alias 命令创建一个新的别名。例如,要将 list-installed-features 别名创建到实际 feature:list -i 命令,您可以:
登录时,Apache Karaf 控制台会读取 etc/shell.init.script 文件,您可以在其中创建别名。它与 Unix 中的 bashrc 或 profile 文件类似。
您可以在默认情况下看到可用的别名:
-
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与 help (help命令别名)相同。 -
log:list显示所有日志记录器和级别(用于log:get ALL命令)
您可以在 etc/shell.init.script 文件中创建自己的别名。
16.9.3.4. 密钥绑定 复制链接链接已复制到粘贴板!
与大多数 Unix 环境一样,Ramon 控制台支持一些关键绑定:
- 在命令历史记录中导航的方向键
- CTRL-D 以注销/关闭 Karaf
- CTRL-R 搜索之前执行的命令
- CTRL-U 删除当前行
16.9.3.5. 管道 复制链接链接已复制到粘贴板!
您可以将一个命令的输出作为输入传送到另一个命令的输出。它是使用 | 字符的管道:
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
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:each对参数列表执行冲突 -
shell:echoechoes 并将参数输出到 stdout -
shell:edit在当前文件或 URL 中调用文本编辑器 -
shell:env显示或设置 shell 会话变量的值 -
shell:exec执行系统命令 -
shell:grep打印与给定模式匹配的行 -
shell:head显示输入的第一行 -
shell:history打印命令历史记录 -
shell:如果允许您在脚本中使用条件(如果,则是其他块) -
shell:info打印有关当前 Karaf 实例的各种信息 -
shell:java执行 Java 应用程序 -
shell:lessfile pager -
shell:logout断开 shell 与当前会话的连接 -
shell:more是一个文件页器 -
shell:new创建一个新的 Java 对象 -
shell:printf格式和打印参数 -
shell:sleepsleep 用于一个位,然后唤醒 -
shell:sort将所有文件的排序串联写入 stdout -
shell:source执行命令 -
当执行命令抛出异常时,
shell:stack-traces-print会在控制台中打印完整的堆栈追踪 -
shell:tac捕获 STDIN 并将其返回为字符串 -
shell:tail显示输入的最后几行 -
shell:threads打印当前线程 -
shell:watch定期执行命令并刷新输出 -
shell:wc会为每个文件打印换行符、字数和字节数 -
shell: whileloop while the condition 为 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
karaf@root()> list = [1 2 3]; each ($list) { echo $it }
1
2
3
同一循环可以使用 shell 编写:同时 命令:
karaf@root()> a = 0 ; while { %((a+=1) <= 3) } { echo $a }
1
2
3
karaf@root()> a = 0 ; while { %((a+=1) <= 3) } { echo $a }
1
2
3
您可以自己创建列表(如上例中所示),或者某些命令也可以返回列表。
我们可以注意到,控制台会创建一个"会话"变量,其中包含您可以使用 $ 。
list 访问的名称列表
$it 变量是与当前对象对应的隐式值(列表中当前迭代的值)。
使用 [] 创建列表时,Apache Karaf 控制台会创建一个 Java ArrayList。这意味着您可以使用 ArrayList 对象(如实例 get 或 size)中提供的方法:
karaf@root()> list = ["Hello" world]; echo ($list get 0) ($list get 1) Hello world
karaf@root()> list = ["Hello" world]; echo ($list get 0) ($list get 1)
Hello world
我们可以在此处注意,在对象上调用方法直接使用 (对象方法参数)。这里 ($list get 0) 表示 $list.get (0),其中 $list 是 ArrayList。
类 表示法将显示有关对象的详情:
您可以将变量"广播"到指定类型。
karaf@root()> ("hello world" toCharArray)
[h, e, l, l, o, , w, o, r, l, d]
karaf@root()> ("hello world" toCharArray)
[h, e, l, l, o, , w, o, r, l, d]
如果失败,您将看到 casting 异常:
karaf@root()> ("hello world" toCharArray)[0]
Error executing command: [C cannot be cast to [Ljava.lang.Object;
karaf@root()> ("hello world" toCharArray)[0]
Error executing command: [C cannot be cast to [Ljava.lang.Object;
您可以使用 shell:source 命令"调用"脚本:
karaf@root> shell:source script.txt True!
karaf@root> shell:source script.txt
True!
其中 script.txt 包含:
foo = "foo"
if { $foo equals "foo" } {
echo "True!"
}
foo = "foo"
if { $foo equals "foo" } {
echo "True!"
}
在编写脚本时,空格非常重要。例如,以下脚本不正确:
if{ $foo equals "foo" } ...
if{ $foo equals "foo" } ...
并使用以下内容失败:
karaf@root> shell:source script.txt Error executing command: Cannot coerce echo "true!"() to any of []
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)安全机制。这意味着,根据连接到控制台的用户,您可以定义取决于用户的组和角色、执行某些命令的权限或限制参数允许的值。
此用户指南的 Security 部分中详述了 控制台安全性。