chroot: không chạy được lệnh '/ bin / bash': Không có tệp hoặc thư mục như vậy


54

Khi tôi chạy chrootlệnh, một lỗi được đưa ra:

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

1
Câu hỏi có thể được coi là một bản sao thuần túy của unix.stackexchange.com/questions/76490/ không? Các câu trả lời cho các câu hỏi đại diện cho một giải pháp khả thi cho vấn đề chắc chắn có giá trị liên kết, nhưng điều đó không làm cho câu hỏi trở thành một bản sao của nó.
Karl Richter

1
Vấn đề đối với tôi là tôi đã sử dụng Live CD 32 bit để gắn đĩa hệ điều hành 64 bit và chroot vào nó. Một hạt nhân 32 bit không thể chạy bash 64 bit. Giải pháp là lấy CD Live 64 bit. (Bản sao được liên kết hoàn toàn không liên quan.)
Leons

Đây không phải là một bản sao, mặc dù giải thích về nguồn gốc của vấn đề được áp dụng cho cả hai câu hỏi. Câu hỏi này được đánh dấu là một bản sao của các thư viện bị thiếu trong một bản cài đặt chung, trong khi câu hỏi này đặc biệt về một lỗi xảy ra trong một môi trường chroot.
bschlueter

Câu trả lời:


33

Lỗi này có nghĩa là không có /bin/bashthư mục bên trong chroot . Hãy chắc chắn rằng bạn trỏ nó đến nơi bash(hoặc các shell khác) có thể thực thi được trong chrootthư mục.

Nếu bạn có /mnt/somedir/usr/bin/bashthì thực hiệnchroot /mnt/somedir /usr/bin/bash


2
Có một tệp / bin / bash trong thư mục rootfs
USER3254789

2
Nó có thể được gây ra bởi một số lệnh / dòng không thành công trong /root/.bashrchoặc /root/.bash_profiletrong của bạn chroot. Bạn có thể tạm thời đổi tên các tập tin này? Ngoài ra, bạn có thể chắc chắn rằng đó bashlà thực thi ( chmod +x /chroot/bin/bash)?
phoops

aspade @ home-ba: ~ / DebianArm $ sudo chmod + x rootfs / bin / bash. aspade @ home-ba: ~ / DebianArm $ sudo chroot rootfs. chroot: không chạy được lệnh '/ bin / bash': Không có tệp hoặc thư mục như vậy
USER3254789

37
Tôi đã hiểu rồi. bin / bash ở đó, nhưng tôi không có / lib và / lib64 trong đó. / bin / bash phụ thuộc (ofc) vào libc, ld-linux, libdl, v.v ... Vậy đơn giản cp -a / usr rootfs /, cp -a / lib rootfs /, cp -a / lib64 rootfs / là đủ. (Bạn có thể gắn kết các liên kết đó, nhưng tôi đã sao chép chúng, vì tôi muốn chạy thứ gì đó nguy hiểm, có thể làm hỏng các tệp đó trong rootfs.) Thông báo từ chroot có thể mô tả nhiều hơn. "Không có tệp hoặc thư mục như vậy" thực sự có nghĩa là "Tôi không thể chạy sh này ...".
Dalibor Filus

1
@EmilVatai đã thêm :-)
Dalibor Filus

13

Tôi đã có /bin/bashtrong thư mục chroot, nhưng tôi không có / lib và / lib64 trong đó. Thông điệp từ chroot có thể được mô tả nhiều hơn. "Không có tệp hoặc thư mục như vậy" thực sự có nghĩa là "Tôi không thể chạy cái này ...".

/bin/bashtất nhiên phụ thuộc vào libc, ld-linux, libdl, v.v., bạn có thể sử dụng ldd /bin/bashđể xem thư viện nào nó yêu cầu.

1) Bạn có thể mount -o bindcác thư mục này trong chroot 2) Hoặc bạn có thể sao chép các thư viện này để chroot, nếu bạn không tin env chroot để không làm hỏng chúng, như vậy:

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

điều này sẽ tạo ra các bản sao .. không được tối ưu hóa khi chúng ta có nhiều thiết lập
viết lại vào

1
Điều này không tạo ra các bản sao nếu bạn sử dụng phương thức đầu tiên (được đánh dấu là 1)). Cái thứ hai rất hữu ích nếu bạn chroot vào môi trường không tin cậy. Ví dụ: bạn có một phân vùng với trojan hoặc thứ gì đó.
Dalibor Filus

4

chrootcố gắng khởi động shell được đặt trong $SHELLbiến môi trường của bạn theo mặc định, nhưng nó tìm nó trong thư mục gốc mới của bạn, dường như không chứa /bin/bash, vì vậy nó không thể bắt đầu.

Bạn có thể yêu cầu chroot bắt đầu một chương trình khác bên trong root mới bằng cách thêm nó làm tham số:

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

Lưu ý rằng đường dẫn của lệnh được diễn giải bên trong root mới của bạn, vì vậy trong ví dụ này, chương trình được gọi thực tế là trong/your/new/root/bin/foo


2
Có một tệp / bin / bash trong tệp rootfs, vậy vấn đề là gì
USER3254789

1
cho bất cứ ai bị hạ thấp: mặc dù đây không phải là vấn đề trong trường hợp của người gửi bài, đây là một lời giải thích hợp lệ và không thể giải thích được về lỗi trong câu hỏi. Nếu bạn thấy bất kỳ vấn đề nào khác, xin vui lòng để lại nhận xét khi bạn tải xuống một cái gì đó.
crater2150

2

Tôi đã nhận được cùng một lỗi khi cố gắng ssh đến một tài khoản chroot trên một máy chủ từ xa. Trong trường hợp của tôi, tôi đã thiếu tệp sau trong thư mục lib64 từ xa. Máy chủ là Centos6.9

ld-linux-x86-64.so.2

Nó đã được sửa bằng cách thực hiện như sau:

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

đã không sửa nó cho tôi, nhưng khi cp -r /lib /lib64 /secure/jailsửa nó, tôi cần thứ gì đó từ cả lib và lib64, và tôi không bận tâm để tìm ra chính xác cái gì. (có lẽ vì tôi đã kích hoạt multiarch)
hanshenrik

0

bạn cần chạy ldd với bash ldd $(which bash), sau đó bạn có thể tìm thấy một phụ thuộc bị thiếu, ví dụ nếu bạn không gắn kết / sao chép lib64, đối với 64 hệ thống, nó sẽ thông qua lỗi này.


0

Trong trường hợp bạn đang thực hiện biên dịch chéo, bạn cần sử dụng trình giả lập qemu có thể chạy / mnt / somedir / bin / bash khi bạn sao chép qemu-arm-static (Tôi đang làm điều này cho armhf) vào / mnt / somedir / usr / bin bạn sẽ có thể làm chroot.

Kiểm tra điều này để biết thêm chi tiết: https : //blog.lazy-ev Assessment.net/posts/linux/debian-armhf-bootstrap.html


1
Không có dấu hiệu cho thấy đây là những gì người dùng đang cố gắng làm.
Kusalananda

Các lỗi là như nhau cho cả hai trường hợp. Nếu ai đó đang thực hiện biên dịch chéo phải đối mặt với vấn đề này, anh ta có thể tìm thấy câu trả lời ở đây.
Jainam MJ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.