본문 바로가기

Linux/Linux공통

[Linux] 리눅스에서 '환경 변수' 란?

리눅스에서 아주 쉬운 콘솔에서의 환경변수에 대해서 알아보자.

'환경변수' 라는 것은 그럴듯하게 어렵게 들릴수도 있겠지만 매우 쉬우며 어렵지 않다.

그냥 단순하게 환경의 조건을 정하는 것이다.

어떤 운영체제를 다룬다면 그 체제의 왕은 절대적으로 여러분이다.

그렇다. 여러분이 왕이 되어서 어떤 여러가지 문자를 함축적으로 정하는 것이다.

예를 들어,

"she=my love" 라고 정하고 싶다면 보통 프로그래밍 에서는 변수를 이렇게 설정한다.

she="my love"

그냥 바로 이거다. 이것이 변수라는 것이다.

얼마나 쉬운가?

여기에서 변수에 환경이란 말을 더하여 콘솔에서의 '환경변수'를 절대적으로 정한다고 한다면 터미널에 그저 'export'를 앞에 갖다 붙히기만 하면 되는 것이다.

자 그러면 터미널에서 그것을 한번 시험해 보도록 하자.

 

// 환경변수를 지정한다.

root@test:~$ export she="my love"


// 지정된 환경변수를 불러온다.

root@test:~$ echo $she

my love

-> 'she'에 대한 환경변수가 출력 되는데 성공했다.

보시는 바와 같 "my love" 라는 글이 출력 되는 것을 볼 수가 있다.

그리고 중요한 것은 그것을 불러오는 명령에서 she 앞에 '$'를 붙였다는 것이다.
'$' 문자는 유닉스 시스템의 쉘 스크립트 에서 변수를 불러오는 매우 중요한 담당 역할을 하는 문자 이다.

하지만 이와 같은 단순한 환경변수 지정은 여러분이 연 그 터미널에서만 변수로 동작하며 다른 터미널 콘솔 에서는 변수로 지정 되지 않는다.

그렇다면 변수를 계속 유지되도록 전역설정을 하려면 어떻게해야 할까?

 

이는 '$/HOME/.bashrc' 파일에 해당 스크립트를 입력하여 처리가 가능하다.
($HOME = /home/user)

// 먼저 만일을 대비해서 bashrc의 백업을 만든다. (물론 부팅시를 기준으로 한 백업 파일인 '$HOME/.bashrc~'가 존재 한다.) 


root@test:~$ cp ~/.bashrc ~/.bashrc.bak


// .bashrc 파일에 추가할 환경변수를 삽입 한다.


root@test:~$ echo 'export she="my love"' >> ~/.bashrc


// 재부팅 할 필요 없이 '~/.bashrc' 파일의 소스를 로드한다.


root@test:~$ source ~/.bashrc


// 지정된 환경변수를 불러온다.

root@test:~$ echo $she

my love


-> 'she'에 대한 환경변수가 출력 되는데 성공했다.

이와 같은 환경변수는 전역 bash 프로그래밍에서 활용되며 여러 소프트웨어들이 이러한 환경변수를 활용한다.
대표적으로 많이 사용되는 환경변수들은 다음과 같다.

환경변수 설명
$HOME 사용자의 홈 디렉토리
$PATH 실행 파일 경로
$LANG 환경변수에 설정된 언어
$PWD 사용자의 현재 작업중인 디렉토리
$SECONDS 해당 콘솔이 실행된 경과를 초 단위 시간으로 나타냄
$SHLVL 사용되는 쉘 레벨
$SHELL 사용되는 쉘 이름($BASH와 같게 나옴.)
$PPID 부모 프로세스의 PID
$BASH BASH 실행 파일 경로
$BASH_VERSION 설치된 BASH 버전
$MAIL 환경변수에 설정된 메일주소
$OSTYPE 운영체제 종류
$TERM 현재 사용되는 터미널 이름
$HOSTNAME 호스트 전체 이름
$HOSTTYPE 시스템의 아키텍처
$MACHTYPE PC의 아키텍쳐와 운영체제표시
$LOGNAME 로그인 사용자 이름
$UID 사용자 UID
$EUID su 명령에서 사용하는 사용자의 유효 아이디 값(UID와 EUID 값은 다를 수 있음)
$USER 사용자의 이름
$HISTFILE history파일의 경로
$DISPLAY 현재 사용되는 X 디스플레이 이름

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

