chroot: कमांड '/ bin / bash' चलाने में विफल: ऐसी कोई फ़ाइल या निर्देशिका नहीं


54

जब मैं chrootकमांड चलाता हूं तो एक त्रुटि दी जाती है:

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

1
क्या प्रश्न को unix.stackexchange.com/questions/76490/… का शुद्ध डुप्लिकेट माना जा सकता है ? प्रश्नों के उत्तर समस्या के लिए एक संभावित समाधान का प्रतिनिधित्व करते हैं निश्चित रूप से एक लिंक के लायक है, लेकिन यह सवाल को इसका दोहराव नहीं बनाता है।
कार्ल रिक्टर

1
मेरे लिए मुद्दा यह था कि मैं 64-बिट OS डिस्क माउंट करने के लिए 32-बिट लाइव सीडी का उपयोग कर रहा था और इसे चेरोट कर रहा था। 32-बिट कर्नेल 64-बिट बैश नहीं चला सकता है। इसका समाधान 64-बिट लाइव सीडी प्राप्त करना था। (जुड़ा हुआ डुप्लिकेट पूरी तरह से असंबंधित है।)
लेन्स

यह एक डुप्लिकेट नहीं है, दोनों प्रश्नों पर लागू होने वाली समस्या के स्रोत की व्याख्या के बावजूद। यह प्रश्न एक डुप्लिकेट के रूप में चिह्नित किया गया है एक सामान्य स्थापित पर लापता पुस्तकालयों के बारे में है, जबकि यह प्रश्न विशेष रूप से एक विकृत वातावरण में होने वाली त्रुटि के बारे में है।
22

जवाबों:


33

इस त्रुटि का मतलब है कि चेरोट के अंदर कोई /bin/bashनिर्देशिका नहीं है । सुनिश्चित करें कि आप इसे उस स्थान पर इंगित करते हैं जहाँ (या अन्य शेल का) निष्पादन योग्य है ।bashchroot

अगर आपने /mnt/somedir/usr/bin/bashअमल किया हैchroot /mnt/somedir /usr/bin/bash



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: ~ / डेबियनएआरएम $ सुडो चेरोट रूटफ। chroot: कमांड चलाने में विफल '/ bin / bash': ऐसी कोई फ़ाइल या निर्देशिका नहीं
USER3254789

37
मैं यह समझ गया। बिन / बैश है, लेकिन मेरे पास इसके अंदर / lib / / lib64 नहीं था। / बिन / बैश libc, ld-linux, libdl आदि पर निर्भर करता है ... इतना आसान cp -a / usr rootfs /, cp -a / lib rootfs /, cp -a / lib64 rootfs पर्याप्त था। (आप उन toc को माउंट-बाइंड कर सकते हैं, लेकिन मैंने उन्हें कॉपी किया, क्योंकि मैं कुछ खतरनाक चलाना चाहता हूं, जो रूटफुट में उन लोगों को भ्रष्ट कर सकते हैं।) चेरोट का संदेश अधिक वर्णनात्मक हो सकता है। "ऐसी कोई फ़ाइल या निर्देशिका" वास्तव में इसका मतलब है "मैं इस श को नहीं चला सकता ..."।
दलिबोर फिलुस

1
@EmilVatai ने :-)
Dalibor

13

मैं /bin/bashअंदर निर्देशिका को काट दिया था , लेकिन मेरे पास / lib और / lib64 इसके अंदर नहीं था। चेरोट का संदेश अधिक वर्णनात्मक हो सकता है। "ऐसी कोई फ़ाइल या निर्देशिका नहीं" वास्तव में इसका मतलब है "मैं इसे नहीं चला सकता ..."।

/bin/bashlibc, ld-linux, libdl आदि पर निश्चित रूप से निर्भर करता है, आप ldd /bin/bashयह देखने के लिए उपयोग कर सकते हैं कि इसे किन पुस्तकालयों की आवश्यकता है।

1) आप mount -o bindचेरोट 2 के तहत इन निर्देशिकाओं को कर सकते हैं) या आप इन पुस्तकालयों को चेरोट में कॉपी कर सकते हैं, यदि आप चिरोट एनव पर भरोसा नहीं करते हैं तो उन्हें भ्रष्ट न करें, जैसे:

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

इस डुप्लिकेट बनाने होगा .. जो अनुकूल नहीं है जब हम व्यवस्था के बहुत सारे है
yellowandred

1
यदि आप पहली विधि (1 के रूप में चिह्नित) का उपयोग करते हैं तो यह डुप्लिकेट नहीं बनाता है। दूसरा एक उपयोगी है यदि आप अविश्वसनीय वातावरण के लिए काटते हैं। उदाहरण के लिए, आपके पास ट्रोजन या कुछ के साथ एक विभाजन है।
Dalibor Filus

4

chroot$SHELLडिफ़ॉल्ट रूप से आपके पर्यावरण चर में सेट किए गए शेल को शुरू करने की कोशिश करता है , लेकिन यह आपके नए रूट डायर में इसे ढूंढता है, जिसमें ऐसा नहीं लगता है /bin/bash, इसलिए यह शुरू नहीं हो सकता है।

आप एक रूट के रूप में बस इसे जोड़कर नए रूट के अंदर एक और प्रोग्राम शुरू करने के लिए चिरोट को बता सकते हैं:

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

ध्यान दें कि कमांड का पथ आपके नए रूट के अंदर व्याख्यायित होता है , इसलिए इस उदाहरण में वास्तव में बुलाया गया प्रोग्राम है/your/new/root/bin/foo



1
जो किसी ने भी डाउनवोट किया है: हालांकि यह पोस्टर के मामले में समस्या नहीं थी, यह प्रश्न में त्रुटि का एक वैध और अप्रमाणित विवरण नहीं है। यदि आपको कोई अन्य समस्या दिखाई देती है, तो कृपया टिप्पणी छोड़ दें जब आप कुछ नीचे करते हैं।
crater2150

2

मुझे एक ही त्रुटि मिल रही थी जब एक दूरस्थ सर्वर पर एक काटे गए खाते में 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

आपको बैश के खिलाफ ldd चलाने की आवश्यकता है ldd $(which bash), तो आपको एक लापता निर्भरता मिल सकती है, उदाहरण के लिए यदि आपने 64 प्रणालियों के लिए lib64 माउंट / कॉपी नहीं किया है, तो यह इस त्रुटि के माध्यम से होगा।


0

यदि आप एक क्यूर संकलन कर रहे हैं तो आपको qemu सिम्युलेटर का उपयोग करने की आवश्यकता है जो कि qemu-arm-static (मैं armhf के लिए यह कर रहा हूँ) को mnt / somedir / usr में कॉपी / mnt / somedir / bin / bash चला सकता हूँ। / बिन तुम चूर चूर कर सकोगे।

अधिक जानकारी के लिए इसे देखें: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html


1
कोई संकेत नहीं है कि यह वही है जो उपयोगकर्ता करने की कोशिश कर रहा है।
Kusalananda

दोनों मामलों के लिए त्रुटियाँ समान हैं। यदि कोई व्यक्ति जो संकलन संकलन कर रहा है, वह इस मुद्दे का सामना कर रहा है, तो वह यहां जवाब पा सकता है।
जैनाम एमजे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.