Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> Linux

คู่มือฉบับย่อเพื่อแก้ไข 'ไม่สามารถเรียกใช้ไฟล์ไบนารี:ข้อผิดพลาดรูปแบบ Exec' บน Ubuntu

แม้ว่าจะไม่ควรเกิดขึ้นเมื่อใช้ที่เก็บ apt-get อย่างเป็นทางการ แต่ถ้าคุณดาวน์โหลดซอฟต์แวร์จากอินเทอร์เน็ตและเรียกใช้งาน ก็มีโอกาสที่คุณจะเห็น bash:./nameOfProgram:ไม่สามารถเรียกใช้ไฟล์ไบนารี่ได้:ข้อผิดพลาดของรูปแบบ Exec . ข้อผิดพลาดนี้ ซึ่งมักจะตามมาด้วย bash:./nameOfProgram.sh:การอนุญาตถูกปฏิเสธ หรืออะไรทำนองนี้ บ่งบอกว่า Ubuntu ไม่สามารถเชื่อมต่อกับไบนารีที่คุณดาวน์โหลดได้อย่างถูกต้อง เนื่องจากแม้ว่าจะเห็นได้ชัดว่าเป็นไบนารี Linux ที่ถูกต้อง แต่ได้รับการออกแบบมาสำหรับชิปเซ็ตที่แตกต่างจากที่เคอร์เนลของคุณรองรับในปัจจุบัน

คนส่วนใหญ่ที่ใช้ Ubuntu ใช้โปรเซสเซอร์ 32 บิตหรือ 64 บิตซึ่งใช้สถาปัตยกรรมมาตรฐานที่ Intel เปิดตัว ไม่ว่าใครเป็นผู้ผลิตไมโครชิปก็ตาม สิ่งสำคัญคือต้องจำไว้ว่าโปรเซสเซอร์ 64 บิตสามารถทำงานในโหมด 32 บิต ดังนั้นหากคุณได้รับข้อผิดพลาดนี้แม้ว่าคุณจะมีโปรเซสเซอร์ 64 บิต ก็มีโอกาสที่คุณจะใช้งาน Ubuntu เวอร์ชัน 32 บิต เพียงใช้คำสั่งง่ายๆ เพียงไม่กี่คำสั่งเพื่อบอกว่าชิปของคุณทำงานเป็นอย่างไร

วิธีที่ 1:การใช้คำสั่งโค้ง

หากคุณไม่คุ้นเคยกับประเภทของไมโครโปรเซสเซอร์ที่คุณติดตั้งไว้ในเครื่อง คุณจะต้องใช้คำสั่ง arch จากบรรทัดคำสั่งก่อน คุณจะเห็นเอาต์พุตเพียงบรรทัดเดียวที่ส่งคืนให้คุณหลังจากรันคำสั่งนี้ ในหลายกรณี คุณจะเห็น i686 ซึ่งหมายความว่าคุณใช้โปรเซสเซอร์ 32 บิต จึงไม่สามารถเรียกใช้ไบนารี x86_64 ได้ หากคุณเห็น amd64 หรืออะไรที่คล้ายกันแทน แสดงว่าคุณใช้โปรเซสเซอร์ x86_64 และอย่างน้อยในทางทฤษฎีควรจะสามารถเรียกใช้ไบนารี 32 บิตและ 64 บิตส่วนใหญ่ได้ จริงๆ แล้ว Ubuntu Linux ต่างจาก Microsoft Windows ตรงที่มีเครื่องมือที่เหมาะสมเพื่อให้ผู้ใช้ชิปเซ็ต 644 บิตสามารถรันโปรแกรม Windows 16 บิตในระบบปฏิบัติการของตนในหลายกรณีได้เช่นกัน

ข้อกำหนดเหล่านี้ยังคงเป็นจริงแม้ว่าคุณจะไม่ได้ใช้ไมโครชิปรุ่นนั้นจริงๆ ก็ตาม ตัวอย่างเช่น i686 เป็นวิธีที่ Linux อ้างถึงโปรเซสเซอร์ 32 บิตจำนวนมาก แม้ว่าจะไม่ใช่ชิป Intel 80686 ก็ตาม แม้ว่าคุณจะใช้เทคโนโลยี Intel 64 บิต แต่ Arch อาจยังคงเรียกโปรเซสเซอร์ของคุณว่าชิป amd64 สิ่งนี้ไม่ได้บ่งบอกถึงข้อผิดพลาด และสามารถเพิกเฉยได้อย่างปลอดภัย คุณสามารถใช้ cat /proc/cpuinfo หรือมากกว่า /proc/cpuinfo เพื่อค้นหาประเภทของโปรเซสเซอร์ที่คุณใช้อยู่ เนื่องจากบรรทัดในไฟล์นี้ยาว คุณอาจต้องกด F11 ก่อนที่จะออกหากคุณใช้หน้าต่างเทอร์มินัลแบบกราฟิก ผู้ใช้คอนโซลเสมือน โดยเฉพาะผู้ที่ทำงานกับเซิร์ฟเวอร์ Ubuntu จะไม่ต้องกังวลมากนัก

