2012-06-12 21:26:53 +0000 2012-06-12 21:26:53 +0000
88
88

Hoe kan ik de fout "kan geen binair bestand uitvoeren" oplossen?

Als ik inlog met SSH, zie ik alleen dit…

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

Ik kon hier niets doen. Commando’s zoals halt, poweroff, reboot geven command not found terug.

Hoe kan ik dit verhelpen? Ik gebruik Debian Squeeze Linux

Antwoorden (7)

92
92
92
2012-06-13 03:07:20 +0000

Meestal betekent die foutmelding dat Linux het bestand niet herkent als een shell script of als een uitvoerbaar bestand.

Meestal is de oorzaak het draaien van een uitvoerbaar bestand op de verkeerde architectuur - als je probeert x86 uitvoerbare bestanden op een ARM CPU te draaien, komt deze melding naar voren.

Werd /usr/bin/id overschreven, mogelijk?

26
26
26
2012-06-13 01:27:14 +0000

Probeer het uit te voeren met ./executablefilename in plaats van sh executablefilename. Het is tenslotte geen shellscript.

9
9
9
2015-06-19 11:55:00 +0000

Het probleem is dat er een binary wordt uitgevoerd voor een andere processorarchitectuur. U kunt objdump (van binutils) gebruiken om de architectuur van binaire bestanden te controleren. Je kunt uname gebruiken om de architectuur van een machine te controleren.

bijvoorbeeld. Ik kwam deze fout tegen “kan geen binair bestand uitvoeren” bij de installatie van FF.Communicator - een firefox plugin voor chrome (zodat ik pagina’s kan draaien die gebruik maken van java applets).

  • objdump laat zien dat de binary 64-bit is elf64-x86-64
  • uname laat zien dat mijn machine 32-bit is i686

  • objdump op een werkende binary op mijn machine laat zien dat het 32-bit is elf32-i386

Met behulp van deze tools kunt u architecturen van machines en binaries controleren - niet alleen intel-architecturen maar elke processor.

Voor Mac OSX-gebruikers kun je de architectuurinfo van een specifiek bestand achterhalen met het “bestand”-commando:

$ file filename_here
6
6
6
2012-06-12 21:51:34 +0000

Ik maak hier wat wilde gissingen, maar het lijkt erop dat het volgende gebeurt:

  1. Je logt in via SSH, activeert bash om je ~/.profile te laten draaien of ~/.bashrc om je omgeving voor je in te stellen (dit is normaal).
  2. Op een gegeven moment probeert het /bin/id uit te voeren om je uid te krijgen, wat faalt, waardoor een gehele expressiefout ontstaat, en het script wordt beëindigd voordat het je $PATH kan instellen.
  3. Omdat je $PATH niet is ingesteld, is bash alleen in staat om commando’s uit te voeren met het volledige gespecificeerde pad.

Gebruik export PATH=/bin:/usr/bin:/sbin:/usr/sbin om het $PATH-probleem op te lossen totdat je de hoofdoorzaak van het falen van /bin/id kunt oplossen.

0
0
0
2018-10-24 14:01:42 +0000

Dit betekent dat u probeert een binair bestand uit te voeren met behulp van uw bash-script dat niet bedoeld is om te worden uitgevoerd zoals u het probeert te zijn. Het is al een binair bestand en je probeert je $SHELL te ontleden en uit te voeren.

in een heel simpel voorbeeld, als je probeert het `w’ commando uit te voeren zoals

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

op dezelfde manier zou je dezelfde methode kunnen raken of zoals het eruit ziet vanuit je code snippet.

Terwijl, voor de overige commando’s, al deze stop, shutdown, reboot etc commando’s de root commando’s zijn en super-user prilveges nodig hebben om de vereiste bewerking uit te voeren. normale gebruikers kunnen ze niet uitvoeren een andere verklaring is dat deze commando’s zijn geplaatst op /sbin/ en /usr/sbin , die misschien niet in uw $PATH variabele staan ( die wordt gebruikt om commando’s in uw bewaring te valideren)

0
0
0
2012-06-12 22:29:57 +0000

binair bestand bestaat uit machine-instructies die de processor kan begrijpen. Uw besturingssysteem betekent niet dat dezelfde executable zal draaien. heen en weer bewegen tussen de processor instructie set compatibel met zal meestal goed werken, als ze niet compatibel zijn CPU zal niet in staat zijn om instructies te begrijpen.

-1
-1
-1
2018-07-25 08:43:45 +0000

U draait de verkeerde versie van het installatieprogramma, bijvoorbeeld 64bit machine en probeert de 32bit versie van het installatieprogramma te installeren.