글 작성자: BasicLike

1. 리눅스 환경 변수(Environment Variable)란 무엇인가?

더보기

1.1 왜 필요한가?

프로그램은 실행될 때 여러 가지 정보를 필요로 합니다.

  • 사용자의 홈 디렉토리는 어디인가?
  • 현재 로그인한 사용자는 누구인가?
  • 어떤 언어(로케일)를 사용할 것인가?
  • 명령어를 입력했을 때 어느 경로에서 실행 파일을 찾을 것인가?

이러한 정보는 프로그램 실행 환경에 따라 달라질 수 있기 때문에, 코드에 직접 고정하지 않고 환경 변수로 분리하여 관리합니다.

 

 

 

 

1.2 대표적인 환경 변수

  • HOME : 사용자 홈 디렉토리
  • USER : 현재 사용자 이름
  • SHELL : 사용 중인 셸
  • LANG : 언어 및 지역 설정
  • PATH : 실행 파일을 찾는 경로 목록

이처럼 PATH도 여러 환경 변수 중 하나입니다.

 

 

 

 

1.3 python3.11 명령어 실행 예시

사용자가 터미널에 python3.11을 입력했다고 가정해 보겠습니다.

탐색 순서

1. /usr/local/binpython3.11 없음 → 다음

2. /usr/binpython3.11 없음 → 다음

3. /home/user/binpython3.11 존재 → 실행

즉, 리눅스는 여러 파이썬 버전 중에서 “더 최신 버전”을 고르는 것이 아니라,
PATH 순서대로 확인하다가 처음 발견한 같은 이름의 실행 파일을 실행합니다.

  • 사용자가 터미널에 명령어를 입력하면, 셸은 PATH에 등록된 디렉토리를 순서대로 확인합니다.
  • 이때 셸은 파이썬 버전을 비교하지 않습니다.
  • 오직 같은 이름의 실행 파일이 존재하는지만 확인합니다.
  • PATH 순서에서 가장 먼저 발견된 실행 파일이 바로 실행됩니다.

 

 

 

 

1.4 주요 경로 의미

경로 의미
/usr/bin apt 등 패키지 관리자를 통해 설치된 시스템 기본 실행 파일이 주로 위치하는 경로입니다.
/usr/local/bin 관리자 또는 사용자가 수동으로 설치한 프로그램이 자주 위치하는 경로입니다.
/home/user/bin 사용자가 직접 추가하는 개인 실행 파일 경로이며, PATH에 포함되어 탐색 대상이 됩니다.

 

 

 

 

1.5 정리

PATH는 리눅스가 실행 파일을 찾는 우선순위 목록입니다.
따라서 같은 이름의 실행 파일이 여러 곳에 있더라도, PATH에서 먼저 발견된 파일이 실행됩니다.

 

 

2. 왜 리눅스에서 환경 변수를 배워야 할까?

더보기

2.1 핵심 요약

리눅스는 윈도우보다 터미널 중심의 개발 환경을 더 자주 사용합니다.

 

그래서 개발자는 단순히 프로그램을 설치하는 것을 넘어서,
현재 어떤 실행 파일이 실제로 실행되는지, 어떤 경로가 먼저 적용되는지를 이해해야 합니다.

 

예를 들어 같은 PC에 Python이 여러 버전 설치되어 있다면,
사용자가 python3를 입력했을 때 실제로 어떤 Python이 실행되는지는 PATH 환경 변수에 따라 달라집니다.

 

즉, 리눅스에서 환경 변수를 이해한다는 것은
터미널이 어떤 기준으로 프로그램을 실행하는지 이해하는 것과 같습니다.

 

 

 

 

2.2 PATH 환경 변수란 무엇인가?

PATH는 리눅스에서 가장 자주 사용하는 환경 변수 중 하나입니다.

 

사용자가 터미널에 명령어를 입력하면,
셸은 PATH에 등록된 디렉터리들을 앞에서부터 차례대로 확인하여 실행 파일을 찾습니다.

 

즉, PATH는 “명령어를 입력했을 때 어디를 먼저 찾을 것인가”를 정해 둔 목록입니다.

 

 

예시

python3 --version

위 명령을 입력하면, 셸은 PATH에 들어 있는 여러 디렉터리 중에서 python3 실행 파일을 찾아 실행합니다.

 

PATH 확인

echo $PATH

출력 결과는 보통 콜론(:)으로 구분된 여러 디렉터리 목록입니다.

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

이 경우 셸은 /usr/local/bin부터 먼저 찾고, 그다음 /usr/bin, 그다음 /bin 순서로 실행 파일을 확인합니다.

 

 

 

 

2.3 실제 실행되는 프로그램 경로 확인

리눅스에서는 which 명령어로 현재 실행되는 프로그램의 경로를 확인할 수 있습니다.

which python3
which pip3
which bash

예를 들어 아래처럼 출력될 수 있습니다.

/usr/bin/python3
/usr/bin/pip3
/bin/bash

이 결과는 현재 셸이 PATH를 참고해 실제로 어떤 실행 파일을 사용하고 있는지 보여줍니다.

윈도우의 where python과 비슷한 역할을 하는 명령어가, 리눅스에서는 which python3입니다.

 

 

 

 

