반응형

 

프로그래밍을 공부하면서 가장 어려웠던 점은

지금까지 아이콘과 마우스 클릭으로 이루어졌던 모든 일들을

이제는 CMD, TERMINAL 등에서 명령어로

수행해야 한다는 것이었습니다.

즉각적으로 눈에 보이는 구조가 아니라

머릿속에서 컴퓨터 동작의 구조를 인지하고

있어야 한다는 점이 익숙하지 않았습니다.

터미널 창을 띄우고 간단한 명령어들을

입력해 보면서 공부하기는 했지만,

기본적으로 이 시스템 자체에 대한 이해가 필요했고,

그중 셸 (Shell)에 대해 정리해 보기로 했습니다.


쉘(Shell)이란 무엇인가?

쉘 (Shell)은 껍질이라는 뜻입니다.

바깥 환경과 속 살 그 사이의 껍질,

이것이 쉘 (Shell)입니다.

속 살은 운영체제 (Window, Mac, Linux etc..)이고,

바깥 환경은 사용자이며

운영체제와 사용자가 대화를 주고받을 수 있도록

그 사이에서 도와주는 것이 쉘입니다.

Shell 은 명령어 해석기로서

프로그램이며 실행 파일입니다.

C언어, 자바스크립트 같은 언어들은

컴파일러라는 번역기에 의해

기계어로 변환되어 컴퓨터에서 동작하지만

쉘 스크립트는

사람이 바로 이해할 수 있는

자연어 형식으로 되어있습니다.

기본적으로 셸은 대화형 인터페이스를 제공합니다.

따라서 입력받은 명령어를 즉시 실행시킬 수 있으며

다양한 옵션 기능을 통해 편리하게 이용할 수 있습니다

 

즉,

쉘은 사용자와 운영체제 간의 대화를 중개하는 인터페이스입니다.

사용자가 입력한 명령을 운영체제에 전달하고,

그 결과를 사용자에게 돌려주는 역할을 합니다.

쉘은 일종의 명령어 해석기로,

사용자의 명령어를 해석하여 컴퓨터가 수행할 수 있는 언어로 변환합니다.

이는 다양한 프로그래밍 언어가 컴파일러를 통해 기계어로 번역되는 과정과 유사합니다.


마지막으로 다시 한번 짚어보겠습니다.

쉘은 운영체제와 커널 사이에 위치해 있으며,

응용 프로그램과 커널이

대화를 할 수 있도록 만들어줍니다.

우리가 명령어를 쳐서 쉘에게 넘기면

쉘은 커널에게 전달합니다.

커널은 해당 명령어를 수행하고 결과를

다시 쉘을 통해 우리에게 전달합니다.

그래서 쉘을 명령어 해석기라고 이해하셔도 무방합니다.


쉘의 주요 기능
  • 대화형 인터페이스: 사용자로부터 명령어를 입력받아 즉시 실행할 수 있습니다.
  • 스크립트 실행: 쉘 스크립트를 통해 복잡한 작업을 자동화할 수 있습니다.
  • 환경 설정: 시스템 전체나 개별 사용자의 환경을 설정할 수 있습니다.

주요 쉘의 종류
  1. Bourne Shell (sh): 유닉스에서 가장 초기의 쉘로, 많은 리눅스 배포판에서 기본적으로 설치됩니다.
  2. C Shell (csh): C언어의 문법을 모방하여 사용성을 향상시킨 쉘입니다. 다양한 편리 기능을 제공하지만, 처리 속도가 느린 단점이 있습니다.
  3. Korn Shell (ksh): Bourne Shell을 확장한 쉘로, C Shell의 기능을 포함하며 빠른 처리 속도를 자랑합니다.
  4. Bash (Bourne Again Shell): 현재 가장 널리 사용되는 쉘로, Bourne Shell의 기능을 기반으로 하여 Korn Shell과 C Shell의 장점을 결합했습니다. sh 셸을 기반으로 만들어졌으며 리눅스에서 사용자 계정을 생성할때 특별한 셀을 지정하지 않으면 기본적으로 사용되는 셸입니다. bash는 sh를 기반으로 korn shell(ksh) + C shell(csh)의 장점을 모아 만들었으며 무로료 배포되어 빠르게 시장을 점유했습니다.
  5. Z Shell (zsh): Bash의 기능을 확장하고 사용성을 더욱 향상시킨 쉘로, macOS Catalina 버전부터 기본 쉘로 사용됩니다.
  6. tcsh Shell: csh의 기능을 강화한 쉘입니다.

