<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="https://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Command Line Interface
</h3>
<span style="margin-bottom: 10px;">
    modified by <a href="https://community.jboss.org/people/ssilvert">Stan Silvert</a> in <i>JBoss AS 7 Development</i> - <a href="https://community.jboss.org/docs/DOC-16581">View the full document</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>The AS7 Command Line Interface (CLI) is a command line management tool for the AS 7 domain or a standalone server. It allows a user to connect to the AS7 domain controller or a standalone server and execute management operations available through the <a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-16317">AS7 detyped management model</a>. Depending on the operation system, the CLI is launched using jboss-admin.sh or jboss-admin.bat located in the AS7 bin directory.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h2>Features</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The CLI features include:</p><ul><li>connect to the specific controller or server instance by specifying the host and the port;</li><li>send operation requests (providing the managed component's address, attribute or operation name and parameters) following the <a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-16317">AS7 detyped management model</a>;</li><li>view the available managed components, their attributes and operations;</li><li>tab-completion for commands and operation requests;</li><li>history of the executed commands and operation requests;</li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-16769">deploy and undeploy packages at runtime in standalone and domain modes</a>;</li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-16728">batch mode</a>;</li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-17041">non-interactive mode</a>;</li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-16981">generic resource type commands and custom commands</a>;</li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-17457">GUI mode</a>;</li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-17597">CLI public API</a>;</li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-18726">system properties in operations and commands</a>;</li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-18731">try-catch-finally control flow;</a></li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-18764">if-else control flow</a></li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-18795">Single jar for remote clients</a></li><li><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-18796">Advanced CLI scripting with Groovy, Rhino, Jython, etc.</a></li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h2>Commands</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>There are commands and operations. They are different. Operations are considered a low level but comprehensive way to manage the AS controller, i.e. if it can't be done with operations it can't be done in any other way.</p><p>Commands, on the other hand, are more user-friendly in syntax, although most of them still translate into operation requests and some of them even into a few composite operation requests, i.e. commands also simplify some management operations from the user's point of view.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>To see all the list of all the supported commands enter command <em>help --commands</em>. Another way to list all the supported commands is to press the tab key at the command line prompt which will trigger the tab-completion for the commands. The list of the available commands depends on the current context, i.e. it may change since some of the commands may require an established connection to the AS controller, or the presence of a certain node address in the domain management model, etc. For example, if the server configuration doesn't include messaging subsystem then the CLI will not expose messaging related commands.</p><p>To see a detailed description of a specific command, execute the command with <em>--help</em> as the argument.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h3>Connection</h3><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The first thing to do after the CLI has started is to connect to a managed AS7 instance. This is done using the command <em>connect</em>, e.g.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><em>connect</em></p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>which is equivalent to</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><em>connect localhost:9999</em></p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>localhost:9999 is the default host and port combination for the AS7 model controller client. Both, the host and the port, are optional parameters and can be specified together or separately.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h3>Quit</h3><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>To terminate the session type <em>quit</em>.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h2>Operation requests</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Operation requests is considered a raw low level way to manage things. Normally, for convenience and friendliness users would use commands instead of operations. Although, there might be cases when operations can be more convenient or even the only way to do something.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The format of the CLI operation requests is described in detail in <a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-17599">The Format of the Command-line Operation Requests</a>. And another useful article is <a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-17944">The Command-line Compound Parameter Value Format</a>.</p><p>Operation requests can be long and verbose. But the tab-completion can help at almost any point.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>To syntactically disambiguate between the commands and operations, operations require one of the following prefixes:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><ul><li><em>:</em> - to execute an operation against the current node, e.g.</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[standalone@localhost:9999 subsystem=web] :read-resource(recursive=true)</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><em><br/></em></p><ul><li><em>./</em> - to execute an operation against a child node of the current node, e.g.</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[standalone@localhost:9999 subsystem=web] ./connector=http:read-resource</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>i.e. the full address of the operation will be <em>subsystem=web,connector=http</em>.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><ul><li><em>/</em> - to execute an operation against the root node, e.g.</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[standalone@localhost:9999 subsystem=web] /:read-resource</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>or its child, e.g.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[standalone@localhost:9999 subsystem=web] /subsystem=logging:read-resource</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h3>How the tab-completion works</h3><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Suppose, the cursor is positioned at the beginning of an empty line. If you type in <em>'./' </em>and press the tab key, you will get a list of all the available node types. After selecting the node type you want and adding '=', pressing the tab key again will result in a list of all the node names available for the chosen node type. If, after selecting the node name from the list, you want to continue with the node path then add ',' after the selected node name and press the tab key again. This will print all the available node types for the previously select node.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>After you are done with the node path, adding ':' at the end of the node path and pressing the tab key will print all the available operation names for the selected node.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>To see all the parameters of the operation, add '(' after the operation name and press the tab key. Choose the parameter you want and specify its value after '='. Tab-completion for parameter values is not supported (yet?). If you want to add more parameters, add ',' and press the tab key to see the rest of the available parameter names.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Finally, when all the parameters have been specified, add ')' and press enter.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>In the node path you can use the following strings for navigations:</p><ul><li>.. - parent node, e.g.</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[standalone@localhost:9999 /] ./subsystem=web/../subsystem=transactions</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>is equivalent to</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[standalone@localhost:9999 /] ./subsystem=transactions</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><ul><li><em>.type</em> - the type of the current node, e.g.</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[standalone@localhost:9999 /] ./subsystem=web/.type/transactions</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>is equivalent to the same</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[standalone@localhost:9999 /] ./subsystem=transactions</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h2>Current node path and navigation</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The current node path is indicated in the command line prompt. The default value is '/', i.e. the root node. All the operation requests that don't contain the address part will be executed against the current node path.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h4>Change node command (cn or cd)</h4><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><em>cn</em>, or <em>cd</em>, command allows you to change the current node path, e.g.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[host:port /] cd subsystem=web</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>After that the command line prompt will change to</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[host:port /subsystem=web]</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>and every operation entered w/o the node path will be executed against the node <em>subsystem=web</em>. If you do specify a node path for the operation, it will be considered relative to <em>subsystem=web</em>.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The node path might not necessarily end on a node name. It might be just</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[host:port /] cd subsystem