1. 환경 변수 살펴보기

- bash 쉘은 쉘 세션과 작업 환경에 대한 정보를 저장하기 위해 환경 변수라는 기능을 사용함

- bash 쉘의 두 가지 환경 변수 유형

1). 전역 변수

2). 지역 변수

 

1.1 전역 환경 변수 살펴보기

- 전역 환경 변수는 쉘 세션 및 그로부터 파생된 자식 서브쉘에서 볼 수 있음

- 전역 환경 변수를 보려면 env 또는 printenv 명령을 사용

(개발 환경 변수의 값을 표시하려면 printenv 명령만 사용 가능)

- echo 명령과 환경 변수 이름 앞에 $ 표시로도 환경 변수 참조 가능

- 변수 이름 앞에 달러 기호를 붙이면 변수를 명령의 매개변수로 전달 가능

- 전역 환경 변수는 어떤 프로세스의 서브쉘에서든 사용 가능함

- 서브쉘에서 HOME 환경 변수의 현재 값이 부모 쉘에 표시된 값과 정확히 똑같은 값인 /root로 설정되어 있는 것을 볼 수 있음

1.2 지역 환경 변수 살펴보기

 

- 지역 변수는 변수를 정의한 지역 프로세스에서만 볼 수 있음

- 지역 변수만을 표시하는 명령은 존재하지 않음

- set 명령은 특정 프로세스에 대한 모든 변수를 표시하며, 지역 및 전역 환경 변수와 사용자 정의 변수를 모두 포함함

 

2. 사용자 정의 변수 설정하기

 

2.1 사용자 정의 지역 변수 설정하기

 

- 숫자 또는 문자열 값을 등호로 변수에 묶음으로써 이 값을 변수에 지정 가능

- 빈 칸이 포함된 문자열 값을 지정해야 할 경우에는 문자열의 시작과 끝을 표시하기 위해서 작은따옴표나, 큰따옴표를 사용해야함

- 시스템 환경 변수는 모두 대문자를 사용하고 있는 것과는 달리 직접 정의한 지역 변수들을 소문자를 사용함

- 사용자 정의 my_variable  변수는 자식 쉘에서 사용할 수 없음 자식 쉘이 종료되고 원래의 쉘로 돌아간 뒤, 지역 변수를 다시 사용 가능

- 이와 비슷하게, 자식 프로세스에서 지역 변수를 설정한 경우 자식 프로세스를 떠나면 그 지역 변수를 더는 사용할 수 없음

- 사용자 정의 지역 변수를 전역 환경 변수로 바꾸면 이러한 특성을 바꿀 수 있음

2.2 사용자 정의 전역 환경 변수 설정하기

- 먼저 지역 변수를 생성하고 그 변수를 export명령과 달러 기호($)를 뺀 변수 이름을 사용해 전역 환경으로 내보냄

- 자식 쉘 안에서 전역 환경 변수를 변경하면 부모 쉘의 변수 값에는 영향을 주지 않음(변수의 값은 부모 쉘이 아닌 자식 쉘 안에서만 바뀌었음)

- 자식 쉘 안에서 export 명령을 사용해도 자식 쉘은 부모 쉘의 전역 환경 변수 값을 변경할 수 없음

 

3. 환경 변수 제거하기

 

- unset 명령을 사용하여 지역 환경 변수를 제거할 수 있음.

- unset 명령에서 환경변수를 참조할 때에는 달리 기호를 사용하지 않음!

- 변수 값을 변경할 떄와 마찬가지로 부모 쉘에서 생성된 환경 변수는 자식 쉘에서는 unset할 수 없으며 부모 쉘에서 unset 되어야 함

4. 기본 쉘 환경 변수 들여다보기

- 원래의 유닉스 Bounrce 쉘과 호환되는 bash 쉘의 환경 변수

 

 

 

작..성..중

 

 

참조

https://blog.naver.com/gloriamok/222660313703

 

6장. 리눅스 환경 변수 사용하기

리눅스 커맨드라인 쉘 스크립트 바이블 p.161-187 제 1부 리눅스 커맨드라인- 6장. 리눅스 환경 변수 사용...

blog.naver.com