Bagaimana saya bisa menyelesaikan kesalahan "tidak dapat mengeksekusi file biner"?

80

Ketika saya masuk menggunakan SSH, yang bisa saya lihat adalah ini ...

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

Saya tidak bisa melakukan apa pun di sini. Perintah seperti halt, poweroff, rebootakan kembali command not found.

Bagaimana saya bisa memperbaikinya? Saya menggunakan Debian Squeeze Linux

superuser
sumber
7
Apa yang kamu lakukan pada mesin itu?
slhck
1
hal terakhir yang saya lakukan adalah menginstal logwatch. Tidak ada lagi.
superuser
3
PATHadalah variabel lingkungan yang berisi daftar folder tempat shell mencari program. lsmisalnya, biasanya merujuk ke /bin/ls, dan shell Anda menemukannya dengan menelusuri folder yang tercantum dalam PATHsatu per satu hingga menemukannya, atau jika tidak menemukannya di salah satu dari mereka, itu menyerah. Saya kira titik awal yang lebih baik adalah, apa outputnya echo $PATH? (edit: exportperintah adalah cara untuk mendefinisikan variabel lingkungan dalam bash.)
Darth Android
1
Ah ... Saya memperingatkan Anda untuk tidak mematikan sistem: P Dapatkah Anda mendapatkan akses konsol ke sana (monitor fisik + keyboard terpasang)? Coba boot sistem dalam mode pengguna tunggal (mungkin dilabeli sebagai mode pemulihan) dan lihat apakah Anda dapat membuka shell root.
Darth Android
2
@ David, Anda tidak akan melihat output apa pun setelah mengetik export PATH=/bin:/user/bin:/sbin:/usr/sbin. Itu perintah diam.
Ben Richards

Jawaban:

84

Biasanya pesan kesalahan itu berarti Linux tidak mengenali file sebagai skrip shell atau sebagai file yang dapat dieksekusi.

Biasanya penyebabnya adalah menjalankan executable pada arsitektur yang salah - jika Anda mencoba menjalankan executable x86 pada CPU ARM, pesan ini muncul.

Apakah /usr/bin/idditimpa, mungkin?

LawrenceC
sumber
15
"Jika Anda mencoba menjalankan executable x86 pada CPU ARM, pesan ini muncul." Persis itulah yang menyebabkannya. Terima kasih semuanya atas masukan Anda!
super
Ternyata biner saya adalah file exe Windows: P
forzagreen
Bagaimana kita bisa menyelesaikan ini? Saya yakin saya mendapatkan masalah yang sama, tetapi jawaban ini tidak benar-benar memberi saya solusi: /
Newskooler
Untuk mengatasinya, Anda perlu menggunakan binari ARM dan bukan biner x86. Jika sumber tersedia, Anda dapat mengkompilasi ulang / membangun kembali di bawah sistem ARM. Jika sumber tidak tersedia, tanyakan kepada vendor untuk binari ARM. JRE resmi dari Sun, misalnya, memiliki versi x86 dan "embedded" atau ARM. Anda harus menggunakan versi ARM.
LawrenceC
24

Cobalah untuk menjalankannya menggunakan ./executablefilename alih-alih menggunakan sh executablefilename. Lagipula itu bukan skrip shell.

RidDeBakTiYar
sumber
Saya memiliki masalah ini ketika mencoba menjalankan kiwix-serve pada raspberry pi saya. Solusi keseluruhan saya, saya percaya adalah untuk menyesuaikan izin file (tidak diatur untuk dieksekusi oleh siapa pun secara default) dan kemudian menjalankannya sebagai./kiwix-serve
cchapman
9

Masalahnya adalah menjalankan biner untuk arsitektur prosesor yang berbeda. Anda dapat menggunakan objdump (dari binutils) untuk memeriksa arsitektur binari. Anda dapat menggunakan uname untuk memeriksa arsitektur sebuah mesin.

misalnya saya menemukan kesalahan ini "tidak dapat mengeksekusi file biner" ketika menginstal FF.Communicator - plugin firefox untuk chrome (jadi saya dapat menjalankan halaman yang menggunakan applet java).

  • objdump menunjukkan binernya adalah 64-bit elf64-x86-64
  • uname menunjukkan mesin saya adalah i686 32-bit

    $ ./FF.Communicator bash: ./FF.Communicator: tidak dapat mengeksekusi file biner $ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a ./FF.Communicator ./FF.Communicator: format file elf64-x86-64 ./FF.Comunicator

  • objdump pada biner yang berfungsi pada mesin saya menunjukkan itu adalah 32-bit elf32-i386

    $ objdump -a / bin / ls / bin / ls: format file elf32-i386

Dengan menggunakan alat-alat ini Anda dapat memeriksa arsitektur mesin dan binari - tidak hanya arsitektur intel tetapi prosesor apa pun.

Untuk pengguna Mac OSX, Anda dapat mengetahui info arsitektur dari file tertentu menggunakan perintah "file":

$ file filename_here
gaoithe
sumber
6

Saya membuat beberapa tebakan liar di sini, tetapi sepertinya hal berikut terjadi:

  1. Anda masuk melalui SSH, memicu bashuntuk menjalankan Anda ~/.profileatau ~/.bashrcmengatur lingkungan Anda untuk Anda (ini normal).
  2. Pada titik tertentu ia mencoba mengeksekusi /bin/iduntuk mendapatkan uid Anda, yang gagal, menyebabkan kesalahan ekspresi integer, dan menghentikan skrip sebelum dapat mengatur Anda $PATH.
  3. Karena Anda $PATHtidak disetel, bash hanya dapat menjalankan perintah dengan path lengkap yang ditentukan.

Gunakan export PATH=/bin:/usr/bin:/sbin:/usr/sbinuntuk memperbaiki $PATHmasalah sampai Anda dapat memperbaiki penyebab root / bin / id gagal.

Darth Android
sumber
0

file biner terdiri dari instruksi mesin yang dapat dimengerti prosesor. Sistem operasi Anda tidak berarti executable yang sama akan berjalan. bergerak bolak-balik antara set instruksi prosesor yang kompatibel dengan biasanya akan bekerja dengan baik, jika mereka tidak kompatibel CPU tidak akan dapat memahami instruksi.

acoh Facha
sumber
0

Ini berarti bahwa Anda mencoba untuk mengeksekusi file biner menggunakan skrip bash Anda yang tidak dimaksudkan untuk dijalankan seperti yang Anda coba. Ini sudah merupakan file biner dan Anda mencoba $ SHELL Anda untuk menguraikan dan menjalankannya.

dalam contoh yang sangat sederhana, jika Anda mencoba menjalankan perintah `w 'like

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

sama halnya Anda mungkin memukul metode yang sama atau seperti yang terlihat dari cuplikan kode Anda.

Sementara, untuk sisanya untuk perintah Anda, Al ini menghentikan, mematikan, me-reboot perintah dll adalah perintah yang dimiliki root dan perlu prilveges super-pengguna untuk menjalankan dan melakukan operasi yang diperlukan. pengguna normal tidak dapat menjalankannya. Penjelasan lain adalah bahwa perintah ini ditempatkan di / sbin / dan / usr / sbin, yang mungkin tidak ada dalam variabel $ PATH Anda (yang digunakan untuk memvalidasi perintah dalam tahanan Anda)

Nasir Mahmood
sumber
-1

Anda menjalankan versi penginstal yang salah, misalnya, mesin 64bit dan mencoba menginstal versi penginstal 32bit.

kwai
sumber