كيفية إصلاح 'لا يمكن تنفيذ الملف الثنائي: خطأ تنسيق Exec' على Ubuntu



جرب أداة القضاء على المشاكل

على الرغم من أنه لا ينبغي أن يحدث ذلك عند استخدام مستودعات apt-get الرسمية ، إذا قمت بتنزيل برنامج من الإنترنت وشغّلته ، فهناك احتمال أن ترى bash: ./nameOfProgram: لا يمكن تنفيذ الملف الثنائي: خطأ في تنسيق Exec . هذا الخطأ الذي عادة ما يتبعه bash: ./nameOfProgram.sh: تم رفض الإذن أو شيء من هذا القبيل ، يشير إلى أن Ubuntu لم يكن قادرًا على التفاعل بشكل صحيح مع البرنامج الثنائي الذي قمت بتنزيله. هذا لأنه على الرغم من أنه من الواضح أنه ثنائي صالح لنظام Linux ، إلا أنه مصمم لمجموعة شرائح مختلفة عن التي يدعمها kernel حاليًا.



يعتمد معظم الأشخاص الذين يستخدمون Ubuntu على معالجات 32 بت أو 64 بت تستند إلى بنية قياسية أصدرتها Intel ، بغض النظر عمن صنع رقائقهم الدقيقة بالفعل. من المهم أن تتذكر أنه يمكن تشغيل معالجات 64 بت في وضع 32 بت ، لذلك إذا ظهر لك هذا الخطأ على الرغم من أن لديك معالج 64 بت ، فمن المحتمل أنك تقوم بتشغيل إصدار 32 بت من Ubuntu. كل ما يتطلبه الأمر هو بعض الأوامر البسيطة لمعرفة ما تعمل به الشريحة الخاصة بك.



الطريقة الأولى: استخدام أمر القوس

إذا لم تكن على دراية بنوع المعالج الدقيق الذي قمت بتثبيته على جهازك ، فحينئذٍ ستحتاج أولاً إلى استخدام الأمر arch من سطر الأوامر. سترى فقط سطرًا واحدًا من الإخراج عاد إليك بعد تشغيل هذا الأمر. في كثير من الحالات ، سترى i686 ، مما يعني أنك تستخدم معالج 32 بت وبالتالي لا يمكنك تشغيل ثنائيات x86_64. إذا كنت ترى amd64 بدلاً من ذلك أو شيء مشابه ، فأنت تستخدم معالج x86_64 ، ويجب على الأقل من الناحية النظرية أن تكون قادرًا على تشغيل معظم الثنائيات 32 بت و 64 بت. بخلاف Microsoft Windows ، يحتوي Ubuntu Linux فعليًا على الأدوات المناسبة للسماح لمستخدمي مجموعات شرائح 644 بت بتشغيل برامج Windows 16 بت في نظام التشغيل الخاص بهم في العديد من الحالات أيضًا.



تظل هذه المصطلحات صحيحة حتى لو لم تكن تستخدم هذا النموذج المعين من الرقائق الدقيقة. على سبيل المثال ، i686 هي الطريقة التي يشير بها Linux إلى العديد من معالجات 32 بت حتى لو لم تكن في الواقع شرائح Intel 80686. حتى إذا كنت تستخدم تقنية Intel 64 بت ، فقد تستمر شركة Arch في استدعاء معالجك بشريحة amd64. هذا لا يشير إلى وجود خطأ ويمكن تجاهله بأمان. يمكنك استخدام القط / proc / cpuinfo او اكثر / proc / cpuinfo لمعرفة نوع المعالج الدقيق الذي تستخدمه. نظرًا لأن الأسطر في هذا الملف طويلة ، فقد ترغب في دفع F11 قبل إصداره إذا كنت تستخدم نافذة طرفية رسومية. لن يضطر مستخدمو وحدة التحكم الافتراضية ، خاصة أولئك الذين يعملون مع خادم Ubuntu ، إلى القلق كثيرًا.

قد ترى بعض أنواع الإخراج الأخرى ، والتي قد تقيد خياراتك بشكل أكبر عندما يتعلق الأمر بتشغيل البرنامج. دعمت Ubuntu هندسة PowerPC لأطول وقت ، والتي توجد في بعض محطات العمل بالإضافة إلى العديد من أجهزة Macintosh الكلاسيكية وأجهزة OS X Macintosh الأقدم. لا يزال بإمكانك في الواقع العثور على مستودعات Ubuntu لهذه البنى ، على الرغم من أنها تتلقى القليل من الدعم اليوم. ومع ذلك ، فمن المرجح أنك لن تكون قادرًا على تشغيل العديد من ثنائيات Linux التي تقوم بتنزيلها من الإنترنت خارج المستودعات الرسمية في هذه الحالة. هذا لا يعني أن Ubuntu لا يعمل على هذه الأجهزة ، على الرغم من أنك قد ترغب في إلقاء نظرة على توزيع Lubuntu الأخف.

