“명령을 찾을 수 없음”과“그러한 파일이나 디렉토리가 없습니다”의 차이점은 무엇입니까? or directory $

예를 들면 다음과 같습니다.

$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found

차이점이 뭐야? 두 경우 모두, nodefoo유효하지 않은 명령은, 그러나 찾을 수 없습니다 단지 유닉스처럼 보인다 node바이너리를? 예를 들어 프로그램을 제거 할 때 node이를 정리할 수있는 방법이 있습니까?

$ node
-bash: node: command not found

편집하다:

type명령 결과 :

$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found


답변

이제 그 때문에 bash명령 위치를 기억하는에 저장 해시 테이블.

을 제거한 후에도 node해시 테이블이 지워지지 않고 bash여전히을 ( node/usr/local/bin/node) 찾아서 PATH조회를 건너 뛰고 /usr/local/bin/node를 사용하여 직접 호출 한다고 생각 execve()합니다. 언제부터 node더 이상 존재하지 않습니다, execve()반환 ENOENT오류가 그런 파일이나 디렉토리를 의미합니다, bash당신에게 그 오류를보고했습니다.

에서가 bash, 당신은 해시 테이블에서 항목을 제거 할 수 있습니다 :

hash -d node

또는 전체 해시 테이블을 제거하십시오 ( 모든 POSIX 셸에서 작동 ).

hash -r

답변

Ubuntu Linux 16.04에서 “이러한 파일이나 디렉토리가 없음”은 현재 작업 디렉토리를 전환해야 함을 의미하고 “명령을 찾을 수 없음”은 apt-get install xxxyyy_zzz를 사용하여 문제를 해결해야 함을 의미합니다.