chroot:コマンド '/ bin / bash'の実行に失敗しました:そのようなファイルまたはディレクトリはありません


54

chrootコマンドを実行すると、エラーが表示されます。

failed to run command ‘/bin/bash’: No such file or directory 

1
質問は、unix.stackexchange.com / questions / 76490 / …の純粋な複製と見なすことができますか?質問への回答は、間違いなくリンクに値する問題の可能な解決策を表していますが、それは質問をそれの複製にしません。
カールリヒター14

1
私にとっての問題は、32ビットLive CDを使用して64ビットOSディスクをマウントし、それにchrootすることでした。32ビットカーネルは64ビットbashを実行できません。解決策は、64ビットのLive CDを入手することでした。(リンクされた複製は完全に無関係です。)
レオン14年

問題の原因の説明が両方の質問に適用されるにもかかわらず、これは重複ではありません。これが重複としてマークされている質問は、一般的なインストールで不足しているライブラリに関するものですが、この質問は特にchrooted環境で発生するエラーに関するものです。
-bschlueter

回答:


33

このエラーは、chroot内に/bin/bashディレクトリがないことを意味します。ディレクトリ内の実行可能ファイル(または他のシェルの実行可能ファイル)を指すようにしてください。bashchroot

/mnt/somedir/usr/bin/bashその後実行した場合chroot /mnt/somedir /usr/bin/bash


2
rootfsフォルダーに/ bin / bashファイルがあります
USER3254789

2
これは、内のいくつか失敗したコマンド/ラインによって引き起こされるかもしれない/root/.bashrcか、/root/.bash_profileあなたの中にchroot。これらのファイルの名前を一時的に変更できますか?また、それbashが実行可能であることを確認できますchmod +x /chroot/bin/bashか()?
フープ

aspade @ home-ba:〜/ DebianArm $ sudo chmod + x rootfs / bin / bash。aspade @ home-ba:〜/ DebianArm $ sudo chroot rootfs。chroot環境:実行コマンド「/ binに/ bashの」に失敗しました:そのようなファイルやディレクトリはありません
USER3254789

37
私はそれを考え出した。bin / bashはありますが、その中に/ libと/ lib64がありませんでした。/ bin / bashは(ofc)libc、ld-linux、libdlなどに依存します。したがって、単純なcp -a / usr rootfs /、cp -a / lib rootfs /、cp -a / lib64 rootfs /で十分です。(これらのofcをマウントバインドできますが、rootfsのそれらのファイルを破損する可能性のある危険な何かを実行したいので、それらをコピーしました。)chrootからのメッセージは、より説明的です。「そのようなファイルやディレクトリはありません」とは、「これを実行できない」という意味です。
ダリボーフィラス

1
@EmilVataiが追加されました:-)
ダリボーフィラス

13

私がいた/bin/bash内部のディレクトリをchrootし、私はそれの内側/ libと/ lib64にありませんでした。chrootからのメッセージは、より説明的です。「そのようなファイルやディレクトリがない」とは、「これを実行できない...」という意味です。

/bin/bashもちろんlibc、ld-linux、libdlなどに依存するldd /bin/bashため、必要なライブラリを確認するために使用できます。

1)mount -o bindchrootの下でこれらのディレクトリを使用できます2)または、chrootされたenvが破損しないことを信頼していない場合、次のようにこれらのライブラリをchrootにコピーできます。

cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/

これにより、複製が作成されます。多くのセットアップがある場合、最適化されません
-yellowandred

1
最初の方法(1)を使用する場合、これは重複を作成しません)。2番目は、信頼できない環境にchrootする場合に便利です。たとえば、トロイの木馬などのパーティションがあります。
ダリボルFilus

4

chroot$SHELLデフォルトで環境変数に設定されているシェルを起動しようとしますが、新しいルートディレクトリでシェルを探しますが/bin/bash、これにはが含まれていないようであるため、起動できません。

chrootにパラメーターとして追加するだけで、新しいルート内で別のプログラムを開始するように指示できます。

chroot /your/new/root /bin/foo --options...

コマンドのパスは新しいルートで解釈されるため、この例では、呼び出されるプログラムは実際には/your/new/root/bin/foo


2
問題は何であるので、rootfsのファイルで、/ binに/ bashのファイルがあります
USER3254789

1
誰がダウン投票したか:これはポスターのケースでは問題ではなかったが、これは問題のエラーの有効であり、ありそうもない説明である。他に問題がある場合は、何かを投票するときにコメントを残してください。
crater2150 14

2

リモートサーバーでchrootされたアカウントにsshしようとすると、同じエラーが発生していました。私の場合、リモートlib64ディレクトリに次のファイルがありませんでした。サーバーはCentos6.9

ld-linux-x86-64.so.2

以下を実行することで修正されました。

cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/

私のためにそれを修正しませんでしたが、それをcp -r /lib /lib64 /secure/jail修正して、libとlib64の両方から何かが必要でした、そして私は正確に何を理解するのを気にしませんでした。(おそらく
マルチアーチが

0

bashに対してlddを実行する必要ldd $(which bash)があります。たとえば、64システムでlib64をマウント/コピーしなかった場合、欠落している依存関係が見つかる可能性があります。このエラーが発生します。


0

クロスコンパイルを行う場合は、qemu-arm-static(私はarmhfでこれを行っています)を/ mnt / somedir / usrにコピーしたら、/ mnt / somedir / bin / bashを実行できるqemuシミュレーターを使用する必要があります/ binを使用すると、chrootを実行できます。

詳細はこちらをご覧ください:https : //blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html


1
これがユーザーがやろうとしていることを示す兆候はありません。
クサラナナンダ

エラーは両方のケースで同じです。クロスコンパイルをしている人がこの問題に直面した場合、彼はここで答えを見つけることができます。
ジャイナムMJ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.