내가 원하는 셸을 사용해 보자

 

내가 사용 중인 셸 확인하기

# echo $SHELL
# env|grep SHELL
 

변경 가능한 셸 확인하고, 일시적으로 변경하기

# cat /etc/shells
# /bin/sh
 

변경 가능한 셸 확인하고 , 셸 변경하기

# cat /etc/shells
# chsh -l

(방법1)
# chsh ubuntu -s /bin/dash <- 예시로 우분트 셸을 dash셸로 변경해보기
(방법2)
# vi /etc/passwd <- vi 편집기로도 변경 가능

 

셸 별 기능 체크

 
Bourne
C
TC
Korn
Bash
sh
csh
tcsh
ksh
bash
Programming language
Shell variables
Command alias
X
Command history
X
Filename completion
X
✓+
✓+
Command line editing
X
X
✓+
Job control
X

쉘과 커널의 관계

쉘은 운영체제의 핵심 구성 요소인 커널과 밀접하게 연결되어 있습니다.

사용자가 쉘에 명령을 입력하면, 쉘은 이를 해석하여 커널에 전달합니다.

커널은 명령을 수행한 후 그 결과를 쉘을 통해 사용자에게 반환합니다.

 

아래 글에 커널에 대해 쉽고 자세하게

작성해 두었으니

https://jdcyber.tistory.com/67

 

커널(Kernel)이란 무엇일까? (개념, 이중 모드, 쉘의 역할)

커널(Kernel)은 컴퓨터 운영체제의 핵심 부분으로,하드웨어 자원을 관리하고 응용 프로그램과 하드웨어 사이의 인터페이스 역할을 수행합니다.이는 응용 프로그램이 시스템 호출을 통해 하드웨

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

 

(M1) zsh: command not found

 

(Mac) 사용자들이 터미널에서 명령어를 실행할

"zsh: command not found"라는 오류 메시지를 마주하는 경우가 종종 있습니다.

글에서는 오류의 원인과 해결 방법을 설명하겠습니다.

 

개발을 하나도 모르고 이곳에 입문하여 가지고 있는 맥북으로 연습해 보려 했는데

위와 같은 에러가 떠서 참 당황했었습니다.

인터넷에서 하라는 데로 마구잡이로 따라 하는데 문제 해결도 안 되고..

친절히 왜 이런 문구가 뜨는지 이유를 설명해 주거나

알려주는 해결 방법은 어떤 부분을 왜 건드려서 해결이 되는 건지

친절하게 알려주는 블로거분들이 많이 없더라고요

 

그래서 준비했습니다.

쉽게 써보겠지만 제 설명 또한 어려울 수 있습니다.

댓글로 물어봐 주시면 성심성의껏 답변해 드리도록 하겠습니다


먼저 여기서 나오는 command not found 에러

오류는 시스템이 특정 명령어의 실행 파일을 찾지 못할 발생합니다.

이는 보통 환경변수 PATH 해당 명령어의 위치가 포함되어 있지 않을 발생합니다.

무슨 말이냐 하면 검색 경로 문제에 따른 에러입니다.

즉 시스템에서 명령을 사용할 수 없거나 검색 경로에 명령 디렉터리가 없다는 뜻이죠

환경변수 PATH 이해하기
PATH는 운영 체제가 실행 파일을 찾기 위해 참조하는 디렉토리들의 목록입니다.
적절한 경로가
PATH에 추가되어 있지 않다면 시스템은 필요한 실행 파일을 찾을 수 없습니다.

 

우리는 위 에러를 해결하기 위해서 zshrc 파일을 수정하여 환경 변수를 설정해야 합니다.

여기서 말하는 zsh란 무엇일까요?

바로 셸이라는 것인데요 우리는 셸이 무엇인지에 대해 알고 넘어갈 필요가 있습니다.

아래 글에서 셸에 대해 알아보고 넘어가 보도록 하죠

