ऐसी कोई फ़ाइल या डायरेक्टरी नहीं है? लेकिन फ़ाइल मौजूद है!


186

मैंने एक गेम (शंक) डाउनलोड किया है लेकिन बिन फ़ाइल नहीं चलती है। जब मैं निष्पादन योग्य लॉन्च करने का प्रयास करता हूं, तो यह त्रुटि दिखाई देती है:

bash: ./shank-linux-120720110-1-bin: No such file or directory

2
हो सकता है कि "chmod u + x ./shank*bin" पहले?
एजेंट

यह भी कि '-बीएन' के बजाय '.बीन' नहीं होना चाहिए, शायद यह सिर्फ एक टाइपो है
Anake

आपके जवाब के लिए धन्यवाद। मैंने वह कमांड किया है जो आपने Agent86 कहा है, लेकिन मेरे पास एक ही परिणाम है। मैंने .deb फ़ाइल भी डाउनलोड की है लेकिन एक समस्या भी है। मुझे नहीं पता कि इस खेल में क्या समस्या है।
फ्रांसेस्को

कृपया पुष्टि करें कि क्या आप 64-बिट इंस्टॉलेशन चला रहे हैं (यह इस समस्या के लिए सबसे सामान्य मामला है)।
गाइल्स

हां, मैं पुष्टि करता हूं कि मैं अपने लैपटॉप पर 64-बिट आर्किटेक्चर का उपयोग कर रहा हूं।
फ्रांसेस्को

जवाबों:


235

आप शायद 64-बिट सिस्टम पर 32-बिट बाइनरी चलाने की कोशिश कर रहे हैं जिसमें 32-बिट समर्थन स्थापित नहीं है।

ऐसे तीन मामले हैं जहाँ आप संदेश प्राप्त कर सकते हैं "ऐसी कोई फ़ाइल या निर्देशिका नहीं":

  • फ़ाइल मौजूद नहीं है। मुझे लगता है कि आपने जाँच की है कि फ़ाइल मौजूद है (शायद क्योंकि शेल इसे पूरा करता है)।
  • उस नाम से एक फ़ाइल है, लेकिन यह एक झूलने वाला प्रतीकात्मक लिंक है।
  • फ़ाइल मौजूद है, और आप इसे पढ़ भी सकते हैं (उदाहरण के लिए, कमांड file shank-linux-120720110-1-bin"ELF 32-बिट LSB निष्पादन योग्य ...") जैसा कुछ प्रदर्शित करता है, और फिर भी जब आप इसे निष्पादित करने का प्रयास करते हैं तो आपको बताया जाता है कि फ़ाइल मौजूद नहीं है।

इस अंतिम मामले में त्रुटि संदेश भ्रामक है। यह आपको बता रहा है कि प्रोग्राम को चलाने के लिए आवश्यक रनटाइम वातावरण का एक महत्वपूर्ण घटक गायब है। दुर्भाग्य से, जिस चैनल के माध्यम से त्रुटि की सूचना दी गई है, उसमें केवल त्रुटि कोड के लिए जगह है और इस अतिरिक्त जानकारी के लिए नहीं है कि यह वास्तव में रनटाइम वातावरण है जिसे दोष देना है। यदि आप इस स्पष्टीकरण का तकनीकी संस्करण चाहते हैं, तो 64-बिट सिस्टम पर 32-बिट बाइनरी चलाते समय संदेश "नहीं मिला" संदेश पढ़ें ।

fileआदेश आपको बता देंगे क्या इस द्विआधारी है। कुछ अपवादों के साथ, आप केवल प्रोसेसर आर्किटेक्चर के लिए एक बाइनरी चला सकते हैं जो आपके उबंटू की रिलीज के लिए है। मुख्य अपवाद यह है कि आप 64-बिट (amd64, उर्फ ​​x86_64) सिस्टम पर 32-बिट (x86, उर्फ ​​IA32) बायनेरिज़ चला सकते हैं।

उबंटू में 11.04 तक, 64-बिट इंस्टॉलेशन पर 32-बिट बाइनरी चलाने के लिए, आपको पैकेज स्थापित करने कीia32-libs आवश्यकता है Ia32-libs स्थापित करें। आपको अतिरिक्त लाइब्रेरी स्थापित करने की आवश्यकता हो सकती है (यदि आप करते हैं तो आपको एक स्पष्ट त्रुटि संदेश मिलेगा)।

