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


94

मैं बस कमांड लाइन से एक निष्पादन योग्य चलाना चाहता हूं ./arm-mingw32ce-g++, लेकिन फिर मुझे त्रुटि संदेश मिलता है,

bash: ./arm-mingw32ce-g++: No such file or directory

मैं उबंटू लिनक्स 10.10 चला रहा हूं। ls -lसूचियों

-rwxr-xr-x 1 root root  433308 2010-10-16 21:32 arm-mingw32ce-g++

सुडो ( sudo ./arm-mingw32ce-g++) का उपयोग करता है

sudo: unable to execute ./arm-mingw32ce-g++: No such file or directory

मुझे पता नहीं है कि ओएस फाइल को तब भी क्यों नहीं देख सकता है। कोई विचार?

जवाबों:


82

इस त्रुटि का मतलब यह हो सकता है कि ./arm-mingw32ce-g++मौजूद नहीं है (लेकिन यह करता है), या यह मौजूद है और कर्नेल द्वारा मान्यता प्राप्त एक गतिशील रूप से जुड़ा निष्पादन योग्य है, लेकिन जिसका गतिशील लोडर उपलब्ध नहीं है। आप देख सकते हैं कि गतिशील लोडर को चलाने के लिए क्या आवश्यक है ldd /arm-mingw32ce-g++; चिह्नित कुछ भी not foundगतिशील लोडर या एक पुस्तकालय है जिसे आपको स्थापित करने की आवश्यकता है।

यदि आप एक amd64 इंस्टालेशन पर 32-बिट बाइनरी चलाने की कोशिश कर रहे हैं:

  • Ubuntu 11.04 तक, पैकेज स्थापित करें ia32-libs
  • Ubuntu 11.10 पर, इंस्टॉल करें ia32-libs-multiarch
  • 12.04 से शुरू करके, संकुल के अलावा संकुल ia32-libs-multiarchका एक उचित समुच्चय या चयन करें ।:i386:amd64

16
बहुत बढ़िया, काम करता है! वैसे, ldd का आउटपुट था not a dynamic executable(इससे पहले कि मैं ia32-lib स्थापित करता हूं)।
वॉरस्पैस

3
ia32-libs-*Ubuntu 16.04 में पदावनत किया गया है, स्थापित करें lib32ncurses5और lib32z1इसके बजाय।
गैलोजप्लसप्लस

2
यह 3 पार्टी बायनेरिज़ चलाने की कोशिश करते समय निक्स या निक्स पर एक आम मुद्दा है; patchelf देखें।
bbarker

30

मुझे इस त्रुटि का सामना करना पड़ा जब मैं उबंटू पर सेलेनियम स्रोत बनाने की कोशिश कर रहा था। सही शेलबैंग वाली सरल शेल स्क्रिप्ट मेरे द्वारा सभी पूर्व-आवृतियों को कवर करने के बाद भी नहीं चल पा रही थी।

file file-name # helped me in understanding that CRLF ending were present in the file.

मैंने फ़ाइल विम में खोली और मैं देख सकता था कि सिर्फ इसलिए कि मैंने एक बार इस फाइल को विंडोज मशीन पर एडिट किया था, यह डॉस फॉर्मेट में था। मैंने फ़ाइल को यूनिक्स प्रारूप में नीचे कमांड के साथ परिवर्तित किया है:

dos2unix filename # actually helped me and things were fine.

मुझे उम्मीद है कि जब भी हम प्लेटफ़ॉर्म पर फ़ाइलों को संपादित करते हैं तो हमें ध्यान रखना चाहिए, साथ ही हमें फ़ाइल स्वरूपों के लिए भी ध्यान रखना चाहिए।


इसने काम कर दिया! कई चीजों की कोशिश करने के बाद, यह समाधान था। धन्यवाद!
पेड्रो पेरेज

20

यह त्रुटि तब भी हो सकती है यदि स्क्रिप्ट चलाने की कोशिश की जा रही है और शेबग को गलत वर्तनी है। सुनिश्चित करें कि यह पढ़ रहा है #!/bin/sh, #!/bin/bashया जो भी आप उपयोग कर रहे हैं, उसकी व्याख्या करें।


4
मैं एक निष्पादन योग्य की बात कर रहा हूं, एक स्क्रिप्ट की नहीं। तो फिर, किसी और को यह टिप्पणी उपयोगी लग सकती है
वारस्पैस

