셸 변수와 환경변수 원리와 활용법

셸 변수와 환경 변수

셸 변수와 환경 변수

변수는 특정 데이터 또는 환경 설정을 위한 값을 저장하는 것으로, 기본적으로는 문자열 정보를 저장한다.

셸 변수 설명
셸 변수(지역 변수) - 변수가 정의된 셸에서만 사용이 가능한 변수
- 서브 셸로는 전달되지 않는다.
환경 변수(전역 변수) - 현재 셸 뿐만 아니라 서브 셸로도 전달되는 변수
- 보통 변수 이름을 대문자로 사용한다.
- printenv : 시스템의 모든 환경 변수의 이름과 값을 출력
- export -p : 현재 셸의 모든 환경 변수를 출력

변수 설정 방법

(1) 변수를 만드는 방법
-등호를 이용하며 변수명=값과 같이 사용한다.

1
2
3
4
5
6
7
8
9
# 변수 등록 및 확인
smile=gate
echo $smile
>> gate

# 서브 셸 실행  
sh
echo $smile
>> 출력 없음


(2) 환경변수를 만드는 방법
-두 가지 방법이 있다.
-첫 번째는 변수명=값과 같이 변수를 만든 뒤, export 변수와 같이 환경변수에 등록하는 방법
-두 번째는 export 변수=값으로 변수를 만들면서 환경변수로 등록하는 방법이다.

1
2
3
4
5
6
7
8
# 변수 등록 및 환경변수 등록
SMILE=gate
export SMILE

# 서브 셸 실행 및 확인
sh
echo $SMILE
>> gate


(3) 환경변수 삭제 방법

unset 명령어를 이용해 환경변수를 삭제할 수 있다.

1
2
3
4
5
unset smile SMILE # 다수 개 가능
echo $smile
>> 출력 없음
echo $SMILE
>> 출력 없음

환경 변수

환경 설정 파일

환경 설정 파일 : 로그인할 때 또는 셸을 시작할 때 자동으로 실행되는 명령을 저장한 파일

구분 설명
시스템 환경 설정 파일 모든 사용자에게 적용되는 환경 설정
사용자 환경 설정 파일 특정 사용자에게만 적용되는 환경 설정
사용자의 home 디렉터리에 저장된다.

Bash 셸의 환결 설정 파일

bash 셸의 경우 아래와 같은 환경 설정 파일을 가지고 있다.

순번 파일 설명
1 /etc/profile - 로그인할 때 가장 먼저 수행된다.
-모든 사용자에게 적용된다.
- PATH, MAIL, HISTSIZE 등 전역 환경 변수가 설정되어 있다.
2 ~/.bash_profile - 로그인할 때 수행된다.
- 개별 사용자에게 적용된다.
- 보통 내부에서 ~/.bashrc를 실행(호출) 한다.
3 ~/.bashrc - 셸을 시작할 때마다 수행된다.
- 개별 사용자에게 적용된다.
- 보통 ~/.bash_profile 로부터 호출된다.
- 보통 내부에서 /etc/bashrc를 수행한다.
4 /etc/bashrc - 셸을 시작할 때마다 수행된다.
- 모든 사용자에게 적용된다.
- PS1설정, 에일리어스, umask, 함수 등을 설정한다.
5 ~/.bash_logout - 로그아웃을 수행할 때 실행된다.

로그인 셸의 경우 로그인 시에는 1 > 2 > 3 > 4 순으로 실행되며
로그인 후 셸(서브셸)을 실행할 때에는 3 > 4 순으로 실행된다.
profile 먼저 > bashrc 나중에 실행됨
bashrc는 사용자의 것 먼저 실행됨

비로그인 셸의 경우 4 > 3 순으로 실행됨

자주 사용되는 환경변수

변수 내용
BASH bash 실행 파일의 절대 경로
HISTCMD 히스토리 목록에서 가장 최근의 명령을 표시하는 번호
HISTSIZE 1개 셸에서 저장되는 명령 히스토리 목록의 최대 개수
HOME 홈 디렉터리
MAIL 메일 박스 디렉터리
PATH 명령을 수행할 때 실행 파일을 찾기 위한 디렉터리 목록
콜론(:)으로 구분된다.
SHELL 사용 중인 기본 셸
PWD 현재 작업 디렉터리
USER 사용자의 계정을 의미하는 이름
UID 현재 사용자의 ID
PPID 셸의 부모 프로세스 ID
1
2
3
4
echo $PATH
/home/user/.local/bin:/home/user/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
# 명령에 해당하는 프로그램을 찾기 위한 디렉터리 목록
# 콜론으로 구분된다.

Reference

UNIX시스템 - 김희천,김진욱 저