"해당 파일 또는 디렉토리가 없습니다"이지만 존재합니다.


94

명령 줄에서 실행 파일을 실행하고 ./arm-mingw32ce-g++싶지만 오류 메시지가 나타납니다.

bash: ./arm-mingw32ce-g++: No such file or directory

Ubuntu Linux 10.10을 실행하고 있습니다. ls -l기울기

-rwxr-xr-x 1 root root  433308 2010-10-16 21:32 arm-mingw32ce-g++

sudo ( sudo ./arm-mingw32ce-g++)를 사용하면

sudo: unable to execute ./arm-mingw32ce-g++: No such file or directory

OS가 파일이있을 때 파일을 볼 수없는 이유를 모르겠습니다. 이견있는 사람?

답변:


82

이 오류는 ./arm-mingw32ce-g++존재하지 않음 (하지만 존재 함) 또는 존재하고 커널에서 인식하지만 동적 로더를 사용할 수없는 동적으로 연결된 실행 파일임을 의미 할 수 있습니다. 다음을 실행하여 필요한 동적 로더를 확인할 수 있습니다 ldd /arm-mingw32ce-g++. 표시된 not found것은 설치해야하는 동적 로더 또는 라이브러리입니다.

amd64 설치에서 32 비트 바이너리를 실행하려는 경우 :


16
훌륭합니다! 그건 그렇고, ldd의 출력은 not a dynamic executable(ia32-libs를 설치하기 전)이었습니다.
Warpspace 2010 년

3
ia32-libs-*우분투 16.04에서 더 이상 사용되지 않습니다, 설치 lib32ncurses5lib32z1대신.
GaloisPlusPlus

2
이것은 타사 바이너리를 실행하려고 할 때 Nix 또는 NixOS에서 흔히 발생하는 문제입니다. patchelf를 참조하십시오.
bbarker

31

Ubuntu에서 Selenium 소스를 빌드하려고 할 때이 오류가 발생했습니다. 올바른 shebang이있는 간단한 쉘 스크립트는 모든 전제 조건을 다룬 후에도 실행할 수 없었습니다.

file file-name # helped me in understanding that CRLF ending were present in the file.

Vim에서 파일을 열었을 때 Windows 시스템에서이 파일을 편집했기 때문에 DOS 형식이라는 것을 알 수있었습니다. 아래 명령을 사용하여 파일을 Unix 형식으로 변환했습니다.

dos2unix filename # actually helped me and things were fine.

플랫폼간에 파일을 편집 할 때마다 파일 형식도주의해야합니다.


작동했습니다! 여러 가지를 시도한 후 이것이 해결책이었습니다. 감사!
페드로 페레즈

10 년 늦었지만 신용이 필요한 곳에 신용. 제 경우에는 WSL에서 실행되는 배포판 내부에 설치된 Windows 디렉터리가있는 Windows에서 WSL2를 사용합니다. Windows 줄 끝-유닉스 파일.
Brenton Thomas

감사합니다, @BrentonThomas. 도움이되어 기쁩니다. 아직 Windows에서 WSL을 시도하지 않았습니다. 곧 사용하고 싶습니다.
h3xh4wk

20

이 오류는 스크립트를 실행하려고하는데 shebang의 철자가 틀린 경우에도 발생할 수 있습니다 . 확인이 읽고 #!/bin/sh, #!/bin/bash또는 당신이 사용하고있는 중 통역.


4
스크립트가 아닌 실행 파일을 참조하고 있습니다. 그럼 다시, 다른 사람이 댓글이 유용하게 사용할 수
Warpspace

1
사실입니다.하지만 저는이 정확한 문제에 대해이 질문에 착수했습니다. 여러분이 말했듯이 다른 사람도 그렇게 할 것입니다.
Zoltán 2014 년

제 경우에는 ./my/full/path/myscript대신 ./myscript.
물 자체

8

Python 스크립트를 실행하려고 할 때 동일한 오류 메시지가 표시되었습니다. 이것은 @Warpspace의 의도 된 사용 사례가 아니었지만 (다른 주석 참조) 내 검색에서 가장 많이 검색된 항목 중 하나이므로 누군가 유용하게 사용할 수 있습니다.

제 경우 에는 shebang 라인 ( )이 넘어가 는 것은 DOS 라인 엔딩 ( \r\n대신)이었습니다 . 간단하게 고쳤습니다.\n#!/usr/bin/env pythondos2unix myfile.py


4

32/64 비트 문제가없는 간단한 bash 스크립트에 대해 동일한 오류가 발생했습니다. 실행하려는 스크립트에 오류가 있기 때문일 수 있습니다. 이 우분투 포럼 게시물 은 일반 스크립트 파일에서 'sh'를 앞에 추가 할 수 있으며 일부 디버그 출력을 얻을 수 있음을 나타냅니다. 예 :

$ sudo sh arm-mingw32ce-g++

출력이 있는지 확인합니다.

제 경우 실제 문제는 실행하려는 파일이 Linux가 아닌 Windows 형식이라는 것입니다.


3

