这是我参与更文挑战的第1天,活动详情查看: 更文挑战
本文内容基于arthas 3.5.1 版本,介绍基础命令help,cat,echo的使用及实现。
一.help命令
查看命令帮助信息,可以查看当前arthas版本支持的指令,或者查看具体指令的使用说明。
| 参数名称 | 参数缩写 | 参数说明 | 必填项 | 示例 |
|---|---|---|---|---|
| cmd | 命令名称 | 可选 | help cat |
文件位于com.taobao.arthas.core.command.basic1000.HelpCommand.java。
判断是否有指定参数,即命令名称。如果没有传参数则返回所有命令,有传参数并且有实际返回的话就返回指定命令的描述及名称。
调用allCommands(Session session)方法,该方法获取所有的命令。
具体实现为获取两个实现了CommandResolver接口的实现类,分别为BuiltinCommandPack,BuiltinCommandResolver,两个类都实现了commands方法。都是通过主动添加命令到一个列表中然后返回该列表。
这里可以做成自动扫描的方式。如果要做成自动扫描命令的方式的话,可以通过扫描注解的方式对指定的路径下的包,主要对com.taobao.arthas.core.command这个包扫描即可。利用现成的方法ArthasReflectUtils.getClasses获取指定的class,当然这种方式相对于原有的方式性能上会有所损失,自定义排序较麻烦。en..还是原来的好,当我没说。
二.cat命令
打印文件内容,和linux里的cat命令类似。
| 参数名称 | 参数缩写 | 参数说明 | 必填项 | 示例 |
|---|---|---|---|---|
| files | 可以多个文件名,空格分隔 | 必填 | cat /tmp/a.txt | |
| --encoding | 指定编码 | 可选 | cat --encodeing=UTF-8 /tmp/a.txt | |
| --sizeLimit | -M | 显示的字节数默认128kb,最大可以8Mb,非终端模式下目前最多为128kb | 可选 | cat -M 1024 /tmp/a.txt |
文件位于com.taobao.arthas.core.command.basic1000.CatCommand.java
遍历访问files参数中的文件,判断文件路径是否存在,文件路径是否是文件夹,再循环判断文件大小是否超出限制,最后将文件中的内容转换成指定编码的字符串输出。这里的两个循环代码可以合并到一起去。
三.echo命令
打印参数,和linux里的echo命令类似。
| 参数名称 | 参数缩写 | 参数说明 | 必填项 | 示例 |
|---|---|---|---|---|
| message | 要输出的内容 | 可选 | echo 'hello' |
文件位于com.taobao.arthas.core.command.basic1000.EchoCommand.java
直接返回message参数的内容,跟linux的echo命令还是有差距的。