(작성 중)

 

위처럼 zsh가 아니라 아래처럼 에러가 뜨시는 분들도 계실 겁니다.

"bash: command not found: nvm"

 

zsh 셀을 사용하는 저 같은 사람들은

vi ~/. bash_profile

위에 경로에서 에러를 수정하라는 만연히 퍼져있는 블로그를 따라 해도 전혀 문제가 해결되지 않으실 겁니다.

반대로 bash 셸을 사용하시는 분들은 제 블로그 글을 따라 해도 문제 해결이 되지 않겠죠!

왜냐하면 사용하는 (zsh or bash)에 따라 해결법은 다르니까요!

 

현재 내가 사용 중인 셸이 어떤 건지 확인하고 싶으시다면 아래처럼 터미널에 적어보세요

echo $SHELL

Zshrc 파일 수정

지금부터 M1 사용자 중 zsh: command not found라는 오류 메시지가 나오는 분들을 위해 해결 방법을 공유드립니다.

시작 위치는 터미널입니다.

open ~/.zshrc
vim ~/.zshrc
vi ~/.zshrc
터미널에서 open ~/.zshrc, vim ~/.zshrc, 또는 vi ~/.zshrc 하나를 입력합니다.
(
vs code를 사용한다면 code ~/.zshrc를 사용하여 편집기를 열어주시면 됩니다)

 

 

위와 같은 창이 뜨신다면 i를 눌러주세요 (편집 모드입니다)
편집모드로 전환한 후, 맨 아래 줄에다가 
export PATH="$HOME/your_directory:$PATH"를 추가합니다.
(여기서
your_directory는 해당 명령어의 위치입니다.)
EX) export workzone="$HOME/workzone"

자신의 경로를 잘 모르시겠다면 :q로 나가신 후
cd~ pwd /users/홍길동(계정명)
위와 같이 터미널에서
cd ~를 치신 후 pwd를 쳐보시면 /Users/홍길동(계정명) 텐데, 이럴 경우라고 할때 써야하는 내용은
export workzone="$HOME/홍길동" 이 되는 겁니다.

다시한번,
저는 컴퓨터 이름으로 JD라고 설정했습니다.
그럼 제가 써야 할 내용은
export workzone="$HOME/JD" 이 되겠네요.

 

다시 돌아와서 환경 변수를 적어주었습니다.

이제 :wq를 입력하여 저장하고 종료합니다.

 

항상 환경변수를 수정하면 저장을 하고 새로고침을 해서 적용을 해주어야 하는데요

source ~/. zshrc를 실행하여 변경 사항을 적용합니다.

 

 

 

위에 설정한 환경변수는 어떤 내용일까요?
원래는 특정 디렉터리로 이동하기 위해 /usr/bin/test/test2/ 이런 식으로 하나 하나 이동해야 하는 명령어를 cd $test2로
한 번에 이동하기 위해 변경되었습니다.
이제 cd $workzone 만으로 해당 경로로 이동할 수 있습니다. (다시 한번 말하지만 workzone은 다 다릅니다)

 

잘 적용됐는지 확인해 볼까요? 아래와 같이 터미널에서 타이핑해보세요 여기서 workzone은 변경되어야겠죠?

echo $workzone
cd $workzone

위의 방법으로 해결이 안 될 경우를 대비한 방법입니다.

 

homebrew 설치

 

Homebrew는 macOS (및 Linux) 용 패키지 관리자입니다.

패키지 관리자란 소프트웨어 설치, 업데이트, 구성 및 제거를 자동화하는 도구입니다.

Homebrew를 사용하면 명령줄 인터페이스를 통해 소프트웨어를 쉽고 빠르게 설치하고 관리할 수 있습니다.

 

cd /opt
sudo mkdir homebrew
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
echo "export PATH=/opt/homebrew/bin:$PATH" >> ~/.zshrc
/bin/bash -c "$(curl -fsSL https://gist.githubusercontent.com/nrubin29/bea5aa83e8dfa91370fe83b62dad6dfa/raw/48f48f7fef21abb308e129a80b3214c2538fc611/homebrew_m1.sh)"

 

zsh: command not found 해결 완료


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

이웃 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형

+ Recent posts