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

Jak mogę rozwiązać błąd "nie mogę wykonać pliku binarnego"?

Kiedy loguję się za pomocą SSH, wszystko co widzę to…

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

Nic nie mogłem tutaj zrobić. Komendy takie jak halt, poweroff, reboot zwrócą command not found.

Jak mogę to naprawić? Używam Debiana Squeeze Linuxa

Odpowiedzi (7)

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

Zazwyczaj ten komunikat o błędzie oznacza, że Linux nie rozpoznaje pliku jako skrypt powłoki lub jako plik wykonywalny.

Zazwyczaj przyczyną jest uruchomienie pliku wykonywalnego na niewłaściwej architekturze - jeśli spróbujesz uruchomić x86 plików wykonywalnych na procesorze ARM, ten komunikat się pojawi.

Czy /usr/bin/id został nadpisany, być może?

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

Spróbuj uruchomić go używając ./executablefilename zamiast nazwy pliku wykonywalnego shutablefilename. To przecież nie jest skrypt powłoki.

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

Problemem jest uruchomienie programu binarnego dla innej architektury procesora. Możesz użyć objdump (z binutili), aby sprawdzić architekturę binarki. Możesz użyć uname do sprawdzenia architektury maszyny.

np. napotkałem ten błąd “nie mogę wykonać pliku binarnego” podczas instalacji FF.Communicator - wtyczki firefox dla chrome (mogę więc uruchomić strony wykorzystujące aplety java).

  • objdump pokazuje, że plik binarny jest 64-bitowy elf64-x86-64
  • uname pokazuje, że moja maszyna jest 32-bitowa i686

  • objdump na pracującym pliku binarnym na mojej maszynie pokazuje, że jest 32-bitowa elf32-i386

Za pomocą tych narzędzi można sprawdzić architektury maszyn i plików binarnych - nie tylko architektury intel, ale każdego procesora.

Dla użytkowników Mac OSX, możesz znaleźć informacje o architekturze konkretnego pliku za pomocą polecenia “file”:

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

Robię tu jakieś dzikie domysły, ale wygląda na to, że dzieje się tak:

  1. Zaloguj się przez SSH, uruchamiając bash, aby uruchomić swój ~/.profile lub ~/.bashrc, aby skonfigurować swoje środowisko dla Ciebie (jest to normalne).
  2. W pewnym momencie próbuje uruchomić /bin/id, aby uzyskać Twoją uid, co kończy się niepowodzeniem, powodując błąd w wyrażeniu całkowitym i kończąc działanie skryptu zanim będzie on mógł skonfigurować Twój $PATH.
  3. Ponieważ Twój $PATH nie jest ustawiony, bash jest w stanie wykonywać polecenia tylko z podaną pełną ścieżką.

Użyj export PATH=/bin:/usr/bin:/sbin:/usr/sbin do naprawienia błędu $PATH, aż będziesz mógł naprawić główną przyczynę niepowodzenia /bin/id.

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

Oznacza to, że próbujesz wykonać plik binarny za pomocą swojego skryptu bash, który nie jest przeznaczony do uruchomienia w taki sposób, w jaki próbujesz go uruchomić. Jest to już plik binarny i próbujesz go przetworzyć i uruchomić.

w bardzo prostym przykładzie, jeśli spróbujesz uruchomić komendę `w’ jak

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

podobnie możesz trafić tą samą metodą lub tak jak to wygląda z Twojego fragmentu kodu.

Podczas gdy, dla pozostałych komend, Al te komendy zatrzymują, zamykają, restartują itd. są komendami należącymi do roota i potrzebują super-użytkownika prilveges do uruchomienia i wykonania wymaganej operacji. normalny użytkownik nie może ich uruchomić innym wyjaśnieniem jest to, że te komendy są umieszczone w /sbin/ i /usr/sbin , które mogą nie znajdować się w twojej zmiennej $PATH (która jest używana do sprawdzania komend w twoim areszcie).

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

Plik binarny składa się z instrukcji maszynowych, które procesor może zrozumieć. Twój system operacyjny nie oznacza, że uruchomiony zostanie ten sam program wykonywalny. Przechodzenie tam i z powrotem pomiędzy zestawem instrukcji procesora zgodnym z tymi instrukcjami zwykle będzie działać dobrze, jeśli nie są one zgodne, procesor nie będzie w stanie zrozumieć instrukcji.

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

Uruchamiasz niewłaściwą wersję instalatora, na przykład 64-bitową maszynę i próbujesz zainstalować 32-bitową wersję instalatora.