web-dev-qa-db-ja.com

間違いなくそこにあるのに、なぜ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

ここで何が起こっているかについてのアイデアはありますか?

32
Shawn J. Goff

依存関係がない可能性があります。特に、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
39
Mat