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 캐시 때문이다.
아래 해결 방법을 따라가면 바로 해결된다.
🧭 문제 발생 흐름 (재현 가능 시나리오)
- coc.nvim 등 Vim 플러그인을 설치하려고 했더니 Node.js v16 이상이 필요하다는 메시지를 봄
- sudo apt install nodejs → 설치된 버전은 v10.x, 턱없이 낮음
- sudo apt remove nodejs → 제거
- 공식 설치 스크립트 실행:
-
curl -sL https://install-node.vercel.app/lts | sudo bash
-
- 설치 후 which node 확인 → /usr/local/bin/node ✅
- 하지만 node -v 실행 시 오류:
-
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
이 명령 하나면 해결된다.
'IT > shell' 카테고리의 다른 글
설치했고 PATH도 수정했는데... not found? 마지막 한 수는? (1) | 2025.06.24 |
---|---|
[linux][bash] 파일 크기 감시하기 (0) | 2024.11.11 |
[ssh] 명령 주기 (0) | 2022.05.18 |
[bash] 디렉토리 경로명 포함한 ls (0) | 2022.03.16 |
[shellscript] alias 무시하기 (0) | 2015.06.12 |