web-dev-qa-db-ja.com

「そのようなファイルまたはディレクトリはありません」が存在する

コマンドライン./arm-mingw32ce-g++から実行可能ファイルを実行したいだけですが、エラーメッセージが表示されます。

bash: ./arm-mingw32ce-g++: No such file or directory

Ubuntu Linux 10.10を実行しています。 ls -lリスト

-rwxr-xr-x 1 root root  433308 2010-10-16 21:32 arm-mingw32ce-g++

Sudo(Sudo ./arm-mingw32ce-g++)を使用すると、

Sudo: unable to execute ./arm-mingw32ce-g++: No such file or directory

私は、OSがファイルがそこにあるときでも見ることができない理由を知りません。何かご意見は?

75
Warpspace

このエラーは、./arm-mingw32ce-g++が存在しない(存在する)か、存在し、カーネルによって認識されるがダイナミックローダーが利用できない動的にリンクされた実行可能ファイルであることを意味します。 ldd /arm-mingw32ce-g++を実行すると、必要なダイナミックローダーを確認できます。 not foundとマークされているものはすべて、ダイナミックローダーまたはインストールする必要があるライブラリです。

AMD64インストールで32ビットバイナリを実行しようとしている場合:

  • Ubuntu 11.04までは、パッケージ ia32-libs をインストールしてください。
  • Ubuntu 11.10では、 ia32-libs-multiarch をインストールします。
  • 12.04以降、 ia32-libs-multiarch をインストールするか、:i386パッケージに加えて、:AMD64パッケージの適切なセットを選択します。
67
Gilles

UbuntuでSeleniumソースをビルドしようとしたときに、このエラーに直面しました。正しいShebangを使用した単純なシェルスクリプトは、前提条件をすべて満たした後でも実行できませんでした。

file file-name # helped me in understanding that CRLF ending were present in the file.

このファイルをVimで開いたところ、Windowsマシンでこのファイルを編集しただけで、DOS形式であったことがわかりました。以下のコマンドでファイルをUnix形式に変換しました。

dos2unix filename # actually helped me and things were fine.

プラットフォーム間でファイルを編集するときはいつでも、ファイル形式にも注意する必要があることを願っています。

22
stupidnetizen

このエラーは、スクリプトを実行しようとして Shebang のつづりが間違っている場合にも発生する可能性があります。 #!/bin/sh#!/bin/bash、または使用しているインタープリターのいずれかを読み取ります。

15
Zoltán

Pythonスクリプトを実行しようとしたときに同じエラーメッセージが表示されました-これは@Warpspaceの意図したユースケースではありませんでした(他のコメントを参照)便利だと思う。

私の場合、シバンの行(\r\n)がつまずくのはDOS行の終わり(\nではなく#!/usr/bin/env python)でした。簡単なdos2unix myfile.pyで修正されました。

7
djlauk

32/64ビットの問題がない単純なbashスクリプトでも同じエラーが発生しました。これはおそらく、実行しようとしているスクリプトにエラーがあるためです。この buntuフォーラム投稿 は、通常のスクリプトファイルを使用すると、「sh」を前に追加でき、デバッグ出力が得られる可能性があることを示しています。例えば.

$ Sudo sh arm-mingw32ce-g++

出力が得られるかどうかを確認します。

私の場合、実際の問題は、実行しようとしたファイルがLinuxではなくWindows形式であったことです。

4
icc97

以下のコマンドは16.4 Ubuntuで動作しました

この問題は、.shファイルが破損しているか、Unixプロトコルに従ってフォーマットされていない場合に発生します。

dos2unixは.shファイルをUnix形式に変換します!

Sudo apt-get install dos2unix -y
dos2unix test.sh
Sudo chmod u+x test.sh 
Sudo ./test.sh
3
Coral

このエラー“No such file or directory”が発生しましたが、ファイルはWindowsで作成され、Ubuntuで実行しようとしましたが、ファイルには新しい行があった場所に無効な15\rが含まれていました。不要なものを切り捨てる新しいファイルを作成しました

sleep: invalid time interval ‘15\r’
Try 'sleep --help' for more information.
script.sh: 5: script.sh: /opt/ag/cont: not found
script.sh: 6: script.sh: /opt/ag/cont: not found
root@Ubuntu14:/home/abc12/Desktop# vi script.sh 
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \r  \n   w   g   e   t       h   t   t   p   :   /

0000400   :   4   1   2   0   /  \r  \n
0000410
root@Ubuntu14:/home/abc12/Desktop# tr -d \\015 < script.sh > script.sh.fixed
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh.fixed 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \n   w   g   e   t       h   t   t   p   :   /   /

0000400   /  \n
0000402
root@Ubuntu14:/home/abc12/Desktop# sh -x script.sh.fixed 
2
Pan

他の人が述べたように、これは実行ファイルではなくローダーが見つからないためです。残念ながら、メッセージは十分に明確ではありません。

実行可能ファイルが使用するローダーを変更することで修正できます。この別の質問の私の完全な回答を参照してください: 単一ホスト上の複数のglibcライブラリ

基本的に、使用しようとしているローダーを見つける必要があります。

$ readelf -l arm-mingw32ce-g++ | grep interpreter
  [Requesting program interpreter: /lib/ld-linux.so.2]

次に、同等のローダーの正しいパスを見つけ、実際のパスからローダーを使用するように実行可能ファイルを変更します。

$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g++

おそらく、インクルードのパスも設定する必要があります。実行しようとした後に、必要かどうかがわかります。他のスレッドのすべての詳細を参照してください。

1
msb

この問題はmingw32 bashで発生しました。 Program Files (x86)\nodejsからnode/npmを実行し、disabledディレクトリに移動しました(基本的にはパスから削除します)。また、パスにProgram Files\nodejs(つまり64ビットバージョン)がありましたが、x86バージョンの後でのみです。 bashシェルを再起動すると、64ビットバージョンのnpmが見つかりました。 nodeは常に正常に機能しました(x86バージョンが移動したときに変更されたnode -vで確認)。

bash -rはbashを再起動する代わりに機能したと思います: https://unix.stackexchange.com/a/561

1
Pasi Savolainen

Macで作成したファイルでも同じ問題が発生しました。 ./filenameを使用してシェルで実行しようとすると、ファイルが見つかりませんというエラーメッセージが表示されます。ファイルに何か問題があったと思います。

私がやったこと:

サーバーへのsshセッションを開きます
catファイル名
出力をクリップボードにコピーします
rmファイル名
タッチファイル名
viファイル名
i挿入モード
クリップボードからコンテンツを貼り付けます
ESCは挿入モードを終了します
:wq!

これは私のために働いた。

1
space