"명령을 찾을 수 없음"오류로 프로그램을 실행할 수 없습니다


15

방금 Windows에서 Ubuntu 11.10으로 전환했습니다.

텍스트 편집기를 사용하여 C로 다음 코드를 작성하고 문서에서 HelloWorld.c로 저장했습니다.

#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}

그리고 터미널을 시작하고 다음 명령을 입력하십시오.

cd Documents

gcc HelloWorld.c

a.out이라는 파일은 Google에서 검색 한 후 실행 파일입니다. 나는이 명령을 입력 :

a.out

그러나 나는 얻는다

a.out: command not found

어느 단계를 잘못 했습니까?


실행 가능하게 만드는 것을 잊지 마십시오sudo chmod 777 a.out
Nick Shvelidze

@NickShvelidze 컴파일러는 거의 항상 +x당신을 위해 설정 되었습니다; chmod컴파일러가 생성 한 실행 파일이 필요하지 않습니다 . gcc파일을 실행 가능하게하지 못하는 유일한 상황 은 파일 시스템에서 파일을 지원하거나 허용하지 않는 파일을 만드는 경우입니다 (이 경우 chmod즉시 실패). 또한 777피해야합니다. 모든 사용자가 읽기, 쓰기 및 실행 가능하게 할 필요는 없습니다. 이 경우 하였다 실행하는 데 필요한 chmod다음 chmod +x a.out충분할 것이다.
Eliah Kagan

답변:


33

현재 작업 디렉토리에서 실행 파일을 실행 중이므로 접두사 앞에을 붙여야합니다 ./. 따라서 프로그램의 경우 다음과 같이 실행하십시오 ./a.out.

설명

터미널은에서 실행 파일을 검색합니다 $PATH. 이것은 유닉스 인 환경 변수 그 시스템 바이너리 함유리스트 디렉토리 (예 ls, echogcc). 당신의 실행 호출하면 되지 A의 $PATH디렉토리 (예 a.out), 파일 시스템의 절대 경로를 표시해야합니다.

터미널 .에는 현재 작업 디렉토리와 동의어가 ./a.out있습니다. 당신은 똑같이 전화 할 수 있습니다 /home/yihang/Documents/a.out.


1
이에 대해 더 자세히 설명하기 위해 "./"는 "여기"명령으로 사용됩니다. 약간 중복되어 있지만 무언가를 실행할 것이라는 점에서 유용합니다.
Ruben Bakker

1
chmod u+x a.out시스템이 시스템을 실행하도록 허용 해야 할 수도 있습니다.
찰스 브리지

이제 "./"로 가져옵니다. 프로그램은 chmod없이 잘 실행됩니다. 감사.
yihangho

1
@yihang : 가장 좋아하는 답변의 왼쪽에있는 회색 / 녹색 원을 클릭하여이 질문에 답변 된 것으로 표시하십시오.
Rafał Cieślak

@Ruben Bakker : 실제로는 전혀 중복되지 않습니다. Windows와 달리 Linux는 기본적으로 현재 또는 기본 디렉토리를 찾는 것이 아닙니다. 따라서 경로에 없으면 디렉토리를 지정해야합니다.
Marty Fried

9

Linux에서 명령을 실행하면 PATH환경 변수에 나열된 모든 디렉토리를 검색 하고 명령을 찾지 못하면 표시된 메시지가 표시됩니다.

일반적으로 다음과 같습니다.

PATH=/usr/local/bin:/usr/bin:/bin

즉,에서 먼저 볼 것입니다 /usr/local/bin. 그것을 찾지 못하면 /usr/bin, 등을 찾습니다 .

실제로 이것은 DOS / Windows에서 매우 유사합니다.라는 변수 %PATH%가 있는데 정확히 같은 일을합니다.

차이는 Windows에서, 현재 디렉토리도 검색되어 있다는 점이다. 유닉스는 로컬 파일 (예 : 멀웨어)이 중요한 시스템 프로그램을 우연히 무시할 수 있기 때문에 이것을 잘못이라고 생각합니다.

그래도 원하는 경우 .경로 에 추가 하여 Linux를 동일한 방식으로 작동시킬 수 있습니다 .

PATH=.:$PATH

(즉 세트 말한다 PATH.:플러스의 기존 내용을 $PATH.)

다음과 같이 보입니다 (컴퓨터마다 다를 수 있습니다).

PATH=.:/usr/local/bin:/usr/bin:/bin

그렇게하지 않으려면 디렉토리를 명시 적으로 지정하여 각 프로그램을 실행하면됩니다.

./myprog

또는

/home/username/myprog

2
에 추가 .하는 PATH경우 항상 마지막에 추가하십시오.
muru

3

기본적으로 a.out은 실행 파일 이름을 지정하지 않았기 때문에 기본적으로 생성됩니다. 대신 이것을 시도하십시오 :

gcc HelloWorld.c -o HelloWorld

그렇게하면, "HelloWorld"앞에 점 슬래시 (./)를 붙여서 (Sunil이 제안한대로) 호출 할 수 있어야합니다.

./HelloWorld

다음은 a.out이 생성되는 이유에 대해 설명하는 기사에 대한 링크 입니다. Linux에서 C 프로그램 작성 및 컴파일 .

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