쉘(shell)은 사용자 명령을 처리하는 인터페이스로, Bash와 Zsh는 가장 많이 사용되는 쉘 중 두 가지이다. 이 두 쉘은 로그인 쉘비로그인 쉘에 따라 서로 다른 설정 파일을 로드한다.


1. Bash의 시작 파일 로드 순서

Bash는 쉘이 로그인 쉘인지, 비로그인 쉘인지에 따라 서로 다른 파일을 읽는다.

로그인 쉘비로그인 쉘의 차이는 다음과 같다:

  • 로그인 쉘: 시스템에 로그인할 때 생성되는 쉘. 주로 TTY(터미널)나 SSH와 같은 원격 연결을 통해 로그인할 때 사용.
  • 비로그인 쉘: GUI 환경에서 터미널을 새로 열 때처럼 이미 로그인된 상태에서 시작되는 쉘.

Bash가 어떤 파일을 언제 로드하는지는 아래 표와 같다:

파일 경로 로그인 쉘 비로그인 쉘 스크립트 실행 시
/etc/profile A    
/etc/bash.bashrc   A  
~/.bashrc   B  
~/.bash_profile B1    
~/.bash_login B2    
~/.profile B3    
BASH_ENV     A
~/.bash_logout C    

설명:

  • 로그인 쉘에서는 /etc/profile을 먼저 읽고, 그 후에 ~/.bash_profile, ~/.bash_login, 또는 ~/.profile 중 첫 번째로 존재하는 파일을 로드한다.
  • 비로그인 쉘에서는 /etc/bash.bashrc를 먼저 읽고, 그 다음 ~/.bashrc 파일을 로드한다.
  • 스크립트를 실행할 때는 BASH_ENV 환경 변수에 설정된 파일을 읽는다.

2. Bash 설정 파일 관리 팁

대부분의 경우, 비로그인 쉘을 더 자주 사용하므로 주요 설정을 ~/.bashrc에 작성하는 것이 좋다. 그러나, 로그인 쉘에서도 동일한 설정을 사용하고 싶다면, ~/.bash_profile에 ~/.bashrc를 소스(source)하는 코드를 추가할 수 있다. 이렇게 하면 로그인 시에도 ~/.bashrc의 설정이 적용됩니다.

# ~/.bash_profile 내용
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

위의 코드를 ~/.bash_profile에 추가하면 로그인 쉘에서도 ~/.bashrc의 설정을 사용할 수 있게 됩니다. 또는 ~/.bash_profile을 ~/.bashrc로 심볼릭 링크할 수도 있다.

ln -s ~/.bashrc ~/.bash_profile

3. Zsh의 시작 파일 로드 순서

Zsh는 Bash와는 다르게 로그인 여부에 상관없이 항상 ~/.zshrc 파일을 읽습니다. Zsh의 로드 순서는 아래와 같다:

파일경로 로그인 쉘 비로그인 쉘 스크랩트 실행 시
/etc/zshenv A A A
~/.zshenv B B B
/etc/zprofile C    
~/.zprofile D    
/etc/zshrc E C  
~/.zshrc F D  
/etc/zlogin G    
~/.zlogin H    
~/.zlogout I    
/etc/zlogout J    

설명:

  • 로그인 쉘에서는 /etc/zshenv, ~/.zshenv, /etc/zprofile, ~/.zprofile 등의 파일을 순차적으로 읽는다.
  • 비로그인 쉘에서는 /etc/zshenv, ~/.zshenv, /etc/zshrc, ~/.zshrc를 차례로 읽는다.
  • 스크립트를 실행할 때는 /etc/zshenv와 ~/.zshenv 파일만 읽는다.

4. Zsh 설정 파일 관리 팁

Zsh는 로그인 쉘과 비로그인 쉘 모두에서 ~/.zshrc 파일을 읽기 때문에, 모든 Zsh 설정을 ~/.zshrc에 작성하면 된다. 만약 로그인 시에만 실행하고 싶은 설정이 있다면, ~/.zprofile에 작성할 수 있다.

5. 비로그인 쉘과 로그인 쉘 구분

쉘이 로그인 쉘인지 비로그인 쉘인지 구분하는 방법은 여러 가지가 있다. Bash에서 쉘이 로그인 쉘인지 확인하려면 아래 명령어를 사용할 수 있다:

shopt -q login_shell && echo "이건 로그인 쉘이에유~" || echo "이건 비로그인 쉘이에유~"

Zsh에서는 $ZLOGIN 변수를 이용해 쉘이 로그인 쉘인지 확인할 수 있다.


요약

  • Bash: 대부분의 설정은 ~/.bashrc에 작성하고, ~/.bash_profile에서 ~/.bashrc를 불러오면 로그인 쉘과 비로그인 쉘에서 동일한 설정을 사용할 수 있다.
  • Zsh: 모든 설정을 ~/.zshrc에 작성하면 된다. Zsh는 로그인 여부와 상관없이 ~/.zshrc를 항상 읽는다.

'MAC' 카테고리의 다른 글

Mac) 터미널 삭제 명령어  (0) 2024.08.21
rm "파일명" #파일 삭제
rm -d "폴더명" #빈 폴더 삭제
rm -r "폴더명" #폴더 삭제
rm -f "파일명" #파일 강제 삭제(존재하지 않아도 에러메세지 없음)
rm -rf "폴더명" #폴더 강제 삭제
rm -i "파일명" #파일 확인 후 삭제
rm -v "파일명" #명력 결과 출력
rm file_* #file_로 시작하는 모든 파일 삭제
rm *_file #_file로 끝나는 모든 파일 삭제
rm file_*_file #file로 시작, 끝나는 모든 파일 삭제
rm -rf /* #시스템의 모든 파일 및 디렉토리 삭제(위험!)

'MAC' 카테고리의 다른 글

Bash와 Zsh의 시작 파일 로드 순서 정리  (0) 2024.09.11

+ Recent posts