当它确实存在时,为什么 sh 说“未找到”?

当它确实存在时,为什么 sh 说“未找到”?

可能的重复:
Optware 安装的二进制文件中显示“没有这样的文件或目录”

我正在尝试将 ebtables 添加到一个小路由器盒中。我去获取了一个针对正确架构编译的二进制文件,并将其放在/sbin/.当我这样做时/sbin/ebtables,外壳说/bin/sh: /sbin/ebtables: not found,但我可以这样做ls -l /sbin/ebtables,并且它显示得很完美:

-rwxr-xr-x    1 admin    admin        4808 Aug  4 10:36 /sbin/ebtables

对这里发生的事情有什么想法吗?

答案1

这可能是缺少依赖项。值得注意的是,如果ELF您的系统上不存在标头中设置的运行时链接器(“程序解释器”),您将收到此类消息。

要检查这一点,请运行:

readelf -l your_executable|grep "program interpreter"

如果它为您提供的内容在您的系统上不存在,或者缺少依赖项(使用 进行检查ldd),您将收到该奇怪的错误消息。

演示:

$ gcc -o test t.c
$ readelf -l test|grep "program interpreter"
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
$ ./test
hello!

$ gcc -Wl,--dynamic-linker -Wl,/i/dont/exist.so -o test t.c
$ readelf -l test|grep "program interpreter"
      [Requesting program interpreter: /i/dont/exist.so]
$ ./test
bash: ./test: No such file or directory

答案2

你运行它吗root? IIRC 一些 bash 实现拒绝运行任何事物/sbin/usr/sbin如果你不是root.

我发现本文寻求解释(可能不相关,谈论 OpenSUSE)。

相关内容