我正在尝试将 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)。