linux服务器中部署java应用在jar包中搜索指定的文件及文件中的字符串

1. 概述

在维护Java应用时,有时我们排查别人的代码问题,在没源码的情况下需要通过对部署的war或jar进行搜索来排查问题。搜索涉及两部分,第一是定位包中的文件,第二是在文件中搜索目标字符串,最终定位问题。本文将介绍如何搜索jar包中的文件及文件中的字符串。

2.class与jar文件介绍

class文件是一个字节码文件,包含了类或接口的字节码定义。JavaRuntime(JAR)是一个基于ZIP格式的压缩归档文件,将Java字节码、源码、数据、元数据文件在一起,文件的扩展名是.jar。这样打包组织可以更方便部署、使用。

3.搜索jar包中的包含的目标文件

假设我们希望检查所有的包中是否含有某个配置文件,那么通过find + grep完成搜索,缩小目标范围。根据实际情况调整自己的find与grep命令参数

$ find /jars -type f -iname '*.jar' | xargs grep --text --files-with-matches 'xxx.xml'
/jars/apache-log4j-2.19.0-bin/log4j-api-2.19.0.jar
/jars/apache-log4j-2.19.0-bin/log4j-docker-2.19.0.jar
/jars/apache-log4j-2.19.0-bin/log4j-kubernetes-2.19.0.jar
/jars/apache-log4j-2.19.0-bin/log4j-core-2.19.0.jar
/jars/apache-log4j-2.19.0-bin/log4j-to-slf4j-2.19.0.jar
/jars/apache-log4j-2.19.0-bin/log4j-1.2-api-2.19.0.jar
/jars/google-guava/dep/failureaccess-1.0.1.jar
/jars/invalid.jar
/jars/google-guava/guava-31.1-jre.jar
/jars/commons-io-2.11.0.jar

4.搜索jar中的字符串

当确定目标文件后,我们使用zipgrep命令搜索jar中文件是否包含字符串

zipgrep "XXX" xxx.jar

如果要进行范围搜索结合find及exec参数来执行

find libdir -name "xxx.jar" -exec zipgrep "xxx" '{}' \;

5.总结

定位问题通常要通过搜索来完成,先明确要搜索的对象,然后按部分完成不同部分搜索,最终定位问题。

6.参考资料

[1]搜索jar中的class文件,https://www.baeldung.com/linux/jar-class-search
[2]搜索jar内文件中的字符串,https://stackoverflow.com/questions/10331025/how-to-search-for-a-string-in-jar-files
[3]find命令,https://www.baeldung.com/linux/find-exec-command
[4]zipgrep命令,https://deepinout.com/linux-cmd/linux-archiving-and-compression-related-cmd/linux-cmd-zipgrep.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值