ฉันจะแก้ไขข้อผิดพลาด“ ไม่สามารถเรียกใช้ไฟล์ไบนารี่” ได้อย่างไร?


80

เมื่อฉันเข้าสู่ระบบโดยใช้ SSH สิ่งที่ฉันเห็นคือ ...

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

ฉันทำอะไรที่นี่ไม่ได้ คำสั่งเช่นhalt, poweroff, จะกลับมาrebootcommand not found

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร ฉันใช้ Debian Squeeze Linux


7
คุณทำอะไรกับเครื่องนั้น
slhck

1
สิ่งสุดท้ายที่ฉันทำคือติดตั้ง logwatch ไม่มีอะไรอีกแล้ว.
superuser

3
PATHเป็นตัวแปรสภาพแวดล้อมซึ่งมีรายการโฟลเดอร์ที่เชลล์ค้นหาโปรแกรม lsตัวอย่างเช่นโดยปกติจะอ้างถึง/bin/lsและเชลล์ของคุณค้นหาโดยไปยังโฟลเดอร์ที่แสดงรายการPATHหนึ่งต่อหนึ่งจนกว่าจะพบมันหรือหากไม่พบมันในเชลล์ใด ๆ มันก็ยอมแพ้ ฉันคิดว่าจุดเริ่มต้นที่ดีกว่าคือผลลัพธ์ของecho $PATHอะไร (แก้ไข: exportคำสั่งเป็นวิธีการกำหนดตัวแปรสภาพแวดล้อมใน bash.)
Darth Android

1
อ่า ... ฉันเตือนคุณว่าอย่าปิดระบบ: P คุณสามารถใช้คอนโซลเพื่อเข้าถึงมันได้หรือไม่ ลองบูทระบบในโหมดผู้ใช้คนเดียว (อาจถูกระบุว่าเป็นโหมดการกู้คืน) และดูว่าคุณสามารถไปที่รูทเชลล์ได้หรือไม่
Darth Android

2
@ David คุณจะไม่เห็นผลใด ๆ export PATH=/bin:/user/bin:/sbin:/usr/sbinหลังจากพิมพ์ มันเป็นคำสั่งที่เงียบ
Ben Richards

คำตอบ:


84

โดยปกติแล้วข้อความแสดงข้อผิดพลาดหมายความว่า Linux ไม่รู้จักไฟล์เป็นเชลล์สคริปต์หรือเป็นไฟล์ปฏิบัติการ

โดยทั่วไปแล้วสาเหตุที่ทำให้เกิดการเรียกใช้งานบนสถาปัตยกรรมที่ไม่ถูกต้อง - ถ้าคุณพยายามเรียกใช้โปรแกรมปฏิบัติการ x86 บนซีพียู ARM ข้อความนี้จะปรากฏขึ้น

ไม่/usr/bin/idได้เขียนทับอาจเป็นไปได้?


15
"ถ้าคุณพยายามเรียกใช้โปรแกรมปฏิบัติการ x86 บนซีพียู ARM ข้อความนี้จะปรากฏขึ้น" นั่นคือสิ่งที่เกิดขึ้นจริง ขอบคุณทุกคนสำหรับอินพุตของคุณ!
superuser

มันกลับกลายเป็นไบนารีของฉันเป็นไฟล์ exe Windows: P
forzagreen

เราจะแก้ปัญหานี้อย่างไร ฉันแน่ใจว่าฉันได้รับปัญหาเดียวกัน แต่คำตอบนี้ไม่ได้บอกวิธีแก้ปัญหาให้ฉันจริงๆ: /
Newskooler

ในการแก้ไขคุณต้องใช้ไบนารี ARM และไม่ใช่ไบนารี x86 หากแหล่งข้อมูลพร้อมใช้งานคุณสามารถคอมไพล์ / สร้างใหม่ภายใต้ระบบ ARM หากแหล่งที่มาไม่พร้อมใช้งานให้ตรวจสอบกับผู้จำหน่ายเพื่อหาไบนารี ARM ตัวอย่างเช่น JRE อย่างเป็นทางการจาก Sun มีทั้งรุ่น x86 และ "embedded" หรือ ARM คุณต้องใช้เวอร์ชัน ARM
LawrenceC

24

ลองเรียกใช้โดยใช้. /executablefilename แทนที่จะใช้ sh executablefilename ไม่ใช่เชลล์สคริปต์ทั้งหมด


ฉันมีปัญหานี้เมื่อพยายามเรียกใช้ kiwix-เสิร์ฟบนราสเบอร์รี่ pi ของฉัน โซลูชันโดยรวมของฉันฉันเชื่อว่าการปรับเปลี่ยนการอนุญาตไฟล์ (ไม่ได้ตั้งค่าให้ทุกคนสามารถใช้งานได้ตามค่าเริ่มต้น) จากนั้นจึงเรียกใช้เป็น./kiwix-serve
cchapman