चूंकि 11.10 ( वनिरिक ) ने मल्टीकार सपोर्ट पेश किया था , आप अभी भी इंस्टॉल ia32-libsकर सकते हैं, लेकिन आप एक महीन-बारीक दृष्टिकोण चुन सकते हैं, यह प्राप्त करने के लिए पर्याप्त है (साथ ही कोई अन्य आवश्यक लाइब्रेरी)।libc6-i386 Libc6-i386 स्थापित करें


एक महान जवाब के लिए धन्यवाद, गिलेस। जबकि मैंने इस समस्या का अनुभव नहीं किया है (फिर भी!), मैंने आपके उत्तर को भविष्य के संदर्भ के लिए दूर कर दिया है।
जिम सी

आपके संपूर्ण उत्तर के लिए धन्यवाद! मेरे द्वारा डाउनलोड की गई फ़ाइल बिन इस प्रारूप (बिन) में केवल एक ही उपलब्ध थी। इसलिए मुझे लगता है कि सभी आर्किटेक्चर के लिए अच्छा है। मैंने अपने आर्किटेक्चर (64 बिट) के लिए .deb फ़ाइल भी डाउनलोड की है, लेकिन अलग त्रुटि के साथ। इस बिंदु पर मुझे लगता है कि खेल कुछ बग से प्रभावित है या मैं इस खेल को स्थापित करने में सक्षम नहीं हूं। अब मैं libc6-i386 डाउनलोड करने की कोशिश करता हूं और मैं अभी भी इसे स्थापित करने का प्रयास करता हूं। यदि महत्वपूर्ण बदलाव हैं तो मैं फिर से लिखूंगा। आपके समय के लिए धन्यवाद।
फ्रांसेस्को

2
@Francesco समाधान पोस्ट करें! यह उंक पर शंक को चलाने की कोशिश कर रहे अन्य लोगों की मदद करने की संभावना है। अपने प्रश्न का उत्तर देना पूरी तरह से ठीक है
गिल्स

1
lddयदि आप किसी लाइब्रेरी को याद कर रहे हैं, तो आप इसका उपयोग कर सकते हैं । दूसरों के बीच ldd kgio_ext.soकुछ कह सकते हैंlibruby.so.2.3 => not found
EnabrenTane

1
स्पष्ट रूप से एक और परिदृश्य है जब bash: ...some...path...: No such file or directoryदिखा सकते हैं: निष्पादन योग्य फ़ाइल को स्थानांतरित करने के बाद। बैश $ PATH में पाए जाने वाले एग्जीक्यूटिव्स को कैश पथ के लिए लगता है; hash -rइसे साफ़ करने के लिए दौड़ें । देखें: unix.stackexchange.com/a/5610/11352
akavel

53

64 बिट उबंटू मल्टीकार सिस्टम

file file-nameशो के आउटपुट ,

file-name: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

एक 64 बिट बहु मेहराब उबंटू प्रणाली में 32 बिट निष्पादन योग्य फ़ाइल चलाने के लिए आपको जोड़ने के लिए i386वास्तुकला और भी आप स्थापित किया है libc6:i386, libncurses5:i386, libstdc++6:i386इन तीन पुस्तकालय संकुल।

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name

मैं आखिरी कमांड के लिए sudo का उपयोग करूंगा: एक 32 बिट बाइनरी लॉन्च करना (इसलिए स्पष्ट रूप से आपके या उबंटू द्वारा संकलित नहीं) क्योंकि sudo जोखिम भरा हो सकता है। (ठीक है, यहां तक ​​कि गैर रूट के रूप में, सराहा गया)
अलसी

कभी भी यह अंतिम हो सकता है लेकिन यह काम करता है।
अविनाश राज

1
ध्यान दिया जाना चाहिए कि यदि आप CentOS या RedHat का उपयोग कर रहे हैं, तो यह उत्तर लागू नहीं होता है। इस वजह से कुछ घंटों के लिए फेंक दिया गया था।
omikes

1
काली 2 64 बिट पर, मुझे केवल स्थापित करना थाlibselinux1:i386
अरालोक्स

4

32 बिट के लिए बहस को स्थापित करके मैंने महसूस किया कि मैं कुछ पुस्तकालयों (ia32-libs और libc6 के अलावा) को याद कर रहा था। मैंने पहली बार इस कमांड को देकर इस समस्या को हल किया:

sudo apt-get install -f          

फिर मुझे एक और त्रुटि मिली:

Message: SDL_GL_LoadLibrary 
Error: Failed loading libGL.so.1

