sh , ls , cat 과 같은 명령어들은 사실 /bin 과 같은 폴더에 있는 ELF 프로그램들이다.

사용자가 해당 명령을 입력하면 셸은 사용자가 입력한 프로그램을 찾은 후 실행한다.

사용자가 /bin/sh 와 같이 엄밀한 경로를 지정해주지 않고 sh 와 같이 단순하게 프로그램명을 입력하더라도 셸이 올바른 프로그램을 찾을 수 있는 이유는 환경 변수 덕분이다.

환경 변수란?

환경 변수란?

**환경 변수(Environment Variable)**는 컴퓨터에서 실행 중인 프로세스의 동작 방식에 영향을 미치는 값이며 사용자가 임의로 정의할 수 있다. 환경 변수는 일반적으로 키-값(Key-Value) 쌍의 형태로 구성되며, 시스템 및 프로그램의 설정이나 동작에 필요한 정보를 전달하는 데 사용된다.

특정 디렉터리 경로, 사용자 이름, 시스템 환경 설정, 또는 응용 프로그램이 참조할 API 키 등을 환경 변수로 지정할 수 있다.

리눅스에서 사용하는 대표적인 환경 변수 키 값은 다음과 같다.

환경 변수 역할
PATH 실행 파일 탐색 경로 집합
HOME 사용자의 홈 디렉터리
LANG 터미널에서 기본적으로 지원할 언어
PWD 사용자의 현재 작업 디렉터리 경로
USER 사용자 이름
SHELL 로그인 셸 종류
MAIL 메일 보관 경로
UID 사용자의 UID
LS_COLORS ls 명령어 사용 시 출력되는 색상 옵션의 경로

터미널에서 sh 만 입력해도 /bin/sh 가 실행되는 이유는 PATH 환경 변수에 /bin 이 포함되어 있기 때문이다. 만약 터미널에 명령어가 입력되는 경우(e.g. cat ) 셸은 PATH의 맨 앞 폴더부터 시작해 해당 폴더에 사용자가 요청한 프로그램이 있는지 확인한다. 만약 있다면 해당 프로그램을 실행한다.


환경 변수 확인 및 변경

환경 변수 확인(env)

envenviron의 약자로 현재 환경 변수를 출력하거나 새로운 환경 변수를 설정한 후, 해당 환경 변수로 프로그램을 실행하는데 사용한다.

env [옵션] [NAME=VALUE(환경 변수)] [명령어] 으로 사용하며 옵션은 다음과 같다.

옵션 기능
-i 현재 환경 변수 설정을 모두 무시하고 지정한 환경 변수 값을 따름
-u 지정된 변수의 설정 값 해제

env 만 사용할 경우 설정된 환경 변수를 모두 보여준다.

env -i [env1] [env2] ... [env n] [파일 이름] 을 사용할 경우 설정한 환경변수만 사용한다.