linux

쉘의 구분 - 로그인 쉘, 비 로그인 쉘, 서브 쉘

로그인 쉘

로그인 쉘은 로그인할 때 수행되는 기본 쉘이다. 로그인 쉘은 logout 명령으로 로그아웃하여 쉘을 종료할 수 있다.(비 로그인 쉘에서는 logout 명령을 사용할 수 없다.) 텍스트 모드에서 사용자 계정으로 로그인할 때 수행되는 쉘이 로그인 쉘이다. 또한 다른 사용자 계정으로 전환하는 su -l username 명령으로 수행되는 서브 쉘도 로그인 쉘이다. -l 옵션은 지정된 사용자의 로그인 쉘을 시작하는 옵션이다.


[user1@localhost ~]$ whoami user1 [user1@localhost ~]$ su -l user2 Password: [user2@localhost ~]$ whoami user2 [user2@localhost ~]$ logout [user1@localhost ~]$

su -l user2 명령으로 사용자 user2의 로그인 쉘을 실행하며 사용자를 전환한다. logout 명령으로 user2의 로그인 쉘을 종료하고 user1의 쉘로 돌아간다.

비 로그인 쉘

말그대로 로그인 쉘이 아닌 쉘이다. logout 명령이 아닌 exit 명령으로 쉘을 종료한다. GUI 환경(그래픽 모드)에서 터미널을 띄우면 수행되는 쉘이 비 로그인 쉘이다. 또한 다른 사용자 계정으로 전환하는 su username 명령으로 수행되는 서브 쉘도 비 로그인 쉘이다.


[user1@localhost ~]$ whoami user1 [user1@localhost ~]$ su user2 Password: [user2@localhost ~]$ whoami user2 [user2@localhost ~]$ logout [user2@localhost ~]$ bash: logout: not login shell: use ‘exit’ [user2@localhost ~]$ exit [user1@localhost ~]$

su user2 명령으로 사용자 user2로 단순 전환한다. 로그인 쉘을 실행하지 않으므로 관련된 초기화 스크립트가 실행되지 않고 단지 사용자만 전환된다. 로그인 쉘이 아니므로 logout으로 쉘을 종료할 수 없고 exit 명령으로 쉘을 종료한다.

서브 쉘

현재 쉘 안에서 실행되는 쉘이다. 현재 쉘의 자식 프로세스로 실행된다. exit 명령으로 서브 쉘을 종료하고 부모 쉘로 돌아간다. 서브 쉘은 부모 쉘의 환경 변수를 전달받아 공통적으로 사용할 수 있다. 예를 들어 현재 쉘에서 sh 명령으로 bourne 쉘을 실행할 수 있는데, 이렇게 실행된 쉘을 서브 쉘이라고 한다.