/home/amnesia/myfile: コマンドが見つかりません - 64ビット実行可能ファイル、64ビットカーネル

/home/amnesia/myfile: コマンドが見つかりません - 64ビット実行可能ファイル、64ビットカーネル

ターミナルで実行可能ファイルを実行しようとしていますが(Tails Live OSを使用しています)、エラーメッセージが表示され続けます。権限を設定しました。私が書いたコマンドは次のとおりです。

sudo ./home/amnesia/myfile

「コマンドが見つかりません」というメッセージが表示されますか?

sudoを使用したり使用せずに実行してみました。

$ sudo /home/amnesia/myfile
sudo: unable to execute /home/amnesia/myfile: No such file or directory
$ /home/amnesia/myfile
bash: /home/amnesia/myfile: No such file or directory

ファイルに関する情報(スクリプトではなくバイナリ):

$ ls -l /home/amnesia/myfile
-rwxrwxrwx 1 amnesia amnesia 15327 Sep  3  2013 /home/amnesia/myfile
$ file /home/amnesia/myfile
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared lies), for GNU/Linux 2.6.9, not stripped

私のシステムに関する情報:

$ uname -a
Linux amnesia 3.16-3-amd64 #1 SMP Debian 3.16.5-1 (2014-10-10) x86_64 GNU/Linux
$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xd3280633faaabf56a14a26693d2f810a32222e51, stripped

答え1

$ /home/amnesia/myfile
bash: /home/amnesia/myfile: No such file or directory
$ file /home/amnesia/myfile
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared lies), for GNU/Linux 2.6.9, not stripped

存在しますmyfileが、実行すると、「該当するファイルやディレクトリはありません」というメッセージが表示されます。これは次の場合に発生します。

  • このファイルはローダーによって異なります。動的にリンクされた実行可能ファイルであり、動的リンクライブラリをロードするにはローダが必要です。 (ローダはshebang行で指定されたインタプリタかもしれませんが、bashはそれを検出して他のエラーメッセージを表示します。)
  • ローダーファイルが存在しません。

「該当するファイルやディレクトリはありません」というメッセージは実際にローダーに関連していますが、シェルはローダーが関連していることを知らないため、元のファイルの名前を報告します。これをより詳細に説明する。Optwareがインストールされているバイナリに、「該当するファイルやディレクトリはありません」と表示されます。

なぜこのプログラムを実行できないのですか?これは、64ビット実行可能ファイル用の動的ローダーがないためです。

$ uname -a
Linux amnesia 3.16-3-amd64 #1 SMP Debian 3.16.5-1 (2014-10-10) x86_64 GNU/Linux
$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xd3280633faaabf56a14a26693d2f810a32222e51, stripped

システムには64ビットカーネルがありますが、システムの残りの部分は32ビットです。 Linuxはこの構成をサポートしています(64ビットカーネルは32ビットプログラムだけでなく64ビットプログラムも実行できますが、32ビットカーネルは32ビットプログラムのみを実行できます)。カーネルはプログラムをうまくロードします。静的にリンクされたamd64実行可能ファイルを実行できます。ただし、64ビットローダー()がないか、/lib64/ld-linux-x86-64.so.264ビットライブラリがない可能性があります。したがって、動的にリンクされたamd64実行可能ファイルを実行することはできません。

64ビットカーネルと32ビットユーザー領域を実行するのはなぜですか?

  • 約3GB以上の物理メモリが使用されます。 (これは唯一の方法ではありません。もう1つの可能性は、PAEをサポートする32ビットカーネルを実行することです。)
  • たとえば、ライブOSから起動し、インストールされた64ビットシステムにルートを指定して64ビットバイナリを実行できます。
  • 展開のメンテナンスを減らすには、最新のハードウェアにシングルコアを提供し、64ビットにします。
  • 64ビット仮想マシンを実行します(一部のVMエンジンでは、64ビットVMを実行するには64ビットカーネルが必要です)。

私はTailsが64ビットシステムを提供していないと思います。 32ビット版の実行可能ファイルをインポートする必要があります。そうでない場合は、別のディストリビューションを使用してください(仮想マシンで利用可能)。

答え2

まだ行っていない場合:chmod

chmod u+x /home/amnesia/myfile

そして最初から「.」を削除してください。ファイルと同じディレクトリにある場合に必要です。

sudo /home/amnesia/myfile

デモは次のとおりです。 デモ

答え3

次の点を確認することをお勧めします。

  • ランニングfile /home/amnesia/myfile。これにより、実行するファイルの種類が決まります。
  • スクリプトの実行いいえ sudoより意味のある情報を入手してください。
  • シェルスクリプトのようなものであれば、set -x何が起こっているのかを理解するのに役立ちます。sh -x以下を使用してスクリプトを実行することもできます。
  • たぶんShebangスレッドが壊れている可能性があります(例:間違ったソルバー)。貼り付けの出力head -5 /home/amnesia/myfile
  • スクリプトに「DOS」改行文字がある可能性があります。もしファイルはDOSの改行を持つスクリプトで簡単またはdos2unix myfileトリックperl -pi -e 's/\r\n/\n/g' input.fileを実行します。

答え4

私も同じ問題があります。 Debian 7.8 での修正は、次のlsbパッケージをインストールすることです。

apt-get install lsb

CentOSに同様のパッケージをインストールする必要がありました(どんなパッケージなのか覚えていません)。

関連情報