인턴을 진행하던 중, bash와 zsh 에서의 node 오류가 발생했다. 동작은 아래와 같았다.
오류 동작 :
1. 컴퓨터 새로 키면 zsh쉘의 node 버전이 계속 옛날 버전.
2. bash 쉘로 바꾸고 다시 zsh 쉘로 갈아타면 다시 node 최신버전이 된다.
그래서 우선, zsh 환경에서 node를 재설치 해보고자 했다.
- zsh쉘에서 nvm의 버전을 확인했을 때, 존재하지 않았다.
- nvm을 설치하고자, 아래 명령어 입력
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
<오류 발생>
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 14926 100 14926 0 0 268k 0 --:--:-- --:--:-- --:--:-- 269k
=> nvm is already installed in /home/roadie/.nvm, trying to update using git
=> => Compressing and cleaning up git repository
=> nvm source string already in /home/roadie/.bashrc
=> bash_completion source string already in /home/roadie/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:
⇒ 이 메시지는 nvm
이 이미 설치되어 있고, bash
쉘에서 nvm
을 사용할 수 있도록 설정이 완료되었음을 의미한다. bash
쉘에서는 nvm
이 정상적으로 작동하지만, zsh
쉘에서도 이를 사용하려면 동일한 설정을 ~/.zshrc
파일에 추가해야 한다.
~/.zshrc
파일 열기
nano ~/.zshrc
nvm
설정 추가 (nvm
설정을~/.zshrc
파일에 추가합니다. 아래 내용을 파일에 추가)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
- 자동으로 최신 Node.js 버전 사용 설정
nvm use stable
- 이후, 터미널 종료 후, zsh쉘에서
nvm —version
을 치면 nvm이 잘 나오게 된다.
- 또한
node -v
도 버전이 제일 최신 버전으로 잘 나오게된다.
정리한 김에 쉘과 커널에 대해서도 정리해보고자 한다!
pc 터미널을 커스텀하면서 쉘이 단순히 우리가 하드웨어가 동작할 수 있도록 동작하는 프로그램이라고 생각했다. 근데 쉘의 종류가 너무 많은 것이다! bash, zsh, ksh,, 그래서 쉘이 왜 많은건지, 어떻게 구체적으로 동작하는지 정리해보자!
shell(쉘)이란?
- 사용자가 컴퓨터 운영체제와 상호작용할 수 있게 해주는 프로그램
쉘은 사용자가 명령어를 입력하고, 그 명령어를 운영 체제에서 실행할 수 있는 형태로 해석하여 실행한다. 쉘은 명령어 줄 인터페이스로 동작하는 것이 일반적이지만, 그래픽 사용자 인터페이스로도 동작가능
CLI (Command Line Interface) 쉘
사용자가 텍스트로 명령어를 입력하는 방식.
대표적인 CLI 쉘은 Bash, Zsh, Ksh, Sh
CLI 쉘은 주로 서버 관리, 개발 작업, 자동화 스크립트 작성 등에 자주 사용
GUI (Graphical User Interface) 쉘
그래픽 사용자 인터페이스를 통해 사용자와 상호작용하는 쉘
대표적으로 Windows의 파일 탐색기, MAC의 Finder
쉘의 기능
-
명령어 실행
사용자가 입력한 명령어를 해석하고 실행
-
스크립트 실행
여러 명령어를 포함한 스크립트를 작성하고 실행
-
파일 및 디렉토리 관리
파일과 디렉터리를 생성, 삭제, 이동, 복사 하는 등의 작업을 수행할 수 있다.
-
프로그램 실행
컴퓨터에 설치된 프로그램을 실행할 수 있다.
-
환경변수 관리
시스템 및 사용자 환경 변수를 설정하고 관리할 수 있다.
쉘의 종류 (자주 사용되는 쉘!)
-
bash
가장 널리 사용되는 유닉스 쉘 중 하나로, 리눅스와 macOS에서 기본 쉘로 사용
다양한 스크립트 기능을 제공하며, 많은 유닉스 환경에서 기본적으로 설치
-
zsh (zshell)
bash와 호환되면서, 더 많은 기능과 유연성을 제공
oh-my-zsh와 같은 플러그인 시스템을 사용하여 확장 가능
자동 완성, 하이라이트 등 다양한 편의 기능을 포함하고 있다.
커널과 쉘의 관계
- 커널은 하드웨어와 직접 상호 작용하고, 시스템 자원을 관리하는 운영 체제의 핵심 부분
관계
- 사용자 -> 쉘 -> 커널 -> 하드웨어:
- 사용자는 쉘을 통해 명령어를 입력합니다.
- 쉘은 이 명령어를 해석하여 커널에 전달합니다.
- 커널은 하드웨어와 상호 작용하여 명령어를 실행합니다.
- 결과 -> 커널 -> 쉘 -> 사용자:
- 하드웨어로부터의 결과는 커널을 통해 쉘로 전달됩니다.
- 쉘은 결과를 사용자에게 출력합니다.