이 오류가 발생 “No such file or directory”했지만 내 파일이 Windows에서 생성되었고 Ubuntu에서 실행하려고했고 파일에 새 줄이있는 곳에 잘못된 15 \ r가 포함되어 있기 때문에 존재합니다. 원치 않는 항목을 잘라내는 새 파일을 방금 만들었습니다.

sleep: invalid time interval ‘15\r’
Try 'sleep --help' for more information.
script.sh: 5: script.sh: /opt/ag/cont: not found
script.sh: 6: script.sh: /opt/ag/cont: not found
root@Ubuntu14:/home/abc12/Desktop# vi script.sh 
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \r  \n   w   g   e   t       h   t   t   p   :   /

0000400   :   4   1   2   0   /  \r  \n
0000410
root@Ubuntu14:/home/abc12/Desktop# tr -d \\015 < script.sh > script.sh.fixed
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh.fixed 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \n   w   g   e   t       h   t   t   p   :   /   /

0000400   /  \n
0000402
root@Ubuntu14:/home/abc12/Desktop# sh -x script.sh.fixed 

3

아래 명령은 16.4 Ubuntu에서 작동했습니다.

이 문제는 .sh 파일이 손상되었거나 유닉스 프로토콜에 따라 형식이 지정되지 않은 경우 발생합니다.

dos2unix는 .sh 파일을 Unix 형식으로 변환합니다!

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh 
sudo ./test.sh

1

Mac에서 만든 파일과 동일한 문제가 발생했습니다. ./filename을 사용하여 쉘에서 실행하려고하면 파일을 찾을 수 없음 오류 메시지가 나타납니다. 파일에 문제가있는 것 같습니다.

내가 한 것:

ssh 세션을 서버에 엽니 다.
cat filename
출력을 클립 보드에 복사합니다.
rm filename
touch filename
vi filename
i (삽입 모드 용)
클립 보드의 내용을 붙여 넣습니다.
ESC에서 삽입 모드를 종료합니다
.

이것은 나를 위해 일했습니다.


1

방금 mingw32 bash. 나는 node / npm을 execuded Program Files (x86)\nodejs하고 disabled디렉토리 로 옮겼습니다 (본질적으로 경로에서 제거). 나는 또한 Program Files\nodejs(즉, 64 비트 버전) 경로에 있었지만 x86 버전 이후에만 있었다. bash 쉘을 다시 시작한 후 64 비트 버전의 npm을 찾을 수 있습니다. node항상 올바르게 작동했습니다.node -v x86 버전이 이동 될 때 변경된 것으로 ).

bash -rbash를 다시 시작하는 대신 작동했을 것이라고 생각합니다 . https://unix.stackexchange.com/a/5610


1

다른 사람들이 언급했듯이 이는 실행 파일이 아니라 로더를 찾을 수 없기 때문입니다. 불행히도 메시지는 충분히 명확하지 않습니다.

실행 파일이 사용하는 로더를 변경하여 문제를 해결할 수 있습니다.이 다른 질문에서 저의 철저한 답변을 참조하십시오 . 단일 호스트의 여러 glibc 라이브러리

기본적으로 사용하려는 로더를 찾아야합니다.

$ readelf -l arm-mingw32ce-g++ | grep interpreter
  [Requesting program interpreter: /lib/ld-linux.so.2]

그런 다음 동등한 로더의 올바른 경로를 찾고 실제 경로에서 로더를 사용하도록 실행 파일을 변경하십시오.

$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g++

포함 경로도 설정해야 할 것입니다. 실행을 시도한 후에 원하는지 여부를 알 수 있습니다. 다른 스레드에서 모든 세부 사항을보십시오.


1

여기에서 Ubuntu 18에 대한 솔루션을 찾았 습니다 .

sudo dpkg --add-architecture i386

그때:

sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

0

나는이 문제가 있었고 그 이유는 Notepad ++와 같은 일부 편집기에서 EOL이었습니다. 편집 메뉴 / EOL 변환에서 확인할 수 있습니다. Unix (LF)를 선택해야합니다. 도움이 되었으면합니다.


이 경우 명령이 파일에서 실행되지 않기 때문에 문제가되지 않습니다.
RalfFriedl

0

향후 참조를 위해 여기에 추가되었습니다 (같은 경우에 해당 할 수있는 사용자 용). 이 오류는 Windows에서 작업 할 때 (Linux 시스템과 다른 줄 구분 기호로 인해 추가 문자가 발생 함)이 스크립트를 실행하려고 할 때 발생합니다 (추가 문자가 삽입 됨). Linux에서. 오류 메시지는 잘못된 것입니다.

Windows에서 줄 구분 기호는 CRLF ( \ r \ n )이고 Linux에서는 LF ( \ n )입니다. 일반적으로 텍스트 편집기에서 선택할 수 있습니다.

제 경우에는 Windows에서 작업하고 실행을 위해 Unix 서버에 업로드했기 때문에 발생했습니다.


1
Docker, Linux를 사용하지만 Windows에서 빌드합니다. 내 스크립트가 시작 scriptdir=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)후, cd $scriptdir || exit 1하지만 \r내에서 창 편집 한 파일이 추가되었다 scriptdir값. 그래서 메시지 : no such file or directory가 가장 혼란 스러웠습니다. 불평하는 내용이 지워졌 기 때문입니다.
Jesse Chisholm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.