Login Shell vs Non-Login Shell
bash와 zsh 차이점을 알아보다가.....계속 로그인 쉘 이랑 논 로그인쉘이 언급되길래 정리용..
Shell
unix 운영체제에서 shell이란 사용자와 OS 커널단과의 인터페이스이다.
shell은 사용자로부터 입력을 받아 커널에게 전송한다. 또한 커널로부터 결과를 사용자에게 보여준다.
Login Shell
로그인 shell은 /etc/passwd 파일을 읽어 /bin/login을 사용하여 성공적으로 로그인 한 후 시작되는 첫번째 프로세스이다. 이때 사용자 ID로 실행된다.
로그인 셸은 터미널을 사용하여 로그인하거나 다른 사용자로 전환하거나 ssh를 사용할 때 실행된다.
로그인 셸이 시작되면 시작 스크립트 컬렉션을 실행하여 셸 환경을 설정한다.
다음과 같은 단계로 시작된다.
- 로그인 프로세스는 /etc/profile 를 실행시킨다.
- /etc/profile 는 /etc/profile.d 에 있는 스크립트를 실행시킨다.
- 로그인 프로세스가 ~/.bash_profile 를 실행시킨다.
- ~/.bash_profile 는~/.bashrc 를 실행시키고
- ~/.bashrc 가 /etc/bashrc 를 실행시킨다.
echo $0
명령어는 현재 shell이 로그인 shell인지 아닌지를 알 수 있는 명령어다.
해당 명령어의 결과로서 -bash 또는 -su 처럼 - (하이픈)이 붙으면 로그인 셸이라는것을 알 수 있다.
Non Login Shell
Login Shell이 실행시키는 non-Login shell이다.
Non-Login Shell은 로그인 없이 프로세스로 시작하는 shell이거나, 다른 shell로부터 시작하는 shell일 수 도 있다.
프로세스는 shell 실행파일의 이름을 사용하여 non-login shell을 시작한다.
bash shell을 non-login shell로 시작하면 다음과 같은 과정으로 스크립트가 실행된다.
- Non-login process 가~/.bashrc를 실행시킨다.
- ~/.bashrc 는 /etc/bashrc 를 실행시킨다.
- /etc/bashrc 는 /etc/profile.d/ 를 실행시킨다.
non Login shell인지 아닌지는 위와 동일한 echo $0 명령어로 확인이 가능하다. 로그인셸과 반대로 하이픈이 붙지 않는다면 non Login shell 이다.