chroot : '/ bin / bash'명령을 실행하지 못했습니다 : 해당 파일 또는 디렉토리가 없습니다


54

나는 실행하면 chroot명령을 오류가 주어진다 :

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

1
질문은 unix.stackexchange.com/questions/76490/… 의 순수한 복제물로 간주 될 수 있습니까 ? 질문에 대한 답은 문제의 해결책이 될 수있는 확실한 해결책이 될 수 있지만, 그 질문과 중복되는 것은 아닙니다.
Karl Richter

1
나에게 문제는 32 비트 라이브 CD를 사용하여 64 비트 OS 디스크를 마운트하고 chroot했다는 것입니다. 32 비트 커널은 64 비트 bash를 실행할 수 없습니다. 해결책은 64 비트 Live CD를 얻는 것입니다. (연결된 복제본은 전적으로 관련이 없습니다.)
Leons

문제의 원인에 대한 설명이 두 질문 모두에 적용될 수 있음에도 불구하고 이것은 중복되지 않습니다. 이 복제본으로 표시된 질문은 일반 설치에서 누락 된 라이브러리에 대한 것이지만이 질문은 특히 루트 환경에서 발생하는 오류에 관한 것입니다.
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있습니까 ( )?
phoops

aspade @ home-ba : ~ / DebianArm $ sudo chmod + x rootfs / bin / bash. aspade @ home-ba : ~ / DebianArm $ sudo chroot rootfs. chroot 환경 : 해당 파일이나 디렉토리 : '/ 빈 / bash는'명령을 실행하지 못했습니다
USER3254789

37
나는 그것을 알아. bin / bash가 있지만 내부에 / lib 및 / lib64가 없습니다. / bin / bash는 libc, ld-linux, libdl 등에 의존합니다 (ofc). 그래서 간단한 cp -a / usr rootfs /, cp -a / lib rootfs /, cp -a / lib64 rootfs /는 충분했습니다. (c를 마운트 바인드 할 수는 있지만 위험한 것을 실행하고 싶기 때문에 복사했습니다. rootfs에서 해당 파일을 손상시킬 수 있습니다.) chroot의 메시지가 더 설명적일 수 있습니다. "그런 파일이나 디렉토리가 없다"는 것은 "나는 이것을 실행할 수 없다 ..."를 의미한다.
Dalibor Filus

1
@EmilVatai는 :-) 추가
달리 보르 Filus에게

13

나는 /bin/bashchroot 된 디렉토리 안에 있었지만 그 안에 / lib와 / lib64가 없었습니다. chroot의 메시지는 더 설명적일 수 있습니다. "그러한 파일이나 디렉토리가 없다"는 것은 "이것을 실행할 수 없습니다 ..."를 의미합니다.

/bin/bashlibc, 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

1
첫 번째 방법 (1로 표시)을 사용하면 중복이 생성되지 않습니다. 두 번째는 신뢰할 수없는 환경으로 chroot 할 때 유용합니다. 예를 들어 트로이 목마 또는 다른 파티션이 있습니다.
Dalibor 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
downvoted 누구에게 : 이것은 포스터의 경우 문제가 아니었지만, 이것은 문제의 오류에 대한 유효하고 예측할 수없는 설명입니다. 다른 문제가 발생하면 무언가를 줄이면 의견을 남겨주십시오.
crater2150

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 모두에서 무언가가 필요했고 정확히 무엇을 알아내는 데 신경 쓰지 않았습니다. (내가 multiarch을 사용했다 아마도 때문에)
hanshenrik

0

bash ldd $(which bash)에 대해 ldd를 실행해야합니다. 예를 들어 lib64를 마운트 / 복사하지 않은 경우 64 시스템의 경우 누락 된 종속성을 찾을 수 있습니다.이 오류가 발생합니다.


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
이것이 사용자가하려고한다는 표시는 없습니다.
Kusalananda

두 경우 모두 오류가 동일합니다. 크로스 컴파일을 수행하는 사람이이 문제에 직면하면 여기에서 답을 찾을 수 있습니다.
Jainam MJ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.