Watch at Ease看见世界,读懂生活。

技术 · 实用指南

Linux 提示“cannot execute binary file: Exec format error”?先证明文件、平台与解释器边界

先保留精确字节并识别文件类型,再对照主机检查机器架构、格式与声明的解释器,之后才考虑重建或改权限。

原创建的流程图,追踪精确文件经过格式、主机平台与解释器检查。
原创示意图:先分类精确字节,再选择修复。 Watch at Ease

“Exec format error”是格式分类失败,并不证明执行位错误。改动前先保存精确命令、路径、工作目录、Shell、主机架构和文件 SHA-256;然后只读判断这些字节究竟是脚本、ELF 可执行文件、目标文件、归档,还是误存成二进制名称的错误页。

本流程只处理主机 Shell 的直接执行。如果错误来自 systemd 单元或 Docker 构建/入口点,请在保留相同证据后转到对应专用指南,因为服务管理器与容器会改变真正执行的路径、平台和解释器。

冻结一次失败并确认精确字节

记录原样命令、退出状态、绝对路径、工作目录、Shell、uname -s、uname -m 与目标 sha256sum。只读解析符号链接,并确认包装器是否选中了另一条路径。

对精确路径运行 file 并保存完整输出。若结果是 HTML、JSON、普通文本、归档、可重定位目标文件或数据,应先调查下载或构建产物,而不是改权限。

区分脚本与 ELF 二进制

对脚本只检查第一行原始字节,确认 #!、绝对解释器路径,以及回车符或字节序标记是否改变了内核看到的路径。单独只读验证解释器,不要先重写整份脚本。

对 ELF 运行 readelf -h,将 Class、Data、Type 与 Machine 和目标主机对照。此处不匹配属于构建产物或发布选择问题,而不是 chmod 问题。

证明 ELF 解释器边界

若 ELF 头匹配,再用 readelf -l 检查请求的程序解释器,记录精确路径,并验证目标主机是否存在预期加载器。CPU 标签兼容并不能证明 ABI 与加载器齐全。

不要复制一个名字相近的随机文件来“补”加载器。应选择面向受支持 ABI 构建的产物,或通过受控的软件包流程安装有文档依据的运行时。

修复产物生成边界,而不是症状

操作系统或机器错误就选择或重建正确目标;ELF 类型错误就发布可执行文件而非目标文件或库;文本载荷就修复下载、认证、重定向或打包;脚本头畸形则只修复并审阅该边界。

在事件记录中同时保留原哈希与替换哈希。若路径由构建、部署或更新器生成,应修复该生产者,防止下次再次静默恢复错误字节。

重复同一调用并定义关闭条件

在同一目标主机和工作目录运行同一命令,记录替换哈希、文件分类、相关 ELF 或 shebang 证据、退出状态,以及一个小而明确的预期行为检查。

只有当目标执行成功且此前所有不匹配都有解释时才关闭。若上下文由 systemd 或 Docker 提供,请把证据交给专用流程,不要混合不同运行时边界。

原创建的决策图,区分脚本、平台、ELF 类型与容器转交分支。
原创示意图:修复第一个失败边界,再重复同一调用。 Watch at Ease