환경 변수 입문
기본 변수를 이해했으니 이제 환경 변수를 살펴보겠습니다. 환경 변수는 쉘의 모든 자식 프로세스에서 사용할 수 있는 변수입니다. 즉, 해당 쉘에서 실행되는 스크립트나 프로그램들이 이 변수에 접근할 수 있다는 뜻입니다.
-
현재 설정된 모든 환경 변수를 확인하려면 env 명령어를 사용합니다.
env
변수 목록이 길게 나열될 것입니다. 지금 당장 모든 내용을 이해하지 못해도 괜찮습니다. 중요한 변수들은 나중에 자세히 다룰 예정입니다.
-
가장 중요한 환경 변수 중 하나는 PATH입니다. 내용을 확인해 봅시다.
echo $PATH
PATH 변수는 시스템이 실행 프로그램을 찾을 때 검색하는 디렉토리 목록을 담고 있습니다. 각 디렉토리는 콜론 (:) 으로 구분됩니다.
-
이제 직접 환경 변수를 만들어 보겠습니다. 환경 변수를 생성할 때는 export 명령어를 사용합니다.
export MY_ENV_VAR="This is an environment variable"
export 명령어는 해당 변수를 자식 프로세스에서도 사용할 수 있게 만듭니다. 이것이 일반 쉘 변수와 환경 변수의 핵심적인 차이점입니다.
-
차이점을 확인하기 위해, 일반 쉘 변수와 환경 변수 모두에 접근을 시도하는 쉘 스크립트를 만들어 보겠습니다. 여러 줄의 내용을 파일에 쓸 때 자주 사용하는 cat 명령어와 heredoc 방식을 사용합니다.
cat << 'EOF' > test_vars.sh
#!/bin/bash
echo "Shell variable: $my_var"
echo "Environment variable: $MY_ENV_VAR"
EOF
스크립트에 실행 권한을 부여합니다.
chmod +x test_vars.sh
이제 스크립트를 실행합니다.
./test_vars.sh
환경 변수인 MY_ENV_VAR는 정상적으로 출력되지만, 쉘 변수인 my_var는 출력되지 않는 것을 확인할 수 있습니다. 이는 my_var가 내보내기 (export) 되지 않았기 때문에 자식 프로세스 (이 스크립트) 가 해당 변수의 존재를 알지 못하기 때문입니다.
-
MY_ENV_VAR가 환경 변수로 등록되었는지 다시 확인하려면 env 명령어를 사용하되, grep으로 결과를 필터링해 봅니다.
env | grep MY_ENV_VAR
출력 결과에서 새로 만든 변수를 확인할 수 있습니다.
-
환경 변수의 값을 직접 확인할 수도 있습니다.
echo $MY_ENV_VAR
훌륭합니다! 첫 환경 변수를 생성하고 쉘 변수와의 차이점을 직접 확인했습니다. 핵심은 export로 생성된 환경 변수는 자식 프로세스에서 사용할 수 있지만, 일반 쉘 변수는 그렇지 않다는 점입니다.
환경 변수와 쉘 변수는 각각 고유한 범위를 가집니다. 변수를 내보내면 (예: export MY_ENV_VAR="something"), 해당 쉘에서 시작된 모든 하위 프로세스 (예: 해당 쉘에서 실행한 스크립트) 에서 사용할 수 있습니다. 하지만 완전히 별개의 쉘 세션을 열면, .zshrc나 .bashrc 같은 설정 파일에 명시적으로 설정하지 않는 한 현재 쉘의 변수를 상속받지 않습니다.
요약하자면 다음과 같습니다.
- 일반 쉘 변수는 현재 세션 내부에서만 보입니다.
- 내보낸 (Exported) 변수는 해당 세션에서 실행된 자식 프로세스에서 사용할 수 있습니다.
- 쉘 설정 파일 (예:
.zshrc) 에 설정된 변수는 해당 쉘의 모든 새로운 세션에 적용됩니다.
각 프로세스는 자신만의 환경을 유지하므로 다른 사용자나 다른 쉘의 변수를 직접 읽을 수는 없습니다. 새 쉘을 시작하면 부모 쉘의 내보낸 변수 복사본은 받지만, export 없이 설정된 변수는 전달받지 못합니다.
다음 단계에서는 환경 변수를 영구적으로 설정하는 방법을 배우겠습니다.
변수 지속성 수준
이러한 변수 유형과 지속성 수준의 차이를 시각화하면 다음과 같습니다.
graph LR
A["리눅스 변수 유형"] --> B["쉘 변수"]
A --> C["환경 변수"]
A --> D["영구 변수"]
B --> B1["세션 전용"]
B --> B2["상속 안 됨"]
B --> B3["종료 시 소멸"]
C --> C1["세션 범위"]
C --> C2["자식 프로세스 접근 가능"]
C --> C3["종료 시 소멸"]
D --> D1["모든 세션 적용"]
D --> D2["자식 프로세스 접근 가능"]
D --> D3["지속 유지"]
B1 --> E1["my_var='value'"]
C2 --> E2["export VAR='value'"]
D3 --> E3["~/.zshrc 파일 설정"]
style B fill:#ffebee
style C fill:#fff3e0
style D fill:#e8f5e8
이 다이어그램은 변수 지속성의 세 단계를 보여줍니다. 빠른 참조를 위한 요약 표입니다.
| 변수 유형 |
범위 |
자식 프로세스 접근 |
지속성 |
문법 예시 |
| 쉘 변수 |
현재 세션 전용 |
아니오 |
종료 시 소멸 |
my_var='value' |
| 환경 변수 |
현재 세션 |
예 |
종료 시 소멸 |
export VAR='value' |
| 영구 변수 |
모든 새 세션 |
예 |
종료 후에도 유지 |
~/.zshrc 파일에 작성 |
이 세 가지 수준을 이해하는 것은 효율적인 리눅스 시스템 관리를 위해 필수적이며, 상황에 맞는 적절한 접근 방식을 선택하는 데 도움이 됩니다.