9

ปัญหากำลังใช้งานไบนารีสำหรับสถาปัตยกรรมโปรเซสเซอร์ที่แตกต่างกัน คุณสามารถใช้ objdump (จาก binutils) เพื่อตรวจสอบสถาปัตยกรรมของไบนารี คุณสามารถใช้ uname เพื่อตรวจสอบสถาปัตยกรรมของเครื่อง

เช่นฉันพบข้อผิดพลาดนี้ "ไม่สามารถเรียกใช้ไฟล์ไบนารี" เมื่อติดตั้ง FF.Communicator - ปลั๊กอิน firefox สำหรับโครเมี่ยม (ดังนั้นฉันสามารถเรียกใช้หน้าเว็บที่ใช้แอปเพล็ต java)

  • objdumpแสดงไบนารีเป็น 64- บิตelf64-x86-64
  • unameแสดงว่าเครื่องของฉันคือ 32- บิตi686

    $ ./FF.Communicator ทุบตี: ./FF.Communicator: ไม่สามารถเรียกใช้ไฟล์ไบนารี $ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a ./FF.Communicator: รูปแบบไฟล์ elf64-x86-64 ./FF.Communicator

  • objdumpบนไบนารี่ที่ใช้งานได้บนเครื่องของฉันแสดงว่าเป็น 32- บิตelf32-i386

    $ objdump -a / bin / ls / bin / ls: รูปแบบไฟล์ elf32-i386

การใช้เครื่องมือเหล่านี้คุณสามารถตรวจสอบสถาปัตยกรรมของเครื่องจักรและไบนารี - ไม่ใช่แค่สถาปัตยกรรมของ Intel แต่เป็นตัวประมวลผลใด ๆ

สำหรับผู้ใช้ Mac OSX คุณสามารถค้นหาข้อมูลสถาปัตยกรรมของไฟล์เฉพาะโดยใช้คำสั่ง "file":

$ file filename_here

6

ฉันคาดเดาได้ยากที่นี่ แต่ดูเหมือนว่าสิ่งต่อไปนี้จะเกิดขึ้น:

  1. คุณลงชื่อเข้าใช้ผ่าน SSH bashเพื่อเปิดใช้งาน~/.profileหรือ~/.bashrcเพื่อตั้งค่าสภาพแวดล้อมให้กับคุณ (ซึ่งเป็นเรื่องปกติ)
  2. ในบางจุดมันพยายามที่จะดำเนินการเพื่อให้ได้โพสต์ของคุณซึ่งล้มเหลวก่อให้เกิดข้อผิดพลาดในการแสดงออกของจำนวนเต็มและยุติสคริปต์ก่อนที่มันจะสามารถตั้งค่าของคุณ/bin/id$PATH
  3. เนื่องจากคุณ$PATHไม่ได้ตั้งค่า bash จะสามารถเรียกใช้คำสั่งที่ระบุพา ธ แบบเต็มเท่านั้น

ใช้export PATH=/bin:/usr/bin:/sbin:/usr/sbinเพื่อแก้ไข$PATHปัญหาจนกว่าคุณจะสามารถแก้ไขสาเหตุของการ / bin / id ล้มเหลว


0

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


0

ซึ่งหมายความว่าคุณพยายามรันไฟล์ไบนารี่โดยใช้ bash script ของคุณซึ่งไม่ได้ตั้งใจให้รันในขณะที่คุณพยายามให้เป็น เป็นไฟล์ไบนารีอยู่แล้วและคุณลอง $ SHELL เพื่อแยกวิเคราะห์และเรียกใช้

ในตัวอย่างง่ายๆถ้าคุณพยายามเรียกใช้คำสั่ง `w 'เช่น

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

ในทำนองเดียวกันคุณอาจกดปุ่มวิธีเดียวกันหรือดูจากข้อมูลโค้ดของคุณ

ในขณะที่ส่วนที่เหลือสำหรับคำสั่งของคุณอัลเหล่านี้หยุด, ปิด, รีบูตคำสั่ง ฯลฯ เป็นคำสั่งที่เป็นเจ้าของรากและต้องการ prilveges super- ผู้ใช้เพื่อเรียกใช้และดำเนินการตามที่ต้องการ ผู้ใช้ปกติไม่สามารถเรียกใช้คำอธิบายอื่นได้คือคำสั่งเหล่านี้ถูกวางไว้ที่ / sbin / และ / usr / sbin ซึ่งอาจไม่อยู่ในตัวแปร $ PATH ของคุณ (ซึ่งใช้ในการตรวจสอบคำสั่งในการดูแลของคุณ)


-1

คุณกำลังเรียกใช้โปรแกรมติดตั้งรุ่นที่ไม่ถูกต้องเช่นเครื่อง 64 บิตและพยายามติดตั้งตัวติดตั้งรุ่น 32 บิต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.