Linux怎么搜索jar包里的内容

本文介绍了使用jartvf命令来解压缩jar文件并搜索特定文件的方法,还展示了如何搜索整个目录下的所有jar文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道jar包也是一种压缩文件,那么怎么搜索jar包里的内容呢?

我们知道jar tvf可以解压缩jar文件

比如

jar tvf ZhcLib.jar

就会列出:

0 Mon Mar 14 07:43:26 GMT 2016 META-INF/
103 Mon Mar 14 07:43:24 GMT 2016 META-INF/MANIFEST.MF
0 Tue Mar 08 02:43:12 GMT 2016 com/

...


这样我们就可以搜索了某个特定的文件了:

jar tvf ZhcLib.jar | grep 'pattern'

也可以搜索整个目录下的所有jar文件:

find . -name "*.jar"|awk '{print "jar -tvf "$1}' | sh | grep ".*.xml"

这样就可以搜索压缩文件里都有哪些文件了。

原文:http://blog.youkuaiyun.com/hongchangfirst/article/details/51011671

作者:hongchangfirst

hongchangfirst的主页:http://blog.youkuaiyun.com/hongchangfirst



<think>嗯,用户需要的是在Linux系统中查看jar包路径的方法。从历史引用材料看,之前提供的都是关于jar包操作的基础命令(如解压查看、进程管理),但用户这次明确聚焦在"路径查询"这一具体需求上。用户可能是Java运维人员或开发者,遇到需要定位jar包物理存储位置的问题。这类需求通常出现在排查环境配置、修复依赖冲突或优化部署时。用户参考了之前提供的jar操作命令,但没有找到直接答案,所以再次提问时特别强调"路径"二字。引用材料中有三处相关线索值得注意:1.引用1提到cp/opt/services/命令,暗示jar包可能存放在/opt这类服务目录2.引用2的whichjava和echo$PATH展示了Java环境定位思路,可类比到jar查询3.引用4的nohup启动命令显示jar路径通常在启动参数中需要补充用户可能忽略的深层需求:-是否在找特定进程加载的jar路径?(运行时定位)-还是单纯查找磁盘上的jar文件?(静态搜索)因此准备分两个维度回答:1.动态定位:通过进程信息追溯(推荐方案,最精准)2.静态查找:全盘搜索(适合已知文件名时)特别注意引用3展示的jarvtf技巧虽能看包内容,但不解决路径定位问题,所以不采用。最后用户给的参考引用其实比实际需要的更基础,但基于用户可能没有root权限、环境复杂等现实情况,会把lsof等命令的权限要求标注清楚,避免用户误操作。</think> 在Linux系统中查看JAR包路径主要有两种场景:**定位已部署的JAR文件**和**查询运行中进程加载的JAR路径**。以下是具体方法: --- ### 一、查找磁盘中的JAR文件路径(静态定位) #### 1. 使用 `find` 命令全局搜索 ```bash find / -name "*.jar" 2>/dev/null # 全盘搜索(需sudo权限) ``` 或限定搜索范围: ```bash find /opt /home /usr -name "*.jar" 2>/dev/null # 在常见部署目录搜索 ``` #### 2. 结合 `grep` 过滤特定JAR ```bash find / -name "*.jar" 2>/dev/null | grep project-name ``` --- ### 二、查看运行中Java进程加载的JAR路径(动态定位) #### 1. 通过进程信息定位 ```bash # 先查Java进程PID ps -ef | grep java # 根据PID查JAR路径(假设PID=12345) ls -l /proc/12345/cwd # 查看进程工作目录 lsof -p 12345 | grep '\.jar$' # 列出进程加载的JAR文件 ``` #### 2. 直接检索进程命令 ```bash ps -ef | grep java | awk -F'-jar' '{print $2}' | awk '{print $1}' ``` **输出示例**: `/opt/app/project.jar` # 显示实际执行的JAR绝对路径 --- ### 三、特殊场景:从归档中定位类文件路径 若需确认JAR内的类文件位置(如排查冲突),使用 `jar` 命令: ```bash jar vtf /path/to/project.jar | grep 'com/example/MyClass.class' # 查类文件路径 [^3] ``` --- ### 关键区别说明 | **场景** | **推荐命令** | **用途** | |-----------------------|--------------------------------|-----------------------------| | 查找磁盘中的JAR | `find` | 部署文件定位 | | 运行中进程的JAR路径 | `lsof -p PID` / `ps`过滤 | 实时进程依赖检查 | | 排查JAR内类文件 | `jar vtf` + `grep` | 解决类冲突或版本问题 [^3] | > **注意**: > 1. 动态查询需进程运行时使用 > 2. 使用 `lsof` 可能需要 `sudo` 权限 > 3. 若服务通过 `nohup java -jar &` 启动,可通过 `jobs` 查看后台进程ID --- ### 相关问题 1. 如何查看Java进程加载的所有JAR依赖? ➠ 使用 `jcmd <PID> VM.class_hierarchy | grep jar` 或 `-verbose:class` 启动参数 2. Linux下如何永久保存JAR进程的启动路径? ➠ 通过systemd服务配置 `ExecStart=/usr/bin/java -jar /path/to/app.jar` [^4] 3. 若 `lsof` 不可用,如何替代查询进程JAR路径? ➠ 用 `pwdx <PID>` 查工作目录 + `strings /proc/<PID>/cmdline` 解析启动命令 4. 为什么解压JAR后找不到预期的配置文件? ➠ 可能是多层嵌套JAR,需检查 `BOOT-INF/classes/` 目录(常见于Spring Boot)[^1] > 引用说明: > [^1]: 非解压查看JAR内容的 `jar vtf` 用法 > [^3]: 通过 `jar vtf` 过滤JAR内文件路径的技巧 > [^4]: 持久化运行JAR时路径存储在systemd配置中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值