2.4 환경 변수 조회와 사용 예시

리눅스에서는 $변수이름 형태로 환경 변수 값을 확인할 수 있습니다.

echo $HOME
echo $USER
echo $SHELL
echo $PATH
  • HOME : 현재 사용자의 홈 디렉터리
  • USER : 현재 로그인한 사용자 이름
  • SHELL : 현재 사용 중인 셸
  • PATH : 명령어 검색 경로 목록

환경 변수 전체를 보고 싶다면 아래 명령어를 사용할 수 있습니다.

printenv

또는

env

위 명령어들은 현재 셸 세션에서 사용 가능한 환경 변수 목록을 출력합니다.

 

 

 

 

2.5 환경 변수 설정 방법

A. 현재 터미널 세션에서만 임시로 설정

export MY_NAME="linux_user"

이렇게 설정하면 현재 터미널 세션에서만 MY_NAME 환경 변수를 사용할 수 있습니다.

echo $MY_NAME

하지만 터미널을 닫으면 이 값은 사라집니다.

 

 

B. PATH에 새 경로 임시 추가

export PATH=$PATH:/home/user/mytool/bin

이 명령은 기존 PATH 뒤에 새로운 디렉터리를 추가합니다.

그러면 셸은 기존 경로들에 이어 /home/user/mytool/bin도 실행 파일 검색 대상으로 사용하게 됩니다.

 

 

C. 영구적으로 설정

리눅스에서는 보통 아래 파일들에 환경 변수 설정을 저장합니다.

  • ~/.bashrc
  • ~/.profile
  • ~/.zshrc

 

예를 들어 Bash 사용자는 ~/.bashrc에 다음과 같이 추가할 수 있습니다.

export PATH=$PATH:/home/user/mytool/bin
export MY_NAME="linux_user"

파일 수정 후에는 아래 명령어로 다시 적용할 수 있습니다.

source ~/.bashrc

이제 새 터미널을 열어도 해당 환경 변수가 계속 유지됩니다.

 

환경 변수는 현재 세션에만 임시로 적용할 수도 있고, 설정 파일에 저장해 영구적으로 유지할 수도 있습니다.

 

3. Python 학습과 연결해서 이해하기

더보기

3.1 왜 Python 학습에서 가상환경을 더 많이 사용할까?

Python 학습과 실무에서는 운영체제와 관계없이, 가상환경을 기반으로 프로젝트를 분리해서 사용하는 방식이 더 일반적입니다. 그 이유는 프로젝트마다 필요한 Python 버전과 패키지 구성이 다를 수 있기 때문입니다.

  • 프로젝트 A는 특정 버전의 라이브러리를 요구할 수 있습니다.
  • 프로젝트 B는 다른 버전의 라이브러리를 필요로 할 수 있습니다.
  • 전역 환경을 계속 수정하면 서로 충돌하거나 관리가 복잡해질 수 있습니다.

특히 리눅스에서는 전역 Python이 시스템 도구나 운영 환경과 연결되어 있을 수 있으므로,
전역 Python 경로나 PATH를 함부로 변경하지 않는 것이 더 안전합니다.

핵심 전략

구분방식
전역 Python 가능하면 건드리지 않음
프로젝트 Python 가상환경으로 분리해서 사용

 

 

 

 

3.2 가상환경을 활성화하면 무엇이 달라질까?

가상환경을 활성화하면 현재 셸이 사용하는 python과 pip의 경로가 달라집니다.

python3 -m venv test_venv
source test_venv/bin/activate
which python
which pip

위 과정을 거치면 셸은 전역 Python보다 먼저,test_venv 안에 있는 Python과 pip를 사용하게 됩니다.

내부적으로는 현재 셸 세션의 PATH 우선순위가 바뀌어, 가상환경 안의 실행 파일이 먼저 선택되는 구조입니다.

/test_venv/bin : 기존 PATH

즉, 가상환경은 시스템 Python은 그대로 유지한 채,
현재 프로젝트에서만 별도의 Python과 pip를 먼저 사용하게 만드는 방식이라고 이해할 수 있습니다.

 

 

 

 

3.3  리눅스는 전역 Python을 함부로 바꾸면 위험할까?

리눅스에서는 전역 Python(PATH)을 함부로 변경하지 않는 것이 좋습니다.

이유는 단순한 편의성 문제가 아니라, 시스템 안정성과 연결될 수 있기 때문입니다.

  • 시스템 도구나 스크립트가 특정 Python 환경을 기대할 수 있습니다.
  • 사용자 정의 Python 경로가 앞에 오면 예상과 다른 Python이 먼저 실행될 수 있습니다.
  • 이 문제는 프로젝트 하나가 아니라 시스템 전체 동작에 영향을 줄 수도 있습니다.
export PATH=/custom/python:$PATH

위처럼 전역 PATH 순서를 크게 바꾸면, 사용자가 의도한 Python뿐 아니라 다른 명령 실행 흐름에도 영향을 줄 수 있습니다.

가상환경 문제는 보통 현재 프로젝트 범위에 머물지만,
전역 PATH 문제는 시스템 전체 동작으로 확대될 수 있습니다.