很多人在服务器上拿到 agent.war 后,第一反应是执行 cat agent.war,结果终端刷出一堆乱码,甚至把屏幕显示弄乱。这个现象不是文件坏了,而是查看方式不对。WAR 本质上是 Java Web 应用归档包,格式接近 ZIP,里面通常包含 class、jar、jsp、配置文件、静态资源等内容。cat 适合查看纯文本,不适合直接查看二进制压缩包。下面按实际排查流程,讲清楚如何正确查看 WAR 文件内容。
先确认你拿到的确实是 WAR 文件

进入 agent.war 所在目录,先不要急着解压,先确认文件类型。
执行:file agent.war
正常情况下,你会看到类似 Zip archive data 的结果。不同系统输出文字可能略有差异,但只要能看出 ZIP archive、Java archive 或 compressed data,就说明它不是普通文本文件。此时 cat 出现乱码是正常现象。
如果 file 提示 ASCII text、UTF-8 Unicode text,说明这个文件可能不是标准 WAR,可能只是被命名成 .war 的文本文件。那就可以再用 head、less 查看内容。如果 file 提示 cannot open,先检查当前目录是否正确,或者文件名是否拼写一致。
用 ls 看文件大小和权限
继续执行:ls -lh agent.war
你要关注两点:文件大小和权限。WAR 文件通常不会只有几百字节。如果文件大小明显异常,比如 0 字节或只有 1K 左右,很可能上传、下载或构建过程出了问题。权限方面,只要当前用户有读权限,就可以查看内容;没有读权限时,unzip、jar 等命令也会失败。
如果权限不足,可以联系有权限的账号处理,或者在确认合规的前提下由管理员调整读取权限。不要为了查看文件随意给全目录加 777,这会扩大安全风险。
只列出 WAR 里的文件,不解压
想先看包里有什么,最推荐的方式是列目录,而不是直接解压。
执行:unzip -l agent.war
结果会列出 WAR 包内的路径、文件大小和时间信息。你通常会看到 WEB-INF/、WEB-INF/web.xml、WEB-INF/lib/、WEB-INF/classes/ 等目录。如果只是想确认某个配置文件或 jar 是否存在,这一步就够了。
如果服务器没有 unzip,可以尝试:jar tf agent.war
jar 是 JDK 自带工具的一部分,很多 Java 服务器上都能用。它会按路径列出包内文件,但不会显示 unzip -l 那样的详细大小信息。结果中如果能看到 WEB-INF/classes、WEB-INF/lib 等路径,说明 WAR 包结构基本可读。
用 less 安全浏览文件列表
WAR 包内容多时,unzip -l agent.war 可能刷屏。可以配合 less 分页查看。
执行:unzip -l agent.war | less
进入 less 后,可以按空格翻页,按 b 往回翻,输入 /application.properties 搜索文件名,按 q 退出。这样比把全部内容直接打到终端更可控。
如果你使用 jar,也可以执行:jar tf agent.war | less
结果是包内路径列表。比如你想确认是否包含某个探针配置、某个依赖包、某个 JSP 页面,就可以在 less 里直接搜索。
只查看某个文本文件内容
如果你已经知道要看哪个文件,比如 WEB-INF/web.xml,不需要把整个 WAR 解开,可以直接把指定文件输出到终端。
执行:unzip -p agent.war WEB-INF/web.xml
-p 的意思是把压缩包里的指定文件内容打印出来。这个命令适合查看 xml、properties、yml、txt、jsp、html 等文本文件。执行后,终端应显示该文件的实际文本内容,而不是乱码。
如果内容较长,可以分页:unzip -p agent.war WEB-INF/web.xml | less
如果不确定文件路径,先用 unzip -l agent.war | less 找到完整路径,再复制路径查看。注意 Linux 路径大小写敏感,WEB-INF 和 web-inf 不是一回事。
查看配置文件时避免误判乱码
有些配置文件本身可能不是 UTF-8 编码,直接显示时会出现中文乱码。此时要先判断文件编码,而不是认为 WAR 包有问题。
可以先把文件抽出来:unzip -p agent.war WEB-INF/classes/application.properties > application.properties
然后执行:file application.properties
如果提示 UTF-8,就用 less、cat、vi 都能正常看。如果提示 ISO-8859、GBK 或其他编码,终端编码不一致时中文可能显示异常。你可以用 iconv 转码后查看,例如从 GBK 转 UTF-8:iconv -f GBK -t UTF-8 application.properties | less
这里的 GBK 只是常见示例,实际要以 file、历史项目约定或构建配置为准。
需要修改时先解压到临时目录
如果只是查看,不建议直接在原目录对 WAR 操作。需要分析多个文件时,创建临时目录更稳妥。
执行:mkdir agent-war-check
然后进入目录:cd agent-war-check
再解压:unzip ../agent.war
解压完成后,你会看到 WEB-INF、META-INF 等目录。接下来可以用 find 查找文件:find . -name ".properties"
也可以查看依赖:ls WEB-INF/lib
这样做的结果是所有内容都在 agent-war-check 目录下,不会污染原来的部署目录。分析完可以删除临时目录,但删除前确认自己没有把需要保留的记录放在里面。
用 jar 解压的替代方法
如果没有 unzip,但服务器有 JDK,可以使用 jar 解压。
先创建目录并进入:mkdir agent-war-check && cd agent-war-check
再执行:jar xf ../agent.war
解压后结果与 unzip 类似,会得到 WAR 包内部目录。jar xf 没有特别详细的进度输出,命令结束且没有报错,一般表示解压完成。你可以用 ls 或 find . | head 查看是否成功。
如果执行 jar 提示 command not found,说明当前环境没有安装或没有配置 JDK 工具路径。此时可以改用 unzip,或者在有工具的机器上查看,没必要把问题归因到 WAR 文件本身。
检查 WAR 是否损坏
如果 unzip -l、jar tf 都报错,比如提示 End-of-central-directory signature not found、zip END header not found、error in opening zip file,才需要怀疑文件损坏或传输不完整。
可以先看文件大小是否和来源机器一致。执行:ls -lh agent.war
如果你能访问来源机器,也在来源机器执行同样命令对比大小。更严谨的方式是计算校验值:sha256sum agent.war
两边结果一致,说明文件传输过程基本没有变化;不一致则重新传输。没有 sha256sum 的环境可以用 md5sum,但在安全要求较高的场景下优先使用 sha256sum。
避免用 cat 直接查看二进制包
cat agent.war 显示乱码?正确查看 WAR 文件内容的方法,核心就是把 WAR 当压缩归档处理,而不是当文本处理。cat 会把压缩后的二进制字节原样送到终端,终端无法按文本解释,就会显示乱码、控制字符,严重时还会影响当前会话的显示状态。
如果你已经执行过 cat,发现终端显示异常,可以输入 reset 后回车,通常能恢复终端显示。也可以关闭当前终端窗口重新连接。这个操作不会修复 WAR 文件,因为 WAR 文件本身通常没有被 cat 修改。
常见目标对应的命令选择
如果你只是想知道包里有什么,用 unzip -l agent.war 或 jar tf agent.war。
如果你想查看 web.xml,用 unzip -p agent.war WEB-INF/web.xml。
如果你想查 application.properties 在不在,用 unzip -l agent.war | less,然后搜索文件名。
如果你想看所有依赖 jar,先列目录,再重点看 WEB-INF/lib/ 下的文件。
如果你要深入排查配置、类文件、静态资源,解压到临时目录后再分析。
如果命令报 WAR 损坏,先对比文件大小和 sha256sum,再重新获取文件。
收尾建议
查看 WAR 文件时,先 file 判断类型,再 unzip -l 或 jar tf 列内容,最后按需 unzip -p 查看具体文本文件。只有需要批量分析时才解压到临时目录。这样既不会被 cat 的乱码误导,也能避免在部署目录里留下无关文件。对于线上环境,查看动作尽量只读,修改和重新打包应放到构建流程或测试环境完成,避免把临时排查变成新的部署风险。
Ai菜鸟网。发布者:aibianjibu,转载请注明出处:https://www.alyyhw.com/10569.html