-bash: ./flume: 没有这样的文件或目录,但 flume 存在并且可以在其他地方工作

-bash: ./flume: 没有这样的文件或目录,但 flume 存在并且可以在其他地方工作

我们有一款基于 CentOS 4 32 位 Linux 的产品,该产品无需修改即可在 32 位和 64 位 CentOS/RHEL 4 和 5 以及 SLES 10 上运行。该产品也可在 SLES 9 64 位上运行,无需修改。[SLES 9 32 位需要不同的 libstdc++。

主二进制可执行文件的名称是flume

昨天我们尝试将其放在 64 位 Ubuntu 10 上,尽管文件在那里并且大小正确,但我们得到:

-bash: ./flume: No such file or directory

file flume 显示它是一个 32 位 ELF(不记得确切的输出并且系统处于隔离网络上)

如果代入/usr/local/bin,则:

which flume
/usr/local/bin/flume

我还没尝试 ldd flume

我现在怀疑有些图书馆不存在。

这是一个极其无益的信息,我从未见过这样的信息。

这是 Ubuntu 独有的现象吗?或者仅仅是本次安装独有的现象?

我们放弃了,转而使用 RHEL 4 系统,一切都很好。但我真的很想知道是什么原因造成的。

答案1

如果 flume 存在但其“加载器”不存在,则您会收到此消息,其中

  • 本机可执行文件的加载器是其动态加载器,例如/lib/ld-linux.so.2
  • 脚本的加载器是其 shebang 行中提到的程序,例如,/bin/sh如果脚本以 开头#!/bin/sh

就你的情况而言,你似乎没有在 64 位 Ubuntu 系统上安装 32 位动态加载程序。它在软件包中libc6-i386

strings ./flume | head -n 1将显示所需的动态加载程序的路径flume。这是少数完全无用的情况之一strace ./flume

我认为这种情况是 Unix 最容易引起误解的错误消息。不幸的是,修复它很困难:内核只能向程序调用者报告数字错误代码,因此它只能容纳“未找到命令”,而不能容纳它要查找的加载程序的名称。

答案2

您是否尝试授予该文件执行权限?

chmod +x ./flume 

相关内容