“İkili dosyayı yürütemiyor” hatasını nasıl çözebilirim?


80

SSH kullanarak giriş yaptığımda, tek görebildiğim bu ...

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

Burada hiçbir şey yapamam. Gibi komutlar halt, poweroff, rebootdönecektir command not found.

Bunu nasıl düzeltebilirim? Debian Squeeze Linux kullanıyorum


7
O makineye ne yaptın?
slhck

1
Yaptığım en son şey logwatch yüklemek oldu. Başka hiçbir şey.
Süper kullanıcı

3
PATHKabuk, programları aradığı klasörlerin listesini içeren bir ortam değişkenidir. lsörneğin, genellikle ifade eder /bin/lsve kabuğunuz, onu PATHbuluncaya kadar birer birer listelenen klasörler arasından geçirerek bulur ya da hiçbirinde bulamazsa, pes eder. Sanırım daha iyi bir başlangıç ​​noktası olurdu, çıktısı echo $PATHnedir? (edit: exportkomut bash'ta bir ortam değişkenini tanımlamanın bir yoludur.)
Darth Android

1
Ah ... Sizi sistemi kapatmamanız konusunda uyarmıştım: P Konsol erişimine erişebiliyor musunuz (fiziksel monitör + klavye ekli)? Sistemi tek kullanıcılı modda önyüklemeyi deneyin (kurtarma modu olarak etiketlenmiş olabilir) ve bir kök kabuğuna ulaşıp ulaşamayacağınıza bakın.
Darth Android

2
@David yazdıktan sonra herhangi bir çıktı görmezsiniz export PATH=/bin:/user/bin:/sbin:/usr/sbin. Sessiz bir komut.
Ben Richards,

Yanıtlar:


83

Genellikle bu hata mesajı, Linux'un dosyayı kabuk betiği veya çalıştırılabilir bir dosya olarak tanımadığı anlamına gelir.

Genellikle neden yanlış mimaride çalıştırılabilir bir çalıştırmadır - bir ARM CPU üzerinde x86 çalıştırılabilir dosyaları çalıştırmayı denerseniz, bu mesaj ortaya çıkar.

/usr/bin/idmuhtemelen üzerine yazılır mı?


15
"x86 çalıştırılabilir dosyalarını bir ARM CPU'da çalıştırmayı denerseniz bu mesaj gelir." Buna tam olarak neden oldu. Girişleriniz için herkese teşekkürler!
superuser

İkili
dosyamın

Bunu nasıl çözebiliriz? Aynı sorunu anladığımdan eminim, ancak bu cevap bana gerçekten bir çözüm anlatmıyor: /
Newskooler

Çözmek için, bir ARM ikilisini kullanmanız gerekir, bir x86 ikili değil. Kaynak mevcutsa, bir ARM sistemi altında yeniden derleyebilir / yeniden oluşturabilirsiniz. Kaynak mevcut değilse, satıcıya bir ARM ikilisi olup olmadığını kontrol edin. Örneğin Sun'dan resmi JRE, hem x86 hem de “gömülü” veya ARM sürümlerine sahiptir. ARM sürümünü kullanmanız gerekir.
LawrenceC,

24

Sh yürütülebilirfilename kullanmak yerine ./executablefilename kullanarak çalıştırmayı deneyin. Sonuçta bir kabuk betiği değil.


Benim ahududu pi üzerinde kiwix-service çalıştırmaya çalışırken bu sorun vardı. Benim genel çözümüm, dosya izinlerini ayarlamaktı (varsayılan olarak herkes tarafından çalıştırılabilir olarak ayarlanmadı) ve sonra şu şekilde çalıştırdı./kiwix-serve
cchapman

9

Sorun, farklı bir işlemci mimarisi için ikili dosya kullanıyor. İkili yapıların mimarisini kontrol etmek için objdump (binutils den) kullanabilirsiniz. Bir makinenin mimarisini kontrol etmek için uname kullanabilirsiniz.

örn. FF.Communicator - chrome için bir firefox eklentisi kurarken "ikili dosyayı yürütemiyorum" gibi bir hatayla karşılaştım (böylece java uygulamalarını kullanan sayfaları çalıştırabilirim).

  • objdump ikili dosyanın 64 bit olduğunu gösterir elf64-x86-64
  • uname makinemin 32-bit i686 olduğunu gösteriyor

    $ ./FF.Communicator bash: ./FF.Communicator: $ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a. /FF.Communicator ./FF.Communicator ikili dosyasını çalıştıramıyor: ./FF.Communicator

  • objdump benim makinede çalışan bir ikili gösterileri 32-bit elf32-i386

    $ objdump -a / bin / ls / bin / ls: elf32-i386 dosya formatı

Bu araçları kullanarak makinelerin ve ikili dosyaların mimarilerini kontrol edebilirsiniz - yalnızca intel mimarilerini değil, tüm işlemcileri de kontrol edebilirsiniz.

Mac OSX kullanıcıları için, "file" komutunu kullanarak belirli bir dosyanın mimari bilgilerini bulabilirsiniz:

$ file filename_here

6

Burada bazı vahşi tahminler yapıyorum, ancak aşağıdaki gibi görünüyor:

  1. SSH üzerinden oturum bashaçarak sizi çalıştırmak ~/.profileveya ~/.bashrcortamınızı sizin için ayarlamak için tetiklersiniz (bu normaldir).
  2. Bir noktada /bin/id, kimliğinizi almak için başarısız olur, tamsayı ifadesi hatasına neden olur ve betiğinizi ayarlayabilmeden önce sonlandırır $PATH.
  3. Sizin $PATHayarlanmadığından bash yalnızca belirtilen tam yol ile komutları çalıştırabilir.

/ Bin / id export PATH=/bin:/usr/bin:/sbin:/usr/sbinişlevinin $PATHkök nedenini düzeltene kadar sorunu çözmek için kullanın .


0

İkili dosya, işlemcinin anlayabileceği makine talimatlarından oluşur. İşletim sisteminiz aynı çalıştırmanın çalışacağı anlamına gelmez. İşlemci talimatı seti ile uyumlu işlemciler arasında ileri ve geri gitme, uyumlu olmadıklarında genellikle iyi çalışacaktır, eğer CPU talimatları anlayamaz.


0

Bu, bash betiğinizi kullanarak çalıştığınız şekilde çalıştırılmayan bir ikili dosya yürütmeye çalıştığınız anlamına gelir. Zaten bir ikili dosya ve onu ayrıştırmak ve çalıştırmak için $ SHELL çalışıyoruz.

çok basit bir örnekte, `w 'komutunu çalıştırmayı denerseniz

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

Benzer şekilde, aynı yönteme veya kod snippet'inizden göründüğü gibi isabet ediyor olabilirsiniz.

Komutlarınız için kalanlar için, Al, bu durma, kapatma, yeniden başlatma, vb komutları root'un sahip olduğu komutlardır ve gerekli işlemi çalıştırmak ve gerçekleştirmek için süper kullanıcı prilvegeslerine ihtiyaç duyarlar. normal kullanıcılar bunları çalıştıramazlar; başka bir açıklama, bu komutların, $ PATH değişkeninizde bulunmayan / sbin / ve / usr / sbin dizinine yerleştirilmesidir (bu, gözaltınızdaki komutları doğrulamak için kullanılır).


-1

Yükleyicinin yanlış sürümünü kullanıyorsunuz, örneğin, 64bit makine ve yükleyicinin 32bit sürümünü yüklemeye çalışıyorsunuz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.