मैं "बाइनरी फ़ाइल निष्पादित नहीं कर सकता" त्रुटि को कैसे हल कर सकता हूं?


80

जब मैं SSH का उपयोग करके लॉगिन करता हूं, तो मैं केवल यह देख सकता हूं कि यह ...

-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected

मैं यहां कुछ नहीं कर सकता। जैसे आदेश halt, poweroff, rebootवापस आ जाएगी command not found

मैं इसे कैसे ठीक करूं? मैं डेबियन स्क्वीज़ लिनक्स का उपयोग कर रहा हूं


7
आपने उस मशीन का क्या किया?
slhck

1
बहुत ही आखिरी चीज जो मैंने किया था वह था लॉगवाच। और कुछ नहीं।
सुपरूसर

3
PATHएक पर्यावरण चर है जिसमें फ़ोल्डर्स की एक सूची होती है जो शेल कार्यक्रमों के लिए खोज करता है। lsउदाहरण के लिए, आमतौर पर संदर्भित होता है /bin/ls, और आपका शेल इसे PATHतब तक एक-एक करके सूचीबद्ध फ़ोल्डरों के माध्यम से ढूंढता है, जब तक कि वह इसे नहीं पाता है, या यदि यह उनमें से किसी में नहीं मिलता है, तो यह छोड़ देता है। मुझे लगता है कि एक बेहतर शुरुआती बिंदु होगा, का आउटपुट क्या है echo $PATH? (संपादित करें: exportकमांड बैश में एक पर्यावरण चर को परिभाषित करने का एक तरीका है।)
डार्थ एंड्रॉइड

1
आह ... मैंने आपको सिस्टम बंद नहीं करने की चेतावनी दी है: पी क्या आप इसे कंसोल एक्सेस प्राप्त कर सकते हैं (भौतिक मॉनिटर + कीबोर्ड संलग्न)? सिस्टम को एकल-उपयोगकर्ता मोड में बूट करने का प्रयास करें (पुनर्प्राप्ति मोड के रूप में लेबल किया जा सकता है) और देखें कि क्या आप एक रूट शेल प्राप्त कर सकते हैं।
डारथ Android

2
@David टाइप करने के बाद आपको कोई आउटपुट नहीं दिखेगा export PATH=/bin:/user/bin:/sbin:/usr/sbin। यह एक मूक आज्ञा है।
बेन रिचर्ड्स

जवाबों:


84

आमतौर पर उस त्रुटि संदेश का अर्थ है कि लिनक्स फ़ाइल को शेल स्क्रिप्ट या निष्पादन योग्य फ़ाइल के रूप में मान्यता नहीं देता है।

आमतौर पर कारण गलत आर्किटेक्चर पर एक निष्पादन योग्य चल रहा है - यदि आप एक एआरएम सीपीयू पर x86 निष्पादनयोग्य को चलाने का प्रयास करते हैं, तो यह संदेश आता है।

/usr/bin/idसंभवतः ओवरराइट किया गया था ?


15
"यदि आप एआरएम सीपीयू पर x86 निष्पादन योग्य चलाने की कोशिश करते हैं, तो यह संदेश आता है।" यह वास्तव में इसका कारण क्या था। आपके इनपुट के लिए सभी को धन्यवाद!
सुपरूसर

यह पता चला कि मेरी बाइनरी एक Windows exe फ़ाइल थी: P
forzagreen

हम इसे कैसे हल कर सकते हैं? मुझे यकीन है कि मुझे एक ही मुद्दा मिलेगा, लेकिन यह जवाब वास्तव में मुझे एक समाधान नहीं बताता है: /
न्यूस्कूलर

हल करने के लिए, आपको एआरएम बाइनरी का उपयोग करने की आवश्यकता है, न कि x86 बाइनरी। यदि स्रोत उपलब्ध है, तो आप एआरएम प्रणाली के तहत पुनर्निर्माण / पुनर्निर्माण कर सकते हैं। यदि स्रोत उपलब्ध नहीं है, तो एआरएम बाइनरी के लिए विक्रेता के साथ जांचें। उदाहरण के लिए, सन से आधिकारिक JRE में x86 और "एम्बेडेड" या ARM दोनों संस्करण हैं। आपको एआरएम संस्करण का उपयोग करना होगा।
लॉरेंस

24

इसे चलाने का प्रयास करें। निष्पादन योग्य शील नाम का उपयोग करने के बजाय .executablefilename। यह एक शेल स्क्रिप्ट नहीं है।


मुझे अपनी रसभरी पी पर कीवीक्स-सर्व करने की कोशिश करते समय यह समस्या थी। मेरा समग्र समाधान मुझे विश्वास है कि फ़ाइल अनुमतियों को समायोजित करना था (यह डिफ़ॉल्ट रूप से किसी के द्वारा निष्पादित करने के लिए सेट नहीं किया गया था) और फिर इसे चला दिया./kiwix-serve
cchapman

9

