“이진 파일을 실행할 수 없습니다”라는 오류를 어떻게 해결할 수 있습니까?


80

SSH를 사용하여 로그인하면 이것 만 볼 수 있습니다 ...

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

나는 여기서 아무것도 할 수 없었다. 같은 명령 halt, poweroff, reboot반환합니다 command not found.

이 문제를 어떻게 해결할 수 있습니까? 데비안 스퀴즈 리눅스를 사용하고 있습니다


7
그 기계에 무엇을 했습니까?
slhck 2016 년

1
내가 마지막으로 한 일은 logwatch를 설치하는 것이 었습니다. 다른 건 없어
수퍼 유저

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. 조용한 명령입니다.
벤 리차드

답변:


84

일반적으로이 오류 메시지는 Linux가 파일을 쉘 스크립트 또는 실행 파일로 인식하지 않음을 의미합니다.

일반적으로 원인은 잘못된 아키텍처에서 실행 파일을 실행하는 것입니다. ARM CPU에서 x86 실행 파일을 실행하려고하면이 메시지가 나타납니다.

/usr/bin/id덮어 쓰게 되었습니까 ?


15
"ARM CPU에서 x86 실행 파일을 실행하려고하면이 메시지가 나타납니다." 그것이 정확히 원인이었습니다. 의견을 보내 주셔서 감사합니다!
수퍼 유저

내 바이너리는 Windows exe 파일이었다 : P
forzagreen

이 문제를 어떻게 해결할 수 있습니까? 난 내가 같은 문제를 얻을 수 있는지,하지만이 답변이 정말 나에게 솔루션을 말하지 않습니다 /
Newskooler

해결하려면 x86 이진이 아닌 ARM 이진을 사용해야합니다. 소스가 사용 가능한 경우 ARM 시스템에서 재 컴파일 / 다시 빌드 할 수 있습니다. 소스를 사용할 수 없으면 공급 업체에 ARM 바이너리를 문의하십시오. 예를 들어, Sun의 공식 JRE에는 x86 및 "embedded"또는 ARM 버전이 모두 있습니다. ARM 버전을 사용해야합니다.
LawrenceC

24

sh executablefilename 대신 ./ executablefilename을 사용하여 실행하십시오. 결국 쉘 스크립트가 아닙니다.


내 라즈베리 파이에서 kiwix-serve를 실행하려고 할 때이 문제가 발생했습니다. 내 전반적인 솔루션은 파일 권한을 조정하고 (기본적으로 누군가가 실행 파일로 설정하지 않은) 다음과 같이 실행하는 것입니다../kiwix-serve
cchapman

9

문제는 다른 프로세서 아키텍처에 대한 바이너리를 실행하는 것입니다. binutils의 objdump를 사용하여 이진 아키텍처를 확인할 수 있습니다. uname을 사용하여 시스템의 아키텍처를 확인할 수 있습니다.

예를 들어 크롬 용 firefox 플러그인 인 FF.Communicator를 설치할 때 "이진 파일을 실행할 수 없습니다"라는 오류가 발생했습니다 (따라서 Java 애플릿을 사용하는 페이지를 실행할 수 있음).

  • objdump 는 바이너리가 64 비트 elf64-x86-64임을 보여줍니다.
  • uname 내 컴퓨터가 32 비트 i686 임을 보여줍니다

    $ ./FF.Communicator bash : ./FF.Communicator : 바이너리 파일을 실행할 수 없음 $ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a ./FF.Communicator ./FF.Communicator : 파일 형식 elf64-x86-64 ./FF. 커뮤니케이터

  • 내 컴퓨터에서 작동하는 바이너리의 objdump 가 32 비트 elf32-i386임을 보여줍니다.

    $ objdump -a / bin / ls / bin / ls : 파일 형식 elf32-i386

이러한 도구를 사용하면 인텔 아키텍처뿐만 아니라 모든 프로세서의 컴퓨터 및 이진 아키텍처를 확인할 수 있습니다.

Mac OSX 사용자의 경우 "file"명령을 사용하여 특정 파일의 아키텍처 정보를 찾을 수 있습니다.

$ file filename_here

6

나는 여기서 약간의 추측을하고 있지만 다음과 같은 일이 일어난 것처럼 보입니다.

  1. SSH를 통해 로그인 bash하여 사용자를 실행 ~/.profile하거나 ~/.bashrc환경을 설정 하도록 트리거 합니다 (정상).
  2. 어떤 시점에서 /bin/iduid를 가져 오기 위해 실행하려고하는데 , 실패하여 정수 표현식 오류가 발생하고 스크립트를 종료하기 전에 스크립트를 종료합니다 $PATH.
  3. $PATH설정되어 있지 않기 때문에 bash는 지정된 전체 경로로만 명령을 실행할 수 있습니다.

/ bin / id 실패의 근본 원인을 해결할 수있을 때까지 문제 export PATH=/bin:/usr/bin:/sbin:/usr/sbin를 해결하는 데 사용하십시오 $PATH.


0

이진 파일은 프로세서가 이해할 수있는 기계 명령어로 구성됩니다. 운영 체제가 동일한 실행 파일이 실행되는 것을 의미하지는 않습니다. 호환되는 프로세서 명령 세트 사이를 앞뒤로 이동하면 호환되지 않는 CPU가 명령을 이해할 수없는 경우 일반적으로 잘 작동합니다.


0

이것은 당신이 bash 스크립트를 사용하여 바이너리 파일을 실행하려고 시도하고 있음을 의미합니다. 이미 바이너리 파일이며 파싱하고 실행하기 위해 $ SHELL을 시도하고 있습니다.

아주 간단한 예에서 다음과 같이`w '명령을 실행하려고하면

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

마찬가지로 동일한 방법을 사용하거나 코드 스 니펫에서 볼 수 있습니다.

나머지 명령의 경우 Al이 중지, 종료, 재부팅 등 명령은 루트 소유 명령이며 필요한 작업을 실행하고 수행하려면 수퍼 유저 권한이 필요합니다. 일반 사용자는 실행할 수 없습니다. 또 다른 설명은이 명령이 / sbin / 및 / usr / sbin에 있으며 $ PATH 변수에 없을 수도 있다는 것입니다 (이 명령은 상거래에서 명령의 유효성을 검사하는 데 사용됨)


-1

64 비트 시스템과 같이 잘못된 버전의 설치 프로그램을 실행 중이고 32 비트 버전의 설치 프로그램을 설치하려고합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.