الطريقة 2: استخدام ملف الأمر

يحدد الأمر file ما تحتويه الملفات المختلفة ، وعادة ما يكون دقيقًا للغاية. حاول تحديد الملف المعني بكتابة الملف اسم البرنامج لمعرفة ما إذا كنت تحصل على ELF 32 بت أو ELF 64 بت كإخراج. إذا أخبرك أنه ثنائي ELF 64 بت وأنك تلقيت i686 كإخراج من الأمر arch ، فلا توجد طريقة يمكنك من خلالها تشغيله بشكل معقول على جهازك. إذا كنت تستخدم معالجًا دقيقًا 64 بت يعمل بنظام Ubuntu 32 بت ، فيمكنك من الناحية الفنية إعادة تثبيت نظام التشغيل ، على الرغم من أن هذه خطوة بالغة الصعوبة لتشغيل برنامج واحد.



هناك أيضًا احتمال حقيقي ، مهما كان طفيفًا ، أنك قد تصادف بدلاً من ذلك ثنائيًا عندما تحاول تشغيله ينثر أحرفًا غير مهمة إلى المحطة حتى إذا قمت بإجراء مسح للبرامج الضارة عليها. عادة ما تأخذ هذه الأحرف شكل كتل على شكل معينات ، أو بدلاً من ذلك مكعبات مستطيلة تحتوي على قيم عددية فيها. يسمي بعض علماء الكمبيوتر هذا الأخير tofu ، ويمثلون قيم Unicode للأحرف التي لن تتمكن الخطوط المثبتة حاليًا من عرضها. إذا كان الجهاز يعرضها على هذا النحو ، فيمكنك أن تطمئن إلى أن هذا ليس خطأ في الخط ولا يتعلق بأي شيء يتعلق بالبرامج الضارة. بدلاً من ذلك ، هذا ببساطة لأن كود التشغيل المجمع داخل البرنامج الثنائي غريب جدًا على نظامك لدرجة أنه لا يعرف كيفية تفسير بعض التعليمات البرمجية.

أفضل طريقة لإصلاح ذلك هي تثبيت الحزمة المناسبة لبنيتك. إذا كنت تقوم بتثبيت حزم من داخل Ubuntu ، فإن نظام apt-get أو مدير Synaptic الرسومي يغطيك دون أي مشاكل. إذا كنت بصدد تنزيل حزم من توزيع آخر ، فستحتاج إلى العثور على الحزم المناسبة لبنيتك. خذ ، على سبيل المثال ، قائمة Arch Linux لحزمة gvim. في حين أن الحزمة الافتراضية تتميز بهندسة x86_64 ، فهناك أيضًا واحدة لمجموعة شرائح i686. سيعمل هذا الجهاز على أجهزة 32 بت تعمل مع بنية المقاطعة Intel ، لكن تذكر أن المصطلحين i686 و 32 بت لا يتم تضمينهما بشكل متبادل طوال الوقت نظرًا لأن الشرائح الأخرى التي يدعمها Linux تتميز بالفعل بتطبيقات 32 بت الخاصة بها.

قد يصادف المستخدمون الذين يستكشفون مشهد جنو / لينكس بأكمله ثنائيات مجمعة لتقنيات أكثر غرابة من هذه. يعد Linux مشهدًا برمجيًا عبر الأنظمة الأساسية ، لذا سترى OpenRISC و MIPS و SPARC و M32R و MN103 و ARM و ARC و Alpha والعديد من ثنائيات المعايير الأخرى يتم تجميعها للعمل معها. على الأرجح ، لن تتمكن من تشغيل أي من هذه ، على الرغم من أن ARM هو نظام أساسي للأجهزة اللوحية والهواتف الذكية شائع للغاية. إنه أيضًا النظام الأساسي الذي يعتمد عليه Raspberry Pi ، مما يعني أنك إذا كنت تقوم بالفعل بتشغيل Ubuntu على جهاز محمول أو توزيع Ubuntu MATE لـ Raspberry Pi ، فستحتاج بالفعل إلى هذه الثنائيات بدلاً من Intel 32 بت أو x86_64 الثنائيات.

4 دقائق للقراءة