chroot:无法运行命令“ / bin / bash”:没有此类文件或目录


54

当我运行chroot命令时,出现错误:

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

1
问题可以视为unix.stackexchange.com/questions/76490/…的纯副本吗?问题的答案代表了肯定值得链接的问题的可能解决方案,但这并不能使问题重复。
Karl Richter 2014年

1
对我来说,问题是我正在使用32位Live CD挂载64位OS磁盘并对其进行chroot。32位内核无法运行64位bash。解决方案是获取64位Live CD。(链接的重复项完全无关。)
Leons 2014年

尽管问题源的解释适用于两个问题,但这并不是重复的。这个问题被标记为重复的问题是关于通用安装中缺少库的问题,而这个问题专门是关于在chroot环境中发生的错误。
bschlueter

Answers:


33

此错误意味着chroot中没有/bin/bash目录。确保将其指向目录中(或其他Shell的)可执行文件的位置。bashchroot

如果已经/mnt/somedir/usr/bin/bash执行chroot /mnt/somedir /usr/bin/bash


2
有一个在根文件系统文件夹/斌/ bash的文件
USER3254789

2
这可能是由于/root/.bashrc/root/.bash_profile您的中的某些命令行/命令行失败引起的chroot。您可以暂时重命名这些文件吗?您还可以确保该bash文件是可执行文件(chmod +x /chroot/bin/bash)吗?
2014年

aspade @ home-ba:〜/ DebianArm $ sudo chmod + x rootfs / bin / bash aspade @ home-ba:〜/ DebianArm $ sudo chroot rootfs。chroot:无法运行命令“ / bin / bash”:没有此类文件或目录
USER3254789 2014年

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发出的消息可能更具描述性。“没有这样的文件或目录”实际上表示“我无法运行此sh ...”。
Dalibor Filus 2015年

1
@EmilVatai添加了:-)
Dalibor Filus

13

/bin/bash在chrooted目录中,但是里面没有/ lib和/ lib64。chroot发出的消息可能更具描述性。“没有这样的文件或目录”实际上意味着“我无法运行此文件...”。

/bin/bash当然取决于libc,ld-linux,libdl等,您可以ldd /bin/bash用来查看它需要哪些库。

1)您可以mount -o bind在chroot下使用这些目录2)或者,如果您不信任chroot的env不会破坏它们,则可以将这些库复制到chroot,例如:

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

这将创建重复项..当我们进行大量设置时,并没有对其进行优化
Yellowandred '18

1
如果您使用第一种方法(标记为1),则不会创建重复项。如果您切换到不受信任的环境,则第二个有用。例如,您有一个带有木马之类的分区。
达利博尔·菲卢斯

4

chroot尝试启动$SHELL默认情况下在环境变量中设置的外壳程序,但它将在新的根目录(看起来似乎不包含)中查找它/bin/bash,因此无法启动。

您可以通过简单地将chroot添加为参数来告诉chroot在新的root内部启动另一个程序:

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

请注意,命令的路径新的根目录下解释,因此在此示例中,被调用的程序实际上位于/your/new/root/bin/foo


2
rootfs文件中有一个/ bin / bash文件,这是什么问题
USER3254789 2014年

1
致那些投票否决的人:尽管这不是发帖人的问题,但这是对问题中错误的有效且并非不可能的解释。如果您发现其他任何问题,请在拒绝投票时发表评论。
crater2150 2014年

2

尝试SSH到远程服务器上的chroot帐户时,出现了相同的错误。就我而言,我在远程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都提供一些东西,而且我也不想弄清楚到底是什么。(可能是因为我启用了多体系结构)
hanshenrik

0

您需要对bash运行ldd ldd $(which bash),那么您可能会发现缺少的依赖项,例如,如果未安装/复制lib64,则对于64个系统,它将通过此​​错误进行操作。


0

如果您要进行交叉编译,则需要使用qemu模拟器,一旦将qemu-arm-static(我正在为armhf执行此操作)复制到/ mnt / somedir / usr中,它就可以运行/ mnt / somedir / bin / bash / bin,您将可以执行chroot。

签出更多详细信息:https : //blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html


1
没有迹象表明这是用户正在尝试执行的操作。
库萨兰达

两种情况下的错误都是相同的。如果进行交叉编译的人遇到此问题,则可以在此处找到答案。
Jainam MJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.