首页 > 其他分享 >像操作tar文件一样操作jar文件,让很多事情变得简单

像操作tar文件一样操作jar文件,让很多事情变得简单

时间:2024-09-02 11:14:32浏览次数:8  
标签:包中 文件 tar jar config yml

原创 1024夜谭

jar文件即Java归档文件,也称为jar包,是Java应用软件或库,通常聚合了大量的Java类文件、相关的元数据和资源文件。通常由构建工具产生,可以使用IDE、反编译工具或者Java诊断工具如Arthas等查看内容。

如果你对tar命令使用得心应手,那么你将发现jar操作与tar操作有许多相似之处。通过这些操作,可以让一些与jar相关的事情变得简单,从而提高工作效率。如:查看、修改jar文件中的配置文件,或者删除有问题的资源。

查看jar文件中的内容

和使用tar命令查看归档文件内容一样,jar命令也有“tf”选项,可以查看jar包中的内容。例如,查看jar包中有哪些配置文件:

~$ jar tf app.jar |grep ^config
config/
config/application-dev.yml
config/application.yml

“^config”匹配以config开头的内容,这样可以列出jar包中config目录的文件。

提取jar文件中的内容

前面已经列出jar包中的配置文件,如果想查看配置文件中的具体内容,则需要从jar包中提取该配置文件到文件系统,然后就可以查看或者编辑文件内容。和tar命令一样,使用“xf”选项。例如,提取config/application.yml文件:

~$ jar xf app.jar config/application.yml
~$ ls config
application.yml

提取文件需要使用该文件在jar包中的完整路径。提取后的文件,将根据jar包中的文件路径,放置在当前目录下,对于路径中不存在的目录会自动创建。

更新jar文件中的内容

如果修改了config/application.yml文件的内容,需要将修改后的文件更新到jar包中。更新文件也是使用“uf”选项,如以下命令:

~$ jar uf app.jar config/application.yml

操作技巧:开启命令行vi选项,然后在命令行按Esc键,随后输入“/xf”或者“/jar xf”后回车,可以快速找到之前执行过的提取config/application.yml文件的命令,然后按w键,光标跳到“x”的位置,按r键进入编辑模式(替换),按u键将输入“u”替换“x”,即完成本例中的命令输入,按回车执行即可。效果如下图,详细了解可看文末的相关阅读:

删除jar文件中的内容

这一点与tar操作不一样。tar命令可以使用“--delete”选项,从tar文件中删除一个或多个文件。jar命令未提供从jar包中删除文件的选项,但可以通过已有选项实现该操作。

为了删除jar包中的文件,需要首先将jar包中的所有文件进行提取,随后将这些文件从文件系统中移除,再重新生成新的jar包。

例如,在处理log4j漏洞时,漏洞扫描工具检测到应用程序jar包中有log4j-api等log4j相关的jar包,但应用实际未使用log4j,是通过日志框架间接引入的。可以通过执行以下命令,生成不包含log4j相关jar包的应用程序新jar包:

~$ cp app.jar app.jar.bak
~$ jar xf app.jar
~$ rm app.jar BOOT-INF/lib/*log4j*
~$ jar cfm0 app.jar META-INF/MANIFEST.MF BOOT-INF/ org/

操作之前先备份现有的jar包!这是一个很重要的习惯,可以防止意外造成数据丢失。

依赖包在应用jar包中位于BOOT-INF/lib目录下,提取后的文件位于当前目录的BOOT-INF/lib中,将需要删除的文件从该目录移除。

jar命令的“cf”选项和tar命令的“cf”选项作用一样;“m”选项表示更新清单文件META-INF/MANIFEST.MF,这个文件是从jar包中提取出来的,不需要额外修改;“0”表示创建jar文件时不使用zip压缩。

总的来说,通过借鉴tar命令的使用方式,我们可以更轻松地处理jar文件。这些操作简化了与jar文件相关的任务,提高了工作效率。掌握一些常用的命令和工具,可以使我们的工作流程更加顺畅,让我们有更多的时间去专注于更重要的事情。

标签:包中,文件,tar,jar,config,yml
From: https://www.cnblogs.com/o-O-oO/p/18392356

相关文章

  • LIN总线CAPL函数—— 主节点波特率测试(ChkStart_LINMasterBaudrateViolation)
    ......
  • 导出/导入 docker 镜像文件
    在Docker中,导出和导入镜像通常不直接使用Docker的原生命令(如 dockersave 和 dockerload),而是可能会使用到Docker的镜像导出为文件(通常是tar文件)和从文件中导入镜像的功能。对于你提到的C++镜像(这里假设你已经有一个构建好的Docker镜像),下面是在CentOS7系统上导......
  • 春秋云镜CVE-2022-29464 (WSO2文件上传漏洞)
    目录一:访问靶机:2:根据提示知道可以文件上传3:两个方法一:访问靶机:2:根据提示知道可以文件上传3:我们两个方法1:使用EXPimportrequestsimporturllib3urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)url=input("请输入URL:")file="shell.jsp"pa......
  • 春秋云镜CVE-2022-28525(ED01-CMS v20180505 存在任意文件上传漏洞)
    1:访问靶机发现是登录界面2:尝试使用弱口令爆破(明文传输)3:添加pyload并选择攻击类型字典我们随便选择的,实际情况需要实际定义爆破成功,用户名:admin密码:admin登录成功4:找到如图模块,上传图片马上传成功(上传时需要抓包改上传类型)5:使用蚁剑连接,拿到flag......
  • 文件上传下载
    importcn.hutool.core.io.FileUtil;importcn.hutool.core.io.IoUtil;importlombok.SneakyThrows;importorg.apache.commons.lang3.StringUtils;importorg.apache.poi.ss.usermodel.Workbook;importorg.springframework.http.MediaType;importjavax.servlet.http......
  • C语言 - 自包含和包含其他文件
    在C语言中,头文件的设计可以采用自包含和包含其他文件的方式,以提高代码的可维护性和可重用性。一、头文件自包含含义:头文件自包含是指一个头文件能够独立地进行编译,不依赖于其他头文件的特定包含顺序。这意味着头文件应该包含其自身所依赖的所有定义和声明,以确保无论在什么......
  • php遍历文件夹以及子目录;
    php遍历文件夹以及子目录<?phpfunctionmy_dir($folderPath){ $arr_subdictory=array(); if(@$handle=opendir($folderPath)){ while(false!==($entry=readdir($handle))){ if($entry!="."&&$entry!=".."){//排除更目录 ......
  • C 语言项目中头文件包含的最佳实
    在经典的C语言项目中,以下是一些头文件包含的最佳实践:一、保持头文件自包含性使用条件编译防止重复包含:在每个头文件的开头和结尾使用预处理器指令来确保头文件只被包含一次。例如:#ifndefHEADER_NAME_H#defineHEADER_NAME_H//头文件内容#endif这样可以避免由于......
  • C语言 - 头文件包含
    在C语言中,条件编译是一种根据特定条件决定是否编译某段代码的机制。它可以提高代码的可移植性、灵活性和效率。一、条件编译的指令#ifdef、#ifndef、#endif:#ifdef:如果某个宏已被定义,则编译其后的代码块。#ifndef:如果某个宏未被定义,则编译其后的代码块。#endif:用于结束一......
  • 编程实现“ls -l 文件名”功能
    目录题目思想代码题目编程实现“ls-l文件名”功能思想首先定义了一个 structstat 类型的变量 st ,用于存储文件的状态信息。检查通过 stat 函数获取指定文件(argv[1])的状态信息是否成功。如果获取失败(返回值小于0),通过 perror 输出错误信息并返回......