/home/amnesia/myfile: 명령을 찾을 수 없음 - 64비트 실행 파일, 64비트 커널

/home/amnesia/myfile: 명령을 찾을 수 없음 - 64비트 실행 파일, 64비트 커널

터미널에서 실행 파일을 실행하려고 하는데(Tails 라이브 OS를 사용하고 있습니다) 오류 메시지가 계속 나타납니다. 권한을 설정했습니다. 내가 쓴 명령은 다음과 같습니다.

sudo ./home/amnesia/myfile

"명령을 찾을 수 없습니다"라는 메시지가 나타납니까?

sudo를 사용하거나 사용하지 않고 실행해 보았습니다.

$ sudo /home/amnesia/myfile
sudo: unable to execute /home/amnesia/myfile: No such file or directory
$ /home/amnesia/myfile
bash: /home/amnesia/myfile: No such file or directory

파일에 대한 정보(스크립트가 아닌 바이너리임):

$ ls -l /home/amnesia/myfile
-rwxrwxrwx 1 amnesia amnesia 15327 Sep  3  2013 /home/amnesia/myfile
$ file /home/amnesia/myfile
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared lies), for GNU/Linux 2.6.9, not stripped

내 시스템에 대한 정보:

$ uname -a
Linux amnesia 3.16-3-amd64 #1 SMP Debian 3.16.5-1 (2014-10-10) x86_64 GNU/Linux
$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xd3280633faaabf56a14a26693d2f810a32222e51, stripped

답변1

$ /home/amnesia/myfile
bash: /home/amnesia/myfile: No such file or directory
$ file /home/amnesia/myfile
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared lies), for GNU/Linux 2.6.9, not stripped

존재 myfile하지만 실행하면 "해당 파일이나 디렉터리가 없습니다"라는 메시지가 나타납니다. 이는 다음과 같은 경우에 발생합니다.

  • 이 파일은 로더에 따라 다릅니다. 동적으로 링크된 실행 파일이며 동적 링크 라이브러리를 로드하려면 로더가 필요합니다. (로더는 shebang 라인에 지정된 인터프리터일 수도 있지만 bash는 이를 감지하고 다른 오류 메시지를 표시합니다.)
  • 로더 파일이 존재하지 않습니다.

"해당 파일이나 디렉터리가 없습니다"라는 메시지는 실제로 로더와 관련이 있지만 쉘은 로더가 관련되어 있다는 것을 알지 못하므로 원본 파일의 이름을 보고합니다. 이에 대해 더 자세히 설명합니다.Optware가 설치된 바이너리에 "해당 파일이나 디렉터리가 없습니다"라고 표시됩니다..

왜 이 프로그램을 실행할 수 없나요? 64비트 실행 파일에 대한 동적 로더가 없기 때문입니다.

$ uname -a
Linux amnesia 3.16-3-amd64 #1 SMP Debian 3.16.5-1 (2014-10-10) x86_64 GNU/Linux
$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xd3280633faaabf56a14a26693d2f810a32222e51, stripped

시스템에는 64비트 커널이 있지만 시스템의 나머지 부분은 32비트입니다. Linux는 이 구성을 지원합니다(64비트 커널은 32비트 프로그램뿐만 아니라 64비트 프로그램도 실행할 수 있지만 32비트 커널은 32비트 프로그램만 실행할 수 있음). 커널은 프로그램을 잘 로드합니다. 정적으로 링크된 amd64 실행 파일을 실행할 수 있습니다. 그러나 64비트 로더( )가 없거나 /lib64/ld-linux-x86-64.so.264비트 라이브러리가 없을 수도 있습니다. 따라서 동적으로 연결된 amd64 실행 파일을 실행할 수 없습니다.

64비트 커널과 32비트 사용자 영역을 실행하는 이유는 무엇입니까?

  • 약 3GB 이상의 물리적 메모리가 사용됩니다. (이것이 유일한 방법은 아닙니다. 또 다른 가능성은 PAE를 지원하는 32비트 커널을 실행하는 것입니다.)
  • 예를 들어 라이브 OS에서 부팅한 다음 설치된 64비트 시스템으로 루트를 지정하여 64비트 바이너리를 실행할 수 있습니다.
  • 배포 유지 관리를 줄이려면 최신 하드웨어에 단일 코어를 제공하고 64비트로 만듭니다.
  • 64비트 가상 머신을 실행합니다(일부 VM 엔진에서는 64비트 VM을 실행하려면 64비트 커널이 필요함).

저는 Tails가 64비트 시스템을 제공하지 않는다고 생각합니다. 32비트 버전의 실행 파일을 가져와야 합니다. 그렇지 않은 경우 다른 배포판을 사용하십시오(가상 머신에서 가능).

답변2

아직 수행하지 않은 경우:chmod

chmod u+x /home/amnesia/myfile

그리고 처음부터 "."를 제거하세요. 파일과 동일한 디렉토리에 있을 때 필요합니다.

sudo /home/amnesia/myfile

데모는 다음과 같습니다. 데모

답변3

다음 사항을 확인하는 것이 좋습니다.

  • 달리기 file /home/amnesia/myfile. 이를 통해 실행하려는 파일 유형이 결정됩니다.
  • 스크립트 실행아니요 sudo보다 의미 있는 정보를 얻으세요.
  • 쉘 스크립트와 같은 것이라면, set -x무슨 일이 일어나고 있는지 파악하는 데 도움이 될 것입니다. sh -x다음을 사용하여 스크립트를 실행할 수도 있습니다 .
  • 어쩌면 Shebang 스레드가 깨졌을 수도 있습니다(예: 잘못된 해석기). 붙여넣기 의 출력 head -5 /home/amnesia/myfile;
  • 스크립트에 "DOS" 개행 문자가 있을 수 있습니다.만약에파일은 DOS 줄 바꿈이 있는 스크립트로 간단 dos2unix myfile하거나 perl -pi -e 's/\r\n/\n/g' input.file트릭을 수행합니다.

답변4

나는 같은 문제를 가지고있다. Debian 7.8에서 수정 사항은 다음 lsb패키지를 설치하는 것입니다.

apt-get install lsb

CentOS에 비슷한 패키지를 설치해야 했습니다(어떤 패키지인지 기억이 나지 않습니다).

관련 정보