जाहिर है, इन पुस्तकालयों को ठीक से स्थापित किया गया था। विवरण में जाने के बिना मुझे पुस्तकालयों को हाथ से जोड़ना था। मुझे तब एहसास हुआ कि Synaptic के माध्यम से एक आसान समाधान भी निम्नलिखित पैकेजों को स्थापित कर सकता है:

libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.

उसके बाद खेलने के दौरान अगली समस्या काली स्क्रीन की थी, जिसे मैंने इसके साथ निष्पादन योग्य / शंक / बिन में बदलकर हल किया: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-tub.tar .bz2

मुझे उम्मीद है कि यह किसी के लिए उपयोगी होगा। यदि आपको अधिक सहायता या अधिक विवरण की आवश्यकता है, तो कृपया मुझसे संपर्क करने में संकोच न करें।


3

यहां समस्या की प्रकृति के बारे में थोड़ा और दिखाया गया है, और इसे उबंटू 16.04 के रूप में कैसे ठीक किया जाए, इसकी एक प्रतिलेख है। ध्यान दें कि भले ही fileरिपोर्ट "डायनेमिकली लिंक्ड" हो, lddरिपोर्ट्स "डायनामिक एक्ज़ीक्यूटेबल नहीं"।

$ ./myprogram
bash: myprogram: No such file or directory

$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped

$ ldd myprogram
    not a dynamic executable

एक बार जब आप libc6: i386 को स्थापित करते हैं, तो चीजें बेहतर होने लगती हैं ...

$ sudo apt-get install libc6:i386 # the initial fix
...

$ ldd myprogram
    linux-gate.so.1 =>  (0xf77fd000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
    /lib/ld-linux.so.2 (0x56578000)

$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

काम पूरा करने के लिए, आपको एक बार में अतिरिक्त पुस्तकालयों को पहचानने और स्थापित करने की आवश्यकता हो सकती है ...

$ sudo apt-get install libstdc++6:i386 ## may require various additional libs

$ ./myprogram
... works correctly ...

मुझे पता नहीं है कि स्थापित करने के लिए सही पुस्तकालयों की पहचान करने का एक व्यवस्थित तरीका है या नहीं। पैकेज के नाम (टैब पूरा होने में मदद) में त्रुटि संदेशों की मैपिंग का थोड़ा सा अनुमान है।


ldd(गलत तरीके से) रिपोर्ट "एक गतिशील निष्पादन योग्य नहीं"।
नोबार

3

@ उत्तर का विस्तार करने के लिए, इस त्रुटि के परिणामस्वरूप कम से कम तीन परिदृश्य हैं:

  1. फ़ाइल मौजूद नहीं है।
  2. फ़ाइल मौजूद है, लेकिन एक झूलने वाला प्रतीकात्मक लिंक है।
  3. फ़ाइल मौजूद है (जैसे fileकमांड काम करता है), एक गड़बड़ी त्रुटि संदेश के लिए बना रहा है। इसका मतलब लोडर के साथ कोई समस्या हो सकती है।

लोडर समस्याओं की श्रेणियाँ:

  1. एक निष्पादन योग्य लोडर मौजूद नहीं है। आप फ़ाइल कमांड का उपयोग करके इसे देख सकते हैं और देख सकते हैं कि लोडर मौजूद है या नहीं। उदाहरण के लिए

    file lmgrd
    lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
    

    सूचना interpreter /lib64/ld-lsb-x86-64.so.3; यदि यह फ़ाइल मौजूद नहीं है, तो आपको इसे स्थापित करने की आवश्यकता है। 16.04 पर इस विशेष लोडर के लिए, उत्तर निकला sudo apt-get install lsb

  2. स्क्रिप्ट के लोडर के साथ समस्याएँ ( इस उत्तर को देखें )।

  3. साझा पुस्तकालयों को गुम करना - ldd <file-name>किसी भी "नहीं मिला" पुस्तकालयों की जांच के लिए उपयोग करें। अधिक जानकारी के लिए यह उत्तर देखें ।

लोडर मौजूदा नहीं 32/64 बिट बेमेल या किसी अन्य कारण से हो सकता है। लोडर त्रुटियों के अन्य प्रकार हो सकते हैं जिनके बारे में मुझे जानकारी नहीं है।


1
मेरे मामले में, file lmutilदुभाषिया नहीं दिखा, लेकिन lddकिया और lsbसमस्या को हल किया।
दविद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.