[host:port /subsystem]</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Then to execute an operation against the logging subsystem you would type in</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[host:port /subsystem] logging:read-resource</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>To go back to the root node, type in</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[host:port /subsystem] cd /
[host:port /]</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>You can also navigate to the parent node</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[host:port /subsystem=web,connector=http] cd ..
[host:port /subsystem=web]</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>or the node type</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[host:port /subsystem=web] cd .type
[host:port /subsystem]</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h4>List contents command (ls)</h4><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><em>ls</em> command will list the contents of a node path. The command has an optional node path argument. If the argument is specified, the command will print the contents of the node path specified in the argument. If the argument is not specified, the command will print the contents of the current node path (indicated in the prompt).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>If the node path ends on a node type then the contents will be the child node names. If the node path ends on a node name then the contents will be the child node types.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>If the contents of the node path is empty, nothing will be printed.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Example:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[localhost:9999 /subsystem=web] ls
virtual-server&#160;&#160; connector
[localhost:9999 /subsystem=web] ls connectorhttp
[localhost:9999 /subsystem=web]</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h2>Special characters in node names</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>White ':' and '/' have special significance for in the format of the operation request, these characters aren't disallowed in node names.</p><p>If they are typed in though, the operation request parser will be confused and will probably result it an error. To workaround this issue you should quote the names with special characters, e.g.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[localhost:9999 /subsystem=datasources] cd data-source="java:/H2DS"
[localhost:9999 /subsystem=datasources/data-source=java:/H2DS]</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The node name, actually, is also allowed to contain '"'. In case the node name has to be quoted and it also contains quotes in its content then the quotes that are a part of the node name content have to be escaped using, i.e. '\"'.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">[localhost:9999 /] cd nodetype="node:name/with\"quotes\""
[localhost:9999 /node:name/with"quotes"]</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Note, that the tab-completion takes care of this automatically.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h3>Command history</h3><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Command (and operation request) history is enabled by default. The history is kept both: in-memory and in a file on the disk, i.e. it is preserved between the command line sessions. The history file name is .jboss-cli-history and is automatically created in the user's home directory. When the command line interface is launched this file is read and the in-memory history is initialized with its content.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>While in the command line session, you can use the arrow keys to go back and forth in the history of commands and operations. To manipulate the history you can use <em>history</em> command.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>If executed w/o the argument, it will print all the recorded commands and operations (up to the configured maximum, which is by default 500) from the in-memory history.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><em>history</em> supports three optional arguments:</p><ul><li>disable - will disable history expansion (but will not clear the previously recorded history);</li><li>enabled - will re-enable history expansion (starting from the last recorded command before the history expansion was disabled);</li><li>clear - will clear the in-memory history (but not the file one).</li></ul></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Comment by <a href="https://community.jboss.org/docs/DOC-16581">going to Community</a></p>

        <p style="margin: 0;">Create a new document in JBoss AS 7 Development at <a href="https://community.jboss.org/choose-container!input.jspa?contentType=102&containerType=14&container=2225">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>