คุณอาจเห็นเอาต์พุตประเภทอื่นๆ ซึ่งอาจจำกัดตัวเลือกของคุณเพิ่มเติมเมื่อต้องใช้ซอฟต์แวร์ Ubuntu รองรับสถาปัตยกรรม PowerPC เป็นเวลานานที่สุด ซึ่งพบได้ในเวิร์กสเตชันบางเครื่อง เช่นเดียวกับ Classic Macintosh และเครื่อง OS X Macintosh รุ่นเก่าหลายรุ่น จริงๆ แล้วคุณยังคงสามารถค้นหาที่เก็บ Ubuntu สำหรับสถาปัตยกรรมเหล่านี้ได้ แม้ว่าในปัจจุบันจะได้รับการสนับสนุนเพียงเล็กน้อยก็ตาม อย่างไรก็ตาม ในกรณีนี้ คุณจะไม่สามารถเรียกใช้ไบนารี Linux จำนวนมากที่คุณดาวน์โหลดจากอินเทอร์เน็ตนอกที่เก็บข้อมูลอย่างเป็นทางการได้ นั่นไม่ได้หมายความว่า Ubuntu จะไม่ทำงานบนเครื่องเหล่านี้ แม้ว่าคุณอาจต้องการดูการกระจาย Lubuntu ที่เบากว่าก็ตาม

วิธีที่ 2:การใช้คำสั่งไฟล์

คำสั่ง file ระบุว่ามีไฟล์ใดบ้าง และโดยปกติจะมีความแม่นยำมาก ลองระบุไฟล์ที่ต้องการโดยพิมพ์ไฟล์ nameOfProgram เพื่อดูว่าคุณได้รับ ELF 32 บิตหรือ ELF 64 บิตเป็นเอาต์พุตหรือไม่ หากระบบบอกคุณว่าเป็นไบนารี ELF 64 บิต และคุณได้รับ i686 เป็นเอาต์พุตจากคำสั่ง arch แสดงว่าไม่มีทางที่คุณจะสามารถเรียกใช้งานบนเครื่องของคุณได้อย่างสมเหตุสมผล หากคุณใช้ไมโครโปรเซสเซอร์ 64 บิตที่ใช้ Ubuntu แบบ 32 บิต คุณก็สามารถติดตั้งระบบปฏิบัติการใหม่ได้ในทางเทคนิค แม้ว่านี่จะเป็นขั้นตอนที่รุนแรงสักหน่อยในการรันโปรแกรมเดียวก็ตาม

นอกจากนี้ยังมีความเป็นไปได้ที่แท้จริง ไม่ว่าจะเล็กน้อยเพียงใดที่คุณอาจเจอไบนารี่แทนซึ่งเมื่อคุณพยายามเรียกใช้ มันจะพ่นอักขระขยะไปที่เทอร์มินัลแม้ว่าคุณจะทำการสแกนมัลแวร์ก็ตาม อักขระเหล่านี้มักจะอยู่ในรูปแบบของบล็อกรูปสี่เหลี่ยมขนมเปียกปูนหรือลูกบาศก์สี่เหลี่ยมที่มีค่าตัวเลขอยู่ นักวิทยาศาสตร์คอมพิวเตอร์บางคนเรียกเต้าหู้หลังนี้ และเป็นตัวแทนค่า Unicode ของอักขระที่แบบอักษรที่ติดตั้งอยู่ในปัจจุบันของคุณจะไม่สามารถแสดงได้ หากเทอร์มินัลแสดงผลเช่นนี้ คุณสามารถมั่นใจได้ว่านี่ไม่ใช่ข้อผิดพลาดของแบบอักษรหรือสิ่งที่เกี่ยวข้องกับมัลแวร์ แต่นี่เป็นเพียงเพราะว่า opcode ของไมโครโปรเซสเซอร์ที่คอมไพล์แล้วภายในไบนารี่นั้นแตกต่างจากระบบของคุณมากจนไม่รู้ว่าจะตีความโค้ดบางส่วนอย่างไร