1
सच है, लेकिन मैं इस सवाल पर इस सटीक समस्या के लिए उतरा, इसलिए जैसा कि आपने कहा, शायद कोई और भी होगा।
ज़ोल्टन

मेरे मामले में, मैं ./my/full/path/myscriptइसके बजाय भागने की कोशिश कर रहा था ./myscript
नूमेनन

8

पायथन स्क्रिप्ट को चलाने का प्रयास करते समय मेरे पास एक ही त्रुटि संदेश था - यह @ वारस्पैस का इच्छित उपयोग मामला नहीं था (अन्य टिप्पणियां देखें), लेकिन यह मेरी खोज में शीर्ष हिट में से एक था, इसलिए शायद किसी को यह उपयोगी लगेगा।

मेरे मामले में यह डॉस लाइन एंडिंग्स (के \r\nबजाय \n) था कि शेबंग लाइन ( #!/usr/bin/env python) पर यात्रा होगी। एक साधारण ने dos2unix myfile.pyइसे तय किया।


4

मुझे एक साधारण बैश स्क्रिप्ट के लिए वही त्रुटि मिली, जिसमें 32/64-बिट मुद्दे नहीं होंगे। यह संभवतः इसलिए है क्योंकि आप जिस स्क्रिप्ट को चलाने का प्रयास कर रहे हैं, उसमें त्रुटि है। यह ubuntu फोरम पोस्ट बताता है कि सामान्य स्क्रिप्ट फ़ाइलों के साथ आप सामने 'श' जोड़ सकते हैं और आपको इससे कुछ डिबग आउटपुट मिल सकता है। जैसे

$ sudo sh arm-mingw32ce-g++

और देखें कि क्या आपको कोई आउटपुट मिलता है।

मेरे मामले में वास्तविक समस्या यह थी कि जिस फ़ाइल को मैं निष्पादित करने की कोशिश कर रहा था वह लिनक्स के बजाय विंडोज प्रारूप में थी।


3

मुझे यह त्रुटि मिली, “No such file or directory”लेकिन यह मौजूद है क्योंकि मेरी फ़ाइल विंडोज़ में बनाई गई थी और मैंने इसे उबंटू पर चलाने की कोशिश की और फ़ाइल में अमान्य 15 \ r सम्‍मिलित है जहाँ कभी एक नई पंक्ति थी। मैंने अनचाहे सामान को काटते हुए एक नई फ़ाइल बनाई

sleep: invalid time interval ‘15\r’
Try 'sleep --help' for more information.
script.sh: 5: script.sh: /opt/ag/cont: not found
script.sh: 6: script.sh: /opt/ag/cont: not found
root@Ubuntu14:/home/abc12/Desktop# vi script.sh 
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \r  \n   w   g   e   t       h   t   t   p   :   /

0000400   :   4   1   2   0   /  \r  \n
0000410
root@Ubuntu14:/home/abc12/Desktop# tr -d \\015 < script.sh > script.sh.fixed
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh.fixed 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \n   w   g   e   t       h   t   t   p   :   /   /

0000400   /  \n
0000402
root@Ubuntu14:/home/abc12/Desktop# sh -x script.sh.fixed 

3

नीचे कमांड 16.4 Ubuntu पर काम किया

यह समस्या तब आती है जब आपकी .sh फ़ाइल यूनिक्स प्रोटोकॉल के अनुसार दूषित या स्वरूपित नहीं होती है।

dos2unix .sh फ़ाइल को यूनिक्स प्रारूप में रूपांतरित करता है!

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh 
sudo ./test.sh

1

मुझे अपनी फ़ाइल पर वही समस्या थी जो मैंने अपने मैक पर बनाई है। अगर मैं इसे शेल में चलाने की कोशिश करता हूं ।/filename में मुझे वह फ़ाइल मिली है जिसमें त्रुटि संदेश नहीं मिला था। मुझे लगता है कि फ़ाइल में कुछ गड़बड़ थी।

मैंने क्या किया:

सर्वर
कैट फ़ाइल नाम के लिए एक ssh सत्र खोलें
क्लिपबोर्ड
rm फ़ाइल नाम के लिए आउटपुट कॉपी कॉपी फ़ाइल
नाम
vi फ़ाइल नाम
मैं सम्मिलित करने के लिए मोड
क्लिपबोर्ड
ESC से सामग्री सम्मिलित करें अंत मोड डालने के लिए
: विक!

इसने मेरे लिए काम किया।


1

मैं सिर्फ इस मुद्दे में था mingw32 bash। मैंने नोड / एनपीएम से निष्पादित किया था Program Files (x86)\nodejsऔर फिर उन्हें disabledनिर्देशिका में स्थानांतरित कर दिया (अनिवार्य रूप से उन्हें पथ से हटा रहा था)। मेरे पास भी Program Files\nodejs(यानी 64 बिट संस्करण) पथ में था, लेकिन केवल x86 संस्करण के बाद। बैश शेल को पुनः आरंभ करने के बाद, npm का 64 बिट संस्करण पाया जा सकता है। nodeहर समय सही तरीके से काम किया ( node -vx86 संस्करण ले जाने पर उस परिवर्तन के साथ जाँच की गई)।

मुझे लगता है कि bash -rबैश को फिर से शुरू करने के बजाय काम किया होगा: https://unix.stackexchange.com/a/5610


1

जैसा कि दूसरों ने उल्लेख किया है, यह इसलिए है क्योंकि लोडर नहीं मिल सकता है, आपकी निष्पादन योग्य फ़ाइल नहीं। दुर्भाग्य से संदेश पर्याप्त स्पष्ट नहीं है।

आप लोडर को बदलकर इसे ठीक कर सकते हैं जो आपके निष्पादन योग्य उपयोग करता है, इस अन्य प्रश्न में मेरा संपूर्ण उत्तर देखें: एक ही होस्ट पर कई ग्लिबक लाइब्रेरी

मूल रूप से आपको यह पता लगाना होगा कि इसका उपयोग करने के लिए कौन सा लोडर है:

$ readelf -l arm-mingw32ce-g++ | grep interpreter
  [Requesting program interpreter: /lib/ld-linux.so.2]

फिर बराबर लोडर के लिए सही रास्ता ढूंढें, और लोडर का उपयोग उस पथ से करने के लिए करें जो वास्तव में है:

$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g++

आपको संभवतः शामिलों का मार्ग भी निर्धारित करने की आवश्यकता होगी, आपको पता चल जाएगा कि आप इसे चलाना चाहते हैं या नहीं। उस अन्य धागे में सभी विवरण देखें।


1

मैंने अपने उबंटू 18 के लिए अपना समाधान यहां पाया ।

sudo dpkg --add-architecture i386

फिर:

sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

0

मेरे पास यह मुद्दा था और इसका कारण नोटपैड ++ जैसे कुछ संपादकों में ईओएल था। आप इसे संपादन मेनू / ईओएल रूपांतरण में देख सकते हैं। यूनिक्स (एलएफ) का चयन किया जाना चाहिए। मुझे उम्मीद है कि यह उपयोगी होगा।


इस मामले में समस्या होने की संभावना नहीं है, क्योंकि कमांड एक फ़ाइल से निष्पादित नहीं होती है।
राल्फफ्राइडल

0

भविष्य के संदर्भ के लिए यहां जोड़ा गया है (उन उपयोगकर्ताओं के लिए जो एक ही मामले में गिर सकते हैं): यह त्रुटि विंडोज पर काम करते समय होती है (जो कि लिनक्स सिस्टम से अलग लाइन विभाजक के कारण अतिरिक्त वर्णों का परिचय देता है) और इस स्क्रिप्ट को चलाने की कोशिश कर रहा है (अतिरिक्त वर्णों के साथ डाला गया) लिनक्स में। त्रुटि संदेश भ्रामक है।

विंडोज में, लाइन विभाजक CRLF ( \ r \ n ) है जबकि लिनक्स में यह LF ( \ n ) है। इसे आमतौर पर टेक्स्ट एडिटर में चुना जा सकता है।

मेरे मामले में, विंडोज पर काम करने और निष्पादन के लिए यूनिक्स सर्वर पर अपलोड करने के कारण ऐसा हुआ।


1
मैं डॉकटर, लिनक्स का उपयोग करता हूं, लेकिन इसे विंडोज से बनाता हूं। मेरी स्क्रिप्ट scriptdir=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)तब शुरू हुई थी, cd $scriptdir || exit 1लेकिन \rमेरी विंडोज़-एडिटेड फ़ाइल में scriptdirवैल्यू से जुड़ी हुई थी । इसलिए यह संदेश : no such file or directoryसबसे अधिक भ्रमित करने वाला था, क्योंकि यह समाप्त हो गया कि यह किस बारे में शिकायत कर रहा था।
जेसी चिशोल्म
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.