로그인 쉘은 로그인할 때 수행되는 기본 쉘이다. 로그인 쉘은 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 쉘을 실행할 수 있는데, 이렇게 실행된 쉘을 서브 쉘이라고 한다.