समस्या एक अलग प्रोसेसर वास्तुकला के लिए एक द्विआधारी चल रही है। आप बायनेरिज़ की वास्तुकला की जांच के लिए ओब्जेक्ट्स (बिनुटिल्स से) का उपयोग कर सकते हैं। मशीन के आर्किटेक्चर की जांच के लिए आप uname का उपयोग कर सकते हैं।

उदाहरण के लिए, मुझे FF.Communicator - क्रोम के लिए फ़ायरफ़ॉक्स प्लगइन स्थापित करते समय "द्विआधारी फ़ाइल को निष्पादित नहीं कर सकता" इस त्रुटि का सामना करना पड़ा (इसलिए मैं जावा ऐपलेट का उपयोग करने वाले पृष्ठों को चला सकता हूं)।

  • objdump से पता चलता है कि बाइनरी 64-बिट एल्फ64-x86-64 है
  • uname से पता चलता है कि मेरी मशीन 32-बिट i686 है

    $ ./FF.Communicator बैश:। ./FF.Communicator

  • मेरी मशीन पर एक कार्यशील बाइनरी पर objdump दिखाता है कि यह 32-बिट elf32-i386 है

    $ objdump -a / bin / ls / bin / ls: फ़ाइल स्वरूप elf32-i386

इन उपकरणों का उपयोग करके आप मशीनों और बायनेरिज़ के आर्किटेक्चर की जांच कर सकते हैं - न केवल इंटेल आर्किटेक्चर बल्कि किसी भी प्रोसेसर।

मैक OSX उपयोगकर्ताओं के लिए, आप "फ़ाइल" कमांड का उपयोग करके किसी विशिष्ट फ़ाइल की वास्तुकला जानकारी प्राप्त कर सकते हैं:

$ file filename_here

6

मैं यहाँ कुछ जंगली अनुमान लगा रहा हूँ, लेकिन ऐसा लग रहा है कि निम्नलिखित हो रहा है:

  1. आप SSH पर लॉग इन करते हैं, bashअपने चलाने के लिए ~/.profileया ~/.bashrcआपके लिए अपना वातावरण सेट करने के लिए ट्रिगर करते हैं (यह सामान्य है)।
  2. कुछ बिंदु पर यह /bin/idआपके यूआईडी को प्राप्त करने के लिए निष्पादित करने की कोशिश करता है , जो विफल हो जाता है, जिससे पूर्णांक अभिव्यक्ति त्रुटि होती है, और स्क्रिप्ट को समाप्त करने से पहले यह आपके सेट कर सकता है $PATH
  3. क्योंकि आपका $PATHसेट नहीं है, बैश केवल निर्दिष्ट पूर्ण पथ के साथ कमांड चलाने में सक्षम है।

जब तक आप / बिन / आईडी विफल होने के मूल कारण को ठीक नहीं कर सकते export PATH=/bin:/usr/bin:/sbin:/usr/sbin, $PATHसमस्या को ठीक करने के लिए उपयोग करें ।


0

बाइनरी फ़ाइल में मशीन निर्देश होते हैं जो प्रोसेसर समझ सकता है। आपके ऑपरेटिंग सिस्टम का मतलब यह नहीं है कि एक ही निष्पादन योग्य चलेगा। आगे और पीछे प्रोसेसर निर्देश सेट के साथ संगत करें, आमतौर पर अच्छी तरह से काम करेंगे, अगर वे संगत नहीं हैं तो सीपीयू निर्देशों को समझने में सक्षम नहीं होगा।


0

इसका मतलब है कि आप अपनी बैश स्क्रिप्ट का उपयोग करके एक द्विआधारी फ़ाइल को निष्पादित करने की कोशिश कर रहे हैं, जिसे चलाने का इरादा नहीं है जैसा कि आप इसे होने की कोशिश कर रहे हैं। यह पहले से ही एक द्विआधारी फ़ाइल है और आप अपने $ SHELL को पार्स करने और चलाने के लिए प्रयास कर रहे हैं।

एक बहुत ही सरल उदाहरण में, यदि आप `w 'कमांड को चलाने की कोशिश करते हैं

$ bash w
/usr/bin/w: /usr/bin/w: cannot execute binary file

इसी तरह आप एक ही विधि मार सकते हैं या जैसा कि यह आपके कोड स्निपेट से दिखता है।

हालांकि, आपके आदेशों के लिए शेष के लिए, अल इन हाल्ट, शटडाउन, रिबूट आदि कमांड रूट स्वामित्व वाली कमांड हैं और आवश्यक ऑपरेशन चलाने और प्रदर्शन करने के लिए सुपर-यूजर प्रिल्वेज की आवश्यकता होती है। सामान्य उपयोगकर्ता उन्हें एक और स्पष्टीकरण नहीं दे सकते हैं कि ये आदेश / sbin / और / usr / sbin पर रखे गए हैं, जो आपके $ PATH चर में नहीं हो सकता है (जिसका उपयोग आपकी हिरासत में आदेशों को मान्य करने के लिए किया जाता है)


-1

आप इंस्टॉलर का गलत संस्करण चला रहे हैं, उदाहरण के लिए, 64 बिट मशीन और इंस्टॉलर के 32 बिट संस्करण को स्थापित करने का प्रयास कर रहे हैं।

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