美文网首页Arthas
Arthas的基础命令

Arthas的基础命令

作者: 晴天哥_王志 | 来源:发表于2021-06-09 22:37 被阅读0次

系列

开篇

arthas本身提供一些基础的linux命令,熟悉linux命令行的应该都比较熟悉,因为这趴内容也不是特别难,所以就一次性多讲解几个命令。

  • cat——打印文件内容,和linux里的cat命令类似
  • base64——base64编码转换,和linux里的base64命令类似
  • pwd——返回当前的工作目录,和linux命令类似

命令解析

public class CatCommand extends AnnotatedCommand {

    @Override
    public void process(CommandProcess process) {

        for (String file : files) {
            File f = new File(file);
            try {
                String fileToString = FileUtils.readFileToString(f,
                        encoding == null ? Charset.defaultCharset() : Charset.forName(encoding));
                process.appendResult(new CatModel(file, fileToString));
            } catch (IOException e) {
                logger.error("cat read file error. name: " + file, e);
                process.end(1, "cat read file error: " + e.getMessage());
                return;
            }
        }

        process.end();
    }

    public static String readFileToString(File file, Charset encoding) throws IOException {
        FileInputStream stream = new FileInputStream(file);
        try {
            Reader reader = new BufferedReader(new InputStreamReader(stream, encoding));
            StringBuilder builder = new StringBuilder();
            char[] buffer = new char[8192];
            int read;
            while ((read = reader.read(buffer, 0, buffer.length)) > 0) {
                builder.append(buffer, 0, read);
            }
            return builder.toString();
        } finally {
            stream.close();
        }
    }
}
  • grep命令实现的原理是通过BufferedReader进行读取返回。
public class Base64Command extends AnnotatedCommand {

    @Override
    public void process(CommandProcess process) {
       
        InputStream input = null;

        try {
            input = new FileInputStream(f);
            byte[] bytes = IOUtils.getBytes(input);

            ByteBuf convertResult = null;
            // 使用Netty的Unpooled转换成ByteBuf对象
            // 使用Netty的Base64进行加密和解密
            if (this.decode) {
                convertResult = Base64.decode(Unpooled.wrappedBuffer(bytes));
            } else {
                convertResult = Base64.encode(Unpooled.wrappedBuffer(bytes));
            }

            if (this.output != null) {
                // 通过Netty的ByteBuf对象进行操作并进行输出
                int readableBytes = convertResult.readableBytes();
                OutputStream out = new FileOutputStream(this.output);
                convertResult.readBytes(out, readableBytes);
                process.appendResult(new Base64Model(null));
            } else {
                String base64Str = convertResult.toString(CharsetUtil.UTF_8);
                process.appendResult(new Base64Model(base64Str));
            }
        } catch (IOException e) {

        } finally {
            IOUtils.close(input);
        }

        process.end();
    }

    public static byte[] getBytes(InputStream input) throws IOException {
        ByteArrayOutputStream result = new ByteArrayOutputStream();
        copy(input, result);
        result.close();
        return result.toByteArray();
    }
}
  • Base64Command的实现是结了java的文件操作和Netty提供的工具包结合实现的。
  • 通过Netty的Unpooled返回ByteBuf对象,通过Netty提供的Base64包进行加密和解密。
public class PwdCommand extends AnnotatedCommand {
    @Override
    public void process(CommandProcess process) {
        String path = new File("").getAbsolutePath();
        process.appendResult(new PwdModel(path));
        process.end();
    }
}
  • pwd命令直接通过在当前目录创建文件并返回绝对路径进行返回。

唠嗑

  • 坚持写博客只是一种热爱,也希望能通过一种方式能够帮到别人。
  • 喜欢探究原理背后,但是探究本质性的东西讲究深度,我只是努力将我的深度拓展。
  • 如果只肯相信你认知范围的事情,那么抱歉咱们就没法交流了,因为你无法享受新内容扑面而来的快乐。

相关文章

  • Arthas的基础命令

    系列 Arthas入门篇[https://www.jianshu.com/p/068f67088b8b] Arth...

  • JVM调优工具Arthas

    arthas官方文档:命令列表 | arthas (aliyun.com)[https://arthas.aliy...

  • Arthas实战

    已经熟悉Arthas操作命令来排查线上问题的同学可以直接跳过。观看下边的文章: arthas源码分析Arthas源...

  • JVM笔记

    问题1 dump JVM内存 系统cpu占用持续升高如何处理? 方式1:手动分析基础命令 方式二: arthas分析工具

  • Arthas - Alibaba开源的Java诊断工具

    官方在线教程,可以直接命令行交互模式操作:https://arthas.aliyun.com/doc/arthas...

  • Arthas-基础命令学习笔记

    概述 本文主要是个人学习记录,详细教程请前往官网查看详细教程请前往官网学习https://arthas.aliyu...

  • arthas使用

    安装 第一步:下载arthas 安装jar包 日常使用命令 详细参考:https://arthas.aliyun....

  • Arthas实践

    Arthas实践 简介 Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,进一步方便进行问...

  • Arthas 基础教程

    Arthas 基础教程 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重...

  • 排查线上CPU飙高

    1、本案例的排查过程使用的阿里开源的Arthas工具进行的,不使用arthas,使用JDK自带的命令也是可以。 2...

网友评论

    本文标题:Arthas的基础命令

    本文链接:https://www.haomeiwen.com/subject/ldeyeltx.html