さまざまなシェルは既存のバイナリを実行しません。

さまざまなシェルは既存のバイナリを実行しません。

同じプログラムの事前に構築されたバイナリを複数ダウンロードしました(nodejs-linux,-x86,-x86_64)。他のシェルでも同様のエラーが発生しますno such file or directory: node。そうです$PATH。バイナリが存在し、実行可能です。

musl私はLinuxベースのディストリビューションを使用していて、バイナリがを使用しているからですかglibc?この場合、プログラムがゼロ以外の値で競合または終了するようです。

注:@DepressionDanielと@xhienneはどちらも以下に正解を提示しました。

答え1

あなたのエラーは、共有オブジェクトがないために発生するのではなく、共有オブジェクトがないために発生します。動的ローダーアプリケーションで使用されます。

ダイナミックローダが見つからない場合はシェルにexec()返され、これは受信したエラーメッセージに変換されます。ENOENT

動的ローダーが見つかったら、成功し、exec()動的ローダーは不足している共有オブジェクトに関する情報メッセージを印刷できます(この場合)。

これはlsさまざまな方法でバイナリを調整することで簡単に試すことができます。

cd /tmp
cp $(which ls) .
sed -e 's/libc.so.6/BAD!.so.6/' <ls >ls2
sed -e 's/ld-linux/ha-hahah/' <ls >ls3
strace ./ls2
strace ./ls3

したがって、あなたmuslのLinuxベースは非常に急進的でglibcあり、他のものを変更するだけでなく、動的ローダーをフレームに縛られないパスに置いたり、フレームに縛られない名前を付けたりすることがあります。

答え2

ライブラリーが実行可能ファイルに必要な動的ライブラリーと一致しない場合は、開始されません。この実行可能ファイルがどのダイナミックライブラリにリンクされているかを確認するには、次の手順を実行します。

ldd /path/to/executable

見てみると=> not found何か抜けたということをご存じでしょう。

関連情報