लिनक्स कैसे तय करता है कि (गैर-पाठ) बाइनरी को चलाने के लिए किन सुविधाओं का उपयोग किया जाए?


23

मैं समझता हूं कि स्क्रिप्टिंग भाषाओं के लिए क्या दुभाषिया का उपयोग करने के लिए लिनक्स हेबैंग लाइन का उपयोग करता है, लेकिन यह बायनेरिज़ के लिए कैसे काम करता है?

मेरा मतलब है कि मैं लिनक्स बायनेरिज़ चला सकता हूं, और वाइन और मोनो , विंडोज देशी और .NET बायनेरी दोनों स्थापित कर सकता हूं । और उन सभी के लिए इसे ./binary-nameचलाने के लिए सिर्फ (यदि पेट में नहीं) है।

लिनक्स कैसे निर्धारित करता है कि एक दिया गया बाइनरी लिनक्स देशी बाइनरी के रूप में, विंडोज देशी बाइनरी के रूप में ( वाइन सुविधाओं का उपयोग करके ) या विंडोज .NET बाइनरी के रूप में ( मोनो सुविधाओं का उपयोग करके) चलाया जाना चाहिए ?

जवाबों:


29

एक शब्द में: binfmt_misc । यह एक लिनक्स-विशिष्ट, गैर-पोर्टेबल, सुविधा है।

ऐसे कुछ प्रारूप हैं जो कर्नेल द्वारा अंतर्निहित तर्क के साथ पहचाने जाते हैं। अर्थात्, ये ईएलएफ प्रारूप (सामान्य बायनेरिज़ के लिए) और शेबंग सम्मेलन (लिपियों के लिए) हैं। ( उत्तर के निम्नलिखित भाग के लिए zwol के लिए धन्यवाद )। इसके अलावा, लिनक्स गूढ़ या अप्रचलित या अनुकूलता निर्मित स्वरूपों की एक जोड़ी को पहचानता है। आप शायद उनका सामना नहीं करेंगे। वे हैं a.out, "em86", "फ्लैट", और "elf_fdpic"।

बाकी सब कुछ binfmt_misc सिस्टम के माध्यम से पंजीकृत होना चाहिए। यह प्रणाली आपको कर्नेल के साथ एक मैजिक नंबर और संबंधित दुभाषिया के आधार पर एक साधारण पैटर्न की जांच करने की अनुमति देती है।


6
यद्यपि ओपी ने स्पष्ट रूप से लिनक्स के लिए कहा, यह ध्यान देने योग्य हो सकता है कि कई अन्य समाधानों के विपरीत जो लिनक्स और अन्य यूनिक्स जैसी प्रणालियों पर काम करते हैं, यह एक पूरी तरह से लिनक्स-विशिष्ट है।
क्यूबसप्लि 42

6
इसे संकलित नहीं किया जा सकता है, लेकिन लिनक्स स्रोत ट्री में अभी भी a.out"em86", "फ्लैट" और "elf_fdpic" स्वरूपों के साथ-साथ सामान्य ELF के लिए आंतरिक समर्थन शामिल है । एमरी को छोड़कर उन सभी को मूल द्विआधारी निष्पादन योग्य प्रारूप दिखाई देते हैं; मेरे लिए यह पता लगाने के लिए पर्याप्त जानकारी नहीं है कि कोई "फ्लैट" या "एल्फ_फडीपिक" का उपयोग कब करेगा। em86 एक विशेष x86 एमुलेटर को चलाने के लिए एक पूर्व-बाइनमट_मिस मैकेनिज्म प्रतीत होता है, यह शायद अब भी केवल पिछड़े संगतता के लिए है।
zwol

2
डेबियन लिनक्स पर (मैंने रेडहैट और अन्य की जांच नहीं की) सभी मौजूदा द्विपदीय प्रविष्टियों को प्रदर्शित करने के लिए कमांड हैupdate-binfmts --display
golem
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.