IT/shell

Node.js 설치했는데 node 명령어가 작동하지 않을 때 (bash: /usr/bin/node: No such file)

심량 2025. 6. 23. 18:41

apt로 설치한 Node.js를 제거하고 스크립트로 재설치한 후 node 명령어가 작동하지 않는 문제. 리눅스 셸의 hash 캐시가 원인입니다. 해결법까지 완벽 정리.

Node.js 설치했는데 `node` 명령어가 작동하지 않을 때

— `bash: /usr/bin/node: No such file or directory` 문제 해결법


📌 요약 (TL;DR)


Node.js를 apt로 설치했다가 제거하고,  
스크립트 방식으로 다시 설치했더니  
`node -v` 명령어가 작동하지 않는다?

bash: /usr/bin/node: No such file or directory

 

which node는 멀쩡히 /usr/local/bin/node로 나오는데?
그 원인은 리눅스 셸의 hash 캐시 때문이다.
아래 해결 방법을 따라가면 바로 해결된다.


🧭 문제 발생 흐름 (재현 가능 시나리오)

  1. coc.nvim 등 Vim 플러그인을 설치하려고 했더니 Node.js v16 이상이 필요하다는 메시지를 봄
  2. sudo apt install nodejs → 설치된 버전은 v10.x, 턱없이 낮음
  3. sudo apt remove nodejs → 제거
  4. 공식 설치 스크립트 실행:
    1. curl -sL https://install-node.vercel.app/lts | sudo bash
  5. 설치 후 which node 확인 → /usr/local/bin/node ✅
  6. 하지만 node -v 실행 시 오류:
    1. bash: /usr/bin/node: No such file or directory

🧠 원인: bash의 해시 테이블 캐시

bash는 자주 사용하는 명령어의 경로를 hash 테이블에 캐시해두고,
다음 실행 때는 PATH를 다시 검색하지 않고 기억해둔 경로로 바로 실행한다.

과거에 /usr/bin/node를 실행한 적이 있다면,
설치가 바뀌어도 bash는 계속 그쪽을 찾는다.


✅ 해결 방법: hash 초기화

hash -d node

 

또는 전체 캐시를 비우려면:

hash -r

 

이제 다시 실행하면 된다:

node -v
# v18.x.x  ✅ 정상 출력

 

❗ 설치 스크립트가 왜 이걸 말해주지 않을까?

  • 설치 스크립트는 **새로운 셸 프로세스(subshell)**에서 실행된다.
  • bash의 해시 테이블은 현재 사용자의 셸 세션 안에서만 유효하다.
  • 따라서 설치 스크립트는 사용자 셸의 캐시에 접근할 수 없고,
    hash -r을 실행해도 사용자 셸에는 아무런 영향이 없다.

그렇다고 안내도 없이 침묵하는 건 친절한 시스템이라 할 수 없다.


💬 최소한 이렇게 안내했어야 했다

✅ Node.js 설치가 완료되었습니다.

⚠️ 이전 node 경로가 기억된 셸에서는 아래 명령어를 실행해 주세요:

    hash -d node    # 또는 hash -r

또는 터미널을 종료하고 다시 열어주세요.

 

🛠 추가 팁

  • .bashrc 또는 .zshrc에 export PATH를 넣는 것도 좋지만,
    hash는 경로 문제가 아니라 캐시 문제이므로 별개다.
  • source ~/.bashrc로도 해결되지 않는 이유는,
    hash 캐시가 여전히 /usr/bin/node를 가리키고 있기 때문.

🔚 마무리

이 문제는 단순한 설치 실패가 아니다.
리눅스 셸이 “한 번 기억한 경로를 바꾸지 않기 때문에 생기는 캐시 문제”다.

# apt 설치 → 버전 낮음 → 제거
# 스크립트 설치 → which node OK → 실행 오류 → hash 캐시 때문

 

💡 기억하자

which node는 되는데,
node 명령은 안 된다면,
문제는 PATH가 아니라 hash다.

hash -d node

이 명령 하나면 해결된다.