วิธีที่ดีที่สุดในการแก้ไขปัญหานี้คือการติดตั้งแพ็คเกจที่เหมาะสมสำหรับสถาปัตยกรรมของคุณ หากคุณกำลังติดตั้งแพ็คเกจจากภายใน Ubuntu ระบบ apt-get หรือตัวจัดการ Synaptic แบบกราฟิกจะช่วยคุณได้โดยไม่มีปัญหาใด ๆ หากคุณกำลังดาวน์โหลดแพ็คเกจจากการกระจายอื่น คุณจะต้องค้นหาแพ็คเกจที่เหมาะสมสำหรับสถาปัตยกรรมของคุณ ยกตัวอย่างรายการแพ็คเกจ gvim ของ Arch Linux แม้ว่าแพ็คเกจเริ่มต้นจะมีสถาปัตยกรรม x86_64 แต่ก็มีหนึ่งแพ็คเกจสำหรับชิปเซ็ต i686 อันนี้จะทำงานบนเครื่อง 32 บิตที่ทำงานร่วมกับโครงสร้างอินเทอร์รัปต์ของ Intel แต่โปรดจำไว้ว่าคำว่า i686 และ 32 บิตนั้นไม่ได้รวมเข้าด้วยกันตลอดเวลา เนื่องจากชิปเซ็ตอื่นๆ ที่ Linux รองรับนั้นมีการใช้งานแบบ 32 บิตของตัวเองจริงๆ

ผู้ใช้ที่สำรวจฉาก GNU/Linux ทั้งหมดอาจพบกับไบนารีที่รวบรวมไว้สำหรับเทคโนโลยีที่แปลกใหม่ยิ่งกว่าเหล่านี้ Linux เป็นฉากโค้ดข้ามแพลตฟอร์มอย่างแท้จริง ดังนั้นคุณจะเห็น OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha และไบนารีมาตรฐานอื่น ๆ อีกมากมายที่รวบรวมไว้เพื่อใช้งาน เป็นไปได้มากว่าคุณจะไม่สามารถเรียกใช้สิ่งเหล่านี้ได้ แม้ว่า ARM จะเป็นแพลตฟอร์มแท็บเล็ตและสมาร์ทโฟนที่ได้รับความนิยมอย่างมากก็ตาม นอกจากนี้ ยังเป็นแพลตฟอร์มที่ Raspberry Pi ใช้เป็นหลัก ซึ่งหมายความว่าหากคุณใช้ Ubuntu บนอุปกรณ์เคลื่อนที่จริงๆ หรือใช้ Ubuntu MATE สำหรับ Raspberry Pi คุณจะต้องใช้ไบนารีเหล่านี้แทน Intel 32 บิตหรือ x86_64 ไบนารี

เกี่ยวกับผู้เขียน

คู่มือฉบับย่อเพื่อแก้ไข  ไม่สามารถเรียกใช้ไฟล์ไบนารี:ข้อผิดพลาดรูปแบบ Exec  บน Ubuntu

เควิน แอร์โรว์ส

Kevin Arrows เป็นผู้เชี่ยวชาญด้านเทคโนโลยีที่มีประสบการณ์สูงและมีความรู้และมีประสบการณ์ในอุตสาหกรรมมานานกว่าทศวรรษ เขาได้รับการรับรองจาก Microsoft Certified Technology Specialist (MCTS) และมีความมุ่งมั่นอย่างแรงกล้าที่จะติดตามข่าวสารเกี่ยวกับการพัฒนาเทคโนโลยีล่าสุด Kevin ได้เขียนหัวข้อที่เกี่ยวข้องกับเทคโนโลยีอย่างกว้างขวาง โดยนำเสนอความเชี่ยวชาญและความรู้ของเขาในด้านต่างๆ เช่น การพัฒนาซอฟต์แวร์ ความปลอดภัยทางไซเบอร์ และการประมวลผลแบบคลาวด์ การมีส่วนร่วมของเขาในด้านเทคโนโลยีได้รับการยอมรับและเคารพอย่างกว้างขวางจากเพื่อนร่วมงานของเขา และเขาได้รับการยกย่องอย่างสูงจากความสามารถของเขาในการอธิบายแนวคิดทางเทคนิคที่ซับซ้อนในลักษณะที่ชัดเจนและรัดกุม