"명령을 찾을 수 없음"과 "해당 파일 또는 디렉터리 없음"의 차이점은 무엇입니까?

"명령을 찾을 수 없음"과 "해당 파일 또는 디렉터리 없음"의 차이점은 무엇입니까?

예를 들어:

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

차이점은 무엇입니까? 두 경우 모두 nodefoo잘못된 명령이지만 Unix가 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

답변1

bash명령의 위치를 ​​기억하고 저장하기 때문입니다 .해시시테이블.

언로드 후에도 node해시 테이블은 지워지지 않고 여전히 에 있는 것으로 간주 bash되어 검색을 건너뛰고 호출이 직접 사용됩니다 . 더 이상 존재하지 않으면 오류가 반환됩니다 . 즉 , 해당 파일이나 디렉터리가 없다는 의미이며 오류가 사용자에게 보고됩니다.node/usr/local/bin/nodePATH/usr/local/bin/nodeexecve()nodeexecve()ENOENTbash

에서는 bash해시 테이블의 항목을 삭제할 수 있습니다.

hash -d node

또는 전체 해시 테이블을 삭제합니다(모든 POSIX 쉘에서 작동):

hash -r

답변2

Ubuntu Linux 16.04에서 "해당 파일 또는 디렉터리가 없습니다"는 현재 작업 디렉터리를 전환해야 함을 의미하고 "명령을 찾을 수 없음"은 문제를 해결하기 위해 apt-get install xxxyyy_zzz를 사용해야 함을 의미합니다.

관련 정보