shell 이란 , 명령어 처리기 혹은 유저 인터페이스라고 한다.
DOS 의 COMMAND.COM 이나, 윈도우의 cmd.exe, Linux 의 bash 도 shell 이라 한다.
예를 들어 dir 이란 명령어를 입력했는데,
기계에 불과한 컴퓨터가 dir 이 무엇인지 직접 알수는 없다.
여기서, shell 이 dir 이라는 명령어를 해석하여 커널에 전달하는 역할을 하는
명령어 해석기이면서 유저의 명령을 운영체제에 전달하므로 유저인터페이스이다.
그리고 리눅스 내부에는 이런 쉘이 제법 존재하는데 사용자 별로 로그인 쉘이 존재한다.
/etc/passwd 에 명시되어 있다.
사용가능한 쉘 목록보기
BASH
cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
현재 사용중은 쉘 보기
BASH
$ echo $SHELL
/bin/bash
로그인 쉘
로그인 쉘은 사용자가 로그인 했을때 해당 사용자에게 적용되는 쉘을 의미한다.
비로그인 쉘
로그인 없이 실행되는 쉘로 GUI 에서 새 터미널을 여는 경우 해당한다.
사용자 쉘 변경
chsh 명령을 사용하여 사용자가 사용할 로그인 쉘을 변경할 수 있다.
BASH
$ chsh
Password: (암호 입력)
Changing the login shell for userID
Enter the new value, or press ENTER for the default
Login Shell [/bin/sh]: /bin/bash
배시 쉘
Bash Shell 의 핵심적인 특징으로는 아래와 같은 기능을 제공하는 것이다.
-
탭 완성(tab completion)
-
명령행 히스토리(history)
-
Alias
-
중괄호 확장(brace expansion)
-
반복문
-
줄 편집(Line-editing)
배시 쉘의 로그인 과정
1. 사용자가 ID/PW 입력
2. /bin/login 프로세스가 해당 사용자의 인증에 관련된 파일(/etc/passwd, /etc/shadow 등)을 참조하여
사용자의 기본정보(홈 디렉토리, 기본 쉘 등)를 확인
3. /bin/login 프로세스가 BASH쉘을 호출
4. /etc/profile 을 해당 사용자에게 적용
5. 사용자 개인 환경설정 적용을 위해 사용자 홈 디렉토리의 .bash_profile을 불러들여서 적용
( 만약 .bash_profile이 없으면 .bash_login 파일을 불러들이고, .bash_login 파일도 없으면 .profile 을 적용)
(적용 순서는 .bash_profile > .bash_login > .profile 순서이고 셋 중 하나만 적용됨)1
6. 사용자 홈 디렉토리에 있는 .bashrc 적용
7. .bashrc에 의해 /etc/bashrc 파일을 불러 적용
8. 사용자에게 쉘 프롬프트 제공
배시 쉘 환경 설정 스크립트
/etc/profile
- 시스템 전역 초기화 파일.
- /etc/bashrc 파일도 시스템의 일반적 설정을 담당하지만 etc/profile이 조금 더 일반적으로 사용됨
- 시스템 전체 환경, 시스템 부팅할 때 시작프로그램 설정, 로그인 셋업 기능 등
/etc/bashrc
- 시스템 규모의 alias와 함수
.bash_profile
- 각 사용자 홈디렉토리에 존재하는 쉘 환경설정 파일
- 터미널 설정과 환경변수같은 설정 기록
- 한 번 로그인되면 로그아웃 때까지 유지(source 명령으로 설정 적용 가능)
.bashrc
- 사용자가 정의한 변수, 알리아스, 함수 등과 같은 사용의 용이성을 위해 필요한 항목 설정
- .bashrc 파일은 쉘이 실행될 때마다 실행
.bash_logout
- 사용자가 로그아웃할 때 실행할 것들을 정의하는 파일